local-operator-ui 0.31.19 → 0.31.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/out/main/index.js +84 -98
  2. package/out/renderer/assets/{_basePickBy-BjXXwW6E.js → _basePickBy-_G13yD_N.js} +1 -1
  3. package/out/renderer/assets/{_baseUniq-xIg3idQF.js → _baseUniq-cZFY6WR-.js} +1 -1
  4. package/out/renderer/assets/{agent-details-page-D2QdVqJp.js → agent-details-page-DohUpAW5.js} +1 -1
  5. package/out/renderer/assets/{agent-hub-page-BitfELv8.js → agent-hub-page-D2Wo_RcW.js} +1 -1
  6. package/out/renderer/assets/{agents-page-Cl1j7rwO.js → agents-page-Bme3mW2i.js} +2 -2
  7. package/out/renderer/assets/{aida-control-BqbEHtVs.js → aida-control-DVTI-DZP.js} +1 -1
  8. package/out/renderer/assets/{arc-Ceouzeia.js → arc-_ZSLPSD3.js} +1 -1
  9. package/out/renderer/assets/{architectureDiagram-IEHRJDOE-BGSLJh-o.js → architectureDiagram-IEHRJDOE-BMozIO-d.js} +1 -1
  10. package/out/renderer/assets/{blockDiagram-JOT3LUYC-BmQJgCM-.js → blockDiagram-JOT3LUYC-CnCGGby6.js} +1 -1
  11. package/out/renderer/assets/{book-open-tLP18D-k.js → book-open-BWKY7M9P.js} +1 -1
  12. package/out/renderer/assets/browser-page-Ca86jJVo.js +1 -0
  13. package/out/renderer/assets/{browser-webauthn-prompt-k5jzjWeZ.js → browser-webauthn-prompt-Zq7Sensn.js} +1 -1
  14. package/out/renderer/assets/{c4Diagram-VJAJSXHY-Yk9CQYyQ.js → c4Diagram-VJAJSXHY-D6vlxi2G.js} +1 -1
  15. package/out/renderer/assets/channel-DBxTgGZs.js +1 -0
  16. package/out/renderer/assets/{chunk-4BMEZGHF-DizR_fDb.js → chunk-4BMEZGHF-CgxwmKpR.js} +1 -1
  17. package/out/renderer/assets/{chunk-A2AXSNBT-BtTz6zUt.js → chunk-A2AXSNBT-DL4YbfpC.js} +1 -1
  18. package/out/renderer/assets/{chunk-AEK57VVT-D1a4VfuY.js → chunk-AEK57VVT-C7STzYq2.js} +1 -1
  19. package/out/renderer/assets/{chunk-D6G4REZN-bed23kTE.js → chunk-D6G4REZN-BiGlWxbN.js} +1 -1
  20. package/out/renderer/assets/{chunk-RZ5BOZE2-KfGYL-ag.js → chunk-RZ5BOZE2-FPI-zkVi.js} +1 -1
  21. package/out/renderer/assets/{chunk-XZIHB7SX-B1igQQgc.js → chunk-XZIHB7SX-pQtxBw7K.js} +1 -1
  22. package/out/renderer/assets/classDiagram-GIVACNV2-oRXPz12L.js +1 -0
  23. package/out/renderer/assets/classDiagram-v2-COTLJTTW-oRXPz12L.js +1 -0
  24. package/out/renderer/assets/clone-CWgQ1AK5.js +1 -0
  25. package/out/renderer/assets/{console-mirror-CqlxE8VR.js → console-mirror-CG9RcMIb.js} +1 -1
  26. package/out/renderer/assets/{consoleCapture-Bgq6O6hd.js → consoleCapture-CpTo2RAv.js} +1 -1
  27. package/out/renderer/assets/{dagre-OKDRZEBW-BlwfTwwA.js → dagre-OKDRZEBW-BoM7akd9.js} +1 -1
  28. package/out/renderer/assets/{diagram-SSKATNLV-jsDlGkgc.js → diagram-SSKATNLV-D9w1aNay.js} +1 -1
  29. package/out/renderer/assets/{diagram-VNBRO52H-DP8qnarm.js → diagram-VNBRO52H-D6xO4h26.js} +1 -1
  30. package/out/renderer/assets/{erDiagram-Q7BY3M3F-Tc8DPglp.js → erDiagram-Q7BY3M3F-lgEC_hRU.js} +1 -1
  31. package/out/renderer/assets/{error-boundary-X9vF0zez.js → error-boundary-DVk48CIF.js} +1 -1
  32. package/out/renderer/assets/{flowDiagram-4HSFHLVR-C0iWuz_e.js → flowDiagram-4HSFHLVR-B8gXHejR.js} +1 -1
  33. package/out/renderer/assets/{ganttDiagram-APWFNJXF-CXzAhOwO.js → ganttDiagram-APWFNJXF-Ds8ML93J.js} +1 -1
  34. package/out/renderer/assets/{gitGraphDiagram-7IBYFJ6S-c3OKkh69.js → gitGraphDiagram-7IBYFJ6S-D5gdmSVh.js} +1 -1
  35. package/out/renderer/assets/{graph-BNpclJqw.js → graph-DNi4FjaS.js} +1 -1
  36. package/out/renderer/assets/{index-BgDCWTEy.js → index-40tBsZ9r.js} +1 -1
  37. package/out/renderer/assets/{index-BsveCKct.js → index-BhRzR-VW.js} +380 -375
  38. package/out/renderer/assets/{index-D4_JjH_R.js → index-BlalL3ro.js} +1 -1
  39. package/out/renderer/assets/index-FjyWTJXV.css +1 -0
  40. package/out/renderer/assets/infoDiagram-PH2N3AL5-BDTgzxhS.js +2 -0
  41. package/out/renderer/assets/{installer-Durl4Nt6.js → installer-BgW1Tkr8.js} +1 -1
  42. package/out/renderer/assets/{journeyDiagram-U35MCT3I-DdWl9wJG.js → journeyDiagram-U35MCT3I-BdnGNrZc.js} +1 -1
  43. package/out/renderer/assets/{kanban-definition-NDS4AKOZ-D6rkiZvG.js → kanban-definition-NDS4AKOZ-BuQLa1-R.js} +1 -1
  44. package/out/renderer/assets/{layout-BQqWsgv9.js → layout-Pvac8TnM.js} +1 -1
  45. package/out/renderer/assets/{legacy-agents-page-xSUV6wUg.js → legacy-agents-page-BR_oPhtA.js} +1 -1
  46. package/out/renderer/assets/{mermaid.core-DLc2GDBk.js → mermaid.core-Dol6F2oY.js} +5 -5
  47. package/out/renderer/assets/{mesh-page-D1Hn61zc.js → mesh-page-CcSpUIcL.js} +1 -1
  48. package/out/renderer/assets/{mindmap-definition-ALO5MXBD-BPp31SFM.js → mindmap-definition-ALO5MXBD-DDnWPtbR.js} +1 -1
  49. package/out/renderer/assets/{mini-dIYd4lBf.js → mini-D1QQjR0V.js} +1 -1
  50. package/out/renderer/assets/{org-surface-gate-CQZDYvz1.js → org-surface-gate-_kP5Dpsg.js} +1 -1
  51. package/out/renderer/assets/{page-header-Ct_E4hXM.js → page-header-B3RA2AMB.js} +1 -1
  52. package/out/renderer/assets/{pieDiagram-IB7DONF6-InajJAb7.js → pieDiagram-IB7DONF6-Dc1zeStB.js} +1 -1
  53. package/out/renderer/assets/{projects-page-Cq4-43oz.js → projects-page-Cb7bJ1ue.js} +1 -1
  54. package/out/renderer/assets/{quadrantDiagram-7GDLP6J5-DllpcIGZ.js → quadrantDiagram-7GDLP6J5-AlzvyKPw.js} +1 -1
  55. package/out/renderer/assets/{radar-MK3ICKWK-o49sXvJd.js → radar-MK3ICKWK-BLuijs-X.js} +1 -1
  56. package/out/renderer/assets/{radient-auth-buttons-DCKuV_IZ.js → radient-auth-buttons-gtgUk3ts.js} +1 -1
  57. package/out/renderer/assets/{requirementDiagram-KVF5MWMF-DEB_P2Er.js → requirementDiagram-KVF5MWMF-CfgMH9Xy.js} +1 -1
  58. package/out/renderer/assets/{sankeyDiagram-QLVOVGJD-1sqsEoj5.js → sankeyDiagram-QLVOVGJD-CGSaFjvZ.js} +1 -1
  59. package/out/renderer/assets/{schedules-page-D6uKCgBE.js → schedules-page-yCFUUqqb.js} +1 -1
  60. package/out/renderer/assets/{sequenceDiagram-X6HHIX6F-DBKLSCMO.js → sequenceDiagram-X6HHIX6F-BKLpPHnF.js} +1 -1
  61. package/out/renderer/assets/{settings-page-DuO8dHwe.js → settings-page-6S9zTaN7.js} +1 -1
  62. package/out/renderer/assets/{settings-section-yg8wX_kN.js → settings-section-D3WEX0WK.js} +1 -1
  63. package/out/renderer/assets/{stateDiagram-DGXRK772-CirIxYQ4.js → stateDiagram-DGXRK772-CukEj5Ge.js} +1 -1
  64. package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-CaoB6DdD.js +1 -0
  65. package/out/renderer/assets/{textarea-CPyoWJfR.js → textarea-BX6EeK34.js} +1 -1
  66. package/out/renderer/assets/{timeline-definition-BDJGKUSR-HxrDshvA.js → timeline-definition-BDJGKUSR-ZSpHRGCR.js} +1 -1
  67. package/out/renderer/assets/{ui-preferences-store-CyKvDymq.js → ui-preferences-store-DjUQd2R7.js} +1 -1
  68. package/out/renderer/assets/{use-download-agent-mutation-CJP2OhpP.js → use-download-agent-mutation-BwZi8Zfx.js} +1 -1
  69. package/out/renderer/assets/{use-memberships-query-Q96GogTV.js → use-memberships-query-CSOmeH29.js} +1 -1
  70. package/out/renderer/assets/{xychartDiagram-VJFVF3MP-BXsPMfju.js → xychartDiagram-VJFVF3MP-B4P41D_W.js} +1 -1
  71. package/out/renderer/console-capture.html +5 -5
  72. package/out/renderer/index.html +8 -8
  73. package/out/renderer/installer.html +5 -5
  74. package/out/renderer/mini.html +6 -6
  75. package/package.json +2 -2
  76. package/out/renderer/assets/browser-page-ChmnhnuO.js +0 -1
  77. package/out/renderer/assets/channel-CoXp_5DQ.js +0 -1
  78. package/out/renderer/assets/classDiagram-GIVACNV2-DLxyNS1q.js +0 -1
  79. package/out/renderer/assets/classDiagram-v2-COTLJTTW-DLxyNS1q.js +0 -1
  80. package/out/renderer/assets/clone-1ZAhWRhd.js +0 -1
  81. package/out/renderer/assets/index-R0cHU6YS.css +0 -1
  82. package/out/renderer/assets/infoDiagram-PH2N3AL5-C6rpQuUJ.js +0 -2
  83. package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-BektpfMe.js +0 -1
  84. /package/out/renderer/assets/{index-C17iOszj.js → index-VKe88JN9.js} +0 -0
