@rubytech/create-maxy-code 0.1.194 → 0.1.196

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 (84) hide show
  1. package/dist/__tests__/samba-provision.test.js +40 -16
  2. package/dist/index.js +37 -18
  3. package/dist/samba-provision.js +11 -8
  4. package/dist/uninstall.js +19 -3
  5. package/package.json +1 -1
  6. package/payload/platform/plugins/docs/references/access-control.md +4 -0
  7. package/payload/platform/plugins/docs/references/deployment.md +1 -19
  8. package/payload/platform/plugins/docs/references/samba.md +80 -0
  9. package/payload/platform/plugins/docs/references/troubleshooting.md +14 -0
  10. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +0 -3
  11. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  12. package/payload/platform/services/claude-session-manager/dist/http-server.js +0 -248
  13. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  14. package/payload/server/public/assets/AdminShell-DtABh34v.js +1 -0
  15. package/payload/server/public/assets/{Checkbox-G-kyM1P1.js → Checkbox-DTxJvyG7.js} +1 -1
  16. package/payload/server/public/assets/{admin-B-GDNkoN.js → admin-tKgLki8m.js} +1 -1
  17. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-BGgdXdD2.js → architectureDiagram-Q4EWVU46-CrQJbK3h.js} +1 -1
  18. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-DKWoL4Rp.js → blockDiagram-DXYQGD6D-BLCbhL8K.js} +1 -1
  19. package/payload/server/public/assets/{brand-MbpD2Bhr.css → brand-lZz3OVIE.css} +1 -1
  20. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-Ca6rs6F4.js → c4Diagram-AHTNJAMY-X34EilDe.js} +1 -1
  21. package/payload/server/public/assets/channel-ChZECiuj.js +1 -0
  22. package/payload/server/public/assets/{chunk-336JU56O-DcdMZImV.js → chunk-336JU56O-CeRuGBQ2.js} +2 -2
  23. package/payload/server/public/assets/{chunk-426QAEUC-9FSP-c1z.js → chunk-426QAEUC-CUZOrcMu.js} +1 -1
  24. package/payload/server/public/assets/{chunk-4TB4RGXK-CC1QpEvA.js → chunk-4TB4RGXK-CdrIHRcy.js} +1 -1
  25. package/payload/server/public/assets/{chunk-5FUZZQ4R-o1b70dEE.js → chunk-5FUZZQ4R-CenIbTIp.js} +1 -1
  26. package/payload/server/public/assets/{chunk-5PVQY5BW-C7VCYRz9.js → chunk-5PVQY5BW-DGfzIUel.js} +1 -1
  27. package/payload/server/public/assets/{chunk-EDXVE4YY-B8d5xj_4.js → chunk-EDXVE4YY-DSft5oIH.js} +1 -1
  28. package/payload/server/public/assets/{chunk-ENJZ2VHE-SSbr4n2X.js → chunk-ENJZ2VHE-Dn8FFfaI.js} +1 -1
  29. package/payload/server/public/assets/{chunk-ICPOFSXX-Cgj9YSpX.js → chunk-ICPOFSXX-JrwcKV7r.js} +1 -1
  30. package/payload/server/public/assets/{chunk-OYMX7WX6-DNEEcCqI.js → chunk-OYMX7WX6-C0X2fcAm.js} +1 -1
  31. package/payload/server/public/assets/{chunk-U2HBQHQK-DuaoK83q.js → chunk-U2HBQHQK-DPdLe-f5.js} +1 -1
  32. package/payload/server/public/assets/{chunk-X2U36JSP-CzMp0dpq.js → chunk-X2U36JSP-Bw8pKkFu.js} +1 -1
  33. package/payload/server/public/assets/{chunk-YZCP3GAM-B2wBDwSa.js → chunk-YZCP3GAM-DcAJR-EA.js} +1 -1
  34. package/payload/server/public/assets/{chunk-ZZ45TVLE-DkyF7XKW.js → chunk-ZZ45TVLE-DU374ZbR.js} +1 -1
  35. package/payload/server/public/assets/classDiagram-6PBFFD2Q-BpMBCYn6.js +1 -0
  36. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BU3HoIr1.js +1 -0
  37. package/payload/server/public/assets/clone-C3j5j6ku.js +1 -0
  38. package/payload/server/public/assets/{dagre-AGj1P0p4.js → dagre-DisbqNSB.js} +1 -1
  39. package/payload/server/public/assets/{dagre-KV5264BT-Cnrxcu6A.js → dagre-KV5264BT-D_n7R7V9.js} +1 -1
  40. package/payload/server/public/assets/{data-Bg0Frxt3.js → data-DwY26t_T.js} +1 -1
  41. package/payload/server/public/assets/{diagram-5BDNPKRD-gyFYSx73.js → diagram-5BDNPKRD-CJID_5OR.js} +1 -1
  42. package/payload/server/public/assets/{diagram-G4DWMVQ6-DFmZEv5C.js → diagram-G4DWMVQ6-ByepjvdE.js} +1 -1
  43. package/payload/server/public/assets/{diagram-MMDJMWI5-DA4qbuEW.js → diagram-MMDJMWI5-DTkAHPHE.js} +1 -1
  44. package/payload/server/public/assets/{diagram-TYMM5635-D4n-8gig.js → diagram-TYMM5635-CnVRa9NJ.js} +1 -1
  45. package/payload/server/public/assets/{erDiagram-SMLLAGMA-CigRMjF1.js → erDiagram-SMLLAGMA-CRAGu7nV.js} +1 -1
  46. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-ClS27acA.js → flowDiagram-DWJPFMVM-BJusdlRz.js} +1 -1
  47. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-Dr1IulXe.js → ganttDiagram-T4ZO3ILL-BFMOBBnF.js} +1 -1
  48. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-lwLibdPs.js → gitGraphDiagram-UUTBAWPF-CGWEzh7u.js} +1 -1
  49. package/payload/server/public/assets/{graph-CpozZ74I.js → graph-D-iQdRDk.js} +1 -1
  50. package/payload/server/public/assets/{graph-labels-C2y666R0.js → graph-labels-u2_3Eyfh.js} +1 -1
  51. package/payload/server/public/assets/{graphlib-DBvoJMrc.js → graphlib-DNUvypOi.js} +1 -1
  52. package/payload/server/public/assets/{infoDiagram-42DDH7IO-D4kReEIV.js → infoDiagram-42DDH7IO-CBDrnRTc.js} +1 -1
  53. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-BnteQRQ0.js → ishikawaDiagram-UXIWVN3A-C7NwSQo_.js} +1 -1
  54. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-CXu6hLyJ.js → journeyDiagram-VCZTEJTY-DSaP7A3F.js} +1 -1
  55. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-CGDW2jle.js → kanban-definition-6JOO6SKY-DmixHCD4.js} +1 -1
  56. package/payload/server/public/assets/{line-pdg5hxC3.js → line-CGGoTheL.js} +1 -1
  57. package/payload/server/public/assets/{mermaid-parser.core-o3lIIK3Z.js → mermaid-parser.core-BudFADW7.js} +1 -1
  58. package/payload/server/public/assets/{mermaid.core-DLR6Q3rV.js → mermaid.core-BBbdJxXY.js} +3 -3
  59. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-CH4cB0Dn.js → mindmap-definition-QFDTVHPH-CUiD9km1.js} +1 -1
  60. package/payload/server/public/assets/{pieDiagram-DEJITSTG-Ba4voL_Y.js → pieDiagram-DEJITSTG-BlAWpMr8.js} +1 -1
  61. package/payload/server/public/assets/{public-C8mil9h0.js → public-CjeEF2vf.js} +3 -3
  62. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-Cqn2xehe.js → quadrantDiagram-34T5L4WZ-CXmIwc4W.js} +1 -1
  63. package/payload/server/public/assets/{requirementDiagram-MS252O5E-DLfNx99l.js → requirementDiagram-MS252O5E-D_7_OeMC.js} +1 -1
  64. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-uck_V-cb.js → sankeyDiagram-XADWPNL6-BKm_PqzT.js} +1 -1
  65. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-DmQalqud.js → sequenceDiagram-FGHM5R23-CBSR0Zst.js} +1 -1
  66. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-DUdWeVRa.js → stateDiagram-FHFEXIEX-CHNpT69M.js} +1 -1
  67. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Kc8XO6yH.js +1 -0
  68. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-BgL1wM5n.js → timeline-definition-GMOUNBTQ-CxZoew5-.js} +1 -1
  69. package/payload/server/public/assets/{useSelectionMode-BLpVlOgm.js → useSelectionMode-CwxXQzEI.js} +1 -1
  70. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-7FHjIqPi.js → vennDiagram-DHZGUBPP-CKJdFDcG.js} +1 -1
  71. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-BHzo4V1J.js → wardleyDiagram-NUSXRM2D-C-XBcm-g.js} +1 -1
  72. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-DtuWhqwh.js → xychartDiagram-5P7HB3ND-Crb-ZtaP.js} +1 -1
  73. package/payload/server/public/data.html +5 -5
  74. package/payload/server/public/graph.html +6 -6
  75. package/payload/server/public/index.html +6 -6
  76. package/payload/server/public/public.html +5 -5
  77. package/payload/server/server.js +106 -38
  78. package/payload/server/public/assets/AdminShell-BoJbnn6d.js +0 -1
  79. package/payload/server/public/assets/channel-BwsV7WTV.js +0 -1
  80. package/payload/server/public/assets/classDiagram-6PBFFD2Q-CEWNfHVo.js +0 -1
  81. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BBjzRxux.js +0 -1
  82. package/payload/server/public/assets/clone-CXtSonnn.js +0 -1
  83. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-DNTpFwdy.js +0 -1
  84. /package/payload/server/public/assets/{brand-CYcGHhlS.js → brand-CpGp9OyK.js} +0 -0
