Files
loki/docs/implementation/PHASE-1-STEP-10-NOTES.md
2026-04-15 12:56:00 -06:00

112 lines
4.6 KiB
Markdown

# Phase 1 Step 10 — Implementation Notes
## Status
Done. Client chain migrated. `GlobalConfig` reduced to runtime-only
usage (tool evaluation chain + REPL sync).
## Summary
Migrated the entire client chain away from `GlobalConfig`:
- `Client` trait: `global_config()``app_config()`
- Client structs: `GlobalConfig``Arc<AppConfig>`
- `init_client`: `&GlobalConfig``&Arc<AppConfig>`
- `Input` struct: removed `config: GlobalConfig` field entirely
- `Rag`: deleted `build_temp_global_config` bridge
- `render_stream`: `&GlobalConfig``&AppConfig`
- `Config::search_rag`: `&GlobalConfig``&AppConfig`
- `call_chat_completions*`: explicit `runtime: &GlobalConfig` parameter
## What was changed
### Files modified (10 files)
- **`src/client/macros.rs`** — client structs hold `Arc<AppConfig>`,
`init` takes `&Arc<AppConfig>`, `init_client` takes
`&Arc<AppConfig>` + `Model`. Zero GlobalConfig in file.
- **`src/client/common.rs`** — `Client` trait: `app_config() -> &AppConfig`.
`call_chat_completions*` take explicit `runtime: &GlobalConfig`.
- **`src/config/input.rs`** — removed `config: GlobalConfig` field.
Added `rag: Option<Arc<Rag>>` captured at construction. Changed
`set_regenerate` to take `current_role: Role` parameter. Zero
`self.config` references.
- **`src/config/mod.rs`** — `search_rag` takes `&AppConfig`. Deleted
dead `rag_template` method.
- **`src/render/mod.rs`** — `render_stream` takes `&AppConfig`. Zero
GlobalConfig in file.
- **`src/rag/mod.rs`** — deleted `build_temp_global_config`. Creates
clients via `init_client(&self.app_config, model)`. Zero
GlobalConfig in file.
- **`src/main.rs`** — updated `call_chat_completions*` calls with
explicit `runtime` parameter.
- **`src/repl/mod.rs`** — updated `call_chat_completions*` calls,
`set_regenerate` call with `current_role` parameter.
- **`src/function/supervisor.rs`** — updated `call_chat_completions`
call in `run_child_agent`.
- **`src/config/app_config.rs`** — no changes (already had all
needed fields).
## Remaining GlobalConfig usage (71 references)
| Category | Files | Count | Why |
|---|---|---|---|
| Definition | `config/mod.rs` | 13 | Config struct, GlobalConfig alias, methods called by REPL |
| Tool eval chain | `function/mod.rs` | 8 | `eval_tool_calls(&GlobalConfig)`, `ToolCall::eval(&GlobalConfig)` |
| Tool handlers | `function/supervisor.rs` | 17 | All handler signatures |
| Tool handlers | `function/todo.rs` | 2 | Todo handler signatures |
| Tool handlers | `function/user_interaction.rs` | 3 | User interaction handler signatures |
| Runtime param | `client/common.rs` | 3 | `call_chat_completions*(runtime: &GlobalConfig)` |
| Input construction | `config/input.rs` | 4 | Constructor params + capture_input_config |
| REPL | `repl/mod.rs` | 10 | Input construction, ask, sync helpers |
| REPL components | `repl/completer.rs` | 3 | Holds GlobalConfig for reedline |
| REPL components | `repl/prompt.rs` | 3 | Holds GlobalConfig for reedline |
| REPL components | `repl/highlighter.rs` | 2 | Holds GlobalConfig for reedline |
| Bridge | `config/request_context.rs` | 1 | `to_global_config()` |
| Bridge | `config/macros.rs` | 2 | `macro_execute` takes &GlobalConfig |
The remaining GlobalConfig usage falls into 3 categories:
1. **Tool evaluation chain** (30 refs) — `eval_tool_calls` and
handlers read runtime state from GlobalConfig
2. **REPL** (18 refs) — sync helpers, Input construction, reedline
3. **Definition** (13 refs) — the Config struct itself
## Phase 1 final completion summary
Phase 1 is now complete. Every module that CAN be migrated HAS been
migrated. The remaining GlobalConfig usage is the tool evaluation
chain (which reads runtime state during active tool calls) and the
REPL sync layer (which bridges RequestContext to GlobalConfig for
the tool chain).
### Key achievements
- `Input` no longer holds `GlobalConfig`
- Client structs no longer hold `GlobalConfig`
- `Rag` has zero `GlobalConfig` references
- `render_stream` takes `&AppConfig`
- `Agent::init` takes `&AppConfig` + `&AppState`
- Both entry points thread `RequestContext`
- 64+ methods on `RequestContext`, 21+ on `AppConfig`
- Zero regressions: 63 tests, zero warnings, zero clippy issues
### What Phase 2 starts with
Phase 2 can build REST API endpoints using `AppState` + `RequestContext`
directly. The tool evaluation chain will need to be migrated from
`&GlobalConfig` to `&mut RequestContext` when REST API tool calls
are implemented — at that point, `Config` and `GlobalConfig` can
be fully deleted.
## Verification
- `cargo check` — zero warnings, zero errors
- `cargo clippy` — zero warnings
- `cargo test` — 63 passed, 0 failed