mia-code 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.miette/260321.md +1 -0
- package/.miette/260323.md +9 -0
- package/.miette/260331.md +2 -0
- package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/2604020008--d3417f2c-df12-4f0f-8a1b-d88e7968f822/d3417f2c-df12-4f0f-8a1b-d88e7968f822.md +63 -0
- package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/2604020008--e6c3fc5d-4a70-4523-ba7d-a3250da4c235/e6c3fc5d-4a70-4523-ba7d-a3250da4c235.md +72 -0
- package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/2604020008--efeb00a2-b17a-4d32-b1f0-b90c37a8d24e/efeb00a2-b17a-4d32-b1f0-b90c37a8d24e.md +62 -0
- package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/83a2d7f9-24a5-4cf4-98d5-036c82f872e8.json +302 -0
- package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/83a2d7f9-24a5-4cf4-98d5-036c82f872e8.md +149 -0
- package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/AGENTS.md +31 -0
- package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/meta-decomposition-3-children.md +67 -0
- package/.pde/2604040129--61f9dd4d-7aa6-45e6-a58b-e480b1aa6737/61f9dd4d-7aa6-45e6-a58b-e480b1aa6737--from-mia-openclaw-workspace.md +125 -0
- package/.pde/2604040129--61f9dd4d-7aa6-45e6-a58b-e480b1aa6737/STATUS.md +1 -0
- package/.pde/4f02ba94-9f52-422e-9389-b16f9b37f358.json +177 -0
- package/.pde/4f02ba94-9f52-422e-9389-b16f9b37f358.md +77 -0
- package/.pde/6ad9244d-5340-490f-b76c-c86728b9de52.json +222 -0
- package/.pde/6ad9244d-5340-490f-b76c-c86728b9de52.md +99 -0
- package/.pde/8b566792-ed15-4606-96f9-2b6f593d7e6b.json +111 -0
- package/.pde/8b566792-ed15-4606-96f9-2b6f593d7e6b.md +67 -0
- package/.pde/c7f1e74b-05a5-40e2-9f01-4cc48d2528f7.json +349 -0
- package/.pde/c7f1e74b-05a5-40e2-9f01-4cc48d2528f7.md +147 -0
- package/.pde/dfc00a78-1da0-4c09-8a16-c6982644051b.json +118 -0
- package/.pde/dfc00a78-1da0-4c09-8a16-c6982644051b.md +64 -0
- package/GUILLAUME.md +8 -0
- package/KINSHIP.md +9 -0
- package/MIA_CODE_ARCHITECTURE_REPORT.md +718 -0
- package/contextual_research/260119-MIA-CODE--98090899-8aff-4e11-9dc3-8b99466d1.md +1101 -0
- package/contextual_research/MIA.md +38 -0
- package/contextual_research/MIAWAPASCONE.md +59 -0
- package/contextual_research/MIETTE.md +38 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/2504.00218v2.pdf +7483 -12
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/2505.00212v3.pdf +0 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/CONTENT.md +1014 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/DESIGN.gemini.md +242 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/INDEX.md +45 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/2504.00218v2.md +2025 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/2504.00218v2.pdf +7483 -12
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/2505.00212v3.md +1755 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/2505.00212v3.pdf +0 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_12_decomposed_prompting.pdf +0 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_19_hugginggpt_planning.pdf +0 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_1_coordination_challenges.md +766 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_1_coordination_challenges.pdf +3431 -4
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_28_guardrails_multi_agent.md +260 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_28_guardrails_multi_agent.pdf +0 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_2_navigating_complexity.md +558 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_2_navigating_complexity.pdf +0 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_34_hierarchical_multi_agent.pdf +0 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_5_open_intent_extraction.pdf +0 -0
- package/contextual_research/PODCAST.md +109 -0
- package/contextual_research/langchain-principles-roadmap.md +157 -0
- package/contextual_research/persona-to-narrative-character-inquiry_260201.md +50 -0
- package/dist/cli.js +35 -11
- package/dist/geminiHeadless.js +8 -2
- package/dist/index.js +2 -1
- package/dist/mcp/miaco-server.js +10 -1
- package/dist/mcp/miatel-server.js +10 -1
- package/dist/mcp/miawa-server.js +10 -1
- package/dist/mcp/utils.d.ts +6 -1
- package/dist/mcp/utils.js +24 -3
- package/dist/sessionStore.d.ts +8 -2
- package/dist/sessionStore.js +39 -3
- package/dist/types.d.ts +1 -0
- package/miaco/README.md +124 -0
- package/miaco/dist/commands/chart.d.ts +6 -0
- package/miaco/dist/commands/chart.d.ts.map +1 -0
- package/miaco/dist/commands/chart.js +222 -0
- package/miaco/dist/commands/chart.js.map +1 -0
- package/miaco/dist/commands/decompose.d.ts +6 -0
- package/miaco/dist/commands/decompose.d.ts.map +1 -0
- package/miaco/dist/commands/decompose.js +98 -0
- package/miaco/dist/commands/decompose.js.map +1 -0
- package/miaco/dist/commands/schema.d.ts +6 -0
- package/miaco/dist/commands/schema.d.ts.map +1 -0
- package/miaco/dist/commands/schema.js +66 -0
- package/miaco/dist/commands/schema.js.map +1 -0
- package/miaco/dist/commands/stc.d.ts +11 -0
- package/miaco/dist/commands/stc.d.ts.map +1 -0
- package/miaco/dist/commands/stc.js +590 -0
- package/miaco/dist/commands/stc.js.map +1 -0
- package/miaco/dist/commands/trace.d.ts +6 -0
- package/miaco/dist/commands/trace.d.ts.map +1 -0
- package/miaco/dist/commands/trace.js +83 -0
- package/miaco/dist/commands/trace.js.map +1 -0
- package/miaco/dist/commands/validate.d.ts +6 -0
- package/miaco/dist/commands/validate.d.ts.map +1 -0
- package/miaco/dist/commands/validate.js +58 -0
- package/miaco/dist/commands/validate.js.map +1 -0
- package/miaco/dist/decompose.d.ts +93 -0
- package/miaco/dist/decompose.d.ts.map +1 -0
- package/miaco/dist/decompose.js +562 -0
- package/miaco/dist/decompose.js.map +1 -0
- package/miaco/dist/index.d.ts +18 -0
- package/miaco/dist/index.d.ts.map +1 -0
- package/miaco/dist/index.js +83 -0
- package/miaco/dist/index.js.map +1 -0
- package/miaco/dist/storage.d.ts +60 -0
- package/miaco/dist/storage.d.ts.map +1 -0
- package/miaco/dist/storage.js +100 -0
- package/miaco/dist/storage.js.map +1 -0
- package/miaco/package-lock.json +4103 -0
- package/miaco/package.json +40 -0
- package/miaco/tsconfig.json +18 -0
- package/miaco/version-patch-commit-and-publish.sh +1 -0
- package/miatel/MISSION_251231.md +3 -0
- package/miatel/README.md +107 -0
- package/miatel/dist/commands/analyze.d.ts +6 -0
- package/miatel/dist/commands/analyze.d.ts.map +1 -0
- package/miatel/dist/commands/analyze.js +100 -0
- package/miatel/dist/commands/analyze.js.map +1 -0
- package/miatel/dist/commands/arc.d.ts +6 -0
- package/miatel/dist/commands/arc.d.ts.map +1 -0
- package/miatel/dist/commands/arc.js +71 -0
- package/miatel/dist/commands/arc.js.map +1 -0
- package/miatel/dist/commands/beat.d.ts +6 -0
- package/miatel/dist/commands/beat.d.ts.map +1 -0
- package/miatel/dist/commands/beat.js +165 -0
- package/miatel/dist/commands/beat.js.map +1 -0
- package/miatel/dist/commands/theme.d.ts +6 -0
- package/miatel/dist/commands/theme.d.ts.map +1 -0
- package/miatel/dist/commands/theme.js +54 -0
- package/miatel/dist/commands/theme.js.map +1 -0
- package/miatel/dist/index.d.ts +18 -0
- package/miatel/dist/index.d.ts.map +1 -0
- package/miatel/dist/index.js +80 -0
- package/miatel/dist/index.js.map +1 -0
- package/miatel/dist/storage.d.ts +55 -0
- package/miatel/dist/storage.d.ts.map +1 -0
- package/miatel/dist/storage.js +100 -0
- package/miatel/dist/storage.js.map +1 -0
- package/miatel/package-lock.json +4103 -0
- package/miatel/package.json +35 -0
- package/miatel/src/commands/analyze.ts +109 -0
- package/miatel/src/commands/arc.ts +78 -0
- package/miatel/src/commands/beat.ts +176 -0
- package/miatel/src/commands/theme.ts +60 -0
- package/miatel/src/index.ts +94 -0
- package/miatel/src/storage.ts +156 -0
- package/miatel/tsconfig.json +18 -0
- package/miawa/MISSION_251231.md +144 -0
- package/miawa/README.md +133 -0
- package/miawa/dist/commands/beat.d.ts +6 -0
- package/miawa/dist/commands/beat.d.ts.map +1 -0
- package/miawa/dist/commands/beat.js +69 -0
- package/miawa/dist/commands/beat.js.map +1 -0
- package/miawa/dist/commands/ceremony.d.ts +6 -0
- package/miawa/dist/commands/ceremony.d.ts.map +1 -0
- package/miawa/dist/commands/ceremony.js +239 -0
- package/miawa/dist/commands/ceremony.js.map +1 -0
- package/miawa/dist/commands/circle.d.ts +6 -0
- package/miawa/dist/commands/circle.d.ts.map +1 -0
- package/miawa/dist/commands/circle.js +75 -0
- package/miawa/dist/commands/circle.js.map +1 -0
- package/miawa/dist/commands/eva.d.ts +6 -0
- package/miawa/dist/commands/eva.d.ts.map +1 -0
- package/miawa/dist/commands/eva.js +73 -0
- package/miawa/dist/commands/eva.js.map +1 -0
- package/miawa/dist/commands/wound.d.ts +6 -0
- package/miawa/dist/commands/wound.d.ts.map +1 -0
- package/miawa/dist/commands/wound.js +74 -0
- package/miawa/dist/commands/wound.js.map +1 -0
- package/miawa/dist/index.d.ts +19 -0
- package/miawa/dist/index.d.ts.map +1 -0
- package/miawa/dist/index.js +91 -0
- package/miawa/dist/index.js.map +1 -0
- package/miawa/dist/storage.d.ts +73 -0
- package/miawa/dist/storage.d.ts.map +1 -0
- package/miawa/dist/storage.js +100 -0
- package/miawa/dist/storage.js.map +1 -0
- package/miawa/package-lock.json +4103 -0
- package/miawa/package.json +36 -0
- package/miawa/src/commands/beat.ts +74 -0
- package/miawa/src/commands/ceremony.ts +256 -0
- package/miawa/src/commands/circle.ts +83 -0
- package/miawa/src/commands/eva.ts +84 -0
- package/miawa/src/commands/wound.ts +79 -0
- package/miawa/src/index.ts +108 -0
- package/miawa/src/storage.ts +179 -0
- package/miawa/tsconfig.json +18 -0
- package/package.json +7 -5
- package/references/acp/CLAUDE.md +7 -0
- package/references/acp/agent-plan.md +84 -0
- package/references/acp/clients.md +31 -0
- package/references/acp/extensibility.md +137 -0
- package/references/acp/initialization.md +225 -0
- package/references/acp/prompt-turn.md +321 -0
- package/references/acp/proxy-chains.md +562 -0
- package/references/acp/schema.md +3171 -0
- package/references/acp/session-list.md +334 -0
- package/references/acp/session-modes.md +170 -0
- package/references/acp/slash-commands.md +99 -0
- package/references/acp/terminals.md +281 -0
- package/references/acp/tool-calls.md +311 -0
- package/references/acp/typescript.md +29 -0
- package/references/claude/agent-teams.md +399 -0
- package/references/claude/chrome.md +231 -0
- package/references/claude/headless.md +158 -0
- package/references/claude/hooks-guide.md +708 -0
- package/references/claude/output-styles.md +112 -0
- package/references/claude/plugins.md +432 -0
- package/references/claude/skills.md +693 -0
- package/references/claude/sub-agents.md +816 -0
- package/references/copilot/acp/agents.md +32 -0
- package/references/copilot/acp/architecture.md +37 -0
- package/references/copilot/acp/clients.md +31 -0
- package/references/copilot/acp/introduction.md +42 -0
- package/references/copilot/acp/registry.md +339 -0
- package/references/copilot/acp-server.md +117 -0
- package/references/copilot/create-copilot-instructions.md +840 -0
- package/references/langchain/llms.txt +833 -0
- package/references/langchain/python/agents.md +677 -0
- package/references/langchain/python/context-engineering.md +1195 -0
- package/references/langchain/python/human-in-the-loop.md +326 -0
- package/references/langchain/python/long-term-memory.md +168 -0
- package/references/langchain/python/mcp.md +949 -0
- package/references/langchain/python/multi-agents/custom-workflow.md +187 -0
- package/references/langchain/python/multi-agents/handoffs.md +436 -0
- package/references/langchain/python/multi-agents/overview.md +295 -0
- package/references/langchain/python/multi-agents/router.md +150 -0
- package/references/langchain/python/multi-agents/skills.md +92 -0
- package/references/langchain/python/multi-agents/subagents.md +486 -0
- package/references/langchain/python/retrieval.md +320 -0
- package/references/langchain/python/runtime.md +141 -0
- package/references/langchain/python/short-term-memory.md +658 -0
- package/references/langchain/python/structured-output.md +712 -0
- package/references/langfuse/llms.txt +148 -0
- package/references/langgraph/javascript/llms.txt +275 -0
- package/references/skills/home.md +259 -0
- package/references/skills/integrate-skills.md +103 -0
- package/references/skills/specification.md +254 -0
- package/references/skills/what-are-skills.md +74 -0
- package/rispecs/README.md +164 -0
- package/rispecs/_sync_/miadi-code/SPEC.md +313 -0
- package/rispecs/_sync_/miadi-code/STATUS.md +177 -0
- package/rispecs/_sync_/miadi-code/dashboard/SPEC.md +465 -0
- package/rispecs/_sync_/miadi-code/dashboard/STATUS.md +212 -0
- package/rispecs/_sync_/miadi-code/multiline-input/SPEC.md +232 -0
- package/rispecs/_sync_/miadi-code/multiline-input/STATUS.md +108 -0
- package/rispecs/_sync_/miadi-code/pde/SPEC.md +253 -0
- package/rispecs/_sync_/miadi-code/pde/STATUS.md +56 -0
- package/rispecs/_sync_/miadi-code/stc/SPEC.md +397 -0
- package/rispecs/_sync_/miadi-code/stc/STATUS.md +70 -0
- package/rispecs/ava-langstack/inquiry-routing-upgrade.spec.md +119 -0
- package/rispecs/borrowed_from_opencode/001-client-server-architecture.rispec.md +98 -0
- package/rispecs/borrowed_from_opencode/002-event-bus-system.rispec.md +125 -0
- package/rispecs/borrowed_from_opencode/003-instance-state-pattern.rispec.md +136 -0
- package/rispecs/borrowed_from_opencode/004-namespace-module-pattern.rispec.md +151 -0
- package/rispecs/borrowed_from_opencode/005-zod-schema-validation.rispec.md +139 -0
- package/rispecs/borrowed_from_opencode/006-named-error-system.rispec.md +155 -0
- package/rispecs/borrowed_from_opencode/007-structured-logging.rispec.md +138 -0
- package/rispecs/borrowed_from_opencode/008-lazy-initialization.rispec.md +127 -0
- package/rispecs/borrowed_from_opencode/009-multi-agent-system.rispec.md +97 -0
- package/rispecs/borrowed_from_opencode/010-agent-definition-config.rispec.md +135 -0
- package/rispecs/borrowed_from_opencode/011-agent-permission-rulesets.rispec.md +151 -0
- package/rispecs/borrowed_from_opencode/012-agent-prompt-templates.rispec.md +141 -0
- package/rispecs/borrowed_from_opencode/013-agent-generation.rispec.md +142 -0
- package/rispecs/borrowed_from_opencode/014-plan-build-mode-toggle.rispec.md +155 -0
- package/rispecs/borrowed_from_opencode/015-subagent-task-delegation.rispec.md +146 -0
- package/rispecs/borrowed_from_opencode/016-agent-model-selection.rispec.md +151 -0
- package/rispecs/borrowed_from_opencode/017-compaction-agent.rispec.md +150 -0
- package/rispecs/borrowed_from_opencode/018-session-persistence.rispec.md +125 -0
- package/rispecs/borrowed_from_opencode/019-session-compaction.rispec.md +132 -0
- package/rispecs/borrowed_from_opencode/020-session-forking.rispec.md +134 -0
- package/rispecs/borrowed_from_opencode/021-session-revert-snapshot.rispec.md +135 -0
- package/rispecs/borrowed_from_opencode/022-session-sharing.rispec.md +165 -0
- package/rispecs/borrowed_from_opencode/023-session-summary-diffs.rispec.md +165 -0
- package/rispecs/borrowed_from_opencode/024-child-sessions.rispec.md +164 -0
- package/rispecs/borrowed_from_opencode/025-session-title-generation.rispec.md +162 -0
- package/rispecs/borrowed_from_opencode/026-message-parts-model.rispec.md +201 -0
- package/rispecs/borrowed_from_opencode/027-streaming-message-deltas.rispec.md +212 -0
- package/rispecs/borrowed_from_opencode/028-multi-provider-architecture.rispec.md +184 -0
- package/rispecs/borrowed_from_opencode/029-provider-authentication.rispec.md +225 -0
- package/rispecs/borrowed_from_opencode/030-model-registry.rispec.md +222 -0
- package/rispecs/borrowed_from_opencode/031-cost-tracking.rispec.md +243 -0
- package/rispecs/borrowed_from_opencode/032-provider-transform-pipeline.rispec.md +282 -0
- package/rispecs/borrowed_from_opencode/033-provider-sdk-abstraction.rispec.md +338 -0
- package/rispecs/borrowed_from_opencode/034-tool-registry.rispec.md +110 -0
- package/rispecs/borrowed_from_opencode/035-tool-context-injection.rispec.md +155 -0
- package/rispecs/borrowed_from_opencode/036-tool-output-truncation.rispec.md +138 -0
- package/rispecs/borrowed_from_opencode/037-batch-tool.rispec.md +129 -0
- package/rispecs/borrowed_from_opencode/038-multi-edit-tool.rispec.md +167 -0
- package/rispecs/borrowed_from_opencode/039-apply-patch-tool.rispec.md +161 -0
- package/rispecs/borrowed_from_opencode/040-code-search-tool.rispec.md +143 -0
- package/rispecs/borrowed_from_opencode/041-web-fetch-tool.rispec.md +131 -0
- package/rispecs/borrowed_from_opencode/042-web-search-tool.rispec.md +159 -0
- package/rispecs/borrowed_from_opencode/043-todo-tool.rispec.md +156 -0
- package/rispecs/borrowed_from_opencode/044-plan-mode-tool.rispec.md +139 -0
- package/rispecs/borrowed_from_opencode/045-task-tool.rispec.md +146 -0
- package/rispecs/borrowed_from_opencode/046-question-tool.rispec.md +170 -0
- package/rispecs/borrowed_from_opencode/047-external-directory-tool.rispec.md +166 -0
- package/rispecs/borrowed_from_opencode/048-file-read-write-tools.rispec.md +205 -0
- package/rispecs/borrowed_from_opencode/049-lsp-server-management.rispec.md +104 -0
- package/rispecs/borrowed_from_opencode/050-lsp-hover-completion.rispec.md +102 -0
- package/rispecs/borrowed_from_opencode/051-lsp-diagnostics.rispec.md +86 -0
- package/rispecs/borrowed_from_opencode/052-lsp-root-detection.rispec.md +109 -0
- package/rispecs/borrowed_from_opencode/053-remote-mcp-servers.rispec.md +119 -0
- package/rispecs/borrowed_from_opencode/054-mcp-oauth-flow.rispec.md +107 -0
- package/rispecs/borrowed_from_opencode/055-mcp-tool-conversion.rispec.md +118 -0
- package/rispecs/borrowed_from_opencode/056-mcp-connection-monitoring.rispec.md +106 -0
- package/rispecs/borrowed_from_opencode/057-local-mcp-servers.rispec.md +116 -0
- package/rispecs/borrowed_from_opencode/058-rich-tui.rispec.md +108 -0
- package/rispecs/borrowed_from_opencode/059-streaming-display.rispec.md +116 -0
- package/rispecs/borrowed_from_opencode/060-permission-prompts.rispec.md +130 -0
- package/rispecs/borrowed_from_opencode/061-session-navigation.rispec.md +155 -0
- package/rispecs/borrowed_from_opencode/062-syntax-highlighting.rispec.md +151 -0
- package/rispecs/borrowed_from_opencode/063-keybinding-system.rispec.md +181 -0
- package/rispecs/borrowed_from_opencode/064-multi-level-config.rispec.md +155 -0
- package/rispecs/borrowed_from_opencode/065-jsonc-config.rispec.md +190 -0
- package/rispecs/borrowed_from_opencode/066-config-env-variables.rispec.md +153 -0
- package/rispecs/borrowed_from_opencode/067-config-deep-merging.rispec.md +178 -0
- package/rispecs/borrowed_from_opencode/068-remote-org-config.rispec.md +183 -0
- package/rispecs/borrowed_from_opencode/069-config-markdown-frontmatter.rispec.md +206 -0
- package/rispecs/borrowed_from_opencode/070-managed-config-directory.rispec.md +232 -0
- package/rispecs/borrowed_from_opencode/071-plugin-architecture.rispec.md +104 -0
- package/rispecs/borrowed_from_opencode/072-plugin-hooks.rispec.md +123 -0
- package/rispecs/borrowed_from_opencode/073-plugin-auto-install.rispec.md +115 -0
- package/rispecs/borrowed_from_opencode/074-permission-system.rispec.md +133 -0
- package/rispecs/borrowed_from_opencode/075-git-worktree-management.rispec.md +126 -0
- package/rispecs/borrowed_from_opencode/076-snapshot-system.rispec.md +124 -0
- package/rispecs/borrowed_from_opencode/077-snapshot-diff.rispec.md +117 -0
- package/rispecs/borrowed_from_opencode/078-snapshot-restore.rispec.md +128 -0
- package/rispecs/borrowed_from_opencode/079-worktree-branch-naming.rispec.md +122 -0
- package/rispecs/borrowed_from_opencode/080-sqlite-storage.rispec.md +134 -0
- package/rispecs/borrowed_from_opencode/081-database-migrations.rispec.md +148 -0
- package/rispecs/borrowed_from_opencode/082-database-transactions.rispec.md +138 -0
- package/rispecs/borrowed_from_opencode/083-deferred-effects.rispec.md +148 -0
- package/rispecs/borrowed_from_opencode/084-permission-rules.rispec.md +123 -0
- package/rispecs/borrowed_from_opencode/085-permission-glob-patterns.rispec.md +113 -0
- package/rispecs/borrowed_from_opencode/086-permission-merging.rispec.md +134 -0
- package/rispecs/borrowed_from_opencode/087-permission-modes.rispec.md +145 -0
- package/rispecs/borrowed_from_opencode/088-http-api-server.rispec.md +165 -0
- package/rispecs/borrowed_from_opencode/089-openapi-spec-generation.rispec.md +164 -0
- package/rispecs/borrowed_from_opencode/090-websocket-support.rispec.md +136 -0
- package/rispecs/borrowed_from_opencode/091-sse-streaming.rispec.md +168 -0
- package/rispecs/borrowed_from_opencode/092-mdns-discovery.rispec.md +145 -0
- package/rispecs/borrowed_from_opencode/093-javascript-sdk.rispec.md +200 -0
- package/rispecs/borrowed_from_opencode/094-skill-system.rispec.md +187 -0
- package/rispecs/borrowed_from_opencode/095-skill-discovery.rispec.md +182 -0
- package/rispecs/borrowed_from_opencode/096-desktop-remote-driving.rispec.md +175 -0
- package/rispecs/borrowed_from_opencode/INDEX.md +255 -0
- package/rispecs/core.rispecs.md +261 -0
- package/rispecs/engines.rispecs.md +241 -0
- package/rispecs/formatting.rispecs.md +252 -0
- package/rispecs/living-specifications.rispecs.md +361 -0
- package/rispecs/mcp.rispecs.md +197 -0
- package/rispecs/pde.rispecs.md +399 -0
- package/rispecs/pi-mono-envisionning/ENVISIONING.md +366 -0
- package/rispecs/pi-mono-envisionning/storytelling-horizon.rispecs.md +76 -0
- package/rispecs/pi-mono-envisionning/widget.rispecs.md +2 -0
- package/rispecs/relation-to-mcp-structural-thinking.kin.md +72 -0
- package/rispecs/research-for-better-framework/CLAUDE.md +7 -0
- package/rispecs/research-for-better-framework/survey-pi-openclaw-opencode-openhands.md +210 -0
- package/rispecs/session.rispecs.md +277 -0
- package/rispecs/stc.rispecs.md +138 -0
- package/rispecs/unifier.rispecs.md +317 -0
- package/scripts/LAUNCH--mcp-mia-code--testing--2603141315--ac705a66-2c15-4a1c-a26d-9491018c5ba8.sh +2 -0
- package/scripts/RESUME--mia-code--mcps--260313--ac705a66-2c15-4a1c-a26d-9491018c5ba8.sh +1 -0
- package/scripts/install-widget-in-home-pi-agent-extensions.sh +4 -0
- package/scripts/sample-decompose--2604011535-prompt.sh +1 -0
- package/skills/deep-search/AGENTS.md +17 -0
- package/skills/deep-search/SKILL.md +281 -0
- package/skills/deep-search/agent-templates.md +224 -0
- package/skills/deep-search/orchestration-patterns.md +95 -0
- package/skills/miaco-pde-inquiry-routing-deep-search/AGENTS.md +13 -0
- package/skills/miaco-pde-inquiry-routing-deep-search/SKILL.md +136 -0
- package/skills/miaco-pde-inquiry-routing-internal-external-relationship/AGENTS.md +4 -0
- package/skills/miaco-pde-inquiry-routing-internal-external-relationship/SKILL.md +157 -0
- package/skills/miaco-pde-inquiry-routing-local-qmd/AGENTS.md +42 -0
- package/skills/miaco-pde-inquiry-routing-local-qmd/SKILL.md +135 -0
- package/skills/qmd/AGENTS.md +3 -0
- package/skills/qmd/SKILL.md +144 -0
- package/skills/qmd/references/mcp-setup.md +102 -0
- package/skills/rise-pde-inquiry-session-multi-agents-v3/SKILL.md +234 -0
- package/skills/rise-pde-inquiry-session-multi-agents-v3/agent-templates.md +436 -0
- package/skills/rise-pde-inquiry-session-multi-agents-v3/orchestration-patterns.md +197 -0
- package/skills/rise-pde-inquiry-session-multi-agents-v3/references/ceremonial-technology.md +102 -0
- package/skills/rise-pde-inquiry-session-multi-agents-v3/references/creative-orientation.md +99 -0
- package/skills/rise-pde-inquiry-session-multi-agents-v3/references/prompt-decomposition.md +73 -0
- package/skills/rise-pde-inquiry-session-multi-agents-v3/references/rise-framework.md +74 -0
- package/skills/rise-pde-inquiry-session-multi-agents-v3/references/structural-tension.md +82 -0
- package/src/cli.ts +35 -11
- package/src/geminiHeadless.ts +7 -2
- package/src/index.ts +2 -1
- package/src/mcp/miaco-server.ts +13 -1
- package/src/mcp/miatel-server.ts +13 -1
- package/src/mcp/miawa-server.ts +13 -1
- package/src/mcp/utils.ts +41 -8
- package/src/sessionStore.ts +44 -4
- package/src/types.ts +2 -1
- package/widget/mia-ceremony/README.md +36 -0
- package/widget/mia-ceremony/index.ts +143 -0
- package/widget/mia-interceptor/README.md +39 -0
- package/widget/mia-interceptor/index.ts +221 -0
- package/widget/mia-tools/README.md +37 -0
- package/widget/mia-tools/index.ts +569 -0
- package/widget/miette-echo/README.md +44 -0
- package/widget/miette-echo/index.ts +164 -0
- package/.claude/settings.local.json +0 -9
- package/.hch/issue_.env +0 -4
- package/.hch/issue_add__2601211715.json +0 -77
- package/.hch/issue_add__2601211715.md +0 -4
- package/.hch/issue_add__2602242020.json +0 -78
- package/.hch/issue_add__2602242020.md +0 -7
- package/.hch/issues.json +0 -2312
- package/.hch/issues.md +0 -30
- package/WS__mia-code__260214__IAIP_PDE.code-workspace +0 -29
- package/WS__mia-code__src332__260122.code-workspace +0 -23
- package/samples/copilot/session-state/be76abaa-a27f-4725-b2a9-22fb45f7e0f7/checkpoints/index.md +0 -6
- package/samples/copilot/session-state/be76abaa-a27f-4725-b2a9-22fb45f7e0f7/events.jsonl +0 -213
- package/samples/copilot/session-state/be76abaa-a27f-4725-b2a9-22fb45f7e0f7/plan.md +0 -243
- package/samples/copilot/session-state/be76abaa-a27f-4725-b2a9-22fb45f7e0f7/workspace.yaml +0 -5
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# RISE-015: Subagent Task Delegation
|
|
2
|
+
|
|
3
|
+
> RISE Framework Specification — Borrowed from OpenCode for mia-code
|
|
4
|
+
> Document: rispecs/borrowed_from_opencode/015-subagent-task-delegation.rispec.md
|
|
5
|
+
|
|
6
|
+
## Creative Intent
|
|
7
|
+
|
|
8
|
+
mia-code enables agents to delegate specialized subtasks to other agents, creating a collaborative multi-agent workflow within a single session. When a primary agent encounters a task better suited to a specialist — complex multi-file search, background code analysis, focused review — it spawns a subagent to handle it. The subagent works within its own permission boundary, returns results, and the parent agent synthesizes. This mirrors how effective teams work: leaders delegate, specialists execute, results converge. The `@mention` syntax makes delegation feel natural — like addressing a colleague in a conversation.
|
|
9
|
+
|
|
10
|
+
## Structural Tension Analysis
|
|
11
|
+
|
|
12
|
+
**Current Reality:**
|
|
13
|
+
- mia-code processes every request with a single agent — there is no delegation or task splitting
|
|
14
|
+
- Complex multi-step tasks (e.g., "find all auth patterns and then refactor them") are handled sequentially by one agent, which may lose focus or context across steps
|
|
15
|
+
- The engine (Gemini/Claude) has a single context window — large codebase searches consume tokens that could be used for reasoning
|
|
16
|
+
- There is no way to run a focused search in parallel with an ongoing conversation
|
|
17
|
+
- The unifier interprets all output through one lens, regardless of whether the output came from exploration, analysis, or execution
|
|
18
|
+
|
|
19
|
+
**Desired State:**
|
|
20
|
+
- Primary agents can spawn subagents via `@mention` syntax in user messages or programmatic delegation
|
|
21
|
+
- Subagents run in their own context with their own permissions but share the session's file system state
|
|
22
|
+
- Subagent results flow back to the parent agent, which synthesizes and presents them to the user
|
|
23
|
+
- Delegation is explicit and observable — the user sees when a subtask is delegated and when it completes
|
|
24
|
+
- Subagents have limited tool access compared to primary agents (configurable per agent definition)
|
|
25
|
+
- The parent agent decides when to delegate versus handle directly, based on task complexity and agent availability
|
|
26
|
+
|
|
27
|
+
## Desired Outcome Definition
|
|
28
|
+
|
|
29
|
+
A user types `@explore find all files importing the Database class` in their message. The active primary agent recognizes the `@explore` mention, extracts the task, and delegates to the explore subagent. The explore agent searches the codebase, returns results, and the primary agent presents the synthesized findings to the user.
|
|
30
|
+
|
|
31
|
+
## Natural Language Functional Description
|
|
32
|
+
|
|
33
|
+
### Delegation Syntax
|
|
34
|
+
|
|
35
|
+
Users trigger delegation by prefixing a task with `@agentname`:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
@explore find all uses of the createSession function
|
|
39
|
+
@general analyze the dependency graph of the auth module
|
|
40
|
+
@reviewer check the last 3 file changes for security issues
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The `@mention` is parsed from the user's message. Everything after the agent name is treated as the delegated task prompt.
|
|
44
|
+
|
|
45
|
+
### Delegation Flow
|
|
46
|
+
|
|
47
|
+
1. **Parse**: The system detects `@agentname` in the user's message and extracts the agent name and task
|
|
48
|
+
2. **Validate**: The named agent must exist and have mode "subagent" or "all" — primary-only agents cannot be invoked as subagents
|
|
49
|
+
3. **Context Assembly**: The subagent receives: the task prompt, relevant session context (recent messages, current file state), and its own system prompt
|
|
50
|
+
4. **Execute**: The subagent processes the task within its permission boundary, using its configured model
|
|
51
|
+
5. **Return**: The subagent's response is returned to the parent agent as a structured result
|
|
52
|
+
6. **Synthesize**: The parent agent incorporates the subagent's results into its response to the user
|
|
53
|
+
7. **Display**: The UI shows the delegation as a nested thread — the user sees the subagent's work and the parent's synthesis
|
|
54
|
+
|
|
55
|
+
### Subagent Context
|
|
56
|
+
|
|
57
|
+
Subagents receive a focused context, not the full conversation history:
|
|
58
|
+
|
|
59
|
+
- **Task prompt**: The text following the `@mention`
|
|
60
|
+
- **Recent context**: The last N messages from the session (configurable, default 5) for conversational continuity
|
|
61
|
+
- **File state**: Full access to the session's file system (subject to the subagent's permissions)
|
|
62
|
+
- **Project metadata**: Project name, root directory, detected language/framework
|
|
63
|
+
|
|
64
|
+
Subagents do not receive:
|
|
65
|
+
- The full message history (to keep their context window focused)
|
|
66
|
+
- The parent agent's system prompt (they use their own)
|
|
67
|
+
- Other subagents' results (unless explicitly included in the task prompt)
|
|
68
|
+
|
|
69
|
+
### Parent Agent Synthesis
|
|
70
|
+
|
|
71
|
+
When a subagent returns results, the parent agent:
|
|
72
|
+
1. Receives the subagent's response as a structured message with metadata (agent name, execution time, tool calls made)
|
|
73
|
+
2. Evaluates the results in the context of the ongoing conversation
|
|
74
|
+
3. May use the results directly, summarize them, or combine them with its own analysis
|
|
75
|
+
4. Presents a unified response to the user that credits the subagent's contribution
|
|
76
|
+
|
|
77
|
+
### UI Representation
|
|
78
|
+
|
|
79
|
+
Delegation appears in the terminal UI as a nested thread:
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
You: @explore find all files that use the EventBus
|
|
83
|
+
|
|
84
|
+
┌─ explore agent ──────────────────────────────┐
|
|
85
|
+
│ Searching codebase... │
|
|
86
|
+
│ Found 12 files importing EventBus: │
|
|
87
|
+
│ src/session/manager.ts:3 │
|
|
88
|
+
│ src/engine/gemini.ts:7 │
|
|
89
|
+
│ src/engine/claude.ts:5 │
|
|
90
|
+
│ ... (9 more) │
|
|
91
|
+
│ ⏱ completed in 1.2s │
|
|
92
|
+
└───────────────────────────────────────────────┘
|
|
93
|
+
|
|
94
|
+
🤖 Build agent: Found 12 files using EventBus. The heaviest usage
|
|
95
|
+
is in the session management layer (4 files) and engine
|
|
96
|
+
adapters (3 files). Want me to refactor any of these?
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Programmatic Delegation
|
|
100
|
+
|
|
101
|
+
Beyond user-initiated `@mention`, the primary agent can decide to delegate programmatically. When the agent's reasoning determines that a subtask would benefit from delegation, it emits a delegation request:
|
|
102
|
+
|
|
103
|
+
- The agent recognizes a complex search task → delegates to `@explore`
|
|
104
|
+
- The agent needs a focused code review → delegates to `@reviewer`
|
|
105
|
+
- The agent needs multi-step analysis → delegates to `@general`
|
|
106
|
+
|
|
107
|
+
Programmatic delegation uses the same flow as user-initiated delegation but is triggered by the agent's own reasoning rather than an explicit `@mention`.
|
|
108
|
+
|
|
109
|
+
### Delegation Limits
|
|
110
|
+
|
|
111
|
+
To prevent runaway delegation chains:
|
|
112
|
+
- Maximum delegation depth: 2 (a subagent can delegate to another subagent, but no further)
|
|
113
|
+
- Maximum concurrent subagents: 3 (additional delegations queue)
|
|
114
|
+
- Subagent timeout: 60 seconds default (configurable) — if a subagent exceeds the timeout, its partial results are returned
|
|
115
|
+
- Subagents cannot delegate to primary-mode-only agents
|
|
116
|
+
- A subagent cannot invoke its parent agent (no circular delegation)
|
|
117
|
+
|
|
118
|
+
### Error Handling
|
|
119
|
+
|
|
120
|
+
When delegation fails:
|
|
121
|
+
- **Agent not found**: The parent agent is informed and can handle the task itself or suggest alternatives
|
|
122
|
+
- **Permission denied**: The subagent's permission ruleset prevented the requested operation — the parent agent is informed with the specific denial reason
|
|
123
|
+
- **Timeout**: Partial results are returned with a timeout indicator — the parent agent decides whether to retry, delegate to a different agent, or handle manually
|
|
124
|
+
- **Subagent error**: Errors are propagated to the parent agent as structured error objects (see RISE-006)
|
|
125
|
+
|
|
126
|
+
## Supporting Structures
|
|
127
|
+
|
|
128
|
+
- **Multi-Agent System (RISE-009)** defines the agent architecture and mode system that delegation relies on
|
|
129
|
+
- **Agent Permission Rulesets (RISE-011)** enforces permission boundaries for subagents independently
|
|
130
|
+
- **Agent Prompt Templates (RISE-012)** provides subagent-specific system prompts optimized for focused tasks
|
|
131
|
+
- **Agent Model Selection (RISE-016)** enables subagents to use cost-appropriate models for their tasks
|
|
132
|
+
- **Event Bus (RISE-002)** broadcasts delegation events (start, complete, error) to the UI
|
|
133
|
+
|
|
134
|
+
## Creative Advancement Scenarios
|
|
135
|
+
|
|
136
|
+
**Scenario 1 — Large Codebase Exploration:**
|
|
137
|
+
A developer working in a monorepo asks the build agent to refactor the authentication module. The build agent delegates `@explore find all files importing AuthService and map their dependency relationships` to the explore agent. The explore agent uses a fast model to scan thousands of files in seconds, returns a dependency map. The build agent uses this map to plan a safe refactoring order, then executes the changes file by file.
|
|
138
|
+
|
|
139
|
+
**Scenario 2 — Review Before Commit:**
|
|
140
|
+
After making several changes in build mode, the developer types `@reviewer check all files I modified this session for bugs or security issues`. The reviewer subagent reads the modified files, analyzes the changes, and returns a focused review. The build agent presents the review and asks whether to proceed with committing or address the findings first.
|
|
141
|
+
|
|
142
|
+
**Scenario 3 — Parallel Research:**
|
|
143
|
+
The developer asks: "Refactor the database layer to use connection pooling. @explore find how connections are currently managed. @general research best practices for connection pooling in Node.js." Both subagents execute concurrently. The explore agent maps the current implementation while the general agent provides architectural guidance. The build agent synthesizes both results into a refactoring plan.
|
|
144
|
+
|
|
145
|
+
**Scenario 4 — Cascading Delegation:**
|
|
146
|
+
The developer asks the build agent to migrate a module from JavaScript to TypeScript. The build agent delegates `@explore find all .js files in src/auth/` to map the migration scope. The explore agent returns the file list. The build agent then processes each file, converting it to TypeScript. For complex type inference, it delegates `@general analyze the runtime types used in src/auth/middleware.js` to get detailed type information before converting.
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# RISE-016: Agent Model Selection
|
|
2
|
+
|
|
3
|
+
> RISE Framework Specification — Borrowed from OpenCode for mia-code
|
|
4
|
+
> Document: rispecs/borrowed_from_opencode/016-agent-model-selection.rispec.md
|
|
5
|
+
|
|
6
|
+
## Creative Intent
|
|
7
|
+
|
|
8
|
+
mia-code enables developers to assign different LLM models to different agents, optimizing for cost, speed, and capability across the agent roster. A fast, cheap model powers rapid codebase exploration. A powerful, expensive model handles complex code generation. A balanced model manages code review. Each agent uses the right tool for its job — the explore agent does not need Opus-level reasoning for `grep` and `glob`, and the build agent should not be constrained to a Flash-tier model for complex refactoring. Model selection turns the agent system into a cost-efficient ensemble.
|
|
9
|
+
|
|
10
|
+
## Structural Tension Analysis
|
|
11
|
+
|
|
12
|
+
**Current Reality:**
|
|
13
|
+
- mia-code selects between two engines: Gemini CLI and Claude CLI — this is a binary choice, not a model selection
|
|
14
|
+
- The engine choice applies globally to the entire session — there is no per-task or per-agent model variation
|
|
15
|
+
- Both engines use their default models (Gemini 2.5 Pro, Claude Sonnet) — there is no mechanism to specify a model variant
|
|
16
|
+
- Cost optimization is impossible — every interaction uses the same model regardless of task complexity
|
|
17
|
+
- Simple tasks (file listing, content search) consume the same expensive tokens as complex tasks (architecture design, code generation)
|
|
18
|
+
- The `engineChoice` field in session state stores "gemini" or "claude" but not a specific model identifier
|
|
19
|
+
|
|
20
|
+
**Desired State:**
|
|
21
|
+
- Each agent definition includes an optional `model` field specifying `{providerID, modelID}`
|
|
22
|
+
- When no model is specified, the agent uses the session's global default
|
|
23
|
+
- Agents use their assigned model for all interactions, regardless of the session default
|
|
24
|
+
- Model selection is independent of agent permissions and prompt — a model change does not affect what the agent can do
|
|
25
|
+
- Users can change an agent's model mid-session via config update
|
|
26
|
+
- The system tracks token usage and cost per agent for visibility
|
|
27
|
+
|
|
28
|
+
## Desired Outcome Definition
|
|
29
|
+
|
|
30
|
+
Each agent in mia-code uses its configured model for all LLM interactions. The explore agent defaults to a fast model, the build agent to a powerful one, and users can override any agent's model via configuration. Model selection is transparent, cost-aware, and independent of other agent properties.
|
|
31
|
+
|
|
32
|
+
## Natural Language Functional Description
|
|
33
|
+
|
|
34
|
+
### Model Reference Format
|
|
35
|
+
|
|
36
|
+
A model reference is a two-field object:
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
interface ModelReference {
|
|
40
|
+
providerID: string; // API provider identifier
|
|
41
|
+
modelID: string; // specific model within the provider
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Provider IDs map to configured API endpoints:
|
|
46
|
+
- `"anthropic"` → Anthropic API (Claude models)
|
|
47
|
+
- `"google"` → Google AI API (Gemini models)
|
|
48
|
+
- `"openai"` → OpenAI API (GPT models)
|
|
49
|
+
- `"local"` → Local model server (Ollama, LM Studio, etc.)
|
|
50
|
+
|
|
51
|
+
Model IDs are provider-specific strings:
|
|
52
|
+
- `"claude-sonnet-4-20250514"`, `"claude-opus-4-20250514"`, `"claude-haiku-3-5-20241022"`
|
|
53
|
+
- `"gemini-2.5-pro"`, `"gemini-2.5-flash"`, `"gemini-2.0-flash"`
|
|
54
|
+
- `"gpt-4.1"`, `"o3"`, `"gpt-4.1-mini"`
|
|
55
|
+
|
|
56
|
+
### Default Model Assignments
|
|
57
|
+
|
|
58
|
+
Built-in agents have these default model preferences:
|
|
59
|
+
|
|
60
|
+
| Agent | Default Model Strategy | Rationale |
|
|
61
|
+
|-------|----------------------|-----------|
|
|
62
|
+
| build | Session default (most capable) | Complex code generation needs top-tier reasoning |
|
|
63
|
+
| plan | Session default | Analysis benefits from strong reasoning |
|
|
64
|
+
| explore | Fast/cheap variant | Search tasks need speed, not deep reasoning |
|
|
65
|
+
| general | Session default | Subagent tasks may be complex |
|
|
66
|
+
|
|
67
|
+
The "fast/cheap variant" is resolved at runtime based on the session's provider:
|
|
68
|
+
- If session uses Anthropic → explore defaults to `claude-haiku-3-5-20241022`
|
|
69
|
+
- If session uses Google → explore defaults to `gemini-2.5-flash`
|
|
70
|
+
- If session uses OpenAI → explore defaults to `gpt-4.1-mini`
|
|
71
|
+
|
|
72
|
+
### Configuration
|
|
73
|
+
|
|
74
|
+
Users set agent models in `mia-code.json`:
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"agent": {
|
|
79
|
+
"build": {
|
|
80
|
+
"model": {
|
|
81
|
+
"providerID": "anthropic",
|
|
82
|
+
"modelID": "claude-sonnet-4-20250514"
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"explore": {
|
|
86
|
+
"model": {
|
|
87
|
+
"providerID": "google",
|
|
88
|
+
"modelID": "gemini-2.5-flash"
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
"reviewer": {
|
|
92
|
+
"model": {
|
|
93
|
+
"providerID": "anthropic",
|
|
94
|
+
"modelID": "claude-opus-4-20250514"
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Agents can use models from different providers within the same session. The build agent might use Claude while the explore agent uses Gemini Flash — each agent talks to its configured API endpoint independently.
|
|
102
|
+
|
|
103
|
+
### Model Resolution Order
|
|
104
|
+
|
|
105
|
+
When an agent needs to make an LLM call, the model is resolved in this order:
|
|
106
|
+
|
|
107
|
+
1. **Agent config override**: The `model` field in the agent's definition (highest priority)
|
|
108
|
+
2. **Session default**: The model selected when the session started or changed via `/model` command
|
|
109
|
+
3. **Global default**: The default model from `~/.config/mia-code/config.json`
|
|
110
|
+
4. **Engine fallback**: The default model of the configured engine (gemini/claude)
|
|
111
|
+
|
|
112
|
+
### Runtime Model Switching
|
|
113
|
+
|
|
114
|
+
An agent's model can be changed mid-session:
|
|
115
|
+
- Via command: `/model build anthropic/claude-opus-4` changes the build agent's model
|
|
116
|
+
- Via config edit: Modifying `mia-code.json` and reloading
|
|
117
|
+
- The change takes effect on the next message — in-flight operations complete with the previous model
|
|
118
|
+
|
|
119
|
+
### Cost Tracking
|
|
120
|
+
|
|
121
|
+
The system tracks token usage per agent per session (input tokens, output tokens, estimated cost). Cost data is logged and optionally displayed via `/cost` command, enabling users to see the cost impact of their model choices and optimize accordingly.
|
|
122
|
+
|
|
123
|
+
### Integration with mia-code Engine System
|
|
124
|
+
|
|
125
|
+
The current mia-code engine system (`gemini` vs `claude` CLI selection) maps to the model reference format: `engineChoice: "gemini"` → `{providerID: "google", modelID: "gemini-2.5-pro"}`, `engineChoice: "claude"` → `{providerID: "anthropic", modelID: "claude-sonnet-4"}`. The model selection system is a superset — the engine choice becomes the session default, and per-agent overrides layer on top, preserving backward compatibility.
|
|
126
|
+
|
|
127
|
+
### Provider Configuration
|
|
128
|
+
|
|
129
|
+
Each provider requires API credentials and endpoint configuration in a `providers` config section. Environment variable references (prefixed with `$`) are resolved at runtime. Provider configuration is global — not per-agent. Agents reference providers by ID; the system resolves credentials from the provider config.
|
|
130
|
+
|
|
131
|
+
## Supporting Structures
|
|
132
|
+
|
|
133
|
+
- **Multi-Agent System (RISE-009)** defines the agents that model selection applies to
|
|
134
|
+
- **Agent Definition Config (RISE-010)** provides the configuration format for model overrides
|
|
135
|
+
- **Structured Logging (RISE-007)** records token usage and cost data
|
|
136
|
+
- **Compaction Agent (RISE-017)** benefits from model selection — compaction uses a cheap model to summarize
|
|
137
|
+
- **Instance State (RISE-003)** stores per-session cost tracking data
|
|
138
|
+
|
|
139
|
+
## Creative Advancement Scenarios
|
|
140
|
+
|
|
141
|
+
**Scenario 1 — Cost-Optimized Development:**
|
|
142
|
+
A solo developer on a budget configures: build agent → Claude Sonnet (balanced cost/quality), explore agent → Gemini Flash (nearly free for search), plan agent → Claude Haiku (cheap analysis). Their daily cost drops from $5 to $1.50 without noticeable quality loss in exploration and planning tasks. Build tasks retain full quality where it matters most.
|
|
143
|
+
|
|
144
|
+
**Scenario 2 — Cross-Provider Ensemble:**
|
|
145
|
+
A team uses Claude Opus for the build agent (best code generation), Gemini Pro for the plan agent (strong analysis at lower cost), and GPT-4.1-mini for the explore agent (fast and cheap). Each model plays to its strengths. The agents don't know or care which provider powers them — the abstraction is complete.
|
|
146
|
+
|
|
147
|
+
**Scenario 3 — Local Model for Sensitive Code:**
|
|
148
|
+
A defense contractor configures the explore agent to use a local Ollama model — no data leaves the network for search operations. The build agent uses Claude via API for complex generation, but only for non-classified code paths. Model selection enables hybrid local/cloud architectures.
|
|
149
|
+
|
|
150
|
+
**Scenario 4 — Mid-Session Upgrade:**
|
|
151
|
+
A developer starts with Sonnet for the build agent. Midway through a complex refactoring, they realize they need stronger reasoning. They run `/model build anthropic/claude-opus-4` and the next message uses Opus. The session context is preserved — only the model changes. When the hard part is done, they switch back to Sonnet to save costs.
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# RISE-017: Compaction Agent
|
|
2
|
+
|
|
3
|
+
> RISE Framework Specification — Borrowed from OpenCode for mia-code
|
|
4
|
+
> Document: rispecs/borrowed_from_opencode/017-compaction-agent.rispec.md
|
|
5
|
+
|
|
6
|
+
## Creative Intent
|
|
7
|
+
|
|
8
|
+
mia-code enables long-running development sessions without context window exhaustion by employing a specialized compaction agent that summarizes older conversation history into a condensed, high-signal representation. As sessions grow, the compaction agent distills verbose tool outputs, intermediate reasoning, and redundant exchanges into a compact summary that preserves key decisions, file modifications, error resolutions, and current task state. The developer's working context remains sharp and focused no matter how long the session runs — the agent remembers what matters and forgets what doesn't.
|
|
9
|
+
|
|
10
|
+
## Structural Tension Analysis
|
|
11
|
+
|
|
12
|
+
**Current Reality:**
|
|
13
|
+
- mia-code sessions accumulate messages without limit — long sessions consume ever-growing context windows
|
|
14
|
+
- The underlying engines (Gemini/Claude CLI) have finite context limits — exceeding them causes truncation or errors
|
|
15
|
+
- Verbose tool outputs (full file contents, large command outputs, search results) inflate context rapidly
|
|
16
|
+
- There is no mechanism to summarize or compress older messages — every historical message occupies context tokens
|
|
17
|
+
- Long sessions degrade in quality as the model loses access to early decisions obscured by later noise
|
|
18
|
+
- Session persistence (`~/.mia-code-sessions.json`) stores full message history, growing storage over time
|
|
19
|
+
- The unifier's dual perspective adds interpretive text to every exchange, further inflating context
|
|
20
|
+
|
|
21
|
+
**Desired State:**
|
|
22
|
+
- A compaction agent monitors session message count and automatically compresses older messages when a threshold is exceeded
|
|
23
|
+
- Compacted summaries replace detailed history — recent messages remain verbatim
|
|
24
|
+
- The summary preserves: file modification records, key decisions, error resolutions, current task state, and important code snippets
|
|
25
|
+
- The summary discards: verbose tool outputs, intermediate reasoning chains, redundant exchanges, large file contents, and raw search results
|
|
26
|
+
- Compaction runs in the background without interrupting the developer's workflow
|
|
27
|
+
- Multiple compaction rounds can occur in a long session — each round compresses the oldest uncompacted messages
|
|
28
|
+
- The compacted context is smaller but semantically equivalent for ongoing work
|
|
29
|
+
|
|
30
|
+
## Desired Outcome Definition
|
|
31
|
+
|
|
32
|
+
When a mia-code session exceeds a message threshold (default: 50 messages), the compaction agent automatically summarizes older messages into a condensed context block. Recent messages (default: last 20) remain verbatim. The session continues seamlessly with the compacted history, maintaining coherence while reducing token consumption.
|
|
33
|
+
|
|
34
|
+
## Natural Language Functional Description
|
|
35
|
+
|
|
36
|
+
### Compaction Trigger
|
|
37
|
+
|
|
38
|
+
Compaction is triggered when:
|
|
39
|
+
- The session message count exceeds the configured threshold (default: 50)
|
|
40
|
+
- The estimated token count of the conversation exceeds 80% of the model's context window
|
|
41
|
+
- The user explicitly requests compaction via `/compact` command
|
|
42
|
+
|
|
43
|
+
The system checks for compaction need after every agent response. When triggered, compaction runs asynchronously — the developer can continue working while compression happens in the background.
|
|
44
|
+
|
|
45
|
+
### Compaction Agent Definition
|
|
46
|
+
|
|
47
|
+
The compaction agent is a specialized internal agent:
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
{
|
|
51
|
+
"name": "Compaction Agent",
|
|
52
|
+
"mode": "subagent",
|
|
53
|
+
"hidden": true,
|
|
54
|
+
"model": {
|
|
55
|
+
"providerID": "auto",
|
|
56
|
+
"modelID": "cheapest-available"
|
|
57
|
+
},
|
|
58
|
+
"permissions": [
|
|
59
|
+
{"permission": "read", "action": "allow"},
|
|
60
|
+
{"permission": "*", "action": "deny"}
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Key properties:
|
|
66
|
+
- **Hidden**: Does not appear in agent list or Tab switcher
|
|
67
|
+
- **Read-only**: Can only read — cannot edit files, run commands, or modify state
|
|
68
|
+
- **Cheap model**: Uses the most cost-effective model available (e.g., Gemini Flash, Haiku) since summarization does not require top-tier reasoning
|
|
69
|
+
- **Subagent mode**: Only invocable internally by the system, never by the user directly
|
|
70
|
+
|
|
71
|
+
### Compaction Algorithm
|
|
72
|
+
|
|
73
|
+
**Step 1 — Segment Selection:**
|
|
74
|
+
Divide the conversation into two segments:
|
|
75
|
+
- **Compactable segment**: Messages from the start of the session (or last compaction) up to the retention boundary
|
|
76
|
+
- **Retained segment**: The most recent N messages (default: 20) that remain verbatim
|
|
77
|
+
|
|
78
|
+
**Step 2 — Information Extraction:**
|
|
79
|
+
The compaction agent analyzes the compactable segment and extracts:
|
|
80
|
+
- **File modifications**: Every file created, edited, or deleted, with a summary of changes
|
|
81
|
+
- **Key decisions**: Choices made by the developer or agent that affect the project direction
|
|
82
|
+
- **Error resolutions**: Problems encountered and how they were resolved
|
|
83
|
+
- **Current task state**: What the developer is working on and where they left off
|
|
84
|
+
- **Important code patterns**: Architectural patterns, conventions, or constraints discovered
|
|
85
|
+
- **Tool results summary**: Condensed versions of search results, build outputs, and test results
|
|
86
|
+
|
|
87
|
+
**Step 3 — Summary Generation:**
|
|
88
|
+
The compaction agent generates a structured markdown summary with sections for: File Modifications (files created/edited/deleted with change summaries), Key Decisions (choices affecting project direction), Error Resolutions (problems and fixes), Current Task State (active work and next steps), and Context Notes (project conventions and preferences).
|
|
89
|
+
|
|
90
|
+
**Step 4 — History Replacement:**
|
|
91
|
+
The compacted summary replaces the compactable segment in the session's message history. The conversation now contains:
|
|
92
|
+
1. The compaction summary (as a system message)
|
|
93
|
+
2. The retained segment (verbatim recent messages)
|
|
94
|
+
|
|
95
|
+
### Multiple Compaction Rounds
|
|
96
|
+
|
|
97
|
+
In very long sessions, compaction can occur multiple times. Each round:
|
|
98
|
+
- Takes the current summary + the next batch of compactable messages
|
|
99
|
+
- Generates an updated summary that incorporates the new information
|
|
100
|
+
- The summary grows incrementally, but much slower than the raw message history
|
|
101
|
+
|
|
102
|
+
A session with 200 messages might compact at messages 50, 100, and 150 — each time updating the summary and retaining the latest 20 messages.
|
|
103
|
+
|
|
104
|
+
### Preserved vs. Discarded Information
|
|
105
|
+
|
|
106
|
+
**Always preserved:**
|
|
107
|
+
- File paths and modification summaries (what changed, not the full diff)
|
|
108
|
+
- Decision rationale (why a particular approach was chosen)
|
|
109
|
+
- Error messages and their resolutions
|
|
110
|
+
- Current task context and next steps
|
|
111
|
+
- Project conventions discovered during the session
|
|
112
|
+
- Configuration changes made
|
|
113
|
+
|
|
114
|
+
**Always discarded:**
|
|
115
|
+
- Full file contents shown during read operations (preserved as "read file X, N lines")
|
|
116
|
+
- Raw bash command output exceeding 10 lines (preserved as "ran command X, output summary")
|
|
117
|
+
- Intermediate reasoning chains that led to dead ends
|
|
118
|
+
- Duplicate questions or re-explanations
|
|
119
|
+
- Verbose tool parameter listings
|
|
120
|
+
- The unifier's 🧠/🌸 commentary on compacted messages (only recent commentary retained)
|
|
121
|
+
|
|
122
|
+
### User Control
|
|
123
|
+
|
|
124
|
+
Users configure compaction in `mia-code.json` with: `enabled` (default: true), `messageThreshold` (default: 50), `retainCount` (default: 20), `autoCompact` (default: true). The `/compact` command triggers immediate compaction regardless of message count — useful when early conversation is no longer relevant or the session approaches context limits.
|
|
125
|
+
|
|
126
|
+
### Integration with Session Persistence
|
|
127
|
+
|
|
128
|
+
The full pre-compaction history is archived in a separate file for forensic recovery. The active session file contains only the summary + retained messages, enabling faster loading. The archive is never consulted during normal operation — it exists only for post-session review.
|
|
129
|
+
|
|
130
|
+
## Supporting Structures
|
|
131
|
+
|
|
132
|
+
- **Multi-Agent System (RISE-009)** provides the subagent architecture the compaction agent uses
|
|
133
|
+
- **Agent Model Selection (RISE-016)** enables the compaction agent to use a cost-effective model
|
|
134
|
+
- **Agent Permission Rulesets (RISE-011)** ensures the compaction agent is read-only
|
|
135
|
+
- **Structured Logging (RISE-007)** records compaction events (when, what was compacted, compression ratio)
|
|
136
|
+
- **Instance State (RISE-003)** tracks compaction state per session
|
|
137
|
+
|
|
138
|
+
## Creative Advancement Scenarios
|
|
139
|
+
|
|
140
|
+
**Scenario 1 — Marathon Refactoring Session:**
|
|
141
|
+
A developer spends 4 hours refactoring a large module — 150 messages deep. Without compaction, the agent would have lost early context about why certain design decisions were made. With compaction, the session summary carries forward: "Chose strategy pattern over switch-case for handler dispatch (message #12), extracted shared types to avoid circular imports (message #34)." At message 150, the agent still references these early decisions accurately.
|
|
142
|
+
|
|
143
|
+
**Scenario 2 — Multi-Day Session:**
|
|
144
|
+
A developer works on a feature across three days, each time resuming the same session. Compaction runs at the end of each day's work, producing a summary of that day's progress. On day 3, the session contains: Day 1 summary + Day 2 summary + today's verbatim messages. The agent has clear continuity without drowning in three days of raw history.
|
|
145
|
+
|
|
146
|
+
**Scenario 3 — Cost-Conscious Development:**
|
|
147
|
+
A developer on a pay-per-token plan enables aggressive compaction (threshold: 30, retain: 10). The compaction agent uses Gemini Flash at near-zero cost. Each compaction round reduces the active context by ~60%, significantly lowering the token cost of subsequent messages. The developer maintains session coherence while keeping costs predictable.
|
|
148
|
+
|
|
149
|
+
**Scenario 4 — Forensic Recovery:**
|
|
150
|
+
After a complex debugging session, the developer wants to review the full uncompacted history to understand how they arrived at the solution. They access the archived pre-compaction messages via `/history --full`, which loads the complete raw conversation. The archive exists for exactly this purpose — learning from the full journey, not just the destination.
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# RISE-018: Session Persistence with SQLite
|
|
2
|
+
|
|
3
|
+
> RISE Framework Specification — Borrowed from OpenCode for mia-code
|
|
4
|
+
> Document: rispecs/borrowed_from_opencode/018-session-persistence.rispec.md
|
|
5
|
+
|
|
6
|
+
## Creative Intent
|
|
7
|
+
|
|
8
|
+
mia-code replaces its fragile flat-file session storage with a proper SQLite database. Developers gain transactional integrity, concurrent access safety, and queryable session history — the foundation upon which every other session feature is built. A crash mid-write no longer corrupts the entire session store. The database becomes the single source of truth for all session, message, and part data.
|
|
9
|
+
|
|
10
|
+
## Structural Tension Analysis
|
|
11
|
+
|
|
12
|
+
**Current Reality:**
|
|
13
|
+
- Sessions are stored in `~/.mia-code-sessions.json` as a flat JSON file
|
|
14
|
+
- Each session contains only basic metadata: id, startedAt, model, projectRoot, initialized
|
|
15
|
+
- Every write rewrites the entire file — a crash during write can corrupt all sessions
|
|
16
|
+
- No concurrent access protection: two mia-code instances editing the same file race each other
|
|
17
|
+
- No query capability: finding sessions by project or date requires loading and scanning the full file
|
|
18
|
+
- Message history is not persisted — conversation context is lost between restarts
|
|
19
|
+
- No schema enforcement: any malformed JSON entry silently corrupts the store
|
|
20
|
+
|
|
21
|
+
**Desired State:**
|
|
22
|
+
- A SQLite database at `~/.mia-code/data.db` stores all session data
|
|
23
|
+
- Three normalized tables (sessions, messages, parts) with proper foreign keys
|
|
24
|
+
- Writes are transactional — partial writes never corrupt existing data
|
|
25
|
+
- Multiple mia-code instances can read/write concurrently via SQLite's WAL mode
|
|
26
|
+
- Sessions are queryable by project, date range, status, or any column
|
|
27
|
+
- Full conversation history (messages and their parts) persists across restarts
|
|
28
|
+
- Schema is enforced by the database engine, with migrations for future changes
|
|
29
|
+
|
|
30
|
+
## Desired Outcome Definition
|
|
31
|
+
|
|
32
|
+
When mia-code starts, it opens (or creates) `~/.mia-code/data.db`. All session CRUD operations go through a typed data access layer backed by SQLite. Existing `~/.mia-code-sessions.json` data is auto-migrated on first run. The JSON file is renamed to `.mia-code-sessions.json.migrated` after successful migration.
|
|
33
|
+
|
|
34
|
+
## Natural Language Functional Description
|
|
35
|
+
|
|
36
|
+
### Database Schema
|
|
37
|
+
|
|
38
|
+
The database contains three core tables:
|
|
39
|
+
|
|
40
|
+
**sessions** — one row per conversation session:
|
|
41
|
+
- `id` TEXT PRIMARY KEY — UUID v4
|
|
42
|
+
- `slug` TEXT — human-readable short identifier (e.g. "fix-auth-bug-3")
|
|
43
|
+
- `project_id` TEXT — identifier for the project (derived from directory path hash)
|
|
44
|
+
- `directory` TEXT — absolute path to the project root
|
|
45
|
+
- `parent_id` TEXT nullable — references sessions.id for forked/child sessions
|
|
46
|
+
- `title` TEXT — human-readable session title
|
|
47
|
+
- `version` TEXT — mia-code version that created the session
|
|
48
|
+
- `created_at` INTEGER — Unix timestamp in milliseconds
|
|
49
|
+
- `updated_at` INTEGER — Unix timestamp, updated on every mutation
|
|
50
|
+
- `archived_at` INTEGER nullable — set when session is archived, null when active
|
|
51
|
+
|
|
52
|
+
**messages** — one row per conversation turn:
|
|
53
|
+
- `id` TEXT PRIMARY KEY — UUID v4
|
|
54
|
+
- `session_id` TEXT FOREIGN KEY references sessions.id
|
|
55
|
+
- `role` TEXT — "user", "assistant", or "system"
|
|
56
|
+
- `metadata` JSON — model name, token counts, cost, timing, etc.
|
|
57
|
+
- `created_at` INTEGER — Unix timestamp in milliseconds
|
|
58
|
+
|
|
59
|
+
**parts** — one row per content unit within a message:
|
|
60
|
+
- `id` TEXT PRIMARY KEY — UUID v4
|
|
61
|
+
- `message_id` TEXT FOREIGN KEY references messages.id
|
|
62
|
+
- `type` TEXT — one of: text, tool_call, tool_result, error, image, file
|
|
63
|
+
- `content` JSON — type-specific payload (see RISE-026)
|
|
64
|
+
- `index` INTEGER — ordering within the parent message
|
|
65
|
+
- `created_at` INTEGER — Unix timestamp in milliseconds
|
|
66
|
+
|
|
67
|
+
### Data Access Layer
|
|
68
|
+
|
|
69
|
+
A `SessionDB` class wraps all database operations:
|
|
70
|
+
|
|
71
|
+
- `open()` — opens the database, runs migrations, enables WAL mode
|
|
72
|
+
- `createSession(opts)` — inserts a session row, returns typed Session object
|
|
73
|
+
- `getSession(id)` — retrieves session with metadata
|
|
74
|
+
- `listSessions(filter?)` — queries sessions with optional project/date/status filters
|
|
75
|
+
- `updateSession(id, patch)` — partial update with automatic `updated_at`
|
|
76
|
+
- `archiveSession(id)` — sets `archived_at` timestamp
|
|
77
|
+
- `addMessage(sessionId, message)` — inserts message and its parts in a transaction
|
|
78
|
+
- `getMessages(sessionId, opts?)` — retrieves messages with parts, supports pagination
|
|
79
|
+
- `deleteSession(id)` — hard delete with cascading part/message removal
|
|
80
|
+
|
|
81
|
+
### Migration System
|
|
82
|
+
|
|
83
|
+
On first open, the database runs a migration check:
|
|
84
|
+
1. Read `user_version` pragma from SQLite
|
|
85
|
+
2. If version < current, apply sequential migration scripts
|
|
86
|
+
3. Migration 0→1: create sessions, messages, parts tables with indices
|
|
87
|
+
4. Future migrations increment the version number
|
|
88
|
+
|
|
89
|
+
### JSON Migration Path
|
|
90
|
+
|
|
91
|
+
When `~/.mia-code-sessions.json` exists and the database is empty:
|
|
92
|
+
1. Read all sessions from JSON
|
|
93
|
+
2. Insert each as a session row (mapping startedAt→created_at, projectRoot→directory)
|
|
94
|
+
3. Verify row count matches
|
|
95
|
+
4. Rename JSON file to `.mia-code-sessions.json.migrated`
|
|
96
|
+
5. Log migration summary to structured log
|
|
97
|
+
|
|
98
|
+
### Performance Indices
|
|
99
|
+
|
|
100
|
+
- `idx_sessions_project` on sessions(project_id)
|
|
101
|
+
- `idx_sessions_directory` on sessions(directory)
|
|
102
|
+
- `idx_sessions_created` on sessions(created_at)
|
|
103
|
+
- `idx_messages_session` on messages(session_id, created_at)
|
|
104
|
+
- `idx_parts_message` on parts(message_id, index)
|
|
105
|
+
|
|
106
|
+
## Supporting Structures
|
|
107
|
+
|
|
108
|
+
- **Instance State (RISE-003)** scopes database connections per project context
|
|
109
|
+
- **Structured Logging (RISE-007)** traces all database operations for debugging
|
|
110
|
+
- **Zod Schema Validation (RISE-005)** validates data before insertion
|
|
111
|
+
- **Named Error System (RISE-006)** provides typed errors for database failures (MigrationError, CorruptionError, ConcurrencyError)
|
|
112
|
+
|
|
113
|
+
## Creative Advancement Scenarios
|
|
114
|
+
|
|
115
|
+
**Scenario 1 — Seamless Migration:**
|
|
116
|
+
A developer upgrades mia-code. On first launch, the migration detects 47 sessions in the JSON file. All 47 are imported into SQLite in under a second. The JSON file is renamed. The developer notices nothing except a log line: "Migrated 47 sessions from JSON to SQLite."
|
|
117
|
+
|
|
118
|
+
**Scenario 2 — Concurrent Access:**
|
|
119
|
+
Two terminal tabs run mia-code in the same project. Both create sessions and add messages simultaneously. SQLite's WAL mode handles concurrent writes without corruption. Neither instance blocks the other.
|
|
120
|
+
|
|
121
|
+
**Scenario 3 — Query Power:**
|
|
122
|
+
A developer runs `/sessions --project myapp --since 2025-01-01`. The query hits the `idx_sessions_project` and `idx_sessions_created` indices, returning 12 sessions in milliseconds without loading the entire dataset.
|
|
123
|
+
|
|
124
|
+
**Scenario 4 — Crash Recovery:**
|
|
125
|
+
The process is killed mid-message-write. On restart, the database is intact — the incomplete transaction was rolled back by SQLite. No data corruption, no manual repair needed.
|