Complete architecture document set with multi-model review remediation: - Frozen interface contracts, runtime semantics, DB schemas - Event/tool/error/provider registries - Scheduler and main agent state machines - C4 module/code views, solution architecture, baseline V1 - Multi-model review reports and joint assessment - Phase-gate remediation complete (P0/P1/P2/UX resolved) - Implementation plan with T-000A through T-045 - Reference folders kept as placeholders only
15 KiB
Executable File
Solution Architecture
Date: 2026-05-27 Status: Formal V1 architecture derived from AirCoding Architecture Baseline V1
1. Overview
AirCoding is a self-owned local AI coding agent/runtime. It is not a Claude Code plugin wrapper. The product provides a Claude Code-quality execution layer, OpenCode/OpenTUI-inspired terminal UI, project-local session persistence, multi-agent orchestration, and language/toolchain capability packages.
The V1 architecture is Linux-first, TypeScript/Bun-based, event-driven, and project-local by default. C++ is the first deep language profile, while the runtime remains language-agnostic through toolchain-* capability packages.
Core value path:
User requirement
→ Main Agent clarification and routing
→ Architecture Designer for design/interface decisions
→ Scheduler task graph and wave planning
→ Executor/Reviewer/Debugger/Compactor/ExperienceMiner workers
→ ToolRegistry + PermissionEngine + EventStore
→ project-local DB/artifacts/evidence
→ TUI/HUD ProjectionStore
2. Architecture Sources of Truth
This document summarizes the formal architecture. Detailed V1 baselines remain authoritative for implementation contracts.
Precedence rule:
interface-contracts-v1.mdwins for TypeScript public interface shape.db-schema-v1.mdwins for SQLite persistence shape.event-registry-v1.mdwins for event names and payloads.tool-registry-v1.mdwins for tool names and tool I/O schemas.runtime-semantics-v1.mdwins for cross-cutting runtime behavior.c4/module.mdandc4/code-view.mdwin for package/component boundaries.- ADR files win for accepted design decisions they explicitly cover.
baselineV1.mdremains the narrative baseline and decision index.
| Area | Source |
|---|---|
| Overall baseline | AirPlan/docs/architecture/baselineV1.md |
| Interface contracts | AirPlan/docs/architecture/interface-contracts-v1.md |
| Runtime semantics | AirPlan/docs/architecture/runtime-semantics-v1.md |
| C4/module/code view | AirPlan/docs/architecture/c4/module.md, AirPlan/docs/architecture/c4/code-view.md |
| DB schema | AirPlan/docs/architecture/db-schema-v1.md |
| Event registry | AirPlan/docs/architecture/event-registry-v1.md |
| Tool registry | AirPlan/docs/architecture/tool-registry-v1.md |
| Scheduler state machine | AirPlan/docs/architecture/scheduler-state-machine-v1.md |
| Prompt layering | AirPlan/docs/architecture/prompt-layering-v1.md |
| Provider matrix | AirPlan/docs/architecture/provider-capability-matrix-v1.md |
| Error taxonomy | AirPlan/docs/architecture/error-taxonomy-v1.md |
| Artifact naming | AirPlan/docs/architecture/artifact-naming-v1.md |
| Scope escalation | AirPlan/docs/architecture/scope-escalation-v1.md |
| Security model | AirPlan/docs/architecture/security-model-v1.md |
| Capability trust | AirPlan/docs/architecture/capability-trust-v1.md |
| Platform matrix | AirPlan/docs/architecture/cross-platform-matrix-v1.md |
3. Architectural Principles
- Execution quality follows Claude Code. File edits are read-before-edit, exact, conservative, small, and verified before completion.
- OpenCode is a UI/runtime reference, not a business-state dependency. Reuse visual patterns and OpenTUI/Solid primitives, not OpenCode's session/sync state model.
- Project-local source of truth. Session state, artifacts, backups, and project rules live under project
.air/. - Events drive live behavior; SQLite drives recovery. EventBus is live transport; domain tables and durable events are the source of truth.
- Workers are isolated child processes. Executor, Reviewer, Debugger, Compactor, and ExperienceMiner run as independent Bun processes over NDJSON IPC.
- Main Agent remains responsive. Long-running background work is delegated to Scheduler/workers.
- Architecture changes are explicit. Implementation-only changes may continue silently; interface/architecture/product changes route through Architecture Designer and/or user confirmation.
- Tool/capability boundaries are permissioned. Built-in and future plugin tools all pass through ToolRegistry and PermissionEngine.
- Provider boundary is isolated. Internal messages are Anthropic canonical; adapters convert at provider boundary.
- Evidence is first-class. Build/test/debug/review outputs become artifacts and evidence refs before completion claims.
4. Major Containers
CLI Container
Package: packages/cli
Responsibilities:
- command entrypoint
- startup and first-run initialization
- Doctor invocation
- project discovery and
.airinitialization - resource loading
- TUI/runtime bootstrap
Interfaces:
- CLI commands
- local filesystem
- runtime service initialization
TUI/HUD Container
Package: packages/tui
Responsibilities:
- OpenTUI/Solid user interface
- Main Agent conversation surface
- progress, task, agent, diff, and evidence display
- permission prompts and blocker reports
- HUD/statusline projection
Interfaces:
- ProjectionStore read API
- Main Agent UI channel
- Permission prompt UI
Constraints:
- TUI consumes ProjectionStore only.
- TUI does not query SQLite or EventBus directly.
- TUI does not own scheduling state.
Runtime Container
Package: packages/runtime
Responsibilities:
- Main Agent orchestration shell
- Architecture Designer integration
- Scheduler
- child process management
- EventBus and EventStore
- SessionStore/domain repositories
- ToolRegistry
- PermissionEngine
- CapabilityRegistry
- ContextAssembler
- ArtifactStore and EvidenceStore
- ProjectionStore producer side
Interfaces:
packages/contractspackages/llmpackages/toolchain-*- SQLite
- project filesystem
- child process stdio IPC
LLM Container
Package: packages/llm
Responsibilities:
- provider configuration
- provider adapters
- Anthropic canonical message handling
- OpenAI/OpenRouter/ollama/custom endpoint conversion
- capability matrix validation
- streaming/tool-use conversion
- token counting hooks where available
Interfaces:
- ProviderAdapter API
- ProviderCapabilityMatrix
- runtime LLM request API
Toolchain C++ Container
Package: packages/toolchain-cpp
Responsibilities:
- C++ project detection
- CMake configure/build orchestration
- Ninja-first, Make fallback strategy
- CTest/GoogleTest execution
- cppcheck static analysis
- clangd CLI queries
- compiler/linker diagnostic parsing
- build/test/debug evidence production
Interfaces:
- Capability manifest
- ToolRegistry tools under
cpp.* - shell command runner
- diagnostics/artifacts/evidence stores
Contracts Container
Package: packages/contracts
Responsibilities:
- compileable shared TypeScript interfaces
- RuntimeEvent, TaskSpec, WorkerResult, ToolDefinition, ArtifactRef, EvidenceRef
- error, provider, project, IPC, UI types
Dependency rule:
- All packages may depend on
contracts. contractsmust not depend on domain implementation packages.
5. Runtime Agents
Main Agent
User-facing coordinator. It handles conversation, progress summaries, requirement changes, direct foreground tasks, and escalation presentation. It does not perform long-running background work.
Architecture Designer
Owns architecture planning, impact assessment, ADR/C4/plan/todo alignment, and design/interface change review. It may edit planning/architecture documents, not implementation code.
Scheduler
Owns TaskGraph loading, wave planning, dependency handling, write-area conflict handling, retry strategy, child worker dispatch, heartbeat monitoring, merge coordination, and restart recovery.
Executor
Performs scoped implementation/build/test tasks with Claude Code-style execution discipline and structured WorkerResult output.
Reviewer
Read-only reviewer for correctness, security, scope control, architecture compliance, and evidence sufficiency. It produces review reports and follow-up tasks.
Debugger
Diagnoses failures using logs, diagnostics, artifacts, command output, GUI/network evidence, and may fix only within assigned write scope.
Compactor
Performs copy-on-write context compaction. It produces summaries while preserving original messages for explicit backtracking.
ExperienceMiner
Extracts project rules, skill candidates, and debug knowledge from verified repeated patterns and evidence.
6. Data Architecture
Project layout:
<project>/.air/
shared/
project.json
permissions.yaml
compaction-rules.md
rules/
plan/
local/
sessions/<session-id>/
session.db
artifacts/
backups/
debug-records.db
learned-memory.db
workspaces/
tmp/
locks/
Session DB path:
<project>/.air/local/sessions/<session-id>/session.db
Core data groups:
| Group | Tables |
|---|---|
| session/conversation | sessions, messages, message_drafts, summaries |
| orchestration | events, tasks, task_dependencies, task_attempts, agents, workspaces |
| execution evidence | tool_runs, command_runs, artifacts, diagnostics, evidence_refs |
| UI recovery | ui_state |
| schema | schema_meta |
SQLite V1 settings:
PRAGMA journal_mode = WAL;
PRAGMA synchronous = NORMAL;
PRAGMA foreign_keys = OFF;
Durable event insert and corresponding domain table update must be in the same transaction.
7. Control Flow Architecture
Startup Flow
CLI starts
→ detect platform and config
→ load resources/prompts/capabilities
→ open or initialize project .air
→ run read-only Doctor
→ open session DB
→ hydrate ProjectionStore from DB
→ start TUI/Main Agent/runtime services
Normal Execution Flow
User request
→ Main Agent classifies intent
→ direct answer or architecture/task planning
→ Scheduler creates/loads TaskGraph
→ ContextAssembler builds agent context
→ Scheduler dispatches child worker over NDJSON IPC
→ worker uses ToolRegistry
→ ToolRegistry enforces PermissionEngine
→ tools emit events/artifacts/evidence
→ worker returns WorkerResult
→ Scheduler retries/merges/reviews/continues
→ Main Agent reports outcome
Requirement Change Flow
User changes requirement
→ requirement.changed event
→ Scheduler pauses affected work
→ Architecture Designer assesses if needed
→ implementation-level change continues silently
→ architecture/product-level change routes to user confirmation/replan
Recovery Flow
Process/session restarts
→ open session DB
→ load running/interrupted tasks and agents
→ inspect child process liveness when possible
→ emit agent.lost/task.failed or reconnect/resume
→ preserve unmerged workspaces
→ rebuild Scheduler queues
→ hydrate ProjectionStore
8. Tool and Capability Architecture
ToolRegistry provides stable schema-validated built-ins:
fs.*, shell.*, git.*, project.*, cpp.*, debug.*,
gui.*, network.*, artifact.*, context.*, permission.*, doctor.*
CapabilityRegistry adds built-in and future plugin capabilities through manifests. Capability dependencies are declared in manifests but installed/fixed by Doctor, never by arbitrary plugin scripts.
Every tool call follows:
model/agent request
→ schema validation
→ PermissionEngine evaluation
→ tool execution
→ tool/command/artifact/evidence events
→ structured ToolResult
9. Prompt and Provider Architecture
ContextAssembler emits Anthropic canonical messages with L0-L9 layers:
runtime invariant
role/mode
safety and permission policy
project rules/user preferences
architecture baseline/current plan
task spec/acceptance criteria
relevant code/artifacts/evidence
recent conversation/decision context
tool result history/diagnostics
immediate instruction
Provider adapters convert canonical messages at the LLM boundary. Conversion omissions are recorded. Required unsupported capabilities block before model call.
Model selection is capability-based and can be Scheduler-forced or agent-selected within allowed constraints.
10. Security Architecture
Security boundary summary:
- LLM output is untrusted until validated.
- Tools are the only path to filesystem/shell/network effects.
- PermissionEngine evaluates all writes, execution, network, system-sensitive, and credential access.
- Symlinks are resolved by realpath before risk classification.
.git/is protected by default.- Build directories are allowed project write areas.
- Project-outside writes require backup.
- Credentials and system-sensitive operations require explicit confirmation.
- No automatic upload of logs, artifacts, debug knowledge, or doctor bundles.
11. Platform Architecture
V1.0.0 Alpha is Linux-first:
| Platform | Support |
|---|---|
| Linux x86_64 | tier 1 |
| Linux arm64 | tier 2 |
| WSL2 | tier 2 |
| macOS | experimental |
| Windows native | experimental/post-MVP |
Shell/process/C++ tooling in V1.0.0 Alpha targets POSIX-like Linux behavior.
12. Quality and Validation Architecture
Validation layers:
unit tests → integration fixture replay → real LLM E2E release gate
Execution completion requires evidence appropriate to the task:
- build command result
- test command result
- static analysis result where configured
- debug evidence where failures occur
- review report for significant changes
- artifact/evidence refs for claims
Release gate for tier-1 Linux must cover startup, project init, child IPC, session DB, artifacts/events, C++ configure/build/test, TUI startup, and real LLM E2E behavior.
13. Key Risks and Mitigations
| Risk | Mitigation |
|---|---|
| Execution quality below Claude Code | Align edit primitives, tool lifecycle, read-before-edit, verification discipline |
| Context explosion | copy-on-write compaction, ContextAssembler budgets, artifact refs |
| Scheduler complexity | V1 state machine and V1.0.0 Alpha cut line; advanced optimization deferred |
| Tool/plugin safety | ToolRegistry + PermissionEngine + capability trust model |
| Provider feature mismatch | Provider capability matrix and conversion report |
| Lost worker/process | heartbeat, task attempts, restart recovery |
| Merge conflicts across parallel workers | write-area planning, worktrees, merge events, repair/escalation |
| Debug evidence too large/noisy | artifact naming/layout, evidence refs, summaries |
| Platform drift | Linux tier-1 release matrix and Doctor platform report |
14. V1.0.0 Alpha Architecture Boundaries
In scope for V1.0.0 Alpha:
Bun monorepo
contracts package
runtime services
project-local SQLite/artifacts
EventStore/EventBus/ProjectionStore
Main Agent shell
Scheduler/worker IPC
ToolRegistry/PermissionEngine
complete C++ development workflow
local/built-in plugin and capability foundation
TUI/HUD startup and projections
provider adapters
Doctor read-only/fix framework
GUI/network evidence tools
release gate and binary tarball packaging
Deferred beyond V1.0.0 Alpha:
third-party plugin registry/signing
container sandboxing
advanced semantic merge
multi-machine scheduling
Windows-native deep support
production-grade bitmap image generation providers
browser/computer-use automation
learned retry optimizer