@zuzuucodes/cli 1.5.0 → 1.6.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 (198) hide show
  1. package/bin/zuzuu.mjs +12 -3
  2. package/package.json +1 -1
  3. package/web-app/dist/auth.js +91 -0
  4. package/web-app/dist/server.js +16 -79
  5. package/web-app/dist/zuzuu-cli.js +124 -0
  6. package/web-app/dist/{zuzuu-api.js → zuzuu-routes.js} +46 -116
  7. package/web-app/web-dist/assets/CommandPalette-DhBdR7X3.js +45 -0
  8. package/web-app/web-dist/assets/DiffTab-CqxwSjI2.js +1 -0
  9. package/web-app/web-dist/assets/EditorPane-94QPFR9R.js +41 -0
  10. package/web-app/web-dist/assets/MonacoFile-D76epTrG.js +1 -0
  11. package/web-app/web-dist/assets/angular-html-BVBpGdXr.js +1 -0
  12. package/web-app/web-dist/assets/{angular-ts-CD_OonCa.js → angular-ts-BfdufMKP.js} +1 -1
  13. package/web-app/web-dist/assets/{apl-uOGC3x4e.js → apl-DWBSSoBH.js} +1 -1
  14. package/web-app/web-dist/assets/{astro-B6ybQmWG.js → astro-3LtMP0Sq.js} +1 -1
  15. package/web-app/web-dist/assets/{blade-B1QGRlVx.js → blade-llJRbbtR.js} +1 -1
  16. package/web-app/web-dist/assets/c-Wt1voDr2.js +1 -0
  17. package/web-app/web-dist/assets/{cobol-BgqgtYWn.js → cobol-x_HIyl2P.js} +1 -1
  18. package/web-app/web-dist/assets/{coffee-0wIRKYlr.js → coffee-CThvmt4R.js} +1 -1
  19. package/web-app/web-dist/assets/cpp-NtAeskI3.js +1 -0
  20. package/web-app/web-dist/assets/{crystal-CyTK3qFN.js → crystal-DNu_sX0G.js} +1 -1
  21. package/web-app/web-dist/assets/css-DJp_X0uY.js +1 -0
  22. package/web-app/web-dist/assets/{cssMode-Dx3ub8Pk.js → cssMode-ByQBaInt.js} +1 -1
  23. package/web-app/web-dist/assets/dist-DQqjtuhV.js +153 -0
  24. package/web-app/web-dist/assets/{edge-CvML9pwC.js → edge-ozw5tpLl.js} +1 -1
  25. package/web-app/web-dist/assets/{editor.api2-BmGoRSl4.js → editor.api2-C7skgoRB.js} +1 -1
  26. package/web-app/web-dist/assets/{elixir-CrjqTiSc.js → elixir-VhA6FeZt.js} +1 -1
  27. package/web-app/web-dist/assets/{elm-C4JtJ0Au.js → elm-dREJmIFz.js} +1 -1
  28. package/web-app/web-dist/assets/{erb-Cmeb-29V.js → erb-CIg6G69l.js} +1 -1
  29. package/web-app/web-dist/assets/{freemarker2-B5LAi19B.js → freemarker2-CBBwP9JV.js} +1 -1
  30. package/web-app/web-dist/assets/{git-rebase-CXqdToiP.js → git-rebase-B44mJPta.js} +1 -1
  31. package/web-app/web-dist/assets/{glimmer-js-Kq-kdTyV.js → glimmer-js-vH_gHG0-.js} +1 -1
  32. package/web-app/web-dist/assets/{glimmer-ts-D0RKLJNf.js → glimmer-ts--abOzSAQ.js} +1 -1
  33. package/web-app/web-dist/assets/glsl-Dv5r7kPw.js +1 -0
  34. package/web-app/web-dist/assets/graphql-CB4jsw2E.js +1 -0
  35. package/web-app/web-dist/assets/{hack-trjVF3Po.js → hack-DvEYX148.js} +1 -1
  36. package/web-app/web-dist/assets/haml-zE6W3STP.js +1 -0
  37. package/web-app/web-dist/assets/{handlebars-B8_x7Zx7.js → handlebars-CzBR2SDs.js} +1 -1
  38. package/web-app/web-dist/assets/{handlebars-g7ZhGhI_.js → handlebars-tXdfxEd6.js} +1 -1
  39. package/web-app/web-dist/assets/html-C8UlPnhE.js +1 -0
  40. package/web-app/web-dist/assets/{html-CfvRMgoC.js → html-DgPn1QYH.js} +1 -1
  41. package/web-app/web-dist/assets/{html-derivative-BYX_F_XH.js → html-derivative-CY6NRz-J.js} +1 -1
  42. package/web-app/web-dist/assets/{htmlMode-DM6oHc7c.js → htmlMode-BtdIDgA2.js} +1 -1
  43. package/web-app/web-dist/assets/{http-BIVDpHT-.js → http-Cyd7bS_S.js} +1 -1
  44. package/web-app/web-dist/assets/{hurl-CFsshMju.js → hurl-CWPsiEpf.js} +1 -1
  45. package/web-app/web-dist/assets/index-B27_WOhS.css +2 -0
  46. package/web-app/web-dist/assets/index-De6DWTZM.js +7 -0
  47. package/web-app/web-dist/assets/java-CGc3VwQr.js +1 -0
  48. package/web-app/web-dist/assets/{javascript-Bxx2wV4w.js → javascript-5m05n-Be.js} +1 -1
  49. package/web-app/web-dist/assets/javascript-CUt1pgmJ.js +1 -0
  50. package/web-app/web-dist/assets/{jinja-_ZS5zWwe.js → jinja-CD-Z-FLd.js} +1 -1
  51. package/web-app/web-dist/assets/{jison-D8mMEpcs.js → jison-imPNup1l.js} +1 -1
  52. package/web-app/web-dist/assets/json-Bg9ijW3F.js +1 -0
  53. package/web-app/web-dist/assets/{jsonMode-DflaUwqW.js → jsonMode-BG32YnTY.js} +1 -1
  54. package/web-app/web-dist/assets/jsx-CY6oMTks.js +1 -0
  55. package/web-app/web-dist/assets/{julia-D4h2DZrs.js → julia-Dc3O-irA.js} +1 -1
  56. package/web-app/web-dist/assets/{just-bMqQi3xg.js → just-BhOq_Kbv.js} +1 -1
  57. package/web-app/web-dist/assets/{latex-DThYi3CX.js → latex-Cu4Y1d5w.js} +1 -1
  58. package/web-app/web-dist/assets/lib-KIOQTlcs.js +1 -0
  59. package/web-app/web-dist/assets/{liquid-CUjzzP4r.js → liquid-3ZnQzTbs.js} +1 -1
  60. package/web-app/web-dist/assets/{liquid-CesB-zzl.js → liquid-CvXMrjlQ.js} +1 -1
  61. package/web-app/web-dist/assets/{lspLanguageFeatures-gTnJsses.js → lspLanguageFeatures-6KXALSrl.js} +1 -1
  62. package/web-app/web-dist/assets/lua-BjLEUjKY.js +1 -0
  63. package/web-app/web-dist/assets/{marko-yoGoLK2m.js → marko-DvhNOisQ.js} +1 -1
  64. package/web-app/web-dist/assets/{mdc-BvtXU6eH.js → mdc-Bm9TpL1X.js} +1 -1
  65. package/web-app/web-dist/assets/{mdx-DrXGQbNB.js → mdx-DffTEkNE.js} +1 -1
  66. package/web-app/web-dist/assets/{monaco-setup-wbBeb0oN.js → monaco-setup-DM3A5_VI.js} +3 -3
  67. package/web-app/web-dist/assets/{nginx-DoUz032F.js → nginx-Bhc82uuv.js} +1 -1
  68. package/web-app/web-dist/assets/{nim-B0Pl8B4R.js → nim-DXTVBFnF.js} +1 -1
  69. package/web-app/web-dist/assets/{perl-D2tfAALb.js → perl-C7veXV9z.js} +1 -1
  70. package/web-app/web-dist/assets/{php-BImCcX5X.js → php-BRiuMnnr.js} +1 -1
  71. package/web-app/web-dist/assets/{pug-BcnpC8P_.js → pug-C5hz5LQ7.js} +1 -1
  72. package/web-app/web-dist/assets/{python-ypRCBnvu.js → python-DyLAD3Wt.js} +1 -1
  73. package/web-app/web-dist/assets/{qml-DFDAunHY.js → qml-BdUV3aTS.js} +1 -1
  74. package/web-app/web-dist/assets/r-8R7vtdQc.js +1 -0
  75. package/web-app/web-dist/assets/{razor-aqrhpwqZ.js → razor-C49xQTPQ.js} +1 -1
  76. package/web-app/web-dist/assets/{razor-1_376SZM.js → razor-DRL52XO2.js} +1 -1
  77. package/web-app/web-dist/assets/react-vendor-CCIEwYL0.js +9 -0
  78. package/web-app/web-dist/assets/regexp-Omp9DhTb.js +1 -0
  79. package/web-app/web-dist/assets/{rst-2vG6f11Y.js → rst-BHX71KW9.js} +1 -1
  80. package/web-app/web-dist/assets/{ruby-Dj6bCFXR.js → ruby-B--HzjGU.js} +1 -1
  81. package/web-app/web-dist/assets/{sas-BhVZ4qL2.js → sas-DrLaYOK_.js} +1 -1
  82. package/web-app/web-dist/assets/scss-DdSxiZKl.js +1 -0
  83. package/web-app/web-dist/assets/shellscript-DwcUjJBL.js +1 -0
  84. package/web-app/web-dist/assets/{shellsession-CyO2fnhB.js → shellsession-CPZkydE6.js} +1 -1
  85. package/web-app/web-dist/assets/{soy-DIkw6E88.js → soy-Br5FhD7c.js} +1 -1
  86. package/web-app/web-dist/assets/sql-DNssxck8.js +1 -0
  87. package/web-app/web-dist/assets/{stata-DvkM932O.js → stata-DXn1tqOr.js} +1 -1
  88. package/web-app/web-dist/assets/{surrealql-B4-Q8tqV.js → surrealql-IeLNQw0f.js} +1 -1
  89. package/web-app/web-dist/assets/{svelte-p6yBy-Ki.js → svelte-DOdLCIlh.js} +1 -1
  90. package/web-app/web-dist/assets/{templ-C7EkuiZr.js → templ-CIwIngms.js} +1 -1
  91. package/web-app/web-dist/assets/{tex-DkmD8uFC.js → tex-D8QMumu5.js} +1 -1
  92. package/web-app/web-dist/assets/{ts-tags-U-hncHg4.js → ts-tags-BMVY4q-l.js} +1 -1
  93. package/web-app/web-dist/assets/{tsMode-DRwkDcoK.js → tsMode-BndVBac5.js} +1 -1
  94. package/web-app/web-dist/assets/tsx-5Eka4NBX.js +1 -0
  95. package/web-app/web-dist/assets/{twig-CU0OP-IA.js → twig-C8o_5mgw.js} +1 -1
  96. package/web-app/web-dist/assets/{typescript-DnLjiKtn.js → typescript-B1w9vqKF.js} +1 -1
  97. package/web-app/web-dist/assets/typescript-DOu2WMV5.js +1 -0
  98. package/web-app/web-dist/assets/{vue-Db7nY3ba.js → vue-BU18DNDL.js} +1 -1
  99. package/web-app/web-dist/assets/{vue-html-BvAbiAw1.js → vue-html-BeluIYX0.js} +1 -1
  100. package/web-app/web-dist/assets/{vue-vine-BEaIQIlA.js → vue-vine-DGUAbOCX.js} +1 -1
  101. package/web-app/web-dist/assets/{xml-an4Nuuqq.js → xml-D8uAlVv5.js} +1 -1
  102. package/web-app/web-dist/assets/xml-DIqSwXR3.js +1 -0
  103. package/web-app/web-dist/assets/{xsl-D3NQgH22.js → xsl-Ct_-YIAy.js} +1 -1
  104. package/web-app/web-dist/assets/xterm-B1ffpRuj.js +36 -0
  105. package/web-app/web-dist/assets/xterm-addons-psDEiUMC.js +136 -0
  106. package/web-app/web-dist/assets/{yaml-Diiu6O9P.js → yaml-Bb7jXyQv.js} +1 -1
  107. package/web-app/web-dist/assets/yaml-DTtCYNlS.js +1 -0
  108. package/web-app/web-dist/index.html +6 -3
  109. package/zuzuu/actions/trail.mjs +1 -1
  110. package/zuzuu/commands/act.mjs +1 -1
  111. package/zuzuu/commands/capture.mjs +2 -2
  112. package/zuzuu/commands/code.mjs +2 -2
  113. package/zuzuu/commands/digest.mjs +2 -2
  114. package/zuzuu/commands/distill.mjs +15 -16
  115. package/zuzuu/commands/doctor.mjs +39 -4
  116. package/zuzuu/commands/enable.mjs +1 -1
  117. package/zuzuu/commands/eval.mjs +3 -36
  118. package/zuzuu/commands/faculty.mjs +102 -19
  119. package/zuzuu/commands/generation.mjs +3 -4
  120. package/zuzuu/commands/hook.mjs +7 -7
  121. package/zuzuu/commands/inbox.mjs +1 -6
  122. package/zuzuu/commands/init.mjs +5 -4
  123. package/zuzuu/commands/knowledge.mjs +1 -1
  124. package/zuzuu/commands/migrations/home.mjs +96 -0
  125. package/zuzuu/commands/migrations/index.mjs +48 -0
  126. package/zuzuu/commands/{migrate.mjs → migrations/items.mjs} +34 -246
  127. package/zuzuu/commands/migrations/proposals.mjs +100 -0
  128. package/zuzuu/commands/proposals.mjs +131 -0
  129. package/zuzuu/commands/review.mjs +13 -227
  130. package/zuzuu/commands/session.mjs +8 -2
  131. package/zuzuu/commands/sessions.mjs +159 -0
  132. package/zuzuu/commands/status.mjs +3 -3
  133. package/zuzuu/commands/trace.mjs +1 -1
  134. package/zuzuu/{capture-core.mjs → core/capture-core.mjs} +3 -3
  135. package/zuzuu/{store.mjs → core/store.mjs} +1 -1
  136. package/zuzuu/digest/compose.mjs +96 -0
  137. package/zuzuu/eval/score.mjs +14 -1
  138. package/zuzuu/faculties/actions/index.mjs +283 -0
  139. package/zuzuu/faculties/guardrails/index.mjs +320 -0
  140. package/zuzuu/faculties/instructions/index.mjs +288 -0
  141. package/zuzuu/faculties/knowledge/index.mjs +185 -0
  142. package/zuzuu/{memory/adapter.mjs → faculties/memory/index.mjs} +37 -9
  143. package/zuzuu/faculty/generation/read.mjs +206 -0
  144. package/zuzuu/faculty/generation/write.mjs +207 -0
  145. package/zuzuu/faculty/items.mjs +11 -5
  146. package/zuzuu/faculty/module.mjs +74 -0
  147. package/zuzuu/faculty/pending.mjs +63 -0
  148. package/zuzuu/faculty/registry.mjs +204 -18
  149. package/zuzuu/faculty/render.mjs +59 -0
  150. package/zuzuu/faculty/trail.mjs +1 -1
  151. package/zuzuu/{guardrails.mjs → guardrails/engine.mjs} +1 -1
  152. package/zuzuu/{scaffold.mjs → home/scaffold.mjs} +12 -2
  153. package/zuzuu/live/live-store.mjs +2 -2
  154. package/zuzuu/live/reconcile.mjs +2 -2
  155. package/zuzuu/sessions/git.mjs +47 -0
  156. package/zuzuu/{session-git.mjs → sessions/session-git.mjs} +5 -43
  157. package/web-app/web-dist/assets/DiffTab-BpGp1akx.js +0 -1
  158. package/web-app/web-dist/assets/MonacoFile-CqbVacUZ.js +0 -1
  159. package/web-app/web-dist/assets/angular-html-CmT26mqM.js +0 -1
  160. package/web-app/web-dist/assets/c-BvoqrSVH.js +0 -1
  161. package/web-app/web-dist/assets/cpp-BXsk94m0.js +0 -1
  162. package/web-app/web-dist/assets/css-Z8oOGxII.js +0 -1
  163. package/web-app/web-dist/assets/dist-C6R6xoyX.js +0 -153
  164. package/web-app/web-dist/assets/glsl-KwyfU2aa.js +0 -1
  165. package/web-app/web-dist/assets/graphql-DSeOUAa2.js +0 -1
  166. package/web-app/web-dist/assets/haml-azVoxQRV.js +0 -1
  167. package/web-app/web-dist/assets/html-D_7P5S4m.js +0 -1
  168. package/web-app/web-dist/assets/index-DHpC851f.js +0 -268
  169. package/web-app/web-dist/assets/index-O-t1gyMG.css +0 -2
  170. package/web-app/web-dist/assets/java-D4RbCvBe.js +0 -1
  171. package/web-app/web-dist/assets/javascript-Cb010CKM.js +0 -1
  172. package/web-app/web-dist/assets/json-DWgqV4D1.js +0 -1
  173. package/web-app/web-dist/assets/jsx-CZjSJa1f.js +0 -1
  174. package/web-app/web-dist/assets/lua-TGj_6NzO.js +0 -1
  175. package/web-app/web-dist/assets/r-fCpuAR7u.js +0 -1
  176. package/web-app/web-dist/assets/regexp-B4yxx-Ty.js +0 -1
  177. package/web-app/web-dist/assets/scss-QdjMO_xV.js +0 -1
  178. package/web-app/web-dist/assets/shellscript-BnlgeVVx.js +0 -1
  179. package/web-app/web-dist/assets/sql-DGnQv6iD.js +0 -1
  180. package/web-app/web-dist/assets/tsx-MJ0-9sYG.js +0 -1
  181. package/web-app/web-dist/assets/typescript-C17ZkDe8.js +0 -1
  182. package/web-app/web-dist/assets/xml-CA9lHFQV.js +0 -1
  183. package/web-app/web-dist/assets/yaml-CwRYMJka.js +0 -1
  184. package/zuzuu/actions/adapter.mjs +0 -122
  185. package/zuzuu/digest.mjs +0 -154
  186. package/zuzuu/faculty/generation.mjs +0 -398
  187. package/zuzuu/guardrails/adapter.mjs +0 -103
  188. package/zuzuu/instructions/adapter.mjs +0 -93
  189. package/zuzuu/knowledge/adapter.mjs +0 -99
  190. package/zuzuu/miners/actions.mjs +0 -112
  191. package/zuzuu/miners/guardrails.mjs +0 -176
  192. package/zuzuu/miners/instructions.mjs +0 -157
  193. package/zuzuu/miners/knowledge.mjs +0 -25
  194. package/zuzuu/miners/memory.mjs +0 -27
  195. package/zuzuu/miners/registry.mjs +0 -31
  196. /package/web-app/web-dist/assets/{chunk-QTnfLwEv.js → rolldown-runtime-QTnfLwEv.js} +0 -0
  197. /package/zuzuu/{session.mjs → core/session.mjs} +0 -0
  198. /package/zuzuu/{inject.mjs → home/inject.mjs} +0 -0
