codemini-cli 0.5.1 → 0.5.3

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 (384) hide show
  1. package/OPERATIONS.md +1 -1
  2. package/README.md +25 -25
  3. package/codemini-web/dist/assets/abap-9R7RjkQK.js +1 -0
  4. package/codemini-web/dist/assets/actionscript-3-CNowah7a.js +1 -0
  5. package/codemini-web/dist/assets/ada-D5HmrmpD.js +1 -0
  6. package/codemini-web/dist/assets/andromeeda-i_b3g2bn.js +1 -0
  7. package/codemini-web/dist/assets/{angular-html-Cde9qVP5.js → angular-html-CHsdtmkx.js} +1 -1
  8. package/codemini-web/dist/assets/angular-html-DlSp9HPG.js +1 -0
  9. package/codemini-web/dist/assets/{angular-ts-DefScAWP.js → angular-ts-B29Ypg6B.js} +1 -1
  10. package/codemini-web/dist/assets/angular-ts-JNDGGWj0.js +1 -0
  11. package/codemini-web/dist/assets/apache-D37U8o0r.js +1 -0
  12. package/codemini-web/dist/assets/apex-CszkG4lQ.js +1 -0
  13. package/codemini-web/dist/assets/apl-BASZ7uB_.js +1 -0
  14. package/codemini-web/dist/assets/{apl-w753UHCW.js → apl-Byuv-g-O.js} +1 -1
  15. package/codemini-web/dist/assets/applescript-Ajt9gmC_.js +1 -0
  16. package/codemini-web/dist/assets/ara-DpGk8XWf.js +1 -0
  17. package/codemini-web/dist/assets/asciidoc-BdDORSgx.js +1 -0
  18. package/codemini-web/dist/assets/asm-DGLRM3OU.js +1 -0
  19. package/codemini-web/dist/assets/{astro-DBA9Da7s.js → astro-CTzEugGW.js} +1 -1
  20. package/codemini-web/dist/assets/astro-l-XABzN2.js +1 -0
  21. package/codemini-web/dist/assets/aurora-x-DdfqxvM_.js +1 -0
  22. package/codemini-web/dist/assets/awk-B-J9te9x.js +1 -0
  23. package/codemini-web/dist/assets/ayu-dark-BdNJk5qF.js +1 -0
  24. package/codemini-web/dist/assets/ayu-light-DkLNbAkT.js +1 -0
  25. package/codemini-web/dist/assets/ayu-mirage-BoyGjGHX.js +1 -0
  26. package/codemini-web/dist/assets/ballerina-CZ8CAKmi.js +1 -0
  27. package/codemini-web/dist/assets/bat-fNtaIqKE.js +1 -0
  28. package/codemini-web/dist/assets/beancount-9imagnS2.js +1 -0
  29. package/codemini-web/dist/assets/berry-QTBYpUPn.js +1 -0
  30. package/codemini-web/dist/assets/bibtex-CzFWvn9u.js +1 -0
  31. package/codemini-web/dist/assets/bicep-DLWEubga.js +1 -0
  32. package/codemini-web/dist/assets/bird2-V7dWeQhQ.js +1 -0
  33. package/codemini-web/dist/assets/blade-B3_bxlV2.js +1 -0
  34. package/codemini-web/dist/assets/{blade-B-u5p0Rp.js → blade-Dt6km9YT.js} +1 -1
  35. package/codemini-web/dist/assets/bsl-D3u1l2dW.js +1 -0
  36. package/codemini-web/dist/assets/c-CgTSul4N.js +1 -0
  37. package/codemini-web/dist/assets/c3-SmmwBAzR.js +1 -0
  38. package/codemini-web/dist/assets/cadence-DVNAI4pJ.js +1 -0
  39. package/codemini-web/dist/assets/cairo-CoQzhJ_o.js +1 -0
  40. package/codemini-web/dist/assets/catppuccin-frappe-DXCXlnyU.js +1 -0
  41. package/codemini-web/dist/assets/catppuccin-latte-BXW2qYGv.js +1 -0
  42. package/codemini-web/dist/assets/catppuccin-macchiato--32cesHH.js +1 -0
  43. package/codemini-web/dist/assets/catppuccin-mocha-BBRFilGN.js +1 -0
  44. package/codemini-web/dist/assets/clarity-BJs8u8xG.js +1 -0
  45. package/codemini-web/dist/assets/clojure-DpYoDXXl.js +1 -0
  46. package/codemini-web/dist/assets/cmake-CdseusyP.js +1 -0
  47. package/codemini-web/dist/assets/{cobol-CkQrskif.js → cobol-D_kesMA-.js} +1 -1
  48. package/codemini-web/dist/assets/cobol-DqhY5el-.js +1 -0
  49. package/codemini-web/dist/assets/codeowners-5EAeZxPo.js +1 -0
  50. package/codemini-web/dist/assets/codeql-OkUuMGe9.js +1 -0
  51. package/codemini-web/dist/assets/coffee-DF15_0rk.js +1 -0
  52. package/codemini-web/dist/assets/common-lisp-DCRDlc4V.js +1 -0
  53. package/codemini-web/dist/assets/coq-acwo70uY.js +1 -0
  54. package/codemini-web/dist/assets/cpp-Cudwe5mG.js +1 -0
  55. package/codemini-web/dist/assets/{crystal-Dh09vXLx.js → crystal-Bw1_1hFA.js} +1 -1
  56. package/codemini-web/dist/assets/crystal-DV9Nijjb.js +1 -0
  57. package/codemini-web/dist/assets/csharp-Cqz84DXU.js +1 -0
  58. package/codemini-web/dist/assets/css-z2ijrDWT.js +1 -0
  59. package/codemini-web/dist/assets/csv-CqpUSPyF.js +1 -0
  60. package/codemini-web/dist/assets/cue-D4-Hq7Jx.js +1 -0
  61. package/codemini-web/dist/assets/cypher-CXMVfSpG.js +1 -0
  62. package/codemini-web/dist/assets/d-Cc_KoyiC.js +1 -0
  63. package/codemini-web/dist/assets/dark-plus-C0kLyDb3.js +1 -0
  64. package/codemini-web/dist/assets/dart-CVd7TDni.js +1 -0
  65. package/codemini-web/dist/assets/dax-DtoJMuz5.js +1 -0
  66. package/codemini-web/dist/assets/desktop-BkIJ2CMP.js +1 -0
  67. package/codemini-web/dist/assets/diff-RUsawely.js +1 -0
  68. package/codemini-web/dist/assets/docker-CDpVZYy7.js +1 -0
  69. package/codemini-web/dist/assets/dotenv-DWnlamm2.js +1 -0
  70. package/codemini-web/dist/assets/dracula-QP8aKUFB.js +1 -0
  71. package/codemini-web/dist/assets/dracula-soft-BNzyYlRI.js +1 -0
  72. package/codemini-web/dist/assets/dream-maker-MNBsfIGU.js +1 -0
  73. package/codemini-web/dist/assets/{edge-CCRtknu5.js → edge-BosfXYh1.js} +1 -1
  74. package/codemini-web/dist/assets/edge-r5NIe9Lp.js +1 -0
  75. package/codemini-web/dist/assets/{elixir-5EYbFEoC.js → elixir-B04apOJS.js} +1 -1
  76. package/codemini-web/dist/assets/elixir-Dw_vsdUl.js +1 -0
  77. package/codemini-web/dist/assets/elm-DPfFNNkG.js +1 -0
  78. package/codemini-web/dist/assets/emacs-lisp-BHIDiQRU.js +1 -0
  79. package/codemini-web/dist/assets/{erb-C6pPz4fX.js → erb-BNioEFKQ.js} +1 -1
  80. package/codemini-web/dist/assets/erb-DZuoCU5t.js +1 -0
  81. package/codemini-web/dist/assets/erlang-CqHCISqs.js +1 -0
  82. package/codemini-web/dist/assets/everforest-dark-DSK976eP.js +1 -0
  83. package/codemini-web/dist/assets/everforest-light-BkaBVm1r.js +1 -0
  84. package/codemini-web/dist/assets/fennel-BsP4yvxI.js +1 -0
  85. package/codemini-web/dist/assets/fish-CimYqIk1.js +1 -0
  86. package/codemini-web/dist/assets/fluent-O-Iic89O.js +1 -0
  87. package/codemini-web/dist/assets/fortran-fixed-form-60ZQAHDk.js +1 -0
  88. package/codemini-web/dist/assets/fortran-free-form-BVNtEstX.js +1 -0
  89. package/codemini-web/dist/assets/fsharp-Ch5ZVinn.js +1 -0
  90. package/codemini-web/dist/assets/gdresource-CqNLhJW1.js +1 -0
  91. package/codemini-web/dist/assets/gdscript-D-FJCTl3.js +1 -0
  92. package/codemini-web/dist/assets/gdshader-Czvzt8dR.js +1 -0
  93. package/codemini-web/dist/assets/genie-Mnf_jXpg.js +1 -0
  94. package/codemini-web/dist/assets/gherkin-DzkYuFEO.js +1 -0
  95. package/codemini-web/dist/assets/git-commit-CSWECvqq.js +1 -0
  96. package/codemini-web/dist/assets/git-rebase-MUvuytPe.js +1 -0
  97. package/codemini-web/dist/assets/github-dark-C98YWDhk.js +1 -0
  98. package/codemini-web/dist/assets/github-dark-default-CDGuVkyn.js +1 -0
  99. package/codemini-web/dist/assets/github-dark-dimmed-CarTohA3.js +1 -0
  100. package/codemini-web/dist/assets/github-dark-high-contrast-CsjOICAd.js +1 -0
  101. package/codemini-web/dist/assets/github-light-D17m3GP4.js +1 -0
  102. package/codemini-web/dist/assets/github-light-default-DiMoa1ZI.js +1 -0
  103. package/codemini-web/dist/assets/github-light-high-contrast-DGwHD8Ty.js +1 -0
  104. package/codemini-web/dist/assets/gleam-MAXpOqqF.js +1 -0
  105. package/codemini-web/dist/assets/{glimmer-js-C4PTXfaW.js → glimmer-js-Dn6vjgHP.js} +1 -1
  106. package/codemini-web/dist/assets/glimmer-js-HDDEErW7.js +1 -0
  107. package/codemini-web/dist/assets/glimmer-ts-Dq0_BflX.js +1 -0
  108. package/codemini-web/dist/assets/{glimmer-ts-Df1V6YK_.js → glimmer-ts-mq-Q_zEE.js} +1 -1
  109. package/codemini-web/dist/assets/glsl-C4rvog10.js +1 -0
  110. package/codemini-web/dist/assets/gn-BNADkWgR.js +1 -0
  111. package/codemini-web/dist/assets/gnuplot-BRQvwTQM.js +1 -0
  112. package/codemini-web/dist/assets/go-iV8pwUYW.js +1 -0
  113. package/codemini-web/dist/assets/graphql-Dg0Ewf8Q.js +1 -0
  114. package/codemini-web/dist/assets/groovy-CxG1cXrE.js +1 -0
  115. package/codemini-web/dist/assets/gruvbox-dark-hard-Cnb1fzry.js +1 -0
  116. package/codemini-web/dist/assets/gruvbox-dark-medium-Cu5j8v_d.js +1 -0
  117. package/codemini-web/dist/assets/gruvbox-dark-soft-BghHDwrM.js +1 -0
  118. package/codemini-web/dist/assets/gruvbox-light-hard-BUhLUxUB.js +1 -0
  119. package/codemini-web/dist/assets/gruvbox-light-medium-GXeiXGL9.js +1 -0
  120. package/codemini-web/dist/assets/gruvbox-light-soft-pTZgKx7j.js +1 -0
  121. package/codemini-web/dist/assets/{hack-zJL_tEH0.js → hack-DeD259o6.js} +1 -1
  122. package/codemini-web/dist/assets/hack-DjE76gIx.js +1 -0
  123. package/codemini-web/dist/assets/{haml-qjVLLTZk.js → haml-B8MRe8CS.js} +1 -1
  124. package/codemini-web/dist/assets/haml-DyIc_iO2.js +1 -0
  125. package/codemini-web/dist/assets/handlebars-DQ4X08Zf.js +1 -0
  126. package/codemini-web/dist/assets/{handlebars-B3RyMMk0.js → handlebars-GoJyzhp1.js} +1 -1
  127. package/codemini-web/dist/assets/haskell-BZ8bGMYA.js +1 -0
  128. package/codemini-web/dist/assets/haxe-1eAUKQ0B.js +1 -0
  129. package/codemini-web/dist/assets/hcl-DQqvKq2I.js +1 -0
  130. package/codemini-web/dist/assets/{highlighted-body-OFNGDK62-0FuBVb0_.js → highlighted-body-OFNGDK62-CDUecv8k.js} +1 -1
  131. package/codemini-web/dist/assets/hjson-DNWMSWLN.js +1 -0
  132. package/codemini-web/dist/assets/hlsl-Df5oFh9i.js +1 -0
  133. package/codemini-web/dist/assets/horizon-BCbhfxa1.js +1 -0
  134. package/codemini-web/dist/assets/horizon-bright-B0vmEjwb.js +1 -0
  135. package/codemini-web/dist/assets/houston-DHnjBE42.js +1 -0
  136. package/codemini-web/dist/assets/{html-DP-V-rfg.js → html-B7kk5NVw.js} +1 -1
  137. package/codemini-web/dist/assets/html-GfHBuoLs.js +1 -0
  138. package/codemini-web/dist/assets/{html-derivative-DB9UhNDN.js → html-derivative-Ba28nVB3.js} +1 -1
  139. package/codemini-web/dist/assets/html-derivative-ChSmSZXY.js +1 -0
  140. package/codemini-web/dist/assets/http-DMTBhQm8.js +1 -0
  141. package/codemini-web/dist/assets/hurl-XIpACwjS.js +1 -0
  142. package/codemini-web/dist/assets/hxml-PnV_FpS-.js +1 -0
  143. package/codemini-web/dist/assets/hy-DaILHjW8.js +1 -0
  144. package/codemini-web/dist/assets/imba-BA6_JyKt.js +1 -0
  145. package/codemini-web/dist/assets/index-Cfk9ARKs.js +426 -0
  146. package/codemini-web/dist/assets/index-Dqq2DCEb.css +2 -0
  147. package/codemini-web/dist/assets/ini-DqXMcqXm.js +1 -0
  148. package/codemini-web/dist/assets/java-Ds1cyVrp.js +1 -0
  149. package/codemini-web/dist/assets/javascript-Cx8CXBJR.js +1 -0
  150. package/codemini-web/dist/assets/{jinja-BcRTlqOI.js → jinja-8ATGhxJO.js} +1 -1
  151. package/codemini-web/dist/assets/jinja-Dx5IcFSt.js +1 -0
  152. package/codemini-web/dist/assets/jison-CSsYnr7O.js +1 -0
  153. package/codemini-web/dist/assets/json-CY14kIzN.js +1 -0
  154. package/codemini-web/dist/assets/json5-Cus7zL-r.js +1 -0
  155. package/codemini-web/dist/assets/jsonc-RzqrtWTz.js +1 -0
  156. package/codemini-web/dist/assets/jsonl-CLcLUtvq.js +1 -0
  157. package/codemini-web/dist/assets/jsonnet--7yRuAzt.js +1 -0
  158. package/codemini-web/dist/assets/jssm-Cid5Rr2Y.js +1 -0
  159. package/codemini-web/dist/assets/jsx-DmH5dwMF.js +1 -0
  160. package/codemini-web/dist/assets/julia-vjG00jwO.js +1 -0
  161. package/codemini-web/dist/assets/{just-O9z-zIlY.js → just-BlUYrdKb.js} +1 -1
  162. package/codemini-web/dist/assets/just-C7G3KFgN.js +1 -0
  163. package/codemini-web/dist/assets/kanagawa-dragon-BxDDNs-7.js +1 -0
  164. package/codemini-web/dist/assets/kanagawa-lotus-BQyifewU.js +1 -0
  165. package/codemini-web/dist/assets/kanagawa-wave-BsJGVIZT.js +1 -0
  166. package/codemini-web/dist/assets/kdl-D2MbAIKj.js +1 -0
  167. package/codemini-web/dist/assets/kotlin-fpq87Jdo.js +1 -0
  168. package/codemini-web/dist/assets/kusto-BcKmLn2p.js +1 -0
  169. package/codemini-web/dist/assets/laserwave-CrjhMkHv.js +1 -0
  170. package/codemini-web/dist/assets/latex-D8-NgtPj.js +1 -0
  171. package/codemini-web/dist/assets/lean-B9Xp-kaJ.js +1 -0
  172. package/codemini-web/dist/assets/less-BKjOc0Gl.js +1 -0
  173. package/codemini-web/dist/assets/light-plus-DFt9HI_B.js +1 -0
  174. package/codemini-web/dist/assets/{liquid-BK2PyMjt.js → liquid-BUh7yINm.js} +1 -1
  175. package/codemini-web/dist/assets/liquid-D2m0XXrV.js +1 -0
  176. package/codemini-web/dist/assets/llvm-XDy97SdL.js +1 -0
  177. package/codemini-web/dist/assets/log-tjGJZ7jx.js +1 -0
  178. package/codemini-web/dist/assets/logo-rCQwad-6.js +1 -0
  179. package/codemini-web/dist/assets/lua-BeSXusec.js +1 -0
  180. package/codemini-web/dist/assets/luau-C0wE4YeK.js +1 -0
  181. package/codemini-web/dist/assets/make-DZENZd8z.js +1 -0
  182. package/codemini-web/dist/assets/markdown-CbgVmtS5.js +1 -0
  183. package/codemini-web/dist/assets/marko-DPnRthJQ.js +1 -0
  184. package/codemini-web/dist/assets/{marko-CTEKS39A.js → marko-Dm8xPXkG.js} +1 -1
  185. package/codemini-web/dist/assets/material-theme-YhiuxyiP.js +1 -0
  186. package/codemini-web/dist/assets/material-theme-darker-CKeuyK7B.js +1 -0
  187. package/codemini-web/dist/assets/material-theme-lighter-C56RzTfM.js +1 -0
  188. package/codemini-web/dist/assets/material-theme-ocean-DUos8xKe.js +1 -0
  189. package/codemini-web/dist/assets/material-theme-palenight-CZBKx4B1.js +1 -0
  190. package/codemini-web/dist/assets/matlab-BJwkjxyL.js +1 -0
  191. package/codemini-web/dist/assets/mdc-BLdFHYKv.js +1 -0
  192. package/codemini-web/dist/assets/{mdc-BOaCYzzL.js → mdc-Dzipcsdb.js} +1 -1
  193. package/codemini-web/dist/assets/mdx-BvkytFG9.js +1 -0
  194. package/codemini-web/dist/assets/mermaid-Ctx7uNrT.js +1 -0
  195. package/codemini-web/dist/assets/mermaid-GHXKKRXX-BWSxGKNn.js +1 -0
  196. package/codemini-web/dist/assets/min-dark-BA-rwgF3.js +1 -0
  197. package/codemini-web/dist/assets/min-light-DHUVhXnm.js +1 -0
  198. package/codemini-web/dist/assets/mipsasm-ByaU0dEX.js +1 -0
  199. package/codemini-web/dist/assets/mojo-CqhYERP_.js +1 -0
  200. package/codemini-web/dist/assets/monokai-D3MyQCxG.js +1 -0
  201. package/codemini-web/dist/assets/moonbit-C4BfwLm6.js +1 -0
  202. package/codemini-web/dist/assets/move-DOj5FawL.js +1 -0
  203. package/codemini-web/dist/assets/narrat-CDHYPJWr.js +1 -0
  204. package/codemini-web/dist/assets/{nextflow-Cto1mpL3.js → nextflow-BRiWOV-p.js} +1 -1
  205. package/codemini-web/dist/assets/nextflow-c8YCPRRb.js +1 -0
  206. package/codemini-web/dist/assets/nextflow-groovy-D6rYlJlL.js +1 -0
  207. package/codemini-web/dist/assets/nginx-u-hq5m-a.js +1 -0
  208. package/codemini-web/dist/assets/night-owl-NHZjGVLB.js +1 -0
  209. package/codemini-web/dist/assets/night-owl-light-DcKosvl7.js +1 -0
  210. package/codemini-web/dist/assets/nim-B5b6_jZr.js +1 -0
  211. package/codemini-web/dist/assets/{nim-BZyx58NM.js → nim-CvgRYLO2.js} +1 -1
  212. package/codemini-web/dist/assets/nix-Csr5leD-.js +1 -0
  213. package/codemini-web/dist/assets/nord-DomFMWpF.js +1 -0
  214. package/codemini-web/dist/assets/nushell-IZVQdI7Z.js +1 -0
  215. package/codemini-web/dist/assets/objective-c-DD1i5sf2.js +1 -0
  216. package/codemini-web/dist/assets/objective-cpp-CtzOCe2w.js +1 -0
  217. package/codemini-web/dist/assets/ocaml-BlMDMjEj.js +1 -0
  218. package/codemini-web/dist/assets/odin-CoWSDSNi.js +1 -0
  219. package/codemini-web/dist/assets/one-dark-pro-DWENJxB_.js +1 -0
  220. package/codemini-web/dist/assets/one-light-CEeF6aqP.js +1 -0
  221. package/codemini-web/dist/assets/openscad-D3gRRPUh.js +1 -0
  222. package/codemini-web/dist/assets/pascal-G3gJIkHz.js +1 -0
  223. package/codemini-web/dist/assets/{perl-BW8t13Xq.js → perl-BIcNvyL6.js} +1 -1
  224. package/codemini-web/dist/assets/perl-DdF12AsD.js +1 -0
  225. package/codemini-web/dist/assets/php-BP-3TkW_.js +1 -0
  226. package/codemini-web/dist/assets/{php-Cq5FOhfR.js → php-CyQZnE0l.js} +1 -1
  227. package/codemini-web/dist/assets/pierre-dark-CBqOR10c.js +1 -0
  228. package/codemini-web/dist/assets/pierre-light-sgwdVCEP.js +1 -0
  229. package/codemini-web/dist/assets/pkl-DdsryWcC.js +1 -0
  230. package/codemini-web/dist/assets/plastic-CwUA_4-2.js +1 -0
  231. package/codemini-web/dist/assets/plsql-C2yEtnCG.js +1 -0
  232. package/codemini-web/dist/assets/po-Dy7ytuR1.js +1 -0
  233. package/codemini-web/dist/assets/poimandres-u68WOWhl.js +1 -0
  234. package/codemini-web/dist/assets/polar-CjLVWIyd.js +1 -0
  235. package/codemini-web/dist/assets/postcss-DiNtjF5e.js +1 -0
  236. package/codemini-web/dist/assets/powerquery-iC4Ra9LJ.js +1 -0
  237. package/codemini-web/dist/assets/powershell-Ch2YpFAx.js +1 -0
  238. package/codemini-web/dist/assets/prisma-HWctQCpn.js +1 -0
  239. package/codemini-web/dist/assets/prolog-DHAsH4Hf.js +1 -0
  240. package/codemini-web/dist/assets/proto-mTghX89X.js +1 -0
  241. package/codemini-web/dist/assets/pug-HwoxZo9M.js +1 -0
  242. package/codemini-web/dist/assets/{pug-B4WHazil.js → pug-_XoIcKf3.js} +1 -1
  243. package/codemini-web/dist/assets/puppet-D1Zcnrr5.js +1 -0
  244. package/codemini-web/dist/assets/purescript-s82m5f0Y.js +1 -0
  245. package/codemini-web/dist/assets/python-BhsI1K6K.js +1 -0
  246. package/codemini-web/dist/assets/qml-CysuucQ6.js +1 -0
  247. package/codemini-web/dist/assets/qmldir-Bzkc2Njy.js +1 -0
  248. package/codemini-web/dist/assets/qss-CKbozdtF.js +1 -0
  249. package/codemini-web/dist/assets/r-BKej5r_k.js +1 -0
  250. package/codemini-web/dist/assets/racket-CUDoXUwy.js +1 -0
  251. package/codemini-web/dist/assets/raku-XPAjN9OU.js +1 -0
  252. package/codemini-web/dist/assets/{razor-CQPYUgex.js → razor-DQ6FV4WL.js} +1 -1
  253. package/codemini-web/dist/assets/razor-ZpEr_C9H.js +1 -0
  254. package/codemini-web/dist/assets/red-8aRo80UF.js +1 -0
  255. package/codemini-web/dist/assets/reg-B0B_plbq.js +1 -0
  256. package/codemini-web/dist/assets/regexp-CK-1EP63.js +1 -0
  257. package/codemini-web/dist/assets/rel-DhoFe2Y7.js +1 -0
  258. package/codemini-web/dist/assets/riscv-CKx_Jisq.js +1 -0
  259. package/codemini-web/dist/assets/ron-qyvgw9vu.js +1 -0
  260. package/codemini-web/dist/assets/rose-pine-R3f76h4_.js +1 -0
  261. package/codemini-web/dist/assets/rose-pine-dawn-BS09rtpK.js +1 -0
  262. package/codemini-web/dist/assets/rose-pine-moon-B4Q4DiPG.js +1 -0
  263. package/codemini-web/dist/assets/rosmsg-Dy_ItAfo.js +1 -0
  264. package/codemini-web/dist/assets/rst-CjO4XFKz.js +1 -0
  265. package/codemini-web/dist/assets/{rst-B-OS2pa5.js → rst-DDrWKQ9c.js} +1 -1
  266. package/codemini-web/dist/assets/ruby-BOVYgV5O.js +1 -0
  267. package/codemini-web/dist/assets/{ruby-BM15fmxz.js → ruby-CZgIYPlP.js} +1 -1
  268. package/codemini-web/dist/assets/rust-CNEVkiWF.js +1 -0
  269. package/codemini-web/dist/assets/sas-DPGT0TjQ.js +1 -0
  270. package/codemini-web/dist/assets/sass-D2nye32F.js +1 -0
  271. package/codemini-web/dist/assets/scala-B8greAnE.js +1 -0
  272. package/codemini-web/dist/assets/scheme-Ci_aquns.js +1 -0
  273. package/codemini-web/dist/assets/{scss-C0BQ8YVM.js → scss-CaciJ0Gl.js} +1 -1
  274. package/codemini-web/dist/assets/scss-YARKxu2i.js +1 -0
  275. package/codemini-web/dist/assets/sdbl-D4tJqBiC.js +1 -0
  276. package/codemini-web/dist/assets/shaderlab-JWcsxey4.js +1 -0
  277. package/codemini-web/dist/assets/shellscript-CxhArCCJ.js +1 -0
  278. package/codemini-web/dist/assets/shellsession-DYmuifdt.js +1 -0
  279. package/codemini-web/dist/assets/slack-dark-BcN7KJ02.js +1 -0
  280. package/codemini-web/dist/assets/slack-ochin-D4iInQ9w.js +1 -0
  281. package/codemini-web/dist/assets/smalltalk-BwSireXb.js +1 -0
  282. package/codemini-web/dist/assets/snazzy-light-B45TfPsv.js +1 -0
  283. package/codemini-web/dist/assets/solarized-dark-8yYW1wLs.js +1 -0
  284. package/codemini-web/dist/assets/solarized-light-BY3Hr0Ud.js +1 -0
  285. package/codemini-web/dist/assets/solidity-CIUlntDs.js +1 -0
  286. package/codemini-web/dist/assets/{soy-C6D0Ibo9.js → soy-7iHZG9Jz.js} +1 -1
  287. package/codemini-web/dist/assets/soy-h0dQKbQs.js +1 -0
  288. package/codemini-web/dist/assets/sparql-BGRSvFxd.js +1 -0
  289. package/codemini-web/dist/assets/splunk-DueVPk5k.js +1 -0
  290. package/codemini-web/dist/assets/sql-Q6zkgi_w.js +1 -0
  291. package/codemini-web/dist/assets/ssh-config-DKIMErlp.js +1 -0
  292. package/codemini-web/dist/assets/stata-lXN9BRaz.js +1 -0
  293. package/codemini-web/dist/assets/stylus-oqceM0yt.js +1 -0
  294. package/codemini-web/dist/assets/surrealql-l0SGzwOs.js +1 -0
  295. package/codemini-web/dist/assets/svelte-BM89dRu0.js +1 -0
  296. package/codemini-web/dist/assets/{svelte-DJ-0FpL2.js → svelte-CijnRGul.js} +1 -1
  297. package/codemini-web/dist/assets/swift-foA31xPc.js +1 -0
  298. package/codemini-web/dist/assets/synthwave-84-B002ZU4p.js +1 -0
  299. package/codemini-web/dist/assets/system-verilog-CCSGcM60.js +1 -0
  300. package/codemini-web/dist/assets/systemd-BymS_eIJ.js +1 -0
  301. package/codemini-web/dist/assets/talonscript-Ccc0122j.js +1 -0
  302. package/codemini-web/dist/assets/tasl-o38sfjeU.js +1 -0
  303. package/codemini-web/dist/assets/tcl-DISPE-5Q.js +1 -0
  304. package/codemini-web/dist/assets/{templ-7Bvm-rei.js → templ-CNjJl440.js} +1 -1
  305. package/codemini-web/dist/assets/templ-D1GoDFsp.js +1 -0
  306. package/codemini-web/dist/assets/terraform-V85Kewcz.js +1 -0
  307. package/codemini-web/dist/assets/tex-CxEkh6NI.js +1 -0
  308. package/codemini-web/dist/assets/tokyo-night-BLn5KNCP.js +1 -0
  309. package/codemini-web/dist/assets/toml-uEjeW8NC.js +1 -0
  310. package/codemini-web/dist/assets/{ts-tags-BfuR6EQ0.js → ts-tags-B88Nbzcl.js} +1 -1
  311. package/codemini-web/dist/assets/ts-tags-DV6nguf9.js +1 -0
  312. package/codemini-web/dist/assets/tsv-DjGwUc04.js +1 -0
  313. package/codemini-web/dist/assets/tsx-5O-M05V0.js +1 -0
  314. package/codemini-web/dist/assets/turtle-PTxTluYn.js +1 -0
  315. package/codemini-web/dist/assets/twig-B3Kws0Fb.js +1 -0
  316. package/codemini-web/dist/assets/{twig-_uxJ-QmX.js → twig-BROkIZLg.js} +1 -1
  317. package/codemini-web/dist/assets/typescript-hRweav8r.js +1 -0
  318. package/codemini-web/dist/assets/typespec-CKEcF6Kw.js +1 -0
  319. package/codemini-web/dist/assets/typst-DSQh9HII.js +1 -0
  320. package/codemini-web/dist/assets/v-obK6h_YW.js +1 -0
  321. package/codemini-web/dist/assets/vala-DXa9jSo-.js +1 -0
  322. package/codemini-web/dist/assets/vb-DEPbtYq-.js +1 -0
  323. package/codemini-web/dist/assets/verilog-Bs-185hK.js +1 -0
  324. package/codemini-web/dist/assets/vesper-B7BneC5G.js +1 -0
  325. package/codemini-web/dist/assets/vhdl-CBukgB2Z.js +1 -0
  326. package/codemini-web/dist/assets/viml-C1cRY0x6.js +1 -0
  327. package/codemini-web/dist/assets/vitesse-black-D3_12zni.js +1 -0
  328. package/codemini-web/dist/assets/vitesse-dark-B_iF7INE.js +1 -0
  329. package/codemini-web/dist/assets/vitesse-light-DbrrMtxY.js +1 -0
  330. package/codemini-web/dist/assets/{vue-DkOBu49o.js → vue-BUQP_8VF.js} +1 -1
  331. package/codemini-web/dist/assets/vue-CT36qSUr.js +1 -0
  332. package/codemini-web/dist/assets/vue-html-bJyjqZnI.js +1 -0
  333. package/codemini-web/dist/assets/vue-vine-BLqV15Pm.js +1 -0
  334. package/codemini-web/dist/assets/{vue-vine-veyFk6GJ.js → vue-vine-RK3AHrhp.js} +1 -1
  335. package/codemini-web/dist/assets/vyper-BxVot6rR.js +1 -0
  336. package/codemini-web/dist/assets/wasm-BNTPmfEI.js +1 -0
  337. package/codemini-web/dist/assets/wasm-o5uYkU9G.js +1 -0
  338. package/codemini-web/dist/assets/wenyan-MnC4h24X.js +1 -0
  339. package/codemini-web/dist/assets/wgsl-BgfkHnVi.js +1 -0
  340. package/codemini-web/dist/assets/wikitext-DCOnP3yk.js +1 -0
  341. package/codemini-web/dist/assets/wit-5UDEI7sp.js +1 -0
  342. package/codemini-web/dist/assets/wolfram-vvgPlu2n.js +1 -0
  343. package/codemini-web/dist/assets/xml-DyJ3D9rW.js +1 -0
  344. package/codemini-web/dist/assets/xsl-BOsdDgv_.js +1 -0
  345. package/codemini-web/dist/assets/yaml-C-G727Y6.js +1 -0
  346. package/codemini-web/dist/assets/zenscript-BPjqX0BY.js +1 -0
  347. package/codemini-web/dist/assets/zig-Bd91oU8r.js +1 -0
  348. package/codemini-web/dist/codemini_logo.png +0 -0
  349. package/codemini-web/dist/favicon.ico +0 -0
  350. package/codemini-web/dist/index.html +6 -3
  351. package/codemini-web/lib/runtime-bridge.js +22 -1
  352. package/codemini-web/server.js +919 -880
  353. package/deployment.md +5 -5
  354. package/package.json +1 -1
  355. package/src/commands/chat.js +1 -1
  356. package/src/commands/run.js +22 -7
  357. package/src/core/agent-loop.js +11 -7
  358. package/src/core/chat-runtime.js +314 -86
  359. package/src/core/command-evaluator.js +9 -3
  360. package/src/core/command-risk.js +9 -1
  361. package/src/core/config-store.js +4 -2
  362. package/src/core/context-compact.js +65 -3
  363. package/src/core/default-system-prompt.js +12 -4
  364. package/src/core/fff-adapter.js +1 -1
  365. package/src/core/reflect-skill.js +1 -1
  366. package/src/core/reply-language.js +6 -0
  367. package/src/core/session-store.js +18 -0
  368. package/src/core/shell-profile.js +14 -1
  369. package/src/core/soul.js +1 -3
  370. package/src/core/system-prompt-composer.js +42 -0
  371. package/src/core/tools.js +2 -2
  372. package/src/tui/chat-app.js +13 -3
  373. package/codemini-web/dist/assets/index-CSYMjBeT.css +0 -2
  374. package/codemini-web/dist/assets/index-DtiSt5vh.js +0 -206
  375. package/codemini-web/dist/assets/mermaid-GHXKKRXX-BQrwnoIu.js +0 -1
  376. /package/codemini-web/dist/assets/{bird2-Bs7YDhA3.js → bird2-VVa6lZ01.js} +0 -0
  377. /package/codemini-web/dist/assets/{css-BTi88BmP.js → css-Dr0v2l-V.js} +0 -0
  378. /package/codemini-web/dist/assets/{dart-Czrjv-nr.js → dart-BIyV3H7V.js} +0 -0
  379. /package/codemini-web/dist/assets/{emacs-lisp-D4W-_rAk.js → emacs-lisp-CVlPXEEa.js} +0 -0
  380. /package/codemini-web/dist/assets/{go-BTh90-YS.js → go-D6k5URxL.js} +0 -0
  381. /package/codemini-web/dist/assets/{horizon-bright-CpoqdULz.js → horizon-bright-CXcxBcih.js} +0 -0
  382. /package/codemini-web/dist/assets/{kusto-ByPWIc1b.js → kusto-B1r4va-8.js} +0 -0
  383. /package/codemini-web/dist/assets/{nextflow-groovy-D1X5Yd05.js → nextflow-groovy-o7ZjyFmf.js} +0 -0
  384. /package/codemini-web/dist/assets/{typespec-8nkhqWz6.js → typespec-N7-U_jBZ.js} +0 -0
