local-operator-ui 0.31.23 → 0.31.25
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/out/main/index.js +205 -28
- package/out/renderer/assets/{_basePickBy-B4bNbRB1.js → _basePickBy-DtOJmAXM.js} +1 -1
- package/out/renderer/assets/{_baseUniq-CVwZpL22.js → _baseUniq-D4Ilp27b.js} +1 -1
- package/out/renderer/assets/{agent-details-page-BX0suGni.js → agent-details-page-Bh4K8Iwb.js} +2 -2
- package/out/renderer/assets/agent-hub-page-CkRKlRVv.js +11 -0
- package/out/renderer/assets/agents-page-vEQhOUdl.js +7 -0
- package/out/renderer/assets/aida-control-CbUlbi35.js +50 -0
- package/out/renderer/assets/arc-1vBZU1-K.js +1 -0
- package/out/renderer/assets/{architectureDiagram-IEHRJDOE-DXEcmxDN.js → architectureDiagram-IEHRJDOE-DRP5N9mU.js} +1 -1
- package/out/renderer/assets/{blockDiagram-JOT3LUYC-B4wc6PHf.js → blockDiagram-JOT3LUYC-ctI5tO48.js} +1 -1
- package/out/renderer/assets/{book-open-Cr3wDsTU.js → book-open-CFXGmNLm.js} +1 -1
- package/out/renderer/assets/browser-page-D4WeldyV.js +1 -0
- package/out/renderer/assets/browser-webauthn-prompt-BuK5zreB.js +1 -0
- package/out/renderer/assets/{c4Diagram-VJAJSXHY-1uEwtfMU.js → c4Diagram-VJAJSXHY-l-ND7xp_.js} +1 -1
- package/out/renderer/assets/channel-DGKS_wLD.js +1 -0
- package/out/renderer/assets/{chunk-4BMEZGHF-DRHY8LIl.js → chunk-4BMEZGHF-6Y8cTvPc.js} +1 -1
- package/out/renderer/assets/{chunk-A2AXSNBT-QZQ3z3yi.js → chunk-A2AXSNBT-BgaFZM8u.js} +1 -1
- package/out/renderer/assets/{chunk-AEK57VVT-DtF0CfVL.js → chunk-AEK57VVT-BH1nrUJX.js} +1 -1
- package/out/renderer/assets/{chunk-D6G4REZN-BEo703CU.js → chunk-D6G4REZN-CUFL14Pn.js} +1 -1
- package/out/renderer/assets/{chunk-RZ5BOZE2-daWWt7HX.js → chunk-RZ5BOZE2-b6xH254o.js} +1 -1
- package/out/renderer/assets/{chunk-XZIHB7SX-u-ggjLcj.js → chunk-XZIHB7SX-LJ4OJrLS.js} +1 -1
- package/out/renderer/assets/classDiagram-GIVACNV2-BEQUGws4.js +1 -0
- package/out/renderer/assets/classDiagram-v2-COTLJTTW-BEQUGws4.js +1 -0
- package/out/renderer/assets/clone-CRiQHx8U.js +1 -0
- package/out/renderer/assets/{console-mirror-BF1k198x.js → console-mirror-CFCrcGWO.js} +1 -1
- package/out/renderer/assets/{consoleCapture-CB6NivW_.js → consoleCapture-CjKcWy4E.js} +1 -1
- package/out/renderer/assets/{dagre-OKDRZEBW-8g3lvHle.js → dagre-OKDRZEBW-DXHKHLnU.js} +1 -1
- package/out/renderer/assets/{diagram-SSKATNLV-MQ--LUAc.js → diagram-SSKATNLV-UKgq2fbv.js} +1 -1
- package/out/renderer/assets/{diagram-VNBRO52H-D1t3DNGA.js → diagram-VNBRO52H-BabJ1Nlz.js} +1 -1
- package/out/renderer/assets/{en-US-BkS8Ixxl.js → en-US-BcB1DWxG.js} +1 -1
- package/out/renderer/assets/{erDiagram-Q7BY3M3F-BFxoPqTx.js → erDiagram-Q7BY3M3F-Sw0hlfoT.js} +1 -1
- package/out/renderer/assets/{error-boundary-BA_k6l0v.js → error-boundary-C0hpzM--.js} +1 -1
- package/out/renderer/assets/{flowDiagram-4HSFHLVR-CCtyNwMw.js → flowDiagram-4HSFHLVR-DXjBuAqj.js} +1 -1
- package/out/renderer/assets/format-CZUObkkr.js +1 -0
- package/out/renderer/assets/{ganttDiagram-APWFNJXF-BTr5f_or.js → ganttDiagram-APWFNJXF-Cq2SPDKE.js} +4 -4
- package/out/renderer/assets/{gitGraphDiagram-7IBYFJ6S-BPIItuIc.js → gitGraphDiagram-7IBYFJ6S-ChKKsHx5.js} +1 -1
- package/out/renderer/assets/{graph-BfbjaXow.js → graph-BAUmW-50.js} +1 -1
- package/out/renderer/assets/index-BAIw_wBx.css +1 -0
- package/out/renderer/assets/{index-Dj4iGwiM.js → index-CFuQcv73.js} +1 -1
- package/out/renderer/assets/index-ChmxCHh1.js +7 -0
- package/out/renderer/assets/{index-CpCEfkD6.js → index-qyhLiyUA.js} +413 -384
- package/out/renderer/assets/infoDiagram-PH2N3AL5-DiBBd_87.js +2 -0
- package/out/renderer/assets/{installer-B0cRTOY4.js → installer-C3EF84m2.js} +1 -1
- package/out/renderer/assets/{journeyDiagram-U35MCT3I-CcTXYhF0.js → journeyDiagram-U35MCT3I-DWuX3DW-.js} +1 -1
- package/out/renderer/assets/{kanban-definition-NDS4AKOZ-C8zq_ypt.js → kanban-definition-NDS4AKOZ-DOXDVLfH.js} +1 -1
- package/out/renderer/assets/{layout-JqMKtpWk.js → layout-DHD837Ua.js} +1 -1
- package/out/renderer/assets/{legacy-agents-page-DAsmlMHi.js → legacy-agents-page-C8_h-8Wq.js} +4 -4
- package/out/renderer/assets/{mermaid.core-BllcynrC.js → mermaid.core-BxuSu0Fy.js} +5 -5
- package/out/renderer/assets/{mesh-page-CEvXBJRu.js → mesh-page-BfktlCxW.js} +1 -1
- package/out/renderer/assets/{mindmap-definition-ALO5MXBD-BKNq6niU.js → mindmap-definition-ALO5MXBD-BWCb1yuZ.js} +1 -1
- package/out/renderer/assets/{mini-DVCmoZnA.js → mini-p9kRkvFx.js} +1 -1
- package/out/renderer/assets/org-surface-gate-Bw1O5WmZ.js +1 -0
- package/out/renderer/assets/{page-header-6gka2c-2.js → page-header-CbFURe4P.js} +1 -1
- package/out/renderer/assets/parseISO-CZfAC2_J.js +1 -0
- package/out/renderer/assets/pieDiagram-IB7DONF6-CCiaGzMI.js +30 -0
- package/out/renderer/assets/projects-page-t99csL0v.js +35 -0
- package/out/renderer/assets/{quadrantDiagram-7GDLP6J5-CywomFxA.js → quadrantDiagram-7GDLP6J5-_eUAPvOV.js} +1 -1
- package/out/renderer/assets/{radar-MK3ICKWK-DVI3UMkb.js → radar-MK3ICKWK-CoWAOtlW.js} +1 -1
- package/out/renderer/assets/{radient-auth-buttons-CuD380Dg.js → radient-auth-buttons-CIoFcpsP.js} +1 -1
- package/out/renderer/assets/{requirementDiagram-KVF5MWMF-Dx45yRmF.js → requirementDiagram-KVF5MWMF-DsKtTFMa.js} +1 -1
- package/out/renderer/assets/sankeyDiagram-QLVOVGJD-D_3HMjNJ.js +10 -0
- package/out/renderer/assets/{schedules-page-I-U4fcxy.js → schedules-page-DgLrBBeE.js} +2 -2
- package/out/renderer/assets/{sequenceDiagram-X6HHIX6F-DnpYYNTl.js → sequenceDiagram-X6HHIX6F-BjrJomG7.js} +1 -1
- package/out/renderer/assets/settings-page-DCTtjWIR.js +292 -0
- package/out/renderer/assets/{settings-section-C-N8ZUsZ.js → settings-section-BNMsDc1y.js} +1 -1
- package/out/renderer/assets/{stateDiagram-DGXRK772-D4r0DeWs.js → stateDiagram-DGXRK772-C1qHybrk.js} +1 -1
- package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-CThxNf1C.js +1 -0
- package/out/renderer/assets/{textarea-CKZ36wuK.js → textarea-B1SvaviK.js} +5 -5
- package/out/renderer/assets/{timeline-definition-BDJGKUSR-CFliRV8y.js → timeline-definition-BDJGKUSR-CesgQJz2.js} +1 -1
- package/out/renderer/assets/ui-preferences-store-OD43KVN4.js +1 -0
- package/out/renderer/assets/{use-download-agent-mutation-BSPpQ8Bq.js → use-download-agent-mutation-CLAqbNgy.js} +2 -2
- package/out/renderer/assets/use-memberships-query-C4q_o12A.js +1 -0
- package/out/renderer/assets/{xychartDiagram-VJFVF3MP-BDBd-Bch.js → xychartDiagram-VJFVF3MP-BF-M8M-D.js} +1 -1
- package/out/renderer/console-capture.html +5 -5
- package/out/renderer/index.html +8 -8
- package/out/renderer/installer.html +5 -5
- package/out/renderer/mini.html +6 -6
- package/package.json +2 -2
- package/out/renderer/assets/agent-hub-page-mag_Df5M.js +0 -6
- package/out/renderer/assets/agents-page-B_OovOwu.js +0 -2
- package/out/renderer/assets/aida-control-Dxs-zwz7.js +0 -50
- package/out/renderer/assets/arc-fIR19KcX.js +0 -1
- package/out/renderer/assets/browser-page-QYVO_Ty7.js +0 -1
- package/out/renderer/assets/browser-webauthn-prompt-CsoybaA5.js +0 -1
- package/out/renderer/assets/channel-CNKok60B.js +0 -1
- package/out/renderer/assets/classDiagram-GIVACNV2-mOBGp7Id.js +0 -1
- package/out/renderer/assets/classDiagram-v2-COTLJTTW-mOBGp7Id.js +0 -1
- package/out/renderer/assets/clone-oFxgV7gz.js +0 -1
- package/out/renderer/assets/index-CEf8R_cp.css +0 -1
- package/out/renderer/assets/index-DAlzRpjG.js +0 -7
- package/out/renderer/assets/infoDiagram-PH2N3AL5-C6s8nAmm.js +0 -2
- package/out/renderer/assets/org-surface-gate-i2tRIcUb.js +0 -1
- package/out/renderer/assets/parseISO-BWtr7JL9.js +0 -1
- package/out/renderer/assets/pieDiagram-IB7DONF6-B5zKXmP-.js +0 -30
- package/out/renderer/assets/projects-page-Bl47UxEv.js +0 -40
- package/out/renderer/assets/sankeyDiagram-QLVOVGJD-MTCmQwVB.js +0 -10
- package/out/renderer/assets/settings-page-DwfZyrWO.js +0 -292
- package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-DLJs3lLO.js +0 -1
- package/out/renderer/assets/ui-preferences-store-2ZO9oo_L.js +0 -1
- package/out/renderer/assets/use-memberships-query-ChbBWsGj.js +0 -1
- /package/out/renderer/assets/{index-BPylsrgv.js → index-B0XQElRx.js} +0 -0
package/out/main/index.js
CHANGED
|
@@ -428,8 +428,37 @@ const desktopRequestUnion = zod.z.discriminatedUnion("op", [
|
|
|
428
428
|
zod.z.object({
|
|
429
429
|
op: zod.z.literal("sessions.create"),
|
|
430
430
|
requestId,
|
|
431
|
-
|
|
431
|
+
/*
|
|
432
|
+
* OPTIONAL ONLY FOR A `purpose` CREATE, and the pair is enforced below by
|
|
433
|
+
* the union's own `superRefine` rather than by two union members: a
|
|
434
|
+
* `discriminatedUnion` accepts one member per `op` value, and a `.refine`
|
|
435
|
+
* on a member would make it a `ZodEffects` the union refuses (the same
|
|
436
|
+
* constraint `agent.publish`'s pairing rule states).
|
|
437
|
+
*
|
|
438
|
+
* WHY A CONFIGURATION RUN OMITS IT AT ALL. `cwd` exists so a conversation
|
|
439
|
+
* has a folder to work in, and this app has always refused an empty one
|
|
440
|
+
* precisely because it would resolve to "a directory the user never named".
|
|
441
|
+
* A configuration run edits this device's registries and holds no file
|
|
442
|
+
* tools at all, so its cwd is not authority — and the renderer cannot name
|
|
443
|
+
* one honestly: it would have to invent a path it cannot verify exists.
|
|
444
|
+
* The backend resolves it (to the config directory) when `purpose` is set.
|
|
445
|
+
*/
|
|
446
|
+
cwd: zod.z.string().min(1).max(4096).optional(),
|
|
432
447
|
target: target.optional(),
|
|
448
|
+
/*
|
|
449
|
+
* WHAT KIND OF SESSION THIS IS, when it is not a conversation the operator
|
|
450
|
+
* asked for: `agents-config` starts a supervised configuration run (the
|
|
451
|
+
* Agents page's composer), which the backend stamps as a hidden origin and
|
|
452
|
+
* admits through the desktop door for watch/events/messages/interrupt
|
|
453
|
+
* without ever listing it as one of the operator's conversations.
|
|
454
|
+
*
|
|
455
|
+
* A LITERAL, so a typo is a compile error on this side and a 422 on a
|
|
456
|
+
* backend that does not know the value. It is capability-gated before it is
|
|
457
|
+
* ever sent (`agents_config`), because a backend older than this field
|
|
458
|
+
* validates the create body with `extra="forbid"` and would report a
|
|
459
|
+
* malformed request for a request the app deliberately made.
|
|
460
|
+
*/
|
|
461
|
+
purpose: zod.z.literal("agents-config").optional(),
|
|
433
462
|
/*
|
|
434
463
|
* OMITTED when the user never picked anything, so the body is the one
|
|
435
464
|
* this op sent before the draft's chips could open: making them
|
|
@@ -1685,6 +1714,27 @@ const desktopRequestUnion = zod.z.discriminatedUnion("op", [
|
|
|
1685
1714
|
]);
|
|
1686
1715
|
const desktopRequestSchema = desktopRequestUnion.superRefine(
|
|
1687
1716
|
(request, ctx) => {
|
|
1717
|
+
if (request.op === "sessions.create" && request.purpose === void 0) {
|
|
1718
|
+
if (request.cwd === void 0) {
|
|
1719
|
+
ctx.addIssue({
|
|
1720
|
+
code: zod.z.ZodIssueCode.custom,
|
|
1721
|
+
message: "A conversation needs a working directory: only a configuration run (`purpose`) may omit `cwd`.",
|
|
1722
|
+
path: ["cwd"]
|
|
1723
|
+
});
|
|
1724
|
+
}
|
|
1725
|
+
return;
|
|
1726
|
+
}
|
|
1727
|
+
if (request.op === "sessions.create" && request.purpose !== void 0) {
|
|
1728
|
+
for (const field of ["cwd", "target", "model", "draftId"]) {
|
|
1729
|
+
if (request[field] === void 0) continue;
|
|
1730
|
+
ctx.addIssue({
|
|
1731
|
+
code: zod.z.ZodIssueCode.custom,
|
|
1732
|
+
message: `A configuration run resolves its own \`${field}\`: send \`purpose\` alone.`,
|
|
1733
|
+
path: [field]
|
|
1734
|
+
});
|
|
1735
|
+
}
|
|
1736
|
+
return;
|
|
1737
|
+
}
|
|
1688
1738
|
if (request.op !== "agent.publish" && request.op !== "agent.republish") {
|
|
1689
1739
|
return;
|
|
1690
1740
|
}
|
|
@@ -2064,12 +2114,20 @@ function desktopEndpoint(request) {
|
|
|
2064
2114
|
method: "POST",
|
|
2065
2115
|
body: {
|
|
2066
2116
|
request_id: request.requestId,
|
|
2067
|
-
|
|
2117
|
+
/*
|
|
2118
|
+
* OMITTED, not nulled, for a configuration run: the backend resolves the
|
|
2119
|
+
* folder itself (see the field's own note), and sending an empty string
|
|
2120
|
+
* would be a different request from the one this feature means to make —
|
|
2121
|
+
* it would trip the `min(1)` on the backend's own `cwd` validator and
|
|
2122
|
+
* report a mistake nobody made.
|
|
2123
|
+
*/
|
|
2124
|
+
...request.cwd !== void 0 ? { cwd: request.cwd } : {},
|
|
2068
2125
|
...request.target ? { target: request.target } : {},
|
|
2069
2126
|
...request.model ? { model: request.model } : {},
|
|
2070
2127
|
// Omitted, not nulled, when the pane has no minted id: see the field's
|
|
2071
2128
|
// own note for the byte-identity promise this keeps.
|
|
2072
|
-
...request.draftId ? { draft_id: request.draftId } : {}
|
|
2129
|
+
...request.draftId ? { draft_id: request.draftId } : {},
|
|
2130
|
+
...request.purpose ? { purpose: request.purpose } : {}
|
|
2073
2131
|
}
|
|
2074
2132
|
};
|
|
2075
2133
|
case "sessions.preview":
|
|
@@ -19149,6 +19207,7 @@ class TabRegistry {
|
|
|
19149
19207
|
homeSessionId: restored ? null : options.sessionId ?? null,
|
|
19150
19208
|
nonce: restored || options.owner === "user" ? null : mintNonce(),
|
|
19151
19209
|
handedTo: null,
|
|
19210
|
+
handedFrom: null,
|
|
19152
19211
|
restored,
|
|
19153
19212
|
restoreRow: options.restoreRow,
|
|
19154
19213
|
createdAt: Date.now(),
|
|
@@ -19293,6 +19352,7 @@ class TabRegistry {
|
|
|
19293
19352
|
);
|
|
19294
19353
|
}
|
|
19295
19354
|
if (record.owner !== "agent") this.assertAgentCapacity();
|
|
19355
|
+
if (record.handedFrom === null) record.handedFrom = record.owner;
|
|
19296
19356
|
record.owner = "agent";
|
|
19297
19357
|
record.sessionId = sessionId2;
|
|
19298
19358
|
record.handedTo = sessionId2;
|
|
@@ -19320,6 +19380,7 @@ class TabRegistry {
|
|
|
19320
19380
|
record.owner = "user";
|
|
19321
19381
|
record.sessionId = record.homeSessionId;
|
|
19322
19382
|
record.handedTo = null;
|
|
19383
|
+
record.handedFrom = null;
|
|
19323
19384
|
record.allocationId = "";
|
|
19324
19385
|
this.bumpEpoch(record.tabId);
|
|
19325
19386
|
this.onChanged();
|
|
@@ -20646,12 +20707,48 @@ class BrowserHost {
|
|
|
20646
20707
|
whenRestored() {
|
|
20647
20708
|
return this.hydration;
|
|
20648
20709
|
}
|
|
20710
|
+
/**
|
|
20711
|
+
* Start ONE restored tab's load, without waiting for it.
|
|
20712
|
+
*
|
|
20713
|
+
* The one spelling of "how a restored tab gets its page back", shared by
|
|
20714
|
+
* `hydrateOne` (which awaits the promise under the per-tab timeout) and the
|
|
20715
|
+
* budget drain at the end of the pass (which only STARTS it). `null` when the
|
|
20716
|
+
* tab or its view is already gone — the user can close a tab while the pass is
|
|
20717
|
+
* still running, and the drain iterates a queue collected across awaits.
|
|
20718
|
+
*/
|
|
20719
|
+
startRestore(tabId, recorded) {
|
|
20720
|
+
const record = this.registry.get(tabId);
|
|
20721
|
+
if (!record) return null;
|
|
20722
|
+
const contents = record.view.webContents;
|
|
20723
|
+
if (contents.isDestroyed()) return null;
|
|
20724
|
+
const history = contents.navigationHistory;
|
|
20725
|
+
const entry = recorded.entries[recorded.activeIndex];
|
|
20726
|
+
return history?.restore ? history.restore({
|
|
20727
|
+
entries: recorded.entries,
|
|
20728
|
+
index: recorded.activeIndex
|
|
20729
|
+
}) : (
|
|
20730
|
+
// The honest degradation (see `NavigationHistoryLike`): a view with no
|
|
20731
|
+
// history API still gets put back on the page it was showing, without
|
|
20732
|
+
// its stack and its page state.
|
|
20733
|
+
entry ? contents.loadURL(entry.url) : Promise.resolve()
|
|
20734
|
+
);
|
|
20735
|
+
}
|
|
20649
20736
|
/**
|
|
20650
20737
|
* Apply each restored tab's history and debugger session, bounded.
|
|
20651
20738
|
*
|
|
20652
20739
|
* `Promise.allSettled` rather than `Promise.all`: the two steps below already turn
|
|
20653
20740
|
* a failure into a log line, and a rejection here would be an unhandled rejection
|
|
20654
20741
|
* on a promise only a test awaits.
|
|
20742
|
+
*
|
|
20743
|
+
* THE BUDGET STOPS THE PASS WAITING, NEVER THE WORK (2026-09-29, RC2b). When the
|
|
20744
|
+
* deadline expires the workers stop TAKING tabs, and whatever is still queued is
|
|
20745
|
+
* drained below: each remaining tab's load is STARTED, unawaited, so nothing is
|
|
20746
|
+
* left `about:blank` forever. Before the drain, the deadline check ran AFTER the
|
|
20747
|
+
* shift and silently dropped the tab it had just taken, and every other queued
|
|
20748
|
+
* tab got no load at all while the log claimed "they keep loading in the
|
|
20749
|
+
* background" (the field: up to 14 blank tabs from one launch). The constants
|
|
20750
|
+
* above are deliberately unchanged — one hung page must not withhold the host,
|
|
20751
|
+
* so what changed is only what happens AFTER the budget, not the budget.
|
|
20655
20752
|
*/
|
|
20656
20753
|
async hydrateRestored(created) {
|
|
20657
20754
|
const deadline2 = Date.now() + RESTORE_BUDGET_MS;
|
|
@@ -20659,17 +20756,17 @@ class BrowserHost {
|
|
|
20659
20756
|
let reported = false;
|
|
20660
20757
|
const worker = async () => {
|
|
20661
20758
|
for (; ; ) {
|
|
20662
|
-
const next = queue.shift();
|
|
20663
|
-
if (!next) return;
|
|
20664
20759
|
if (Date.now() >= deadline2) {
|
|
20665
|
-
if (!reported) {
|
|
20760
|
+
if (queue.length > 0 && !reported) {
|
|
20666
20761
|
reported = true;
|
|
20667
20762
|
this.log(
|
|
20668
|
-
`[browser] the ${RESTORE_BUDGET_MS}ms restore budget expired with ${queue.length
|
|
20763
|
+
`[browser] the ${RESTORE_BUDGET_MS}ms restore budget expired with ${queue.length} tab(s) still queued; they start loading in the background`
|
|
20669
20764
|
);
|
|
20670
20765
|
}
|
|
20671
20766
|
return;
|
|
20672
20767
|
}
|
|
20768
|
+
const next = queue.shift();
|
|
20769
|
+
if (!next) return;
|
|
20673
20770
|
await this.hydrateOne(next.tabId, next.recorded);
|
|
20674
20771
|
}
|
|
20675
20772
|
};
|
|
@@ -20679,30 +20776,75 @@ class BrowserHost {
|
|
|
20679
20776
|
worker
|
|
20680
20777
|
)
|
|
20681
20778
|
);
|
|
20779
|
+
for (const next of queue) {
|
|
20780
|
+
void this.restoreUnderTimeout(next.tabId, next.recorded).catch(
|
|
20781
|
+
(error) => {
|
|
20782
|
+
this.log(
|
|
20783
|
+
`[browser] could not start the restore of tab ${next.tabId}: ${String(error)}`
|
|
20784
|
+
);
|
|
20785
|
+
}
|
|
20786
|
+
);
|
|
20787
|
+
}
|
|
20682
20788
|
}
|
|
20683
|
-
/**
|
|
20684
|
-
|
|
20789
|
+
/**
|
|
20790
|
+
* The bounded half of ONE restore: start the load, wait
|
|
20791
|
+
* `RESTORE_TAB_TIMEOUT_MS`, and record a no-commit death as a load failure.
|
|
20792
|
+
*
|
|
20793
|
+
* Shared by the awaited first wave (`hydrateOne`) and the post-budget drain,
|
|
20794
|
+
* because the failure mode does not care whether anyone awaits it: a server
|
|
20795
|
+
* that accepts and never answers produces no `did-fail-load` and no commit,
|
|
20796
|
+
* so THIS timer is the only thing that can turn it into the strip's Failed
|
|
20797
|
+
* chip and the counted close. The drain ran a private half of this step until
|
|
20798
|
+
* round 1 (m-1 = Q-1 = U1 = D3), which is how stragglers spun outside the
|
|
20799
|
+
* close set.
|
|
20800
|
+
*
|
|
20801
|
+
* WHETHER THIS HYDRATION'S NAVIGATION COMMITTED A DOCUMENT, read from the
|
|
20802
|
+
* event rather than from a property, because neither of the two obvious
|
|
20803
|
+
* reads answers the question: `getURL()` already reports the TARGET url
|
|
20804
|
+
* while the restore is still pending, and `history.restore()`'s promise does
|
|
20805
|
+
* not settle until the load FINISHES, so it is still pending for a page that
|
|
20806
|
+
* committed seconds ago (both measured on Electron 44, 2026-09-29).
|
|
20807
|
+
* `did-navigate` is the commit, and it is what tells "the page came back but
|
|
20808
|
+
* is still fetching something" apart from "nothing ever arrived" — only the
|
|
20809
|
+
* second one is a failure to record (see the catch below).
|
|
20810
|
+
*/
|
|
20811
|
+
async restoreUnderTimeout(tabId, recorded) {
|
|
20685
20812
|
const record = this.registry.get(tabId);
|
|
20686
20813
|
if (!record) return;
|
|
20687
20814
|
const contents = record.view.webContents;
|
|
20688
|
-
|
|
20689
|
-
const
|
|
20815
|
+
let committed = false;
|
|
20816
|
+
const onCommitted = () => {
|
|
20817
|
+
committed = true;
|
|
20818
|
+
};
|
|
20819
|
+
contents.on("did-navigate", onCommitted);
|
|
20690
20820
|
try {
|
|
20691
|
-
|
|
20692
|
-
|
|
20693
|
-
entries: recorded.entries,
|
|
20694
|
-
index: recorded.activeIndex
|
|
20695
|
-
}) : (
|
|
20696
|
-
// The honest degradation (see `NavigationHistoryLike`): a view with no
|
|
20697
|
-
// history API still gets put back on the page it was showing, without
|
|
20698
|
-
// its stack and its page state.
|
|
20699
|
-
entry ? contents.loadURL(entry.url) : Promise.resolve()
|
|
20700
|
-
),
|
|
20701
|
-
RESTORE_TAB_TIMEOUT_MS
|
|
20702
|
-
);
|
|
20821
|
+
const started = this.startRestore(tabId, recorded);
|
|
20822
|
+
if (started) await withTimeout(started, RESTORE_TAB_TIMEOUT_MS);
|
|
20703
20823
|
} catch (error) {
|
|
20704
20824
|
this.log(`[browser] could not restore tab ${tabId}: ${String(error)}`);
|
|
20825
|
+
if (!committed && !this.loadFailures.has(tabId) && this.registry.get(tabId) && !contents.isDestroyed()) {
|
|
20826
|
+
const entry = recorded.entries[recorded.activeIndex];
|
|
20827
|
+
this.recordLoadFailure(tabId, {
|
|
20828
|
+
code: -2,
|
|
20829
|
+
description: "ERR_FAILED (restore)",
|
|
20830
|
+
url: entry?.url ?? contents.getURL()
|
|
20831
|
+
});
|
|
20832
|
+
this.log(
|
|
20833
|
+
`[browser] tab ${tabId} is marked as failed: the restore did not commit a page`
|
|
20834
|
+
);
|
|
20835
|
+
}
|
|
20836
|
+
} finally {
|
|
20837
|
+
if (!contents.isDestroyed()) {
|
|
20838
|
+
contents.removeListener("did-navigate", onCommitted);
|
|
20839
|
+
}
|
|
20705
20840
|
}
|
|
20841
|
+
}
|
|
20842
|
+
/** One tab's half of the pass: the history stack, then the debugger session. */
|
|
20843
|
+
async hydrateOne(tabId, recorded) {
|
|
20844
|
+
const record = this.registry.get(tabId);
|
|
20845
|
+
if (!record) return;
|
|
20846
|
+
const contents = record.view.webContents;
|
|
20847
|
+
await this.restoreUnderTimeout(tabId, recorded);
|
|
20706
20848
|
if (!this.registry.get(tabId)) return;
|
|
20707
20849
|
try {
|
|
20708
20850
|
await withTimeout(this.cdp.attach(contents), RESTORE_TAB_TIMEOUT_MS);
|
|
@@ -21849,6 +21991,15 @@ function contentRectOrNull(value) {
|
|
|
21849
21991
|
height: rect.height
|
|
21850
21992
|
};
|
|
21851
21993
|
}
|
|
21994
|
+
function paneNavigationDirection(input) {
|
|
21995
|
+
if (input.type !== "keyDown") return null;
|
|
21996
|
+
if (!(input.meta || input.control)) return null;
|
|
21997
|
+
if (input.alt || input.shift) return null;
|
|
21998
|
+
if (input.isAutoRepeat) return null;
|
|
21999
|
+
if (input.key === "[") return "back";
|
|
22000
|
+
if (input.key === "]") return "forward";
|
|
22001
|
+
return null;
|
|
22002
|
+
}
|
|
21852
22003
|
const PROOF_SHAPE = /^[a-zA-Z0-9_-]{32,}$/;
|
|
21853
22004
|
const MISSING_PROOF_MESSAGE = "missing private browser ownership proof";
|
|
21854
22005
|
class OwnershipLedger {
|
|
@@ -23312,6 +23463,10 @@ function boundTabs(tabs2) {
|
|
|
23312
23463
|
const kept = tabs2.filter((_tab, index) => keep.has(index));
|
|
23313
23464
|
return { kept, dropped: tabs2.length - kept.length };
|
|
23314
23465
|
}
|
|
23466
|
+
function restorableRow(row) {
|
|
23467
|
+
if (row.lastLoadFailed === true) return false;
|
|
23468
|
+
return !(row.owner === "agent" && row.active !== true);
|
|
23469
|
+
}
|
|
23315
23470
|
function readSession(path2, log2 = () => {
|
|
23316
23471
|
}) {
|
|
23317
23472
|
try {
|
|
@@ -23332,13 +23487,20 @@ function readSession(path2, log2 = () => {
|
|
|
23332
23487
|
}
|
|
23333
23488
|
if (!Array.isArray(file.tabs)) return [];
|
|
23334
23489
|
const sane = file.tabs.map(saneTab).filter((tab) => tab !== null);
|
|
23335
|
-
const
|
|
23336
|
-
const dead = sane.length -
|
|
23490
|
+
const unflagged = sane.filter((tab) => tab.lastLoadFailed !== true);
|
|
23491
|
+
const dead = sane.length - unflagged.length;
|
|
23337
23492
|
if (dead > 0) {
|
|
23338
23493
|
log2(
|
|
23339
23494
|
`[browser] ${dead} recorded tab(s) were showing a load failure when the session ended; not restored`
|
|
23340
23495
|
);
|
|
23341
23496
|
}
|
|
23497
|
+
const restorableRows = unflagged.filter(restorableRow);
|
|
23498
|
+
const agentSkipped = unflagged.length - restorableRows.length;
|
|
23499
|
+
if (agentSkipped > 0) {
|
|
23500
|
+
log2(
|
|
23501
|
+
`[browser] ${agentSkipped} recorded tab(s) were opened by an agent and were not active at the quit; not restored`
|
|
23502
|
+
);
|
|
23503
|
+
}
|
|
23342
23504
|
const { kept, dropped } = boundTabs(restorableRows);
|
|
23343
23505
|
if (dropped) {
|
|
23344
23506
|
log2(
|
|
@@ -23374,9 +23536,10 @@ function captureTabs(records, activeTabId, failedTabIds) {
|
|
|
23374
23536
|
...entry.pageState ? { pageState: entry.pageState } : {}
|
|
23375
23537
|
})) : [];
|
|
23376
23538
|
const mark = failedTabIds.has(record.tabId) ? { lastLoadFailed: true } : {};
|
|
23539
|
+
const owner = record.handedFrom === "user" ? "user" : record.owner;
|
|
23377
23540
|
if (entries.some(restorable)) {
|
|
23378
23541
|
captured.push({
|
|
23379
|
-
owner
|
|
23542
|
+
owner,
|
|
23380
23543
|
active: record.tabId === activeTabId,
|
|
23381
23544
|
...mark,
|
|
23382
23545
|
entries,
|
|
@@ -23387,7 +23550,7 @@ function captureTabs(records, activeTabId, failedTabIds) {
|
|
|
23387
23550
|
const restored = record.restoreRow;
|
|
23388
23551
|
if (restored) {
|
|
23389
23552
|
captured.push({
|
|
23390
|
-
owner
|
|
23553
|
+
owner,
|
|
23391
23554
|
active: record.tabId === activeTabId,
|
|
23392
23555
|
...mark,
|
|
23393
23556
|
entries: restored.entries,
|
|
@@ -23468,7 +23631,7 @@ class BrowserSessionStore {
|
|
|
23468
23631
|
* explicitly instead of a representative sequence. */
|
|
23469
23632
|
commitStopCapture(rows) {
|
|
23470
23633
|
const decision = stopSnapshotDecision(
|
|
23471
|
-
rows.filter(
|
|
23634
|
+
rows.filter(restorableRow).length,
|
|
23472
23635
|
readSession(this.path, this.log).length
|
|
23473
23636
|
);
|
|
23474
23637
|
if (decision.write) {
|
|
@@ -23972,6 +24135,12 @@ async function startBrowserHost(options) {
|
|
|
23972
24135
|
};
|
|
23973
24136
|
contents.on("will-navigate", onWillNavigate);
|
|
23974
24137
|
contents.on("will-redirect", onWillNavigate);
|
|
24138
|
+
contents.on("before-input-event", (event, input) => {
|
|
24139
|
+
const direction = paneNavigationDirection(input);
|
|
24140
|
+
if (!direction) return;
|
|
24141
|
+
event.preventDefault();
|
|
24142
|
+
host.historyActive(direction);
|
|
24143
|
+
});
|
|
23975
24144
|
const notifyChrome = () => {
|
|
23976
24145
|
options.window.webContents.send("browser-state-changed");
|
|
23977
24146
|
};
|
|
@@ -24044,6 +24213,14 @@ async function startBrowserHost(options) {
|
|
|
24044
24213
|
event.preventDefault();
|
|
24045
24214
|
log2("[browser] refused a webview attachment inside a popup");
|
|
24046
24215
|
});
|
|
24216
|
+
childContents.on("before-input-event", (event, input) => {
|
|
24217
|
+
const direction = paneNavigationDirection(input);
|
|
24218
|
+
if (!direction) return;
|
|
24219
|
+
event.preventDefault();
|
|
24220
|
+
const navigation = childContents.navigationHistory;
|
|
24221
|
+
if (direction === "back") navigation.goBack();
|
|
24222
|
+
else navigation.goForward();
|
|
24223
|
+
});
|
|
24047
24224
|
if (!options.backgroundThrottling) {
|
|
24048
24225
|
childContents.setBackgroundThrottling(false);
|
|
24049
24226
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{e as o,c as b,g as v,k as O,h as P,j as p,l as w,m as A,n as x,t as c,o as N}from"./_baseUniq-
|
|
1
|
+
import{e as o,c as b,g as v,k as O,h as P,j as p,l as w,m as A,n as x,t as c,o as N}from"./_baseUniq-D4Ilp27b.js";import{as as g,aa as y,at as E,au as F,av as M,aw as I,ax as _,ay as $,az as B,aA as T}from"./mermaid.core-BxuSu0Fy.js";var S=/\s/;function z(n){for(var r=n.length;r--&&S.test(n.charAt(r)););return r}var G=/^\s+/;function H(n){return n&&n.slice(0,z(n)+1).replace(G,"")}var m=NaN,L=/^[-+]0x[0-9a-f]+$/i,R=/^0b[01]+$/i,q=/^0o[0-7]+$/i,C=parseInt;function K(n){if(typeof n=="number")return n;if(o(n))return m;if(g(n)){var r=typeof n.valueOf=="function"?n.valueOf():n;n=g(r)?r+"":r}if(typeof n!="string")return n===0?n:+n;n=H(n);var t=R.test(n);return t||q.test(n)?C(n.slice(2),t?2:8):L.test(n)?m:+n}var W=1/0,X=17976931348623157e292;function Y(n){if(!n)return n===0?n:0;if(n=K(n),n===W||n===-1/0){var r=n<0?-1:1;return r*X}return n===n?n:0}function D(n){var r=Y(n),t=r%1;return r===r?t?r-t:r:0}function fn(n){var r=n==null?0:n.length;return r?b(n):[]}var l=Object.prototype,J=l.hasOwnProperty,dn=y(function(n,r){n=Object(n);var t=-1,e=r.length,a=e>2?r[2]:void 0;for(a&&E(r[0],r[1],a)&&(e=1);++t<e;)for(var f=r[t],i=F(f),s=-1,d=i.length;++s<d;){var u=i[s],h=n[u];(h===void 0||M(h,l[u])&&!J.call(n,u))&&(n[u]=f[u])}return n});function un(n){var r=n==null?0:n.length;return r?n[r-1]:void 0}function Q(n){return function(r,t,e){var a=Object(r);if(!I(r)){var f=v(t);r=O(r),t=function(s){return f(a[s],s,a)}}var i=n(r,t,e);return i>-1?a[f?r[i]:i]:void 0}}var U=Math.max;function Z(n,r,t){var e=n==null?0:n.length;if(!e)return-1;var a=t==null?0:D(t);return a<0&&(a=U(e+a,0)),P(n,v(r),a)}var hn=Q(Z);function V(n,r){var t=-1,e=I(n)?Array(n.length):[];return p(n,function(a,f,i){e[++t]=r(a,f,i)}),e}function gn(n,r){var t=_(n)?w:V;return t(n,v(r))}var j=Object.prototype,k=j.hasOwnProperty;function nn(n,r){return n!=null&&k.call(n,r)}function vn(n,r){return n!=null&&A(n,r,nn)}function rn(n,r){return n<r}function tn(n,r,t){for(var e=-1,a=n.length;++e<a;){var f=n[e],i=r(f);if(i!=null&&(s===void 0?i===i&&!o(i):t(i,s)))var s=i,d=f}return d}function mn(n){return n&&n.length?tn(n,$,rn):void 0}function an(n,r,t,e){if(!g(n))return n;r=x(r,n);for(var a=-1,f=r.length,i=f-1,s=n;s!=null&&++a<f;){var d=c(r[a]),u=t;if(d==="__proto__"||d==="constructor"||d==="prototype")return n;if(a!=i){var h=s[d];u=void 0,u===void 0&&(u=g(h)?h:B(r[a+1])?[]:{})}T(s,d,u),s=s[d]}return n}function on(n,r,t){for(var e=-1,a=r.length,f={};++e<a;){var i=r[e],s=N(n,i);t(s,i)&&an(f,x(i,n),s)}return f}export{rn as a,tn as b,V as c,on as d,mn as e,fn as f,hn as g,vn as h,dn as i,D as j,un as l,gn as m,Y as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{aH as S,aI as Rn,ax as T,aJ as w,aK as xn,aL as Mn,aw as sn,aM as mn,aN as un,aO as x,au as U,aP as Cn,aQ as on,aR as Fn,aS as E,aF as gn,aT as R,as as ln,aU as Dn,aV as D,aW as Gn,aX as Un,aY as _,aA as Nn,aZ as Bn,av as Kn,a_ as X,a$ as Hn,b0 as jn,az as Yn,ay as cn,aD as Zn,b1 as m}from"./mermaid.core-BllcynrC.js";var qn="[object Symbol]";function N(n){return typeof n=="symbol"||S(n)&&Rn(n)==qn}function dn(n,r){for(var e=-1,t=n==null?0:n.length,a=Array(t);++e<t;)a[e]=r(n[e],e,n);return a}var J=w?w.prototype:void 0,Q=J?J.toString:void 0;function pn(n){if(typeof n=="string")return n;if(T(n))return dn(n,pn)+"";if(N(n))return Q?Q.call(n):"";var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function Xn(){}function An(n,r){for(var e=-1,t=n==null?0:n.length;++e<t&&r(n[e],e,n)!==!1;);return n}function Jn(n,r,e,t){for(var a=n.length,i=e+-1;++i<a;)if(r(n[i],i,n))return i;return-1}function Qn(n){return n!==n}function Wn(n,r,e){for(var t=e-1,a=n.length;++t<a;)if(n[t]===r)return t;return-1}function zn(n,r,e){return r===r?Wn(n,r,e):Jn(n,Qn,e)}function Vn(n,r){var e=n==null?0:n.length;return!!e&&zn(n,r,0)>-1}function $(n){return sn(n)?xn(n):Mn(n)}var kn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,nr=/^\w*$/;function B(n,r){if(T(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||N(n)?!0:nr.test(n)||!kn.test(n)||r!=null&&n in Object(r)}var rr=500;function er(n){var r=mn(n,function(t){return e.size===rr&&e.clear(),t}),e=r.cache;return r}var tr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ir=/\\(\\)?/g,ar=er(function(n){var r=[];return n.charCodeAt(0)===46&&r.push(""),n.replace(tr,function(e,t,a,i){r.push(a?i.replace(ir,"$1"):t||e)}),r});function fr(n){return n==null?"":pn(n)}function yn(n,r){return T(n)?n:B(n,r)?[n]:ar(fr(n))}function M(n){if(typeof n=="string"||N(n))return n;var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function bn(n,r){r=yn(r,n);for(var e=0,t=r.length;n!=null&&e<t;)n=n[M(r[e++])];return e&&e==t?n:void 0}function sr(n,r,e){var t=n==null?void 0:bn(n,r);return t===void 0?e:t}function K(n,r){for(var e=-1,t=r.length,a=n.length;++e<t;)n[a+e]=r[e];return n}var W=w?w.isConcatSpreadable:void 0;function ur(n){return T(n)||un(n)||!!(W&&n&&n[W])}function Ot(n,r,e,t,a){var i=-1,f=n.length;for(e||(e=ur),a||(a=[]);++i<f;){var s=n[i];e(s)?K(a,s):t||(a[a.length]=s)}return a}function or(n,r,e,t){var a=-1,i=n==null?0:n.length;for(t&&i&&(e=n[++a]);++a<i;)e=r(e,n[a],a,n);return e}function gr(n,r){return n&&x(r,$(r),n)}function lr(n,r){return n&&x(r,U(r),n)}function Tn(n,r){for(var e=-1,t=n==null?0:n.length,a=0,i=[];++e<t;){var f=n[e];r(f,e,n)&&(i[a++]=f)}return i}function hn(){return[]}var cr=Object.prototype,dr=cr.propertyIsEnumerable,z=Object.getOwnPropertySymbols,H=z?function(n){return n==null?[]:(n=Object(n),Tn(z(n),function(r){return dr.call(n,r)}))}:hn;function pr(n,r){return x(n,H(n),r)}var Ar=Object.getOwnPropertySymbols,wn=Ar?function(n){for(var r=[];n;)K(r,H(n)),n=Cn(n);return r}:hn;function yr(n,r){return x(n,wn(n),r)}function On(n,r,e){var t=r(n);return T(n)?t:K(t,e(n))}function G(n){return On(n,$,H)}function br(n){return On(n,U,wn)}var Tr=Object.prototype,hr=Tr.hasOwnProperty;function wr(n){var r=n.length,e=new n.constructor(r);return r&&typeof n[0]=="string"&&hr.call(n,"index")&&(e.index=n.index,e.input=n.input),e}function Or(n,r){var e=r?on(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.byteLength)}var $r=/\w*$/;function _r(n){var r=new n.constructor(n.source,$r.exec(n));return r.lastIndex=n.lastIndex,r}var V=w?w.prototype:void 0,k=V?V.valueOf:void 0;function Sr(n){return k?Object(k.call(n)):{}}var Er="[object Boolean]",Ir="[object Date]",Pr="[object Map]",vr="[object Number]",Lr="[object RegExp]",Rr="[object Set]",xr="[object String]",Mr="[object Symbol]",mr="[object ArrayBuffer]",Cr="[object DataView]",Fr="[object Float32Array]",Dr="[object Float64Array]",Gr="[object Int8Array]",Ur="[object Int16Array]",Nr="[object Int32Array]",Br="[object Uint8Array]",Kr="[object Uint8ClampedArray]",Hr="[object Uint16Array]",jr="[object Uint32Array]";function Yr(n,r,e){var t=n.constructor;switch(r){case mr:return on(n);case Er:case Ir:return new t(+n);case Cr:return Or(n,e);case Fr:case Dr:case Gr:case Ur:case Nr:case Br:case Kr:case Hr:case jr:return Fn(n,e);case Pr:return new t;case vr:case xr:return new t(n);case Lr:return _r(n);case Rr:return new t;case Mr:return Sr(n)}}var Zr="[object Map]";function qr(n){return S(n)&&E(n)==Zr}var nn=R&&R.isMap,Xr=nn?gn(nn):qr,Jr="[object Set]";function Qr(n){return S(n)&&E(n)==Jr}var rn=R&&R.isSet,Wr=rn?gn(rn):Qr,zr=1,Vr=2,kr=4,$n="[object Arguments]",ne="[object Array]",re="[object Boolean]",ee="[object Date]",te="[object Error]",_n="[object Function]",ie="[object GeneratorFunction]",ae="[object Map]",fe="[object Number]",Sn="[object Object]",se="[object RegExp]",ue="[object Set]",oe="[object String]",ge="[object Symbol]",le="[object WeakMap]",ce="[object ArrayBuffer]",de="[object DataView]",pe="[object Float32Array]",Ae="[object Float64Array]",ye="[object Int8Array]",be="[object Int16Array]",Te="[object Int32Array]",he="[object Uint8Array]",we="[object Uint8ClampedArray]",Oe="[object Uint16Array]",$e="[object Uint32Array]",g={};g[$n]=g[ne]=g[ce]=g[de]=g[re]=g[ee]=g[pe]=g[Ae]=g[ye]=g[be]=g[Te]=g[ae]=g[fe]=g[Sn]=g[se]=g[ue]=g[oe]=g[ge]=g[he]=g[we]=g[Oe]=g[$e]=!0;g[te]=g[_n]=g[le]=!1;function C(n,r,e,t,a,i){var f,s=r&zr,u=r&Vr,d=r&kr;if(f!==void 0)return f;if(!ln(n))return n;var l=T(n);if(l){if(f=wr(n),!s)return Dn(n,f)}else{var o=E(n),c=o==_n||o==ie;if(D(n))return Gn(n,s);if(o==Sn||o==$n||c&&!a){if(f=u||c?{}:Un(n),!s)return u?yr(n,lr(f,n)):pr(n,gr(f,n))}else{if(!g[o])return a?n:{};f=Yr(n,o,s)}}i||(i=new _);var h=i.get(n);if(h)return h;i.set(n,f),Wr(n)?n.forEach(function(p){f.add(C(p,r,e,p,n,i))}):Xr(n)&&n.forEach(function(p,A){f.set(A,C(p,r,e,A,n,i))});var y=d?u?br:G:u?U:$,b=l?void 0:y(n);return An(b||n,function(p,A){b&&(A=p,p=n[A]),Nn(f,A,C(p,r,e,A,n,i))}),f}var _e="__lodash_hash_undefined__";function Se(n){return this.__data__.set(n,_e),this}function Ee(n){return this.__data__.has(n)}function I(n){var r=-1,e=n==null?0:n.length;for(this.__data__=new Bn;++r<e;)this.add(n[r])}I.prototype.add=I.prototype.push=Se;I.prototype.has=Ee;function Ie(n,r){for(var e=-1,t=n==null?0:n.length;++e<t;)if(r(n[e],e,n))return!0;return!1}function En(n,r){return n.has(r)}var Pe=1,ve=2;function In(n,r,e,t,a,i){var f=e&Pe,s=n.length,u=r.length;if(s!=u&&!(f&&u>s))return!1;var d=i.get(n),l=i.get(r);if(d&&l)return d==r&&l==n;var o=-1,c=!0,h=e&ve?new I:void 0;for(i.set(n,r),i.set(r,n);++o<s;){var y=n[o],b=r[o];if(t)var p=f?t(b,y,o,r,n,i):t(y,b,o,n,r,i);if(p!==void 0){if(p)continue;c=!1;break}if(h){if(!Ie(r,function(A,O){if(!En(h,O)&&(y===A||a(y,A,e,t,i)))return h.push(O)})){c=!1;break}}else if(!(y===b||a(y,b,e,t,i))){c=!1;break}}return i.delete(n),i.delete(r),c}function Le(n){var r=-1,e=Array(n.size);return n.forEach(function(t,a){e[++r]=[a,t]}),e}function j(n){var r=-1,e=Array(n.size);return n.forEach(function(t){e[++r]=t}),e}var Re=1,xe=2,Me="[object Boolean]",me="[object Date]",Ce="[object Error]",Fe="[object Map]",De="[object Number]",Ge="[object RegExp]",Ue="[object Set]",Ne="[object String]",Be="[object Symbol]",Ke="[object ArrayBuffer]",He="[object DataView]",en=w?w.prototype:void 0,F=en?en.valueOf:void 0;function je(n,r,e,t,a,i,f){switch(e){case He:if(n.byteLength!=r.byteLength||n.byteOffset!=r.byteOffset)return!1;n=n.buffer,r=r.buffer;case Ke:return!(n.byteLength!=r.byteLength||!i(new X(n),new X(r)));case Me:case me:case De:return Kn(+n,+r);case Ce:return n.name==r.name&&n.message==r.message;case Ge:case Ne:return n==r+"";case Fe:var s=Le;case Ue:var u=tℜif(s||(s=j),n.size!=r.size&&!u)return!1;var d=f.get(n);if(d)return d==r;t|=xe,f.set(n,r);var l=In(s(n),s(r),t,a,i,f);return f.delete(n),l;case Be:if(F)return F.call(n)==F.call(r)}return!1}var Ye=1,Ze=Object.prototype,qe=Ze.hasOwnProperty;function Xe(n,r,e,t,a,i){var f=e&Ye,s=G(n),u=s.length,d=G(r),l=d.length;if(u!=l&&!f)return!1;for(var o=u;o--;){var c=s[o];if(!(f?c in r:qe.call(r,c)))return!1}var h=i.get(n),y=i.get(r);if(h&&y)return h==r&&y==n;var b=!0;i.set(n,r),i.set(r,n);for(var p=f;++o<u;){c=s[o];var A=n[c],O=r[c];if(t)var q=f?t(O,A,c,r,n,i):t(A,O,c,n,r,i);if(!(q===void 0?A===O||a(A,O,e,t,i):q)){b=!1;break}p||(p=c=="constructor")}if(b&&!p){var P=n.constructor,v=r.constructor;P!=v&&"constructor"in n&&"constructor"in r&&!(typeof P=="function"&&P instanceof P&&typeof v=="function"&&v instanceof v)&&(b=!1)}return i.delete(n),i.delete(r),b}var Je=1,tn="[object Arguments]",an="[object Array]",L="[object Object]",Qe=Object.prototype,fn=Qe.hasOwnProperty;function We(n,r,e,t,a,i){var f=T(n),s=T(r),u=f?an:E(n),d=s?an:E(r);u=u==tn?L:u,d=d==tn?L:d;var l=u==L,o=d==L,c=u==d;if(c&&D(n)){if(!D(r))return!1;f=!0,l=!1}if(c&&!l)return i||(i=new _),f||Hn(n)?In(n,r,e,t,a,i):je(n,r,u,e,t,a,i);if(!(e&Je)){var h=l&&fn.call(n,"__wrapped__"),y=o&&fn.call(r,"__wrapped__");if(h||y){var b=h?n.value():n,p=y?r.value():r;return i||(i=new _),a(b,p,e,t,i)}}return c?(i||(i=new _),Xe(n,r,e,t,a,i)):!1}function Y(n,r,e,t,a){return n===r?!0:n==null||r==null||!S(n)&&!S(r)?n!==n&&r!==r:We(n,r,e,t,Y,a)}var ze=1,Ve=2;function ke(n,r,e,t){var a=e.length,i=a;if(n==null)return!i;for(n=Object(n);a--;){var f=e[a];if(f[2]?f[1]!==n[f[0]]:!(f[0]in n))return!1}for(;++a<i;){f=e[a];var s=f[0],u=n[s],d=f[1];if(f[2]){if(u===void 0&&!(s in n))return!1}else{var l=new _,o;if(!(o===void 0?Y(d,u,ze|Ve,t,l):o))return!1}}return!0}function Pn(n){return n===n&&!ln(n)}function nt(n){for(var r=$(n),e=r.length;e--;){var t=r[e],a=n[t];r[e]=[t,a,Pn(a)]}return r}function vn(n,r){return function(e){return e==null?!1:e[n]===r&&(r!==void 0||n in Object(e))}}function rt(n){var r=nt(n);return r.length==1&&r[0][2]?vn(r[0][0],r[0][1]):function(e){return e===n||ke(e,n,r)}}function et(n,r){return n!=null&&r in Object(n)}function tt(n,r,e){r=yn(r,n);for(var t=-1,a=r.length,i=!1;++t<a;){var f=M(r[t]);if(!(i=n!=null&&e(n,f)))break;n=n[f]}return i||++t!=a?i:(a=n==null?0:n.length,!!a&&jn(a)&&Yn(f,a)&&(T(n)||un(n)))}function it(n,r){return n!=null&&tt(n,r,et)}var at=1,ft=2;function st(n,r){return B(n)&&Pn(r)?vn(M(n),r):function(e){var t=sr(e,n);return t===void 0&&t===r?it(e,n):Y(r,t,at|ft)}}function ut(n){return function(r){return r?.[n]}}function ot(n){return function(r){return bn(r,n)}}function gt(n){return B(n)?ut(M(n)):ot(n)}function Ln(n){return typeof n=="function"?n:n==null?cn:typeof n=="object"?T(n)?st(n[0],n[1]):rt(n):gt(n)}function lt(n,r){return n&&Zn(n,r,$)}function ct(n,r){return function(e,t){if(e==null)return e;if(!sn(e))return n(e,t);for(var a=e.length,i=-1,f=Object(e);++i<a&&t(f[i],i,f)!==!1;);return e}}var Z=ct(lt);function dt(n){return typeof n=="function"?n:cn}function $t(n,r){var e=T(n)?An:Z;return e(n,dt(r))}function pt(n,r){var e=[];return Z(n,function(t,a,i){r(t,a,i)&&e.push(t)}),e}function _t(n,r){var e=T(n)?Tn:pt;return e(n,Ln(r))}function At(n,r){return dn(r,function(e){return n[e]})}function St(n){return n==null?[]:At(n,$(n))}function Et(n){return n===void 0}function yt(n,r,e,t,a){return a(n,function(i,f,s){e=t?(t=!1,i):r(e,i,f,s)}),e}function It(n,r,e){var t=T(n)?or:yt,a=arguments.length<3;return t(n,Ln(r),e,a,Z)}var bt=1/0,Tt=m&&1/j(new m([,-0]))[1]==bt?function(n){return new m(n)}:Xn,ht=200;function Pt(n,r,e){var t=-1,a=Vn,i=n.length,f=!0,s=[],u=s;if(i>=ht){var d=r?null:Tt(n);if(d)return j(d);f=!1,a=En,u=new I}else u=r?[]:s;n:for(;++t<i;){var l=n[t],o=r?r(l):l;if(l=l!==0?l:0,f&&o===o){for(var c=u.length;c--;)if(u[c]===o)continue n;r&&u.push(o),s.push(l)}else a(u,o,e)||(u!==s&&u.push(o),s.push(l))}return s}export{Tn as A,pt as B,Ie as C,Xn as D,I as S,Pt as a,C as b,Ot as c,$t as d,N as e,_t as f,Ln as g,Jn as h,Et as i,Z as j,$ as k,dn as l,tt as m,yn as n,bn as o,dt as p,lt as q,It as r,it as s,M as t,fr as u,St as v,Vn as w,En as x,zn as y,br as z};
|
|
1
|
+
import{aH as S,aI as Rn,ax as T,aJ as w,aK as xn,aL as Mn,aw as sn,aM as mn,aN as un,aO as x,au as U,aP as Cn,aQ as on,aR as Fn,aS as E,aF as gn,aT as R,as as ln,aU as Dn,aV as D,aW as Gn,aX as Un,aY as _,aA as Nn,aZ as Bn,av as Kn,a_ as X,a$ as Hn,b0 as jn,az as Yn,ay as cn,aD as Zn,b1 as m}from"./mermaid.core-BxuSu0Fy.js";var qn="[object Symbol]";function N(n){return typeof n=="symbol"||S(n)&&Rn(n)==qn}function dn(n,r){for(var e=-1,t=n==null?0:n.length,a=Array(t);++e<t;)a[e]=r(n[e],e,n);return a}var J=w?w.prototype:void 0,Q=J?J.toString:void 0;function pn(n){if(typeof n=="string")return n;if(T(n))return dn(n,pn)+"";if(N(n))return Q?Q.call(n):"";var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function Xn(){}function An(n,r){for(var e=-1,t=n==null?0:n.length;++e<t&&r(n[e],e,n)!==!1;);return n}function Jn(n,r,e,t){for(var a=n.length,i=e+-1;++i<a;)if(r(n[i],i,n))return i;return-1}function Qn(n){return n!==n}function Wn(n,r,e){for(var t=e-1,a=n.length;++t<a;)if(n[t]===r)return t;return-1}function zn(n,r,e){return r===r?Wn(n,r,e):Jn(n,Qn,e)}function Vn(n,r){var e=n==null?0:n.length;return!!e&&zn(n,r,0)>-1}function $(n){return sn(n)?xn(n):Mn(n)}var kn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,nr=/^\w*$/;function B(n,r){if(T(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||N(n)?!0:nr.test(n)||!kn.test(n)||r!=null&&n in Object(r)}var rr=500;function er(n){var r=mn(n,function(t){return e.size===rr&&e.clear(),t}),e=r.cache;return r}var tr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ir=/\\(\\)?/g,ar=er(function(n){var r=[];return n.charCodeAt(0)===46&&r.push(""),n.replace(tr,function(e,t,a,i){r.push(a?i.replace(ir,"$1"):t||e)}),r});function fr(n){return n==null?"":pn(n)}function yn(n,r){return T(n)?n:B(n,r)?[n]:ar(fr(n))}function M(n){if(typeof n=="string"||N(n))return n;var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function bn(n,r){r=yn(r,n);for(var e=0,t=r.length;n!=null&&e<t;)n=n[M(r[e++])];return e&&e==t?n:void 0}function sr(n,r,e){var t=n==null?void 0:bn(n,r);return t===void 0?e:t}function K(n,r){for(var e=-1,t=r.length,a=n.length;++e<t;)n[a+e]=r[e];return n}var W=w?w.isConcatSpreadable:void 0;function ur(n){return T(n)||un(n)||!!(W&&n&&n[W])}function Ot(n,r,e,t,a){var i=-1,f=n.length;for(e||(e=ur),a||(a=[]);++i<f;){var s=n[i];e(s)?K(a,s):t||(a[a.length]=s)}return a}function or(n,r,e,t){var a=-1,i=n==null?0:n.length;for(t&&i&&(e=n[++a]);++a<i;)e=r(e,n[a],a,n);return e}function gr(n,r){return n&&x(r,$(r),n)}function lr(n,r){return n&&x(r,U(r),n)}function Tn(n,r){for(var e=-1,t=n==null?0:n.length,a=0,i=[];++e<t;){var f=n[e];r(f,e,n)&&(i[a++]=f)}return i}function hn(){return[]}var cr=Object.prototype,dr=cr.propertyIsEnumerable,z=Object.getOwnPropertySymbols,H=z?function(n){return n==null?[]:(n=Object(n),Tn(z(n),function(r){return dr.call(n,r)}))}:hn;function pr(n,r){return x(n,H(n),r)}var Ar=Object.getOwnPropertySymbols,wn=Ar?function(n){for(var r=[];n;)K(r,H(n)),n=Cn(n);return r}:hn;function yr(n,r){return x(n,wn(n),r)}function On(n,r,e){var t=r(n);return T(n)?t:K(t,e(n))}function G(n){return On(n,$,H)}function br(n){return On(n,U,wn)}var Tr=Object.prototype,hr=Tr.hasOwnProperty;function wr(n){var r=n.length,e=new n.constructor(r);return r&&typeof n[0]=="string"&&hr.call(n,"index")&&(e.index=n.index,e.input=n.input),e}function Or(n,r){var e=r?on(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.byteLength)}var $r=/\w*$/;function _r(n){var r=new n.constructor(n.source,$r.exec(n));return r.lastIndex=n.lastIndex,r}var V=w?w.prototype:void 0,k=V?V.valueOf:void 0;function Sr(n){return k?Object(k.call(n)):{}}var Er="[object Boolean]",Ir="[object Date]",Pr="[object Map]",vr="[object Number]",Lr="[object RegExp]",Rr="[object Set]",xr="[object String]",Mr="[object Symbol]",mr="[object ArrayBuffer]",Cr="[object DataView]",Fr="[object Float32Array]",Dr="[object Float64Array]",Gr="[object Int8Array]",Ur="[object Int16Array]",Nr="[object Int32Array]",Br="[object Uint8Array]",Kr="[object Uint8ClampedArray]",Hr="[object Uint16Array]",jr="[object Uint32Array]";function Yr(n,r,e){var t=n.constructor;switch(r){case mr:return on(n);case Er:case Ir:return new t(+n);case Cr:return Or(n,e);case Fr:case Dr:case Gr:case Ur:case Nr:case Br:case Kr:case Hr:case jr:return Fn(n,e);case Pr:return new t;case vr:case xr:return new t(n);case Lr:return _r(n);case Rr:return new t;case Mr:return Sr(n)}}var Zr="[object Map]";function qr(n){return S(n)&&E(n)==Zr}var nn=R&&R.isMap,Xr=nn?gn(nn):qr,Jr="[object Set]";function Qr(n){return S(n)&&E(n)==Jr}var rn=R&&R.isSet,Wr=rn?gn(rn):Qr,zr=1,Vr=2,kr=4,$n="[object Arguments]",ne="[object Array]",re="[object Boolean]",ee="[object Date]",te="[object Error]",_n="[object Function]",ie="[object GeneratorFunction]",ae="[object Map]",fe="[object Number]",Sn="[object Object]",se="[object RegExp]",ue="[object Set]",oe="[object String]",ge="[object Symbol]",le="[object WeakMap]",ce="[object ArrayBuffer]",de="[object DataView]",pe="[object Float32Array]",Ae="[object Float64Array]",ye="[object Int8Array]",be="[object Int16Array]",Te="[object Int32Array]",he="[object Uint8Array]",we="[object Uint8ClampedArray]",Oe="[object Uint16Array]",$e="[object Uint32Array]",g={};g[$n]=g[ne]=g[ce]=g[de]=g[re]=g[ee]=g[pe]=g[Ae]=g[ye]=g[be]=g[Te]=g[ae]=g[fe]=g[Sn]=g[se]=g[ue]=g[oe]=g[ge]=g[he]=g[we]=g[Oe]=g[$e]=!0;g[te]=g[_n]=g[le]=!1;function C(n,r,e,t,a,i){var f,s=r&zr,u=r&Vr,d=r&kr;if(f!==void 0)return f;if(!ln(n))return n;var l=T(n);if(l){if(f=wr(n),!s)return Dn(n,f)}else{var o=E(n),c=o==_n||o==ie;if(D(n))return Gn(n,s);if(o==Sn||o==$n||c&&!a){if(f=u||c?{}:Un(n),!s)return u?yr(n,lr(f,n)):pr(n,gr(f,n))}else{if(!g[o])return a?n:{};f=Yr(n,o,s)}}i||(i=new _);var h=i.get(n);if(h)return h;i.set(n,f),Wr(n)?n.forEach(function(p){f.add(C(p,r,e,p,n,i))}):Xr(n)&&n.forEach(function(p,A){f.set(A,C(p,r,e,A,n,i))});var y=d?u?br:G:u?U:$,b=l?void 0:y(n);return An(b||n,function(p,A){b&&(A=p,p=n[A]),Nn(f,A,C(p,r,e,A,n,i))}),f}var _e="__lodash_hash_undefined__";function Se(n){return this.__data__.set(n,_e),this}function Ee(n){return this.__data__.has(n)}function I(n){var r=-1,e=n==null?0:n.length;for(this.__data__=new Bn;++r<e;)this.add(n[r])}I.prototype.add=I.prototype.push=Se;I.prototype.has=Ee;function Ie(n,r){for(var e=-1,t=n==null?0:n.length;++e<t;)if(r(n[e],e,n))return!0;return!1}function En(n,r){return n.has(r)}var Pe=1,ve=2;function In(n,r,e,t,a,i){var f=e&Pe,s=n.length,u=r.length;if(s!=u&&!(f&&u>s))return!1;var d=i.get(n),l=i.get(r);if(d&&l)return d==r&&l==n;var o=-1,c=!0,h=e&ve?new I:void 0;for(i.set(n,r),i.set(r,n);++o<s;){var y=n[o],b=r[o];if(t)var p=f?t(b,y,o,r,n,i):t(y,b,o,n,r,i);if(p!==void 0){if(p)continue;c=!1;break}if(h){if(!Ie(r,function(A,O){if(!En(h,O)&&(y===A||a(y,A,e,t,i)))return h.push(O)})){c=!1;break}}else if(!(y===b||a(y,b,e,t,i))){c=!1;break}}return i.delete(n),i.delete(r),c}function Le(n){var r=-1,e=Array(n.size);return n.forEach(function(t,a){e[++r]=[a,t]}),e}function j(n){var r=-1,e=Array(n.size);return n.forEach(function(t){e[++r]=t}),e}var Re=1,xe=2,Me="[object Boolean]",me="[object Date]",Ce="[object Error]",Fe="[object Map]",De="[object Number]",Ge="[object RegExp]",Ue="[object Set]",Ne="[object String]",Be="[object Symbol]",Ke="[object ArrayBuffer]",He="[object DataView]",en=w?w.prototype:void 0,F=en?en.valueOf:void 0;function je(n,r,e,t,a,i,f){switch(e){case He:if(n.byteLength!=r.byteLength||n.byteOffset!=r.byteOffset)return!1;n=n.buffer,r=r.buffer;case Ke:return!(n.byteLength!=r.byteLength||!i(new X(n),new X(r)));case Me:case me:case De:return Kn(+n,+r);case Ce:return n.name==r.name&&n.message==r.message;case Ge:case Ne:return n==r+"";case Fe:var s=Le;case Ue:var u=tℜif(s||(s=j),n.size!=r.size&&!u)return!1;var d=f.get(n);if(d)return d==r;t|=xe,f.set(n,r);var l=In(s(n),s(r),t,a,i,f);return f.delete(n),l;case Be:if(F)return F.call(n)==F.call(r)}return!1}var Ye=1,Ze=Object.prototype,qe=Ze.hasOwnProperty;function Xe(n,r,e,t,a,i){var f=e&Ye,s=G(n),u=s.length,d=G(r),l=d.length;if(u!=l&&!f)return!1;for(var o=u;o--;){var c=s[o];if(!(f?c in r:qe.call(r,c)))return!1}var h=i.get(n),y=i.get(r);if(h&&y)return h==r&&y==n;var b=!0;i.set(n,r),i.set(r,n);for(var p=f;++o<u;){c=s[o];var A=n[c],O=r[c];if(t)var q=f?t(O,A,c,r,n,i):t(A,O,c,n,r,i);if(!(q===void 0?A===O||a(A,O,e,t,i):q)){b=!1;break}p||(p=c=="constructor")}if(b&&!p){var P=n.constructor,v=r.constructor;P!=v&&"constructor"in n&&"constructor"in r&&!(typeof P=="function"&&P instanceof P&&typeof v=="function"&&v instanceof v)&&(b=!1)}return i.delete(n),i.delete(r),b}var Je=1,tn="[object Arguments]",an="[object Array]",L="[object Object]",Qe=Object.prototype,fn=Qe.hasOwnProperty;function We(n,r,e,t,a,i){var f=T(n),s=T(r),u=f?an:E(n),d=s?an:E(r);u=u==tn?L:u,d=d==tn?L:d;var l=u==L,o=d==L,c=u==d;if(c&&D(n)){if(!D(r))return!1;f=!0,l=!1}if(c&&!l)return i||(i=new _),f||Hn(n)?In(n,r,e,t,a,i):je(n,r,u,e,t,a,i);if(!(e&Je)){var h=l&&fn.call(n,"__wrapped__"),y=o&&fn.call(r,"__wrapped__");if(h||y){var b=h?n.value():n,p=y?r.value():r;return i||(i=new _),a(b,p,e,t,i)}}return c?(i||(i=new _),Xe(n,r,e,t,a,i)):!1}function Y(n,r,e,t,a){return n===r?!0:n==null||r==null||!S(n)&&!S(r)?n!==n&&r!==r:We(n,r,e,t,Y,a)}var ze=1,Ve=2;function ke(n,r,e,t){var a=e.length,i=a;if(n==null)return!i;for(n=Object(n);a--;){var f=e[a];if(f[2]?f[1]!==n[f[0]]:!(f[0]in n))return!1}for(;++a<i;){f=e[a];var s=f[0],u=n[s],d=f[1];if(f[2]){if(u===void 0&&!(s in n))return!1}else{var l=new _,o;if(!(o===void 0?Y(d,u,ze|Ve,t,l):o))return!1}}return!0}function Pn(n){return n===n&&!ln(n)}function nt(n){for(var r=$(n),e=r.length;e--;){var t=r[e],a=n[t];r[e]=[t,a,Pn(a)]}return r}function vn(n,r){return function(e){return e==null?!1:e[n]===r&&(r!==void 0||n in Object(e))}}function rt(n){var r=nt(n);return r.length==1&&r[0][2]?vn(r[0][0],r[0][1]):function(e){return e===n||ke(e,n,r)}}function et(n,r){return n!=null&&r in Object(n)}function tt(n,r,e){r=yn(r,n);for(var t=-1,a=r.length,i=!1;++t<a;){var f=M(r[t]);if(!(i=n!=null&&e(n,f)))break;n=n[f]}return i||++t!=a?i:(a=n==null?0:n.length,!!a&&jn(a)&&Yn(f,a)&&(T(n)||un(n)))}function it(n,r){return n!=null&&tt(n,r,et)}var at=1,ft=2;function st(n,r){return B(n)&&Pn(r)?vn(M(n),r):function(e){var t=sr(e,n);return t===void 0&&t===r?it(e,n):Y(r,t,at|ft)}}function ut(n){return function(r){return r?.[n]}}function ot(n){return function(r){return bn(r,n)}}function gt(n){return B(n)?ut(M(n)):ot(n)}function Ln(n){return typeof n=="function"?n:n==null?cn:typeof n=="object"?T(n)?st(n[0],n[1]):rt(n):gt(n)}function lt(n,r){return n&&Zn(n,r,$)}function ct(n,r){return function(e,t){if(e==null)return e;if(!sn(e))return n(e,t);for(var a=e.length,i=-1,f=Object(e);++i<a&&t(f[i],i,f)!==!1;);return e}}var Z=ct(lt);function dt(n){return typeof n=="function"?n:cn}function $t(n,r){var e=T(n)?An:Z;return e(n,dt(r))}function pt(n,r){var e=[];return Z(n,function(t,a,i){r(t,a,i)&&e.push(t)}),e}function _t(n,r){var e=T(n)?Tn:pt;return e(n,Ln(r))}function At(n,r){return dn(r,function(e){return n[e]})}function St(n){return n==null?[]:At(n,$(n))}function Et(n){return n===void 0}function yt(n,r,e,t,a){return a(n,function(i,f,s){e=t?(t=!1,i):r(e,i,f,s)}),e}function It(n,r,e){var t=T(n)?or:yt,a=arguments.length<3;return t(n,Ln(r),e,a,Z)}var bt=1/0,Tt=m&&1/j(new m([,-0]))[1]==bt?function(n){return new m(n)}:Xn,ht=200;function Pt(n,r,e){var t=-1,a=Vn,i=n.length,f=!0,s=[],u=s;if(i>=ht){var d=r?null:Tt(n);if(d)return j(d);f=!1,a=En,u=new I}else u=r?[]:s;n:for(;++t<i;){var l=n[t],o=r?r(l):l;if(l=l!==0?l:0,f&&o===o){for(var c=u.length;c--;)if(u[c]===o)continue n;r&&u.push(o),s.push(l)}else a(u,o,e)||(u!==s&&u.push(o),s.push(l))}return s}export{Tn as A,pt as B,Ie as C,Xn as D,I as S,Pt as a,C as b,Ot as c,$t as d,N as e,_t as f,Ln as g,Jn as h,Et as i,Z as j,$ as k,dn as l,tt as m,yn as n,bn as o,dt as p,lt as q,It as r,it as s,M as t,fr as u,St as v,Vn as w,En as x,zn as y,br as z};
|
package/out/renderer/assets/{agent-details-page-BX0suGni.js → agent-details-page-Bh4K8Iwb.js}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{r as
|
|
1
|
+
import{r as T,j as e,c as G}from"./index-B0XQElRx.js";import{l as ue,c as he,u as xe,d as ge,g as je,i as fe,a as pe,b as ye,e as ve}from"./use-memberships-query-C4q_o12A.js";import{B as ne,u as I,x as we}from"./aida-control-CbUlbi35.js";import{Z as b,_ as K,U as Y,$ as U,a0 as be,a1 as Ce,a2 as ie,a3 as re,a4 as Ne,a5 as Ae,a6 as ke,a7 as Se,a8 as De,a9 as J,T as Ee,aa as Te,ab as Fe}from"./index-qyhLiyUA.js";import{c as _e,L as Pe,a as ee,B as l,S as z,b as oe,d as L,e as M,f as v,X as qe,g as w,A as te,h as se,i as ae}from"./textarea-B1SvaviK.js";import{f as W,u as Le,i as Me,a as ze,b as Ie,c as Ke,O as Ue,H as Be,A as Oe}from"./use-download-agent-mutation-CLAqbNgy.js";import"./ui-preferences-store-OD43KVN4.js";import"./error-boundary-C0hpzM--.js";import"./console-mirror-CFCrcGWO.js";import"./en-US-BcB1DWxG.js";import"./book-open-CFXGmNLm.js";/**
|
|
2
2
|
* @license lucide-react v0.507.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
5
5
|
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const Ue=[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}]],Re=_e("message-circle",Ue),T={all:["agent-comments"],list:t=>[...T.all,"list",t]},$e=({agentId:t,enabled:r=!0})=>ne({queryKey:T.list(t||"invalid"),queryFn:async()=>{if(!t)throw new Error("Agent ID is required to fetch comments.");return(await ue(t)).result},enabled:!!t&&r,staleTime:2*60*1e3,gcTime:5*60*1e3,refetchOnWindowFocus:!0}),We=()=>{const t=I(),{isAuthenticated:r}=b();return K({mutationFn:async a=>{const{agentId:i,data:s}=a;if(!r)throw new Error("Authentication required.");return he(i,s)},onSuccess:(a,i)=>{t.invalidateQueries({queryKey:T.list(i.agentId)}),B("Comment posted")},onError:a=>{Y(`Failed to post comment: ${a.message}`)}})},Ye=()=>{const t=I(),{isAuthenticated:r}=b();return K({mutationFn:async a=>{const{agentId:i,commentId:s,data:c}=a;if(!r)throw new Error("Authentication required.");return xe(i,s,c)},onSuccess:(a,i)=>{t.invalidateQueries({queryKey:T.list(i.agentId)}),B("Comment updated")},onError:a=>{Y(`Failed to update comment: ${a.message}`)}})},He=()=>{const t=I(),{isAuthenticated:r}=b();return K({mutationFn:async a=>{const{agentId:i,commentId:s}=a;if(!r)throw new Error("Authentication required.");return ge(i,s)},onSuccess:(a,i)=>{t.invalidateQueries({queryKey:T.list(i.agentId)}),B("Comment deleted")},onError:a=>{Y(`Failed to delete comment: ${a.message}`)}})},Ve=({agentId:t})=>{const{isAuthenticated:r,user:a}=b(),[i,s]=F.useState(""),[c,f]=F.useState(null),[h,C]=F.useState(""),{data:d,isLoading:_,error:N}=$e({agentId:t}),p=d?.records??[],A=We(),k=Ye(),S=He(),O=async n=>{if(n.preventDefault(),!(!i.trim()||!r||!t))try{await A.mutateAsync({agentId:t,data:{text:i}}),s("")}catch(o){console.error("Submit comment error caught in component:",o)}},m=(n,o)=>{f(n),C(o)},x=()=>{f(null),C("")},y=async()=>{if(!(!c||!h.trim()||!r||!t))try{await k.mutateAsync({agentId:t,commentId:c,data:{text:h}}),x()}catch(n){console.error("Update comment error caught in component:",n)}},Q=async n=>{if(!(!r||!t)&&window.confirm("Are you sure you want to delete this comment?"))try{await S.mutateAsync({agentId:t,commentId:n})}catch(o){console.error("Delete comment error caught in component:",o)}},U=n=>r&&a?.radientUser?.account?.id===n.account_id;return e.jsxs("div",{className:"mt-6",children:[e.jsx("h2",{className:"mb-4 font-semibold text-heading text-ink",children:"Comments"}),r?e.jsxs("div",{className:"mb-4 flex flex-col gap-1.5",children:[e.jsxs(Pe,{htmlFor:"new-comment",children:[e.jsx(Re,{size:14,"aria-hidden":"true"}),"Leave a comment"]}),e.jsxs("form",{onSubmit:O,className:"flex flex-col gap-3",children:[e.jsx(ee,{id:"new-comment",placeholder:"Share your thoughts...",rows:3,value:i,onChange:n=>s(n.target.value),required:!0}),e.jsx(l,{type:"submit",variant:"primary",disabled:A.isPending||!i.trim(),className:"self-end",children:A.isPending?e.jsx(z,{size:"sm",label:"Posting comment"}):"Post comment"})]})]}):e.jsx("p",{className:"mt-6 mb-4 text-body-sm text-ink-muted",children:"Sign in to leave comments."}),e.jsx(oe,{className:"my-6"}),_&&e.jsx("ul",{className:"flex flex-col",children:[...Array(3)].map((n,o)=>e.jsxs("li",{className:"flex gap-3 pb-6",children:[e.jsx(L,{children:e.jsx(M,{children:e.jsx(v,{className:"size-full"})})}),e.jsxs("div",{className:"flex w-full flex-col gap-1.5",children:[e.jsx(v,{className:"h-3.5 w-24"}),e.jsx(v,{className:"h-3 w-15"}),e.jsx(v,{className:"mt-2 h-3.5 w-full"}),e.jsx(v,{className:"h-3.5 w-4/5"})]})]},`skeleton-${o}`))}),N&&e.jsxs("p",{role:"alert",className:"my-6 text-body-sm text-danger",children:["Failed to load comments: ",N.message]}),!_&&!N&&e.jsx("ul",{className:"flex flex-col gap-6",children:p.length===0?e.jsx("li",{className:"text-body-sm text-ink-muted",children:"No comments yet. Yours would be the first."}):p.map(n=>c===n.id?e.jsxs("li",{className:"flex gap-3",children:[e.jsx(L,{children:e.jsx(M,{children:n.account_metadata?.name?.charAt(0).toUpperCase()||"?"})}),e.jsxs("div",{className:"flex w-full flex-col gap-2",children:[e.jsx(ee,{rows:3,value:h,onChange:o=>C(o.target.value),autoFocus:!0,"aria-label":"Edit comment"}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsxs(l,{variant:"secondary",size:"sm",onClick:x,children:[e.jsx(qe,{}),"Cancel"]}),e.jsxs(l,{variant:"primary",size:"sm",onClick:y,disabled:k.isPending||!h.trim(),children:[k.isPending?e.jsx(z,{size:"xs",label:"Saving comment"}):e.jsx(be,{}),"Save"]})]})]})]},n.id):e.jsxs("li",{className:"flex gap-3",children:[e.jsx(L,{children:e.jsx(M,{children:n.account_metadata?.name?.charAt(0).toUpperCase()||"?"})}),e.jsxs("div",{className:"w-full",children:[e.jsxs("div",{className:"flex w-full items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-body text-ink",children:n.account_metadata?.name||"Anonymous"}),e.jsxs("p",{className:"text-ink-muted text-meta",children:[W(new Date(n.created_at))," ","ago"]})]}),U(n)&&e.jsxs("div",{className:"flex gap-0.5",children:[e.jsx(w,{content:"Edit comment",children:e.jsx(l,{variant:"ghost",size:"icon-sm",onClick:()=>m(n.id,n.text),disabled:!!c,"aria-label":"Edit comment",children:e.jsx(Ce,{})})}),e.jsx(w,{content:"Delete comment",children:e.jsx(l,{variant:"ghost",size:"icon-sm",onClick:()=>Q(n.id),disabled:!!c,"aria-label":"Delete comment",children:e.jsx(ie,{})})})]})]}),e.jsx("p",{className:"mt-2 text-body-sm text-ink whitespace-pre-wrap",children:n.text})]})]},n.id))})]})},H={all:["agent-details"],detail:t=>[...H.all,t]},Xe=({agentId:t,enabled:r=!0})=>ne({queryKey:H.detail(t||"invalid"),queryFn:async()=>{if(!t)throw new Error("Agent ID is required to fetch details.");return await je(t)},select:i=>i.result,enabled:!!t&&r,staleTime:3e5,gcTime:6e5,refetchOnWindowFocus:!1}),Ze=()=>{const t=I(),r=re(),{isAuthenticated:a}=b();return K({mutationFn:async({agentId:s})=>{if(!a)throw new Error("Authentication required to delist an agent.");if(!s)throw new Error("Agent ID is required to delist.");return pe(s)},onSuccess:(s,c)=>{B("Agent delisted"),t.invalidateQueries({queryKey:H.detail(c.agentId)}),fe(t),r("/agent-hub")},onError:s=>{console.error("Delist agent error:",s)}})},Ge={like:"The like did not go through",favourite:"The favourite did not go through",download:"The download did not start",delist:"The agent was not delisted"},$=({children:t})=>e.jsx("span",{className:"inline-flex h-4 min-w-5 items-center text-meta text-ink-muted",children:t}),dt=()=>{const{agentId:t}=Ne(),r=re(),{isAuthenticated:a,user:i}=b(),{data:s,isLoading:c,isFetching:f,error:h,refetch:C}=Xe({agentId:t??"",enabled:!!t}),d=s?.visibility==="org",{memberships:_}=ye({enabled:d}),N=d?_.find(me=>me.tenant_id===s?.tenant_id)?.tenant_name??null:null,{statuses:p,isKnown:A,isError:k,isFetching:S,refetch:O}=Le({agentIds:t&&!d?[t]:[]}),m=Me(A,p,t),x=m&&p[t??""]?.liked===!0,y=m&&p[t??""]?.favourited===!0,Q=s?.like_count??0,U=s?.favourite_count??0,n=s?.download_count??0,o=ze(),P=Ie(),D=Ke(),g=Ze(),[le,q]=F.useState(!1),[j,u]=F.useState(null),R=!!i&&!!s&&i.radientUser?.account?.id===s.account_id,V=()=>{!t||!a||o.isPending||(u(null),o.mutate({agentId:t,isCurrentlyLiked:x},{onError:()=>u("like")}))},X=()=>{!t||!a||P.isPending||(u(null),P.mutate({agentId:t,isCurrentlyFavourited:y},{onError:()=>u("favourite")}))},Z=()=>{!t||!s||D.isPending||(u(null),D.mutate({agentId:s.id,agentName:s.name},{onError:()=>u("download")}))},ce=()=>{!t||!R||g.isPending||(u(null),g.mutate({agentId:t},{onError:()=>u("delist")}),q(!1))},E=j?j==="like"?{action:"like",error:o.error,retry:V}:j==="favourite"?{action:"favourite",error:P.error,retry:X}:j==="download"?{action:"download",error:D.error,retry:Z}:{action:"delist",error:g.error,retry:void 0}:null,de=()=>{r("/agent-hub")};return c?e.jsx("div",{className:"flex h-full items-center justify-center",children:e.jsx(z,{label:"Loading agent details"})}):h?e.jsx("div",{className:"flex h-full items-center justify-center p-6",children:e.jsxs(te,{variant:"danger",className:"max-w-2xl",children:[e.jsx(se,{children:"This agent could not be loaded"}),e.jsx(ae,{children:we("The Radient agent catalogue did not answer.",h)}),e.jsx("div",{className:"mt-2",children:e.jsx(l,{variant:"outline",size:"sm",onClick:()=>void C(),disabled:f,"aria-busy":f,children:f?"Trying…":"Try again"})})]})}):s?e.jsxs("div",{className:"m-6 flex flex-1 flex-col rounded-md bg-surface p-8",children:[e.jsxs("div",{className:"mb-6 flex items-center justify-between gap-4",children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-4",children:[e.jsx(l,{variant:"ghost",size:"icon",onClick:de,"aria-label":"Back to Agent hub",children:e.jsx(Ae,{})}),e.jsx(L,{className:"size-11 shrink-0",children:e.jsx(M,{children:e.jsx(ke,{size:22,"aria-hidden":"true"})})}),e.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[e.jsx("h1",{className:"truncate text-display text-ink",children:s.name}),d&&e.jsx(Be,{orgName:N})]})]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-1",children:[!d&&e.jsxs(e.Fragment,{children:[e.jsx(w,{content:"Sign in to Radient to use this feature",disabled:a,children:e.jsx("span",{children:e.jsxs(l,{variant:"ghost",size:"sm",onClick:V,disabled:!a||o.isPending||!m,"aria-label":m?x?"Unlike agent":"Like agent":"Like state unavailable",className:G(x&&"text-danger"),children:[e.jsx(Oe,{fill:x?"currentColor":"none"}),e.jsx($,{children:Q})]})})}),e.jsx(w,{content:"Sign in to Radient to use this feature",disabled:a,children:e.jsx("span",{children:e.jsxs(l,{variant:"ghost",size:"sm",onClick:X,disabled:!a||P.isPending||!m,"aria-label":m?y?"Unfavourite agent":"Favourite agent":"Favourite state unavailable",className:G(y&&"text-warning"),children:[e.jsx(Se,{fill:y?"currentColor":"none"}),e.jsx($,{children:U})]})})})]}),e.jsx(w,{content:"Download agent to your computer",children:e.jsx("span",{children:e.jsxs(l,{variant:"ghost",size:"icon",onClick:Z,disabled:D.isPending,"aria-label":"Download agent",className:"ml-1",children:[e.jsx(De,{}),e.jsx($,{children:D.isPending?e.jsx(v,{className:"h-3.5 w-5"}):n})]})})}),R&&!d&&e.jsx(w,{content:"Permanently delist this agent from Agent hub",children:e.jsx("span",{children:e.jsx(l,{variant:"ghost",size:"icon",onClick:()=>q(!0),disabled:g.isPending,"aria-label":"Delist agent",className:"ml-1 text-danger hover:bg-danger-wash hover:text-danger",children:e.jsx(ie,{})})})})]})]}),a&&k&&!j&&!d&&e.jsxs("output",{className:"mb-6 flex flex-wrap items-center gap-2 text-meta text-warning","data-testid":"agent-details-status-unknown",children:[e.jsx("span",{children:"Your likes and favourites could not be read, so this agent's viewer state is not shown."}),e.jsx(l,{variant:"ghost",size:"sm",onClick:()=>void O(),disabled:S,"aria-busy":S,children:S?"Trying…":"Try again"})]}),E&&j&&e.jsxs(te,{variant:"danger",className:"mb-6","data-testid":"agent-details-error",children:[e.jsx(se,{children:Ge[j]}),e.jsx(ae,{children:ve(E.action,E.error,s.name)}),E.retry&&e.jsx("div",{className:"mt-2",children:e.jsx(l,{variant:"outline",size:"sm",onClick:E.retry,children:"Try again"})})]}),e.jsx(Qe,{tags:s.tags,categories:s.categories}),e.jsxs("div",{className:"mt-4 mb-6 flex flex-col gap-2 text-body-sm text-ink-muted",children:[e.jsxs("p",{children:["Created by: ",s.account_metadata?.name??"Unknown"," (",s.account_metadata?.email??"No email",")"]}),e.jsxs("p",{children:["Created: ",W(new Date(s.created_at))," ago (",J(s.created_at),")"]}),e.jsxs("p",{children:["Last modified: ",W(new Date(s.updated_at))," ","ago (",J(s.updated_at),")"]})]}),e.jsx("div",{className:"mt-2 mb-8 leading-relaxed text-body text-ink",children:s.description||"No description provided."}),e.jsx(oe,{className:"my-6"}),!d&&e.jsx(Ve,{agentId:s.id}),e.jsx(Ee,{open:le,onClose:()=>q(!1),title:"Delist this agent?",maxWidth:"xs",actions:e.jsxs(e.Fragment,{children:[e.jsx(Fe,{onClick:()=>q(!1),children:"Cancel"}),e.jsx(Te,{onClick:()=>{!t||!R||g.isPending||ce()},disabled:g.isPending,children:g.isPending?e.jsx(z,{size:"sm",label:"Delisting agent"}):"Delist"})]}),dialogProps:{"aria-describedby":"delist-dialog-description"},children:e.jsxs("div",{id:"delist-dialog-description",className:"text-body text-ink-muted",children:['This takes "',s.name,'" off the hub straight away, and nobody will be able to download it. You can upload it again later.']})})]}):e.jsx("div",{className:"flex h-full items-center justify-center",children:e.jsx("p",{className:"text-body text-ink",children:"Agent not found."})})};export{dt as AgentDetailsPage};
|
|
6
|
+
*/const Qe=[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}]],Re=_e("message-circle",Qe),F={all:["agent-comments"],list:t=>[...F.all,"list",t]},$e=({agentId:t,enabled:r=!0})=>ne({queryKey:F.list(t||"invalid"),queryFn:async()=>{if(!t)throw new Error("Agent ID is required to fetch comments.");return(await ue(t)).result},enabled:!!t&&r,staleTime:2*60*1e3,gcTime:5*60*1e3,refetchOnWindowFocus:!0}),We=()=>{const t=I(),{isAuthenticated:r}=b();return K({mutationFn:async a=>{const{agentId:i,data:s}=a;if(!r)throw new Error("Authentication required.");return he(i,s)},onSuccess:(a,i)=>{t.invalidateQueries({queryKey:F.list(i.agentId)}),U("Comment posted")},onError:a=>{Y(`Failed to post comment: ${a.message}`)}})},Ye=()=>{const t=I(),{isAuthenticated:r}=b();return K({mutationFn:async a=>{const{agentId:i,commentId:s,data:c}=a;if(!r)throw new Error("Authentication required.");return xe(i,s,c)},onSuccess:(a,i)=>{t.invalidateQueries({queryKey:F.list(i.agentId)}),U("Comment updated")},onError:a=>{Y(`Failed to update comment: ${a.message}`)}})},He=()=>{const t=I(),{isAuthenticated:r}=b();return K({mutationFn:async a=>{const{agentId:i,commentId:s}=a;if(!r)throw new Error("Authentication required.");return ge(i,s)},onSuccess:(a,i)=>{t.invalidateQueries({queryKey:F.list(i.agentId)}),U("Comment deleted")},onError:a=>{Y(`Failed to delete comment: ${a.message}`)}})},Ze=({agentId:t})=>{const{isAuthenticated:r,user:a}=b(),[i,s]=T.useState(""),[c,f]=T.useState(null),[h,C]=T.useState(""),{data:d,isLoading:_,error:N}=$e({agentId:t}),p=d?.records??[],A=We(),k=Ye(),S=He(),B=async n=>{if(n.preventDefault(),!(!i.trim()||!r||!t))try{await A.mutateAsync({agentId:t,data:{text:i}}),s("")}catch(o){console.error("Submit comment error caught in component:",o)}},m=(n,o)=>{f(n),C(o)},x=()=>{f(null),C("")},y=async()=>{if(!(!c||!h.trim()||!r||!t))try{await k.mutateAsync({agentId:t,commentId:c,data:{text:h}}),x()}catch(n){console.error("Update comment error caught in component:",n)}},O=async n=>{if(!(!r||!t)&&window.confirm("Are you sure you want to delete this comment?"))try{await S.mutateAsync({agentId:t,commentId:n})}catch(o){console.error("Delete comment error caught in component:",o)}},Q=n=>r&&a?.radientUser?.account?.id===n.account_id;return e.jsxs("div",{className:"mt-6",children:[e.jsx("h2",{className:"mb-4 font-semibold text-heading text-ink",children:"Comments"}),r?e.jsxs("div",{className:"mb-4 flex flex-col gap-1.5",children:[e.jsxs(Pe,{htmlFor:"new-comment",children:[e.jsx(Re,{size:14,"aria-hidden":"true"}),"Leave a comment"]}),e.jsxs("form",{onSubmit:B,className:"flex flex-col gap-3",children:[e.jsx(ee,{id:"new-comment",placeholder:"Share your thoughts...",rows:3,value:i,onChange:n=>s(n.target.value),required:!0}),e.jsx(l,{type:"submit",variant:"primary",disabled:A.isPending||!i.trim(),className:"self-end",children:A.isPending?e.jsx(z,{size:"sm",label:"Posting comment"}):"Post comment"})]})]}):e.jsx("p",{className:"mt-6 mb-4 text-body-sm text-ink-muted",children:"Sign in to leave comments."}),e.jsx(oe,{className:"my-6"}),_&&e.jsx("ul",{className:"flex flex-col",children:[...Array(3)].map((n,o)=>e.jsxs("li",{className:"flex gap-3 pb-6",children:[e.jsx(L,{children:e.jsx(M,{children:e.jsx(v,{className:"size-full"})})}),e.jsxs("div",{className:"flex w-full flex-col gap-1.5",children:[e.jsx(v,{className:"h-3.5 w-24"}),e.jsx(v,{className:"h-3 w-15"}),e.jsx(v,{className:"mt-2 h-3.5 w-full"}),e.jsx(v,{className:"h-3.5 w-4/5"})]})]},`skeleton-${o}`))}),N&&e.jsxs("p",{role:"alert",className:"my-6 text-body-sm text-danger",children:["Failed to load comments: ",N.message]}),!_&&!N&&e.jsx("ul",{className:"flex flex-col gap-6",children:p.length===0?e.jsx("li",{className:"text-body-sm text-ink-muted",children:"No comments yet. Yours would be the first."}):p.map(n=>c===n.id?e.jsxs("li",{className:"flex gap-3",children:[e.jsx(L,{children:e.jsx(M,{children:n.account_metadata?.name?.charAt(0).toUpperCase()||"?"})}),e.jsxs("div",{className:"flex w-full flex-col gap-2",children:[e.jsx(ee,{rows:3,value:h,onChange:o=>C(o.target.value),autoFocus:!0,"aria-label":"Edit comment"}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsxs(l,{variant:"secondary",size:"sm",onClick:x,children:[e.jsx(qe,{}),"Cancel"]}),e.jsxs(l,{variant:"primary",size:"sm",onClick:y,disabled:k.isPending||!h.trim(),children:[k.isPending?e.jsx(z,{size:"xs",label:"Saving comment"}):e.jsx(be,{}),"Save"]})]})]})]},n.id):e.jsxs("li",{className:"flex gap-3",children:[e.jsx(L,{children:e.jsx(M,{children:n.account_metadata?.name?.charAt(0).toUpperCase()||"?"})}),e.jsxs("div",{className:"w-full",children:[e.jsxs("div",{className:"flex w-full items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-body text-ink",children:n.account_metadata?.name||"Anonymous"}),e.jsxs("p",{className:"text-ink-muted text-meta",children:[W(new Date(n.created_at))," ","ago"]})]}),Q(n)&&e.jsxs("div",{className:"flex gap-0.5",children:[e.jsx(w,{content:"Edit comment",children:e.jsx(l,{variant:"ghost",size:"icon-sm",onClick:()=>m(n.id,n.text),disabled:!!c,"aria-label":"Edit comment",children:e.jsx(Ce,{})})}),e.jsx(w,{content:"Delete comment",children:e.jsx(l,{variant:"ghost",size:"icon-sm",onClick:()=>O(n.id),disabled:!!c,"aria-label":"Delete comment",children:e.jsx(ie,{})})})]})]}),e.jsx("p",{className:"mt-2 text-body-sm text-ink whitespace-pre-wrap",children:n.text})]})]},n.id))})]})},H={all:["agent-details"],detail:t=>[...H.all,t]},Ve=({agentId:t,enabled:r=!0})=>ne({queryKey:H.detail(t||"invalid"),queryFn:async()=>{if(!t)throw new Error("Agent ID is required to fetch details.");return await je(t)},select:i=>i.result,enabled:!!t&&r,staleTime:3e5,gcTime:6e5,refetchOnWindowFocus:!1}),Xe=()=>{const t=I(),r=re(),{isAuthenticated:a}=b();return K({mutationFn:async({agentId:s})=>{if(!a)throw new Error("Authentication required to delist an agent.");if(!s)throw new Error("Agent ID is required to delist.");return pe(s)},onSuccess:(s,c)=>{U("Agent delisted"),t.invalidateQueries({queryKey:H.detail(c.agentId)}),fe(t),r("/agent-hub")},onError:s=>{console.error("Delist agent error:",s)}})},Ge={like:"The like did not go through",favourite:"The favourite did not go through",download:"The download did not start",delist:"The agent was not delisted"},$=({children:t})=>e.jsx("span",{className:"inline-flex h-4 min-w-5 items-center text-meta text-ink-muted",children:t}),dt=()=>{const{agentId:t}=Ne(),r=re(),{isAuthenticated:a,user:i}=b(),{data:s,isLoading:c,isFetching:f,error:h,refetch:C}=Ve({agentId:t??"",enabled:!!t}),d=s?.visibility==="org",{memberships:_}=ye({enabled:d}),N=d?_.find(me=>me.tenant_id===s?.tenant_id)?.tenant_name??null:null,{statuses:p,isKnown:A,isError:k,isFetching:S,refetch:B}=Le({agentIds:t&&!d?[t]:[]}),m=Me(A,p,t),x=m&&p[t??""]?.liked===!0,y=m&&p[t??""]?.favourited===!0,O=s?.like_count??0,Q=s?.favourite_count??0,n=s?.download_count??0,o=ze(),P=Ie(),D=Ke(),g=Xe(),[le,q]=T.useState(!1),[j,u]=T.useState(null),R=!!i&&!!s&&i.radientUser?.account?.id===s.account_id,Z=()=>{!t||!a||o.isPending||(u(null),o.mutate({agentId:t,isCurrentlyLiked:x},{onError:()=>u("like")}))},V=()=>{!t||!a||P.isPending||(u(null),P.mutate({agentId:t,isCurrentlyFavourited:y},{onError:()=>u("favourite")}))},X=()=>{!t||!s||D.isPending||(u(null),D.mutate({agentId:s.id,agentName:s.name},{onError:()=>u("download")}))},ce=()=>{!t||!R||g.isPending||(u(null),g.mutate({agentId:t},{onError:()=>u("delist")}),q(!1))},E=j?j==="like"?{action:"like",error:o.error,retry:Z}:j==="favourite"?{action:"favourite",error:P.error,retry:V}:j==="download"?{action:"download",error:D.error,retry:X}:{action:"delist",error:g.error,retry:void 0}:null,de=()=>{r("/agent-hub")};return c?e.jsx("div",{className:"flex h-full items-center justify-center",children:e.jsx(z,{label:"Loading agent details"})}):h?e.jsx("div",{className:"flex h-full items-center justify-center p-6",children:e.jsxs(te,{variant:"danger",className:"max-w-2xl",children:[e.jsx(se,{children:"This agent could not be loaded"}),e.jsx(ae,{children:we("The Radient agent catalogue did not answer.",h)}),e.jsx("div",{className:"mt-2",children:e.jsx(l,{variant:"outline",size:"sm",onClick:()=>void C(),disabled:f,"aria-busy":f,children:f?"Trying…":"Try again"})})]})}):s?e.jsxs("div",{className:"m-6 flex flex-1 flex-col rounded-md bg-surface p-8",children:[e.jsxs("div",{className:"mb-6 flex items-center justify-between gap-4",children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-4",children:[e.jsx(l,{variant:"ghost",size:"icon",onClick:de,"aria-label":"Back to Agent hub",children:e.jsx(Ae,{})}),e.jsx(L,{className:"size-11 shrink-0",children:e.jsx(M,{children:e.jsx(ke,{size:22,"aria-hidden":"true"})})}),e.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[e.jsx("h1",{className:"truncate text-display text-ink",children:s.name}),d&&e.jsx(Ue,{orgName:N})]})]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-1",children:[!d&&e.jsxs(e.Fragment,{children:[e.jsx(w,{content:"Sign in to Radient to use this feature",disabled:a,children:e.jsx("span",{children:e.jsxs(l,{variant:"ghost",size:"sm",onClick:Z,disabled:!a||o.isPending||!m,"aria-label":m?x?"Unlike agent":"Like agent":"Like state unavailable",className:G(x&&"text-danger"),children:[e.jsx(Be,{fill:x?"currentColor":"none"}),e.jsx($,{children:O})]})})}),e.jsx(w,{content:"Sign in to Radient to use this feature",disabled:a,children:e.jsx("span",{children:e.jsxs(l,{variant:"ghost",size:"sm",onClick:V,disabled:!a||P.isPending||!m,"aria-label":m?y?"Unfavourite agent":"Favourite agent":"Favourite state unavailable",className:G(y&&"text-warning"),children:[e.jsx(Se,{fill:y?"currentColor":"none"}),e.jsx($,{children:Q})]})})})]}),e.jsx(w,{content:"Download agent to your computer",children:e.jsx("span",{children:e.jsxs(l,{variant:"ghost",size:"icon",onClick:X,disabled:D.isPending,"aria-label":"Download agent",className:"ml-1",children:[e.jsx(De,{}),e.jsx($,{children:D.isPending?e.jsx(v,{className:"h-3.5 w-5"}):n})]})})}),R&&!d&&e.jsx(w,{content:"Permanently delist this agent from Agent hub",children:e.jsx("span",{children:e.jsx(l,{variant:"ghost",size:"icon",onClick:()=>q(!0),disabled:g.isPending,"aria-label":"Delist agent",className:"ml-1 text-danger hover:bg-danger-wash hover:text-danger",children:e.jsx(ie,{})})})})]})]}),a&&k&&!j&&!d&&e.jsxs("output",{className:"mb-6 flex flex-wrap items-center gap-2 text-meta text-warning","data-testid":"agent-details-status-unknown",children:[e.jsx("span",{children:"Your likes and favourites could not be read, so this agent's viewer state is not shown."}),e.jsx(l,{variant:"ghost",size:"sm",onClick:()=>void B(),disabled:S,"aria-busy":S,children:S?"Trying…":"Try again"})]}),E&&j&&e.jsxs(te,{variant:"danger",className:"mb-6","data-testid":"agent-details-error",children:[e.jsx(se,{children:Ge[j]}),e.jsx(ae,{children:ve(E.action,E.error,s.name)}),E.retry&&e.jsx("div",{className:"mt-2",children:e.jsx(l,{variant:"outline",size:"sm",onClick:E.retry,children:"Try again"})})]}),e.jsx(Oe,{tags:s.tags,categories:s.categories}),e.jsxs("div",{className:"mt-4 mb-6 flex flex-col gap-2 text-body-sm text-ink-muted",children:[e.jsxs("p",{children:["Created by: ",s.account_metadata?.name??"Unknown",s.account_metadata?.email?` (${s.account_metadata.email})`:""]}),e.jsxs("p",{children:["Created: ",W(new Date(s.created_at))," ago (",J(s.created_at),")"]}),e.jsxs("p",{children:["Last modified: ",W(new Date(s.updated_at))," ","ago (",J(s.updated_at),")"]})]}),e.jsx("div",{className:"mt-2 mb-8 leading-relaxed text-body text-ink",children:s.description||"No description provided."}),e.jsx(oe,{className:"my-6"}),!d&&e.jsx(Ze,{agentId:s.id}),e.jsx(Ee,{open:le,onClose:()=>q(!1),title:"Delist this agent?",maxWidth:"xs",actions:e.jsxs(e.Fragment,{children:[e.jsx(Te,{onClick:()=>q(!1),children:"Cancel"}),e.jsx(Fe,{onClick:()=>{!t||!R||g.isPending||ce()},disabled:g.isPending,children:g.isPending?e.jsx(z,{size:"sm",label:"Delisting agent"}):"Delist"})]}),dialogProps:{"aria-describedby":"delist-dialog-description"},children:e.jsxs("div",{id:"delist-dialog-description",className:"text-body text-ink-muted",children:['This takes "',s.name,'" off the hub straight away, and nobody will be able to download it. You can upload it again later.']})})]}):e.jsx("div",{className:"flex h-full items-center justify-center",children:e.jsx("p",{className:"text-body text-ink",children:"Agent not found."})})};export{dt as AgentDetailsPage};
|