@@ -1 +1 @@
1
- import{h as e}from"./editor.api2-BmGoRSl4.js";var t={comments:{lineComment:`#`},brackets:[[`{`,`}`],[`[`,`]`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`}],surroundingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`}],folding:{offSide:!0},onEnterRules:[{beforeText:/:\s*$/,action:{indentAction:e.IndentAction.Indent}}]},n={tokenPostfix:`.yaml`,brackets:[{token:`delimiter.bracket`,open:`{`,close:`}`},{token:`delimiter.square`,open:`[`,close:`]`}],keywords:[`true`,`True`,`TRUE`,`false`,`False`,`FALSE`,`null`,`Null`,`Null`,`~`],numberInteger:/(?:0|[+-]?[0-9]+)/,numberFloat:/(?:0|[+-]?[0-9]+)(?:\.[0-9]+)?(?:e[-+][1-9][0-9]*)?/,numberOctal:/0o[0-7]+/,numberHex:/0x[0-9a-fA-F]+/,numberInfinity:/[+-]?\.(?:inf|Inf|INF)/,numberNaN:/\.(?:nan|Nan|NAN)/,numberDate:/\d{4}-\d\d-\d\d([Tt ]\d\d:\d\d:\d\d(\.\d+)?(( ?[+-]\d\d?(:\d\d)?)|Z)?)?/,escapes:/\\(?:[btnfr\\"']|[0-7][0-7]?|[0-3][0-7]{2})/,tokenizer:{root:[{include:`@whitespace`},{include:`@comment`},[/%[^ ]+.*$/,`meta.directive`],[/---/,`operators.directivesEnd`],[/\.{3}/,`operators.documentEnd`],[/[-?:](?= )/,`operators`],{include:`@anchor`},{include:`@tagHandle`},{include:`@flowCollections`},{include:`@blockStyle`},[/@numberInteger(?![ \t]*\S+)/,`number`],[/@numberFloat(?![ \t]*\S+)/,`number.float`],[/@numberOctal(?![ \t]*\S+)/,`number.octal`],[/@numberHex(?![ \t]*\S+)/,`number.hex`],[/@numberInfinity(?![ \t]*\S+)/,`number.infinity`],[/@numberNaN(?![ \t]*\S+)/,`number.nan`],[/@numberDate(?![ \t]*\S+)/,`number.date`],[/(".*?"|'.*?'|[^#'"]*?)([ \t]*)(:)( |$)/,[`type`,`white`,`operators`,`white`]],{include:`@flowScalars`},[/.+?(?=(\s+#|$))/,{cases:{"@keywords":`keyword`,"@default":`string`}}]],object:[{include:`@whitespace`},{include:`@comment`},[/\}/,`@brackets`,`@pop`],[/,/,`delimiter.comma`],[/:(?= )/,`operators`],[/(?:".*?"|'.*?'|[^,\{\[]+?)(?=: )/,`type`],{include:`@flowCollections`},{include:`@flowScalars`},{include:`@tagHandle`},{include:`@anchor`},{include:`@flowNumber`},[/[^\},]+/,{cases:{"@keywords":`keyword`,"@default":`string`}}]],array:[{include:`@whitespace`},{include:`@comment`},[/\]/,`@brackets`,`@pop`],[/,/,`delimiter.comma`],{include:`@flowCollections`},{include:`@flowScalars`},{include:`@tagHandle`},{include:`@anchor`},{include:`@flowNumber`},[/[^\],]+/,{cases:{"@keywords":`keyword`,"@default":`string`}}]],multiString:[[/^( +).+$/,`string`,`@multiStringContinued.$1`]],multiStringContinued:[[/^( *).+$/,{cases:{"$1==$S2":`string`,"@default":{token:`@rematch`,next:`@popall`}}}]],whitespace:[[/[ \t\r\n]+/,`white`]],comment:[[/#.*$/,`comment`]],flowCollections:[[/\[/,`@brackets`,`@array`],[/\{/,`@brackets`,`@object`]],flowScalars:[[/"([^"\\]|\\.)*$/,`string.invalid`],[/'([^'\\]|\\.)*$/,`string.invalid`],[/'[^']*'/,`string`],[/"/,`string`,`@doubleQuotedString`]],doubleQuotedString:[[/[^\\"]+/,`string`],[/@escapes/,`string.escape`],[/\\./,`string.escape.invalid`],[/"/,`string`,`@pop`]],blockStyle:[[/[>|][0-9]*[+-]?$/,`operators`,`@multiString`]],flowNumber:[[/@numberInteger(?=[ \t]*[,\]\}])/,`number`],[/@numberFloat(?=[ \t]*[,\]\}])/,`number.float`],[/@numberOctal(?=[ \t]*[,\]\}])/,`number.octal`],[/@numberHex(?=[ \t]*[,\]\}])/,`number.hex`],[/@numberInfinity(?=[ \t]*[,\]\}])/,`number.infinity`],[/@numberNaN(?=[ \t]*[,\]\}])/,`number.nan`],[/@numberDate(?=[ \t]*[,\]\}])/,`number.date`]],tagHandle:[[/\![^ ]*/,`tag`]],anchor:[[/[&*][^ ]+/,`namespace`]]}};export{t as conf,n as language};
1
+ import{h as e}from"./editor.api2-C7skgoRB.js";var t={comments:{lineComment:`#`},brackets:[[`{`,`}`],[`[`,`]`],[`(`,`)`]],autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`}],surroundingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`},{open:`'`,close:`'`}],folding:{offSide:!0},onEnterRules:[{beforeText:/:\s*$/,action:{indentAction:e.IndentAction.Indent}}]},n={tokenPostfix:`.yaml`,brackets:[{token:`delimiter.bracket`,open:`{`,close:`}`},{token:`delimiter.square`,open:`[`,close:`]`}],keywords:[`true`,`True`,`TRUE`,`false`,`False`,`FALSE`,`null`,`Null`,`Null`,`~`],numberInteger:/(?:0|[+-]?[0-9]+)/,numberFloat:/(?:0|[+-]?[0-9]+)(?:\.[0-9]+)?(?:e[-+][1-9][0-9]*)?/,numberOctal:/0o[0-7]+/,numberHex:/0x[0-9a-fA-F]+/,numberInfinity:/[+-]?\.(?:inf|Inf|INF)/,numberNaN:/\.(?:nan|Nan|NAN)/,numberDate:/\d{4}-\d\d-\d\d([Tt ]\d\d:\d\d:\d\d(\.\d+)?(( ?[+-]\d\d?(:\d\d)?)|Z)?)?/,escapes:/\\(?:[btnfr\\"']|[0-7][0-7]?|[0-3][0-7]{2})/,tokenizer:{root:[{include:`@whitespace`},{include:`@comment`},[/%[^ ]+.*$/,`meta.directive`],[/---/,`operators.directivesEnd`],[/\.{3}/,`operators.documentEnd`],[/[-?:](?= )/,`operators`],{include:`@anchor`},{include:`@tagHandle`},{include:`@flowCollections`},{include:`@blockStyle`},[/@numberInteger(?![ \t]*\S+)/,`number`],[/@numberFloat(?![ \t]*\S+)/,`number.float`],[/@numberOctal(?![ \t]*\S+)/,`number.octal`],[/@numberHex(?![ \t]*\S+)/,`number.hex`],[/@numberInfinity(?![ \t]*\S+)/,`number.infinity`],[/@numberNaN(?![ \t]*\S+)/,`number.nan`],[/@numberDate(?![ \t]*\S+)/,`number.date`],[/(".*?"|'.*?'|[^#'"]*?)([ \t]*)(:)( |$)/,[`type`,`white`,`operators`,`white`]],{include:`@flowScalars`},[/.+?(?=(\s+#|$))/,{cases:{"@keywords":`keyword`,"@default":`string`}}]],object:[{include:`@whitespace`},{include:`@comment`},[/\}/,`@brackets`,`@pop`],[/,/,`delimiter.comma`],[/:(?= )/,`operators`],[/(?:".*?"|'.*?'|[^,\{\[]+?)(?=: )/,`type`],{include:`@flowCollections`},{include:`@flowScalars`},{include:`@tagHandle`},{include:`@anchor`},{include:`@flowNumber`},[/[^\},]+/,{cases:{"@keywords":`keyword`,"@default":`string`}}]],array:[{include:`@whitespace`},{include:`@comment`},[/\]/,`@brackets`,`@pop`],[/,/,`delimiter.comma`],{include:`@flowCollections`},{include:`@flowScalars`},{include:`@tagHandle`},{include:`@anchor`},{include:`@flowNumber`},[/[^\],]+/,{cases:{"@keywords":`keyword`,"@default":`string`}}]],multiString:[[/^( +).+$/,`string`,`@multiStringContinued.$1`]],multiStringContinued:[[/^( *).+$/,{cases:{"$1==$S2":`string`,"@default":{token:`@rematch`,next:`@popall`}}}]],whitespace:[[/[ \t\r\n]+/,`white`]],comment:[[/#.*$/,`comment`]],flowCollections:[[/\[/,`@brackets`,`@array`],[/\{/,`@brackets`,`@object`]],flowScalars:[[/"([^"\\]|\\.)*$/,`string.invalid`],[/'([^'\\]|\\.)*$/,`string.invalid`],[/'[^']*'/,`string`],[/"/,`string`,`@doubleQuotedString`]],doubleQuotedString:[[/[^\\"]+/,`string`],[/@escapes/,`string.escape`],[/\\./,`string.escape.invalid`],[/"/,`string`,`@pop`]],blockStyle:[[/[>|][0-9]*[+-]?$/,`operators`,`@multiString`]],flowNumber:[[/@numberInteger(?=[ \t]*[,\]\}])/,`number`],[/@numberFloat(?=[ \t]*[,\]\}])/,`number.float`],[/@numberOctal(?=[ \t]*[,\]\}])/,`number.octal`],[/@numberHex(?=[ \t]*[,\]\}])/,`number.hex`],[/@numberInfinity(?=[ \t]*[,\]\}])/,`number.infinity`],[/@numberNaN(?=[ \t]*[,\]\}])/,`number.nan`],[/@numberDate(?=[ \t]*[,\]\}])/,`number.date`]],tagHandle:[[/\![^ ]*/,`tag`]],anchor:[[/[&*][^ ]+/,`namespace`]]}};export{t as conf,n as language};
@@ -0,0 +1 @@
1
+ import{n as e}from"./rolldown-runtime-QTnfLwEv.js";var t=e({default:()=>n}),n=[Object.freeze(JSON.parse(`{"displayName":"YAML","fileTypes":["yaml","yml","rviz","reek","clang-format","yaml-tmlanguage","syntax","sublime-syntax"],"firstLineMatch":"^%YAML( ?1.\\\\d+)?","name":"yaml","patterns":[{"include":"#comment"},{"include":"#property"},{"include":"#directive"},{"match":"^---","name":"entity.other.document.begin.yaml"},{"match":"^\\\\.{3}","name":"entity.other.document.end.yaml"},{"include":"#node"}],"repository":{"block-collection":{"patterns":[{"include":"#block-sequence"},{"include":"#block-mapping"}]},"block-mapping":{"patterns":[{"include":"#block-pair"}]},"block-node":{"patterns":[{"include":"#prototype"},{"include":"#block-scalar"},{"include":"#block-collection"},{"include":"#flow-scalar-plain-out"},{"include":"#flow-node"}]},"block-pair":{"patterns":[{"begin":"\\\\?","beginCaptures":{"1":{"name":"punctuation.definition.key-value.begin.yaml"}},"end":"(?=\\\\?)|^ *(:)|(:)","endCaptures":{"1":{"name":"punctuation.separator.key-value.mapping.yaml"},"2":{"name":"invalid.illegal.expected-newline.yaml"}},"name":"meta.block-mapping.yaml","patterns":[{"include":"#block-node"}]},{"begin":"(?=(?:[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?]\\\\S)([^:\\\\s]|:\\\\S|\\\\s+(?![#\\\\s]))*\\\\s*:(\\\\s|$))","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","patterns":[{"include":"#flow-scalar-plain-out-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?]\\\\S","beginCaptures":{"0":{"name":"entity.name.tag.yaml"}},"contentName":"entity.name.tag.yaml","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","name":"string.unquoted.plain.out.yaml"}]},{"match":":(?=\\\\s|$)","name":"punctuation.separator.key-value.mapping.yaml"}]},"block-scalar":{"begin":"(?:(\\\\|)|(>))([1-9])?([-+])?(.*\\\\n?)","beginCaptures":{"1":{"name":"keyword.control.flow.block-scalar.literal.yaml"},"2":{"name":"keyword.control.flow.block-scalar.folded.yaml"},"3":{"name":"constant.numeric.indentation-indicator.yaml"},"4":{"name":"storage.modifier.chomping-indicator.yaml"},"5":{"patterns":[{"include":"#comment"},{"match":".+","name":"invalid.illegal.expected-comment-or-newline.yaml"}]}},"end":"^(?=\\\\S)|(?!\\\\G)","patterns":[{"begin":"^( +)(?! )","end":"^(?!\\\\1|\\\\s*$)","name":"string.unquoted.block.yaml"}]},"block-sequence":{"match":"(-)(?!\\\\S)","name":"punctuation.definition.block.sequence.item.yaml"},"comment":{"begin":"(?:^([\\\\t ]*)|[\\\\t ]+)(?=#\\\\p{print}*$)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.yaml"}},"end":"(?!\\\\G)","patterns":[{"begin":"#","beginCaptures":{"0":{"name":"punctuation.definition.comment.yaml"}},"end":"\\\\n","name":"comment.line.number-sign.yaml"}]},"directive":{"begin":"^%","beginCaptures":{"0":{"name":"punctuation.definition.directive.begin.yaml"}},"end":"(?=$|[\\\\t ]+($|#))","name":"meta.directive.yaml","patterns":[{"captures":{"1":{"name":"keyword.other.directive.yaml.yaml"},"2":{"name":"constant.numeric.yaml-version.yaml"}},"match":"\\\\G(YAML)[\\\\t ]+(\\\\d+\\\\.\\\\d+)"},{"captures":{"1":{"name":"keyword.other.directive.tag.yaml"},"2":{"name":"storage.type.tag-handle.yaml"},"3":{"name":"support.type.tag-prefix.yaml"}},"match":"\\\\G(TAG)(?:[\\\\t ]+(!(?:[-0-9A-Za-z]*!)?)(?:[\\\\t ]+(!(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])*|(?![]!,\\\\[{}])(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])+))?)?"},{"captures":{"1":{"name":"support.other.directive.reserved.yaml"},"2":{"name":"string.unquoted.directive-name.yaml"},"3":{"name":"string.unquoted.directive-parameter.yaml"}},"match":"\\\\G(\\\\w+)(?:[\\\\t ]+(\\\\w+)(?:[\\\\t ]+(\\\\w+))?)?"},{"match":"\\\\S+","name":"invalid.illegal.unrecognized.yaml"}]},"flow-alias":{"captures":{"1":{"name":"keyword.control.flow.alias.yaml"},"2":{"name":"punctuation.definition.alias.yaml"},"3":{"name":"variable.other.alias.yaml"},"4":{"name":"invalid.illegal.character.anchor.yaml"}},"match":"((\\\\*))([^],/\\\\[{}\\\\s]+)([^],}\\\\s]\\\\S*)?"},"flow-collection":{"patterns":[{"include":"#flow-sequence"},{"include":"#flow-mapping"}]},"flow-mapping":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.mapping.begin.yaml"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.mapping.end.yaml"}},"name":"meta.flow-mapping.yaml","patterns":[{"include":"#prototype"},{"match":",","name":"punctuation.separator.mapping.yaml"},{"include":"#flow-pair"}]},"flow-node":{"patterns":[{"include":"#prototype"},{"include":"#flow-alias"},{"include":"#flow-collection"},{"include":"#flow-scalar"}]},"flow-pair":{"patterns":[{"begin":"\\\\?","beginCaptures":{"0":{"name":"punctuation.definition.key-value.begin.yaml"}},"end":"(?=[],}])","name":"meta.flow-pair.explicit.yaml","patterns":[{"include":"#prototype"},{"include":"#flow-pair"},{"include":"#flow-node"},{"begin":":(?=\\\\s|$|[],\\\\[{}])","beginCaptures":{"0":{"name":"punctuation.separator.key-value.mapping.yaml"}},"end":"(?=[],}])","patterns":[{"include":"#flow-value"}]}]},{"begin":"(?=(?:[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s])([^],:\\\\[{}\\\\s]|:[^],\\\\[{}\\\\s]|\\\\s+(?![#\\\\s]))*\\\\s*:(\\\\s|$))","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"meta.flow-pair.key.yaml","patterns":[{"include":"#flow-scalar-plain-in-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s]","beginCaptures":{"0":{"name":"entity.name.tag.yaml"}},"contentName":"entity.name.tag.yaml","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"string.unquoted.plain.in.yaml"}]},{"include":"#flow-node"},{"begin":":(?=\\\\s|$|[],\\\\[{}])","captures":{"0":{"name":"punctuation.separator.key-value.mapping.yaml"}},"end":"(?=[],}])","name":"meta.flow-pair.yaml","patterns":[{"include":"#flow-value"}]}]},"flow-scalar":{"patterns":[{"include":"#flow-scalar-double-quoted"},{"include":"#flow-scalar-single-quoted"},{"include":"#flow-scalar-plain-in"}]},"flow-scalar-double-quoted":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.yaml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.yaml"}},"name":"string.quoted.double.yaml","patterns":[{"match":"\\\\\\\\([ \\"/0LN\\\\\\\\_abefnprtv]|x\\\\d\\\\d|u\\\\d{4}|U\\\\d{8})","name":"constant.character.escape.yaml"},{"match":"\\\\\\\\\\\\n","name":"constant.character.escape.double-quoted.newline.yaml"}]},"flow-scalar-plain-in":{"patterns":[{"include":"#flow-scalar-plain-in-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s]","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"string.unquoted.plain.in.yaml"}]},"flow-scalar-plain-in-implicit-type":{"patterns":[{"captures":{"1":{"name":"constant.language.null.yaml"},"2":{"name":"constant.language.boolean.yaml"},"3":{"name":"constant.numeric.integer.yaml"},"4":{"name":"constant.numeric.float.yaml"},"5":{"name":"constant.other.timestamp.yaml"},"6":{"name":"constant.language.value.yaml"},"7":{"name":"constant.language.merge.yaml"}},"match":"(?:(null|Null|NULL|~)|([Yy]|yes|Yes|YES|[Nn]|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)|([-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[_\\\\h]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)|([-+]?(?:[0-9][0-9_]*)?\\\\.[.0-9]*(?:[Ee][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))|(\\\\d{4}-\\\\d{2}-\\\\d{2}|\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}(?:[Tt]|[\\\\t ]+)\\\\d{1,2}:\\\\d{2}:\\\\d{2}(?:\\\\.\\\\d*)?(?:[\\\\t ]*Z|[-+]\\\\d{1,2}(?::\\\\d{1,2})?)?)|(=)|(<<))(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])"}]},"flow-scalar-plain-out":{"patterns":[{"include":"#flow-scalar-plain-out-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&'*,:>?@\\\\[\`{|}\\\\s]|[-:?]\\\\S","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","name":"string.unquoted.plain.out.yaml"}]},"flow-scalar-plain-out-implicit-type":{"patterns":[{"captures":{"1":{"name":"constant.language.null.yaml"},"2":{"name":"constant.language.boolean.yaml"},"3":{"name":"constant.numeric.integer.yaml"},"4":{"name":"constant.numeric.float.yaml"},"5":{"name":"constant.other.timestamp.yaml"},"6":{"name":"constant.language.value.yaml"},"7":{"name":"constant.language.merge.yaml"}},"match":"(?:(null|Null|NULL|~)|([Yy]|yes|Yes|YES|[Nn]|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)|([-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[_\\\\h]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)|([-+]?(?:[0-9][0-9_]*)?\\\\.[.0-9]*(?:[Ee][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))|(\\\\d{4}-\\\\d{2}-\\\\d{2}|\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}(?:[Tt]|[\\\\t ]+)\\\\d{1,2}:\\\\d{2}:\\\\d{2}(?:\\\\.\\\\d*)?(?:[\\\\t ]*Z|[-+]\\\\d{1,2}(?::\\\\d{1,2})?)?)|(=)|(<<))(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))"}]},"flow-scalar-single-quoted":{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.yaml"}},"end":"'(?!')","endCaptures":{"0":{"name":"punctuation.definition.string.end.yaml"}},"name":"string.quoted.single.yaml","patterns":[{"match":"''","name":"constant.character.escape.single-quoted.yaml"}]},"flow-sequence":{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.sequence.begin.yaml"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.sequence.end.yaml"}},"name":"meta.flow-sequence.yaml","patterns":[{"include":"#prototype"},{"match":",","name":"punctuation.separator.sequence.yaml"},{"include":"#flow-pair"},{"include":"#flow-node"}]},"flow-value":{"patterns":[{"begin":"\\\\G(?![],}])","end":"(?=[],}])","name":"meta.flow-pair.value.yaml","patterns":[{"include":"#flow-node"}]}]},"node":{"patterns":[{"include":"#block-node"}]},"property":{"begin":"(?=[!\\\\&])","end":"(?!\\\\G)","name":"meta.property.yaml","patterns":[{"captures":{"1":{"name":"keyword.control.property.anchor.yaml"},"2":{"name":"punctuation.definition.anchor.yaml"},"3":{"name":"entity.name.type.anchor.yaml"},"4":{"name":"invalid.illegal.character.anchor.yaml"}},"match":"\\\\G((&))([^],/\\\\[{}\\\\s]+)(\\\\S+)?"},{"match":"\\\\G!(?:<(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])+>|(?:[-0-9A-Za-z]*!)?(?:%\\\\h{2}|[#$\\\\&-+\\\\--;=?-Z_a-z~])+|)(?=[\\\\t ]|$)","name":"storage.type.tag-handle.yaml"},{"match":"\\\\S+","name":"invalid.illegal.tag-handle.yaml"}]},"prototype":{"patterns":[{"include":"#comment"},{"include":"#property"}]}},"scopeName":"source.yaml","aliases":["yml"]}`))];export{t as n,n as t};
@@ -6,9 +6,12 @@
6
6
  <meta name="color-scheme" content="dark" />
7
7
  <title>zuzuu-web</title>
8
8
  <link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' rx='7' fill='%230d1117'/%3E%3Ctext x='6' y='22' font-family='monospace' font-size='16' fill='%2358e6c0'%3E%E2%9D%AF_%3C/text%3E%3C/svg%3E" />
9
- <script type="module" crossorigin src="/assets/index-DHpC851f.js"></script>
10
- <link rel="modulepreload" crossorigin href="/assets/chunk-QTnfLwEv.js">
11
- <link rel="stylesheet" crossorigin href="/assets/index-O-t1gyMG.css">
9
+ <script type="module" crossorigin src="/assets/index-De6DWTZM.js"></script>
10
+ <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-QTnfLwEv.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/xterm-addons-psDEiUMC.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/xterm-B1ffpRuj.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/react-vendor-CCIEwYL0.js">
14
+ <link rel="stylesheet" crossorigin href="/assets/index-B27_WOhS.css">
12
15
  </head>
13
16
  <body>
14
17
  <div id="root"></div>
@@ -6,7 +6,7 @@
6
6
 
7
7
  import { join } from 'node:path';
8
8
  import { mkdirSync, appendFileSync } from 'node:fs';
9
- import { liveDir } from '../store.mjs';
9
+ import { liveDir } from '../core/store.mjs';
10
10
 
11
11
  /** Append a fail-soft outcome record. Never throws. */
12
12
  export function recordOutcome(agentDir, { slug, ok, error } = {}) {
@@ -9,7 +9,7 @@
9
9
 
10
10
  import { readFileSync, existsSync } from 'node:fs';
11
11
  import { join } from 'node:path';
12
- import { paths } from '../store.mjs';
12
+ import { paths } from '../core/store.mjs';
13
13
  import { allActions, actionsDir, isSafeSlug } from '../actions/manifest.mjs';
14
14
  import { runAction } from '../actions/dispatch.mjs';
15
15
  import { MARKER } from '../actions/marker.mjs';
@@ -1,8 +1,8 @@
1
1
  // `zuzuu capture` — post-hoc: parse a host transcript into a git-native trace + record.
2
2
 
3
3
  import { ADAPTERS, byName, detected } from '../capture/adapters/registry.mjs';
4
- import { captureTrace } from '../capture-core.mjs';
5
- import { paths } from '../store.mjs';
4
+ import { captureTrace } from '../core/capture-core.mjs';
5
+ import { paths } from '../core/store.mjs';
6
6
 
7
7
  function chooseRef(adapter, args) {
8
8
  if (args.file) return args.file;
@@ -11,8 +11,8 @@ import { resolve } from 'node:path';
11
11
  import { spawnSync } from 'node:child_process';
12
12
  import { init } from './init.mjs';
13
13
  import { enable } from './enable.mjs';
14
- import { repoRoot } from '../store.mjs';
15
- import { homeExists } from '../scaffold.mjs';
14
+ import { repoRoot } from '../core/store.mjs';
15
+ import { homeExists } from '../home/scaffold.mjs';
16
16
 
17
17
  // Run a command inside `dir` without permanently changing the process cwd —
18
18
  // init/enable resolve their target from process.cwd(), so we chdir around them.
@@ -3,8 +3,8 @@
3
3
  // start would inject. Lets a human (or a hookless host) see exactly what the
4
4
  // agent sees.
5
5
 
6
- import { paths } from '../store.mjs';
7
- import { computeDigest } from '../digest.mjs';
6
+ import { paths } from '../core/store.mjs';
7
+ import { computeDigest } from '../digest/compose.mjs';
8
8
 
9
9
  /** Pure: the digest payload — the zuzuu-web /digest source (the daemon also reads .zuzuu/.live/digest.md directly). */
10
10
  export function digestData(agentDir, opts = {}) {
@@ -2,20 +2,15 @@
2
2
  //
3
3
  // Default: knowledge only (back-compat, via distillSessions). With
4
4
  // `--all-faculties`: mine each transcript ONCE into a superset, then run every
5
- // registered faculty miner (knowledge today; actions/guardrails/instructions/
6
- // memory land in later WS5 tasks) over the shared sessions array.
5
+ // faculty module's miner (the Faculty Module registry) over the shared
6
+ // sessions array. Miner hooks are miner-class: fail-soft + time-boxed a
7
+ // broken or hung miner degrades to 0 proposals, never sinks the others.
7
8
 
8
- import { paths } from '../store.mjs';
9
+ import { paths } from '../core/store.mjs';
9
10
  import { distillSessions, transcriptsFor, mineHostSession } from '../knowledge/distill.mjs';
10
- import * as registry from '../miners/registry.mjs';
11
- // Import miner modules so they self-register.
12
- import '../miners/knowledge.mjs';
13
- import '../miners/actions.mjs';
14
- import '../miners/guardrails.mjs';
15
- import '../miners/instructions.mjs';
16
- import '../miners/memory.mjs';
11
+ import * as registry from '../faculty/registry.mjs';
17
12
 
18
- export function distill(args) {
13
+ export async function distill(args) {
19
14
  const scope = args.all ? 'all' : args.session ? null : 'last';
20
15
  const pairs = transcriptsFor({ scope: scope ?? 'all', session: args.session || null, cwd: process.cwd() });
21
16
  if (!pairs.length) {
@@ -27,13 +22,17 @@ export function distill(args) {
27
22
  if (args['all-faculties'] || args.allFaculties) {
28
23
  const sessions = pairs.map(mineHostSession).filter(Boolean);
29
24
  const hosts = new Set(sessions.map((s) => s.host));
30
- console.log(`distilled ${sessions.length} session(s) across ${hosts.size} host(s) and ${registry.all().length} faculty miner(s):`);
25
+ const miners = registry.miners();
26
+ console.log(`distilled ${sessions.length} session(s) across ${hosts.size} host(s) and ${miners.length} faculty miner(s):`);
31
27
  let total = 0;
32
- for (const miner of registry.all()) {
33
- const cand = miner.aggregate(sessions, {});
34
- const n = miner.propose(agentDir, cand);
28
+ for (const miner of miners) {
29
+ const entry = { id: miner.faculty, module: miner };
30
+ const agg = await registry.invokeTimeboxed(entry, 'aggregate', [sessions, {}]);
31
+ const prop = agg.ok ? await registry.invokeTimeboxed(entry, 'propose', [agentDir, agg.value]) : agg;
32
+ const n = prop.ok && Number.isFinite(prop.value) ? prop.value : 0;
35
33
  total += n;
36
- console.log(` ${miner.faculty.padEnd(12)} ${n} proposal(s)`);
34
+ const note = prop.ok ? '' : ' (miner degraded — see zuzuu doctor)';
35
+ console.log(` ${miner.faculty.padEnd(12)} ${n} proposal(s)${note}`);
37
36
  }
38
37
  if (total) console.log('next: zuzuu review');
39
38
  return;
@@ -3,16 +3,17 @@
3
3
 
4
4
  import { mkdirSync, accessSync, constants } from 'node:fs';
5
5
  import { detected } from '../capture/adapters/registry.mjs';
6
- import { paths, gitInfo } from '../store.mjs';
6
+ import { paths, gitInfo } from '../core/store.mjs';
7
7
  import { listLive } from '../live/live-store.mjs';
8
8
  import { reconcile } from '../live/reconcile.mjs';
9
- import { planScaffold, homeExists } from '../scaffold.mjs';
9
+ import { planScaffold, homeExists } from '../home/scaffold.mjs';
10
+ import { facultiesOf, hookFailures } from '../faculty/registry.mjs';
10
11
  import { loadRegistry } from '../knowledge/registry.mjs';
11
12
  import { allItems } from '../knowledge/items.mjs';
12
13
  import { listProposals } from '../knowledge/proposals.mjs';
13
14
  import { detectEmbedder } from '../knowledge/embed.mjs';
14
- import { activeGeneration, readGeneration, snapshotFaculties } from '../faculty/generation.mjs';
15
- import { sessionStatus } from '../session-git.mjs';
15
+ import { activeGeneration, readGeneration, snapshotFaculties } from '../faculty/generation/read.mjs';
16
+ import { sessionStatus } from '../sessions/session-git.mjs';
16
17
  import { leftoverLine } from './session.mjs';
17
18
 
18
19
  /**
@@ -78,6 +79,32 @@ export function detectDrift(agentDir) {
78
79
  }
79
80
  }
80
81
 
82
+ /**
83
+ * Pure-ish: faculty-module health for doctor — broken manifests + recorded
84
+ * hook failures become warnings (the module degraded to items-only);
85
+ * declarative faculties get an informational note. Fail-open: any error
86
+ * returns empty lists rather than throwing into doctor.
87
+ * @returns {{warnings: string[], notes: string[]}}
88
+ */
89
+ export function facultyModuleHealth(agentDir) {
90
+ try {
91
+ const warnings = [];
92
+ const notes = [];
93
+ const entries = facultiesOf(agentDir);
94
+ for (const e of entries.filter((x) => x.manifestError)) {
95
+ warnings.push(`faculty '${e.id}' faculty.json unreadable (${e.manifestError}) — module degraded to items-only`);
96
+ }
97
+ const declarative = entries.filter((x) => x.declarative && !x.manifestError);
98
+ if (declarative.length) notes.push(`declarative faculties: ${declarative.map((x) => x.id).join(', ')}`);
99
+ for (const f of hookFailures()) {
100
+ warnings.push(`faculty '${f.faculty}' hook ${f.hook} failed (${f.error}) — degraded, items-only`);
101
+ }
102
+ return { warnings, notes };
103
+ } catch {
104
+ return { warnings: [], notes: [] }; // module health must never break doctor
105
+ }
106
+ }
107
+
81
108
  /** The closing line: honest about warnings, never "all good" under them. */
82
109
  export function summaryLine(problems, warnings) {
83
110
  if (problems) return `\n${problems} problem(s) found`;
@@ -133,6 +160,14 @@ export async function doctor() {
133
160
  else ok('faculty home complete (knowledge/ memory/ actions/ instructions/ guardrails/)');
134
161
  }
135
162
 
163
+ // faculty modules (the Faculty Module contract): a broken manifest or a
164
+ // failed hook degrades that faculty to items-only — surface it, never throw.
165
+ if (homeExists(root)) {
166
+ const health = facultyModuleHealth(dir);
167
+ for (const w of health.warnings) warn(w);
168
+ for (const n of health.notes) info(n);
169
+ }
170
+
136
171
  // knowledge faculty
137
172
  if (homeExists(root)) {
138
173
  const reg = loadRegistry(dir);
@@ -6,7 +6,7 @@
6
6
  import { join, dirname } from 'node:path';
7
7
  import { fileURLToPath } from 'node:url';
8
8
  import { existsSync, readFileSync, writeFileSync, mkdirSync, rmSync } from 'node:fs';
9
- import { repoRoot } from '../store.mjs';
9
+ import { repoRoot } from '../core/store.mjs';
10
10
  import { addHooks, removeHooks, isInstalled, LIFECYCLE_EVENTS, GATE_EVENTS, addHookEntries, removeHookEntries } from '../live/install.mjs';
11
11
 
12
12
  const BIN = join(dirname(fileURLToPath(import.meta.url)), '..', '..', 'bin', 'zuzuu.mjs');
@@ -7,16 +7,11 @@
7
7
  // a one-line eval annotation per proposal card.
8
8
 
9
9
  import { join } from 'node:path';
10
- import { paths, readIndex } from '../store.mjs';
10
+ import { paths } from '../core/store.mjs';
11
11
  import * as registry from '../faculty/registry.mjs';
12
- import { listProposals as spineListProposals } from '../faculty/proposal.mjs';
12
+ import { buildSessionMtimes, facultyPending } from '../faculty/pending.mjs';
13
13
  import { rank } from '../eval/rank.mjs';
14
14
  import { getScorer } from '../eval/score.mjs';
15
- import '../knowledge/adapter.mjs'; // self-registers the 'knowledge' adapter
16
- import '../actions/adapter.mjs'; // self-registers the 'actions' adapter
17
- import '../guardrails/adapter.mjs'; // self-registers the 'guardrails' adapter
18
- import '../instructions/adapter.mjs'; // self-registers the 'instructions' adapter
19
- import '../memory/adapter.mjs'; // self-registers the 'memory' adapter
20
15
 
21
16
  /**
22
17
  * Format one eval annotation line for a proposal card in `zuzuu review`.
@@ -30,34 +25,6 @@ export function evalLine({ score, confidence, rationale }) {
30
25
  return `eval: ${score} [${confidence}] · ${rationale}${warn}`;
31
26
  }
32
27
 
33
- /**
34
- * Build sessionMtimes from the sessions index — cheap best-effort.
35
- * Falls back to {} on any error.
36
- * @param {string} [cwd]
37
- * @returns {Record<string, number>}
38
- */
39
- function buildSessionMtimes(cwd) {
40
- try {
41
- const idx = readIndex(cwd);
42
- const map = {};
43
- for (const s of idx.sessions ?? []) {
44
- if (!s.id) continue;
45
- // prefer startedAt ms; fall back to 0 (neutral recency)
46
- const ms = s.startedAt ? Date.parse(s.startedAt) : 0;
47
- if (!isNaN(ms) && ms > 0) map[s.id] = ms;
48
- }
49
- return map;
50
- } catch {
51
- return {};
52
- }
53
- }
54
-
55
- /** Collect proposals for a given adapter (mirrors review.mjs's facultyPending). */
56
- function collectProposals(agentDir, adapter) {
57
- if (typeof adapter.listProposals === 'function') return adapter.listProposals(agentDir);
58
- return spineListProposals(agentDir, adapter.name);
59
- }
60
-
61
28
  /**
62
29
  * Pure: gather + rank all pending proposals, returning structured data for JSON output.
63
30
  * The zuzuu-web /eval source.
@@ -77,7 +44,7 @@ export function evalData(agentDir, { faculty: onlyFaculty = null } = {}) {
77
44
  const allEntries = [];
78
45
  for (const adapter of adapters) {
79
46
  if (onlyFaculty && adapter.name !== onlyFaculty) continue;
80
- const proposals = collectProposals(agentDir, adapter);
47
+ const proposals = facultyPending(agentDir, adapter);
81
48
  for (const proposal of proposals) {
82
49
  allEntries.push({ proposal, faculty: adapter.name });
83
50
  }
@@ -1,23 +1,32 @@
1
- // zuzuu/commands/faculty.mjs — `zuzuu faculty` (W24, the Faculty Standard).
1
+ // zuzuu/commands/faculty.mjs — `zuzuu faculty` (W24 Faculty Standard + the
2
+ // 2026-06-13 Faculty Module contract).
2
3
  //
3
- // The read surface over the one envelope format:
4
+ // The read surface over the one envelope format + the module contract:
4
5
  // zuzuu faculty items <f> [--json|--jsonl] list a faculty's envelope items
5
6
  // zuzuu faculty schema <f> [--json] print its payload schema
7
+ // zuzuu faculty manifest <f> [--json] print its faculty.json manifest
8
+ // zuzuu faculty overview [--json] ALL faculties in ONE process:
9
+ // manifest.ui + counts + top-3 item
10
+ // titles + pending counts (the
11
+ // daemon's batching endpoint)
6
12
  //
7
13
  // `--json` = one document; `--jsonl` = one item per line (streaming consumers).
8
- // Fail-soft like everything on the serve path: unparseable items are listed as
9
- // errors next to the good ones, never thrown.
14
+ // Declarative faculties (manifest-only folders) are first-class here: items
15
+ // list from manifest.itemsDir, schemas serve from the home, the overview and
16
+ // digest include them. Fail-soft like everything on the serve path.
10
17
 
11
18
  import { existsSync, readFileSync } from 'node:fs';
12
19
  import { join } from 'node:path';
13
- import { paths } from '../store.mjs';
14
- import { FACULTIES } from '../faculty/contract.mjs';
20
+ import { paths } from '../core/store.mjs';
15
21
  import { listFacultyItems } from '../faculty/items.mjs';
22
+ import { listProposals } from '../faculty/proposal.mjs';
16
23
  import { PAYLOAD_SCHEMAS, FACULTY_KINDS } from '../faculty/envelope.mjs';
24
+ import { facultiesOf, facultyOf, get as getAdapter } from '../faculty/registry.mjs';
17
25
 
18
26
  /** Pure: one faculty's envelope items + parse errors (the --json document). */
19
- export function facultyItemsData(agentDir, faculty) {
20
- const { items, errors } = listFacultyItems(agentDir, faculty);
27
+ export function facultyItemsData(agentDir, faculty, manifest = null) {
28
+ const m = manifest ?? facultyOf(agentDir, faculty)?.manifest;
29
+ const { items, errors } = listFacultyItems(agentDir, faculty, { itemsDir: m?.itemsDir });
21
30
  return { faculty, count: items.length, items, errors };
22
31
  }
23
32
 
@@ -32,31 +41,105 @@ export function facultySchemaData(agentDir, faculty) {
32
41
  try { return { faculty, source: 'home', schema: JSON.parse(readFileSync(seeded, 'utf8')) }; }
33
42
  catch { /* fall through to the built-in */ }
34
43
  }
35
- return { faculty, source: 'builtin', schema: PAYLOAD_SCHEMAS[faculty] };
44
+ return { faculty, source: 'builtin', schema: PAYLOAD_SCHEMAS[faculty] ?? null };
36
45
  }
37
46
 
38
- /** `zuzuu faculty <sub> <f>` — items | schema. */
47
+ /**
48
+ * Pure: one faculty's manifest document (home faculty.json when present,
49
+ * built-in fallback), or null for an unknown faculty.
50
+ */
51
+ export function facultyManifestData(agentDir, faculty) {
52
+ const entry = facultyOf(agentDir, faculty);
53
+ if (!entry) return null;
54
+ return {
55
+ faculty: entry.id,
56
+ source: entry.manifestSource,
57
+ declarative: entry.declarative,
58
+ ...(entry.manifestError ? { error: entry.manifestError } : {}),
59
+ manifest: entry.manifest,
60
+ };
61
+ }
62
+
63
+ /** Pending-proposal count for one faculty (dir-shaped adapters override). */
64
+ function pendingCount(agentDir, entry) {
65
+ try {
66
+ const a = getAdapter(entry.id);
67
+ if (a && typeof a.listProposals === 'function') return a.listProposals(agentDir).length;
68
+ return listProposals(agentDir, entry.id).length;
69
+ } catch {
70
+ return 0;
71
+ }
72
+ }
73
+
74
+ /**
75
+ * Pure: the overview document — EVERY faculty (built-in + declarative) with
76
+ * manifest/ui, item + pending counts and the top-3 item titles, computed in
77
+ * ONE process (the web daemon's batching endpoint — kills 5-spawn cycles).
78
+ * Fail-soft per faculty: a broken one reports zeros + its manifestError.
79
+ */
80
+ export function facultyOverviewData(agentDir) {
81
+ const faculties = facultiesOf(agentDir).map((entry) => {
82
+ let items = [], errors = [];
83
+ try {
84
+ ({ items, errors } = listFacultyItems(agentDir, entry.id, { itemsDir: entry.manifest?.itemsDir }));
85
+ } catch { /* unreadable → zeros */ }
86
+ return {
87
+ id: entry.id,
88
+ title: entry.manifest?.title ?? entry.id,
89
+ tagline: entry.manifest?.tagline ?? '',
90
+ ui: entry.manifest?.ui ?? {},
91
+ kinds: entry.manifest?.kinds ?? [],
92
+ declarative: entry.declarative,
93
+ ...(entry.manifestError ? { manifestError: entry.manifestError } : {}),
94
+ counts: { items: items.length, pending: pendingCount(agentDir, entry), errors: errors.length },
95
+ top: items.slice(0, 3).map((i) => i.title ?? i.id),
96
+ };
97
+ });
98
+ return { faculties };
99
+ }
100
+
101
+ /** `zuzuu faculty <sub> [<f>]` — items | schema | manifest | overview. */
39
102
  export function faculty(args = {}, log = console.log) {
40
103
  const [sub, f] = args._ ?? [];
41
- if (!sub || !['items', 'schema'].includes(sub)) {
42
- console.error('usage: zuzuu faculty items <faculty> [--json|--jsonl] · faculty schema <faculty> [--json]');
104
+ if (!sub || !['items', 'schema', 'manifest', 'overview'].includes(sub)) {
105
+ console.error('usage: zuzuu faculty items <faculty> [--json|--jsonl] · faculty schema <faculty> [--json] · faculty manifest <faculty> [--json] · faculty overview [--json]');
43
106
  process.exitCode = 1;
44
107
  return;
45
108
  }
46
- if (!FACULTIES.includes(f)) {
47
- console.error(`unknown faculty: ${f ?? '(none)'} — one of ${FACULTIES.join(' · ')}`);
109
+ const agentDir = paths().dir;
110
+
111
+ if (sub === 'overview') {
112
+ const d = facultyOverviewData(agentDir);
113
+ if (args.json) { log(JSON.stringify(d, null, 2)); return; }
114
+ for (const fac of d.faculties) {
115
+ const pending = fac.counts.pending ? ` · ${fac.counts.pending} pending` : '';
116
+ const flag = fac.declarative ? ' [declarative]' : '';
117
+ log(`${fac.id.padEnd(13)} ${String(fac.counts.items).padStart(3)} item(s)${pending}${flag}${fac.manifestError ? ` ✗ ${fac.manifestError}` : ''}`);
118
+ }
119
+ return;
120
+ }
121
+
122
+ const entry = facultyOf(agentDir, f);
123
+ if (!entry) {
124
+ const known = facultiesOf(agentDir).map((x) => x.id);
125
+ console.error(`unknown faculty: ${f ?? '(none)'} — one of ${known.join(' · ')}`);
48
126
  process.exitCode = 1;
49
127
  return;
50
128
  }
51
- const agentDir = paths().dir;
129
+
130
+ if (sub === 'manifest') {
131
+ const d = facultyManifestData(agentDir, entry.id);
132
+ log(JSON.stringify(args.json ? d : d.manifest, null, 2));
133
+ return;
134
+ }
52
135
 
53
136
  if (sub === 'schema') {
54
- const { schema } = facultySchemaData(agentDir, f);
137
+ const { schema } = facultySchemaData(agentDir, entry.id);
55
138
  log(JSON.stringify(schema, null, 2));
56
139
  return;
57
140
  }
58
141
 
59
- const data = facultyItemsData(agentDir, f);
142
+ const data = facultyItemsData(agentDir, entry.id, entry.manifest);
60
143
  if (args.jsonl) {
61
144
  for (const item of data.items) log(JSON.stringify(item));
62
145
  return;
@@ -65,8 +148,8 @@ export function faculty(args = {}, log = console.log) {
65
148
  log(JSON.stringify(data, null, 2));
66
149
  return;
67
150
  }
68
- const kinds = FACULTY_KINDS[f];
69
- log(`${f} — ${data.count} item(s)${kinds ? ` [${kinds.join('|')}]` : ''}`);
151
+ const kinds = FACULTY_KINDS[entry.id] ?? (entry.declarative && entry.manifest?.kinds?.length ? entry.manifest.kinds : null);
152
+ log(`${entry.id} — ${data.count} item(s)${kinds ? ` [${kinds.join('|')}]` : ''}`);
70
153
  for (const it of data.items) {
71
154
  log(` ${it.id} ${it.kind} · ${it.status ?? 'active'} — ${it.title}`);
72
155
  }
@@ -4,10 +4,9 @@
4
4
  // zuzuu generation mint manually mint a generation from the current faculty state
5
5
  // zuzuu generation rollback <id> restore a past generation by content (flip active + restore)
6
6
 
7
- import { paths, repoRoot } from '../store.mjs';
8
- import {
9
- listGenerations, readGeneration, activeGeneration, mintGeneration, rollback, diffGenerations,
10
- } from '../faculty/generation.mjs';
7
+ import { paths, repoRoot } from '../core/store.mjs';
8
+ import { listGenerations, readGeneration, activeGeneration, diffGenerations } from '../faculty/generation/read.mjs';
9
+ import { mintGeneration, rollback } from '../faculty/generation/write.mjs';
11
10
 
12
11
  function agentDir() {
13
12
  return paths(repoRoot(process.cwd())).dir;
@@ -14,14 +14,14 @@
14
14
  import { readFileSync, writeFileSync, appendFileSync, mkdirSync } from 'node:fs';
15
15
  import { join, dirname } from 'node:path';
16
16
  import { byName } from '../capture/adapters/registry.mjs';
17
- import { captureTrace } from '../capture-core.mjs';
18
- import { SessionState } from '../session.mjs';
17
+ import { captureTrace } from '../core/capture-core.mjs';
18
+ import { SessionState } from '../core/session.mjs';
19
19
  import { openLive, touchLive, closeLive, updateLive } from '../live/live-store.mjs';
20
- import { sessionGitEnabled, openSession, checkpoint, closeSession } from '../session-git.mjs';
21
- import { loadRules, evaluate, toPreToolUseDecision, toGeminiDecision } from '../guardrails.mjs';
22
- import { paths, liveDir as liveDirOf } from '../store.mjs';
23
- import { computeDigest } from '../digest.mjs';
24
- import { activeGeneration } from '../faculty/generation.mjs';
20
+ import { sessionGitEnabled, openSession, checkpoint, closeSession } from '../sessions/session-git.mjs';
21
+ import { loadRules, evaluate, toPreToolUseDecision, toGeminiDecision } from '../guardrails/engine.mjs';
22
+ import { paths, liveDir as liveDirOf } from '../core/store.mjs';
23
+ import { computeDigest } from '../digest/compose.mjs';
24
+ import { activeGeneration } from '../faculty/generation/read.mjs';
25
25
 
26
26
  // Lifecycle events, normalized across hosts (verified by observing each host):
27
27
  // open — session starts
@@ -5,15 +5,10 @@
5
5
  // points at `zuzuu review`. Fail-soft per faculty — a broken adapter or unreadable
6
6
  // proposal never sinks the whole view.
7
7
 
8
- import { paths } from '../store.mjs';
8
+ import { paths } from '../core/store.mjs';
9
9
  import { FACULTIES } from '../faculty/contract.mjs';
10
10
  import { listProposals } from '../faculty/proposal.mjs';
11
11
  import * as registry from '../faculty/registry.mjs';
12
- import '../knowledge/adapter.mjs'; // self-registers the 'knowledge' adapter
13
- import '../actions/adapter.mjs'; // self-registers the 'actions' adapter
14
- import '../guardrails/adapter.mjs'; // self-registers the 'guardrails' adapter
15
- import '../instructions/adapter.mjs'; // self-registers the 'instructions' adapter
16
- import '../memory/adapter.mjs'; // self-registers the 'memory' adapter
17
12
 
18
13
  /** Best-effort one-line title for a proposal (adapter.render → payload → id). */
19
14
  function titleOf(faculty, p) {
@@ -12,11 +12,12 @@
12
12
 
13
13
  import { join, basename } from 'node:path';
14
14
  import { existsSync, readdirSync, readFileSync, writeFileSync } from 'node:fs';
15
- import { applyScaffold, ensureGitignore, homeExists } from '../scaffold.mjs';
16
- import { injectBlock, facultiesBlock, hasBlock, BLOCK_VERSION } from '../inject.mjs';
15
+ import { applyScaffold, ensureGitignore, homeExists } from '../home/scaffold.mjs';
16
+ import { injectBlock, facultiesBlock, hasBlock, BLOCK_VERSION } from '../home/inject.mjs';
17
17
  import { detected } from '../capture/adapters/registry.mjs';
18
- import { repoRoot } from '../store.mjs';
19
- import { migrateHome, migrateItems, needsItemsMigration } from './migrate.mjs';
18
+ import { repoRoot } from '../core/store.mjs';
19
+ import { migrateHome } from './migrations/home.mjs';
20
+ import { migrateItems, needsItemsMigration } from './migrations/items.mjs';
20
21
 
21
22
  const HOST_FILES = ['CLAUDE.md', 'AGENTS.md', 'GEMINI.md'];
22
23
  // dotfiles/dirs that don't make a directory "a project" for emptiness purposes
@@ -1,7 +1,7 @@
1
1
  // Knowledge CLI: `zuzuu remember` (human-direct write — the human IS the gate),
2
2
  // `zuzuu recall` (one command, three search modes), `zuzuu knowledge reindex|audit`.
3
3
 
4
- import { paths } from '../store.mjs';
4
+ import { paths } from '../core/store.mjs';
5
5
  import { loadRegistry, validateItem } from '../knowledge/registry.mjs';
6
6
  import { slugify, writeItem, readItem, allItems } from '../knowledge/items.mjs';
7
7
  import { upsertItem, reindex, search, neighbors, indexPath, putVector, allVectors, unembedded } from '../knowledge/index.mjs';