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,155 @@
1
+ # RISE-006: Named Error System
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/006-named-error-system.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ mia-code enables precise, machine-readable error handling throughout the system. Every error has a dot-notation name (`session.not_found`), a human-readable message, and optional metadata. Error handlers match on names, not on message strings. API responses serialize errors cleanly to JSON. Monitoring aggregates errors by name. No more `catch(e) { if (e.message.includes("not found")) ... }` — errors are data, not prose.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - mia-code throws raw `Error` objects with free-text messages
14
+ - Error handling relies on string matching against `error.message` — fragile and locale-dependent
15
+ - There is no hierarchy or categorization of errors — a config parse error looks the same as a network timeout
16
+ - Errors cannot carry structured metadata (which session failed, which file was missing)
17
+ - When the HTTP API (RISE-001) is added, errors must be serialized to JSON — raw Error objects lose their stack and carry only a message string
18
+ - There is no way to aggregate errors by type for monitoring or debugging
19
+
20
+ **Desired State:**
21
+ - Every error in the system is a `NamedError` with a machine-readable name, human message, and metadata
22
+ - Error names follow dot-notation: `module.error_type` (e.g., `session.not_found`, `config.invalid_field`, `agent.timeout`)
23
+ - Catch blocks match on `error.name` for reliable handling
24
+ - Errors serialize to JSON with name, message, and metadata — perfect for API responses
25
+ - Error aggregation by name enables patterns like "10 `agent.timeout` errors in the last hour"
26
+ - Raw `throw new Error(...)` is banned — linting or convention enforces `NamedError` usage
27
+
28
+ ## Desired Outcome Definition
29
+
30
+ A `NamedError` class that extends `Error` with a structured `name`, `message`, and `metadata` object. All error paths in mia-code use `NamedError`. A utility function wraps unknown caught errors into `NamedError`.
31
+
32
+ ## Natural Language Functional Description
33
+
34
+ ### NamedError Class
35
+
36
+ ```typescript
37
+ class NamedError extends Error {
38
+ readonly name: string; // dot-notation: "session.not_found"
39
+ readonly message: string; // human-readable: "Session not found"
40
+ readonly metadata: Record<string, unknown>; // structured context
41
+
42
+ constructor(
43
+ name: string,
44
+ message: string,
45
+ metadata?: Record<string, unknown>
46
+ ) {
47
+ super(message);
48
+ this.name = name;
49
+ this.metadata = metadata ?? {};
50
+ }
51
+
52
+ toJSON(): { name: string; message: string; metadata: Record<string, unknown> } {
53
+ return { name: this.name, message: this.message, metadata: this.metadata };
54
+ }
55
+ }
56
+ ```
57
+
58
+ ### Throwing Named Errors
59
+
60
+ Modules throw NamedErrors with descriptive names and relevant metadata:
61
+
62
+ ```typescript
63
+ throw new NamedError("session.not_found", "Session not found", {
64
+ sessionId: "abc-123", projectRoot: "/home/dev/myproject",
65
+ });
66
+
67
+ throw new NamedError("config.invalid_field", "Invalid configuration value", {
68
+ field: "defaultEngine", value: "gpt4", expected: ["gemini", "claude"],
69
+ });
70
+
71
+ throw new NamedError("agent.timeout", "Agent did not respond within timeout", {
72
+ engine: "gemini", timeoutMs: 30000, sessionId: "abc-123",
73
+ });
74
+ ```
75
+
76
+ ### Catching by Name
77
+
78
+ Error handlers match on the `name` property for reliable dispatch:
79
+
80
+ ```typescript
81
+ try {
82
+ await Session.resume(sessionId);
83
+ } catch (e) {
84
+ if (e instanceof NamedError && e.name === "session.not_found") {
85
+ return await Session.create({ projectRoot });
86
+ }
87
+ throw e;
88
+ }
89
+ ```
90
+
91
+ ### Wrapping Unknown Errors
92
+
93
+ When catching errors from third-party code or the runtime, wrap them into NamedErrors:
94
+
95
+ ```typescript
96
+ function wrapError(error: unknown, name: string): NamedError {
97
+ if (error instanceof NamedError) return error;
98
+ if (error instanceof Error) {
99
+ return new NamedError(name, error.message, {
100
+ originalName: error.name,
101
+ stack: error.stack,
102
+ });
103
+ }
104
+ return new NamedError(name, String(error));
105
+ }
106
+
107
+ // Usage
108
+ try {
109
+ await fs.readFile(path);
110
+ } catch (e) {
111
+ throw wrapError(e, "fs.read_failed");
112
+ }
113
+ ```
114
+
115
+ ### Error Name Conventions
116
+
117
+ Names follow `module.error_type` pattern:
118
+
119
+ | Module | Error Names |
120
+ |-----------|-----------------------------------------------------------------|
121
+ | session | `session.not_found`, `session.corrupted`, `session.limit_reached` |
122
+ | config | `config.invalid_field`, `config.file_unreadable`, `config.parse_failed` |
123
+ | agent | `agent.timeout`, `agent.process_failed`, `agent.invalid_response` |
124
+ | tool | `tool.not_found`, `tool.execution_failed`, `tool.permission_denied` |
125
+ | bus | `bus.invalid_payload`, `bus.handler_failed` |
126
+ | api | `api.unauthorized`, `api.invalid_request`, `api.rate_limited` |
127
+
128
+ ### API Error Serialization
129
+
130
+ The HTTP server (RISE-001) catches NamedErrors and serializes them via `err.toJSON()`, mapping error names to HTTP status codes (`session.not_found` → 404, `config.invalid_field` → 400, `api.unauthorized` → 401, `agent.timeout` → 504). Unknown NamedErrors default to 500.
131
+
132
+ ### Integration with Zod Validation
133
+
134
+ A utility `parseOrThrow(schema, data, errorName)` wraps `schema.safeParse()` — on failure, it throws a `NamedError` with the given name and the first Zod issue as the message, with all issues in metadata.
135
+
136
+ ## Supporting Structures
137
+
138
+ - **Zod Schema Validation (RISE-005)** generates validation errors that are wrapped into NamedErrors
139
+ - **Event Bus (RISE-002)** uses NamedErrors for invalid payload errors
140
+ - **Structured Logging (RISE-007)** logs NamedErrors with their name and metadata as structured fields
141
+ - **Client-Server Architecture (RISE-001)** serializes NamedErrors to JSON for API responses
142
+
143
+ ## Creative Advancement Scenarios
144
+
145
+ **Scenario 1 — Graceful Session Recovery:**
146
+ `Session.resume()` throws `NamedError("session.corrupted", ...)`. The caller catches it by name, deletes the corrupted session, and creates a fresh one. The user sees "Session was corrupted, starting fresh" — not a stack trace.
147
+
148
+ **Scenario 2 — API Error Response:**
149
+ A client sends an invalid request. The server catches the NamedError and returns `{"name":"config.invalid_field","message":"Invalid engine 'gpt4'","metadata":{"field":"engine","expected":["gemini","claude"]}}`. The client renders a specific, helpful error message.
150
+
151
+ **Scenario 3 — Error Metrics Dashboard:**
152
+ A monitoring module subscribes to `Error.Event.Occurred` on the event bus. It counts errors by name. The team sees that `agent.timeout` spiked — Gemini's API is slow today. They switch the default engine to Claude.
153
+
154
+ **Scenario 4 — Third-Party Error Wrapping:**
155
+ The Gemini CLI process crashes with an opaque error. The agent module catches it and wraps it: `NamedError("agent.process_failed", "Gemini CLI exited with code 1", { stderr: "..." })`. Upstream code handles it by name without parsing stderr.
@@ -0,0 +1,138 @@
1
+ # RISE-007: Structured Logging
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/007-structured-logging.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ mia-code enables observable, filterable, structured logging across every module. Every log line carries a service tag, a level, a timestamp, and structured metadata — not a concatenated string. Developers debug by filtering: `MIA_LOG=session:debug,agent:warn` shows verbose session logs and only agent warnings. In production, logs are JSON lines. In development, logs are human-readable. No `console.log` survives — all output flows through the Log system.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - mia-code uses `console.log` and chalk-styled output directly in business logic
14
+ - There is no distinction between "output for the user" and "output for debugging" — both go to stdout
15
+ - Debugging requires adding and removing `console.log` statements manually
16
+ - There is no way to enable verbose logging for one module without drowning in output from others
17
+ - Log lines carry no structured context — a message like `"Session created"` doesn't tell you which session or which project
18
+ - When the HTTP server (RISE-001) runs headlessly, console output is lost unless piped to a file
19
+
20
+ **Desired State:**
21
+ - Every module creates a tagged logger: `const log = Log.create({ service: "session" })`
22
+ - Log calls include structured metadata: `log.info("created", { sessionId, projectRoot })`
23
+ - Log levels (debug, info, warn, error) filter output by severity
24
+ - Per-module log level control via environment variable: `MIA_LOG=session:debug,agent:info`
25
+ - Development mode: human-readable colored output with timestamps
26
+ - Production/headless mode: JSON lines for machine parsing
27
+ - User-facing output (the TUI) is separate from logging — logs go to stderr or a file, UI goes to stdout
28
+
29
+ ## Desired Outcome Definition
30
+
31
+ A `Log` module that provides per-service tagged loggers with structured metadata, configurable levels, and environment-based filtering.
32
+
33
+ ## Natural Language Functional Description
34
+
35
+ ### Logger Creation
36
+
37
+ Each module creates a logger with a service tag:
38
+
39
+ ```typescript
40
+ import { Log } from "./log";
41
+
42
+ const log = Log.create({ service: "session" });
43
+
44
+ log.debug("loading index", { path: "~/.mia-code-sessions.json" });
45
+ log.info("created", { sessionId: "abc-123", projectRoot: "/dev/myproject" });
46
+ log.warn("stale session", { sessionId: "old-456", ageHours: 72 });
47
+ log.error("failed to save", { path: "~/.mia-code-sessions.json", error: err.message });
48
+ ```
49
+
50
+ ### Log Levels
51
+
52
+ Four levels in ascending severity:
53
+
54
+ | Level | Purpose | Default visibility |
55
+ |-------|---------|-------------------|
56
+ | `debug` | Detailed internal state, iteration steps, raw data | Hidden |
57
+ | `info` | Significant state changes, lifecycle events | Visible |
58
+ | `warn` | Recoverable issues, degraded behavior | Visible |
59
+ | `error` | Failures that prevent normal operation | Visible |
60
+
61
+ ### Log Output Format
62
+
63
+ **Development mode** (when stdout is a TTY):
64
+
65
+ ```
66
+ 12:34:56.789 [session] INFO created sessionId=abc-123 projectRoot=/dev/myproject
67
+ 12:34:56.790 [agent] DEBUG spawning engine=gemini model=gemini-2.5-pro
68
+ 12:34:57.123 [agent] WARN slow response elapsed=2341ms threshold=2000ms
69
+ ```
70
+
71
+ Format: `HH:mm:ss.SSS [service] LEVEL message key=value key=value`
72
+
73
+ Colors: debug=gray, info=blue, warn=yellow, error=red. Service tag is cyan. Keys are dimmed.
74
+
75
+ **Production mode** (when stdout is not a TTY, or `MIA_LOG_FORMAT=json`):
76
+
77
+ ```json
78
+ {"ts":"2025-02-17T04:47:57.789Z","service":"session","level":"info","msg":"created","sessionId":"abc-123","projectRoot":"/dev/myproject"}
79
+ ```
80
+
81
+ One JSON object per line. Fields: `ts` (ISO 8601), `service`, `level`, `msg`, and all metadata keys flattened into the object.
82
+
83
+ ### Level Filtering
84
+
85
+ The `MIA_LOG` environment variable controls per-module levels: `MIA_LOG=info,session:debug,agent:error`. Comma-separated entries; bare levels set the global default, `module:level` sets overrides. Per-module takes precedence.
86
+
87
+ ### Separation from UI Output
88
+
89
+ UI output (prompts, agent responses, ceremony) goes to **stdout** via chalk/ora. Log output goes to **stderr** (or `MIA_LOG_FILE`). This means `mia-code 2>debug.log` captures logs without disrupting the TUI.
90
+
91
+ ### Error Logging with NamedError
92
+
93
+ When logging errors, the logger extracts NamedError fields automatically:
94
+
95
+ ```typescript
96
+ try {
97
+ await Session.resume(id);
98
+ } catch (e) {
99
+ log.error("resume failed", {
100
+ sessionId: id,
101
+ ...(e instanceof NamedError ? { errorName: e.name, ...e.metadata } : { error: String(e) }),
102
+ });
103
+ }
104
+ ```
105
+
106
+ This produces structured log entries like:
107
+ ```json
108
+ {"ts":"...","service":"session","level":"error","msg":"resume failed","sessionId":"abc-123","errorName":"session.corrupted","reason":"invalid JSON"}
109
+ ```
110
+
111
+ ### Child Loggers
112
+
113
+ `log.child({ sessionId: "abc-123", operation: "resume" })` creates a child logger with pre-bound context. Every log call from the child includes the bound fields automatically. The child inherits the parent's service tag and level.
114
+
115
+ ### No Console.log
116
+
117
+ Zero `console.log`/`console.warn`/`console.error` in production code. All output goes through `Log` (debugging → stderr) or chalk/ora formatting (user-facing UI → stdout).
118
+
119
+ ## Supporting Structures
120
+
121
+ - **Named Error System (RISE-006)** provides structured error data that loggers extract automatically
122
+ - **Event Bus (RISE-002)** can subscribe to error events and log them centrally
123
+ - **Instance State (RISE-003)** scopes logger context to the active project
124
+ - **Client-Server Architecture (RISE-001)** uses JSON log format for server-side observability
125
+
126
+ ## Creative Advancement Scenarios
127
+
128
+ **Scenario 1 — Debugging a Session Resume Failure:**
129
+ A user reports that session resume fails silently. The developer asks them to run `MIA_LOG=session:debug mia-code` and share the output. The debug logs show: `loading index path=~/.mia-code-sessions.json`, `found session sessionId=abc-123`, `resume failed errorName=agent.process_failed stderr="API key expired"`. Root cause identified in one exchange.
130
+
131
+ **Scenario 2 — Server Log Aggregation:**
132
+ The mia-code server runs with `MIA_LOG_FORMAT=json MIA_LOG_FILE=/var/log/mia-code.log`. A log aggregator (like `tail -f | jq`) processes JSON lines. The ops team queries: "show all `level:error` entries from `service:agent` in the last hour."
133
+
134
+ **Scenario 3 — Isolating a Noisy Module:**
135
+ During development, the agent module emits hundreds of debug lines per request. The developer sets `MIA_LOG=debug,agent:warn` — full debug output from session, config, and bus modules, but only warnings and errors from agent. Signal without noise.
136
+
137
+ **Scenario 4 — CI Pipeline Logging:**
138
+ In CI, mia-code runs headlessly with `MIA_LOG=info MIA_LOG_FORMAT=json`. Logs are JSON lines captured by the CI system. On failure, the CI shows structured error entries with full metadata — no need to reproduce the failure locally.
@@ -0,0 +1,127 @@
1
+ # RISE-008: Lazy Initialization
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/008-lazy-initialization.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ mia-code enables fast startup by deferring expensive work until it is actually needed. A database connection, an LSP server, an MCP transport, a provider API client — none of these initialize at startup. They initialize on first use, cache the result, and return it instantly on every subsequent access. The user types their first prompt in milliseconds; the heavy resources spin up in the background as the agent needs them.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - mia-code spawns agent CLI processes (Gemini, Claude) at the start of a session — even if the user hasn't typed a prompt yet
14
+ - Configuration is loaded synchronously at startup via `loadConfig()` in `config.ts`, blocking the main thread
15
+ - Session index is loaded from disk on every operation — no caching between calls within the same process
16
+ - If mia-code adds features like database-backed sessions, LSP integration, or MCP connections, each adds to startup latency
17
+ - There is no pattern for "initialize once, reuse forever" — developers either use module-level variables (no cleanup) or re-initialize on every call (no caching)
18
+
19
+ **Desired State:**
20
+ - Expensive resources initialize only when first accessed
21
+ - Subsequent accesses return the cached result with zero overhead
22
+ - Concurrent first-access calls share one initialization — no double-init
23
+ - Resources can register cleanup callbacks for graceful shutdown
24
+ - The pattern is generic, composable, and type-safe
25
+ - Startup time remains constant regardless of how many lazy resources are declared
26
+
27
+ ## Desired Outcome Definition
28
+
29
+ A `lazy<T>(factory, dispose?)` function that returns an accessor. The accessor runs the factory on first call, caches the result, and returns it on subsequent calls. Concurrent first calls share one initialization. An optional dispose callback enables cleanup.
30
+
31
+ ## Natural Language Functional Description
32
+
33
+ ### Basic Usage
34
+
35
+ ```typescript
36
+ import { lazy } from "./lazy";
37
+
38
+ const db = lazy(async () => {
39
+ const connection = await connectToDatabase({
40
+ path: "~/.mia-code/sessions.db",
41
+ });
42
+ await connection.migrate();
43
+ return connection;
44
+ });
45
+
46
+ // Later, anywhere in the codebase:
47
+ const conn = await db(); // first call: connects and migrates
48
+ const conn2 = await db(); // subsequent call: returns same connection instantly
49
+ console.log(conn === conn2); // true
50
+ ```
51
+
52
+ ### Implementation
53
+
54
+ The `lazy` function wraps a factory in a stateful accessor. It stores three pieces of state: the in-flight promise (for concurrent safety), the resolved value, and an initialized flag. On first call, it runs the factory and stores the promise. On subsequent calls, it returns the cached value. The accessor exposes `dispose()` (runs cleanup, resets state so next access re-initializes) and `isInitialized()` (check without triggering init).
55
+
56
+ ### Concurrent Safety
57
+
58
+ If two code paths call `await db()` simultaneously before initialization completes, both receive the same promise. The factory runs exactly once — the second caller sees the in-flight promise and awaits it.
59
+
60
+ ### Synchronous Variant
61
+
62
+ `lazySync<T>(factory, dispose?)` provides the same pattern for synchronous initialization (e.g., parsing a config file). Same API shape, minus the `async`.
63
+
64
+ ### Disposal and Reset
65
+
66
+ Calling `dispose()` runs the cleanup callback and resets the accessor. The next call re-runs the factory, returning a fresh resource.
67
+
68
+ ### Use Cases in mia-code
69
+
70
+ **Database connection** (when migrating from JSON file to SQLite):
71
+ ```typescript
72
+ const db = lazy(async () => {
73
+ const conn = await openDatabase("~/.mia-code/sessions.db");
74
+ await conn.exec(SCHEMA_SQL);
75
+ return conn;
76
+ }, async (conn) => conn.close());
77
+ ```
78
+
79
+ **Agent process pool:**
80
+ ```typescript
81
+ const agentProcess = lazy(async () => {
82
+ const proc = spawn("gemini", ["--headless"], { stdio: "pipe" });
83
+ await waitForReady(proc);
84
+ return proc;
85
+ }, async (proc) => {
86
+ proc.kill("SIGTERM");
87
+ await waitForExit(proc);
88
+ });
89
+ ```
90
+
91
+ **Configuration:**
92
+ ```typescript
93
+ const config = lazy(async () => {
94
+ const raw = await readFile("~/.mia-code.json", "utf-8").catch(() => "{}");
95
+ return ConfigSchema.parse(JSON.parse(raw));
96
+ });
97
+ ```
98
+
99
+ Other use cases follow the same pattern: MCP clients, LSP servers, provider API clients — any resource with async setup and teardown.
100
+
101
+ ### Composition with Instance State
102
+
103
+ `Instance.state()` (RISE-003) is built on `lazy()`, adding project-directory scoping and automatic cleanup on instance disposal: `lazy()` = init once + cache + optional dispose; `Instance.state()` = `lazy()` + directory scope + auto-dispose on teardown.
104
+
105
+ ### Global Dispose All
106
+
107
+ A registry tracks all lazy accessors. On process shutdown (`SIGTERM`), `disposeAll()` iterates the registry in reverse creation order (LIFO), calling `dispose()` on each. This ensures orderly cleanup without manual bookkeeping.
108
+
109
+ ## Supporting Structures
110
+
111
+ - **Instance State (RISE-003)** builds on lazy initialization, adding per-directory scoping
112
+ - **Client-Server Architecture (RISE-001)** benefits from lazy init — server resources initialize on first request, not on server start
113
+ - **Structured Logging (RISE-007)** can observe initialization timing via lazy wrappers that log init duration
114
+
115
+ ## Creative Advancement Scenarios
116
+
117
+ **Scenario 1 — Instant Startup:**
118
+ A developer runs `mia-code`. The TUI appears instantly. They type a prompt. Only then does the agent process spawn, the session database open, and the config load. Startup time: ~50ms. First-prompt latency absorbs the initialization cost invisibly.
119
+
120
+ **Scenario 2 — Unused Resource Never Initializes:**
121
+ mia-code has an MCP client for connecting to external tool servers. If the user never invokes an MCP tool, the client never initializes. Zero cost for features not used.
122
+
123
+ **Scenario 3 — Graceful Shutdown:**
124
+ The user presses Ctrl+C. The process handler calls `disposeAll()`. Each lazy accessor's dispose callback runs: the database connection closes cleanly (flushing pending writes), the agent process receives SIGTERM (not SIGKILL), the LSP server shuts down gracefully. No orphan processes, no corrupted files.
125
+
126
+ **Scenario 4 — Reconnection After Error:**
127
+ The database connection drops. The code calls `db.dispose()` to reset the lazy accessor, then `await db()` to reconnect. The factory runs again, establishing a fresh connection. The reset-and-retry pattern is natural with lazy accessors.
@@ -0,0 +1,97 @@
1
+ # RISE-009: Multi-Agent System
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/009-multi-agent-system.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ mia-code enables developers to work with multiple specialized agents within a single application, each possessing distinct capabilities, permissions, and purposes. Instead of one monolithic agent that does everything, users select the right agent for the right task — a focused explorer for codebase discovery, a cautious planner for analysis, a powerful builder for execution. The agent system transforms mia-code from a single-voice tool into an ensemble of specialized collaborators, each with the 🧠 Mia / 🌸 Miette dual perspective but tuned to different operational registers.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - mia-code runs a single agent mode: the user sends a prompt, the engine (gemini/claude) responds, and the unifier interprets
14
+ - There is no concept of agent specialization — the same system prompt, permissions, and model apply to every interaction
15
+ - The engine selection (`gemini` vs `claude`) is the only axis of variation; it changes the backend but not the agent's behavior or constraints
16
+ - All tool access is uniform — there is no way to restrict an agent from editing files or running commands
17
+ - Switching between "exploration" and "execution" mindsets requires the user to mentally adjust, not the system
18
+ - The unifier treats every response identically regardless of task type
19
+
20
+ **Desired State:**
21
+ - Multiple named agents coexist in a single mia-code session, each with its own permission ruleset, system prompt, and optional model override
22
+ - Agents operate in two modes: "primary" (user-facing, full interaction loop) and "subagent" (invoked by other agents for subtasks)
23
+ - A third mode "all" marks agents available in both primary and subagent capacities
24
+ - Switching between primary agents is instantaneous via the Tab key — same session context, different capabilities
25
+ - Subagents are invoked via `@mention` syntax in user messages, delegating specific tasks to specialized agents
26
+ - Each agent's permission boundary is enforced independently — an explore agent cannot edit files even if the build agent can
27
+ - The unifier adapts its interpretation style based on which agent produced the output
28
+
29
+ ## Desired Outcome Definition
30
+
31
+ A running mia-code session offers multiple agents selectable via Tab (for primary agents) or `@mention` (for subagents). Each agent operates within its defined permission boundary, uses its configured model, and follows its system prompt. The user moves fluidly between agents without losing session context.
32
+
33
+ ## Natural Language Functional Description
34
+
35
+ ### Built-in Agents
36
+
37
+ mia-code ships with four built-in agents:
38
+
39
+ 1. **build** — The default primary agent. Full access to all tools: file read/write, bash execution, code editing, project manipulation. Uses the session's default model. System prompt emphasizes execution, implementation, and delivery. Mode: "primary".
40
+
41
+ 2. **plan** — A read-only analysis agent. File edits are denied. Bash execution requires explicit user permission per invocation. Ideal for exploring unfamiliar codebases, analyzing architecture, or planning changes before committing to them. Mode: "primary".
42
+
43
+ 3. **explore** — A fast codebase search agent. Limited to read operations and search tools (grep, glob, file viewing). Uses a faster/cheaper model by default for rapid iteration. Cannot edit, write, or execute. Mode: "all" (usable as primary or subagent).
44
+
45
+ 4. **general** — A full-capability subagent for complex multi-step tasks. Invoked by other agents when they need to delegate work that requires multiple tool calls and reasoning steps. Runs in a separate context but shares the session. Mode: "subagent".
46
+
47
+ ### Agent Properties
48
+
49
+ Each agent is defined by:
50
+
51
+ - **name**: Display name shown in UI and Tab switcher
52
+ - **description**: Brief purpose statement, shown in agent list
53
+ - **mode**: One of "primary", "subagent", or "all"
54
+ - **permissions**: A ruleset (see RISE-011) controlling tool and resource access
55
+ - **model**: Optional override `{providerID, modelID}` — defaults to session model if unset
56
+ - **prompt**: Custom system prompt template (see RISE-012) — defaults to built-in if unset
57
+ - **temperature**: Optional float (0.0–2.0) for response randomness
58
+ - **topP**: Optional float (0.0–1.0) for nucleus sampling
59
+
60
+ ### Agent Switching
61
+
62
+ Primary agents appear in a Tab-accessible switcher. The UI displays the current agent name prominently. When the user presses Tab, a selection menu shows all primary-mode agents with their descriptions. Switching is instant — the session context (message history, file state, working directory) persists, but the active permission ruleset and system prompt change immediately.
63
+
64
+ ### Subagent Invocation
65
+
66
+ Users invoke subagents by typing `@agentname` followed by a task description in their message. The current primary agent recognizes the mention, extracts the task, and delegates to the named subagent. The subagent executes within its own permission boundary and returns results to the primary agent, which synthesizes and presents them to the user.
67
+
68
+ ### Session Context Sharing
69
+
70
+ All agents in a session share: message history, file system state, working directory, environment variables, and session metadata. Each agent maintains isolated: permission boundaries, active system prompt, model selection, and tool availability. This means an explore agent can reference files the build agent modified earlier, but cannot modify them itself.
71
+
72
+ ### Unifier Adaptation
73
+
74
+ The unifier's dual 🧠/🌸 interpretation adjusts based on the active agent. Build agent output gets execution-focused commentary. Plan agent output gets analytical commentary. Explore agent output gets discovery-focused commentary. The unifier reads the agent's mode and name to calibrate its interpretive lens.
75
+
76
+ ## Supporting Structures
77
+
78
+ - **Agent Definition Config (RISE-010)** enables user-defined custom agents beyond the built-in four
79
+ - **Agent Permission Rulesets (RISE-011)** provides the permission enforcement mechanism each agent relies on
80
+ - **Agent Prompt Templates (RISE-012)** supplies the system prompt framework agents use
81
+ - **Plan/Build Mode Toggle (RISE-014)** is the primary user-facing expression of agent switching
82
+ - **Subagent Task Delegation (RISE-015)** details the `@mention` delegation protocol
83
+ - **Event Bus (RISE-002)** broadcasts agent switch events to the UI and connected clients
84
+
85
+ ## Creative Advancement Scenarios
86
+
87
+ **Scenario 1 — Exploration Before Execution:**
88
+ A developer opens a new codebase. They start in `plan` mode, asking questions about architecture and dependencies. The plan agent reads files, searches code, and builds understanding — but never modifies anything. Once the developer has a mental model, they press Tab, switch to `build`, and say "refactor the auth module as we discussed." The build agent has full context from the plan conversation and executes immediately.
89
+
90
+ **Scenario 2 — Delegated Code Search:**
91
+ While in build mode, the developer types: `@explore find all files that import the SessionStore class`. The explore agent runs rapidly through the codebase using its fast model, returns a list of files and line numbers. The build agent receives this, presents it to the user, and uses it to inform the next refactoring step.
92
+
93
+ **Scenario 3 — Custom Reviewer Agent:**
94
+ A team creates a custom "reviewer" agent (via RISE-010) with read-only permissions and a system prompt focused on code quality. During a pairing session, one developer works in build mode while the other occasionally switches to the reviewer agent to get automated code review feedback on recent changes — same session, different perspectives.
95
+
96
+ **Scenario 4 — Safe Onboarding:**
97
+ A junior developer's mia-code config sets `plan` as the default agent. They can explore, analyze, and plan freely. When they switch to `build`, additional confirmation prompts appear for destructive operations. The agent system provides guardrails without blocking productivity.
@@ -0,0 +1,135 @@
1
+ # RISE-010: Agent Definition Config
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/010-agent-definition-config.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ mia-code enables developers to define custom agents through configuration files, extending the built-in agent roster without writing code. A user describes an agent's name, purpose, model, prompt, and permissions in JSON — and the system instantiates it alongside the defaults. This transforms agent creation from a developer-only activity into a configurable, shareable, team-level practice. Custom agents become part of the project's development infrastructure, versioned alongside code.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - mia-code's configuration lives in `_env.sh` and environment variables — there is no structured config file for agent behavior
14
+ - The only behavioral axis is engine selection (`gemini` vs `claude`), controlled by CLI flags or environment variables
15
+ - There is no mechanism to define new agents, their prompts, or their constraints
16
+ - The UNIFIER_SYSTEM_PROMPT is hardcoded in the source — users cannot customize agent personalities without modifying source code
17
+ - Team-specific conventions (e.g., "always review before committing") must be enforced by human discipline, not system configuration
18
+ - No config file format exists for mia-code beyond package.json scripts
19
+
20
+ **Desired State:**
21
+ - A `mia-code.json` (or `opencode.json`) configuration file in the project root defines custom agents
22
+ - Each agent entry specifies: name, description, model override, system prompt, permission ruleset, temperature, topP, and visibility
23
+ - Custom agents merge with built-in agents — they extend, not replace
24
+ - The config file is human-readable JSON, easily diffable, and version-controllable
25
+ - Hidden agents can exist for programmatic invocation without cluttering the agent list
26
+ - Agent definitions support inheritance — custom agents start with default permissions and override selectively
27
+
28
+ ## Desired Outcome Definition
29
+
30
+ A developer creates a `mia-code.json` file in their project root containing custom agent definitions. When mia-code starts, it reads this config, merges custom agents with built-ins, and makes all agents available in the session. Custom agents behave identically to built-in ones — same switching, same permission enforcement, same unifier interpretation.
31
+
32
+ ## Natural Language Functional Description
33
+
34
+ ### Configuration File Location
35
+
36
+ mia-code searches for configuration in this order:
37
+ 1. `mia-code.json` in the current working directory
38
+ 2. `opencode.json` in the current working directory
39
+ 3. `~/.config/mia-code/config.json` for global defaults
40
+
41
+ Project-level config overrides global config. Multiple config sources merge with project-level taking precedence.
42
+
43
+ ### Agent Definition Schema
44
+
45
+ Each agent is defined under the `"agent"` key, keyed by a unique identifier:
46
+
47
+ ```json
48
+ {
49
+ "agent": {
50
+ "reviewer": {
51
+ "name": "Code Reviewer",
52
+ "description": "Reviews code changes for quality, security, and style issues",
53
+ "model": {
54
+ "providerID": "anthropic",
55
+ "modelID": "claude-sonnet-4-20250514"
56
+ },
57
+ "prompt": "You are a code reviewer. Focus on bugs, security vulnerabilities, and logic errors. Never modify code directly — only suggest changes.",
58
+ "permissions": [
59
+ {"permission": "write", "action": "deny"},
60
+ {"permission": "edit", "action": "deny"},
61
+ {"permission": "read", "action": "allow"},
62
+ {"permission": "bash", "action": "ask"}
63
+ ],
64
+ "temperature": 0.3,
65
+ "topP": 0.9,
66
+ "hidden": false
67
+ }
68
+ }
69
+ }
70
+ ```
71
+
72
+ ### Field Definitions
73
+
74
+ - **name** (string, required): Human-readable display name. Shown in Tab switcher and agent list.
75
+ - **description** (string, optional): Brief purpose statement. Shown alongside name in selection UI. Defaults to empty.
76
+ - **model** (object, optional): `{providerID: string, modelID: string}`. When omitted, the agent uses the session's default model. `providerID` maps to a configured API provider (e.g., "anthropic", "google", "openai"). `modelID` is the specific model identifier.
77
+ - **prompt** (string, optional): Custom system prompt text. Replaces the default agent prompt template. Supports variable interpolation (see RISE-012). Can be a multi-line string or a file path prefixed with `@` (e.g., `"@prompts/reviewer.md"`).
78
+ - **permissions** (array, optional): Permission ruleset array (see RISE-011). Merged with default permissions — custom rules take precedence over defaults.
79
+ - **temperature** (number, optional): Float 0.0–2.0. Controls response randomness. Lower values for deterministic tasks (code review), higher for creative tasks (brainstorming).
80
+ - **topP** (number, optional): Float 0.0–1.0. Nucleus sampling parameter. Defaults to model-specific value.
81
+ - **hidden** (boolean, optional): When `true`, the agent does not appear in the Tab switcher or agent list. It remains invocable via `@mention` or programmatic API. Useful for internal/utility agents.
82
+
83
+ ### Merging with Built-in Agents
84
+
85
+ Custom agents are added to the agent roster alongside built-in agents (build, plan, explore, general). If a custom agent uses the same key as a built-in (e.g., `"build"`), the custom definition overrides the built-in fields selectively — unspecified fields retain their built-in defaults. This enables users to customize built-in agents without redefining them entirely.
86
+
87
+ ### Validation
88
+
89
+ On startup, mia-code validates the config:
90
+ - Agent keys must be unique lowercase alphanumeric identifiers (no spaces, hyphens allowed)
91
+ - Model references must point to configured providers
92
+ - Permission rules must use valid action values ("allow", "deny", "ask")
93
+ - Temperature and topP must be within valid ranges
94
+ - Invalid agent definitions emit a warning and are skipped — they do not prevent startup
95
+
96
+ ### File-Based Prompts
97
+
98
+ When the `prompt` field starts with `@`, the remainder is treated as a relative file path. mia-code reads the file contents as the prompt text. This enables long, structured prompts stored in dedicated files:
99
+
100
+ ```json
101
+ {
102
+ "agent": {
103
+ "architect": {
104
+ "name": "System Architect",
105
+ "prompt": "@.mia-code/prompts/architect.md"
106
+ }
107
+ }
108
+ }
109
+ ```
110
+
111
+ ### Runtime Behavior
112
+
113
+ Custom agents are instantiated at session start. They participate in the same lifecycle as built-in agents: Tab switching, `@mention` invocation, permission enforcement, and unifier interpretation. The agent system makes no distinction between built-in and custom agents at runtime.
114
+
115
+ ## Supporting Structures
116
+
117
+ - **Multi-Agent System (RISE-009)** defines the agent architecture that custom definitions plug into
118
+ - **Agent Permission Rulesets (RISE-011)** specifies the permission array format used in agent definitions
119
+ - **Agent Prompt Templates (RISE-012)** defines variable interpolation available in custom prompts
120
+ - **Agent Generation (RISE-013)** can produce agent definitions that are saved directly to this config format
121
+ - **Namespace Module Pattern (RISE-004)** guides the config loading module structure
122
+
123
+ ## Creative Advancement Scenarios
124
+
125
+ **Scenario 1 — Team-Wide Code Standards:**
126
+ A team adds a `mia-code.json` to their repository defining a "standards" agent with a prompt encoding their code conventions, naming rules, and architectural patterns. Every developer who clones the repo gets the same standards agent. Code reviews become consistent because the agent enforces shared expectations.
127
+
128
+ **Scenario 2 — Project-Specific Security Agent:**
129
+ A fintech project defines a "security" agent with deny rules for any file matching `*.key`, `*.pem`, or `*.env`, and a prompt focused on OWASP top-10 vulnerabilities. The agent reviews changes through a security lens. It's hidden by default and invoked via `@security` when needed.
130
+
131
+ **Scenario 3 — Lightweight Exploration Override:**
132
+ A developer overrides the built-in `explore` agent to use Google's Gemini Flash model for even faster responses: `{"agent": {"explore": {"model": {"providerID": "google", "modelID": "gemini-2.0-flash"}}}}`. The explore agent now runs on a fast, cheap model while build stays on Claude Sonnet.
133
+
134
+ **Scenario 4 — Prompt Iteration Workflow:**
135
+ A developer creates `@.mia-code/prompts/reviewer.md` containing a detailed review prompt. They iterate on the prompt file, restarting mia-code to test changes. Once satisfied, they commit both the config and prompt file. The agent definition evolves with the project.