Commit Graph

2022 Commits

Author SHA1 Message Date
Dave
72741f7ea2 Merge story 83: remove active work list from agents panel
Resolves conflict in AgentPanel.test.tsx (duplicate RosterBadge tests
from story 81 merge).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 16:07:19 +00:00
Dave
202789f80a Merge story 82: shift+enter inserts newline instead of sending in chat input
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 16:06:24 +00:00
Dave
8c2b6ee02c Merge story 81: agent roster badges show availability state
Green dot and styling for idle agents, blue pulsing dot for active.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 16:06:16 +00:00
Dave
016ad7f359 story-kit: accept 83_story_remove_active_work_list_from_agents_panel 2026-02-23 16:04:18 +00:00
Dave
12c912e247 story-kit: remove 80_story_remove_model_apikey_and_rate_limit_notifications_from_chat_ui 2026-02-23 16:04:08 +00:00
Dave
29eff51182 story-kit: start 83_story_remove_active_work_list_from_agents_panel 2026-02-23 16:04:02 +00:00
Dave
c42be5d12c story-kit: queue 83_story_remove_active_work_list_from_agents_panel for merge 2026-02-23 16:03:50 +00:00
Dave
0e8451c412 story-kit: accept 62_story_allow_frontend_ui_to_accept_permissions_requests 2026-02-23 16:01:43 +00:00
Dave
214ddcd7af story-kit: merge 62_story_allow_frontend_ui_to_accept_permissions_requests 2026-02-23 16:01:25 +00:00
Dave
6962e92f0c fix: resolve merge conflict in claude_code.rs
Keep master's quiet system/rate_limit_event handlers while preserving
the story-62 permission_request handler (the core feature).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 16:01:22 +00:00
Dave
1a73b88d85 story-83: remove active work list from Agents panel
Remove the "agents-at-work" list section from AgentPanel. The roster
badges with flying lozenge animations already convey which agents are
active, making the redundant list unnecessary.

- Remove StatusBadge, DiffCommand, EditorCommand components
- Remove expandedKey, logEndRefs, fade-timer state and effects
- Remove handleStop (no more Stop buttons)
- Keep agents state + SSE subscriptions (roster badges still need it)
- Delete diff-command and fade-out tests (feature removed)
- Add test asserting no agent-entry divs are rendered

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 16:00:14 +00:00
Dave
026ba3cbcf story-kit: queue 62_story_allow_frontend_ui_to_accept_permissions_requests for merge 2026-02-23 15:59:32 +00:00
Dave
cbc1c8819c story-kit: accept 82_story_shift_enter_inserts_newline_instead_of_sending_in_chat_input 2026-02-23 15:59:21 +00:00
Dave
76e5c40134 story-kit: merge 82_story_shift_enter_inserts_newline_instead_of_sending_in_chat_input 2026-02-23 15:59:01 +00:00
Dave
0a5fcd8db9 story-kit: queue 82_story_shift_enter_inserts_newline_instead_of_sending_in_chat_input for merge 2026-02-23 15:58:44 +00:00
Dave
a2409c2ace story-kit: queue 82_story_shift_enter_inserts_newline_instead_of_sending_in_chat_input for QA 2026-02-23 15:57:21 +00:00
Dave
17e9599334 feat: Shift+Enter inserts newline in chat input (story 82)
Change chat input from <input> to <textarea> so multi-line messages
are supported. Enter (without Shift) still sends; Shift+Enter inserts
a newline via the native textarea behavior.

- Replace <input> with <textarea rows={1}> in Chat.tsx
- Update onKeyDown: guard sendMessage() with !e.shiftKey check
  and call e.preventDefault() to suppress the default newline on Enter
- Update inputRef type from HTMLInputElement to HTMLTextAreaElement
- Add style props: resize:none, overflowY:auto, fontFamily:inherit
- Add 3 new Vitest tests covering all 3 acceptance criteria (AC1-AC3)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 15:56:44 +00:00
Dave
3c5dbf7050 story-kit: queue 62_story_allow_frontend_ui_to_accept_permissions_requests for QA 2026-02-23 15:56:35 +00:00
Dave
e0bc4bdc90 feat(story-62): add permission request prompts to web UI
When Claude Code requires user approval before executing a tool (file
writes, commits, etc.) the agent sends a permission_request message
over the WebSocket.  The web UI now intercepts that message, surfaces a
modal dialog showing the tool name and input, and lets the user approve
or deny.  The decision is sent back as a permission_response, allowing
the agent to continue or adjust its approach.

Backend changes:
- claude_code.rs: parse "permission_request" NDJSON events from the PTY,
  block the PTY thread via a sync channel, and write the user's decision
  back to the PTY stdin as a JSON permission_response.
- chat.rs: thread an optional UnboundedSender<PermissionReqMsg> through
  to the provider.
- ws.rs: create a permission-request channel, forward requests to the
  client, collect responses via a pending-perms map, and interleave all
  of this with the active chat session using tokio::select!.

Frontend changes:
- client.ts: add permission_request to WsResponse, permission_response
  to WsRequest, onPermissionRequest handler to ChatWebSocket.connect(),
  and sendPermissionResponse() method.
- types.ts: mirror the same type additions.
- Chat.tsx: add permissionRequest state, wire onPermissionRequest
  callback, and render an approval modal with tool name, input context,
  Approve and Deny buttons.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 15:56:01 +00:00
