feat(skills): add SkillScriptLoader, handler types, and applySkillHandlers#325
Closed
EmmittJ wants to merge 3 commits intobradygaster:mainfrom
Closed
feat(skills): add SkillScriptLoader, handler types, and applySkillHandlers#325EmmittJ wants to merge 3 commits intobradygaster:mainfrom
EmmittJ wants to merge 3 commits intobradygaster:mainfrom
Conversation
Ab3y
pushed a commit
to Ab3y/squad
that referenced
this pull request
Mar 10, 2026
Closes bradygaster#325 Replaces hard-coded 120_000ms timeout with TIMEOUTS.SESSION_RESPONSE_MS (env: SQUAD_SESSION_TIMEOUT_MS, default 10 min). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Ab3y
pushed a commit
to Ab3y/squad
that referenced
this pull request
Mar 10, 2026
…etry 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>
Ab3y
pushed a commit
to Ab3y/squad
that referenced
this pull request
Mar 10, 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 launch Session: 2026-02-23T2228-phase3-launch Phase 2 complete with P1 UX polish (PR bradygaster#356 merged). Phase 3 Wave 1 launched: Cheritto (bradygaster#335), McManus (bradygaster#338), Nate (bradygaster#339). Changes: - Session log: 2026-02-23T2228-phase3-launch.md - Merged decision: P1 UX polish patterns → decisions.md - Deleted inbox file: cheritto-p1-ux-polish.md Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * style: copy polish — human, fun, action-oriented (closes bradygaster#338) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: rich progress indicators for agent work (closes bradygaster#335) - AgentPanel: rich status line with (working/streaming, elapsed) — activity hint - MessageStream: activity feed showing per-agent actions (📋 Keaton is reading file...) - AgentSession type: added activityHint field for per-agent activity tracking - SessionRegistry: updateActivityHint() method for pipeline integration - App.tsx: agentActivities state + setAgentActivity in ShellApi - shell/index.ts: wires tool_call events into per-agent activity hints - 11 new tests in test/repl-ux.test.ts section 9 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: update cheritto history + decision doc for bradygaster#335 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Ab3y
pushed a commit
to Ab3y/squad
that referenced
this pull request
Mar 10, 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> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Ab3y
pushed a commit
to Ab3y/squad
that referenced
this pull request
Mar 10, 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 launch Session: 2026-02-23T2228-phase3-launch Phase 2 complete with P1 UX polish (PR bradygaster#356 merged). Phase 3 Wave 1 launched: Cheritto (bradygaster#335), McManus (bradygaster#338), Nate (bradygaster#339). Changes: - Session log: 2026-02-23T2228-phase3-launch.md - Merged decision: P1 UX polish patterns → decisions.md - Deleted inbox file: cheritto-p1-ux-polish.md Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * style: copy polish — human, fun, action-oriented (closes bradygaster#338) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: accessibility hardening and guidelines (closes bradygaster#339) - NO_COLOR/TERM=dumb compliance across all shell components - isNoColor() utility in terminal.ts with noColor in TerminalCapabilities - AgentPanel: static dot, [Active]/[Error] text labels in monochrome - ThinkingIndicator: static dots, no color cycling, emoji prefix - InputPrompt: static [working...], bold cursor - MessageStream/App: all color props gated on isNoColor() - docs/accessibility.md: keyboard shortcuts, NO_COLOR matrix, contrast guide - Decision record: .squad/decisions/inbox/nate-a11y-hardening.md Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Ab3y
pushed a commit
to Ab3y/squad
that referenced
this pull request
Mar 10, 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> * feat: terminal adaptivity 40-120 col range (closes bradygaster#336) - Add useTerminalWidth() hook and getTerminalWidth() to terminal.ts - AgentPanel: compact single-line layout at ≤60 cols, hint truncation at <100 - App.tsx: welcome banner scales from minimal (≤60) to full (≥100) - InputPrompt: prompt shrinks to 'sq>' at narrow widths (<60) - MessageStream: separator uses reactive terminal width - commands.ts: /help shows compact single-column at <80 cols Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Ab3y
pushed a commit
to Ab3y/squad
that referenced
this pull request
Mar 10, 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>
Ab3y
pushed a commit
to Ab3y/squad
that referenced
this pull request
Mar 10, 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): Epic bradygaster#323 complete — all phases shipped 🎉 All 3 phases delivered: - Phase 1 (Testing Wave): 6 issues closed - Phase 2 (Improvement): 6 issues closed - Phase 3 (Breathtaking): 7 issues closed - 17 PRs merged, 19 issues closed total Session log: 2026-02-23T2320-epic-complete.md Decisions merged from inbox: P2 UX Polish, first-run wow moment Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * hostile QA: end-to-end quality assessment — 10 findings, 4 HIGH severity Candid assessment requested by Brady. Traced every code path in cli-entry.ts, shell/index.ts, shell/commands.ts, App.tsx, coordinator.ts, spawn.ts, and the SDK adapter client. Key findings: - Dead sessions never evicted from agentSessions Map after connection drop - No React ErrorBoundary — any render throw kills the shell - Nasty-inputs corpus (95 strings) is never imported by any test - No SIGTERM handler in interactive shell - MemoryManager exported but never instantiated (dead code) - Single streaming content slot clobbers multi-agent output - User input silently dropped during processing (no type-ahead buffer) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): quality review findings — 7 issues filed Quality audit complete: 5 agents assessed CLI across testing, coverage, stability, accessibility, UX. Results: 4 P0 blockers (bradygaster#365–bradygaster#368), 3 P1 items (bradygaster#369–bradygaster#371). Blocking: Waingro dead sessions, ErrorBoundary, dropped input; Marquez help text consistency. Changes: - Logged session summary to .squad/log/2026-02-24T0205-quality-review-complete.md - Updated .squad/identity/now.md with quality review findings and new issue numbers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): merge decision — Marquez UX audit findings Quality assessment merged from inbox (Grade B): 11 improvements (3 P0, 4 P1, 4 P2). help text, stub commands, vocabulary, separators, roster. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): test sprint launch Session: 2026-02-24T0210-test-sprint Changes: - Logged test sprint: 5 agents, 7+ issues - Branches: P0 fixes, stale tests, E2E, hostile/SDK, A11y Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test: E2E integration tests for REPL and multi-agent coordination (closes bradygaster#372, closes bradygaster#373) Adds 15 integration tests covering the interactive REPL pipeline and multi-agent session coordination — areas that previously had zero end-to-end coverage. Tests: - Full REPL round-trip: user input -> parseInput -> dispatch -> response render - @agent direct message routing with correct agent targeting - /help and /status slash commands without SDK dispatch - Error recovery: dispatch failure + no-SDK-connected states - Multi-agent session tracking: registration, concurrent status, error cleanup - Fan-out dispatch: concurrent multi-agent with error isolation - Input parsing integration with registered agent lists Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test: hostile input, SDK failure, and stress tests (closes bradygaster#376, closes bradygaster#377, closes bradygaster#378) - Wire 67-string nasty-inputs corpus into parseInput, executeCommand, and MessageStream rendering tests - Add SDK failure scenario tests: ghost response, throws, timeouts, error events, malformed data - Add stress/boundary tests: 1000 messages, rapid dispatch, 1MB inputs, concurrent sessions, MemoryManager limits - 62 new tests across 3 files, all passing Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: update breedan history with E2E integration test session Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Ab3y
pushed a commit
to Ab3y/squad
that referenced
this pull request
Mar 10, 2026
…radygaster#408) * 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): Epic bradygaster#323 complete — all phases shipped 🎉 All 3 phases delivered: - Phase 1 (Testing Wave): 6 issues closed - Phase 2 (Improvement): 6 issues closed - Phase 3 (Breathtaking): 7 issues closed - 17 PRs merged, 19 issues closed total Session log: 2026-02-23T2320-epic-complete.md Decisions merged from inbox: P2 UX Polish, first-run wow moment Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * hostile QA: end-to-end quality assessment — 10 findings, 4 HIGH severity Candid assessment requested by Brady. Traced every code path in cli-entry.ts, shell/index.ts, shell/commands.ts, App.tsx, coordinator.ts, spawn.ts, and the SDK adapter client. Key findings: - Dead sessions never evicted from agentSessions Map after connection drop - No React ErrorBoundary — any render throw kills the shell - Nasty-inputs corpus (95 strings) is never imported by any test - No SIGTERM handler in interactive shell - MemoryManager exported but never instantiated (dead code) - Single streaming content slot clobbers multi-agent output - User input silently dropped during processing (no type-ahead buffer) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): quality review findings — 7 issues filed Quality audit complete: 5 agents assessed CLI across testing, coverage, stability, accessibility, UX. Results: 4 P0 blockers (bradygaster#365–bradygaster#368), 3 P1 items (bradygaster#369–bradygaster#371). Blocking: Waingro dead sessions, ErrorBoundary, dropped input; Marquez help text consistency. Changes: - Logged session summary to .squad/log/2026-02-24T0205-quality-review-complete.md - Updated .squad/identity/now.md with quality review findings and new issue numbers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): merge decision — Marquez UX audit findings Quality assessment merged from inbox (Grade B): 11 improvements (3 P0, 4 P1, 4 P2). help text, stub commands, vocabulary, separators, roster. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): test sprint launch Session: 2026-02-24T0210-test-sprint Changes: - Logged test sprint: 5 agents, 7+ issues - Branches: P0 fixes, stale tests, E2E, hostile/SDK, A11y Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test: add human journey E2E tests for 7 real user scenarios Test the actual human experience, not internal modules. Each describe block maps to a filed GitHub issue and simulates what a real person does when they encounter Squad for the first time and beyond. Journeys tested (39 assertions): 1. I just installed this — squad init creates .squad/, shows ceremony, gives clear next step, writes first-run marker, exits cleanly 2. My first conversation — welcome banner shows agent roster with names/roles/emojis, project description, focus area, first-run ceremony is one-time only 3. I'm waiting and getting anxious — ThinkingIndicator appears immediately, shows elapsed time, activity hints override default, NO_COLOR mode works 4. Something went wrong — friendly error messages with remediation tips, no stack traces leaked, whitespace input handled gracefully 5. I want to talk to a specific agent — @agent routing, case- insensitive matching, comma syntax, unknown names fall to coordinator 6. I'm a power user now — /help, /status, /agents, /history, /quit all return useful output, unknown commands guide to /help 7. I came back the next day — state persists, first-run consumed, team still loaded, focus area survives between sessions Closes bradygaster#383, bradygaster#384, bradygaster#385, bradygaster#386, bradygaster#394, bradygaster#396, bradygaster#398 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Copy polish: warmer, human-centered messages across CLI Every message now feels helpful, not corporate. Changes include: - cli-entry.ts: 'Your AI team, always ready' instead of generic desc - commands.ts: Status output changed from 'Root/Active now' to 'Home/Active' - Help text: 'Check your team' instead of 'Show which squad' - InputPrompt: 'Message or @agent' instead of corporate placeholder - App.tsx: 'Your team is assembled. Let's try:' (warmer tone) - init.ts: 'Your team is assembled' instead of 'ready' - ThinkingIndicator: Dynamic thinking phrases (Processing, Working) - All command help: Casual verbs (Who's here, Fresh screen, Leave) Tests updated to match new output strings. All 125+ CLI tests pass. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Ab3y
pushed a commit
to Ab3y/squad
that referenced
this pull request
Mar 10, 2026
…bradygaster#414) * 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): Epic bradygaster#323 complete — all phases shipped 🎉 All 3 phases delivered: - Phase 1 (Testing Wave): 6 issues closed - Phase 2 (Improvement): 6 issues closed - Phase 3 (Breathtaking): 7 issues closed - 17 PRs merged, 19 issues closed total Session log: 2026-02-23T2320-epic-complete.md Decisions merged from inbox: P2 UX Polish, first-run wow moment Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * hostile QA: end-to-end quality assessment — 10 findings, 4 HIGH severity Candid assessment requested by Brady. Traced every code path in cli-entry.ts, shell/index.ts, shell/commands.ts, App.tsx, coordinator.ts, spawn.ts, and the SDK adapter client. Key findings: - Dead sessions never evicted from agentSessions Map after connection drop - No React ErrorBoundary — any render throw kills the shell - Nasty-inputs corpus (95 strings) is never imported by any test - No SIGTERM handler in interactive shell - MemoryManager exported but never instantiated (dead code) - Single streaming content slot clobbers multi-agent output - User input silently dropped during processing (no type-ahead buffer) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): quality review findings — 7 issues filed Quality audit complete: 5 agents assessed CLI across testing, coverage, stability, accessibility, UX. Results: 4 P0 blockers (bradygaster#365–bradygaster#368), 3 P1 items (bradygaster#369–bradygaster#371). Blocking: Waingro dead sessions, ErrorBoundary, dropped input; Marquez help text consistency. Changes: - Logged session summary to .squad/log/2026-02-24T0205-quality-review-complete.md - Updated .squad/identity/now.md with quality review findings and new issue numbers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): merge decision — Marquez UX audit findings Quality assessment merged from inbox (Grade B): 11 improvements (3 P0, 4 P1, 4 P2). help text, stub commands, vocabulary, separators, roster. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): test sprint launch Session: 2026-02-24T0210-test-sprint Changes: - Logged test sprint: 5 agents, 7+ issues - Branches: P0 fixes, stale tests, E2E, hostile/SDK, A11y Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: product love — first 10 seconds that make you want the next 10 minutes Walked through the full first-time user experience and fixed every moment that wasn't delightful: **\/clear\ actually clears (bradygaster#400)** - Was sending raw ANSI escape as message content (no-op in Ink) - Now resets message array to empty — genuine fresh slate - Added \clear?: boolean\ to CommandResult interface **Natural language routing revealed (bradygaster#402)** - The coordinator auto-routing is the WOW feature — was completely hidden - Welcome banner hints: 'Just type · @agent to direct · /help · Ctrl+C exit' - /help explains: 'Just type naturally — the coordinator routes it' - First-run prompt: adds 'Or just type naturally' hint - Input placeholder: 'Type anything or @agent...' **First-run hint layout (bradygaster#404)** - Was horizontal Box that broke on narrow terminals - Now vertical flexDirection=column with breathing room **Exit message consistency (bradygaster#405)** - Replaced wave emoji with diamond mark (matches P2 emoji removal) **Welcome roster wrapping (bradygaster#407)** - Agents were one dense string that wrapped mid-name - Now individual Ink elements with flex-wrap for clean word-boundary wrapping Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Ab3y
pushed a commit
to Ab3y/squad
that referenced
this pull request
Mar 10, 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): Epic bradygaster#323 complete — all phases shipped 🎉 All 3 phases delivered: - Phase 1 (Testing Wave): 6 issues closed - Phase 2 (Improvement): 6 issues closed - Phase 3 (Breathtaking): 7 issues closed - 17 PRs merged, 19 issues closed total Session log: 2026-02-23T2320-epic-complete.md Decisions merged from inbox: P2 UX Polish, first-run wow moment Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * hostile QA: end-to-end quality assessment — 10 findings, 4 HIGH severity Candid assessment requested by Brady. Traced every code path in cli-entry.ts, shell/index.ts, shell/commands.ts, App.tsx, coordinator.ts, spawn.ts, and the SDK adapter client. Key findings: - Dead sessions never evicted from agentSessions Map after connection drop - No React ErrorBoundary — any render throw kills the shell - Nasty-inputs corpus (95 strings) is never imported by any test - No SIGTERM handler in interactive shell - MemoryManager exported but never instantiated (dead code) - Single streaming content slot clobbers multi-agent output - User input silently dropped during processing (no type-ahead buffer) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): quality review findings — 7 issues filed Quality audit complete: 5 agents assessed CLI across testing, coverage, stability, accessibility, UX. Results: 4 P0 blockers (bradygaster#365–bradygaster#368), 3 P1 items (bradygaster#369–bradygaster#371). Blocking: Waingro dead sessions, ErrorBoundary, dropped input; Marquez help text consistency. Changes: - Logged session summary to .squad/log/2026-02-24T0205-quality-review-complete.md - Updated .squad/identity/now.md with quality review findings and new issue numbers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): merge decision — Marquez UX audit findings Quality assessment merged from inbox (Grade B): 11 improvements (3 P0, 4 P1, 4 P2). help text, stub commands, vocabulary, separators, roster. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): test sprint launch Session: 2026-02-24T0210-test-sprint Changes: - Logged test sprint: 5 agents, 7+ issues - Branches: P0 fixes, stale tests, E2E, hostile/SDK, A11y Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: correct ThinkingIndicator assertion to match component behavior The ThinkingIndicator renders empty string when isThinking=false, not 'No agents active'. Fix the test assertion. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Ab3y
pushed a commit
to Ab3y/squad
that referenced
this pull request
Mar 10, 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): Epic bradygaster#323 complete — all phases shipped 🎉 All 3 phases delivered: - Phase 1 (Testing Wave): 6 issues closed - Phase 2 (Improvement): 6 issues closed - Phase 3 (Breathtaking): 7 issues closed - 17 PRs merged, 19 issues closed total Session log: 2026-02-23T2320-epic-complete.md Decisions merged from inbox: P2 UX Polish, first-run wow moment Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * hostile QA: end-to-end quality assessment — 10 findings, 4 HIGH severity Candid assessment requested by Brady. Traced every code path in cli-entry.ts, shell/index.ts, shell/commands.ts, App.tsx, coordinator.ts, spawn.ts, and the SDK adapter client. Key findings: - Dead sessions never evicted from agentSessions Map after connection drop - No React ErrorBoundary — any render throw kills the shell - Nasty-inputs corpus (95 strings) is never imported by any test - No SIGTERM handler in interactive shell - MemoryManager exported but never instantiated (dead code) - Single streaming content slot clobbers multi-agent output - User input silently dropped during processing (no type-ahead buffer) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): quality review findings — 7 issues filed Quality audit complete: 5 agents assessed CLI across testing, coverage, stability, accessibility, UX. Results: 4 P0 blockers (bradygaster#365–bradygaster#368), 3 P1 items (bradygaster#369–bradygaster#371). Blocking: Waingro dead sessions, ErrorBoundary, dropped input; Marquez help text consistency. Changes: - Logged session summary to .squad/log/2026-02-24T0205-quality-review-complete.md - Updated .squad/identity/now.md with quality review findings and new issue numbers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): merge decision — Marquez UX audit findings Quality assessment merged from inbox (Grade B): 11 improvements (3 P0, 4 P1, 4 P2). help text, stub commands, vocabulary, separators, roster. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): test sprint launch Session: 2026-02-24T0210-test-sprint Changes: - Logged test sprint: 5 agents, 7+ issues - Branches: P0 fixes, stale tests, E2E, hostile/SDK, A11y Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix bradygaster#427: Add immediate shell launch indicator Adds 'Loading Squad shell...' message at start of runShell() to eliminate 2-4 second launch dead air. Message clears once Ink mounts. Users now see feedback within 100ms instead of staring at blank terminal. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Ab3y
pushed a commit
to Ab3y/squad
that referenced
this pull request
Mar 10, 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): Epic bradygaster#323 complete — all phases shipped 🎉 All 3 phases delivered: - Phase 1 (Testing Wave): 6 issues closed - Phase 2 (Improvement): 6 issues closed - Phase 3 (Breathtaking): 7 issues closed - 17 PRs merged, 19 issues closed total Session log: 2026-02-23T2320-epic-complete.md Decisions merged from inbox: P2 UX Polish, first-run wow moment Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * hostile QA: end-to-end quality assessment — 10 findings, 4 HIGH severity Candid assessment requested by Brady. Traced every code path in cli-entry.ts, shell/index.ts, shell/commands.ts, App.tsx, coordinator.ts, spawn.ts, and the SDK adapter client. Key findings: - Dead sessions never evicted from agentSessions Map after connection drop - No React ErrorBoundary — any render throw kills the shell - Nasty-inputs corpus (95 strings) is never imported by any test - No SIGTERM handler in interactive shell - MemoryManager exported but never instantiated (dead code) - Single streaming content slot clobbers multi-agent output - User input silently dropped during processing (no type-ahead buffer) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): quality review findings — 7 issues filed Quality audit complete: 5 agents assessed CLI across testing, coverage, stability, accessibility, UX. Results: 4 P0 blockers (bradygaster#365–bradygaster#368), 3 P1 items (bradygaster#369–bradygaster#371). Blocking: Waingro dead sessions, ErrorBoundary, dropped input; Marquez help text consistency. Changes: - Logged session summary to .squad/log/2026-02-24T0205-quality-review-complete.md - Updated .squad/identity/now.md with quality review findings and new issue numbers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): merge decision — Marquez UX audit findings Quality assessment merged from inbox (Grade B): 11 improvements (3 P0, 4 P1, 4 P2). help text, stub commands, vocabulary, separators, roster. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): test sprint launch Session: 2026-02-24T0210-test-sprint Changes: - Logged test sprint: 5 agents, 7+ issues - Branches: P0 fixes, stale tests, E2E, hostile/SDK, A11y Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix bradygaster#422: Add context to thinking spinner Changed ThinkingIndicator default label from 'Thinking...' to 'Routing to agent...' to give users meaningful feedback during SDK connection and initial routing phases. When activityHint is provided (e.g., 'Keaton thinking...'), it still takes priority. The new default eliminates the 'is it broken?' anxiety during the 3-5 second cold connection wait. Updated tests to reflect new default label. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: Update Marquez history with bradygaster#422 resolution Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix bradygaster#420/bradygaster#425: Add immediate SDK connection feedback Before this fix, the first message sent to the REPL had 2-7 seconds of dead air while createSession() blocked on SDK connection. Users thought the shell was hung. Changes: - Set 'Connecting to SDK...' hint BEFORE createSession() in dispatchToCoordinator - Set 'Connecting to <agent>...' hint BEFORE createSession() in dispatchToAgent - Use setImmediate to give React a tick to render before blocking - Update hint to 'Routing...' or 'thinking...' after connection completes The ThinkingIndicator now displays immediately, eliminating perceived hang. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Ab3y
pushed a commit
to Ab3y/squad
that referenced
this pull request
Mar 10, 2026
…dygaster#437) * 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): Epic bradygaster#323 complete — all phases shipped 🎉 All 3 phases delivered: - Phase 1 (Testing Wave): 6 issues closed - Phase 2 (Improvement): 6 issues closed - Phase 3 (Breathtaking): 7 issues closed - 17 PRs merged, 19 issues closed total Session log: 2026-02-23T2320-epic-complete.md Decisions merged from inbox: P2 UX Polish, first-run wow moment Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * hostile QA: end-to-end quality assessment — 10 findings, 4 HIGH severity Candid assessment requested by Brady. Traced every code path in cli-entry.ts, shell/index.ts, shell/commands.ts, App.tsx, coordinator.ts, spawn.ts, and the SDK adapter client. Key findings: - Dead sessions never evicted from agentSessions Map after connection drop - No React ErrorBoundary — any render throw kills the shell - Nasty-inputs corpus (95 strings) is never imported by any test - No SIGTERM handler in interactive shell - MemoryManager exported but never instantiated (dead code) - Single streaming content slot clobbers multi-agent output - User input silently dropped during processing (no type-ahead buffer) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): quality review findings — 7 issues filed Quality audit complete: 5 agents assessed CLI across testing, coverage, stability, accessibility, UX. Results: 4 P0 blockers (bradygaster#365–bradygaster#368), 3 P1 items (bradygaster#369–bradygaster#371). Blocking: Waingro dead sessions, ErrorBoundary, dropped input; Marquez help text consistency. Changes: - Logged session summary to .squad/log/2026-02-24T0205-quality-review-complete.md - Updated .squad/identity/now.md with quality review findings and new issue numbers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): merge decision — Marquez UX audit findings Quality assessment merged from inbox (Grade B): 11 improvements (3 P0, 4 P1, 4 P2). help text, stub commands, vocabulary, separators, roster. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): test sprint launch Session: 2026-02-24T0210-test-sprint Changes: - Logged test sprint: 5 agents, 7+ issues - Branches: P0 fixes, stale tests, E2E, hostile/SDK, A11y Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix bradygaster#420/bradygaster#425: Add immediate SDK connection feedback Before this fix, the first message sent to the REPL had 2-7 seconds of dead air while createSession() blocked on SDK connection. Users thought the shell was hung. Changes: - Set 'Connecting to SDK...' hint BEFORE createSession() in dispatchToCoordinator - Set 'Connecting to <agent>...' hint BEFORE createSession() in dispatchToAgent - Use setImmediate to give React a tick to render before blocking - Update hint to 'Routing...' or 'thinking...' after connection completes The ThinkingIndicator now displays immediately, eliminating perceived hang. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Ab3y
pushed a commit
to Ab3y/squad
that referenced
this pull request
Mar 10, 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): Epic bradygaster#323 complete — all phases shipped 🎉 All 3 phases delivered: - Phase 1 (Testing Wave): 6 issues closed - Phase 2 (Improvement): 6 issues closed - Phase 3 (Breathtaking): 7 issues closed - 17 PRs merged, 19 issues closed total Session log: 2026-02-23T2320-epic-complete.md Decisions merged from inbox: P2 UX Polish, first-run wow moment Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * hostile QA: end-to-end quality assessment — 10 findings, 4 HIGH severity Candid assessment requested by Brady. Traced every code path in cli-entry.ts, shell/index.ts, shell/commands.ts, App.tsx, coordinator.ts, spawn.ts, and the SDK adapter client. Key findings: - Dead sessions never evicted from agentSessions Map after connection drop - No React ErrorBoundary — any render throw kills the shell - Nasty-inputs corpus (95 strings) is never imported by any test - No SIGTERM handler in interactive shell - MemoryManager exported but never instantiated (dead code) - Single streaming content slot clobbers multi-agent output - User input silently dropped during processing (no type-ahead buffer) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): quality review findings — 7 issues filed Quality audit complete: 5 agents assessed CLI across testing, coverage, stability, accessibility, UX. Results: 4 P0 blockers (bradygaster#365–bradygaster#368), 3 P1 items (bradygaster#369–bradygaster#371). Blocking: Waingro dead sessions, ErrorBoundary, dropped input; Marquez help text consistency. Changes: - Logged session summary to .squad/log/2026-02-24T0205-quality-review-complete.md - Updated .squad/identity/now.md with quality review findings and new issue numbers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): merge decision — Marquez UX audit findings Quality assessment merged from inbox (Grade B): 11 improvements (3 P0, 4 P1, 4 P2). help text, stub commands, vocabulary, separators, roster. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): test sprint launch Session: 2026-02-24T0210-test-sprint Changes: - Logged test sprint: 5 agents, 7+ issues - Branches: P0 fixes, stale tests, E2E, hostile/SDK, A11y Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix bradygaster#432: Show ghost response retry warnings earlier Ghost response retry now shows clear progress: - First retry: 'Empty response detected. Retrying... (attempt 2/4)' - Subsequent retries show current/total: (attempt 3/4), (attempt 4/4) - Final error shows accurate total: 'after 4 attempts' Previously showed confusing counts that didn't match reality. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Ab3y
pushed a commit
to Ab3y/squad
that referenced
this pull request
Mar 10, 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): Epic bradygaster#323 complete — all phases shipped 🎉 All 3 phases delivered: - Phase 1 (Testing Wave): 6 issues closed - Phase 2 (Improvement): 6 issues closed - Phase 3 (Breathtaking): 7 issues closed - 17 PRs merged, 19 issues closed total Session log: 2026-02-23T2320-epic-complete.md Decisions merged from inbox: P2 UX Polish, first-run wow moment Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * hostile QA: end-to-end quality assessment — 10 findings, 4 HIGH severity Candid assessment requested by Brady. Traced every code path in cli-entry.ts, shell/index.ts, shell/commands.ts, App.tsx, coordinator.ts, spawn.ts, and the SDK adapter client. Key findings: - Dead sessions never evicted from agentSessions Map after connection drop - No React ErrorBoundary — any render throw kills the shell - Nasty-inputs corpus (95 strings) is never imported by any test - No SIGTERM handler in interactive shell - MemoryManager exported but never instantiated (dead code) - Single streaming content slot clobbers multi-agent output - User input silently dropped during processing (no type-ahead buffer) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): quality review findings — 7 issues filed Quality audit complete: 5 agents assessed CLI across testing, coverage, stability, accessibility, UX. Results: 4 P0 blockers (bradygaster#365–bradygaster#368), 3 P1 items (bradygaster#369–bradygaster#371). Blocking: Waingro dead sessions, ErrorBoundary, dropped input; Marquez help text consistency. Changes: - Logged session summary to .squad/log/2026-02-24T0205-quality-review-complete.md - Updated .squad/identity/now.md with quality review findings and new issue numbers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): merge decision — Marquez UX audit findings Quality assessment merged from inbox (Grade B): 11 improvements (3 P0, 4 P1, 4 P2). help text, stub commands, vocabulary, separators, roster. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore(squad): test sprint launch Session: 2026-02-24T0210-test-sprint Changes: - Logged test sprint: 5 agents, 7+ issues - Branches: P0 fixes, stale tests, E2E, hostile/SDK, A11y Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: update test assertions to match new UX copy ThinkingIndicator now says 'Routing to agent...' instead of 'Thinking'. Help uses progressive disclosure — /clear moved to /help full. --help first 5 lines now show 'route/agent' instead of 'usage'. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Ab3y
pushed a commit
to Ab3y/squad
that referenced
this pull request
Mar 10, 2026
…reshold) - Cheritto: Archive Feb 23–26 work (bradygaster#325–bradygaster#446) into Core Context, keep recent work visible - Kovash: Archive Feb 23–24 diagnostics & fixes (bradygaster#437–bradygaster#442) into Core Context - Fortier: Archive Feb 21–22 SDK/OTel/Wave 2 work into Core Context All three files now under 12KB threshold. Readability improved for future sessions. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
cf5cb84 to
ab5183a
Compare
…dlers Implements the executable skill handler layer from PR bradygaster#215 design proposal. Inspired by bradygaster#297. - handler-types.ts: full type system for skill-script model (SkillHandler<T>, HandlerLifecycle, concern interfaces, defineHandler() helper) - skill-script-loader.ts: SkillScriptLoader class, resolveSkillPath(), wrapSkillHandler(), CONCERN_TOOL_MAP - applySkillHandlers(): ToolRegistry integration for runtime handler replacement - test/skill-script-loader.test.ts: 33 tests covering load, execute, error paths Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…y scan Drop the hardcoded concern-to-tool-name map. SkillScriptLoader.load() now scans scripts/ for .js files and derives tool names from filenames: create_issue.js -> squad_create_issue. The concern parameter is removed from load() — the scripts/ directory is the source of truth. - Remove CONCERN_TOOL_MAP and Concern/ConcernMap imports - load() now uses readdirSync to discover handler files - Tool name derivation: 'squad_' + stem (e.g. create_issue.js -> squad_create_issue) - Update tests: remove concern arg from all .load() calls, simplify multi-concern test to 'discovers scripts for any naming convention' - Update skill-system-design.md: bidirectional convention docs, directory-driven scanning in loader section and startup sequence, doctor validation updated to remove CONCERN_TOOL_MAP reference All 33 skill-script-loader tests pass. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
ab5183a to
669b7a7
Compare
…th DRY refactor, backendConfig security docs - Add wrapSkillHandlerWithSpan() in skill-script-loader.ts — tools exit the loader already instrumented; closes the 'Known Limitation: OTel bypass' on applySkillHandlers. Uses squad.skill.* span namespace (squad.skill.call / squad.skill.result / squad.skill.error) to distinguish from squad.tool.* spans emitted by defineTool(). - Revert tools/index.ts OTel to original inline form — skills and tools have different signatures and concerns; implementations are intentionally separate. - Update applySkillHandlers JSDoc — no more Known Limitation comment. - Refactor resolveSkillPath — extract realOrLogical() and isContained() inner helpers to remove duplicated realpathSync+fallback and containment logic across the three path branches. - Update backendConfig @warning in skill-script-loader.ts and handler-types.ts — clarifies this config is committed to the repo; do not store credentials, tokens, or secrets here.
14 tasks
Owner
|
Hey @EmmittJ — thank you so much for this work! Your SkillScriptLoader implementation has already been merged to |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements the executable skill handler layer described in PR #215 and referenced in #297. This adds the runtime loading and execution infrastructure that allows
.squad/skills/{name}/directories to contain JS handler scripts that replace built-in tool behavior at runtime.Inspired by #297 (EmmittJ's design in PR #215)
What's included
New:
handler-types.tsFull type system for the skill-script model:
SkillHandler<T>— typed handler interfaceHandlerLifecycle—init()/dispose()hooksSearchConcern,ReadConcern,WriteConcern,ExecuteConcernConcernMap— maps handler concerns to tool namesLoadResult— what the loader returns after processing a skill directorydefineHandler()— typed helper for authoring handlers with full IDE supportNew:
skill-script-loader.tsRuntime loader class:
SkillScriptLoader— scansscripts/for.jsfiles and derives tool names from filenames (create_issue.js→squad_create_issue). No hardcoded concern-to-tool mapping — the directory is the source of truth.resolveSkillPath()— path containment check (guards against directory traversal)wrapSkillHandler()— bridgesSkillHandler→SquadToolHandlersignature, injectsbackendConfigModified:
ToolRegistry.applySkillHandlers()Post-construction method that accepts
SquadTool[]from aLoadResultand replaces matching registered tools with skill-provided handlers.New:
test/skill-script-loader.test.ts33 tests covering: load, execute, error paths, missing scripts directory, invalid exports, lifecycle hooks.
Known limitations
LoadResult.toolsis always[]for now — the loader discovers scripts and derives tool names correctly, butgetToolSchema(toolName)returnsundefinedfor all of them because those tool schemas (squad_create_issueetc.) don't yet exist inToolRegistry. Once the tool schemas land, handlers wire up automatically with no loader changes needed.ToolRegistrybootstrap wiring — callers must constructSkillScriptLoaderwith agetToolSchemacallback and callapplySkillHandlers()afterToolRegistryis initialized. Follow-on integration work needed to wire this intoTrackingConfig→SquadConfig.Testing
All pre-existing tests pass. 33 new tests added for the skill loader.
Co-authored-by: Copilot 223556219+Copilot@users.noreply.github.com