@zuzuucodes/cli 1.4.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 (211) hide show
  1. package/bin/zuzuu.mjs +20 -4
  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} +158 -133
  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-B9jnrWOz.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-Bi8vSvwb.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-C6ELX5GM.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-CsR6EfHe.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-a8OvovQd.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/convert.mjs +10 -9
  110. package/zuzuu/actions/dispatch.mjs +12 -7
  111. package/zuzuu/actions/inbox.mjs +5 -5
  112. package/zuzuu/actions/manifest.mjs +48 -30
  113. package/zuzuu/actions/schema.mjs +9 -3
  114. package/zuzuu/actions/trail.mjs +1 -1
  115. package/zuzuu/commands/act-author.mjs +23 -13
  116. package/zuzuu/commands/act.mjs +4 -6
  117. package/zuzuu/commands/capture.mjs +2 -2
  118. package/zuzuu/commands/code.mjs +2 -2
  119. package/zuzuu/commands/digest.mjs +2 -2
  120. package/zuzuu/commands/distill.mjs +15 -16
  121. package/zuzuu/commands/doctor.mjs +41 -19
  122. package/zuzuu/commands/enable.mjs +1 -1
  123. package/zuzuu/commands/eval.mjs +3 -36
  124. package/zuzuu/commands/explain.mjs +4 -4
  125. package/zuzuu/commands/faculty.mjs +158 -0
  126. package/zuzuu/commands/generation.mjs +5 -8
  127. package/zuzuu/commands/hook.mjs +14 -12
  128. package/zuzuu/commands/inbox.mjs +1 -6
  129. package/zuzuu/commands/init.mjs +18 -4
  130. package/zuzuu/commands/knowledge.mjs +1 -1
  131. package/zuzuu/commands/migrations/home.mjs +96 -0
  132. package/zuzuu/commands/migrations/index.mjs +48 -0
  133. package/zuzuu/commands/migrations/items.mjs +360 -0
  134. package/zuzuu/commands/migrations/proposals.mjs +100 -0
  135. package/zuzuu/commands/proposals.mjs +131 -0
  136. package/zuzuu/commands/review.mjs +13 -227
  137. package/zuzuu/commands/session.mjs +8 -2
  138. package/zuzuu/commands/sessions.mjs +159 -0
  139. package/zuzuu/commands/status.mjs +3 -3
  140. package/zuzuu/commands/trace.mjs +1 -1
  141. package/zuzuu/{capture-core.mjs → core/capture-core.mjs} +3 -3
  142. package/zuzuu/{store.mjs → core/store.mjs} +1 -1
  143. package/zuzuu/digest/compose.mjs +96 -0
  144. package/zuzuu/eval/score.mjs +14 -1
  145. package/zuzuu/faculties/actions/index.mjs +283 -0
  146. package/zuzuu/faculties/guardrails/index.mjs +320 -0
  147. package/zuzuu/faculties/instructions/index.mjs +288 -0
  148. package/zuzuu/faculties/knowledge/index.mjs +185 -0
  149. package/zuzuu/faculties/memory/index.mjs +124 -0
  150. package/zuzuu/faculty/envelope.mjs +290 -0
  151. package/zuzuu/faculty/generation/read.mjs +206 -0
  152. package/zuzuu/faculty/generation/write.mjs +207 -0
  153. package/zuzuu/faculty/items.mjs +81 -0
  154. package/zuzuu/faculty/module.mjs +74 -0
  155. package/zuzuu/faculty/pending.mjs +63 -0
  156. package/zuzuu/faculty/registry.mjs +204 -18
  157. package/zuzuu/faculty/render.mjs +59 -0
  158. package/zuzuu/faculty/trail.mjs +1 -1
  159. package/zuzuu/guardrails/engine.mjs +137 -0
  160. package/zuzuu/{scaffold.mjs → home/scaffold.mjs} +110 -39
  161. package/zuzuu/knowledge/items.mjs +56 -91
  162. package/zuzuu/live/install.mjs +1 -1
  163. package/zuzuu/live/live-store.mjs +2 -2
  164. package/zuzuu/live/reconcile.mjs +2 -2
  165. package/zuzuu/sessions/git.mjs +47 -0
  166. package/zuzuu/{session-git.mjs → sessions/session-git.mjs} +5 -43
  167. package/web-app/web-dist/assets/DiffTab-BuWonUNJ.js +0 -1
  168. package/web-app/web-dist/assets/MonacoFile-CL3DhFKG.js +0 -1
  169. package/web-app/web-dist/assets/angular-html-CmT26mqM.js +0 -1
  170. package/web-app/web-dist/assets/c-BvoqrSVH.js +0 -1
  171. package/web-app/web-dist/assets/cpp-BXsk94m0.js +0 -1
  172. package/web-app/web-dist/assets/css-Z8oOGxII.js +0 -1
  173. package/web-app/web-dist/assets/dist-ChcDQ_7s.js +0 -153
  174. package/web-app/web-dist/assets/glsl-KwyfU2aa.js +0 -1
  175. package/web-app/web-dist/assets/graphql-DSeOUAa2.js +0 -1
  176. package/web-app/web-dist/assets/haml-azVoxQRV.js +0 -1
  177. package/web-app/web-dist/assets/html-D_7P5S4m.js +0 -1
  178. package/web-app/web-dist/assets/index--5yy8RbA.js +0 -267
  179. package/web-app/web-dist/assets/index-BVG4hgk7.css +0 -2
  180. package/web-app/web-dist/assets/java-D4RbCvBe.js +0 -1
  181. package/web-app/web-dist/assets/javascript-Cb010CKM.js +0 -1
  182. package/web-app/web-dist/assets/json-DWgqV4D1.js +0 -1
  183. package/web-app/web-dist/assets/jsx-CZjSJa1f.js +0 -1
  184. package/web-app/web-dist/assets/lua-TGj_6NzO.js +0 -1
  185. package/web-app/web-dist/assets/r-fCpuAR7u.js +0 -1
  186. package/web-app/web-dist/assets/regexp-B4yxx-Ty.js +0 -1
  187. package/web-app/web-dist/assets/scss-QdjMO_xV.js +0 -1
  188. package/web-app/web-dist/assets/shellscript-BnlgeVVx.js +0 -1
  189. package/web-app/web-dist/assets/sql-DGnQv6iD.js +0 -1
  190. package/web-app/web-dist/assets/tsx-MJ0-9sYG.js +0 -1
  191. package/web-app/web-dist/assets/typescript-C17ZkDe8.js +0 -1
  192. package/web-app/web-dist/assets/xml-CA9lHFQV.js +0 -1
  193. package/web-app/web-dist/assets/yaml-CwRYMJka.js +0 -1
  194. package/zuzuu/actions/adapter.mjs +0 -130
  195. package/zuzuu/commands/migrate.mjs +0 -225
  196. package/zuzuu/digest.mjs +0 -149
  197. package/zuzuu/faculty/generation.mjs +0 -392
  198. package/zuzuu/guardrails/adapter.mjs +0 -134
  199. package/zuzuu/guardrails.mjs +0 -89
  200. package/zuzuu/instructions/adapter.mjs +0 -93
  201. package/zuzuu/knowledge/adapter.mjs +0 -99
  202. package/zuzuu/memory/adapter.mjs +0 -121
  203. package/zuzuu/miners/actions.mjs +0 -118
  204. package/zuzuu/miners/guardrails.mjs +0 -179
  205. package/zuzuu/miners/instructions.mjs +0 -157
  206. package/zuzuu/miners/knowledge.mjs +0 -25
  207. package/zuzuu/miners/memory.mjs +0 -27
  208. package/zuzuu/miners/registry.mjs +0 -31
  209. /package/web-app/web-dist/assets/{chunk-QTnfLwEv.js → rolldown-runtime-QTnfLwEv.js} +0 -0
  210. /package/zuzuu/{session.mjs → core/session.mjs} +0 -0
  211. /package/zuzuu/{inject.mjs → home/inject.mjs} +0 -0
@@ -1,142 +1,118 @@
1
1
  // /api/zuzuu/* — observe + act routes over a project's zuzuu `.zuzuu/` home.
2
2
  // Reads: raw data (proposals, generations, sessions, digest) comes from disk;
3
3
  // computed views (status, inbox, eval, generation diff) shell out to
4
- // `zuzuu <cmd> --json` and fall back to file-reads when the binary is absent.
4
+ // `zuzuu <cmd> --json` (the spawn layer lives in zuzuu-cli.ts) and fall back
5
+ // to file-reads when the binary is absent.
5
6
  // Writes: mutations (approve/reject, mint, rollback) are CLI-ONLY — the daemon
6
7
  // never reimplements faculty writes; no CLI → 503. Mirrors fs-api.ts.
7
8
  import fsp from "node:fs/promises";
8
9
  import { existsSync } from "node:fs";
9
- import { spawn, spawnSync } from "node:child_process";
10
10
  import path from "node:path";
11
11
  import { Hono } from "hono";
12
12
  import { PathError, resolveSafe } from "./safe-path.js";
13
+ import { binAvailable, runZuzuu, runZuzuuMut } from "./zuzuu-cli.js";
13
14
  const FACULTIES = ["knowledge", "memory", "actions", "instructions", "guardrails"];
14
15
  /** Ids/slugs/generation-ids that may ride into a zuzuu argv. Validated BEFORE any spawn. */
15
16
  const SAFE_ID = /^[a-z0-9][a-z0-9._-]{0,127}$/i;
16
17
  const MAX_REASON_LEN = 500;
