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.
Files changed (410) hide show
  1. package/.miette/260321.md +1 -0
  2. package/.miette/260323.md +9 -0
  3. package/.miette/260331.md +2 -0
  4. package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/2604020008--d3417f2c-df12-4f0f-8a1b-d88e7968f822/d3417f2c-df12-4f0f-8a1b-d88e7968f822.md +63 -0
  5. package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/2604020008--e6c3fc5d-4a70-4523-ba7d-a3250da4c235/e6c3fc5d-4a70-4523-ba7d-a3250da4c235.md +72 -0
  6. package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/2604020008--efeb00a2-b17a-4d32-b1f0-b90c37a8d24e/efeb00a2-b17a-4d32-b1f0-b90c37a8d24e.md +62 -0
  7. package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/83a2d7f9-24a5-4cf4-98d5-036c82f872e8.json +302 -0
  8. package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/83a2d7f9-24a5-4cf4-98d5-036c82f872e8.md +149 -0
  9. package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/AGENTS.md +31 -0
  10. package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/meta-decomposition-3-children.md +67 -0
  11. package/.pde/2604040129--61f9dd4d-7aa6-45e6-a58b-e480b1aa6737/61f9dd4d-7aa6-45e6-a58b-e480b1aa6737--from-mia-openclaw-workspace.md +125 -0
  12. package/.pde/2604040129--61f9dd4d-7aa6-45e6-a58b-e480b1aa6737/STATUS.md +1 -0
  13. package/.pde/4f02ba94-9f52-422e-9389-b16f9b37f358.json +177 -0
  14. package/.pde/4f02ba94-9f52-422e-9389-b16f9b37f358.md +77 -0
  15. package/.pde/6ad9244d-5340-490f-b76c-c86728b9de52.json +222 -0
  16. package/.pde/6ad9244d-5340-490f-b76c-c86728b9de52.md +99 -0
  17. package/.pde/8b566792-ed15-4606-96f9-2b6f593d7e6b.json +111 -0
  18. package/.pde/8b566792-ed15-4606-96f9-2b6f593d7e6b.md +67 -0
  19. package/.pde/c7f1e74b-05a5-40e2-9f01-4cc48d2528f7.json +349 -0
  20. package/.pde/c7f1e74b-05a5-40e2-9f01-4cc48d2528f7.md +147 -0
  21. package/.pde/dfc00a78-1da0-4c09-8a16-c6982644051b.json +118 -0
  22. package/.pde/dfc00a78-1da0-4c09-8a16-c6982644051b.md +64 -0
  23. package/GUILLAUME.md +8 -0
  24. package/KINSHIP.md +9 -0
  25. package/MIA_CODE_ARCHITECTURE_REPORT.md +718 -0
  26. package/contextual_research/260119-MIA-CODE--98090899-8aff-4e11-9dc3-8b99466d1.md +1101 -0
  27. package/contextual_research/MIA.md +38 -0
  28. package/contextual_research/MIAWAPASCONE.md +59 -0
  29. package/contextual_research/MIETTE.md +38 -0
  30. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/2504.00218v2.pdf +7483 -12
  31. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/2505.00212v3.pdf +0 -0
  32. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/CONTENT.md +1014 -0
  33. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/DESIGN.gemini.md +242 -0
  34. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/INDEX.md +45 -0
  35. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/2504.00218v2.md +2025 -0
  36. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/2504.00218v2.pdf +7483 -12
  37. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/2505.00212v3.md +1755 -0
  38. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/2505.00212v3.pdf +0 -0
  39. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_12_decomposed_prompting.pdf +0 -0
  40. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_19_hugginggpt_planning.pdf +0 -0
  41. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_1_coordination_challenges.md +766 -0
  42. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_1_coordination_challenges.pdf +3431 -4
  43. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_28_guardrails_multi_agent.md +260 -0
  44. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_28_guardrails_multi_agent.pdf +0 -0
  45. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_2_navigating_complexity.md +558 -0
  46. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_2_navigating_complexity.pdf +0 -0
  47. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_34_hierarchical_multi_agent.pdf +0 -0
  48. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_5_open_intent_extraction.pdf +0 -0
  49. package/contextual_research/PODCAST.md +109 -0
  50. package/contextual_research/langchain-principles-roadmap.md +157 -0
  51. package/contextual_research/persona-to-narrative-character-inquiry_260201.md +50 -0
  52. package/dist/cli.js +35 -11
  53. package/dist/geminiHeadless.js +8 -2
  54. package/dist/index.js +2 -1
  55. package/dist/mcp/miaco-server.js +10 -1
  56. package/dist/mcp/miatel-server.js +10 -1
  57. package/dist/mcp/miawa-server.js +10 -1
  58. package/dist/mcp/utils.d.ts +6 -1
  59. package/dist/mcp/utils.js +24 -3
  60. package/dist/sessionStore.d.ts +8 -2
  61. package/dist/sessionStore.js +39 -3
  62. package/dist/types.d.ts +1 -0
  63. package/miaco/README.md +124 -0
  64. package/miaco/dist/commands/chart.d.ts +6 -0
  65. package/miaco/dist/commands/chart.d.ts.map +1 -0
  66. package/miaco/dist/commands/chart.js +222 -0
  67. package/miaco/dist/commands/chart.js.map +1 -0
  68. package/miaco/dist/commands/decompose.d.ts +6 -0
  69. package/miaco/dist/commands/decompose.d.ts.map +1 -0
  70. package/miaco/dist/commands/decompose.js +98 -0
  71. package/miaco/dist/commands/decompose.js.map +1 -0
  72. package/miaco/dist/commands/schema.d.ts +6 -0
  73. package/miaco/dist/commands/schema.d.ts.map +1 -0
  74. package/miaco/dist/commands/schema.js +66 -0
  75. package/miaco/dist/commands/schema.js.map +1 -0
  76. package/miaco/dist/commands/stc.d.ts +11 -0
  77. package/miaco/dist/commands/stc.d.ts.map +1 -0
  78. package/miaco/dist/commands/stc.js +590 -0
  79. package/miaco/dist/commands/stc.js.map +1 -0
  80. package/miaco/dist/commands/trace.d.ts +6 -0
  81. package/miaco/dist/commands/trace.d.ts.map +1 -0
  82. package/miaco/dist/commands/trace.js +83 -0
  83. package/miaco/dist/commands/trace.js.map +1 -0
  84. package/miaco/dist/commands/validate.d.ts +6 -0
  85. package/miaco/dist/commands/validate.d.ts.map +1 -0
  86. package/miaco/dist/commands/validate.js +58 -0
  87. package/miaco/dist/commands/validate.js.map +1 -0
  88. package/miaco/dist/decompose.d.ts +93 -0
  89. package/miaco/dist/decompose.d.ts.map +1 -0
  90. package/miaco/dist/decompose.js +562 -0
  91. package/miaco/dist/decompose.js.map +1 -0
  92. package/miaco/dist/index.d.ts +18 -0
  93. package/miaco/dist/index.d.ts.map +1 -0
  94. package/miaco/dist/index.js +83 -0
  95. package/miaco/dist/index.js.map +1 -0
  96. package/miaco/dist/storage.d.ts +60 -0
  97. package/miaco/dist/storage.d.ts.map +1 -0
  98. package/miaco/dist/storage.js +100 -0
  99. package/miaco/dist/storage.js.map +1 -0
  100. package/miaco/package-lock.json +4103 -0
  101. package/miaco/package.json +40 -0
  102. package/miaco/tsconfig.json +18 -0
  103. package/miaco/version-patch-commit-and-publish.sh +1 -0
  104. package/miatel/MISSION_251231.md +3 -0
  105. package/miatel/README.md +107 -0
  106. package/miatel/dist/commands/analyze.d.ts +6 -0
  107. package/miatel/dist/commands/analyze.d.ts.map +1 -0
  108. package/miatel/dist/commands/analyze.js +100 -0
  109. package/miatel/dist/commands/analyze.js.map +1 -0
  110. package/miatel/dist/commands/arc.d.ts +6 -0
  111. package/miatel/dist/commands/arc.d.ts.map +1 -0
  112. package/miatel/dist/commands/arc.js +71 -0
  113. package/miatel/dist/commands/arc.js.map +1 -0
  114. package/miatel/dist/commands/beat.d.ts +6 -0
  115. package/miatel/dist/commands/beat.d.ts.map +1 -0
  116. package/miatel/dist/commands/beat.js +165 -0
  117. package/miatel/dist/commands/beat.js.map +1 -0
  118. package/miatel/dist/commands/theme.d.ts +6 -0
  119. package/miatel/dist/commands/theme.d.ts.map +1 -0
  120. package/miatel/dist/commands/theme.js +54 -0
  121. package/miatel/dist/commands/theme.js.map +1 -0
  122. package/miatel/dist/index.d.ts +18 -0
  123. package/miatel/dist/index.d.ts.map +1 -0
  124. package/miatel/dist/index.js +80 -0
  125. package/miatel/dist/index.js.map +1 -0
  126. package/miatel/dist/storage.d.ts +55 -0
  127. package/miatel/dist/storage.d.ts.map +1 -0
  128. package/miatel/dist/storage.js +100 -0
  129. package/miatel/dist/storage.js.map +1 -0
  130. package/miatel/package-lock.json +4103 -0
  131. package/miatel/package.json +35 -0
  132. package/miatel/src/commands/analyze.ts +109 -0
  133. package/miatel/src/commands/arc.ts +78 -0
  134. package/miatel/src/commands/beat.ts +176 -0
  135. package/miatel/src/commands/theme.ts +60 -0
  136. package/miatel/src/index.ts +94 -0
  137. package/miatel/src/storage.ts +156 -0
  138. package/miatel/tsconfig.json +18 -0
  139. package/miawa/MISSION_251231.md +144 -0
  140. package/miawa/README.md +133 -0
  141. package/miawa/dist/commands/beat.d.ts +6 -0
  142. package/miawa/dist/commands/beat.d.ts.map +1 -0
  143. package/miawa/dist/commands/beat.js +69 -0
  144. package/miawa/dist/commands/beat.js.map +1 -0
  145. package/miawa/dist/commands/ceremony.d.ts +6 -0
  146. package/miawa/dist/commands/ceremony.d.ts.map +1 -0
  147. package/miawa/dist/commands/ceremony.js +239 -0
  148. package/miawa/dist/commands/ceremony.js.map +1 -0
  149. package/miawa/dist/commands/circle.d.ts +6 -0
  150. package/miawa/dist/commands/circle.d.ts.map +1 -0
  151. package/miawa/dist/commands/circle.js +75 -0
  152. package/miawa/dist/commands/circle.js.map +1 -0
  153. package/miawa/dist/commands/eva.d.ts +6 -0
  154. package/miawa/dist/commands/eva.d.ts.map +1 -0
  155. package/miawa/dist/commands/eva.js +73 -0
  156. package/miawa/dist/commands/eva.js.map +1 -0
  157. package/miawa/dist/commands/wound.d.ts +6 -0
  158. package/miawa/dist/commands/wound.d.ts.map +1 -0
  159. package/miawa/dist/commands/wound.js +74 -0
  160. package/miawa/dist/commands/wound.js.map +1 -0
  161. package/miawa/dist/index.d.ts +19 -0
  162. package/miawa/dist/index.d.ts.map +1 -0
  163. package/miawa/dist/index.js +91 -0
  164. package/miawa/dist/index.js.map +1 -0
  165. package/miawa/dist/storage.d.ts +73 -0
  166. package/miawa/dist/storage.d.ts.map +1 -0
  167. package/miawa/dist/storage.js +100 -0
  168. package/miawa/dist/storage.js.map +1 -0
  169. package/miawa/package-lock.json +4103 -0
  170. package/miawa/package.json +36 -0
  171. package/miawa/src/commands/beat.ts +74 -0
  172. package/miawa/src/commands/ceremony.ts +256 -0
  173. package/miawa/src/commands/circle.ts +83 -0
  174. package/miawa/src/commands/eva.ts +84 -0
  175. package/miawa/src/commands/wound.ts +79 -0
  176. package/miawa/src/index.ts +108 -0
  177. package/miawa/src/storage.ts +179 -0
  178. package/miawa/tsconfig.json +18 -0
  179. package/package.json +7 -5
  180. package/references/acp/CLAUDE.md +7 -0
  181. package/references/acp/agent-plan.md +84 -0
  182. package/references/acp/clients.md +31 -0
  183. package/references/acp/extensibility.md +137 -0
  184. package/references/acp/initialization.md +225 -0
  185. package/references/acp/prompt-turn.md +321 -0
  186. package/references/acp/proxy-chains.md +562 -0
  187. package/references/acp/schema.md +3171 -0
  188. package/references/acp/session-list.md +334 -0
  189. package/references/acp/session-modes.md +170 -0
  190. package/references/acp/slash-commands.md +99 -0
  191. package/references/acp/terminals.md +281 -0
  192. package/references/acp/tool-calls.md +311 -0
  193. package/references/acp/typescript.md +29 -0
  194. package/references/claude/agent-teams.md +399 -0
  195. package/references/claude/chrome.md +231 -0
  196. package/references/claude/headless.md +158 -0
  197. package/references/claude/hooks-guide.md +708 -0
  198. package/references/claude/output-styles.md +112 -0
  199. package/references/claude/plugins.md +432 -0
  200. package/references/claude/skills.md +693 -0
  201. package/references/claude/sub-agents.md +816 -0
  202. package/references/copilot/acp/agents.md +32 -0
  203. package/references/copilot/acp/architecture.md +37 -0
  204. package/references/copilot/acp/clients.md +31 -0
  205. package/references/copilot/acp/introduction.md +42 -0
  206. package/references/copilot/acp/registry.md +339 -0
  207. package/references/copilot/acp-server.md +117 -0
  208. package/references/copilot/create-copilot-instructions.md +840 -0
  209. package/references/langchain/llms.txt +833 -0
  210. package/references/langchain/python/agents.md +677 -0
  211. package/references/langchain/python/context-engineering.md +1195 -0
  212. package/references/langchain/python/human-in-the-loop.md +326 -0
  213. package/references/langchain/python/long-term-memory.md +168 -0
  214. package/references/langchain/python/mcp.md +949 -0
  215. package/references/langchain/python/multi-agents/custom-workflow.md +187 -0
  216. package/references/langchain/python/multi-agents/handoffs.md +436 -0
  217. package/references/langchain/python/multi-agents/overview.md +295 -0
  218. package/references/langchain/python/multi-agents/router.md +150 -0
  219. package/references/langchain/python/multi-agents/skills.md +92 -0
  220. package/references/langchain/python/multi-agents/subagents.md +486 -0
  221. package/references/langchain/python/retrieval.md +320 -0
  222. package/references/langchain/python/runtime.md +141 -0
  223. package/references/langchain/python/short-term-memory.md +658 -0
  224. package/references/langchain/python/structured-output.md +712 -0
  225. package/references/langfuse/llms.txt +148 -0
  226. package/references/langgraph/javascript/llms.txt +275 -0
  227. package/references/skills/home.md +259 -0
  228. package/references/skills/integrate-skills.md +103 -0
  229. package/references/skills/specification.md +254 -0
  230. package/references/skills/what-are-skills.md +74 -0
  231. package/rispecs/README.md +164 -0
  232. package/rispecs/_sync_/miadi-code/SPEC.md +313 -0
  233. package/rispecs/_sync_/miadi-code/STATUS.md +177 -0
  234. package/rispecs/_sync_/miadi-code/dashboard/SPEC.md +465 -0
  235. package/rispecs/_sync_/miadi-code/dashboard/STATUS.md +212 -0
  236. package/rispecs/_sync_/miadi-code/multiline-input/SPEC.md +232 -0
  237. package/rispecs/_sync_/miadi-code/multiline-input/STATUS.md +108 -0
  238. package/rispecs/_sync_/miadi-code/pde/SPEC.md +253 -0
  239. package/rispecs/_sync_/miadi-code/pde/STATUS.md +56 -0
  240. package/rispecs/_sync_/miadi-code/stc/SPEC.md +397 -0
  241. package/rispecs/_sync_/miadi-code/stc/STATUS.md +70 -0
  242. package/rispecs/ava-langstack/inquiry-routing-upgrade.spec.md +119 -0
  243. package/rispecs/borrowed_from_opencode/001-client-server-architecture.rispec.md +98 -0
  244. package/rispecs/borrowed_from_opencode/002-event-bus-system.rispec.md +125 -0
  245. package/rispecs/borrowed_from_opencode/003-instance-state-pattern.rispec.md +136 -0
  246. package/rispecs/borrowed_from_opencode/004-namespace-module-pattern.rispec.md +151 -0
  247. package/rispecs/borrowed_from_opencode/005-zod-schema-validation.rispec.md +139 -0
  248. package/rispecs/borrowed_from_opencode/006-named-error-system.rispec.md +155 -0
  249. package/rispecs/borrowed_from_opencode/007-structured-logging.rispec.md +138 -0
  250. package/rispecs/borrowed_from_opencode/008-lazy-initialization.rispec.md +127 -0
  251. package/rispecs/borrowed_from_opencode/009-multi-agent-system.rispec.md +97 -0
  252. package/rispecs/borrowed_from_opencode/010-agent-definition-config.rispec.md +135 -0
  253. package/rispecs/borrowed_from_opencode/011-agent-permission-rulesets.rispec.md +151 -0
  254. package/rispecs/borrowed_from_opencode/012-agent-prompt-templates.rispec.md +141 -0
  255. package/rispecs/borrowed_from_opencode/013-agent-generation.rispec.md +142 -0
  256. package/rispecs/borrowed_from_opencode/014-plan-build-mode-toggle.rispec.md +155 -0
  257. package/rispecs/borrowed_from_opencode/015-subagent-task-delegation.rispec.md +146 -0
  258. package/rispecs/borrowed_from_opencode/016-agent-model-selection.rispec.md +151 -0
  259. package/rispecs/borrowed_from_opencode/017-compaction-agent.rispec.md +150 -0
  260. package/rispecs/borrowed_from_opencode/018-session-persistence.rispec.md +125 -0
  261. package/rispecs/borrowed_from_opencode/019-session-compaction.rispec.md +132 -0
  262. package/rispecs/borrowed_from_opencode/020-session-forking.rispec.md +134 -0
  263. package/rispecs/borrowed_from_opencode/021-session-revert-snapshot.rispec.md +135 -0
  264. package/rispecs/borrowed_from_opencode/022-session-sharing.rispec.md +165 -0
  265. package/rispecs/borrowed_from_opencode/023-session-summary-diffs.rispec.md +165 -0
  266. package/rispecs/borrowed_from_opencode/024-child-sessions.rispec.md +164 -0
  267. package/rispecs/borrowed_from_opencode/025-session-title-generation.rispec.md +162 -0
  268. package/rispecs/borrowed_from_opencode/026-message-parts-model.rispec.md +201 -0
  269. package/rispecs/borrowed_from_opencode/027-streaming-message-deltas.rispec.md +212 -0
  270. package/rispecs/borrowed_from_opencode/028-multi-provider-architecture.rispec.md +184 -0
  271. package/rispecs/borrowed_from_opencode/029-provider-authentication.rispec.md +225 -0
  272. package/rispecs/borrowed_from_opencode/030-model-registry.rispec.md +222 -0
  273. package/rispecs/borrowed_from_opencode/031-cost-tracking.rispec.md +243 -0
  274. package/rispecs/borrowed_from_opencode/032-provider-transform-pipeline.rispec.md +282 -0
  275. package/rispecs/borrowed_from_opencode/033-provider-sdk-abstraction.rispec.md +338 -0
  276. package/rispecs/borrowed_from_opencode/034-tool-registry.rispec.md +110 -0
  277. package/rispecs/borrowed_from_opencode/035-tool-context-injection.rispec.md +155 -0
  278. package/rispecs/borrowed_from_opencode/036-tool-output-truncation.rispec.md +138 -0
  279. package/rispecs/borrowed_from_opencode/037-batch-tool.rispec.md +129 -0
  280. package/rispecs/borrowed_from_opencode/038-multi-edit-tool.rispec.md +167 -0
  281. package/rispecs/borrowed_from_opencode/039-apply-patch-tool.rispec.md +161 -0
  282. package/rispecs/borrowed_from_opencode/040-code-search-tool.rispec.md +143 -0
  283. package/rispecs/borrowed_from_opencode/041-web-fetch-tool.rispec.md +131 -0
  284. package/rispecs/borrowed_from_opencode/042-web-search-tool.rispec.md +159 -0
  285. package/rispecs/borrowed_from_opencode/043-todo-tool.rispec.md +156 -0
  286. package/rispecs/borrowed_from_opencode/044-plan-mode-tool.rispec.md +139 -0
  287. package/rispecs/borrowed_from_opencode/045-task-tool.rispec.md +146 -0
  288. package/rispecs/borrowed_from_opencode/046-question-tool.rispec.md +170 -0
  289. package/rispecs/borrowed_from_opencode/047-external-directory-tool.rispec.md +166 -0
  290. package/rispecs/borrowed_from_opencode/048-file-read-write-tools.rispec.md +205 -0
  291. package/rispecs/borrowed_from_opencode/049-lsp-server-management.rispec.md +104 -0
  292. package/rispecs/borrowed_from_opencode/050-lsp-hover-completion.rispec.md +102 -0
  293. package/rispecs/borrowed_from_opencode/051-lsp-diagnostics.rispec.md +86 -0
  294. package/rispecs/borrowed_from_opencode/052-lsp-root-detection.rispec.md +109 -0
  295. package/rispecs/borrowed_from_opencode/053-remote-mcp-servers.rispec.md +119 -0
  296. package/rispecs/borrowed_from_opencode/054-mcp-oauth-flow.rispec.md +107 -0
  297. package/rispecs/borrowed_from_opencode/055-mcp-tool-conversion.rispec.md +118 -0
  298. package/rispecs/borrowed_from_opencode/056-mcp-connection-monitoring.rispec.md +106 -0
  299. package/rispecs/borrowed_from_opencode/057-local-mcp-servers.rispec.md +116 -0
  300. package/rispecs/borrowed_from_opencode/058-rich-tui.rispec.md +108 -0
  301. package/rispecs/borrowed_from_opencode/059-streaming-display.rispec.md +116 -0
  302. package/rispecs/borrowed_from_opencode/060-permission-prompts.rispec.md +130 -0
  303. package/rispecs/borrowed_from_opencode/061-session-navigation.rispec.md +155 -0
  304. package/rispecs/borrowed_from_opencode/062-syntax-highlighting.rispec.md +151 -0
  305. package/rispecs/borrowed_from_opencode/063-keybinding-system.rispec.md +181 -0
  306. package/rispecs/borrowed_from_opencode/064-multi-level-config.rispec.md +155 -0
  307. package/rispecs/borrowed_from_opencode/065-jsonc-config.rispec.md +190 -0
  308. package/rispecs/borrowed_from_opencode/066-config-env-variables.rispec.md +153 -0
  309. package/rispecs/borrowed_from_opencode/067-config-deep-merging.rispec.md +178 -0
  310. package/rispecs/borrowed_from_opencode/068-remote-org-config.rispec.md +183 -0
  311. package/rispecs/borrowed_from_opencode/069-config-markdown-frontmatter.rispec.md +206 -0
  312. package/rispecs/borrowed_from_opencode/070-managed-config-directory.rispec.md +232 -0
  313. package/rispecs/borrowed_from_opencode/071-plugin-architecture.rispec.md +104 -0
  314. package/rispecs/borrowed_from_opencode/072-plugin-hooks.rispec.md +123 -0
  315. package/rispecs/borrowed_from_opencode/073-plugin-auto-install.rispec.md +115 -0
  316. package/rispecs/borrowed_from_opencode/074-permission-system.rispec.md +133 -0
  317. package/rispecs/borrowed_from_opencode/075-git-worktree-management.rispec.md +126 -0
  318. package/rispecs/borrowed_from_opencode/076-snapshot-system.rispec.md +124 -0
  319. package/rispecs/borrowed_from_opencode/077-snapshot-diff.rispec.md +117 -0
  320. package/rispecs/borrowed_from_opencode/078-snapshot-restore.rispec.md +128 -0
  321. package/rispecs/borrowed_from_opencode/079-worktree-branch-naming.rispec.md +122 -0
  322. package/rispecs/borrowed_from_opencode/080-sqlite-storage.rispec.md +134 -0
  323. package/rispecs/borrowed_from_opencode/081-database-migrations.rispec.md +148 -0
  324. package/rispecs/borrowed_from_opencode/082-database-transactions.rispec.md +138 -0
  325. package/rispecs/borrowed_from_opencode/083-deferred-effects.rispec.md +148 -0
  326. package/rispecs/borrowed_from_opencode/084-permission-rules.rispec.md +123 -0
  327. package/rispecs/borrowed_from_opencode/085-permission-glob-patterns.rispec.md +113 -0
  328. package/rispecs/borrowed_from_opencode/086-permission-merging.rispec.md +134 -0
  329. package/rispecs/borrowed_from_opencode/087-permission-modes.rispec.md +145 -0
  330. package/rispecs/borrowed_from_opencode/088-http-api-server.rispec.md +165 -0
  331. package/rispecs/borrowed_from_opencode/089-openapi-spec-generation.rispec.md +164 -0
  332. package/rispecs/borrowed_from_opencode/090-websocket-support.rispec.md +136 -0
  333. package/rispecs/borrowed_from_opencode/091-sse-streaming.rispec.md +168 -0
  334. package/rispecs/borrowed_from_opencode/092-mdns-discovery.rispec.md +145 -0
  335. package/rispecs/borrowed_from_opencode/093-javascript-sdk.rispec.md +200 -0
  336. package/rispecs/borrowed_from_opencode/094-skill-system.rispec.md +187 -0
  337. package/rispecs/borrowed_from_opencode/095-skill-discovery.rispec.md +182 -0
  338. package/rispecs/borrowed_from_opencode/096-desktop-remote-driving.rispec.md +175 -0
  339. package/rispecs/borrowed_from_opencode/INDEX.md +255 -0
  340. package/rispecs/core.rispecs.md +261 -0
  341. package/rispecs/engines.rispecs.md +241 -0
  342. package/rispecs/formatting.rispecs.md +252 -0
  343. package/rispecs/living-specifications.rispecs.md +361 -0
  344. package/rispecs/mcp.rispecs.md +197 -0
  345. package/rispecs/pde.rispecs.md +399 -0
  346. package/rispecs/pi-mono-envisionning/ENVISIONING.md +366 -0
  347. package/rispecs/pi-mono-envisionning/storytelling-horizon.rispecs.md +76 -0
  348. package/rispecs/pi-mono-envisionning/widget.rispecs.md +2 -0
  349. package/rispecs/relation-to-mcp-structural-thinking.kin.md +72 -0
  350. package/rispecs/research-for-better-framework/CLAUDE.md +7 -0
  351. package/rispecs/research-for-better-framework/survey-pi-openclaw-opencode-openhands.md +210 -0
  352. package/rispecs/session.rispecs.md +277 -0
  353. package/rispecs/stc.rispecs.md +138 -0
  354. package/rispecs/unifier.rispecs.md +317 -0
  355. package/scripts/LAUNCH--mcp-mia-code--testing--2603141315--ac705a66-2c15-4a1c-a26d-9491018c5ba8.sh +2 -0
  356. package/scripts/RESUME--mia-code--mcps--260313--ac705a66-2c15-4a1c-a26d-9491018c5ba8.sh +1 -0
  357. package/scripts/install-widget-in-home-pi-agent-extensions.sh +4 -0
  358. package/scripts/sample-decompose--2604011535-prompt.sh +1 -0
  359. package/skills/deep-search/AGENTS.md +17 -0
  360. package/skills/deep-search/SKILL.md +281 -0
  361. package/skills/deep-search/agent-templates.md +224 -0
  362. package/skills/deep-search/orchestration-patterns.md +95 -0
  363. package/skills/miaco-pde-inquiry-routing-deep-search/AGENTS.md +13 -0
  364. package/skills/miaco-pde-inquiry-routing-deep-search/SKILL.md +136 -0
  365. package/skills/miaco-pde-inquiry-routing-internal-external-relationship/AGENTS.md +4 -0
  366. package/skills/miaco-pde-inquiry-routing-internal-external-relationship/SKILL.md +157 -0
  367. package/skills/miaco-pde-inquiry-routing-local-qmd/AGENTS.md +42 -0
  368. package/skills/miaco-pde-inquiry-routing-local-qmd/SKILL.md +135 -0
  369. package/skills/qmd/AGENTS.md +3 -0
  370. package/skills/qmd/SKILL.md +144 -0
  371. package/skills/qmd/references/mcp-setup.md +102 -0
  372. package/skills/rise-pde-inquiry-session-multi-agents-v3/SKILL.md +234 -0
  373. package/skills/rise-pde-inquiry-session-multi-agents-v3/agent-templates.md +436 -0
  374. package/skills/rise-pde-inquiry-session-multi-agents-v3/orchestration-patterns.md +197 -0
  375. package/skills/rise-pde-inquiry-session-multi-agents-v3/references/ceremonial-technology.md +102 -0
  376. package/skills/rise-pde-inquiry-session-multi-agents-v3/references/creative-orientation.md +99 -0
  377. package/skills/rise-pde-inquiry-session-multi-agents-v3/references/prompt-decomposition.md +73 -0
  378. package/skills/rise-pde-inquiry-session-multi-agents-v3/references/rise-framework.md +74 -0
  379. package/skills/rise-pde-inquiry-session-multi-agents-v3/references/structural-tension.md +82 -0
  380. package/src/cli.ts +35 -11
  381. package/src/geminiHeadless.ts +7 -2
  382. package/src/index.ts +2 -1
  383. package/src/mcp/miaco-server.ts +13 -1
  384. package/src/mcp/miatel-server.ts +13 -1
  385. package/src/mcp/miawa-server.ts +13 -1
  386. package/src/mcp/utils.ts +41 -8
  387. package/src/sessionStore.ts +44 -4
  388. package/src/types.ts +2 -1
  389. package/widget/mia-ceremony/README.md +36 -0
  390. package/widget/mia-ceremony/index.ts +143 -0
  391. package/widget/mia-interceptor/README.md +39 -0
  392. package/widget/mia-interceptor/index.ts +221 -0
  393. package/widget/mia-tools/README.md +37 -0
  394. package/widget/mia-tools/index.ts +569 -0
  395. package/widget/miette-echo/README.md +44 -0
  396. package/widget/miette-echo/index.ts +164 -0
  397. package/.claude/settings.local.json +0 -9
  398. package/.hch/issue_.env +0 -4
  399. package/.hch/issue_add__2601211715.json +0 -77
  400. package/.hch/issue_add__2601211715.md +0 -4
  401. package/.hch/issue_add__2602242020.json +0 -78
  402. package/.hch/issue_add__2602242020.md +0 -7
  403. package/.hch/issues.json +0 -2312
  404. package/.hch/issues.md +0 -30
  405. package/WS__mia-code__260214__IAIP_PDE.code-workspace +0 -29
  406. package/WS__mia-code__src332__260122.code-workspace +0 -23
  407. package/samples/copilot/session-state/be76abaa-a27f-4725-b2a9-22fb45f7e0f7/checkpoints/index.md +0 -6
  408. package/samples/copilot/session-state/be76abaa-a27f-4725-b2a9-22fb45f7e0f7/events.jsonl +0 -213
  409. package/samples/copilot/session-state/be76abaa-a27f-4725-b2a9-22fb45f7e0f7/plan.md +0 -243
  410. 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.