testing
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
# Phase 1 Step 8m — Implementation Notes
|
||||
|
||||
## Status
|
||||
|
||||
Done (partial — reduced GlobalConfig usage by 33%, cannot fully
|
||||
eliminate due to Input/eval_tool_calls/client chain dependency).
|
||||
|
||||
## Plan reference
|
||||
|
||||
- Plan: `docs/PHASE-1-IMPLEMENTATION-PLAN.md`
|
||||
- Section: "Step 8m: REPL cleanup — eliminate `GlobalConfig` from REPL"
|
||||
|
||||
## Summary
|
||||
|
||||
Migrated 49 `config` references in `src/repl/mod.rs` to use
|
||||
`RequestContext` or `AppConfig` equivalents. The REPL's `config`
|
||||
reference count dropped from 148 to 99. Key changes: vault
|
||||
operations via `ctx.app.vault`, `.exit role/session/agent` via
|
||||
`ctx.*` methods + `ctx.bootstrap_tools`, session/agent info via
|
||||
`ctx.*`, authentication via `ctx.app.config.*`, and various
|
||||
`config.read()` → `ctx.*` replacements.
|
||||
|
||||
Also marked 7 additional `Config` methods as `#[allow(dead_code)]`
|
||||
that became dead after the REPL stopped calling them.
|
||||
|
||||
## What was changed
|
||||
|
||||
### Files modified (2 files)
|
||||
|
||||
- **`src/repl/mod.rs`** — bulk migration of command handlers:
|
||||
- Vault: `config.read().vault.*` → `ctx.app.vault.*` (5 operations)
|
||||
- `.exit role`: MCP registry reinit → `ctx.exit_role()` + `ctx.bootstrap_tools()`
|
||||
- `.exit session` (standalone and within agent): → `ctx.exit_session()`
|
||||
- `.exit agent`: MCP registry reinit → `ctx.exit_agent(&app)` + `ctx.bootstrap_tools()`
|
||||
- `.info session`: `config.read().session_info()` → `ctx.session_info()`
|
||||
- `.info agent` / `.starter` / `.edit agent-config`: `config.read().agent_*` → `ctx.*`
|
||||
- `.authenticate`: `config.read().current_model()` → `ctx.current_model()`
|
||||
- `.edit role`: via `ctx.edit_role()`
|
||||
- `.edit macro` guard: `config.read().macro_flag` → `ctx.macro_flag`
|
||||
- Compression checks: `config.read().is_compressing_session()` → `ctx.is_compressing_session()`
|
||||
- Light theme: `config.read().light_theme()` → `ctx.app.config.light_theme()`
|
||||
- Various sync call reductions
|
||||
|
||||
- **`src/config/mod.rs`** — 7 methods marked `#[allow(dead_code)]`:
|
||||
`exit_role`, `session_info`, `exit_session`, `is_compressing_session`,
|
||||
`agent_banner`, `exit_agent`, `exit_agent_session`
|
||||
|
||||
## Remaining GlobalConfig usage in REPL (99 references)
|
||||
|
||||
These CANNOT be migrated until the client chain is migrated:
|
||||
|
||||
| Category | Count (approx) | Why |
|
||||
|---|---|---|
|
||||
| `Input::from_str(config, ...)` | ~10 | Input holds GlobalConfig for create_client |
|
||||
| `ask(config, ctx, ...)` | ~10 | Passes config to Input construction |
|
||||
| `Config::compress_session(config)` | 2 | Creates Input internally |
|
||||
| `Config::maybe_compress_session` | 2 | Spawns task with GlobalConfig |
|
||||
| `Config::maybe_autoname_session` | 2 | Spawns task with GlobalConfig |
|
||||
| `Config::update(config, ...)` | 1 | Complex dispatcher, reads/writes config |
|
||||
| `Config::delete(config, ...)` | 1 | Reads/writes config |
|
||||
| `macro_execute(config, ...)` | 1 | Calls run_repl_command |
|
||||
| `init_client(config, ...)` | 1 | Client needs GlobalConfig |
|
||||
| `sync_ctx_to_config` / `sync_config_to_ctx` | ~15 | Bridge sync helpers |
|
||||
| Reedline init (`ReplCompleter`, `ReplPrompt`) | ~5 | Trait objects hold GlobalConfig |
|
||||
| `config.write().save_role/new_role/new_macro` | ~5 | Config file mutations |
|
||||
| `config.write().edit_session/edit_config` | ~3 | Editor operations |
|
||||
| Struct field + constructor | ~5 | `Repl { config }` |
|
||||
|
||||
## Key decisions
|
||||
|
||||
### 1. `.exit *` handlers use ctx methods + bootstrap_tools
|
||||
|
||||
Instead of the MCP registry take/reinit pattern, the exit handlers
|
||||
now call `ctx.exit_role()` / `ctx.exit_session()` / `ctx.exit_agent(&app)`
|
||||
followed by `ctx.bootstrap_tools(&app, true).await?` to rebuild the
|
||||
tool scope with the global MCP server set. Then `sync_ctx_to_config`
|
||||
updates the GlobalConfig for reedline/Input.
|
||||
|
||||
### 2. Cannot remove Repl's config field
|
||||
|
||||
The `config: GlobalConfig` field stays because `ask`, `Input::from_str`,
|
||||
`init_client`, `Config::compress_session`, `Config::maybe_*`, and
|
||||
reedline components all need it. Full removal requires migrating the
|
||||
client chain.
|
||||
|
||||
## Verification
|
||||
|
||||
- `cargo check` — clean, zero warnings
|
||||
- `cargo clippy` — clean
|
||||
- `cargo test` — 63 passed, 0 failed
|
||||
|
||||
## Phase 1 completion assessment
|
||||
|
||||
With Step 8m done, Phase 1's Step 8 sub-steps (8a through 8m) are
|
||||
all complete. The GlobalConfig is significantly reduced but not
|
||||
eliminated. The remaining dependency is the **client chain**:
|
||||
|
||||
```
|
||||
Input.config: GlobalConfig
|
||||
→ create_client() → init_client(&GlobalConfig)
|
||||
→ Client.global_config: GlobalConfig
|
||||
→ eval_tool_calls(&GlobalConfig)
|
||||
→ ToolCall::eval(&GlobalConfig)
|
||||
→ all tool handlers take &GlobalConfig
|
||||
```
|
||||
|
||||
Eliminating this chain requires:
|
||||
1. Migrating `init_client` to `&AppConfig` + `&[ClientConfig]`
|
||||
2. Changing every client struct from `GlobalConfig` to `AppConfig`
|
||||
3. Migrating `eval_tool_calls` to `&AppConfig` + `&mut RequestContext`
|
||||
4. Migrating all tool handlers similarly
|
||||
|
||||
This is a Phase 2 concern or a dedicated "client chain migration"
|
||||
effort.
|
||||
|
||||
## References
|
||||
|
||||
- Phase 1 plan: `docs/PHASE-1-IMPLEMENTATION-PLAN.md` — Step 8m
|
||||
- Step 8l notes: `docs/implementation/PHASE-1-STEP-8l-NOTES.md`
|
||||
- QA checklist: `docs/QA-CHECKLIST.md`
|
||||
Reference in New Issue
Block a user