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,145 @@
1
+ # RISE-087: Permission Modes
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/087-permission-modes.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ mia-code provides three distinct permission action modes that govern how each rule resolves at runtime. "Allow" is silent trust. "Deny" is silent refusal. "Ask" is a conversation — the agent pauses, presents details, and the user decides. Each mode serves a different risk profile. Together they let developers build nuanced permission policies where safe operations flow freely, dangerous ones are blocked, and everything in between gets human judgment.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - mia-code has only two effective modes: full trust (`--yolo`) or full prompting (default)
14
+ - There is no "deny" mode — every action either proceeds or is prompted
15
+ - When prompted, the user can only say yes or no for that single occurrence
16
+ - No mechanism to escalate a single "yes" into a persistent "always allow" rule
17
+ - No mechanism to escalate a single "no" into a persistent "never allow" rule
18
+ - The agent receives no structured feedback when an action is denied — it may retry indefinitely
19
+
20
+ **Desired State:**
21
+ - Three modes: "allow" (silent proceed), "deny" (silent block with reason), "ask" (interactive prompt)
22
+ - "Ask" mode offers five response options: y, n, always, never, session
23
+ - "Always" and "never" responses create persistent session-scoped rules (RISE-086 layer 5)
24
+ - "Session" response allows for the rest of the session without creating a permanent rule
25
+ - Deny mode sends a structured denial message to the agent so it can adapt
26
+ - The agent gracefully handles denials — suggests alternatives or asks the user to adjust permissions
27
+
28
+ ## Desired Outcome Definition
29
+
30
+ Each permission rule action resolves through one of three modes. Allow and deny are non-interactive. Ask pauses execution for user input and supports five response types that range from one-time decisions to persistent session rules. The agent receives clear feedback on denials and can adapt its behavior.
31
+
32
+ ## Natural Language Functional Description
33
+
34
+ ### Allow Mode
35
+
36
+ When a rule resolves to `"allow"`:
37
+
38
+ 1. The action proceeds immediately with no user interaction
39
+ 2. No visual indicator is shown (silent operation)
40
+ 3. The tool executes and returns its result to the agent
41
+ 4. Logging records the permission check: `permission.allowed: write src/foo.test.ts (rule #3, project)`
42
+
43
+ Allow mode is appropriate for: reading files, running safe commands (linters, tests), writing to well-understood paths, asking questions.
44
+
45
+ ### Deny Mode
46
+
47
+ When a rule resolves to `"deny"`:
48
+
49
+ 1. The action is blocked immediately with no user interaction
50
+ 2. The agent receives a structured denial message:
51
+ ```
52
+ Permission denied: [tool] on [path/command]
53
+ Reason: [rule description from matching rule]
54
+ Source: [rule source layer]
55
+ ```
56
+ 3. The tool returns an error result, not a thrown exception
57
+ 4. The agent should interpret the denial and adapt — suggest alternatives, ask the user, or proceed differently
58
+ 5. Logging records: `permission.denied: bash "rm -rf /" (rule #4, global)`
59
+
60
+ Deny messages are designed to be informative. The agent receives enough context to understand *why* the action was blocked and *what rule* caused it. This enables the agent to explain the denial to the user or try an alternative approach.
61
+
62
+ ### Ask Mode
63
+
64
+ When a rule resolves to `"ask"`:
65
+
66
+ 1. Execution pauses
67
+ 2. The user is presented with the action details:
68
+ ```
69
+ 🔐 Permission required: write
70
+ Target: src/components/Header.tsx
71
+ Content preview: [first 5 lines of content]
72
+
73
+ Allow? (y)es / (n)o / (a)lways / ne(v)er / (s)ession
74
+ ```
75
+ 3. The user responds with one of five options:
76
+
77
+ | Response | Key | Behavior |
78
+ |-----------|-----|----------|
79
+ | Yes | `y` | Allow this one action, continue. No rule created. |
80
+ | No | `n` | Deny this one action, continue. No rule created. Agent receives denial message. |
81
+ | Always | `a` | Allow this action AND create a session-scoped allow rule for this permission+pattern. Future matching actions auto-allow. |
82
+ | Never | `v` | Deny this action AND create a session-scoped deny rule for this permission+pattern. Future matching actions auto-deny. |
83
+ | Session | `s` | Allow this action for the rest of the session. Creates a temporary allow rule that is discarded on session end. Functionally similar to "always" but semantically different — it signals "I trust this for now." |
84
+
85
+ ### Always / Never Rule Creation
86
+
87
+ When a user responds "always" to a write permission on `src/**/*.ts`:
88
+
89
+ ```json
90
+ {"permission": "write", "pattern": "src/**/*.ts", "action": "allow", "source": "session"}
91
+ ```
92
+
93
+ This rule is prepended to the session layer (RISE-086). All subsequent writes to TypeScript files under `src/` will silently allow without prompting.
94
+
95
+ When a user responds "never" to a bash permission on `rm *`:
96
+
97
+ ```json
98
+ {"permission": "bash", "pattern": "rm *", "action": "deny", "source": "session"}
99
+ ```
100
+
101
+ All subsequent bash commands matching `rm *` will silently deny.
102
+
103
+ ### Agent Denial Handling
104
+
105
+ When the agent receives a denial, it should:
106
+
107
+ 1. Acknowledge the denial in its response to the user
108
+ 2. Explain what it was trying to do and why it was blocked
109
+ 3. Suggest alternatives: different approach, different path, or ask the user to adjust permissions
110
+ 4. Not retry the same denied action immediately — this wastes tokens and annoys users
111
+
112
+ Example agent response after denial:
113
+ > I tried to delete the old config file but was blocked by a permission rule. I can either leave it in place or you can adjust permissions with `/permissions`. Would you like me to try a different approach?
114
+
115
+ ### Visual Presentation
116
+
117
+ The ask prompt is rendered with clear formatting:
118
+
119
+ - 🔐 emoji prefix for visual distinctiveness
120
+ - Permission type and target are highlighted
121
+ - For file writes, a content preview shows the first few lines
122
+ - For bash commands, the full command string is shown
123
+ - Response options are shown with keyboard shortcuts
124
+
125
+ ## Supporting Structures
126
+
127
+ - **Permission Rules (RISE-084)** defines the rule objects that specify actions
128
+ - **Permission Glob Patterns (RISE-085)** defines pattern matching that scopes rules
129
+ - **Permission Merging (RISE-086)** defines how "always"/"never" responses become session rules
130
+ - **Event Bus (RISE-002)** emits permission events for external clients (RISE-090, RISE-091)
131
+ - **Named Error System (RISE-006)** provides PermissionDeniedError for deny mode
132
+
133
+ ## Creative Advancement Scenarios
134
+
135
+ **Scenario 1 — Progressive Trust Building:**
136
+ A developer starts with all "ask" defaults. The agent requests write access to a test file — the developer responds "always." Next, a bash command for `npm test` — "always." Over a session, the developer builds up a set of trusted operations. The ask prompts become rarer as trust accumulates.
137
+
138
+ **Scenario 2 — Guarded Exploration:**
139
+ The agent tries to read `.env` — denied by a global rule. The agent reports: "I can't read .env due to permission rules. Could you paste the relevant environment variable values?" The developer shares only what's needed. Security is maintained through structured denial and agent adaptation.
140
+
141
+ **Scenario 3 — Session-Scoped Experimentation:**
142
+ A developer responds "session" to a write prompt. For the rest of this session, similar writes proceed silently. On the next session, the permission resets to "ask." This lets developers experiment with trust levels without permanent consequences.
143
+
144
+ **Scenario 4 — Remote Permission Approval:**
145
+ A developer drives mia-code remotely via the HTTP API (RISE-088). The ask prompt is serialized as a permission event over WebSocket (RISE-090). The developer approves from their phone. The agent continues on the workstation. Permission modes work identically regardless of interface.
@@ -0,0 +1,165 @@
1
+ # RISE-088: HTTP API Server
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/088-http-api-server.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ mia-code exposes its full capabilities through an HTTP API server, enabling any program — web UIs, desktop apps, mobile clients, CI scripts, custom bots — to create sessions, send messages, manage tools, and control permissions over standard HTTP. The server transforms mia-code from a terminal-only tool into a platform that any interface can drive. A developer starts the server on their workstation and connects from anywhere.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - mia-code runs exclusively as a CLI process — interaction requires a terminal
14
+ - No HTTP endpoints exist; external programs cannot interact with a running agent
15
+ - Building a web UI or desktop app requires reimplementing the entire agent stack
16
+ - CI/CD integration means shelling out to the CLI and parsing stdout — fragile and limited
17
+ - Multi-client access to the same session is impossible
18
+ - No authentication mechanism exists for remote access
19
+
20
+ **Desired State:**
21
+ - A lightweight HTTP server exposes mia-code's capabilities as JSON endpoints
22
+ - Endpoints are organized by domain: sessions, messages, tools, config, permissions, projects
23
+ - The server starts via `mia-code serve --port 4096` or auto-starts in background mode
24
+ - Optional authentication via password protects remote access
25
+ - CORS is configurable for web client access
26
+ - Standardized error responses enable reliable client error handling
27
+ - The server is the foundation for web UI, desktop app, mobile app, and API automation
28
+
29
+ ## Desired Outcome Definition
30
+
31
+ Running `mia-code serve` starts an HTTP server that accepts JSON requests and returns JSON responses. Any HTTP client can create sessions, send messages, list tools, read configuration, and manage permissions. The server is lightweight, secure by default, and designed for both local and remote access.
32
+
33
+ ## Natural Language Functional Description
34
+
35
+ ### Server Startup
36
+
37
+ ```bash
38
+ mia-code serve # start on default port 4096
39
+ mia-code serve --port 8080 # custom port
40
+ mia-code serve --password mysecret # require authentication
41
+ mia-code serve --host 0.0.0.0 # bind to all interfaces (for remote access)
42
+ ```
43
+
44
+ The server binds to `127.0.0.1` by default (localhost only). Use `--host 0.0.0.0` for remote access. Environment variable `MIA_CODE_SERVER_PASSWORD` sets the password without command-line exposure.
45
+
46
+ ### Framework Choice
47
+
48
+ The server uses Hono — a lightweight, fast HTTP framework with TypeScript-first design. Hono provides routing, middleware, and request validation with minimal overhead. Alternative: Express if Hono proves unsuitable.
49
+
50
+ ### API Endpoints
51
+
52
+ **Sessions** (`/api/session`):
53
+ - `GET /api/session` — list all sessions (pagination, filtering by status)
54
+ - `POST /api/session` — create a new session `{title, directory, model?}`
55
+ - `GET /api/session/:id` — get session details with message history
56
+ - `DELETE /api/session/:id` — archive a session
57
+ - `PATCH /api/session/:id` — update session metadata (title, model)
58
+
59
+ **Messages** (`/api/message`):
60
+ - `POST /api/session/:id/message` — send a user message `{content: string}`
61
+ - `GET /api/session/:id/message` — list messages (pagination, cursor-based)
62
+ - `GET /api/session/:id/message/:msgId` — get a specific message
63
+
64
+ **Tools** (`/api/tool`):
65
+ - `GET /api/tool` — list available tools with descriptions and schemas
66
+ - `POST /api/tool/:name/execute` — execute a tool directly `{parameters: object}`
67
+ - `GET /api/tool/:name` — get tool details and parameter schema
68
+
69
+ **Configuration** (`/api/config`):
70
+ - `GET /api/config` — get current effective configuration
71
+ - `PATCH /api/config` — update configuration values `{key: value}`
72
+
73
+ **Permissions** (`/api/permission`):
74
+ - `GET /api/permission` — get effective merged permission rules
75
+ - `POST /api/permission/respond` — respond to a pending permission prompt `{requestId, response}`
76
+ - `POST /api/permission/reset` — reset session-scoped permissions
77
+
78
+ **Project** (`/api/project`):
79
+ - `GET /api/project` — get project information (root, git status, file count)
80
+
81
+ **System** (`/api`):
82
+ - `GET /api/health` — server health: uptime, version, active sessions
83
+ - `GET /api/openapi.json` — OpenAPI specification (RISE-089)
84
+
85
+ ### Authentication
86
+
87
+ When a password is configured, all requests must include it:
88
+
89
+ ```
90
+ Authorization: Basic base64(username:password)
91
+ ```
92
+
93
+ Username can be anything (conventionally "mia-code"). Unauthenticated requests receive `401 Unauthorized`. The `/api/health` endpoint is always public (allows connection testing).
94
+
95
+ ### Error Responses
96
+
97
+ All errors follow a consistent structure:
98
+
99
+ ```json
100
+ {
101
+ "error": {
102
+ "name": "SessionNotFoundError",
103
+ "message": "Session abc-123 does not exist",
104
+ "code": 404
105
+ }
106
+ }
107
+ ```
108
+
109
+ Error names map to the Named Error System (RISE-006). HTTP status codes: 400 (bad request), 401 (unauthorized), 404 (not found), 422 (validation error), 500 (internal error).
110
+
111
+ ### CORS Configuration
112
+
113
+ CORS headers are configurable in the server config:
114
+
115
+ ```json
116
+ {
117
+ "server": {
118
+ "cors": {
119
+ "origins": ["http://localhost:3000", "https://mia-code.app"],
120
+ "methods": ["GET", "POST", "PATCH", "DELETE"],
121
+ "credentials": true
122
+ }
123
+ }
124
+ }
125
+ ```
126
+
127
+ Default: allow `localhost` origins only.
128
+
129
+ ### Request Validation
130
+
131
+ All request bodies are validated against Zod schemas. Invalid requests receive a 422 response with detailed validation errors:
132
+
133
+ ```json
134
+ {
135
+ "error": {
136
+ "name": "ValidationError",
137
+ "message": "Invalid request body",
138
+ "code": 422,
139
+ "details": [{"path": "content", "message": "Required"}]
140
+ }
141
+ }
142
+ ```
143
+
144
+ ## Supporting Structures
145
+
146
+ - **Client-Server Architecture (RISE-001)** provides the architectural foundation this server implements
147
+ - **OpenAPI Spec Generation (RISE-089)** auto-generates API documentation from these endpoints
148
+ - **WebSocket Support (RISE-090)** adds real-time bidirectional communication alongside HTTP
149
+ - **SSE Streaming (RISE-091)** adds server-sent events for message streaming
150
+ - **mDNS Discovery (RISE-092)** enables automatic discovery of the running server
151
+ - **Zod Schema Validation (RISE-005)** validates all request/response payloads
152
+
153
+ ## Creative Advancement Scenarios
154
+
155
+ **Scenario 1 — Web UI Dashboard:**
156
+ A React web app connects to the HTTP API. It lists sessions in a sidebar, shows message history in the main panel, and sends new messages via POST. The web app provides a richer interface than the terminal — syntax highlighting, file previews, tool execution visualizations.
157
+
158
+ **Scenario 2 — CI/CD Agent:**
159
+ A GitHub Actions workflow starts the server, sends a prompt via `curl -X POST /api/session/:id/message`, and polls for the response. The agent reviews a PR diff and posts its analysis as a comment. No terminal, no human — pure API automation.
160
+
161
+ **Scenario 3 — Multi-Client Collaboration:**
162
+ Two developers connect to the same server. One drives the agent from a web UI, the other monitors from a terminal client. Both see the same messages in real-time via SSE (RISE-091). Permission prompts route to whichever client responds first.
163
+
164
+ **Scenario 4 — Remote Workstation:**
165
+ A developer runs `mia-code serve --host 0.0.0.0 --password secret` on their powerful desktop. They connect from a laptop on the same network via `http://desktop:4096/api`. The agent runs on the desktop's 64GB RAM while the developer works from a lightweight notebook.
@@ -0,0 +1,164 @@
1
+ # RISE-089: OpenAPI Spec Generation
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/089-openapi-spec-generation.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ mia-code auto-generates an OpenAPI 3.0 specification from its HTTP API routes, turning route definitions into living documentation. Every endpoint, every request body, every response shape is derived from the same Zod schemas that validate runtime data. Documentation cannot drift from implementation because they share a single source of truth. The spec enables client SDK generation, Swagger UI exploration, and automated testing — all without manual documentation effort.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - mia-code has no HTTP API and therefore no API documentation
14
+ - When an API is added (RISE-088), documentation will need to be written and maintained
15
+ - Manual API documentation drifts from implementation — endpoints change, docs stay stale
16
+ - No mechanism exists to generate client SDKs for TypeScript, Python, or other languages
17
+ - Zod schemas exist for internal validation but are not exposed as machine-readable contracts
18
+
19
+ **Desired State:**
20
+ - Each API route is annotated with metadata: path, method, request schema, response schema, description, tags
21
+ - Zod schemas are automatically converted to JSON Schema for OpenAPI compatibility
22
+ - The OpenAPI specification is generated at build time and also served live at `/api/openapi.json`
23
+ - Swagger UI is available at `/api/docs` for interactive API exploration
24
+ - The spec is the source for auto-generating the TypeScript SDK (RISE-093)
25
+ - API versioning tracks mia-code's version number
26
+
27
+ ## Desired Outcome Definition
28
+
29
+ The HTTP API server serves a complete OpenAPI 3.0 specification at `/api/openapi.json`. The spec is auto-generated from route definitions and Zod schemas. Developers and tools can consume it for documentation, SDK generation, testing, and validation. No manual spec maintenance is needed.
30
+
31
+ ## Natural Language Functional Description
32
+
33
+ ### Route Annotation
34
+
35
+ Each API route carries metadata alongside its handler:
36
+
37
+ ```typescript
38
+ const createSession = route({
39
+ method: "POST",
40
+ path: "/api/session",
41
+ operationId: "createSession",
42
+ summary: "Create a new agent session",
43
+ description: "Creates a new session with the specified configuration. Returns the session ID and initial state.",
44
+ tags: ["sessions"],
45
+ request: z.object({
46
+ title: z.string().optional(),
47
+ directory: z.string(),
48
+ model: z.string().optional(),
49
+ }),
50
+ responses: {
51
+ 200: z.object({
52
+ id: z.string(),
53
+ title: z.string(),
54
+ createdAt: z.string().datetime(),
55
+ }),
56
+ 400: ErrorResponseSchema,
57
+ 401: ErrorResponseSchema,
58
+ },
59
+ })
60
+ ```
61
+
62
+ ### Zod-to-JSON-Schema Conversion
63
+
64
+ Zod schemas are converted to JSON Schema using `zod-to-json-schema` or an equivalent library. Conversion handles:
65
+
66
+ - Primitive types: `z.string()` → `{"type": "string"}`
67
+ - Objects: `z.object({...})` → `{"type": "object", "properties": {...}}`
68
+ - Arrays: `z.array(z.string())` → `{"type": "array", "items": {"type": "string"}}`
69
+ - Enums: `z.enum(["a", "b"])` → `{"type": "string", "enum": ["a", "b"]}`
70
+ - Optional fields: `z.string().optional()` → property not in `required` array
71
+ - Descriptions: `z.string().describe("User's name")` → `{"description": "User's name"}`
72
+ - Unions, intersections, and refinements mapped to appropriate JSON Schema constructs
73
+
74
+ ### OpenAPI Spec Structure
75
+
76
+ The generated specification follows OpenAPI 3.0:
77
+
78
+ ```yaml
79
+ openapi: "3.0.3"
80
+ info:
81
+ title: "mia-code API"
82
+ version: "1.0.0" # matches mia-code package version
83
+ description: "HTTP API for programmatic control of mia-code"
84
+ servers:
85
+ - url: "http://localhost:4096"
86
+ paths:
87
+ /api/session:
88
+ post:
89
+ operationId: createSession
90
+ tags: [sessions]
91
+ summary: Create a new agent session
92
+ requestBody:
93
+ content:
94
+ application/json:
95
+ schema: { ... } # from Zod
96
+ responses:
97
+ "200": { ... } # from Zod
98
+ "400": { ... }
99
+ components:
100
+ schemas:
101
+ Session: { ... }
102
+ Message: { ... }
103
+ Error: { ... }
104
+ securitySchemes:
105
+ basicAuth:
106
+ type: http
107
+ scheme: basic
108
+ ```
109
+
110
+ ### Tags
111
+
112
+ Tags group endpoints by domain for organized documentation:
113
+
114
+ | Tag | Endpoints |
115
+ |--------------|------------------------------|
116
+ | sessions | `/api/session/*` |
117
+ | messages | `/api/session/:id/message/*` |
118
+ | tools | `/api/tool/*` |
119
+ | config | `/api/config/*` |
120
+ | permissions | `/api/permission/*` |
121
+ | project | `/api/project/*` |
122
+ | system | `/api/health`, `/api/openapi.json` |
123
+
124
+ ### Serving the Spec
125
+
126
+ - `GET /api/openapi.json` — returns the generated OpenAPI spec as JSON
127
+ - `GET /api/docs` — serves Swagger UI pointed at the spec (optional, dev mode only)
128
+ - Build-time generation: `mia-code build:openapi` writes the spec to `dist/openapi.json`
129
+
130
+ ### Versioning
131
+
132
+ The API version in the spec matches the mia-code package version from `package.json`. Breaking API changes increment the major version. The version is also included in response headers: `X-MiaCode-Version: 1.0.0`.
133
+
134
+ ### Response Schemas
135
+
136
+ Every endpoint defines response schemas for common status codes:
137
+
138
+ - `200` — success response with typed body
139
+ - `400` — bad request (malformed input)
140
+ - `401` — unauthorized (missing or invalid credentials)
141
+ - `404` — resource not found
142
+ - `422` — validation error (input fails schema validation)
143
+ - `500` — internal server error
144
+
145
+ ## Supporting Structures
146
+
147
+ - **HTTP API Server (RISE-088)** defines the routes this spec documents
148
+ - **Zod Schema Validation (RISE-005)** provides the schemas converted to JSON Schema
149
+ - **JavaScript SDK (RISE-093)** is auto-generated from this OpenAPI spec
150
+ - **Named Error System (RISE-006)** defines the error response shapes documented in the spec
151
+
152
+ ## Creative Advancement Scenarios
153
+
154
+ **Scenario 1 — Swagger UI Exploration:**
155
+ A developer visits `http://localhost:4096/api/docs` and sees all endpoints organized by tag. They expand "sessions," click "Create Session," fill in parameters, and hit "Try it out." The API responds with a new session. Documentation and testing in one interface.
156
+
157
+ **Scenario 2 — SDK Generation Pipeline:**
158
+ A CI pipeline runs `mia-code build:openapi`, then feeds the spec to `openapi-typescript` to generate type definitions. The generated types are published as `@mia-code/sdk`. Any breaking API change triggers a type error in SDK consumers — drift is impossible.
159
+
160
+ **Scenario 3 — Third-Party Integration:**
161
+ A developer imports the OpenAPI spec into Postman. All endpoints appear as a collection with example request bodies pre-filled from schemas. They build an integration test suite against the live API using the imported collection.
162
+
163
+ **Scenario 4 — Contract Testing:**
164
+ The OpenAPI spec serves as a contract. Integration tests validate that every endpoint returns responses matching their declared schemas. If a handler returns an undocumented field or omits a required one, the test fails. The spec is both documentation and test oracle.
@@ -0,0 +1,136 @@
1
+ # RISE-090: WebSocket Support
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/090-websocket-support.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ mia-code provides a WebSocket connection for real-time bidirectional communication between the server and clients. While HTTP endpoints handle request-response operations, the WebSocket channel carries live streaming data — message deltas as the agent thinks, tool execution updates, permission requests that need immediate user response, and session state changes. The WebSocket makes remote driving feel as responsive as sitting at the terminal.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - mia-code renders output directly to the terminal — there is no streaming protocol
14
+ - Agent responses appear character-by-character via ora spinners and chalk formatting, tightly coupled to stdout
15
+ - No mechanism exists for a remote client to receive real-time updates from a running agent
16
+ - Permission prompts are blocking terminal reads — they cannot be routed to a remote client
17
+ - Tool execution progress is visible only in the terminal that started the process
18
+
19
+ **Desired State:**
20
+ - A WebSocket endpoint at `ws://localhost:4096/ws` accepts client connections
21
+ - Connected clients receive real-time events: message deltas, tool updates, permission requests, cost data
22
+ - Clients send messages, permission responses, and cancel signals over the same connection
23
+ - Multiple clients can connect simultaneously — all receive the same events
24
+ - The protocol uses typed JSON messages with clear event categorization
25
+ - Connection health is maintained via ping/pong heartbeats
26
+
27
+ ## Desired Outcome Definition
28
+
29
+ A client opens a WebSocket connection to the mia-code server and receives typed JSON events in real-time as the agent processes messages. The same connection carries client-to-server messages like user input and permission responses. The experience is instantaneous, bidirectional, and multiplexed across clients.
30
+
31
+ ## Natural Language Functional Description
32
+
33
+ ### Connection Lifecycle
34
+
35
+ 1. **Connect**: Client opens WebSocket to `ws://localhost:4096/ws`
36
+ 2. **Authenticate**: If password configured, client sends `{type: "auth", data: {password: "..."}}`
37
+ 3. **Subscribe**: Client sends `{type: "subscribe", data: {sessionId: "..."}}`
38
+ 4. **Receive events**: Server pushes typed events as they occur
39
+ 5. **Send messages**: Client sends user messages, permission responses, cancel signals
40
+ 6. **Disconnect**: Either side closes the connection; client can reconnect at any time
41
+
42
+ ### Message Protocol
43
+
44
+ All messages follow a uniform structure:
45
+
46
+ ```typescript
47
+ interface WebSocketMessage {
48
+ type: string // event type identifier
49
+ data: object // typed payload
50
+ timestamp: string // ISO 8601 timestamp
51
+ sessionId?: string // session scope (absent for system messages)
52
+ }
53
+ ```
54
+
55
+ ### Server → Client Events
56
+
57
+ | Event Type | Payload | Description |
58
+ |-----------------------|------------------------------------------------|------------------------------------|
59
+ | `message.start` | `{messageId, role}` | Agent begins generating a response |
60
+ | `message.delta` | `{messageId, content, index}` | Streaming text chunk |
61
+ | `message.complete` | `{messageId, content, usage}` | Agent finished, full response |
62
+ | `tool.start` | `{toolName, parameters, toolCallId}` | Tool execution begins |
63
+ | `tool.result` | `{toolCallId, result, duration}` | Tool execution completed |
64
+ | `permission.request` | `{requestId, permission, target, preview}` | Permission prompt needs response |
65
+ | `session.updated` | `{session}` | Session metadata changed |
66
+ | `cost.updated` | `{sessionCost, totalCost, tokens}` | Token usage and cost update |
67
+ | `error` | `{name, message, code}` | Error occurred during processing |
68
+ | `heartbeat` | `{}` | Keep-alive ping |
69
+
70
+ ### Client → Server Messages
71
+
72
+ | Message Type | Payload | Description |
73
+ |-----------------------|------------------------------------------------|------------------------------------|
74
+ | `auth` | `{password}` | Authenticate connection |
75
+ | `subscribe` | `{sessionId}` | Subscribe to session events |
76
+ | `unsubscribe` | `{sessionId}` | Unsubscribe from session |
77
+ | `message.send` | `{sessionId, content}` | Send a user message |
78
+ | `permission.respond` | `{requestId, response}` | Respond to permission prompt |
79
+ | `cancel` | `{sessionId}` | Cancel current agent operation |
80
+
81
+ ### Multi-Client Support
82
+
83
+ Multiple clients can connect to the same server simultaneously:
84
+
85
+ - All clients subscribed to a session receive the same events
86
+ - Any client can send a user message — messages are queued and processed in order
87
+ - Permission requests are broadcast to all clients — the first response wins
88
+ - Client disconnect does not affect other clients or the running agent
89
+ - Each client maintains its own subscription state
90
+
91
+ ### Heartbeat Protocol
92
+
93
+ - Server sends `{type: "heartbeat"}` every 30 seconds
94
+ - Client should respond with a WebSocket pong frame
95
+ - If no pong received within 10 seconds, server considers client disconnected
96
+ - Client should reconnect if no heartbeat received within 60 seconds
97
+ - Heartbeat interval configurable: `{"server": {"heartbeatInterval": 30000}}`
98
+
99
+ ### Authentication Flow
100
+
101
+ When a server password is configured:
102
+
103
+ 1. Client connects via WebSocket
104
+ 2. Client sends `{type: "auth", data: {password: "secret"}}`
105
+ 3. Server responds with `{type: "auth.success"}` or `{type: "auth.failed", data: {message: "Invalid password"}}`
106
+ 4. Unauthenticated clients receive no events and cannot send messages
107
+ 5. Authentication is per-connection — reconnections must re-authenticate
108
+
109
+ ### Error Handling
110
+
111
+ - Malformed messages receive `{type: "error", data: {message: "Invalid message format"}}`
112
+ - Messages to non-existent sessions receive `{type: "error", data: {message: "Session not found"}}`
113
+ - Server errors during message processing are sent as error events, not connection closures
114
+ - The WebSocket connection stays open through errors — only explicit close or timeout disconnects
115
+
116
+ ## Supporting Structures
117
+
118
+ - **HTTP API Server (RISE-088)** provides the server that hosts the WebSocket endpoint
119
+ - **SSE Streaming (RISE-091)** provides an alternative one-way streaming protocol
120
+ - **Event Bus (RISE-002)** provides the internal event system that WebSocket events mirror
121
+ - **Permission Modes (RISE-087)** defines permission prompts routed via WebSocket
122
+ - **Client-Server Architecture (RISE-001)** defines the overall architecture this implements
123
+
124
+ ## Creative Advancement Scenarios
125
+
126
+ **Scenario 1 — Real-Time Web UI:**
127
+ A React web app opens a WebSocket connection and renders message deltas as they arrive. The user sees the agent's response streaming character-by-character, tool executions appearing as they start and complete, and permission prompts appearing as modal dialogs. The experience mirrors the terminal but with richer rendering.
128
+
129
+ **Scenario 2 — Mobile Remote Driving:**
130
+ A mobile app connects via WebSocket over the local network. The developer sends prompts by typing on their phone. Message deltas stream back in real-time. Permission prompts appear as push notifications. The developer approves from the lock screen.
131
+
132
+ **Scenario 3 — Multi-Monitor Pair Programming:**
133
+ Developer A drives the agent from a web UI on one monitor. Developer B has a terminal client on another monitor subscribed to the same session. Both see identical real-time output. Developer B spots an issue and sends a correction — it appears in both clients immediately.
134
+
135
+ **Scenario 4 — Dashboard Monitoring:**
136
+ An ops dashboard subscribes to all active sessions via WebSocket. It shows a grid of running agents: current task, token usage, tool executions, and errors. Cost updates stream in real-time. A sudden spike in errors triggers an alert without polling.