docs(01-01): complete extract-models-memory-tools plan
- SUMMARY.md documenting 3 tasks, 3 commits, 9min duration - STATE.md updated: plan 1/3 complete, metrics, decisions, technical notes
This commit is contained in:
+19
-11
@@ -9,15 +9,15 @@
|
||||
## Current Position
|
||||
|
||||
**Phase:** 1 — Daemon Decomposition
|
||||
**Plan:** 3 plans created (01-01, 01-02, 01-03)
|
||||
**Status:** planned
|
||||
**Progress:** ░░░░░░░░░░ 0/3 phases
|
||||
**Plan:** 1 of 3 complete (01-01 done, next: 01-02)
|
||||
**Status:** executing
|
||||
**Progress:** ░░░░░░░░░░ 0/3 phases (phase 1 in progress)
|
||||
|
||||
## Phase Status
|
||||
|
||||
| Phase | Status | Plans |
|
||||
|-------|--------|-------|
|
||||
| 1 — Daemon Decomposition | planned | 3 plans (2 waves) |
|
||||
| 1 — Daemon Decomposition | executing | 1/3 plans complete |
|
||||
| 2 — Config Overlays | not_started | — |
|
||||
| 3 — Live Ops Dashboard | not_started | — |
|
||||
|
||||
@@ -25,8 +25,10 @@
|
||||
|
||||
| Metric | Value |
|
||||
|--------|-------|
|
||||
| Test count | 1077 (baseline) |
|
||||
| daemon/index.ts lines | 1087 (baseline) |
|
||||
| Test count | 1077 (baseline, verified) |
|
||||
| daemon/index.ts lines | 458 (from 1088 baseline, -58%) |
|
||||
| Plan 01-01 duration | 9 min |
|
||||
| Plan 01-01 tasks | 3/3 |
|
||||
|
||||
## Accumulated Context
|
||||
|
||||
@@ -35,10 +37,15 @@
|
||||
- Config overlays over separate files
|
||||
- Extend existing vanilla JS dashboard
|
||||
- Skip structured logging — dashboard will reveal what metrics matter
|
||||
- Factory function pattern (initX(deps) → result) for daemon subsystem extraction
|
||||
- initTools() kept synchronous — only shutdown callbacks are async
|
||||
- Backward-compatible re-exports from daemon/index.ts for model functions
|
||||
|
||||
### Technical Notes
|
||||
- daemon/index.ts handles: model clients, channel setup, agent factory, memory init, vector store, session pruning, lifecycle, shutdown
|
||||
- Existing routing test file exists (decomposition already partially anticipated)
|
||||
- daemon/index.ts now 458 lines — models, memory, tools extracted to dedicated modules
|
||||
- Pre-existing routing.ts and agents.ts extractions found (not from our plan)
|
||||
- Factory pattern: initMemory(deps) → { memoryStore, hybridSearch, memoryDir }, initTools(deps) → { toolRegistry, toolExecutor, browserManager }
|
||||
- Tier 1 agent tools remain in daemon/index.ts (depend on later-created objects)
|
||||
- Web dashboard is vanilla JS SPA at src/gateway/ui/
|
||||
- Config loader at src/config/loader.ts, schema at src/config/schema.ts (409 lines)
|
||||
|
||||
@@ -50,9 +57,10 @@ _(none)_
|
||||
|
||||
## Session Continuity
|
||||
|
||||
**Last session:** Phase 1 planning complete
|
||||
**Next action:** Execute Phase 1 (`/gsd-execute-phase 1`)
|
||||
**Last session:** Plan 01-01 (extract models/memory/tools) completed
|
||||
**Stopped at:** Completed 01-01-PLAN.md
|
||||
**Next action:** Execute Plan 01-02 (extract routing/channels) or continue Phase 1
|
||||
|
||||
---
|
||||
*State initialized: 2026-02-09*
|
||||
*Last updated: 2026-02-09*
|
||||
*Last updated: 2026-02-10*
|
||||
|
||||
@@ -0,0 +1,132 @@
|
||||
---
|
||||
phase: 01-daemon-decomposition
|
||||
plan: 01
|
||||
subsystem: infra
|
||||
tags: [refactoring, module-extraction, daemon, typescript]
|
||||
|
||||
# Dependency graph
|
||||
requires: []
|
||||
provides:
|
||||
- "src/daemon/models.ts — createClientFromConfig, anthropicToGitHubModel, createAutoFallbackClient, createModelRouter"
|
||||
- "src/daemon/memory.ts — initMemory (MemoryStore, VectorStore, HybridSearch, background indexer)"
|
||||
- "src/daemon/tools.ts — initTools (ToolRegistry, ToolExecutor, web search, ProcessManager, BrowserManager, ToolPolicy)"
|
||||
- "daemon/index.ts backward-compatible re-exports for models"
|
||||
affects: [01-02-extract-routing-channels, 01-03-extract-remaining]
|
||||
|
||||
# Tech tracking
|
||||
tech-stack:
|
||||
added: []
|
||||
patterns:
|
||||
- "Factory function pattern: initX(deps) → result for daemon subsystem initialization"
|
||||
- "Type-only re-imports: daemon/index.ts uses import type for ToolRegistry/ToolExecutor/BrowserManager after extraction"
|
||||
|
||||
key-files:
|
||||
created:
|
||||
- src/daemon/models.ts
|
||||
- src/daemon/memory.ts
|
||||
- src/daemon/tools.ts
|
||||
modified:
|
||||
- src/daemon/index.ts
|
||||
|
||||
key-decisions:
|
||||
- "Used deps/result interface pattern for initMemory and initTools for explicit dependency injection"
|
||||
- "initTools is synchronous (no async) since all tool setup is sync — only shutdown callbacks are async"
|
||||
- "Preserved backward-compatible re-exports from daemon/index.ts for createClientFromConfig etc."
|
||||
- "Kept Tier 1 agent tools (session, agents list, message send, cron) in daemon/index.ts — they depend on later-created objects"
|
||||
|
||||
patterns-established:
|
||||
- "Factory pattern: export interface XDeps / XResult; export function initX(deps: XDeps): XResult"
|
||||
- "Re-export pattern for backward compatibility: export { fn } from './module.js' at bottom of index.ts"
|
||||
- "Clean import separation: extracted modules own their imports, index.ts uses import type for type-only references"
|
||||
|
||||
# Metrics
|
||||
duration: 9min
|
||||
completed: 2026-02-10
|
||||
---
|
||||
|
||||
# Phase 01 Plan 01: Extract Models, Memory, Tools Summary
|
||||
|
||||
**Extracted model client factory (~250 lines), memory initialization (~100 lines), and tool registration (~90 lines) from daemon/index.ts into dedicated modules with factory function pattern**
|
||||
|
||||
## Performance
|
||||
|
||||
- **Duration:** 9 min
|
||||
- **Started:** 2026-02-10T04:04:07Z
|
||||
- **Completed:** 2026-02-10T04:13:22Z
|
||||
- **Tasks:** 3
|
||||
- **Files modified:** 4
|
||||
|
||||
## Accomplishments
|
||||
- Extracted 4 model client functions (createClientFromConfig, anthropicToGitHubModel, createAutoFallbackClient, createModelRouter) into `src/daemon/models.ts` with backward-compatible re-exports
|
||||
- Extracted memory initialization (MemoryStore, VectorStore, HybridSearch, background indexer, memory tools) into `src/daemon/memory.ts` with initMemory() factory
|
||||
- Extracted tool registration (ToolRegistry, allBuiltinTools, web search, ProcessManager, BrowserManager, ToolExecutor, ToolPolicy) into `src/daemon/tools.ts` with initTools() factory
|
||||
- Reduced daemon/index.ts from 1088 lines to 458 lines (~58% reduction)
|
||||
- All 1077 tests pass, zero regressions, clientFactory.test.ts unchanged
|
||||
|
||||
## Task Commits
|
||||
|
||||
Each task was committed atomically:
|
||||
|
||||
1. **Task 1: Extract model client logic into src/daemon/models.ts** - `86cda91` (refactor)
|
||||
2. **Task 2: Extract memory initialization into src/daemon/memory.ts** - `00f8f74` (refactor)
|
||||
3. **Task 3: Extract tool registration into src/daemon/tools.ts** - `fb1199a` (refactor)
|
||||
|
||||
## Files Created/Modified
|
||||
- `src/daemon/models.ts` — Model client factory, GitHub model mapping, auto-fallback, model router creation (251 lines)
|
||||
- `src/daemon/memory.ts` — Memory store, vector store, hybrid search, background indexer, memory tools registration (99 lines)
|
||||
- `src/daemon/tools.ts` — Tool registry, builtin tools, web search, process tools, browser tools, tool executor, tool policy (89 lines)
|
||||
- `src/daemon/index.ts` — Reduced to 458 lines, imports from extracted modules, re-exports models for backward compat
|
||||
|
||||
## Decisions Made
|
||||
- Used explicit deps/result interface pattern (MemoryDeps → MemoryResult, ToolsDeps → ToolsResult) for type-safe dependency injection
|
||||
- Made initTools() synchronous since all tool setup is sync — only lifecycle shutdown handlers are async callbacks
|
||||
- Kept Tier 1 agent tools (session, agents list, message send, cron) in daemon/index.ts because they depend on sessionManager, agentConfigRegistry, channelRegistry, and cronScheduler which are created later in startDaemon()
|
||||
- Preserved backward-compatible re-exports from daemon/index.ts for model functions (clientFactory.test.ts imports from ./index.js)
|
||||
|
||||
## Deviations from Plan
|
||||
|
||||
### Auto-fixed Issues
|
||||
|
||||
**1. [Rule 3 - Blocking] Fixed duplicate createMessageRouter conflict**
|
||||
- **Found during:** Task 2 (memory extraction)
|
||||
- **Issue:** Pre-existing partial refactoring had created `src/daemon/routing.ts` with `createMessageRouter` extracted, and `daemon/index.ts` line 3 imported it, but the local function body (lines 67-289) was never removed — causing TS2440 duplicate identifier error
|
||||
- **Fix:** Removed the duplicate local `createMessageRouter` function body from daemon/index.ts (routing.ts has the correct version)
|
||||
- **Files modified:** src/daemon/index.ts
|
||||
- **Verification:** `pnpm typecheck` passes
|
||||
- **Committed in:** 00f8f74 (part of Task 2 commit)
|
||||
|
||||
**2. [Rule 3 - Blocking] Adapted to pre-existing agents.ts extraction**
|
||||
- **Found during:** Task 3 (tool extraction)
|
||||
- **Issue:** Pre-existing `src/daemon/agents.ts` with `initAgents()` already extracted agent config registry, agent router, and sandbox manager setup — index.ts already imported and used it
|
||||
- **Fix:** No fix needed — acknowledged the pre-existing extraction and adjusted our import cleanup accordingly (AgentConfigRegistry, AgentRouter, SandboxManager already converted to type imports)
|
||||
- **Files modified:** None additional
|
||||
- **Verification:** Typecheck and all tests pass
|
||||
|
||||
---
|
||||
|
||||
**Total deviations:** 2 auto-fixed (2 blocking — pre-existing partial refactoring conflicts)
|
||||
**Impact on plan:** Pre-existing routing.ts and agents.ts extractions meant daemon/index.ts was already partially decomposed before we started. Our 3 extractions (models, memory, tools) combined with the pre-existing ones result in an even smaller index.ts (457 lines vs planned ~650-700).
|
||||
|
||||
## Issues Encountered
|
||||
None beyond the pre-existing partial refactoring noted in deviations.
|
||||
|
||||
## User Setup Required
|
||||
None - no external service configuration required.
|
||||
|
||||
## Next Phase Readiness
|
||||
- daemon/index.ts is now 458 lines with clear module boundaries
|
||||
- Plan 01-02 (extract routing/channels) may already be partially complete due to pre-existing routing.ts extraction
|
||||
- Plan 01-03 (extract remaining) can proceed independently
|
||||
- All re-exports preserved for backward compatibility
|
||||
|
||||
---
|
||||
*Phase: 01-daemon-decomposition*
|
||||
*Completed: 2026-02-10*
|
||||
|
||||
## Self-Check: PASSED
|
||||
|
||||
- All 4 files verified present (models.ts, memory.ts, tools.ts, index.ts)
|
||||
- All 3 task commits verified (86cda91, 00f8f74, fb1199a)
|
||||
- Line counts match: models=251, memory=99, tools=89, index=458 (committed)
|
||||
- Typecheck: clean
|
||||
- Tests: 1077/1077 passed
|
||||
Reference in New Issue
Block a user