Dave
d19a548b96 story-kit: start 83_story_remove_active_work_list_from_agents_panel 2026-02-23 15:53:48 +00:00
Dave
f380a41fce story-kit: create 83_story_remove_active_work_list_from_agents_panel 2026-02-23 15:53:29 +00:00
Dave
4294b48af0 story-kit: remove 66_spike_pipeline_stage_state_machine 2026-02-23 15:52:02 +00:00
Dave
980b7f880a story-kit: start 82_story_shift_enter_inserts_newline_instead_of_sending_in_chat_input 2026-02-23 15:50:26 +00:00
Dave
3a0004d212 story-kit: create 82_story_shift_enter_inserts_newline_instead_of_sending_in_chat_input 2026-02-23 15:50:01 +00:00
Dave
8a4914e6b2 story-kit: accept 81_story_agent_roster_badges_show_availability_state 2026-02-23 15:47:41 +00:00
Dave
285b63ec66 story-kit: merge 81_story_agent_roster_badges_show_availability_state 2026-02-23 15:47:28 +00:00
Dave
fe064c1b99 story-kit: queue 81_story_agent_roster_badges_show_availability_state for merge 2026-02-23 15:47:14 +00:00
Dave
b62ccc9573 story-kit: queue 81_story_agent_roster_badges_show_availability_state for QA 2026-02-23 15:44:03 +00:00
Dave
0ef5e99d1b feat(story-81): agent roster badges show availability state with green idle styling
- Add data-testid="roster-dot-{name}" to both active and idle dot spans for testability
- Change idle badge from grey (#888, #555, #333) to green (#3fb950, #3fb95015, #3fb95040)
- Update idle label from "idle" to "available" to reinforce positive availability signal
- Update tooltip from "— idle" to "— available" for consistency
- Active/running agents retain blue (#58a6ff) pulsing dot styling unchanged
- Add 4 new Vitest tests covering green idle dot, green badge styling, blue active dot, and blue active badge

Closes story 81: Agent roster badges show availability state

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 15:43:25 +00:00
Dave
2386484c49 story-kit: start 81_story_agent_roster_badges_show_availability_state 2026-02-23 15:40:11 +00:00
Dave
2cc5907501 story-kit: start 81_story_agent_roster_badges_show_availability_state 2026-02-23 15:37:40 +00:00
Dave
db60ed0d65 story-kit: create 81_story_agent_roster_badges_show_availability_state 2026-02-23 15:37:30 +00:00
Dave
be3db53524 story-kit: accept 80_story_remove_model_apikey_and_rate_limit_notifications_from_chat_ui 2026-02-23 15:36:25 +00:00
Dave
8133ef2847 story-kit: queue 80_story_remove_model_apikey_and_rate_limit_notifications_from_chat_ui for merge 2026-02-23 15:36:09 +00:00
Dave
42a47a2645 story-kit: queue 80_story_remove_model_apikey_and_rate_limit_notifications_from_chat_ui for merge 2026-02-23 15:36:01 +00:00
Dave
6afad0d10b story-kit: start 62_story_allow_frontend_ui_to_accept_permissions_requests 2026-02-23 15:34:56 +00:00
Dave
5e33a0c0b3 story-kit: create 62_story_allow_frontend_ui_to_accept_permissions_requests 2026-02-23 15:34:34 +00:00
Dave
377b8144a9 story-kit: accept 79_story_agents_panel_skips_archived_work_on_startup 2026-02-23 15:31:55 +00:00
Dave
c76f0b100c story-kit: merge 79_story_agents_panel_skips_archived_work_on_startup 2026-02-23 15:31:38 +00:00
Dave
e118c6240f story-kit: queue 79_story_agents_panel_skips_archived_work_on_startup for merge 2026-02-23 15:31:25 +00:00
Dave
722a63949c story-80: approve test plan
Updates test_plan status to approved in the story file.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 15:31:23 +00:00
Dave
42d520fc80 story-kit: remove 58_story_live_agent_panel_updates 2026-02-23 15:30:37 +00:00
Dave
2f09ce2584 story-kit: queue 80_story_remove_model_apikey_and_rate_limit_notifications_from_chat_ui for QA 2026-02-23 15:29:59 +00:00
Dave
2833cbcda9 story-80: remove model/apiKey and rate limit notifications from chat UI
Suppresses the noisy system-init notification '[model | apiKey: source]'
and rate limit notifications that were being streamed into the chat UI
from the claude_code provider. Normal chat functionality is unaffected.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 15:29:41 +00:00
Dave
1d011d9041 story-kit: queue 79_story_agents_panel_skips_archived_work_on_startup for QA 2026-02-23 15:27:51 +00:00
Dave
de0f06dd4d story-kit: start 79_story_agents_panel_skips_archived_work_on_startup 2026-02-23 15:27:14 +00:00
Dave
e8153eabfa story-kit: start 80_story_remove_model_apikey_and_rate_limit_notifications_from_chat_ui 2026-02-23 15:26:34 +00:00
Dave
90936173ce story-kit: create 80_story_remove_model_apikey_and_rate_limit_notifications_from_chat_ui 2026-02-23 15:26:20 +00:00
Dave
7e8d0573ce story-kit: remove 76_story_story_with_colon_testing_the_fix 2026-02-23 15:20:13 +00:00
Dave
4e418f806c story-kit: start 79_story_agents_panel_skips_archived_work_on_startup 2026-02-23 15:19:29 +00:00