@@ -5,12 +5,12 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/public-C8mil9h0.js"></script>
8
+ <script type="module" crossorigin src="/assets/public-CjeEF2vf.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-DD-I1_y5.js">
10
- <link rel="modulepreload" crossorigin href="/assets/brand-CYcGHhlS.js">
11
- <link rel="modulepreload" crossorigin href="/assets/useSelectionMode-BLpVlOgm.js">
12
- <link rel="modulepreload" crossorigin href="/assets/Checkbox-G-kyM1P1.js">
13
- <link rel="stylesheet" crossorigin href="/assets/brand-MbpD2Bhr.css">
10
+ <link rel="modulepreload" crossorigin href="/assets/brand-CpGp9OyK.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/useSelectionMode-CwxXQzEI.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/Checkbox-DTxJvyG7.js">
13
+ <link rel="stylesheet" crossorigin href="/assets/brand-lZz3OVIE.css">
14
14
  <link rel="stylesheet" href="/brand-defaults.css">
15
15
  </head>
16
16
  <body>
@@ -11801,12 +11801,79 @@ var RC_URL_RE = /https:\/\/claude\.ai\/code\/session_[A-Za-z0-9_-]+/;
11801
11801
  var SESSION_ID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\.jsonl$/i;
11802
11802
  var TITLE_MAX = 80;
11803
11803
  var app24 = new Hono();