@@ -20,13 +20,13 @@ import { createCheckpoint, listCheckpoints, loadCheckpoint } from './checkpoint-
20
20
  import {
21
21
  compactMessagesLocally,
22
22
  estimateMessagesTokens,
23
+ microCompactMessages,
23
24
  parseCompactArgs
24
25
  } from './context-compact.js';
25
- import { buildSystemPromptWithReplyLanguage, getReplyLanguage, getReplyLanguageName } from './reply-language.js';
26
- import { buildSystemPromptWithSoul } from './soul.js';
26
+ import { getReplyLanguage, getReplyLanguageName } from './reply-language.js';
27
+ import { composeSystemPrompt } from './system-prompt-composer.js';
27
28
  import { getProjectPlansDir, getProjectSpecsDir, getProjectWorkspaceDir, getSessionsDir } from './paths.js';
28
29
  import { buildProjectContextSnippet, initializeProjectIndex } from './project-index.js';
29
- import { buildMemorySnapshot } from './memory-prompt.js';
30
30
  import { forgetMemory, listMemories, rememberMemory, searchMemories, captureToInbox, listInbox } from './memory-store.js';
31
31
  import { runDreamConsolidation } from './dream-consolidate.js';
32
32
  import { normalizePlanState } from './plan-state.js';
