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
package/src/mcp/utils.ts CHANGED
@@ -3,10 +3,13 @@
3
3
  */
4
4
 
5
5
  import { spawn } from "child_process";
6
- import { dirname, join } from "path";
7
- import { fileURLToPath } from "url";
8
-
9
- const __dirname = dirname(fileURLToPath(import.meta.url));
6
+ // Using low-level Server for direct JSON schema control (McpServer requires Zod)
7
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
8
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
9
+ import {
10
+ ListToolsRequestSchema,
11
+ CallToolRequestSchema,
12
+ } from "@modelcontextprotocol/sdk/types.js";
10
13
 
11
14
  export interface MCPTool {
12
15
  name: string;
@@ -23,6 +26,7 @@ export interface MCPTool {
23
26
  }
24
27
 
25
28
  export interface MCPToolResult {
29
+ [key: string]: unknown;
26
30
  content: Array<{
27
31
  type: "text";
28
32
  text: string;
@@ -33,7 +37,6 @@ export interface MCPToolResult {
33
37
  export interface MCPServerConfig {
34
38
  name: string;
35
39
  version: string;
36
- cliPath: string;
37
40
  tools: MCPTool[];
38
41
  }
39
42
 
@@ -105,17 +108,47 @@ export function buildArgs(
105
108
  mapping: Record<string, string>
106
109
  ): string[] {
107
110
  const result = [...command];
108
-
111
+
109
112
  for (const [key, flag] of Object.entries(mapping)) {
110
113
  const value = args[key];
111
114
  if (value !== undefined && value !== null && value !== "") {
112
115
  result.push(flag, String(value));
113
116
  }
114
117
  }
115
-
118
+
116
119
  if (args.session) {
117
120
  result.push("--session", args.session);
118
121
  }
119
-
122
+
120
123
  return result;
121
124
  }
125
+
126
+ /**
127
+ * Bootstrap an MCP server with JSON-RPC over stdio transport.
128
+ * Uses low-level Server API for direct JSON schema passthrough.
129
+ */
130
+ export async function bootstrapMCPServer(
131
+ config: MCPServerConfig,
132
+ handleTool: (name: string, args: Record<string, any>) => Promise<MCPToolResult>
133
+ ): Promise<void> {
134
+ const server = new Server(
135
+ { name: config.name, version: config.version },
136
+ { capabilities: { tools: {} } }
137
+ );
138
+
139
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
140
+ tools: config.tools.map(t => ({
141
+ name: t.name,
142
+ description: t.description,
143
+ inputSchema: t.inputSchema,
144
+ })),
145
+ }));
146
+
147
+ server.setRequestHandler(CallToolRequestSchema, async (request: any) => {
148
+ const { name, arguments: args } = request.params;
149
+ return handleTool(name, args ?? {});
150
+ });
151
+
152
+ const transport = new StdioServerTransport();
153
+ await server.connect(transport);
154
+ }
@@ -1,7 +1,7 @@
1
1
  import fs from "fs";
2
2
  import path from "path";
3
3
  import os from "os";
4
- import { MiaCodeSessionMeta, ChatMessage } from "./types.js";
4
+ import { MiaCodeSessionMeta, ChatMessage, Engine } from "./types.js";
5
5
 
6
6
  const SESSIONS_FILE = path.join(os.homedir(), ".mia-code-sessions.json");
7
7
  const HISTORY_DIR = path.join(os.homedir(), ".mia-code-history");
@@ -11,6 +11,11 @@ interface SessionIndex {
11
11
  byId: Record<string, MiaCodeSessionMeta>;
12
12
  }
13
13
 
14
+ /** Build the engine-qualified key for byProjectRoot lookup. */
15
+ function projectKey(projectRoot: string, engine?: Engine): string {
16
+ return engine ? `${engine}:${projectRoot}` : projectRoot;
17
+ }
18
+
14
19
  function loadIndex(): SessionIndex {
15
20
  if (!fs.existsSync(SESSIONS_FILE)) {
16
21
  return { byProjectRoot: {}, byId: {} };
@@ -34,7 +39,16 @@ function saveIndex(index: SessionIndex): void {
34
39
  export function rememberSession(meta: MiaCodeSessionMeta): void {
35
40
  const idx = loadIndex();
36
41
  if (meta.projectRoot) {
37
- idx.byProjectRoot[meta.projectRoot] = meta;
42
+ // Store under engine-qualified key so each engine has its own "last session"
43
+ idx.byProjectRoot[projectKey(meta.projectRoot, meta.engine)] = meta;
44
+
45
+ // Clean up stale legacy (unqualified) entry if it points to this same session,
46
+ // preventing a different engine from claiming it via fallback.
47
+ const legacyKey = meta.projectRoot; // bare, no engine prefix
48
+ const legacy = idx.byProjectRoot[legacyKey];
49
+ if (legacy && legacy.id === meta.id && meta.engine) {
50
+ delete idx.byProjectRoot[legacyKey];
51
+ }
38
52
  }
39
53
  idx.byId[meta.id] = meta;
40
54
  saveIndex(idx);
@@ -46,7 +60,7 @@ export function markSessionInitialized(id: string): void {
46
60
  if (session) {
47
61
  session.initialized = true;
48
62
  if (session.projectRoot) {
49
- idx.byProjectRoot[session.projectRoot] = session;
63
+ idx.byProjectRoot[projectKey(session.projectRoot, session.engine)] = session;
50
64
  }
51
65
  saveIndex(idx);
52
66
  }
@@ -57,8 +71,34 @@ export function isSessionInitialized(id: string): boolean {
57
71
  return idx.byId[id]?.initialized ?? false;
58
72
  }
59
73
 
60
- export function getLastSessionForProject(projectRoot: string): MiaCodeSessionMeta | null {
74
+ /**
75
+ * Get the last session for a project, optionally filtered by engine.
76
+ * When engine is provided, only returns a session owned by that engine.
77
+ * Falls back to legacy unqualified key if no engine-specific entry exists
78
+ * (for backward compatibility with pre-engine sessions).
79
+ */
80
+ export function getLastSessionForProject(projectRoot: string, engine?: Engine): MiaCodeSessionMeta | null {
61
81
  const idx = loadIndex();
82
+
83
+ // Try engine-qualified key first
84
+ if (engine) {
85
+ const qualified = idx.byProjectRoot[projectKey(projectRoot, engine)];
86
+ if (qualified) return qualified;
87
+
88
+ // Fallback: check unqualified key for legacy sessions that match engine
89
+ const legacy = idx.byProjectRoot[projectRoot];
90
+ if (legacy && (legacy.engine === engine || !legacy.engine)) {
91
+ // Migrate: promote to engine-qualified key and remove stale legacy entry
92
+ // so no other engine can claim it via the same fallback path.
93
+ idx.byProjectRoot[projectKey(projectRoot, engine)] = { ...legacy, engine };
94
+ delete idx.byProjectRoot[projectRoot];
95
+ saveIndex(idx);
96
+ return { ...legacy, engine };
97
+ }
98
+ return null;
99
+ }
100
+
101
+ // No engine filter — return whatever is there (unqualified key)
62
102
  return idx.byProjectRoot[projectRoot] ?? null;
63
103
  }
64
104
 
package/src/types.ts CHANGED
@@ -18,8 +18,9 @@ export interface MiaCodeSessionMeta {
18
18
  id: string;
19
19
  startedAt: string;
20
20
  model: string;
21
+ engine?: Engine; // Which engine owns this session
21
22
  projectRoot: string | null;
22
- initialized?: boolean; // Has engine acknowledged this session?
23
+ initialized?: boolean; // Has engine acknowledged this session?
23
24
  }
24
25
 
25
26
  export interface ChatMessage {
@@ -0,0 +1,36 @@
1
+ # 🌅 Mia Ceremony — Four Movements Footer
2
+
3
+ Tracks ceremony phase in Pi's footer status bar. Transitions automatically based on tool usage.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ # Quick test (works best with mia-tools loaded too)
9
+ pi -e /a/src/mia-code/widget/mia-ceremony/index.ts
10
+
11
+ # Permanent
12
+ ln -s /a/src/mia-code/widget/mia-ceremony/index.ts ~/.pi/agent/extensions/mia-ceremony.ts
13
+ ```
14
+
15
+ ## Phases
16
+
17
+ | Phase | When | Trigger |
18
+ |-------|------|---------|
19
+ | 🌅 EAST — Gathering | Understanding, decomposing | Session start, PDE decompose |
20
+ | 🔥 SOUTH — Building | Implementing, growing | STC chart create |
21
+ | 🌊 WEST — Validating | Testing, reflecting | STC steps completed |
22
+ | ❄️ NORTH — Completing | Deploying, documenting | STC review |
23
+
24
+ ## Commands
25
+
26
+ - `/ceremony` — Show current phase
27
+ - `/ceremony south` — Manually set phase
28
+
29
+ ## Load All Three Together
30
+
31
+ ```bash
32
+ pi \
33
+ -e /a/src/mia-code/widget/miette-echo/index.ts \
34
+ -e /a/src/mia-code/widget/mia-tools/index.ts \
35
+ -e /a/src/mia-code/widget/mia-ceremony/index.ts
36
+ ```
@@ -0,0 +1,143 @@
1
+ /**
2
+ * 🌅 Mia Ceremony — Four Movements Session Lifecycle
3
+ *
4
+ * Tracks ceremony phase in the footer status bar:
5
+ * 🌅 EAST — Gathering (understanding, decomposing)
6
+ * 🔥 SOUTH — Building (implementing, growing)
7
+ * 🌊 WEST — Validating (testing, reflecting)
8
+ * ❄️ NORTH — Completing (deploying, documenting)
9
+ *
10
+ * Phase transitions happen automatically based on tool usage:
11
+ * - PDE decompose → EAST
12
+ * - STC chart create → SOUTH
13
+ * - STC step complete → progresses toward WEST/NORTH
14
+ * - STC review → NORTH
15
+ *
16
+ * Manual: /ceremony [east|south|west|north] to set phase
17
+ *
18
+ * Install: ln -s /a/src/mia-code/widget/mia-ceremony/index.ts ~/.pi/agent/extensions/mia-ceremony.ts
19
+ * Or test: pi -e /a/src/mia-code/widget/mia-ceremony/index.ts
20
+ */
21
+
22
+ import type { ExtensionAPI, ExtensionContext } from "@mariozechner/pi-coding-agent";
23
+
24
+ type Direction = "east" | "south" | "west" | "north";
25
+
26
+ interface CeremonyState {
27
+ phase: Direction;
28
+ turnCount: number;
29
+ pdeUsed: boolean;
30
+ chartCreated: boolean;
31
+ stepsCompleted: number;
32
+ reviewDone: boolean;
33
+ }
34
+
35
+ const PHASES: Record<Direction, { emoji: string; name: string; verb: string }> = {
36
+ east: { emoji: "🌅", name: "EAST", verb: "Gathering" },
37
+ south: { emoji: "🔥", name: "SOUTH", verb: "Building" },
38
+ west: { emoji: "🌊", name: "WEST", verb: "Validating" },
39
+ north: { emoji: "❄️", name: "NORTH", verb: "Completing" },
40
+ };
41
+
42
+ function phaseLabel(dir: Direction): string {
43
+ const p = PHASES[dir];
44
+ return `${p.emoji} ${p.name} — ${p.verb}`;
45
+ }
46
+
47
+ export default function miaCeremony(pi: ExtensionAPI) {
48
+ const state: CeremonyState = {
49
+ phase: "east",
50
+ turnCount: 0,
51
+ pdeUsed: false,
52
+ chartCreated: false,
53
+ stepsCompleted: 0,
54
+ reviewDone: false,
55
+ };
56
+
57
+ function updateStatus(ctx: ExtensionContext) {
58
+ if (!ctx.hasUI) return;
59
+ ctx.ui.setStatus("ceremony", phaseLabel(state.phase));
60
+ }
61
+
62
+ function inferPhase(): Direction {
63
+ // Review done → NORTH
64
+ if (state.reviewDone) return "north";
65
+ // Steps being completed → WEST (validation/reflection)
66
+ if (state.stepsCompleted >= 2) return "west";
67
+ // Chart created, working → SOUTH
68
+ if (state.chartCreated) return "south";
69
+ // PDE used or early turns → EAST
70
+ return "east";
71
+ }
72
+
73
+ // --- Session lifecycle ---
74
+
75
+ pi.on("session_start", (_event, ctx) => {
76
+ updateStatus(ctx);
77
+ });
78
+
79
+ pi.on("session_switch", (_event, ctx) => {
80
+ updateStatus(ctx);
81
+ });
82
+
83
+ pi.on("session_shutdown", (_event, ctx) => {
84
+ if (ctx.hasUI) ctx.ui.setStatus("ceremony", undefined);
85
+ });
86
+
87
+ // --- Track turns ---
88
+
89
+ pi.on("turn_end", (_event, ctx) => {
90
+ state.turnCount++;
91
+ updateStatus(ctx);
92
+ });
93
+
94
+ // --- Track tool usage for automatic phase transitions ---
95
+
96
+ pi.on("tool_execution_end", (event, ctx) => {
97
+ const name = event.toolName;
98
+
99
+ if (name === "pde_decompose") {
100
+ state.pdeUsed = true;
101
+ // PDE means we're gathering/understanding
102
+ if (state.phase === "east") {
103
+ // Stay east — this IS east
104
+ }
105
+ }
106
+
107
+ if (name === "stc_create") {
108
+ state.chartCreated = true;
109
+ // Chart creation means we have a plan → SOUTH
110
+ state.phase = inferPhase();
111
+ }
112
+
113
+ if (name === "stc_complete_step") {
114
+ state.stepsCompleted++;
115
+ state.phase = inferPhase();
116
+ }
117
+
118
+ if (name === "stc_review") {
119
+ state.reviewDone = true;
120
+ state.phase = inferPhase();
121
+ }
122
+
123
+ updateStatus(ctx);
124
+ });
125
+
126
+ // --- Manual command ---
127
+
128
+ pi.registerCommand("ceremony", {
129
+ description: "Set ceremony phase: /ceremony [east|south|west|north]",
130
+ handler: async (args, ctx) => {
131
+ const dir = args.trim().toLowerCase() as Direction;
132
+ if (dir && PHASES[dir]) {
133
+ state.phase = dir;
134
+ updateStatus(ctx);
135
+ ctx.ui.notify(`Ceremony phase set to ${phaseLabel(dir)}`, "info");
136
+ } else if (!dir) {
137
+ ctx.ui.notify(`Current phase: ${phaseLabel(state.phase)}`, "info");
138
+ } else {
139
+ ctx.ui.notify("Usage: /ceremony [east|south|west|north]", "info");
140
+ }
141
+ },
142
+ });
143
+ }
@@ -0,0 +1,39 @@
1
+ # 🌅 Mia Interceptor — Proactive PDE Sensing
2
+
3
+ Gently asks before complex prompts reach the agent.
4
+
5
+ ```
6
+ 🌅 This prompt touches 4 areas + implicit intents — want to decompose first?
7
+ ```
8
+
9
+ ## Install
10
+
11
+ ```bash
12
+ # Quick test
13
+ pi -e /a/src/mia-code/widget/mia-interceptor/index.ts
14
+
15
+ # Permanent
16
+ ln -s /a/src/mia-code/widget/mia-interceptor/index.ts ~/.pi/agent/extensions/mia-interceptor.ts
17
+ ```
18
+
19
+ ## How It Works
20
+
21
+ 1. Hooks `on("input")` — sees every prompt before the agent
22
+ 2. Counts distinct action areas (creating, testing, deploying, etc.)
23
+ 3. Checks for implicit intent markers ("I assume", "somehow", "make sure")
24
+ 4. If complexity ≥ 3 areas → asks the question
25
+ 5. If yes → runs PDE, shows result in chat, then lets the original prompt proceed
26
+ 6. If no → continues normally
27
+ 7. Cooldown: won't ask again for 5 turns
28
+
29
+ ## Behavior
30
+
31
+ - **Never blocks** — always a yes/no question, never automatic
32
+ - **Short prompts ignored** — under 30 chars, no question
33
+ - **Slash commands ignored** — `/pde`, `/stc` etc pass through
34
+ - **Cooldown** — won't nag, waits 5 turns between asks
35
+ - **PDE + continue** — decomposition shows as context, then your prompt still goes to the agent
36
+
37
+ ## Future: Sensing Layer
38
+
39
+ This interceptor is designed to eventually feed miawa storytelling too — sensing milestone moments, phase transitions, and narrative-worthy beats from the flow of input.
@@ -0,0 +1,221 @@
1
+ /**
2
+ * 🌅 Mia Interceptor — Proactive PDE Prompt Sensing
3
+ *
4
+ * Listens to every input. When a prompt looks complex (multiple verbs,
5
+ * conjunctions, implicit intents), gently asks:
6
+ *
7
+ * 🌅 This prompt touches 3 areas — want to decompose first? (y/n)
8
+ *
9
+ * If yes → runs pde_decompose, shows result, then lets user proceed.
10
+ * If no → continues normally.
11
+ *
12
+ * Light touch. Never blocks flow. Just asks once.
13
+ *
14
+ * Install: ln -s /a/src/mia-code/widget/mia-interceptor/index.ts ~/.pi/agent/extensions/mia-interceptor.ts
15
+ * Or test: pi -e /a/src/mia-code/widget/mia-interceptor/index.ts
16
+ */
17
+
18
+ import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
19
+ import { spawn } from "child_process";
20
+ import { existsSync, readFileSync } from "fs";
21
+ import { join } from "path";
22
+
23
+ const MIACO_BIN = join("/a/src/mia-code/miaco/dist/index.js");
24
+
25
+ // ============================================================================
26
+ // Complexity Heuristics
27
+ // ============================================================================
28
+
29
+ /** Action verbs that signal distinct intents */
30
+ const ACTION_VERBS = [
31
+ "create", "build", "make", "write", "generate", "design", "implement",
32
+ "update", "modify", "change", "refactor", "fix", "edit", "alter",
33
+ "analyze", "review", "check", "inspect", "study", "examine", "investigate",
34
+ "deploy", "publish", "release", "ship", "install", "setup", "configure",
35
+ "test", "validate", "verify", "debug",
36
+ "delete", "remove", "clean", "drop",
37
+ "move", "migrate", "port", "transfer",
38
+ "document", "explain", "describe",
39
+ "connect", "integrate", "link", "bridge",
40
+ "observe", "envision", "plan", "decompose",
41
+ ];
42
+
43
+ /** Words that join separate intents */
44
+ const CONJUNCTIONS = ["and", "also", "then", "after that", "plus", "additionally", "as well", "while"];
45
+
46
+ /** Hedging language that signals implicit intents */
47
+ const IMPLICIT_MARKERS = [
48
+ "somehow", "probably", "maybe", "I assume", "you will", "I expect",
49
+ "which means", "so that", "in order to", "make sure",
50
+ ];
51
+
52
+ interface ComplexityAssessment {
53
+ score: number;
54
+ areas: string[];
55
+ hasImplicit: boolean;
56
+ reason: string;
57
+ }
58
+
59
+ function assessComplexity(text: string): ComplexityAssessment {
60
+ const lower = text.toLowerCase();
61
+ const words = lower.split(/\s+/);
62
+
63
+ // Count distinct action verbs
64
+ const foundVerbs = new Set<string>();
65
+ for (const verb of ACTION_VERBS) {
66
+ // Match whole words or verb at start of word (e.g., "creating")
67
+ const re = new RegExp(`\\b${verb}(e?s|ed|ing)?\\b`, "i");
68
+ if (re.test(lower)) {
69
+ foundVerbs.add(verb);
70
+ }
71
+ }
72
+
73
+ // Count conjunctions joining clauses
74
+ let conjunctionCount = 0;
75
+ for (const conj of CONJUNCTIONS) {
76
+ const re = new RegExp(`\\b${conj}\\b`, "gi");
77
+ const matches = lower.match(re);
78
+ if (matches) conjunctionCount += matches.length;
79
+ }
80
+
81
+ // Check for implicit intent markers
82
+ let implicitCount = 0;
83
+ for (const marker of IMPLICIT_MARKERS) {
84
+ if (lower.includes(marker)) implicitCount++;
85
+ }
86
+
87
+ // Compute areas (groups of related verbs)
88
+ const areas: string[] = [];
89
+ const verbGroups: Record<string, string[]> = {
90
+ "creating": ["create", "build", "make", "write", "generate", "design", "implement"],
91
+ "modifying": ["update", "modify", "change", "refactor", "fix", "edit", "alter"],
92
+ "analyzing": ["analyze", "review", "check", "inspect", "study", "examine", "investigate"],
93
+ "deploying": ["deploy", "publish", "release", "ship", "install", "setup", "configure"],
94
+ "testing": ["test", "validate", "verify", "debug"],
95
+ "removing": ["delete", "remove", "clean", "drop"],
96
+ "moving": ["move", "migrate", "port", "transfer"],
97
+ "documenting": ["document", "explain", "describe"],
98
+ "integrating": ["connect", "integrate", "link", "bridge"],
99
+ "planning": ["observe", "envision", "plan", "decompose"],
100
+ };
101
+
102
+ for (const [area, verbs] of Object.entries(verbGroups)) {
103
+ if (verbs.some((v) => foundVerbs.has(v))) {
104
+ areas.push(area);
105
+ }
106
+ }
107
+
108
+ // Score: primarily driven by distinct areas
109
+ const score = areas.length + (conjunctionCount > 0 ? 0.5 : 0) + (implicitCount > 0 ? 0.5 : 0);
110
+
111
+ // Build reason
112
+ const parts: string[] = [];
113
+ if (areas.length > 1) parts.push(`${areas.length} areas (${areas.join(", ")})`);
114
+ if (implicitCount > 0) parts.push(`${implicitCount} implicit intent(s)`);
115
+ if (conjunctionCount > 1) parts.push(`${conjunctionCount} conjunctions`);
116
+
117
+ return {
118
+ score,
119
+ areas,
120
+ hasImplicit: implicitCount > 0,
121
+ reason: parts.join(", ") || "single intent",
122
+ };
123
+ }
124
+
125
+ // ============================================================================
126
+ // Extension
127
+ // ============================================================================
128
+
129
+ /** Threshold: prompt needs at least this many areas to trigger */
130
+ const COMPLEXITY_THRESHOLD = 3;
131
+
132
+ /** Don't ask again within this many turns */
133
+ const COOLDOWN_TURNS = 5;
134
+
135
+ export default function miaInterceptor(pi: ExtensionAPI) {
136
+ let turnsSinceLastAsk = COOLDOWN_TURNS; // Start ready
137
+
138
+ pi.on("turn_end", () => {
139
+ turnsSinceLastAsk++;
140
+ });
141
+
142
+ pi.on("input", async (event, ctx) => {
143
+ if (!ctx.hasUI) return { action: "continue" as const };
144
+
145
+ const text = event.text.trim();
146
+
147
+ // Skip slash commands, short prompts, or cooldown
148
+ if (text.startsWith("/") || text.length < 30 || turnsSinceLastAsk < COOLDOWN_TURNS) {
149
+ return { action: "continue" as const };
150
+ }
151
+
152
+ const assessment = assessComplexity(text);
153
+
154
+ if (assessment.score >= COMPLEXITY_THRESHOLD) {
155
+ const areaCount = assessment.areas.length;
156
+ const implicit = assessment.hasImplicit ? " + implicit intents" : "";
157
+ const message = `🌅 This prompt touches ${areaCount} areas${implicit} — want to decompose first?`;
158
+
159
+ const decompose = await ctx.ui.confirm("Prompt Decomposition", message);
160
+ turnsSinceLastAsk = 0;
161
+
162
+ if (decompose) {
163
+ ctx.ui.setStatus("pde", "🌅 decomposing...");
164
+
165
+ // Run PDE
166
+ const result = await runMiaco(
167
+ ["decompose", "run", "-e", "claude", "-p", text, "--json"],
168
+ ctx.cwd,
169
+ );
170
+
171
+ ctx.ui.setStatus("pde", undefined);
172
+
173
+ if (result.code === 0) {
174
+ const parsed = parseJson(result.stdout);
175
+ if (parsed?.markdownPath && existsSync(parsed.markdownPath)) {
176
+ const md = readFileSync(parsed.markdownPath, "utf-8");
177
+ pi.sendMessage({
178
+ customType: "pde-result",
179
+ content: md,
180
+ display: true,
181
+ details: parsed,
182
+ });
183
+ }
184
+ }
185
+
186
+ // Let the original prompt continue to the agent with PDE context
187
+ return { action: "continue" as const };
188
+ }
189
+ }
190
+
191
+ return { action: "continue" as const };
192
+ });
193
+ }
194
+
195
+ // ============================================================================
196
+ // Helpers (duplicated from mia-tools to keep extensions independent)
197
+ // ============================================================================
198
+
199
+ function runMiaco(args: string[], cwd: string): Promise<{ stdout: string; stderr: string; code: number }> {
200
+ return new Promise((resolve) => {
201
+ const child = spawn("node", [MIACO_BIN, ...args], {
202
+ cwd,
203
+ stdio: ["ignore", "pipe", "pipe"],
204
+ env: process.env,
205
+ });
206
+ let stdout = "";
207
+ let stderr = "";
208
+ child.stdout.on("data", (d: Buffer) => (stdout += d.toString()));
209
+ child.stderr.on("data", (d: Buffer) => (stderr += d.toString()));
210
+ child.on("close", (code) => resolve({ stdout, stderr, code: code ?? 1 }));
211
+ child.on("error", (err) => resolve({ stdout: "", stderr: err.message, code: 1 }));
212
+ });
213
+ }
214
+
215
+ function parseJson(stdout: string): any {
216
+ try {
217
+ return JSON.parse(stdout.trim());
218
+ } catch {
219
+ return null;
220
+ }
221
+ }
@@ -0,0 +1,37 @@
1
+ # 🔧 Mia Tools — PDE + STC as Pi Extension
2
+
3
+ Registers miaco's **Prompt Decomposition Engine** and **Structural Tension Charts** as LLM-callable tools and slash commands within Pi.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ # Quick test
9
+ pi -e /a/src/mia-code/widget/mia-tools/index.ts
10
+
11
+ # Permanent
12
+ ln -s /a/src/mia-code/widget/mia-tools/index.ts ~/.pi/agent/extensions/mia-tools.ts
13
+ ```
14
+
15
+ **Requires:** miaco built (`cd /a/src/mia-code/miaco && npm run build`)
16
+
17
+ ## LLM-Callable Tools
18
+
19
+ | Tool | Description |
20
+ |------|-------------|
21
+ | `pde_decompose` | Decompose complex prompt into structured intents + Four Directions |
22
+ | `stc_create` | Create structural tension chart (outcome vs reality) |
23
+ | `stc_add_step` | Add action step to a chart |
24
+ | `stc_complete_step` | Mark step complete |
25
+ | `stc_review` | Creator Moment of Truth — review chart progress |
26
+ | `stc_list` | List active charts |
27
+
28
+ ## Slash Commands
29
+
30
+ - `/pde <prompt>` — Decompose a prompt, show result in chat
31
+ - `/pde` — List recent decompositions
32
+ - `/stc` — List active charts
33
+ - `/stc create` — Interactive chart creation (prompts for outcome + reality)
34
+
35
+ ## How It Works
36
+
37
+ Tools delegate to `miaco` CLI via `child_process.spawn` with `--json` output parsing. Custom `renderResult` provides visual summaries in the TUI.