local-operator-ui 0.29.7 → 0.29.9

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 (71) hide show
  1. package/out/main/index.js +172 -17
  2. package/out/renderer/assets/{_basePickBy-DcTwJYO_.js → _basePickBy-C6Zpso0Q.js} +1 -1
  3. package/out/renderer/assets/{_baseUniq-DvPSd9xZ.js → _baseUniq-C1DyLv6t.js} +1 -1
  4. package/out/renderer/assets/{agent-details-page-DnhScOnI.js → agent-details-page-B5SKXAv5.js} +1 -1
  5. package/out/renderer/assets/{agent-hub-page-BQ4Wcnxb.js → agent-hub-page-D64F7S88.js} +1 -1
  6. package/out/renderer/assets/{agents-page-BCsceEiI.js → agents-page-BJK0Pq9n.js} +2 -2
  7. package/out/renderer/assets/{arc-CDMjXyzV.js → arc-C5QSgRE-.js} +1 -1
  8. package/out/renderer/assets/{architectureDiagram-IEHRJDOE-DAy3J7qv.js → architectureDiagram-IEHRJDOE-_1BluMs5.js} +1 -1
  9. package/out/renderer/assets/{blockDiagram-JOT3LUYC-THM4jJLl.js → blockDiagram-JOT3LUYC-CGBO2CqU.js} +1 -1
  10. package/out/renderer/assets/browser-page-BwHs3-XU.js +1 -0
  11. package/out/renderer/assets/{browser-webauthn-prompt-CsnZvLQM.js → browser-webauthn-prompt-Bku2Q0DD.js} +1 -1
  12. package/out/renderer/assets/{c4Diagram-VJAJSXHY-DmKqFqN2.js → c4Diagram-VJAJSXHY-CTzOtZaJ.js} +1 -1
  13. package/out/renderer/assets/channel-Df29J43d.js +1 -0
  14. package/out/renderer/assets/{chunk-4BMEZGHF-CTvxe0Qv.js → chunk-4BMEZGHF-D4V7GOyK.js} +1 -1
  15. package/out/renderer/assets/{chunk-A2AXSNBT-Bs0eNJeb.js → chunk-A2AXSNBT-C2JjWyq4.js} +1 -1
  16. package/out/renderer/assets/{chunk-AEK57VVT-7zo4HKxz.js → chunk-AEK57VVT-i5O0M59b.js} +1 -1
  17. package/out/renderer/assets/{chunk-D6G4REZN-CujTp3N4.js → chunk-D6G4REZN-CQ-FSZuM.js} +1 -1
  18. package/out/renderer/assets/{chunk-RZ5BOZE2-DagQiTA1.js → chunk-RZ5BOZE2-BwQQ0vAi.js} +1 -1
  19. package/out/renderer/assets/{chunk-XZIHB7SX-EUyPfdjE.js → chunk-XZIHB7SX-DhDwyjwr.js} +1 -1
  20. package/out/renderer/assets/classDiagram-GIVACNV2-svv09F8A.js +1 -0
  21. package/out/renderer/assets/classDiagram-v2-COTLJTTW-svv09F8A.js +1 -0
  22. package/out/renderer/assets/clone-B2YTR_FA.js +1 -0
  23. package/out/renderer/assets/{compact-pagination-4Yt2xb-Y.js → compact-pagination-CkriC8GH.js} +1 -1
  24. package/out/renderer/assets/{dagre-OKDRZEBW-CE_XdZbQ.js → dagre-OKDRZEBW-DdcDClZN.js} +1 -1
  25. package/out/renderer/assets/{diagram-SSKATNLV-Ptt_uQaX.js → diagram-SSKATNLV-Bg_QnBVO.js} +1 -1
  26. package/out/renderer/assets/{diagram-VNBRO52H-DUi-Kwq3.js → diagram-VNBRO52H-CPziysfK.js} +1 -1
  27. package/out/renderer/assets/{erDiagram-Q7BY3M3F-rWuUD2VL.js → erDiagram-Q7BY3M3F-_ol5WsYH.js} +1 -1
  28. package/out/renderer/assets/{flowDiagram-4HSFHLVR-DggskyIO.js → flowDiagram-4HSFHLVR-Bmu20sRQ.js} +1 -1
  29. package/out/renderer/assets/{ganttDiagram-APWFNJXF-BjyQcRgJ.js → ganttDiagram-APWFNJXF-DzIMMuhC.js} +1 -1
  30. package/out/renderer/assets/{gitGraphDiagram-7IBYFJ6S-D73cnsKt.js → gitGraphDiagram-7IBYFJ6S-B-OgztQz.js} +1 -1
  31. package/out/renderer/assets/{graph-Blj6eB_I.js → graph-B_JuzgF_.js} +1 -1
  32. package/out/renderer/assets/{icon-B19NuJYm.js → icon-BeTB53O2.js} +9 -9
  33. package/out/renderer/assets/icon-C7JJ2uBI.css +1 -0
  34. package/out/renderer/assets/{index-C3_lkDT_.js → index-BPazDpDx.js} +1 -1
  35. package/out/renderer/assets/{index-CanR4Tr_.js → index-BWYtIPrm.js} +383 -378
  36. package/out/renderer/assets/{index-Ci7qsPse.js → index-BukjYK9S.js} +1 -1
  37. package/out/renderer/assets/{infoDiagram-PH2N3AL5-CZhLBS28.js → infoDiagram-PH2N3AL5-Bi062Ijx.js} +1 -1
  38. package/out/renderer/assets/{installer-DL2KRfdq.js → installer-Cf6g2y9a.js} +1 -1
  39. package/out/renderer/assets/{journeyDiagram-U35MCT3I-C9vwvYUe.js → journeyDiagram-U35MCT3I-BDtZIJa2.js} +1 -1
  40. package/out/renderer/assets/{kanban-definition-NDS4AKOZ-noOVueME.js → kanban-definition-NDS4AKOZ-DnZ6Y5H5.js} +1 -1
  41. package/out/renderer/assets/{layout-BO2FtYI8.js → layout-Ca77fqmE.js} +1 -1
  42. package/out/renderer/assets/{legacy-agents-page-CpvPE5Y4.js → legacy-agents-page-Chbmzrq4.js} +1 -1
  43. package/out/renderer/assets/{mermaid.core-BylrYsTL.js → mermaid.core-BkcuejWg.js} +5 -5
  44. package/out/renderer/assets/{mindmap-definition-ALO5MXBD-BCMhPSkA.js → mindmap-definition-ALO5MXBD-BSewSz0i.js} +1 -1
  45. package/out/renderer/assets/{page-header-D1a45b0y.js → page-header-B9ZaEm1G.js} +1 -1
  46. package/out/renderer/assets/{parseISO-BtKaZLD8.js → parseISO-DtZurrLZ.js} +1 -1
  47. package/out/renderer/assets/{pieDiagram-IB7DONF6-rcahe9BM.js → pieDiagram-IB7DONF6-BkAZXmpD.js} +1 -1
  48. package/out/renderer/assets/{quadrantDiagram-7GDLP6J5-DxyeVGPJ.js → quadrantDiagram-7GDLP6J5-DbuM9Vo7.js} +1 -1
  49. package/out/renderer/assets/{radar-MK3ICKWK-nm5lycWc.js → radar-MK3ICKWK-CHIyxMEL.js} +1 -1
  50. package/out/renderer/assets/{radient-auth-buttons-Ctvl_4_t.js → radient-auth-buttons-DAhpbmde.js} +1 -1
  51. package/out/renderer/assets/{requirementDiagram-KVF5MWMF-CRS0W_DU.js → requirementDiagram-KVF5MWMF-D3Uob2JK.js} +1 -1
  52. package/out/renderer/assets/{sankeyDiagram-QLVOVGJD-CQL_jB_D.js → sankeyDiagram-QLVOVGJD-CJCHGLBa.js} +1 -1
  53. package/out/renderer/assets/{schedules-page-DMy2NLrj.js → schedules-page-BrJT9xxG.js} +1 -1
  54. package/out/renderer/assets/{sequenceDiagram-X6HHIX6F-CLZ4yPPV.js → sequenceDiagram-X6HHIX6F-Dez-Y-IR.js} +1 -1
  55. package/out/renderer/assets/settings-page-DLhpz6kA.js +317 -0
  56. package/out/renderer/assets/{stateDiagram-DGXRK772-Bx_8B6PV.js → stateDiagram-DGXRK772-CZ4fm__h.js} +1 -1
  57. package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-DQcOVGs7.js +1 -0
  58. package/out/renderer/assets/{timeline-definition-BDJGKUSR-D2TdXm7n.js → timeline-definition-BDJGKUSR-DERFLdV1.js} +1 -1
  59. package/out/renderer/assets/{use-agent-like-mutation-C-7u11gk.js → use-agent-like-mutation-DUtwAxLu.js} +1 -1
  60. package/out/renderer/assets/{xychartDiagram-VJFVF3MP-ncq15Qkv.js → xychartDiagram-VJFVF3MP-BKGu1d8V.js} +1 -1
  61. package/out/renderer/index.html +3 -3
  62. package/out/renderer/installer.html +3 -3
  63. package/package.json +2 -2
  64. package/out/renderer/assets/browser-page-BkOVSS3V.js +0 -1
  65. package/out/renderer/assets/channel-D5pOQ8_v.js +0 -1
  66. package/out/renderer/assets/classDiagram-GIVACNV2-C2odzhaf.js +0 -1
  67. package/out/renderer/assets/classDiagram-v2-COTLJTTW-C2odzhaf.js +0 -1
  68. package/out/renderer/assets/clone-Dzzjex5C.js +0 -1
  69. package/out/renderer/assets/icon-DryJ1IIw.css +0 -1
  70. package/out/renderer/assets/settings-page-D5Dxhcm-.js +0 -317
  71. package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-CHFeLpR9.js +0 -1
