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,181 @@
1
+ # RISE-063: Keybinding System
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/063-keybinding-system.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ mia-code provides a keyboard-driven interface where every action is reachable through a shortcut, and every shortcut is configurable. Developers who live in the terminal expect vim-like efficiency — the keybinding system delivers this by mapping physical keys to semantic actions, supporting context-aware bindings that change meaning based on what's focused, and allowing full customization without sacrificing discoverable defaults.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - mia-code uses hardcoded key handling: Enter submits, Ctrl+C exits, Ctrl+J adds a newline
14
+ - There is no abstraction between physical key input and the action it triggers
15
+ - Users cannot remap keys — the bindings are embedded in the readline and input handling code
16
+ - No context awareness: the same keys do the same thing regardless of whether the user is typing, scrolling, or navigating sessions
17
+ - There is no way to discover available keyboard shortcuts from within the application
18
+ - Terminal key conflicts (Ctrl+S for flow control, Ctrl+Z for suspend) are not handled or warned about
19
+
20
+ **Desired State:**
21
+ - A keybinding registry maps key combinations to named actions
22
+ - Default bindings cover all TUI interactions with ergonomic choices
23
+ - Users customize bindings via config: `{"keybindings": {"session_navigator": "ctrl+s"}}`
24
+ - Bindings are context-aware: different actions fire depending on focus context (input, scrollback, navigator)
25
+ - Conflict detection warns when a user binding conflicts with terminal defaults
26
+ - `/keys` command displays all active bindings grouped by context
27
+
28
+ ## Desired Outcome Definition
29
+
30
+ The TUI processes all keyboard input through a keybinding registry. Each key combination maps to a named action in a specific context. Default bindings are ergonomic and discoverable. Users can remap any binding through config. Conflicts are detected and reported.
31
+
32
+ ## Natural Language Functional Description
33
+
34
+ ### Keybinding Registry
35
+
36
+ The keybinding system maintains a registry of bindings:
37
+
38
+ ```typescript
39
+ interface Keybinding {
40
+ key: string; // e.g., "ctrl+s", "escape", "f1"
41
+ action: string; // e.g., "session_navigator", "cancel", "help"
42
+ context: string; // e.g., "input", "scrollback", "navigator", "global"
43
+ description: string; // human-readable description
44
+ }
45
+ ```
46
+
47
+ Each binding is unique within its context. The same key can map to different actions in different contexts.
48
+
49
+ ### Default Bindings
50
+
51
+ **Global Context** (active everywhere):
52
+ | Key | Action | Description |
53
+ |-----|--------|-------------|
54
+ | Ctrl+C | `cancel_or_exit` | Cancel current operation or exit if idle |
55
+ | Ctrl+L | `clear_screen` | Clear the terminal and re-render |
56
+ | Ctrl+S | `session_navigator` | Open session navigator overlay |
57
+ | F1 / ? | `help` | Show keybinding help overlay |
58
+
59
+ **Input Context** (when input area has focus):
60
+ | Key | Action | Description |
61
+ |-----|--------|-------------|
62
+ | Enter | `submit` | Submit the current input |
63
+ | Ctrl+J | `newline` | Insert a newline in the input |
64
+ | Up | `history_prev` | Previous input from history |
65
+ | Down | `history_next` | Next input from history |
66
+ | Tab | `switch_mode` | Toggle between plan/build mode |
67
+ | Ctrl+U | `clear_input` | Clear the input area |
68
+ | Escape | `cancel_input` | Cancel current input / close overlay |
69
+ | Ctrl+Up | `focus_scrollback` | Switch focus to message pane |
70
+
71
+ **Scrollback Context** (when message pane has focus):
72
+ | Key | Action | Description |
73
+ |-----|--------|-------------|
74
+ | Up / k | `scroll_up` | Scroll up one line |
75
+ | Down / j | `scroll_down` | Scroll down one line |
76
+ | Page Up | `page_up` | Scroll up one page |
77
+ | Page Down | `page_down` | Scroll down one page |
78
+ | Home / g | `scroll_top` | Scroll to top of history |
79
+ | End / G | `scroll_bottom` | Scroll to bottom (latest) |
80
+ | Escape | `focus_input` | Return focus to input area |
81
+ | / | `search` | Search within message history |
82
+
83
+ **Navigator Context** (when session navigator is open):
84
+ | Key | Action | Description |
85
+ |-----|--------|-------------|
86
+ | Up / Down | `navigate` | Move selection cursor |
87
+ | Enter | `select_session` | Switch to selected session |
88
+ | Ctrl+N | `new_session` | Create new session |
89
+ | Ctrl+D | `archive_session` | Archive selected session |
90
+ | Escape | `close_navigator` | Close navigator |
91
+ | Any letter | `filter` | Filter sessions by typing |
92
+
93
+ ### Key Format
94
+
95
+ Keys are specified as strings with modifiers:
96
+ - Modifiers: `ctrl+`, `alt+`, `shift+`, `meta+`
97
+ - Special keys: `enter`, `escape`, `tab`, `space`, `backspace`, `delete`
98
+ - Arrow keys: `up`, `down`, `left`, `right`
99
+ - Function keys: `f1` through `f12`
100
+ - Regular keys: `a` through `z`, `0` through `9`
101
+ - Combinations: `ctrl+shift+s`, `alt+enter`
102
+
103
+ ### Configuration
104
+
105
+ Users customize bindings in their config file:
106
+
107
+ ```jsonc
108
+ {
109
+ "keybindings": {
110
+ // Override default bindings by action name
111
+ "session_navigator": "ctrl+p", // global
112
+ "switch_mode": "ctrl+tab", // input context
113
+ "new_session": "ctrl+n", // navigator context
114
+
115
+ // Context-specific overrides
116
+ "scrollback.scroll_up": "ctrl+k",
117
+ "scrollback.scroll_down": "ctrl+j"
118
+ }
119
+ }
120
+ ```
121
+
122
+ ### Conflict Detection
123
+
124
+ When loading keybindings from config:
125
+ 1. Check for conflicts within the same context (two actions bound to the same key)
126
+ 2. Check for conflicts with known terminal defaults (Ctrl+S = XOFF, Ctrl+Z = SIGTSTP)
127
+ 3. On conflict: emit a warning in the status bar with the specific conflict details
128
+ 4. Terminal flow control (Ctrl+S/Ctrl+Q) is disabled by default when mia-code starts (`stty -ixon`)
129
+
130
+ ### Key Discovery
131
+
132
+ The `/keys` command displays all active bindings:
133
+
134
+ ```
135
+ Global:
136
+ Ctrl+C Cancel / Exit
137
+ Ctrl+L Clear screen
138
+ Ctrl+S Session navigator
139
+ F1 Help
140
+
141
+ Input:
142
+ Enter Submit input
143
+ Ctrl+J New line
144
+ Tab Switch mode (plan/build)
145
+ ...
146
+ ```
147
+
148
+ The help overlay (F1 or ?) shows the same information in a styled overlay within the TUI.
149
+
150
+ ### Context Resolution
151
+
152
+ When a key is pressed, the system resolves the action:
153
+ 1. Check the current focus context (input, scrollback, navigator)
154
+ 2. If a binding exists in that context, execute it
155
+ 3. If not, check the global context
156
+ 4. If no binding matches, pass the key through as raw input (for text entry in input context)
157
+
158
+ ### First-Run Help
159
+
160
+ On the first launch of mia-code (detected by absence of config file), a brief keybinding hint is displayed at the bottom of the screen: "Press F1 or ? for keyboard shortcuts". This hint disappears after the first input or after 10 seconds.
161
+
162
+ ## Supporting Structures
163
+
164
+ - **Rich TUI (RISE-058)** provides the focus management system that determines active context
165
+ - **Session Navigation (RISE-061)** defines the navigator context bindings
166
+ - **Multi-Level Config (RISE-064)** loads keybinding customizations from the appropriate config level
167
+ - **JSONC Config (RISE-065)** allows commenting out keybinding overrides for experimentation
168
+
169
+ ## Creative Advancement Scenarios
170
+
171
+ **Scenario 1 — Vim-Muscle-Memory Developer:**
172
+ A developer accustomed to vim remaps scrollback navigation to use h/j/k/l and remaps session navigator to Ctrl+P (like fuzzy-finder). Their config: `{"keybindings": {"session_navigator": "ctrl+p", "scrollback.scroll_up": "k", "scrollback.scroll_down": "j"}}`. The TUI immediately feels like home.
173
+
174
+ **Scenario 2 — Discovering Available Actions:**
175
+ A new user presses F1 and sees all available shortcuts grouped by context. They learn that Tab switches modes and Ctrl+S opens sessions. They close the help overlay and try each shortcut, building familiarity organically.
176
+
177
+ **Scenario 3 — Resolving a Conflict:**
178
+ A developer binds `ctrl+s` to "submit" in their config. On startup, mia-code warns: "Keybinding conflict: ctrl+s is already bound to session_navigator in global context." The developer either remaps one of them or accepts the override (context-specific binding wins over global).
179
+
180
+ **Scenario 4 — Terminal Compatibility:**
181
+ A developer SSHs into a server where Ctrl+S triggers XOFF flow control. mia-code detects this and disables XOFF at startup. If it cannot disable it (no tty control), it warns the user and suggests an alternative binding for the session navigator.
@@ -0,0 +1,155 @@
1
+ # RISE-064: Multi-Level Configuration
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/064-multi-level-config.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ mia-code resolves configuration from multiple sources with a clear, predictable precedence hierarchy. A developer's global preferences serve as defaults, project-specific overrides tailor behavior to each codebase, environment variables inject secrets without touching config files, and CLI flags provide instant one-off adjustments. Every configuration value has a traceable origin — the developer always knows not just what the value is, but where it came from and why it won.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - mia-code reads configuration from a single flat file: `~/.mia-code.json`
14
+ - There is no concept of project-level configuration — all projects share the same settings
15
+ - Environment variables for API keys work but are not formally integrated into the config system
16
+ - CLI flags exist for some options but there is no defined relationship between flags and config file values
17
+ - When a config value doesn't work as expected, there is no way to trace which source provided it
18
+ - Arrays (like plugin lists) and objects (like provider configs) have no defined merge behavior across sources
19
+
20
+ **Desired State:**
21
+ - Configuration loads from six levels with explicit precedence: defaults → global → env vars → project → CLI flags → inline
22
+ - Each level can override settings from lower levels using defined merge rules
23
+ - Objects deep-merge (project config adds to global), scalars replace, arrays concatenate
24
+ - `/config` command shows the resolved configuration with source annotations for each value
25
+ - Config loading errors warn but don't crash — the system continues with values from other levels
26
+ - First-run generates a commented config file template explaining available options
27
+
28
+ ## Desired Outcome Definition
29
+
30
+ mia-code loads configuration by merging six levels in order. The resolved configuration is a deep merge where each level overrides values from below. The `/config` command shows every resolved value with its source (which level it came from). Invalid or missing config at any level is handled gracefully.
31
+
32
+ ## Natural Language Functional Description
33
+
34
+ ### Configuration Levels (Lowest to Highest Priority)
35
+
36
+ 1. **Built-in Defaults** — Hardcoded in the application source. Every config key has a default value. These are the baseline that make mia-code work out of the box with no config file at all.
37
+
38
+ 2. **Global Config** — File at `~/.config/mia-code/config.json` (XDG standard) or `~/.mia-code.json` (legacy). Contains user-wide preferences: default models, API keys, theme preferences, keybindings.
39
+
40
+ 3. **Environment Variables** — Variables prefixed with `MIA_CODE_` map to config paths. Example: `MIA_CODE_MODEL=gemini-2.5-pro` sets the `model` config key. Nested paths use double underscores: `MIA_CODE_PROVIDER__ANTHROPIC__API_KEY` maps to `provider.anthropic.apiKey`.
41
+
42
+ 4. **Project Config** — File at `./mia-code.json` or `./.mia-code/config.json` in the project root. Contains project-specific overrides: preferred model for this codebase, custom agents, project-specific permissions.
43
+
44
+ 5. **CLI Flags** — Command-line arguments: `--model`, `--engine`, `--verbose`, etc. These override any file-based config for the current invocation.
45
+
46
+ 6. **Inline Config** — The `MIA_CODE_CONFIG_CONTENT` environment variable contains a JSON string that is parsed as a complete config object. Useful for CI/CD environments where file creation is inconvenient.
47
+
48
+ ### Merge Rules
49
+
50
+ When combining config from multiple levels:
51
+
52
+ **Objects merge recursively:**
53
+ ```
54
+ Global: {"provider": {"openai": {"apiKey": "sk-1"}}}
55
+ Project: {"provider": {"anthropic": {"apiKey": "sk-2"}}}
56
+ Result: {"provider": {"openai": {"apiKey": "sk-1"}, "anthropic": {"apiKey": "sk-2"}}}
57
+ ```
58
+
59
+ **Scalars replace (last wins):**
60
+ ```
61
+ Global: {"model": "gemini-2.5-pro"}
62
+ Project: {"model": "claude-sonnet-4"}
63
+ Result: {"model": "claude-sonnet-4"}
64
+ ```
65
+
66
+ **Arrays concatenate:**
67
+ ```
68
+ Global: {"plugins": ["plugin-a"]}
69
+ Project: {"plugins": ["plugin-b"]}
70
+ Result: {"plugins": ["plugin-a", "plugin-b"]}
71
+ ```
72
+
73
+ **Special: null removes:**
74
+ ```
75
+ Global: {"provider": {"openai": {"apiKey": "sk-1"}, "anthropic": {"apiKey": "sk-2"}}}
76
+ Project: {"provider": {"openai": null}}
77
+ Result: {"provider": {"anthropic": {"apiKey": "sk-2"}}}
78
+ ```
79
+
80
+ **Special: empty array replaces:**
81
+ ```
82
+ Global: {"plugins": ["plugin-a", "plugin-b"]}
83
+ Project: {"plugins": []}
84
+ Result: {"plugins": []}
85
+ ```
86
+
87
+ ### Environment Variable Mapping
88
+
89
+ Environment variables follow a systematic mapping:
90
+ - `MIA_CODE_<KEY>` maps to the top-level `<key>` (lowercased)
91
+ - `MIA_CODE_<A>__<B>` maps to nested path `<a>.<b>`
92
+ - `MIA_CODE_<A>__<B>__<C>` maps to `<a>.<b>.<c>`
93
+ - Values are parsed as JSON if they look like JSON; otherwise treated as strings
94
+ - Boolean strings: `"true"`, `"false"`, `"1"`, `"0"` are converted to booleans
95
+ - Numeric strings are converted to numbers
96
+
97
+ ### Config File Discovery
98
+
99
+ Project config is found by walking up from the current working directory:
100
+ 1. Check `./mia-code.json`
101
+ 2. Check `./.mia-code/config.json`
102
+ 3. If neither found, move to parent directory and repeat
103
+ 4. Stop at filesystem root or git repository root
104
+ 5. If no project config found, this level contributes nothing
105
+
106
+ ### Config Resolution Display
107
+
108
+ The `/config` command shows the merged result with source annotations:
109
+
110
+ ```
111
+ model: claude-sonnet-4 [project: ./mia-code.json]
112
+ engine: gemini [global: ~/.config/mia-code/config.json]
113
+ verbose: true [cli: --verbose]
114
+ provider.anthropic.apiKey: sk-** [env: MIA_CODE_PROVIDER__ANTHROPIC__API_KEY]
115
+ theme: dark [default]
116
+ ```
117
+
118
+ Each value shows which level provided it. Secrets are masked in display.
119
+
120
+ ### Error Handling
121
+
122
+ - **Missing config file**: silently skip that level (this is normal)
123
+ - **Invalid JSON**: warn with file path and parse error, skip that level
124
+ - **Unknown config keys**: warn but include them (forward compatibility)
125
+ - **Type mismatch** (e.g., string where object expected): warn, use the higher-precedence value as-is
126
+
127
+ ### First-Run Config Generation
128
+
129
+ On first run (no global config file exists):
130
+ 1. Create `~/.config/mia-code/config.json` with a commented template
131
+ 2. Template includes all available config keys with descriptions (using JSONC comments)
132
+ 3. All values in the template are commented out (the defaults apply)
133
+ 4. User is informed: "Created config file at ~/.config/mia-code/config.json"
134
+
135
+ ## Supporting Structures
136
+
137
+ - **JSONC Config (RISE-065)** enables comments in config files for documentation
138
+ - **Config Environment Variables (RISE-066)** handles `${VAR}` substitution within config values
139
+ - **Config Deep Merging (RISE-067)** implements the recursive merge logic described here
140
+ - **Managed Config Directory (RISE-070)** adds an even-higher-precedence enterprise level
141
+ - **Remote Org Config (RISE-068)** adds an organizational defaults level
142
+
143
+ ## Creative Advancement Scenarios
144
+
145
+ **Scenario 1 — Personal Defaults with Project Override:**
146
+ A developer's global config sets `model: gemini-2.5-pro` (their preferred default). For a client project that requires Claude, they add `{"model": "claude-sonnet-4"}` to `./mia-code.json`. In that project, Claude is used. In all other projects, Gemini is used. No flags needed.
147
+
148
+ **Scenario 2 — CI/CD with Inline Config:**
149
+ A CI pipeline sets `MIA_CODE_CONFIG_CONTENT='{"model":"claude-haiku-4","permissions":{"bash":"allow"}}'`. No config file is needed on the CI runner. The inline config overrides everything except CLI flags.
150
+
151
+ **Scenario 3 — Debugging Config Issues:**
152
+ A developer's agent is using an unexpected model. They run `/config` and see: `model: gpt-4 [env: MIA_CODE_MODEL]`. They realize they set `MIA_CODE_MODEL` in their shell profile weeks ago. The source annotation makes the fix obvious: unset the environment variable.
153
+
154
+ **Scenario 4 — Team Project Setup:**
155
+ A team commits `./mia-code.json` to their repo with project-specific settings: preferred model, custom agents, permission rulesets. Every team member gets these defaults automatically. Individual developers override specific values in their global config or via CLI flags.
@@ -0,0 +1,190 @@
1
+ # RISE-065: JSONC Configuration
2
+
3
+ > RISE Framework Specification — Borrowed from OpenCode for mia-code
4
+ > Document: rispecs/borrowed_from_opencode/065-jsonc-config.rispec.md
5
+
6
+ ## Creative Intent
7
+
8
+ mia-code configuration files speak a developer-friendly dialect of JSON that allows comments, trailing commas, and inline documentation. Configuration is not just a data format — it is a conversation between the tool and the developer. Comments explain why a setting exists, not just what it is. Developers can comment out experimental settings, leave notes for their future selves, and maintain readable config files that serve as living documentation.
9
+
10
+ ## Structural Tension Analysis
11
+
12
+ **Current Reality:**
13
+ - mia-code config files (`~/.mia-code.json`) are strict JSON — no comments allowed
14
+ - Developers cannot annotate their configuration choices with reasoning or context
15
+ - Commenting out a setting to temporarily disable it is impossible without removing the line
16
+ - Config file templates and examples must omit explanatory comments
17
+ - Developers who want to document their config resort to separate README files or external notes
18
+ - JSON parse errors for trailing commas are a common friction point
19
+
20
+ **Desired State:**
21
+ - Config files support JSONC (JSON with Comments): `//` line comments, `/* */` block comments, trailing commas
22
+ - Both `.json` and `.jsonc` extensions are recognized as config files
23
+ - Generated config templates include comments explaining each available option
24
+ - Config editing commands preserve existing comments when updating values
25
+ - Parse errors for JSONC files report line and column numbers with surrounding context
26
+
27
+ ## Desired Outcome Definition
28
+
29
+ All mia-code config files are parsed as JSONC. Developers can freely use line comments, block comments, and trailing commas. The config template generated on first run is richly commented. Programmatic config edits preserve existing comments.
30
+
31
+ ## Natural Language Functional Description
32
+
33
+ ### JSONC Syntax Support
34
+
35
+ The following syntax extensions beyond standard JSON are supported:
36
+
37
+ **Line comments** — `//` causes everything after it on the same line to be ignored:
38
+ ```jsonc
39
+ {
40
+ "model": "gemini-2.5-pro", // Primary model for agent interactions
41
+ "engine": "gemini" // Agent engine: gemini, claude, or openai
42
+ }
43
+ ```
44
+
45
+ **Block comments** — `/* ... */` can span multiple lines:
46
+ ```jsonc
47
+ {
48
+ /* Provider configuration
49
+ Add API keys for each provider you want to use.
50
+ At least one provider must be configured. */
51
+ "provider": {
52
+ "anthropic": {
53
+ "apiKey": "${ANTHROPIC_API_KEY}"
54
+ }
55
+ }
56
+ }
57
+ ```
58
+
59
+ **Trailing commas** — a comma after the last element in an object or array is allowed:
60
+ ```jsonc
61
+ {
62
+ "plugins": [
63
+ "plugin-a",
64
+ "plugin-b", // trailing comma OK
65
+ ],
66
+ }
67
+ ```
68
+
69
+ ### File Extension Support
70
+
71
+ mia-code recognizes both extensions:
72
+ - `.json` files are parsed as JSONC (backward compatible — valid JSON is valid JSONC)
73
+ - `.jsonc` files are parsed as JSONC
74
+ - The config file can be named either `config.json` or `config.jsonc`
75
+ - When both exist in the same directory, `.jsonc` takes precedence
76
+
77
+ ### Parser
78
+
79
+ The JSONC parser strips comments and trailing commas before parsing the underlying JSON structure. Implementation options:
80
+ - Use `jsonc-parser` npm package (Microsoft's parser, used in VS Code)
81
+ - Use a custom strip-and-parse approach (regex strip comments, then JSON.parse)
82
+ - The parser preserves source positions for error reporting
83
+
84
+ ### Config Template
85
+
86
+ On first run, mia-code generates a commented config template:
87
+
88
+ ```jsonc
89
+ {
90
+ // mia-code Configuration
91
+ // Documentation: https://github.com/mia-code/docs/config
92
+
93
+ // Agent engine: "gemini", "claude", or "openai"
94
+ // "engine": "gemini",
95
+
96
+ // Default model for agent interactions
97
+ // "model": "gemini-2.5-pro",
98
+
99
+ // Provider API keys (use environment variables for security)
100
+ // "provider": {
101
+ // "anthropic": { "apiKey": "${ANTHROPIC_API_KEY}" },
102
+ // "openai": { "apiKey": "${OPENAI_API_KEY}" },
103
+ // "google": { "apiKey": "${GOOGLE_API_KEY}" }
104
+ // },
105
+
106
+ // Theme: "dark", "light", or custom object
107
+ // "theme": "dark",
108
+
109
+ // Keyboard shortcut overrides
110
+ // "keybindings": {},
111
+
112
+ // Permission rulesets
113
+ // "permissions": {}
114
+ }
115
+ ```
116
+
117
+ All settings are commented out (using `//`) so defaults apply. The developer uncomments only what they want to change.
118
+
119
+ ### Comment Preservation
120
+
121
+ When mia-code programmatically updates a config file (e.g., adding a permanent permission rule via "always allow"):
122
+ 1. The original file content is parsed while tracking comment positions
123
+ 2. The modification is applied to the parsed data structure
124
+ 3. The file is re-serialized with original comments preserved in their positions
125
+ 4. New values added by mia-code include a generated comment noting the source
126
+
127
+ Example after allowing `git status`:
128
+ ```jsonc
129
+ {
130
+ "engine": "gemini", // My preferred engine
131
+ "permissions": {
132
+ "bash": {
133
+ "allow": [
134
+ "git *" // Added by mia-code permission prompt (2025-01-15)
135
+ ]
136
+ }
137
+ }
138
+ }
139
+ ```
140
+
141
+ ### Error Reporting
142
+
143
+ JSONC parse errors include context:
144
+
145
+ ```
146
+ Config error in ~/.config/mia-code/config.json:
147
+ Line 12, Column 5: Unexpected token '}'
148
+
149
+ 10 | "provider": {
150
+ 11 | "anthropic": { "apiKey": "sk-123" }
151
+ 12 | }}
152
+ | ^ unexpected token
153
+
154
+ Tip: Check for mismatched braces or missing commas.
155
+ ```
156
+
157
+ Errors include:
158
+ - File path
159
+ - Line and column number
160
+ - 3 lines of context around the error
161
+ - A pointer to the exact character
162
+ - A hint about common causes
163
+
164
+ ### Validation
165
+
166
+ After parsing, the config is validated against a schema:
167
+ - Unknown keys generate warnings (not errors) for forward compatibility
168
+ - Type mismatches (string where number expected) generate errors with the expected type
169
+ - Required keys (none currently — all have defaults) generate errors if missing
170
+
171
+ ## Supporting Structures
172
+
173
+ - **Multi-Level Config (RISE-064)** loads config files that are parsed as JSONC
174
+ - **Config Environment Variables (RISE-066)** applies `${VAR}` substitution after JSONC parsing
175
+ - **Config Deep Merging (RISE-067)** merges the parsed config objects from multiple levels
176
+ - **Managed Config Directory (RISE-070)** uses the same JSONC format for enterprise config
177
+
178
+ ## Creative Advancement Scenarios
179
+
180
+ **Scenario 1 — Annotated Personal Config:**
181
+ A developer maintains a richly commented config file that documents their choices: `"model": "claude-sonnet-4", // Switched from Gemini 2025-01-10 — better at TypeScript`. Months later, they remember why they made the switch without digging through changelogs.
182
+
183
+ **Scenario 2 — Experimenting with Settings:**
184
+ A developer wants to try a new model. They comment out their current setting and add a new one: `// "model": "gemini-2.5-pro",` followed by `"model": "claude-sonnet-4"`. If the new model doesn't work out, they reverse the comments. No git diff noise, no value loss.
185
+
186
+ **Scenario 3 — Team Config Documentation:**
187
+ A team commits `.mia-code/config.jsonc` to their repository. The file includes block comments at the top explaining the team's conventions: which model to use, which permissions are required, and why certain tools are restricted. New team members read the config file and understand the project's agent policy.
188
+
189
+ **Scenario 4 — Config Parse Error Recovery:**
190
+ A developer accidentally introduces a syntax error in their config. On startup, mia-code shows the error with line number and context. The developer fixes the typo. mia-code loads the corrected config without restarting — the error was caught early, and the developer wasn't left guessing what went wrong.