claw-code/openspec/changes/refactor-main-rs-split/specs/cli-runtime-construction/spec.md

70 lines
2.9 KiB
Markdown

## ADDED Requirements
### Requirement: Runtime construction shall be isolated in `runtime_builder.rs`
All runtime bootstrapping logic (building ConversationRuntime, plugins, MCP state)
SHALL be in `runtime_builder.rs`. This includes `BuiltRuntime`, `RuntimePluginState`,
`RuntimeMcpState`, `build_runtime`, `build_runtime_with_plugin_state`, all plugin
construction helpers, and `HookAbortMonitor`.
#### Scenario: All build_runtime variants are in runtime_builder.rs
- **WHEN** the refactoring is complete
- **THEN** `runtime_builder.rs` contains `build_runtime`,
`build_runtime_with_plugin_state`, `build_runtime_plugin_state`,
`build_runtime_plugin_state_with_loader`, `build_plugin_manager`,
`build_system_prompt`, `build_runtime_mcp_state`
#### Scenario: runtime_builder.rs imports from api_client and tool_executor
- **WHEN** `runtime_builder.rs` constructs a `ConversationRuntime`
- **THEN** it uses `AnthropicRuntimeClient` from `api_client.rs` and
`CliToolExecutor` from `tool_executor.rs`
### Requirement: BuiltRuntime shall be the single runtime lifecycle manager
`BuiltRuntime` SHALL own the `ConversationRuntime` option, plugin registry, and
MCP state. Its `Drop` implementation SHALL shut down plugins and MCP servers.
#### Scenario: BuiltRuntime::drop cleans up
- **WHEN** a `BuiltRuntime` is dropped
- **THEN** `shutdown_mcp()` and `shutdown_plugins()` are called
- **THEN** no plugin or MCP process is left running
### Requirement: AnthropicRuntimeClient shall be in `api_client.rs`
The API client adapter (`AnthropicRuntimeClient`) and its `ApiClient` trait impl
SHALL be in `api_client.rs`. Provider detection, auth resolution, and prompt
cache setup SHALL be contained in this module.
#### Scenario: api_client.rs contains AnthropicRuntimeClient
- **WHEN** the refactoring is complete
- **THEN** `api_client.rs` contains `AnthropicRuntimeClient` struct, its `new()`,
its `ApiClient` trait implementation, and auth resolution helpers
### Requirement: CliToolExecutor shall be in `tool_executor.rs`
The tool execution adapter (`CliToolExecutor`) and its `ToolExecutor` trait impl
SHALL be in `tool_executor.rs`. This includes all MCP tool call helpers and the
`permission_policy` / `convert_messages` functions.
#### Scenario: tool_executor.rs contains CliToolExecutor
- **WHEN** the refactoring is complete
- **THEN** `tool_executor.rs` contains `CliToolExecutor`, `ToolSearchRequest`,
`McpToolRequest`, `ListMcpResourcesRequest`, `ReadMcpResourceRequest`,
and the `ToolExecutor` trait implementation
### Requirement: Permission prompting shall be in `permission.rs`
`CliPermissionPrompter` and its `PermissionPrompter` trait impl SHALL be in
`permission.rs`.
#### Scenario: permission.rs contains permission prompt logic
- **WHEN** the refactoring is complete
- **THEN** `permission.rs` contains `CliPermissionPrompter`, its `new()` and
`decide()` methods, and `permission_policy` helper