Skip to content

feat: conversation-aware thinking phrases in ThinkingIndicator#362

Merged
bradygaster merged 1 commit intobradygaster:mainfrom
diberry:squad/360-conversation-aware-thinking-indicator
Mar 13, 2026
Merged

feat: conversation-aware thinking phrases in ThinkingIndicator#362
bradygaster merged 1 commit intobradygaster:mainfrom
diberry:squad/360-conversation-aware-thinking-indicator

Conversation

@diberry
Copy link
Copy Markdown
Collaborator

@diberry diberry commented Mar 12, 2026

Summary

Adds conversation-aware thinking phrases to the CLI's ThinkingIndicator. When a session has prior conversation history, the rotating phrases shift from generic ("Routing to agent", "Analyzing your request") to context-aware phrases ("Reviewing conversation context", "Connecting to previous work"), giving users immediate feedback that the system recognizes ongoing conversation.

Closes #360

Motivation

During multi-turn sessions, the [pending] / thinking indicator shows the same generic phrases regardless of conversation state. Users can't tell whether the system treats their message as part of an ongoing thread or a fresh request. Context-aware phrases solve this at the earliest visible moment — before the coordinator even responds.

What Changed

File Change
ThinkingIndicator.tsx Added CONVERSATION_PHRASES array (15 phrases) and hasConversation prop. When true, cycles conversation-aware phrases instead of generic ones.
MessageStream.tsx Added hasConversation to props interface and passes it through to ThinkingIndicator.
App.tsx Derives hasConversation from messages array (true when at least one agent response exists). Passes to MessageStream.

3 files changed, 38 insertions, 4 deletions.

UX Before / After

First message of session (no change)

⠋ Routing to agent... (2s)
⠹ Analyzing your request... (5s)
⠼ Reviewing project context... (8s)

Second+ message — Before

⠋ Routing to agent... (2s)
⠹ Analyzing your request... (5s)
⠼ Reviewing project context... (8s)

Second+ message — After

⠋ Reviewing conversation context... (2s)
⠹ Connecting to previous work... (5s)
⠼ Analyzing how this relates... (8s)

Documentation Impact

  • No documentation changes needed
  • Behavior is self-documenting (users see the phrases in the CLI)

Testing

  • Build: npm run build passes (0 errors)
  • Tests: 3,944 tests passing across 150 files; 2 pre-existing failures unrelated to this change (Docker-dependent aspire test, missing astro CLI for docs build)
  • Manual verification: Start a Squad session, send a message, observe generic phrases. Send a second message, observe conversation-aware phrases.
  • Existing ThinkingIndicator tests continue to pass (they don't set hasConversation, so they exercise the default false path)

Rollback Plan

Revert the single commit — removes CONVERSATION_PHRASES, hasConversation prop, and the derivation in App.tsx.

Independence

This PR is fully independent of PR #361 (coordinator prompt change). They address different layers:

Either can be merged independently with full value.

Review Checklist

  • Conversation-aware phrases feel natural and informative
  • hasConversation derivation is correct (checks for role === 'agent' in messages)
  • Default behavior unchanged for first message (no regression)
  • Props are properly threaded through App → MessageStream → ThinkingIndicator

When prior conversation history exists, the ThinkingIndicator cycles
through context-aware phrases (e.g. 'Reviewing conversation context',
'Connecting to previous work') instead of generic ones. This gives users
immediate feedback that the system recognizes ongoing conversation.

- Add CONVERSATION_PHRASES array to ThinkingIndicator
- Add hasConversation prop threaded through App -> MessageStream -> ThinkingIndicator
- Derive hasConversation from messages array in App.tsx (true when agent responses exist)

Closes bradygaster#360

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@diberry
Copy link
Copy Markdown
Collaborator Author

diberry commented Mar 12, 2026

@bradygaster I like the impact of this one but not sure about the implementation of the const strings.

@bradygaster bradygaster merged commit dc5623b into bradygaster:main Mar 13, 2026
1 check passed
tamirdresher pushed a commit to tamirdresher/squad that referenced this pull request Mar 16, 2026
* chore(squad): Phase 2 launch — thinking feedback, P0 bugs, dual telemetry

Phase 1 complete: 5 issues closed (bradygaster#325, bradygaster#326, bradygaster#327, bradygaster#328, bradygaster#329), 5 PRs merged.
Phase 2 launched with Cheritto (thinking feedback), Hockney (P0 bugs), Saul (dual telemetry).
Decision inbox merged and archived.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore(squad): Phase 2 Wave 1 merged, Wave 2 launched

Session: 2026-02-23T2145-phase2-wave2
Phase 2 Wave 1 complete (PRs bradygaster#351, bradygaster#352, bradygaster#353 merged).
Wave 2 launched: Cheritto on ghost response detection (bradygaster#332), Hockney on error hardening (bradygaster#334).

Changes:
- Session log created: 2026-02-23T2145-phase2-wave2.md
- Merged 3 inbox decisions (Cheritto, Hockney, Saul)
- Deleted inbox files post-merge

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore(squad): Phase 3 Wave 2 merged, final wave launch

Changes:
- Merged 5 decisions from inbox to decisions.md (progress indicators, adaptivity, copy polish, a11y, animations)
- Created session log 2026-02-23T2300-phase3-wave2-merged.md
- Wave 2 PRs bradygaster#360–361 merged with merged conflict resolution
- Wave 3 final launch: Cheritto working on bradygaster#340 P2 and bradygaster#341 wow moment

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* feat: breathtaking first-run wow moment (closes bradygaster#341)

Init ceremony:
- Typewriter reveal of 'Let's build your team' at start
- Staggered landmark reveal (workspace, skills, workflows, identity, agent prompt)
- Celebration: 'Your team is ready. Run squad to start.'
- Respects NO_COLOR (static text, no animation)

First-launch experience:
- .first-run marker written by init, consumed on first shell launch
- Guided prompt: 'Your squad is assembled. Try: @keaton what should we build first?'
- isFirstRun flag in WelcomeData drives conditional rendering

7 new tests in repl-ux.test.ts sections 11 (init ceremony + first-launch)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: update Cheritto history and decision for wow moment (bradygaster#341)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

CLI: conversation-aware thinking phrases in ThinkingIndicator

2 participants