local-operator-ui 0.17.0 → 0.17.1
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 +395 -10
- package/out/renderer/assets/{_basePickBy-BJr_fQtB.js → _basePickBy-C3hLSrXE.js} +1 -1
- package/out/renderer/assets/{_baseUniq-CYir-14_.js → _baseUniq-DvVdHboz.js} +1 -1
- package/out/renderer/assets/{agent-details-page-D6PQzszA.js → agent-details-page-6irHwYok.js} +1 -1
- package/out/renderer/assets/{agent-hub-page-BU8BMGm-.js → agent-hub-page-t3NZyvhe.js} +1 -1
- package/out/renderer/assets/{agents-page-3jWcFYcZ.js → agents-page-Cu3tV_JM.js} +2 -2
- package/out/renderer/assets/{architectureDiagram-IEHRJDOE-CCErX8Tf.js → architectureDiagram-IEHRJDOE-Dy32lq21.js} +1 -1
- package/out/renderer/assets/{blockDiagram-JOT3LUYC-CUvjtfSj.js → blockDiagram-JOT3LUYC-D9CCHreU.js} +1 -1
- package/out/renderer/assets/{c4Diagram-VJAJSXHY-VeJwMCKK.js → c4Diagram-VJAJSXHY-D6JYul4W.js} +1 -1
- package/out/renderer/assets/channel-CLzqtgQj.js +1 -0
- package/out/renderer/assets/{chunk-4BMEZGHF-3Bq4xtvZ.js → chunk-4BMEZGHF-CWZ3r21W.js} +1 -1
- package/out/renderer/assets/{chunk-A2AXSNBT-B3y7xV7i.js → chunk-A2AXSNBT-_jdJLEL4.js} +1 -1
- package/out/renderer/assets/{chunk-AEK57VVT-EVfEpH4f.js → chunk-AEK57VVT-BRqxxp9X.js} +1 -1
- package/out/renderer/assets/{chunk-D6G4REZN-DMvU3WoU.js → chunk-D6G4REZN-mvuW_LPO.js} +1 -1
- package/out/renderer/assets/{chunk-RZ5BOZE2-IvUVaxD4.js → chunk-RZ5BOZE2-B2kzBW8d.js} +1 -1
- package/out/renderer/assets/{chunk-XZIHB7SX-qRGLrBmi.js → chunk-XZIHB7SX-CqZmhFu_.js} +1 -1
- package/out/renderer/assets/classDiagram-GIVACNV2-Bu04i3t4.js +1 -0
- package/out/renderer/assets/classDiagram-v2-COTLJTTW-Bu04i3t4.js +1 -0
- package/out/renderer/assets/clone-DHy7FuoP.js +1 -0
- package/out/renderer/assets/{compact-pagination-C9MHaQh8.js → compact-pagination-BJa5bxJe.js} +1 -1
- package/out/renderer/assets/{dagre-OKDRZEBW-mkOM0foV.js → dagre-OKDRZEBW-BLi9lW3T.js} +1 -1
- package/out/renderer/assets/{diagram-SSKATNLV-nPhdvd43.js → diagram-SSKATNLV-DQa3WYjU.js} +1 -1
- package/out/renderer/assets/{diagram-VNBRO52H-DwSuRePG.js → diagram-VNBRO52H-C99A8WuH.js} +1 -1
- package/out/renderer/assets/{erDiagram-Q7BY3M3F-H_hDC8d0.js → erDiagram-Q7BY3M3F-DLWwdshb.js} +1 -1
- package/out/renderer/assets/{flowDiagram-4HSFHLVR-COn1sttR.js → flowDiagram-4HSFHLVR-CHDQ3e9O.js} +1 -1
- package/out/renderer/assets/{ganttDiagram-APWFNJXF-DbxYzA4C.js → ganttDiagram-APWFNJXF-G4Rf9Yhs.js} +1 -1
- package/out/renderer/assets/{gitGraphDiagram-7IBYFJ6S-GJA88tpY.js → gitGraphDiagram-7IBYFJ6S-2JN_jG8T.js} +1 -1
- package/out/renderer/assets/{graph-CDkZGsbw.js → graph-BR85xHbv.js} +1 -1
- package/out/renderer/assets/icon-2KHv58kf.css +1 -0
- package/out/renderer/assets/{index-Coj74S4F.js → index-BIyDfbOQ.js} +1 -1
- package/out/renderer/assets/{index-DyRL2cJn.js → index-BuhuPWhs.js} +1 -1
- package/out/renderer/assets/{index-CVSo1eIn.js → index-_UzVA1oU.js} +279 -278
- package/out/renderer/assets/{infoDiagram-PH2N3AL5-DCDmAfuD.js → infoDiagram-PH2N3AL5-xVzynFeN.js} +1 -1
- package/out/renderer/assets/{installer-JsKFFZ0N.js → installer-CwpKGBgz.js} +1 -1
- package/out/renderer/assets/{journeyDiagram-U35MCT3I-D5zuKm0h.js → journeyDiagram-U35MCT3I-C8-eHlWx.js} +1 -1
- package/out/renderer/assets/{kanban-definition-NDS4AKOZ-D28NqnN2.js → kanban-definition-NDS4AKOZ-C2Oyzo6d.js} +1 -1
- package/out/renderer/assets/{layout-B__Skqp8.js → layout-mlSyc_4q.js} +1 -1
- package/out/renderer/assets/{legacy-agents-page-d_nYp_Kx.js → legacy-agents-page-CTGA2lul.js} +1 -1
- package/out/renderer/assets/{mermaid.core-BHfHBA6R.js → mermaid.core-BvFuUEpc.js} +5 -5
- package/out/renderer/assets/{mindmap-definition-ALO5MXBD-DKRrQTAb.js → mindmap-definition-ALO5MXBD-DWnloutf.js} +1 -1
- package/out/renderer/assets/{page-header-JYwkpfbT.js → page-header-C-9zjakn.js} +1 -1
- package/out/renderer/assets/{parseISO-D2eiqdi5.js → parseISO-Bp3fMoKU.js} +1 -1
- package/out/renderer/assets/{pieDiagram-IB7DONF6-B1BtzilZ.js → pieDiagram-IB7DONF6-B990Tpnk.js} +1 -1
- package/out/renderer/assets/{quadrantDiagram-7GDLP6J5-2ZnW_kzE.js → quadrantDiagram-7GDLP6J5-BYeOekBR.js} +1 -1
- package/out/renderer/assets/{radar-MK3ICKWK-BxdSoZJX.js → radar-MK3ICKWK-DcxkUK5Z.js} +1 -1
- package/out/renderer/assets/{radient-auth-buttons-Bi1-KXYI.js → radient-auth-buttons-CK9Icvbq.js} +1 -1
- package/out/renderer/assets/{requirementDiagram-KVF5MWMF-6W-9ZOiF.js → requirementDiagram-KVF5MWMF-D_tf_1lk.js} +1 -1
- package/out/renderer/assets/{sankeyDiagram-QLVOVGJD-DsCO-xHN.js → sankeyDiagram-QLVOVGJD-DlDfWN8k.js} +1 -1
- package/out/renderer/assets/{schedules-page-BGkrdg_o.js → schedules-page-AQ9gMlkR.js} +1 -1
- package/out/renderer/assets/{sequenceDiagram-X6HHIX6F-DTsOsVHj.js → sequenceDiagram-X6HHIX6F-wr3-RcoT.js} +1 -1
- package/out/renderer/assets/{settings-page-UqW8Dofa.js → settings-page-BSjdxTFW.js} +1 -1
- package/out/renderer/assets/{square-pen-DOIqaj9i.js → square-pen-2Yxvf_S9.js} +1 -1
- package/out/renderer/assets/{stateDiagram-DGXRK772-Hgu5z66Y.js → stateDiagram-DGXRK772-BLD6Vmgd.js} +1 -1
- package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-CsGkljza.js +1 -0
- package/out/renderer/assets/{timeline-definition-BDJGKUSR-BkaQadIG.js → timeline-definition-BDJGKUSR-B-JeF04j.js} +1 -1
- package/out/renderer/assets/{use-agent-like-mutation-BSrvgpki.js → use-agent-like-mutation-tstZNIUn.js} +1 -1
- package/out/renderer/assets/{xychartDiagram-VJFVF3MP-DuWwCccB.js → xychartDiagram-VJFVF3MP-DuFpzjW6.js} +1 -1
- package/out/renderer/index.html +3 -3
- package/out/renderer/installer.html +3 -3
- package/package.json +2 -2
- package/out/renderer/assets/channel-BtWQQlRJ.js +0 -1
- package/out/renderer/assets/classDiagram-GIVACNV2-C298zC-3.js +0 -1
- package/out/renderer/assets/classDiagram-v2-COTLJTTW-C298zC-3.js +0 -1
- package/out/renderer/assets/clone-dCQCshht.js +0 -1
- package/out/renderer/assets/icon-DM6KYqqV.css +0 -1
- package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-BrBwSEFe.js +0 -1
- /package/out/renderer/assets/{icon-D9xnujmI.js → icon-2OdwuA9u.js} +0 -0
package/out/main/index.js
CHANGED
|
@@ -457,6 +457,17 @@ const desktopRequestSchema = zod.z.discriminatedUnion("op", [
|
|
|
457
457
|
sessionId,
|
|
458
458
|
completionToken: zod.z.string().uuid()
|
|
459
459
|
}).strict(),
|
|
460
|
+
// Cross-surface delivery claim, NOT a read receipt. `claim_delivery`
|
|
461
|
+
// serialises the observers that can see one completion (a TUI, this app) so
|
|
462
|
+
// exactly one of them toasts it. It deliberately never advances the read
|
|
463
|
+
// watermark: routing a notification must not clear the sidebar's unseen mark
|
|
464
|
+
// for a session the user never opened, which is why this is its own op and
|
|
465
|
+
// not a reuse of `sessions.seen`.
|
|
466
|
+
zod.z.object({
|
|
467
|
+
op: zod.z.literal("sessions.notified"),
|
|
468
|
+
sessionId,
|
|
469
|
+
completionToken: zod.z.string().uuid()
|
|
470
|
+
}).strict(),
|
|
460
471
|
zod.z.object({
|
|
461
472
|
op: zod.z.literal("sessions.watch"),
|
|
462
473
|
sessionId,
|
|
@@ -917,6 +928,12 @@ function desktopEndpoint(request) {
|
|
|
917
928
|
method: "POST",
|
|
918
929
|
body: { completion_token: request.completionToken }
|
|
919
930
|
};
|
|
931
|
+
case "sessions.notified":
|
|
932
|
+
return {
|
|
933
|
+
path: `/v1/desktop/sessions/${request.sessionId}/notified`,
|
|
934
|
+
method: "POST",
|
|
935
|
+
body: { completion_token: request.completionToken }
|
|
936
|
+
};
|
|
920
937
|
case "sessions.watch":
|
|
921
938
|
return {
|
|
922
939
|
path: `/v1/desktop/sessions/${request.sessionId}/watch`,
|
|
@@ -1835,6 +1852,31 @@ class BackendServiceManager {
|
|
|
1835
1852
|
/** Survives relay recreation so notifications never silently detach
|
|
1836
1853
|
* when the backend URL rotates. */
|
|
1837
1854
|
streamObserver = null;
|
|
1855
|
+
/**
|
|
1856
|
+
* Called every time the backend becomes reachable and authenticated.
|
|
1857
|
+
*
|
|
1858
|
+
* The desktop token is minted inside `start()`, so anything that must query
|
|
1859
|
+
* the backend cannot be issued from `app.whenReady()` — at that point the
|
|
1860
|
+
* port is dead on the ordinary self-managed cold start and the request is
|
|
1861
|
+
* lost. This fires after the health check passes, which is the first moment
|
|
1862
|
+
* `requestDesktop` can succeed.
|
|
1863
|
+
*
|
|
1864
|
+
* It fires AGAIN on every restart and on external-backend discovery, on
|
|
1865
|
+
* purpose: the backend underneath a running app can be replaced by a
|
|
1866
|
+
* different version, and a capability read taken once at startup would
|
|
1867
|
+
* outlive the backend it described.
|
|
1868
|
+
*/
|
|
1869
|
+
backendReadyObserver = null;
|
|
1870
|
+
onBackendReady(observer) {
|
|
1871
|
+
this.backendReadyObserver = observer;
|
|
1872
|
+
}
|
|
1873
|
+
notifyBackendReady() {
|
|
1874
|
+
try {
|
|
1875
|
+
this.backendReadyObserver?.();
|
|
1876
|
+
} catch (error) {
|
|
1877
|
+
logger.error("Backend-ready observer threw:", LogFileType.BACKEND, error);
|
|
1878
|
+
}
|
|
1879
|
+
}
|
|
1838
1880
|
getStreamRelay() {
|
|
1839
1881
|
if (!this.streamRelay || this.streamRelayUrl !== this.backendUrl) {
|
|
1840
1882
|
this.streamRelay?.dispose();
|
|
@@ -2182,6 +2224,7 @@ class BackendServiceManager {
|
|
|
2182
2224
|
LogFileType.BACKEND
|
|
2183
2225
|
);
|
|
2184
2226
|
this.isExternalBackend = true;
|
|
2227
|
+
this.notifyBackendReady();
|
|
2185
2228
|
return true;
|
|
2186
2229
|
}
|
|
2187
2230
|
} catch (error) {
|
|
@@ -2211,6 +2254,7 @@ class BackendServiceManager {
|
|
|
2211
2254
|
LogFileType.BACKEND
|
|
2212
2255
|
);
|
|
2213
2256
|
this.isExternalBackend = true;
|
|
2257
|
+
this.notifyBackendReady();
|
|
2214
2258
|
return true;
|
|
2215
2259
|
}
|
|
2216
2260
|
}
|
|
@@ -2244,6 +2288,7 @@ class BackendServiceManager {
|
|
|
2244
2288
|
"Backend Service Manager is disabled. Skipping backend start.",
|
|
2245
2289
|
LogFileType.BACKEND
|
|
2246
2290
|
);
|
|
2291
|
+
this.notifyBackendReady();
|
|
2247
2292
|
return true;
|
|
2248
2293
|
}
|
|
2249
2294
|
if (await this.checkExistingBackend()) {
|
|
@@ -2379,6 +2424,7 @@ class BackendServiceManager {
|
|
|
2379
2424
|
if (await this.checkHealth()) {
|
|
2380
2425
|
this.isRunning = true;
|
|
2381
2426
|
this.startHealthCheck();
|
|
2427
|
+
this.notifyBackendReady();
|
|
2382
2428
|
return true;
|
|
2383
2429
|
}
|
|
2384
2430
|
await new Promise((resolve) => setTimeout(resolve, 1e3));
|
|
@@ -3938,6 +3984,21 @@ function registerDesktopIPC(window, expectedUrl, request, streams, media, notifi
|
|
|
3938
3984
|
}
|
|
3939
3985
|
const NOTIFY_TTL_MS = 10 * 60 * 1e3;
|
|
3940
3986
|
const MAX_DEDUPE_KEYS = 2048;
|
|
3987
|
+
const CONTRACT_PROBE_ATTEMPTS = 3;
|
|
3988
|
+
const CONTRACT_PROBE_RETRY_MS = 250;
|
|
3989
|
+
const MAX_BODY_CHARS = 240;
|
|
3990
|
+
const TRAILING_COLONS = /:+$/;
|
|
3991
|
+
const GATE_BODIES = {
|
|
3992
|
+
ask: "Waiting for your answer",
|
|
3993
|
+
approval: "Waiting for approval"
|
|
3994
|
+
};
|
|
3995
|
+
function gateBody(kind, gateTitle, gateDetail) {
|
|
3996
|
+
let subject = (gateDetail ?? "").trim();
|
|
3997
|
+
if (subject && gateTitle && !subject.toLowerCase().startsWith(gateTitle.toLowerCase())) {
|
|
3998
|
+
subject = `${gateTitle}: ${subject}`.trim().replace(TRAILING_COLONS, "").trim();
|
|
3999
|
+
}
|
|
4000
|
+
return subject || GATE_BODIES[kind] || GATE_BODIES.approval;
|
|
4001
|
+
}
|
|
3941
4002
|
class DesktopNotifier {
|
|
3942
4003
|
constructor(window, request) {
|
|
3943
4004
|
this.window = window;
|
|
@@ -3948,9 +4009,163 @@ class DesktopNotifier {
|
|
|
3948
4009
|
epochs = /* @__PURE__ */ new Map();
|
|
3949
4010
|
/** Window state per (window id) used to decide whether a toast is needed. */
|
|
3950
4011
|
windows = /* @__PURE__ */ new Map();
|
|
4012
|
+
/**
|
|
4013
|
+
* `features.notification_contract` from `/v1/capabilities`; 0 means legacy.
|
|
4014
|
+
*
|
|
4015
|
+
* A HARD switch, not a heuristic. At >= 1 the backend owns every completion
|
|
4016
|
+
* toast and the legacy event path must stay silent or one turn produces two
|
|
4017
|
+
* banners. Absent or unfetchable stays 0 on purpose: a missing capability
|
|
4018
|
+
* response is a transient HTTP failure far more often than it is an old
|
|
4019
|
+
* backend, and failing toward silence would lose completions outright.
|
|
4020
|
+
*/
|
|
4021
|
+
notificationContract = 0;
|
|
4022
|
+
/**
|
|
4023
|
+
* The capability read in flight, or the last one that settled.
|
|
4024
|
+
*
|
|
4025
|
+
* `null` only before the first read is ever issued.
|
|
4026
|
+
*/
|
|
4027
|
+
contractProbe = null;
|
|
4028
|
+
/**
|
|
4029
|
+
* Generation of the newest capability read, so the LAST-STARTED one wins.
|
|
4030
|
+
*
|
|
4031
|
+
* Probes are not idempotent and they overlap: the backend-ready hook can
|
|
4032
|
+
* fire twice in a tick (external-backend discovery and `start()` both
|
|
4033
|
+
* reported ready), a health-check restart can fire it while an earlier probe
|
|
4034
|
+
* is still retrying, and `awaitContract` starts one of its own. Without this
|
|
4035
|
+
* the shared fields are written by whichever probe SETTLES last, which on a
|
|
4036
|
+
* transient blip is the older read — a successful answer clobbered by a
|
|
4037
|
+
* stale failure, decided by timing rather than by recency (review round 2,
|
|
4038
|
+
* R2-2).
|
|
4039
|
+
*
|
|
4040
|
+
* A superseded probe therefore writes nothing at all and returns. It is not
|
|
4041
|
+
* cancelled — its in-flight `fetch` is left to settle on its own, because
|
|
4042
|
+
* the only cost is one wasted response and the alternative is threading an
|
|
4043
|
+
* `AbortSignal` through the desktop transport for no user-visible gain.
|
|
4044
|
+
*/
|
|
4045
|
+
contractGeneration = 0;
|
|
4046
|
+
/**
|
|
4047
|
+
* Whether a capability read has ever come back with a real HTTP answer.
|
|
4048
|
+
*
|
|
4049
|
+
* This is the distinction that closes the double-banner window BY
|
|
4050
|
+
* CONSTRUCTION. A `notificationContract` of 0 has three causes that look
|
|
4051
|
+
* identical on the field alone: the backend answered and has no contract
|
|
4052
|
+
* (old backend, legacy path is correct), nobody has asked yet, and the ask
|
|
4053
|
+
* never reached a backend at all. Only the first is an answer. The other two
|
|
4054
|
+
* are the cold start the review reproduced — the read went to a port nothing
|
|
4055
|
+
* was listening on, was swallowed, and the legacy `agent_end` toast then
|
|
4056
|
+
* fired alongside the composed frame, two banners for one turn.
|
|
4057
|
+
*
|
|
4058
|
+
* So the legacy path re-asks until it has a genuine answer rather than
|
|
4059
|
+
* reading an unanswered 0 as "no contract". Failing toward the legacy path
|
|
4060
|
+
* rather than toward silence (design 4.3) is preserved: once a bounded probe
|
|
4061
|
+
* really has failed at the moment the toast is due, the toast is raised.
|
|
4062
|
+
*
|
|
4063
|
+
* ONCE TRUE THIS AND `notificationContract` MOVE ONLY TOGETHER. A failed
|
|
4064
|
+
* probe that reset the value while leaving this true produced a pair meaning
|
|
4065
|
+
* "we were told there is no contract" when in fact we were told nothing, and
|
|
4066
|
+
* `awaitContract` then declined to re-ask — the double banner returned and
|
|
4067
|
+
* STAYED, every turn, until the next backend bounce (review round 2, R2-1).
|
|
4068
|
+
*/
|
|
4069
|
+
contractAnswered = false;
|
|
3951
4070
|
get canNotify() {
|
|
3952
4071
|
return electron.Notification.isSupported();
|
|
3953
4072
|
}
|
|
4073
|
+
/**
|
|
4074
|
+
* Read `features.notification_contract` from the connected backend.
|
|
4075
|
+
*
|
|
4076
|
+
* Call this every time the backend becomes reachable — first start, a health
|
|
4077
|
+
* check restarting it, external-backend discovery rotating the URL. It is
|
|
4078
|
+
* wired to `BackendServiceManager.onBackendReady` for exactly that reason:
|
|
4079
|
+
* issuing it earlier (inside `app.whenReady()`) queries a port nothing is
|
|
4080
|
+
* listening on yet on the ordinary self-managed cold start, and a swallowed
|
|
4081
|
+
* failure there leaves the gate on the legacy path against a backend that
|
|
4082
|
+
* composes — two banners for one turn.
|
|
4083
|
+
*
|
|
4084
|
+
* Re-reading is also the downgrade story the design names (4.3): an app
|
|
4085
|
+
* pointed from a new backend at an old one re-reads 0 and gets its legacy
|
|
4086
|
+
* completion signal back. The previous one-way latch could not do that.
|
|
4087
|
+
*
|
|
4088
|
+
* A throw or a non-200 after the bounded retry leaves the gate at 0, which
|
|
4089
|
+
* is the legacy path rather than silence: see `notificationContract`.
|
|
4090
|
+
*/
|
|
4091
|
+
refreshNotificationContract() {
|
|
4092
|
+
const generation = ++this.contractGeneration;
|
|
4093
|
+
const probe = this.probeNotificationContract(generation);
|
|
4094
|
+
this.contractProbe = probe;
|
|
4095
|
+
return probe;
|
|
4096
|
+
}
|
|
4097
|
+
async probeNotificationContract(generation) {
|
|
4098
|
+
for (let attempt = 0; attempt < CONTRACT_PROBE_ATTEMPTS; attempt++) {
|
|
4099
|
+
let response = null;
|
|
4100
|
+
try {
|
|
4101
|
+
response = await this.request({ op: "capabilities" });
|
|
4102
|
+
} catch {
|
|
4103
|
+
}
|
|
4104
|
+
if (generation !== this.contractGeneration) return;
|
|
4105
|
+
if (response?.status === 200) {
|
|
4106
|
+
const body = response.body;
|
|
4107
|
+
this.applyNotificationContract(
|
|
4108
|
+
body?.result?.features?.notification_contract
|
|
4109
|
+
);
|
|
4110
|
+
this.contractAnswered = true;
|
|
4111
|
+
return;
|
|
4112
|
+
}
|
|
4113
|
+
if (attempt + 1 < CONTRACT_PROBE_ATTEMPTS) {
|
|
4114
|
+
await new Promise(
|
|
4115
|
+
(resolve) => setTimeout(resolve, CONTRACT_PROBE_RETRY_MS)
|
|
4116
|
+
);
|
|
4117
|
+
if (generation !== this.contractGeneration) return;
|
|
4118
|
+
}
|
|
4119
|
+
}
|
|
4120
|
+
}
|
|
4121
|
+
/**
|
|
4122
|
+
* Block until a capability read has ANSWERED against the current backend,
|
|
4123
|
+
* or until a fresh bounded probe has failed here and now.
|
|
4124
|
+
*
|
|
4125
|
+
* Issuing the probe itself when none has answered is what makes the legacy
|
|
4126
|
+
* path safe by construction rather than by call-site discipline. The failure
|
|
4127
|
+
* the review reproduced is a read fired before the backend existed: it is
|
|
4128
|
+
* not enough to move that call later, because any read can lose its race
|
|
4129
|
+
* with a backend that is still starting, and a swallowed one leaves a 0 that
|
|
4130
|
+
* reads exactly like an old backend. Re-asking at the moment the answer is
|
|
4131
|
+
* actually needed cannot be beaten by a slow start.
|
|
4132
|
+
*
|
|
4133
|
+
* Loops rather than awaiting once because a backend rotation can start a
|
|
4134
|
+
* new probe while we are waiting on the old one, and the legacy path must
|
|
4135
|
+
* never be decided on the previous backend's answer.
|
|
4136
|
+
*/
|
|
4137
|
+
async awaitContract() {
|
|
4138
|
+
if (!this.contractAnswered) this.refreshNotificationContract();
|
|
4139
|
+
let awaited = null;
|
|
4140
|
+
while (this.contractProbe !== awaited) {
|
|
4141
|
+
awaited = this.contractProbe;
|
|
4142
|
+
await awaited;
|
|
4143
|
+
}
|
|
4144
|
+
}
|
|
4145
|
+
/**
|
|
4146
|
+
* Record the contract version a backend reported.
|
|
4147
|
+
*
|
|
4148
|
+
* Being told the value directly IS an answer, so this also stops the legacy
|
|
4149
|
+
* path issuing a probe of its own and overwriting it.
|
|
4150
|
+
*
|
|
4151
|
+
* Bumps the generation for the same reason a probe does: this is the newest
|
|
4152
|
+
* reading of the backend, so an older probe still in flight must not settle
|
|
4153
|
+
* on top of it.
|
|
4154
|
+
*/
|
|
4155
|
+
setNotificationContract(version2) {
|
|
4156
|
+
this.contractGeneration++;
|
|
4157
|
+
this.applyNotificationContract(version2);
|
|
4158
|
+
this.contractAnswered = true;
|
|
4159
|
+
}
|
|
4160
|
+
/**
|
|
4161
|
+
* Normalise a reported contract value. Both callers are ANSWERS and both
|
|
4162
|
+
* set `contractAnswered` themselves; nothing else may write this field.
|
|
4163
|
+
* That invariant is the fix for R2-1, so a third caller that resets the
|
|
4164
|
+
* value without answering re-opens it.
|
|
4165
|
+
*/
|
|
4166
|
+
applyNotificationContract(version2) {
|
|
4167
|
+
this.notificationContract = typeof version2 === "number" && Number.isFinite(version2) && version2 > 0 ? version2 : 0;
|
|
4168
|
+
}
|
|
3954
4169
|
/**
|
|
3955
4170
|
* Renderer heartbeat. Forwarded to the backend as the watch lease for the
|
|
3956
4171
|
* renderer's active subscription; `can_notify` is asserted only when main
|
|
@@ -3979,21 +4194,103 @@ class DesktopNotifier {
|
|
|
3979
4194
|
if (frame.type === "snapshot") {
|
|
3980
4195
|
this.epochs.set(sessionId2, frame.payload.frontend.epoch);
|
|
3981
4196
|
const gate = frame.payload.frontend.snapshot.pending_gate;
|
|
3982
|
-
if (gate) this.gate(sessionId2, gate
|
|
4197
|
+
if (gate) this.gate(sessionId2, gate);
|
|
3983
4198
|
return;
|
|
3984
4199
|
}
|
|
3985
4200
|
if (frame.type === "frontend.update") {
|
|
3986
4201
|
this.epochs.set(sessionId2, frame.payload.epoch);
|
|
3987
4202
|
const gate = frame.payload.changes.pending_gate;
|
|
3988
|
-
if (gate) this.gate(sessionId2, gate
|
|
4203
|
+
if (gate) this.gate(sessionId2, gate);
|
|
4204
|
+
return;
|
|
4205
|
+
}
|
|
4206
|
+
if (frame.type === "notification") {
|
|
4207
|
+
void this.composed(sessionId2, frame.payload);
|
|
3989
4208
|
return;
|
|
3990
4209
|
}
|
|
3991
4210
|
if (frame.type === "event") {
|
|
3992
|
-
|
|
3993
|
-
|
|
3994
|
-
|
|
4211
|
+
if (String(frame.payload.type ?? "") !== "agent_end") return;
|
|
4212
|
+
void this.legacyTurn(sessionId2, frame.seq);
|
|
4213
|
+
}
|
|
4214
|
+
}
|
|
4215
|
+
/**
|
|
4216
|
+
* The legacy completion toast, raised only against a backend that composes
|
|
4217
|
+
* none of its own.
|
|
4218
|
+
*
|
|
4219
|
+
* DEFERRED, never raced. A backend advertising `notification_contract` owns
|
|
4220
|
+
* every completion toast, so this must stay silent against it or the user
|
|
4221
|
+
* gets two banners for one turn: the legacy one here plus the composed frame.
|
|
4222
|
+
* `agent_end` is published the moment the turn's last model call returns,
|
|
4223
|
+
* while the composed frame follows from the backend's 1 s attention poll
|
|
4224
|
+
* (design 6.1) — so the event reliably arrives FIRST, and any check that
|
|
4225
|
+
* reacts to a frame already in hand closes the window one frame too late.
|
|
4226
|
+
* Waiting for the capability read to settle is what closes it by
|
|
4227
|
+
* construction. The wait is bounded by `CONTRACT_PROBE_*` and only ever
|
|
4228
|
+
* applies before the first answer of a run.
|
|
4229
|
+
*
|
|
4230
|
+
* `agent_end` survives on this path only because dropping it too would leave
|
|
4231
|
+
* an old backend with no completion signal at all. It is still wrong (it
|
|
4232
|
+
* arrives while `task` children run), which is exactly what the
|
|
4233
|
+
* backend-composed path fixes. The event itself is NEVER filtered out of the
|
|
4234
|
+
* stream: the transcript reducer settles on it.
|
|
4235
|
+
*/
|
|
4236
|
+
async legacyTurn(sessionId2, seq) {
|
|
4237
|
+
await this.awaitContract();
|
|
4238
|
+
if (this.notificationContract > 0) return;
|
|
4239
|
+
this.turn(sessionId2, seq);
|
|
4240
|
+
}
|
|
4241
|
+
/**
|
|
4242
|
+
* Deliver one backend-composed notification.
|
|
4243
|
+
*
|
|
4244
|
+
* The order of these four checks is load-bearing and is the whole of 7.3.
|
|
4245
|
+
* Dedupe and the focus gate run BEFORE the claim so a toast we are not going
|
|
4246
|
+
* to show never burns the cross-surface claim; the claim runs immediately
|
|
4247
|
+
* before delivery so the claimant really is the deliverer.
|
|
4248
|
+
*/
|
|
4249
|
+
async composed(sessionId2, n) {
|
|
4250
|
+
if (!this.claim(n.dedupe_key)) return;
|
|
4251
|
+
if (n.focus_policy === "when_unfocused" && this.anyFocused()) return;
|
|
4252
|
+
if (n.completion_token) {
|
|
4253
|
+
const outcome = await this.claimDelivery(sessionId2, n.completion_token);
|
|
4254
|
+
if (outcome !== "won") {
|
|
4255
|
+
if (outcome === "failed") this.delivered.delete(n.dedupe_key);
|
|
4256
|
+
return;
|
|
3995
4257
|
}
|
|
3996
4258
|
}
|
|
4259
|
+
this.show(
|
|
4260
|
+
sessionId2,
|
|
4261
|
+
n.title,
|
|
4262
|
+
n.status,
|
|
4263
|
+
n.body,
|
|
4264
|
+
n.body_is_snippet,
|
|
4265
|
+
n.body_is_failure ?? false
|
|
4266
|
+
);
|
|
4267
|
+
}
|
|
4268
|
+
/**
|
|
4269
|
+
* Ask the backend whether this surface owns this completion's toast.
|
|
4270
|
+
*
|
|
4271
|
+
* Fails CLOSED on the TOAST: neither `lost` nor `failed` shows anything,
|
|
4272
|
+
* because the failure mode of failing open is the duplicate banner on every
|
|
4273
|
+
* surface this whole mechanism exists to prevent.
|
|
4274
|
+
*
|
|
4275
|
+
* The two non-winning outcomes are still reported separately, because they
|
|
4276
|
+
* differ in who owns the completion afterwards. `lost` means the backend
|
|
4277
|
+
* answered and another surface has it. `failed` means the backend was never
|
|
4278
|
+
* reached or never answered cleanly, so nothing was claimed anywhere and the
|
|
4279
|
+
* completion is still owed to somebody — see the caller.
|
|
4280
|
+
*/
|
|
4281
|
+
async claimDelivery(sessionId2, completionToken) {
|
|
4282
|
+
try {
|
|
4283
|
+
const response = await this.request({
|
|
4284
|
+
op: "sessions.notified",
|
|
4285
|
+
sessionId: sessionId2,
|
|
4286
|
+
completionToken
|
|
4287
|
+
});
|
|
4288
|
+
if (response.status !== 200) return "failed";
|
|
4289
|
+
const body = response.body;
|
|
4290
|
+
return body?.result?.claimed === true ? "won" : "lost";
|
|
4291
|
+
} catch {
|
|
4292
|
+
return "failed";
|
|
4293
|
+
}
|
|
3997
4294
|
}
|
|
3998
4295
|
anyFocused() {
|
|
3999
4296
|
for (const state of this.windows.values()) {
|
|
@@ -4001,16 +4298,59 @@ class DesktopNotifier {
|
|
|
4001
4298
|
}
|
|
4002
4299
|
return false;
|
|
4003
4300
|
}
|
|
4004
|
-
|
|
4301
|
+
/**
|
|
4302
|
+
* Raise the banner for a pending approval or question.
|
|
4303
|
+
*
|
|
4304
|
+
* A gate is worth a toast even when the window is focused: the user may be
|
|
4305
|
+
* reading another conversation in the same window.
|
|
4306
|
+
*
|
|
4307
|
+
* When the backend supplies `session_name`, the banner takes the SHAPE of a
|
|
4308
|
+
* completion banner — session name as the title, the gate's own title
|
|
4309
|
+
* leading the detail. Without it, a gate named only its category while
|
|
4310
|
+
* completions named their session, so the banner a user can safely ignore
|
|
4311
|
+
* identified itself and the banner holding a run hostage did not; with two
|
|
4312
|
+
* or three sessions running, that one cannot be triaged without clicking,
|
|
4313
|
+
* which is the action the user was deciding whether to take.
|
|
4314
|
+
*
|
|
4315
|
+
* The name is rendered ONLY as the backend sent it. `session_name` is
|
|
4316
|
+
* additive and optional: it is absent on an older backend and empty when the
|
|
4317
|
+
* `session_names_in_notifications()` privacy flag is off. The backend owns
|
|
4318
|
+
* that decision because only it can read the flag, so this app must never
|
|
4319
|
+
* resolve the name from a snapshot instead — doing so would leak a name the
|
|
4320
|
+
* user opted out of, on every gate, forever.
|
|
4321
|
+
*/
|
|
4322
|
+
gate(sessionId2, gate) {
|
|
4323
|
+
const { request_id: requestId2, kind, title, detail } = gate;
|
|
4005
4324
|
const key = `gate:${sessionId2}:${this.epochs.get(sessionId2) ?? ""}:${requestId2}`;
|
|
4006
4325
|
if (!this.claim(key)) return;
|
|
4007
|
-
|
|
4326
|
+
const fallback = kind === "ask" ? "Question" : "Approval needed";
|
|
4327
|
+
const sessionName = gate.session_name?.trim() || "";
|
|
4328
|
+
if (!sessionName) {
|
|
4329
|
+
this.show(
|
|
4330
|
+
sessionId2,
|
|
4331
|
+
title.trim() || fallback,
|
|
4332
|
+
"",
|
|
4333
|
+
gateBody(kind, "", detail)
|
|
4334
|
+
);
|
|
4335
|
+
return;
|
|
4336
|
+
}
|
|
4337
|
+
this.show(
|
|
4338
|
+
sessionId2,
|
|
4339
|
+
sessionName,
|
|
4340
|
+
"",
|
|
4341
|
+
gateBody(kind, title.trim() || fallback, detail)
|
|
4342
|
+
);
|
|
4008
4343
|
}
|
|
4344
|
+
/**
|
|
4345
|
+
* Legacy completion toast: canned copy, reached only against a backend that
|
|
4346
|
+
* does not advertise `notification_contract`. Keyed on `session:epoch:seq`
|
|
4347
|
+
* as it always was — an old backend mints no `dedupe_key` to key on.
|
|
4348
|
+
*/
|
|
4009
4349
|
turn(sessionId2, seq) {
|
|
4010
4350
|
const key = `turn:${sessionId2}:${this.epochs.get(sessionId2) ?? ""}:${seq}`;
|
|
4011
4351
|
if (!this.claim(key)) return;
|
|
4012
4352
|
if (this.anyFocused()) return;
|
|
4013
|
-
this.show(sessionId2, "Turn complete", "The agent finished its turn.");
|
|
4353
|
+
this.show(sessionId2, "Turn complete", "", "The agent finished its turn.");
|
|
4014
4354
|
}
|
|
4015
4355
|
claim(key) {
|
|
4016
4356
|
const now = Date.now();
|
|
@@ -4023,10 +4363,52 @@ class DesktopNotifier {
|
|
|
4023
4363
|
}
|
|
4024
4364
|
return true;
|
|
4025
4365
|
}
|
|
4026
|
-
|
|
4366
|
+
/**
|
|
4367
|
+
* Render one toast.
|
|
4368
|
+
*
|
|
4369
|
+
* `status` leads the body rather than riding `subtitle`. Electron's
|
|
4370
|
+
* `subtitle` option is documented macOS-only, so on Windows and Linux the
|
|
4371
|
+
* state category would simply vanish and those users would read a bare
|
|
4372
|
+
* snippet with no indication of whether the turn succeeded or failed. One
|
|
4373
|
+
* shape that degrades on no platform beats a second, platform-forked one.
|
|
4374
|
+
* The strings themselves are the backend's, unchanged; only the join is ours.
|
|
4375
|
+
*
|
|
4376
|
+
* The design doc's stated reason for keeping the status out of the title —
|
|
4377
|
+
* "macOS clips a title at ~43 characters" — is FALSE on a current macOS
|
|
4378
|
+
* banner: rendered frames show an 80-character title wrapping across two
|
|
4379
|
+
* lines, not clipping (design review round 1). The real constraint is a
|
|
4380
|
+
* total budget of roughly five text lines for title and body together, after
|
|
4381
|
+
* which macOS truncates the BODY with its own ellipsis. That is why the join
|
|
4382
|
+
* is spent sparingly below.
|
|
4383
|
+
*
|
|
4384
|
+
* WHETHER THE BODY NAMES THE OUTCOME ITSELF decides whether the status earns
|
|
4385
|
+
* its place, and the backend sends two flags for the two kinds of body that
|
|
4386
|
+
* do not. A model-written snippet describes the work, and the session's own
|
|
4387
|
+
* recorded failure text describes the cause ("anthropic: 429
|
|
4388
|
+
* rate_limit_error - credit balance too low"); neither says whether the turn
|
|
4389
|
+
* succeeded, so the category in front of it is the only thing that does. The
|
|
4390
|
+
* house bodies ("Task complete", "Stopped with an error") already name the
|
|
4391
|
+
* state, so prefixing them renders "Complete — Task complete": one fact
|
|
4392
|
+
* asserted twice in the two lines a banner gets, which is what every user
|
|
4393
|
+
* with the session-name privacy flag off would have received.
|
|
4394
|
+
*
|
|
4395
|
+
* Reading only `body_is_snippet` split the world in two where the backend
|
|
4396
|
+
* made it three, and it inverted the intent of the failure text (design
|
|
4397
|
+
* round 1, D4): a raw 429 envelope under a session name reads as routine log
|
|
4398
|
+
* noise, so the ONE banner that demands action was the one that never said
|
|
4399
|
+
* anything had gone wrong — and it was worse with the privacy flag ON (the
|
|
4400
|
+
* default, which is what produces the failure text) than off, where the user
|
|
4401
|
+
* at least got "Stopped with an error" (QA round 1, Q-1).
|
|
4402
|
+
*
|
|
4403
|
+
* These are the backend's own flags for exactly this difference, so this app
|
|
4404
|
+
* still re-words nothing (design 8.4). Gates pass `status = ""` and are
|
|
4405
|
+
* unaffected either way.
|
|
4406
|
+
*/
|
|
4407
|
+
show(sessionId2, title, status, body, isSnippet = false, isFailure = false) {
|
|
4408
|
+
const lead = (isSnippet || isFailure) && status ? `${status} — ` : "";
|
|
4027
4409
|
const notification = new electron.Notification({
|
|
4028
4410
|
title,
|
|
4029
|
-
body: body
|
|
4411
|
+
body: `${lead}${body}`.slice(0, MAX_BODY_CHARS),
|
|
4030
4412
|
silent: false
|
|
4031
4413
|
});
|
|
4032
4414
|
notification.on("click", () => {
|
|
@@ -5433,6 +5815,9 @@ electron.app.whenReady().then(async () => {
|
|
|
5433
5815
|
(input) => backendService.requestDesktop(input)
|
|
5434
5816
|
);
|
|
5435
5817
|
const desktopNotifier = new DesktopNotifier(() => mainWindow, sendDesktop);
|
|
5818
|
+
backendService.onBackendReady(() => {
|
|
5819
|
+
void desktopNotifier.refreshNotificationContract();
|
|
5820
|
+
});
|
|
5436
5821
|
backendService.observeStream((sessionId2, data) => {
|
|
5437
5822
|
try {
|
|
5438
5823
|
desktopNotifier.observe(sessionId2, JSON.parse(data));
|
|
@@ -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-DvVdHboz.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-BvFuUEpc.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-BHfHBA6R.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-BvFuUEpc.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-D6PQzszA.js → agent-details-page-6irHwYok.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as $,r as S,j as e,L as Z,T as B,B as c,S as L,b as R,d as F,e as q,f as x,X as G,g as j,c as U}from"./icon-
|
|
1
|
+
import{a as $,r as S,j as e,L as Z,T as B,B as c,S as L,b as R,d as F,e as q,f as x,X as G,g as j,c as U}from"./icon-2OdwuA9u.js";import{g as W,a0 as V,f as E,J as f,M as P,a1 as _,a2 as M,a3 as ee,a4 as te,a5 as se,a6 as ae,a7 as I,a8 as H,a9 as ne,h as Y,aa as ie,ab as re,u as oe,ac as le,ad as ce,ae as de,af as me,B as ue,ag as xe,ah as he,ai as ge,aj as je,ak as O,al as fe,am as ye,an as pe}from"./index-_UzVA1oU.js";import{S as be}from"./square-pen-2Yxvf_S9.js";import{u as we,a as ve,b as Ce,c as Ne}from"./use-agent-like-mutation-tstZNIUn.js";/**
|
|
2
2
|
* @license lucide-react v0.507.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as p,j as e,c as j,r as m,S as y}from"./icon-
|
|
1
|
+
import{a as p,j as e,c as j,r as m,S as y}from"./icon-2OdwuA9u.js";import{C as k}from"./compact-pagination-BJa5bxJe.js";import{P as v}from"./page-header-C-9zjakn.js";import{J as b,X as A,Y as h,Z as L,$ as N}from"./index-_UzVA1oU.js";import{u as C,a as P,b as w,c as M}from"./use-agent-like-mutation-tstZNIUn.js";/**
|
|
2
2
|
* @license lucide-react v0.507.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|