singularity-forge/.sf/wiki/SUBSYSTEMS.md
Mikael Hugo eacbbaac82
Some checks are pending
CI / detect-changes (push) Waiting to run
CI / docs-check (push) Blocked by required conditions
CI / lint (push) Blocked by required conditions
CI / build (push) Blocked by required conditions
CI / integration-tests (push) Blocked by required conditions
CI / windows-portability (push) Blocked by required conditions
CI / rtk-portability (linux, blacksmith-4vcpu-ubuntu-2404) (push) Blocked by required conditions
CI / rtk-portability (macos, macos-15) (push) Blocked by required conditions
CI / rtk-portability (windows, blacksmith-4vcpu-windows-2025) (push) Blocked by required conditions
TODO: simplify md-tracking — drop snapshot blob, accept mid-edit corner
Final settled design: sha + git ref only, no DB content snapshots at
all. The mid-edit case (file observed dirty) loses the ability to
reconstruct the intermediate working-tree state, but the change-
detection signal is preserved and the operator can commit first if
intermediate fidelity matters.

Trades a corner-case fidelity loss for a much simpler schema and
no DB-vs-disk content duplication. Git remains the only version
store; the DB row is a pure "where I left off" pointer.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 19:49:25 +02:00

5 KiB

Subsystems

Generated: 2026-05-11 | Hand-editable — tracked in git

Core CLI

Subsystem Path Purpose Tests
Loader / entry src/loader.ts CLI bootstrap — initialises resources, resolves extension, starts TUI or headless tests/smoke/
Headless driver src/headless.ts Machine-surface command (sf headless), JSON I/O, exit codes 0/1/10/11/12 tests/smoke/
Headless context src/headless-context.ts Bootstrap context loader for headless runs — wiki, spec files, auto-bootstrap

SF Extension (src/resources/extensions/sf/)

Compiled from TS → JS via npm run copy-resources. Edit .ts/.js source; changes only land in dist/ after that command.

Subsystem Path (relative to extension) Purpose
UOK main loop auto/loop.js Autonomous dispatch loop — tick, gate, recovery
Dispatch auto/phases-dispatch.js Selects and launches the next unit (research/plan/implement/verify)
Phases helpers auto/phases-helpers.js Shared helpers for phase state transitions
Unit runner auto/run-unit.js Executes a single task plan via a fresh agent session
Session state auto/session.js Runtime session DB model (active unit, locks, lease)
Supervisor auto-supervisor.js Monitors agent runs, enforces turn/token budgets
Recovery auto-recovery.js Handles stuck/timeout/crash recovery for units
System context bootstrap/system-context.js Assembles full system prompt for every SF-managed turn
Auto-bootstrap context auto-bootstrap-context.js Loads context (wiki, specs, codebase) for headless auto runs with no milestones
DB tools bootstrap/db-tools.js SF's database query tools exposed to the agent
Query tools bootstrap/query-tools.js Higher-level query helpers over the DB schema
Memory tools bootstrap/memory-tools.js Semantic memory read/write over sf.db
Ask gate bootstrap/ask-gate.js Intercepts agent tool calls that need human confirmation
Write gate bootstrap/write-gate.js Intercepts destructive write operations for approval
Exec tools bootstrap/exec-tools.js Execution tool registration (shell commands, file ops)
Dynamic tools bootstrap/dynamic-tools.js Runtime tool registration based on current milestone/slice
Auto-prompts auto-prompts.js Loads task-execute prompt template and fills variables
Auto-model selection auto-model-selection.js Picks model for each unit based on capability/cost routing
Auto-budget auto-budget.js Tracks and enforces token and turn budgets per unit
Runaway guard auto-runaway-guard.js Detects infinite loop / runaway execution patterns
Abandon detect abandon-detect.js Detects when an agent unit has stalled or abandoned work
AI memory tools ai-memory-tools.js Agent-facing memory tools (store/recall facts)
Git runtime patterns git-runtime-patterns.js Defines which .sf/ paths are gitignored at runtime
Activity log activity-log.js Appends structured activity events to .sf/activity/
Auto-dashboard auto-dashboard.js Terminal dashboard rendering during autonomous runs
Completion nudge auto-completion-nudge.js Prompts agent to finish when near budget limits

Packages (packages/)

Package Path Purpose Tests
coding-agent packages/coding-agent/ Agent core — tools (bash, grep, read…), models, sessions, settings, retry packages/coding-agent/tests/
ai packages/ai/ LLM provider adapters — Anthropic, OpenAI, Google, Moonshot, etc. packages/ai/tests/
agent-core packages/agent-core/ Shared agent abstractions, message types, streaming
tui packages/tui/ Ink-based terminal UI
daemon packages/daemon/ Background daemon process for persistent state
rpc-client packages/rpc-client/ RPC adapter — JSON-RPC / HTTP wire protocol
native packages/native/ Rust N-API bindings — grep, glob, ps, highlight, AST, diff (napi-rs) packages/native/tests/
google-gemini-cli-provider packages/google-gemini-cli-provider/ Gemini CLI Core auth provider (alternative to API key)

Key Singleton Files

File Role
.sf/sf.db Canonical SQLite state (milestones, slices, tasks, memories, schedule, sessions)
src/resources/extensions/sf/prompts/system.md System prompt template injected at every SF turn
src/resources/extensions/sf/prompts/execute-task.md Per-unit task plan template
.sf/PROJECT.md Hand-authored project identity and goals
.sf/REQUIREMENTS.md Current requirements register
.sf/DECISIONS.md Architecture decision log
.sf/KNOWLEDGE.md Tacit knowledge and conventions
.sf/CODEBASE.md Auto-generated file map (gitignored)
.sf/wiki/ Reference wiki — tracked in git, hand-editable