package/out/main/index.js CHANGED
@@ -38,8 +38,16 @@ const path__namespace = /* @__PURE__ */ _interopNamespaceDefault(path$1);
38
38
  const https__namespace = /* @__PURE__ */ _interopNamespaceDefault(https);
39
39
  const icon = path.join(__dirname, "../../resources/icon.png");
40
40
  const BACKEND_STATUS_CHANNEL = "backend-status";
41
+ const DAEMON_PAIRED = { available: true, cause: null };
42
+ const DAEMON_UNPAIRED = {
43
+ available: false,
44
+ cause: "unpaired"
45
+ };
41
46
  const BACKEND_STATUS_EVENT = "backend-status-changed";
42
47
  const BACKEND_RECONNECT_CHANNEL = "backend-reconnect";
48
+ function relayNeedsRebuild(current, next) {
49
+ return current.url !== next.url || current.token !== next.token;
50
+ }
43
51
  const id$1 = zod.z.string().min(1).max(128).regex(/^[a-zA-Z0-9_-]+$/);
44
52
  const settingKey = zod.z.string().min(1).max(256).regex(/^[a-zA-Z0-9_][a-zA-Z0-9_.-]*$/);
45
53
  const secret = zod.z.string().min(1).max(32768);
@@ -1024,6 +1032,51 @@ const desktopRequestSchema = zod.z.discriminatedUnion("op", [
1024
1032
  value: secret
1025
1033
  }).strict()
1026
1034
  ]);
1035
+ const DESKTOP_REFUSAL_CODE = {
1036
+ /**
1037
+ * This app holds no token for the daemon it can see, so main refused to send
1038
+ * the request at all. A PAIRING condition: the daemon never answered.
1039
+ */
1040
+ noCredential: "pairing.no-credential",
1041
+ /**
1042
+ * A 401/403 from a `/v1/desktop/` route: the daemon answered and refused this
1043
+ * app's bearer. Re-claiming is the repair that exists, so it is a pairing
1044
+ * condition and not a version one.
1045
+ */
1046
+ refused: "pairing.refused",
1047
+ /**
1048
+ * A 503 from a `/v1/desktop/` route that the app did NOT author: the daemon is
1049
+ * running with its desktop plane shut (no claim accepted, no environment
1050
+ * token), which is what a successor answers with until the app claims it.
1051
+ */
1052
+ planeClosed: "pairing.plane-closed",
1053
+ /**
1054
+ * Main could not complete the request at all (a refused socket, a reset). NOT a
1055
+ * pairing condition - nothing was established about the daemon's plane - and it
1056
+ * carries its own authored sentence.
1057
+ */
1058
+ transportFailed: "transport.failed"
1059
+ };
1060
+ const DESKTOP_MACHINE_DETAIL = {
1061
+ /*
1062
+ * NOTE for whoever greps for the ownership instruction this change removed:
1063
+ * `noCredential` still READS like that sentence, and deliberately. The code is
1064
+ * what `userFacingMessage` keys on, so this string is never rendered; it exists
1065
+ * because the development proxy forwards a refusal body without declaring one,
1066
+ * and `mcp-failure.ts` has to recognise main's own 503 by its text there. It is
1067
+ * a machine vocabulary, not copy - which is why the sentence a user reads comes
1068
+ * from `userFacingMessage` and this one is only ever compared (review round 1,
1069
+ * NIT-5).
1070
+ */
1071
+ noCredential: "Restart with a desktop-managed backend to use these controls.",
1072
+ transportFailed: "The backend could not complete this request. Check its connection and try again."
1073
+ };
1074
+ function desktopRefusalCodeForStatus(path2, status2) {
1075
+ if (!path2.startsWith("/v1/desktop/")) return void 0;
1076
+ if (status2 === 401 || status2 === 403) return DESKTOP_REFUSAL_CODE.refused;
1077
+ if (status2 === 503) return DESKTOP_REFUSAL_CODE.planeClosed;
1078
+ return void 0;
1079
+ }
1027
1080
  const DESKTOP_MESSAGE_BYTE_BUDGET = 88e4;
1028
1081
  const DESKTOP_CONTROL_BYTE_BUDGET = 262144;
1029
1082
  const DESKTOP_SYSTEM_PROMPT_BYTE_BUDGET = 11e5;
@@ -2335,6 +2388,8 @@ async function claimDesktopPlane(address, claimKey, options = {}) {
2335
2388
  if (response.status === 409)
2336
2389
  return { outcome: "already-claimed", status: 409 };
2337
2390
  if (response.status === 401) return { outcome: "wrong-key", status: 401 };
2391
+ if (response.status === 404)
2392
+ return { outcome: "no-handshake", status: 404 };
2338
2393
  return {
2339
2394
  outcome: "refused",
2340
2395
  status: response.status,
@@ -4461,7 +4516,8 @@ async function requestDesktopMediaOutcome(input, bytes, backendUrl, token) {
4461
4516
  response: {
4462
4517
  status: 503,
4463
4518
  kind: "error",
4464
- detail: "Restart with a desktop-managed backend to use these controls."
4519
+ detail: DESKTOP_MACHINE_DETAIL.noCredential,
4520
+ code: DESKTOP_REFUSAL_CODE.noCredential
4465
4521
  },
4466
4522
  answered: false
4467
4523
  };
@@ -4530,7 +4586,15 @@ async function requestDesktopMediaOutcome(input, bytes, backendUrl, token) {
4530
4586
  }
4531
4587
  }
4532
4588
  return {
4533
- response: { status: response.status, kind: "error", detail },
4589
+ response: {
4590
+ status: response.status,
4591
+ kind: "error",
4592
+ detail,
4593
+ // Only a path the plane has to ADMIT makes the status a pairing fact:
4594
+ // `speech.create` and `agent.export` are outside `/v1/desktop/`, where a
4595
+ // 503 is that route's own failure and not this app's pairing.
4596
+ code: desktopRefusalCodeForStatus(target2.path, response.status)
4597
+ },
4534
4598
  answered: true
4535
4599
  };
4536
4600
  }
