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,225 @@
|
|
|
1
|
+
# RISE-029: Provider Authentication
|
|
2
|
+
|
|
3
|
+
> RISE Framework Specification — Borrowed from OpenCode for mia-code
|
|
4
|
+
> Document: rispecs/borrowed_from_opencode/029-provider-authentication.rispec.md
|
|
5
|
+
|
|
6
|
+
## Creative Intent
|
|
7
|
+
|
|
8
|
+
mia-code manages authentication for every LLM provider through a flexible, secure credential system that supports API keys, OAuth browser flows, and custom enterprise auth plugins. Each provider's credentials are isolated — an expired Anthropic key doesn't prevent OpenAI from working. Developers authenticate once per provider and forget about it; tokens refresh silently, keys are resolved from environment variables or secure storage, and the `/auth` command provides a clear dashboard of what's connected and what needs attention. Authentication becomes invisible infrastructure rather than a recurring friction point.
|
|
9
|
+
|
|
10
|
+
## Structural Tension Analysis
|
|
11
|
+
|
|
12
|
+
**Current Structural Reality:**
|
|
13
|
+
- Authentication is handled implicitly by the CLI binaries (`claude`, `gemini`) through their own auth flows
|
|
14
|
+
- mia-code has no visibility into auth state — if a CLI binary's auth expires, the error surfaces as an opaque shell failure
|
|
15
|
+
- There is no centralized credential store — each CLI binary manages its own tokens independently
|
|
16
|
+
- Adding a new provider means understanding that provider's bespoke auth mechanism
|
|
17
|
+
- No support for enterprise auth patterns (Azure AD, GCP service accounts, AWS IAM roles)
|
|
18
|
+
- Environment variable references are not standardized — some providers use `ANTHROPIC_API_KEY`, others use different conventions
|
|
19
|
+
- There is no way to check auth status across all configured providers at once
|
|
20
|
+
|
|
21
|
+
**Desired State:**
|
|
22
|
+
- A unified auth system manages credentials for all providers through a common interface
|
|
23
|
+
- Three auth methods are supported: API key, OAuth browser flow, and custom auth plugins
|
|
24
|
+
- API keys support `${ENV_VAR}` substitution or direct string storage
|
|
25
|
+
- OAuth tokens are stored in a credential cache with automatic refresh
|
|
26
|
+
- Auth status is queryable via `/auth` command showing all provider states
|
|
27
|
+
- Per-provider credential isolation ensures one provider's auth failure doesn't cascade
|
|
28
|
+
- Auth plugins allow enterprise teams to inject custom auth logic (Azure AD, SAML, etc.)
|
|
29
|
+
|
|
30
|
+
## Desired Outcome Definition
|
|
31
|
+
|
|
32
|
+
A developer sets up mia-code with three providers. For Anthropic, they set `ANTHROPIC_API_KEY` in their shell environment and reference it as `${ANTHROPIC_API_KEY}` in config. For GitHub Copilot, they run `/auth copilot` which opens a browser for OAuth — the token is stored in `~/.mia-code/auth/`. For their enterprise Azure OpenAI, an auth plugin handles Azure AD token acquisition. Running `/auth` shows all three as "✓ authenticated" with token expiry times. Two weeks later, the Copilot token auto-refreshes without intervention.
|
|
33
|
+
|
|
34
|
+
## Natural Language Functional Description
|
|
35
|
+
|
|
36
|
+
### Auth Method Interface
|
|
37
|
+
|
|
38
|
+
Each auth method implements a common contract:
|
|
39
|
+
|
|
40
|
+
```typescript
|
|
41
|
+
interface AuthMethod {
|
|
42
|
+
type: "api_key" | "oauth" | "custom";
|
|
43
|
+
authenticate(provider: string): Promise<AuthCredential>;
|
|
44
|
+
refresh(credential: AuthCredential): Promise<AuthCredential>;
|
|
45
|
+
revoke(provider: string): Promise<void>;
|
|
46
|
+
status(provider: string): AuthStatus;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
interface AuthCredential {
|
|
50
|
+
providerId: string;
|
|
51
|
+
type: "api_key" | "bearer_token" | "custom";
|
|
52
|
+
value: string; // the credential value
|
|
53
|
+
expiresAt?: number; // Unix timestamp ms, undefined = never expires
|
|
54
|
+
refreshToken?: string; // for OAuth refresh flow
|
|
55
|
+
metadata?: Record<string, string>;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
interface AuthStatus {
|
|
59
|
+
providerId: string;
|
|
60
|
+
authenticated: boolean;
|
|
61
|
+
method: "api_key" | "oauth" | "custom";
|
|
62
|
+
expiresAt?: number;
|
|
63
|
+
lastUsed?: number;
|
|
64
|
+
error?: string; // reason for auth failure if any
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### API Key Authentication
|
|
69
|
+
|
|
70
|
+
The simplest and most common auth method:
|
|
71
|
+
|
|
72
|
+
**Environment variable substitution:**
|
|
73
|
+
```json
|
|
74
|
+
{
|
|
75
|
+
"provider": {
|
|
76
|
+
"anthropic": {
|
|
77
|
+
"apiKey": "${ANTHROPIC_API_KEY}"
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
At initialization, `${ANTHROPIC_API_KEY}` is resolved from `process.env.ANTHROPIC_API_KEY`. If the variable is unset, an `AuthConfigError` is emitted with the variable name and provider.
|
|
84
|
+
|
|
85
|
+
**Direct string storage:**
|
|
86
|
+
```json
|
|
87
|
+
{
|
|
88
|
+
"provider": {
|
|
89
|
+
"groq": {
|
|
90
|
+
"apiKey": "gsk_abc123..."
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Direct keys are supported but discouraged in version-controlled config. The system warns if a direct key is detected in a git-tracked `mia-code.json`.
|
|
97
|
+
|
|
98
|
+
**Key validation:** on first use, the system makes a lightweight API call (e.g. `listModels()`) to verify the key. Invalid keys surface immediately with a clear error rather than failing on the first chat request.
|
|
99
|
+
|
|
100
|
+
### OAuth Browser Flow
|
|
101
|
+
|
|
102
|
+
For providers requiring OAuth (GitHub Copilot, Google Vertex, GitLab):
|
|
103
|
+
|
|
104
|
+
1. **Initiation:** developer runs `/auth copilot` or system detects OAuth-required provider
|
|
105
|
+
2. **Authorization URL:** system generates provider-specific auth URL with required scopes
|
|
106
|
+
3. **Browser redirect:** system opens the URL in the default browser (or displays it for manual copy)
|
|
107
|
+
4. **Callback handling:** a temporary local HTTP server on `localhost:PORT` receives the OAuth callback
|
|
108
|
+
5. **Token exchange:** authorization code is exchanged for access + refresh tokens
|
|
109
|
+
6. **Storage:** tokens stored in `~/.mia-code/auth/{provider_id}.json` with restricted file permissions (0600)
|
|
110
|
+
7. **Confirmation:** system displays "✓ Authenticated with {provider}" and auth status updates
|
|
111
|
+
|
|
112
|
+
**Token refresh flow:**
|
|
113
|
+
```typescript
|
|
114
|
+
async function ensureValidToken(credential: AuthCredential): Promise<AuthCredential> {
|
|
115
|
+
if (!credential.expiresAt) return credential; // no expiry
|
|
116
|
+
const bufferMs = 5 * 60 * 1000; // refresh 5 min before expiry
|
|
117
|
+
if (Date.now() < credential.expiresAt - bufferMs) return credential;
|
|
118
|
+
// Token is expired or expiring soon — refresh
|
|
119
|
+
const refreshed = await authMethod.refresh(credential);
|
|
120
|
+
await credentialStore.save(refreshed);
|
|
121
|
+
return refreshed;
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Custom Auth Plugins
|
|
126
|
+
|
|
127
|
+
For enterprise environments with non-standard auth:
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
interface AuthPlugin {
|
|
131
|
+
name: string; // e.g. "azure-ad", "okta-saml"
|
|
132
|
+
providerId: string; // which provider this plugin handles
|
|
133
|
+
authenticate(): Promise<AuthCredential>;
|
|
134
|
+
refresh(credential: AuthCredential): Promise<AuthCredential>;
|
|
135
|
+
interceptHeaders(headers: Record<string, string>): Record<string, string>;
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Plugins can:
|
|
140
|
+
- Acquire tokens through Azure AD client credential flow
|
|
141
|
+
- Exchange SAML assertions for bearer tokens
|
|
142
|
+
- Add custom headers (e.g. `X-Organization-Id`, `X-Project-Scope`)
|
|
143
|
+
- Intercept and modify outbound request headers before they reach the provider SDK
|
|
144
|
+
|
|
145
|
+
Plugins are loaded from `~/.mia-code/auth/plugins/` or specified in config:
|
|
146
|
+
```json
|
|
147
|
+
{
|
|
148
|
+
"auth": {
|
|
149
|
+
"plugins": [
|
|
150
|
+
{ "name": "azure-ad", "providerId": "azure", "tenantId": "...", "clientId": "..." }
|
|
151
|
+
]
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Credential Store
|
|
157
|
+
|
|
158
|
+
Credentials are persisted in `~/.mia-code/auth/`:
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
~/.mia-code/auth/
|
|
162
|
+
├── anthropic.json # API key credential
|
|
163
|
+
├── copilot.json # OAuth tokens (access + refresh)
|
|
164
|
+
├── azure.json # Custom plugin credential
|
|
165
|
+
└── plugins/
|
|
166
|
+
└── azure-ad.js # Custom auth plugin
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Each credential file is JSON with restricted permissions. The store provides:
|
|
170
|
+
- `save(credential)` — write credential to disk with 0600 permissions
|
|
171
|
+
- `load(providerId)` — read credential from disk
|
|
172
|
+
- `delete(providerId)` — remove credential file
|
|
173
|
+
- `listAll()` — enumerate all stored credentials with status
|
|
174
|
+
|
|
175
|
+
### The `/auth` Command
|
|
176
|
+
|
|
177
|
+
The `/auth` command provides a dashboard of authentication status:
|
|
178
|
+
|
|
179
|
+
```
|
|
180
|
+
$ /auth
|
|
181
|
+
|
|
182
|
+
Provider Authentication Status:
|
|
183
|
+
┌────────────┬────────────┬───────────┬─────────────────┐
|
|
184
|
+
│ Provider │ Method │ Status │ Expires │
|
|
185
|
+
├────────────┼────────────┼───────────┼─────────────────┤
|
|
186
|
+
│ anthropic │ api_key │ ✓ valid │ never │
|
|
187
|
+
│ openai │ api_key │ ✓ valid │ never │
|
|
188
|
+
│ copilot │ oauth │ ✓ valid │ in 23 days │
|
|
189
|
+
│ azure │ custom │ ✓ valid │ in 55 minutes │
|
|
190
|
+
│ vertex │ oauth │ ✗ expired │ 2 days ago │
|
|
191
|
+
└────────────┴────────────┴───────────┴─────────────────┘
|
|
192
|
+
|
|
193
|
+
Run /auth <provider> to authenticate or re-authenticate.
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Security Considerations
|
|
197
|
+
|
|
198
|
+
- API keys in config support `${ENV_VAR}` to avoid committing secrets
|
|
199
|
+
- Direct API keys in git-tracked files trigger a warning
|
|
200
|
+
- OAuth tokens stored with file permissions `0600` (owner read/write only)
|
|
201
|
+
- Refresh tokens are never logged or included in error messages
|
|
202
|
+
- Credential files are excluded from session sharing (RISE-022) and export
|
|
203
|
+
- Auth failures are logged with provider ID and error type but never with credential values
|
|
204
|
+
|
|
205
|
+
## Supporting Structures
|
|
206
|
+
|
|
207
|
+
- **Multi-Provider Architecture (RISE-028)** defines the provider configs that reference auth credentials
|
|
208
|
+
- **Provider SDK Abstraction (RISE-033)** uses credentials to authenticate API requests
|
|
209
|
+
- **Named Error System (RISE-006)** provides AuthConfigError, TokenExpiredError, OAuthFlowError, PluginLoadError
|
|
210
|
+
- **Structured Logging (RISE-007)** logs auth events (authenticate, refresh, revoke) without credential values
|
|
211
|
+
- **Instance State Pattern (RISE-003)** manages auth state lifecycle within the application
|
|
212
|
+
|
|
213
|
+
## Creative Advancement Scenarios
|
|
214
|
+
|
|
215
|
+
**Scenario 1 — Zero-Friction Setup:**
|
|
216
|
+
A developer installs mia-code and sets `ANTHROPIC_API_KEY` in their `.bashrc`. They add `"apiKey": "${ANTHROPIC_API_KEY}"` to config. On first use, mia-code resolves the variable, validates the key with a quick `listModels()` call, and confirms "✓ Anthropic authenticated." The developer never thinks about auth again.
|
|
217
|
+
|
|
218
|
+
**Scenario 2 — OAuth for Copilot:**
|
|
219
|
+
A developer wants to use GitHub Copilot models. They run `/auth copilot`. A browser window opens to GitHub's OAuth page. They click "Authorize." The browser redirects to `localhost:9876` where mia-code's temporary server captures the code, exchanges it for tokens, and stores them. "✓ Authenticated with GitHub Copilot" appears in the terminal. Twenty-nine days later, the token auto-refreshes during a normal session.
|
|
220
|
+
|
|
221
|
+
**Scenario 3 — Enterprise Azure AD:**
|
|
222
|
+
A corporate team uses Azure OpenAI with Azure AD authentication. Their platform team provides an auth plugin that acquires tokens via the client credential flow. The plugin is placed in `~/.mia-code/auth/plugins/azure-ad.js`. Config references it with tenant and client IDs. Developers run `/auth azure` once, the plugin acquires a token, and subsequent requests include the Azure AD bearer token automatically. Token refresh happens transparently every hour.
|
|
223
|
+
|
|
224
|
+
**Scenario 4 — Auth Isolation:**
|
|
225
|
+
A developer's Anthropic API key expires at midnight. Their morning session starts with an `AuthConfigError` for Anthropic. But their OpenAI and Groq providers remain fully functional. They switch to OpenAI for the morning's work, update the Anthropic key at lunch, and `/auth` confirms all three providers are green again. No cascading failure, no lost work.
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# RISE-030: Model Registry
|
|
2
|
+
|
|
3
|
+
> RISE Framework Specification — Borrowed from OpenCode for mia-code
|
|
4
|
+
> Document: rispecs/borrowed_from_opencode/030-model-registry.rispec.md
|
|
5
|
+
|
|
6
|
+
## Creative Intent
|
|
7
|
+
|
|
8
|
+
mia-code maintains a centralized registry of LLM model metadata — context windows, token limits, pricing, and capabilities — powered by the models.dev API and cached locally. Instead of hardcoding model parameters or requiring developers to manually research which model supports vision or function calling, the registry provides a queryable catalog that enables intelligent defaults, cost-aware model selection, and capability-based feature gating. The developer says "I want the cheapest model that can handle images" and the registry answers. Model aliases like "fast," "smart," and "cheap" turn model selection from a research task into a single word.
|
|
9
|
+
|
|
10
|
+
## Structural Tension Analysis
|
|
11
|
+
|
|
12
|
+
**Current Structural Reality:**
|
|
13
|
+
- Model parameters (context window, max tokens) are either hardcoded or unknown
|
|
14
|
+
- There is no pricing data — developers have no visibility into per-token costs
|
|
15
|
+
- Model capabilities are implicit — the system doesn't know if a model supports vision or function calling
|
|
16
|
+
- Adding support for a new model requires code changes to register its parameters
|
|
17
|
+
- Developers must manually research model specifications when choosing between options
|
|
18
|
+
- No mechanism to suggest optimal models based on task requirements
|
|
19
|
+
- Tool availability is static regardless of whether the model can actually use the tools
|
|
20
|
+
|
|
21
|
+
**Desired State:**
|
|
22
|
+
- A comprehensive model catalog is fetched from models.dev and cached locally
|
|
23
|
+
- Each model entry includes context window, max output tokens, pricing, and capability flags
|
|
24
|
+
- The registry is queryable: "which models support vision?", "what's the cheapest streaming model?"
|
|
25
|
+
- Model aliases ("fast", "smart", "cheap") resolve to optimal models based on current registry data
|
|
26
|
+
- Unknown models are treated as custom with user-provided overrides
|
|
27
|
+
- Tool availability is gated by model capabilities — vision models get image tools, non-streaming models use polling
|
|
28
|
+
- The registry updates automatically with a configurable TTL (default: 24 hours)
|
|
29
|
+
|
|
30
|
+
## Desired Outcome Definition
|
|
31
|
+
|
|
32
|
+
A developer configures an agent with model alias "fast." The registry resolves this to the cheapest streaming model currently available — perhaps `llama-3.1-8b` on Groq at $0.05/M tokens. When they switch to "smart," it resolves to `claude-sonnet-4-20250514` with its 200K context window. The developer never looked up a pricing page or a model spec sheet. When a new model is released, the registry picks it up on next refresh — no mia-code update required.
|
|
33
|
+
|
|
34
|
+
## Natural Language Functional Description
|
|
35
|
+
|
|
36
|
+
### Model Metadata Schema
|
|
37
|
+
|
|
38
|
+
Each model in the registry carries:
|
|
39
|
+
|
|
40
|
+
```typescript
|
|
41
|
+
interface ModelInfo {
|
|
42
|
+
id: string; // e.g. "claude-sonnet-4-20250514", "gpt-4o"
|
|
43
|
+
name: string; // human-readable name
|
|
44
|
+
providerId: string; // e.g. "anthropic", "openai"
|
|
45
|
+
contextWindow: number; // max input tokens (e.g. 200000)
|
|
46
|
+
maxOutputTokens: number; // max output tokens (e.g. 8192)
|
|
47
|
+
pricing: ModelPricing;
|
|
48
|
+
capabilities: ModelCapabilities;
|
|
49
|
+
releaseDate?: string; // ISO date string
|
|
50
|
+
deprecationDate?: string; // ISO date string if sunset planned
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
interface ModelPricing {
|
|
54
|
+
inputPerMToken: number; // USD per million input tokens
|
|
55
|
+
outputPerMToken: number; // USD per million output tokens
|
|
56
|
+
cacheReadPerMToken?: number; // USD per million cache read tokens
|
|
57
|
+
cacheWritePerMToken?: number; // USD per million cache write tokens
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
interface ModelCapabilities {
|
|
61
|
+
streaming: boolean;
|
|
62
|
+
vision: boolean;
|
|
63
|
+
functionCalling: boolean;
|
|
64
|
+
jsonMode: boolean;
|
|
65
|
+
extendedThinking: boolean;
|
|
66
|
+
codeExecution: boolean;
|
|
67
|
+
imageGeneration: boolean;
|
|
68
|
+
embedding: boolean;
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Registry Data Source
|
|
73
|
+
|
|
74
|
+
The registry fetches model catalogs from the models.dev API:
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
interface RegistrySource {
|
|
78
|
+
fetchCatalog(): Promise<ModelInfo[]>;
|
|
79
|
+
lastFetched: number; // Unix timestamp of last successful fetch
|
|
80
|
+
ttl: number; // cache TTL in ms (default: 24 * 60 * 60 * 1000)
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Fetch lifecycle:**
|
|
85
|
+
1. On first use (or after TTL expiry), fetch the full catalog from `https://models.dev/api/models`
|
|
86
|
+
2. Parse response into `ModelInfo[]`, normalizing provider-specific fields
|
|
87
|
+
3. Merge with any user-defined custom models from config
|
|
88
|
+
4. Write to local cache at `~/.mia-code/cache/model-registry.json`
|
|
89
|
+
5. Subsequent lookups read from cache until TTL expires
|
|
90
|
+
|
|
91
|
+
**Offline behavior:** if the API is unreachable, use the cached catalog (even if expired). If no cache exists, fall back to a bundled baseline catalog shipped with mia-code. Log a warning about stale data.
|
|
92
|
+
|
|
93
|
+
### Model Lookup and Resolution
|
|
94
|
+
|
|
95
|
+
```typescript
|
|
96
|
+
interface ModelRegistry {
|
|
97
|
+
getModel(modelId: string): ModelInfo | undefined;
|
|
98
|
+
getModelsForProvider(providerId: string): ModelInfo[];
|
|
99
|
+
findModels(filter: ModelFilter): ModelInfo[];
|
|
100
|
+
resolveAlias(alias: string): ModelInfo;
|
|
101
|
+
registerCustomModel(model: ModelInfo): void;
|
|
102
|
+
refresh(): Promise<void>;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
interface ModelFilter {
|
|
106
|
+
providerId?: string;
|
|
107
|
+
capability?: keyof ModelCapabilities;
|
|
108
|
+
maxCostPerMToken?: number; // filter by max input cost
|
|
109
|
+
minContextWindow?: number; // filter by min context size
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**Resolution flow for a model ID:**
|
|
114
|
+
1. Look up `modelId` in the registry → return `ModelInfo` if found
|
|
115
|
+
2. If not found, check user-configured custom models
|
|
116
|
+
3. If still not found, treat as unknown custom model — use defaults (128K context, no pricing, all capabilities assumed)
|
|
117
|
+
4. Log a warning for unknown models suggesting the developer add metadata
|
|
118
|
+
|
|
119
|
+
### Model Aliases
|
|
120
|
+
|
|
121
|
+
Aliases provide semantic model selection:
|
|
122
|
+
|
|
123
|
+
| Alias | Resolution Strategy |
|
|
124
|
+
|---|---|
|
|
125
|
+
| `fast` | Cheapest streaming-capable model with <2s time-to-first-token |
|
|
126
|
+
| `smart` | Highest-capability model (function calling + vision + extended thinking) |
|
|
127
|
+
| `cheap` | Lowest cost per million tokens (input + output averaged) |
|
|
128
|
+
| `big` | Largest context window available |
|
|
129
|
+
| `local` | Model served by a custom/local provider |
|
|
130
|
+
|
|
131
|
+
Alias resolution considers only currently configured and authenticated providers. If the developer has only Anthropic configured, "fast" resolves to the cheapest Anthropic model, not an unconfigured Groq model.
|
|
132
|
+
|
|
133
|
+
Custom aliases can be defined in config:
|
|
134
|
+
```json
|
|
135
|
+
{
|
|
136
|
+
"modelAliases": {
|
|
137
|
+
"team-default": "claude-sonnet-4-20250514",
|
|
138
|
+
"review": "gpt-4o",
|
|
139
|
+
"draft": "llama-3.1-70b"
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Capability-Based Feature Gating
|
|
145
|
+
|
|
146
|
+
Model capabilities influence which tools and features are available:
|
|
147
|
+
|
|
148
|
+
- **Vision-capable models** (`vision: true`): image tools are enabled — screenshot analysis, diagram reading, image-based context
|
|
149
|
+
- **Non-streaming models** (`streaming: false`): response delivery switches to polling mode instead of SSE deltas
|
|
150
|
+
- **Function-calling models** (`functionCalling: true`): tool use is enabled; without it, tools are described in the system prompt as text instructions
|
|
151
|
+
- **JSON mode models** (`jsonMode: true`): structured output extraction uses native JSON mode
|
|
152
|
+
- **Extended thinking models** (`extendedThinking: true`): thinking budget controls are exposed
|
|
153
|
+
|
|
154
|
+
```typescript
|
|
155
|
+
function getAvailableTools(model: ModelInfo, allTools: Tool[]): Tool[] {
|
|
156
|
+
return allTools.filter(tool => {
|
|
157
|
+
if (tool.requiresVision && !model.capabilities.vision) return false;
|
|
158
|
+
if (tool.requiresStreaming && !model.capabilities.streaming) return false;
|
|
159
|
+
return true;
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Custom Model Registration
|
|
165
|
+
|
|
166
|
+
For models not in the models.dev catalog (private fine-tunes, self-hosted models):
|
|
167
|
+
|
|
168
|
+
```json
|
|
169
|
+
{
|
|
170
|
+
"models": {
|
|
171
|
+
"my-finetuned-llama": {
|
|
172
|
+
"providerId": "custom",
|
|
173
|
+
"contextWindow": 32768,
|
|
174
|
+
"maxOutputTokens": 4096,
|
|
175
|
+
"pricing": { "inputPerMToken": 0, "outputPerMToken": 0 },
|
|
176
|
+
"capabilities": {
|
|
177
|
+
"streaming": true,
|
|
178
|
+
"vision": false,
|
|
179
|
+
"functionCalling": true,
|
|
180
|
+
"jsonMode": true,
|
|
181
|
+
"extendedThinking": false,
|
|
182
|
+
"codeExecution": false,
|
|
183
|
+
"imageGeneration": false,
|
|
184
|
+
"embedding": false
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Intelligent Defaults
|
|
192
|
+
|
|
193
|
+
The registry enables cost-aware suggestions:
|
|
194
|
+
|
|
195
|
+
- When creating a new agent, suggest the cheapest model meeting the agent's capability requirements
|
|
196
|
+
- When an explore sub-agent is configured with an expensive model, suggest a cheaper alternative
|
|
197
|
+
- When context overflow occurs (RISE-019), suggest a model with a larger context window
|
|
198
|
+
- Present cost comparison: "Using gpt-4o ($2.50/M) — claude-haiku would cost $0.25/M for this task"
|
|
199
|
+
|
|
200
|
+
## Supporting Structures
|
|
201
|
+
|
|
202
|
+
- **Multi-Provider Architecture (RISE-028)** uses registry data to map models to providers
|
|
203
|
+
- **Cost Tracking (RISE-031)** uses pricing data from the registry for real-time cost calculation
|
|
204
|
+
- **Agent Definition Config (RISE-010)** references model IDs and aliases resolved by the registry
|
|
205
|
+
- **Provider Transform Pipeline (RISE-032)** uses model capabilities to adjust request formatting
|
|
206
|
+
- **Session Compaction (RISE-019)** consults context window size from registry
|
|
207
|
+
- **Named Error System (RISE-006)** provides ModelNotFoundError, RegistryFetchError, AliasResolutionError
|
|
208
|
+
- **Lazy Initialization (RISE-008)** defers registry fetch until first model lookup
|
|
209
|
+
|
|
210
|
+
## Creative Advancement Scenarios
|
|
211
|
+
|
|
212
|
+
**Scenario 1 — Automatic Cost Optimization:**
|
|
213
|
+
A developer creates a sub-agent for code exploration. They don't specify a model. The registry's intelligent defaults select `llama-3.1-8b` on Groq — it's fast, cheap ($0.05/M), supports streaming and function calling, and is perfect for explore tasks. The main coding agent stays on Claude. The developer didn't research pricing; the registry made the optimal choice.
|
|
214
|
+
|
|
215
|
+
**Scenario 2 — New Model Adoption:**
|
|
216
|
+
Anthropic releases Claude 4 Opus. The models.dev API updates within hours. On the developer's next session, the registry refreshes (24h TTL expired), picks up the new model with its context window, pricing, and capabilities. The developer can immediately use it by specifying the model ID — no mia-code update required.
|
|
217
|
+
|
|
218
|
+
**Scenario 3 — Capability-Gated Tools:**
|
|
219
|
+
A developer switches from Claude (vision-capable) to Mistral (no vision). The registry detects the capability change. Image-related tools (screenshot analysis, image context) are automatically hidden from the tool list. The developer isn't offered tools that would fail. When they switch back to Claude, vision tools reappear.
|
|
220
|
+
|
|
221
|
+
**Scenario 4 — Team Standardization:**
|
|
222
|
+
A team lead defines custom aliases in the shared `mia-code.json`: `"team-default"` → `claude-sonnet-4-20250514`, `"review"` → `gpt-4o`, `"draft"` → `llama-3.1-70b`. Team members use aliases instead of model IDs. When pricing changes make a different model optimal, the lead updates one alias — every team member gets the change on next session.
|