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,128 @@
1
+ # RISE-078: Snapshot Restore
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/078-snapshot-restore.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ Any snapshot becomes a recovery point — the developer can rewind the workspace to any captured state with a single command. Whether undoing the last edit or reverting an entire sequence of changes, restore operations are safe, documented, and themselves reversible. The agent's workspace becomes a timeline the developer can scrub backward through.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - mia-code has no snapshot system, so no restore capability exists
14
+ - Reverting agent changes requires manual `git checkout` per file or `git stash`
15
+ - No way to undo a specific tool call while keeping later changes
16
+ - Partial reverts (restoring specific files) require knowing exactly which files changed
17
+ - Undo operations are not documented in session history — the developer loses context
18
+ - Restoring to a previous state risks overwriting files the developer modified independently
19
+
20
+ **Desired State:**
21
+ - `restore(hash)` reverts all files to a captured snapshot state with one operation
22
+ - `restore(hash, files)` selectively restores specific files, leaving others untouched
23
+ - A safety snapshot is automatically created before every restore (restore is itself undoable)
24
+ - Restore operations create session messages documenting what was reverted and why
25
+ - `/undo` command provides one-keystroke access to undo the most recent tool execution
26
+ - `/revert <messageId>` restores to the state before a specific message's tool calls began
27
+
28
+ ## Desired Outcome Definition
29
+
30
+ The agent edits `src/api.ts`, `src/db.ts`, and `tests/api.test.ts`. The developer likes the API changes but not the database changes. They run `/undo` to revert the last edit (restoring `tests/api.test.ts`), then selectively restore `src/db.ts` from the session-start snapshot. The API changes remain. A message in the session records what was restored.
31
+
32
+ ## Natural Language Functional Description
33
+
34
+ ### Restore Operations
35
+
36
+ **Full Restore** — `restore(hash: string)`
37
+ 1. Create a safety snapshot of the current state (so the restore itself can be undone).
38
+ 2. Read the tree object at the given hash from the snapshot repository.
39
+ 3. For each file in the tree: overwrite the working copy with the snapshot version.
40
+ 4. For files present in the working copy but not in the snapshot: leave them (don't delete new files unless explicitly requested).
41
+ 5. Record a restore event in the session.
42
+
43
+ **Selective Restore** — `restore(hash: string, files: string[])`
44
+ 1. Create a safety snapshot of the current state.
45
+ 2. For each specified file: read its content from the snapshot tree and overwrite the working copy.
46
+ 3. Files not in the `files` array are left untouched.
47
+ 4. Record which files were restored in the session.
48
+
49
+ ### Safety Snapshot
50
+
51
+ Every restore operation begins by capturing a new snapshot of the current state. This means:
52
+ - Restoring to snapshot A creates snapshot B (current state before restore)
53
+ - If the developer doesn't like the restore, they can restore to snapshot B to get back
54
+ - Restore chains are always reversible — no state is ever permanently lost
55
+
56
+ ### Commands
57
+
58
+ **`/undo`** — Undo the most recent file-modifying tool execution.
59
+ 1. Find the most recent snapshot in the session's snapshot index.
60
+ 2. Restore all files to that snapshot's state.
61
+ 3. Display: "Restored {n} files to state before {tool call description}."
62
+
63
+ **`/revert <messageId>`** — Revert to the state before a specific message.
64
+ 1. Look up the first snapshot associated with the given message ID.
65
+ 2. Restore all files to that snapshot's state.
66
+ 3. Display: "Restored to state before message #{messageId}."
67
+
68
+ **`/revert session`** — Revert to session start.
69
+ 1. Restore all files to snapshot #0 (the initial session snapshot).
70
+ 2. Display: "Restored all files to session start state."
71
+
72
+ ### Restore Respect for Gitignore
73
+
74
+ Restore operations respect the project's `.gitignore`:
75
+ - Files listed in `.gitignore` are not restored (they were likely excluded from snapshots too)
76
+ - `node_modules/`, build outputs, and other ignored directories are never touched
77
+ - This prevents restore from overwriting environment-specific files
78
+
79
+ ### Restore Notification
80
+
81
+ Every restore produces a structured session message:
82
+
83
+ ```typescript
84
+ interface RestoreMessage {
85
+ type: "restore";
86
+ snapshotHash: string;
87
+ filesRestored: string[];
88
+ filesSkipped: string[]; // gitignored or binary files
89
+ diff: FileDiff[]; // what actually changed
90
+ description: string; // human-readable summary
91
+ }
92
+ ```
93
+
94
+ Example output:
95
+ ```
96
+ ✓ Restored 3 files to state before file_edit on src/db.ts
97
+ - src/db.ts (reverted 12 lines)
98
+ - src/models/user.ts (reverted 5 lines)
99
+ - tests/db.test.ts (reverted 8 lines)
100
+ ```
101
+
102
+ ### Edge Cases
103
+
104
+ - **File deleted since snapshot:** Restore recreates the file from the snapshot.
105
+ - **File created since snapshot:** Restore does not delete it (conservative approach). User can explicitly request deletion.
106
+ - **File modified by developer AND agent:** Restore overwrites with snapshot state. The safety snapshot preserves the developer's version if needed.
107
+ - **Empty diff:** If restoring would change nothing (current state matches snapshot), skip and notify: "Already at requested state."
108
+
109
+ ## Supporting Structures
110
+
111
+ - **Snapshot System (RISE-076)** provides the snapshots that restore operations target
112
+ - **Snapshot Diff (RISE-077)** shows what a restore will change before executing
113
+ - **Session Persistence (RISE-018)** records restore events in session history
114
+ - **Permission System (RISE-074)** may require permission for restore operations (they modify files)
115
+
116
+ ## Creative Advancement Scenarios
117
+
118
+ **Scenario 1 — Quick Undo:**
119
+ The agent edits `src/auth.ts` and introduces a regression. The developer immediately types `/undo`. mia-code restores `src/auth.ts` to its pre-edit state in under a second. The session records the undo. The developer asks the agent to try a different approach.
120
+
121
+ **Scenario 2 — Selective File Restore:**
122
+ After a 10-tool-call session, the developer is happy with most changes but wants to revert `config.yml` to its original state. They restore just that file from the session-start snapshot. All other modifications remain intact.
123
+
124
+ **Scenario 3 — Undo the Undo:**
125
+ The developer runs `/undo`, then realizes the original change was actually correct. They run `/undo` again — which restores to the safety snapshot created before the first undo, effectively re-applying the original change. Every restore is reversible.
126
+
127
+ **Scenario 4 — Revert to Pre-Message State:**
128
+ The agent's response to message #5 made sweeping changes across 8 files. The developer wants to undo everything from that message but keep changes from messages #1-4. They run `/revert 5`, which restores to the snapshot captured before message #5's first tool call.
@@ -0,0 +1,122 @@
1
+ # RISE-079: Worktree Branch Naming
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/079-worktree-branch-naming.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ Agent-created worktrees get memorable, human-readable names that feel natural in conversation and git logs. Instead of UUIDs or timestamps, branches like `mia-code/swift-falcon` and `mia-code/calm-brook` give each workspace a distinct identity — easy to reference, easy to remember, easy to discuss with teammates.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - mia-code has no worktree management, so no branch naming convention exists
14
+ - Developer-created branches typically follow patterns like `feature/ticket-123` or `fix/bug-description`
15
+ - Agent-generated identifiers tend toward UUIDs or timestamps — functional but inhuman
16
+ - No collision detection mechanism exists for programmatically generated branch names
17
+ - No configurable prefix for namespacing agent branches from developer branches
18
+ - Branch cleanup after worktree removal is manual
19
+
20
+ **Desired State:**
21
+ - Worktree branches follow a `{prefix}/{adjective}-{noun}` pattern that is immediately recognizable
22
+ - Curated word pools ensure names are positive, professional, and easy to pronounce
23
+ - Collision detection tries alternative pairs before falling back to numeric suffixes
24
+ - The prefix is configurable (default `mia-code/`) to support team conventions
25
+ - Branch lifecycle is tied to worktree lifecycle — branch is deleted when worktree is removed
26
+ - Names work well in conversation: "check the swift-falcon branch" is natural
27
+
28
+ ## Desired Outcome Definition
29
+
30
+ The agent creates a worktree. The naming system randomly selects "swift" from the adjective pool and "falcon" from the noun pool. It verifies no branch `mia-code/swift-falcon` exists and no directory `.mia-code/worktrees/swift-falcon/` exists. The worktree is created with branch `mia-code/swift-falcon`. In git log, the branch is immediately identifiable as agent-created and distinguishable from developer branches.
31
+
32
+ ## Natural Language Functional Description
33
+
34
+ ### Naming Pattern
35
+
36
+ Branch names follow the pattern: `{prefix}{adjective}-{noun}`
37
+
38
+ - **Default prefix:** `mia-code/`
39
+ - **Separator:** hyphen between adjective and noun
40
+ - **Examples:** `mia-code/swift-falcon`, `mia-code/calm-brook`, `mia-code/bright-cedar`
41
+
42
+ ### Adjective Pool
43
+
44
+ Approximately 50 positive, professional adjectives:
45
+
46
+ ```
47
+ swift, bright, calm, clear, crisp, deep, fair, fast, fine, firm,
48
+ glad, keen, kind, lean, mild, neat, pure, rich, sage, warm,
49
+ wise, bold, cool, deft, dry, apt, free, full, good, hale,
50
+ just, live, new, open, peak, rare, safe, slim, soft, sure,
51
+ tall, tidy, trim, true, vast, wry, able, avid, brave, fresh
52
+ ```
53
+
54
+ ### Noun Pool
55
+
56
+ Approximately 50 nature and animal nouns:
57
+
58
+ ```
59
+ brook, cedar, crane, dawn, eagle, flame, grove, hawk, jade, lake,
60
+ maple, north, oak, peak, quail, ridge, sage, tide, vale, wave,
61
+ wolf, ash, bay, birch, cliff, cove, dune, elm, fern, finch,
62
+ frost, glade, heron, iris, ivy, knoll, lark, marsh, moss, nest,
63
+ otter, pine, plum, reef, robin, shore, stone, swift, thorn, wren
64
+ ```
65
+
66
+ ### Name Generation Algorithm
67
+
68
+ Generate a random adjective-noun pair. Check for collisions (existing branch via `git branch --list`, existing directory, existing worktree). If collision detected, retry with a new random pair (up to 10 attempts). After 10 failures, append an incrementing counter: `mia-code/swift-falcon-2`. With two pools of 50, collision probability is 1/2500 per attempt — practically impossible even with dozens of active worktrees.
69
+
70
+ ### Configuration
71
+
72
+ The branch prefix is configurable in `mia-code.json`:
73
+
74
+ ```json
75
+ {
76
+ "worktree": {
77
+ "branchPrefix": "mia-code/",
78
+ "nameFormat": "adjective-noun"
79
+ }
80
+ }
81
+ ```
82
+
83
+ Teams can customize the prefix to match their conventions (e.g., `ai/`, `agent/`, `auto/`).
84
+
85
+ ### Branch Lifecycle
86
+
87
+ - **Creation:** branch created with `git checkout -b {name}` during worktree setup
88
+ - **Active:** branch tracks all commits made within the worktree
89
+ - **Removal:** branch deleted with `git branch -D {name}` when worktree is removed
90
+ - **Pruning:** `git worktree prune` cleans stale references after removal
91
+ - **Protection:** branches with unmerged commits trigger a warning before deletion
92
+
93
+ ### Display
94
+
95
+ When listing worktrees, names are displayed with their creation time and status:
96
+
97
+ ```
98
+ Active worktrees:
99
+ ● swift-falcon (created 2h ago, 3 commits ahead)
100
+ ● calm-brook (created 1d ago, 1 commit ahead)
101
+ ○ deep-ridge (created 3d ago, merged)
102
+ ```
103
+
104
+ ## Supporting Structures
105
+
106
+ - **Git Worktree Management (RISE-075)** uses this naming system when creating worktrees
107
+ - **Session Persistence (RISE-018)** records which worktree names are associated with which sessions
108
+ - **Multi-Level Config (RISE-064)** provides the `worktree.branchPrefix` configuration
109
+
110
+ ## Creative Advancement Scenarios
111
+
112
+ **Scenario 1 — Natural Conversation:**
113
+ Developer: "What's on the swift-falcon branch?" Agent: "In swift-falcon, I implemented the caching optimization — 3 files changed, all tests passing." The name is memorable enough that both human and agent can reference it naturally.
114
+
115
+ **Scenario 2 — Team Visibility:**
116
+ A team runs `git branch -a` and sees `mia-code/calm-brook` alongside `feature/auth-redesign`. The prefix immediately identifies it as agent-created. The adjective-noun format distinguishes it from other agent branches without needing to check metadata.
117
+
118
+ **Scenario 3 — Multiple Active Worktrees:**
119
+ An agent creates three worktrees for parallel exploration. The names — `swift-falcon`, `calm-brook`, `bright-cedar` — are distinct and memorable. The developer can say "merge bright-cedar" without looking up UUIDs or timestamps.
120
+
121
+ **Scenario 4 — Collision Handling:**
122
+ In a long-running project, `swift-falcon` already exists from a previous session. The naming system detects the collision, generates a new pair `keen-maple`, and creates the worktree with that name. No manual intervention needed.
@@ -0,0 +1,134 @@
1
+ # RISE-080: SQLite Storage Layer
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/080-sqlite-storage.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ mia-code's persistence moves from fragile JSON file I/O to a proper database — SQLite provides transactional integrity, concurrent access safety, query capabilities, and efficient partial updates. The developer's session data, configuration cache, and project metadata live in a single reliable database file that never corrupts on concurrent writes and never rewrites 10MB of JSON to update one message.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - mia-code stores sessions in `~/.mia-code-sessions.json` — a single JSON file holding all session data
14
+ - Every write operation serializes the entire sessions object and overwrites the file
15
+ - Concurrent access (multiple mia-code instances) risks data corruption or loss
16
+ - No query capability — finding sessions by project, date, or model requires loading and scanning everything
17
+ - File size grows unbounded as sessions accumulate — reads become slow
18
+ - No transactional guarantees — a crash mid-write can corrupt the entire file
19
+ - Schema changes require migrating JSON manually with no versioning
20
+
21
+ **Desired State:**
22
+ - SQLite database (`~/.mia-code/data.db`) replaces JSON files as the primary storage layer
23
+ - Normalized tables (sessions, messages, parts) enable efficient queries and partial updates
24
+ - WAL mode allows concurrent reads from multiple instances without blocking
25
+ - Single connection per instance with proper locking prevents corruption
26
+ - Queries filter, sort, and join data without loading everything into memory
27
+ - Schema is versioned with migrations — evolves safely over time
28
+ - File permissions (0o600) protect sensitive session data
29
+
30
+ ## Desired Outcome Definition
31
+
32
+ mia-code starts and opens `~/.mia-code/data.db`. On first run, it creates the database with the base schema. If `~/.mia-code-sessions.json` exists, it imports existing sessions (one-time migration). Subsequent operations — creating sessions, appending messages, querying by project — use SQL queries. Two mia-code instances running simultaneously both read and write safely via WAL mode.
33
+
34
+ ## Natural Language Functional Description
35
+
36
+ ### Database Location
37
+
38
+ The database file lives at `~/.mia-code/data.db`. The directory is created if it doesn't exist. File permissions are set to `0o600` (owner read/write only) to protect session data that may contain code snippets, file contents, and conversation history.
39
+
40
+ ### Schema
41
+
42
+ Core tables:
43
+
44
+ ```sql
45
+ CREATE TABLE sessions (
46
+ id TEXT PRIMARY KEY,
47
+ project_root TEXT NOT NULL,
48
+ model TEXT,
49
+ provider TEXT,
50
+ created_at INTEGER NOT NULL,
51
+ updated_at INTEGER NOT NULL,
52
+ title TEXT,
53
+ summary TEXT,
54
+ message_count INTEGER DEFAULT 0,
55
+ cost_total REAL DEFAULT 0
56
+ );
57
+
58
+ CREATE TABLE messages (
59
+ id TEXT PRIMARY KEY,
60
+ session_id TEXT NOT NULL REFERENCES sessions(id),
61
+ role TEXT NOT NULL, -- 'user' | 'assistant' | 'system'
62
+ content TEXT,
63
+ created_at INTEGER NOT NULL,
64
+ token_input INTEGER,
65
+ token_output INTEGER,
66
+ cost REAL,
67
+ model TEXT,
68
+ tool_calls TEXT -- JSON array of tool call objects
69
+ );
70
+
71
+ CREATE TABLE parts (
72
+ id TEXT PRIMARY KEY,
73
+ message_id TEXT NOT NULL REFERENCES messages(id),
74
+ type TEXT NOT NULL, -- 'text' | 'tool_call' | 'tool_result'
75
+ content TEXT NOT NULL, -- JSON content
76
+ sequence INTEGER NOT NULL
77
+ );
78
+
79
+ CREATE TABLE projects (
80
+ root TEXT PRIMARY KEY,
81
+ name TEXT,
82
+ last_session_id TEXT,
83
+ last_accessed INTEGER
84
+ );
85
+
86
+ CREATE TABLE config_cache (
87
+ key TEXT PRIMARY KEY,
88
+ value TEXT NOT NULL,
89
+ source TEXT NOT NULL, -- 'global' | 'project' | 'env'
90
+ cached_at INTEGER NOT NULL
91
+ );
92
+
93
+ CREATE INDEX idx_messages_session ON messages(session_id, created_at);
94
+ CREATE INDEX idx_parts_message ON parts(message_id, sequence);
95
+ CREATE INDEX idx_sessions_project ON sessions(project_root, updated_at);
96
+ ```
97
+
98
+ ### Query Layer
99
+
100
+ Queries use `better-sqlite3` with TypeScript type definitions mirroring table columns for compile-time safety. Prepared statements with parameterized queries prevent SQL injection.
101
+
102
+ ### Connection Management
103
+
104
+ One database connection per mia-code instance. WAL mode (`PRAGMA journal_mode=WAL`) enables concurrent reads without blocking. Writes are serialized. Busy timeout: 5 seconds (`PRAGMA busy_timeout=5000`). Connection closed on process exit via shutdown hook.
105
+
106
+ ### Benefits Over JSON
107
+
108
+ Concurrent access safety (WAL vs. file race), partial updates (single row vs. full rewrite), query capabilities (SQL WHERE vs. load-and-filter), ACID transactions, and scalability to GB+ without degradation.
109
+
110
+ ### Database Creation
111
+
112
+ On first access: ensure `~/.mia-code/` exists, open connection (creates file if missing), enable WAL mode and busy timeout, apply pending migrations, connection ready.
113
+
114
+ ## Supporting Structures
115
+
116
+ - **Database Migrations (RISE-081)** manages schema versioning and evolution
117
+ - **Database Transactions (RISE-082)** provides atomic multi-operation guarantees
118
+ - **Deferred Effects (RISE-083)** ensures side effects only execute after successful commits
119
+ - **Session Persistence (RISE-018)** moves from JSON storage to SQLite queries
120
+ - **Managed Config Directory (RISE-070)** manages the `~/.mia-code/` directory where the database lives
121
+
122
+ ## Creative Advancement Scenarios
123
+
124
+ **Scenario 1 — Fast Session Lookup:**
125
+ A developer has 500 sessions across 20 projects. They run `mia-code sessions` in a project directory. SQLite queries `SELECT * FROM sessions WHERE project_root = ? ORDER BY updated_at DESC LIMIT 20` — instant results. The JSON approach would have loaded and scanned the entire 50MB file.
126
+
127
+ **Scenario 2 — Concurrent Instances:**
128
+ Two terminal windows run mia-code in different project directories. Both read and write session data simultaneously. WAL mode ensures reads never block and writes are serialized safely. No data corruption, no lost messages.
129
+
130
+ **Scenario 3 — Efficient Message Append:**
131
+ The agent generates a 100-message session. Each message is an `INSERT INTO messages` — only the new row is written. The JSON approach would have rewritten the entire file 100 times, each time larger than the last.
132
+
133
+ **Scenario 4 — Migration from JSON:**
134
+ A developer upgrades mia-code. On first run, the migration system detects `~/.mia-code-sessions.json`, reads it, inserts all sessions and messages into SQLite, and renames the JSON file to `.mia-code-sessions.json.migrated`. All history is preserved. Subsequent runs use SQLite exclusively.
@@ -0,0 +1,148 @@
1
+ # RISE-081: Database Migrations
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/081-database-migrations.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ The database schema evolves safely alongside the codebase. Each schema change is captured in a versioned migration that runs exactly once, in order, within a transaction. Developers never face "database out of sync" errors — mia-code auto-applies pending migrations at startup, and the migration from JSON to SQLite is itself just migration #1.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - mia-code uses a JSON file with no schema versioning — the structure is implicit in the code
14
+ - Adding a new field to sessions requires updating serialization code and hoping existing files parse correctly
15
+ - No mechanism exists to transform existing data when the schema changes
16
+ - Downgrading mia-code may break storage compatibility with no recovery path
17
+ - The JSON-to-SQLite transition (RISE-080) requires a one-time data transformation with no framework to support it
18
+ - Schema changes across versions are not tracked — users on older versions face silent data issues
19
+
20
+ **Desired State:**
21
+ - Migrations are ordered files, each with an `up()` function that applies one schema change
22
+ - A `_migrations` table tracks which migrations have been applied and when
23
+ - On startup, mia-code checks the current version and applies any pending migrations in order
24
+ - Each migration runs within a transaction — failure rolls back cleanly, leaving the database in its previous state
25
+ - Migration #1 handles the JSON-to-SQLite import, making the transition a standard migration
26
+ - Migrations are additive — columns are added, not dropped, preserving backward compatibility
27
+
28
+ ## Desired Outcome Definition
29
+
30
+ A developer updates mia-code from v1.0 to v1.3. Three new migrations exist (004, 005, 006). On startup, mia-code checks `_migrations`, finds the last applied is 003, and runs 004, 005, 006 in order within transactions. Each succeeds and is recorded. The database now has cost tracking columns (004), snapshot tables (005), and a full-text search index (006). The developer notices nothing — it just works.
31
+
32
+ ## Natural Language Functional Description
33
+
34
+ ### Migration Structure
35
+
36
+ Each migration is a TypeScript module exporting an `up()` function:
37
+
38
+ ```typescript
39
+ // migrations/001_base_tables.ts
40
+ import { Database } from "better-sqlite3";
41
+
42
+ export const version = 1;
43
+ export const description = "Create base tables for sessions, messages, and parts";
44
+
45
+ export function up(db: Database): void {
46
+ db.exec(`
47
+ CREATE TABLE sessions (
48
+ id TEXT PRIMARY KEY,
49
+ project_root TEXT NOT NULL,
50
+ model TEXT,
51
+ created_at INTEGER NOT NULL,
52
+ updated_at INTEGER NOT NULL
53
+ );
54
+ CREATE TABLE messages (
55
+ id TEXT PRIMARY KEY,
56
+ session_id TEXT NOT NULL REFERENCES sessions(id),
57
+ role TEXT NOT NULL,
58
+ content TEXT,
59
+ created_at INTEGER NOT NULL
60
+ );
61
+ `);
62
+ }
63
+ ```
64
+
65
+ ### Migration Registry
66
+
67
+ Migrations are registered in order:
68
+
69
+ ```typescript
70
+ const migrations = [
71
+ migration_001_base_tables,
72
+ migration_002_json_import,
73
+ migration_003_cost_tracking,
74
+ migration_004_snapshot_tables,
75
+ migration_005_plugin_state,
76
+ migration_006_fulltext_search,
77
+ ];
78
+ ```
79
+
80
+ ### Tracking Table
81
+
82
+ The `_migrations` table records applied migrations:
83
+
84
+ ```sql
85
+ CREATE TABLE IF NOT EXISTS _migrations (
86
+ version INTEGER PRIMARY KEY,
87
+ description TEXT NOT NULL,
88
+ applied_at INTEGER NOT NULL
89
+ );
90
+ ```
91
+
92
+ ### Startup Process
93
+
94
+ On every startup:
95
+
96
+ 1. Open database connection.
97
+ 2. Ensure `_migrations` table exists (bootstrap).
98
+ 3. Query: `SELECT MAX(version) FROM _migrations` → current version (or 0 if empty).
99
+ 4. Filter migration registry to those with `version > currentVersion`.
100
+ 5. For each pending migration, in order:
101
+ a. Begin transaction.
102
+ b. Execute `up(db)`.
103
+ c. Insert into `_migrations`: `{version, description, applied_at: now}`.
104
+ d. Commit transaction.
105
+ e. If any step fails: rollback transaction, log error, abort startup.
106
+ 6. Log: "Applied {n} migration(s), database at version {latest}."
107
+
108
+ ### Example Migrations
109
+
110
+ - **001 — Base Tables:** Creates `sessions`, `messages`, `parts`, `projects`, `config_cache` tables.
111
+ - **002 — JSON Import:** Reads `~/.mia-code-sessions.json`, imports into SQLite, renames to `.migrated`.
112
+ - **003 — Cost Tracking:** Adds `cost`, `token_input`, `token_output` columns to messages; `cost_total` to sessions.
113
+ - **004 — Snapshot Tables:** Creates `snapshots` and `snapshot_files` tables (RISE-076).
114
+ - **005 — Plugin State:** Creates `plugin_state` table for cross-session plugin data.
115
+ - **006 — Full-Text Search:** Creates FTS5 virtual table on message content.
116
+
117
+ ### Safety Principles
118
+
119
+ - **Transactional:** each migration runs in a single transaction — all or nothing.
120
+ - **Ordered:** migrations always apply in version order, never skipping.
121
+ - **Idempotent:** version check prevents re-applying already-applied migrations.
122
+ - **Additive only:** add columns/tables, don't drop them. Use defaults for new columns.
123
+ - **Forward-only:** no `down()` — rollback via database backup, not reverse migrations.
124
+
125
+ ### Error Handling
126
+
127
+ If a migration fails, the transaction rolls back, the error is logged, and mia-code refuses to start with an outdated schema. Each migration application is logged with version, description, and success/failure status.
128
+
129
+ ## Supporting Structures
130
+
131
+ - **SQLite Storage (RISE-080)** provides the database that migrations operate on
132
+ - **Database Transactions (RISE-082)** ensures each migration is atomic
133
+ - **Structured Logging (RISE-007)** records migration progress and errors
134
+ - **Managed Config Directory (RISE-070)** manages the `~/.mia-code/` directory containing the database
135
+
136
+ ## Creative Advancement Scenarios
137
+
138
+ **Scenario 1 — Seamless Upgrade:**
139
+ A developer hasn't updated mia-code in 3 months. They install the latest version. On startup, 5 pending migrations apply automatically in 200ms. Their existing sessions, messages, and configuration are preserved and enhanced with new columns. They never know migrations happened.
140
+
141
+ **Scenario 2 — JSON to SQLite Transition:**
142
+ A long-time user with 200 sessions in JSON upgrades. Migration 002 reads the JSON file, inserts all sessions and messages into SQLite, and archives the JSON. Startup takes 2 seconds for the one-time import. All history is queryable via SQL.
143
+
144
+ **Scenario 3 — Migration Failure Recovery:**
145
+ Migration 005 fails because the database file is read-only (permissions issue). The transaction rolls back. mia-code logs the error and refuses to start. The developer fixes permissions with `chmod 600 ~/.mia-code/data.db` and restarts — migration applies successfully.
146
+
147
+ **Scenario 4 — Development Workflow:**
148
+ A contributor adds a new feature requiring a schema change. They create `migration_007_add_tags.ts`, add it to the registry, and test locally. The migration applies on their dev database. PR review includes the migration file. After merge, all users get the migration on next update.
@@ -0,0 +1,138 @@
1
+ # RISE-082: Database Transactions
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/082-database-transactions.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ Every multi-step database operation is atomic — either all changes commit or none do. Paired with deferred effects, transactions ensure that the system never publishes events about data that wasn't persisted, never leaves partial session state, and never corrupts the database from a crash mid-operation. The developer's session data maintains perfect consistency.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - mia-code writes to JSON by serializing the entire object — no transactional guarantees
14
+ - A crash during JSON write can corrupt the entire sessions file
15
+ - Creating a session and adding its first message are separate operations — failure between them leaves orphaned data
16
+ - Events (if they existed) would fire before data is confirmed persisted
17
+ - No mechanism to group related operations into an atomic unit
18
+ - Concurrent writes from multiple instances can interleave, producing inconsistent state
19
+
20
+ **Desired State:**
21
+ - Related database operations are grouped in transactions that commit or rollback atomically
22
+ - Side effects (event publishing, notifications) are deferred until after successful commit
23
+ - Nested operations use savepoints for fine-grained control within a larger transaction
24
+ - Read-only transactions provide consistent snapshots without write locks
25
+ - Lock management coordinates cross-process operations when needed
26
+ - A crash at any point during a transaction leaves the database in its pre-transaction state
27
+
28
+ ## Desired Outcome Definition
29
+
30
+ Creating a new session involves inserting into `sessions`, creating the initial message, updating the `projects` table, and publishing a `session.created` event. All four operations happen within a transaction. If the message insert fails, the session insert is rolled back too. The event only fires after all inserts succeed and the transaction commits. The database is never in a state where a session exists without its initial message.
31
+
32
+ ## Natural Language Functional Description
33
+
34
+ ### Transaction Pattern
35
+
36
+ The primary transaction API wraps operations in an async callback:
37
+
38
+ ```typescript
39
+ await db.transaction(async (tx) => {
40
+ // All operations within are atomic
41
+ await tx.run(
42
+ "INSERT INTO sessions (id, project_root, created_at, updated_at) VALUES (?, ?, ?, ?)",
43
+ [id, root, now, now]
44
+ );
45
+
46
+ await tx.run(
47
+ "INSERT INTO messages (id, session_id, role, content, created_at) VALUES (?, ?, ?, ?, ?)",
48
+ [msgId, id, "system", systemPrompt, now]
49
+ );
50
+
51
+ // Side effects are deferred — only execute after commit
52
+ tx.effect(() => {
53
+ Bus.publish("session.created", { id, root });
54
+ });
55
+ });
56
+ // At this point: both inserts committed, event published
57
+ ```
58
+
59
+ If any operation within the callback throws, the entire transaction is rolled back and the effects are discarded.
60
+
61
+ ### Atomic Guarantees
62
+
63
+ Within a transaction:
64
+ - **All or nothing:** either every `INSERT`, `UPDATE`, `DELETE` commits, or none do.
65
+ - **Isolation:** concurrent reads see the pre-transaction state until commit.
66
+ - **Durability:** once committed, data survives process crashes (SQLite's WAL guarantees).
67
+ - **Consistency:** foreign key constraints and check constraints are enforced at commit.
68
+
69
+ ### Deferred Effects
70
+
71
+ Side effects registered with `tx.effect()` are queued during the transaction and executed only after successful commit. See RISE-083 for full details. Key properties:
72
+
73
+ - Effects execute in registration order.
74
+ - Effects run outside the transaction — they cannot cause rollback.
75
+ - If the transaction rolls back, effects are silently discarded.
76
+ - Common effects: event bus publishing, cache invalidation, file operations.
77
+
78
+ ### Nested Transactions (Savepoints)
79
+
80
+ For complex operations with sub-operations that may independently fail:
81
+
82
+ ```typescript
83
+ await db.transaction(async (tx) => {
84
+ await tx.run("INSERT INTO sessions ...");
85
+
86
+ try {
87
+ await tx.savepoint(async (sp) => {
88
+ await sp.run("INSERT INTO optional_metadata ...");
89
+ // If this fails, only the savepoint rolls back
90
+ });
91
+ } catch {
92
+ // Savepoint rolled back, but outer transaction continues
93
+ }
94
+
95
+ await tx.run("INSERT INTO messages ...");
96
+ // Session and message commit even if metadata failed
97
+ });
98
+ ```
99
+
100
+ ### Read Transactions
101
+
102
+ `db.read(async (tx) => { ... })` provides consistent reads using SQLite's snapshot isolation — all queries within see the same database state, even if writes occur concurrently. No write lock is acquired.
103
+
104
+ ### Lock Management
105
+
106
+ `db.lock(key, callback)` provides cross-process coordination using advisory locking. Only one process holds a given lock at a time. Lock timeout is configurable (default 5 seconds).
107
+
108
+ ### Error Handling
109
+
110
+ If any operation within a transaction throws, the entire transaction rolls back automatically, no effects execute, and the error propagates to the caller. The database remains in its pre-transaction state.
111
+
112
+ ### Common Transaction Patterns
113
+
114
+ - **Session creation:** INSERT session + INSERT initial message + UPDATE project → effect: publish `session.created`
115
+ - **Message append:** INSERT message + INSERT parts + UPDATE session.updated_at → effect: publish `message.added`
116
+ - **Session deletion:** DELETE parts + DELETE messages + DELETE session → effect: publish `session.deleted`, invalidate cache
117
+
118
+ ## Supporting Structures
119
+
120
+ - **SQLite Storage (RISE-080)** provides the database connection that transactions operate on
121
+ - **Deferred Effects (RISE-083)** implements the `tx.effect()` mechanism in detail
122
+ - **Database Migrations (RISE-081)** uses transactions to ensure each migration is atomic
123
+ - **Event Bus (RISE-002)** receives events published by deferred effects after commit
124
+ - **Session Persistence (RISE-018)** uses transactions for all session read/write operations
125
+
126
+ ## Creative Advancement Scenarios
127
+
128
+ **Scenario 1 — Crash-Safe Session Creation:**
129
+ mia-code creates a session with 3 related inserts. The process is killed mid-transaction (power failure, OOM kill). On restart, the database is in its pre-transaction state — no orphaned sessions, no partial data. The user starts a new session cleanly.
130
+
131
+ **Scenario 2 — Event Consistency:**
132
+ A session is created within a transaction. The `session.created` event is deferred. If the message insert fails, the transaction rolls back and the event never fires. No subscriber (UI, logger, plugin) ever learns about a session that doesn't exist in the database.
133
+
134
+ **Scenario 3 — Concurrent Instance Safety:**
135
+ Two mia-code instances write to the same database. Instance A creates a session while instance B appends a message to a different session. SQLite serializes the writes. Both transactions commit successfully. Neither instance sees partial state from the other.
136
+
137
+ **Scenario 4 — Graceful Degradation:**
138
+ A plugin's `session.create` hook (RISE-072) throws an error during a transaction's deferred effect. The transaction already committed — session data is safe. The effect error is logged. The plugin is notified of its failure. The user's session is unaffected.