Conversation
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Introduces the cli_backends package with unified RuntimeProvider protocol, ContainerProcessBridge for docker exec streaming, ClaudeCodeProvider for parsing Claude Code NDJSON stream-json output, and a RuntimeProviderRegistry singleton. Includes 13 unit tests covering data types, event parsing, registry lookup, and async session operations. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Event-sourced execution lifecycle with row-lock seq increment, snapshot projection via apply_execution_event reducer, and 20 unit tests covering all event types plus immutability and full lifecycle. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Repositories for Mission and AgentProfile with workspace-scoped queries, MissionService with assign_to_agent and dispatch_mission lifecycle, prompt builder for CLI agent execution, and 7 unit tests for prompt generation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Docker container lifecycle management (create, stop, remove, exec), CredentialInjector for API key injection, CLISkillInjector for writing skill definitions, RuntimeConfigInjector for CLAUDE.md generation. 13 unit tests covering data classes, CLAUDE.md building, and async injection calls. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Ties together container lifecycle, credential/skill/config injection, RuntimeProvider execution, message draining to ExecutionEvents, final status marking, and container cleanup. 14 unit tests for message-to-event type mapping and payload conversion. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ExecutionSubscriptionManager for in-memory connection tracking, ExecutionSubscriptionHandler for subscribe/unsubscribe/ping frames with snapshot replay and event catch-up. 8 unit tests covering subscription lifecycle, broadcast fan-out, and error disconnection. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Pydantic schemas for all three resources, API routers with CRUD + dispatch + cancel operations, registered in v1 router. WS /ws/executions endpoint for execution streaming. Runtime provider init on startup. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Node 22 slim base with Claude Code CLI, non-root agent user, git/curl/jq utilities. Added to docker-compose build profile alongside openclaw-image. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
10 integration tests validating the full data flow: schema round-trips, prompt building, registry lifecycle, container injection pipeline, event sourcing with reducer, WebSocket subscription manager, message mapping, Claude Code NDJSON parsing, container lifecycle, and end-to-end data flow from mission to completed execution projection. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…h new models and services
…g, dispatch C1: Remove CredentialInjector.inject() file-writing logic that wrote plaintext API keys to /etc/environment. The class now only builds the env dict. C2: Rename ExecutionStatus → MissionExecutionStatus in execution.py to avoid collision with graph_execution.py's ExecutionStatus. Updated all imports, the Alembic migration enum name, and removed the AgentExecutionStatus alias. C3: Switch container_service.create_container from -e flags to --env-file with a temp file (mode 0600) deleted after creation, so API keys no longer appear in the process tree. Removed env parameter from container_bridge exec_streaming since credentials are set at container creation time. I2: dispatch_mission now launches an ExecutionRunner via asyncio.create_task so executions actually start instead of staying QUEUED forever. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds sidebar entries for Missions and Agents, placeholder page routes, TypeScript types, service layers, and React Query hooks for the mission-driven multi-agent execution frontend foundation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Implements CodexProvider (JSON-RPC 2.0 over stdio) and OpenClawProvider (stderr NDJSON), following the same pattern as ClaudeCodeProvider. Updates registry to register all three providers and Dockerfile to install Codex CLI. Adds 14 new unit tests covering event parsing for both providers and registry integration. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add real-time WebSocket execution stream with polling fallback - Fix dark mode: replace hardcoded colors with CSS variables across execution-event, execution-timeline, mission-column, mission-card, and mission-detail-panel - Fix undefined CSS vars (--bg-secondary, --bg-hover) with --surface-3 - Add proper loading, error, and empty states to execution timeline - Add mobile touch scrolling to mission board Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…y-badge and agent-status Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…t, get_agent_result)
…, reducer perf, task error handling Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add human-agent comment system for missions with auto-posting on execution completion/failure, and fix critical chain-closure bugs: execution completion now writes back mission status, clears current_execution_id, terminates containers on cancel, and broadcasts real-time events via WebSocket. Frontend notification provider invalidates queries on mission/comment updates; Kanban shows all 7 status columns. Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
…tch 400
- Guard against non-dict JSON lines and string content blocks in Claude
Code stream-json parsing (claude_code.py)
- Add isinstance check on result event's result field before calling .get()
- Default event.payload to {} in execution-event.tsx to prevent undefined access
- Expand ExecutionEventType and switch cases to handle backend event aliases
(assistant_text, tool_use_start, tool_use_end, execution_started, etc.)
- Allow re-dispatch of IN_PROGRESS missions when current execution is terminal
- Mission board UI and filtering improvements
Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
…sLive prop - Share EVENT_CONFIG objects between alias pairs instead of duplicating - Use config.label for status fallback instead of string replace - Extract AgentPickerContent sub-component to eliminate duplicated Popover+Command blocks in mission-detail-panel - Add isLive prop to ExecutionTimeline; past executions skip WebSocket and polling (N+1 connection fix) - Limit past executions to 10 in detail panel - Hoist inline imports in mission_service.py to module level - Use Date.parse for isOverdue to avoid unnecessary Date allocations Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
… workspace ACL - Fix SQL injection in memory_service.py: replace raw f-string topic query with text().bindparams() parameterized binding - Add execution ownership verification to inject_message and approve_action endpoints — prevents cross-user execution manipulation - Add DANGEROUS_PATTERNS command denylist to execute_local_command, shared with PydanticSandboxAdapter — blocks rm -rf /, mkfs, dd, fork bombs - Add workspace membership checks to 16 endpoints across missions (7), agent_profiles (4), executions (1), mission_comments (4) using existing require_workspace_role dependency (viewer for reads, member for writes) - Remove redundant except ValueError/PermissionError in missions.py Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
- Fix WorkspaceMemberRole imported from wrong module (app.models.enums → app.models.workspace) - Reorder cheap enum validation before DB access check in create_mission - Move session_registry import to top-level in executions.py - Check session_registry (O(1)) before DB ownership query in inject/approve - Unify HTTPException → NotFoundException for consistent error handling - Move DANGEROUS_RE import to top-level in pydantic_adapter.py - Move denylist check before try block in command_executor.py Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
…r, simplify Backend: - Add auto_approve toggle: bypassPermissions + DONE vs default + IN_REVIEW - Add @agent mention dispatch in comments with dedup - Add background scheduler (mission dispatcher + execution reaper) - Add DELETE agent endpoint with orphan mission cleanup - Expose agent profile fields, token usage (result_summary) in API - Add control_request/control_response protocol for approval flow - Add AssigneeType enum, TERMINAL_EXECUTION_STATUSES constant - Extract _create_and_start_execution shared helper - Convert post_execution_comment from classmethod to instance method - Fix: token usage preserved in error paths (claude_code.py) - Fix: custom_env → has_custom_env (security, write-only secrets) - Fix: BACKLOG gating aligned between assignee and mention paths - Consolidate list_dispatchable with optional workspace_id Frontend: - Add @mention input with agent dropdown in comment thread - Render mentions as styled badges in comments - Add auto_approve toggle in create dialog + detail panel - Show token usage in execution timeline header - Add status transition validation (MANUAL_TRANSITIONS) - Add approval_resolved event type and display - Lazy-load agent profiles (enabled on @ keystroke) Migrations: - Remove BLOCKED mission status - Add auto_approve column to missions Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
… imports Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
Switch dispatch/cancel/finalize callers in missions.py, executions.py, mission_comments.py, and scheduler.py from MissionService to ExecutionLifecycleService. The mission_comments.py 4-tuple unpacking is intentionally ahead of the service return type change (Task 2.3). Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
…ng executions Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
…snapshot) Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
…equestException/ConflictException) Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
Backend: add /meta/transitions endpoint, remove source_id from execution creation. Frontend: mission-scoped execution methods (message, approve, events, snapshot), ExecutionTimeline routes writes through mission context, API-driven transition validation replacing hardcoded constants, URL deep-linking for selected mission, narrowed cache invalidation, collapsed duplicate approve/reject handlers, fixed service abstraction leak. Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
…ent mission execution mediator refactor
…emove redundant execution page and hooks
…ndicators and priority borders, and implement execution row display with cancellation support.
…t name resolution
- Add interrupt_wait to ACTIVE_EXECUTION_STATUSES for paused execution support
- Type-safe doUpdate with Partial<UpdateMissionRequest> and error toasts on all mutations
- Optimistic update for mission detail query cache alongside list cache
- Hide approval buttons on resolved events (gate by currentStatus === approval_wait)
- Fix status badge truncation by overriding SelectTrigger line-clamp and removing duplicate chevron
- Add i18n keys for all section headers (objective, description, tags, settings, dueDate, agent, comments)
- Fix pastExecutionsCount with {{count}} interpolation
- Resolve agent names in comment thread via agentNameMap from useAgentProfiles
- Layout refactor: merge objective+description, consolidate metadata into bordered card
- Extract formatDate to module scope
Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
…lean up duplicates - Extract useAgentNameMap hook to deduplicate 3 identical agent-name-map patterns (comment-thread.tsx, executions-tab.tsx, missions/page.tsx) - Fix isPendingApproval bug: only the last approval_request event shows Approve/Reject buttons, not all historical approval events - Extract shared onMutationError callback from 5 duplicate inline closures - Fix variable shadowing: filter callback param renamed to avoid shadowing useTranslation's t function - Add getErrorMessage utility to toast module Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
…or parsing and toast messages
… and improving toast messages
…s while updating auth and email services
…d update architecture documentation for WebSocket transition.
…oss backend services and core modules
… compat code - Delete frontend/stores/custom-tools/store.ts (mock store with zero consumers) - Simplify custom-tools/types.ts: remove CustomToolParameter, LegacyCustomToolSchema, CustomTool, CustomToolsState, CustomToolsActions (all unused legacy types) - Remove convertToLegacyTool(), syncCustomToolsToStore(), and CustomTool alias from custom-tools.ts queries - Remove dead CanvasNode interface and index signature from chat/types.ts - Remove dead usage_metadata legacy fallback from token_usage.py Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
…ponses, and consistent error handling
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.