11804
- function projectsDirForAccount(accountId) {
11805
- const configDir2 = process.env.CLAUDE_CONFIG_DIR;
11806
- if (!configDir2) return null;
11807
- const accountCwd = join13(DATA_ROOT, "accounts", accountId);
11808
- const slug = accountCwd.replace(/\//g, "-");
11809
- return join13(configDir2, "projects", slug);
11804
+ function claudeConfigDir() {
11805
+ return process.env.CLAUDE_CONFIG_DIR ?? null;
11806
+ }
11807
+ function enumerateJsonls(projectsRoot) {
11808
+ const out = [];
11809
+ let slugs;
11810
+ try {
11811
+ slugs = readdirSync8(projectsRoot, { withFileTypes: true }).filter((d) => d.isDirectory()).map((d) => d.name);
11812
+ } catch (err) {
11813
+ if (err.code === "ENOENT") return out;
11814
+ throw err;
11815
+ }
11816
+ for (const slug of slugs) {
11817
+ const slugDir = join13(projectsRoot, slug);
11818
+ let entries;
11819
+ try {
11820
+ entries = readdirSync8(slugDir, { withFileTypes: true });
11821
+ } catch (err) {
11822
+ const code = err.code ?? "unknown";
11823
+ console.error(`[admin-sessions-list] slug-skipped slug=${slug} code=${code}`);
11824
+ continue;
11825
+ }
11826
+ for (const entry of entries) {
11827
+ if (entry.isFile() && SESSION_ID_RE.test(entry.name)) {
11828
+ out.push({ path: join13(slugDir, entry.name), isSubagent: false });
11829
+ } else if (entry.isDirectory() && entry.name === "subagents") {
11830
+ const subDir = join13(slugDir, entry.name);
11831
+ let subEntries;
11832
+ try {
11833
+ subEntries = readdirSync8(subDir, { withFileTypes: true });
11834
+ } catch (err) {
11835
+ const code = err.code ?? "unknown";
11836
+ console.error(`[admin-sessions-list] subagents-skipped slug=${slug} code=${code}`);
11837
+ continue;
11838
+ }
11839
+ for (const sub of subEntries) {
11840
+ if (sub.isFile() && SESSION_ID_RE.test(sub.name)) {
11841
+ out.push({ path: join13(subDir, sub.name), isSubagent: true });
11842
+ }
11843
+ }
11844
+ }
11845
+ }
11846
+ }
11847
+ return out;
11848
+ }
11849
+ function liveSessionIdSet(configDir2) {
11850
+ const out = /* @__PURE__ */ new Set();
11851
+ const sessionsDir = join13(configDir2, "sessions");
11852
+ let entries;
11853
+ try {
11854
+ entries = readdirSync8(sessionsDir, { withFileTypes: true });
11855
+ } catch {
11856
+ return out;
11857
+ }
11858
+ for (const entry of entries) {
11859
+ if (!entry.isFile() || !entry.name.endsWith(".json")) continue;
11860
+ let body;
11861
+ try {
11862
+ body = readFileSync14(join13(sessionsDir, entry.name), "utf8");
11863
+ } catch {
11864
+ continue;
11865
+ }
11866
+ let parsed;
11867
+ try {
11868
+ parsed = JSON.parse(body);
11869
+ } catch {
11870
+ continue;
11871
+ }
11872
+ if (!parsed || typeof parsed !== "object") continue;
11873
+ const sid = parsed.sessionId;
11874
+ if (typeof sid === "string" && sid.length > 0) out.add(sid);
11875
+ }
11876
+ return out;
11810
11877
  }
11811
11878
  function firstUserMessage(body) {
11812
11879
  for (const line of body.split("\n")) {
@@ -11829,34 +11896,27 @@ function firstUserMessage(body) {
11829
11896
  return null;
11830
11897
  }
11831
11898
  app24.get("/", requireAdminSession, async (c) => {
11832
- const cacheKey = c.var.cacheKey;
11833
- const accountId = getAccountIdForSession(cacheKey);
11834
- if (!accountId) {
11835
- return c.json({ error: "Account not found for session" }, 401);
11836
- }
11837
- const projectsDir = projectsDirForAccount(accountId);
11838
- if (!projectsDir) {
11839
- console.error(`[admin-sessions-list] account=${accountId} no-claude-config-dir`);
11899
+ const configDir2 = claudeConfigDir();
11900
+ if (!configDir2) {
11901
+ console.error("[admin-sessions-list] CLAUDE_CONFIG_DIR not set; returning empty list");
11840
11902
  return c.json({ sessions: [] });
11841
11903
  }
11842
- let entries;
11843
- try {
11844
- entries = readdirSync8(projectsDir);
11845
- } catch (err) {
11846
- const code = err.code;
11847
- if (code === "ENOENT") {
11848
- console.log(`[admin-sessions-list] account=${accountId} rows=0 reason=no-projects-dir`);
11849
- return c.json({ sessions: [] });
11850
- }
11851
- const message = err instanceof Error ? err.message : String(err);
11852
- console.error(`[admin-sessions-list] account=${accountId} readdir-failed error="${message}"`);
11853
- return c.json({ error: "projects-dir-unreadable" }, 500);
11854
- }
11904
+ const projectsRoot = join13(configDir2, "projects");
11905
+ const jsonls = enumerateJsonls(projectsRoot);
11906
+ const liveIds = liveSessionIdSet(configDir2);
11855
11907
  const rows = [];
11856
- for (const name of entries) {
11857
- if (!SESSION_ID_RE.test(name)) continue;
11858
- const sessionId = name.slice(0, -".jsonl".length);
11859
- const path2 = join13(projectsDir, name);
11908
+ const seenIds = /* @__PURE__ */ new Set();
11909
+ let liveCount = 0;
11910
+ let rcCount = 0;
11911
+ let subagentCount = 0;
11912
+ for (const { path: path2, isSubagent } of jsonls) {
11913
+ const base = path2.slice(path2.lastIndexOf("/") + 1);
11914
+ const sessionId = base.slice(0, -".jsonl".length);
11915
+ if (seenIds.has(sessionId)) {
11916
+ console.error(`[admin-sessions-list] duplicate-sessionId sessionId=${sessionId} path=${path2}`);
11917
+ continue;
11918
+ }
11919
+ seenIds.add(sessionId);
11860
11920
  let body;
11861
11921
  let mtimeMs;
11862
11922
  try {
@@ -11866,17 +11926,25 @@ app24.get("/", requireAdminSession, async (c) => {
11866
11926
  continue;
11867
11927
  }
11868
11928
  const urlMatch = body.match(RC_URL_RE);
11869
- if (!urlMatch) continue;
11929
+ const live = liveIds.has(sessionId);
11870
11930
  const title = firstUserMessage(body) ?? sessionId.slice(0, 8);
11871
- rows.push({
11931
+ const row = {
11872
11932
  sessionId,
11873
11933
  title,
11874
- url: urlMatch[0],
11875
- capturedAt: new Date(mtimeMs).toISOString()
11876
- });
11934
+ startedAt: new Date(mtimeMs).toISOString(),
11935
+ live,
11936
+ isSubagent
11937
+ };
11938
+ if (urlMatch) row.rcUrl = urlMatch[0];
11939
+ rows.push(row);
11940
+ if (live) liveCount += 1;
11941
+ if (urlMatch) rcCount += 1;
11942
+ if (isSubagent) subagentCount += 1;
11877
11943
  }
11878
- rows.sort((a, b) => a.capturedAt < b.capturedAt ? 1 : -1);
11879
- console.log(`[admin-sessions-list] account=${accountId} rows=${rows.length}`);
11944
+ rows.sort((a, b) => a.startedAt < b.startedAt ? 1 : -1);
11945
+ console.log(
11946
+ `[admin-sessions-list] rows=${rows.length} live=${liveCount} rc=${rcCount} subagents=${subagentCount}`
11947
+ );
11880
11948
  return c.json({ sessions: rows });
11881
11949
  });
11882
11950
  var sidebar_sessions_default = app24;
@@ -1 +0,0 @@
1
- import{o as e}from"./chunk-DD-I1_y5.js";import{c as t,d as n,i as r,l as i,o as a,s as o,t as s}from"./brand-CYcGHhlS.js";var c=i(`bot`,[[`path`,{d:`M12 8V4H8`,key:`hb8ula`}],[`rect`,{width:`16`,height:`12`,x:`4`,y:`8`,rx:`2`,key:`enze0r`}],[`path`,{d:`M2 14h2`,key:`vft8re`}],[`path`,{d:`M20 14h2`,key:`4cs60a`}],[`path`,{d:`M15 13v2`,key:`1xurst`}],[`path`,{d:`M9 13v2`,key:`rq6x2g`}]]),l=i(`box`,[[`path`,{d:`M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z`,key:`hh9hay`}],[`path`,{d:`m3.3 7 8.7 5 8.7-5`,key:`g66t2b`}],[`path`,{d:`M12 22V12`,key:`d0xqtd`}]]),u=i(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),d=i(`database`,[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`,key:`msslwz`}],[`path`,{d:`M3 5V19A9 3 0 0 0 21 19V5`,key:`1wlel7`}],[`path`,{d:`M3 12A9 3 0 0 0 21 12`,key:`mv7ke4`}]]),f=i(`external-link`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`M10 14 21 3`,key:`gplh6r`}],[`path`,{d:`M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6`,key:`a6xqqp`}]]),p=i(`history`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}],[`path`,{d:`M12 7v5l4 2`,key:`1fdv2h`}]]),m=i(`info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),h=i(`list-todo`,[[`path`,{d:`M13 5h8`,key:`a7qcls`}],[`path`,{d:`M13 12h8`,key:`h98zly`}],[`path`,{d:`M13 19h8`,key:`c3s6r1`}],[`path`,{d:`m3 17 2 2 4-4`,key:`1jhpwq`}],[`rect`,{x:`3`,y:`4`,width:`6`,height:`6`,rx:`1`,key:`cif1o7`}]]),g=i(`loader-circle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]),_=i(`log-out`,[[`path`,{d:`m16 17 5-5-5-5`,key:`1bji2h`}],[`path`,{d:`M21 12H9`,key:`dn1m92`}],[`path`,{d:`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,key:`1uf3rs`}]]),v=i(`menu`,[[`path`,{d:`M4 5h16`,key:`1tepv9`}],[`path`,{d:`M4 12h16`,key:`1lakjw`}],[`path`,{d:`M4 19h16`,key:`1djgab`}]]),ee=i(`panel-right-open`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M15 3v18`,key:`14nvp0`}],[`path`,{d:`m10 15-3-3 3-3`,key:`1pgupc`}]]),y=i(`panel-right`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M15 3v18`,key:`14nvp0`}]]),b=i(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]),x=i(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]),S=i(`share-2`,[[`circle`,{cx:`18`,cy:`5`,r:`3`,key:`gq8acd`}],[`circle`,{cx:`6`,cy:`12`,r:`3`,key:`w7nqdw`}],[`circle`,{cx:`18`,cy:`19`,r:`3`,key:`1xt0gg`}],[`line`,{x1:`8.59`,x2:`15.42`,y1:`13.51`,y2:`17.49`,key:`47mynk`}],[`line`,{x1:`15.41`,x2:`8.59`,y1:`6.51`,y2:`10.49`,key:`1n3mei`}]]),C=i(`upload`,[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]),w=i(`users`,[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`path`,{d:`M16 3.128a4 4 0 0 1 0 7.744`,key:`16gr8j`}],[`path`,{d:`M22 21v-2a4 4 0 0 0-3-3.87`,key:`kshegd`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}]]),T=i(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]),E=e(n(),1),D=a(),O=`maxy-shell-side-px`;function k(){if(typeof window>`u`)return 0;let e=document.querySelector(`.platform > .artefact`)?.getBoundingClientRect();return e&&e.width>0?Math.round(e.width):0}function A(e){if(typeof window>`u`)return e;let t=window.innerWidth,n=Math.max(248,t-480-k());return Math.min(Math.max(e,248),n)}function j(){if(typeof window>`u`)return 264;try{let e=window.localStorage.getItem(O);if(!e)return 264;let t=parseInt(e,10);if(Number.isFinite(t)&&t>=248)return A(t)}catch{}return 264}function te({targetSelector:e=`.platform`}){let t=(0,E.useRef)(null),[n,r]=(0,E.useState)(()=>j()),i=(0,E.useRef)(n);(0,E.useEffect)(()=>{let t=document.querySelector(e);!t||!(t instanceof HTMLElement)||(t.style.setProperty(`--side-px`,`${n}px`),i.current=n)},[n,e]);let a=(0,E.useCallback)(()=>{r(e=>{let t=A(e);return t===e?e:t})},[]);(0,E.useEffect)(()=>{a(),window.addEventListener(`resize`,a);let t=document.querySelector(e),n=null;return t instanceof HTMLElement&&(n=new MutationObserver(a),n.observe(t,{attributes:!0,attributeFilter:[`data-artefact`,`class`]})),()=>{window.removeEventListener(`resize`,a),n?.disconnect()}},[a,e]);let o=e=>{e.preventDefault();let n=t.current;if(!n)return;n.setPointerCapture(e.pointerId),n.classList.add(`dragging`);let a=!1,o=e=>{a=!0,r(A(Math.round(e.clientX)))},s=()=>{if(n.releasePointerCapture(e.pointerId),n.classList.remove(`dragging`),window.removeEventListener(`pointermove`,o),window.removeEventListener(`pointerup`,s),!a)return;let t=i.current;try{window.localStorage.setItem(O,String(t))}catch{}console.info(`[admin-ui] sidebar-resize px=${t}`)};window.addEventListener(`pointermove`,o),window.addEventListener(`pointerup`,s)},s=()=>{let e=A(264);r(e);try{window.localStorage.removeItem(O)}catch{}console.info(`[admin-ui] sidebar-resize px=${e}`)};return(0,D.jsx)(`div`,{ref:t,className:`side-resize-handle`,role:`separator`,"aria-orientation":`vertical`,"aria-label":`Resize sidebar`,onPointerDown:o,onDoubleClick:s})}var M=`maxy-admin-session`,N=typeof BroadcastChannel<`u`;function P(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.type===`rotation`&&typeof t.newKey==`string`&&t.newKey.length>0&&(t.surface===`chat`||t.surface===`graph`||t.surface===`data`||t.surface===`sessions`)&&typeof t.ts==`number`}function F(e){if(!N)return()=>{};let t=new BroadcastChannel(M),n=t=>{if(!P(t.data)){console.warn(`[admin-session-broadcast] outcome=received-malformed payload=${JSON.stringify(t.data)}`);return}e(t.data)};return t.addEventListener(`message`,n),()=>{t.removeEventListener(`message`,n),t.close()}}var I=`maxy-admin-session-key`;function L(e,t){return`${e}${e.includes(`?`)?`&`:`?`}session_key=${encodeURIComponent(t)}`}async function R(e){let t;try{t=await e.clone().json()}catch{return`parse-failed`}if(typeof t!=`object`||!t)return`unknown-401`;let n=t.code;return n===`session-missing`||n===`session-not-registered`||n===`session-expired-age`||n===`grant-expired`?n:`unknown-401`}function z(){try{return sessionStorage.getItem(I)}catch{return null}}function B(e){let{initialCacheKey:t,surface:n}=e,[r,i]=(0,E.useState)(t),a=(0,E.useRef)(t);(0,E.useEffect)(()=>{a.current=r},[r]),(0,E.useEffect)(()=>{t!==a.current&&(i(t),a.current=t,s(e=>e+1))},[t]);let[o,s]=(0,E.useState)(0),[c,l]=(0,E.useState)(null);(0,E.useEffect)(()=>F(e=>{let t=a.current.slice(0,8),r=e.newKey.slice(0,8);e.newKey!==a.current&&(console.log(`[admin-session-broadcast] outcome=received oldKey=${t} newKey=${r} surface=${n} senderSurface=${e.surface}`),i(e.newKey),s(e=>e+1),l(null))}),[n]);let u=(0,E.useCallback)(()=>{try{sessionStorage.removeItem(I)}catch{}window.location.href=`/`},[]);return{adminFetch:(0,E.useCallback)(async(e,t)=>{let r=a.current,o=L(e,r),c=await fetch(o,t);if(c.status!==401)return c;let d=await R(c);if(d===`session-missing`)return console.warn(`[useAdminFetch] outcome=redirect-to-login reason=${d} surface=${n} path=${e}`),u(),c;if(d!==`session-not-registered`)return console.warn(`[useAdminFetch] outcome=redirect-to-login reason=${d} surface=${n} path=${e}`),l({message:`Your admin session has expired. Click to reload and sign in.`,reason:d}),c;let f=z();if(!f||f===r)return console.warn(`[useAdminFetch] outcome=redirect-to-login reason=session-not-registered-no-fresh-key surface=${n} path=${e}`),l({message:`Your admin session was renewed in another tab. Click to reload.`,reason:`session-not-registered`}),c;i(f),a.current=f,s(e=>e+1),console.log(`[useAdminFetch] outcome=retry-after-rotation oldKey=${r.slice(0,8)} newKey=${f.slice(0,8)} surface=${n} path=${e}`);let p=L(e,f),m=await fetch(p,t);return m.status===401&&(console.warn(`[useAdminFetch] outcome=redirect-to-login reason=second-401-after-retry surface=${n} path=${e}`),l({message:`Your admin session has expired. Click to reload and sign in.`,reason:`session-not-registered`})),m},[u,n]),cacheKey:r,sessionRefetchNonce:o,banner:c,reloadToLogin:u}}var V=(0,E.createContext)(null);function H({cacheKey:e,onSessionExpired:t,surface:n,children:r}){let i=(0,E.useCallback)(async(r,i)=>{if(!e)return fetch(r,i);let a=L(r,e),o=await fetch(a,i);if(o.status!==401)return o;let s=await R(o),c=e.slice(-8);if(s===`session-not-registered`){let a=z();if(a&&a!==e){let e=L(r,a),o=await fetch(e,i);return o.status===401?(console.warn(`[admin-auth] outcome=session-expired-redirect code=second-401-after-retry path=${r} cacheKey=${c} surface=${n}`),t({code:`second-401-after-retry`,path:r}),o):o}}return console.warn(`[admin-auth] outcome=session-expired-redirect code=${s} path=${r} cacheKey=${c} surface=${n}`),t({code:s,path:r}),o},[e,t,n]);return(0,D.jsx)(V.Provider,{value:i,children:r})}function U(){return(0,E.useContext)(V)}function ne(e){let t=U();return(0,E.useMemo)(()=>t||(async(t,n)=>fetch(e?L(t,e):t,n)),[t,e])}function W(e){let{businessName:t,onNavigate:n,onToggleSidebar:i,sidebarOpen:a,onLogout:c}=e,[l,p]=(0,E.useState)(!1),h=(0,E.useRef)(null),b=(0,E.useRef)(null),x=ne(null),[C,w]=(0,E.useState)(null),[O,k]=(0,E.useState)(!1),[A,j]=(0,E.useState)(null),[te,M]=(0,E.useState)(null),[N,P]=(0,E.useState)(null),[F,I]=(0,E.useState)(``);(0,E.useEffect)(()=>{I(window.location.hostname.startsWith(`admin.`)?window.location.origin.replace(`admin.`,`public.`):window.location.origin)},[]),(0,E.useEffect)(()=>{if(!l)return;let e=e=>{h.current&&!h.current.contains(e.target)&&p(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[l]),(0,E.useEffect)(()=>{if(!l)return;let e=e=>{e.key===`Escape`&&p(!1)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[l]),(0,E.useEffect)(()=>{l&&b.current?.focus()},[l]),(0,E.useEffect)(()=>{if(!l)return;let e=!1;return x(`/api/admin/version`).then(e=>e.json()).then(t=>{e||P(t)}).catch(e=>{console.error(`[admin/version] menu-open client fetch failed:`,e)}),()=>{e=!0}},[l,x]);let L=(0,E.useCallback)(()=>{p(e=>{let t=!e;return t&&console.info(`[admin-ui] header-menu-open`),t})},[]),R=(0,E.useCallback)(e=>{p(!1),n(e)},[n]),z=(0,E.useCallback)(async()=>{if(C!==null){w(null),M(null);return}k(!0),j(null);try{let e=await x(`/api/admin/agents`);if(!e.ok)throw Error(`Failed to load agents`);w((await e.json()).agents??[])}catch(e){console.error(`[admin/agents] list failed:`,e),j(e instanceof Error?e.message:String(e)),w([])}finally{k(!1)}},[C,x]),B=(0,E.useCallback)(e=>{M(null),w(t=>t?.filter(t=>t.slug!==e)??null),x(`/api/admin/agents/${encodeURIComponent(e)}`,{method:`DELETE`}).catch(e=>console.error(`[admin/agents] delete failed:`,e))},[x]),V=(0,E.useCallback)(()=>{p(!1),c()},[c]),H=t||s.productName;return(0,D.jsxs)(`header`,{className:`admin-header`,children:[(0,D.jsx)(`button`,{type:`button`,className:`admin-sidebar-toggle`,"aria-label":a?`Hide sidebar`:`Show sidebar`,title:a?`Hide sidebar`:`Show sidebar`,"aria-expanded":a,onClick:i,children:a?(0,D.jsx)(ee,{size:20,strokeWidth:1.5}):(0,D.jsx)(y,{size:20,strokeWidth:1.5})}),(0,D.jsxs)(`div`,{className:`chat-header-label`,children:[(0,D.jsx)(`span`,{className:`chat-logo-btn`,"aria-hidden":`true`,children:(0,D.jsx)(`img`,{src:r,alt:``,className:`chat-logo`})}),(0,D.jsx)(`h1`,{className:`chat-tagline`,children:H})]}),(0,D.jsxs)(`div`,{className:`chat-burger-wrap`,ref:h,children:[(0,D.jsx)(`button`,{type:`button`,className:`admin-burger`,onClick:L,"aria-label":`Menu`,"aria-haspopup":`true`,"aria-expanded":l,children:(0,D.jsx)(v,{size:20})}),l&&(0,D.jsxs)(`div`,{className:`admin-menu`,role:`menu`,children:[(0,D.jsxs)(`button`,{ref:b,type:`button`,className:`chat-menu-item`,role:`menuitem`,onClick:()=>R(`data`),children:[(0,D.jsx)(d,{size:14}),` Data`]}),(0,D.jsxs)(`button`,{type:`button`,className:`chat-menu-item`,role:`menuitem`,onClick:()=>R(`graph`),children:[(0,D.jsx)(S,{size:14}),` Graph`]}),(0,D.jsx)(`div`,{className:`chat-menu-divider`}),(0,D.jsxs)(`button`,{type:`button`,className:`chat-menu-item`,role:`menuitem`,onClick:z,children:[(0,D.jsx)(f,{size:14}),` Public`,O&&(0,D.jsx)(g,{size:12,className:`spin`})]}),C!==null&&(0,D.jsxs)(`div`,{className:`chat-menu-agents`,children:[A&&(0,D.jsx)(`span`,{className:`chat-menu-agent-error`,children:A}),C.length===0&&!A&&(0,D.jsx)(`span`,{className:`chat-menu-agent-empty`,children:`No public agents configured`}),C.map(e=>(0,D.jsxs)(`div`,{className:`chat-menu-item chat-menu-agent-item`,children:[(0,D.jsx)(`span`,{className:`agent-status-dot ${e.status}`}),(0,D.jsxs)(`span`,{className:`agent-text`,children:[(0,D.jsx)(`span`,{className:`agent-display-name`,children:e.displayName}),(0,D.jsxs)(`span`,{className:`agent-slug`,children:[`/`,e.slug]})]}),te===e.slug?(0,D.jsxs)(`span`,{className:`agent-actions agent-confirm`,children:[(0,D.jsx)(`button`,{type:`button`,className:`agent-action-btn agent-confirm-yes`,title:`Confirm delete`,onClick:()=>B(e.slug),children:(0,D.jsx)(u,{size:12})}),(0,D.jsx)(`button`,{type:`button`,className:`agent-action-btn agent-confirm-no`,title:`Cancel`,onClick:()=>M(null),children:(0,D.jsx)(T,{size:12})})]}):(0,D.jsxs)(`span`,{className:`agent-actions`,children:[(0,D.jsx)(`a`,{href:`${F}/${e.slug}`,target:`_blank`,rel:`noopener noreferrer`,className:`agent-action-btn`,title:`Open agent`,onClick:()=>p(!1),children:(0,D.jsx)(f,{size:12})}),(0,D.jsx)(`button`,{type:`button`,className:`agent-action-btn agent-delete-btn`,title:`Delete agent`,onClick:()=>M(e.slug),children:(0,D.jsx)(o,{size:12})})]})]},e.slug))]}),(0,D.jsx)(`div`,{className:`chat-menu-divider`}),(0,D.jsxs)(`div`,{className:`chat-menu-version chat-menu-version-passive`,children:[(0,D.jsx)(m,{size:14}),(0,D.jsxs)(`span`,{className:`version-installed`,children:[N?`v${N.installed}`:`…`,N&&!N.updateAvailable&&(0,D.jsx)(`span`,{className:`version-uptodate-dot`}),N?.updateAvailable&&(0,D.jsx)(`span`,{className:`version-update-dot`})]})]}),(0,D.jsxs)(`button`,{type:`button`,className:`chat-menu-item`,role:`menuitem`,onClick:V,children:[(0,D.jsx)(_,{size:14}),` Log out`]})]})]})]})}var G=6e4,K=60*G,re=24*K,q=G,ie=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],J=[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`];function Y(e){return e<10?`0${e}`:String(e)}function ae(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()}function oe(e,t){if(!Number.isFinite(e)||e<=0||!Number.isFinite(t))return`—`;let n=t-e;if(n<-q)return`—`;let r=n<0?0:n;if(r<G)return`just now`;if(r<K)return`${Math.floor(r/G)}m`;if(r<re)return`${Math.floor(r/K)}h`;let i=new Date(t),a=new Date(e),o=Math.round((ae(i)-ae(a))/re);if(o===1)return`yesterday`;if(o>=2&&o<=6)return J[a.getDay()];let s=Y(a.getDate()),c=ie[a.getMonth()];return a.getFullYear()===i.getFullYear()?`${s} ${c}`:`${s} ${c} ${a.getFullYear()}`}function se(e,t,n=`data`){let r=`/api/admin/files/download?session_key=${encodeURIComponent(e)}&path=${encodeURIComponent(t)}`+(n===`data`?``:`&root=${encodeURIComponent(n)}`),i=document.createElement(`a`);i.href=r,i.rel=`noopener noreferrer`,document.body.appendChild(i),i.click(),i.remove()}var ce=`https://claude.ai/code`;function le(e){let{businessName:n,cacheKey:r,role:i,userName:a,userAvatar:o,onSelectProjects:u,onSelectPeople:d,onSelectTasks:f,onSelectAgents:m,onCloseMobileDrawer:g,collapsed:_}=e,v=ne(r),ee=s.productName,y=typeof a==`string`?a:a===null?`name unavailable`:n||ee,S=(y.trim().charAt(0)||`?`).toUpperCase(),[T,O]=(0,E.useState)(`artefacts`),[k,A]=(0,E.useState)([]),[j,te]=(0,E.useState)(!1),[M,N]=(0,E.useState)(null),[P,F]=(0,E.useState)(!1),[I,L]=(0,E.useState)(`all`),[R,z]=(0,E.useState)(null),[B,V]=(0,E.useState)(new Set),H=(0,E.useRef)(null),U=(0,E.useRef)(null),[W,G]=(0,E.useState)([]),[K,re]=(0,E.useState)(!1),[q,ie]=(0,E.useState)(null),[J,Y]=(0,E.useState)(!1),ae=(0,E.useCallback)(e=>{if(g(),!r){console.error(`[admin-ui] artefact-download-blocked id=${e.id} reason=no-cache-key`),z({message:`Session not ready — try again`,failed:!0});return}if(!e.downloadPath){console.error(`[admin-ui] artefact-download-blocked id=${e.id} reason=not-downloadable`),z({message:`${e.name} can’t be downloaded`,failed:!0});return}console.info(`[admin-ui] artefact-download id=${e.id} root=${e.downloadRoot??`data`} path=${e.downloadPath}`),se(r,e.downloadPath,e.downloadRoot??`data`),z({message:`Downloading ${e.name}`,failed:!1})},[r,g]),le=(0,E.useCallback)((e,t)=>{e.stopPropagation(),!B.has(t.id)&&(U.current=t,H.current?.click())},[B]),ue=(0,E.useCallback)(async e=>{let t=e.target.files?.[0],n=U.current;if(e.target.value=``,U.current=null,!t||!n)return;let r=await t.text();if(r.includes(`\0`)){console.error(`[admin-ui] artefact-upload-blocked id=${n.id} reason=binary-file name=${t.name}`),z({message:`${t.name} looks like a binary file`,failed:!0});return}V(e=>{let t=new Set(e);return t.add(n.id),t}),console.info(`[admin-ui] artefact-upload id=${n.id} bytes=${r.length} name=${t.name}`);try{let e=await v(`/api/admin/sidebar-artefact-save`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:n.id,content:r})});if(!e.ok){let t=await e.json().catch(()=>({})),r=e.status===403?`Saving this artefact is not allowed`:`Upload failed: ${t.error??`status ${e.status}`}`;console.error(`[admin-ui] artefact-upload-failed id=${n.id} status=${e.status} error=${t.error??`unknown`}`),z({message:r,failed:!0});return}let t=await e.json();A(e=>e.map(e=>e.id===n.id&&t.updatedAt?{...e,updatedAt:t.updatedAt}:e)),z({message:`Saved ${n.name}`,failed:!1})}catch(e){let t=e instanceof Error?e.message:String(e);console.error(`[admin-ui] artefact-upload-failed id=${n.id} error=${t}`),z({message:`Upload failed: ${t}`,failed:!0})}finally{V(e=>{let t=new Set(e);return t.delete(n.id),t})}},[v]);(0,E.useEffect)(()=>{if(!R)return;let e=setTimeout(()=>z(null),2500);return()=>clearTimeout(e)},[R]);let X=(0,E.useCallback)(async()=>{if(r){F(!0),N(null);try{let e=await v(`/api/admin/sidebar-artefacts`);if(!e.ok)throw Error(`status ${e.status}`);A((await e.json()).artefacts??[]),te(!0)}catch(e){let t=e instanceof Error?e.message:String(e);N(`Failed to load artefacts: ${t}`),console.error(`[admin-ui] sidebar-artefacts fetch failed: ${t}`)}finally{F(!1)}}},[r,v]);(0,E.useEffect)(()=>{!r||j||X()},[r,j,X]);let Z=()=>{O(`artefacts`),console.info(`[admin-ui] sidebar-nav surface=artefacts count=${j?k.length:0} collapsed=${_}`),j||X()},Q=1.5,fe=()=>{console.info(`[admin-ui] sidebar-refresh surface=artefacts`),X()},pe=(0,E.useCallback)(async()=>{if(r){Y(!0),ie(null);try{let e=await v(`/api/admin/sidebar-sessions`);if(!e.ok)throw Error(`status ${e.status}`);G((await e.json()).sessions??[]),re(!0)}catch(e){let t=e instanceof Error?e.message:String(e);ie(`Failed to load sessions: ${t}`),console.error(`[admin-ui] sidebar-sessions fetch failed: ${t}`)}finally{Y(!1)}}},[r,v]),me=()=>{O(`sessions`),console.info(`[admin-ui] sidebar-nav surface=sessions count=${K?W.length:0} collapsed=${_}`),K||pe()},$=()=>{console.info(`[admin-ui] sidebar-refresh surface=sessions`),pe()},he=(0,E.useCallback)(e=>{g(),console.info(`[admin-ui] sidebar-session-open href=${e.url} sessionId=${e.sessionId}`),window.open(e.url,`_blank`,`noopener,noreferrer`)},[g]);return(0,D.jsxs)(`aside`,{className:`side`,children:[(0,D.jsx)(`div`,{className:`side-new-session-row`,children:(0,D.jsxs)(`a`,{className:`side-new-session`,href:ce,target:`_blank`,rel:`noopener noreferrer`,onClick:()=>console.info(`[admin-ui] sidebar-new-session-open href=claude.ai/code`),children:[(0,D.jsx)(b,{size:14}),(0,D.jsx)(`span`,{children:`New session`})]})}),(0,D.jsxs)(`nav`,{className:`side-nav`,children:[(0,D.jsxs)(`button`,{type:`button`,className:`nav-row`,onClick:()=>{console.info(`[admin-ui] sidebar-nav surface=people`),d(),g()},children:[(0,D.jsx)(w,{size:20,strokeWidth:Q}),(0,D.jsx)(`span`,{className:`label`,children:`People`}),(0,D.jsx)(`span`,{className:`kbd`})]}),(0,D.jsxs)(`button`,{type:`button`,className:`nav-row`,onClick:()=>{console.info(`[admin-ui] sidebar-nav surface=agents`),m(),g()},children:[(0,D.jsx)(c,{size:20,strokeWidth:Q}),(0,D.jsx)(`span`,{className:`label`,children:`Agents`}),(0,D.jsx)(`span`,{className:`kbd`})]}),(0,D.jsxs)(`button`,{type:`button`,className:`nav-row`,onClick:()=>{console.info(`[admin-ui] sidebar-nav surface=projects`),u(),g()},children:[(0,D.jsx)(l,{size:20,strokeWidth:Q}),(0,D.jsx)(`span`,{className:`label`,children:`Projects`}),(0,D.jsx)(`span`,{className:`kbd`})]}),(0,D.jsxs)(`button`,{type:`button`,className:`nav-row`,onClick:()=>{console.info(`[admin-ui] sidebar-nav surface=tasks`),f(),g()},children:[(0,D.jsx)(h,{size:20,strokeWidth:Q}),(0,D.jsx)(`span`,{className:`label`,children:`Tasks`}),(0,D.jsx)(`span`,{className:`kbd`})]}),(0,D.jsxs)(`button`,{type:`button`,className:`nav-row${T===`artefacts`?` active`:``}`,onClick:Z,children:[(0,D.jsx)(t,{size:20,strokeWidth:Q}),(0,D.jsx)(`span`,{className:`label`,children:`Artefacts`}),(0,D.jsx)(`span`,{className:`kbd`})]}),(0,D.jsxs)(`button`,{type:`button`,className:`nav-row${T===`sessions`?` active`:``}`,onClick:me,children:[(0,D.jsx)(p,{size:20,strokeWidth:Q}),(0,D.jsx)(`span`,{className:`label`,children:`Sessions`}),(0,D.jsx)(`span`,{className:`kbd`})]})]}),T===`artefacts`&&(0,D.jsxs)(`div`,{className:`side-list`,children:[(0,D.jsxs)(`div`,{className:`group-head`,children:[(0,D.jsx)(`span`,{children:`Artefacts`}),(0,D.jsxs)(`span`,{className:`group-head-meta`,children:[(0,D.jsx)(`button`,{type:`button`,className:`group-head-refresh`,title:`Refresh artefacts`,"aria-label":`Refresh artefacts`,onClick:fe,disabled:P,children:(0,D.jsx)(x,{size:12,className:P?`spinning`:void 0})}),(0,D.jsx)(`span`,{children:P?`…`:String(k.length)})]})]}),M&&(0,D.jsx)(`div`,{className:`conv`,style:{color:`var(--text-tertiary)`,cursor:`default`},children:M}),j&&!M&&k.length>0&&(()=>{let e=k.filter(e=>e.kind===`agent-template`).length,t=k.length-e;return(0,D.jsx)(`div`,{className:`artefact-filter-chips`,children:[{key:`all`,label:`All`,count:k.length},{key:`agent`,label:`Agents`,count:e},{key:`file`,label:`Files`,count:t}].map(e=>(0,D.jsxs)(`button`,{type:`button`,className:`artefact-filter-chip${I===e.key?` active`:``}`,onClick:()=>L(e.key),disabled:e.count===0&&e.key!==`all`,children:[e.label,(0,D.jsx)(`span`,{className:`artefact-filter-chip-count`,children:e.count})]},e.key))})})(),j&&!M&&k.length===0&&(0,D.jsx)(`div`,{className:`conv`,style:{color:`var(--text-tertiary)`,cursor:`default`},children:`No artefacts yet`}),k.filter(e=>I===`all`?!0:I===`agent`?e.kind===`agent-template`:e.kind!==`agent-template`).map(e=>{let t=B.has(e.id);return(0,D.jsxs)(`div`,{className:`conv-row`,children:[(0,D.jsxs)(`button`,{type:`button`,className:`conv`,onClick:()=>ae(e),disabled:t,style:e.editable?{paddingRight:56}:void 0,children:[(0,D.jsx)(`span`,{className:`conv-name`,children:e.name}),(0,D.jsx)(`span`,{className:`conv-kind`,"data-kind":e.kind===`agent-template`?`agent`:`file`,children:e.kind===`agent-template`?`agent`:`file`})]}),e.editable&&(0,D.jsx)(`button`,{type:`button`,className:`conv-upload`,title:t?`Uploading…`:`Upload a replacement for ${e.name}`,"aria-label":`Upload a replacement for ${e.name}`,onClick:t=>le(t,e),disabled:t,children:(0,D.jsx)(C,{size:12,className:t?`spinning`:void 0})})]},e.id)}),(0,D.jsx)(`input`,{ref:H,type:`file`,accept:`.md,text/markdown,text/plain`,style:{display:`none`},onChange:ue})]}),T===`sessions`&&(0,D.jsxs)(`div`,{className:`side-list`,children:[(0,D.jsxs)(`div`,{className:`group-head`,children:[(0,D.jsx)(`span`,{children:`Sessions`}),(0,D.jsxs)(`span`,{className:`group-head-meta`,children:[(0,D.jsx)(`button`,{type:`button`,className:`group-head-refresh`,title:`Refresh sessions`,"aria-label":`Refresh sessions`,onClick:$,disabled:J,children:(0,D.jsx)(x,{size:12,className:J?`spinning`:void 0})}),(0,D.jsx)(`span`,{children:J?`…`:String(W.length)})]})]}),q&&(0,D.jsx)(`div`,{className:`conv`,style:{color:`var(--text-tertiary)`,cursor:`default`},children:q}),K&&!q&&W.length===0&&(0,D.jsx)(`div`,{className:`conv`,style:{color:`var(--text-tertiary)`,cursor:`default`},children:`No sessions yet`}),W.map(e=>{let t=Date.parse(e.capturedAt),n=Number.isFinite(t)?oe(t,Date.now()):``;return(0,D.jsxs)(`button`,{type:`button`,className:`conv`,onClick:()=>he(e),children:[(0,D.jsx)(`span`,{className:`conv-name`,children:e.title}),n&&(0,D.jsx)(`span`,{className:`conv-kind`,"data-kind":`file`,children:n})]},e.sessionId)})]}),(0,D.jsx)(de,{}),(0,D.jsxs)(`div`,{className:`side-foot`,children:[(0,D.jsx)(`div`,{className:`avatar`,children:o?(0,D.jsx)(`img`,{src:o,alt:y}):S}),(0,D.jsxs)(`div`,{className:`who`,children:[(0,D.jsx)(`span`,{className:`name`,children:y}),(0,D.jsx)(`span`,{className:`role`,children:i??`operator`})]})]}),R&&(0,D.jsx)(`div`,{className:`copy-toast${R.failed?` copy-toast-failed`:``}`,role:`status`,children:R.message})]})}var ue=5e3;function de(){let[e,t]=(0,E.useState)(null);if((0,E.useEffect)(()=>{let e=!1,n=null;async function r(){try{let n=await fetch(`/api/admin/system-stats`);if(!n.ok){console.error(`[admin-ui] system-stats-fetch-failed status=${n.status}`);return}let r=await n.json();e||t(r)}catch(e){console.error(`[admin-ui] system-stats-fetch-failed reason=${e instanceof Error?e.message:String(e)}`)}}function i(){n===null&&(r(),n=setInterval(()=>{r()},ue))}function a(){n!==null&&(clearInterval(n),n=null)}function o(){document.hidden?a():i()}return document.hidden||i(),document.addEventListener(`visibilitychange`,o),()=>{e=!0,a(),document.removeEventListener(`visibilitychange`,o)}},[]),!e||e.platform===`darwin`)return null;let n=e.cpuPct,r=e.memUsedPct,i=n!==null&&n>=.9,a=n!==null&&n>=.98,o=r!==null&&r>=.9,s=r!==null&&r>=.98,c=i||o,l=a||s,u=e=>e===null?`—`:`${Math.round(e*100)}%`,d=e=>{if(e===null)return{width:`0%`,background:`var(--text-tertiary)`};let t=Math.min(1,Math.max(0,e)),n=Math.round(140*(1-t));return{width:`${Math.round(t*100)}%`,background:`hsl(${n}, 65%, 45%)`}},f=[`system-stats`];return c&&f.push(`system-stats--warn`),l&&f.push(`system-stats--crit`),(0,D.jsxs)(`div`,{className:f.join(` `),role:`status`,"aria-label":`host CPU and RAM`,children:[(0,D.jsxs)(`div`,{className:`system-stats__metric`,children:[(0,D.jsxs)(`span`,{className:i?`system-stats__fig system-stats__fig--warn`:`system-stats__fig`,children:[`CPU `,u(n)]}),(0,D.jsx)(`div`,{className:`system-stats__bar`,children:(0,D.jsx)(`div`,{className:`system-stats__bar-fill`,style:d(n)})})]}),(0,D.jsxs)(`div`,{className:`system-stats__metric`,children:[(0,D.jsxs)(`span`,{className:o?`system-stats__fig system-stats__fig--warn`:`system-stats__fig`,children:[`RAM `,u(r)]}),(0,D.jsx)(`div`,{className:`system-stats__bar`,children:(0,D.jsx)(`div`,{className:`system-stats__bar-fill`,style:d(r)})})]})]})}var X=`admin-sidebar-collapsed`,Z=`admin-sidebar-drawer-open`;function Q(){if(typeof window>`u`)return!1;try{return window.sessionStorage.getItem(X)===`1`}catch{return!1}}function fe(e){if(!(typeof window>`u`))try{e?window.sessionStorage.setItem(X,`1`):window.sessionStorage.removeItem(X)}catch{}}function pe(){if(typeof window>`u`)return!1;try{return window.sessionStorage.getItem(Z)===`1`}catch{return!1}}function me(e){if(!(typeof window>`u`))try{e?window.sessionStorage.setItem(Z,`1`):window.sessionStorage.removeItem(Z)}catch{}}var $=720;function he(e){let{cacheKey:t,businessName:n,onLogout:r,userName:i,userAvatar:a,role:o,children:s,footer:c}=e,[l,u]=(0,E.useState)(()=>Q()),[d,f]=(0,E.useState)(()=>pe()),[p,m]=(0,E.useState)(()=>typeof window<`u`&&window.matchMedia(`(max-width: ${$}px)`).matches);(0,E.useEffect)(()=>{if(typeof window>`u`)return;let e=window.matchMedia(`(max-width: ${$}px)`),t=e=>m(e.matches);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]);let h=(0,E.useCallback)(e=>{fe(e),u(e)},[]),g=(0,E.useCallback)(e=>{me(e),f(e)},[]);(0,E.useEffect)(()=>{if(typeof window>`u`)return;let e=window.location?.pathname??``;console.info(`[admin-ui] shell-mount route=${e} collapsed=${l} drawer=${d}`)},[]);let _=p?d:!l,v=(0,E.useCallback)(()=>{if(!(typeof window>`u`))if(window.matchMedia(`(max-width: ${$}px)`).matches){let e=d;console.info(`[admin-ui] header-sidebar-toggle from=${e?`open`:`closed`} mode=drawer`),g(!e)}else{let e=l;console.info(`[admin-ui] header-sidebar-toggle from=${e?`closed`:`open`} mode=collapse`),h(!e)}},[l,d,h,g]),ee=(0,E.useCallback)(e=>{console.info(`[admin-ui] header-menu-nav target=${e}`),window.location.href=e===`data`?`/data`:`/graph`},[]),y={collapsed:l,mobileDrawerOpen:d,sidebarOpen:_,onToggleSidebar:v,setMobileDrawerOpen:g};return(0,D.jsxs)(`div`,{className:`admin-shell admin-page admin-shell-root`,children:[(0,D.jsx)(W,{businessName:n,onNavigate:ee,onToggleSidebar:v,sidebarOpen:_,onLogout:r}),(0,D.jsxs)(`div`,{className:`platform${d?` menu-open`:``}${l?` sidebar-collapsed`:``}`,"data-artefact":`closed`,children:[(0,D.jsx)(le,{businessName:n,cacheKey:t,role:o??null,userName:i,userAvatar:a??null,onSelectProjects:()=>{window.location.href=`/graph?label=Project`},onSelectPeople:()=>{window.location.href=`/graph?label=Person`},onSelectTasks:()=>{window.location.href=`/graph?label=Task`},onSelectAgents:()=>{window.location.href=`/graph?label=Agent`},onCloseMobileDrawer:()=>g(!1),collapsed:l,mobileDrawerOpen:d}),typeof s==`function`?s(y):s]}),d&&(0,D.jsx)(`div`,{className:`sidebar-backdrop menu-open`,"aria-hidden":`true`,onClick:()=>g(!1)}),c]})}export{te as a,S as c,g as d,d as f,B as i,x as l,se as n,T as o,H as r,C as s,he as t,b as u};
@@ -1 +0,0 @@
1
- import{it as e,rt as t}from"./chunk-ICPOFSXX-Cgj9YSpX.js";var n=(n,r)=>e.lang.round(t.parse(n)[r]);export{n as t};
@@ -1 +0,0 @@
1
- import{h as e}from"./src-CWiyyVfn.js";import"./chunk-ICPOFSXX-Cgj9YSpX.js";import"./dist-BzAsli7o.js";import"./chunk-5PVQY5BW-C7VCYRz9.js";import"./chunk-U2HBQHQK-DuaoK83q.js";import"./chunk-FMBD7UC4-C_E43NFJ.js";import"./chunk-BSJP7CBP-L79XKVcb.js";import"./chunk-ZZ45TVLE-DkyF7XKW.js";import"./chunk-YZCP3GAM-B2wBDwSa.js";import"./chunk-55IACEB6-BwZyF7vR.js";import"./chunk-EDXVE4YY-B8d5xj_4.js";import"./chunk-X2U36JSP-CzMp0dpq.js";import"./chunk-5FUZZQ4R-o1b70dEE.js";import"./chunk-ENJZ2VHE-SSbr4n2X.js";import"./chunk-336JU56O-DcdMZImV.js";import{i as t,n,r,t as i}from"./chunk-4TB4RGXK-CC1QpEvA.js";var a={parser:n,get db(){return new i},renderer:r,styles:t,init:e(e=>{e.class||={},e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},`init`)};export{a as diagram};
@@ -1 +0,0 @@
1
- import{h as e}from"./src-CWiyyVfn.js";import"./chunk-ICPOFSXX-Cgj9YSpX.js";import"./dist-BzAsli7o.js";import"./chunk-5PVQY5BW-C7VCYRz9.js";import"./chunk-U2HBQHQK-DuaoK83q.js";import"./chunk-FMBD7UC4-C_E43NFJ.js";import"./chunk-BSJP7CBP-L79XKVcb.js";import"./chunk-ZZ45TVLE-DkyF7XKW.js";import"./chunk-YZCP3GAM-B2wBDwSa.js";import"./chunk-55IACEB6-BwZyF7vR.js";import"./chunk-EDXVE4YY-B8d5xj_4.js";import"./chunk-X2U36JSP-CzMp0dpq.js";import"./chunk-5FUZZQ4R-o1b70dEE.js";import"./chunk-ENJZ2VHE-SSbr4n2X.js";import"./chunk-336JU56O-DcdMZImV.js";import{i as t,n,r,t as i}from"./chunk-4TB4RGXK-CC1QpEvA.js";var a={parser:n,get db(){return new i},renderer:r,styles:t,init:e(e=>{e.class||={},e.class.arrowMarkerAbsolute=e.arrowMarkerAbsolute},`init`)};export{a as diagram};
@@ -1 +0,0 @@
1
- import{i as e}from"./graphlib-DBvoJMrc.js";var t=4;function n(n){return e(n,t)}export{n as t};
@@ -1 +0,0 @@
1
- import{h as e}from"./src-CWiyyVfn.js";import"./chunk-ICPOFSXX-Cgj9YSpX.js";import"./dist-BzAsli7o.js";import"./chunk-5PVQY5BW-C7VCYRz9.js";import"./chunk-U2HBQHQK-DuaoK83q.js";import"./chunk-BSJP7CBP-L79XKVcb.js";import"./chunk-ZZ45TVLE-DkyF7XKW.js";import"./chunk-55IACEB6-BwZyF7vR.js";import"./chunk-EDXVE4YY-B8d5xj_4.js";import"./chunk-X2U36JSP-CzMp0dpq.js";import"./chunk-5FUZZQ4R-o1b70dEE.js";import"./chunk-ENJZ2VHE-SSbr4n2X.js";import"./chunk-336JU56O-DcdMZImV.js";import{i as t,n,r,t as i}from"./chunk-OYMX7WX6-DNEEcCqI.js";var a={parser:n,get db(){return new i(2)},renderer:r,styles:t,init:e(e=>{e.state||={},e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute},`init`)};export{a as diagram};