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,168 @@
1
+ # RISE-091: SSE Streaming
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/091-sse-streaming.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ mia-code provides Server-Sent Events (SSE) as a lightweight one-way streaming protocol alongside the full WebSocket channel. SSE is the pragmatic choice for clients that only need to receive events — web UIs rendering agent output, monitoring dashboards, CI scripts waiting for results. It works through proxies, reconnects automatically, and requires no special server infrastructure. A `curl` command is all you need to watch an agent think in real-time.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - mia-code streams output only to the local terminal via stdout
14
+ - No HTTP-based streaming mechanism exists for remote clients
15
+ - Polling the API for new messages is wasteful and introduces latency
16
+ - WebSocket (RISE-090) provides full bidirectional streaming but requires client library support
17
+ - Simple clients (curl, EventSource, server-rendered pages) cannot use WebSocket easily
18
+ - No reconnection protocol exists — if the connection drops, context is lost
19
+
20
+ **Desired State:**
21
+ - An SSE endpoint streams typed events for any session
22
+ - Clients connect with a standard `EventSource` (browser) or `curl` (terminal)
23
+ - Events are typed: message, delta, tool_start, tool_result, permission, error, done
24
+ - Automatic reconnection via `Last-Event-ID` header resumes where the client left off
25
+ - SSE coexists with WebSocket — clients choose the protocol that fits their needs
26
+ - Multiple SSE streams per session are supported (multiple observers)
27
+
28
+ ## Desired Outcome Definition
29
+
30
+ A client connects to `GET /api/session/{id}/events` and receives a stream of typed server-sent events as the agent processes messages. The stream includes message deltas, tool execution updates, permission prompts, and completion signals. Disconnected clients reconnect and resume from their last received event.
31
+
32
+ ## Natural Language Functional Description
33
+
34
+ ### SSE Endpoint
35
+
36
+ ```
37
+ GET /api/session/{id}/events
38
+ Accept: text/event-stream
39
+ Authorization: Basic base64(user:password) # if authentication configured
40
+ Last-Event-ID: evt_42 # for reconnection
41
+ ```
42
+
43
+ The server responds with `Content-Type: text/event-stream` and begins pushing events.
44
+
45
+ ### Event Format
46
+
47
+ Each event follows the SSE specification:
48
+
49
+ ```
50
+ id: evt_42
51
+ event: message.delta
52
+ data: {"messageId":"msg_1","content":"Hello","index":7}
53
+
54
+ id: evt_43
55
+ event: tool.start
56
+ data: {"toolName":"bash","parameters":{"command":"ls"},"toolCallId":"tc_1"}
57
+
58
+ ```
59
+
60
+ Fields:
61
+ - `id` — monotonically increasing event ID for reconnection
62
+ - `event` — event type string
63
+ - `data` — JSON payload (single line)
64
+ - Empty line terminates each event
65
+
66
+ ### Event Types
67
+
68
+ | Event Type | Payload | Description |
69
+ |----------------|--------------------------------------------------|--------------------------------------|
70
+ | `message` | `{messageId, role, content}` | New complete message added |
71
+ | `delta` | `{messageId, content, index}` | Streaming token from agent |
72
+ | `tool_start` | `{toolName, parameters, toolCallId}` | Tool execution beginning |
73
+ | `tool_result` | `{toolCallId, result, duration, success}` | Tool execution completed |
74
+ | `permission` | `{requestId, permission, target, preview}` | Permission prompt (respond via API) |
75
+ | `error` | `{name, message, code}` | Error during processing |
76
+ | `done` | `{messageId, usage}` | Agent response complete |
77
+ | `session` | `{id, title, status}` | Session metadata updated |
78
+ | `cost` | `{sessionCost, totalCost, inputTokens, outputTokens}` | Cost and token update |
79
+ | `heartbeat` | `{}` | Keep-alive (every 30s) |
80
+
81
+ ### Reconnection
82
+
83
+ SSE has built-in reconnection support:
84
+
85
+ 1. Client tracks the last received event ID (automatic in `EventSource`)
86
+ 2. On disconnect, client reconnects with `Last-Event-ID: evt_42` header
87
+ 3. Server replays all events after `evt_42` from the session event buffer
88
+ 4. Client resumes seamlessly — no duplicate or missed events
89
+ 5. Event buffer retains the last 1000 events per session (configurable)
90
+
91
+ If the requested `Last-Event-ID` is no longer in the buffer, the server sends a `reset` event instructing the client to reload full state from the REST API.
92
+
93
+ ### Heartbeat
94
+
95
+ The server sends a heartbeat comment every 30 seconds to keep the connection alive through proxies:
96
+
97
+ ```
98
+ : heartbeat
99
+
100
+ ```
101
+
102
+ SSE comments (lines starting with `:`) are ignored by `EventSource` but prevent proxy timeouts.
103
+
104
+ ### Connection Parameters
105
+
106
+ Query parameters customize the stream:
107
+
108
+ - `?types=delta,tool_start,done` — filter to specific event types (default: all)
109
+ - `?lastEventId=evt_42` — alternative to `Last-Event-ID` header
110
+ - `?heartbeat=15` — custom heartbeat interval in seconds
111
+
112
+ ### Comparison with WebSocket
113
+
114
+ | Feature | SSE (RISE-091) | WebSocket (RISE-090) |
115
+ |--------------------|-----------------------------|--------------------------------|
116
+ | Direction | Server → Client only | Bidirectional |
117
+ | Reconnection | Automatic (built-in) | Manual (client must implement) |
118
+ | Proxy support | Works through HTTP proxies | May require proxy configuration|
119
+ | Client complexity | EventSource (3 lines of JS) | WebSocket API (more setup) |
120
+ | Send messages | Separate HTTP POST | Same connection |
121
+ | Browser support | Native EventSource | Native WebSocket |
122
+ | Use case | Monitoring, streaming UI | Interactive driving, real-time |
123
+
124
+ ### Usage Examples
125
+
126
+ **Browser (EventSource):**
127
+ ```javascript
128
+ const events = new EventSource("/api/session/abc/events")
129
+ events.addEventListener("delta", (e) => {
130
+ const data = JSON.parse(e.data)
131
+ document.getElementById("output").textContent += data.content
132
+ })
133
+ events.addEventListener("done", () => console.log("Response complete"))
134
+ ```
135
+
136
+ **Terminal (curl):**
137
+ ```bash
138
+ curl -N -H "Accept: text/event-stream" http://localhost:4096/api/session/abc/events
139
+ ```
140
+
141
+ **Permission Handling via SSE:**
142
+ When a `permission` event arrives, the client responds via the REST API:
143
+ ```
144
+ POST /api/permission/respond
145
+ {"requestId": "perm_1", "response": "y"}
146
+ ```
147
+
148
+ ## Supporting Structures
149
+
150
+ - **HTTP API Server (RISE-088)** provides the server hosting the SSE endpoint
151
+ - **WebSocket Support (RISE-090)** provides the bidirectional alternative
152
+ - **Event Bus (RISE-002)** provides internal events that SSE mirrors externally
153
+ - **Permission Modes (RISE-087)** defines permission events streamed via SSE
154
+ - **JavaScript SDK (RISE-093)** wraps SSE in a typed `AsyncIterable` interface
155
+
156
+ ## Creative Advancement Scenarios
157
+
158
+ **Scenario 1 — curl Monitoring:**
159
+ A developer runs `curl -N http://localhost:4096/api/session/abc/events` in a second terminal. They watch tool executions and message deltas scroll by as the agent works. When the agent finishes, a `done` event appears. No web browser needed — just curl.
160
+
161
+ **Scenario 2 — Lightweight Web Dashboard:**
162
+ A server-rendered HTML page includes three lines of JavaScript using `EventSource`. As the agent streams tokens, they appear in the page. No React, no build step, no WebSocket library — just native browser APIs rendering a live agent session.
163
+
164
+ **Scenario 3 — CI Pipeline Integration:**
165
+ A CI script sends a prompt via POST, then connects to SSE to wait for the `done` event. It captures the final message content and posts it as a PR comment. The SSE connection times out gracefully if the agent takes too long.
166
+
167
+ **Scenario 4 — Resilient Mobile Client:**
168
+ A mobile app uses SSE for streaming. The user walks between WiFi networks. Each time the connection drops, `EventSource` reconnects automatically and sends `Last-Event-ID`. The server replays missed events. The user sees continuous output with no gaps.
@@ -0,0 +1,145 @@
1
+ # RISE-092: mDNS Discovery
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/092-mdns-discovery.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ mia-code announces itself on the local network via mDNS (multicast DNS), letting clients discover running instances without knowing IP addresses or port numbers. A developer starts the server on their workstation and their phone finds it automatically. A desktop app scans for local instances and presents a connection list. mDNS transforms "enter the server URL" into "select which agent to connect to" — zero-configuration networking for AI-assisted development.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - mia-code runs only as a local CLI process — there is nothing to discover
14
+ - When the HTTP server (RISE-088) is added, clients must know the exact IP and port
15
+ - Developers working across devices (workstation + laptop + phone) must manually configure connection URLs
16
+ - No automatic service announcement exists — each device is an island
17
+ - Multiple mia-code instances on a network are invisible to each other
18
+
19
+ **Desired State:**
20
+ - When mia-code server starts, it announces a service via mDNS: `_mia-code._tcp.local.`
21
+ - Clients on the same network discover running instances without manual configuration
22
+ - Service metadata includes version, hostname, project name, port, and authentication status
23
+ - Multiple instances are differentiated by project name in their service names
24
+ - Discovery completes in under 5 seconds — fast enough for interactive use
25
+ - mDNS is optional and can be disabled via configuration
26
+
27
+ ## Desired Outcome Definition
28
+
29
+ A running mia-code server automatically announces itself as a Bonjour/mDNS service on the local network. Any mDNS-capable client discovers it by browsing for `_mia-code._tcp.local.` services. The client receives the server's IP, port, and metadata without any manual configuration.
30
+
31
+ ## Natural Language Functional Description
32
+
33
+ ### Service Announcement
34
+
35
+ When `mia-code serve` starts and mDNS is enabled, it publishes a service:
36
+
37
+ ```
38
+ Service Type: _mia-code._tcp.local.
39
+ Service Name: mia-code - my-project._mia-code._tcp.local.
40
+ Port: 4096
41
+ TXT Records:
42
+ version=1.0.0
43
+ project=my-project
44
+ hostname=workstation.local
45
+ auth=true
46
+ directory=/home/user/my-project
47
+ ```
48
+
49
+ The service name includes the project name (derived from the project directory or package.json name) to differentiate multiple instances.
50
+
51
+ ### Discovery Process
52
+
53
+ A client discovers mia-code instances:
54
+
55
+ 1. Browse for services of type `_mia-code._tcp.local.`
56
+ 2. mDNS resolver returns a list of matching services (typically within 2-3 seconds)
57
+ 3. For each service, resolve the hostname to an IP address
58
+ 4. Read TXT records for metadata (version, project, auth requirement)
59
+ 5. Present the list to the user or auto-connect to a preferred instance
60
+
61
+ ### Discovery Timeout
62
+
63
+ - Default scan duration: 5 seconds
64
+ - Quick scan (for UIs with auto-refresh): 2 seconds
65
+ - Extended scan (for first-time setup): 10 seconds
66
+ - Scan runs asynchronously — results stream in as they are discovered
67
+
68
+ ### TXT Record Fields
69
+
70
+ | Field | Description | Example |
71
+ |-------------|-------------------------------------------|----------------------------|
72
+ | `version` | mia-code server version | `1.0.0` |
73
+ | `project` | Project name from package.json or dirname | `my-project` |
74
+ | `hostname` | Machine hostname | `workstation.local` |
75
+ | `auth` | Whether authentication is required | `true` or `false` |
76
+ | `directory` | Project root directory path | `/home/user/my-project` |
77
+
78
+ ### Multiple Instances
79
+
80
+ Multiple mia-code servers on the same network each publish their own service:
81
+
82
+ ```
83
+ mia-code - frontend._mia-code._tcp.local. port:4096
84
+ mia-code - backend._mia-code._tcp.local. port:4097
85
+ mia-code - infra._mia-code._tcp.local. port:4098
86
+ ```
87
+
88
+ Clients see all instances and can connect to any of them. Each instance operates independently.
89
+
90
+ ### Configuration
91
+
92
+ mDNS is enabled by default. Disable via config:
93
+
94
+ ```json
95
+ {
96
+ "server": {
97
+ "mdns": false
98
+ }
99
+ }
100
+ ```
101
+
102
+ Or via CLI flag:
103
+
104
+ ```bash
105
+ mia-code serve --no-mdns
106
+ ```
107
+
108
+ ### Implementation
109
+
110
+ Use the `bonjour-service` npm package (or `multicast-dns`) for cross-platform mDNS:
111
+
112
+ - **Publish**: on server start, call `bonjour.publish({type: "mia-code", protocol: "tcp", port, txt: {...}})`
113
+ - **Browse**: clients call `bonjour.find({type: "mia-code"})` and receive service events
114
+ - **Unpublish**: on server shutdown, call `bonjour.unpublishAll()` to clean up announcements
115
+ - Works on macOS (native Bonjour), Linux (Avahi), and Windows (Bonjour for Windows)
116
+
117
+ ### Security Considerations
118
+
119
+ mDNS is used **only** for service discovery — it reveals that a mia-code instance exists and its connection parameters. It does not bypass authentication:
120
+
121
+ - If `auth=true` in TXT records, the client must provide the password to use the API
122
+ - mDNS broadcasts are limited to the local network segment (not routable)
123
+ - The `directory` TXT record can be omitted for privacy: `{"server": {"mdns": {"exposeDirectory": false}}}`
124
+ - Service names do not contain sensitive information
125
+
126
+ ## Supporting Structures
127
+
128
+ - **HTTP API Server (RISE-088)** provides the server that mDNS announces
129
+ - **Desktop Remote Driving (RISE-096)** uses mDNS to auto-discover local servers
130
+ - **JavaScript SDK (RISE-093)** includes mDNS discovery in `MiaCodeClient.discover()`
131
+ - **Structured Logging (RISE-007)** logs service publication and discovery events
132
+
133
+ ## Creative Advancement Scenarios
134
+
135
+ **Scenario 1 — Phone Auto-Connect:**
136
+ A developer opens the mia-code mobile app. It scans for `_mia-code._tcp.local.` and finds their workstation running on port 4096 with project "frontend." One tap connects. No URL typing, no port memorization — just tap and drive.
137
+
138
+ **Scenario 2 — Desktop App Server Picker:**
139
+ The mia-code desktop app shows a "Connect" screen listing all discovered instances: "frontend on workstation (port 4096)" and "backend on server (port 4097)." The developer clicks one and is connected. The list auto-refreshes as servers start and stop.
140
+
141
+ **Scenario 3 — Multi-Project Dashboard:**
142
+ A monitoring dashboard discovers all mia-code instances on the team network. It shows a grid: three developers each running agents on different projects. Token costs, active sessions, and error rates for each instance — all discovered automatically via mDNS.
143
+
144
+ **Scenario 4 — Pair Programming Discovery:**
145
+ Developer A starts `mia-code serve` on their machine. Developer B runs `mia-code connect --discover` and sees Developer A's instance in the list. They connect and join the session. mDNS made the connection possible without exchanging IPs or URLs.
@@ -0,0 +1,200 @@
1
+ # RISE-093: JavaScript SDK
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/093-javascript-sdk.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ mia-code publishes a TypeScript/JavaScript SDK that gives developers programmatic control over every aspect of the platform. Instead of shelling out to the CLI or crafting raw HTTP requests, a developer writes `const client = new MiaCodeClient({url, password})` and immediately has typed methods for sessions, messages, tools, and configuration. The SDK is auto-generated from the OpenAPI spec, ensuring types are always accurate. It is the bridge between mia-code and the ecosystem — custom UIs, workflow automation, CI/CD integration, and creative applications that no one has imagined yet.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - mia-code can only be controlled via the CLI — there is no programmatic API
14
+ - External scripts interact by spawning `mia-code` as a subprocess and parsing stdout
15
+ - No TypeScript types exist for request/response shapes — consumers guess at structures
16
+ - Building integrations requires reverse-engineering the CLI's behavior
17
+ - No streaming support for programmatic consumers — you get all output or nothing
18
+
19
+ **Desired State:**
20
+ - A published npm package `@mia-code/sdk` provides a typed API client
21
+ - All methods are auto-generated from the OpenAPI spec (RISE-089) — types cannot drift
22
+ - Streaming support via `AsyncIterable` for real-time message consumption
23
+ - Error handling uses typed errors matching the Named Error System (RISE-006)
24
+ - The SDK works in Node.js, Deno, Bun, and browser environments
25
+ - Documentation is generated from TypeDoc and published alongside the package
26
+
27
+ ## Desired Outcome Definition
28
+
29
+ A developer installs `@mia-code/sdk`, creates a client instance with a URL and optional password, and has full typed access to sessions, messages, tools, configuration, and permissions. Message streaming returns an `AsyncIterable` for real-time consumption. Errors are typed and descriptive.
30
+
31
+ ## Natural Language Functional Description
32
+
33
+ ### Installation and Setup
34
+
35
+ ```bash
36
+ npm install @mia-code/sdk
37
+ ```
38
+
39
+ ```typescript
40
+ import { MiaCodeClient } from "@mia-code/sdk"
41
+
42
+ const client = new MiaCodeClient({
43
+ url: "http://localhost:4096",
44
+ password: "optional-password",
45
+ })
46
+ ```
47
+
48
+ ### Client API Surface
49
+
50
+ **Sessions:**
51
+ ```typescript
52
+ const sessions = await client.sessions.list()
53
+ const session = await client.sessions.create({ title: "Refactor auth", directory: "/app" })
54
+ const details = await client.sessions.get(session.id)
55
+ await client.sessions.delete(session.id)
56
+ await client.sessions.update(session.id, { title: "New title" })
57
+ ```
58
+
59
+ **Messages:**
60
+ ```typescript
61
+ // Send and wait for complete response
62
+ const response = await client.messages.send(sessionId, "Explain this function")
63
+
64
+ // Stream response tokens as they arrive
65
+ for await (const event of client.messages.stream(sessionId, "Refactor this")) {
66
+ if (event.type === "delta") process.stdout.write(event.content)
67
+ if (event.type === "tool_start") console.log(`Running ${event.toolName}...`)
68
+ if (event.type === "done") console.log("\nComplete!")
69
+ }
70
+
71
+ // Get message history
72
+ const messages = await client.messages.list(sessionId, { limit: 50 })
73
+ ```
74
+
75
+ **Tools:**
76
+ ```typescript
77
+ const tools = await client.tools.list()
78
+ const result = await client.tools.execute("bash", { command: "ls -la" })
79
+ const tool = await client.tools.get("grep")
80
+ ```
81
+
82
+ **Configuration:**
83
+ ```typescript
84
+ const config = await client.config.get()
85
+ await client.config.update({ model: "claude-sonnet-4-20250514" })
86
+ ```
87
+
88
+ **Permissions:**
89
+ ```typescript
90
+ const rules = await client.permissions.list()
91
+ await client.permissions.respond(requestId, "y")
92
+ await client.permissions.reset()
93
+ ```
94
+
95
+ **Discovery (mDNS):**
96
+ ```typescript
97
+ const instances = await MiaCodeClient.discover({ timeout: 5000 })
98
+ // [{url: "http://192.168.1.10:4096", project: "frontend", auth: true}, ...]
99
+ const client = new MiaCodeClient(instances[0])
100
+ ```
101
+
102
+ ### Streaming Implementation
103
+
104
+ Message streaming uses SSE (RISE-091) under the hood, exposed as an `AsyncIterable`:
105
+
106
+ ```typescript
107
+ interface StreamEvent {
108
+ type: "delta" | "tool_start" | "tool_result" | "permission" | "error" | "done"
109
+ data: object
110
+ }
111
+
112
+ // The stream is an AsyncIterable — works with for-await-of
113
+ const stream = client.messages.stream(sessionId, content)
114
+
115
+ // Can also be consumed with callbacks
116
+ stream.on("delta", (data) => { /* ... */ })
117
+ stream.on("done", (data) => { /* ... */ })
118
+ ```
119
+
120
+ ### Error Handling
121
+
122
+ SDK errors are typed and match the Named Error System:
123
+
124
+ ```typescript
125
+ import { SessionNotFoundError, PermissionDeniedError, ValidationError } from "@mia-code/sdk"
126
+
127
+ try {
128
+ await client.sessions.get("nonexistent")
129
+ } catch (error) {
130
+ if (error instanceof SessionNotFoundError) {
131
+ console.log("Session does not exist:", error.message)
132
+ }
133
+ }
134
+ ```
135
+
136
+ All errors extend `MiaCodeError` with `name`, `message`, and `code` properties.
137
+
138
+ ### Type Safety
139
+
140
+ All request and response types are generated from Zod schemas via the OpenAPI spec:
141
+
142
+ ```typescript
143
+ import type { Session, Message, Tool, PermissionRule } from "@mia-code/sdk"
144
+
145
+ // TypeScript enforces correct usage
146
+ const session: Session = await client.sessions.create({
147
+ title: "My session",
148
+ directory: "/app",
149
+ // model: 123 ← TypeScript error: must be string
150
+ })
151
+ ```
152
+
153
+ ### Package Structure
154
+
155
+ ```
156
+ @mia-code/sdk/
157
+ ├── index.ts # main exports: MiaCodeClient, types, errors
158
+ ├── client.ts # MiaCodeClient class
159
+ ├── sessions.ts # SessionsAPI class
160
+ ├── messages.ts # MessagesAPI class (with streaming)
161
+ ├── tools.ts # ToolsAPI class
162
+ ├── config.ts # ConfigAPI class
163
+ ├── permissions.ts # PermissionsAPI class
164
+ ├── discovery.ts # mDNS discovery
165
+ ├── errors.ts # typed error classes
166
+ ├── types.ts # generated types from OpenAPI
167
+ └── stream.ts # SSE/WebSocket streaming utilities
168
+ ```
169
+
170
+ ### Environment Support
171
+
172
+ The SDK works across JavaScript runtimes:
173
+
174
+ - **Node.js 18+**: full support including mDNS discovery
175
+ - **Deno**: full support via npm compatibility
176
+ - **Bun**: full support
177
+ - **Browser**: all features except mDNS discovery (uses EventSource for streaming)
178
+
179
+ ## Supporting Structures
180
+
181
+ - **HTTP API Server (RISE-088)** provides the endpoints the SDK calls
182
+ - **OpenAPI Spec Generation (RISE-089)** generates the spec the SDK types are derived from
183
+ - **SSE Streaming (RISE-091)** powers the message streaming feature
184
+ - **WebSocket Support (RISE-090)** provides an alternative streaming transport
185
+ - **mDNS Discovery (RISE-092)** powers the `MiaCodeClient.discover()` method
186
+ - **Named Error System (RISE-006)** defines the error types the SDK exposes
187
+
188
+ ## Creative Advancement Scenarios
189
+
190
+ **Scenario 1 — Custom Web UI:**
191
+ A developer builds a custom chat interface using React and the SDK. `client.messages.stream()` feeds tokens into a state store. Tool executions render as expandable panels. The entire UI is 200 lines of TypeScript because the SDK handles all API complexity.
192
+
193
+ **Scenario 2 — CI/CD Code Review Bot:**
194
+ A GitHub Actions workflow uses the SDK to create a session, send a PR diff as a prompt, and collect the agent's review. The response is posted as a PR comment. The SDK's typed API ensures correct usage without reading API docs.
195
+
196
+ **Scenario 3 — Batch Automation:**
197
+ A Node.js script iterates over 50 files and sends each to mia-code for refactoring. `for await` streams each response, logging progress. Errors are caught and logged with typed error names. The script runs unattended overnight.
198
+
199
+ **Scenario 4 — VS Code Extension:**
200
+ A VS Code extension uses the SDK to connect to a running mia-code server. The developer highlights code, triggers a command, and the extension sends the selection as a prompt via `client.messages.send()`. The response appears in a panel — IDE-integrated AI assistance powered by the same mia-code agent.