task/task 71 update visual workflow editor for channels - #884
Conversation
lsm
commented
Mar 25, 2026
- feat(tasks): make failed state non-terminal (allow messages + retry)
- fix: pass taskManager as parameter to avoid accessing private field
- fix: align needs_attention handling between RPC and agent-tool paths
- ci: add setup-devproxy composite action with caching to fix CI install failures
- fix(ci): use jq + GITHUB_TOKEN auth to resolve devproxy version in setup action
- fix(ci): inject github.token into composite action step env for API auth
- fix: resolve leftover conflict markers in human-message-routing tests
- ci: simplify CI pipeline by removing intermediate gate jobs and extracting Dev Proxy action
- fix: restore runner.os guard on setup-devproxy, add startup timeout failure
- fix: always set archivedAt when archiving task without active runtime
- fix: correct comment about orphaned worktree cleanup, add review state test
- fix(ci): use nc -z TCP check for devproxy readiness instead of curl
- feat: add draft message auto-save to task view input
- fix: address review feedback on task draft auto-save
- feat: persist task input draft to server-side storage
- fix: address review feedback on task draft RPC handler
- ci: add rpc-task-draft-handlers.test.ts to rpc-1 CI matrix shard
- ci: register rpc-task-draft-handlers.test.ts in validate-online-test-matrix script
- fix: address review feedback on task draft hook (round 2)
- fix: add cancelled flag to loadDraft to prevent cross-task data corruption
- fix(test): mock Bun.spawn in dialog-handlers tests to prevent system folder picker
- test(dialog-handlers): fix platform-agnostic test and cover error-handling path
- fix: address round-7 review feedback on task draft hook
- ci: retrigger CI after base branch corrected to dev
- ci: retrigger CI (rpc-remove-output flaky timeout)
- feat: raise draft/message char limit from 100k to 200k
- fix: correct too-long test repeat count and JSDoc after 200k limit raise
- chore: bump version to 0.7.1 (chore: bump version to 0.7.1 #357)
- fix: skip max feedback iterations limit when task is in review state (fix: skip max feedback iterations limit when task is in review state #358)
- docs: Goal V2 (Mission System) plan for autonomous agent workflows (docs: Goal V2 (Mission System) plan for autonomous agent workflows #322)
- fix: preserve PR data on runtime escalation and show PR in task view header (fix: preserve PR data on runtime escalation and show PR in task view header #360)
- chore: update deps to latest minor versions (except claude agent SDK) (chore: update deps to latest minor versions (except claude agent SDK) #362)
- chore: upgrade @anthropic-ai/claude-agent-sdk from 0.2.55 to 0.2.76 (chore: upgrade @anthropic-ai/claude-agent-sdk from 0.2.55 to 0.2.76 #363)
- feat: order tasks by most recently updated within each status (feat: order tasks by most recently updated within each status #365)
- feat: add GLM-5-Turbo model support (feat: add GLM-5-Turbo model support #367)
- fix: prevent API error bounce loops for all agents in runtime (fix: prevent API error bounce loops for all agents in runtime #366)
- feat: Anthropic-compatible HTTP bridge backed by codex app-server (feat: Anthropic-compatible HTTP bridge backed by codex app-server #339)
- feat: GitHub Copilot as transparent AgentSession backend via embedded Anthropic-compatible server (feat: GitHub Copilot as transparent AgentSession backend via embedded Anthropic-compatible server #340)
- feat: add mission metadata schema and types for Goal V2 (feat: add mission metadata schema and types for Goal V2 #369)
- docs: Goal V2 Mission System -- Autonomous Agent Workflows plan (docs: Goal V2 Mission System -- Autonomous Agent Workflows plan #368)
- fix: show PR link for all task statuses once created (fix: show PR link for all task statuses once created #372)
- Plan: Full first-class anthropic-copilot and anthropic-codex provider support (Plan: Full first-class anthropic-copilot and anthropic-codex provider support #370)
- feat: tighten leader agent tool permissions to read-only context subset (feat: tighten leader agent tool permissions to read-only context subset #371)
- feat: define V2 mission types and extend RoomGoal (Task 1.1) (feat: define V2 mission types and extend RoomGoal (Task 1.1) #374)
- chore: remove pi-mono approach dead code (chore: remove pi-mono approach dead code #364)
- feat: widen Provider type union to include anthropic-copilot and anthropic-codex (feat: widen Provider type union to include anthropic-copilot and anthropic-codex #373)
- fix: remove unsafe provider casts in daemon, use widened Provider type (fix: remove unsafe provider casts in daemon, use widened Provider type #377)
- fix: Enter to send in task HumanInputArea, default target to leader (fix: Enter to send in task HumanInputArea, default target to leader #387)
- fix: inject room chat system prompt to prevent premature task creation (fix: inject room chat system prompt to prevent premature task creation #379)
- feat: add anthropic-codex Codex entry to PROVIDER_LABELS (feat: add anthropic-codex Codex entry to PROVIDER_LABELS #375)
- feat: make provider routing fully deterministic via explicit (modelId, providerId) pairs (feat: make provider routing fully deterministic via explicit (modelId, providerId) pairs #376)
- fix: parse /context response from assistant messages (new SDK format) (fix: parse /context response from assistant messages (new SDK format) #381)
- fix: prevent agent from creating duplicate PRs on re-dispatch (fix: prevent agent from creating duplicate PRs on re-dispatch #392)
- fix: remove merge method flag from human approval message (fix: remove merge method flag from human approval message #393)
- feat: iterate all tool results in codex bridge continuation (feat: iterate all tool results in codex bridge continuation #378)
- feat: replace copy toast with inline green check mark (feat: replace copy toast with inline green check mark #394)
- feat: require explicit provider ID for all model resolution (feat: require explicit provider ID for all model resolution #388)
- test: add provider routing tests for copilot/cross-provider model switches (feat: preserve session provider context during model switches #395)
- feat: provider-grouped model picker with availability dots (feat: provider-grouped model picker with availability dots #398)
- feat: replace plain-text error bodies with Anthropic JSON error envelopes in codex bridge (feat: replace plain-text error bodies with Anthropic JSON error envelopes in codex bridge #380)
- feat: improve error mapping in copilot bridge (Task 5.1) (feat: improve error mapping in copilot bridge (Task 5.1) #384)
- fix: render leader questions as interactive forms in task conversation (fix: render leader questions as interactive forms in task conversation #400)
- feat: wire thread/tokenUsage/updated into SSE message_delta token counts (feat: wire thread/tokenUsage/updated into SSE message_delta token counts #383)
- feat: recurring missions — scheduling with execution identity and recovery (Task 3) (feat: recurring missions — scheduling with execution identity and recovery (Task 3) #390)
- feat: UI terminology — rename Goal to Mission (Task 5) (feat: UI terminology — rename Goal to Mission (Task 5) #397)
- feat: implement semi-autonomous mode for coder/general tasks (Task 4) (feat: implement semi-autonomous mode for coder/general tasks (Task 4) #396)
- feat: measurable missions — structured metrics and adaptive replanning (Task 2) (feat: measurable missions — structured metrics and adaptive replanning (Task 2) #382)
- fix: call queryObject.close() before clearing transport reference (fix: call queryObject.close() before clearing transport reference #403)
- fix: scope message locator in persistence e2e test to avoid strict mode violation (fix: scope message locator in persistence e2e test to avoid strict mode violation #402)
- feat: provider-aware session creation (test: unit tests for provider routing and type safety (Task 7.1) #399) (feat: provider-aware session creation (#399) #401)
- feat: add provider badge in session status bar next to model icon (feat: add provider badge in session status bar next to model icon #391)
- feat: heuristic token accounting for copilot bridge (feat: heuristic token accounting for copilot bridge #385)
- test: unit tests for provider routing and type safety (Task 7.1) (test: unit tests for provider routing and type safety (Task 7.1) #399)
- feat: log warning when tool_choice is provided but not honored in both bridges (feat: log warning when tool_choice is provided but not honored in both bridges #386)
- task/task 72 update online provider test shards (task/task 72 update online provider test shards #409)
- feat: graceful degradation on provider unavailability (feat: graceful degradation on provider unavailability #408)
- test: add E2E tests for provider model switching UI (test: add E2E tests for provider model switching UI #406)
- feat: eager leader initialization and fix observer race in TaskGroupManager (feat: eager leader initialization and fix observer race in TaskGroupManager #411)
- feat: filter unauthenticated providers from model picker (feat: filter unauthenticated providers from model picker #410)
- Fix SQLITE_BUSY retries and closed SSE controller handling (Fix SQLITE_BUSY retries and closed SSE controller handling #415)
- fix: resolve leader questions routing to dead session instances (fix: resolve leader questions routing to dead session instances #404)
- feat: add OpenAI token refresh/login in settings for Codex (feat: add OpenAI token refresh/login in settings for Codex #416)
- fix: use correct /room/:id route in mission-terminology e2e tests (fix: use correct /room/:id route in mission-terminology e2e tests #419)
- fix: restore dead worker sessions before routing leader feedback (fix: restore dead worker sessions before routing leader feedback #418)
- feat: UI — type-specific mission creation and detail views (Task 6) (feat: UI — type-specific mission creation and detail views (Task 6) #405)
- fix: capture assistant.message.content when Copilot SDK skips streaming deltas (fix: capture assistant.message.content when Copilot SDK skips streaming deltas #421)
- fix: set ANTHROPIC_DEFAULT_*_MODEL in Codex provider to prevent Anthropic model fallback (fix: set ANTHROPIC_DEFAULT_*_MODEL in Codex provider to prevent Anthropic model fallback #412)
- fix: support Agent tool name for subagent blocks (SDK 0.2.76+ renamed Task to Agent) (fix: support Agent tool name for subagent blocks (SDK 0.2.76+ renamed Task to Agent) #424)
- fix(codex-bridge): persist Codex sessions across turns (fix(codex-bridge): persist Codex sessions across turns #420)
- docs: add final provider parity report (docs: add final provider parity report #413)
- docs: plan for Multi-Agent V2 customizable agents and workflows (docs: plan for Multi-Agent V2 customizable agents and workflows #359)
- task/fix logout button not working for openai and copil (task/fix logout button not working for openai and copil #423)
- feat: define Space shared types in @neokai/shared (feat: define Space shared types in @neokai/shared #425)
- feat: add Migration 29 — create all Space system tables (feat: add Migration 29 — create all Space system tables #427)
- feat: add SpaceAgent and workflow types to space.ts (Task 3.1) (feat: define Space system shared types (Task 3.1) #426)
- feat: custom agent types, repository, and manager (Task 2.1) (feat: custom agent types, repository, and manager (Task 2.1) #428)
- feat: add Space repositories and managers (Task 1.3) (feat: add Space repositories and managers (Task 1.3) #429)
- feat: SpaceWorkflowRepository and SpaceWorkflowManager (Task 3.2) (feat: SpaceWorkflowRepository and SpaceWorkflowManager (Task 3.2) #430)
- feat: Space RPC handlers and DaemonEventMap registration (Task 1.4) (feat: Space RPC handlers and DaemonEventMap registration (Task 1.4) #433)
- docs: add provider setup documentation for anthropic-copilot and anthropic-codex (docs: add provider setup documentation for anthropic-copilot and anthropic-codex #414)
- test: integration testing and documentation for Mission System V2 (Task 7) (test: integration testing and documentation for Mission System V2 (Task 7) #422)
- feat: add task management tools to leader role (feat: add task management tools to leader role #435)
- feat: add spaceAgent RPC handlers and DaemonEventMap entries (Task 2.2) (feat: add spaceAgent RPC handlers and DaemonEventMap entries (Task 2.2) #431)
- feat: simplify multi-agent space — explicit workflowId or AI auto-select only (feat: simplify multi-agent space — explicit workflowId or AI auto-select only #434)
- feat: add leader progress summary at end of each turn (feat: add leader progress summary at end of each turn #436)
- feat: custom agent session init factory and SpaceAgent tools (Task 2.3) (feat: custom agent session init factory and SpaceAgent tools (Task 2.3) #432)
- docs: update multi-agent space task docs with simplified workflow selection design (docs: update multi-agent space task docs with simplified workflow selection design #439)
- docs: NeoKai UI/UX 1.0.0 upgrade plan (docs: NeoKai UI/UX 1.0.0 upgrade plan #442)
- docs: add NeoKai UI/UX 1.0.0 upgrade specification (docs: add NeoKai UI/UX 1.0.0 upgrade specification #444)
- feat: extend CSS custom properties vocabulary in styles.css (feat: extend CSS custom properties vocabulary in styles.css #445)
- feat: Workflow RPC handlers and DaemonEventMap registration (Task 3.3) (feat: Workflow RPC handlers and DaemonEventMap registration (Task 3.3) #437)
- feat: built-in workflow templates and seedBuiltInWorkflows (Task 3.4) (feat: built-in workflow templates and seedBuiltInWorkflows (Task 3.4) #440)
- feat: Space navigation, routing, and signals (Task 5.1) (feat: Space navigation, routing, and signals (Task 5.1) #438)
- feat: add WorkflowExecutor core for Space workflow run progression (Task 4.1) (feat: add WorkflowExecutor core for Space workflow run progression (Task 4.1) #443)
- feat: define Space export/import JSON format (Task 8.1) (feat: define Space export/import JSON format (Task 8.1) #441)
- docs: align Milestone 4 planning docs with transition/condition implementation (docs: align Milestone 4 planning docs with transition/condition implementation #447)
- feat: SpaceRuntime — workflow orchestration, task-type assignment, seedDefaultWorkflow wiring (Task 4.2) (feat: SpaceRuntime — workflow orchestration, task-type assignment, seedDefaultWorkflow wiring (Task 4.2) #450)
- fix: make CreateWorkflowRunParams.currentStepId optional (fix: make CreateWorkflowRunParams.currentStepId optional #449)
- feat: add SpaceStore reactive state management (Task 5.2) (feat: add SpaceStore reactive state management (Task 5.2) #446)
- fix: fix failing E2E tests for mission creation routes and persistence (fix: fix failing E2E tests for mission creation routes and persistence #451)
- feat: add Space export/import RPC handlers (Task 8.2) (feat: add Space export/import RPC handlers (Task 8.2) #452)
- feat: workflow selection logic and Space agent tools (Task 7.1) (feat: workflow selection logic and Space agent tools (Task 7.1) #453)
- fix: sync space_agents columns in space-test-db.ts with migration schema (fix: sync space_agents columns in space-test-db.ts with migration schema #448)
- feat: Space creation UX and 3-column layout (Task 5.3) (feat: Space creation UX and 3-column layout (Task 5.3) #455)
- task/make turn summary card use bigger font and render (task/make turn summary card use bigger font and render #460)
- feat: SpaceRuntimeService, workflow run RPC handlers, and session group metadata (Task 4.3) (feat: SpaceRuntimeService, workflow run RPC handlers, and session group metadata (Task 4.3) #454)
- feat: Task 8.3 — Frontend Export/Import UI for Space agents and workflows
- fix: fetch real Copilot model IDs dynamically via client.listModels() (fix: fetch real Copilot model IDs dynamically via client.listModels() #464)
- task/fix agent session crash when switching modelprovid (task/fix agent session crash when switching modelprovid #459)
- task/add support for minimax m27 highspeed model (task/add support for minimax m27 highspeed model #458)
- feat: Task 6.1 - Custom Agent List and Editor
- task/task 72 space agent prompt enhancement (task/task 72 space agent prompt enhancement #457)
- feat: workflow step builder (Task 6.2) (feat: workflow step builder (Task 6.2) #463)
- fix: handle thinking blocks in SDK title generation (fix: handle thinking blocks in SDK title generation #461)
- refactor: remove detectProvider heuristic entirely (refactor: remove detectProvider heuristic entirely #467)
- feat: Task 6.3 - Workflow Rules Editor and Space integration (feat: Task 6.3 - Workflow Rules Editor and Space integration #468)
- feat: add structured tokens object to design-tokens module (feat: add structured tokens object to design-tokens module #469)
- test: add tokens unified namespace tests for Task 1.2 (test: add tokens unified namespace tests for Task 1.2 #470)
- feat: typography and global prose refinements (Task 1.3) (feat: typography and global prose refinements (Task 1.3) #471)
- fix: ensure onError cleanup runs on subprocess crash in codex bridge (fix: codex bridge 409 conflict on subprocess crash #473)
- fix: clear stale sdkSessionId when SDK session file no longer exists (fix: clear stale sdkSessionId when SDK session file no longer exists #474)
- fix: display Copilot quota errors as UI error blocks and stop retrying (fix: display Copilot quota errors as UI error blocks and stop retrying #476)
- feat: display API retry errors in UI during SDK retry attempts (feat: display API retry errors in UI during SDK retry attempts #475)
- fix: use unique workspace paths and correct delete params in space E2E tests (fix: use unique workspace paths and correct delete params in space E2E tests #477)
- feat: Button/IconButton/NavIconButton unification (Task 2.1) (feat: Button/IconButton/NavIconButton unification (Task 2.1) #472)
- fix: clean up stale spaces before creating in E2E tests (fix: clean up stale spaces before creating in E2E tests #478)
- fix: correct space.list response shape in E2E stale-space cleanup (fix: correct space.list response shape in E2E stale-space cleanup #481)
- fix: use correct space.create response shape in E2E tests (fix: use correct space.create response shape in E2E tests #482)
- ci: skip unstable space E2E tests (export-import, workflow-rules) (ci: skip unstable space E2E tests #483)
- docs: plan for workflow visual editor implementation (docs: plan for workflow visual editor implementation #479)
- feat: add VisualCanvas component with pan and zoom (Task 1.2) (feat: add VisualCanvas component with pan and zoom (Task 1.2) #484)
- feat: add layout column to space_workflows for visual editor (Task 1.1) (feat: add layout column to space_workflows for visual editor (Task 1.1) #485)
- feat: replace hidden dropdown with inline Cancel/Complete buttons in TaskView (Task 2.2) (feat: P0 — replace hidden ⋮ Dropdown with inline Cancel/Complete buttons in TaskView (Task 2.2) #480)
- feat: add SVG overlay layer for edges in VisualCanvas (Task 1.3) (feat: add SVG overlay layer for edges in VisualCanvas (Task 1.3) #488)
- feat: add WorkflowNode canvas component (Task 2.1) (feat: add WorkflowNode canvas component (Task 2.1) #490)
- fix: sync room chat session model when defaultModel changes to prevent glm-5-turbo errors (fix: sync room chat session model when defaultModel changes to prevent glm-5-turbo errors #486)
- feat: DAG auto-layout algorithm for workflow visual editor (Task 5.1) (feat: DAG auto-layout algorithm for workflow visual editor (Task 5.1) #487)
- feat: add CanvasToolbar with zoom controls and fit-to-view (Task 1.4) (feat: add CanvasToolbar with zoom controls and fit-to-view (Task 1.4) #489)
- feat: add node selection and multi-select to visual editor (Task 2.3) (feat: add node selection and multi-select to visual editor (Task 2.3) #491)
- feat: implement WorkflowNode with drag-and-drop support (Task 2.2) (feat: implement WorkflowNode with drag-and-drop support (Task 2.2) #492)
- fix: always set provider in createCustomAgentInit for Space custom agents (fix: always set provider in createCustomAgentInit for Space custom agents #495)
- feat: create connections by dragging from output to input ports (Task 3.2) (feat: create connections by dragging from output to input ports (Task 3.2) #496)
- feat: implement NodeConfigPanel and extract GateConfig (Task 4.1) (feat: implement NodeConfigPanel and extract GateConfig (Task 4.1) #497)
- feat: add Spaces UI with global agent and context panel (feat: add Spaces UI with global agent and context panel #493)
- task/task 31 render edges as svg bezier curves (task/task 31 render edges as svg bezier curves #494)
- feat: implement EdgeConfigPanel component for transition editing (Task 4.2) (feat: implement EdgeConfigPanel component for transition editing (Task 4.2) #498)
- feat: serialize visual state to SpaceWorkflow data model (Task 5.2) (feat: serialize visual state to SpaceWorkflow data model (Task 5.2) #499)
- Plan: Task Agent session orchestrator for Space tasks (Plan: Task Agent session orchestrator for Space tasks #501)
- feat: add VisualWorkflowEditor orchestrator component (Task 6.1) (feat: add VisualWorkflowEditor orchestrator component (Task 6.1) #500)
- feat: add space_task_agent session type and taskAgentSessionId to SpaceTask (feat: add space_task_agent session type and taskAgentSessionId to SpaceTask #502)
- feat: define Task Agent MCP tool schemas (Task 1.3) (feat: define Task Agent MCP tool schemas (Task 1.3) #503)
- feat: add List/Visual toggle in SpaceIsland workflow editor (Task 6.2) (feat: add List/Visual toggle in SpaceIsland workflow editor (Task 6.2) #505)
- feat: add template support to visual workflow editor (Task 5.3) (feat: add template support to visual workflow editor (Task 5.3) #506)
- test: add performance validation for large workflows (Task 7.3) (test: add performance validation for large workflows (Task 7.3) #504)
- feat: build Task Agent system prompt and initial message builders (feat: build Task Agent system prompt and initial message builders #507)
- feat: add task_agent_session_id to space_tasks schema and repository (feat: add task_agent_session_id to space_tasks schema and repository #508)
- docs: plan for Space Agent Coordinator reactive event-driven task coordination (Layer 4a) (docs: plan for Space Agent Coordinator reactive event-driven task coordination (Layer 4a) #512)
- feat: implement createTaskAgentInit factory for Task Agent sessions (Task 2.2) (feat: implement createTaskAgentInit factory for Task Agent sessions (Task 2.2) #510)
- feat: implement Task Agent MCP tool handlers (Task 3.1) (feat: implement Task Agent MCP tool handlers (Task 3.1) #513)
- test: add E2E tests for visual workflow editor (Task 7.1) (test: add E2E tests for visual workflow editor (Task 7.1) #509)
- feat: define NotificationSink interface and SpaceNotificationEvent types (Task 2.1) (feat: define NotificationSink interface and SpaceNotificationEvent types (Task 2.1) #515)
- feat: add retryTask and reassignTask methods to SpaceTaskManager (feat: add retryTask and reassignTask methods to SpaceTaskManager #514)
- feat: implement SessionNotificationSink for Space Agent event injection (feat: implement SessionNotificationSink for Space Agent event injection #519)
- test: fix pre-existing test failures for compatibility (Task 7.2) (test: fix pre-existing test failures for compatibility (Task 7.2) #511)
- feat: add SpaceAutonomyLevel, SpaceConfig types, and autonomy_level DB column (feat: add SpaceAutonomyLevel, SpaceConfig types, and autonomy_level DB column #516)
- feat: add coordination tools to space-agent-tools (Task 3.2) (feat: add coordination tools to space-agent-tools (Task 3.2) #520)
- test: add MCP server factory tests for createTaskAgentMcpServer (test: add MCP server factory tests for createTaskAgentMcpServer #517)
- feat: update space-chat-agent prompt with coordinator behavior (Task 4.1) (feat: update space-chat-agent prompt with coordinator behavior (Task 4.1) #523)
- feat: update SpaceManager and RPC handlers for autonomy level (Task 1.2) (feat: update SpaceManager and RPC handlers for autonomy level (Task 1.2) #524)
- feat: integrate NotificationSink into SpaceRuntime tick loop (Task 2.2) (feat: integrate NotificationSink into SpaceRuntime tick loop (Task 2.2) #525)
- fix: use worktree path for SDK session file lookups (fix: use worktree path for SDK session file lookups #518)
- task/review pr 518 (task/review pr 518 #527)
- feat: update global-spaces-agent prompt with coordination guidance (feat: update global-spaces-agent prompt with coordination guidance #522)
- test: autonomy level behavior tests for space agent (Task 6.2) (test: autonomy level behavior tests for space agent (Task 6.2) #526)
- feat: add needs_attention detection for standalone tasks in SpaceRuntime (feat: add needs_attention detection for standalone tasks in SpaceRuntime #529)
- feat: add coordination tools to global-spaces-tools.ts (Task 3.3) (feat: add coordination tools to global-spaces-tools.ts (Task 3.3) #521)
- feat: implement TaskAgentManager core (Task 4.1) (feat: implement TaskAgentManager core (Task 4.1) #528)
- test: add full pipeline integration tests for concurrent notification events (Task 6.1) (test: add full pipeline integration tests for concurrent notification events (Task 6.1) #531)
- feat: wire SessionNotificationSink into provisionGlobalSpacesAgent (Task 5.2) (feat: wire SessionNotificationSink into provisionGlobalSpacesAgent (Task 5.2) #530)
- feat: wire TaskAgentManager into DaemonApp (Task 4.3) (feat: wire TaskAgentManager into DaemonApp (Task 4.3) #532)
- test: edge case and resilience tests for notification system (Task 6.3) (test: edge case and resilience tests for notification system (Task 6.3) #537)
- feat: add human message routing to Task Agent via space.task.sendMessage/getMessages (feat: add human message routing to Task Agent via space.task.sendMessage/getMessages #536)
- feat: add Task Agent spawning to SpaceRuntime tick loop (Task 5.1) (feat: add Task Agent spawning to SpaceRuntime tick loop (Task 5.1) #538)
- test: verify all MCP tools registered in global-spaces provisioning (Task 5.3) (test: verify all MCP tools registered in global-spaces provisioning (Task 5.3) #534)
- feat: add send_message_to_task tool to Space Agent (feat: add send_message_to_task tool to Space Agent #535)
- feat: wire TaskAgentManager into SpaceRuntimeService (Task 5.2) (feat: wire TaskAgentManager into SpaceRuntimeService (Task 5.2) #540)
- feat: add task completion notification to Space Agent (Task 6.2) (feat: add task completion notification to Space Agent (Task 6.2) #541)
- test: online tests with dev proxy for space agent coordination (Task 6.4) (test: online tests with dev proxy for space agent coordination (Task 6.4) #539)
- feat: add toast semantic methods and ConfirmModal enhancements (Task 2.3) (feat: add toast semantic methods and ConfirmModal enhancements (Task 2.3) #543)
- feat: add Task Agent session rehydration on daemon restart (Task 5.3) (feat: add Task Agent session rehydration on daemon restart (Task 5.3) #542)
- feat: add semantic status border and inline reject form to RoomTasks (Task 2.4) (feat: add semantic status border and inline reject form to RoomTasks (Task 2.4) #544)
- feat: add Inbox navigation infrastructure (Task 3.1) (feat: add Inbox navigation infrastructure (Task 3.1) #545)
- feat: add Inbox view (inbox-store + Inbox.tsx + MainContent routing) (Task 3.2) (feat: add Inbox view (inbox-store + Inbox.tsx + MainContent routing) (Task 3.2) #546)
- test: add end-to-end online test for Task Agent lifecycle (Task 6.3) (test: add end-to-end online test for Task Agent lifecycle (Task 6.3) #547)
- feat: add direct approve/reject to Inbox without TaskView navigation (Task 4.3) (feat: add direct approve/reject to Inbox without TaskView navigation (Task 4.3) #548)
- feat: hide ContextPanel when inbox is active (Task 4.2) (feat: hide ContextPanel when inbox is active (Task 4.2) #550)
- fix: remove premature task_agent_session_id index from migration 29 (fix: remove premature task_agent_session_id index from migration 29 #551)
- feat: auto-expand review TaskCards with Approve button and worker summary (Task 4.4) (feat: auto-expand review TaskCards with Approve button and worker summary (Task 4.4) #553)
- docs: plan for workflow iteration loop with agent-driven cyclic transitions (docs: plan for workflow iteration loop with agent-driven cyclic transitions #552)
- docs: plan to fix E2E test failures on dev branch CI (docs: plan to fix E2E test failures on dev branch CI #556)
- docs: plan for task status lifecycle redesign (docs: plan for task status lifecycle redesign #555)
- feat: add goalId column to space_tasks and types (Task 3.1) (feat: add goalId column to space_tasks and types (Task 3.1) #561)
- fix: replace fixed sleep with Playwright auto-retrying assertion in worktree-isolation E2E test (fix: replace fixed sleep with Playwright auto-retrying assertion in worktree-isolation E2E test #557)
- fix: rewrite task-actions-dropdown E2E tests to match actual inline button UI (fix: rewrite task-actions-dropdown E2E tests to match actual inline button UI #558)
- Plan: Redesign RoomContextPanel goal-centric sidebar (Plan: Redesign RoomContextPanel goal-centric sidebar #563)
- feat: add iteration tracking columns to DB and types (Task 2.1) (feat: add iteration tracking columns to DB and types (Task 2.1) #564)
- fix: remove stale sessions from RoomContextPanel on session delete/update (fix: remove stale sessions from RoomContextPanel on session delete/update #554)
- fix: update space-creation E2E test assertions to match actual tabbed UI (fix: update space-creation E2E test assertions to match actual tabbed UI #559)
- feat: add ActionBar component and replace inline HeaderReviewBar in TaskView (Task 4.5) (feat: add ActionBar component and replace inline HeaderReviewBar in TaskView (Task 4.5) #560)
- feat: propagate goalId through workflow task creation (Task 3.2) (feat: propagate goalId through workflow task creation (Task 3.2) #565)
- feat: add task_result condition type and isCyclic to workflow transitions (feat: add task_result condition type and isCyclic to workflow transitions #562)
- fix: fix visual-workflow-editor E2E tests — space URL sync + navigateToSpace wait (fix: fix visual-workflow-editor E2E tests — space URL sync + navigateToSpace wait #567)
- feat: add CollapsibleSection component for sidebar sections (feat: add CollapsibleSection component for sidebar sections #568)
- feat: add /room/:roomId/agent route pattern and navigation (feat: add /room/:roomId/agent route pattern and navigation #570)
- feat: add mobile BottomTabBar with iOS-style navigation (Task 4.6) (feat: add mobile BottomTabBar with iOS-style navigation (Task 4.6) #571)
- feat: add computed signals for goal-task grouping and orphan tasks (feat: add computed signals for goal-task grouping and orphan tasks #569)
- test: unit tests for goalId propagation (Task 5.3) (test: unit tests for goalId propagation (Task 5.3) #572)
- feat: add archived status to TaskStatus and SpaceTaskStatus unions (feat: add archived status to TaskStatus and SpaceTaskStatus unions #566)
- feat: add Verify & Test step to Coding Workflow template (feat: add Verify & Test step to Coding Workflow template #573)
- feat: implement task_result evaluation in WorkflowExecutor (feat: implement task_result evaluation in WorkflowExecutor #574)
- chore: trigger PR creation for task 5.1 (chore: trigger PR creation for task 5.1 #583)
- feat(workflow): implement iteration detection and capping in WorkflowExecutor (feat(workflow): implement iteration detection and capping in WorkflowExecutor #585)
- fix: replace crypto.randomUUID with browser-compatible generateUUID (fix: replace crypto.randomUUID with browser-compatible generateUUID #587)
- feat: wire step_result through advance_workflow to executor (Task 1.3) (feat: wire step_result through advance_workflow to executor (Task 1.3) #586)
- feat: rewrite RoomContextPanel with goal-centric sidebar layout (feat: rewrite RoomContextPanel with goal-centric sidebar layout #577)
- test: unit tests for archived status transitions and archival filtering (test: unit tests for archived status transitions and archival filtering #580)
- test: add unit tests for router room agent route (test: add unit tests for router room agent route #575)
- test: add reactivity and edge case tests for room store computed signals (test: add reactivity and edge case tests for room store computed signals #576)
- fix: stop worktree cleanup on complete and cancel in task-group-manager (fix: stop worktree cleanup on complete and cancel in task-group-manager #578)
- test: add space task manager tests for archival and reactivation lifecycle (test: verify space task manager archival and reactivation lifecycle #579)
- test: add archive and reactivation RPC handler tests for space tasks (test: add archive and reactivation RPC handler tests for space tasks #593)
- fix: fix flaky online tests in CI (fix: fix flaky online tests in CI #582)
- feat: Phase 4 micro-animations — badge pop, card approve/reject, panel & page fade-in (feat: Phase 4 micro-animations — badge pop, card approve/reject, panel & page fade-in #590)
- test: add missing draft/pending Active tab and sessions count badge tests for RoomContextPanel (test: add missing draft/pending Active tab and sessions count badge tests for RoomContextPanel #591)
- feat: update task tab grouping to Active/Review/Done/Archived (feat: update task tab grouping to Active/Review/Done/Archived #581)
- feat: add model switching in TaskView and auto-fallback on rate/usage limits (feat: add model switching in TaskView and auto-fallback on rate/usage limits #589)
- test: add end-to-end cyclic workflow integration test (Task 5.5) (test: add end-to-end cyclic workflow integration test (Task 5.5) #598)
- test: validate Room.tsx integration with room agent routes (test: validate Room.tsx integration with room agent routes #592)
- feat: update room-runtime and RPC handlers for new lifecycle (feat: update room-runtime and RPC handlers for new lifecycle #594)
- feat: add reactivate and archive actions to TaskView (feat: add reactivate and archive actions to TaskView #601)
- test: add E2E tests for room sidebar sections (goal expand/collapse and task tab filtering) (test: add E2E tests for room sidebar sections (goal expand/collapse and task tab filtering) #602)
- feat: allow cancelled → completed status transition (feat: allow cancelled → completed status transition #600)
- test: add E2E tests for room sidebar URL navigation and persistence (test: add E2E tests for room sidebar URL navigation and persistence #603)
- fix: update room-agent-tools guards and comments for new task lifecycle (fix: update room-agent-tools guards and comments for new task lifecycle #599)
- test: add web unit tests for archived status and reactivate/archive button visibility (test: add web unit tests for archived status and reactivate/archive button visibility #604)
- fix: recover rate-limited workers stuck in later iterations (feedbackIteration > 0) (fix: recover rate-limited workers stuck in later iterations (feedbackIteration > 0) #596)
- test: add unit tests for room-runtime lifecycle changes (test: add unit tests for room-runtime lifecycle changes #605)
- test: add online integration tests for task reactivation and archive lifecycle (test: add online integration tests for task reactivation and archive lifecycle #608)
- test: add edge-case tests for cyclic transition condition evaluation and iterationCount (test: add edge-case tests for cyclic transition condition evaluation and iterationCount #609)
- test: add E2E tests for task reactivate and archive UI actions (test: add E2E tests for task reactivate and archive UI actions #611)
- fix: sync root repo after PR merge via lifecycle gate (fix: sync root repo after PR merge via lifecycle gate #610)
- docs: plan for Space Agent Groups flexible multi-agent collaboration (docs: plan for Space Agent Groups flexible multi-agent collaboration #606)
- feat: add migration 40 for flexible session groups (feat: add migration 40 for flexible session groups #614)
- feat: extend WorkflowStep with agents array and WorkflowChannel topology (feat: extend WorkflowStep with agents array and WorkflowChannel topology #613)
- docs: implementation plan for persistent job queue adoption (docs: implementation plan for persistent job queue adoption #612)
- feat: update shared types for flexible SpaceSessionGroup model (feat: update shared types for flexible SpaceSessionGroup model #615)
- feat: extend listJobs to accept status arrays (feat: extend listJobs to accept status arrays #618)
- feat: add resolveTaskTypesForStep for multi-agent per-agent type resolution (feat: add resolveTaskTypesForStep for multi-agent per-agent type resolution #616)
- docs(plans): SQL LiveQuery adoption plan (docs(plans): SQL LiveQuery adoption plan #205)
- feat: add channel and multi-agent step validation to SpaceWorkflowManager (feat: add channel and multi-agent step validation to SpaceWorkflowManager #617)
- feat: extend export/import format for multi-agent steps and channels (feat: extend export/import format for multi-agent steps and channels #620)
- task/task 13 update spacesessiongrouprepository for new (task/task 13 update spacesessiongrouprepository for new #619)
- ci: skip Codex bridge tests + fix multi-agent import test (ci: skip Codex bridge tests + fix multi-agent import test #627)
- test: add export/import round-trip tests for multi-agent workflows (test: add export/import round-trip tests for multi-agent workflows #624)
- feat: update WorkflowExecutor for multi-agent parallel step execution (feat: update WorkflowExecutor for multi-agent parallel step execution #621)
- feat: create job queue constants, wire processor into app lifecycle (feat: create job queue constants, wire processor into app lifecycle #622)
- test: unit tests for updated SpaceSessionGroupRepository schema (test: unit tests for updated SpaceSessionGroupRepository schema #625)
- feat: thread reactiveDb through dependency interfaces (feat: thread reactiveDb through dependency interfaces #623)
- feat: show associated goal on room task list and task view (feat: show associated goal on room task list and task view #629)
- feat: wire SpaceSessionGroupRepository into TaskAgentManager (feat: wire SpaceSessionGroupRepository into TaskAgentManager #628)
- test: add JobQueueProcessor lifecycle integration tests (test: add JobQueueProcessor lifecycle integration tests #632)
- feat: add session title generation job handler (feat: add session title generation job handler #630)
- feat: add job_queue.cleanup handler and wire into daemon startup (feat: add job_queue.cleanup handler and wire into daemon startup #635)
- test: verify eager stale job reclamation on processor restart (test: verify eager stale job reclamation on processor restart #633)
- test: unit tests for updated Coding Workflow template (Task 5.4) (test: unit tests for updated Coding Workflow template (Task 5.4) #584)
- feat: expose triggerPoll and create github.poll job handler (feat: expose triggerPoll and create github.poll job handler #631)
- test: add comprehensive unit tests for multi-agent workflow executor (test: add comprehensive unit tests for multi-agent workflow executor #636)
- feat: inject ReactiveDatabase into TaskManager and fire notifyChange after writes (feat: inject ReactiveDatabase into TaskManager and fire notifyChange after writes #642)
- feat: update visual workflow editor for multi-agent steps and channel topology (feat: update visual workflow editor for multi-agent steps and channel topology #637)
- feat: add room.tick job handler, enqueueRoomTick, and cancelPendingTickJobs (feat: add room.tick job handler, enqueueRoomTick, and cancelPendingTickJobs #634)
- feat: add notifyChange to GoalRepository and wire through GoalManager (feat: add notifyChange to GoalRepository and wire through GoalManager #641)
- feat: rehydrate group map on daemon restart via dedicated rehydrateGroupMaps() (feat: rehydrate group map on daemon restart via dedicated rehydrateGroupMaps() #639)
- feat: add sub-session members to groups (Task 2.2) (feat: add sub-session members to groups (Task 2.2) #638)
- feat: wire session title handler into SessionManager and remove pendingBackgroundTasks (feat: wire session title handler into SessionManager and remove pendingBackgroundTasks #640)
- test: add E2E tests for multi-agent step editor and channel topology (test: add E2E tests for multi-agent step editor and channel topology #645)
- feat: remove setInterval from GitHubPollingService and wire handler into GitHubService (feat: remove setInterval from GitHubPollingService and wire handler into GitHubService #644)
- feat: add notifyChange to SessionGroupRepository (feat: add notifyChange to SessionGroupRepository #643)
- feat: replace setInterval/queueMicrotask with job queue in RoomRuntime (task/task 42 replace setinterval scheduletick schedulet #646)
- test: add online test for session title generation via job queue (test: add online test for session title generation via job queue #647)
- feat: emit session group events via DaemonHub (Task 2.3) (feat: emit session group events via DaemonHub (Task 2.3) #648)
- feat: add shared LiveQuery protocol types (feat: add shared LiveQuery protocol types #651)
- test: add online test for GitHub polling via job queue (test: add online test for GitHub polling via job queue #650)
- feat: add MessageHub.onClientDisconnect forwarding method (feat: add MessageHub.onClientDisconnect forwarding method #652)
- feat: plumb clientId into CallContext (feat: plumb clientId into CallContext #653)
- fix: model switch now always restarts query when queryObject exists (fix: model switch now always restarts query when queryObject exists #657)
- feat: add ChannelResolver, list_group_members and relay_message tools to Task Agent (feat: add ChannelResolver, list_group_members and relay_message tools to Task Agent #649)
- feat: wire room.tick handler into RoomRuntimeService and fix stopRuntime bug (feat: wire room.tick handler into RoomRuntimeService and fix stopRuntime bug #660)
- feat: hide completed tasks under Goals in sidebar with show/hide toggle (feat: hide completed tasks under Goals in sidebar with show/hide toggle #656)
- feat: define named-query registry with column aliasing and JSON parsing (feat: define named-query registry with column aliasing and JSON parsing #655)
- feat: redesign task view with action dropdown and circular progress (feat: redesign task view with action dropdown and circular progress #658)
- feat: add space session group RPC handlers and SpaceStore signals (feat: add space session group RPC handlers and SpaceStore signals #659)
- test: add unit tests for TaskAgentManager group persistence and events (test: add unit tests for TaskAgentManager group persistence and events #654)
- fix: enqueueRoomTick replaces pending tick when new request is sooner (fix: enqueueRoomTick replaces pending tick when new request is sooner #661)
- test: add online test for room tick via job queue (Task 4.4) (test: add online test for room tick via job queue (Task 4.4) #670)
- feat: display active agents in SpaceTaskPane (feat: display active agents in SpaceTaskPane #663)
- feat: implement liveQuery.subscribe and liveQuery.unsubscribe RPC handlers (feat: implement liveQuery.subscribe and liveQuery.unsubscribe RPC handlers #672)
- feat: step agent peer communication tools (send_feedback, request_peer_input, list_peers) (feat: step agent peer communication tools (send_feedback, request_peer_input, list_peers) #675)
- test: add integration tests for job queue crash/restart recovery (test: add integration tests for job queue crash/restart recovery #671)
- fix: use try/finally in test 1 so daemon1 is always stopped on assertion failure (task/task 61 integration test job queue crash recovery #682)
- fix: revert task view gear button to expanded-down panel UX (fix: revert task view gear button to expanded-down panel UX #681)
- fix: prevent duplicate group spawning for same task during concurrent ticks (fix: prevent duplicate group spawning for same task #687)
- test: add disconnect cleanup unit test and online LiveQuery pipeline test (Task 2.6) (test: add disconnect cleanup unit test and online LiveQuery pipeline test (Task 2.6) #680)
- test: add reactive signal update tests for SpaceTaskPane working agents (test: add reactive signal update tests for SpaceTaskPane working agents #679)
- fix: remove emitTaskUpdate from task.fail RPC handler (Task 3.1) (fix: remove emitTaskUpdate from task.fail RPC handler (Task 3.1) #688)
- ci: split rpc online tests into 4 balanced shards (ci: split rpc online tests into 4 balanced shards #685)
- feat: add E2E test for active agents display in SpaceTaskPane (feat: add E2E test for active agents display in SpaceTaskPane #683)
- docs: document out-of-scope setInterval users after job-queue migration (docs: document out-of-scope setInterval users after job-queue migration #693)
- test: add comprehensive unit tests for cross-agent messaging (test: add comprehensive unit tests for cross-agent messaging #684)
- feat: add git branch and session status to TaskInfoPanel expanded view (feat: add git branch and session status to TaskInfoPanel expanded view #691)
- feat: add step agent peer communication tools (send_feedback, request_peer_input, list_peers) (feat: add step agent peer communication tools (send_feedback, request_peer_input, list_peers) #678)
- test(e2e): add job queue background tasks E2E test for session title generation (test(e2e): add job queue background tasks E2E test for session title generation #692)
- test: add integration tests for cross-group isolation and channel enforcement (test: add integration tests for cross-group isolation and channel enforcement #686)
- feat: add useGroupMessages hook for LiveQuery group message streaming (feat: add useGroupMessages hook for LiveQuery group message streaming #690)
- feat: add force-stop session group RPC + auto-clean stale groups in tick (feat: add force-stop session group RPC + auto-clean stale groups in tick #694)
- fix: address root causes of duplicate and stale session groups (fix: address root causes of duplicate and stale session groups #696)
- feat: replace state.groupMessages.delta listener with useGroupMessages hook (feat: replace state.groupMessages.delta listener with useGroupMessages hook #698)
- fix: remove emitGoalUpdated/emitGoalProgressUpdated from goal RPC handlers (Task 3.2) (fix: remove emitGoalUpdated/emitGoalProgressUpdated from goal RPC handlers (Task 3.2) #695)
- feat: redesign Goals tab with two-step create wizard and improved cards (feat: redesign Goals tab with two-step create wizard and improved cards #703)
- fix: fix task cancellation cascade and allow manual UI state transitions (fix: fix task cancellation cascade and allow manual UI state transitions #702)
- feat: remove daemon-side state.groupMessages.delta emissions and add reconnect handling (feat: remove daemon-side state.groupMessages.delta emissions and add reconnect handling #700)
- feat: migrate TaskConversationRenderer to liveQuery and add E2E streaming tests (feat: migrate TaskConversationRenderer to liveQuery and add E2E streaming tests #701)
- feat: replace room.task.update listener with tasks.byRoom LiveQuery (Task 3.3) (feat: replace room.task.update listener with tasks.byRoom LiveQuery (Task 3.3) #705)
- test: add reconnect resync guard test for review-status toast (Task 3.4) (test: add reconnect resync guard test for review-status toast (Task 3.4) #709)
- fix: reuse existing dev proxy instance instead of failing on startup (fix: reuse existing dev proxy instance instead of failing on startup #706)
- fix: fix TaskView not showing messages after daemon restart (fix: fix TaskView not showing messages after daemon restart #707)
- feat: expand TaskView info panel with task ID, group ID, full session IDs, model switcher, and metadata (feat: expand TaskView info panel with task ID, group ID, full session IDs, model switcher, and metadata #708)
- feat: create useRoomLiveQuery hook and integrate with Room.tsx (Task 3.5) (feat: create useRoomLiveQuery hook and integrate with Room.tsx (Task 3.5) #711)
- fix: prevent UNIQUE constraint crash in spawnGroupForTask and handle race gracefully (fix: prevent UNIQUE constraint crash in spawnGroupForTask and handle race gracefully #710)
- feat: add stale-event guard for LiveQuery subscriptions (Task 3.6) (feat: add stale-event guard for LiveQuery subscriptions (Task 3.6) #712)
- test(e2e): add LiveQuery task/goal update E2E tests (Task 3.7) (test(e2e): add LiveQuery task/goal update E2E tests (Task 3.7) #713)
- docs: add dev branch e2e tests health check plan (docs: add dev branch e2e tests health check plan #704)
- feat: enable Bash and full MCP access for Room Agent session (feat: enable Bash and full MCP access for Room Agent session #715)
- fix: prevent full conversation reload when sending a message in TaskView (fix: prevent full conversation reload when sending a message in TaskView #716)
- Fix TaskView recovery after server restart (Fix TaskView recovery after server restart #718)
- refactor: canonical TaskView timeline + runtime startup state persistence (refactor: canonical TaskView timeline + runtime startup state persistence #720)
- feat: audit and fix room agent MCP tools parity vs backend capabilities (feat: audit and fix room agent MCP tools parity vs backend capabilities #719)
- fix: propagate reactiveDb to TaskRepository for LiveQuery notifications + rename Goals to Missions (fix: propagate reactiveDb to TaskRepository for LiveQuery notifications + rename Goals to Missions #717)
- test: fix pre-existing test failures uncovered during Task 6.2 verification (test: fix pre-existing test failures uncovered during Task 6.2 verification #721)
- task/bug task view message timestamps show current time (task/bug task view message timestamps show current time #722)
- fix(e2e): disambiguate Missions tab locator to avoid sidebar button clash (fix(e2e): disambiguate Missions tab locator to avoid sidebar button clash #723)
- fix: use reactive db facade for sdk message write paths (fix: use reactive db facade for sdk message write paths #724)
- fix(e2e): update mission-creation selectors for two-step wizard flow (fix(e2e): update mission-creation selectors for two-step wizard flow #725)
- refactor: unify message delivery semantics + align TaskView pending UX (refactor: unify message delivery semantics + align TaskView pending UX #726)
- docs: document Task 4 verification - all E2E tests pass on dev CI (docs: document Task 4 verification - all E2E tests pass on dev CI #729)
- chore: bump version to 0.8.0 (chore: bump version to 0.8.0 #728)
- docs: document Task 4 verification - all E2E tests pass on dev CI (docs: document Task 4 verification - all E2E tests pass on dev CI #731)
- docs: update verification doc with final CI run info (docs: update verification doc with final CI run info #732)
- chore(release): sync main history + release automation for v0.8.0 (chore(release): sync main history + release automation for v0.8.0 #733)
- chore: update dependencies and pin all versions to exact (chore: update all dependencies and pin exact versions #736)
- plan: TaskViewV2 turn-based conversation summary with slide-out panels (plan: TaskViewV2 turn-based conversation summary with slide-out panels #666)
- chore: update @anthropic-ai/claude-agent-sdk to 0.2.81 (chore: update @anthropic-ai/claude-agent-sdk to 0.2.81 #737)
- feat: implement ReadonlySessionChat and SlideOutPanel components (feat: implement ReadonlySessionChat and SlideOutPanel components #739)
- test: unit tests for ReadonlySessionChat and SlideOutPanel (test: unit tests for ReadonlySessionChat and SlideOutPanel #741)
- feat: extract shared hooks, sub-components, constants from TaskView/TaskConversationRenderer (feat: extract shared hooks, sub-components, constants from TaskView/TaskConversationRenderer #740)
- feat: define TurnBlock types and implement useTurnBlocks hook (feat: define TurnBlock types and implement useTurnBlocks hook #742)
- test: add real-time delta tests for useTurnBlocks (test: add real-time delta tests for useTurnBlocks #743)
- feat: implement TurnSummaryBlock component (feat: implement TurnSummaryBlock component #744)
- feat: implement RuntimeMessageRenderer component with unit tests (feat: implement RuntimeMessageRenderer component with unit tests #745)
- test: unit tests for TurnSummaryBlock component (test: unit tests for TurnSummaryBlock component #746)
- feat: add client-side pagination to TaskView message list (feat: add client-side pagination to TaskView message list #738)
- feat: implement TaskViewV2 component with turn-based conversation view (feat: implement TaskViewV2 component with turn-based conversation view #747)
- feat: implement TaskViewToggle and integrate into Room.tsx (feat: implement TaskViewToggle and integrate into Room.tsx #748)
- test: E2E tests for TaskViewV2 toggle, persistence, and structural presence
- docs: plan for unifying agent communication and workflow graph model (docs: plan for unifying agent communication and workflow graph model #750)
- refactor: rename send_feedback to send_message in step agent tools (refactor: rename send_feedback to send_message in step agent tools #751)
- test: clarify send_message rename from send_feedback in step-agent-tools.test.ts (test: clarify send_message rename from send_feedback in step-agent-tools.test.ts #754)
- refactor: remove request_peer_input tool from step agent tools (refactor: remove request_peer_input tool from step agent tools #756)
- refactor: remove relay_message from Task Agent tool set (refactor: remove relay_message from Task Agent tool set #755)
- test: add Task Agent channel topology tests to cross-agent messaging (test: add Task Agent channel topology tests to cross-agent messaging #757)
- feat: give Task Agent the send_message tool via channel topology (feat: give Task Agent the send_message tool via channel topology #758)
- feat: add migration 45 to rename step to node in workflow tables (feat: add migration 45 to rename step to node in workflow tables #752)
- fix: route human message to correct agent based on target parameter (fix: route human message to correct agent based on target parameter #762)
- fix: prevent TaskView error on tab resume due to race condition (fix: prevent TaskView error on tab resume due to race condition #761)
- feat: auto-create Task Agent channels on node addition (feat: auto-create Task Agent channels on node addition #760)
- test: add E2E tests for Task Agent visible node in visual editor (test: add E2E tests for Task Agent visible node in visual editor #759)
- feat: add channel edge rendering to EdgeRenderer (feat: add channel edge rendering to EdgeRenderer #763)
- test(e2e): add E2E tests for channel direction visualization (test(e2e): add E2E tests for channel direction visualization #764)
- feat: integrate channel edges into WorkflowCanvas (feat: integrate channel edges into WorkflowCanvas #765)
- task/task 21 rename shared types in spacets and space u (task/task 21 rename shared types in spacets and space u #753)
- refactor: rename step → node in storage repositories (refactor: rename step → node in storage repositories #767)
- feat(TaskViewV2): UI/UX review — fix turn splitting, task-dispatch context, and renderable message window (feat(TaskViewV2): UI/UX review — fix turn splitting, task-dispatch context, and renderable message window #766)
- refactor: update step→node terminology in runtime comments and export-format (refactor: update step→node terminology in runtime comments and export-format #768)
- feat: rename WorkflowStepCard to WorkflowNodeCard and update all references (feat: rename WorkflowStepCard to WorkflowNodeCard and update all references #769)
- test: update all tests for step→node rename (test: update all tests for step→node rename #770)
- fix: reduce redundant concurrent tick spawn attempts (fix: reduce redundant concurrent tick spawn attempts #771)
- fix: delete stale branch instead of falling back to UUID in worktree-manager (fix: delete stale branch instead of falling back to UUID in worktree-manager #772)
- fix: improve SDK startup timeout — exponential backoff, more retries, better diagnostics (fix: improve SDK startup timeout — exponential backoff, more retries, better diagnostics #773)
- feat(TaskViewV2): AgentTurnBlock UI/UX polish + performance optimizations (feat(TaskViewV2): AgentTurnBlock UI/UX polish + performance optimizations #776)
- test: add unit tests for recurring mission schedule tools (set_schedule, pause_schedule, resume_schedule) (test: add unit tests for recurring mission schedule tools (set_schedule, pause_schedule, resume_schedule) #778)
- fix(e2e): use exact text match for 'Message number 1' selector (fix(e2e): use exact text match for 'Message number 1' selector #779)
- feat(visual-editor): add Task Agent virtual node to data model (feat(visual-editor): add Task Agent virtual node to data model #774)
- feat: extend WorkflowNodeAgent schema with role, model, systemPrompt fields (feat: extend WorkflowNodeAgent schema with role, model, systemPrompt fields #777)
- feat(visual-editor): render Task Agent as distinct pinned node on canvas (feat(visual-editor): render Task Agent as distinct pinned node on canvas #780)
- feat(visual-editor): add per-slot agent override UI with visual indicators (feat(visual-editor): add per-slot agent override UI with visual indicators #783)
- test(space): add per-slot override tests for export/import pipeline (test(space): add per-slot override tests for export/import pipeline #782)
- feat(space): resolve base + override config at runtime when spawning agent sessions (feat(space): resolve base + override config at runtime when spawning agent sessions #784)
- plan: simplify ID and folder path system (plan: simplify ID and folder path system #787)
- feat(shared): add short ID utilities and prefix constants (feat(shared): add short ID utilities and prefix constants #788)
- feat(storage): add migration 47 — short_id columns and short_id_counters table (feat(storage): add migration 47 — short_id columns and short_id_counters table #789)
- feat(daemon): add ShortIdAllocator service with atomic counter allocation (feat(daemon): add ShortIdAllocator service with atomic counter allocation #790)
- feat(shared): add shortId field to NeoTask and RoomGoal interfaces (feat(shared): add shortId field to NeoTask and RoomGoal interfaces #791)
- feat(worktree): add getProjectShortKey and sentinel-based collision detection (feat(worktree): add getProjectShortKey and sentinel-based collision detection #792)
- test(worktree): add TEST_WORKTREE_BASE_DIR override and old-path verifyWorktree tests (test(worktree): add TEST_WORKTREE_BASE_DIR override and old-path verifyWorktree tests #794)
- feat(storage): add short ID assignment and backfill in TaskRepository (feat(storage): add short ID assignment and backfill in TaskRepository #793)
- feat(storage): add short ID assignment and backfill in GoalRepository (#task-23) (feat(storage): add short ID assignment and backfill in GoalRepository (#task-23) #795)
- feat(storage): wire ShortIdAllocator into TaskManager and GoalManager at all instantiation sites (feat(storage): wire ShortIdAllocator into TaskManager and GoalManager at all instantiation sites #796)
- test(short-id): add multi-tenant isolation unit tests for scoped counters (test(short-id): add multi-tenant isolation unit tests for scoped counters #798)
- feat(lib): add ID resolution helpers for task and goal UUID/short-ID lookup (feat(lib): add ID resolution helpers for task and goal UUID/short-ID lookup #800)
- docs: add agent memory research report with phased FTS5 + vector recommendation (docs: add agent memory research report with phased FTS5 + vector recommendation #785)
- docs: add LSP integration research — Claude Agent SDK and native LSP options (docs: add LSP integration research — Claude Agent SDK and native LSP options #786)
- feat(web): replace flat progress bar with circular indicator in task list items (feat(web): replace flat progress bar with circular indicator in task list items #801)
- fix(task): transition review task to in_progress when human sends a message (fix(task): transition review task to in_progress when human sends a message #802)
- fix(recurring): auto-compute nextRunAt and implement plan reuse (fix(recurring): auto-compute nextRunAt and implement plan reuse #781)
- feat(web): remove approve and cancel buttons from task list items (feat(web): remove approve and cancel buttons from task list items #803)
- feat(web): show room-specific bottom tabs on mobile when in room context (feat(web): show room-specific bottom tabs on mobile when in room context #804)
- feat(rpc): accept short IDs in goal handlers and expose shortId in responses (feat(rpc): accept short IDs in goal handlers and expose shortId in responses #805)
- fix(web): fix goal timestamp always showing "now", improve list item layout (fix(web): fix goal timestamp always showing "now", improve list item layout #807)
- feat(leader): verify PR mergeability before submit_for_review (feat(leader): verify PR mergeability before submit_for_review #808)
- feat(rpc): accept short IDs in task handlers and return shortId in responses (#task-32) (feat(rpc): accept short IDs in task handlers and return shortId in responses (#task-32) #806)
- feat(room): include shortId in TaskSummary for room.overview (feat(room): include shortId in TaskSummary for room.overview #810)
- feat(web): update task URL route patterns to accept short IDs (feat(web): update task URL route patterns to accept short IDs #811)
- docs(plan): comprehensive MCP support review and external MCP integration (plan: comprehensive MCP support review and external MCP integration #797)
- feat(web): display short IDs in task cards with click-to-copy badge (feat(web): display short IDs in task cards with click-to-copy badge #812)
- docs: document Planner web search capability (docs: document Planner web search capability #815)
- test(short-id): add backward compatibility unit tests for legacy rows (test(short-id): add backward compatibility unit tests for legacy rows #813)
- docs: add MCP architecture audit report (docs: add MCP architecture audit report #816)
- feat(web): display short IDs in goals editor with click-to-copy badge (feat(web): display short IDs in goals editor with click-to-copy badge #817)
- feat(storage): add app_mcp_servers table, types, and repository (feat(storage): add app_mcp_servers table, types, and repository #818)
- test(short-id): add online integration test for full short ID lifecycle (test(short-id): add online integration test for full short ID lifecycle #819)
- test(e2e): add short ID display and copy test; fix LiveQuery SQL missing short_id (test(e2e): add short ID display and copy test; fix LiveQuery SQL missing short_id #821)
- feat(mcp): add AppMcpLifecycleManager class and wire mcp.registry.listErrors RPC (feat(mcp): add AppMcpLifecycleManager class and wire mcp.registry.listErrors RPC #820)
- feat(mcp): seed default fetch-mcp and brave-search entries on daemon startup (feat(mcp): seed default fetch-mcp and brave-search entries on daemon startup #823)
- feat(task): make rate/usage limits first-class task concerns with persistence and auto-retry (feat(task): make rate/usage limits first-class task concerns with persistence and auto-retry #809)
- task/allow changing worker and leader model in task exp (task/allow changing worker and leader model in task exp #826)
- docs: Space V2 vs Room Gap Analysis (docs: Space V2 vs Room Gap Analysis #828)
- fix(agent): always restart query when switching models mid-session (fix: model switch not taking effect on coder session #827)
- docs: System-wide @ referencing system plan (docs: System-wide @ referencing system plan #830)
- fix(goal-handlers): resolve short task IDs to full UUIDs in task.approve (fix(goal-handlers): resolve short task IDs to full UUIDs in task.approve #831)
- fix(web): fix pre-existing test regressions in final regression pass (fix(web): fix pre-existing test regressions in final regression pass #824)
- refactor(ui): reduce task list info density and update mobile room bottom nav (refactor(ui): reduce task list info density and update mobile room bottom nav #829)
- feat(shared): define reference types for @ referencing system (feat(shared): define reference types for @ referencing system #835)
- feat(web): add useReferenceAutocomplete hook for @ reference system (feat(web): add useReferenceAutocomplete hook for @ reference system #836)
- feat(file-index): implement workspace file index with polling-based cache refresh (feat(file-index): implement workspace file index with polling-based cache refresh #837)
- feat(reference): implement reference.resolve RPC handler with shared types (feat(reference): implement reference.resolve RPC handler with shared types #839)
- fix(agent): clear models cache on restart/reset to fix mid-turn model switch (fix(agent): clear models cache on restart/reset to fix mid-turn model switch #834)
- feat(web): add ReferenceAutocomplete component for @ reference system (feat(web): add ReferenceAutocomplete component for @ reference system #843)
- feat(references): implement file/folder resolvers and shared reference types (feat(references): implement file/folder resolvers and shared reference types #842)
- feat(reference): implement reference.search RPC handler with FileIndex (feat(reference): implement reference.search RPC handler with FileIndex #841)
- feat(web): integrate reference autocomplete with InputTextarea (feat(web): integrate reference autocomplete with InputTextarea #846)
- feat(agent): create ReferenceResolver service and shared reference types (feat(agent): create ReferenceResolver service and shared reference types #838)
- feat(session): implement message preprocessing with @ reference resolution (feat(session): implement message preprocessing with @ reference resolution #844)
- feat(web): integrate reference autocomplete with MessageInput (feat(web): integrate reference autocomplete with MessageInput #845)
- feat(web): add MentionToken component for @ reference rendering (feat(web): add MentionToken component for @ reference rendering #850)
- feat(web): integrate @ref token rendering in SDKUserMessage (feat(web): integrate @ref token rendering in SDKUserMessage #852)
- feat(e2e): add room entity and reference autocomplete helpers (feat(e2e): add room entity and reference autocomplete helpers #851)
- task/mobile ux and touch support (task/mobile ux and touch support #849)
- feat(agent): implement agent context injection for @ references (feat: add single binary compilation and npm release pipeline #3.4) (feat(agent): implement agent context injection for @ references #848)
- test(e2e): add reference autocomplete E2E tests and helpers (test(e2e): add reference autocomplete E2E tests and helpers #854)
- feat(references): apply faded strikethrough visual state for deleted @ref entities (feat(references): implement persistence and history display for @ref tokens #853)
- feat(web,e2e): integrate MentionToken rendering and add reference autocomplete E2E tests (feat(web,e2e): integrate MentionToken rendering and add reference autocomplete E2E tests #855)
- test(e2e): add edge cases, mobile, and accessibility tests for reference autocomplete (test(e2e): add edge cases, mobile, and accessibility tests for reference autocomplete #856)
- feat(rpc): add MCP registry CRUD handlers and mcpServers.global LiveQuery (feat(rpc): add MCP registry CRUD handlers and mcpServers.global LiveQuery #822)
- feat(room): integrate AppMcpLifecycleManager into RoomRuntimeService (Task 3.2) (feat(room): integrate AppMcpLifecycleManager into RoomRuntimeService (Task 3.2) #858)
- feat(room): inject merged MCP servers into worker sessions via setRuntimeMcpServers() (Task 3.3) (feat(room): inject merged MCP servers into worker sessions via setRuntimeMcpServers() (Task 3.3) #860)
- task/task 34 integrate lifecycle manager into space mod (task/task 34 integrate lifecycle manager into space mod #861)
- Plan: Refactor Space Workflow from Step-Centric to Agent-Centric Collaboration Model (Plan: Refactor Space Workflow from Step-Centric to Agent-Centric Collaboration Model #857)
- feat(space): add completion_summary to space_tasks for agent completion state (feat(space): add completion_summary to space_tasks for agent completion state #862)
- feat(space): add report_done MCP tool to step agents (feat(space): add report_done MCP tool to step agents #863)
- feat(space): unified channel resolution with resolveChannels() and validateChannels() (feat(space): unified channel resolution with resolveChannels() and validateChannels() #864)
- feat(storage+rpc): add per-room MCP enablement storage and RPC (Task 4.1) (feat(storage+rpc): add per-room MCP enablement storage and RPC (Task 4.1) #825)
- feat(mcp): wire per-room enablement into AppMcpLifecycleManager (Task 4.2) (feat(mcp): wire per-room enablement into AppMcpLifecycleManager (Task 4.2) #872)
- feat(web): add MCP registry API helpers and LiveQuery store (Task 5.1) (feat(web): add MCP registry API helpers and LiveQuery store (Task 5.1) #873)
- feat(web): add Application-Level MCP Settings Panel (Task 5.2) (feat(web): add Application-Level MCP Settings Panel (Task 5.2) #875)
- feat(web): add per-room MCP enablement UI in RoomSettings (Task 5.3) (feat(web): add per-room MCP enablement UI in RoomSettings (Task 5.3) #874)
- test(e2e): add MCP registry UI and per-room enable/disable E2E test (Task 7.1) (test(e2e): add MCP registry UI and per-room enable/disable E2E test (Task 7.1) #876)
- fix(room): route task session model switches through RoomRuntimeService (fix(room): route task session model switches through RoomRuntimeService #871)
- test(space): add report_done tool and unit tests for agent completion signaling (test(space): add report_done tool and unit tests for agent completion signaling #865)
- feat(space): extend WorkflowChannel type and rename WorkflowNodeAgent.role to .name (feat(space): extend WorkflowChannel type and rename WorkflowNodeAgent.role to .name #868)
- feat(space): add agent liveness guard with report_done timeout (Task 2.6) (feat(space): add agent liveness guard with report_done timeout (Task 2.6) #878)
- feat(space): add ChannelGateEvaluator for agent-centric channel gate enforcement (feat(space): add ChannelGateEvaluator for agent-centric channel gate enforcement #881)
- feat(shared): extend ResolvedChannel with gate field for policy enforcement (feat(shared): extend ResolvedChannel with gate field for policy enforcement #880)
- feat(db): add unified channels column to space_workflows (Migration 53) (feat(db): add unified channels column to space_workflows (Migration 53) #882)
- feat(web): update visual workflow editor to display and configure channels (Task 7.1)
lsm
left a comment
There was a problem hiding this comment.
🤖 Review by glm-5-turbo (GLM)
Model: glm-5-turbo | Client: NeoKai | Provider: GLM
Summary
The implementation successfully replaces transition arrows with channel connections in the visual workflow editor. The new ChannelEditor.tsx is a clean, unified editor supporting all 4 gate condition types. Channels are rendered as teal edges (dashed for ungated, solid for gated) with proper selection support. The list-based WorkflowEditor correctly replaces the Transitions section with a Channels section. All 202 tests across 5 test files pass.
Acceptance Criteria Verification
- Channels visible (no transition arrows): YES --
VisualWorkflowEditor.tsxpassestransitions={[]}toWorkflowCanvas(line 892), andchannelEdgesare computed and passed via thechannelsprop. Tests confirm no[data-edge-id]elements are rendered. - Users can add/edit/delete channels: YES --
ChannelEditor.tsxprovides full CRUD withAddChannelFormandChannelEntrycomponents. ThehandleChange,handleDelete, andhandleAddcallbacks all callonChangecorrectly. - Gate config UI supports all condition types: YES --
GateConfigcomponent supportsalways,human,condition, andtask_resultvia theCONDITION_LABELSmap. The channel editor integrates it at line 292. - Visual distinction for gated channels: YES --
EdgeRenderer.tsxrenders gated channels as solid lines and ungated channels as dashed lines (line 410), with white highlight on selection. - One editor for all channel types: YES --
ChannelEditor.tsxis used in bothWorkflowEditor.tsx(list editor, line 570) andVisualWorkflowEditor.tsx(visual editor, line 1034).
Issues Found
[P1] Dropdown mode loses fan-out support for to field
File: packages/web/src/components/space/ChannelEditor.tsx lines 247-261
When agentRoles is non-empty, the to field renders as a single-select dropdown. The WorkflowChannel.to type supports string | string[] (fan-out). When a channel has to: ['reviewer', 'coder'], the dropdown's value evaluates to '' (line 249: typeof channel.to === 'string' ? channel.to : ''), making the value display incorrectly. Selecting a new value overwrites the array with a single string, silently dropping the fan-out topology. This should either use a multi-select dropdown when agentRoles is present, or fall back to a text input when the existing to value is an array.
[P1] Channel selection in EdgeRenderer has a potential leak when clicking ungated channels without an id
File: packages/web/src/components/space/visual-editor/EdgeRenderer.tsx lines 441-448
The click handler condition onChannelSelect && channel.id != null correctly guards against channels without an ID. However, the hitbox path still renders with pointer-events: 'stroke' for all channels (line 440), and the cursor shows as 'pointer' whenever onChannelSelect is defined, even for channels without an ID. This creates a confusing UX where the cursor indicates clickability but clicking does nothing. Consider setting cursor to 'default' for channels without an ID.
[P2] No visual distinction between gate types on channel edges
File: packages/web/src/components/space/visual-editor/EdgeRenderer.tsx lines 398-467
While the acceptance criteria's "visual distinction for gated channels" is met via dashed vs. solid styling, all gated channel types (human, condition, task_result) look identical on the canvas -- they all render as solid teal lines. Transition edges already have per-type colors and icons. Adding a small gate-type indicator (e.g., a colored dot or small icon at the midpoint) would improve the visual information density. This is a polish improvement, not a correctness issue.
[P2] computeChannelEdges in WorkflowCanvas.tsx may produce duplicate edges with the external channels prop
File: packages/web/src/components/space/visual-editor/WorkflowCanvas.tsx lines 324-326
The effectiveChannels merge at line 325-326 appends externally-passed channels to computed ones without deduplication: channels.length > 0 ? [...computedChannelEdges, ...channels] : computedChannelEdges. If both sources produce edges for the same (fromStepId, toStepId) pair, duplicates will render on top of each other. The computeChannelEdges function has its own dedup via seenEdges, but the merge step does not dedup across sources. Currently this does not cause visible issues because VisualWorkflowEditor always passes both, but it is a latent bug if the component is reused differently.
[P3] Minor: NodeConfigPanel.tsx still has a duplicated removeAgent function from WorkflowNodeCard.tsx
File: packages/web/src/components/space/visual-editor/NodeConfigPanel.tsx lines 101-116 vs packages/web/src/components/space/WorkflowNodeCard.tsx lines 163-178
The removeAgent function is nearly identical in both files ( clears channels when switching to single-agent mode). This duplication is not introduced by this PR but is worth noting as a follow-up refactoring opportunity.
Test Coverage
Good coverage with 202 tests across 5 test files:
ChannelEditor.test.tsx: 21 tests covering empty state, CRUD, gate badges, highlight, dropdown vs text input modes, fan-out parsing, form clearing, cyclic checkboxWorkflowEditor.test.tsx: Comprehensive tests for the Channels section integrationVisualWorkflowEditor.test.tsx: Confirms transitions are hidden and channels are primary visual connectionsNodeConfigPanel.test.tsx: Verifies auto-create channel logic was removed; channels are workflow-level nowVisualWorkflowEditor.transitionGuard.test.tsx: Task Agent transition guard tests
Missing test coverage:
- No test for channel edge rendering in EdgeRenderer (teal dashed/solid, selection highlight)
- No test verifying that the
highlightIndexeffect handles the case where the user manually collapses the highlighted channel
Recommendation
APPROVE -- The implementation is complete, well-tested, and meets all acceptance criteria. The P1 issues around dropdown fan-out and cursor UX for non-ID channels should be addressed as follow-ups.
lsm
left a comment
There was a problem hiding this comment.
🤖 Review by glm-5-turbo (GLM)
Model: glm-5-turbo | Client: NeoKai | Provider: GLM
All three review feedback fixes have been verified. The changes are minimal, targeted, and correct.
Fix 1: ChannelEditor.tsx — fan-out fallback to text input (P1)
File: packages/web/src/components/space/ChannelEditor.tsx (line 246)
The condition for rendering the <select> dropdown for the "To" field now checks both agentRoles.length > 0 and typeof channel.to === 'string'. When channel.to is an array (fan-out mode), it correctly falls back to the text input which displays the comma-separated values via formatTo(channel.to) and parses them back via parseToField(...).
This is correct. The previous code would render the <select> with value="" (since typeof channel.to === 'string' was false, the ternary returned ''), which would silently drop the array values. The fix preserves the fan-out data.
Note (P3): The same pattern does not apply to the "From" field because the WorkflowChannel type defines from: string (never an array), so no change is needed there.
Fix 2: EdgeRenderer.tsx — pointer cursor gating (P1)
File: packages/web/src/components/space/visual-editor/EdgeRenderer.tsx (line 440-442)
The cursor style now checks both onChannelSelect and channel.id != null before showing pointer. This matches the onClick handler condition on line 444-445 which already guarded on both of these conditions. Previously, the cursor was pointer whenever onChannelSelect was defined, even for ungated/computed channels without IDs (where channel.id is undefined).
The fix is correct and makes the visual affordance (cursor) consistent with the actual behavior (clickability).
Fix 3: WorkflowCanvas.tsx — effectiveChannels deduplication (P2)
File: packages/web/src/components/space/visual-editor/WorkflowCanvas.tsx (lines 326-331)
The merge logic now deduplicates by building a Set of fromStepId:toStepId keys from computedChannelEdges and filtering those keys out of the explicit channels prop before concatenating. This correctly prevents overlapping edges when the same channel is present in both the node-computed edges and the explicit channels prop.
The deduplication key uses fromStepId:toStepId which is the same key format used by computeChannelEdges() internally (line 200 of the same file), maintaining consistency.
Note (P3): The effectiveChannels is computed via an IIFE rather than useMemo. Since computedChannelEdges is already memoized and channels is a prop (stable by reference in typical usage), this is acceptable. If the component were re-rendered frequently with different channels references, wrapping this in useMemo with [computedChannelEdges, channels] would be a minor optimization, but it is not a concern in practice.
Test coverage
All 115 existing tests pass. The existing test suite covers:
- ChannelEditor: comma-separated parsing (line 193), add with fan-out (line 193)
- EdgeRenderer: channel rendering, selection, cursor, click handlers
- WorkflowCanvas:
computeChannelEdgesdeduplication (line 610)
The three fixes are well-understood behavioral refinements that are validated by the existing test infrastructure. No new tests were strictly needed since these are narrow guard-condition changes, but adding explicit tests for the fan-out-to-text-input fallback and the cursor-not-pointer-on-ungated-edge case would improve regression coverage.
Recommendation: APPROVE — All fixes correctly address the reported issues with no adverse effects.
…nnels (Task 7.1) - Add ChannelEditor.tsx: unified CRUD editor for WorkflowChannel[] with full gate configuration (always, human, condition, task_result) and per-channel expand/collapse - Update EdgeRenderer.tsx: channel edges now support gateType (solid=gated, dashed=ungated), selectedChannelId highlight, and onChannelSelect callback - Update WorkflowCanvas.tsx: pass selectedChannelId and onChannelSelect through to EdgeRenderer - Update VisualWorkflowEditor.tsx: channels panel with selection sync, hide transition arrows (channels are the primary visual connections) - Update WorkflowEditor.tsx: replace Transitions section with Channels section using ChannelEditor - Update NodeConfigPanel.tsx: remove ChannelsPanelSection (channels managed at workflow level) - Update WorkflowNodeCard.tsx: add testId="exit-gate-select" for GateConfig select testability - Add 21 unit tests for ChannelEditor covering all CRUD paths, gate badges, expand/collapse, highlightIndex, agentRoles dropdowns, and text input modes - Update existing tests to reflect transitions-hidden and workflow-level channel management
- ChannelEditor: fall back to text input when channel.to is an array in dropdown mode, preserving fan-out topology instead of silently dropping it - EdgeRenderer: only show pointer cursor for channel hitboxes when both onChannelSelect is defined and channel.id is non-null (prevents misleading pointer on non-clickable edges) - WorkflowCanvas: deduplicate effectiveChannels when merging computed and external channels to prevent duplicate edge rendering for the same fromStepId+toStepId pair
c26f5b9 to
00309cd
Compare
…ent UI - space-multi-agent-editor: fix channel section locators (moved to workflow level in #884), update channel form testids (add-channel-submit-button, new-channel-from/to-select), fix channel count expectations (no default channels created), remove stale empty-state assertion (channels are workflow-level, not cleared by switch-to-single) - space-multi-agent-editor: fix ChannelTopologyBadge to read from workflowChannels prop instead of step.channels (channels now managed at workflow level, not node level) - WorkflowNode: add workflowChannels prop, update ChannelTopologyBadge to filter by node agents - WorkflowCanvas: computeChannelEdges reads from node.workflowChannels - Update unit test fixtures to use workflowChannels prop
…ent UI - space-multi-agent-editor: fix channel section locators (moved to workflow level in #884), update channel form testids (add-channel-submit-button, new-channel-from/to-select), fix channel count expectations (no default channels created), remove stale empty-state assertion (channels are workflow-level, not cleared by switch-to-single) - space-multi-agent-editor: fix ChannelTopologyBadge to read from workflowChannels prop instead of step.channels (channels now managed at workflow level, not node level) - WorkflowNode: add workflowChannels prop, update ChannelTopologyBadge to filter by node agents - WorkflowCanvas: computeChannelEdges reads from node.workflowChannels - Update unit test fixtures to use workflowChannels prop
…ent UI (#1003) * fix(e2e): update multi-agent editor and settings modal tests for current UI - space-multi-agent-editor: fix channel section locators (moved to workflow level in #884), update channel form testids (add-channel-submit-button, new-channel-from/to-select), fix channel count expectations (no default channels created), remove stale empty-state assertion (channels are workflow-level, not cleared by switch-to-single) - space-multi-agent-editor: fix ChannelTopologyBadge to read from workflowChannels prop instead of step.channels (channels now managed at workflow level, not node level) - WorkflowNode: add workflowChannels prop, update ChannelTopologyBadge to filter by node agents - WorkflowCanvas: computeChannelEdges reads from node.workflowChannels - Update unit test fixtures to use workflowChannels prop * style: fix biome formatting in WorkflowNode.tsx