local-operator-ui 0.31.8 → 0.31.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/out/main/index.js +308 -49
  2. package/out/renderer/assets/{_basePickBy-CM6CmIFp.js → _basePickBy-9ROOwmxL.js} +1 -1
  3. package/out/renderer/assets/{_baseUniq-C_PbHIMV.js → _baseUniq-eE-r5ZZ4.js} +1 -1
  4. package/out/renderer/assets/{agent-details-page-DC0sQky0.js → agent-details-page-Vs9AZBwz.js} +1 -1
  5. package/out/renderer/assets/{agent-hub-page-CBrJcFHF.js → agent-hub-page-CGJbElaY.js} +1 -1
  6. package/out/renderer/assets/{agents-page-CTw-MYYr.js → agents-page-tftebSEL.js} +2 -2
  7. package/out/renderer/assets/{arc-DrUEk02e.js → arc-DN4pJSIq.js} +1 -1
  8. package/out/renderer/assets/{architectureDiagram-IEHRJDOE-CW6LvKX9.js → architectureDiagram-IEHRJDOE-uYP9fQLK.js} +1 -1
  9. package/out/renderer/assets/{blockDiagram-JOT3LUYC-4ogTNs12.js → blockDiagram-JOT3LUYC-CmsXiKwe.js} +1 -1
  10. package/out/renderer/assets/{browser-page-iMdnjKCm.js → browser-page-Bu7bkVij.js} +1 -1
  11. package/out/renderer/assets/{browser-webauthn-prompt-C5PLWNNM.js → browser-webauthn-prompt-CCZq7UZY.js} +1 -1
  12. package/out/renderer/assets/{c4Diagram-VJAJSXHY-C9J6_WCU.js → c4Diagram-VJAJSXHY-DSjqK2s4.js} +1 -1
  13. package/out/renderer/assets/channel-bHKgHeS_.js +1 -0
  14. package/out/renderer/assets/{chunk-4BMEZGHF-S_BSO-Hr.js → chunk-4BMEZGHF-C1_SAsaq.js} +1 -1
  15. package/out/renderer/assets/{chunk-A2AXSNBT-CVy8PtwG.js → chunk-A2AXSNBT-Cq0zFbJT.js} +1 -1
  16. package/out/renderer/assets/{chunk-AEK57VVT-B38TMTuJ.js → chunk-AEK57VVT-BcKdPjvg.js} +1 -1
  17. package/out/renderer/assets/{chunk-D6G4REZN-8nX93svh.js → chunk-D6G4REZN-DRByxdTc.js} +1 -1
  18. package/out/renderer/assets/{chunk-RZ5BOZE2-BgbNMOZE.js → chunk-RZ5BOZE2-Duscm0Bg.js} +1 -1
  19. package/out/renderer/assets/{chunk-XZIHB7SX-BNpmrMrQ.js → chunk-XZIHB7SX-BWEXg8AD.js} +1 -1
  20. package/out/renderer/assets/{classDiagram-GIVACNV2-C4j3K9wg.js → classDiagram-GIVACNV2-CU02kTw_.js} +1 -1
  21. package/out/renderer/assets/{classDiagram-v2-COTLJTTW-C4j3K9wg.js → classDiagram-v2-COTLJTTW-CU02kTw_.js} +1 -1
  22. package/out/renderer/assets/clone-ARdM9vXs.js +1 -0
  23. package/out/renderer/assets/{dagre-OKDRZEBW-BCX_miAW.js → dagre-OKDRZEBW-Cn7pFiK5.js} +1 -1
  24. package/out/renderer/assets/{diagram-SSKATNLV-CAzJv9lq.js → diagram-SSKATNLV-LyA2eojc.js} +1 -1
  25. package/out/renderer/assets/{diagram-VNBRO52H-DBFKrI1R.js → diagram-VNBRO52H-LPidUHcc.js} +1 -1
  26. package/out/renderer/assets/{erDiagram-Q7BY3M3F-BMv_jdkl.js → erDiagram-Q7BY3M3F-CTjCMg7T.js} +1 -1
  27. package/out/renderer/assets/{flowDiagram-4HSFHLVR-CVkQHh1o.js → flowDiagram-4HSFHLVR-BmWZ8kNr.js} +1 -1
  28. package/out/renderer/assets/{ganttDiagram-APWFNJXF-Ct36PMFY.js → ganttDiagram-APWFNJXF-CfDRHTNJ.js} +1 -1
  29. package/out/renderer/assets/{gitGraphDiagram-7IBYFJ6S-CFytZqHN.js → gitGraphDiagram-7IBYFJ6S-CEYh6RxP.js} +1 -1
  30. package/out/renderer/assets/{graph-CTLrBVeK.js → graph-_dzRI-I_.js} +1 -1
  31. package/out/renderer/assets/{index-DWyjbOQ1.js → index-BKqWQaFB.js} +1 -1
  32. package/out/renderer/assets/{index-DuQnzBvj.js → index-DPFT_2au.js} +1 -1
  33. package/out/renderer/assets/{index-C7KtPkib.js → index-tykR0DI9.js} +374 -374
  34. package/out/renderer/assets/{infoDiagram-PH2N3AL5-B2VN0HcS.js → infoDiagram-PH2N3AL5-BRBj70Iz.js} +1 -1
  35. package/out/renderer/assets/{journeyDiagram-U35MCT3I-EeQ9FZU_.js → journeyDiagram-U35MCT3I-kHoqijou.js} +1 -1
  36. package/out/renderer/assets/{kanban-definition-NDS4AKOZ-CWx17q1q.js → kanban-definition-NDS4AKOZ-DEpxCCmE.js} +1 -1
  37. package/out/renderer/assets/{layout-DxijCKSW.js → layout-C8CaQmGy.js} +1 -1
  38. package/out/renderer/assets/{legacy-agents-page-DKwZ9IUL.js → legacy-agents-page-TbzorhDj.js} +1 -1
  39. package/out/renderer/assets/{mermaid.core-BROGXuWS.js → mermaid.core-xrJy-S5f.js} +5 -5
  40. package/out/renderer/assets/{mesh-page-ljmpYH3c.js → mesh-page-Do2sLCUJ.js} +1 -1
  41. package/out/renderer/assets/{mindmap-definition-ALO5MXBD-MJVwWrDq.js → mindmap-definition-ALO5MXBD-BUYs8m2Y.js} +1 -1
  42. package/out/renderer/assets/{org-surface-gate-BeVNIdZG.js → org-surface-gate-9zY-gRI7.js} +1 -1
  43. package/out/renderer/assets/{pieDiagram-IB7DONF6-Bdk5nKMy.js → pieDiagram-IB7DONF6-DLyxJ6_z.js} +1 -1
  44. package/out/renderer/assets/{projects-page-qaSb7T1c.js → projects-page-pUwqeYdO.js} +1 -1
  45. package/out/renderer/assets/{quadrantDiagram-7GDLP6J5-CuC3CzS2.js → quadrantDiagram-7GDLP6J5-DH7de3iA.js} +1 -1
  46. package/out/renderer/assets/{radar-MK3ICKWK-D5QncMMi.js → radar-MK3ICKWK-07d8mdrE.js} +1 -1
  47. package/out/renderer/assets/{radient-auth-buttons-CD8VvexI.js → radient-auth-buttons-8U1osKLe.js} +1 -1
  48. package/out/renderer/assets/{requirementDiagram-KVF5MWMF-CIBLY5OK.js → requirementDiagram-KVF5MWMF-B32qFUIl.js} +1 -1
  49. package/out/renderer/assets/{sankeyDiagram-QLVOVGJD-CfkXerpy.js → sankeyDiagram-QLVOVGJD-sbqxByYH.js} +1 -1
  50. package/out/renderer/assets/{schedules-page-DHSDg1Cx.js → schedules-page-XTDmccje.js} +1 -1
  51. package/out/renderer/assets/{sequenceDiagram-X6HHIX6F-C7qAHp50.js → sequenceDiagram-X6HHIX6F-B73M11ec.js} +1 -1
  52. package/out/renderer/assets/{settings-page-B0Q3AzNJ.js → settings-page-CK0UZY_b.js} +66 -66
  53. package/out/renderer/assets/{stateDiagram-DGXRK772-DGrpcP97.js → stateDiagram-DGXRK772-B4WvgL0d.js} +1 -1
  54. package/out/renderer/assets/{stateDiagram-v2-YXO3MK2T-BtHrKykB.js → stateDiagram-v2-YXO3MK2T-DNtZ1inO.js} +1 -1
  55. package/out/renderer/assets/{timeline-definition-BDJGKUSR-DAxKBrN7.js → timeline-definition-BDJGKUSR-C4QiFAyx.js} +1 -1
  56. package/out/renderer/assets/{use-download-agent-mutation-BWvEVFd-.js → use-download-agent-mutation-uGo2AQXO.js} +1 -1
  57. package/out/renderer/assets/{use-memberships-query-D1ABZPRc.js → use-memberships-query-CjIPH1YX.js} +1 -1
  58. package/out/renderer/assets/{xychartDiagram-VJFVF3MP-c8KzKHoZ.js → xychartDiagram-VJFVF3MP-wcBKtlf2.js} +1 -1
  59. package/out/renderer/index.html +1 -1
  60. package/package.json +2 -2
  61. package/out/renderer/assets/channel-C3fiRwpT.js +0 -1
  62. package/out/renderer/assets/clone-D0rpLafB.js +0 -1