17
- /** Spawn `zuzuu <args> --json` in `root`. Returns parsed JSON, or null on any
18
- * failure (binary absent, non-zero exit, unparseable). Read-only + time-boxed. */
19
- export function runZuzuu(root, args, opts = {}) {
20
- const binary = opts.binary ?? "zuzuu";
21
- const timeoutMs = opts.timeoutMs ?? 5000;
22
- return new Promise((resolve) => {
23
- let out = "";
24
- let done = false;
25
- const finish = (v) => { if (!done) {
26
- done = true;
27
- resolve(v);
28
- } };
29
- let child;
18
+ // ── Faculty Standard envelope listing ────────────────────────────────────
19
+ // The CLI is the parser of record (`zuzuu faculty items <f> --json` returns
20
+ // the full envelopes incl. payload/body). When it's absent we degrade to a
21
+ // count-only frontmatter PEEK: read the items dir, lift the tiny top-level
22
+ // scalar lines (title:/status:/kind:) best-effort — counts still render,
23
+ // detail degrades. Never a re-implementation of the envelope grammar.
24
+ /** Flat envelope item dirs per faculty; actions are dir-shaped (ACTION.md). */
25
+ const ITEM_DIRS = {
26
+ knowledge: ["knowledge", "items"],
27
+ memory: ["memory", "entries"],
28
+ instructions: ["instructions", "items"],
29
+ guardrails: ["guardrails", "items"],
30
+ };
31
+ const PEEK_KEYS = new Set(["id", "faculty", "kind", "title", "status", "created_at", "updated_at"]);
32
+ function unquoteScalar(s) {
33
+ const t = s.trim();
34
+ if (t.startsWith('"') && t.endsWith('"') && t.length >= 2) {
30
35
  try {
31
- child = spawn(binary, [...args, "--json"], { cwd: root, stdio: ["ignore", "pipe", "ignore"] });
36
+ return JSON.parse(t);
32
37
  }
33
38
  catch {
34
- finish(null);
35
- return;
39
+ return t.slice(1, -1);
36
40
  }
37
- const timer = setTimeout(() => { try {
38
- child.kill();
39
- }
40
- catch { /* noop */ } finish(null); }, timeoutMs);
41
- child.stdout?.on("data", (b) => { out += b.toString(); });
42
- child.on("error", () => { clearTimeout(timer); finish(null); });
43
- child.on("close", (code) => {
44
- clearTimeout(timer);
45
- if (code !== 0)
46
- return finish(null);
47
- try {
48
- finish(JSON.parse(out));
49
- }
50
- catch {
51
- finish(null);
52
- }
53
- });
54
- });
41
+ }
42
+ if (t.startsWith("'") && t.endsWith("'") && t.length >= 2)
43
+ return t.slice(1, -1);
44
+ return t;
45
+ }
46
+ /** Best-effort peek at an envelope's top-level frontmatter scalars. */
47
+ function peekFrontmatter(text) {
48
+ const m = text.match(/^---\r?\n([\s\S]*?)\r?\n---/);
49
+ if (!m)
50
+ return {};
51
+ const out = {};
52
+ for (const raw of (m[1] ?? "").split("\n")) {
53
+ if (/^\s/.test(raw))
54
+ continue; // indented = provenance/payload children
55
+ const kv = raw.match(/^([A-Za-z_][\w-]*):\s*(.*)$/);
56
+ if (kv && PEEK_KEYS.has(kv[1]))
57
+ out[kv[1]] = unquoteScalar(kv[2] ?? "");
58
+ }
59
+ return out;
55
60
  }
56
- const STDERR_TAIL = 2048;
57
- /** Spawn `zuzuu <args> --json` for a MUTATION. Unlike runZuzuu, failures are
58
- * distinguished: binary absent vs command failed (with a stderr tail), so
59
- * routes can answer 503 vs 502. Stdout must parse as JSON on success. */
60
- export function runZuzuuMut(root, args, opts = {}) {
61
- const binary = opts.binary ?? "zuzuu";
62
- const timeoutMs = opts.timeoutMs ?? 10_000;
63
- return new Promise((resolve) => {
64
- let out = "";
65
- let err = "";
66
- let done = false;
67
- const finish = (v) => { if (!done) {
68
- done = true;
69
- resolve(v);
70
- } };
71
- let child;
61
+ /** CLI-less fallback: degraded envelope items (no payload/body) from disk. */
62
+ async function peekFacultyItems(agent, key) {
63
+ const files = [];
64
+ if (key === "actions") {
65
+ const base = path.join(agent, "actions");
66
+ let names = [];
72
67
  try {
73
- child = spawn(binary, [...args, "--json"], { cwd: root, stdio: ["ignore", "pipe", "pipe"] });
68
+ names = (await fsp.readdir(base)).sort();
74
69
  }
75
70
  catch {
76
- finish({ ok: false, code: "absent" });
77
- return;
71
+ return [];
72
+ }
73
+ for (const n of names) {
74
+ if (n === "inbox" || n === "proposals" || n === "_rolledback")
75
+ continue;
76
+ files.push({ id: n, file: path.join(base, n, "ACTION.md") });
78
77
  }
79
- const timer = setTimeout(() => {
80
- try {
81
- child.kill();
82
- }
83
- catch { /* noop */ }
84
- finish({ ok: false, code: "failed", stderr: "zuzuu timed out" });
85
- }, timeoutMs);
86
- child.stdout?.on("data", (b) => { out += b.toString(); });
87
- child.stderr?.on("data", (b) => {
88
- err += b.toString();
89
- if (err.length > STDERR_TAIL)
90
- err = err.slice(-STDERR_TAIL);
91
- });
92
- child.on("error", (e) => {
93
- clearTimeout(timer);
94
- if (e.code === "ENOENT")
95
- finish({ ok: false, code: "absent" });
96
- else
97
- finish({ ok: false, code: "failed", stderr: e.message });
98
- });
99
- child.on("close", (code) => {
100
- clearTimeout(timer);
101
- if (code !== 0) {
102
- // zuzuu prints structured JSON even on refusals (exit 1, e.g.
103
- // empty-squash-with-checkpoints) — keep it so the UI can act on reason.
104
- try {
105
- const parsed = JSON.parse(out);
106
- return finish({ ok: false, code: "failed", stderr: err.slice(-STDERR_TAIL), data: parsed });
107
- }
108
- catch {
109
- return finish({ ok: false, code: "failed", stderr: err.slice(-STDERR_TAIL) });
110
- }
111
- }
112
- try {
113
- finish({ ok: true, data: JSON.parse(out) });
114
- }
115
- catch {
116
- finish({ ok: false, code: "failed", stderr: "unparseable JSON from zuzuu" });
117
- }
118
- });
119
- });
120
- }
121
- /** Best-effort: is the zuzuu binary runnable? */
122
- function binAvailable(binary) {
123
- try {
124
- const r = spawnSync(binary, ["version"], { stdio: "ignore", timeout: 3000 });
125
- return !r.error && r.status === 0;
126
- }
127
- catch {
128
- return false;
129
78
  }
130
- }
131
- /** Count item FILES in a faculty dir — knowledge items are .md, others .json/.md. */
132
- async function countItemFiles(dir) {
133
- try {
134
- const names = (await fsp.readdir(dir)).filter((n) => n.endsWith(".json") || n.endsWith(".md"));
135
- return { count: names.length, names };
79
+ else {
80
+ const rel = ITEM_DIRS[key];
81
+ if (!rel)
82
+ return [];
83
+ const dir = path.join(agent, ...rel);
84
+ let names = [];
85
+ try {
86
+ names = (await fsp.readdir(dir)).sort();
87
+ }
88
+ catch {
89
+ return [];
90
+ }
91
+ for (const n of names) {
92
+ if (!n.endsWith(".md") || n === "README.md")
93
+ continue;
94
+ files.push({ id: n.replace(/\.md$/, ""), file: path.join(dir, n) });
95
+ }
136
96
  }
137
- catch {
138
- return { count: 0, names: [] };
97
+ const items = [];
98
+ for (const { id, file } of files) {
99
+ let fm;
100
+ try {
101
+ fm = peekFrontmatter(await fsp.readFile(file, "utf8"));
102
+ }
103
+ catch {
104
+ continue;
105
+ }
106
+ items.push({ kind: "?", ...fm, id: fm.id ?? id, faculty: key, title: fm.title ?? id });
139
107
  }
108
+ return items;
109
+ }
110
+ /** One faculty's envelope items: CLI first (full envelopes), peek fallback. */
111
+ async function facultyEnvelopeItems(root, agent, key, binary) {
112
+ const viaCli = await runZuzuu(root, ["faculty", "items", key], { binary });
113
+ if (viaCli && Array.isArray(viaCli.items))
114
+ return { items: viaCli.items, errors: Array.isArray(viaCli.errors) ? viaCli.errors : [], degraded: false };
115
+ return { items: await peekFacultyItems(agent, key), errors: [], degraded: true };
140
116
  }
141
117
  /** Read every *.json in a dir into objects; missing dir → [], corrupt file → skipped. */
142
118
  async function readJsonDir(dir) {
@@ -163,14 +139,6 @@ function proposalTitle(p) {
163
139
  const payload = p.payload;
164
140
  return firstLine(cand?.body ?? payload?.body ?? p.id);
165
141
  }
166
- /** The conventional item dir for a faculty, or null (heterogeneous faculties → counted as 0 for the MVP). */
167
- function itemsDirOf(agent, key) {
168
- if (key === "knowledge")
169
- return path.join(agent, "knowledge", "items");
170
- if (key === "memory")
171
- return path.join(agent, "memory", "entries");
172
- return null;
173
- }
174
142
  export function createZuzuuApi(getRoot, opts = {}) {
175
143
  const app = new Hono();
176
144
  let root = getRoot();
@@ -188,26 +156,62 @@ export function createZuzuuApi(getRoot, opts = {}) {
188
156
  });
189
157
  app.get("/faculties", async (c) => {
190
158
  const agent = await agentDir();
191
- const faculties = [];
192
- for (const key of FACULTIES) {
193
- const itemsDir = itemsDirOf(agent, key);
194
- const count = itemsDir ? (await countItemFiles(itemsDir)).count : 0;
195
- const pending = (await proposalsOf(agent, key)).length;
196
- faculties.push({ key, count, pending });
197
- }
159
+ const faculties = await Promise.all(FACULTIES.map(async (key) => {
160
+ const [{ items }, proposals] = await Promise.all([
161
+ facultyEnvelopeItems(root, agent, key, opts.binary),
162
+ proposalsOf(agent, key),
163
+ ]);
164
+ return { key, count: items.length, pending: proposals.length };
165
+ }));
198
166
  return c.json({ faculties });
199
167
  });
168
+ // The batched faculty surface: ONE `zuzuu faculty overview --json` spawn
169
+ // covers all faculties (manifest ui descriptors + counts + top titles +
170
+ // pending) — replaces the 5-spawn-per-cycle /faculties pattern for the
171
+ // panel root. CLI absent → peek fallback (counts survive, ui descriptors
172
+ // degrade to the web kit's built-in metadata).
173
+ app.get("/overview", async (c) => {
174
+ const viaCli = await runZuzuu(root, ["faculty", "overview"], { binary: opts.binary });
175
+ if (viaCli && Array.isArray(viaCli.faculties))
176
+ return c.json(viaCli);
177
+ const agent = await agentDir();
178
+ const faculties = await Promise.all(FACULTIES.map(async (id) => {
179
+ const [items, proposals] = await Promise.all([peekFacultyItems(agent, id), proposalsOf(agent, id)]);
180
+ return {
181
+ id,
182
+ title: id.charAt(0).toUpperCase() + id.slice(1),
183
+ counts: { items: items.length, pending: proposals.length, errors: 0 },
184
+ top: items.slice(0, 3).map((it) => String(it.title ?? it.id)),
185
+ declarative: false,
186
+ };
187
+ }));
188
+ return c.json({ faculties, degraded: true });
189
+ });
200
190
  app.get("/faculty/:key", async (c) => {
201
191
  const key = c.req.param("key");
202
192
  if (!FACULTIES.includes(key))
203
193
  return c.json({ error: "unknown faculty" }, 404);
204
194
  const agent = await agentDir();
205
- const itemsDir = itemsDirOf(agent, key);
206
- const items = itemsDir
207
- ? (await countItemFiles(itemsDir)).names.map((n) => ({ id: n.replace(/\.(json|md)$/, ""), title: n.replace(/\.(json|md)$/, "") }))
208
- : [];
195
+ const { items, errors, degraded } = await facultyEnvelopeItems(root, agent, key, opts.binary);
209
196
  const proposals = (await proposalsOf(agent, key)).map((p) => ({ id: String(p.id ?? "?"), faculty: key, title: proposalTitle(p) }));
210
- return c.json({ key, items, proposals });
197
+ return c.json({ key, items, proposals, errors, ...(degraded ? { degraded: true } : {}) });
198
+ });
199
+ app.get("/faculty/:key/schema", async (c) => {
200
+ const key = c.req.param("key");
201
+ if (!FACULTIES.includes(key))
202
+ return c.json({ error: "unknown faculty" }, 404);
203
+ const viaCli = await runZuzuu(root, ["faculty", "schema", key], { binary: opts.binary });
204
+ if (viaCli)
205
+ return c.json({ key, schema: viaCli, source: "cli" });
206
+ // CLI absent → the seeded payload schema in the home (zuzuu init writes it)
207
+ const agent = await agentDir();
208
+ try {
209
+ const schema = JSON.parse(await fsp.readFile(path.join(agent, key, "schema.json"), "utf8"));
210
+ return c.json({ key, schema, source: "home" });
211
+ }
212
+ catch {
213
+ return c.json({ key, schema: null, source: "absent" });
214
+ }
211
215
  });
212
216
  app.get("/generations", async (c) => {
213
217
  const agent = await agentDir();
@@ -225,7 +229,13 @@ export function createZuzuuApi(getRoot, opts = {}) {
225
229
  generations: gens.map((g) => ({ id: String(g.id), mintedAt: g.mintedAt ?? null, mintedFrom: g.mintedFrom ?? [] })),
226
230
  });
227
231
  });
232
+ // Sessions list: CLI-first (`zuzuu sessions --json` — state-labelled:
233
+ // active|completed|abandoned|crashed|captured); falls back to the raw
234
+ // sessions.json index (no state labels) when the CLI is absent.
228
235
  app.get("/sessions", async (c) => {
236
+ const viaCli = await runZuzuu(root, ["sessions"], { binary: opts.binary });
237
+ if (viaCli && Array.isArray(viaCli.sessions))
238
+ return c.json(viaCli);
229
239
  const agent = await agentDir();
230
240
  try {
231
241
  const idx = JSON.parse(await fsp.readFile(path.join(agent, "sessions.json"), "utf8"));
@@ -235,6 +245,21 @@ export function createZuzuuApi(getRoot, opts = {}) {
235
245
  return c.json({ sessions: [] });
236
246
  }
237
247
  });
248
+ // One session's observability document (`zuzuu session inspect <id> --json`:
249
+ // trace summary + per-faculty mined signals + warnings). CLI-only — the
250
+ // daemon never re-mines transcripts; absent → 503, failed → 502.
251
+ app.get("/session-inspect/:id", async (c) => {
252
+ const id = c.req.param("id");
253
+ if (!SAFE_ID.test(id))
254
+ return c.json({ error: "bad id" }, 400);
255
+ const r = await runZuzuuMut(root, ["session", "inspect", id], { binary: opts.binary });
256
+ if (!r.ok) {
257
+ return r.code === "absent"
258
+ ? c.json({ error: "zuzuu CLI required" }, 503)
259
+ : c.json({ error: "zuzuu command failed", stderr: r.stderr ?? "", data: r.data ?? null }, 502);
260
+ }
261
+ return c.json(r.data);
262
+ });
238
263
  app.get("/digest", async (c) => {
239
264
  const agent = await agentDir();
240
265
  try {
@@ -0,0 +1,45 @@
1
+ import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{i as t,r as n,t as r}from"./react-vendor-CCIEwYL0.js";import{c as i,f as a,g as o,h as s,i as c,m as l,p as u,t as d}from"./index-De6DWTZM.js";var f=e(t(),1),p=1,m=.9,h=.8,g=.17,_=.1,v=.999,y=.9999,b=.99,x=/[\\\/_+.#"@\[\(\{&]/,S=/[\\\/_+.#"@\[\(\{&]/g,C=/[\s-]/,w=/[\s-]/g;function T(e,t,n,r,i,a,o){if(a===t.length)return i===e.length?p:b;var s=`${i},${a}`;if(o[s]!==void 0)return o[s];for(var c=r.charAt(a),l=n.indexOf(c,i),u=0,d,f,E,D;l>=0;)d=T(e,t,n,r,l+1,a+1,o),d>u&&(l===i?d*=p:x.test(e.charAt(l-1))?(d*=h,E=e.slice(i,l-1).match(S),E&&i>0&&(d*=v**+E.length)):C.test(e.charAt(l-1))?(d*=m,D=e.slice(i,l-1).match(w),D&&i>0&&(d*=v**+D.length)):(d*=g,i>0&&(d*=v**+(l-i))),e.charAt(l)!==t.charAt(a)&&(d*=y)),(d<_&&n.charAt(l-1)===r.charAt(a+1)||r.charAt(a+1)===r.charAt(a)&&n.charAt(l-1)!==r.charAt(a))&&(f=T(e,t,n,r,l+1,a+2,o),f*_>d&&(d=f*_)),d>u&&(u=d),l=n.indexOf(c,l+1);return o[s]=u,u}function E(e){return e.toLowerCase().replace(w,` `)}function D(e,t,n){return e=n&&n.length>0?`${e+` `+n.join(` `)}`:e,T(e,t,E(e),E(t),0,0,{})}typeof window<`u`&&window.document&&window.document.createElement;function O(e,t,{checkForDefaultPrevented:n=!0}={}){return function(r){if(e?.(r),n===!1||!r.defaultPrevented)return t?.(r)}}function k(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}function A(...e){return t=>{let n=!1,r=e.map(e=>{let r=k(e,t);return!n&&typeof r==`function`&&(n=!0),r});if(n)return()=>{for(let t=0;t<r.length;t++){let n=r[t];typeof n==`function`?n():k(e[t],null)}}}}function j(...e){return f.useCallback(A(...e),e)}var M=r();function ee(e,t){let n=f.createContext(t);n.displayName=e+`Context`;let r=e=>{let{children:t,...r}=e,i=f.useMemo(()=>r,Object.values(r));return(0,M.jsx)(n.Provider,{value:i,children:t})};r.displayName=e+`Provider`;function i(r){let i=f.useContext(n);if(i)return i;if(t!==void 0)return t;throw Error(`\`${r}\` must be used within \`${e}\``)}return[r,i]}function te(e,t=[]){let n=[];function r(t,r){let i=f.createContext(r);i.displayName=t+`Context`;let a=n.length;n=[...n,r];let o=t=>{let{scope:n,children:r,...o}=t,s=n?.[e]?.[a]||i,c=f.useMemo(()=>o,Object.values(o));return(0,M.jsx)(s.Provider,{value:c,children:r})};o.displayName=t+`Provider`;function s(n,o){let s=o?.[e]?.[a]||i,c=f.useContext(s);if(c)return c;if(r!==void 0)return r;throw Error(`\`${n}\` must be used within \`${t}\``)}return[o,s]}let i=()=>{let t=n.map(e=>f.createContext(e));return function(n){let r=n?.[e]||t;return f.useMemo(()=>({[`__scope${e}`]:{...n,[e]:r}}),[n,r])}};return i.scopeName=e,[r,ne(i,...t)]}function ne(...e){let t=e[0];if(e.length===1)return t;let n=()=>{let n=e.map(e=>({useScope:e(),scopeName:e.scopeName}));return function(e){let r=n.reduce((t,{useScope:n,scopeName:r})=>{let i=n(e)[`__scope${r}`];return{...t,...i}},{});return f.useMemo(()=>({[`__scope${t.scopeName}`]:r}),[r])}};return n.scopeName=t.scopeName,n}var N=globalThis?.document?f.useLayoutEffect:()=>{},re=f.useId||(()=>void 0),ie=0;function P(e){let[t,n]=f.useState(re());return N(()=>{e||n(e=>e??String(ie++))},[e]),e||(t?`radix-${t}`:``)}var ae=f.useInsertionEffect||N;function oe({prop:e,defaultProp:t,onChange:n=()=>{},caller:r}){let[i,a,o]=se({defaultProp:t,onChange:n}),s=e!==void 0,c=s?e:i;{let t=f.useRef(e!==void 0);f.useEffect(()=>{let e=t.current;e!==s&&console.warn(`${r} is changing from ${e?`controlled`:`uncontrolled`} to ${s?`controlled`:`uncontrolled`}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),t.current=s},[s,r])}return[c,f.useCallback(t=>{if(s){let n=ce(t)?t(e):t;n!==e&&o.current?.(n)}else a(t)},[s,e,a,o])]}function se({defaultProp:e,onChange:t}){let[n,r]=f.useState(e),i=f.useRef(n),a=f.useRef(t);return ae(()=>{a.current=t},[t]),f.useEffect(()=>{i.current!==n&&(a.current?.(n),i.current=n)},[n,i]),[n,r,a]}function ce(e){return typeof e==`function`}var le=e(n(),1);function ue(e){let t=f.forwardRef((t,n)=>{let{children:r,...i}=t,a=null,o=!1,s=[];_e(r)&&typeof xe==`function`&&(r=xe(r._payload)),f.Children.forEach(r,e=>{if(he(e)){o=!0;let t=e,n=`child`in t.props?t.props.child:t.props.children;_e(n)&&typeof xe==`function`&&(n=xe(n._payload)),a=fe(t,n),s.push(a?.props?.children)}else s.push(e)}),a?a=f.cloneElement(a,void 0,s):!o&&f.Children.count(r)===1&&f.isValidElement(r)&&(a=r);let c=a?me(a):void 0,l=j(n,c);if(!a){if(r||r===0)throw Error(o?be(e):ye(e));return r}let u=pe(i,a.props??{});return a.type!==f.Fragment&&(u.ref=n?l:c),f.cloneElement(a,u)});return t.displayName=`${e}.Slot`,t}var de=Symbol.for(`radix.slottable`),fe=(e,t)=>{if(`child`in e.props){let t=e.props.child;return f.isValidElement(t)?f.cloneElement(t,void 0,e.props.children(t.props.children)):null}return f.isValidElement(t)?t:null};function pe(e,t){let n={...t};for(let r in t){let i=e[r],a=t[r];/^on[A-Z]/.test(r)?i&&a?n[r]=(...e)=>{let t=a(...e);return i(...e),t}:i&&(n[r]=i):r===`style`?n[r]={...i,...a}:r===`className`&&(n[r]=[i,a].filter(Boolean).join(` `))}return{...e,...n}}function me(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}function he(e){return f.isValidElement(e)&&typeof e.type==`function`&&`__radixId`in e.type&&e.type.__radixId===de}var ge=Symbol.for(`react.lazy`);function _e(e){return typeof e==`object`&&!!e&&`$$typeof`in e&&e.$$typeof===ge&&`_payload`in e&&ve(e._payload)}function ve(e){return typeof e==`object`&&!!e&&`then`in e}var ye=e=>`${e} failed to slot onto its children. Expected a single React element child or \`Slottable\`.`,be=e=>`${e} failed to slot onto its \`Slottable\`. Expected \`Slottable\` to receive a single React element child.`,xe=f.use,F=[`a`,`button`,`div`,`form`,`h2`,`h3`,`img`,`input`,`label`,`li`,`nav`,`ol`,`p`,`select`,`span`,`svg`,`ul`].reduce((e,t)=>{let n=ue(`Primitive.${t}`),r=f.forwardRef((e,r)=>{let{asChild:i,...a}=e,o=i?n:t;return typeof window<`u`&&(window[Symbol.for(`radix-ui`)]=!0),(0,M.jsx)(o,{...a,ref:r})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function Se(e,t){e&&le.flushSync(()=>e.dispatchEvent(t))}function I(e){let t=f.useRef(e);return f.useEffect(()=>{t.current=e}),f.useMemo(()=>((...e)=>t.current?.(...e)),[])}function Ce(e,t=globalThis?.document){let n=I(e);f.useEffect(()=>{let e=e=>{e.key===`Escape`&&n(e)};return t.addEventListener(`keydown`,e,{capture:!0}),()=>t.removeEventListener(`keydown`,e,{capture:!0})},[n,t])}var we=`DismissableLayer`,Te=`dismissableLayer.update`,Ee=`dismissableLayer.pointerDownOutside`,De=`dismissableLayer.focusOutside`,Oe,ke=f.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),Ae=f.forwardRef((e,t)=>{let{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:i,onFocusOutside:a,onInteractOutside:o,onDismiss:s,...c}=e,l=f.useContext(ke),[u,d]=f.useState(null),p=u?.ownerDocument??globalThis?.document,[,m]=f.useState({}),h=j(t,e=>d(e)),g=Array.from(l.layers),[_]=[...l.layersWithOutsidePointerEventsDisabled].slice(-1),v=g.indexOf(_),y=u?g.indexOf(u):-1,b=l.layersWithOutsidePointerEventsDisabled.size>0,x=y>=v,S=Ne(e=>{let t=e.target,n=[...l.branches].some(e=>e.contains(t));!x||n||(i?.(e),o?.(e),e.defaultPrevented||s?.())},p),C=Pe(e=>{let t=e.target;[...l.branches].some(e=>e.contains(t))||(a?.(e),o?.(e),e.defaultPrevented||s?.())},p);return Ce(e=>{y===l.layers.size-1&&(r?.(e),!e.defaultPrevented&&s&&(e.preventDefault(),s()))},p),f.useEffect(()=>{if(u)return n&&(l.layersWithOutsidePointerEventsDisabled.size===0&&(Oe=p.body.style.pointerEvents,p.body.style.pointerEvents=`none`),l.layersWithOutsidePointerEventsDisabled.add(u)),l.layers.add(u),Fe(),()=>{n&&(l.layersWithOutsidePointerEventsDisabled.delete(u),l.layersWithOutsidePointerEventsDisabled.size===0&&(p.body.style.pointerEvents=Oe))}},[u,p,n,l]),f.useEffect(()=>()=>{u&&(l.layers.delete(u),l.layersWithOutsidePointerEventsDisabled.delete(u),Fe())},[u,l]),f.useEffect(()=>{let e=()=>m({});return document.addEventListener(Te,e),()=>document.removeEventListener(Te,e)},[]),(0,M.jsx)(F.div,{...c,ref:h,style:{pointerEvents:b?x?`auto`:`none`:void 0,...e.style},onFocusCapture:O(e.onFocusCapture,C.onFocusCapture),onBlurCapture:O(e.onBlurCapture,C.onBlurCapture),onPointerDownCapture:O(e.onPointerDownCapture,S.onPointerDownCapture)})});Ae.displayName=we;var je=`DismissableLayerBranch`,Me=f.forwardRef((e,t)=>{let n=f.useContext(ke),r=f.useRef(null),i=j(t,r);return f.useEffect(()=>{let e=r.current;if(e)return n.branches.add(e),()=>{n.branches.delete(e)}},[n.branches]),(0,M.jsx)(F.div,{...e,ref:i})});Me.displayName=je;function Ne(e,t=globalThis?.document){let n=I(e),r=f.useRef(!1),i=f.useRef(()=>{});return f.useEffect(()=>{let e=e=>{if(e.target&&!r.current){let r=function(){Ie(Ee,n,a,{discrete:!0})},a={originalEvent:e};e.pointerType===`touch`?(t.removeEventListener(`click`,i.current),i.current=r,t.addEventListener(`click`,i.current,{once:!0})):r()}else t.removeEventListener(`click`,i.current);r.current=!1},a=window.setTimeout(()=>{t.addEventListener(`pointerdown`,e)},0);return()=>{window.clearTimeout(a),t.removeEventListener(`pointerdown`,e),t.removeEventListener(`click`,i.current)}},[t,n]),{onPointerDownCapture:()=>r.current=!0}}function Pe(e,t=globalThis?.document){let n=I(e),r=f.useRef(!1);return f.useEffect(()=>{let e=e=>{e.target&&!r.current&&Ie(De,n,{originalEvent:e},{discrete:!1})};return t.addEventListener(`focusin`,e),()=>t.removeEventListener(`focusin`,e)},[t,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function Fe(){let e=new CustomEvent(Te);document.dispatchEvent(e)}function Ie(e,t,n,{discrete:r}){let i=n.originalEvent.target,a=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&i.addEventListener(e,t,{once:!0}),r?Se(i,a):i.dispatchEvent(a)}var Le=`focusScope.autoFocusOnMount`,Re=`focusScope.autoFocusOnUnmount`,ze={bubbles:!1,cancelable:!0},Be=`FocusScope`,Ve=f.forwardRef((e,t)=>{let{loop:n=!1,trapped:r=!1,onMountAutoFocus:i,onUnmountAutoFocus:a,...o}=e,[s,c]=f.useState(null),l=I(i),u=I(a),d=f.useRef(null),p=j(t,e=>c(e)),m=f.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;f.useEffect(()=>{if(r){let e=function(e){if(m.paused||!s)return;let t=e.target;s.contains(t)?d.current=t:L(d.current,{select:!0})},t=function(e){if(m.paused||!s)return;let t=e.relatedTarget;t!==null&&(s.contains(t)||L(d.current,{select:!0}))},n=function(e){if(document.activeElement===document.body)for(let t of e)t.removedNodes.length>0&&L(s)};document.addEventListener(`focusin`,e),document.addEventListener(`focusout`,t);let r=new MutationObserver(n);return s&&r.observe(s,{childList:!0,subtree:!0}),()=>{document.removeEventListener(`focusin`,e),document.removeEventListener(`focusout`,t),r.disconnect()}}},[r,s,m.paused]),f.useEffect(()=>{if(s){Je.add(m);let e=document.activeElement;if(!s.contains(e)){let t=new CustomEvent(Le,ze);s.addEventListener(Le,l),s.dispatchEvent(t),t.defaultPrevented||(He(Ze(We(s)),{select:!0}),document.activeElement===e&&L(s))}return()=>{s.removeEventListener(Le,l),setTimeout(()=>{let t=new CustomEvent(Re,ze);s.addEventListener(Re,u),s.dispatchEvent(t),t.defaultPrevented||L(e??document.body,{select:!0}),s.removeEventListener(Re,u),Je.remove(m)},0)}}},[s,l,u,m]);let h=f.useCallback(e=>{if(!n&&!r||m.paused)return;let t=e.key===`Tab`&&!e.altKey&&!e.ctrlKey&&!e.metaKey,i=document.activeElement;if(t&&i){let t=e.currentTarget,[r,a]=Ue(t);r&&a?!e.shiftKey&&i===a?(e.preventDefault(),n&&L(r,{select:!0})):e.shiftKey&&i===r&&(e.preventDefault(),n&&L(a,{select:!0})):i===t&&e.preventDefault()}},[n,r,m.paused]);return(0,M.jsx)(F.div,{tabIndex:-1,...o,ref:p,onKeyDown:h})});Ve.displayName=Be;function He(e,{select:t=!1}={}){let n=document.activeElement;for(let r of e)if(L(r,{select:t}),document.activeElement!==n)return}function Ue(e){let t=We(e);return[Ge(t,e),Ge(t.reverse(),e)]}function We(e){let t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:e=>{let t=e.tagName===`INPUT`&&e.type===`hidden`;return e.disabled||e.hidden||t?NodeFilter.FILTER_SKIP:e.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function Ge(e,t){for(let n of e)if(!Ke(n,{upTo:t}))return n}function Ke(e,{upTo:t}){if(getComputedStyle(e).visibility===`hidden`)return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display===`none`)return!0;e=e.parentElement}return!1}function qe(e){return e instanceof HTMLInputElement&&`select`in e}function L(e,{select:t=!1}={}){if(e&&e.focus){let n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&qe(e)&&t&&e.select()}}var Je=Ye();function Ye(){let e=[];return{add(t){let n=e[0];t!==n&&n?.pause(),e=Xe(e,t),e.unshift(t)},remove(t){e=Xe(e,t),e[0]?.resume()}}}function Xe(e,t){let n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}function Ze(e){return e.filter(e=>e.tagName!==`A`)}var Qe=`Portal`,$e=f.forwardRef((e,t)=>{let{container:n,...r}=e,[i,a]=f.useState(!1);N(()=>a(!0),[]);let o=n||i&&globalThis?.document?.body;return o?le.createPortal((0,M.jsx)(F.div,{...r,ref:t}),o):null});$e.displayName=Qe;function et(e,t){return f.useReducer((e,n)=>t[e][n]??e,e)}var tt=e=>{let{present:t,children:n}=e,r=nt(t),i=typeof n==`function`?n({present:r.isPresent}):f.Children.only(n),a=it(r.ref,ot(i));return typeof n==`function`||r.isPresent?f.cloneElement(i,{ref:a}):null};tt.displayName=`Presence`;function nt(e){let[t,n]=f.useState(),r=f.useRef(null),i=f.useRef(e),a=f.useRef(`none`),[o,s]=et(e?`mounted`:`unmounted`,{mounted:{UNMOUNT:`unmounted`,ANIMATION_OUT:`unmountSuspended`},unmountSuspended:{MOUNT:`mounted`,ANIMATION_END:`unmounted`},unmounted:{MOUNT:`mounted`}});return f.useEffect(()=>{let e=at(r.current);a.current=o===`mounted`?e:`none`},[o]),N(()=>{let t=r.current,n=i.current;if(n!==e){let r=a.current,o=at(t);e?s(`MOUNT`):o===`none`||t?.display===`none`?s(`UNMOUNT`):s(n&&r!==o?`ANIMATION_OUT`:`UNMOUNT`),i.current=e}},[e,s]),N(()=>{if(t){let e,n=t.ownerDocument.defaultView??window,o=a=>{let o=at(r.current).includes(CSS.escape(a.animationName));if(a.target===t&&o&&(s(`ANIMATION_END`),!i.current)){let r=t.style.animationFillMode;t.style.animationFillMode=`forwards`,e=n.setTimeout(()=>{t.style.animationFillMode===`forwards`&&(t.style.animationFillMode=r)})}},c=e=>{e.target===t&&(a.current=at(r.current))};return t.addEventListener(`animationstart`,c),t.addEventListener(`animationcancel`,o),t.addEventListener(`animationend`,o),()=>{n.clearTimeout(e),t.removeEventListener(`animationstart`,c),t.removeEventListener(`animationcancel`,o),t.removeEventListener(`animationend`,o)}}else s(`ANIMATION_END`)},[t,s]),{isPresent:[`mounted`,`unmountSuspended`].includes(o),ref:f.useCallback(e=>{r.current=e?getComputedStyle(e):null,n(e)},[])}}function rt(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}function it(...e){let t=f.useRef(e);return t.current=e,f.useCallback(e=>{let n=t.current,r=!1,i=n.map(t=>{let n=rt(t,e);return!r&&typeof n==`function`&&(r=!0),n});if(r)return()=>{for(let e=0;e<i.length;e++){let t=i[e];typeof t==`function`?t():rt(n[e],null)}}},[])}function at(e){return e?.animationName||`none`}function ot(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var st=0,R=null;function ct(){f.useEffect(()=>{R||={start:lt(),end:lt()};let{start:e,end:t}=R;return document.body.firstElementChild!==e&&document.body.insertAdjacentElement(`afterbegin`,e),document.body.lastElementChild!==t&&document.body.insertAdjacentElement(`beforeend`,t),st++,()=>{st===1&&(R?.start.remove(),R?.end.remove(),R=null),st=Math.max(0,st-1)}},[])}function lt(){let e=document.createElement(`span`);return e.setAttribute(`data-radix-focus-guard`,``),e.tabIndex=0,e.style.outline=`none`,e.style.opacity=`0`,e.style.position=`fixed`,e.style.pointerEvents=`none`,e}var z=function(){return z=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n],t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},z.apply(this,arguments)};function ut(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols==`function`)for(var i=0,r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]]);return n}function dt(e,t,n){if(n||arguments.length===2)for(var r=0,i=t.length,a;r<i;r++)(a||!(r in t))&&(a||=Array.prototype.slice.call(t,0,r),a[r]=t[r]);return e.concat(a||Array.prototype.slice.call(t))}var ft=`right-scroll-bar-position`,pt=`width-before-scroll-bar`,mt=`with-scroll-bars-hidden`,ht=`--removed-body-scroll-bar-size`;function gt(e,t){return typeof e==`function`?e(t):e&&(e.current=t),e}function _t(e,t){var n=(0,f.useState)(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(e){var t=n.value;t!==e&&(n.value=e,n.callback(e,t))}}}})[0];return n.callback=t,n.facade}var vt=typeof window<`u`?f.useLayoutEffect:f.useEffect,yt=new WeakMap;function bt(e,t){var n=_t(t||null,function(t){return e.forEach(function(e){return gt(e,t)})});return vt(function(){var t=yt.get(n);if(t){var r=new Set(t),i=new Set(e),a=n.current;r.forEach(function(e){i.has(e)||gt(e,null)}),i.forEach(function(e){r.has(e)||gt(e,a)})}yt.set(n,e)},[e]),n}function xt(e){return e}function St(e,t){t===void 0&&(t=xt);var n=[],r=!1;return{read:function(){if(r)throw Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return n.length?n[n.length-1]:e},useMedium:function(e){var i=t(e,r);return n.push(i),function(){n=n.filter(function(e){return e!==i})}},assignSyncMedium:function(e){for(r=!0;n.length;){var t=n;n=[],t.forEach(e)}n={push:function(t){return e(t)},filter:function(){return n}}},assignMedium:function(e){r=!0;var t=[];if(n.length){var i=n;n=[],i.forEach(e),t=n}var a=function(){var n=t;t=[],n.forEach(e)},o=function(){return Promise.resolve().then(a)};o(),n={push:function(e){t.push(e),o()},filter:function(e){return t=t.filter(e),n}}}}}function Ct(e){e===void 0&&(e={});var t=St(null);return t.options=z({async:!0,ssr:!1},e),t}var wt=function(e){var t=e.sideCar,n=ut(e,[`sideCar`]);if(!t)throw Error("Sidecar: please provide `sideCar` property to import the right car");var r=t.read();if(!r)throw Error(`Sidecar medium not found`);return f.createElement(r,z({},n))};wt.isSideCarExport=!0;function Tt(e,t){return e.useMedium(t),wt}var Et=Ct(),Dt=function(){},Ot=f.forwardRef(function(e,t){var n=f.useRef(null),r=f.useState({onScrollCapture:Dt,onWheelCapture:Dt,onTouchMoveCapture:Dt}),i=r[0],a=r[1],o=e.forwardProps,s=e.children,c=e.className,l=e.removeScrollBar,u=e.enabled,d=e.shards,p=e.sideCar,m=e.noRelative,h=e.noIsolation,g=e.inert,_=e.allowPinchZoom,v=e.as,y=v===void 0?`div`:v,b=e.gapMode,x=ut(e,[`forwardProps`,`children`,`className`,`removeScrollBar`,`enabled`,`shards`,`sideCar`,`noRelative`,`noIsolation`,`inert`,`allowPinchZoom`,`as`,`gapMode`]),S=p,C=bt([n,t]),w=z(z({},x),i);return f.createElement(f.Fragment,null,u&&f.createElement(S,{sideCar:Et,removeScrollBar:l,shards:d,noRelative:m,noIsolation:h,inert:g,setCallbacks:a,allowPinchZoom:!!_,lockRef:n,gapMode:b}),o?f.cloneElement(f.Children.only(s),z(z({},w),{ref:C})):f.createElement(y,z({},w,{className:c,ref:C}),s))});Ot.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1},Ot.classNames={fullWidth:pt,zeroRight:ft};var kt,At=function(){if(kt)return kt;if(typeof __webpack_nonce__<`u`)return __webpack_nonce__};function jt(){if(!document)return null;var e=document.createElement(`style`);e.type=`text/css`;var t=At();return t&&e.setAttribute(`nonce`,t),e}function Mt(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function Nt(e){(document.head||document.getElementsByTagName(`head`)[0]).appendChild(e)}var Pt=function(){var e=0,t=null;return{add:function(n){e==0&&(t=jt())&&(Mt(t,n),Nt(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},Ft=function(){var e=Pt();return function(t,n){f.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},It=function(){var e=Ft();return function(t){var n=t.styles,r=t.dynamic;return e(n,r),null}},Lt={left:0,top:0,right:0,gap:0},Rt=function(e){return parseInt(e||``,10)||0},zt=function(e){var t=window.getComputedStyle(document.body),n=t[e===`padding`?`paddingLeft`:`marginLeft`],r=t[e===`padding`?`paddingTop`:`marginTop`],i=t[e===`padding`?`paddingRight`:`marginRight`];return[Rt(n),Rt(r),Rt(i)]},Bt=function(e){if(e===void 0&&(e=`margin`),typeof window>`u`)return Lt;var t=zt(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},Vt=It(),B=`data-scroll-locked`,Ht=function(e,t,n,r){var i=e.left,a=e.top,o=e.right,s=e.gap;return n===void 0&&(n=`margin`),`
2
+ .${mt} {
3
+ overflow: hidden ${r};
4
+ padding-right: ${s}px ${r};
5
+ }
6
+ body[${B}] {
7
+ overflow: hidden ${r};
8
+ overscroll-behavior: contain;
9
+ ${[t&&`position: relative ${r};`,n===`margin`&&`
10
+ padding-left: ${i}px;
11
+ padding-top: ${a}px;
12
+ padding-right: ${o}px;
13
+ margin-left:0;
14
+ margin-top:0;
15
+ margin-right: ${s}px ${r};
16
+ `,n===`padding`&&`padding-right: ${s}px ${r};`].filter(Boolean).join(``)}
17
+ }
18
+
19
+ .${ft} {
20
+ right: ${s}px ${r};
21
+ }
22
+
23
+ .${pt} {
24
+ margin-right: ${s}px ${r};
25
+ }
26
+
27
+ .${ft} .${ft} {
28
+ right: 0 ${r};
29
+ }
30
+
31
+ .${pt} .${pt} {
32
+ margin-right: 0 ${r};
33
+ }
34
+
35
+ body[${B}] {
36
+ ${ht}: ${s}px;
37
+ }
38
+ `},Ut=function(){var e=parseInt(document.body.getAttribute(`data-scroll-locked`)||`0`,10);return isFinite(e)?e:0},Wt=function(){f.useEffect(function(){return document.body.setAttribute(B,(Ut()+1).toString()),function(){var e=Ut()-1;e<=0?document.body.removeAttribute(B):document.body.setAttribute(B,e.toString())}},[])},Gt=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,i=r===void 0?`margin`:r;Wt();var a=f.useMemo(function(){return Bt(i)},[i]);return f.createElement(Vt,{styles:Ht(a,!t,i,n?``:`!important`)})},Kt=!1;if(typeof window<`u`)try{var qt=Object.defineProperty({},"passive",{get:function(){return Kt=!0,!0}});window.addEventListener(`test`,qt,qt),window.removeEventListener(`test`,qt,qt)}catch{Kt=!1}var V=Kt?{passive:!1}:!1,Jt=function(e){return e.tagName===`TEXTAREA`},Yt=function(e,t){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[t]!==`hidden`&&!(n.overflowY===n.overflowX&&!Jt(e)&&n[t]===`visible`)},Xt=function(e){return Yt(e,`overflowY`)},Zt=function(e){return Yt(e,`overflowX`)},Qt=function(e,t){var n=t.ownerDocument,r=t;do{if(typeof ShadowRoot<`u`&&r instanceof ShadowRoot&&(r=r.host),tn(e,r)){var i=nn(e,r);if(i[1]>i[2])return!0}r=r.parentNode}while(r&&r!==n.body);return!1},$t=function(e){return[e.scrollTop,e.scrollHeight,e.clientHeight]},en=function(e){return[e.scrollLeft,e.scrollWidth,e.clientWidth]},tn=function(e,t){return e===`v`?Xt(t):Zt(t)},nn=function(e,t){return e===`v`?$t(t):en(t)},rn=function(e,t){return e===`h`&&t===`rtl`?-1:1},an=function(e,t,n,r,i){var a=rn(e,window.getComputedStyle(t).direction),o=a*r,s=n.target,c=t.contains(s),l=!1,u=o>0,d=0,f=0;do{if(!s)break;var p=nn(e,s),m=p[0],h=p[1]-p[2]-a*m;(m||h)&&tn(e,s)&&(d+=h,f+=m);var g=s.parentNode;s=g&&g.nodeType===Node.DOCUMENT_FRAGMENT_NODE?g.host:g}while(!c&&s!==document.body||c&&(t.contains(s)||t===s));return(u&&(i&&Math.abs(d)<1||!i&&o>d)||!u&&(i&&Math.abs(f)<1||!i&&-o>f))&&(l=!0),l},on=function(e){return`changedTouches`in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},sn=function(e){return[e.deltaX,e.deltaY]},cn=function(e){return e&&`current`in e?e.current:e},ln=function(e,t){return e[0]===t[0]&&e[1]===t[1]},un=function(e){return`
39
+ .block-interactivity-${e} {pointer-events: none;}
40
+ .allow-interactivity-${e} {pointer-events: all;}
41
+ `},dn=0,H=[];function fn(e){var t=f.useRef([]),n=f.useRef([0,0]),r=f.useRef(),i=f.useState(dn++)[0],a=f.useState(It)[0],o=f.useRef(e);f.useEffect(function(){o.current=e},[e]),f.useEffect(function(){if(e.inert){document.body.classList.add(`block-interactivity-${i}`);var t=dt([e.lockRef.current],(e.shards||[]).map(cn),!0).filter(Boolean);return t.forEach(function(e){return e.classList.add(`allow-interactivity-${i}`)}),function(){document.body.classList.remove(`block-interactivity-${i}`),t.forEach(function(e){return e.classList.remove(`allow-interactivity-${i}`)})}}},[e.inert,e.lockRef.current,e.shards]);var s=f.useCallback(function(e,t){if(`touches`in e&&e.touches.length===2||e.type===`wheel`&&e.ctrlKey)return!o.current.allowPinchZoom;var i=on(e),a=n.current,s=`deltaX`in e?e.deltaX:a[0]-i[0],c=`deltaY`in e?e.deltaY:a[1]-i[1],l,u=e.target,d=Math.abs(s)>Math.abs(c)?`h`:`v`;if(`touches`in e&&d===`h`&&u.type===`range`)return!1;var f=window.getSelection(),p=f&&f.anchorNode;if(p&&(p===u||p.contains(u)))return!1;var m=Qt(d,u);if(!m)return!0;if(m?l=d:(l=d===`v`?`h`:`v`,m=Qt(d,u)),!m)return!1;if(!r.current&&`changedTouches`in e&&(s||c)&&(r.current=l),!l)return!0;var h=r.current||l;return an(h,t,e,h===`h`?s:c,!0)},[]),c=f.useCallback(function(e){var n=e;if(!(!H.length||H[H.length-1]!==a)){var r=`deltaY`in n?sn(n):on(n),i=t.current.filter(function(e){return e.name===n.type&&(e.target===n.target||n.target===e.shadowParent)&&ln(e.delta,r)})[0];if(i&&i.should){n.cancelable&&n.preventDefault();return}if(!i){var c=(o.current.shards||[]).map(cn).filter(Boolean).filter(function(e){return e.contains(n.target)});(c.length>0?s(n,c[0]):!o.current.noIsolation)&&n.cancelable&&n.preventDefault()}}},[]),l=f.useCallback(function(e,n,r,i){var a={name:e,delta:n,target:r,should:i,shadowParent:pn(r)};t.current.push(a),setTimeout(function(){t.current=t.current.filter(function(e){return e!==a})},1)},[]),u=f.useCallback(function(e){n.current=on(e),r.current=void 0},[]),d=f.useCallback(function(t){l(t.type,sn(t),t.target,s(t,e.lockRef.current))},[]),p=f.useCallback(function(t){l(t.type,on(t),t.target,s(t,e.lockRef.current))},[]);f.useEffect(function(){return H.push(a),e.setCallbacks({onScrollCapture:d,onWheelCapture:d,onTouchMoveCapture:p}),document.addEventListener(`wheel`,c,V),document.addEventListener(`touchmove`,c,V),document.addEventListener(`touchstart`,u,V),function(){H=H.filter(function(e){return e!==a}),document.removeEventListener(`wheel`,c,V),document.removeEventListener(`touchmove`,c,V),document.removeEventListener(`touchstart`,u,V)}},[]);var m=e.removeScrollBar,h=e.inert;return f.createElement(f.Fragment,null,h?f.createElement(a,{styles:un(i)}):null,m?f.createElement(Gt,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function pn(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}var mn=Tt(Et,fn),hn=f.forwardRef(function(e,t){return f.createElement(Ot,z({},e,{ref:t,sideCar:mn}))});hn.classNames=Ot.classNames;var gn=function(e){return typeof document>`u`?null:(Array.isArray(e)?e[0]:e).ownerDocument.body},U=new WeakMap,_n=new WeakMap,vn={},yn=0,bn=function(e){return e&&(e.host||bn(e.parentNode))},xn=function(e,t){return t.map(function(t){if(e.contains(t))return t;var n=bn(t);return n&&e.contains(n)?n:(console.error(`aria-hidden`,t,`in not contained inside`,e,`. Doing nothing`),null)}).filter(function(e){return!!e})},Sn=function(e,t,n,r){var i=xn(t,Array.isArray(e)?e:[e]);vn[n]||(vn[n]=new WeakMap);var a=vn[n],o=[],s=new Set,c=new Set(i),l=function(e){!e||s.has(e)||(s.add(e),l(e.parentNode))};i.forEach(l);var u=function(e){!e||c.has(e)||Array.prototype.forEach.call(e.children,function(e){if(s.has(e))u(e);else try{var t=e.getAttribute(r),i=t!==null&&t!==`false`,c=(U.get(e)||0)+1,l=(a.get(e)||0)+1;U.set(e,c),a.set(e,l),o.push(e),c===1&&i&&_n.set(e,!0),l===1&&e.setAttribute(n,`true`),i||e.setAttribute(r,`true`)}catch(t){console.error(`aria-hidden: cannot operate on `,e,t)}})};return u(t),s.clear(),yn++,function(){o.forEach(function(e){var t=U.get(e)-1,i=a.get(e)-1;U.set(e,t),a.set(e,i),t||(_n.has(e)||e.removeAttribute(r),_n.delete(e)),i||e.removeAttribute(n)}),yn--,yn||(U=new WeakMap,U=new WeakMap,_n=new WeakMap,vn={})}},Cn=function(e,t,n){n===void 0&&(n=`data-aria-hidden`);var r=Array.from(Array.isArray(e)?e:[e]),i=t||gn(e);return i?(r.push.apply(r,Array.from(i.querySelectorAll(`[aria-live], script`))),Sn(r,i,n,`aria-hidden`)):function(){return null}},wn=`Dialog`,[Tn,En]=te(wn),[Dn,W]=Tn(wn),On=e=>{let{__scopeDialog:t,children:n,open:r,defaultOpen:i,onOpenChange:a,modal:o=!0}=e,s=f.useRef(null),c=f.useRef(null),[l,u]=oe({prop:r,defaultProp:i??!1,onChange:a,caller:wn});return(0,M.jsx)(Dn,{scope:t,triggerRef:s,contentRef:c,contentId:P(),titleId:P(),descriptionId:P(),open:l,onOpenChange:u,onOpenToggle:f.useCallback(()=>u(e=>!e),[u]),modal:o,children:n})};On.displayName=wn;var kn=`DialogTrigger`,An=f.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=W(kn,n),a=j(t,i.triggerRef);return(0,M.jsx)(F.button,{type:`button`,"aria-haspopup":`dialog`,"aria-expanded":i.open,"aria-controls":i.open?i.contentId:void 0,"data-state":Yn(i.open),...r,ref:a,onClick:O(e.onClick,i.onOpenToggle)})});An.displayName=kn;var jn=`DialogPortal`,[Mn,Nn]=Tn(jn,{forceMount:void 0}),Pn=e=>{let{__scopeDialog:t,forceMount:n,children:r,container:i}=e,a=W(jn,t);return(0,M.jsx)(Mn,{scope:t,forceMount:n,children:f.Children.map(r,e=>(0,M.jsx)(tt,{present:n||a.open,children:(0,M.jsx)($e,{asChild:!0,container:i,children:e})}))})};Pn.displayName=jn;var Fn=`DialogOverlay`,In=f.forwardRef((e,t)=>{let n=Nn(Fn,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=W(Fn,e.__scopeDialog);return a.modal?(0,M.jsx)(tt,{present:r||a.open,children:(0,M.jsx)(Rn,{...i,ref:t})}):null});In.displayName=Fn;var Ln=ue(`DialogOverlay.RemoveScroll`),Rn=f.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=W(Fn,n);return(0,M.jsx)(hn,{as:Ln,allowPinchZoom:!0,shards:[i.contentRef],children:(0,M.jsx)(F.div,{"data-state":Yn(i.open),...r,ref:t,style:{pointerEvents:`auto`,...r.style}})})}),G=`DialogContent`,zn=f.forwardRef((e,t)=>{let n=Nn(G,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=W(G,e.__scopeDialog);return(0,M.jsx)(tt,{present:r||a.open,children:a.modal?(0,M.jsx)(Bn,{...i,ref:t}):(0,M.jsx)(Vn,{...i,ref:t})})});zn.displayName=G;var Bn=f.forwardRef((e,t)=>{let n=W(G,e.__scopeDialog),r=f.useRef(null),i=j(t,n.contentRef,r);return f.useEffect(()=>{let e=r.current;if(e)return Cn(e)},[]),(0,M.jsx)(Hn,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:n.open,onCloseAutoFocus:O(e.onCloseAutoFocus,e=>{e.preventDefault(),n.triggerRef.current?.focus()}),onPointerDownOutside:O(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0;(t.button===2||n)&&e.preventDefault()}),onFocusOutside:O(e.onFocusOutside,e=>e.preventDefault())})}),Vn=f.forwardRef((e,t)=>{let n=W(G,e.__scopeDialog),r=f.useRef(!1),i=f.useRef(!1);return(0,M.jsx)(Hn,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(r.current||n.triggerRef.current?.focus(),t.preventDefault()),r.current=!1,i.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(r.current=!0,t.detail.originalEvent.type===`pointerdown`&&(i.current=!0));let a=t.target;n.triggerRef.current?.contains(a)&&t.preventDefault(),t.detail.originalEvent.type===`focusin`&&i.current&&t.preventDefault()}})}),Hn=f.forwardRef((e,t)=>{let{__scopeDialog:n,trapFocus:r,onOpenAutoFocus:i,onCloseAutoFocus:a,...o}=e,s=W(G,n),c=f.useRef(null),l=j(t,c);return ct(),(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(Ve,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:i,onUnmountAutoFocus:a,children:(0,M.jsx)(Ae,{role:`dialog`,id:s.contentId,"aria-describedby":s.descriptionId,"aria-labelledby":s.titleId,"data-state":Yn(s.open),...o,ref:l,onDismiss:()=>s.onOpenChange(!1)})}),(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)($n,{titleId:s.titleId}),(0,M.jsx)(tr,{contentRef:c,descriptionId:s.descriptionId})]})]})}),Un=`DialogTitle`,Wn=f.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=W(Un,n);return(0,M.jsx)(F.h2,{id:i.titleId,...r,ref:t})});Wn.displayName=Un;var Gn=`DialogDescription`,Kn=f.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=W(Gn,n);return(0,M.jsx)(F.p,{id:i.descriptionId,...r,ref:t})});Kn.displayName=Gn;var qn=`DialogClose`,Jn=f.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=W(qn,n);return(0,M.jsx)(F.button,{type:`button`,...r,ref:t,onClick:O(e.onClick,()=>i.onOpenChange(!1))})});Jn.displayName=qn;function Yn(e){return e?`open`:`closed`}var Xn=`DialogTitleWarning`,[Zn,Qn]=ee(Xn,{contentName:G,titleName:Un,docsSlug:`dialog`}),$n=({titleId:e})=>{let t=Qn(Xn),n=`\`${t.contentName}\` requires a \`${t.titleName}\` for the component to be accessible for screen reader users.
42
+
43
+ If you want to hide the \`${t.titleName}\`, you can wrap it with our VisuallyHidden component.
44
+
45
+ For more information, see https://radix-ui.com/primitives/docs/components/${t.docsSlug}`;return f.useEffect(()=>{e&&(document.getElementById(e)||console.error(n))},[n,e]),null},er=`DialogDescriptionWarning`,tr=({contentRef:e,descriptionId:t})=>{let n=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${Qn(er).contentName}}.`;return f.useEffect(()=>{let r=e.current?.getAttribute(`aria-describedby`);t&&r&&(document.getElementById(t)||console.warn(n))},[n,e,t]),null},nr=On,rr=Pn,ir=In,ar=zn,K=`[cmdk-group=""]`,or=`[cmdk-group-items=""]`,sr=`[cmdk-group-heading=""]`,cr=`[cmdk-item=""]`,lr=`${cr}:not([aria-disabled="true"])`,ur=`cmdk-item-select`,q=`data-value`,dr=(e,t,n)=>D(e,t,n),fr=f.createContext(void 0),pr=()=>f.useContext(fr),mr=f.createContext(void 0),hr=()=>f.useContext(mr),gr=f.createContext(void 0),_r=f.forwardRef((e,t)=>{let n=X(()=>({search:``,value:e.value??e.defaultValue??``,selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}})),r=X(()=>new Set),i=X(()=>new Map),a=X(()=>new Map),o=X(()=>new Set),s=Or(e),{label:c,children:l,value:u,onValueChange:d,filter:p,shouldFilter:m,loop:h,disablePointerSelection:g=!1,vimBindings:_=!0,...v}=e,y=P(),b=P(),x=P(),S=f.useRef(null),C=Ar();Y(()=>{if(u!==void 0){let e=u.trim();n.current.value=e,w.emit()}},[u]),Y(()=>{C(6,A)},[]);let w=f.useMemo(()=>({subscribe:e=>(o.current.add(e),()=>o.current.delete(e)),snapshot:()=>n.current,setState:(e,t,r)=>{var i,a,o;if(!Object.is(n.current[e],t)){if(n.current[e]=t,e===`search`)k(),D(),C(1,O);else if(e===`value`){if(document.activeElement.hasAttribute(`cmdk-input`)||document.activeElement.hasAttribute(`cmdk-root`)){let e=document.getElementById(x);e?e.focus():(i=document.getElementById(y))==null||i.focus()}if(C(7,()=>{n.current.selectedItemId=j()?.id,w.emit()}),r||C(5,A),s.current?.value!==void 0){let e=t??``;(o=(a=s.current).onValueChange)==null||o.call(a,e);return}}w.emit()}},emit:()=>{o.current.forEach(e=>e())}}),[]),T=f.useMemo(()=>({value:(e,t,r)=>{t!==a.current.get(e)?.value&&(a.current.set(e,{value:t,keywords:r}),n.current.filtered.items.set(e,E(t,r)),C(2,()=>{D(),w.emit()}))},item:(e,t)=>(r.current.add(e),t&&(i.current.has(t)?i.current.get(t).add(e):i.current.set(t,new Set([e]))),C(3,()=>{k(),D(),n.current.value||O(),w.emit()}),()=>{a.current.delete(e),r.current.delete(e),n.current.filtered.items.delete(e);let t=j();C(4,()=>{k(),t?.getAttribute(`id`)===e&&O(),w.emit()})}),group:e=>(i.current.has(e)||i.current.set(e,new Set),()=>{a.current.delete(e),i.current.delete(e)}),filter:()=>s.current.shouldFilter,label:c||e[`aria-label`],getDisablePointerSelection:()=>s.current.disablePointerSelection,listId:y,inputId:x,labelId:b,listInnerRef:S}),[]);function E(e,t){let r=s.current?.filter??dr;return e?r(e,n.current.search,t):0}function D(){if(!n.current.search||s.current.shouldFilter===!1)return;let e=n.current.filtered.items,t=[];n.current.filtered.groups.forEach(n=>{let r=i.current.get(n),a=0;r.forEach(t=>{let n=e.get(t);a=Math.max(n,a)}),t.push([n,a])});let r=S.current;M().sort((t,n)=>{let r=t.getAttribute(`id`),i=n.getAttribute(`id`);return(e.get(i)??0)-(e.get(r)??0)}).forEach(e=>{let t=e.closest(or);t?t.appendChild(e.parentElement===t?e:e.closest(`${or} > *`)):r.appendChild(e.parentElement===r?e:e.closest(`${or} > *`))}),t.sort((e,t)=>t[1]-e[1]).forEach(e=>{let t=S.current?.querySelector(`${K}[${q}="${encodeURIComponent(e[0])}"]`);t?.parentElement.appendChild(t)})}function O(){let e=M().find(e=>e.getAttribute(`aria-disabled`)!==`true`)?.getAttribute(q);w.setState(`value`,e||void 0)}function k(){if(!n.current.search||s.current.shouldFilter===!1){n.current.filtered.count=r.current.size;return}n.current.filtered.groups=new Set;let e=0;for(let t of r.current){let r=E(a.current.get(t)?.value??``,a.current.get(t)?.keywords??[]);n.current.filtered.items.set(t,r),r>0&&e++}for(let[e,t]of i.current)for(let r of t)if(n.current.filtered.items.get(r)>0){n.current.filtered.groups.add(e);break}n.current.filtered.count=e}function A(){var e;let t=j();t&&(t.parentElement?.firstChild===t&&((e=t.closest(K)?.querySelector(sr))==null||e.scrollIntoView({block:`nearest`})),t.scrollIntoView({block:`nearest`}))}function j(){return S.current?.querySelector(`${cr}[aria-selected="true"]`)}function M(){return Array.from(S.current?.querySelectorAll(lr)||[])}function ee(e){let t=M()[e];t&&w.setState(`value`,t.getAttribute(q))}function te(e){var t;let n=j(),r=M(),i=r.findIndex(e=>e===n),a=r[i+e];(t=s.current)!=null&&t.loop&&(a=i+e<0?r[r.length-1]:i+e===r.length?r[0]:r[i+e]),a&&w.setState(`value`,a.getAttribute(q))}function ne(e){let t=j()?.closest(K),n;for(;t&&!n;)t=e>0?Er(t,K):Dr(t,K),n=t?.querySelector(lr);n?w.setState(`value`,n.getAttribute(q)):te(e)}let N=()=>ee(M().length-1),re=e=>{e.preventDefault(),e.metaKey?N():e.altKey?ne(1):te(1)},ie=e=>{e.preventDefault(),e.metaKey?ee(0):e.altKey?ne(-1):te(-1)};return f.createElement(F.div,{ref:t,tabIndex:-1,...v,"cmdk-root":``,onKeyDown:e=>{var t;(t=v.onKeyDown)==null||t.call(v,e);let n=e.nativeEvent.isComposing||e.keyCode===229;if(!(e.defaultPrevented||n))switch(e.key){case`n`:case`j`:_&&e.ctrlKey&&re(e);break;case`ArrowDown`:re(e);break;case`p`:case`k`:_&&e.ctrlKey&&ie(e);break;case`ArrowUp`:ie(e);break;case`Home`:e.preventDefault(),ee(0);break;case`End`:e.preventDefault(),N();break;case`Enter`:{e.preventDefault();let t=j();if(t){let e=new Event(ur);t.dispatchEvent(e)}}}}},f.createElement(`label`,{"cmdk-label":``,htmlFor:T.inputId,id:T.labelId,style:Nr},c),Mr(e,e=>f.createElement(mr.Provider,{value:w},f.createElement(fr.Provider,{value:T},e))))}),vr=f.forwardRef((e,t)=>{let n=P(),r=f.useRef(null),i=f.useContext(gr),a=pr(),o=Or(e),s=o.current?.forceMount??i?.forceMount;Y(()=>{if(!s)return a.item(n,i?.id)},[s]);let c=kr(n,r,[e.value,e.children,r],e.keywords),l=hr(),u=Z(e=>e.value&&e.value===c.current),d=Z(e=>s||a.filter()===!1?!0:e.search?e.filtered.items.get(n)>0:!0);f.useEffect(()=>{let t=r.current;if(!(!t||e.disabled))return t.addEventListener(ur,p),()=>t.removeEventListener(ur,p)},[d,e.onSelect,e.disabled]);function p(){var e,t;m(),(t=(e=o.current).onSelect)==null||t.call(e,c.current)}function m(){l.setState(`value`,c.current,!0)}if(!d)return null;let{disabled:h,value:g,onSelect:_,forceMount:v,keywords:y,...b}=e;return f.createElement(F.div,{ref:A(r,t),...b,id:n,"cmdk-item":``,role:`option`,"aria-disabled":!!h,"aria-selected":!!u,"data-disabled":!!h,"data-selected":!!u,onPointerMove:h||a.getDisablePointerSelection()?void 0:m,onClick:h?void 0:p},e.children)}),yr=f.forwardRef((e,t)=>{let{heading:n,children:r,forceMount:i,...a}=e,o=P(),s=f.useRef(null),c=f.useRef(null),l=P(),u=pr(),d=Z(e=>i||u.filter()===!1?!0:e.search?e.filtered.groups.has(o):!0);Y(()=>u.group(o),[]),kr(o,s,[e.value,e.heading,c]);let p=f.useMemo(()=>({id:o,forceMount:i}),[i]);return f.createElement(F.div,{ref:A(s,t),...a,"cmdk-group":``,role:`presentation`,hidden:d?void 0:!0},n&&f.createElement(`div`,{ref:c,"cmdk-group-heading":``,"aria-hidden":!0,id:l},n),Mr(e,e=>f.createElement(`div`,{"cmdk-group-items":``,role:`group`,"aria-labelledby":n?l:void 0},f.createElement(gr.Provider,{value:p},e))))}),br=f.forwardRef((e,t)=>{let{alwaysRender:n,...r}=e,i=f.useRef(null),a=Z(e=>!e.search);return!n&&!a?null:f.createElement(F.div,{ref:A(i,t),...r,"cmdk-separator":``,role:`separator`})}),xr=f.forwardRef((e,t)=>{let{onValueChange:n,...r}=e,i=e.value!=null,a=hr(),o=Z(e=>e.search),s=Z(e=>e.selectedItemId),c=pr();return f.useEffect(()=>{e.value!=null&&a.setState(`search`,e.value)},[e.value]),f.createElement(F.input,{ref:t,...r,"cmdk-input":``,autoComplete:`off`,autoCorrect:`off`,spellCheck:!1,"aria-autocomplete":`list`,role:`combobox`,"aria-expanded":!0,"aria-controls":c.listId,"aria-labelledby":c.labelId,"aria-activedescendant":s,id:c.inputId,type:`text`,value:i?e.value:o,onChange:e=>{i||a.setState(`search`,e.target.value),n?.(e.target.value)}})}),Sr=f.forwardRef((e,t)=>{let{children:n,label:r=`Suggestions`,...i}=e,a=f.useRef(null),o=f.useRef(null),s=Z(e=>e.selectedItemId),c=pr();return f.useEffect(()=>{if(o.current&&a.current){let e=o.current,t=a.current,n,r=new ResizeObserver(()=>{n=requestAnimationFrame(()=>{let n=e.offsetHeight;t.style.setProperty(`--cmdk-list-height`,n.toFixed(1)+`px`)})});return r.observe(e),()=>{cancelAnimationFrame(n),r.unobserve(e)}}},[]),f.createElement(F.div,{ref:A(a,t),...i,"cmdk-list":``,role:`listbox`,tabIndex:-1,"aria-activedescendant":s,"aria-label":r,id:c.listId},Mr(e,e=>f.createElement(`div`,{ref:A(o,c.listInnerRef),"cmdk-list-sizer":``},e)))}),Cr=f.forwardRef((e,t)=>{let{open:n,onOpenChange:r,overlayClassName:i,contentClassName:a,container:o,...s}=e;return f.createElement(nr,{open:n,onOpenChange:r},f.createElement(rr,{container:o},f.createElement(ir,{"cmdk-overlay":``,className:i}),f.createElement(ar,{"aria-label":e.label,"cmdk-dialog":``,className:a},f.createElement(_r,{ref:t,...s}))))}),wr=f.forwardRef((e,t)=>Z(e=>e.filtered.count===0)?f.createElement(F.div,{ref:t,...e,"cmdk-empty":``,role:`presentation`}):null),Tr=f.forwardRef((e,t)=>{let{progress:n,children:r,label:i=`Loading...`,...a}=e;return f.createElement(F.div,{ref:t,...a,"cmdk-loading":``,role:`progressbar`,"aria-valuenow":n,"aria-valuemin":0,"aria-valuemax":100,"aria-label":i},Mr(e,e=>f.createElement(`div`,{"aria-hidden":!0},e)))}),J=Object.assign(_r,{List:Sr,Item:vr,Input:xr,Group:yr,Separator:br,Dialog:Cr,Empty:wr,Loading:Tr});function Er(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return n;n=n.nextElementSibling}}function Dr(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return n;n=n.previousElementSibling}}function Or(e){let t=f.useRef(e);return Y(()=>{t.current=e}),t}var Y=typeof window>`u`?f.useEffect:f.useLayoutEffect;function X(e){let t=f.useRef();return t.current===void 0&&(t.current=e()),t}function Z(e){let t=hr(),n=()=>e(t.snapshot());return f.useSyncExternalStore(t.subscribe,n,n)}function kr(e,t,n,r=[]){let i=f.useRef(),a=pr();return Y(()=>{var o;let s=(()=>{for(let e of n){if(typeof e==`string`)return e.trim();if(typeof e==`object`&&`current`in e)return e.current?e.current.textContent?.trim():i.current}})(),c=r.map(e=>e.trim());a.value(e,s,c),(o=t.current)==null||o.setAttribute(q,s),i.current=s}),i}var Ar=()=>{let[e,t]=f.useState(),n=X(()=>new Map);return Y(()=>{n.current.forEach(e=>e()),n.current=new Map},[e]),(e,r)=>{n.current.set(e,r),t({})}};function jr(e){let t=e.type;return typeof t==`function`?t(e.props):`render`in t?t.render(e.props):e}function Mr({asChild:e,children:t},n){return e&&f.isValidElement(t)?f.cloneElement(jr(t),{ref:t.ref},n(t.props.children)):n(t)}var Nr={position:`absolute`,width:`1px`,height:`1px`,padding:`0`,margin:`-1px`,overflow:`hidden`,clip:`rect(0, 0, 0, 0)`,whiteSpace:`nowrap`,borderWidth:`0`};function Pr({open:e,mode:t=`all`,onClose:n,onRunWorkflow:r}){let[p,m]=(0,f.useState)(``),h=o(),g=c(e=>e.openPreviewPath),_=c(e=>e.openSearch),v=d(e=>e.history),{tabs:y,activeId:b,setActive:x,create:S}=u(),C=s({queryKey:[`files`],queryFn:l.listFiles,enabled:e&&t===`all`,staleTime:3e4}),w=s({queryKey:[`workflows`],queryFn:l.listWorkflows,enabled:e&&t===`all`,staleTime:1e4}),T=s({queryKey:[`history`],queryFn:l.history,enabled:e,staleTime:15e3}),E=(0,f.useMemo)(()=>{let e=new Set,t=[];for(let n of[...v,...T.data?.commands??[]]){let r=n.trim();r&&!e.has(r)&&(e.add(r),t.push(r))}return t},[v,T.data]),D=(0,f.useRef)(!1);if((0,f.useEffect)(()=>{e||m(``)},[e]),!e)return null;let O=t===`history`,k=e=>{e(),n()},A=e=>a.get(b)?.sendInput(`\x15${e}\r`),j=e=>a.get(b)?.sendInput(`\x15${e}`);return(0,M.jsx)(i,{onClose:n,align:`top`,children:(0,M.jsxs)(J,{label:`Command palette`,className:`w-full max-w-xl overflow-hidden rounded-[var(--radius-dialog)] border border-border bg-elevated`,style:{boxShadow:`var(--shadow-dialog)`},onClick:e=>e.stopPropagation(),loop:!0,children:[(0,M.jsx)(J.Input,{autoFocus:!0,value:p,onValueChange:m,onKeyDown:e=>D.current=e.altKey,placeholder:O?`Run a recent command… (Alt+Enter inserts without running)`:`Jump to file, run a command, search…`,className:`w-full border-b border-border bg-transparent px-4 py-3 text-body text-ink-100 placeholder:text-ink-500 focus:outline-none`}),(0,M.jsxs)(J.List,{className:`max-h-[50vh] overflow-auto p-1.5`,children:[(0,M.jsx)(J.Empty,{className:`px-3 py-6 text-center text-ui text-ink-500`,children:`no matches`}),!O&&p.trim().length>=2&&(0,M.jsx)(J.Group,{heading:`Search`,children:(0,M.jsxs)(Q,{onSelect:()=>k(()=>_(p.trim())),children:[(0,M.jsx)($,{children:`search`}),` "`,p.trim(),`" in workspace`]})}),E.length>0&&(0,M.jsx)(J.Group,{heading:O?`Recent commands`:`History`,children:E.slice(0,O?200:8).map((e,t)=>(0,M.jsxs)(Q,{value:`history ${e}`,onSelect:()=>k(()=>D.current?j(e):A(e)),children:[(0,M.jsx)($,{children:`run`}),` `,e]},`h-${t}`))}),!O&&(w.data?.workflows.length??0)>0&&(0,M.jsx)(J.Group,{heading:`Workflows`,children:w.data.workflows.map(e=>(0,M.jsxs)(Q,{value:`workflow ${e.name} ${e.command}`,onSelect:()=>k(()=>r(e)),children:[(0,M.jsx)($,{children:`flow`}),` `,e.name,(0,M.jsx)(`span`,{className:`ml-2 truncate text-ink-500`,children:e.description??e.command})]},`w-${e.name}`))}),!O&&(0,M.jsx)(J.Group,{heading:`Files`,children:(C.data?.files??[]).slice(0,500).map(e=>(0,M.jsxs)(Q,{value:`file ${e}`,onSelect:()=>k(()=>g(e)),children:[(0,M.jsx)($,{children:`file`}),` `,e]},`f-${e}`))}),!O&&(0,M.jsxs)(J.Group,{heading:`Sessions`,children:[y.map(e=>(0,M.jsxs)(Q,{value:`session ${e.title} ${e.id}`,onSelect:()=>k(()=>x(e.id)),children:[(0,M.jsx)($,{children:`term`}),` `,e.title,e.id===b&&(0,M.jsx)(`span`,{className:`ml-2 text-accent-dim`,children:`active`})]},`s-${e.id}`)),(0,M.jsxs)(Q,{value:`new terminal session`,onSelect:()=>k(()=>void S()),children:[(0,M.jsx)($,{children:`term`}),` New terminal`]})]}),!O&&(0,M.jsxs)(J.Group,{heading:`Workspace`,children:[(0,M.jsxs)(Q,{value:`switch vault workspace open folder`,onSelect:()=>k(()=>window.dispatchEvent(new Event(`zuzuu-web:open-vault-picker`))),children:[(0,M.jsx)($,{children:`vault`}),` Switch vault… `,(0,M.jsx)(`span`,{className:`ml-2 text-ink-500`,children:`⌘⇧O`})]}),(0,M.jsxs)(Q,{value:`save session recording cast asciicast`,onSelect:()=>k(()=>window.dispatchEvent(new Event(`zuzuu-web:save-recording`))),children:[(0,M.jsx)($,{children:`rec`}),` Save session recording (.cast)`]}),(0,M.jsxs)(Q,{value:`refresh files reload tree`,onSelect:()=>k(()=>{h.invalidateQueries({queryKey:[`dir`]}),h.invalidateQueries({queryKey:[`files`]})}),children:[(0,M.jsx)($,{children:`fs`}),` Refresh files`]})]})]})]})})}function Q({children:e,value:t,onSelect:n}){return(0,M.jsx)(J.Item,{value:t,onSelect:n,className:`flex cursor-pointer items-center gap-1 truncate rounded-[var(--radius-sm)] px-2 py-1.5 text-ui text-ink-100 data-[selected=true]:bg-hover`,children:e})}function $({children:e}){return(0,M.jsx)(`span`,{className:`mr-1 shrink-0 rounded-[var(--radius-sm)] bg-hover px-1.5 py-0.5 text-meta uppercase tracking-wide text-ink-400`,children:e})}export{Pr as CommandPalette};
@@ -0,0 +1 @@
1
+ import{t as e}from"./react-vendor-CCIEwYL0.js";import{h as t,m as n}from"./index-De6DWTZM.js";import{i as r,n as i,t as a}from"./monaco-setup-DM3A5_VI.js";var o=e();function s({path:e,name:s}){let{data:l,isLoading:u,error:d}=t({queryKey:[`git`,`diff`,e],queryFn:async()=>{let[t,r]=await Promise.all([n.gitDiff(e),n.readFile(e).catch(()=>``)]);return{original:t.original,working:r}}});return d?(0,o.jsx)(c,{danger:!0,children:d.message}):u||!l?(0,o.jsx)(c,{children:`loading diff…`}):(0,o.jsx)(r,{original:l.original,modified:l.working,language:i(s),theme:a(),options:{readOnly:!0,renderSideBySide:!0,fontFamily:`"JetBrains Mono Variable", ui-monospace, monospace`,fontSize:13,minimap:{enabled:!1},automaticLayout:!0}})}function c({children:e,danger:t}){return(0,o.jsx)(`div`,{className:`flex h-full items-center justify-center text-ui ${t?`text-danger`:`text-ink-500`}`,children:e})}export{s as DiffTab,s as default};