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,181 @@
|
|
|
1
|
+
# RISE-063: Keybinding System
|
|
2
|
+
|
|
3
|
+
> RISE Framework Specification — Borrowed from OpenCode for mia-code
|
|
4
|
+
> Document: rispecs/borrowed_from_opencode/063-keybinding-system.rispec.md
|
|
5
|
+
|
|
6
|
+
## Creative Intent
|
|
7
|
+
|
|
8
|
+
mia-code provides a keyboard-driven interface where every action is reachable through a shortcut, and every shortcut is configurable. Developers who live in the terminal expect vim-like efficiency — the keybinding system delivers this by mapping physical keys to semantic actions, supporting context-aware bindings that change meaning based on what's focused, and allowing full customization without sacrificing discoverable defaults.
|
|
9
|
+
|
|
10
|
+
## Structural Tension Analysis
|
|
11
|
+
|
|
12
|
+
**Current Reality:**
|
|
13
|
+
- mia-code uses hardcoded key handling: Enter submits, Ctrl+C exits, Ctrl+J adds a newline
|
|
14
|
+
- There is no abstraction between physical key input and the action it triggers
|
|
15
|
+
- Users cannot remap keys — the bindings are embedded in the readline and input handling code
|
|
16
|
+
- No context awareness: the same keys do the same thing regardless of whether the user is typing, scrolling, or navigating sessions
|
|
17
|
+
- There is no way to discover available keyboard shortcuts from within the application
|
|
18
|
+
- Terminal key conflicts (Ctrl+S for flow control, Ctrl+Z for suspend) are not handled or warned about
|
|
19
|
+
|
|
20
|
+
**Desired State:**
|
|
21
|
+
- A keybinding registry maps key combinations to named actions
|
|
22
|
+
- Default bindings cover all TUI interactions with ergonomic choices
|
|
23
|
+
- Users customize bindings via config: `{"keybindings": {"session_navigator": "ctrl+s"}}`
|
|
24
|
+
- Bindings are context-aware: different actions fire depending on focus context (input, scrollback, navigator)
|
|
25
|
+
- Conflict detection warns when a user binding conflicts with terminal defaults
|
|
26
|
+
- `/keys` command displays all active bindings grouped by context
|
|
27
|
+
|
|
28
|
+
## Desired Outcome Definition
|
|
29
|
+
|
|
30
|
+
The TUI processes all keyboard input through a keybinding registry. Each key combination maps to a named action in a specific context. Default bindings are ergonomic and discoverable. Users can remap any binding through config. Conflicts are detected and reported.
|
|
31
|
+
|
|
32
|
+
## Natural Language Functional Description
|
|
33
|
+
|
|
34
|
+
### Keybinding Registry
|
|
35
|
+
|
|
36
|
+
The keybinding system maintains a registry of bindings:
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
interface Keybinding {
|
|
40
|
+
key: string; // e.g., "ctrl+s", "escape", "f1"
|
|
41
|
+
action: string; // e.g., "session_navigator", "cancel", "help"
|
|
42
|
+
context: string; // e.g., "input", "scrollback", "navigator", "global"
|
|
43
|
+
description: string; // human-readable description
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Each binding is unique within its context. The same key can map to different actions in different contexts.
|
|
48
|
+
|
|
49
|
+
### Default Bindings
|
|
50
|
+
|
|
51
|
+
**Global Context** (active everywhere):
|
|
52
|
+
| Key | Action | Description |
|
|
53
|
+
|-----|--------|-------------|
|
|
54
|
+
| Ctrl+C | `cancel_or_exit` | Cancel current operation or exit if idle |
|
|
55
|
+
| Ctrl+L | `clear_screen` | Clear the terminal and re-render |
|
|
56
|
+
| Ctrl+S | `session_navigator` | Open session navigator overlay |
|
|
57
|
+
| F1 / ? | `help` | Show keybinding help overlay |
|
|
58
|
+
|
|
59
|
+
**Input Context** (when input area has focus):
|
|
60
|
+
| Key | Action | Description |
|
|
61
|
+
|-----|--------|-------------|
|
|
62
|
+
| Enter | `submit` | Submit the current input |
|
|
63
|
+
| Ctrl+J | `newline` | Insert a newline in the input |
|
|
64
|
+
| Up | `history_prev` | Previous input from history |
|
|
65
|
+
| Down | `history_next` | Next input from history |
|
|
66
|
+
| Tab | `switch_mode` | Toggle between plan/build mode |
|
|
67
|
+
| Ctrl+U | `clear_input` | Clear the input area |
|
|
68
|
+
| Escape | `cancel_input` | Cancel current input / close overlay |
|
|
69
|
+
| Ctrl+Up | `focus_scrollback` | Switch focus to message pane |
|
|
70
|
+
|
|
71
|
+
**Scrollback Context** (when message pane has focus):
|
|
72
|
+
| Key | Action | Description |
|
|
73
|
+
|-----|--------|-------------|
|
|
74
|
+
| Up / k | `scroll_up` | Scroll up one line |
|
|
75
|
+
| Down / j | `scroll_down` | Scroll down one line |
|
|
76
|
+
| Page Up | `page_up` | Scroll up one page |
|
|
77
|
+
| Page Down | `page_down` | Scroll down one page |
|
|
78
|
+
| Home / g | `scroll_top` | Scroll to top of history |
|
|
79
|
+
| End / G | `scroll_bottom` | Scroll to bottom (latest) |
|
|
80
|
+
| Escape | `focus_input` | Return focus to input area |
|
|
81
|
+
| / | `search` | Search within message history |
|
|
82
|
+
|
|
83
|
+
**Navigator Context** (when session navigator is open):
|
|
84
|
+
| Key | Action | Description |
|
|
85
|
+
|-----|--------|-------------|
|
|
86
|
+
| Up / Down | `navigate` | Move selection cursor |
|
|
87
|
+
| Enter | `select_session` | Switch to selected session |
|
|
88
|
+
| Ctrl+N | `new_session` | Create new session |
|
|
89
|
+
| Ctrl+D | `archive_session` | Archive selected session |
|
|
90
|
+
| Escape | `close_navigator` | Close navigator |
|
|
91
|
+
| Any letter | `filter` | Filter sessions by typing |
|
|
92
|
+
|
|
93
|
+
### Key Format
|
|
94
|
+
|
|
95
|
+
Keys are specified as strings with modifiers:
|
|
96
|
+
- Modifiers: `ctrl+`, `alt+`, `shift+`, `meta+`
|
|
97
|
+
- Special keys: `enter`, `escape`, `tab`, `space`, `backspace`, `delete`
|
|
98
|
+
- Arrow keys: `up`, `down`, `left`, `right`
|
|
99
|
+
- Function keys: `f1` through `f12`
|
|
100
|
+
- Regular keys: `a` through `z`, `0` through `9`
|
|
101
|
+
- Combinations: `ctrl+shift+s`, `alt+enter`
|
|
102
|
+
|
|
103
|
+
### Configuration
|
|
104
|
+
|
|
105
|
+
Users customize bindings in their config file:
|
|
106
|
+
|
|
107
|
+
```jsonc
|
|
108
|
+
{
|
|
109
|
+
"keybindings": {
|
|
110
|
+
// Override default bindings by action name
|
|
111
|
+
"session_navigator": "ctrl+p", // global
|
|
112
|
+
"switch_mode": "ctrl+tab", // input context
|
|
113
|
+
"new_session": "ctrl+n", // navigator context
|
|
114
|
+
|
|
115
|
+
// Context-specific overrides
|
|
116
|
+
"scrollback.scroll_up": "ctrl+k",
|
|
117
|
+
"scrollback.scroll_down": "ctrl+j"
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Conflict Detection
|
|
123
|
+
|
|
124
|
+
When loading keybindings from config:
|
|
125
|
+
1. Check for conflicts within the same context (two actions bound to the same key)
|
|
126
|
+
2. Check for conflicts with known terminal defaults (Ctrl+S = XOFF, Ctrl+Z = SIGTSTP)
|
|
127
|
+
3. On conflict: emit a warning in the status bar with the specific conflict details
|
|
128
|
+
4. Terminal flow control (Ctrl+S/Ctrl+Q) is disabled by default when mia-code starts (`stty -ixon`)
|
|
129
|
+
|
|
130
|
+
### Key Discovery
|
|
131
|
+
|
|
132
|
+
The `/keys` command displays all active bindings:
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
Global:
|
|
136
|
+
Ctrl+C Cancel / Exit
|
|
137
|
+
Ctrl+L Clear screen
|
|
138
|
+
Ctrl+S Session navigator
|
|
139
|
+
F1 Help
|
|
140
|
+
|
|
141
|
+
Input:
|
|
142
|
+
Enter Submit input
|
|
143
|
+
Ctrl+J New line
|
|
144
|
+
Tab Switch mode (plan/build)
|
|
145
|
+
...
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
The help overlay (F1 or ?) shows the same information in a styled overlay within the TUI.
|
|
149
|
+
|
|
150
|
+
### Context Resolution
|
|
151
|
+
|
|
152
|
+
When a key is pressed, the system resolves the action:
|
|
153
|
+
1. Check the current focus context (input, scrollback, navigator)
|
|
154
|
+
2. If a binding exists in that context, execute it
|
|
155
|
+
3. If not, check the global context
|
|
156
|
+
4. If no binding matches, pass the key through as raw input (for text entry in input context)
|
|
157
|
+
|
|
158
|
+
### First-Run Help
|
|
159
|
+
|
|
160
|
+
On the first launch of mia-code (detected by absence of config file), a brief keybinding hint is displayed at the bottom of the screen: "Press F1 or ? for keyboard shortcuts". This hint disappears after the first input or after 10 seconds.
|
|
161
|
+
|
|
162
|
+
## Supporting Structures
|
|
163
|
+
|
|
164
|
+
- **Rich TUI (RISE-058)** provides the focus management system that determines active context
|
|
165
|
+
- **Session Navigation (RISE-061)** defines the navigator context bindings
|
|
166
|
+
- **Multi-Level Config (RISE-064)** loads keybinding customizations from the appropriate config level
|
|
167
|
+
- **JSONC Config (RISE-065)** allows commenting out keybinding overrides for experimentation
|
|
168
|
+
|
|
169
|
+
## Creative Advancement Scenarios
|
|
170
|
+
|
|
171
|
+
**Scenario 1 — Vim-Muscle-Memory Developer:**
|
|
172
|
+
A developer accustomed to vim remaps scrollback navigation to use h/j/k/l and remaps session navigator to Ctrl+P (like fuzzy-finder). Their config: `{"keybindings": {"session_navigator": "ctrl+p", "scrollback.scroll_up": "k", "scrollback.scroll_down": "j"}}`. The TUI immediately feels like home.
|
|
173
|
+
|
|
174
|
+
**Scenario 2 — Discovering Available Actions:**
|
|
175
|
+
A new user presses F1 and sees all available shortcuts grouped by context. They learn that Tab switches modes and Ctrl+S opens sessions. They close the help overlay and try each shortcut, building familiarity organically.
|
|
176
|
+
|
|
177
|
+
**Scenario 3 — Resolving a Conflict:**
|
|
178
|
+
A developer binds `ctrl+s` to "submit" in their config. On startup, mia-code warns: "Keybinding conflict: ctrl+s is already bound to session_navigator in global context." The developer either remaps one of them or accepts the override (context-specific binding wins over global).
|
|
179
|
+
|
|
180
|
+
**Scenario 4 — Terminal Compatibility:**
|
|
181
|
+
A developer SSHs into a server where Ctrl+S triggers XOFF flow control. mia-code detects this and disables XOFF at startup. If it cannot disable it (no tty control), it warns the user and suggests an alternative binding for the session navigator.
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# RISE-064: Multi-Level Configuration
|
|
2
|
+
|
|
3
|
+
> RISE Framework Specification — Borrowed from OpenCode for mia-code
|
|
4
|
+
> Document: rispecs/borrowed_from_opencode/064-multi-level-config.rispec.md
|
|
5
|
+
|
|
6
|
+
## Creative Intent
|
|
7
|
+
|
|
8
|
+
mia-code resolves configuration from multiple sources with a clear, predictable precedence hierarchy. A developer's global preferences serve as defaults, project-specific overrides tailor behavior to each codebase, environment variables inject secrets without touching config files, and CLI flags provide instant one-off adjustments. Every configuration value has a traceable origin — the developer always knows not just what the value is, but where it came from and why it won.
|
|
9
|
+
|
|
10
|
+
## Structural Tension Analysis
|
|
11
|
+
|
|
12
|
+
**Current Reality:**
|
|
13
|
+
- mia-code reads configuration from a single flat file: `~/.mia-code.json`
|
|
14
|
+
- There is no concept of project-level configuration — all projects share the same settings
|
|
15
|
+
- Environment variables for API keys work but are not formally integrated into the config system
|
|
16
|
+
- CLI flags exist for some options but there is no defined relationship between flags and config file values
|
|
17
|
+
- When a config value doesn't work as expected, there is no way to trace which source provided it
|
|
18
|
+
- Arrays (like plugin lists) and objects (like provider configs) have no defined merge behavior across sources
|
|
19
|
+
|
|
20
|
+
**Desired State:**
|
|
21
|
+
- Configuration loads from six levels with explicit precedence: defaults → global → env vars → project → CLI flags → inline
|
|
22
|
+
- Each level can override settings from lower levels using defined merge rules
|
|
23
|
+
- Objects deep-merge (project config adds to global), scalars replace, arrays concatenate
|
|
24
|
+
- `/config` command shows the resolved configuration with source annotations for each value
|
|
25
|
+
- Config loading errors warn but don't crash — the system continues with values from other levels
|
|
26
|
+
- First-run generates a commented config file template explaining available options
|
|
27
|
+
|
|
28
|
+
## Desired Outcome Definition
|
|
29
|
+
|
|
30
|
+
mia-code loads configuration by merging six levels in order. The resolved configuration is a deep merge where each level overrides values from below. The `/config` command shows every resolved value with its source (which level it came from). Invalid or missing config at any level is handled gracefully.
|
|
31
|
+
|
|
32
|
+
## Natural Language Functional Description
|
|
33
|
+
|
|
34
|
+
### Configuration Levels (Lowest to Highest Priority)
|
|
35
|
+
|
|
36
|
+
1. **Built-in Defaults** — Hardcoded in the application source. Every config key has a default value. These are the baseline that make mia-code work out of the box with no config file at all.
|
|
37
|
+
|
|
38
|
+
2. **Global Config** — File at `~/.config/mia-code/config.json` (XDG standard) or `~/.mia-code.json` (legacy). Contains user-wide preferences: default models, API keys, theme preferences, keybindings.
|
|
39
|
+
|
|
40
|
+
3. **Environment Variables** — Variables prefixed with `MIA_CODE_` map to config paths. Example: `MIA_CODE_MODEL=gemini-2.5-pro` sets the `model` config key. Nested paths use double underscores: `MIA_CODE_PROVIDER__ANTHROPIC__API_KEY` maps to `provider.anthropic.apiKey`.
|
|
41
|
+
|
|
42
|
+
4. **Project Config** — File at `./mia-code.json` or `./.mia-code/config.json` in the project root. Contains project-specific overrides: preferred model for this codebase, custom agents, project-specific permissions.
|
|
43
|
+
|
|
44
|
+
5. **CLI Flags** — Command-line arguments: `--model`, `--engine`, `--verbose`, etc. These override any file-based config for the current invocation.
|
|
45
|
+
|
|
46
|
+
6. **Inline Config** — The `MIA_CODE_CONFIG_CONTENT` environment variable contains a JSON string that is parsed as a complete config object. Useful for CI/CD environments where file creation is inconvenient.
|
|
47
|
+
|
|
48
|
+
### Merge Rules
|
|
49
|
+
|
|
50
|
+
When combining config from multiple levels:
|
|
51
|
+
|
|
52
|
+
**Objects merge recursively:**
|
|
53
|
+
```
|
|
54
|
+
Global: {"provider": {"openai": {"apiKey": "sk-1"}}}
|
|
55
|
+
Project: {"provider": {"anthropic": {"apiKey": "sk-2"}}}
|
|
56
|
+
Result: {"provider": {"openai": {"apiKey": "sk-1"}, "anthropic": {"apiKey": "sk-2"}}}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Scalars replace (last wins):**
|
|
60
|
+
```
|
|
61
|
+
Global: {"model": "gemini-2.5-pro"}
|
|
62
|
+
Project: {"model": "claude-sonnet-4"}
|
|
63
|
+
Result: {"model": "claude-sonnet-4"}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**Arrays concatenate:**
|
|
67
|
+
```
|
|
68
|
+
Global: {"plugins": ["plugin-a"]}
|
|
69
|
+
Project: {"plugins": ["plugin-b"]}
|
|
70
|
+
Result: {"plugins": ["plugin-a", "plugin-b"]}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Special: null removes:**
|
|
74
|
+
```
|
|
75
|
+
Global: {"provider": {"openai": {"apiKey": "sk-1"}, "anthropic": {"apiKey": "sk-2"}}}
|
|
76
|
+
Project: {"provider": {"openai": null}}
|
|
77
|
+
Result: {"provider": {"anthropic": {"apiKey": "sk-2"}}}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**Special: empty array replaces:**
|
|
81
|
+
```
|
|
82
|
+
Global: {"plugins": ["plugin-a", "plugin-b"]}
|
|
83
|
+
Project: {"plugins": []}
|
|
84
|
+
Result: {"plugins": []}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Environment Variable Mapping
|
|
88
|
+
|
|
89
|
+
Environment variables follow a systematic mapping:
|
|
90
|
+
- `MIA_CODE_<KEY>` maps to the top-level `<key>` (lowercased)
|
|
91
|
+
- `MIA_CODE_<A>__<B>` maps to nested path `<a>.<b>`
|
|
92
|
+
- `MIA_CODE_<A>__<B>__<C>` maps to `<a>.<b>.<c>`
|
|
93
|
+
- Values are parsed as JSON if they look like JSON; otherwise treated as strings
|
|
94
|
+
- Boolean strings: `"true"`, `"false"`, `"1"`, `"0"` are converted to booleans
|
|
95
|
+
- Numeric strings are converted to numbers
|
|
96
|
+
|
|
97
|
+
### Config File Discovery
|
|
98
|
+
|
|
99
|
+
Project config is found by walking up from the current working directory:
|
|
100
|
+
1. Check `./mia-code.json`
|
|
101
|
+
2. Check `./.mia-code/config.json`
|
|
102
|
+
3. If neither found, move to parent directory and repeat
|
|
103
|
+
4. Stop at filesystem root or git repository root
|
|
104
|
+
5. If no project config found, this level contributes nothing
|
|
105
|
+
|
|
106
|
+
### Config Resolution Display
|
|
107
|
+
|
|
108
|
+
The `/config` command shows the merged result with source annotations:
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
model: claude-sonnet-4 [project: ./mia-code.json]
|
|
112
|
+
engine: gemini [global: ~/.config/mia-code/config.json]
|
|
113
|
+
verbose: true [cli: --verbose]
|
|
114
|
+
provider.anthropic.apiKey: sk-** [env: MIA_CODE_PROVIDER__ANTHROPIC__API_KEY]
|
|
115
|
+
theme: dark [default]
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Each value shows which level provided it. Secrets are masked in display.
|
|
119
|
+
|
|
120
|
+
### Error Handling
|
|
121
|
+
|
|
122
|
+
- **Missing config file**: silently skip that level (this is normal)
|
|
123
|
+
- **Invalid JSON**: warn with file path and parse error, skip that level
|
|
124
|
+
- **Unknown config keys**: warn but include them (forward compatibility)
|
|
125
|
+
- **Type mismatch** (e.g., string where object expected): warn, use the higher-precedence value as-is
|
|
126
|
+
|
|
127
|
+
### First-Run Config Generation
|
|
128
|
+
|
|
129
|
+
On first run (no global config file exists):
|
|
130
|
+
1. Create `~/.config/mia-code/config.json` with a commented template
|
|
131
|
+
2. Template includes all available config keys with descriptions (using JSONC comments)
|
|
132
|
+
3. All values in the template are commented out (the defaults apply)
|
|
133
|
+
4. User is informed: "Created config file at ~/.config/mia-code/config.json"
|
|
134
|
+
|
|
135
|
+
## Supporting Structures
|
|
136
|
+
|
|
137
|
+
- **JSONC Config (RISE-065)** enables comments in config files for documentation
|
|
138
|
+
- **Config Environment Variables (RISE-066)** handles `${VAR}` substitution within config values
|
|
139
|
+
- **Config Deep Merging (RISE-067)** implements the recursive merge logic described here
|
|
140
|
+
- **Managed Config Directory (RISE-070)** adds an even-higher-precedence enterprise level
|
|
141
|
+
- **Remote Org Config (RISE-068)** adds an organizational defaults level
|
|
142
|
+
|
|
143
|
+
## Creative Advancement Scenarios
|
|
144
|
+
|
|
145
|
+
**Scenario 1 — Personal Defaults with Project Override:**
|
|
146
|
+
A developer's global config sets `model: gemini-2.5-pro` (their preferred default). For a client project that requires Claude, they add `{"model": "claude-sonnet-4"}` to `./mia-code.json`. In that project, Claude is used. In all other projects, Gemini is used. No flags needed.
|
|
147
|
+
|
|
148
|
+
**Scenario 2 — CI/CD with Inline Config:**
|
|
149
|
+
A CI pipeline sets `MIA_CODE_CONFIG_CONTENT='{"model":"claude-haiku-4","permissions":{"bash":"allow"}}'`. No config file is needed on the CI runner. The inline config overrides everything except CLI flags.
|
|
150
|
+
|
|
151
|
+
**Scenario 3 — Debugging Config Issues:**
|
|
152
|
+
A developer's agent is using an unexpected model. They run `/config` and see: `model: gpt-4 [env: MIA_CODE_MODEL]`. They realize they set `MIA_CODE_MODEL` in their shell profile weeks ago. The source annotation makes the fix obvious: unset the environment variable.
|
|
153
|
+
|
|
154
|
+
**Scenario 4 — Team Project Setup:**
|
|
155
|
+
A team commits `./mia-code.json` to their repo with project-specific settings: preferred model, custom agents, permission rulesets. Every team member gets these defaults automatically. Individual developers override specific values in their global config or via CLI flags.
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# RISE-065: JSONC Configuration
|
|
2
|
+
|
|
3
|
+
> RISE Framework Specification — Borrowed from OpenCode for mia-code
|
|
4
|
+
> Document: rispecs/borrowed_from_opencode/065-jsonc-config.rispec.md
|
|
5
|
+
|
|
6
|
+
## Creative Intent
|
|
7
|
+
|
|
8
|
+
mia-code configuration files speak a developer-friendly dialect of JSON that allows comments, trailing commas, and inline documentation. Configuration is not just a data format — it is a conversation between the tool and the developer. Comments explain why a setting exists, not just what it is. Developers can comment out experimental settings, leave notes for their future selves, and maintain readable config files that serve as living documentation.
|
|
9
|
+
|
|
10
|
+
## Structural Tension Analysis
|
|
11
|
+
|
|
12
|
+
**Current Reality:**
|
|
13
|
+
- mia-code config files (`~/.mia-code.json`) are strict JSON — no comments allowed
|
|
14
|
+
- Developers cannot annotate their configuration choices with reasoning or context
|
|
15
|
+
- Commenting out a setting to temporarily disable it is impossible without removing the line
|
|
16
|
+
- Config file templates and examples must omit explanatory comments
|
|
17
|
+
- Developers who want to document their config resort to separate README files or external notes
|
|
18
|
+
- JSON parse errors for trailing commas are a common friction point
|
|
19
|
+
|
|
20
|
+
**Desired State:**
|
|
21
|
+
- Config files support JSONC (JSON with Comments): `//` line comments, `/* */` block comments, trailing commas
|
|
22
|
+
- Both `.json` and `.jsonc` extensions are recognized as config files
|
|
23
|
+
- Generated config templates include comments explaining each available option
|
|
24
|
+
- Config editing commands preserve existing comments when updating values
|
|
25
|
+
- Parse errors for JSONC files report line and column numbers with surrounding context
|
|
26
|
+
|
|
27
|
+
## Desired Outcome Definition
|
|
28
|
+
|
|
29
|
+
All mia-code config files are parsed as JSONC. Developers can freely use line comments, block comments, and trailing commas. The config template generated on first run is richly commented. Programmatic config edits preserve existing comments.
|
|
30
|
+
|
|
31
|
+
## Natural Language Functional Description
|
|
32
|
+
|
|
33
|
+
### JSONC Syntax Support
|
|
34
|
+
|
|
35
|
+
The following syntax extensions beyond standard JSON are supported:
|
|
36
|
+
|
|
37
|
+
**Line comments** — `//` causes everything after it on the same line to be ignored:
|
|
38
|
+
```jsonc
|
|
39
|
+
{
|
|
40
|
+
"model": "gemini-2.5-pro", // Primary model for agent interactions
|
|
41
|
+
"engine": "gemini" // Agent engine: gemini, claude, or openai
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**Block comments** — `/* ... */` can span multiple lines:
|
|
46
|
+
```jsonc
|
|
47
|
+
{
|
|
48
|
+
/* Provider configuration
|
|
49
|
+
Add API keys for each provider you want to use.
|
|
50
|
+
At least one provider must be configured. */
|
|
51
|
+
"provider": {
|
|
52
|
+
"anthropic": {
|
|
53
|
+
"apiKey": "${ANTHROPIC_API_KEY}"
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Trailing commas** — a comma after the last element in an object or array is allowed:
|
|
60
|
+
```jsonc
|
|
61
|
+
{
|
|
62
|
+
"plugins": [
|
|
63
|
+
"plugin-a",
|
|
64
|
+
"plugin-b", // trailing comma OK
|
|
65
|
+
],
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### File Extension Support
|
|
70
|
+
|
|
71
|
+
mia-code recognizes both extensions:
|
|
72
|
+
- `.json` files are parsed as JSONC (backward compatible — valid JSON is valid JSONC)
|
|
73
|
+
- `.jsonc` files are parsed as JSONC
|
|
74
|
+
- The config file can be named either `config.json` or `config.jsonc`
|
|
75
|
+
- When both exist in the same directory, `.jsonc` takes precedence
|
|
76
|
+
|
|
77
|
+
### Parser
|
|
78
|
+
|
|
79
|
+
The JSONC parser strips comments and trailing commas before parsing the underlying JSON structure. Implementation options:
|
|
80
|
+
- Use `jsonc-parser` npm package (Microsoft's parser, used in VS Code)
|
|
81
|
+
- Use a custom strip-and-parse approach (regex strip comments, then JSON.parse)
|
|
82
|
+
- The parser preserves source positions for error reporting
|
|
83
|
+
|
|
84
|
+
### Config Template
|
|
85
|
+
|
|
86
|
+
On first run, mia-code generates a commented config template:
|
|
87
|
+
|
|
88
|
+
```jsonc
|
|
89
|
+
{
|
|
90
|
+
// mia-code Configuration
|
|
91
|
+
// Documentation: https://github.com/mia-code/docs/config
|
|
92
|
+
|
|
93
|
+
// Agent engine: "gemini", "claude", or "openai"
|
|
94
|
+
// "engine": "gemini",
|
|
95
|
+
|
|
96
|
+
// Default model for agent interactions
|
|
97
|
+
// "model": "gemini-2.5-pro",
|
|
98
|
+
|
|
99
|
+
// Provider API keys (use environment variables for security)
|
|
100
|
+
// "provider": {
|
|
101
|
+
// "anthropic": { "apiKey": "${ANTHROPIC_API_KEY}" },
|
|
102
|
+
// "openai": { "apiKey": "${OPENAI_API_KEY}" },
|
|
103
|
+
// "google": { "apiKey": "${GOOGLE_API_KEY}" }
|
|
104
|
+
// },
|
|
105
|
+
|
|
106
|
+
// Theme: "dark", "light", or custom object
|
|
107
|
+
// "theme": "dark",
|
|
108
|
+
|
|
109
|
+
// Keyboard shortcut overrides
|
|
110
|
+
// "keybindings": {},
|
|
111
|
+
|
|
112
|
+
// Permission rulesets
|
|
113
|
+
// "permissions": {}
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
All settings are commented out (using `//`) so defaults apply. The developer uncomments only what they want to change.
|
|
118
|
+
|
|
119
|
+
### Comment Preservation
|
|
120
|
+
|
|
121
|
+
When mia-code programmatically updates a config file (e.g., adding a permanent permission rule via "always allow"):
|
|
122
|
+
1. The original file content is parsed while tracking comment positions
|
|
123
|
+
2. The modification is applied to the parsed data structure
|
|
124
|
+
3. The file is re-serialized with original comments preserved in their positions
|
|
125
|
+
4. New values added by mia-code include a generated comment noting the source
|
|
126
|
+
|
|
127
|
+
Example after allowing `git status`:
|
|
128
|
+
```jsonc
|
|
129
|
+
{
|
|
130
|
+
"engine": "gemini", // My preferred engine
|
|
131
|
+
"permissions": {
|
|
132
|
+
"bash": {
|
|
133
|
+
"allow": [
|
|
134
|
+
"git *" // Added by mia-code permission prompt (2025-01-15)
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Error Reporting
|
|
142
|
+
|
|
143
|
+
JSONC parse errors include context:
|
|
144
|
+
|
|
145
|
+
```
|
|
146
|
+
Config error in ~/.config/mia-code/config.json:
|
|
147
|
+
Line 12, Column 5: Unexpected token '}'
|
|
148
|
+
|
|
149
|
+
10 | "provider": {
|
|
150
|
+
11 | "anthropic": { "apiKey": "sk-123" }
|
|
151
|
+
12 | }}
|
|
152
|
+
| ^ unexpected token
|
|
153
|
+
|
|
154
|
+
Tip: Check for mismatched braces or missing commas.
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Errors include:
|
|
158
|
+
- File path
|
|
159
|
+
- Line and column number
|
|
160
|
+
- 3 lines of context around the error
|
|
161
|
+
- A pointer to the exact character
|
|
162
|
+
- A hint about common causes
|
|
163
|
+
|
|
164
|
+
### Validation
|
|
165
|
+
|
|
166
|
+
After parsing, the config is validated against a schema:
|
|
167
|
+
- Unknown keys generate warnings (not errors) for forward compatibility
|
|
168
|
+
- Type mismatches (string where number expected) generate errors with the expected type
|
|
169
|
+
- Required keys (none currently — all have defaults) generate errors if missing
|
|
170
|
+
|
|
171
|
+
## Supporting Structures
|
|
172
|
+
|
|
173
|
+
- **Multi-Level Config (RISE-064)** loads config files that are parsed as JSONC
|
|
174
|
+
- **Config Environment Variables (RISE-066)** applies `${VAR}` substitution after JSONC parsing
|
|
175
|
+
- **Config Deep Merging (RISE-067)** merges the parsed config objects from multiple levels
|
|
176
|
+
- **Managed Config Directory (RISE-070)** uses the same JSONC format for enterprise config
|
|
177
|
+
|
|
178
|
+
## Creative Advancement Scenarios
|
|
179
|
+
|
|
180
|
+
**Scenario 1 — Annotated Personal Config:**
|
|
181
|
+
A developer maintains a richly commented config file that documents their choices: `"model": "claude-sonnet-4", // Switched from Gemini 2025-01-10 — better at TypeScript`. Months later, they remember why they made the switch without digging through changelogs.
|
|
182
|
+
|
|
183
|
+
**Scenario 2 — Experimenting with Settings:**
|
|
184
|
+
A developer wants to try a new model. They comment out their current setting and add a new one: `// "model": "gemini-2.5-pro",` followed by `"model": "claude-sonnet-4"`. If the new model doesn't work out, they reverse the comments. No git diff noise, no value loss.
|
|
185
|
+
|
|
186
|
+
**Scenario 3 — Team Config Documentation:**
|
|
187
|
+
A team commits `.mia-code/config.jsonc` to their repository. The file includes block comments at the top explaining the team's conventions: which model to use, which permissions are required, and why certain tools are restricted. New team members read the config file and understand the project's agent policy.
|
|
188
|
+
|
|
189
|
+
**Scenario 4 — Config Parse Error Recovery:**
|
|
190
|
+
A developer accidentally introduces a syntax error in their config. On startup, mia-code shows the error with line number and context. The developer fixes the typo. mia-code loads the corrected config without restarting — the error was caught early, and the developer wasn't left guessing what went wrong.
|