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,201 @@
1
+ # RISE-026: Message Parts Model
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/026-message-parts-model.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ mia-code replaces flat text messages with a rich, structured parts model where each message contains typed components — text, tool calls, tool results, errors, images, and files. This enables the system to render tool calls differently from prose, track costs per message, replay sessions with full fidelity, and stream individual parts during generation. The message becomes a container of semantic units, each carrying its own type information and metadata.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - Messages are stored as flat text strings with no internal structure
14
+ - Tool calls and their results are serialized as part of the text blob — no programmatic access
15
+ - Rendering logic must parse text to identify tool calls, code blocks, and other elements
16
+ - Cost and token tracking is per-session at best — not per-message
17
+ - Session replay loses tool call boundaries and timing
18
+ - Streaming delivers raw text chunks with no semantic framing
19
+ - Errors, images, and file references are ad-hoc text within messages
20
+
21
+ **Desired State:**
22
+ - Each message is a container holding one or more typed Parts
23
+ - Parts have explicit types: TextPart, ToolCallPart, ToolResultPart, ErrorPart, ImagePart, FilePart
24
+ - Each part is independently addressable, renderable, and streamable
25
+ - Message metadata carries model, token counts, and cost information
26
+ - The UI renders each part type with appropriate formatting
27
+ - Session replay reconstructs the exact sequence of parts
28
+ - Parts are individually stored in the database with ordering indices
29
+
30
+ ## Desired Outcome Definition
31
+
32
+ An assistant message containing a text explanation, a tool call to edit a file, and the tool's result is stored as three separate parts. The UI renders the text in normal formatting, the tool call in a collapsible panel with syntax-highlighted arguments, and the tool result with a success/failure indicator. Each part was streamed independently during generation.
33
+
34
+ ## Natural Language Functional Description
35
+
36
+ ### Message Structure
37
+
38
+ A Message contains:
39
+ ```typescript
40
+ interface Message {
41
+ id: string; // UUID v4
42
+ session_id: string; // FK to sessions table
43
+ role: "user" | "assistant" | "system";
44
+ metadata: MessageMetadata;
45
+ parts: Part[]; // ordered list of typed parts
46
+ created_at: number; // Unix timestamp ms
47
+ }
48
+
49
+ interface MessageMetadata {
50
+ model?: string; // e.g. "claude-sonnet-4-20250514"
51
+ input_tokens?: number;
52
+ output_tokens?: number;
53
+ cost?: number; // USD cost of this message
54
+ duration_ms?: number; // generation time
55
+ cached_tokens?: number; // tokens served from cache
56
+ }
57
+ ```
58
+
59
+ ### Part Types
60
+
61
+ Each Part has a `type` discriminator and type-specific content:
62
+
63
+ **TextPart** — plain text content from the LLM or user:
64
+ ```typescript
65
+ interface TextPart {
66
+ type: "text";
67
+ content: string; // the text content, may contain markdown
68
+ }
69
+ ```
70
+
71
+ **ToolCallPart** — an invocation of a tool by the assistant:
72
+ ```typescript
73
+ interface ToolCallPart {
74
+ type: "tool_call";
75
+ tool_call_id: string; // unique ID for matching with result
76
+ tool_name: string; // e.g. "edit_file", "bash", "grep"
77
+ arguments: Record<string, unknown>; // tool-specific arguments
78
+ }
79
+ ```
80
+
81
+ **ToolResultPart** — the output from a tool execution:
82
+ ```typescript
83
+ interface ToolResultPart {
84
+ type: "tool_result";
85
+ tool_call_id: string; // matches the ToolCallPart
86
+ output: string; // tool output text
87
+ title?: string; // human-readable title for display
88
+ metadata?: {
89
+ exit_code?: number;
90
+ duration_ms?: number;
91
+ bytes_read?: number;
92
+ };
93
+ attachments?: Attachment[]; // files, images produced by tool
94
+ is_error?: boolean; // true if tool execution failed
95
+ }
96
+ ```
97
+
98
+ **ErrorPart** — an error that occurred during processing:
99
+ ```typescript
100
+ interface ErrorPart {
101
+ type: "error";
102
+ error_name: string; // e.g. "ToolExecutionError", "RateLimitError"
103
+ message: string; // human-readable error description
104
+ metadata?: {
105
+ code?: string;
106
+ retryable?: boolean;
107
+ stack?: string;
108
+ };
109
+ }
110
+ ```
111
+
112
+ **ImagePart** — an image (screenshot, diagram, generated visual):
113
+ ```typescript
114
+ interface ImagePart {
115
+ type: "image";
116
+ data: string; // base64-encoded image data
117
+ mime_type: string; // e.g. "image/png", "image/jpeg"
118
+ alt_text?: string; // accessibility description
119
+ width?: number;
120
+ height?: number;
121
+ }
122
+ ```
123
+
124
+ **FilePart** — a reference to or content of a file:
125
+ ```typescript
126
+ interface FilePart {
127
+ type: "file";
128
+ path: string; // relative file path
129
+ content?: string; // file content (may be truncated)
130
+ language?: string; // syntax highlighting hint
131
+ line_range?: [number, number]; // if showing a range
132
+ }
133
+ ```
134
+
135
+ ### Database Storage
136
+
137
+ Parts are stored in the `parts` table (RISE-018):
138
+ - `id` TEXT PRIMARY KEY
139
+ - `message_id` TEXT FK → messages
140
+ - `type` TEXT — the part type discriminator
141
+ - `content` JSON — the full part payload serialized as JSON
142
+ - `index` INTEGER — ordering within the message (0-based)
143
+ - `created_at` INTEGER — timestamp
144
+
145
+ Query patterns:
146
+ - Get all parts for a message: `SELECT * FROM parts WHERE message_id = ? ORDER BY index`
147
+ - Get tool calls in a session: `SELECT p.* FROM parts p JOIN messages m ON p.message_id = m.id WHERE m.session_id = ? AND p.type = 'tool_call'`
148
+ - Count errors: `SELECT COUNT(*) FROM parts p JOIN messages m ON p.message_id = m.id WHERE m.session_id = ? AND p.type = 'error'`
149
+
150
+ ### Part Construction
151
+
152
+ When the LLM generates a response, the output is parsed into parts:
153
+ 1. Text content → TextPart
154
+ 2. Tool use blocks → ToolCallPart (one per tool invocation)
155
+ 3. After tool execution → ToolResultPart (paired with ToolCallPart via tool_call_id)
156
+ 4. Errors during processing → ErrorPart
157
+ 5. Image outputs → ImagePart
158
+ 6. File references in structured output → FilePart
159
+
160
+ Parts are assigned sequential `index` values as they are created.
161
+
162
+ ### Rendering Contract
163
+
164
+ Each part type has a defined rendering behavior:
165
+ - **TextPart:** rendered as markdown with syntax highlighting for code blocks
166
+ - **ToolCallPart:** rendered as a collapsible panel showing tool name and formatted arguments
167
+ - **ToolResultPart:** rendered with success/failure indicator, collapsible output, duration badge
168
+ - **ErrorPart:** rendered with error styling (red), error name prominent, details expandable
169
+ - **ImagePart:** rendered as inline image with alt text
170
+ - **FilePart:** rendered as syntax-highlighted code block with file path header
171
+
172
+ ### Streaming Integration
173
+
174
+ Parts are individually streamable (see RISE-027):
175
+ - TextPart streams incrementally as `text_delta` events
176
+ - ToolCallPart streams as `tool_call_start` then `tool_call_delta` for arguments
177
+ - ToolResultPart streams as `tool_result_delta` for long outputs
178
+ - Other parts are sent as complete units
179
+
180
+ ## Supporting Structures
181
+
182
+ - **Session Persistence (RISE-018)** defines the `parts` table schema and data access methods
183
+ - **Streaming Message Deltas (RISE-027)** builds on parts for incremental delivery
184
+ - **Session Compaction (RISE-019)** — compaction summary is stored as a special TextPart
185
+ - **Session Sharing (RISE-022)** — shared views render each part type with appropriate formatting
186
+ - **Zod Schema Validation (RISE-005)** validates part payloads before database insertion
187
+ - **Named Error System (RISE-006)** provides InvalidPartTypeError, PartValidationError
188
+
189
+ ## Creative Advancement Scenarios
190
+
191
+ **Scenario 1 — Rich Tool Call Display:**
192
+ The agent calls `bash` with a complex command. The UI renders a ToolCallPart showing the command in a monospace panel. The ToolResultPart appears below with the output, a green checkmark, and "completed in 1.2s." The developer sees structured, readable output instead of a text dump.
193
+
194
+ **Scenario 2 — Cost Tracking:**
195
+ After a session, the developer checks costs. Each message's metadata shows token counts and cost. The session total is computed by summing message costs. Tool-heavy messages cost more (large tool results consume input tokens) — the parts model makes this visible.
196
+
197
+ **Scenario 3 — Session Replay:**
198
+ A developer replays a shared session (RISE-022). Each part renders in sequence with timing: text appears as if being typed, tool calls expand to show execution, results appear after the recorded duration. The replay recreates the development experience.
199
+
200
+ **Scenario 4 — Error Diagnosis:**
201
+ A session had intermittent failures. The developer queries: "show me all errors in this session." The system queries parts with `type = 'error'`, returning a focused list of ErrorParts with names, messages, and timestamps — no manual scanning required.
@@ -0,0 +1,212 @@
1
+ # RISE-027: Streaming Message Deltas
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/027-streaming-message-deltas.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ mia-code streams partial message updates to the UI in real-time as the LLM generates content, rather than waiting for the complete response. Developers see text appear word-by-word, tool calls unfold as they are constructed, and results flow in progressively. Streaming transforms the interaction from "wait and see" to "watch it think" — providing immediate feedback, enabling early cancellation of wrong-headed responses, and creating the fluid, responsive feel that distinguishes a professional tool from a batch job.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - Agent responses are buffered until complete, then displayed as a monolithic block
14
+ - Long responses leave the developer staring at a spinner for 10-30 seconds with no feedback
15
+ - There is no way to cancel a response mid-generation — the developer must wait for completion
16
+ - Tool calls appear atomically: the developer sees nothing until the tool finishes and the result is rendered
17
+ - Token costs accumulate invisibly — the developer only sees the total after the response completes
18
+ - The UI cannot progressively render content, missing opportunities for perceived performance gains
19
+
20
+ **Desired State:**
21
+ - Text streams character-by-character (or chunk-by-chunk) as the LLM generates it
22
+ - Tool calls stream in phases: start (name known), delta (arguments building), result (output streaming)
23
+ - The UI renders incrementally, giving immediate visual feedback
24
+ - Developers can cancel mid-generation, stopping token consumption
25
+ - Token counts and cost estimates update in real-time during generation
26
+ - The streaming protocol is well-defined with typed delta events
27
+
28
+ ## Desired Outcome Definition
29
+
30
+ The developer sends a prompt. Within 200ms, the first text characters appear. As the LLM constructs a tool call, the tool name appears immediately, then arguments build progressively. When the tool executes, its output streams line by line. A running token counter updates throughout. At any point, Ctrl+C cancels generation and stops billing. The complete message is assembled from deltas and persisted.
31
+
32
+ ## Natural Language Functional Description
33
+
34
+ ### Delta Types
35
+
36
+ Each delta is a typed event referencing a specific message and part:
37
+
38
+ **TextDelta** — incremental text content:
39
+ ```typescript
40
+ interface TextDelta {
41
+ type: "text_delta";
42
+ message_id: string;
43
+ part_index: number;
44
+ content: string; // the new text chunk
45
+ accumulated_length: number; // total text length so far
46
+ }
47
+ ```
48
+
49
+ **ToolCallStart** — a tool invocation begins:
50
+ ```typescript
51
+ interface ToolCallStart {
52
+ type: "tool_call_start";
53
+ message_id: string;
54
+ part_index: number;
55
+ tool_call_id: string;
56
+ tool_name: string;
57
+ }
58
+ ```
59
+
60
+ **ToolCallDelta** — tool arguments are being built:
61
+ ```typescript
62
+ interface ToolCallDelta {
63
+ type: "tool_call_delta";
64
+ message_id: string;
65
+ part_index: number;
66
+ tool_call_id: string;
67
+ arguments_delta: string; // JSON fragment of arguments
68
+ }
69
+ ```
70
+
71
+ **ToolResultStart** — tool execution has begun:
72
+ ```typescript
73
+ interface ToolResultStart {
74
+ type: "tool_result_start";
75
+ message_id: string;
76
+ part_index: number;
77
+ tool_call_id: string;
78
+ title?: string;
79
+ }
80
+ ```
81
+
82
+ **ToolResultDelta** — streaming tool output:
83
+ ```typescript
84
+ interface ToolResultDelta {
85
+ type: "tool_result_delta";
86
+ message_id: string;
87
+ part_index: number;
88
+ tool_call_id: string;
89
+ content: string; // output chunk
90
+ }
91
+ ```
92
+
93
+ **ToolResultEnd** — tool execution completed:
94
+ ```typescript
95
+ interface ToolResultEnd {
96
+ type: "tool_result_end";
97
+ message_id: string;
98
+ part_index: number;
99
+ tool_call_id: string;
100
+ is_error: boolean;
101
+ duration_ms: number;
102
+ }
103
+ ```
104
+
105
+ **MetadataDelta** — updated token counts and cost:
106
+ ```typescript
107
+ interface MetadataDelta {
108
+ type: "metadata_delta";
109
+ message_id: string;
110
+ input_tokens: number; // cumulative input tokens
111
+ output_tokens: number; // cumulative output tokens
112
+ cost: number; // estimated cost so far (USD)
113
+ }
114
+ ```
115
+
116
+ **Complete** — message generation finished:
117
+ ```typescript
118
+ interface Complete {
119
+ type: "complete";
120
+ message_id: string;
121
+ final_metadata: MessageMetadata;
122
+ stop_reason: "end_turn" | "max_tokens" | "tool_use" | "cancelled";
123
+ }
124
+ ```
125
+
126
+ ### Streaming Pipeline
127
+
128
+ The streaming pipeline processes LLM output through these stages:
129
+
130
+ 1. **LLM Stream:** the model provider emits raw chunks (text tokens, tool use blocks)
131
+ 2. **Delta Parser:** converts raw chunks into typed Delta events
132
+ 3. **Part Assembler:** accumulates deltas into complete Parts for persistence
133
+ 4. **Delta Emitter:** sends deltas to connected clients via the event bus (RISE-002)
134
+ 5. **Persistence:** when complete, the assembled message and parts are written to the database
135
+
136
+ ```
137
+ LLM API → Delta Parser → Part Assembler → Database
138
+
139
+ Delta Emitter → Event Bus → Client(s)
140
+ ```
141
+
142
+ ### Client Rendering
143
+
144
+ The client receives deltas and updates the display:
145
+
146
+ - **TextDelta:** append text to the current text block, re-render markdown
147
+ - **ToolCallStart:** create a new tool call panel with the tool name
148
+ - **ToolCallDelta:** progressively render JSON arguments in the panel
149
+ - **ToolResultStart:** show a "running..." indicator beneath the tool call
150
+ - **ToolResultDelta:** append output lines to the result area
151
+ - **ToolResultEnd:** update the indicator to success/failure with duration
152
+ - **MetadataDelta:** update the token/cost counter in the status bar
153
+ - **Complete:** finalize rendering, remove any "generating..." indicators
154
+
155
+ ### Cancellation
156
+
157
+ At any point during streaming, the developer can cancel:
158
+
159
+ 1. User presses Ctrl+C or clicks cancel
160
+ 2. Client sends an abort signal to the server (or locally to the agent)
161
+ 3. The abort signal propagates to the LLM API call, stopping generation
162
+ 4. The Delta Parser emits a `Complete` event with `stop_reason: "cancelled"`
163
+ 5. The Part Assembler finalizes with whatever content was received
164
+ 6. Partial content is persisted — the message exists with whatever parts were completed
165
+ 7. Token billing stops at the cancellation point
166
+
167
+ ### Delivery Mechanisms
168
+
169
+ Deltas reach clients through multiple transport options:
170
+
171
+ **Local (CLI):** deltas flow directly through in-process event bus to the TUI renderer. Zero network overhead.
172
+
173
+ **SSE (HTTP):** for client-server architecture (RISE-001), deltas are serialized as Server-Sent Events on the `/sessions/:id/events` endpoint. Each delta is a JSON event with a type field.
174
+
175
+ **WebSocket (future):** for bidirectional communication, deltas flow over WebSocket with the same JSON format.
176
+
177
+ ### Backpressure and Buffering
178
+
179
+ - If the client cannot render as fast as deltas arrive, a small buffer (default: 100 deltas) absorbs bursts
180
+ - If the buffer fills, deltas are coalesced: multiple TextDeltas merge into one larger chunk
181
+ - MetadataDeltas are sampled: at most one per 500ms reaches the client
182
+ - Coalescing preserves correctness — the final assembled message is identical regardless of delta granularity
183
+
184
+ ### Error Handling During Streaming
185
+
186
+ - **LLM connection drop:** emit an ErrorPart, then Complete with `stop_reason: "cancelled"`
187
+ - **Tool execution failure:** emit ToolResultEnd with `is_error: true`, continue with next LLM turn
188
+ - **Client disconnect:** streaming continues server-side; deltas are buffered for reconnection
189
+ - **Rate limit:** emit MetadataDelta with rate limit info, pause, then resume streaming
190
+
191
+ ## Supporting Structures
192
+
193
+ - **Message Parts Model (RISE-026)** defines the Part types that deltas assemble into
194
+ - **Client-Server Architecture (RISE-001)** provides SSE transport for remote streaming
195
+ - **Event Bus (RISE-002)** distributes deltas to all connected clients
196
+ - **Session Persistence (RISE-018)** stores the final assembled message and parts
197
+ - **Structured Logging (RISE-007)** logs streaming metrics: delta count, latency, coalescing events
198
+ - **Named Error System (RISE-006)** provides StreamAbortedError, DeltaParseError, BackpressureError
199
+
200
+ ## Creative Advancement Scenarios
201
+
202
+ **Scenario 1 — Instant Feedback:**
203
+ The developer sends a complex prompt. Within 200ms, the first word appears. They immediately see the agent is on the right track — discussing the correct file and approach. Without streaming, they would have waited 15 seconds before seeing anything, wondering if the agent understood.
204
+
205
+ **Scenario 2 — Early Cancellation:**
206
+ The agent starts generating a response that misunderstands the task. After seeing 3 sentences of wrong-headed approach, the developer hits Ctrl+C. Generation stops, saving ~2000 tokens of wasted output. The developer rephrases and tries again — fast iteration without cost penalty.
207
+
208
+ **Scenario 3 — Progressive Tool Visualization:**
209
+ The agent calls `grep` to search a codebase. The ToolCallStart appears with "grep" and the search pattern. ToolResultDelta events stream matching lines as grep finds them. The developer sees results populating in real-time, understanding what the agent is finding before the search completes.
210
+
211
+ **Scenario 4 — Real-Time Cost Monitoring:**
212
+ During an expensive operation (large file analysis), the MetadataDelta updates show token count climbing: 1k, 5k, 10k, 15k. The developer sees costs approaching their budget. At 18k tokens, they cancel — staying within budget. Without streaming cost updates, they would have discovered the overage only after the response completed.
@@ -0,0 +1,184 @@
1
+ # RISE-028: Multi-Provider Architecture
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/028-multi-provider-architecture.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ mia-code abstracts away the specifics of individual LLM providers behind a unified interface, enabling developers to switch between 20+ providers — OpenAI, Anthropic, Google Gemini, Mistral, Groq, XAI, and more — without changing agent definitions, tool configurations, or workflow logic. Instead of shelling out to CLI binaries with bespoke argument parsing, mia-code communicates through a common provider contract. A developer can start a session with Claude, switch mid-project to GPT for cost reasons, and later deploy with a self-hosted model — all through the same interface. The provider becomes a pluggable detail, not a structural commitment.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Structural Reality:**
13
+ - mia-code supports Gemini and Claude by shelling out to their respective CLI binaries (`gemini`, `claude`)
14
+ - Each provider integration is a custom shell script with provider-specific argument formatting
15
+ - Adding a new provider requires writing a new shell integration from scratch
16
+ - No shared interface exists — each provider has its own calling convention, output parsing, and error handling
17
+ - Model selection is tightly coupled to the binary name rather than a provider abstraction
18
+ - There is no fallback mechanism — if the configured CLI binary is unavailable, the session fails
19
+ - Provider capabilities (streaming, vision, function calling) are implicit, not declared
20
+
21
+ **Desired State:**
22
+ - A common `Provider` interface defines the contract all providers implement
23
+ - 20+ providers are available out of the box, each implementing the same interface
24
+ - Provider configuration lives in `mia-code.json` with a consistent schema
25
+ - Provider selection is explicit in agent config or inferred from the model ID prefix
26
+ - Fallback chains allow automatic failover when a provider is unavailable or rate-limited
27
+ - Custom providers can be added via the OpenAI-compatible API base class
28
+ - Provider capabilities are declared and queryable, enabling intelligent feature gating
29
+
30
+ ## Desired Outcome Definition
31
+
32
+ A developer configures three providers in `mia-code.json`: Anthropic as primary, OpenAI as fallback, and a local Ollama instance for offline work. When they invoke an agent, the system resolves the model ID to the correct provider, initializes it with stored credentials, and communicates through the unified interface. If Anthropic returns a rate limit error, the system automatically falls through to OpenAI with the equivalent model. The developer sees a brief notification of the fallback but their workflow is uninterrupted.
33
+
34
+ ## Natural Language Functional Description
35
+
36
+ ### Provider Interface
37
+
38
+ Every provider implements this contract:
39
+
40
+ ```typescript
41
+ interface Provider {
42
+ id: string; // e.g. "anthropic", "openai", "groq"
43
+ name: string; // e.g. "Anthropic", "OpenAI", "Groq"
44
+ apiEndpoint: string; // base URL for API calls
45
+ authMethod: "api_key" | "oauth" | "custom";
46
+
47
+ initialize(config: ProviderConfig): Promise<void>;
48
+ chat(messages: Message[], options: ChatOptions): Promise<AssistantMessage>;
49
+ stream(messages: Message[], options: StreamOptions): AsyncIterable<Delta>;
50
+ listModels(): Promise<ModelInfo[]>;
51
+ }
52
+
53
+ interface ProviderConfig {
54
+ apiKey?: string; // direct key or ${ENV_VAR} reference
55
+ baseURL?: string; // override default endpoint
56
+ organizationId?: string; // for multi-tenant providers
57
+ projectId?: string; // for scoped access (Vertex, Bedrock)
58
+ customHeaders?: Record<string, string>;
59
+ timeout?: number; // request timeout in ms (default: 120000)
60
+ maxRetries?: number; // retry count (default: 3)
61
+ }
62
+
63
+ interface ChatOptions {
64
+ model: string; // model ID within this provider
65
+ temperature?: number;
66
+ maxTokens?: number;
67
+ tools?: ToolDefinition[];
68
+ systemPrompt?: string;
69
+ stopSequences?: string[];
70
+ responseFormat?: "text" | "json";
71
+ }
72
+ ```
73
+
74
+ ### Supported Providers
75
+
76
+ The following providers are supported with dedicated implementations:
77
+
78
+ | Provider | ID | Auth Method | Notable Capabilities |
79
+ |---|---|---|---|
80
+ | OpenAI | `openai` | api_key | GPT-4o, o1, o3, function calling, vision, JSON mode |
81
+ | Anthropic | `anthropic` | api_key | Claude family, extended thinking, cache control |
82
+ | Google Gemini API | `google` | api_key | Gemini 2.5, grounding, long context |
83
+ | Mistral | `mistral` | api_key | Mistral Large, code generation, function calling |
84
+ | Groq | `groq` | api_key | Ultra-fast inference, Llama/Mixtral hosting |
85
+ | XAI | `xai` | api_key | Grok models |
86
+ | DeepInfra | `deepinfra` | api_key | Open model hosting, competitive pricing |
87
+ | Cerebras | `cerebras` | api_key | Wafer-scale inference, extreme speed |
88
+ | Cohere | `cohere` | api_key | Command R+, RAG-optimized, reranking |
89
+ | Azure OpenAI | `azure` | api_key/oauth | Enterprise OpenAI, regional deployments |
90
+ | Google Vertex AI | `vertex` | oauth | Gemini via GCP, enterprise features |
91
+ | Amazon Bedrock | `bedrock` | custom | Multi-model access via AWS, IAM auth |
92
+ | GitHub Copilot | `copilot` | oauth | Copilot API access, GitHub-integrated auth |
93
+ | OpenRouter | `openrouter` | api_key | Multi-model gateway, unified billing |
94
+ | Together.AI | `together` | api_key | Open model hosting, fine-tuning |
95
+ | Custom (OpenAI-compat) | `custom` | api_key | Any OpenAI-compatible endpoint |
96
+
97
+ ### Configuration Schema
98
+
99
+ Provider configuration in `mia-code.json`:
100
+
101
+ ```json
102
+ {
103
+ "provider": {
104
+ "anthropic": {
105
+ "apiKey": "${ANTHROPIC_API_KEY}",
106
+ "baseURL": "https://api.anthropic.com"
107
+ },
108
+ "openai": {
109
+ "apiKey": "${OPENAI_API_KEY}"
110
+ },
111
+ "custom": {
112
+ "apiKey": "sk-local-...",
113
+ "baseURL": "http://localhost:11434/v1",
114
+ "name": "Local Ollama"
115
+ }
116
+ }
117
+ }
118
+ ```
119
+
120
+ ### Provider Resolution
121
+
122
+ When a model ID is specified (e.g. `claude-sonnet-4-20250514`), the system resolves it to a provider:
123
+
124
+ 1. **Explicit provider:** agent config specifies `provider: "anthropic"` — use that provider directly
125
+ 2. **Model prefix match:** model ID is looked up in the model registry (RISE-030) which maps models to providers
126
+ 3. **Fallback scan:** iterate configured providers, call `listModels()`, find which provider serves this model
127
+ 4. **Error:** if no provider serves the model, emit a `ProviderResolutionError` with suggestions
128
+
129
+ ### Fallback Chains
130
+
131
+ Fallback is configured per-agent or globally:
132
+
133
+ ```json
134
+ {
135
+ "fallback": ["anthropic", "openai", "custom"],
136
+ "fallbackTriggers": ["rate_limit", "auth_failure", "server_error"]
137
+ }
138
+ ```
139
+
140
+ When the primary provider returns a triggering error:
141
+ 1. Log the failure with provider ID, error type, and model
142
+ 2. Select the next provider in the fallback chain
143
+ 3. Map the model to an equivalent on the fallback provider (e.g. `claude-sonnet-4-20250514` → `gpt-4o`)
144
+ 4. Retry the request on the fallback provider
145
+ 5. Notify the developer of the fallback via a status message
146
+
147
+ ### Custom Provider Registration
148
+
149
+ Developers can register custom providers for OpenAI-compatible endpoints:
150
+
151
+ ```typescript
152
+ interface CustomProviderConfig extends ProviderConfig {
153
+ id: string; // unique custom provider ID
154
+ name: string; // display name
155
+ models?: ModelInfo[]; // manually declared model list
156
+ capabilities?: string[]; // e.g. ["streaming", "function_calling"]
157
+ }
158
+ ```
159
+
160
+ Custom providers inherit the OpenAI-compatible base implementation and only need endpoint and auth configuration.
161
+
162
+ ## Supporting Structures
163
+
164
+ - **Provider Authentication (RISE-029)** handles credential management for each provider
165
+ - **Model Registry (RISE-030)** maps model IDs to providers and capabilities
166
+ - **Provider Transform Pipeline (RISE-032)** normalizes request/response formats per provider
167
+ - **Provider SDK Abstraction (RISE-033)** wraps low-level API communication
168
+ - **Agent Definition Config (RISE-010)** references providers in agent model selection
169
+ - **Named Error System (RISE-006)** provides ProviderResolutionError, ProviderUnavailableError, FallbackExhaustedError
170
+ - **Structured Logging (RISE-007)** logs provider selection, fallback events, and latency metrics
171
+
172
+ ## Creative Advancement Scenarios
173
+
174
+ **Scenario 1 — Seamless Provider Switch:**
175
+ A developer has been using Claude for a complex refactoring session. Anthropic's API goes down for maintenance. mia-code automatically falls back to OpenAI, mapping `claude-sonnet-4-20250514` to `gpt-4o`. The developer sees "⚠ Switched to OpenAI (Anthropic unavailable)" and continues working without restarting the session or reconfiguring anything.
176
+
177
+ **Scenario 2 — Cost-Optimized Agent Hierarchy:**
178
+ A developer configures the main coding agent with `claude-sonnet-4-20250514` (high capability) and the explore sub-agent with `llama-3.1-70b` on Groq (fast and cheap). Each agent uses its designated provider through the same interface. The developer gets quality where it matters and speed where it doesn't — all through provider configuration, not code changes.
179
+
180
+ **Scenario 3 — Air-Gapped Development:**
181
+ A developer on a classified network configures a custom provider pointing to a self-hosted vLLM instance at `http://internal-gpu:8000/v1`. They register it as an OpenAI-compatible custom provider with their organization's fine-tuned model. mia-code treats it identically to any cloud provider — same tools, same streaming, same session management.
182
+
183
+ **Scenario 4 — Provider Evaluation:**
184
+ A team wants to compare Claude vs GPT vs Gemini for their codebase. They configure all three providers and run the same set of tasks, switching the agent's model between runs. Cost tracking (RISE-031) records per-provider expenses. After a week, they have concrete data on quality, speed, and cost per provider — enabling an informed decision.