package/out/main/index.js CHANGED
@@ -4360,6 +4360,19 @@ install_live() {
4360
4360
  # AppleScript, so no word of it needs escaping.
4361
4361
  notify() {
4362
4362
  [ -n "$1" ] || return 0
4363
+ # THE NOTIFICATION KILL SWITCH (LOCAL_OPERATOR_NO_NOTIFICATIONS). A test,
4364
+ # harness or evidence run that launched this app must not reach the operator's
4365
+ # real Notification Center, and this script is the one notice path nobody can
4366
+ # silence from inside the app: the app is dead while the watchdog runs. The
4367
+ # switch the LAUNCH carried therefore has to reach this environment too -
4368
+ # startRelaunchWatchdog passes it through the plan rather than relying on
4369
+ # inheritance - and PRESENCE is the rule, as the repo's two named spellings
4370
+ # resolve it: notification-launch.ts turns a present-but-empty launch key
4371
+ # into the silencing value, and notifications-off.mjs sets this key by name.
4372
+ # Any SET value silences - empty included, because an env block with an empty
4373
+ # default spells "a run", not "the user's own app" - and only an ABSENT key
4374
+ # arms. The "NAME+x" set-test (no colon) stays legal under set -u.
4375
+ [ -n "\${LOCAL_OPERATOR_NO_NOTIFICATIONS+x}" ] && return 0
4363
4376
  osascript -e 'on run argv' -e 'display notification (item 1 of argv) with title (item 2 of argv)' -e 'end run' "$1" "Local Operator" >/dev/null 2>&1 &
4364
4377
  }
4365
4378
  # launchctl list <label> exits 0 when the job is loaded and 113 when launchd has
@@ -4651,6 +4664,12 @@ exit 0
4651
4664
  return {
4652
4665
  script,
4653
4666
  env: {
4667
+ // Presence, not truthiness (review minor, remediation round 2): the
4668
+ // caller resolves a present-but-empty launch key to the silencing value
4669
+ // the way `resolveNotificationLaunch` does, and an absent one writes
4670
+ // nothing - so whatever arrives here is written verbatim, and the
4671
+ // script's own guard silences on any set value.
4672
+ ...input.noNotifications != null ? { LOCAL_OPERATOR_NO_NOTIFICATIONS: input.noNotifications } : {},
4654
4673
  LO_UPDATE_WATCHDOG_APP_PID: String(input.appPid),
4655
4674
  LO_UPDATE_WATCHDOG_APP_BUNDLE: input.appBundlePath,
4656
4675
  LO_UPDATE_WATCHDOG_APP_NAME: input.executableName,
@@ -25281,6 +25300,10 @@ const SEAL_PROBE_TIMEOUT_MS = 45e3;
25281
25300
  const STAGED_SIGNATURE_PROBE_TIMEOUT_MS = 2e4;
25282
25301
  const STARTUP_SEAL_PROBE_DELAY_MS = 15e3;
25283
25302
  const POST_WAKE_CHECK_DELAY_MS = 2e4;
25303
+ const DEFAULT_APP_FEED_DEADLINE_MS = 3e4;
25304
+ const DEFAULT_DOWNLOAD_STALL_TIMEOUT_MS = 9e4;
25305
+ const PYPI_VERSION_READ_TIMEOUT_MS = 1e4;
25306
+ const NPM_VERSION_READ_TIMEOUT_MS = 1e4;
25284
25307
  function versionSuffix(version) {
25285
25308
  return version ? ` to version ${version}` : "";
25286
25309
  }
@@ -25289,6 +25312,13 @@ function offlineTransportError() {
25289
25312
  "net::ERR_INTERNET_DISCONNECTED - the machine reported no network, so no request was made"
25290
25313
  );
25291
25314
  }
25315
+ function feedDeadlineError(deadlineMs) {
25316
+ return new Error(
25317
+ `net::ERR_TIMED_OUT - the update feed did not answer within ${Math.round(
25318
+ deadlineMs / 1e3
25319
+ )}s, so the attempt was abandoned`
25320
+ );
25321
+ }
25292
25322
  function runCommand(command, args, options = {}) {
25293
25323
  return new Promise((resolve) => {
25294
25324
  node_child_process.execFile(
@@ -25578,6 +25608,21 @@ function startRelaunchWatchdog(input) {
25578
25608
  target: input.targetVersion,
25579
25609
  running: input.runningVersion
25580
25610
  }),
25611
+ /*
25612
+ * The notification kill switch travels with the plan (operator report,
25613
+ * remediation round 1): the script's own `notify` is the one notice path
25614
+ * the app cannot silence from inside, so a launch that carried the switch
25615
+ * must place it in the script's environment explicitly rather than lean on
25616
+ * the spawn's `process.env` spread. Read from `launchEnv`, not `process.env`:
25617
+ * the app's own guard (`notificationsSilenced`) reads the LAUNCH's value for
25618
+ * the same reason - a fact about the launch must come from the launch.
25619
+ * RESOLVED, NOT PASSED THROUGH (review minor, remediation round 2): a
25620
+ * present-but-empty launch key becomes the silencing value exactly as
25621
+ * `resolveNotificationLaunch` resolves it for the backend child, so the
25622
+ * empty spelling cannot fall through to the script's osascript while the
25623
+ * repo's named rules call the same launch silenced.
25624
+ */
25625
+ noNotifications: resolveNotificationLaunch(launchEnv)[NOTIFICATIONS_ENV] ?? null,
25581
25626
  // Stated rather than read off `process.platform` at the plan: this
25582
25627
  // watchdog exists for Squirrel.Mac's ShipIt, the guard above already
25583
25628
  // refuses it anywhere else, and the script's two probes (launchd's job
@@ -25634,7 +25679,7 @@ const LAUNCH_HOLD_NOTICE_BUDGET_MS = LAUNCH_HOLD_NOTICE_DEADLINE_MS + LAUNCH_HOL
25634
25679
  250;
25635
25680
  function notificationsSilenced() {
25636
25681
  const value = launchEnv[NOTIFICATIONS_ENV];
25637
- return typeof value === "string" && value.length > 0;
25682
+ return typeof value === "string";
25638
25683
  }
25639
25684
  function bannerReportedShown(notice, deadlineMs) {
25640
25685
  if (!electron.Notification.isSupported()) return Promise.resolve(false);
@@ -25766,6 +25811,25 @@ class UpdateService {
25766
25811
  * available", which is how `shouldFilterUpdateError` would otherwise read it.
25767
25812
  */
25768
25813
  updateStage = "idle";
25814
+ /**
25815
+ * How long an update download may make no progress before it is cancelled, in ms.
25816
+ *
25817
+ * The shipped value is `DEFAULT_DOWNLOAD_STALL_TIMEOUT_MS`; a test overrides
25818
+ * it to milliseconds, the same treatment as `appFeedRetryDelaysMs`.
25819
+ */
25820
+ downloadStallTimeoutMs = DEFAULT_DOWNLOAD_STALL_TIMEOUT_MS;
25821
+ /**
25822
+ * The watchdog armed while a download is in flight, and the token it cancels.
25823
+ *
25824
+ * Armed on the download, reset on every `download-progress` event (the
25825
+ * download's own liveness signal), and on expiry it cancels the token, which
25826
+ * rejects `downloadUpdate` with the updater's `CancellationError` - its
25827
+ * message matches no filter, deliberately, because a download the user asked
25828
+ * for must report its failure rather than be answered "no updates
25829
+ * available".
25830
+ */
25831
+ downloadStallWatchdog = null;
25832
+ downloadCancellationToken = null;
25769
25833
  /**
25770
25834
  * The install that just landed, for the one-line affirmation the next launch
25771
25835
  * owes the user (UX U4). Null once it has been reported.
@@ -25785,6 +25849,23 @@ class UpdateService {
25785
25849
  * scheduled check and a click can overlap.
25786
25850
  */
25787
25851
  appChecksInFlight = 0;
25852
+ /**
25853
+ * Feed fetches a deadline has abandoned that have NOT settled yet.
25854
+ *
25855
+ * WHY THE OWNERSHIP RULE NEEDS ITS OWN SET. A fetch whose attempt expired is
25856
+ * still running inside the updater, and when it eventually fails the updater
25857
+ * emits `error` for it - measured at 2m29.6s after the check that started it
25858
+ * had to give up, in the operator's own log. That event belongs to a check
25859
+ * that has already answered its caller, so it must not be reported as fresh
25860
+ * news: while one of these is pending, an availability-stage `error` is
25861
+ * attributed to it and logged rather than sent, exactly as with a check in
25862
+ * flight. Membership ends when the fetch settles - its result is never read
25863
+ * as an answer, but its settle is the end of the window in which its events
25864
+ * are expected. Keyed by the promise itself: electron-updater answers a
25865
+ * re-entrant check with the still-pending promise, so the same fetch can be
25866
+ * abandoned by more than one sequence and that is the same window.
25867
+ */
25868
+ appFeedAbandonedFetches = /* @__PURE__ */ new Set();
25788
25869
  /**
25789
25870
  * The attempt sequence in flight in the app channel, so a second check rides
25790
25871
  * it instead of doubling it.
@@ -25800,6 +25881,21 @@ class UpdateService {
25800
25881
  * by the check that started it.
25801
25882
  */
25802
25883
  appFeedFetchInFlight = null;
25884
+ /**
25885
+ * The epoch of the sequence `appFeedFetchInFlight` holds, if any.
25886
+ *
25887
+ * WHY A NUMBER RIDES BESIDE THE PROMISE. A fetch attempt that expires frees
25888
+ * the latch (`awaitAppFeedFetch`), so a check arriving afterwards starts its
25889
+ * own attempt sequence instead of attending one that has already spent a
25890
+ * deadline. That opens the one window the unconditional clear could not
25891
+ * produce: the abandoned sequence is still running when a successor has
25892
+ * taken the latch, and the abandoned sequence's settle must not unpin the
25893
+ * successor. Every clear site therefore checks that the epoch it is clearing
25894
+ * is still the current one. (Before the deadline existed, a stalled sequence
25895
+ * never settled at all, so its clear never ran and the hazard could not
25896
+ * arise.)
25897
+ */
25898
+ appFeedFetchEpoch = 0;
25803
25899
  /**
25804
25900
  * The wake-armed check, held so a second wake cannot arm a second one.
25805
25901
  */
@@ -25813,6 +25909,15 @@ class UpdateService {
25813
25909
  * case; nothing else does.
25814
25910
  */
25815
25911
  appFeedRetryDelaysMs = [1e3, 3e3];
25912
+ /**
25913
+ * How long ONE fetch attempt may run before it is abandoned, in ms.
25914
+ *
25915
+ * The shipped value is `DEFAULT_APP_FEED_DEADLINE_MS`; a test overrides it to
25916
+ * milliseconds rather than waiting half a minute per case, and the default is
25917
+ * asserted as a value in the suite so the bound cannot go missing behind the
25918
+ * narrowings.
25919
+ */
25920
+ appFeedDeadlineMs = DEFAULT_APP_FEED_DEADLINE_MS;
25816
25921
  /** The last update the updater told us about, for its file metadata. */
25817
25922
  lastUpdateInfo = null;
25818
25923
  /**
@@ -27499,6 +27604,7 @@ ${heal.removed.join("\n")}`,
27499
27604
  this.updateCheckInterval = null;
27500
27605
  }
27501
27606
  this.stopInstallInFlightRecheck();
27607
+ this.clearDownloadStallWatchdog();
27502
27608
  electronUpdater.autoUpdater.removeAllListeners();
27503
27609
  electron.ipcMain.removeHandler("check-for-updates");
27504
27610
  electron.ipcMain.removeHandler("check-for-backend-updates");
@@ -27538,12 +27644,14 @@ ${heal.removed.join("\n")}`,
27538
27644
  */
27539
27645
  async runAppFeedCheck(fetchFeed) {
27540
27646
  if (this.appFeedFetchInFlight) return this.appFeedFetchInFlight;
27541
- const sequence = this.runAppFeedAttempts(fetchFeed);
27647
+ const epoch = this.appFeedFetchEpoch + 1;
27648
+ this.appFeedFetchEpoch = epoch;
27649
+ const sequence = this.runAppFeedAttempts(fetchFeed, epoch);
27542
27650
  this.appFeedFetchInFlight = sequence;
27543
27651
  try {
27544
27652
  return await sequence;
27545
27653
  } finally {
27546
- this.appFeedFetchInFlight = null;
27654
+ if (this.appFeedFetchEpoch === epoch) this.appFeedFetchInFlight = null;
27547
27655
  }
27548
27656
  }
27549
27657
  /**
@@ -27560,8 +27668,12 @@ ${heal.removed.join("\n")}`,
27560
27668
  }
27561
27669
  /**
27562
27670
  * The attempt sequence itself: the retries, and the depth that owns them.
27671
+ *
27672
+ * `epoch` is the sequence's own latch epoch, passed down so the deadline's
27673
+ * latch-freeing is guarded the same way the caller's clear is (see
27674
+ * `appFeedFetchEpoch`).
27563
27675
  */
27564
- async runAppFeedAttempts(fetchFeed) {
27676
+ async runAppFeedAttempts(fetchFeed, epoch) {
27565
27677
  this.appChecksInFlight += 1;
27566
27678
  try {
27567
27679
  const delays = this.appFeedRetryDelaysMs;
@@ -27578,7 +27690,7 @@ ${heal.removed.join("\n")}`,
27578
27690
  );
27579
27691
  continue;
27580
27692
  }
27581
- return await fetchFeed();
27693
+ return await this.awaitAppFeedFetch(fetchFeed(), epoch);
27582
27694
  } catch (error) {
27583
27695
  const code = transientTransportCode(error);
27584
27696
  if (code === null || attempt >= delays.length) throw error;
@@ -27594,6 +27706,112 @@ ${heal.removed.join("\n")}`,
27594
27706
  this.appChecksInFlight -= 1;
27595
27707
  }
27596
27708
  }
27709
+ /**
27710
+ * One feed fetch, bounded by this service's own deadline.
27711
+ *
27712
+ * WHY A DEADLINE HERE RATHER THAN IN electron-updater: `checkForUpdates`'s
27713
+ * fetch goes through Electron's `net` module, which has no read deadline at
27714
+ * all, and the updater exposes no cancel for it - so a stalled-but-
27715
+ * established connection never settles and nothing downstream ever hears
27716
+ * back. The race below is the only bound available: the attempt rejects with
27717
+ * a transient-classified failure (`feedDeadlineError`), the ladder retries it
27718
+ * like any other transient, and what the check then reports is its ordinary
27719
+ * failure path - `null` for an app-initiated check, a rejection for one the
27720
+ * user pressed.
27721
+ *
27722
+ * THE ABANDONED FETCH IS REMEMBERED, not dropped: it is still running inside
27723
+ * the updater, it may settle minutes later, and its settle emits the same
27724
+ * `error` event any failed check emits - so it is counted for the duration
27725
+ * (`appFeedAbandonedFetches`), and its result is never read as this attempt's
27726
+ * answer (the race has already settled by then, and a settled promise cannot
27727
+ * resolve twice).
27728
+ */
27729
+ awaitAppFeedFetch(fetch2, epoch) {
27730
+ return new Promise((resolve, reject) => {
27731
+ const deadline2 = setTimeout(() => {
27732
+ if (this.appFeedFetchEpoch === epoch) {
27733
+ this.appFeedFetchInFlight = null;
27734
+ }
27735
+ this.rememberAbandonedAppFeedFetch(fetch2);
27736
+ reject(feedDeadlineError(this.appFeedDeadlineMs));
27737
+ }, this.appFeedDeadlineMs);
27738
+ fetch2.then(
27739
+ (value) => {
27740
+ clearTimeout(deadline2);
27741
+ resolve(value);
27742
+ },
27743
+ (error) => {
27744
+ clearTimeout(deadline2);
27745
+ reject(error);
27746
+ }
27747
+ );
27748
+ });
27749
+ }
27750
+ /**
27751
+ * Count an abandoned fetch until it settles, so its late events are
27752
+ * attributed to it rather than reported as fresh news (see the set's own
27753
+ * docstring).
27754
+ *
27755
+ * Both handlers are the same function because either outcome ends the window:
27756
+ * the point is only that the fetch is still pending inside the updater,
27757
+ * whichever way it ends.
27758
+ */
27759
+ rememberAbandonedAppFeedFetch(fetch2) {
27760
+ if (this.appFeedAbandonedFetches.has(fetch2)) return;
27761
+ this.appFeedAbandonedFetches.add(fetch2);
27762
+ const settled = () => {
27763
+ this.appFeedAbandonedFetches.delete(fetch2);
27764
+ };
27765
+ fetch2.then(settled, settled);
27766
+ }
27767
+ /**
27768
+ * Arm the download's stall watchdog for a fresh attempt.
27769
+ *
27770
+ * Replaces any timer left by a previous one rather than assuming none: there
27771
+ * can be only one download at a time (the IPC handler's stage and the
27772
+ * updater's own `downloadPromise` both enforce it), but the token-and-timer
27773
+ * pair is per attempt and must not leak into the next.
27774
+ */
27775
+ armDownloadStallWatchdog(cancellationToken) {
27776
+ this.downloadCancellationToken = cancellationToken;
27777
+ this.resetDownloadStallWatchdog();
27778
+ }
27779
+ /**
27780
+ * Restart the stall clock: arming time, and every `download-progress` event.
27781
+ *
27782
+ * The reset is what makes the watchdog measure a GAP rather than a duration -
27783
+ * `download-progress` is the download's own liveness signal, so a download
27784
+ * that streams for an hour in chunks never fires it, while one that stops
27785
+ * after the first chunk fires it once.
27786
+ */
27787
+ resetDownloadStallWatchdog() {
27788
+ if (this.downloadStallWatchdog) {
27789
+ clearTimeout(this.downloadStallWatchdog);
27790
+ this.downloadStallWatchdog = null;
27791
+ }
27792
+ const token = this.downloadCancellationToken;
27793
+ if (!token) return;
27794
+ this.downloadStallWatchdog = setTimeout(() => {
27795
+ this.downloadStallWatchdog = null;
27796
+ logger.warn(
27797
+ `The update download made no progress for ${this.downloadStallTimeoutMs}ms; cancelling it through the updater's own cancellation token.`,
27798
+ LogFileType.UPDATE_SERVICE
27799
+ );
27800
+ token.cancel();
27801
+ }, this.downloadStallTimeoutMs);
27802
+ }
27803
+ /**
27804
+ * Drop the watchdog AND the token; the download handler's `finally`, and
27805
+ * `dispose()`, so a timer can never outlive the attempt it was armed for or
27806
+ * fire into a later one.
27807
+ */
27808
+ clearDownloadStallWatchdog() {
27809
+ if (this.downloadStallWatchdog) {
27810
+ clearTimeout(this.downloadStallWatchdog);
27811
+ this.downloadStallWatchdog = null;
27812
+ }
27813
+ this.downloadCancellationToken = null;
27814
+ }
27597
27815
  setupUpdateEvents() {
27598
27816
  electronUpdater.autoUpdater.on("update-available", (info) => {
27599
27817
  logger.info("Update available:", LogFileType.UPDATE_SERVICE, info);
@@ -27625,13 +27843,14 @@ ${heal.removed.join("\n")}`,
27625
27843
  electronUpdater.autoUpdater.on("error", (err) => {
27626
27844
  logger.error("Update error:", LogFileType.UPDATE_SERVICE, err);
27627
27845
  const actionable = this.updateStage !== "idle";
27628
- if (!actionable && this.appChecksInFlight > 0) {
27846
+ if (!actionable && (this.appChecksInFlight > 0 || this.appFeedAbandonedFetches.size > 0)) {
27629
27847
  logger.info(
27630
27848
  // The rule, at the point it is implemented: a check in flight owns
27631
27849
  // its own failure report, and an app-initiated check's owner is a
27632
27850
  // silent one - so this is the log line that replaces the alert the
27633
- // operator saw, not a swallowed error.
27634
- "Update error during an availability check: the check reports its own failure",
27851
+ // operator saw, not a swallowed error. The same holds for a fetch
27852
+ // one of those checks has already given up on.
27853
+ "Update error during an availability check (or from a fetch one abandoned): the owning check reports its own failure",
27635
27854
  LogFileType.UPDATE_SERVICE
27636
27855
  );
27637
27856
  return;
@@ -27654,6 +27873,7 @@ ${heal.removed.join("\n")}`,
27654
27873
  LogFileType.UPDATE_SERVICE,
27655
27874
  progressObj
27656
27875
  );
27876
+ this.resetDownloadStallWatchdog();
27657
27877
  if (this.mainWindow && !this.mainWindow.isDestroyed() && this.mainWindow.webContents && !this.mainWindow.webContents.isDestroyed()) {
27658
27878
  this.mainWindow.webContents.send("update-progress", progressObj);
27659
27879
  }
@@ -27846,8 +28066,10 @@ ${heal.removed.join("\n")}`,
27846
28066
  electron.ipcMain.handle("download-update", async () => {
27847
28067
  logger.info("Downloading update...", LogFileType.UPDATE_SERVICE);
27848
28068
  this.updateStage = "downloading";
28069
+ const cancellationToken = new electronUpdater.CancellationToken();
28070
+ this.armDownloadStallWatchdog(cancellationToken);
27849
28071
  try {
27850
- const downloadedPaths = await electronUpdater.autoUpdater.downloadUpdate();
28072
+ const downloadedPaths = await electronUpdater.autoUpdater.downloadUpdate(cancellationToken);
27851
28073
  if (Array.isArray(downloadedPaths) && downloadedPaths.length > 0) {
27852
28074
  this.downloadedArtifactPath = downloadedPaths[0];
27853
28075
  }
@@ -27875,6 +28097,7 @@ ${heal.removed.join("\n")}`,
27875
28097
  }
27876
28098
  throw error;
27877
28099
  } finally {
28100
+ this.clearDownloadStallWatchdog();
27878
28101
  this.updateStage = "idle";
27879
28102
  }
27880
28103
  });
@@ -28113,26 +28336,44 @@ ${heal.removed.join("\n")}`,
28113
28336
  return new Promise((resolve) => {
28114
28337
  const packageName = "local-operator-ui";
28115
28338
  const url = `https://registry.npmjs.org/${packageName}`;
28116
- https__namespace.get(url, (res) => {
28117
- let data = "";
28118
- res.on("data", (chunk) => {
28119
- data += chunk;
28120
- });
28121
- res.on("end", () => {
28122
- try {
28123
- const packageInfo = JSON.parse(data);
28124
- const latestVersion = packageInfo["dist-tags"]?.latest;
28125
- resolve(latestVersion || null);
28126
- } catch (error) {
28127
- logger.error(
28128
- "Error parsing npm registry response:",
28129
- LogFileType.UPDATE_SERVICE,
28130
- error
28131
- );
28132
- resolve(null);
28133
- }
28134
- });
28135
- }).on("error", (error) => {
28339
+ const request = https__namespace.get(
28340
+ url,
28341
+ /*
28342
+ * The same socket timeout its PyPI sibling carries (agent review
28343
+ * minor-1, remediation round 1): without it a stalled registry
28344
+ * connection holds a non-silent npx check open, which is the bug
28345
+ * class this PR bounds for the feed.
28346
+ */
28347
+ { timeout: NPM_VERSION_READ_TIMEOUT_MS },
28348
+ (res) => {
28349
+ let data = "";
28350
+ res.on("data", (chunk) => {
28351
+ data += chunk;
28352
+ });
28353
+ res.on("end", () => {
28354
+ try {
28355
+ const packageInfo = JSON.parse(data);
28356
+ const latestVersion = packageInfo["dist-tags"]?.latest;
28357
+ resolve(latestVersion || null);
28358
+ } catch (error) {
28359
+ logger.error(
28360
+ "Error parsing npm registry response:",
28361
+ LogFileType.UPDATE_SERVICE,
28362
+ error
28363
+ );
28364
+ resolve(null);
28365
+ }
28366
+ });
28367
+ }
28368
+ );
28369
+ request.on("timeout", () => {
28370
+ request.destroy(
28371
+ new Error(
28372
+ `The npm version read did not answer within ${NPM_VERSION_READ_TIMEOUT_MS}ms`
28373
+ )
28374
+ );
28375
+ });
28376
+ request.on("error", (error) => {
28136
28377
  logger.error(
28137
28378
  "Error fetching from npm registry:",
28138
28379
  LogFileType.UPDATE_SERVICE,
@@ -28330,26 +28571,44 @@ ${heal.removed.join("\n")}`,
28330
28571
  getLatestPypiVersion() {
28331
28572
  return new Promise((resolve) => {
28332
28573
  const url = "https://pypi.org/pypi/local-operator/json";
28333
- https__namespace.get(url, (res) => {
28334
- let data = "";
28335
- res.on("data", (chunk) => {
28336
- data += chunk;
28337
- });
28338
- res.on("end", () => {
28339
- try {
28340
- const packageInfo = JSON.parse(data);
28341
- const latestVersion = packageInfo.info?.version;
28342
- resolve(latestVersion || null);
28343
- } catch (error) {
28344
- logger.error(
28345
- "Error parsing PyPI response:",
28346
- LogFileType.UPDATE_SERVICE,
28347
- error
28348
- );
28349
- resolve(null);
28350
- }
28351
- });
28352
- }).on("error", (error) => {
28574
+ const request = https__namespace.get(
28575
+ url,
28576
+ /*
28577
+ * A socket timeout, so this read cannot hold `checkForAllUpdates`'s
28578
+ * sequential window open: the app channel already answers before the
28579
+ * server channel's first byte is asked for, and a stalled read here
28580
+ * was the one leg of the pair with no bound of any kind.
28581
+ */
28582
+ { timeout: PYPI_VERSION_READ_TIMEOUT_MS },
28583
+ (res) => {
28584
+ let data = "";
28585
+ res.on("data", (chunk) => {
28586
+ data += chunk;
28587
+ });
28588
+ res.on("end", () => {
28589
+ try {
28590
+ const packageInfo = JSON.parse(data);
28591
+ const latestVersion = packageInfo.info?.version;
28592
+ resolve(latestVersion || null);
28593
+ } catch (error) {
28594
+ logger.error(
28595
+ "Error parsing PyPI response:",
28596
+ LogFileType.UPDATE_SERVICE,
28597
+ error
28598
+ );
28599
+ resolve(null);
28600
+ }
28601
+ });
28602
+ }
28603
+ );
28604
+ request.on("timeout", () => {
28605
+ request.destroy(
28606
+ new Error(
28607
+ `The PyPI version read did not answer within ${PYPI_VERSION_READ_TIMEOUT_MS}ms`
28608
+ )
28609
+ );
28610
+ });
28611
+ request.on("error", (error) => {
28353
28612
  logger.error(
28354
28613
  "Error fetching from PyPI:",
28355
28614
  LogFileType.UPDATE_SERVICE,
@@ -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-C_PbHIMV.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-BROGXuWS.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
+ 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-eE-r5ZZ4.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-xrJy-S5f.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-BROGXuWS.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&Re;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-xrJy-S5f.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&Re;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,4 +1,4 @@
1
- import{r as E,j as e,c as Z}from"./index-C-P4UaBn.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-D1ABZPRc.js";import{h as ne,g as I,aJ as b,aK as K,av as Y,aL as O,aM as we,aN as be,aO as ie,i as re,a as Ce,aw as Ne,aP as Ae,B as ke,aQ as Se,aR as De,aS as G,au as Te,aT as Ee,aU as Fe}from"./index-C7KtPkib.js";import{c as Pe,L as _e,T as ee,B as l,S as z,b as oe,d as L,e as M,a as v,X as qe,f as w,A as te,g as se,h as ae}from"./error-boundary-Be38BRVp.js";import{f as W,u as Le,i as Me,a as ze,b as Ie,c as Ke,O as Oe,H as Qe,A as Ue}from"./use-download-agent-mutation-BWvEVFd-.js";import"./console-mirror-DjoNpI7u.js";import"./en-US-BkS8Ixxl.js";import"./book-open-CNgko0U5.js";/**
1
+ import{r as E,j as e,c as Z}from"./index-C-P4UaBn.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-CjIPH1YX.js";import{h as ne,g as I,aJ as b,aK as K,av as Y,aL as O,aM as we,aN as be,aO as ie,i as re,a as Ce,aw as Ne,aP as Ae,B as ke,aQ as Se,aR as De,aS as G,au as Te,aT as Ee,aU as Fe}from"./index-tykR0DI9.js";import{c as Pe,L as _e,T as ee,B as l,S as z,b as oe,d as L,e as M,a as v,X as qe,f as w,A as te,g as se,h as ae}from"./error-boundary-Be38BRVp.js";import{f as W,u as Le,i as Me,a as ze,b as Ie,c as Ke,O as Oe,H as Qe,A as Ue}from"./use-download-agent-mutation-uGo2AQXO.js";import"./console-mirror-DjoNpI7u.js";import"./en-US-BkS8Ixxl.js";import"./book-open-CNgko0U5.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{r as i,j as e,c as F}from"./index-C-P4UaBn.js";import{i as pe,aJ as ie,aQ as Ee,aR as he,aV as Le,r as Ie,h as Fe,aE as Me,g as $e,aK as De,aW as Ue,aL as Ye,aX as ge,aY as Ve,ax as qe,aw as be,c as Qe,an as Be,aZ as He}from"./index-C7KtPkib.js";import{o as je,u as We,a as Ge,C as Ze,b as Je}from"./org-surface-gate-BeVNIdZG.js";import{P as Ke}from"./page-header-BXIWLsA1.js";import{c as Xe,f as q,B as N,a as m,A as H,g as W,h as G,k as se,l as te,m as ne,n as re,o as Q,I as ea}from"./error-boundary-Be38BRVp.js";import{R as aa,u as sa}from"./radient-auth-buttons-CD8VvexI.js";import{e as ta,f as na,p as ra,P as ia,b as la,h as oa}from"./use-memberships-query-D1ABZPRc.js";import{O as ca,A as da,f as ua,H as ma,a as ha,b as ga,c as xa,d as ve,C as fa,u as pa,i as ba}from"./use-download-agent-mutation-BWvEVFd-.js";import"./console-mirror-DjoNpI7u.js";import"./en-US-BkS8Ixxl.js";import"./book-open-CNgko0U5.js";/**
1
+ import{r as i,j as e,c as F}from"./index-C-P4UaBn.js";import{i as pe,aJ as ie,aQ as Ee,aR as he,aV as Le,r as Ie,h as Fe,aE as Me,g as $e,aK as De,aW as Ue,aL as Ye,aX as ge,aY as Ve,ax as qe,aw as be,c as Qe,an as Be,aZ as He}from"./index-tykR0DI9.js";import{o as je,u as We,a as Ge,C as Ze,b as Je}from"./org-surface-gate-9zY-gRI7.js";import{P as Ke}from"./page-header-BXIWLsA1.js";import{c as Xe,f as q,B as N,a as m,A as H,g as W,h as G,k as se,l as te,m as ne,n as re,o as Q,I as ea}from"./error-boundary-Be38BRVp.js";import{R as aa,u as sa}from"./radient-auth-buttons-8U1osKLe.js";import{e as ta,f as na,p as ra,P as ia,b as la,h as oa}from"./use-memberships-query-CjIPH1YX.js";import{O as ca,A as da,f as ua,H as ma,a as ha,b as ga,c as xa,d as ve,C as fa,u as pa,i as ba}from"./use-download-agent-mutation-uGo2AQXO.js";import"./console-mirror-DjoNpI7u.js";import"./en-US-BkS8Ixxl.js";import"./book-open-CNgko0U5.js";/**
2
2
  * @license lucide-react v0.507.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.