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,153 @@
1
+ # RISE-066: Config Environment Variable Substitution
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/066-config-env-variables.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ mia-code configuration files can reference environment variables using `${VAR_NAME}` syntax, keeping secrets out of config files and enabling environment-specific configuration without file duplication. A developer commits their config to git with `"apiKey": "${ANTHROPIC_API_KEY}"` and secrets never touch version control. Different machines, CI environments, and deployment contexts each provide their own values through the environment — same config file, different behavior.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - API keys and secrets must be hardcoded in `~/.mia-code.json` or passed via environment variables that bypass the config system entirely
14
+ - Config files containing secrets cannot be committed to version control or shared across machines
15
+ - There is no way to reference dynamic values (like the current user's home directory) in config files
16
+ - Different environments (development, CI, staging) require separate config files with identical structure but different values
17
+ - The `MIA_CODE_*` environment variable prefix (RISE-064) handles top-level overrides but not substitution within complex nested values
18
+
19
+ **Desired State:**
20
+ - Any string value in a config file can contain `${VAR_NAME}` which is replaced with the environment variable's value at load time
21
+ - Secrets live in the environment (`.env` files, shell profiles, CI secrets) while config structure lives in files
22
+ - Config files are safe to commit because they contain references, not values
23
+ - Missing variable behavior is configurable: error (fail fast) or empty string (permissive)
24
+ - Special variables like `${HOME}`, `${PWD}`, and `${USER}` are always available regardless of environment
25
+
26
+ ## Desired Outcome Definition
27
+
28
+ When mia-code loads a config file, all `${VAR_NAME}` patterns in string values are replaced with the corresponding environment variable values. Missing variables either cause an error or resolve to empty string based on configuration. Config files with variable references can be safely committed to version control.
29
+
30
+ ## Natural Language Functional Description
31
+
32
+ ### Substitution Syntax
33
+
34
+ The pattern `${VAR_NAME}` within any string value in a config file is replaced with the value of the environment variable `VAR_NAME`:
35
+
36
+ ```jsonc
37
+ {
38
+ "provider": {
39
+ "anthropic": {
40
+ "apiKey": "${ANTHROPIC_API_KEY}" // Replaced at load time
41
+ },
42
+ "openai": {
43
+ "apiKey": "${OPENAI_API_KEY}"
44
+ }
45
+ },
46
+ "logDir": "${HOME}/.mia-code/logs" // e.g., /home/dev/.mia-code/logs
47
+ }
48
+ ```
49
+
50
+ ### Substitution Rules
51
+
52
+ 1. **Pattern matching**: Only `${...}` is recognized. `$VAR` without braces is not substituted (treated as literal).
53
+ 2. **String values only**: Substitution occurs only in JSON string values, not in keys, numbers, booleans, or null.
54
+ 3. **Partial substitution**: A string can contain multiple variables and literal text: `"${HOME}/projects/${PROJECT_NAME}/config"`.
55
+ 4. **No nested substitution**: The result of a substitution is not re-scanned for further `${...}` patterns. This prevents injection and keeps behavior predictable.
56
+ 5. **Escape sequence**: `\${VAR}` is treated as the literal string `${VAR}` (the backslash is consumed).
57
+
58
+ ### Missing Variable Handling
59
+
60
+ When a `${VAR_NAME}` references an undefined environment variable:
61
+
62
+ - **Default behavior (strict)**: Emit a warning and leave the pattern unreplaced. The literal string `${VAR_NAME}` remains in the config value, which will likely cause a downstream error (e.g., invalid API key).
63
+ - **Permissive mode**: `{"config": {"envSubstitution": "permissive"}}` — replace missing variables with empty string `""`.
64
+ - **Error mode**: `{"config": {"envSubstitution": "error"}}` — throw a config loading error that prevents startup.
65
+
66
+ The mode is configured via the built-in defaults or a higher-precedence config level that has already been loaded.
67
+
68
+ ### Special Variables
69
+
70
+ These variables are always available, even if not set in the environment:
71
+
72
+ | Variable | Value | Example |
73
+ |----------|-------|---------|
74
+ | `${HOME}` | User's home directory | `/home/developer` |
75
+ | `${PWD}` | Current working directory | `/projects/myapp` |
76
+ | `${USER}` | Current username | `developer` |
77
+ | `${HOSTNAME}` | Machine hostname | `dev-laptop` |
78
+ | `${MIA_CODE_VERSION}` | Current mia-code version | `1.2.3` |
79
+
80
+ If these conflict with actual environment variables, the environment variable value takes precedence.
81
+
82
+ ### Substitution Timing
83
+
84
+ Variable substitution occurs at config load time, after JSONC parsing and before deep merging:
85
+
86
+ 1. Parse JSONC → raw config object
87
+ 2. Walk all string values and apply `${...}` substitution
88
+ 3. Merge with other config levels (RISE-064)
89
+ 4. Validate the merged result
90
+
91
+ This means the same `${VAR}` in different config levels resolves to the same value (they share the same environment).
92
+
93
+ ### Security Considerations
94
+
95
+ - Config files with `${...}` references are safe to commit because they contain no actual secrets
96
+ - The `/config` command masks resolved secret values (API keys, tokens) in its display: `apiKey: sk-****`
97
+ - Environment variable values are never logged at info level; debug logging masks them
98
+ - Substitution does not apply to values in non-config contexts (session data, message content)
99
+
100
+ ### Error Reporting
101
+
102
+ When substitution encounters issues:
103
+
104
+ ```
105
+ Config warning: Undefined environment variable in ~/.config/mia-code/config.json:
106
+ Line 5: "apiKey": "${ANTHROPIC_API_KEY}"
107
+ Variable ANTHROPIC_API_KEY is not set.
108
+
109
+ Tip: Set it in your shell profile or .env file:
110
+ export ANTHROPIC_API_KEY=your-key-here
111
+ ```
112
+
113
+ Warnings include the file, line number, variable name, and a helpful suggestion.
114
+
115
+ ### Integration with .env Files
116
+
117
+ mia-code optionally loads `.env` files before config substitution:
118
+ 1. Check for `.env` in the project root
119
+ 2. Check for `.env.local` in the project root (higher precedence)
120
+ 3. Parse key=value pairs and add them to the substitution environment
121
+ 4. `.env` values do not override actual environment variables
122
+
123
+ This is opt-in via config: `{"config": {"loadDotEnv": true}}` (default: false).
124
+
125
+ ### Config Display
126
+
127
+ The `/config` command shows both the template value and the resolved value for substituted settings:
128
+
129
+ ```
130
+ provider.anthropic.apiKey: ${ANTHROPIC_API_KEY} → sk-**** [global config]
131
+ logDir: ${HOME}/.mia-code/logs → /home/dev/.mia-code/logs [global config]
132
+ ```
133
+
134
+ ## Supporting Structures
135
+
136
+ - **JSONC Config (RISE-065)** parses config files before substitution is applied
137
+ - **Multi-Level Config (RISE-064)** defines when in the loading pipeline substitution occurs
138
+ - **Config Deep Merging (RISE-067)** merges config after substitution resolves values
139
+ - **Managed Config Directory (RISE-070)** uses the same substitution system for enterprise config
140
+
141
+ ## Creative Advancement Scenarios
142
+
143
+ **Scenario 1 — Git-Safe Config:**
144
+ A team commits `./mia-code.json` to their repository: `{"provider": {"anthropic": {"apiKey": "${ANTHROPIC_API_KEY}"}}}`. Each developer has `ANTHROPIC_API_KEY` in their shell profile. The config is shared, the secrets are not. New team members clone the repo, set their key, and start working.
145
+
146
+ **Scenario 2 — CI/CD Pipeline:**
147
+ A GitHub Actions workflow sets `ANTHROPIC_API_KEY` as a repository secret. The mia-code config file in the repo references `${ANTHROPIC_API_KEY}`. The CI runner resolves it at runtime. No config file changes needed between local development and CI.
148
+
149
+ **Scenario 3 — Multi-Environment Config:**
150
+ A developer works on two projects: one using Anthropic, one using OpenAI. Both config files reference `${ANTHROPIC_API_KEY}` and `${OPENAI_API_KEY}` respectively. The developer's shell profile exports both. Each project resolves only the key it needs.
151
+
152
+ **Scenario 4 — Dynamic Paths:**
153
+ A developer's config uses `"logDir": "${HOME}/.mia-code/logs"`. On their Linux workstation, logs go to `/home/dev/.mia-code/logs`. On their Mac, logs go to `/Users/dev/.mia-code/logs`. Same config file, platform-appropriate paths.
@@ -0,0 +1,178 @@
1
+ # RISE-067: Config Deep Merging
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/067-config-deep-merging.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ mia-code assembles its final configuration by intelligently merging contributions from multiple sources — not by crude overwriting but by recursive deep merging that preserves structure, combines collections, and applies targeted overrides. A global config provides the foundation, a project config adjusts specific settings, and the result is a coherent whole where each source contributes its piece without destroying the others' contributions.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - mia-code loads config from a single source (`~/.mia-code.json`) so no merging is needed
14
+ - If multi-source loading were added naively, a project config with one key would erase all global settings (shallow replace)
15
+ - There is no defined behavior for merging arrays — should a project's plugin list replace or extend the global list?
16
+ - Nested objects (like provider configurations with multiple sub-providers) would be lost if any level provides a partial override
17
+ - No mechanism exists to intentionally remove a setting from a lower level (e.g., disable a globally enabled plugin for one project)
18
+ - The relationship between "combine" and "override" is ambiguous without explicit rules
19
+
20
+ **Desired State:**
21
+ - Objects merge recursively: project config sets `provider.anthropic.model` without erasing `provider.openai`
22
+ - Arrays concatenate by default: project plugins add to global plugins
23
+ - Scalars replace: last source wins for simple values
24
+ - Explicit removal: setting a key to `null` removes it from the merged result
25
+ - Explicit array replacement: empty array `[]` replaces rather than concatenating
26
+ - Merge order follows the precedence hierarchy from RISE-064
27
+
28
+ ## Desired Outcome Definition
29
+
30
+ A deep merge function combines configuration objects from multiple sources following deterministic rules. Objects merge recursively, arrays concatenate, scalars replace. Special sentinels (null, empty array) provide escape hatches for removal and replacement. The merge produces a single resolved config object.
31
+
32
+ ## Natural Language Functional Description
33
+
34
+ ### Merge Algorithm
35
+
36
+ The deep merge processes two config objects (base and override) recursively:
37
+
38
+ ```
39
+ function deepMerge(base, override):
40
+ for each key in override:
41
+ if override[key] is null:
42
+ delete result[key] // null removes
43
+ else if override[key] is object AND base[key] is object:
44
+ result[key] = deepMerge(base[key], override[key]) // recurse
45
+ else if override[key] is array AND base[key] is array:
46
+ if override[key] is empty:
47
+ result[key] = [] // empty array replaces
48
+ else:
49
+ result[key] = base[key].concat(override[key]) // concatenate
50
+ else:
51
+ result[key] = override[key] // scalar replace
52
+ for each key in base not in override:
53
+ result[key] = base[key] // preserve base values
54
+ return result
55
+ ```
56
+
57
+ ### Merge Rules by Type
58
+
59
+ **Objects → Recursive Merge:**
60
+ Each key in the override object is merged with the corresponding key in the base object. Keys present only in the base are preserved. Keys present only in the override are added.
61
+
62
+ ```
63
+ Base: {"provider": {"openai": {"apiKey": "sk-1"}, "model": "gpt-4"}}
64
+ Override: {"provider": {"anthropic": {"apiKey": "sk-2"}}}
65
+ Result: {"provider": {"openai": {"apiKey": "sk-1"}, "model": "gpt-4", "anthropic": {"apiKey": "sk-2"}}}
66
+ ```
67
+
68
+ **Scalars → Replace:**
69
+ When the override provides a scalar value (string, number, boolean) for a key, it replaces the base value entirely, regardless of the base value's type.
70
+
71
+ ```
72
+ Base: {"model": "gemini-2.5-pro", "verbose": false}
73
+ Override: {"model": "claude-sonnet-4", "verbose": true}
74
+ Result: {"model": "claude-sonnet-4", "verbose": true}
75
+ ```
76
+
77
+ **Arrays → Concatenate:**
78
+ When both base and override have arrays for the same key, the arrays are concatenated (base first, then override).
79
+
80
+ ```
81
+ Base: {"plugins": ["plugin-a", "plugin-b"]}
82
+ Override: {"plugins": ["plugin-c"]}
83
+ Result: {"plugins": ["plugin-a", "plugin-b", "plugin-c"]}
84
+ ```
85
+
86
+ Deduplication is not performed automatically — if both lists contain `"plugin-a"`, it appears twice. Consumers should handle deduplication if needed.
87
+
88
+ **Null → Remove Key:**
89
+ Setting a key to `null` in the override removes it from the merged result entirely. This is an explicit removal signal.
90
+
91
+ ```
92
+ Base: {"provider": {"openai": {"apiKey": "sk-1"}, "anthropic": {"apiKey": "sk-2"}}}
93
+ Override: {"provider": {"openai": null}}
94
+ Result: {"provider": {"anthropic": {"apiKey": "sk-2"}}}
95
+ ```
96
+
97
+ **Empty Array → Replace:**
98
+ An empty array `[]` in the override replaces the base array entirely (does not concatenate). This allows a project to clear a global list.
99
+
100
+ ```
101
+ Base: {"plugins": ["plugin-a", "plugin-b"]}
102
+ Override: {"plugins": []}
103
+ Result: {"plugins": []}
104
+ ```
105
+
106
+ ### Multi-Level Merge
107
+
108
+ When merging more than two levels, the merge is applied sequentially from lowest to highest precedence:
109
+
110
+ ```
111
+ result = defaults
112
+ result = deepMerge(result, globalConfig)
113
+ result = deepMerge(result, envVars)
114
+ result = deepMerge(result, projectConfig)
115
+ result = deepMerge(result, cliFlags)
116
+ result = deepMerge(result, inlineConfig)
117
+ ```
118
+
119
+ Each merge produces an intermediate result that becomes the base for the next level.
120
+
121
+ ### Type Coercion at Merge Boundaries
122
+
123
+ When base and override have different types for the same key:
124
+ - **Object vs. scalar**: override wins (scalar replaces object or vice versa)
125
+ - **Array vs. scalar**: override wins
126
+ - **Array vs. object**: override wins
127
+ - A warning is emitted when types conflict, as this usually indicates a config error
128
+
129
+ ### Merge Source Tracking
130
+
131
+ During merging, each resolved value is annotated with its source level:
132
+
133
+ ```typescript
134
+ interface ResolvedValue {
135
+ value: any;
136
+ source: "default" | "global" | "env" | "project" | "cli" | "inline" | "managed";
137
+ filePath?: string; // for file-based sources
138
+ }
139
+ ```
140
+
141
+ These annotations power the `/config` display (RISE-064) that shows where each value came from.
142
+
143
+ ### Permission Ruleset Merging
144
+
145
+ Permission rulesets (RISE-011) receive special merge treatment:
146
+ - Permission rules from all levels are combined
147
+ - Agent-specific permission overrides take precedence over general rules
148
+ - Deny rules from any level cannot be overridden by allow rules from a lower-precedence level
149
+ - Managed config (RISE-070) deny rules cannot be overridden at all
150
+
151
+ ### Edge Cases
152
+
153
+ - **Circular references**: not possible in JSON — not a concern
154
+ - **Very deep nesting** (>10 levels): supported but a warning is emitted as this likely indicates a config error
155
+ - **Large arrays** (>1000 elements): concatenation proceeds but a performance warning is emitted
156
+ - **Undefined vs. missing**: a key absent from the override is different from a key set to `undefined`. Only `null` triggers removal.
157
+
158
+ ## Supporting Structures
159
+
160
+ - **Multi-Level Config (RISE-064)** defines the precedence order and invokes deep merge at each level
161
+ - **JSONC Config (RISE-065)** provides the parsed objects that are inputs to the merge
162
+ - **Config Environment Variables (RISE-066)** resolves variable references before objects enter the merge
163
+ - **Managed Config Directory (RISE-070)** provides the highest-precedence config object for merging
164
+ - **Agent Permission Rulesets (RISE-011)** defines special merging rules for permission config
165
+
166
+ ## Creative Advancement Scenarios
167
+
168
+ **Scenario 1 — Additive Provider Configuration:**
169
+ A developer's global config sets up OpenAI: `{"provider": {"openai": {"apiKey": "sk-1"}}}`. Their project config adds Anthropic: `{"provider": {"anthropic": {"apiKey": "sk-2"}}}`. After deep merge, both providers are available. Neither config file needs to know about the other's providers.
170
+
171
+ **Scenario 2 — Disabling a Global Plugin:**
172
+ A developer's global config includes `{"plugins": ["linter", "formatter"]}`. A specific project doesn't want any plugins: `{"plugins": []}`. The empty array replaces the global list. No plugins load for that project.
173
+
174
+ **Scenario 3 — Removing a Provider:**
175
+ A developer's global config has three providers. A project should only use Anthropic, so its config sets: `{"provider": {"openai": null, "google": null}}`. After merge, only Anthropic remains from the global config.
176
+
177
+ **Scenario 4 — Combined Permission Rules:**
178
+ Global config allows `git *` commands. Project config allows `npm *` additionally. After merge, both `git *` and `npm *` are allowed — the project inherits global permissions and adds its own.
@@ -0,0 +1,183 @@
1
+ # RISE-068: Remote Organization Config
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/068-remote-org-config.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ mia-code fetches organization-wide configuration defaults from a remote endpoint, enabling enterprise teams to share consistent settings without manual distribution. When a developer clones a company repository and runs mia-code, the tool automatically discovers the organization's default models, allowed providers, security policies, and standard agents — creating alignment across hundreds of developers with zero individual setup. The organization speaks once, and every developer's mia-code listens.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - There is no mechanism for an organization to distribute mia-code configuration to its developers
14
+ - Each developer must manually configure their own `~/.mia-code.json` independently
15
+ - Organizational policies (which models are allowed, which tools are restricted) must be communicated out-of-band (Slack, wiki, onboarding docs)
16
+ - There is no enforcement of consistent agent behavior across a team
17
+ - New team members spend time configuring mia-code instead of coding
18
+ - Policy changes (e.g., "switch to Claude for all projects") require manual updates on every developer's machine
19
+
20
+ **Desired State:**
21
+ - Organizations publish config at a well-known URL: `https://company.com/.well-known/mia-code.json`
22
+ - mia-code discovers the organization from the git remote URL and fetches the org config
23
+ - Org config provides defaults: models, providers, permissions, agents, plugins
24
+ - Org config has low precedence — overridden by global, project, and CLI config
25
+ - Config is cached locally with a 24-hour TTL to avoid network dependency
26
+ - If the fetch fails, cached config is used; if no cache exists, the level is skipped gracefully
27
+
28
+ ## Desired Outcome Definition
29
+
30
+ When a developer runs mia-code in a project with a git remote pointing to an organization's domain, the tool fetches org-wide config defaults from `https://<domain>/.well-known/mia-code.json`. This config is merged into the config hierarchy at the lowest file-based precedence level (below global config). The config is cached for offline use.
31
+
32
+ ## Natural Language Functional Description
33
+
34
+ ### Organization Discovery
35
+
36
+ When mia-code initializes in a project directory:
37
+ 1. Check for a git repository (look for `.git` directory)
38
+ 2. Read the `origin` remote URL: `git remote get-url origin`
39
+ 3. Extract the hostname from the remote URL (e.g., `github.com/acme-corp/project` → `github.com`)
40
+ 4. For known hosting platforms (GitHub, GitLab, Bitbucket), extract the organization: `acme-corp`
41
+ 5. Construct the config URL: `https://github.com/acme-corp/.well-known/mia-code.json` or check org-level metadata
42
+
43
+ For self-hosted git servers, the hostname itself is used: `https://git.acme.com/.well-known/mia-code.json`
44
+
45
+ ### Config Endpoint
46
+
47
+ Organizations publish their config as a JSON (or JSONC) file at a well-known path:
48
+
49
+ ```
50
+ https://<domain>/.well-known/mia-code.json
51
+ ```
52
+
53
+ The file follows the standard mia-code config schema:
54
+
55
+ ```jsonc
56
+ {
57
+ // Acme Corp mia-code defaults
58
+ "orgName": "Acme Corp",
59
+ "policyVersion": "2025-01-15",
60
+
61
+ "model": "claude-sonnet-4",
62
+ "engine": "claude",
63
+
64
+ "provider": {
65
+ "anthropic": {
66
+ // Org-provisioned API endpoint
67
+ "baseUrl": "https://api.acme-internal.com/claude/v1"
68
+ }
69
+ },
70
+
71
+ // Restrict to approved providers only
72
+ "allowedProviders": ["anthropic", "google"],
73
+ "blockedProviders": ["openai"],
74
+
75
+ // Default permission policy
76
+ "permissions": {
77
+ "bash": "ask",
78
+ "file_write": "ask",
79
+ "file_read": "allow"
80
+ },
81
+
82
+ // Standard agents for the organization
83
+ "agents": [
84
+ {
85
+ "name": "acme-reviewer",
86
+ "prompt": "Review code following Acme Corp coding standards..."
87
+ }
88
+ ]
89
+ }
90
+ ```
91
+
92
+ ### Precedence
93
+
94
+ Org config sits at the lowest file-based level, below global config:
95
+
96
+ ```
97
+ Built-in defaults (lowest)
98
+
99
+ Remote org config ← this level
100
+
101
+ Global config (~/.config/mia-code/config.json)
102
+
103
+ Environment variables
104
+
105
+ Project config (./mia-code.json)
106
+
107
+ CLI flags
108
+
109
+ Inline config
110
+
111
+ Managed config (highest)
112
+ ```
113
+
114
+ This means individual developers can always override org defaults with their personal preferences or project-specific settings.
115
+
116
+ ### Caching
117
+
118
+ Fetched org config is cached locally:
119
+ - Cache location: `~/.cache/mia-code/org-config/<domain-hash>.json`
120
+ - Cache TTL: 24 hours (configurable via `{"config": {"orgConfigTTL": 86400}}`)
121
+ - Cache metadata: includes fetch timestamp, ETag/Last-Modified headers for conditional requests
122
+ - On cache hit: use cached config without network request
123
+ - On cache expired: attempt fetch; if successful, update cache; if failed, use stale cache with a warning
124
+ - Cache can be forced-refreshed: `/config refresh-org`
125
+
126
+ ### Fetch Behavior
127
+
128
+ The config fetch is designed to be non-blocking and fault-tolerant:
129
+ 1. Fetch timeout: 5 seconds (org config should not delay startup significantly)
130
+ 2. On network error: warn and skip (use cache if available)
131
+ 3. On 404: assume no org config exists; do not retry for 7 days
132
+ 4. On 5xx: use cache if available; retry on next startup
133
+ 5. Fetch happens in parallel with other initialization — does not block the agent from starting
134
+ 6. If config arrives after the agent has started, a config reload is triggered
135
+
136
+ ### Security
137
+
138
+ - Org config is fetched over HTTPS only (HTTP URLs are rejected)
139
+ - Config content is validated against the expected schema before use
140
+ - Org config cannot set API keys or secrets (these fields are ignored if present)
141
+ - A warning is shown on first fetch: "Loading organization config from https://... [y to accept / n to skip]"
142
+ - Accepted organizations are remembered: `~/.config/mia-code/trusted-orgs.json`
143
+ - Org config modifications are logged for auditability
144
+
145
+ ### GitHub Integration
146
+
147
+ For GitHub-hosted organizations, mia-code can alternatively fetch org config from:
148
+ 1. A `.mia-code` repository in the organization (e.g., `github.com/acme-corp/.mia-code`)
149
+ 2. The `mia-code.json` file in the organization's `.github` repository
150
+ 3. Organization-level metadata (if accessible via GitHub API)
151
+
152
+ The priority: `.well-known` endpoint > `.mia-code` repo > `.github` repo.
153
+
154
+ ### Config Display
155
+
156
+ The `/config` command annotates org-sourced values:
157
+
158
+ ```
159
+ model: claude-sonnet-4 [org: Acme Corp (policy v2025-01-15)]
160
+ engine: claude [org: Acme Corp (policy v2025-01-15)]
161
+ theme: monokai [global: ~/.config/mia-code/config.json]
162
+ ```
163
+
164
+ ## Supporting Structures
165
+
166
+ - **Multi-Level Config (RISE-064)** defines where org config sits in the precedence hierarchy
167
+ - **Config Deep Merging (RISE-067)** merges org config with other levels
168
+ - **JSONC Config (RISE-065)** parses the org config file (may contain comments)
169
+ - **Managed Config Directory (RISE-070)** provides an even higher-precedence enterprise override
170
+
171
+ ## Creative Advancement Scenarios
172
+
173
+ **Scenario 1 — Seamless Team Onboarding:**
174
+ A new developer joins Acme Corp, clones a project, and runs `mia-code`. The tool detects the `acme-corp` GitHub organization, fetches org config, and automatically uses the company's preferred model and API endpoint. The developer starts coding immediately — no config setup needed.
175
+
176
+ **Scenario 2 — Organization Policy Update:**
177
+ Acme Corp decides to switch from Gemini to Claude for all agent interactions. They update `/.well-known/mia-code.json` on their domain. Over the next 24 hours (as caches expire), every developer's mia-code picks up the change automatically.
178
+
179
+ **Scenario 3 — Provider Restriction:**
180
+ An enterprise blocks OpenAI for compliance reasons. Their org config includes `"blockedProviders": ["openai"]`. Even if a developer has an OpenAI API key in their global config, mia-code will not use it in projects under this organization.
181
+
182
+ **Scenario 4 — Offline Development:**
183
+ A developer works on a plane without internet. mia-code attempts to fetch org config, fails, and falls back to the cached version from yesterday. Everything works as expected. When they reconnect, the cache refreshes automatically on next startup.