@@ -4570,7 +4634,8 @@ async function requestDesktopMediaOutcome(input, bytes, backendUrl, token) {
4570
4634
  response: {
4571
4635
  status: 503,
4572
4636
  kind: "error",
4573
- detail: "The backend could not complete this request. Check its connection and try again."
4637
+ detail: DESKTOP_MACHINE_DETAIL.transportFailed,
4638
+ code: DESKTOP_REFUSAL_CODE.transportFailed
4574
4639
  },
4575
4640
  /*
4576
4641
  * Survives the catch for the same reason as its JSON twin, and with the same
@@ -4814,7 +4879,10 @@ async function requestDesktopOutcome(input, backendUrl, token) {
4814
4879
  response: {
4815
4880
  status: 503,
4816
4881
  body: {
4817
- detail: "Restart with a desktop-managed backend to use these controls."
4882
+ detail: {
4883
+ code: DESKTOP_REFUSAL_CODE.noCredential,
4884
+ message: DESKTOP_MACHINE_DETAIL.noCredential
4885
+ }
4818
4886
  }
4819
4887
  },
4820
4888
  answered: false
@@ -4876,7 +4944,10 @@ async function requestDesktopOutcome(input, backendUrl, token) {
4876
4944
  response: {
4877
4945
  status: 503,
4878
4946
  body: {
4879
- detail: "The backend could not complete this request. Check its connection and try again."
4947
+ detail: {
4948
+ code: DESKTOP_REFUSAL_CODE.transportFailed,
4949
+ message: DESKTOP_MACHINE_DETAIL.transportFailed
4950
+ }
4880
4951
  }
4881
4952
  },
4882
4953
  /*
@@ -5286,7 +5357,14 @@ class DaemonStateMachine {
5286
5357
  identity = null;
5287
5358
  failures = 0;
5288
5359
  capabilityStatus = null;
5289
- desktopAvailable = false;
5360
+ /**
5361
+ * Whether this app is paired with the daemon it can see, and why not when it
5362
+ * is not. ONE field rather than the pair it used to be (`desktopAvailable`,
5363
+ * written `true` at three sites and `false` at none): the value and its cause
5364
+ * are one fact, and a producer that can only set half of it is how the app
5365
+ * went on claiming a pairing a successor had already destroyed.
5366
+ */
5367
+ pairing = DAEMON_UNPAIRED;
5290
5368
  detail = "Looking for a Local Operator daemon.";
5291
5369
  updatedAt;
5292
5370
  detachedSince = null;
@@ -5305,6 +5383,7 @@ class DaemonStateMachine {
5305
5383
  this.backoffMs = REATTACH_BACKOFF_MS;
5306
5384
  this.state = "attached";
5307
5385
  this.detail = `Connected to the daemon on ${identity.url} (pid ${identity.pid}, v${identity.version}).`;
5386
+ this.pairing = DAEMON_PAIRED;
5308
5387
  this.updatedAt = this.now();
5309
5388
  }
5310
5389
  /** This app started a successor for a daemon it owns. */
@@ -5314,9 +5393,15 @@ class DaemonStateMachine {
5314
5393
  this.detail = `Started a replacement daemon on ${identity.url} (pid ${identity.pid}).`;
5315
5394
  this.updatedAt = this.now();
5316
5395
  }
5317
- /** Record a capability answer - never a liveness answer. */
5318
- setDesktopAvailable(available) {
5319
- this.desktopAvailable = available;
5396
+ /**
5397
+ * Record this app's PAIRING with the daemon, cause and all.
5398
+ *
5399
+ * The replacement for `setDesktopAvailable(boolean)`, which could only ever be
5400
+ * called with `true` in practice and therefore could not report the one thing
5401
+ * the renderer needed: which fact made the app unusable (design § 1.4, § 5.2).
5402
+ */
5403
+ setPairing(pairing) {
5404
+ this.pairing = pairing;
5320
5405
  this.updatedAt = this.now();
5321
5406
  }
5322
5407
  /**
@@ -5564,7 +5649,11 @@ class DaemonStateMachine {
5564
5649
  version: this.identity?.version ?? null,
5565
5650
  prefix: this.identity?.prefix ?? null,
5566
5651
  installKind: this.identity?.installKind ?? null,
5567
- desktopAvailable: this.desktopAvailable,
5652
+ // DERIVED, never set independently: the pairing record is the value, and
5653
+ // this field is its boolean projection for the callers that only need the
5654
+ // bit. One assignment, so the two cannot disagree.
5655
+ desktopAvailable: this.pairing.available,
5656
+ pairing: this.pairing,
5568
5657
  failures: this.failures,
5569
5658
  capabilityStatus: this.capabilityStatus,
5570
5659
  /**
@@ -6675,6 +6764,20 @@ class BackendServiceManager {
6675
6764
  */
6676
6765
  feedRelay = null;
6677
6766
  feedRelayUrl = "";
6767
+ /**
6768
+ * The credential the current feed relay was built with.
6769
+ *
6770
+ * WHY IT IS TRACKED AT ALL, and the defect it stands for: the relay takes its
6771
+ * bearer ONCE, at construction, and a re-pair leaves the address unchanged
6772
+ * while replacing the credential - same port, new claim key. A rebuild keyed on
6773
+ * the URL alone therefore keeps a relay that 401s on every attempt, for good:
6774
+ * measured after the successor swap, the app was `attached` and paired with the
6775
+ * new daemon while the sidebar still rendered "Not connected to the backend -
6776
+ * showing the last known state." more than a minute later, and the same line
6777
+ * never cleared (QA round 1 Q-2, design round 1 D3). The stream relay next door
6778
+ * already compares the token; this one now does too.
6779
+ */
6780
+ feedRelayToken = null;
6678
6781
  /** Both survive relay recreation, so a URL rotation cannot silently detach
6679
6782
  * the banner path or leave the sidebar reading a stale connection state. */
6680
6783
  feedFrameObserver = null;
@@ -6788,7 +6891,10 @@ class BackendServiceManager {
6788
6891
  * backend-ready hook, which is the first moment the token exists.
6789
6892
  */
6790
6893
  getDesktopFeedRelay() {
6791
- if (!this.feedRelay || this.feedRelayUrl !== this.backendUrl) {
6894
+ if (!this.feedRelay || relayNeedsRebuild(
6895
+ { url: this.feedRelayUrl, token: this.feedRelayToken },
6896
+ { url: this.backendUrl, token: this.desktopToken }
6897
+ )) {
6792
6898
  this.feedRelay?.stop();
6793
6899
  this.feedRelay = new DesktopFeedRelay(
6794
6900
  this.backendUrl,
@@ -6812,6 +6918,7 @@ class BackendServiceManager {
6812
6918
  this.feedRelay.observe(this.feedFrameObserver);
6813
6919
  this.feedRelay.watchState(this.feedStateObserver);
6814
6920
  this.feedRelayUrl = this.backendUrl;
6921
+ this.feedRelayToken = this.desktopToken;
6815
6922
  }
6816
6923
  return this.feedRelay;
6817
6924
  }
@@ -7408,14 +7515,19 @@ class BackendServiceManager {
7408
7515
  async attachIfUsable(candidate) {
7409
7516
  const key = candidate.record.claim_key;
7410
7517
  if (!key && !this.desktopToken) {
7518
+ const governed = candidate.record.desktop;
7411
7519
  logger.info(
7412
- `Daemon ${candidate.address} publishes no claim key and this app holds no pairing token for it; not attaching (its controls would refuse every call).`,
7520
+ `Daemon ${candidate.address} publishes no claim key and this app holds no pairing token for it; not attaching (its controls would refuse every call).${governed ? " Its record says the plane is already governed by another program." : " Its record does not describe a governed plane, so it predates the pairing handshake."}`,
7413
7521
  LogFileType.BACKEND
7414
7522
  );
7523
+ this.daemonState.setPairing({
7524
+ available: false,
7525
+ cause: governed ? "governed-elsewhere" : "pre-handshake"
7526
+ });
7415
7527
  this.daemonState.observe({
7416
7528
  kind: "capability",
7417
7529
  status: 401,
7418
- detail: `A daemon is running at ${candidate.address}, but this app holds no credential for its desktop plane.`
7530
+ detail: governed ? `A daemon is running at ${candidate.address}, but its desktop plane is already managed by another program and this app holds no credential for it.` : `A daemon is running at ${candidate.address}, but it is older than the pairing handshake this app uses and this app holds no credential for it.`
7419
7531
  });
7420
7532
  this.notifyStatus();
7421
7533
  return false;
@@ -7439,11 +7551,40 @@ class BackendServiceManager {
7439
7551
  );
7440
7552
  break;
7441
7553
  case "wrong-key":
7554
+ logger.info(
7555
+ `Daemon ${candidate.address} did not accept the claim key its own record published (${outcome.outcome}); the record belongs to a process that is no longer answering. Not attaching.`,
7556
+ LogFileType.BACKEND
7557
+ );
7558
+ this.daemonState.setPairing({
7559
+ available: false,
7560
+ cause: "successor"
7561
+ });
7562
+ return false;
7563
+ case "no-handshake":
7564
+ logger.info(
7565
+ `Daemon ${candidate.address} has no claim route (HTTP ${outcome.status}); it predates the pairing handshake. Not attaching.`,
7566
+ LogFileType.BACKEND
7567
+ );
7568
+ this.daemonState.setPairing({
7569
+ available: false,
7570
+ cause: "pre-handshake"
7571
+ });
7572
+ this.daemonState.observe({
7573
+ kind: "capability",
7574
+ status: outcome.status,
7575
+ detail: `A daemon is running at ${candidate.address}, but it is older than the pairing handshake this app uses (its claim route answered HTTP ${outcome.status}).`
7576
+ });
7577
+ this.notifyStatus();
7578
+ return false;
7442
7579
  case "refused":
7443
7580
  logger.info(
7444
- `Daemon ${candidate.address} did not accept this app's claim (${outcome.outcome}); not attaching.`,
7581
+ `Daemon ${candidate.address} did not accept this app's claim (${outcome.outcome} ${outcome.status}); not attaching.`,
7445
7582
  LogFileType.BACKEND
7446
7583
  );
7584
+ this.daemonState.setPairing({
7585
+ available: false,
7586
+ cause: outcome.status === 503 ? "pre-handshake" : "credential-refused"
7587
+ });
7447
7588
  return false;
7448
7589
  case "unreachable":
7449
7590
  logger.info(
@@ -7459,6 +7600,10 @@ class BackendServiceManager {
7459
7600
  `Daemon ${candidate.address} refused this app's bearer for its desktop plane (HTTP ${probe.status}); not attaching (it would refuse every session list and every stream).`,
7460
7601
  LogFileType.BACKEND
7461
7602
  );
7603
+ this.daemonState.setPairing({
7604
+ available: false,
7605
+ cause: "credential-refused"
7606
+ });
7462
7607
  this.daemonState.observe({
7463
7608
  kind: "capability",
7464
7609
  status: probe.status,
@@ -7547,7 +7692,7 @@ class BackendServiceManager {
7547
7692
  },
7548
7693
  { owned: false }
7549
7694
  );
7550
- this.daemonState.setDesktopAvailable(true);
7695
+ this.daemonState.setPairing(DAEMON_PAIRED);
7551
7696
  if (candidate.record.retiring_to) {
7552
7697
  this.daemonState.observe({
7553
7698
  kind: "build-announced",
@@ -7638,7 +7783,7 @@ class BackendServiceManager {
7638
7783
  },
7639
7784
  { owned: false }
7640
7785
  );
7641
- this.daemonState.setDesktopAvailable(true);
7786
+ this.daemonState.setPairing(DAEMON_PAIRED);
7642
7787
  logger.info(
7643
7788
  `Adopted a pre-record daemon at ${this.backendUrl} (v${version || "unknown"}) through the deprecated fallback.`,
7644
7789
  LogFileType.BACKEND
@@ -7915,7 +8060,7 @@ class BackendServiceManager {
7915
8060
  return;
7916
8061
  }
7917
8062
  this.daemonState.attach(identity, { owned: true });
7918
- this.daemonState.setDesktopAvailable(true);
8063
+ this.daemonState.setPairing(DAEMON_PAIRED);
7919
8064
  this.notifyStatus();
7920
8065
  logger.info(
7921
8066
  `Registered this app's own daemon: ${identity.url} (pid ${identity.pid}, v${identity.version || "unknown"}, ${identity.installKind || "kind unknown"}).`,
@@ -8368,6 +8513,16 @@ class BackendServiceManager {
8368
8513
  const probe = await probeIdentity(this.backendUrl, expected, {
8369
8514
  timeoutMs: PROBE_TIMEOUT_MS
8370
8515
  });
8516
+ const answersThisApp = probe.outcome === "identified" && probe.identity.pid === this.daemonState.snapshot().pid;
8517
+ const answeredAnotherProcess = probe.outcome === "identity-mismatch" || probe.outcome === "not-a-daemon" || probe.outcome === "identified";
8518
+ if (answersThisApp) {
8519
+ this.daemonState.setPairing(DAEMON_PAIRED);
8520
+ } else if (answeredAnotherProcess) {
8521
+ this.daemonState.setPairing({
8522
+ available: false,
8523
+ cause: "successor"
8524
+ });
8525
+ }
8371
8526
  switch (probe.outcome) {
8372
8527
  case "identified":
8373
8528
  return probe.identity.pid === this.daemonState.snapshot().pid ? { kind: "identified" } : {
@@ -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-DvPSd9xZ.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-BylrYsTL.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-C1DyLv6t.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-BkcuejWg.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-BylrYsTL.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-BkcuejWg.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{a as le,r as S,j as e,L as ce,T as G,B as l,S as L,l as te,m as q,n as _,h as v,X as de,o as w,A as J,i as V,k as X,c as Z}from"./icon-B19NuJYm.js";import{g as ae,as as ue,f as z,a4 as b,a6 as M,ar as O,at as I,au as me,av as he,aw as xe,ax as ge,ay as R,az as je,aA as se,aB as fe,h as ne,aC as ye,aD as pe,u as ve,ah as we,ap as be,aE as Ce,B as Ne,aF as Ae,aG as ke,aH as De,aj as Se,aI as Ee,aJ as ee,aq as Te,aK as Fe,aL as Pe}from"./index-CanR4Tr_.js";import{b as qe,i as _e,u as Le,a as ze}from"./use-agent-like-mutation-C-7u11gk.js";/**
1
+ import{a as le,r as S,j as e,L as ce,T as G,B as l,S as L,l as te,m as q,n as _,h as v,X as de,o as w,A as J,i as V,k as X,c as Z}from"./icon-BeTB53O2.js";import{g as ae,as as ue,f as z,a4 as b,a6 as M,ar as O,at as I,au as me,av as he,aw as xe,ax as ge,ay as R,az as je,aA as se,aB as fe,h as ne,aC as ye,aD as pe,u as ve,ah as we,ap as be,aE as Ce,B as Ne,aF as Ae,aG as ke,aH as De,aj as Se,aI as Ee,aJ as ee,aq as Te,aK as Fe,aL as Pe}from"./index-BWYtIPrm.js";import{b as qe,i as _e,u as Le,a as ze}from"./use-agent-like-mutation-DUtwAxLu.js";/**
2
2
  * @license lucide-react v0.507.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{a as ce,r,j as e,c as L,I as de,b as K,d as Y,e as $,f as q,g as B,B as C,h as c,A as ue,i as he,k as ge}from"./icon-B19NuJYm.js";import{a4 as G,ah as me,ai as xe,aj as fe,ak as be,al as Z,r as pe,am as ve,h as je,an as Ne,ao as we,ap as ye}from"./index-CanR4Tr_.js";import{C as Se}from"./compact-pagination-4Yt2xb-Y.js";import{P as ke}from"./page-header-D1a45b0y.js";import{u as Ce,a as Ae,b as Re,i as Ee}from"./use-agent-like-mutation-C-7u11gk.js";/**
1
+ import{a as ce,r,j as e,c as L,I as de,b as K,d as Y,e as $,f as q,g as B,B as C,h as c,A as ue,i as he,k as ge}from"./icon-BeTB53O2.js";import{a4 as G,ah as me,ai as xe,aj as fe,ak as be,al as Z,r as pe,am as ve,h as je,an as Ne,ao as we,ap as ye}from"./index-BWYtIPrm.js";import{C as Se}from"./compact-pagination-CkriC8GH.js";import{P as ke}from"./page-header-B9ZaEm1G.js";import{u as Ce,a as Ae,b as Re,i as Ee}from"./use-agent-like-mutation-DUtwAxLu.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-CpvPE5Y4.js","./icon-B19NuJYm.js","./icon-DryJ1IIw.css","./page-header-D1a45b0y.js","./index-CanR4Tr_.js","./index-D_SlEnpm.css","./radient-auth-buttons-Ctvl_4_t.js","./compact-pagination-4Yt2xb-Y.js"])))=>i.map(i=>d[i]);
2
- import{u as O,a as Q,b as J,d as V,c as W,e as G,f as H,g as X,B as Y,U as Z,P as ee,r as te,_ as ae,h as $,i as z,j as U}from"./index-CanR4Tr_.js";import{j as e,r as n,B as u,c as P}from"./icon-B19NuJYm.js";const se=n.lazy(()=>ae(()=>import("./legacy-agents-page-CpvPE5Y4.js"),__vite__mapDeps([0,1,2,3,4,5,6,7]),import.meta.url).then(t=>({default:t.LegacyAgentsPage}))),d="w-full rounded-md border border-control bg-surface px-3 py-2 text-body-sm text-ink";function T({profile:t,creating:v,onSaved:g}){const[r,k]=n.useState(!1),[o,m]=n.useState(v),[p,b]=n.useState(t?.name??""),[x,C]=n.useState(t?.kind??"role"),[h,y]=n.useState(t?.description??""),[j,S]=n.useState(t?.instructions??""),[_,D]=n.useState(t?.tools?.join(", ")??""),[I,N]=n.useState(t?.effort??"inherit"),[R,L]=n.useState(t?.delegate??!1),[f,a]=n.useState(!1),[c,l]=n.useState(null),i=n.useRef(null),w=$(),E=v||r,K=async s=>{if(s.preventDefault(),f)return;const M={kind:x,description:h,instructions:j,tools:_.split(",").map(q=>q.trim()).filter(Boolean),effort:I,delegate:R},A=JSON.stringify({name:p,fields:M,fresh:E});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 U({op:E?"profiles.create":"profiles.update",requestId:i.current.id,name:p,fields:M});i.current=null,m(!1),g(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 U({op:"profiles.install",name:t.name,requestId:crypto.randomUUID()});m(!1),k(!1),i.current=null,b(s.name),C(s.kind),y(s.description??""),S(s.instructions??""),D(s.tools?.join(", ")??""),N(s.effort??"inherit"),L(s.delegate??!1),g(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:E?r?"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&&!E&&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(u,{variant:"outline",onClick:F,disabled:f,children:"Install"}):e.jsx(u,{variant:"outline",onClick:()=>m(!0),children:"Edit"}),e.jsx(u,{variant:"outline",onClick:()=>{k(!0),m(!0),b(""),i.current=null},children:"Extend"}),e.jsx(u,{onClick:()=>{z.getState().stageDraft({kind:"agent",name:t.name}),w("/chat")},children:"New chat"})]}),c&&e.jsx("p",{role:"alert",className:"text-body-sm text-danger",children:c}),!o&&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:!o||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:d,value:p,disabled:!E,required:!0,"aria-describedby":t?.source==="builtin"?"builtin-readonly":void 0,onChange:s=>b(s.target.value)})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Kind"}),e.jsxs("select",{className:d,value:x,disabled:!E,onChange:s=>C(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:d,value:h,maxLength:8e3,onChange:s=>y(s.target.value)})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Instructions"}),e.jsx("textarea",{className:P(d,"min-h-52"),value:j,required:!0,maxLength:8e3,onChange:s=>S(s.target.value)})]}),x==="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:d,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:d,value:I,onChange:s=>N(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 items-center gap-2 text-body-sm",children:[e.jsx("input",{type:"checkbox",checked:R,onChange:s=>L(s.target.checked)}),"May delegate to subagents"]})]})]}),o&&e.jsx(u,{type:"submit",disabled:f,children:f?"Saving…":E?"Create agent":"Save changes"})]}),!o&&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:v}){const[g,r]=n.useState(t?.name??""),[k,o]=n.useState(t?.description??""),[m,p]=n.useState(t?.manager??"manager"),[b,x]=n.useState((t?.members??[]).map(a=>({...a,key:crypto.randomUUID()}))),[C,h]=n.useState(t?.instructions??""),[y,j]=n.useState(t?.project??""),[S,_]=n.useState(!1),[D,I]=n.useState(null),N=n.useRef(null),R=$(),L=async a=>{if(a.preventDefault(),S)return;const c={name:g,description:k,manager:m,members:b.map(({key:i,...w})=>w),instructions:C,project:y},l=JSON.stringify(c);if(N.current&&N.current.body!==l){I("The previous save has not been confirmed. Reload the team before changing that request.");return}N.current??={id:crypto.randomUUID(),body:l},_(!0),I(null);try{const i=t?await U({op:"teams.update",name:t.name,requestId:N.current.id,fields:c}):await U({op:"teams.create",requestId:N.current.id,fields:c});N.current=null,v(i.name)}catch(i){I(i instanceof Error?i.message:"Team could not be saved.")}finally{_(!1)}},f=(a,c)=>x(l=>l.map((i,w)=>w===a?{...i,...c}: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(u,{onClick:()=>{z.getState().stageDraft({kind:"team",name:t.name}),R("/chat")},children:"New team chat"}),D&&e.jsx("p",{role:"alert",className:"text-body-sm text-danger",children:D}),e.jsxs("form",{onSubmit:L,className:"space-y-4",children:[e.jsxs("fieldset",{disabled:S,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:d,required:!0,maxLength:64,value:g,onChange:a=>r(a.target.value)})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Description"}),e.jsx("input",{className:d,value:k,onChange:a=>o(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:d,required:!0,value:m,onChange:a=>p(a.target.value)})]}),e.jsxs("section",{className:"space-y-2",children:[e.jsx("h2",{className:"text-heading",children:"Members"}),b.map((a,c)=>e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("input",{className:P(d,"w-48 flex-1"),"aria-label":`Member ${c+1} name`,required:!0,value:a.role,onChange:l=>f(c,{role:l.target.value})}),e.jsxs("select",{className:P(d,"w-32"),"aria-label":`Member ${c+1} kind`,value:a.kind,onChange:l=>f(c,{kind:l.target.value}),children:[e.jsx("option",{value:"agent",children:"Agent"}),e.jsx("option",{value:"team",children:"Nested team"})]}),e.jsx("input",{className:P(d,"w-20"),"aria-label":`Member ${c+1} count`,type:"number",min:1,max:16,value:a.count,onChange:l=>f(c,{count:Number(l.target.value)})}),e.jsx(u,{type:"button",variant:"ghost",onClick:()=>x(l=>l.filter((i,w)=>w!==c)),children:"Remove"})]},a.key)),e.jsx(u,{type:"button",variant:"outline",onClick:()=>x(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:P(d,"min-h-36"),maxLength:8e3,value:C,onChange:a=>h(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:P(d,"min-h-36"),maxLength:8e3,value:y,onChange:a=>j(a.target.value)})]})]}),e.jsx(u,{type:"submit",disabled:S,children:S?"Saving…":t?"Save team":"Create team"})]})]})}function le(){const{agentId:t}=O(),[v,g]=Q(),r=v.get("kind")==="team"||v.get("create")==="team",k=v.has("create"),o=v.get("name"),m=J(),p=V(m.data,r?"team_catalogue":"profile_catalogue"),b=W(p&&!r),x=G(p&&r),C=H(),h=X({queryKey:["desktop",r?"team":"profile",o],enabled:p&&!!o&&!k,queryFn:()=>U({op:r?"teams.get":"profiles.get",name:o??""}),retry:!1}),y=async j=>{await C.invalidateQueries({queryKey:["desktop"]}),g({kind:r?"team":"agent",name:j})};return t?e.jsx(n.Suspense,{fallback:e.jsx("p",{className:"p-6 text-body",children:"Loading saved agent…"}),children:e.jsx(se,{})}):e.jsxs("div",{className:"flex h-full min-h-0 bg-canvas text-ink",children:[e.jsxs("aside",{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(u,{variant:r?"ghost":"outline",onClick:()=>g({kind:"agent"}),children:[e.jsx(Y,{className:"size-4"}),"Agents"]}),e.jsxs(u,{variant:r?"outline":"ghost",onClick:()=>g({kind:"team"}),children:[e.jsx(Z,{className:"size-4"}),"Teams"]})]}),e.jsxs(u,{variant:"outline",disabled:!p,onClick:()=>g({create:r?"team":"agent"}),children:[e.jsx(ee,{className:"size-4"}),r?"Create team":"Create agent"]}),e.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto",children:(r?x.data:b.data)?.map(j=>e.jsx("button",{type:"button",className:P("flex h-8 w-full items-center rounded-md px-2 text-left text-body-sm hover:bg-row-hover",j.name===o&&te),onClick:()=>g({kind:r?"team":"agent",name:j.name}),children:e.jsx("span",{className:"truncate",children:j.name})},j.name))})]}),e.jsx("main",{className:"min-w-0 flex-1 overflow-auto p-6",children:p?b.error||x.error||h.error?e.jsxs("div",{role:"alert",children:[e.jsx("p",{className:"text-danger",children:b.error?.message||x.error?.message||h.error?.message}),e.jsx(u,{variant:"outline",onClick:()=>{b.refetch(),x.refetch(),h.refetch()},children:"Retry"})]}):k?r?e.jsx(B,{onSaved:y},"create-team"):e.jsx(T,{creating:!0,onSaved:y},"create-agent"):o&&h.isLoading?e.jsx("p",{"aria-live":"polite",children:"Loading details…"}):o&&h.data?r?e.jsx(B,{team:h.data,onSaved:y},o):e.jsx(T,{profile:h.data,creating:!1,onSaved:y},`${o}:${h.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:m.isLoading?"Connecting to the backend…":m.error?m.error.message:"Update the backend to manage reusable agents and teams. Saved chats are unchanged."}),e.jsx(u,{variant:"outline",onClick:()=>void m.refetch(),children:"Retry connection"})]})})]})}export{le as AgentsPage};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./legacy-agents-page-Chbmzrq4.js","./icon-BeTB53O2.js","./icon-C7JJ2uBI.css","./page-header-B9ZaEm1G.js","./index-BWYtIPrm.js","./index-D_SlEnpm.css","./radient-auth-buttons-DAhpbmde.js","./compact-pagination-CkriC8GH.js"])))=>i.map(i=>d[i]);
2
+ import{u as O,a as Q,b as J,d as V,c as W,e as G,f as H,g as X,B as Y,U as Z,P as ee,r as te,_ as ae,h as $,i as z,j as U}from"./index-BWYtIPrm.js";import{j as e,r as n,B as u,c as P}from"./icon-BeTB53O2.js";const se=n.lazy(()=>ae(()=>import("./legacy-agents-page-Chbmzrq4.js"),__vite__mapDeps([0,1,2,3,4,5,6,7]),import.meta.url).then(t=>({default:t.LegacyAgentsPage}))),d="w-full rounded-md border border-control bg-surface px-3 py-2 text-body-sm text-ink";function T({profile:t,creating:v,onSaved:g}){const[r,k]=n.useState(!1),[o,m]=n.useState(v),[p,b]=n.useState(t?.name??""),[x,C]=n.useState(t?.kind??"role"),[h,y]=n.useState(t?.description??""),[j,S]=n.useState(t?.instructions??""),[_,D]=n.useState(t?.tools?.join(", ")??""),[I,N]=n.useState(t?.effort??"inherit"),[R,L]=n.useState(t?.delegate??!1),[f,a]=n.useState(!1),[c,l]=n.useState(null),i=n.useRef(null),w=$(),E=v||r,K=async s=>{if(s.preventDefault(),f)return;const M={kind:x,description:h,instructions:j,tools:_.split(",").map(q=>q.trim()).filter(Boolean),effort:I,delegate:R},A=JSON.stringify({name:p,fields:M,fresh:E});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 U({op:E?"profiles.create":"profiles.update",requestId:i.current.id,name:p,fields:M});i.current=null,m(!1),g(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 U({op:"profiles.install",name:t.name,requestId:crypto.randomUUID()});m(!1),k(!1),i.current=null,b(s.name),C(s.kind),y(s.description??""),S(s.instructions??""),D(s.tools?.join(", ")??""),N(s.effort??"inherit"),L(s.delegate??!1),g(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:E?r?"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&&!E&&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(u,{variant:"outline",onClick:F,disabled:f,children:"Install"}):e.jsx(u,{variant:"outline",onClick:()=>m(!0),children:"Edit"}),e.jsx(u,{variant:"outline",onClick:()=>{k(!0),m(!0),b(""),i.current=null},children:"Extend"}),e.jsx(u,{onClick:()=>{z.getState().stageDraft({kind:"agent",name:t.name}),w("/chat")},children:"New chat"})]}),c&&e.jsx("p",{role:"alert",className:"text-body-sm text-danger",children:c}),!o&&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:!o||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:d,value:p,disabled:!E,required:!0,"aria-describedby":t?.source==="builtin"?"builtin-readonly":void 0,onChange:s=>b(s.target.value)})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Kind"}),e.jsxs("select",{className:d,value:x,disabled:!E,onChange:s=>C(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:d,value:h,maxLength:8e3,onChange:s=>y(s.target.value)})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Instructions"}),e.jsx("textarea",{className:P(d,"min-h-52"),value:j,required:!0,maxLength:8e3,onChange:s=>S(s.target.value)})]}),x==="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:d,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:d,value:I,onChange:s=>N(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 items-center gap-2 text-body-sm",children:[e.jsx("input",{type:"checkbox",checked:R,onChange:s=>L(s.target.checked)}),"May delegate to subagents"]})]})]}),o&&e.jsx(u,{type:"submit",disabled:f,children:f?"Saving…":E?"Create agent":"Save changes"})]}),!o&&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:v}){const[g,r]=n.useState(t?.name??""),[k,o]=n.useState(t?.description??""),[m,p]=n.useState(t?.manager??"manager"),[b,x]=n.useState((t?.members??[]).map(a=>({...a,key:crypto.randomUUID()}))),[C,h]=n.useState(t?.instructions??""),[y,j]=n.useState(t?.project??""),[S,_]=n.useState(!1),[D,I]=n.useState(null),N=n.useRef(null),R=$(),L=async a=>{if(a.preventDefault(),S)return;const c={name:g,description:k,manager:m,members:b.map(({key:i,...w})=>w),instructions:C,project:y},l=JSON.stringify(c);if(N.current&&N.current.body!==l){I("The previous save has not been confirmed. Reload the team before changing that request.");return}N.current??={id:crypto.randomUUID(),body:l},_(!0),I(null);try{const i=t?await U({op:"teams.update",name:t.name,requestId:N.current.id,fields:c}):await U({op:"teams.create",requestId:N.current.id,fields:c});N.current=null,v(i.name)}catch(i){I(i instanceof Error?i.message:"Team could not be saved.")}finally{_(!1)}},f=(a,c)=>x(l=>l.map((i,w)=>w===a?{...i,...c}: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(u,{onClick:()=>{z.getState().stageDraft({kind:"team",name:t.name}),R("/chat")},children:"New team chat"}),D&&e.jsx("p",{role:"alert",className:"text-body-sm text-danger",children:D}),e.jsxs("form",{onSubmit:L,className:"space-y-4",children:[e.jsxs("fieldset",{disabled:S,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:d,required:!0,maxLength:64,value:g,onChange:a=>r(a.target.value)})]}),e.jsxs("label",{className:"block space-y-1 text-body-sm",children:[e.jsx("span",{children:"Description"}),e.jsx("input",{className:d,value:k,onChange:a=>o(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:d,required:!0,value:m,onChange:a=>p(a.target.value)})]}),e.jsxs("section",{className:"space-y-2",children:[e.jsx("h2",{className:"text-heading",children:"Members"}),b.map((a,c)=>e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("input",{className:P(d,"w-48 flex-1"),"aria-label":`Member ${c+1} name`,required:!0,value:a.role,onChange:l=>f(c,{role:l.target.value})}),e.jsxs("select",{className:P(d,"w-32"),"aria-label":`Member ${c+1} kind`,value:a.kind,onChange:l=>f(c,{kind:l.target.value}),children:[e.jsx("option",{value:"agent",children:"Agent"}),e.jsx("option",{value:"team",children:"Nested team"})]}),e.jsx("input",{className:P(d,"w-20"),"aria-label":`Member ${c+1} count`,type:"number",min:1,max:16,value:a.count,onChange:l=>f(c,{count:Number(l.target.value)})}),e.jsx(u,{type:"button",variant:"ghost",onClick:()=>x(l=>l.filter((i,w)=>w!==c)),children:"Remove"})]},a.key)),e.jsx(u,{type:"button",variant:"outline",onClick:()=>x(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:P(d,"min-h-36"),maxLength:8e3,value:C,onChange:a=>h(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:P(d,"min-h-36"),maxLength:8e3,value:y,onChange:a=>j(a.target.value)})]})]}),e.jsx(u,{type:"submit",disabled:S,children:S?"Saving…":t?"Save team":"Create team"})]})]})}function le(){const{agentId:t}=O(),[v,g]=Q(),r=v.get("kind")==="team"||v.get("create")==="team",k=v.has("create"),o=v.get("name"),m=J(),p=V(m.data,r?"team_catalogue":"profile_catalogue"),b=W(p&&!r),x=G(p&&r),C=H(),h=X({queryKey:["desktop",r?"team":"profile",o],enabled:p&&!!o&&!k,queryFn:()=>U({op:r?"teams.get":"profiles.get",name:o??""}),retry:!1}),y=async j=>{await C.invalidateQueries({queryKey:["desktop"]}),g({kind:r?"team":"agent",name:j})};return t?e.jsx(n.Suspense,{fallback:e.jsx("p",{className:"p-6 text-body",children:"Loading saved agent…"}),children:e.jsx(se,{})}):e.jsxs("div",{className:"flex h-full min-h-0 bg-canvas text-ink",children:[e.jsxs("aside",{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(u,{variant:r?"ghost":"outline",onClick:()=>g({kind:"agent"}),children:[e.jsx(Y,{className:"size-4"}),"Agents"]}),e.jsxs(u,{variant:r?"outline":"ghost",onClick:()=>g({kind:"team"}),children:[e.jsx(Z,{className:"size-4"}),"Teams"]})]}),e.jsxs(u,{variant:"outline",disabled:!p,onClick:()=>g({create:r?"team":"agent"}),children:[e.jsx(ee,{className:"size-4"}),r?"Create team":"Create agent"]}),e.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto",children:(r?x.data:b.data)?.map(j=>e.jsx("button",{type:"button",className:P("flex h-8 w-full items-center rounded-md px-2 text-left text-body-sm hover:bg-row-hover",j.name===o&&te),onClick:()=>g({kind:r?"team":"agent",name:j.name}),children:e.jsx("span",{className:"truncate",children:j.name})},j.name))})]}),e.jsx("main",{className:"min-w-0 flex-1 overflow-auto p-6",children:p?b.error||x.error||h.error?e.jsxs("div",{role:"alert",children:[e.jsx("p",{className:"text-danger",children:b.error?.message||x.error?.message||h.error?.message}),e.jsx(u,{variant:"outline",onClick:()=>{b.refetch(),x.refetch(),h.refetch()},children:"Retry"})]}):k?r?e.jsx(B,{onSaved:y},"create-team"):e.jsx(T,{creating:!0,onSaved:y},"create-agent"):o&&h.isLoading?e.jsx("p",{"aria-live":"polite",children:"Loading details…"}):o&&h.data?r?e.jsx(B,{team:h.data,onSaved:y},o):e.jsx(T,{profile:h.data,creating:!1,onSaved:y},`${o}:${h.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:m.isLoading?"Connecting to the backend…":m.error?m.error.message:"Update the backend to manage reusable agents and teams. Saved chats are unchanged."}),e.jsx(u,{variant:"outline",onClick:()=>void m.refetch(),children:"Retry connection"})]})})]})}export{le as AgentsPage};
@@ -1 +1 @@
1
- import{w as ln,p as un,l as H,s as q,m as B,n as an,o as y,t as tn,q as L,v as _,x as rn,y as o,z as sn,A as on,D as fn}from"./index-CanR4Tr_.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function mn(l){return l.endAngle}function pn(l){return l&&l.padAngle}function dn(l,h,E,D,v,A,C,u){var I=E-l,s=D-h,n=C-v,m=u-A,a=m*I-n*s;if(!(a*a<y))return a=(n*(h-A)-m*(l-v))/a,[l+a*I,h+a*s]}function W(l,h,E,D,v,A,C){var u=l-E,I=h-D,s=(C?A:-A)/L(u*u+I*I),n=s*I,m=-s*u,a=l+n,i=h+m,f=E+n,c=D+m,F=(a+f)/2,t=(i+c)/2,p=f-a,g=c-i,R=p*p+g*g,T=v-A,P=a*c-f*i,O=(g<0?-1:1)*L(on(0,T*T*R-P*P)),S=(P*g-p*O)/R,j=(-P*p-g*O)/R,w=(P*g+p*O)/R,d=(-P*p+g*O)/R,x=S-F,e=j-t,r=w-F,G=d-t;return x*x+e*e>r*r+G*G&&(S=w,j=d),{cx:S,cy:j,x01:-n,y01:-m,x11:S*(v/T-1),y11:j*(v/T-1)}}function hn(){var l=cn,h=yn,E=B(0),D=null,v=gn,A=mn,C=pn,u=null,I=ln(s);function s(){var n,m,a=+l.apply(this,arguments),i=+h.apply(this,arguments),f=v.apply(this,arguments)-an,c=A.apply(this,arguments)-an,F=rn(c-f),t=c>f;if(u||(u=n=I()),i<a&&(m=i,i=a,a=m),!(i>y))u.moveTo(0,0);else if(F>tn-y)u.moveTo(i*H(f),i*q(f)),u.arc(0,0,i,f,c,!t),a>y&&(u.moveTo(a*H(c),a*q(c)),u.arc(0,0,a,c,f,t));else{var p=f,g=c,R=f,T=c,P=F,O=F,S=C.apply(this,arguments)/2,j=S>y&&(D?+D.apply(this,arguments):L(a*a+i*i)),w=_(rn(i-a)/2,+E.apply(this,arguments)),d=w,x=w,e,r;if(j>y){var G=sn(j/a*q(S)),M=sn(j/i*q(S));(P-=G*2)>y?(G*=t?1:-1,R+=G,T-=G):(P=0,R=T=(f+c)/2),(O-=M*2)>y?(M*=t?1:-1,p+=M,g-=M):(O=0,p=g=(f+c)/2)}var J=i*H(p),K=i*q(p),N=a*H(T),Q=a*q(T);if(w>y){var U=i*H(g),V=i*q(g),X=a*H(R),Y=a*q(R),z;if(F<un)if(z=dn(J,K,X,Y,U,V,N,Q)){var Z=J-z[0],$=K-z[1],k=U-z[0],b=V-z[1],nn=1/q(fn((Z*k+$*b)/(L(Z*Z+$*$)*L(k*k+b*b)))/2),en=L(z[0]*z[0]+z[1]*z[1]);d=_(w,(a-en)/(nn-1)),x=_(w,(i-en)/(nn+1))}else d=x=0}O>y?x>y?(e=W(X,Y,J,K,i,x,t),r=W(U,V,N,Q,i,x,t),u.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?u.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(u.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),u.arc(0,0,i,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),u.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(u.moveTo(J,K),u.arc(0,0,i,p,g,!t)):u.moveTo(J,K),!(a>y)||!(P>y)?u.lineTo(N,Q):d>y?(e=W(N,Q,U,V,a,-d,t),r=W(J,K,X,Y,a,-d,t),u.lineTo(e.cx+e.x01,e.cy+e.y01),d<w?u.arc(e.cx,e.cy,d,o(e.y01,e.x01),o(r.y01,r.x01),!t):(u.arc(e.cx,e.cy,d,o(e.y01,e.x01),o(e.y11,e.x11),!t),u.arc(0,0,a,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),u.arc(r.cx,r.cy,d,o(r.y11,r.x11),o(r.y01,r.x01),!t))):u.arc(0,0,a,T,R,t)}if(u.closePath(),n)return u=null,n+""||null}return s.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,m=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-un/2;return[H(m)*n,q(m)*n]},s.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:B(+n),s):l},s.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:B(+n),s):h},s.cornerRadius=function(n){return arguments.length?(E=typeof n=="function"?n:B(+n),s):E},s.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:B(+n),s):D},s.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:B(+n),s):v},s.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:B(+n),s):A},s.padAngle=function(n){return arguments.length?(C=typeof n=="function"?n:B(+n),s):C},s.context=function(n){return arguments.length?(u=n??null,s):u},s}export{hn as d};
1
+ import{w as ln,p as un,l as H,s as q,m as B,n as an,o as y,t as tn,q as L,v as _,x as rn,y as o,z as sn,A as on,D as fn}from"./index-BWYtIPrm.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function mn(l){return l.endAngle}function pn(l){return l&&l.padAngle}function dn(l,h,E,D,v,A,C,u){var I=E-l,s=D-h,n=C-v,m=u-A,a=m*I-n*s;if(!(a*a<y))return a=(n*(h-A)-m*(l-v))/a,[l+a*I,h+a*s]}function W(l,h,E,D,v,A,C){var u=l-E,I=h-D,s=(C?A:-A)/L(u*u+I*I),n=s*I,m=-s*u,a=l+n,i=h+m,f=E+n,c=D+m,F=(a+f)/2,t=(i+c)/2,p=f-a,g=c-i,R=p*p+g*g,T=v-A,P=a*c-f*i,O=(g<0?-1:1)*L(on(0,T*T*R-P*P)),S=(P*g-p*O)/R,j=(-P*p-g*O)/R,w=(P*g+p*O)/R,d=(-P*p+g*O)/R,x=S-F,e=j-t,r=w-F,G=d-t;return x*x+e*e>r*r+G*G&&(S=w,j=d),{cx:S,cy:j,x01:-n,y01:-m,x11:S*(v/T-1),y11:j*(v/T-1)}}function hn(){var l=cn,h=yn,E=B(0),D=null,v=gn,A=mn,C=pn,u=null,I=ln(s);function s(){var n,m,a=+l.apply(this,arguments),i=+h.apply(this,arguments),f=v.apply(this,arguments)-an,c=A.apply(this,arguments)-an,F=rn(c-f),t=c>f;if(u||(u=n=I()),i<a&&(m=i,i=a,a=m),!(i>y))u.moveTo(0,0);else if(F>tn-y)u.moveTo(i*H(f),i*q(f)),u.arc(0,0,i,f,c,!t),a>y&&(u.moveTo(a*H(c),a*q(c)),u.arc(0,0,a,c,f,t));else{var p=f,g=c,R=f,T=c,P=F,O=F,S=C.apply(this,arguments)/2,j=S>y&&(D?+D.apply(this,arguments):L(a*a+i*i)),w=_(rn(i-a)/2,+E.apply(this,arguments)),d=w,x=w,e,r;if(j>y){var G=sn(j/a*q(S)),M=sn(j/i*q(S));(P-=G*2)>y?(G*=t?1:-1,R+=G,T-=G):(P=0,R=T=(f+c)/2),(O-=M*2)>y?(M*=t?1:-1,p+=M,g-=M):(O=0,p=g=(f+c)/2)}var J=i*H(p),K=i*q(p),N=a*H(T),Q=a*q(T);if(w>y){var U=i*H(g),V=i*q(g),X=a*H(R),Y=a*q(R),z;if(F<un)if(z=dn(J,K,X,Y,U,V,N,Q)){var Z=J-z[0],$=K-z[1],k=U-z[0],b=V-z[1],nn=1/q(fn((Z*k+$*b)/(L(Z*Z+$*$)*L(k*k+b*b)))/2),en=L(z[0]*z[0]+z[1]*z[1]);d=_(w,(a-en)/(nn-1)),x=_(w,(i-en)/(nn+1))}else d=x=0}O>y?x>y?(e=W(X,Y,J,K,i,x,t),r=W(U,V,N,Q,i,x,t),u.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?u.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(u.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),u.arc(0,0,i,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),u.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(u.moveTo(J,K),u.arc(0,0,i,p,g,!t)):u.moveTo(J,K),!(a>y)||!(P>y)?u.lineTo(N,Q):d>y?(e=W(N,Q,U,V,a,-d,t),r=W(J,K,X,Y,a,-d,t),u.lineTo(e.cx+e.x01,e.cy+e.y01),d<w?u.arc(e.cx,e.cy,d,o(e.y01,e.x01),o(r.y01,r.x01),!t):(u.arc(e.cx,e.cy,d,o(e.y01,e.x01),o(e.y11,e.x11),!t),u.arc(0,0,a,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),u.arc(r.cx,r.cy,d,o(r.y11,r.x11),o(r.y01,r.x01),!t))):u.arc(0,0,a,T,R,t)}if(u.closePath(),n)return u=null,n+""||null}return s.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,m=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-un/2;return[H(m)*n,q(m)*n]},s.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:B(+n),s):l},s.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:B(+n),s):h},s.cornerRadius=function(n){return arguments.length?(E=typeof n=="function"?n:B(+n),s):E},s.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:B(+n),s):D},s.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:B(+n),s):v},s.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:B(+n),s):A},s.padAngle=function(n){return arguments.length?(C=typeof n=="function"?n:B(+n),s):C},s.context=function(n){return arguments.length?(u=n??null,s):u},s}export{hn as d};