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,148 @@
1
+ # RISE-083: Deferred Effects
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/083-deferred-effects.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ Side effects — event publishing, cache invalidation, file operations, notifications — are separated from database mutations and executed only after the data is safely committed. This eliminates an entire class of consistency bugs: no event about a session that wasn't persisted, no cache invalidation for a write that rolled back, no notification about an action that never completed.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - mia-code performs side effects inline with data mutations — no separation of concerns
14
+ - If a JSON write fails mid-operation, any events or notifications already fired cannot be retracted
15
+ - Cache state can become stale if a write operation partially succeeds
16
+ - No mechanism exists to queue side effects and conditionally execute them
17
+ - Event publishing and data persistence are tightly coupled — testing either in isolation is difficult
18
+ - Concurrent operations can interleave mutations and effects in unpredictable order
19
+
20
+ **Desired State:**
21
+ - Side effects are registered during transactions via `tx.effect()` but not executed until commit
22
+ - If the transaction rolls back, all registered effects are silently discarded
23
+ - Effects execute in registration order after the transaction successfully commits
24
+ - Effect errors are logged but never cause transaction rollback (effects are post-commit)
25
+ - The pattern is consistent and enforced — all side effects go through the deferred mechanism
26
+ - Testing is simplified: verify mutations and effects independently
27
+
28
+ ## Desired Outcome Definition
29
+
30
+ Within a transaction, code registers three effects: publish a `session.created` event, invalidate the session list cache, and write an audit log entry. The transaction commits — all three effects execute in order. In another case, the transaction fails on the second insert — the transaction rolls back and none of the three effects execute. The system is always consistent.
31
+
32
+ ## Natural Language Functional Description
33
+
34
+ ### Effect Registration
35
+
36
+ Within a transaction, effects are registered using `tx.effect()`:
37
+
38
+ ```typescript
39
+ await db.transaction(async (tx) => {
40
+ const session = { id: "abc", root: "/project" };
41
+
42
+ await tx.run("INSERT INTO sessions ...", [session.id, session.root]);
43
+
44
+ // Effect 1: Publish event
45
+ tx.effect(() => {
46
+ Bus.publish("session.created", session);
47
+ });
48
+
49
+ // Effect 2: Invalidate cache
50
+ tx.effect(() => {
51
+ sessionCache.invalidate(session.root);
52
+ });
53
+
54
+ // Effect 3: Audit log
55
+ tx.effect(() => {
56
+ auditLog.write("session_created", session.id);
57
+ });
58
+
59
+ await tx.run("INSERT INTO messages ...", [msgId, session.id]);
60
+ });
61
+ // All three effects execute here, in order, only if transaction committed
62
+ ```
63
+
64
+ ### Effect Types
65
+
66
+ Effects can encapsulate any side effect:
67
+
68
+ **Event Publishing** — the most common effect. Ensures events about data changes only fire after the data is persisted:
69
+ ```typescript
70
+ tx.effect(() => Bus.publish("message.added", { sessionId, messageId }));
71
+ ```
72
+
73
+ **Cache Invalidation** — ensures caches are invalidated only after the underlying data actually changed:
74
+ ```typescript
75
+ tx.effect(() => queryCache.delete(`sessions:${projectRoot}`));
76
+ ```
77
+
78
+ **File Operations** — ensures files are only written/modified after the database records the intent:
79
+ ```typescript
80
+ tx.effect(() => fs.writeFileSync(exportPath, sessionExport));
81
+ ```
82
+
83
+ **Notifications** — ensures users/plugins are notified only about completed operations:
84
+ ```typescript
85
+ tx.effect(() => pluginManager.notify("session.created", sessionData));
86
+ ```
87
+
88
+ **UI Updates** — ensures the interface reflects committed state:
89
+ ```typescript
90
+ tx.effect(() => tui.refresh("session-list"));
91
+ ```
92
+
93
+ ### Execution Semantics
94
+
95
+ 1. **Registration:** `tx.effect(callback)` appends the callback to an internal queue. No execution occurs.
96
+ 2. **On commit:** After the SQL transaction commits, iterate the queue and execute each callback in order.
97
+ 3. **On rollback:** Discard the entire queue. No callbacks execute. No logging needed.
98
+ 4. **Error handling:** If an effect callback throws, catch the error, log it with context, and continue to the next effect. Effects are best-effort — they cannot retroactively undo the committed transaction.
99
+
100
+ ### Error Isolation
101
+
102
+ ```typescript
103
+ await db.transaction(async (tx) => {
104
+ await tx.run("INSERT INTO sessions ...");
105
+
106
+ tx.effect(() => {
107
+ throw new Error("Event bus unavailable");
108
+ // This error is caught and logged
109
+ // Does NOT rollback the transaction
110
+ // Does NOT prevent subsequent effects
111
+ });
112
+
113
+ tx.effect(() => {
114
+ sessionCache.invalidate(root);
115
+ // This still executes even if the previous effect failed
116
+ });
117
+ });
118
+ // Transaction committed. First effect logged error. Second effect ran.
119
+ ```
120
+
121
+ ### Implementation
122
+
123
+ The `Transaction` class maintains an internal effect queue. `effect()` appends callbacks; `commit()` executes them in order after SQL commit (catching and logging errors); `rollback()` discards the queue. Effects registered within savepoints follow the savepoint's fate — if a savepoint rolls back, its effects are discarded while the outer transaction's effects remain.
124
+
125
+ ### Testing
126
+
127
+ Deferred effects simplify testing by separating mutations from triggers. Test data inserts independently from event assertions — verify the transaction wrote correct rows, then separately verify the correct events fired after commit.
128
+
129
+ ## Supporting Structures
130
+
131
+ - **Database Transactions (RISE-082)** provides the transactional context where effects are registered
132
+ - **Event Bus (RISE-002)** is the primary consumer of deferred effects for event publishing
133
+ - **SQLite Storage (RISE-080)** provides the database layer that commits trigger effect execution
134
+ - **Structured Logging (RISE-007)** records effect failures for debugging
135
+
136
+ ## Creative Advancement Scenarios
137
+
138
+ **Scenario 1 — Consistent Event Publishing:**
139
+ A session is created in a transaction. The `session.created` event is deferred. Mid-transaction, the message insert fails due to a constraint violation. The transaction rolls back. The event never fires. No UI component, no plugin, no logger ever learns about a session that doesn't exist.
140
+
141
+ **Scenario 2 — Cache Coherence:**
142
+ A batch update modifies 50 messages within a transaction. Cache invalidation is deferred. If the batch fails at message #30, the cache is never invalidated — it still holds the correct (pre-update) data. If the batch succeeds, the cache is invalidated once (not 50 times).
143
+
144
+ **Scenario 3 — Plugin Notification Safety:**
145
+ A plugin subscribes to `session.created` events. The deferred effect ensures the plugin only receives the event after the session is queryable in the database. The plugin can immediately call `db.get("SELECT * FROM sessions WHERE id = ?")` and find the session — guaranteed.
146
+
147
+ **Scenario 4 — Effect Error Resilience:**
148
+ An audit logging service is down. The deferred effect that writes to the audit log throws. The error is logged locally. The next effect (cache invalidation) runs normally. The committed transaction is unaffected. When the audit service recovers, the gap is acceptable — effects are best-effort.
@@ -0,0 +1,123 @@
1
+ # RISE-084: Permission Rules
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/084-permission-rules.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ mia-code gives developers explicit, composable control over what an agent is allowed to do. Each permission rule is a small declarative statement — a single fact about what is permitted, denied, or worth asking about. By stacking these rules into an ordered array, a developer builds a security posture that fits their exact workflow without reaching for a `--yolo` flag or manually approving every action.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - mia-code relies on the `--yolo` flag to bypass all safety prompts — it is all-or-nothing
14
+ - Without `--yolo`, every write and bash operation triggers an interactive confirmation
15
+ - There is no way to express "allow writes to test files but ask for production files"
16
+ - Permission logic is scattered across tool execution paths with ad-hoc checks
17
+ - Developers who trust the agent for some tasks but not others have no middle ground
18
+ - No concept of a permission rule as a data structure — decisions are hardcoded behavior
19
+
20
+ **Desired State:**
21
+ - Each permission is a typed rule object: `{permission: string, pattern?: string, action: "allow"|"deny"|"ask"}`
22
+ - Rules are stored as an ordered array — evaluation is first-match-wins, like firewall rules
23
+ - Permission names map to tool IDs or resource categories: "read", "write", "edit", "bash", "external_directory", "question", plus any registered tool ID
24
+ - A default ruleset provides a reasonable security baseline out of the box
25
+ - Custom rules in project or global config override defaults naturally
26
+ - Rules are composable: a developer adds one rule to change one behavior without touching the rest
27
+
28
+ ## Desired Outcome Definition
29
+
30
+ An agent attempting any action is checked against an ordered array of permission rules. The first rule whose permission name and optional pattern match the action determines the outcome: allow silently, deny silently, or ask the user. Developers configure rules declaratively in config files without writing code.
31
+
32
+ ## Natural Language Functional Description
33
+
34
+ ### Rule Structure
35
+
36
+ A permission rule is a plain object with three required fields and one optional field:
37
+
38
+ ```typescript
39
+ interface PermissionRule {
40
+ permission: string // tool ID or category: "read", "write", "edit", "bash", "external_directory", "question", or any tool ID
41
+ pattern?: string // optional glob pattern scoping the rule to specific paths or commands
42
+ action: "allow" | "deny" | "ask" // what happens when this rule matches
43
+ }
44
+ ```
45
+
46
+ ### Default Rules
47
+
48
+ When no custom rules are configured, mia-code applies this baseline:
49
+
50
+ ```json
51
+ [
52
+ {"permission": "read", "action": "allow"},
53
+ {"permission": "write", "action": "ask"},
54
+ {"permission": "edit", "action": "ask"},
55
+ {"permission": "bash", "action": "ask"},
56
+ {"permission": "external_directory", "action": "deny"},
57
+ {"permission": "question", "action": "allow"}
58
+ ]
59
+ ```
60
+
61
+ This default is conservative: reading and asking questions are safe, writing and bash require approval, and accessing directories outside the project is blocked.
62
+
63
+ ### Evaluation Algorithm
64
+
65
+ When the agent invokes a tool, the permission system:
66
+
67
+ 1. Identifies the permission name (tool ID or mapped category)
68
+ 2. Determines the target (file path, command string, or directory)
69
+ 3. Iterates through the rule array in order
70
+ 4. For each rule: if the permission name matches AND (no pattern OR pattern matches target), this rule applies
71
+ 5. Returns the action from the first matching rule
72
+ 6. If no rule matches, the default action is "ask"
73
+
74
+ First-match-wins means rule ordering matters. More specific rules go before general ones.
75
+
76
+ ### Rule Examples
77
+
78
+ - `{"permission": "bash", "pattern": "rm *", "action": "deny"}` — blocks destructive bash commands
79
+ - `{"permission": "write", "pattern": "*.test.ts", "action": "allow"}` — auto-allows writing test files
80
+ - `{"permission": "write", "pattern": "src/**/*.ts", "action": "allow"}` — auto-allows all TypeScript writes in src
81
+ - `{"permission": "bash", "pattern": "npm test*", "action": "allow"}` — auto-allows running tests
82
+ - `{"permission": "external_directory", "pattern": "/tmp/**", "action": "allow"}` — allows access to temp directory
83
+ - `{"permission": "edit", "action": "allow"}` — blanket allow all edits (placed last as a catch-all)
84
+
85
+ ### Configuration
86
+
87
+ Rules are specified in mia-code config under the `permissions` key:
88
+
89
+ ```json
90
+ {
91
+ "permissions": {
92
+ "rules": [
93
+ {"permission": "write", "pattern": "*.test.ts", "action": "allow"},
94
+ {"permission": "bash", "pattern": "rm *", "action": "deny"},
95
+ {"permission": "bash", "pattern": "npm *", "action": "allow"}
96
+ ]
97
+ }
98
+ }
99
+ ```
100
+
101
+ Custom rules are prepended to the default rules, so they take priority by virtue of position.
102
+
103
+ ## Supporting Structures
104
+
105
+ - **Permission Glob Patterns (RISE-085)** defines the glob matching syntax used in rule patterns
106
+ - **Permission Merging (RISE-086)** defines how rules from multiple sources combine into one effective ruleset
107
+ - **Permission Modes (RISE-087)** defines the three action modes and their user interaction behavior
108
+ - **Zod Schema Validation (RISE-005)** validates rule objects at configuration load time
109
+ - **Named Error System (RISE-006)** provides typed errors for permission denials
110
+
111
+ ## Creative Advancement Scenarios
112
+
113
+ **Scenario 1 — Test-Driven Trust:**
114
+ A developer adds `{"permission": "write", "pattern": "*.test.ts", "action": "allow"}` and `{"permission": "bash", "pattern": "npm test", "action": "allow"}` to their project config. The agent writes and runs tests freely but still asks before modifying production code. Trust is earned incrementally.
115
+
116
+ **Scenario 2 — Locked-Down Production:**
117
+ A team adds `{"permission": "bash", "pattern": "rm *", "action": "deny"}` and `{"permission": "write", "pattern": "*.env*", "action": "deny"}` to the global config. No agent on any project can delete files or modify environment files, regardless of other settings.
118
+
119
+ **Scenario 3 — Progressive Relaxation:**
120
+ A new developer starts with all defaults. Over time they add allow rules for specific patterns they trust. Their permission config becomes a document of what they've learned to trust — a personal security policy that grows with experience.
121
+
122
+ **Scenario 4 — Per-Tool Precision:**
123
+ A developer creates rules using specific tool IDs: `{"permission": "grep", "action": "allow"}`, `{"permission": "glob", "action": "allow"}`, `{"permission": "bash", "pattern": "git *", "action": "allow"}`. Each tool gets its own permission treatment.
@@ -0,0 +1,113 @@
1
+ # RISE-085: Permission Glob Patterns
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/085-permission-glob-patterns.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ mia-code uses file-path glob patterns to give developers surgical precision over permission scoping. Instead of blanket allow-or-deny, a developer writes a pattern like `src/**/*.test.ts` and the rule applies only to test files under src. Glob syntax is the universal language developers already know from `.gitignore`, shell expansion, and build tools — no new DSL to learn, no regex complexity to debug.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - mia-code has no pattern-based permission scoping — permissions are all-or-nothing per tool
14
+ - Developers cannot distinguish between "write to test files" and "write to production files"
15
+ - Bash command filtering does not exist — any bash command is treated the same
16
+ - The `--yolo` flag removes all checks; without it, every action of the same type gets the same treatment
17
+ - No glob matching library is integrated for permission purposes
18
+
19
+ **Desired State:**
20
+ - Permission rules accept an optional `pattern` field containing a glob expression
21
+ - Glob patterns match against file paths (for read/write/edit), command strings (for bash), and directory paths (for external_directory)
22
+ - Standard glob syntax is used: `*`, `**`, `?`, `{a,b}`, negation via `!`
23
+ - Pattern matching is efficient and cached — no performance penalty on hot paths
24
+ - A rule without a pattern matches all targets universally (acts as a catch-all)
25
+ - Case sensitivity follows the platform convention: case-insensitive on macOS/Windows, case-sensitive on Linux
26
+
27
+ ## Desired Outcome Definition
28
+
29
+ When a permission rule includes a `pattern` field, the pattern is evaluated against the relevant target string (file path, command, or directory). The glob syntax supports the same wildcards developers use in `.gitignore` and shell scripts. Matching is fast, correct, and platform-aware.
30
+
31
+ ## Natural Language Functional Description
32
+
33
+ ### Glob Syntax Reference
34
+
35
+ | Pattern | Meaning | Example Match |
36
+ |------------|----------------------------------------------|--------------------------------|
37
+ | `*` | Any characters within a single path segment | `*.ts` matches `foo.ts` |
38
+ | `**` | Any characters across multiple path segments | `src/**/*.ts` matches `src/a/b/c.ts` |
39
+ | `?` | Exactly one character | `?.ts` matches `a.ts` |
40
+ | `{a,b}` | Alternatives — matches either `a` or `b` | `*.{ts,js}` matches both |
41
+ | `!pattern` | Negation — excludes matches | `!node_modules/**` excludes |
42
+
43
+ ### Target Types
44
+
45
+ Patterns are matched against different targets depending on the permission category:
46
+
47
+ - **read / write / edit**: matched against the file path relative to the project root. Example: `src/utils/helper.ts`.
48
+ - **bash**: matched against the full command string. Example: `npm test --watch`.
49
+ - **external_directory**: matched against the absolute directory path. Example: `/home/user/other-project`.
50
+
51
+ ### Matching Algorithm
52
+
53
+ 1. Receive the target string (file path, command, or directory path)
54
+ 2. Normalize path separators to forward slashes for cross-platform consistency
55
+ 3. If the rule has no pattern, it matches (universal rule)
56
+ 4. If the pattern starts with `!`, invert the match result
57
+ 5. Apply glob matching using micromatch or picomatch semantics
58
+ 6. Return boolean: does this pattern match the target?
59
+
60
+ ### Path Normalization
61
+
62
+ Before matching, paths are normalized:
63
+
64
+ - Backslashes converted to forward slashes (`\` → `/`)
65
+ - Trailing slashes removed
66
+ - Relative paths resolved against the project root
67
+ - `./` prefix stripped if present
68
+ - No symlink resolution — match against the literal path
69
+
70
+ ### Case Sensitivity
71
+
72
+ - **Linux**: case-sensitive matching (default)
73
+ - **macOS**: case-insensitive matching (HFS+ / APFS default)
74
+ - **Windows**: case-insensitive matching (NTFS default)
75
+
76
+ The platform is detected at startup. Override via config: `{"permissions": {"caseSensitive": true}}`.
77
+
78
+ ### Pattern Examples for Common Scenarios
79
+
80
+ ```
81
+ *.env → matches .env, production.env, .env.local
82
+ src/**/*.ts → matches any .ts file at any depth under src/
83
+ !node_modules/** → excludes everything under node_modules
84
+ *.{test,spec}.ts → matches foo.test.ts, bar.spec.ts
85
+ rm * → matches bash commands starting with "rm "
86
+ git push* → matches "git push", "git push origin main"
87
+ /tmp/** → matches any path under /tmp
88
+ **/*.secret → matches any .secret file anywhere
89
+ ```
90
+
91
+ ### No Pattern Behavior
92
+
93
+ When a permission rule omits the `pattern` field, the rule applies to every target for that permission category. This is the catch-all case — useful for broad defaults like `{"permission": "read", "action": "allow"}` where no path filtering is needed.
94
+
95
+ ## Supporting Structures
96
+
97
+ - **Permission Rules (RISE-084)** defines the rule structure that contains optional patterns
98
+ - **Permission Merging (RISE-086)** controls how pattern-bearing rules from multiple sources combine
99
+ - **Namespace Module Pattern (RISE-004)** organizes the glob matching utility under a permissions namespace
100
+
101
+ ## Creative Advancement Scenarios
102
+
103
+ **Scenario 1 — Protecting Secrets:**
104
+ A developer adds `{"permission": "read", "pattern": "*.env*", "action": "deny"}` to block the agent from reading environment files containing API keys. The pattern `*.env*` catches `.env`, `.env.local`, `.env.production`, and any variant.
105
+
106
+ **Scenario 2 — Bash Command Guardrails:**
107
+ Rules like `{"permission": "bash", "pattern": "rm -rf *", "action": "deny"}` and `{"permission": "bash", "pattern": "git push --force*", "action": "deny"}` create guardrails around the most dangerous commands while allowing everyday bash usage.
108
+
109
+ **Scenario 3 — Scoped Write Access:**
110
+ A developer configures `{"permission": "write", "pattern": "src/**/*.test.ts", "action": "allow"}` and `{"permission": "write", "pattern": "src/**/*.ts", "action": "ask"}`. Test files are auto-allowed; production TypeScript files still prompt. The ordering ensures tests match first.
111
+
112
+ **Scenario 4 — Cross-Platform Team:**
113
+ A team working across macOS and Linux sets `{"permissions": {"caseSensitive": false}}` in their shared project config. Pattern matching behaves identically on both platforms, preventing surprises where `README.md` matches on Mac but not on Linux.
@@ -0,0 +1,134 @@
1
+ # RISE-086: Permission Merging
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/086-permission-merging.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ mia-code resolves permissions from multiple layers — built-in defaults, global config, project config, agent-specific overrides, and live session choices. Each layer can refine or override the previous one without replacing it entirely. A developer's global "deny rm" rule persists across all projects while a project-specific "allow writes to tests" rule applies only where needed. The merge algorithm is simple: concatenate arrays in precedence order, first match wins.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - mia-code has no layered configuration for permissions — behavior is hardcoded or toggled by `--yolo`
14
+ - No concept of global vs. project-level permission settings
15
+ - Agent-specific permissions do not exist — all agents share identical capability constraints
16
+ - When a user says "always allow" or "never allow" during a session, that choice is not persisted or layered
17
+ - There is no way to view what the effective merged permission set looks like
18
+
19
+ **Desired State:**
20
+ - Five distinct permission layers merge into one effective ruleset
21
+ - Each layer prepends its rules, giving it higher priority (first-match-wins)
22
+ - Session-scoped choices (user "always"/"never" responses) sit at the top — user intent is supreme
23
+ - Agent-specific rules sit above project/global — specialized agents get specialized permissions
24
+ - A `/permissions` command shows the effective merged ruleset with source annotations
25
+ - A `/permissions reset` command clears session-scoped overrides
26
+
27
+ ## Desired Outcome Definition
28
+
29
+ When the permission system evaluates an action, it walks a single merged rule array that was assembled from five layers. The merge is a simple array concatenation in precedence order. Developers can inspect the merged result and understand exactly which rule from which source controls each decision.
30
+
31
+ ## Natural Language Functional Description
32
+
33
+ ### Layer Hierarchy
34
+
35
+ Layers are numbered from lowest to highest precedence:
36
+
37
+ | Layer | Source | Example Location |
38
+ |-------|-------------------------------|-----------------------------------------------|
39
+ | 1 | Built-in defaults | Hardcoded in source |
40
+ | 2 | Global config permissions | `~/.mia-code/config.json` → `permissions.rules` |
41
+ | 3 | Project config permissions | `.mia-code/config.json` → `permissions.rules` |
42
+ | 4 | Agent-specific permissions | Agent definition → `permissions` field |
43
+ | 5 | Session-scoped permissions | Runtime "always"/"never" choices |
44
+
45
+ ### Merge Algorithm
46
+
47
+ The merge algorithm is deliberately simple:
48
+
49
+ 1. Start with an empty array: `merged = []`
50
+ 2. Prepend session-scoped rules (layer 5) → `merged = [...session, ...merged]`
51
+ 3. Prepend agent-specific rules (layer 4) → `merged = [...agent, ...merged]`
52
+ 4. Prepend project config rules (layer 3) → wait — these go *after* agent rules
53
+ 5. Final order: `[...session, ...agent, ...project, ...global, ...defaults]`
54
+
55
+ Because evaluation is first-match-wins, rules earlier in the array (higher precedence layers) naturally override rules later in the array (lower precedence layers).
56
+
57
+ ### Detailed Merge Steps
58
+
59
+ ```
60
+ effectiveRules = [
61
+ ...sessionRules, // Layer 5: user "always"/"never" choices this session
62
+ ...agentRules, // Layer 4: agent-specific overrides
63
+ ...projectRules, // Layer 3: project .mia-code/config.json
64
+ ...globalRules, // Layer 2: global ~/.mia-code/config.json
65
+ ...defaultRules // Layer 1: built-in baseline
66
+ ]
67
+ ```
68
+
69
+ No deduplication is performed. If two rules in different layers match the same permission+pattern, the first one encountered wins. Redundant rules in lower layers are simply never reached.
70
+
71
+ ### Session-Scoped Rules
72
+
73
+ When a user responds "always" to a permission prompt, a new allow rule is prepended to the session layer:
74
+ ```json
75
+ {"permission": "write", "pattern": "src/**/*.ts", "action": "allow", "source": "session"}
76
+ ```
77
+
78
+ When a user responds "never", a deny rule is prepended:
79
+ ```json
80
+ {"permission": "bash", "pattern": "rm *", "action": "deny", "source": "session"}
81
+ ```
82
+
83
+ Session rules are ephemeral — they exist only for the current session and are discarded on exit.
84
+
85
+ ### Source Annotations
86
+
87
+ Each rule in the merged array carries a `source` annotation for introspection:
88
+
89
+ ```json
90
+ {"permission": "read", "action": "allow", "source": "default"}
91
+ {"permission": "write", "pattern": "*.test.ts", "action": "allow", "source": "project"}
92
+ {"permission": "bash", "pattern": "rm *", "action": "deny", "source": "global"}
93
+ {"permission": "write", "action": "ask", "source": "default"}
94
+ ```
95
+
96
+ ### Viewing Merged Permissions
97
+
98
+ The `/permissions` slash command displays the effective merged ruleset:
99
+
100
+ ```
101
+ Effective Permission Rules (12 rules):
102
+ #1 [session] write src/**/*.ts → allow
103
+ #2 [agent] bash npm * → allow
104
+ #3 [project] write *.test.ts → allow
105
+ #4 [global] bash rm * → deny
106
+ ...
107
+ #12 [default] question → allow
108
+ ```
109
+
110
+ ### Resetting Session Permissions
111
+
112
+ `/permissions reset` clears all session-scoped rules (layer 5), returning to the config-defined state. This is useful when a user's "always" or "never" choice was made in error.
113
+
114
+ ## Supporting Structures
115
+
116
+ - **Permission Rules (RISE-084)** defines the individual rule objects that are merged
117
+ - **Permission Glob Patterns (RISE-085)** defines pattern matching within rules
118
+ - **Permission Modes (RISE-087)** defines how "always"/"never" responses create session rules
119
+ - **Agent Definition Config (RISE-010)** defines per-agent permission configuration
120
+ - **Instance State (RISE-003)** scopes the session layer to the active session
121
+
122
+ ## Creative Advancement Scenarios
123
+
124
+ **Scenario 1 — Team Safety Net:**
125
+ A global config includes `{"permission": "bash", "pattern": "rm -rf *", "action": "deny"}`. A project config adds `{"permission": "write", "pattern": "*.test.ts", "action": "allow"}`. The merged ruleset blocks destructive bash everywhere while allowing test writes in this project.
126
+
127
+ **Scenario 2 — Agent Specialization:**
128
+ A "code-review" agent has `{"permission": "write", "action": "deny"}` in its agent definition — it should never write files. A "test-writer" agent has `{"permission": "write", "pattern": "*.test.ts", "action": "allow"}`. Same project, different agents, different permissions.
129
+
130
+ **Scenario 3 — Session Learning:**
131
+ A developer approves a bash command with "always". The session layer gains an allow rule. Later they realize it was too broad and run `/permissions reset`. The session layer clears, and the next occurrence asks again.
132
+
133
+ **Scenario 4 — Debugging Permissions:**
134
+ A developer runs `/permissions` and sees that a write to `src/index.ts` is being denied. The output shows rule #4 from the global config is the culprit. They adjust the global config and the denial disappears.