@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.
- package/dist/__tests__/samba-provision.test.js +40 -16
- package/dist/index.js +37 -18
- package/dist/samba-provision.js +11 -8
- package/dist/uninstall.js +19 -3
- package/package.json +1 -1
- package/payload/platform/plugins/docs/references/access-control.md +4 -0
- package/payload/platform/plugins/docs/references/deployment.md +1 -19
- package/payload/platform/plugins/docs/references/samba.md +80 -0
- package/payload/platform/plugins/docs/references/troubleshooting.md +14 -0
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +0 -3
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js +0 -248
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/server/public/assets/AdminShell-DtABh34v.js +1 -0
- package/payload/server/public/assets/{Checkbox-G-kyM1P1.js → Checkbox-DTxJvyG7.js} +1 -1
- package/payload/server/public/assets/{admin-B-GDNkoN.js → admin-tKgLki8m.js} +1 -1
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-BGgdXdD2.js → architectureDiagram-Q4EWVU46-CrQJbK3h.js} +1 -1
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-DKWoL4Rp.js → blockDiagram-DXYQGD6D-BLCbhL8K.js} +1 -1
- package/payload/server/public/assets/{brand-MbpD2Bhr.css → brand-lZz3OVIE.css} +1 -1
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-Ca6rs6F4.js → c4Diagram-AHTNJAMY-X34EilDe.js} +1 -1
- package/payload/server/public/assets/channel-ChZECiuj.js +1 -0
- package/payload/server/public/assets/{chunk-336JU56O-DcdMZImV.js → chunk-336JU56O-CeRuGBQ2.js} +2 -2
- package/payload/server/public/assets/{chunk-426QAEUC-9FSP-c1z.js → chunk-426QAEUC-CUZOrcMu.js} +1 -1
- package/payload/server/public/assets/{chunk-4TB4RGXK-CC1QpEvA.js → chunk-4TB4RGXK-CdrIHRcy.js} +1 -1
- package/payload/server/public/assets/{chunk-5FUZZQ4R-o1b70dEE.js → chunk-5FUZZQ4R-CenIbTIp.js} +1 -1
- package/payload/server/public/assets/{chunk-5PVQY5BW-C7VCYRz9.js → chunk-5PVQY5BW-DGfzIUel.js} +1 -1
- package/payload/server/public/assets/{chunk-EDXVE4YY-B8d5xj_4.js → chunk-EDXVE4YY-DSft5oIH.js} +1 -1
- package/payload/server/public/assets/{chunk-ENJZ2VHE-SSbr4n2X.js → chunk-ENJZ2VHE-Dn8FFfaI.js} +1 -1
- package/payload/server/public/assets/{chunk-ICPOFSXX-Cgj9YSpX.js → chunk-ICPOFSXX-JrwcKV7r.js} +1 -1
- package/payload/server/public/assets/{chunk-OYMX7WX6-DNEEcCqI.js → chunk-OYMX7WX6-C0X2fcAm.js} +1 -1
- package/payload/server/public/assets/{chunk-U2HBQHQK-DuaoK83q.js → chunk-U2HBQHQK-DPdLe-f5.js} +1 -1
- package/payload/server/public/assets/{chunk-X2U36JSP-CzMp0dpq.js → chunk-X2U36JSP-Bw8pKkFu.js} +1 -1
- package/payload/server/public/assets/{chunk-YZCP3GAM-B2wBDwSa.js → chunk-YZCP3GAM-DcAJR-EA.js} +1 -1
- package/payload/server/public/assets/{chunk-ZZ45TVLE-DkyF7XKW.js → chunk-ZZ45TVLE-DU374ZbR.js} +1 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-BpMBCYn6.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BU3HoIr1.js +1 -0
- package/payload/server/public/assets/clone-C3j5j6ku.js +1 -0
- package/payload/server/public/assets/{dagre-AGj1P0p4.js → dagre-DisbqNSB.js} +1 -1
- package/payload/server/public/assets/{dagre-KV5264BT-Cnrxcu6A.js → dagre-KV5264BT-D_n7R7V9.js} +1 -1
- package/payload/server/public/assets/{data-Bg0Frxt3.js → data-DwY26t_T.js} +1 -1
- package/payload/server/public/assets/{diagram-5BDNPKRD-gyFYSx73.js → diagram-5BDNPKRD-CJID_5OR.js} +1 -1
- package/payload/server/public/assets/{diagram-G4DWMVQ6-DFmZEv5C.js → diagram-G4DWMVQ6-ByepjvdE.js} +1 -1
- package/payload/server/public/assets/{diagram-MMDJMWI5-DA4qbuEW.js → diagram-MMDJMWI5-DTkAHPHE.js} +1 -1
- package/payload/server/public/assets/{diagram-TYMM5635-D4n-8gig.js → diagram-TYMM5635-CnVRa9NJ.js} +1 -1
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-CigRMjF1.js → erDiagram-SMLLAGMA-CRAGu7nV.js} +1 -1
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-ClS27acA.js → flowDiagram-DWJPFMVM-BJusdlRz.js} +1 -1
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-Dr1IulXe.js → ganttDiagram-T4ZO3ILL-BFMOBBnF.js} +1 -1
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-lwLibdPs.js → gitGraphDiagram-UUTBAWPF-CGWEzh7u.js} +1 -1
- package/payload/server/public/assets/{graph-CpozZ74I.js → graph-D-iQdRDk.js} +1 -1
- package/payload/server/public/assets/{graph-labels-C2y666R0.js → graph-labels-u2_3Eyfh.js} +1 -1
- package/payload/server/public/assets/{graphlib-DBvoJMrc.js → graphlib-DNUvypOi.js} +1 -1
- package/payload/server/public/assets/{infoDiagram-42DDH7IO-D4kReEIV.js → infoDiagram-42DDH7IO-CBDrnRTc.js} +1 -1
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-BnteQRQ0.js → ishikawaDiagram-UXIWVN3A-C7NwSQo_.js} +1 -1
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-CXu6hLyJ.js → journeyDiagram-VCZTEJTY-DSaP7A3F.js} +1 -1
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY-CGDW2jle.js → kanban-definition-6JOO6SKY-DmixHCD4.js} +1 -1
- package/payload/server/public/assets/{line-pdg5hxC3.js → line-CGGoTheL.js} +1 -1
- package/payload/server/public/assets/{mermaid-parser.core-o3lIIK3Z.js → mermaid-parser.core-BudFADW7.js} +1 -1
- package/payload/server/public/assets/{mermaid.core-DLR6Q3rV.js → mermaid.core-BBbdJxXY.js} +3 -3
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-CH4cB0Dn.js → mindmap-definition-QFDTVHPH-CUiD9km1.js} +1 -1
- package/payload/server/public/assets/{pieDiagram-DEJITSTG-Ba4voL_Y.js → pieDiagram-DEJITSTG-BlAWpMr8.js} +1 -1
- package/payload/server/public/assets/{public-C8mil9h0.js → public-CjeEF2vf.js} +3 -3
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-Cqn2xehe.js → quadrantDiagram-34T5L4WZ-CXmIwc4W.js} +1 -1
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-DLfNx99l.js → requirementDiagram-MS252O5E-D_7_OeMC.js} +1 -1
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-uck_V-cb.js → sankeyDiagram-XADWPNL6-BKm_PqzT.js} +1 -1
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-DmQalqud.js → sequenceDiagram-FGHM5R23-CBSR0Zst.js} +1 -1
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-DUdWeVRa.js → stateDiagram-FHFEXIEX-CHNpT69M.js} +1 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Kc8XO6yH.js +1 -0
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-BgL1wM5n.js → timeline-definition-GMOUNBTQ-CxZoew5-.js} +1 -1
- package/payload/server/public/assets/{useSelectionMode-BLpVlOgm.js → useSelectionMode-CwxXQzEI.js} +1 -1
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-7FHjIqPi.js → vennDiagram-DHZGUBPP-CKJdFDcG.js} +1 -1
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-BHzo4V1J.js → wardleyDiagram-NUSXRM2D-C-XBcm-g.js} +1 -1
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-DtuWhqwh.js → xychartDiagram-5P7HB3ND-Crb-ZtaP.js} +1 -1
- package/payload/server/public/data.html +5 -5
- package/payload/server/public/graph.html +6 -6
- package/payload/server/public/index.html +6 -6
- package/payload/server/public/public.html +5 -5
- package/payload/server/server.js +106 -38
- package/payload/server/public/assets/AdminShell-BoJbnn6d.js +0 -1
- package/payload/server/public/assets/channel-BwsV7WTV.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-CEWNfHVo.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BBjzRxux.js +0 -1
- package/payload/server/public/assets/clone-CXtSonnn.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-DNTpFwdy.js +0 -1
- /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-
|
|
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-
|
|
11
|
-
<link rel="modulepreload" crossorigin href="/assets/useSelectionMode-
|
|
12
|
-
<link rel="modulepreload" crossorigin href="/assets/Checkbox-
|
|
13
|
-
<link rel="stylesheet" crossorigin href="/assets/brand-
|
|
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>
|
package/payload/server/server.js
CHANGED
|
@@ -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
|
|
11805
|
-
|
|
11806
|
-
|
|
11807
|
-
|
|
11808
|
-
const
|
|
11809
|
-
|
|
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
|
|
11833
|
-
|
|
11834
|
-
|
|
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
|
-
|
|
11843
|
-
|
|
11844
|
-
|
|
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
|
-
|
|
11857
|
-
|
|
11858
|
-
|
|
11859
|
-
|
|
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
|
-
|
|
11929
|
+
const live = liveIds.has(sessionId);
|
|
11870
11930
|
const title = firstUserMessage(body) ?? sessionId.slice(0, 8);
|
|
11871
|
-
|
|
11931
|
+
const row = {
|
|
11872
11932
|
sessionId,
|
|
11873
11933
|
title,
|
|
11874
|
-
|
|
11875
|
-
|
|
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.
|
|
11879
|
-
console.log(
|
|
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};
|
|
File without changes
|