@@ -115,6 +115,8 @@ function getCompletionCopy(language = 'zh') {
115
115
  'context.read_file_default_lines': 'read_file 默认行数窗口',
116
116
  'context.read_file_max_chars': 'read_file 字符上限',
117
117
  'context.prompt_budget_audit': 'Prompt 预算审计开关',
118
+ 'context.microcompact_enabled': '微压缩(micro-compact)开关',
119
+ 'context.microcompact_keep_recent': '微压缩保留最近工具结果数',
118
120
  'sessions.max_sessions': '会话保留上限',
119
121
  'sessions.retention_days': '会话保留天数',
120
122
  'shell.default': '默认 shell',
@@ -220,6 +222,8 @@ function getCompletionCopy(language = 'zh') {
220
222
  'context.read_file_default_lines': 'default read_file line window',
221
223
  'context.read_file_max_chars': 'read_file character limit',
222
224
  'context.prompt_budget_audit': 'prompt budget audit switch',
225
+ 'context.microcompact_enabled': 'micro-compact enabled',
226
+ 'context.microcompact_keep_recent': 'micro-compact keep recent tool results',
223
227
  'sessions.max_sessions': 'stored session limit',
224
228
  'sessions.retention_days': 'session retention days',
225
229
  'shell.default': 'default shell',
@@ -581,16 +585,52 @@ function buildPipelineStepGuidance({ role, stepIndex, totalSteps, isFirst, isLas
581
585
  return lines.join('\n');
582
586
  }
583
587
 
584
- function buildSubAgentContextPacket(session) {
588
+ function extractTaskKeywords(task) {
589
+ const text = String(task || '').toLowerCase();
590
+ const tokens = text.match(/[a-z0-9_./:-]{3,}|[\u4e00-\u9fa5]{2,}/g) || [];
591
+ const stop = new Set([
592
+ 'the', 'and', 'for', 'with', 'that', 'this', 'from', 'into', 'task',
593
+ 'please', 'update', 'change', 'fix', 'implement', 'review', 'test'
594
+ ]);
595
+ return [...new Set(tokens.filter((token) => !stop.has(token)))].slice(0, 24);
596
+ }
597
+
598
+ function scoreMessageForTask(message, keywords) {
599
+ if (!keywords.length) return 0;
600
+ const text = String(message?.content || '').toLowerCase();
601
+ if (!text) return 0;
602
+ let score = 0;
603
+ for (const keyword of keywords) {
604
+ if (text.includes(keyword)) score += keyword.includes('/') || keyword.includes('.') ? 3 : 1;
605
+ }
606
+ return score;
607
+ }
608
+
609
+ function buildSubAgentContextPacket(session, task = '') {
585
610
  const source = Array.isArray(session?.messages) ? session.messages : [];
586
- const recent = source
611
+ const candidates = source
587
612
  .filter((msg) => msg && (msg.role === 'user' || msg.role === 'assistant'))
588
- .slice(-SUB_AGENT_CONTEXT_MAX_MESSAGES);
589
- if (recent.length === 0) return '';
613
+ .map((msg, index) => ({ msg, index }));
614
+ if (candidates.length === 0) return '';
615
+ const keywords = extractTaskKeywords(task);
616
+ const recentStart = Math.max(0, candidates.length - SUB_AGENT_CONTEXT_MAX_MESSAGES);
617
+ const ranked = candidates
618
+ .map((item, order) => ({
619
+ ...item,
620
+ score: scoreMessageForTask(item.msg, keywords),
621
+ recentScore: order >= recentStart ? 1 : 0
622
+ }))
623
+ .sort((a, b) => {
624
+ const scoreDelta = (b.score + b.recentScore) - (a.score + a.recentScore);
625
+ if (scoreDelta !== 0) return scoreDelta;
626
+ return b.index - a.index;
627
+ })
628
+ .slice(0, SUB_AGENT_CONTEXT_MAX_MESSAGES)
629
+ .sort((a, b) => a.index - b.index);
590
630
 
591
631
  const lines = [];
592
632
  let usedChars = 0;
593
- for (const msg of recent) {
633
+ for (const { msg } of ranked) {
594
634
  const role = msg.role === 'assistant' ? 'assistant' : 'user';
595
635
  const text = trimInline(msg.content, 260);
596
636
  if (!text) continue;
@@ -601,7 +641,7 @@ function buildSubAgentContextPacket(session) {
601
641
  }
602
642
  if (lines.length === 0) return '';
603
643
  return [
604
- 'Scoped parent context (recent only, not full history):',
644
+ 'Scoped parent context (task-relevant snippets, not full history):',
605
645
  ...lines,
606
646
  'Use this context only if it helps the current task.'
607
647
  ].join('\n');
@@ -1332,8 +1372,8 @@ function classifyAutoRoute(text = '') {
1332
1372
  };
1333
1373
  }
1334
1374
 
1335
- function buildMediumTaskSystemPrompt(systemPrompt) {
1336
- const guidance = [
1375
+ function buildMediumTaskPromptBlock() {
1376
+ return [
1337
1377
  'Task Mode: medium',
1338
1378
  'Execution guidance:',
1339
1379
  '- Give a brief execution outline before coding.',
@@ -1342,12 +1382,11 @@ function buildMediumTaskSystemPrompt(systemPrompt) {
1342
1382
  '- Verify the changed behavior before finishing.',
1343
1383
  '- If major ambiguity appears mid-task, say so clearly and ask for a plan instead of guessing.'
1344
1384
  ].join('\n');
1345
- return `${systemPrompt}\n\n${guidance}`;
1346
1385
  }
1347
1386
 
1348
- function buildAutoSkillSystemPrompt(baseSystemPrompt, commands, config, text) {
1387
+ function buildAutoSkillPromptBlock(commands, config, text) {
1349
1388
  const selected = classifyAutoRoute(text).selectedSkills.filter((name) => isSkillEnabled(config, name, commands.get(name)));
1350
- if (selected.length === 0) return baseSystemPrompt;
1389
+ if (selected.length === 0) return '';
1351
1390
 
1352
1391
  const blocks = [];
1353
1392
  for (const name of selected) {
@@ -1355,8 +1394,7 @@ function buildAutoSkillSystemPrompt(baseSystemPrompt, commands, config, text) {
1355
1394
  if (!skill || skill.metadata?.type !== 'skill') continue;
1356
1395
  blocks.push(`[Auto skill: ${name}]\n${skill.content}`);
1357
1396
  }
1358
- if (blocks.length === 0) return baseSystemPrompt;
1359
- return `${baseSystemPrompt}\n\n${blocks.join('\n\n')}`;
1397
+ return blocks.join('\n\n');
1360
1398
  }
1361
1399
 
1362
1400
  function extractJsonBlock(text) {
@@ -1843,6 +1881,13 @@ async function buildAutoPlanFinalSummary({
1843
1881
  }
1844
1882
 
1845
1883
  try {
1884
+ const summarySystemPrompt = await composeSystemPrompt({
1885
+ shellRulesPrompt: systemPrompt,
1886
+ config,
1887
+ skillsPrompt: 'You are writing the final execution summary for a completed auto plan. Focus on closure, verification status, and the next action.',
1888
+ includeSoul: false,
1889
+ includeMemory: false
1890
+ });
1846
1891
  const result = await createChatCompletion({
1847
1892
  sdkProvider: config.sdk?.provider,
1848
1893
  baseUrl: config.gateway.base_url,
@@ -1851,7 +1896,7 @@ async function buildAutoPlanFinalSummary({
1851
1896
  messages: [
1852
1897
  {
1853
1898
  role: 'system',
1854
- content: `${systemPrompt}\nYou are writing the final execution summary for a completed auto plan. Focus on closure, verification status, and the next action.`
1899
+ content: summarySystemPrompt
1855
1900
  },
1856
1901
  {
1857
1902
  role: 'user',
@@ -1974,6 +2019,13 @@ async function buildSpecWithModel({
1974
2019
  '## Testing / Validation',
1975
2020
  'Make it concrete, scoped, and suitable for turning into a sub-agent implementation plan.'
1976
2021
  ].join('\n');
2022
+ const specSystemPrompt = await composeSystemPrompt({
2023
+ shellRulesPrompt: systemPrompt,
2024
+ config,
2025
+ skillsPrompt: prompt,
2026
+ includeSoul: false,
2027
+ includeMemory: false
2028
+ });
1977
2029
 
1978
2030
  const result = await createChatCompletion({
1979
2031
  sdkProvider: config.sdk?.provider,
@@ -1981,7 +2033,7 @@ async function buildSpecWithModel({
1981
2033
  apiKey: config.gateway.api_key,
1982
2034
  model: model || config.model.name,
1983
2035
  messages: [
1984
- { role: 'system', content: `${systemPrompt}\n${prompt}` },
2036
+ { role: 'system', content: specSystemPrompt },
1985
2037
  { role: 'user', content: `Topic: ${topic}` }
1986
2038
  ],
1987
2039
  timeoutMs: config.gateway.timeout_ms || 1800000,
@@ -2034,6 +2086,13 @@ async function buildPlanFromSpecWithModel({
2034
2086
  '## Task Breakdown',
2035
2087
  'Make the plan concrete and ordered for a coding agent.'
2036
2088
  ].join('\n');
2089
+ const planSystemPrompt = await composeSystemPrompt({
2090
+ shellRulesPrompt: systemPrompt,
2091
+ config,
2092
+ skillsPrompt: prompt,
2093
+ includeSoul: false,
2094
+ includeMemory: false
2095
+ });
2037
2096
 
2038
2097
  const result = await createChatCompletion({
2039
2098
  sdkProvider: config.sdk?.provider,
@@ -2041,7 +2100,7 @@ async function buildPlanFromSpecWithModel({
2041
2100
  apiKey: config.gateway.api_key,
2042
2101
  model: model || config.model.name,
2043
2102
  messages: [
2044
- { role: 'system', content: `${systemPrompt}\n${prompt}` },
2103
+ { role: 'system', content: planSystemPrompt },
2045
2104
  {
2046
2105
  role: 'user',
2047
2106
  content: `Spec path: ${specPath || '(inline)'}\n\nProject implementation constraints:\n${projectConstraints}\n\n${specText}`
@@ -2253,6 +2312,17 @@ function buildRuntimeStateSnapshot({ currentSession, config, model, executionMod
2253
2312
  value: getReplyLanguage(config),
2254
2313
  enumerable: false,
2255
2314
  writable: false
2315
+ },
2316
+ toJSON: {
2317
+ value: () => ({
2318
+ ...snapshot,
2319
+ currentContextTokens,
2320
+ contextUsagePct,
2321
+ pendingReflectSkill: currentSession?.planState?.status === 'pending_reflect_skill',
2322
+ replyLanguage: getReplyLanguage(config)
2323
+ }),
2324
+ enumerable: false,
2325
+ writable: false
2256
2326
  }
2257
2327
  });
2258
2328
  return snapshot;
@@ -2520,28 +2590,61 @@ async function askModel({
2520
2590
  signal,
2521
2591
  allowedTools,
2522
2592
  maxSteps: maxStepsOverride,
2523
- skipAnalysisNudge = false
2593
+ skipAnalysisNudge = false,
2594
+ compactedForModel: compactedInput = null,
2595
+ onCompactedUpdate = null
2524
2596
  }) {
2597
+ let compacted = compactedInput;
2525
2598
  const modelInputText = typeof modelText === 'string' && modelText ? modelText : text;
2526
2599
  const maxContextTokens = effectiveMaxContextTokens(config);
2527
- const triggerPct = Number(config.context?.preflight_trigger_pct || 92);
2600
+ const triggerPct = Number(config.context?.preflight_trigger_pct || 60);
2528
2601
  const hardPct = Number(config.context?.hard_limit_pct || 98);
2529
- const preflightTokens = estimatePromptTokensForRequest(session.messages, modelInputText);
2602
+ const messagesForEstimate = compacted ?? session.messages;
2603
+ const preflightTokens = estimatePromptTokensForRequest(messagesForEstimate, modelInputText);
2530
2604
  const preflightPct = (preflightTokens / maxContextTokens) * 100;
2531
2605
 
2532
2606
  if (persistSession && preflightPct >= triggerPct) {
2533
- const auto = compactMessagesLocally(session.messages, {
2534
- mode: preflightPct >= hardPct ? 'aggressive' : 'conservative'
2535
- });
2536
- if (auto.changed) {
2537
- session.messages = auto.compacted.map((m) => ({ ...m, at: new Date().toISOString() }));
2538
- await saveSession(session);
2539
- if (onAgentEvent) {
2540
- onAgentEvent({
2541
- type: 'compact:auto',
2542
- mode: preflightPct >= hardPct ? 'aggressive' : 'conservative',
2543
- threshold: Math.round(preflightPct)
2544
- });
2607
+ const compactSource = compacted ?? session.messages;
2608
+ // Phase 0: try micro-compact first (in-place tool result clearing)
2609
+ const microEnabled = config.context?.microcompact_enabled !== false;
2610
+ const microKeep = Number(config.context?.microcompact_keep_recent || 5);
2611
+ let needsMacro = true;
2612
+ if (microEnabled) {
2613
+ const micro = microCompactMessages(compactSource, { keepRecent: microKeep, enabled: true });
2614
+ if (micro.changed) {
2615
+ compacted = micro.messages.map((m) => ({ ...m, at: new Date().toISOString() }));
2616
+ if (onCompactedUpdate) onCompactedUpdate(compacted);
2617
+ const afterMicroTokens = estimateMessagesTokens(compacted);
2618
+ const afterMicroPct = (afterMicroTokens / maxContextTokens) * 100;
2619
+ if (onAgentEvent) {
2620
+ onAgentEvent({
2621
+ type: 'compact:auto',
2622
+ mode: 'micro',
2623
+ threshold: Math.round(preflightPct),
2624
+ tokensSaved: micro.tokensSaved
2625
+ });
2626
+ }
2627
+ if (afterMicroPct < triggerPct) {
2628
+ needsMacro = false;
2629
+ }
2630
+ }
2631
+ }
2632
+ if (needsMacro) {
2633
+ const macroSource = compacted ?? compactSource;
2634
+ const auto = compactMessagesLocally(macroSource, {
2635
+ mode: preflightPct >= hardPct ? 'aggressive' : 'conservative',
2636
+ force: true
2637
+ });
2638
+ if (auto.changed) {
2639
+ compacted = auto.compacted.map((m) => ({ ...m, at: new Date().toISOString() }));
2640
+ if (onCompactedUpdate) onCompactedUpdate(compacted, { boundaryIndex: auto.boundaryIndex, mode: preflightPct >= hardPct ? 'aggressive' : 'conservative' });
2641
+ if (onAgentEvent) {
2642
+ onAgentEvent({
2643
+ type: 'compact:auto',
2644
+ mode: preflightPct >= hardPct ? 'aggressive' : 'conservative',
2645
+ threshold: Math.round(preflightPct)
2646
+ });
2647
+ }
2545
2648
  }
2546
2649
  }
2547
2650
  }
@@ -2608,9 +2711,15 @@ async function askModel({
2608
2711
  const projectContextSnippet = await buildProjectContextSnippet(process.cwd(), modelInputText).catch(() => '');
2609
2712
  const projectContextGuidance =
2610
2713
  'Use this project context as lightweight guidance and verify important details with fresh reads when needed.';
2611
- const effectiveSystemPrompt = projectContextSnippet
2612
- ? `${systemPrompt}\n\n${projectContextSnippet}\n\n${projectContextGuidance}`
2613
- : systemPrompt;
2714
+ const effectiveSystemPrompt = await composeSystemPrompt({
2715
+ shellRulesPrompt: systemPrompt,
2716
+ config,
2717
+ workspaceRoot: process.cwd(),
2718
+ includeSoul: false,
2719
+ includeMemory: false,
2720
+ projectContextSnippet,
2721
+ projectContextGuidance
2722
+ });
2614
2723
 
2615
2724
  const { definitions, handlers, formatters, deferredDefinitions, dispose: disposeTools } = getBuiltinTools({
2616
2725
  workspaceRoot: process.cwd(),
@@ -2745,6 +2854,7 @@ async function askModel({
2745
2854
  if (onAgentEvent) onAgentEvent(event);
2746
2855
  };
2747
2856
 
2857
+ const sessionLenBeforeLoop = session.messages.length;
2748
2858
  const loopUserPrompt = persistSession ? '' : modelInputText;
2749
2859
  const expectedModelText = typeof modelText === 'string' && modelText && modelText !== text ? modelText : '';
2750
2860
  const loopResult = await runAgentLoop({
@@ -2754,7 +2864,7 @@ async function askModel({
2754
2864
  maxSteps: maxStepsOverride ?? Number(config.execution?.max_steps || 16),
2755
2865
  toolDefinitions: filteredDefinitions,
2756
2866
  toolHandlers: filteredHandlers,
2757
- initialMessages: toOpenAIMessages(session.messages),
2867
+ initialMessages: toOpenAIMessages(compacted ?? session.messages),
2758
2868
  onEvent: wrappedAgentEvent,
2759
2869
  executionMode: executionMode || config.execution?.mode || 'normal',
2760
2870
  alwaysAllowTools:
@@ -2804,9 +2914,15 @@ async function askModel({
2804
2914
  });
2805
2915
 
2806
2916
  if (persistSession) {
2807
- session.messages = loopResult.messages
2808
- .filter((m) => m.role !== 'system')
2809
- .map((m) => ({ ...m, at: new Date().toISOString() }));
2917
+ // Sync new messages to compacted view
2918
+ if (compacted) {
2919
+ const newMsgs = session.messages.slice(sessionLenBeforeLoop);
2920
+ for (const msg of newMsgs) {
2921
+ compacted.push({ ...msg });
2922
+ }
2923
+ if (onCompactedUpdate) onCompactedUpdate(compacted);
2924
+ }
2925
+ // Handle model_content rewrite on the new user message
2810
2926
  if (expectedModelText) {
2811
2927
  for (let i = session.messages.length - 1; i >= 0; i -= 1) {
2812
2928
  const message = session.messages[i];
@@ -2855,7 +2971,7 @@ async function runSubAgentTask({
2855
2971
  }) {
2856
2972
  const subSession = { id: `sub-${Date.now()}`, messages: [] };
2857
2973
  const rolePrompt = getSubAgentRolePrompt(role);
2858
- const contextPacket = buildSubAgentContextPacket(parentSession);
2974
+ const contextPacket = buildSubAgentContextPacket(parentSession, task || goal);
2859
2975
  const evidencePacket = buildSubAgentEvidencePacket(parentSession);
2860
2976
  const handoffPacket = buildStepArtifactPacket(priorSteps, role);
2861
2977
  const handoffFocusPaths = collectStepArtifacts(priorSteps, role)?.focusPaths || [];
@@ -2910,12 +3026,19 @@ async function runSubAgentTask({
2910
3026
  };
2911
3027
  const roleAllowedTools = ROLE_TOOL_POLICY[role];
2912
3028
  if (onSessionActive) onSessionActive(subSession);
3029
+ const subSystemPrompt = await composeSystemPrompt({
3030
+ shellRulesPrompt: systemPrompt,
3031
+ config,
3032
+ skillsPrompt: [rolePrompt, extraRolePrompt].filter(Boolean).join('\n\n'),
3033
+ includeSoul: false,
3034
+ includeMemory: false
3035
+ });
2913
3036
  const subResult = await askModel({
2914
3037
  text: scopedTask,
2915
3038
  session: subSession,
2916
3039
  config,
2917
3040
  model,
2918
- systemPrompt: `${systemPrompt}\n${rolePrompt}${extraRolePrompt ? `\n${extraRolePrompt}` : ''}`,
3041
+ systemPrompt: subSystemPrompt,
2919
3042
  onAgentEvent: wrappedOnAgentEvent,
2920
3043
  persistSession: false,
2921
3044
  executionMode: 'auto',
@@ -3225,13 +3348,20 @@ async function buildAutoPlanAndRun({
3225
3348
  };
3226
3349
  let planningError = '';
3227
3350
  try {
3351
+ const plannerSystemPrompt = await composeSystemPrompt({
3352
+ shellRulesPrompt: systemPrompt,
3353
+ config,
3354
+ skillsPrompt: plannerPrompt,
3355
+ includeSoul: false,
3356
+ includeMemory: false
3357
+ });
3228
3358
  const planning = await createChatCompletion({
3229
3359
  sdkProvider: config.sdk?.provider,
3230
3360
  baseUrl: config.gateway.base_url,
3231
3361
  apiKey: config.gateway.api_key,
3232
3362
  model: model || config.model.name,
3233
3363
  messages: [
3234
- { role: 'system', content: `${systemPrompt}\n${plannerPrompt}` },
3364
+ { role: 'system', content: plannerSystemPrompt },
3235
3365
  {
3236
3366
  role: 'user',
3237
3367
  content: [
@@ -3864,13 +3994,20 @@ async function revisePendingPlanWithModel({
3864
3994
  'Keep roles minimal and only include steps that materially help the goal.',
3865
3995
  'Always keep a summarizer as the final step.'
3866
3996
  ].join('\n');
3997
+ const revisionSystemPrompt = await composeSystemPrompt({
3998
+ shellRulesPrompt: systemPrompt,
3999
+ config,
4000
+ skillsPrompt: prompt,
4001
+ includeSoul: false,
4002
+ includeMemory: false
4003
+ });
3867
4004
  const result = await createChatCompletion({
3868
4005
  sdkProvider: config.sdk?.provider,
3869
4006
  baseUrl: config.gateway.base_url,
3870
4007
  apiKey: config.gateway.api_key,
3871
4008
  model: model || config.model.name,
3872
4009
  messages: [
3873
- { role: 'system', content: `${systemPrompt}\n${prompt}` },
4010
+ { role: 'system', content: revisionSystemPrompt },
3874
4011
  {
3875
4012
  role: 'user',
3876
4013
  content: [
@@ -4048,6 +4185,13 @@ export async function createChatRuntime({
4048
4185
  threshold: 60,
4049
4186
  mode: 'conservative'
4050
4187
  };
4188
+ let compactedForModel = currentSession.compact?.view || null;
4189
+ const setCompactedView = (view, meta = {}) => {
4190
+ compactedForModel = view;
4191
+ currentSession.compact = view
4192
+ ? { view, timestamp: new Date().toISOString(), ...meta }
4193
+ : null;
4194
+ };
4051
4195
  let historyIdCache = [currentSession.id];
4052
4196
  let historySessionCache = [
4053
4197
  {
@@ -4106,6 +4250,8 @@ export async function createChatRuntime({
4106
4250
  'context.tool_result_max_chars',
4107
4251
  'context.read_file_default_lines',
4108
4252
  'context.read_file_max_chars',
4253
+ 'context.microcompact_enabled',
4254
+ 'context.microcompact_keep_recent',
4109
4255
  'sessions.max_sessions',
4110
4256
  'sessions.retention_days',
4111
4257
  'shell.timeout_ms',
@@ -4177,6 +4323,7 @@ export async function createChatRuntime({
4177
4323
  const compactOptions = [
4178
4324
  '--preview',
4179
4325
  '--restore',
4326
+ '--micro',
4180
4327
  '--aggressive',
4181
4328
  '--conservative',
4182
4329
  '--default',
@@ -4653,14 +4800,14 @@ export async function createChatRuntime({
4653
4800
  };
4654
4801
 
4655
4802
  const buildActiveSystemPrompt = async () => {
4656
- const soulPrompt = await buildSystemPromptWithSoul(baseSystemPrompt, config);
4657
- const memorySnapshot = await buildMemorySnapshot({
4658
- config,
4659
- workspaceRoot: process.cwd()
4660
- }).catch(() => '');
4661
4803
  const memoryGuide =
4662
4804
  'Persistent memory stores durable preferences and stable workflow knowledge. Verify changeable details from files, and only write memory for future-useful, non-sensitive facts.';
4663
- return [soulPrompt, memorySnapshot, memoryGuide].filter(Boolean).join('\n\n');
4805
+ return composeSystemPrompt({
4806
+ shellRulesPrompt: baseSystemPrompt,
4807
+ config,
4808
+ workspaceRoot: process.cwd(),
4809
+ extraPrompts: [memoryGuide]
4810
+ });
4664
4811
  };
4665
4812
 
4666
4813
  const isImmediateLocalInput = (line) => {
@@ -5434,7 +5581,9 @@ export async function createChatRuntime({
5434
5581
  onAgentEvent,
5435
5582
  requestToolApproval: activeRequestToolApproval,
5436
5583
  executionMode,
5437
- signal
5584
+ signal,
5585
+ compactedForModel,
5586
+ onCompactedUpdate: setCompactedView
5438
5587
  });
5439
5588
  return { type: 'assistant', text: result.text, aborted: !!result.aborted };
5440
5589
  }
@@ -5498,18 +5647,35 @@ export async function createChatRuntime({
5498
5647
  if (cargs.mode) compactState.mode = cargs.mode;
5499
5648
 
5500
5649
  if (cargs.restore) {
5501
- if (!compactState.backupMessages) {
5502
- return { type: 'system', text: 'No backup available to restore' };
5503
- }
5504
- currentSession.messages = structuredClone(compactState.backupMessages);
5505
- await saveSession(currentSession);
5506
- const text = 'Context restored from backup';
5650
+ setCompactedView(null);
5651
+ const text = 'Context restored to full view';
5507
5652
  await persistLocalExchange(line, text, { includeUser: false });
5508
5653
  return { type: 'system', text };
5509
5654
  }
5510
5655
 
5511
- const beforeTokens = estimateMessagesTokens(currentSession.messages);
5512
- const result = compactMessagesLocally(currentSession.messages, { mode: compactState.mode });
5656
+ const compactSource = compactedForModel ?? currentSession.messages;
5657
+ const beforeTokens = estimateMessagesTokens(compactSource);
5658
+
5659
+ // --micro: only do micro-compact (in-place tool result clearing)
5660
+ if (cargs.micro) {
5661
+ const microKeep = Number(config.context?.microcompact_keep_recent || 5);
5662
+ const micro = microCompactMessages(compactSource, { keepRecent: microKeep, enabled: true });
5663
+ if (!micro.changed) {
5664
+ return { type: 'system', text: 'Micro-compact: nothing to clear' };
5665
+ }
5666
+ const afterTokens = estimateMessagesTokens(micro.messages);
5667
+ const report = `Micro-compact ${cargs.preview ? 'preview' : 'applied'}: ${beforeTokens} -> ${afterTokens} tokens (saved ${micro.tokensSaved})`;
5668
+
5669
+ if (cargs.preview) {
5670
+ return { type: 'system', text: report };
5671
+ }
5672
+
5673
+ setCompactedView(micro.messages.map((m) => ({ ...m, at: new Date().toISOString() })));
5674
+ await persistLocalExchange(line, report, { includeUser: false });
5675
+ return { type: 'system', text: report };
5676
+ }
5677
+
5678
+ const result = compactMessagesLocally(compactSource, { mode: compactState.mode, force: true });
5513
5679
  if (!result.changed) {
5514
5680
  return { type: 'system', text: 'Nothing to compact yet' };
5515
5681
  }
@@ -5520,9 +5686,10 @@ export async function createChatRuntime({
5520
5686
  return { type: 'system', text: `${report}\n\n${result.summary}` };
5521
5687
  }
5522
5688
 
5523
- compactState.backupMessages = structuredClone(currentSession.messages);
5524
- currentSession.messages = result.compacted.map((m) => ({ ...m, at: new Date().toISOString() }));
5525
- await saveSession(currentSession);
5689
+ setCompactedView(
5690
+ result.compacted.map((m) => ({ ...m, at: new Date().toISOString() })),
5691
+ { boundaryIndex: result.boundaryIndex, mode: compactState.mode }
5692
+ );
5526
5693
  await captureCompactSummary({
5527
5694
  summary: result.summary,
5528
5695
  mode: compactState.mode,
@@ -5596,7 +5763,9 @@ export async function createChatRuntime({
5596
5763
  onAgentEvent,
5597
5764
  requestToolApproval: activeRequestToolApproval,
5598
5765
  executionMode,
5599
- signal
5766
+ signal,
5767
+ compactedForModel,
5768
+ onCompactedUpdate: setCompactedView
5600
5769
  });
5601
5770
  } catch (error) {
5602
5771
  if (custom.metadata.type === 'skill' && onAgentEvent) {
@@ -5699,32 +5868,71 @@ export async function createChatRuntime({
5699
5868
  }
5700
5869
 
5701
5870
  if (compactState.autoEnabled) {
5702
- const currentTokens = estimateMessagesTokens(currentSession.messages);
5871
+ const compactSource = compactedForModel ?? currentSession.messages;
5872
+ const currentTokens = estimateMessagesTokens(compactSource);
5703
5873
  const maxTokens = effectiveMaxContextTokens(config);
5704
5874
  const usagePct = (currentTokens / maxTokens) * 100;
5705
5875
  if (usagePct >= compactState.threshold) {
5706
- const autoResult = compactMessagesLocally(currentSession.messages, {
5707
- mode: compactState.mode
5708
- });
5709
- if (autoResult.changed) {
5710
- compactState.backupMessages = structuredClone(currentSession.messages);
5711
- currentSession.messages = autoResult.compacted.map((m) => ({
5712
- ...m,
5713
- at: new Date().toISOString()
5714
- }));
5715
- await saveSession(currentSession);
5716
- await captureCompactSummary({
5717
- summary: autoResult.summary,
5876
+ // Phase 0: try micro-compact first
5877
+ const microEnabled = config.context?.microcompact_enabled !== false;
5878
+ const microKeep = Number(config.context?.microcompact_keep_recent || 5);
5879
+ let needsMacro = true;
5880
+ if (microEnabled) {
5881
+ const micro = microCompactMessages(compactSource, { keepRecent: microKeep, enabled: true });
5882
+ if (micro.changed) {
5883
+ setCompactedView(micro.messages.map((m) => ({
5884
+ ...m,
5885
+ at: new Date().toISOString()
5886
+ })));
5887
+ const afterMicroTokens = estimateMessagesTokens(compactedForModel);
5888
+ const afterMicroPct = (afterMicroTokens / maxTokens) * 100;
5889
+ if (onAgentEvent) {
5890
+ onAgentEvent({
5891
+ type: 'compact:auto',
5892
+ mode: 'micro',
5893
+ threshold: compactState.threshold,
5894
+ tokensSaved: micro.tokensSaved
5895
+ });
5896
+ }
5897
+ if (afterMicroPct < compactState.threshold) {
5898
+ needsMacro = false;
5899
+ await captureCompactSummary({
5900
+ summary: `Micro-compact saved ${micro.tokensSaved} tokens`,
5901
+ mode: 'micro',
5902
+ beforeTokens: currentTokens,
5903
+ afterTokens: afterMicroTokens
5904
+ });
5905
+ }
5906
+ }
5907
+ }
5908
+ // Phase 1: macro compact if still over threshold
5909
+ if (needsMacro) {
5910
+ const macroSource = compactedForModel ?? compactSource;
5911
+ const autoResult = compactMessagesLocally(macroSource, {
5718
5912
  mode: compactState.mode,
5719
- beforeTokens: currentTokens,
5720
- afterTokens: estimateMessagesTokens(currentSession.messages)
5913
+ force: true
5721
5914
  });
5722
- if (onAgentEvent) {
5723
- onAgentEvent({
5724
- type: 'compact:auto',
5915
+ if (autoResult.changed) {
5916
+ setCompactedView(
5917
+ autoResult.compacted.map((m) => ({
5918
+ ...m,
5919
+ at: new Date().toISOString()
5920
+ })),
5921
+ { boundaryIndex: autoResult.boundaryIndex, mode: compactState.mode }
5922
+ );
5923
+ await captureCompactSummary({
5924
+ summary: autoResult.summary,
5725
5925
  mode: compactState.mode,
5726
- threshold: compactState.threshold
5926
+ beforeTokens: currentTokens,
5927
+ afterTokens: estimateMessagesTokens(compactedForModel)
5727
5928
  });
5929
+ if (onAgentEvent) {
5930
+ onAgentEvent({
5931
+ type: 'compact:auto',
5932
+ mode: compactState.mode,
5933
+ threshold: compactState.threshold
5934
+ });
5935
+ }
5728
5936
  }
5729
5937
  }
5730
5938
  }
@@ -5766,10 +5974,27 @@ export async function createChatRuntime({
5766
5974
  names: selectedAutoSkills
5767
5975
  });
5768
5976
  }
5769
- const skillPrompt = buildAutoSkillSystemPrompt(activeReplySystemPrompt, commands, config, expandedText);
5977
+ const autoSkillPrompt = buildAutoSkillPromptBlock(commands, config, expandedText);
5978
+ const skillPrompt = autoSkillPrompt
5979
+ ? await composeSystemPrompt({
5980
+ shellRulesPrompt: activeReplySystemPrompt,
5981
+ config,
5982
+ workspaceRoot: process.cwd(),
5983
+ skillsPrompt: autoSkillPrompt,
5984
+ includeSoul: false,
5985
+ includeMemory: false
5986
+ })
5987
+ : activeReplySystemPrompt;
5770
5988
  const routedSystemPrompt =
5771
5989
  autoRoute.mode === 'direct_medium'
5772
- ? buildMediumTaskSystemPrompt(skillPrompt)
5990
+ ? await composeSystemPrompt({
5991
+ shellRulesPrompt: skillPrompt,
5992
+ config,
5993
+ workspaceRoot: process.cwd(),
5994
+ skillsPrompt: buildMediumTaskPromptBlock(),
5995
+ includeSoul: false,
5996
+ includeMemory: false
5997
+ })
5773
5998
  : skillPrompt;
5774
5999
  const result = await askModel({
5775
6000
  text: expandedText,
@@ -5780,7 +6005,9 @@ export async function createChatRuntime({
5780
6005
  onAgentEvent,
5781
6006
  requestToolApproval: activeRequestToolApproval,
5782
6007
  executionMode,
5783
- signal
6008
+ signal,
6009
+ compactedForModel,
6010
+ onCompactedUpdate: setCompactedView
5784
6011
  });
5785
6012
  await saveDirectMemoryPrompt(expandedText);
5786
6013
  await captureUserPromptForDream(expandedText);
@@ -5803,6 +6030,7 @@ export async function createChatRuntime({
5803
6030
  getInputHistory: () => loadInputHistory(),
5804
6031
  getCurrentSessionId: () => currentSession.id,
5805
6032
  getSessionMessages: () => currentSession.messages || [],
6033
+ getSessionCompact: () => currentSession.compact || null,
5806
6034
  reloadConfig: async () => {
5807
6035
  config = await loadConfig();
5808
6036
  return config;