package/out/main/index.js CHANGED
@@ -32904,10 +32904,10 @@ async function waitForFleetIdle(input) {
32904
32904
  fleet: (await input.readRoster())?.length ?? 0
32905
32905
  };
32906
32906
  }
32907
- function fleetDrainRefusalSentence(outcome, installLanded = false) {
32907
+ function fleetDrainRefusalSentence(outcome) {
32908
32908
  const minutes = Math.max(1, Math.round(outcome.waitedMs / 6e4));
32909
32909
  const waited = `${minutes} minute${minutes === 1 ? "" : "s"}`;
32910
- const closing = installLanded ? "The install itself has landed, and the server keeps running the build it loaded until it can restart onto it; the app will offer this update again." : "Nothing was installed and the server keeps running the build it loaded; the app will offer this update again.";
32910
+ const closing = "Nothing was installed and the server keeps running the build it loaded; the app will offer this update again.";
32911
32911
  if (outcome.because === "unknown") {
32912
32912
  const lead2 = outcome.credentialsRefused ? "The server refused this app's credentials, so the app could not read which sessions are running on this machine." : "The app could not read which sessions are running on this machine, so it did not update the server.";
32913
32913
  return `${lead2}
@@ -32977,7 +32977,10 @@ async function reengageDisplacedSessions(input) {
32977
32977
  const finalRead = await input.readRoster();
32978
32978
  if (finalRead !== null) after = finalRead;
32979
32979
  const displaced = displacedSessions(input.before, after);
32980
- const stillResident = snapshot2.filter((row) => stillLive.has(row.sessionId));
32980
+ const stillLiveAtEnd = stillLiveIn(finalRead) ?? stillLive;
32981
+ const stillResident = snapshot2.filter(
32982
+ (row) => stillLiveAtEnd.has(row.sessionId)
32983
+ );
32981
32984
  const engaged = [];
32982
32985
  const failed = [];
32983
32986
  for (const row of displaced) {
@@ -34280,15 +34283,17 @@ class UpdateService {
34280
34283
  */
34281
34284
  installPreflightInFlight = false;
34282
34285
  /**
34283
- * How long an update press may hold back for the fleet, and how often it
34284
- * re-reads it.
34286
+ * How long the rebuild install leg may hold back for the fleet, and how often
34287
+ * it re-reads it.
34285
34288
  *
34286
- * FIELDS rather than the module's constants read in place, because both halves
34287
- * are waited on inside one press and the harness has to be able to drive a wait
34288
- * in milliseconds instead of ten minutes (`scripts/update-robustness.test.mjs`,
34289
- * the same lever `waitForBackendVersion` and the install budgets already are).
34290
- * The values they start at are the host tool's own, in
34291
- * `backend/fleet-drain.ts`, where the reasoning for the ten minutes lives.
34289
+ * FIELDS rather than the module's constants read in place, because the wait has
34290
+ * to be drivable in milliseconds instead of ten minutes
34291
+ * (`scripts/update-robustness.test.mjs`, the same lever `waitForBackendVersion`
34292
+ * and the install budgets already are). The values they start at are the host
34293
+ * tool's own, in `backend/fleet-drain.ts`, where the reasoning for the ten
34294
+ * minutes lives - and where the module head records that the press reaching
34295
+ * this pair is now only the REBUILD route's install leg (the operator's
34296
+ * directive removed the restart-leg drains).
34292
34297
  */
34293
34298
  fleetDrainBudgetMs = FLEET_DRAIN_BUDGET_MS;
34294
34299
  fleetDrainPollMs = FLEET_DRAIN_POLL_MS;
@@ -34317,13 +34322,17 @@ class UpdateService {
34317
34322
  sessionEngageBeatMs = SESSION_ENGAGE_BEAT_MS;
34318
34323
  sessionEngageHoldMs = SESSION_ENGAGE_HOLD_MS;
34319
34324
  /**
34320
- * How long the press IN FLIGHT has already spent waiting for the fleet.
34325
+ * How long the rebuild press IN FLIGHT has already spent waiting for the fleet.
34321
34326
  *
34322
- * The budget above is the press's, not each drain's (review round 1, m2): a
34323
- * rebuild press drains twice - once before the install and once before the
34324
- * restart - so a per-drain budget let one press hold the button for twenty
34325
- * minutes while the panel promised ten. Reset at the top of every press, in
34326
- * `updateBackend`, because the guarantee is about one press.
34327
+ * The budget above belongs to the PRESS, not to each drain (review round 1,
34328
+ * m2): when the restart legs still drained, a rebuild press drained twice -
34329
+ * once before the install and once before the restart - so a per-drain budget
34330
+ * let one press hold the button for twenty minutes while the panel promised
34331
+ * ten. The restart-leg drains are gone (2026-09-29 directive), so the ledger
34332
+ * now carries at most one leg's spend; it is kept because the promise the
34333
+ * draining copy makes is about the press, and because it is the seam the wait
34334
+ * is driven through. Reset at the top of every press, in `updateBackend`,
34335
+ * because the guarantee is about one press.
34327
34336
  */
34328
34337
  fleetDrainSpentMs = 0;
34329
34338
  /**
@@ -37081,13 +37090,16 @@ ${heal.removed.join("\n")}`,
37081
37090
  * publishes a generation and restarts a daemon. It is the managed global
37082
37091
  * arm's own wording, aimed at this arm's mechanism.
37083
37092
  *
37084
- * AND IT NO LONGER PROMISES A DROPPED TURN. It did, because it described
37085
- * what the press used to do; the press now waits for the running turns to
37086
- * finish before it moves the server (`drainFleetForUpdate`), so the honest
37087
- * consequence is the wait and the sequence, with the cost stated as the
37088
- * time it takes rather than as work it destroys.
37093
+ * AND IT NO LONGER PROMISES A DROPPED TURN - AND NO LONGER PRICES A WAIT. It
37094
+ * did both at different times, because it described what the press used to
37095
+ * do; the operator's directive of 2026-09-29 removed the fleet wait from the
37096
+ * restart legs ("we don't need to wait for all sessions to drain and turn
37097
+ * over... on idle they should switch over"), so the honest consequence names
37098
+ * the sequence, the promised absence of dropped work, and the fleet effect
37099
+ * that remains - sessions still working move onto the new build when they
37100
+ * next stop or go idle - with the cost stated as the time it takes.
37089
37101
  */
37090
- remedy: "The app publishes the new build beside the one the server is using, waits for the turns already running on this machine to finish, and then moves the server onto it, so nothing in flight is cut off. This can take a minute or two.",
37102
+ remedy: "The app publishes the new build beside the one the server is using and then moves the server onto it, so nothing in flight is cut off. Sessions that are still working move onto the new build when they next stop or go idle. This can take a minute or two.",
37091
37103
  detail: `The app started this server itself (${startupMode}).`,
37092
37104
  sourceBuild: false,
37093
37105
  /*
@@ -37761,15 +37773,19 @@ ${heal.removed.join("\n")}`,
37761
37773
  return this.backendService?.servingInstall().owned.owned ?? false;
37762
37774
  }
37763
37775
  /**
37764
- * Wait for the fleet this app can see to go idle, or refuse the update.
37776
+ * Wait for the fleet this app can see to go idle, or refuse the rebuild.
37765
37777
  *
37766
- * THE ONE GATE EVERY RESTART AND EVERY IN-PLACE INSTALL GOES THROUGH. A
37767
- * restart of the server serving this app is `stop(true)` - SIGTERM, ten
37768
- * seconds, SIGKILL - and the daemon's own `retire.py` declines that exit for
37769
- * exactly this reason: its shutdown cancels work it owns. The operator's rule
37770
- * is that nothing kills runtimes en masse, so the app waits for the fleet to
37771
- * drain before it touches anything, and REFUSES with a remedy at the end of
37772
- * its budget rather than cutting off a turn on a timer.
37778
+ * THE ONE REMAINING GATE, AND IT GUARDS THE ONE ROUTE THAT CAN CUT A TURN. This
37779
+ * used to stand in front of every restart and every in-place install. The
37780
+ * operator's directive of 2026-09-29 removed it from the RESTART legs - a
37781
+ * daemon bounce cuts no turns, because session runtimes are detached and
37782
+ * converge onto the new build at their own next idle (see the module head in
37783
+ * `backend/fleet-drain.ts`) - so what is left is the route it still has to
37784
+ * guard: the checkout REBUILD's install leg, which rewrites a tree a live
37785
+ * runtime is reading (`update-install.ts`). There the operator's rule stands:
37786
+ * nothing kills runtimes en masse, so the app waits for the fleet to drain
37787
+ * before the rebuild starts, and REFUSES with a remedy at the end of its
37788
+ * budget rather than cutting off a turn on a timer.
37773
37789
  *
37774
37790
  * WHY THE MANAGER'S OWN READERS. `servingWorkState` is the app's existing
37775
37791
  * busy signal (see `servingWorkStateFromSessions`) and `servingSessionFleet`
@@ -37784,7 +37800,7 @@ ${heal.removed.join("\n")}`,
37784
37800
  * when the update was refused and the caller must not proceed
37785
37801
  */
37786
37802
  async drainFleetForUpdate(input) {
37787
- const { backend, what } = input;
37803
+ const { backend } = input;
37788
37804
  const spentMs = this.fleetDrainSpentMs;
37789
37805
  const remainingMs = Math.max(0, this.fleetDrainBudgetMs - spentMs);
37790
37806
  const outcome = await waitForFleetIdle({
@@ -37811,7 +37827,7 @@ ${heal.removed.join("\n")}`,
37811
37827
  waitedMs: spentMs + elapsedMs
37812
37828
  });
37813
37829
  logger.info(
37814
- `Update waiting for the fleet to drain before it may ${what} (${Math.round(elapsedMs / 1e3)}s so far)`,
37830
+ `Update waiting for the fleet to drain before the rebuild may start (${Math.round(elapsedMs / 1e3)}s so far)`,
37815
37831
  LogFileType.UPDATE_SERVICE
37816
37832
  );
37817
37833
  }
@@ -37819,19 +37835,16 @@ ${heal.removed.join("\n")}`,
37819
37835
  this.fleetDrainSpentMs = spentMs + outcome.waitedMs;
37820
37836
  if (outcome.kind === "drained") {
37821
37837
  logger.info(
37822
- `The fleet is idle (${outcome.fleet} session(s) on the roster, ${outcome.waitedMs}ms waited); the update may ${what}`,
37838
+ `The fleet is idle (${outcome.fleet} session(s) on the roster, ${outcome.waitedMs}ms waited); the rebuild may start`,
37823
37839
  LogFileType.UPDATE_SERVICE
37824
37840
  );
37825
37841
  return true;
37826
37842
  }
37827
- const message = fleetDrainRefusalSentence(
37828
- outcome,
37829
- input.installLanded === true
37830
- );
37843
+ const message = fleetDrainRefusalSentence(outcome);
37831
37844
  const command = input.command ?? null;
37832
37845
  const pressWaitedMs = spentMs + outcome.waitedMs;
37833
37846
  logger.warn(
37834
- `Refusing to ${what}: the fleet did not drain in ${pressWaitedMs}ms (${outcome.because}, ${outcome.busy.length} mid-turn, this leg spent ${outcome.waitedMs}ms). ${message}${command ? ` By hand: ${command}` : ""}`,
37847
+ `Refusing to install: the fleet did not drain in ${pressWaitedMs}ms (${outcome.because}, ${outcome.busy.length} mid-turn, this leg spent ${outcome.waitedMs}ms). ${message}${command ? ` By hand: ${command}` : ""}`,
37835
37848
  LogFileType.UPDATE_SERVICE
37836
37849
  );
37837
37850
  this.sendToRenderer("backend-update-error", {
@@ -37848,17 +37861,7 @@ ${heal.removed.join("\n")}`,
37848
37861
  because: outcome.because,
37849
37862
  waitedMs: pressWaitedMs,
37850
37863
  command,
37851
- credentialsRefused: outcome.credentialsRefused === true,
37852
- /*
37853
- * WHICH REFUSAL THIS IS (design round 2, D6). The heading is the reader's
37854
- * takeaway from a panel they have been looking at for ten minutes, and the
37855
- * three refusal sites are not the same event: the install leg's refusal left
37856
- * nothing on disk, while the two restart-leg refusals happen AFTER the build
37857
- * landed. "The update didn't start" is false on the second pair - the
37858
- * producer's own doc for `installLanded` says so - so the fact travels with
37859
- * the report and the panel keys its heading on it.
37860
- */
37861
- installLanded: input.installLanded === true
37864
+ credentialsRefused: outcome.credentialsRefused === true
37862
37865
  }
37863
37866
  });
37864
37867
  return false;
@@ -37867,15 +37870,22 @@ ${heal.removed.join("\n")}`,
37867
37870
  * Put back the runtimes a restart displaced, and say what came back.
37868
37871
  *
37869
37872
  * Step 5 of the host tool's own order (`~/tools/lop-fleet-update`): the app
37870
- * snapshots the fleet, drains it, moves the server, and then re-engages what
37871
- * the move displaced - the unwatched `daemon`-kind sessions in particular,
37872
- * which nothing else revives. `reengageDisplacedSessions` owns the retire wait
37873
- * and the ordering rules.
37874
- *
37875
- * BEST EFFORT AND NEVER A BLOCKER: this runs after the server is healthy and
37876
- * the update has already been reported, so a displace list that will not come
37877
- * back is a logged fact rather than a failed update. That is deliberate - a
37878
- * `warm` the daemon refuses must not turn a landed update into an error panel.
37873
+ * snapshots the fleet, moves the server, and then re-engages what the move
37874
+ * displaced - the unwatched `daemon`-kind sessions in particular, which nothing
37875
+ * else revives. `reengageDisplacedSessions` owns the retire wait and the
37876
+ * ordering rules.
37877
+ *
37878
+ * BEST EFFORT AND NEVER A BLOCKER: a displace list that will not come back is a
37879
+ * logged fact rather than a failed update. That is deliberate - a `warm` the
37880
+ * daemon refuses must not turn a landed update into an error panel.
37881
+ *
37882
+ * THE RESULT IS RETURNED FOR THE COMPLETION'S COUNT (2026-09-29): the caller
37883
+ * reads `stillResident` - the pre-swap runtimes still resident in the freshest
37884
+ * read at the wait's end, which in the ordinary flow are the sessions still on
37885
+ * the old build - into `sessionsOnOldBuild`. It is a liveness reading rather
37886
+ * than a build read (the field's own docblock names the one narrow over-count).
37887
+ * A failure here answers null and the count is reported as not measured, so
37888
+ * the notice degrades to the numberless sentence rather than inventing a zero.
37879
37889
  */
37880
37890
  async reengageFleetAfterRestart(backend, before) {
37881
37891
  try {
@@ -37897,7 +37907,7 @@ ${heal.removed.join("\n")}`,
37897
37907
  LogFileType.UPDATE_SERVICE
37898
37908
  );
37899
37909
  }
37900
- return;
37910
+ return result;
37901
37911
  }
37902
37912
  if (result.failed.length > 0) {
37903
37913
  logger.warn(
@@ -37905,11 +37915,13 @@ ${heal.removed.join("\n")}`,
37905
37915
  LogFileType.UPDATE_SERVICE
37906
37916
  );
37907
37917
  }
37918
+ return result;
37908
37919
  } catch (error) {
37909
37920
  logger.warn(
37910
37921
  `Could not re-engage the sessions a restart displaced: ${error instanceof Error ? error.message : String(error)}`,
37911
37922
  LogFileType.UPDATE_SERVICE
37912
37923
  );
37924
+ return null;
37913
37925
  }
37914
37926
  }
37915
37927
  /**
@@ -37958,9 +37970,11 @@ ${heal.removed.join("\n")}`,
37958
37970
  *
37959
37971
  * NOT `sessions.message`, deliberately: a message would admit a turn in every
37960
37972
  * conversation this machine holds, which is work and spend the user did not ask
37961
- * for, and the drain that ran before the restart is what makes a notice about
37962
- * interrupted work unnecessary - by construction nothing was mid-turn when the
37963
- * server moved.
37973
+ * for - and since the operator's directive removed the restart-leg drains
37974
+ * (2026-09-29), a re-engaged session may legitimately have been mid-turn when
37975
+ * the server moved: a daemon bounce cuts no turns, and the session's own turn
37976
+ * kept running in its detached runtime. This call starts a runtime; it never
37977
+ * touches a turn.
37964
37978
  */
37965
37979
  async engageSessionRuntime(backend, row) {
37966
37980
  const relay = backend.getStreamRelay();
@@ -38419,8 +38433,7 @@ ${heal.removed.join("\n")}`,
38419
38433
  const fleetBeforeInstall = rebuildRoute ? await this.readFleetSnapshot(backend) : null;
38420
38434
  if (rebuildRoute && !await this.drainFleetForUpdate({
38421
38435
  backend,
38422
- command: freshPlan.updateCommand ?? null,
38423
- what: "install"
38436
+ command: freshPlan.updateCommand ?? null
38424
38437
  })) {
38425
38438
  return false;
38426
38439
  }
@@ -38539,23 +38552,6 @@ ${heal.removed.join("\n")}`,
38539
38552
  });
38540
38553
  return true;
38541
38554
  }
38542
- if (!await this.drainFleetForUpdate({
38543
- backend,
38544
- command: freshPlan.updateCommand ?? null,
38545
- what: "restart",
38546
- /*
38547
- * A press with nothing left to install has no install to report as
38548
- * landed, and saying one was would be the one false thing in the
38549
- * refusal.
38550
- */
38551
- installLanded: !installAlreadyCurrent
38552
- })) {
38553
- logger.info(
38554
- installAlreadyCurrent ? "Nothing was left to install; the restart was refused because the fleet did not drain. The daemon keeps serving the build it loaded." : "The install landed; the restart was refused because the fleet did not drain. The daemon keeps serving the build it loaded.",
38555
- LogFileType.UPDATE_SERVICE
38556
- );
38557
- return false;
38558
- }
38559
38555
  logger.info(
38560
38556
  "Restarting backend service onto the updated install...",
38561
38557
  LogFileType.UPDATE_SERVICE
@@ -38619,13 +38615,12 @@ ${heal.removed.join("\n")}`,
38619
38615
  fleetBeforeInstall,
38620
38616
  fleetBeforeRestart
38621
38617
  );
38622
- if (reengageSnapshot !== null) {
38623
- await this.reengageFleetAfterRestart(backend, reengageSnapshot);
38624
- }
38618
+ const reengage = reengageSnapshot !== null ? await this.reengageFleetAfterRestart(backend, reengageSnapshot) : null;
38625
38619
  this.sendToRenderer("backend-update-completed", {
38626
38620
  installVersion: after,
38627
38621
  runningVersion: reported,
38628
- restarted: true
38622
+ restarted: true,
38623
+ sessionsOnOldBuild: reengage?.stillResident.length ?? null
38629
38624
  });
38630
38625
  return true;
38631
38626
  }
@@ -38974,14 +38969,6 @@ ${reason}` : ""}`,
38974
38969
  return true;
38975
38970
  }
38976
38971
  const fleetAfterPublish = await this.readFleetSnapshot(backend);
38977
- if (!await this.drainFleetForUpdate({
38978
- backend,
38979
- command: null,
38980
- what: "restart",
38981
- installLanded: outcome.replaced
38982
- })) {
38983
- return false;
38984
- }
38985
38972
  logger.info(
38986
38973
  "Restarting backend service onto the published environment...",
38987
38974
  LogFileType.UPDATE_SERVICE
@@ -39070,13 +39057,12 @@ ${reason}` : ""}`,
39070
39057
  fleetAfterPublish,
39071
39058
  fleetBeforeRestart
39072
39059
  );
39073
- if (reengageSnapshot !== null) {
39074
- await this.reengageFleetAfterRestart(backend, reengageSnapshot);
39075
- }
39060
+ const reengage = reengageSnapshot !== null ? await this.reengageFleetAfterRestart(backend, reengageSnapshot) : null;
39076
39061
  this.sendToRenderer("backend-update-completed", {
39077
39062
  installVersion,
39078
39063
  runningVersion: running,
39079
- restarted: true
39064
+ restarted: true,
39065
+ sessionsOnOldBuild: reengage?.stillResident.length ?? null
39080
39066
  });
39081
39067
  return true;
39082
39068
  }
@@ -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-xIg3idQF.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-DLc2GDBk.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-cZFY6WR-.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-Dol6F2oY.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-DLc2GDBk.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-Dol6F2oY.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 F,j as e,c as G}from"./index-C17iOszj.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-Q96GogTV.js";import{b as ne,a as I,y as we}from"./aida-control-BqbEHtVs.js";import{a9 as b,aa as K,a4 as Y,ab as B,ac as be,ad as Ce,ae as ie,e as re,a as Ne,af as Ae,B as ke,ag as Se,ah as De,ai as J,a3 as Ee,aj as Fe,ak as Te}from"./index-BsveCKct.js";import{c as _e,L as Pe,a as ee,B as l,S as z,b as oe,d as L,e as M,f as v,X as qe,g as w,A as te,h as se,i as ae}from"./textarea-CPyoWJfR.js";import{f as W,u as Le,i as Me,a as ze,b as Ie,c as Ke,O as Be,H as Oe,A as Qe}from"./use-download-agent-mutation-CJP2OhpP.js";import"./ui-preferences-store-CyKvDymq.js";import"./error-boundary-X9vF0zez.js";import"./console-mirror-CqlxE8VR.js";import"./en-US-BkS8Ixxl.js";import"./book-open-tLP18D-k.js";/**
1
+ import{r as F,j as e,c as G}from"./index-VKe88JN9.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-CSOmeH29.js";import{b as ne,a as I,y as we}from"./aida-control-DVTI-DZP.js";import{a9 as b,aa as K,a4 as Y,ab as B,ac as be,ad as Ce,ae as ie,e as re,a as Ne,af as Ae,B as ke,ag as Se,ah as De,ai as J,a3 as Ee,aj as Fe,ak as Te}from"./index-BhRzR-VW.js";import{c as _e,L as Pe,a as ee,B as l,S as z,b as oe,d as L,e as M,f as v,X as qe,g as w,A as te,h as se,i as ae}from"./textarea-BX6EeK34.js";import{f as W,u as Le,i as Me,a as ze,b as Ie,c as Ke,O as Be,H as Oe,A as Qe}from"./use-download-agent-mutation-BwZi8Zfx.js";import"./ui-preferences-store-DjUQd2R7.js";import"./error-boundary-DVk48CIF.js";import"./console-mirror-CG9RcMIb.js";import"./en-US-BkS8Ixxl.js";import"./book-open-BWKY7M9P.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,j as e,c as L}from"./index-C17iOszj.js";import{b as Ee,C as Ie,a as Le,i as he,y as pe,u as Fe,I as Me}from"./aida-control-BqbEHtVs.js";import{o as be,u as $e,a as De,C as Ue,b as Ye}from"./org-surface-gate-CQZDYvz1.js";import{P as qe}from"./page-header-Ct_E4hXM.js";import{c as Ve,g as V,B as N,f as m,A as Q,h as W,i as G,q as se,r as te,s as ne,t as ie,u as B,I as Be}from"./textarea-CPyoWJfR.js";import{e as je,a9 as re,ag as He,ah as ge,aV as Qe,r as We,aa as Ge,aW as Ze,ab as Xe,aX as Je,a5 as Ke,aY as ea,aZ as aa}from"./index-BsveCKct.js";import{e as sa,f as ta,p as na,P as ia,b as ra,h as la}from"./use-memberships-query-Q96GogTV.js";import{O as oa,A as ca,f as da,H as ua,a as ma,b as ha,c as ga,d as ve,C as xa,u as fa,i as pa}from"./use-download-agent-mutation-CJP2OhpP.js";import{R as ba}from"./radient-auth-buttons-DCKuV_IZ.js";import"./ui-preferences-store-CyKvDymq.js";import"./error-boundary-X9vF0zez.js";import"./console-mirror-CqlxE8VR.js";import"./en-US-BkS8Ixxl.js";import"./book-open-tLP18D-k.js";/**
1
+ import{r,j as e,c as L}from"./index-VKe88JN9.js";import{b as Ee,C as Ie,a as Le,i as he,y as pe,u as Fe,I as Me}from"./aida-control-DVTI-DZP.js";import{o as be,u as $e,a as De,C as Ue,b as Ye}from"./org-surface-gate-_kP5Dpsg.js";import{P as qe}from"./page-header-B3RA2AMB.js";import{c as Ve,g as V,B as N,f as m,A as Q,h as W,i as G,q as se,r as te,s as ne,t as ie,u as B,I as Be}from"./textarea-BX6EeK34.js";import{e as je,a9 as re,ag as He,ah as ge,aV as Qe,r as We,aa as Ge,aW as Ze,ab as Xe,aX as Je,a5 as Ke,aY as ea,aZ as aa}from"./index-BhRzR-VW.js";import{e as sa,f as ta,p as na,P as ia,b as ra,h as la}from"./use-memberships-query-CSOmeH29.js";import{O as oa,A as ca,f as da,H as ua,a as ma,b as ha,c as ga,d as ve,C as xa,u as fa,i as pa}from"./use-download-agent-mutation-BwZi8Zfx.js";import{R as ba}from"./radient-auth-buttons-gtgUk3ts.js";import"./ui-preferences-store-DjUQd2R7.js";import"./error-boundary-DVk48CIF.js";import"./console-mirror-CG9RcMIb.js";import"./en-US-BkS8Ixxl.js";import"./book-open-BWKY7M9P.js";/**
2
2
  * @license lucide-react v0.507.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./legacy-agents-page-xSUV6wUg.js","./index-C17iOszj.js","./index-R0cHU6YS.css","./index-BsveCKct.js","./aida-control-BqbEHtVs.js","./ui-preferences-store-CyKvDymq.js","./textarea-CPyoWJfR.js","./error-boundary-X9vF0zez.js","./console-mirror-CqlxE8VR.js","./console-mirror-DOrYoP_4.css","./index-CSPo12AE.css","./page-header-Ct_E4hXM.js","./settings-section-yg8wX_kN.js","./org-surface-gate-CQZDYvz1.js","./use-memberships-query-Q96GogTV.js","./radient-auth-buttons-DCKuV_IZ.js"])))=>i.map(i=>d[i]);
2
- import{u as O,a as Q,b as J,c as V,d as W,B as G,U as H,P as X,r as Y,_ as Z,e as $}from"./index-BsveCKct.js";import{j as e,r as n,c as w}from"./index-C17iOszj.js";import{u as ee,d as te,a as ae,b as se,c as z,e as L}from"./aida-control-BqbEHtVs.js";import{B as h}from"./textarea-CPyoWJfR.js";import"./ui-preferences-store-CyKvDymq.js";import"./error-boundary-X9vF0zez.js";import"./console-mirror-CqlxE8VR.js";const ne=n.lazy(()=>Z(()=>import("./legacy-agents-page-xSUV6wUg.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),import.meta.url).then(t=>({default:t.LegacyAgentsPage}))),m="w-full rounded-md border border-control bg-surface px-3 py-2 text-body-sm text-ink";function T({profile:t,creating:E,onSaved:b}){const[j,r]=n.useState(!1),[v,c]=n.useState(E),[p,x]=n.useState(t?.name??""),[g,y]=n.useState(t?.kind??"role"),[P,d]=n.useState(t?.description??""),[N,u]=n.useState(t?.instructions??""),[_,D]=n.useState(t?.tools?.join(", ")??""),[I,k]=n.useState(t?.effort??"inherit"),[U,R]=n.useState(t?.delegate??!1),[f,a]=n.useState(!1),[o,l]=n.useState(null),i=n.useRef(null),C=$(),S=E||j,K=async s=>{if(s.preventDefault(),f)return;const M={kind:g,description:P,instructions:N,tools:_.split(",").map(q=>q.trim()).filter(Boolean),effort:I,delegate:U},A=JSON.stringify({name:p,fields:M,fresh:S});if(i.current&&i.current.body!==A){l("The previous save has not been confirmed. Retry it unchanged or reload the profile to reconcile before editing again.");return}i.current??={id:crypto.randomUUID(),body:A},a(!0),l(null);try{const q=await L({op:S?"profiles.create":"profiles.update",requestId:i.current.id,name:p,fields:M});i.current=null,c(!1),b(q.name)}catch(q){l(q instanceof Error?q.message:"Profile could not be saved.")}finally{a(!1)}},F=async()=>{if(!(!t||f)){a(!0),l(null);try{const s=await L({op:"profiles.install",name:t.name,requestId:crypto.randomUUID()});c(!1),r(!1),i.current=null,x(s.name),y(s.kind),d(s.description??""),u(s.instructions??""),D(s.tools?.join(", ")??""),k(s.effort??"inherit"),R(s.delegate??!1),b(s.name)}catch(s){l(s instanceof Error?s.message:"Profile could not be installed.")}finally{a(!1)}}};return e.jsxs("div",{className:"max-w-3xl space-y-6",children:[e.jsxs("header",{children:[e.jsx("h1",{className:"text-title",children:S?j?"Extend agent":"Create agent":t?.name}),e.jsx("p",{className:"mt-2 text-body-sm text-ink-muted",children:"Reusable instructions shared by agent commands, subagents and teams. Chats remain separate."})]}),t&&!S&&e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs("span",{className:"text-meta text-ink-muted",children:[t.source==="builtin"?"Built-in":t.source==="installed"?"Installed":"Custom",t.divergent_fields?.length?" · Modified":""," ·"," ",t.kind]}),t.source==="builtin"?e.jsx(h,{variant:"outline",onClick:F,disabled:f,children:"Install"}):e.jsx(h,{variant:"outline",onClick:()=>c(!0),children:"Edit"}),e.jsx(h,{variant:"outline",onClick:()=>{r(!0),c(!0),x(""),i.current=null},children:"Extend"}),e.jsx(h,{onClick:()=>{z.getState().stageDraft({kind:"agent",name:t.name}),C("/chat")},children:"New chat"})]}),o&&e.jsx("p",{role:"alert",className:"text-body-sm text-danger",children:o}),!v&&t?.source==="builtin"&&e.jsx("p",{id:"builtin-readonly",className:"text-body-sm text-ink-muted",children:"Built-in agents are read-only. Install this one to edit it, or Extend it to start a separate agent from its instructions."}),e.jsxs("form",{onSubmit:K,className:"space-y-4",children:[e.jsxs("fieldset",{disabled:!v||f,className:"space-y-4",children:[e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Name"}),e.jsx("input",{className:m,value:p,disabled:!S,required:!0,"aria-describedby":t?.source==="builtin"?"builtin-readonly":void 0,onChange:s=>x(s.target.value)})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Kind"}),e.jsxs("select",{className:m,value:g,disabled:!S,onChange:s=>y(s.target.value),children:[e.jsx("option",{value:"role",children:"Role"}),e.jsx("option",{value:"specialist",children:"Specialist"})]})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"When to use this agent"}),e.jsx("input",{className:m,value:P,maxLength:8e3,onChange:s=>d(s.target.value)})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Instructions"}),e.jsx("textarea",{className:w(m,"min-h-52"),value:N,required:!0,maxLength:8e3,onChange:s=>u(s.target.value)})]}),g==="role"&&e.jsxs(e.Fragment,{children:[e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Allowed tools"}),e.jsx("input",{className:m,value:_,onChange:s=>D(s.target.value),placeholder:"All tools when empty; otherwise comma-separated names"})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Effort tier"}),e.jsx("input",{className:m,value:I,onChange:s=>k(s.target.value),"aria-describedby":"effort-help"}),e.jsx("span",{id:"effort-help",className:"text-meta text-ink-muted",children:"Use inherit, or a tier configured in backend settings. Unsupported tiers are rejected before saving."})]}),e.jsxs("label",{className:"flex cursor-pointer items-center gap-2 text-body-sm",children:[e.jsx("input",{type:"checkbox",checked:U,onChange:s=>R(s.target.checked)}),"May delegate to subagents"]})]})]}),v&&e.jsx(h,{type:"submit",disabled:f,children:f?"Saving…":S?"Create agent":"Save changes"})]}),!v&&t?.packaged_instructions&&t.divergent_fields?.length?e.jsxs("details",{className:"text-body-sm",children:[e.jsx("summary",{children:"Compare packaged instructions"}),e.jsx("pre",{className:"mt-2 whitespace-pre-wrap text-body-sm text-ink-muted",children:t.packaged_instructions})]}):null]})}function B({team:t,onSaved:E}){const[b,j]=n.useState(t?.name??""),[r,v]=n.useState(t?.description??""),[c,p]=n.useState(t?.manager??"manager"),[x,g]=n.useState((t?.members??[]).map(a=>({...a,key:crypto.randomUUID()}))),[y,P]=n.useState(t?.instructions??""),[d,N]=n.useState(t?.project??""),[u,_]=n.useState(!1),[D,I]=n.useState(null),k=n.useRef(null),U=$(),R=async a=>{if(a.preventDefault(),u)return;const o={name:b,description:r,manager:c,members:x.map(({key:i,...C})=>C),instructions:y,project:d},l=JSON.stringify(o);if(k.current&&k.current.body!==l){I("The previous save has not been confirmed. Reload the team before changing that request.");return}k.current??={id:crypto.randomUUID(),body:l},_(!0),I(null);try{const i=t?await L({op:"teams.update",name:t.name,requestId:k.current.id,fields:o}):await L({op:"teams.create",requestId:k.current.id,fields:o});k.current=null,E(i.name)}catch(i){I(i instanceof Error?i.message:"Team could not be saved.")}finally{_(!1)}},f=(a,o)=>g(l=>l.map((i,C)=>C===a?{...i,...o}:i));return e.jsxs("div",{className:"max-w-3xl space-y-6",children:[e.jsxs("header",{children:[e.jsx("h1",{className:"text-title",children:t?t.name:"Create team"}),e.jsx("p",{className:"mt-2 text-body-sm text-ink-muted",children:"The manager leads the chat. Members retain their own instructions and start only when delegated work."})]}),t&&e.jsx(h,{onClick:()=>{z.getState().stageDraft({kind:"team",name:t.name}),U("/chat")},children:"New team chat"}),D&&e.jsx("p",{role:"alert",className:"text-body-sm text-danger",children:D}),e.jsxs("form",{onSubmit:R,className:"space-y-4",children:[e.jsxs("fieldset",{disabled:u,className:"space-y-4",children:[e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Name"}),e.jsx("input",{className:m,required:!0,maxLength:64,value:b,onChange:a=>j(a.target.value)})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Description"}),e.jsx("input",{className:m,value:r,onChange:a=>v(a.target.value)})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Manager agent"}),e.jsx("input",{className:m,required:!0,value:c,onChange:a=>p(a.target.value)})]}),e.jsxs("section",{className:"space-y-2",children:[e.jsx("h2",{className:"text-heading",children:"Members"}),x.map((a,o)=>e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("input",{className:w(m,"w-48 flex-1"),"aria-label":`Member ${o+1} name`,required:!0,value:a.role,onChange:l=>f(o,{role:l.target.value})}),e.jsxs("select",{className:w(m,"w-32"),"aria-label":`Member ${o+1} kind`,value:a.kind,onChange:l=>f(o,{kind:l.target.value}),children:[e.jsx("option",{value:"agent",children:"Agent"}),e.jsx("option",{value:"team",children:"Nested team"})]}),e.jsx("input",{className:w(m,"w-20"),"aria-label":`Member ${o+1} count`,type:"number",min:1,max:16,value:a.count,onChange:l=>f(o,{count:Number(l.target.value)})}),e.jsx(h,{type:"button",variant:"ghost",onClick:()=>g(l=>l.filter((i,C)=>C!==o)),children:"Remove"})]},a.key)),e.jsx(h,{type:"button",variant:"outline",onClick:()=>g(a=>[...a,{role:"",count:1,kind:"agent",key:crypto.randomUUID()}]),children:"Add member"})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Collaboration instructions"}),e.jsx("textarea",{className:w(m,"min-h-36"),maxLength:8e3,value:y,onChange:a=>P(a.target.value)})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Project brief"}),e.jsx("textarea",{className:w(m,"min-h-36"),maxLength:8e3,value:d,onChange:a=>N(a.target.value)})]})]}),e.jsx(h,{type:"submit",disabled:u,children:u?"Saving…":t?"Save team":"Create team"})]})]})}function me(){const t=O(),{agentId:E}=Q(),[b,j]=J(),r=b.get("kind")==="team"||b.get("create")==="team",v=b.has("create"),c=b.get("name"),p=ee(),x=te(p.data,r?"team_catalogue":"profile_catalogue"),g=V(x&&!r),y=W(x&&r),P=ae(),d=se({queryKey:["desktop",r?"team":"profile",c],enabled:x&&!!c&&!v,queryFn:()=>L({op:r?"teams.get":"profiles.get",name:c??""}),retry:!1}),N=async u=>{await P.invalidateQueries({queryKey:["desktop"]}),j({kind:r?"team":"agent",name:u})};return E?e.jsx(n.Suspense,{fallback:e.jsx("p",{className:"p-6 text-body",children:"Loading saved agent…"}),children:e.jsx(ne,{})}):e.jsxs("div",{className:"flex h-full min-h-0 bg-canvas text-ink",children:[e.jsxs("aside",{ref:t,className:"flex w-64 shrink-0 flex-col gap-4 border-r border-hairline bg-surface p-4",children:[e.jsx("h1",{className:"text-heading",children:"Agents and teams"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(h,{variant:r?"ghost":"outline",onClick:()=>j({kind:"agent"}),children:[e.jsx(G,{className:"size-4"}),"Agents"]}),e.jsxs(h,{variant:r?"outline":"ghost",onClick:()=>j({kind:"team"}),children:[e.jsx(H,{className:"size-4"}),"Teams"]})]}),e.jsxs(h,{variant:"outline",disabled:!x,onClick:()=>j({create:r?"team":"agent"}),children:[e.jsx(X,{className:"size-4"}),r?"Create team":"Create agent"]}),e.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto",children:(r?y.data:g.data)?.map(u=>e.jsx("button",{type:"button",className:w("flex h-8 w-full items-center rounded-md px-2 text-left text-body-sm hover:bg-row-hover",u.name===c&&Y),onClick:()=>j({kind:r?"team":"agent",name:u.name}),children:e.jsx("span",{className:"truncate",children:u.name})},u.name))})]}),e.jsx("main",{className:"min-w-0 flex-1 overflow-auto p-6",children:x?g.error||y.error||d.error?e.jsxs("div",{role:"alert",children:[e.jsx("p",{className:"text-danger",children:g.error?.message||y.error?.message||d.error?.message}),e.jsx(h,{variant:"outline",onClick:()=>{g.refetch(),y.refetch(),d.refetch()},children:"Retry"})]}):v?r?e.jsx(B,{onSaved:N},"create-team"):e.jsx(T,{creating:!0,onSaved:N},"create-agent"):c&&d.isLoading?e.jsx("p",{"aria-live":"polite",children:"Loading details…"}):c&&d.data?r?e.jsx(B,{team:d.data,onSaved:N},c):e.jsx(T,{profile:d.data,creating:!1,onSaved:N},`${c}:${d.data.source}`):e.jsxs("div",{children:[e.jsx("h2",{className:"text-title",children:r?"Reusable teams":"Reusable agents"}),e.jsx("p",{className:"mt-2 text-body text-ink-muted",children:"Select a definition to view or edit it. A new chat does not change its definition."})]}):e.jsxs("div",{"aria-live":"polite",className:"space-y-3 text-body-sm",children:[e.jsx("p",{children:p.isLoading?"Connecting to the backend…":p.error?p.error.message:"Update the backend to manage reusable agents and teams. Saved chats are unchanged."}),e.jsx(h,{variant:"outline",onClick:()=>void p.refetch(),children:"Retry connection"})]})})]})}export{me as AgentsPage};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./legacy-agents-page-BR_oPhtA.js","./index-VKe88JN9.js","./index-FjyWTJXV.css","./index-BhRzR-VW.js","./aida-control-DVTI-DZP.js","./ui-preferences-store-DjUQd2R7.js","./textarea-BX6EeK34.js","./error-boundary-DVk48CIF.js","./console-mirror-CG9RcMIb.js","./console-mirror-DOrYoP_4.css","./index-CSPo12AE.css","./page-header-B3RA2AMB.js","./settings-section-D3WEX0WK.js","./org-surface-gate-_kP5Dpsg.js","./use-memberships-query-CSOmeH29.js","./radient-auth-buttons-gtgUk3ts.js"])))=>i.map(i=>d[i]);
2
+ import{u as O,a as Q,b as J,c as V,d as W,B as G,U as H,P as X,r as Y,_ as Z,e as $}from"./index-BhRzR-VW.js";import{j as e,r as n,c as w}from"./index-VKe88JN9.js";import{u as ee,d as te,a as ae,b as se,c as z,e as L}from"./aida-control-DVTI-DZP.js";import{B as h}from"./textarea-BX6EeK34.js";import"./ui-preferences-store-DjUQd2R7.js";import"./error-boundary-DVk48CIF.js";import"./console-mirror-CG9RcMIb.js";const ne=n.lazy(()=>Z(()=>import("./legacy-agents-page-BR_oPhtA.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),import.meta.url).then(t=>({default:t.LegacyAgentsPage}))),m="w-full rounded-md border border-control bg-surface px-3 py-2 text-body-sm text-ink";function T({profile:t,creating:E,onSaved:b}){const[j,r]=n.useState(!1),[v,c]=n.useState(E),[p,x]=n.useState(t?.name??""),[g,y]=n.useState(t?.kind??"role"),[P,d]=n.useState(t?.description??""),[N,u]=n.useState(t?.instructions??""),[_,D]=n.useState(t?.tools?.join(", ")??""),[I,k]=n.useState(t?.effort??"inherit"),[U,R]=n.useState(t?.delegate??!1),[f,a]=n.useState(!1),[o,l]=n.useState(null),i=n.useRef(null),C=$(),S=E||j,K=async s=>{if(s.preventDefault(),f)return;const M={kind:g,description:P,instructions:N,tools:_.split(",").map(q=>q.trim()).filter(Boolean),effort:I,delegate:U},A=JSON.stringify({name:p,fields:M,fresh:S});if(i.current&&i.current.body!==A){l("The previous save has not been confirmed. Retry it unchanged or reload the profile to reconcile before editing again.");return}i.current??={id:crypto.randomUUID(),body:A},a(!0),l(null);try{const q=await L({op:S?"profiles.create":"profiles.update",requestId:i.current.id,name:p,fields:M});i.current=null,c(!1),b(q.name)}catch(q){l(q instanceof Error?q.message:"Profile could not be saved.")}finally{a(!1)}},F=async()=>{if(!(!t||f)){a(!0),l(null);try{const s=await L({op:"profiles.install",name:t.name,requestId:crypto.randomUUID()});c(!1),r(!1),i.current=null,x(s.name),y(s.kind),d(s.description??""),u(s.instructions??""),D(s.tools?.join(", ")??""),k(s.effort??"inherit"),R(s.delegate??!1),b(s.name)}catch(s){l(s instanceof Error?s.message:"Profile could not be installed.")}finally{a(!1)}}};return e.jsxs("div",{className:"max-w-3xl space-y-6",children:[e.jsxs("header",{children:[e.jsx("h1",{className:"text-title",children:S?j?"Extend agent":"Create agent":t?.name}),e.jsx("p",{className:"mt-2 text-body-sm text-ink-muted",children:"Reusable instructions shared by agent commands, subagents and teams. Chats remain separate."})]}),t&&!S&&e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs("span",{className:"text-meta text-ink-muted",children:[t.source==="builtin"?"Built-in":t.source==="installed"?"Installed":"Custom",t.divergent_fields?.length?" · Modified":""," ·"," ",t.kind]}),t.source==="builtin"?e.jsx(h,{variant:"outline",onClick:F,disabled:f,children:"Install"}):e.jsx(h,{variant:"outline",onClick:()=>c(!0),children:"Edit"}),e.jsx(h,{variant:"outline",onClick:()=>{r(!0),c(!0),x(""),i.current=null},children:"Extend"}),e.jsx(h,{onClick:()=>{z.getState().stageDraft({kind:"agent",name:t.name}),C("/chat")},children:"New chat"})]}),o&&e.jsx("p",{role:"alert",className:"text-body-sm text-danger",children:o}),!v&&t?.source==="builtin"&&e.jsx("p",{id:"builtin-readonly",className:"text-body-sm text-ink-muted",children:"Built-in agents are read-only. Install this one to edit it, or Extend it to start a separate agent from its instructions."}),e.jsxs("form",{onSubmit:K,className:"space-y-4",children:[e.jsxs("fieldset",{disabled:!v||f,className:"space-y-4",children:[e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Name"}),e.jsx("input",{className:m,value:p,disabled:!S,required:!0,"aria-describedby":t?.source==="builtin"?"builtin-readonly":void 0,onChange:s=>x(s.target.value)})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Kind"}),e.jsxs("select",{className:m,value:g,disabled:!S,onChange:s=>y(s.target.value),children:[e.jsx("option",{value:"role",children:"Role"}),e.jsx("option",{value:"specialist",children:"Specialist"})]})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"When to use this agent"}),e.jsx("input",{className:m,value:P,maxLength:8e3,onChange:s=>d(s.target.value)})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Instructions"}),e.jsx("textarea",{className:w(m,"min-h-52"),value:N,required:!0,maxLength:8e3,onChange:s=>u(s.target.value)})]}),g==="role"&&e.jsxs(e.Fragment,{children:[e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Allowed tools"}),e.jsx("input",{className:m,value:_,onChange:s=>D(s.target.value),placeholder:"All tools when empty; otherwise comma-separated names"})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Effort tier"}),e.jsx("input",{className:m,value:I,onChange:s=>k(s.target.value),"aria-describedby":"effort-help"}),e.jsx("span",{id:"effort-help",className:"text-meta text-ink-muted",children:"Use inherit, or a tier configured in backend settings. Unsupported tiers are rejected before saving."})]}),e.jsxs("label",{className:"flex cursor-pointer items-center gap-2 text-body-sm",children:[e.jsx("input",{type:"checkbox",checked:U,onChange:s=>R(s.target.checked)}),"May delegate to subagents"]})]})]}),v&&e.jsx(h,{type:"submit",disabled:f,children:f?"Saving…":S?"Create agent":"Save changes"})]}),!v&&t?.packaged_instructions&&t.divergent_fields?.length?e.jsxs("details",{className:"text-body-sm",children:[e.jsx("summary",{children:"Compare packaged instructions"}),e.jsx("pre",{className:"mt-2 whitespace-pre-wrap text-body-sm text-ink-muted",children:t.packaged_instructions})]}):null]})}function B({team:t,onSaved:E}){const[b,j]=n.useState(t?.name??""),[r,v]=n.useState(t?.description??""),[c,p]=n.useState(t?.manager??"manager"),[x,g]=n.useState((t?.members??[]).map(a=>({...a,key:crypto.randomUUID()}))),[y,P]=n.useState(t?.instructions??""),[d,N]=n.useState(t?.project??""),[u,_]=n.useState(!1),[D,I]=n.useState(null),k=n.useRef(null),U=$(),R=async a=>{if(a.preventDefault(),u)return;const o={name:b,description:r,manager:c,members:x.map(({key:i,...C})=>C),instructions:y,project:d},l=JSON.stringify(o);if(k.current&&k.current.body!==l){I("The previous save has not been confirmed. Reload the team before changing that request.");return}k.current??={id:crypto.randomUUID(),body:l},_(!0),I(null);try{const i=t?await L({op:"teams.update",name:t.name,requestId:k.current.id,fields:o}):await L({op:"teams.create",requestId:k.current.id,fields:o});k.current=null,E(i.name)}catch(i){I(i instanceof Error?i.message:"Team could not be saved.")}finally{_(!1)}},f=(a,o)=>g(l=>l.map((i,C)=>C===a?{...i,...o}:i));return e.jsxs("div",{className:"max-w-3xl space-y-6",children:[e.jsxs("header",{children:[e.jsx("h1",{className:"text-title",children:t?t.name:"Create team"}),e.jsx("p",{className:"mt-2 text-body-sm text-ink-muted",children:"The manager leads the chat. Members retain their own instructions and start only when delegated work."})]}),t&&e.jsx(h,{onClick:()=>{z.getState().stageDraft({kind:"team",name:t.name}),U("/chat")},children:"New team chat"}),D&&e.jsx("p",{role:"alert",className:"text-body-sm text-danger",children:D}),e.jsxs("form",{onSubmit:R,className:"space-y-4",children:[e.jsxs("fieldset",{disabled:u,className:"space-y-4",children:[e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Name"}),e.jsx("input",{className:m,required:!0,maxLength:64,value:b,onChange:a=>j(a.target.value)})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Description"}),e.jsx("input",{className:m,value:r,onChange:a=>v(a.target.value)})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Manager agent"}),e.jsx("input",{className:m,required:!0,value:c,onChange:a=>p(a.target.value)})]}),e.jsxs("section",{className:"space-y-2",children:[e.jsx("h2",{className:"text-heading",children:"Members"}),x.map((a,o)=>e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("input",{className:w(m,"w-48 flex-1"),"aria-label":`Member ${o+1} name`,required:!0,value:a.role,onChange:l=>f(o,{role:l.target.value})}),e.jsxs("select",{className:w(m,"w-32"),"aria-label":`Member ${o+1} kind`,value:a.kind,onChange:l=>f(o,{kind:l.target.value}),children:[e.jsx("option",{value:"agent",children:"Agent"}),e.jsx("option",{value:"team",children:"Nested team"})]}),e.jsx("input",{className:w(m,"w-20"),"aria-label":`Member ${o+1} count`,type:"number",min:1,max:16,value:a.count,onChange:l=>f(o,{count:Number(l.target.value)})}),e.jsx(h,{type:"button",variant:"ghost",onClick:()=>g(l=>l.filter((i,C)=>C!==o)),children:"Remove"})]},a.key)),e.jsx(h,{type:"button",variant:"outline",onClick:()=>g(a=>[...a,{role:"",count:1,kind:"agent",key:crypto.randomUUID()}]),children:"Add member"})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Collaboration instructions"}),e.jsx("textarea",{className:w(m,"min-h-36"),maxLength:8e3,value:y,onChange:a=>P(a.target.value)})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Project brief"}),e.jsx("textarea",{className:w(m,"min-h-36"),maxLength:8e3,value:d,onChange:a=>N(a.target.value)})]})]}),e.jsx(h,{type:"submit",disabled:u,children:u?"Saving…":t?"Save team":"Create team"})]})]})}function me(){const t=O(),{agentId:E}=Q(),[b,j]=J(),r=b.get("kind")==="team"||b.get("create")==="team",v=b.has("create"),c=b.get("name"),p=ee(),x=te(p.data,r?"team_catalogue":"profile_catalogue"),g=V(x&&!r),y=W(x&&r),P=ae(),d=se({queryKey:["desktop",r?"team":"profile",c],enabled:x&&!!c&&!v,queryFn:()=>L({op:r?"teams.get":"profiles.get",name:c??""}),retry:!1}),N=async u=>{await P.invalidateQueries({queryKey:["desktop"]}),j({kind:r?"team":"agent",name:u})};return E?e.jsx(n.Suspense,{fallback:e.jsx("p",{className:"p-6 text-body",children:"Loading saved agent…"}),children:e.jsx(ne,{})}):e.jsxs("div",{className:"flex h-full min-h-0 bg-canvas text-ink",children:[e.jsxs("aside",{ref:t,className:"flex w-64 shrink-0 flex-col gap-4 border-r border-hairline bg-surface p-4",children:[e.jsx("h1",{className:"text-heading",children:"Agents and teams"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(h,{variant:r?"ghost":"outline",onClick:()=>j({kind:"agent"}),children:[e.jsx(G,{className:"size-4"}),"Agents"]}),e.jsxs(h,{variant:r?"outline":"ghost",onClick:()=>j({kind:"team"}),children:[e.jsx(H,{className:"size-4"}),"Teams"]})]}),e.jsxs(h,{variant:"outline",disabled:!x,onClick:()=>j({create:r?"team":"agent"}),children:[e.jsx(X,{className:"size-4"}),r?"Create team":"Create agent"]}),e.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto",children:(r?y.data:g.data)?.map(u=>e.jsx("button",{type:"button",className:w("flex h-8 w-full items-center rounded-md px-2 text-left text-body-sm hover:bg-row-hover",u.name===c&&Y),onClick:()=>j({kind:r?"team":"agent",name:u.name}),children:e.jsx("span",{className:"truncate",children:u.name})},u.name))})]}),e.jsx("main",{className:"min-w-0 flex-1 overflow-auto p-6",children:x?g.error||y.error||d.error?e.jsxs("div",{role:"alert",children:[e.jsx("p",{className:"text-danger",children:g.error?.message||y.error?.message||d.error?.message}),e.jsx(h,{variant:"outline",onClick:()=>{g.refetch(),y.refetch(),d.refetch()},children:"Retry"})]}):v?r?e.jsx(B,{onSaved:N},"create-team"):e.jsx(T,{creating:!0,onSaved:N},"create-agent"):c&&d.isLoading?e.jsx("p",{"aria-live":"polite",children:"Loading details…"}):c&&d.data?r?e.jsx(B,{team:d.data,onSaved:N},c):e.jsx(T,{profile:d.data,creating:!1,onSaved:N},`${c}:${d.data.source}`):e.jsxs("div",{children:[e.jsx("h2",{className:"text-title",children:r?"Reusable teams":"Reusable agents"}),e.jsx("p",{className:"mt-2 text-body text-ink-muted",children:"Select a definition to view or edit it. A new chat does not change its definition."})]}):e.jsxs("div",{"aria-live":"polite",className:"space-y-3 text-body-sm",children:[e.jsx("p",{children:p.isLoading?"Connecting to the backend…":p.error?p.error.message:"Update the backend to manage reusable agents and teams. Saved chats are unchanged."}),e.jsx(h,{variant:"outline",onClick:()=>void p.refetch(),children:"Retry connection"})]})})]})}export{me as AgentsPage};