86 lines
3.2 KiB
Markdown
86 lines
3.2 KiB
Markdown
# Phase 1 Step 8l — Implementation Notes
|
|
|
|
## Status
|
|
|
|
Done (partial — `handle_spawn` migrated, other handlers kept on
|
|
`&GlobalConfig` signatures).
|
|
|
|
## Plan reference
|
|
|
|
- Plan: `docs/PHASE-1-IMPLEMENTATION-PLAN.md`
|
|
- Section: "Step 8l: Migrate `supervisor.rs` sub-agent spawning"
|
|
|
|
## Summary
|
|
|
|
Replaced `Config::use_agent(&child_config, ...)` in `handle_spawn`
|
|
with a direct call to `Agent::init(&AppConfig, &AppState, ...)`,
|
|
inlining the MCP reinit and agent state setup that `Config::use_agent`
|
|
previously handled. The child `AppState` is constructed from the
|
|
parent `GlobalConfig`'s data.
|
|
|
|
All handler function signatures remain `&GlobalConfig` because they're
|
|
called from `eval_tool_calls` → `ToolCall::eval(config)` which still
|
|
passes `GlobalConfig`. Migrating the signatures requires migrating
|
|
the entire tool evaluation chain first.
|
|
|
|
## What was changed
|
|
|
|
### Files modified (1 file)
|
|
|
|
- **`src/function/supervisor.rs`** — `handle_spawn`:
|
|
- Builds `AppConfig` + `AppState` from parent `GlobalConfig`
|
|
- Calls `Agent::init(&app_config, &child_app_state, ...)` directly
|
|
- Inlines MCP reinit (take registry → reinit → append meta functions → put back)
|
|
- Inlines agent state setup (rag, agent, supervisor on child_config)
|
|
- Inlines session setup (`Config::use_session_safely` or `init_agent_shared_variables`)
|
|
- Added imports: `Agent`, `AppState`, `McpRegistry`, `Supervisor`
|
|
|
|
## Key decisions
|
|
|
|
### 1. Handler signatures unchanged
|
|
|
|
All 12 handler functions still take `&GlobalConfig`. This is required
|
|
because the call chain is: `eval_tool_calls(&GlobalConfig)` →
|
|
`ToolCall::eval(&GlobalConfig)` → `handle_supervisor_tool(&GlobalConfig)`.
|
|
Until `eval_tool_calls` is migrated (requires client module migration),
|
|
the signatures must stay.
|
|
|
|
### 2. Child still uses GlobalConfig for run_child_agent
|
|
|
|
The child's chat loop (`run_child_agent`) still uses a `GlobalConfig`
|
|
because `Input` and `eval_tool_calls` need it. The `Agent::init` call
|
|
uses `&AppConfig` + `&AppState` (the new signature), but the agent's
|
|
state is written back onto the child `GlobalConfig` for the chat loop.
|
|
|
|
### 3. MCP reinit stays on child GlobalConfig
|
|
|
|
The child agent's MCP servers are started via `McpRegistry::reinit`
|
|
on the child `GlobalConfig`. This is necessary because the child's
|
|
`eval_tool_calls` → MCP tool handlers read the MCP registry from
|
|
the `GlobalConfig`. Using `McpFactory::acquire` would require the
|
|
MCP tool handlers to read from a different source.
|
|
|
|
## Verification
|
|
|
|
- `cargo check` — clean, zero warnings
|
|
- `cargo clippy` — clean
|
|
- `cargo test` — 63 passed, 0 failed
|
|
|
|
## What remains for supervisor.rs
|
|
|
|
The handler signatures (`&GlobalConfig`) can only change after:
|
|
1. `init_client` migrated to `&AppConfig` (Step 8j completion)
|
|
2. Client structs migrated from `GlobalConfig`
|
|
3. `eval_tool_calls` migrated to `&AppConfig` + `&mut RequestContext`
|
|
4. `ToolCall::eval` migrated similarly
|
|
5. All MCP tool handlers migrated to use `McpRuntime` instead of `McpRegistry`
|
|
|
|
This is the "client chain migration" — a cross-cutting change that
|
|
should be a dedicated effort.
|
|
|
|
## References
|
|
|
|
- Phase 1 plan: `docs/PHASE-1-IMPLEMENTATION-PLAN.md` — Step 8l
|
|
- Step 8k notes: `docs/implementation/PHASE-1-STEP-8k-NOTES.md`
|
|
- QA checklist: `docs/QA-CHECKLIST.md` — items 11, 12
|