local-operator-ui 0.31.23 → 0.31.24

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 (90) hide show
  1. package/out/main/index.js +144 -25
  2. package/out/renderer/assets/{_basePickBy-B4bNbRB1.js → _basePickBy-DvYnhuYU.js} +1 -1
  3. package/out/renderer/assets/{_baseUniq-CVwZpL22.js → _baseUniq-bfmokOo7.js} +1 -1
  4. package/out/renderer/assets/{agent-details-page-BX0suGni.js → agent-details-page-CKuk0h6D.js} +2 -2
  5. package/out/renderer/assets/agent-hub-page-mjoCtkLM.js +11 -0
  6. package/out/renderer/assets/{agents-page-B_OovOwu.js → agents-page-CKyDYjEM.js} +2 -2
  7. package/out/renderer/assets/aida-control-B8b5SXix.js +50 -0
  8. package/out/renderer/assets/{arc-fIR19KcX.js → arc-CFcKtuSP.js} +1 -1
  9. package/out/renderer/assets/{architectureDiagram-IEHRJDOE-DXEcmxDN.js → architectureDiagram-IEHRJDOE-iKar6Oic.js} +1 -1
  10. package/out/renderer/assets/{blockDiagram-JOT3LUYC-B4wc6PHf.js → blockDiagram-JOT3LUYC-B2zh8hXK.js} +1 -1
  11. package/out/renderer/assets/{book-open-Cr3wDsTU.js → book-open-ARKlovXx.js} +1 -1
  12. package/out/renderer/assets/browser-page-UoqCN-xN.js +1 -0
  13. package/out/renderer/assets/{browser-webauthn-prompt-CsoybaA5.js → browser-webauthn-prompt-CFO8FunV.js} +1 -1
  14. package/out/renderer/assets/{c4Diagram-VJAJSXHY-1uEwtfMU.js → c4Diagram-VJAJSXHY-BMHJDEcf.js} +1 -1
  15. package/out/renderer/assets/channel-CIrWsSCo.js +1 -0
  16. package/out/renderer/assets/{chunk-4BMEZGHF-DRHY8LIl.js → chunk-4BMEZGHF-DRAVdspP.js} +1 -1
  17. package/out/renderer/assets/{chunk-A2AXSNBT-QZQ3z3yi.js → chunk-A2AXSNBT-Cud6VnlY.js} +1 -1
  18. package/out/renderer/assets/{chunk-AEK57VVT-DtF0CfVL.js → chunk-AEK57VVT-BDCFuoNl.js} +1 -1
  19. package/out/renderer/assets/{chunk-D6G4REZN-BEo703CU.js → chunk-D6G4REZN-DlMa4UAs.js} +1 -1
  20. package/out/renderer/assets/{chunk-RZ5BOZE2-daWWt7HX.js → chunk-RZ5BOZE2-EHEIhkiY.js} +1 -1
  21. package/out/renderer/assets/{chunk-XZIHB7SX-u-ggjLcj.js → chunk-XZIHB7SX-D6SPBzK4.js} +1 -1
  22. package/out/renderer/assets/classDiagram-GIVACNV2-BDlMBcMy.js +1 -0
  23. package/out/renderer/assets/classDiagram-v2-COTLJTTW-BDlMBcMy.js +1 -0
  24. package/out/renderer/assets/clone-DkQdBey4.js +1 -0
  25. package/out/renderer/assets/{console-mirror-BF1k198x.js → console-mirror-iQjAVQrh.js} +1 -1
  26. package/out/renderer/assets/{consoleCapture-CB6NivW_.js → consoleCapture-f4bHcMlg.js} +1 -1
  27. package/out/renderer/assets/{dagre-OKDRZEBW-8g3lvHle.js → dagre-OKDRZEBW-C69-0hU9.js} +1 -1
  28. package/out/renderer/assets/{diagram-SSKATNLV-MQ--LUAc.js → diagram-SSKATNLV-DsUPj3k9.js} +1 -1
  29. package/out/renderer/assets/{diagram-VNBRO52H-D1t3DNGA.js → diagram-VNBRO52H-3cLE7l86.js} +1 -1
  30. package/out/renderer/assets/{erDiagram-Q7BY3M3F-BFxoPqTx.js → erDiagram-Q7BY3M3F-Gqm9ZUtK.js} +1 -1
  31. package/out/renderer/assets/{error-boundary-BA_k6l0v.js → error-boundary-BheI-_hJ.js} +1 -1
  32. package/out/renderer/assets/{flowDiagram-4HSFHLVR-CCtyNwMw.js → flowDiagram-4HSFHLVR-bu5rejsx.js} +1 -1
  33. package/out/renderer/assets/{ganttDiagram-APWFNJXF-BTr5f_or.js → ganttDiagram-APWFNJXF-DOpEB0OK.js} +4 -4
  34. package/out/renderer/assets/{gitGraphDiagram-7IBYFJ6S-BPIItuIc.js → gitGraphDiagram-7IBYFJ6S-BitJPB27.js} +1 -1
  35. package/out/renderer/assets/{graph-BfbjaXow.js → graph-CyyuMUaw.js} +1 -1
  36. package/out/renderer/assets/index-CsbIIOFq.css +1 -0
  37. package/out/renderer/assets/{index-Dj4iGwiM.js → index-D-d-ykb4.js} +1 -1
  38. package/out/renderer/assets/{index-DAlzRpjG.js → index-Db927tvJ.js} +1 -1
  39. package/out/renderer/assets/{index-CpCEfkD6.js → index-FOmxzVhB.js} +403 -383
  40. package/out/renderer/assets/infoDiagram-PH2N3AL5-D3FD5ygR.js +2 -0
  41. package/out/renderer/assets/{installer-B0cRTOY4.js → installer-Dq_j5D8p.js} +1 -1
  42. package/out/renderer/assets/{journeyDiagram-U35MCT3I-CcTXYhF0.js → journeyDiagram-U35MCT3I-CMXDard0.js} +1 -1
  43. package/out/renderer/assets/{kanban-definition-NDS4AKOZ-C8zq_ypt.js → kanban-definition-NDS4AKOZ-CGZPXBz-.js} +1 -1
  44. package/out/renderer/assets/{layout-JqMKtpWk.js → layout-TTjt9cpH.js} +1 -1
  45. package/out/renderer/assets/{legacy-agents-page-DAsmlMHi.js → legacy-agents-page-DsEHBb_T.js} +3 -3
  46. package/out/renderer/assets/{mermaid.core-BllcynrC.js → mermaid.core-BGnJVp5q.js} +5 -5
  47. package/out/renderer/assets/{mesh-page-CEvXBJRu.js → mesh-page-BuM1oQ_i.js} +1 -1
  48. package/out/renderer/assets/{mindmap-definition-ALO5MXBD-BKNq6niU.js → mindmap-definition-ALO5MXBD-CaLpfI_E.js} +1 -1
  49. package/out/renderer/assets/{mini-DVCmoZnA.js → mini-KOisKeMi.js} +1 -1
  50. package/out/renderer/assets/org-surface-gate-CZiYqd1P.js +1 -0
  51. package/out/renderer/assets/{page-header-6gka2c-2.js → page-header-B2VyeyKK.js} +1 -1
  52. package/out/renderer/assets/{pieDiagram-IB7DONF6-B5zKXmP-.js → pieDiagram-IB7DONF6-DgCZ_Tpy.js} +1 -1
  53. package/out/renderer/assets/projects-page-D8CTmXCv.js +35 -0
  54. package/out/renderer/assets/{quadrantDiagram-7GDLP6J5-CywomFxA.js → quadrantDiagram-7GDLP6J5-8FVHpZVN.js} +1 -1
  55. package/out/renderer/assets/{radar-MK3ICKWK-DVI3UMkb.js → radar-MK3ICKWK-4pgGQ-2B.js} +1 -1
  56. package/out/renderer/assets/{radient-auth-buttons-CuD380Dg.js → radient-auth-buttons-DUT18lNx.js} +1 -1
  57. package/out/renderer/assets/{requirementDiagram-KVF5MWMF-Dx45yRmF.js → requirementDiagram-KVF5MWMF-BubgmAeX.js} +1 -1
  58. package/out/renderer/assets/{sankeyDiagram-QLVOVGJD-MTCmQwVB.js → sankeyDiagram-QLVOVGJD-C8luu1Ce.js} +1 -1
  59. package/out/renderer/assets/{schedules-page-I-U4fcxy.js → schedules-page-CajtG50s.js} +1 -1
  60. package/out/renderer/assets/{sequenceDiagram-X6HHIX6F-DnpYYNTl.js → sequenceDiagram-X6HHIX6F-DyNeye_f.js} +1 -1
  61. package/out/renderer/assets/settings-page-DZNyJZ23.js +292 -0
  62. package/out/renderer/assets/{settings-section-C-N8ZUsZ.js → settings-section-DQ45Riip.js} +1 -1
  63. package/out/renderer/assets/{stateDiagram-DGXRK772-D4r0DeWs.js → stateDiagram-DGXRK772-DRqrOBmL.js} +1 -1
  64. package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-o-zf-20f.js +1 -0
  65. package/out/renderer/assets/{textarea-CKZ36wuK.js → textarea-CaRKMTTG.js} +5 -5
  66. package/out/renderer/assets/{timeline-definition-BDJGKUSR-CFliRV8y.js → timeline-definition-BDJGKUSR-DC76uMim.js} +1 -1
  67. package/out/renderer/assets/ui-preferences-store-qSXgzAHu.js +1 -0
  68. package/out/renderer/assets/{use-download-agent-mutation-BSPpQ8Bq.js → use-download-agent-mutation-B_qjSLGd.js} +2 -2
  69. package/out/renderer/assets/{use-memberships-query-ChbBWsGj.js → use-memberships-query-Q1_CwjZE.js} +1 -1
  70. package/out/renderer/assets/{xychartDiagram-VJFVF3MP-BDBd-Bch.js → xychartDiagram-VJFVF3MP-CyMpnVUJ.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/agent-hub-page-mag_Df5M.js +0 -6
  77. package/out/renderer/assets/aida-control-Dxs-zwz7.js +0 -50
  78. package/out/renderer/assets/browser-page-QYVO_Ty7.js +0 -1
  79. package/out/renderer/assets/channel-CNKok60B.js +0 -1
  80. package/out/renderer/assets/classDiagram-GIVACNV2-mOBGp7Id.js +0 -1
  81. package/out/renderer/assets/classDiagram-v2-COTLJTTW-mOBGp7Id.js +0 -1
  82. package/out/renderer/assets/clone-oFxgV7gz.js +0 -1
  83. package/out/renderer/assets/index-CEf8R_cp.css +0 -1
  84. package/out/renderer/assets/infoDiagram-PH2N3AL5-C6s8nAmm.js +0 -2
  85. package/out/renderer/assets/org-surface-gate-i2tRIcUb.js +0 -1
  86. package/out/renderer/assets/projects-page-Bl47UxEv.js +0 -40
  87. package/out/renderer/assets/settings-page-DwfZyrWO.js +0 -292
  88. package/out/renderer/assets/stateDiagram-v2-YXO3MK2T-DLJs3lLO.js +0 -1
  89. package/out/renderer/assets/ui-preferences-store-2ZO9oo_L.js +0 -1
  90. /package/out/renderer/assets/{index-BPylsrgv.js → index-C8q85hqs.js} +0 -0
package/out/main/index.js CHANGED
@@ -19149,6 +19149,7 @@ class TabRegistry {
19149
19149
  homeSessionId: restored ? null : options.sessionId ?? null,
19150
19150
  nonce: restored || options.owner === "user" ? null : mintNonce(),
19151
19151
  handedTo: null,
19152
+ handedFrom: null,
19152
19153
  restored,
19153
19154
  restoreRow: options.restoreRow,
19154
19155
  createdAt: Date.now(),
@@ -19293,6 +19294,7 @@ class TabRegistry {
19293
19294
  );
19294
19295
  }
19295
19296
  if (record.owner !== "agent") this.assertAgentCapacity();
19297
+ if (record.handedFrom === null) record.handedFrom = record.owner;
19296
19298
  record.owner = "agent";
19297
19299
  record.sessionId = sessionId2;
19298
19300
  record.handedTo = sessionId2;
@@ -19320,6 +19322,7 @@ class TabRegistry {
19320
19322
  record.owner = "user";
19321
19323
  record.sessionId = record.homeSessionId;
19322
19324
  record.handedTo = null;
19325
+ record.handedFrom = null;
19323
19326
  record.allocationId = "";
19324
19327
  this.bumpEpoch(record.tabId);
19325
19328
  this.onChanged();
@@ -20646,12 +20649,48 @@ class BrowserHost {
20646
20649
  whenRestored() {
20647
20650
  return this.hydration;
20648
20651
  }
20652
+ /**
20653
+ * Start ONE restored tab's load, without waiting for it.
20654
+ *
20655
+ * The one spelling of "how a restored tab gets its page back", shared by
20656
+ * `hydrateOne` (which awaits the promise under the per-tab timeout) and the
20657
+ * budget drain at the end of the pass (which only STARTS it). `null` when the
20658
+ * tab or its view is already gone — the user can close a tab while the pass is
20659
+ * still running, and the drain iterates a queue collected across awaits.
20660
+ */
20661
+ startRestore(tabId, recorded) {
20662
+ const record = this.registry.get(tabId);
20663
+ if (!record) return null;
20664
+ const contents = record.view.webContents;
20665
+ if (contents.isDestroyed()) return null;
20666
+ const history = contents.navigationHistory;
20667
+ const entry = recorded.entries[recorded.activeIndex];
20668
+ return history?.restore ? history.restore({
20669
+ entries: recorded.entries,
20670
+ index: recorded.activeIndex
20671
+ }) : (
20672
+ // The honest degradation (see `NavigationHistoryLike`): a view with no
20673
+ // history API still gets put back on the page it was showing, without
20674
+ // its stack and its page state.
20675
+ entry ? contents.loadURL(entry.url) : Promise.resolve()
20676
+ );
20677
+ }
20649
20678
  /**
20650
20679
  * Apply each restored tab's history and debugger session, bounded.
20651
20680
  *
20652
20681
  * `Promise.allSettled` rather than `Promise.all`: the two steps below already turn
20653
20682
  * a failure into a log line, and a rejection here would be an unhandled rejection
20654
20683
  * on a promise only a test awaits.
20684
+ *
20685
+ * THE BUDGET STOPS THE PASS WAITING, NEVER THE WORK (2026-09-29, RC2b). When the
20686
+ * deadline expires the workers stop TAKING tabs, and whatever is still queued is
20687
+ * drained below: each remaining tab's load is STARTED, unawaited, so nothing is
20688
+ * left `about:blank` forever. Before the drain, the deadline check ran AFTER the
20689
+ * shift and silently dropped the tab it had just taken, and every other queued
20690
+ * tab got no load at all while the log claimed "they keep loading in the
20691
+ * background" (the field: up to 14 blank tabs from one launch). The constants
20692
+ * above are deliberately unchanged — one hung page must not withhold the host,
20693
+ * so what changed is only what happens AFTER the budget, not the budget.
20655
20694
  */
20656
20695
  async hydrateRestored(created) {
20657
20696
  const deadline2 = Date.now() + RESTORE_BUDGET_MS;
@@ -20659,17 +20698,17 @@ class BrowserHost {
20659
20698
  let reported = false;
20660
20699
  const worker = async () => {
20661
20700
  for (; ; ) {
20662
- const next = queue.shift();
20663
- if (!next) return;
20664
20701
  if (Date.now() >= deadline2) {
20665
- if (!reported) {
20702
+ if (queue.length > 0 && !reported) {
20666
20703
  reported = true;
20667
20704
  this.log(
20668
- `[browser] the ${RESTORE_BUDGET_MS}ms restore budget expired with ${queue.length + 1} tab(s) still loading; they keep loading in the background`
20705
+ `[browser] the ${RESTORE_BUDGET_MS}ms restore budget expired with ${queue.length} tab(s) still queued; they start loading in the background`
20669
20706
  );
20670
20707
  }
20671
20708
  return;
20672
20709
  }
20710
+ const next = queue.shift();
20711
+ if (!next) return;
20673
20712
  await this.hydrateOne(next.tabId, next.recorded);
20674
20713
  }
20675
20714
  };
@@ -20679,30 +20718,75 @@ class BrowserHost {
20679
20718
  worker
20680
20719
  )
20681
20720
  );
20721
+ for (const next of queue) {
20722
+ void this.restoreUnderTimeout(next.tabId, next.recorded).catch(
20723
+ (error) => {
20724
+ this.log(
20725
+ `[browser] could not start the restore of tab ${next.tabId}: ${String(error)}`
20726
+ );
20727
+ }
20728
+ );
20729
+ }
20682
20730
  }
20683
- /** One tab's half of the pass: the history stack, then the debugger session. */
20684
- async hydrateOne(tabId, recorded) {
20731
+ /**
20732
+ * The bounded half of ONE restore: start the load, wait
20733
+ * `RESTORE_TAB_TIMEOUT_MS`, and record a no-commit death as a load failure.
20734
+ *
20735
+ * Shared by the awaited first wave (`hydrateOne`) and the post-budget drain,
20736
+ * because the failure mode does not care whether anyone awaits it: a server
20737
+ * that accepts and never answers produces no `did-fail-load` and no commit,
20738
+ * so THIS timer is the only thing that can turn it into the strip's Failed
20739
+ * chip and the counted close. The drain ran a private half of this step until
20740
+ * round 1 (m-1 = Q-1 = U1 = D3), which is how stragglers spun outside the
20741
+ * close set.
20742
+ *
20743
+ * WHETHER THIS HYDRATION'S NAVIGATION COMMITTED A DOCUMENT, read from the
20744
+ * event rather than from a property, because neither of the two obvious
20745
+ * reads answers the question: `getURL()` already reports the TARGET url
20746
+ * while the restore is still pending, and `history.restore()`'s promise does
20747
+ * not settle until the load FINISHES, so it is still pending for a page that
20748
+ * committed seconds ago (both measured on Electron 44, 2026-09-29).
20749
+ * `did-navigate` is the commit, and it is what tells "the page came back but
20750
+ * is still fetching something" apart from "nothing ever arrived" — only the
20751
+ * second one is a failure to record (see the catch below).
20752
+ */
20753
+ async restoreUnderTimeout(tabId, recorded) {
20685
20754
  const record = this.registry.get(tabId);
20686
20755
  if (!record) return;
20687
20756
  const contents = record.view.webContents;
20688
- const history = contents.navigationHistory;
20689
- const entry = recorded.entries[recorded.activeIndex];
20757
+ let committed = false;
20758
+ const onCommitted = () => {
20759
+ committed = true;
20760
+ };
20761
+ contents.on("did-navigate", onCommitted);
20690
20762
  try {
20691
- await withTimeout(
20692
- history?.restore ? history.restore({
20693
- entries: recorded.entries,
20694
- index: recorded.activeIndex
20695
- }) : (
20696
- // The honest degradation (see `NavigationHistoryLike`): a view with no
20697
- // history API still gets put back on the page it was showing, without
20698
- // its stack and its page state.
20699
- entry ? contents.loadURL(entry.url) : Promise.resolve()
20700
- ),
20701
- RESTORE_TAB_TIMEOUT_MS
20702
- );
20763
+ const started = this.startRestore(tabId, recorded);
20764
+ if (started) await withTimeout(started, RESTORE_TAB_TIMEOUT_MS);
20703
20765
  } catch (error) {
20704
20766
  this.log(`[browser] could not restore tab ${tabId}: ${String(error)}`);
20767
+ if (!committed && !this.loadFailures.has(tabId) && this.registry.get(tabId) && !contents.isDestroyed()) {
20768
+ const entry = recorded.entries[recorded.activeIndex];
20769
+ this.recordLoadFailure(tabId, {
20770
+ code: -2,
20771
+ description: "ERR_FAILED (restore)",
20772
+ url: entry?.url ?? contents.getURL()
20773
+ });
20774
+ this.log(
20775
+ `[browser] tab ${tabId} is marked as failed: the restore did not commit a page`
20776
+ );
20777
+ }
20778
+ } finally {
20779
+ if (!contents.isDestroyed()) {
20780
+ contents.removeListener("did-navigate", onCommitted);
20781
+ }
20705
20782
  }
20783
+ }
20784
+ /** One tab's half of the pass: the history stack, then the debugger session. */
20785
+ async hydrateOne(tabId, recorded) {
20786
+ const record = this.registry.get(tabId);
20787
+ if (!record) return;
20788
+ const contents = record.view.webContents;
20789
+ await this.restoreUnderTimeout(tabId, recorded);
20706
20790
  if (!this.registry.get(tabId)) return;
20707
20791
  try {
20708
20792
  await withTimeout(this.cdp.attach(contents), RESTORE_TAB_TIMEOUT_MS);
@@ -21849,6 +21933,15 @@ function contentRectOrNull(value) {
21849
21933
  height: rect.height
21850
21934
  };
21851
21935
  }
21936
+ function paneNavigationDirection(input) {
21937
+ if (input.type !== "keyDown") return null;
21938
+ if (!(input.meta || input.control)) return null;
21939
+ if (input.alt || input.shift) return null;
21940
+ if (input.isAutoRepeat) return null;
21941
+ if (input.key === "[") return "back";
21942
+ if (input.key === "]") return "forward";
21943
+ return null;
21944
+ }
21852
21945
  const PROOF_SHAPE = /^[a-zA-Z0-9_-]{32,}$/;
21853
21946
  const MISSING_PROOF_MESSAGE = "missing private browser ownership proof";
21854
21947
  class OwnershipLedger {
@@ -23312,6 +23405,10 @@ function boundTabs(tabs2) {
23312
23405
  const kept = tabs2.filter((_tab, index) => keep.has(index));
23313
23406
  return { kept, dropped: tabs2.length - kept.length };
23314
23407
  }
23408
+ function restorableRow(row) {
23409
+ if (row.lastLoadFailed === true) return false;
23410
+ return !(row.owner === "agent" && row.active !== true);
23411
+ }
23315
23412
  function readSession(path2, log2 = () => {
23316
23413
  }) {
23317
23414
  try {
@@ -23332,13 +23429,20 @@ function readSession(path2, log2 = () => {
23332
23429
  }
23333
23430
  if (!Array.isArray(file.tabs)) return [];
23334
23431
  const sane = file.tabs.map(saneTab).filter((tab) => tab !== null);
23335
- const restorableRows = sane.filter((tab) => tab.lastLoadFailed !== true);
23336
- const dead = sane.length - restorableRows.length;
23432
+ const unflagged = sane.filter((tab) => tab.lastLoadFailed !== true);
23433
+ const dead = sane.length - unflagged.length;
23337
23434
  if (dead > 0) {
23338
23435
  log2(
23339
23436
  `[browser] ${dead} recorded tab(s) were showing a load failure when the session ended; not restored`
23340
23437
  );
23341
23438
  }
23439
+ const restorableRows = unflagged.filter(restorableRow);
23440
+ const agentSkipped = unflagged.length - restorableRows.length;
23441
+ if (agentSkipped > 0) {
23442
+ log2(
23443
+ `[browser] ${agentSkipped} recorded tab(s) were opened by an agent and were not active at the quit; not restored`
23444
+ );
23445
+ }
23342
23446
  const { kept, dropped } = boundTabs(restorableRows);
23343
23447
  if (dropped) {
23344
23448
  log2(
@@ -23374,9 +23478,10 @@ function captureTabs(records, activeTabId, failedTabIds) {
23374
23478
  ...entry.pageState ? { pageState: entry.pageState } : {}
23375
23479
  })) : [];
23376
23480
  const mark = failedTabIds.has(record.tabId) ? { lastLoadFailed: true } : {};
23481
+ const owner = record.handedFrom === "user" ? "user" : record.owner;
23377
23482
  if (entries.some(restorable)) {
23378
23483
  captured.push({
23379
- owner: record.owner,
23484
+ owner,
23380
23485
  active: record.tabId === activeTabId,
23381
23486
  ...mark,
23382
23487
  entries,
@@ -23387,7 +23492,7 @@ function captureTabs(records, activeTabId, failedTabIds) {
23387
23492
  const restored = record.restoreRow;
23388
23493
  if (restored) {
23389
23494
  captured.push({
23390
- owner: record.owner,
23495
+ owner,
23391
23496
  active: record.tabId === activeTabId,
23392
23497
  ...mark,
23393
23498
  entries: restored.entries,
@@ -23468,7 +23573,7 @@ class BrowserSessionStore {
23468
23573
  * explicitly instead of a representative sequence. */
23469
23574
  commitStopCapture(rows) {
23470
23575
  const decision = stopSnapshotDecision(
23471
- rows.filter((row) => row.lastLoadFailed !== true).length,
23576
+ rows.filter(restorableRow).length,
23472
23577
  readSession(this.path, this.log).length
23473
23578
  );
23474
23579
  if (decision.write) {
@@ -23972,6 +24077,12 @@ async function startBrowserHost(options) {
23972
24077
  };
23973
24078
  contents.on("will-navigate", onWillNavigate);
23974
24079
  contents.on("will-redirect", onWillNavigate);
24080
+ contents.on("before-input-event", (event, input) => {
24081
+ const direction = paneNavigationDirection(input);
24082
+ if (!direction) return;
24083
+ event.preventDefault();
24084
+ host.historyActive(direction);
24085
+ });
23975
24086
  const notifyChrome = () => {
23976
24087
  options.window.webContents.send("browser-state-changed");
23977
24088
  };
@@ -24044,6 +24155,14 @@ async function startBrowserHost(options) {
24044
24155
  event.preventDefault();
24045
24156
  log2("[browser] refused a webview attachment inside a popup");
24046
24157
  });
24158
+ childContents.on("before-input-event", (event, input) => {
24159
+ const direction = paneNavigationDirection(input);
24160
+ if (!direction) return;
24161
+ event.preventDefault();
24162
+ const navigation = childContents.navigationHistory;
24163
+ if (direction === "back") navigation.goBack();
24164
+ else navigation.goForward();
24165
+ });
24047
24166
  if (!options.backgroundThrottling) {
24048
24167
  childContents.setBackgroundThrottling(false);
24049
24168
  }
@@ -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-CVwZpL22.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-BllcynrC.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-bfmokOo7.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-BGnJVp5q.js";var S=/\s/;function z(n){for(var r=n.length;r--&&S.test(n.charAt(r)););return r}var G=/^\s+/;function H(n){return n&&n.slice(0,z(n)+1).replace(G,"")}var m=NaN,L=/^[-+]0x[0-9a-f]+$/i,R=/^0b[01]+$/i,q=/^0o[0-7]+$/i,C=parseInt;function K(n){if(typeof n=="number")return n;if(o(n))return m;if(g(n)){var r=typeof n.valueOf=="function"?n.valueOf():n;n=g(r)?r+"":r}if(typeof n!="string")return n===0?n:+n;n=H(n);var t=R.test(n);return t||q.test(n)?C(n.slice(2),t?2:8):L.test(n)?m:+n}var W=1/0,X=17976931348623157e292;function Y(n){if(!n)return n===0?n:0;if(n=K(n),n===W||n===-1/0){var r=n<0?-1:1;return r*X}return n===n?n:0}function D(n){var r=Y(n),t=r%1;return r===r?t?r-t:r:0}function fn(n){var r=n==null?0:n.length;return r?b(n):[]}var l=Object.prototype,J=l.hasOwnProperty,dn=y(function(n,r){n=Object(n);var t=-1,e=r.length,a=e>2?r[2]:void 0;for(a&&E(r[0],r[1],a)&&(e=1);++t<e;)for(var f=r[t],i=F(f),s=-1,d=i.length;++s<d;){var u=i[s],h=n[u];(h===void 0||M(h,l[u])&&!J.call(n,u))&&(n[u]=f[u])}return n});function un(n){var r=n==null?0:n.length;return r?n[r-1]:void 0}function Q(n){return function(r,t,e){var a=Object(r);if(!I(r)){var f=v(t);r=O(r),t=function(s){return f(a[s],s,a)}}var i=n(r,t,e);return i>-1?a[f?r[i]:i]:void 0}}var U=Math.max;function Z(n,r,t){var e=n==null?0:n.length;if(!e)return-1;var a=t==null?0:D(t);return a<0&&(a=U(e+a,0)),P(n,v(r),a)}var hn=Q(Z);function V(n,r){var t=-1,e=I(n)?Array(n.length):[];return p(n,function(a,f,i){e[++t]=r(a,f,i)}),e}function gn(n,r){var t=_(n)?w:V;return t(n,v(r))}var j=Object.prototype,k=j.hasOwnProperty;function nn(n,r){return n!=null&&k.call(n,r)}function vn(n,r){return n!=null&&A(n,r,nn)}function rn(n,r){return n<r}function tn(n,r,t){for(var e=-1,a=n.length;++e<a;){var f=n[e],i=r(f);if(i!=null&&(s===void 0?i===i&&!o(i):t(i,s)))var s=i,d=f}return d}function mn(n){return n&&n.length?tn(n,$,rn):void 0}function an(n,r,t,e){if(!g(n))return n;r=x(r,n);for(var a=-1,f=r.length,i=f-1,s=n;s!=null&&++a<f;){var d=c(r[a]),u=t;if(d==="__proto__"||d==="constructor"||d==="prototype")return n;if(a!=i){var h=s[d];u=void 0,u===void 0&&(u=g(h)?h:B(r[a+1])?[]:{})}T(s,d,u),s=s[d]}return n}function on(n,r,t){for(var e=-1,a=r.length,f={};++e<a;){var i=r[e],s=N(n,i);t(s,i)&&an(f,x(i,n),s)}return f}export{rn as a,tn as b,V as c,on as d,mn as e,fn as f,hn as g,vn as h,dn as i,D as j,un as l,gn as m,Y as t};
@@ -1 +1 @@
1
- import{aH as S,aI as Rn,ax as T,aJ as w,aK as xn,aL as Mn,aw as sn,aM as mn,aN as un,aO as x,au as U,aP as Cn,aQ as on,aR as Fn,aS as E,aF as gn,aT as R,as as ln,aU as Dn,aV as D,aW as Gn,aX as Un,aY as _,aA as Nn,aZ as Bn,av as Kn,a_ as X,a$ as Hn,b0 as jn,az as Yn,ay as cn,aD as Zn,b1 as m}from"./mermaid.core-BllcynrC.js";var qn="[object Symbol]";function N(n){return typeof n=="symbol"||S(n)&&Rn(n)==qn}function dn(n,r){for(var e=-1,t=n==null?0:n.length,a=Array(t);++e<t;)a[e]=r(n[e],e,n);return a}var J=w?w.prototype:void 0,Q=J?J.toString:void 0;function pn(n){if(typeof n=="string")return n;if(T(n))return dn(n,pn)+"";if(N(n))return Q?Q.call(n):"";var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function Xn(){}function An(n,r){for(var e=-1,t=n==null?0:n.length;++e<t&&r(n[e],e,n)!==!1;);return n}function Jn(n,r,e,t){for(var a=n.length,i=e+-1;++i<a;)if(r(n[i],i,n))return i;return-1}function Qn(n){return n!==n}function Wn(n,r,e){for(var t=e-1,a=n.length;++t<a;)if(n[t]===r)return t;return-1}function zn(n,r,e){return r===r?Wn(n,r,e):Jn(n,Qn,e)}function Vn(n,r){var e=n==null?0:n.length;return!!e&&zn(n,r,0)>-1}function $(n){return sn(n)?xn(n):Mn(n)}var kn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,nr=/^\w*$/;function B(n,r){if(T(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||N(n)?!0:nr.test(n)||!kn.test(n)||r!=null&&n in Object(r)}var rr=500;function er(n){var r=mn(n,function(t){return e.size===rr&&e.clear(),t}),e=r.cache;return r}var tr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ir=/\\(\\)?/g,ar=er(function(n){var r=[];return n.charCodeAt(0)===46&&r.push(""),n.replace(tr,function(e,t,a,i){r.push(a?i.replace(ir,"$1"):t||e)}),r});function fr(n){return n==null?"":pn(n)}function yn(n,r){return T(n)?n:B(n,r)?[n]:ar(fr(n))}function M(n){if(typeof n=="string"||N(n))return n;var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function bn(n,r){r=yn(r,n);for(var e=0,t=r.length;n!=null&&e<t;)n=n[M(r[e++])];return e&&e==t?n:void 0}function sr(n,r,e){var t=n==null?void 0:bn(n,r);return t===void 0?e:t}function K(n,r){for(var e=-1,t=r.length,a=n.length;++e<t;)n[a+e]=r[e];return n}var W=w?w.isConcatSpreadable:void 0;function ur(n){return T(n)||un(n)||!!(W&&n&&n[W])}function Ot(n,r,e,t,a){var i=-1,f=n.length;for(e||(e=ur),a||(a=[]);++i<f;){var s=n[i];e(s)?K(a,s):t||(a[a.length]=s)}return a}function or(n,r,e,t){var a=-1,i=n==null?0:n.length;for(t&&i&&(e=n[++a]);++a<i;)e=r(e,n[a],a,n);return e}function gr(n,r){return n&&x(r,$(r),n)}function lr(n,r){return n&&x(r,U(r),n)}function Tn(n,r){for(var e=-1,t=n==null?0:n.length,a=0,i=[];++e<t;){var f=n[e];r(f,e,n)&&(i[a++]=f)}return i}function hn(){return[]}var cr=Object.prototype,dr=cr.propertyIsEnumerable,z=Object.getOwnPropertySymbols,H=z?function(n){return n==null?[]:(n=Object(n),Tn(z(n),function(r){return dr.call(n,r)}))}:hn;function pr(n,r){return x(n,H(n),r)}var Ar=Object.getOwnPropertySymbols,wn=Ar?function(n){for(var r=[];n;)K(r,H(n)),n=Cn(n);return r}:hn;function yr(n,r){return x(n,wn(n),r)}function On(n,r,e){var t=r(n);return T(n)?t:K(t,e(n))}function G(n){return On(n,$,H)}function br(n){return On(n,U,wn)}var Tr=Object.prototype,hr=Tr.hasOwnProperty;function wr(n){var r=n.length,e=new n.constructor(r);return r&&typeof n[0]=="string"&&hr.call(n,"index")&&(e.index=n.index,e.input=n.input),e}function Or(n,r){var e=r?on(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.byteLength)}var $r=/\w*$/;function _r(n){var r=new n.constructor(n.source,$r.exec(n));return r.lastIndex=n.lastIndex,r}var V=w?w.prototype:void 0,k=V?V.valueOf:void 0;function Sr(n){return k?Object(k.call(n)):{}}var Er="[object Boolean]",Ir="[object Date]",Pr="[object Map]",vr="[object Number]",Lr="[object RegExp]",Rr="[object Set]",xr="[object String]",Mr="[object Symbol]",mr="[object ArrayBuffer]",Cr="[object DataView]",Fr="[object Float32Array]",Dr="[object Float64Array]",Gr="[object Int8Array]",Ur="[object Int16Array]",Nr="[object Int32Array]",Br="[object Uint8Array]",Kr="[object Uint8ClampedArray]",Hr="[object Uint16Array]",jr="[object Uint32Array]";function Yr(n,r,e){var t=n.constructor;switch(r){case mr:return on(n);case Er:case Ir:return new t(+n);case Cr:return Or(n,e);case Fr:case Dr:case Gr:case Ur:case Nr:case Br:case Kr:case Hr:case jr:return Fn(n,e);case Pr:return new t;case vr:case xr:return new t(n);case Lr:return _r(n);case Rr:return new t;case Mr:return Sr(n)}}var Zr="[object Map]";function qr(n){return S(n)&&E(n)==Zr}var nn=R&&R.isMap,Xr=nn?gn(nn):qr,Jr="[object Set]";function Qr(n){return S(n)&&E(n)==Jr}var rn=R&&R.isSet,Wr=rn?gn(rn):Qr,zr=1,Vr=2,kr=4,$n="[object Arguments]",ne="[object Array]",re="[object Boolean]",ee="[object Date]",te="[object Error]",_n="[object Function]",ie="[object GeneratorFunction]",ae="[object Map]",fe="[object Number]",Sn="[object Object]",se="[object RegExp]",ue="[object Set]",oe="[object String]",ge="[object Symbol]",le="[object WeakMap]",ce="[object ArrayBuffer]",de="[object DataView]",pe="[object Float32Array]",Ae="[object Float64Array]",ye="[object Int8Array]",be="[object Int16Array]",Te="[object Int32Array]",he="[object Uint8Array]",we="[object Uint8ClampedArray]",Oe="[object Uint16Array]",$e="[object Uint32Array]",g={};g[$n]=g[ne]=g[ce]=g[de]=g[re]=g[ee]=g[pe]=g[Ae]=g[ye]=g[be]=g[Te]=g[ae]=g[fe]=g[Sn]=g[se]=g[ue]=g[oe]=g[ge]=g[he]=g[we]=g[Oe]=g[$e]=!0;g[te]=g[_n]=g[le]=!1;function C(n,r,e,t,a,i){var f,s=r&zr,u=r&Vr,d=r&kr;if(f!==void 0)return f;if(!ln(n))return n;var l=T(n);if(l){if(f=wr(n),!s)return Dn(n,f)}else{var o=E(n),c=o==_n||o==ie;if(D(n))return Gn(n,s);if(o==Sn||o==$n||c&&!a){if(f=u||c?{}:Un(n),!s)return u?yr(n,lr(f,n)):pr(n,gr(f,n))}else{if(!g[o])return a?n:{};f=Yr(n,o,s)}}i||(i=new _);var h=i.get(n);if(h)return h;i.set(n,f),Wr(n)?n.forEach(function(p){f.add(C(p,r,e,p,n,i))}):Xr(n)&&n.forEach(function(p,A){f.set(A,C(p,r,e,A,n,i))});var y=d?u?br:G:u?U:$,b=l?void 0:y(n);return An(b||n,function(p,A){b&&(A=p,p=n[A]),Nn(f,A,C(p,r,e,A,n,i))}),f}var _e="__lodash_hash_undefined__";function Se(n){return this.__data__.set(n,_e),this}function Ee(n){return this.__data__.has(n)}function I(n){var r=-1,e=n==null?0:n.length;for(this.__data__=new Bn;++r<e;)this.add(n[r])}I.prototype.add=I.prototype.push=Se;I.prototype.has=Ee;function Ie(n,r){for(var e=-1,t=n==null?0:n.length;++e<t;)if(r(n[e],e,n))return!0;return!1}function En(n,r){return n.has(r)}var Pe=1,ve=2;function In(n,r,e,t,a,i){var f=e&Pe,s=n.length,u=r.length;if(s!=u&&!(f&&u>s))return!1;var d=i.get(n),l=i.get(r);if(d&&l)return d==r&&l==n;var o=-1,c=!0,h=e&ve?new I:void 0;for(i.set(n,r),i.set(r,n);++o<s;){var y=n[o],b=r[o];if(t)var p=f?t(b,y,o,r,n,i):t(y,b,o,n,r,i);if(p!==void 0){if(p)continue;c=!1;break}if(h){if(!Ie(r,function(A,O){if(!En(h,O)&&(y===A||a(y,A,e,t,i)))return h.push(O)})){c=!1;break}}else if(!(y===b||a(y,b,e,t,i))){c=!1;break}}return i.delete(n),i.delete(r),c}function Le(n){var r=-1,e=Array(n.size);return n.forEach(function(t,a){e[++r]=[a,t]}),e}function j(n){var r=-1,e=Array(n.size);return n.forEach(function(t){e[++r]=t}),e}var Re=1,xe=2,Me="[object Boolean]",me="[object Date]",Ce="[object Error]",Fe="[object Map]",De="[object Number]",Ge="[object RegExp]",Ue="[object Set]",Ne="[object String]",Be="[object Symbol]",Ke="[object ArrayBuffer]",He="[object DataView]",en=w?w.prototype:void 0,F=en?en.valueOf:void 0;function je(n,r,e,t,a,i,f){switch(e){case He:if(n.byteLength!=r.byteLength||n.byteOffset!=r.byteOffset)return!1;n=n.buffer,r=r.buffer;case Ke:return!(n.byteLength!=r.byteLength||!i(new X(n),new X(r)));case Me:case me:case De:return Kn(+n,+r);case Ce:return n.name==r.name&&n.message==r.message;case Ge:case Ne:return n==r+"";case Fe:var s=Le;case Ue:var u=t&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-BGnJVp5q.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,6 +1,6 @@
1
- import{r as F,j as e,c as G}from"./index-BPylsrgv.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-ChbBWsGj.js";import{b as ne,a as I,y as we}from"./aida-control-Dxs-zwz7.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-CpCEfkD6.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-CKZ36wuK.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-BSPpQ8Bq.js";import"./ui-preferences-store-2ZO9oo_L.js";import"./error-boundary-BA_k6l0v.js";import"./console-mirror-BF1k198x.js";import"./en-US-BkS8Ixxl.js";import"./book-open-Cr3wDsTU.js";/**
1
+ import{r as F,j as e,c as G}from"./index-C8q85hqs.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-Q1_CwjZE.js";import{b as ne,a as I,y as we}from"./aida-control-B8b5SXix.js";import{a8 as b,a9 as K,a3 as Y,aa as B,ab as be,ac as Ce,ad as ie,e as re,a as Ne,ae as Ae,B as ke,af as Se,ag as De,ah as J,a2 as Ee,ai as Fe,aj as Te}from"./index-FOmxzVhB.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-CaRKMTTG.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-B_qjSLGd.js";import"./ui-preferences-store-qSXgzAHu.js";import"./error-boundary-BheI-_hJ.js";import"./console-mirror-iQjAVQrh.js";import"./en-US-BkS8Ixxl.js";import"./book-open-ARKlovXx.js";/**
2
2
  * @license lucide-react v0.507.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
- */const Ue=[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}]],Re=_e("message-circle",Ue),T={all:["agent-comments"],list:t=>[...T.all,"list",t]},$e=({agentId:t,enabled:r=!0})=>ne({queryKey:T.list(t||"invalid"),queryFn:async()=>{if(!t)throw new Error("Agent ID is required to fetch comments.");return(await ue(t)).result},enabled:!!t&&r,staleTime:2*60*1e3,gcTime:5*60*1e3,refetchOnWindowFocus:!0}),We=()=>{const t=I(),{isAuthenticated:r}=b();return K({mutationFn:async a=>{const{agentId:i,data:s}=a;if(!r)throw new Error("Authentication required.");return he(i,s)},onSuccess:(a,i)=>{t.invalidateQueries({queryKey:T.list(i.agentId)}),B("Comment posted")},onError:a=>{Y(`Failed to post comment: ${a.message}`)}})},Ye=()=>{const t=I(),{isAuthenticated:r}=b();return K({mutationFn:async a=>{const{agentId:i,commentId:s,data:c}=a;if(!r)throw new Error("Authentication required.");return xe(i,s,c)},onSuccess:(a,i)=>{t.invalidateQueries({queryKey:T.list(i.agentId)}),B("Comment updated")},onError:a=>{Y(`Failed to update comment: ${a.message}`)}})},He=()=>{const t=I(),{isAuthenticated:r}=b();return K({mutationFn:async a=>{const{agentId:i,commentId:s}=a;if(!r)throw new Error("Authentication required.");return ge(i,s)},onSuccess:(a,i)=>{t.invalidateQueries({queryKey:T.list(i.agentId)}),B("Comment deleted")},onError:a=>{Y(`Failed to delete comment: ${a.message}`)}})},Ve=({agentId:t})=>{const{isAuthenticated:r,user:a}=b(),[i,s]=F.useState(""),[c,f]=F.useState(null),[h,C]=F.useState(""),{data:d,isLoading:_,error:N}=$e({agentId:t}),p=d?.records??[],A=We(),k=Ye(),S=He(),O=async n=>{if(n.preventDefault(),!(!i.trim()||!r||!t))try{await A.mutateAsync({agentId:t,data:{text:i}}),s("")}catch(o){console.error("Submit comment error caught in component:",o)}},m=(n,o)=>{f(n),C(o)},x=()=>{f(null),C("")},y=async()=>{if(!(!c||!h.trim()||!r||!t))try{await k.mutateAsync({agentId:t,commentId:c,data:{text:h}}),x()}catch(n){console.error("Update comment error caught in component:",n)}},Q=async n=>{if(!(!r||!t)&&window.confirm("Are you sure you want to delete this comment?"))try{await S.mutateAsync({agentId:t,commentId:n})}catch(o){console.error("Delete comment error caught in component:",o)}},U=n=>r&&a?.radientUser?.account?.id===n.account_id;return e.jsxs("div",{className:"mt-6",children:[e.jsx("h2",{className:"mb-4 font-semibold text-heading text-ink",children:"Comments"}),r?e.jsxs("div",{className:"mb-4 flex flex-col gap-1.5",children:[e.jsxs(Pe,{htmlFor:"new-comment",children:[e.jsx(Re,{size:14,"aria-hidden":"true"}),"Leave a comment"]}),e.jsxs("form",{onSubmit:O,className:"flex flex-col gap-3",children:[e.jsx(ee,{id:"new-comment",placeholder:"Share your thoughts...",rows:3,value:i,onChange:n=>s(n.target.value),required:!0}),e.jsx(l,{type:"submit",variant:"primary",disabled:A.isPending||!i.trim(),className:"self-end",children:A.isPending?e.jsx(z,{size:"sm",label:"Posting comment"}):"Post comment"})]})]}):e.jsx("p",{className:"mt-6 mb-4 text-body-sm text-ink-muted",children:"Sign in to leave comments."}),e.jsx(oe,{className:"my-6"}),_&&e.jsx("ul",{className:"flex flex-col",children:[...Array(3)].map((n,o)=>e.jsxs("li",{className:"flex gap-3 pb-6",children:[e.jsx(L,{children:e.jsx(M,{children:e.jsx(v,{className:"size-full"})})}),e.jsxs("div",{className:"flex w-full flex-col gap-1.5",children:[e.jsx(v,{className:"h-3.5 w-24"}),e.jsx(v,{className:"h-3 w-15"}),e.jsx(v,{className:"mt-2 h-3.5 w-full"}),e.jsx(v,{className:"h-3.5 w-4/5"})]})]},`skeleton-${o}`))}),N&&e.jsxs("p",{role:"alert",className:"my-6 text-body-sm text-danger",children:["Failed to load comments: ",N.message]}),!_&&!N&&e.jsx("ul",{className:"flex flex-col gap-6",children:p.length===0?e.jsx("li",{className:"text-body-sm text-ink-muted",children:"No comments yet. Yours would be the first."}):p.map(n=>c===n.id?e.jsxs("li",{className:"flex gap-3",children:[e.jsx(L,{children:e.jsx(M,{children:n.account_metadata?.name?.charAt(0).toUpperCase()||"?"})}),e.jsxs("div",{className:"flex w-full flex-col gap-2",children:[e.jsx(ee,{rows:3,value:h,onChange:o=>C(o.target.value),autoFocus:!0,"aria-label":"Edit comment"}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsxs(l,{variant:"secondary",size:"sm",onClick:x,children:[e.jsx(qe,{}),"Cancel"]}),e.jsxs(l,{variant:"primary",size:"sm",onClick:y,disabled:k.isPending||!h.trim(),children:[k.isPending?e.jsx(z,{size:"xs",label:"Saving comment"}):e.jsx(be,{}),"Save"]})]})]})]},n.id):e.jsxs("li",{className:"flex gap-3",children:[e.jsx(L,{children:e.jsx(M,{children:n.account_metadata?.name?.charAt(0).toUpperCase()||"?"})}),e.jsxs("div",{className:"w-full",children:[e.jsxs("div",{className:"flex w-full items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-body text-ink",children:n.account_metadata?.name||"Anonymous"}),e.jsxs("p",{className:"text-ink-muted text-meta",children:[W(new Date(n.created_at))," ","ago"]})]}),U(n)&&e.jsxs("div",{className:"flex gap-0.5",children:[e.jsx(w,{content:"Edit comment",children:e.jsx(l,{variant:"ghost",size:"icon-sm",onClick:()=>m(n.id,n.text),disabled:!!c,"aria-label":"Edit comment",children:e.jsx(Ce,{})})}),e.jsx(w,{content:"Delete comment",children:e.jsx(l,{variant:"ghost",size:"icon-sm",onClick:()=>Q(n.id),disabled:!!c,"aria-label":"Delete comment",children:e.jsx(ie,{})})})]})]}),e.jsx("p",{className:"mt-2 text-body-sm text-ink whitespace-pre-wrap",children:n.text})]})]},n.id))})]})},H={all:["agent-details"],detail:t=>[...H.all,t]},Xe=({agentId:t,enabled:r=!0})=>ne({queryKey:H.detail(t||"invalid"),queryFn:async()=>{if(!t)throw new Error("Agent ID is required to fetch details.");return await je(t)},select:i=>i.result,enabled:!!t&&r,staleTime:3e5,gcTime:6e5,refetchOnWindowFocus:!1}),Ze=()=>{const t=I(),r=re(),{isAuthenticated:a}=b();return K({mutationFn:async({agentId:s})=>{if(!a)throw new Error("Authentication required to delist an agent.");if(!s)throw new Error("Agent ID is required to delist.");return pe(s)},onSuccess:(s,c)=>{B("Agent delisted"),t.invalidateQueries({queryKey:H.detail(c.agentId)}),fe(t),r("/agent-hub")},onError:s=>{console.error("Delist agent error:",s)}})},Ge={like:"The like did not go through",favourite:"The favourite did not go through",download:"The download did not start",delist:"The agent was not delisted"},$=({children:t})=>e.jsx("span",{className:"inline-flex h-4 min-w-5 items-center text-meta text-ink-muted",children:t}),dt=()=>{const{agentId:t}=Ne(),r=re(),{isAuthenticated:a,user:i}=b(),{data:s,isLoading:c,isFetching:f,error:h,refetch:C}=Xe({agentId:t??"",enabled:!!t}),d=s?.visibility==="org",{memberships:_}=ye({enabled:d}),N=d?_.find(me=>me.tenant_id===s?.tenant_id)?.tenant_name??null:null,{statuses:p,isKnown:A,isError:k,isFetching:S,refetch:O}=Le({agentIds:t&&!d?[t]:[]}),m=Me(A,p,t),x=m&&p[t??""]?.liked===!0,y=m&&p[t??""]?.favourited===!0,Q=s?.like_count??0,U=s?.favourite_count??0,n=s?.download_count??0,o=ze(),P=Ie(),D=Ke(),g=Ze(),[le,q]=F.useState(!1),[j,u]=F.useState(null),R=!!i&&!!s&&i.radientUser?.account?.id===s.account_id,V=()=>{!t||!a||o.isPending||(u(null),o.mutate({agentId:t,isCurrentlyLiked:x},{onError:()=>u("like")}))},X=()=>{!t||!a||P.isPending||(u(null),P.mutate({agentId:t,isCurrentlyFavourited:y},{onError:()=>u("favourite")}))},Z=()=>{!t||!s||D.isPending||(u(null),D.mutate({agentId:s.id,agentName:s.name},{onError:()=>u("download")}))},ce=()=>{!t||!R||g.isPending||(u(null),g.mutate({agentId:t},{onError:()=>u("delist")}),q(!1))},E=j?j==="like"?{action:"like",error:o.error,retry:V}:j==="favourite"?{action:"favourite",error:P.error,retry:X}:j==="download"?{action:"download",error:D.error,retry:Z}:{action:"delist",error:g.error,retry:void 0}:null,de=()=>{r("/agent-hub")};return c?e.jsx("div",{className:"flex h-full items-center justify-center",children:e.jsx(z,{label:"Loading agent details"})}):h?e.jsx("div",{className:"flex h-full items-center justify-center p-6",children:e.jsxs(te,{variant:"danger",className:"max-w-2xl",children:[e.jsx(se,{children:"This agent could not be loaded"}),e.jsx(ae,{children:we("The Radient agent catalogue did not answer.",h)}),e.jsx("div",{className:"mt-2",children:e.jsx(l,{variant:"outline",size:"sm",onClick:()=>void C(),disabled:f,"aria-busy":f,children:f?"Trying…":"Try again"})})]})}):s?e.jsxs("div",{className:"m-6 flex flex-1 flex-col rounded-md bg-surface p-8",children:[e.jsxs("div",{className:"mb-6 flex items-center justify-between gap-4",children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-4",children:[e.jsx(l,{variant:"ghost",size:"icon",onClick:de,"aria-label":"Back to Agent hub",children:e.jsx(Ae,{})}),e.jsx(L,{className:"size-11 shrink-0",children:e.jsx(M,{children:e.jsx(ke,{size:22,"aria-hidden":"true"})})}),e.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[e.jsx("h1",{className:"truncate text-display text-ink",children:s.name}),d&&e.jsx(Be,{orgName:N})]})]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-1",children:[!d&&e.jsxs(e.Fragment,{children:[e.jsx(w,{content:"Sign in to Radient to use this feature",disabled:a,children:e.jsx("span",{children:e.jsxs(l,{variant:"ghost",size:"sm",onClick:V,disabled:!a||o.isPending||!m,"aria-label":m?x?"Unlike agent":"Like agent":"Like state unavailable",className:G(x&&"text-danger"),children:[e.jsx(Oe,{fill:x?"currentColor":"none"}),e.jsx($,{children:Q})]})})}),e.jsx(w,{content:"Sign in to Radient to use this feature",disabled:a,children:e.jsx("span",{children:e.jsxs(l,{variant:"ghost",size:"sm",onClick:X,disabled:!a||P.isPending||!m,"aria-label":m?y?"Unfavourite agent":"Favourite agent":"Favourite state unavailable",className:G(y&&"text-warning"),children:[e.jsx(Se,{fill:y?"currentColor":"none"}),e.jsx($,{children:U})]})})})]}),e.jsx(w,{content:"Download agent to your computer",children:e.jsx("span",{children:e.jsxs(l,{variant:"ghost",size:"icon",onClick:Z,disabled:D.isPending,"aria-label":"Download agent",className:"ml-1",children:[e.jsx(De,{}),e.jsx($,{children:D.isPending?e.jsx(v,{className:"h-3.5 w-5"}):n})]})})}),R&&!d&&e.jsx(w,{content:"Permanently delist this agent from Agent hub",children:e.jsx("span",{children:e.jsx(l,{variant:"ghost",size:"icon",onClick:()=>q(!0),disabled:g.isPending,"aria-label":"Delist agent",className:"ml-1 text-danger hover:bg-danger-wash hover:text-danger",children:e.jsx(ie,{})})})})]})]}),a&&k&&!j&&!d&&e.jsxs("output",{className:"mb-6 flex flex-wrap items-center gap-2 text-meta text-warning","data-testid":"agent-details-status-unknown",children:[e.jsx("span",{children:"Your likes and favourites could not be read, so this agent's viewer state is not shown."}),e.jsx(l,{variant:"ghost",size:"sm",onClick:()=>void O(),disabled:S,"aria-busy":S,children:S?"Trying…":"Try again"})]}),E&&j&&e.jsxs(te,{variant:"danger",className:"mb-6","data-testid":"agent-details-error",children:[e.jsx(se,{children:Ge[j]}),e.jsx(ae,{children:ve(E.action,E.error,s.name)}),E.retry&&e.jsx("div",{className:"mt-2",children:e.jsx(l,{variant:"outline",size:"sm",onClick:E.retry,children:"Try again"})})]}),e.jsx(Qe,{tags:s.tags,categories:s.categories}),e.jsxs("div",{className:"mt-4 mb-6 flex flex-col gap-2 text-body-sm text-ink-muted",children:[e.jsxs("p",{children:["Created by: ",s.account_metadata?.name??"Unknown"," (",s.account_metadata?.email??"No email",")"]}),e.jsxs("p",{children:["Created: ",W(new Date(s.created_at))," ago (",J(s.created_at),")"]}),e.jsxs("p",{children:["Last modified: ",W(new Date(s.updated_at))," ","ago (",J(s.updated_at),")"]})]}),e.jsx("div",{className:"mt-2 mb-8 leading-relaxed text-body text-ink",children:s.description||"No description provided."}),e.jsx(oe,{className:"my-6"}),!d&&e.jsx(Ve,{agentId:s.id}),e.jsx(Ee,{open:le,onClose:()=>q(!1),title:"Delist this agent?",maxWidth:"xs",actions:e.jsxs(e.Fragment,{children:[e.jsx(Fe,{onClick:()=>q(!1),children:"Cancel"}),e.jsx(Te,{onClick:()=>{!t||!R||g.isPending||ce()},disabled:g.isPending,children:g.isPending?e.jsx(z,{size:"sm",label:"Delisting agent"}):"Delist"})]}),dialogProps:{"aria-describedby":"delist-dialog-description"},children:e.jsxs("div",{id:"delist-dialog-description",className:"text-body text-ink-muted",children:['This takes "',s.name,'" off the hub straight away, and nobody will be able to download it. You can upload it again later.']})})]}):e.jsx("div",{className:"flex h-full items-center justify-center",children:e.jsx("p",{className:"text-body text-ink",children:"Agent not found."})})};export{dt as AgentDetailsPage};
6
+ */const Ue=[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}]],Re=_e("message-circle",Ue),T={all:["agent-comments"],list:t=>[...T.all,"list",t]},$e=({agentId:t,enabled:r=!0})=>ne({queryKey:T.list(t||"invalid"),queryFn:async()=>{if(!t)throw new Error("Agent ID is required to fetch comments.");return(await ue(t)).result},enabled:!!t&&r,staleTime:2*60*1e3,gcTime:5*60*1e3,refetchOnWindowFocus:!0}),We=()=>{const t=I(),{isAuthenticated:r}=b();return K({mutationFn:async a=>{const{agentId:i,data:s}=a;if(!r)throw new Error("Authentication required.");return he(i,s)},onSuccess:(a,i)=>{t.invalidateQueries({queryKey:T.list(i.agentId)}),B("Comment posted")},onError:a=>{Y(`Failed to post comment: ${a.message}`)}})},Ye=()=>{const t=I(),{isAuthenticated:r}=b();return K({mutationFn:async a=>{const{agentId:i,commentId:s,data:c}=a;if(!r)throw new Error("Authentication required.");return xe(i,s,c)},onSuccess:(a,i)=>{t.invalidateQueries({queryKey:T.list(i.agentId)}),B("Comment updated")},onError:a=>{Y(`Failed to update comment: ${a.message}`)}})},He=()=>{const t=I(),{isAuthenticated:r}=b();return K({mutationFn:async a=>{const{agentId:i,commentId:s}=a;if(!r)throw new Error("Authentication required.");return ge(i,s)},onSuccess:(a,i)=>{t.invalidateQueries({queryKey:T.list(i.agentId)}),B("Comment deleted")},onError:a=>{Y(`Failed to delete comment: ${a.message}`)}})},Ve=({agentId:t})=>{const{isAuthenticated:r,user:a}=b(),[i,s]=F.useState(""),[c,f]=F.useState(null),[h,C]=F.useState(""),{data:d,isLoading:_,error:N}=$e({agentId:t}),p=d?.records??[],A=We(),k=Ye(),S=He(),O=async n=>{if(n.preventDefault(),!(!i.trim()||!r||!t))try{await A.mutateAsync({agentId:t,data:{text:i}}),s("")}catch(o){console.error("Submit comment error caught in component:",o)}},m=(n,o)=>{f(n),C(o)},x=()=>{f(null),C("")},y=async()=>{if(!(!c||!h.trim()||!r||!t))try{await k.mutateAsync({agentId:t,commentId:c,data:{text:h}}),x()}catch(n){console.error("Update comment error caught in component:",n)}},Q=async n=>{if(!(!r||!t)&&window.confirm("Are you sure you want to delete this comment?"))try{await S.mutateAsync({agentId:t,commentId:n})}catch(o){console.error("Delete comment error caught in component:",o)}},U=n=>r&&a?.radientUser?.account?.id===n.account_id;return e.jsxs("div",{className:"mt-6",children:[e.jsx("h2",{className:"mb-4 font-semibold text-heading text-ink",children:"Comments"}),r?e.jsxs("div",{className:"mb-4 flex flex-col gap-1.5",children:[e.jsxs(Pe,{htmlFor:"new-comment",children:[e.jsx(Re,{size:14,"aria-hidden":"true"}),"Leave a comment"]}),e.jsxs("form",{onSubmit:O,className:"flex flex-col gap-3",children:[e.jsx(ee,{id:"new-comment",placeholder:"Share your thoughts...",rows:3,value:i,onChange:n=>s(n.target.value),required:!0}),e.jsx(l,{type:"submit",variant:"primary",disabled:A.isPending||!i.trim(),className:"self-end",children:A.isPending?e.jsx(z,{size:"sm",label:"Posting comment"}):"Post comment"})]})]}):e.jsx("p",{className:"mt-6 mb-4 text-body-sm text-ink-muted",children:"Sign in to leave comments."}),e.jsx(oe,{className:"my-6"}),_&&e.jsx("ul",{className:"flex flex-col",children:[...Array(3)].map((n,o)=>e.jsxs("li",{className:"flex gap-3 pb-6",children:[e.jsx(L,{children:e.jsx(M,{children:e.jsx(v,{className:"size-full"})})}),e.jsxs("div",{className:"flex w-full flex-col gap-1.5",children:[e.jsx(v,{className:"h-3.5 w-24"}),e.jsx(v,{className:"h-3 w-15"}),e.jsx(v,{className:"mt-2 h-3.5 w-full"}),e.jsx(v,{className:"h-3.5 w-4/5"})]})]},`skeleton-${o}`))}),N&&e.jsxs("p",{role:"alert",className:"my-6 text-body-sm text-danger",children:["Failed to load comments: ",N.message]}),!_&&!N&&e.jsx("ul",{className:"flex flex-col gap-6",children:p.length===0?e.jsx("li",{className:"text-body-sm text-ink-muted",children:"No comments yet. Yours would be the first."}):p.map(n=>c===n.id?e.jsxs("li",{className:"flex gap-3",children:[e.jsx(L,{children:e.jsx(M,{children:n.account_metadata?.name?.charAt(0).toUpperCase()||"?"})}),e.jsxs("div",{className:"flex w-full flex-col gap-2",children:[e.jsx(ee,{rows:3,value:h,onChange:o=>C(o.target.value),autoFocus:!0,"aria-label":"Edit comment"}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsxs(l,{variant:"secondary",size:"sm",onClick:x,children:[e.jsx(qe,{}),"Cancel"]}),e.jsxs(l,{variant:"primary",size:"sm",onClick:y,disabled:k.isPending||!h.trim(),children:[k.isPending?e.jsx(z,{size:"xs",label:"Saving comment"}):e.jsx(be,{}),"Save"]})]})]})]},n.id):e.jsxs("li",{className:"flex gap-3",children:[e.jsx(L,{children:e.jsx(M,{children:n.account_metadata?.name?.charAt(0).toUpperCase()||"?"})}),e.jsxs("div",{className:"w-full",children:[e.jsxs("div",{className:"flex w-full items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-body text-ink",children:n.account_metadata?.name||"Anonymous"}),e.jsxs("p",{className:"text-ink-muted text-meta",children:[W(new Date(n.created_at))," ","ago"]})]}),U(n)&&e.jsxs("div",{className:"flex gap-0.5",children:[e.jsx(w,{content:"Edit comment",children:e.jsx(l,{variant:"ghost",size:"icon-sm",onClick:()=>m(n.id,n.text),disabled:!!c,"aria-label":"Edit comment",children:e.jsx(Ce,{})})}),e.jsx(w,{content:"Delete comment",children:e.jsx(l,{variant:"ghost",size:"icon-sm",onClick:()=>Q(n.id),disabled:!!c,"aria-label":"Delete comment",children:e.jsx(ie,{})})})]})]}),e.jsx("p",{className:"mt-2 text-body-sm text-ink whitespace-pre-wrap",children:n.text})]})]},n.id))})]})},H={all:["agent-details"],detail:t=>[...H.all,t]},Xe=({agentId:t,enabled:r=!0})=>ne({queryKey:H.detail(t||"invalid"),queryFn:async()=>{if(!t)throw new Error("Agent ID is required to fetch details.");return await je(t)},select:i=>i.result,enabled:!!t&&r,staleTime:3e5,gcTime:6e5,refetchOnWindowFocus:!1}),Ze=()=>{const t=I(),r=re(),{isAuthenticated:a}=b();return K({mutationFn:async({agentId:s})=>{if(!a)throw new Error("Authentication required to delist an agent.");if(!s)throw new Error("Agent ID is required to delist.");return pe(s)},onSuccess:(s,c)=>{B("Agent delisted"),t.invalidateQueries({queryKey:H.detail(c.agentId)}),fe(t),r("/agent-hub")},onError:s=>{console.error("Delist agent error:",s)}})},Ge={like:"The like did not go through",favourite:"The favourite did not go through",download:"The download did not start",delist:"The agent was not delisted"},$=({children:t})=>e.jsx("span",{className:"inline-flex h-4 min-w-5 items-center text-meta text-ink-muted",children:t}),dt=()=>{const{agentId:t}=Ne(),r=re(),{isAuthenticated:a,user:i}=b(),{data:s,isLoading:c,isFetching:f,error:h,refetch:C}=Xe({agentId:t??"",enabled:!!t}),d=s?.visibility==="org",{memberships:_}=ye({enabled:d}),N=d?_.find(me=>me.tenant_id===s?.tenant_id)?.tenant_name??null:null,{statuses:p,isKnown:A,isError:k,isFetching:S,refetch:O}=Le({agentIds:t&&!d?[t]:[]}),m=Me(A,p,t),x=m&&p[t??""]?.liked===!0,y=m&&p[t??""]?.favourited===!0,Q=s?.like_count??0,U=s?.favourite_count??0,n=s?.download_count??0,o=ze(),P=Ie(),D=Ke(),g=Ze(),[le,q]=F.useState(!1),[j,u]=F.useState(null),R=!!i&&!!s&&i.radientUser?.account?.id===s.account_id,V=()=>{!t||!a||o.isPending||(u(null),o.mutate({agentId:t,isCurrentlyLiked:x},{onError:()=>u("like")}))},X=()=>{!t||!a||P.isPending||(u(null),P.mutate({agentId:t,isCurrentlyFavourited:y},{onError:()=>u("favourite")}))},Z=()=>{!t||!s||D.isPending||(u(null),D.mutate({agentId:s.id,agentName:s.name},{onError:()=>u("download")}))},ce=()=>{!t||!R||g.isPending||(u(null),g.mutate({agentId:t},{onError:()=>u("delist")}),q(!1))},E=j?j==="like"?{action:"like",error:o.error,retry:V}:j==="favourite"?{action:"favourite",error:P.error,retry:X}:j==="download"?{action:"download",error:D.error,retry:Z}:{action:"delist",error:g.error,retry:void 0}:null,de=()=>{r("/agent-hub")};return c?e.jsx("div",{className:"flex h-full items-center justify-center",children:e.jsx(z,{label:"Loading agent details"})}):h?e.jsx("div",{className:"flex h-full items-center justify-center p-6",children:e.jsxs(te,{variant:"danger",className:"max-w-2xl",children:[e.jsx(se,{children:"This agent could not be loaded"}),e.jsx(ae,{children:we("The Radient agent catalogue did not answer.",h)}),e.jsx("div",{className:"mt-2",children:e.jsx(l,{variant:"outline",size:"sm",onClick:()=>void C(),disabled:f,"aria-busy":f,children:f?"Trying…":"Try again"})})]})}):s?e.jsxs("div",{className:"m-6 flex flex-1 flex-col rounded-md bg-surface p-8",children:[e.jsxs("div",{className:"mb-6 flex items-center justify-between gap-4",children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-4",children:[e.jsx(l,{variant:"ghost",size:"icon",onClick:de,"aria-label":"Back to Agent hub",children:e.jsx(Ae,{})}),e.jsx(L,{className:"size-11 shrink-0",children:e.jsx(M,{children:e.jsx(ke,{size:22,"aria-hidden":"true"})})}),e.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[e.jsx("h1",{className:"truncate text-display text-ink",children:s.name}),d&&e.jsx(Be,{orgName:N})]})]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-1",children:[!d&&e.jsxs(e.Fragment,{children:[e.jsx(w,{content:"Sign in to Radient to use this feature",disabled:a,children:e.jsx("span",{children:e.jsxs(l,{variant:"ghost",size:"sm",onClick:V,disabled:!a||o.isPending||!m,"aria-label":m?x?"Unlike agent":"Like agent":"Like state unavailable",className:G(x&&"text-danger"),children:[e.jsx(Oe,{fill:x?"currentColor":"none"}),e.jsx($,{children:Q})]})})}),e.jsx(w,{content:"Sign in to Radient to use this feature",disabled:a,children:e.jsx("span",{children:e.jsxs(l,{variant:"ghost",size:"sm",onClick:X,disabled:!a||P.isPending||!m,"aria-label":m?y?"Unfavourite agent":"Favourite agent":"Favourite state unavailable",className:G(y&&"text-warning"),children:[e.jsx(Se,{fill:y?"currentColor":"none"}),e.jsx($,{children:U})]})})})]}),e.jsx(w,{content:"Download agent to your computer",children:e.jsx("span",{children:e.jsxs(l,{variant:"ghost",size:"icon",onClick:Z,disabled:D.isPending,"aria-label":"Download agent",className:"ml-1",children:[e.jsx(De,{}),e.jsx($,{children:D.isPending?e.jsx(v,{className:"h-3.5 w-5"}):n})]})})}),R&&!d&&e.jsx(w,{content:"Permanently delist this agent from Agent hub",children:e.jsx("span",{children:e.jsx(l,{variant:"ghost",size:"icon",onClick:()=>q(!0),disabled:g.isPending,"aria-label":"Delist agent",className:"ml-1 text-danger hover:bg-danger-wash hover:text-danger",children:e.jsx(ie,{})})})})]})]}),a&&k&&!j&&!d&&e.jsxs("output",{className:"mb-6 flex flex-wrap items-center gap-2 text-meta text-warning","data-testid":"agent-details-status-unknown",children:[e.jsx("span",{children:"Your likes and favourites could not be read, so this agent's viewer state is not shown."}),e.jsx(l,{variant:"ghost",size:"sm",onClick:()=>void O(),disabled:S,"aria-busy":S,children:S?"Trying…":"Try again"})]}),E&&j&&e.jsxs(te,{variant:"danger",className:"mb-6","data-testid":"agent-details-error",children:[e.jsx(se,{children:Ge[j]}),e.jsx(ae,{children:ve(E.action,E.error,s.name)}),E.retry&&e.jsx("div",{className:"mt-2",children:e.jsx(l,{variant:"outline",size:"sm",onClick:E.retry,children:"Try again"})})]}),e.jsx(Qe,{tags:s.tags,categories:s.categories}),e.jsxs("div",{className:"mt-4 mb-6 flex flex-col gap-2 text-body-sm text-ink-muted",children:[e.jsxs("p",{children:["Created by: ",s.account_metadata?.name??"Unknown",s.account_metadata?.email?` (${s.account_metadata.email})`:""]}),e.jsxs("p",{children:["Created: ",W(new Date(s.created_at))," ago (",J(s.created_at),")"]}),e.jsxs("p",{children:["Last modified: ",W(new Date(s.updated_at))," ","ago (",J(s.updated_at),")"]})]}),e.jsx("div",{className:"mt-2 mb-8 leading-relaxed text-body text-ink",children:s.description||"No description provided."}),e.jsx(oe,{className:"my-6"}),!d&&e.jsx(Ve,{agentId:s.id}),e.jsx(Ee,{open:le,onClose:()=>q(!1),title:"Delist this agent?",maxWidth:"xs",actions:e.jsxs(e.Fragment,{children:[e.jsx(Fe,{onClick:()=>q(!1),children:"Cancel"}),e.jsx(Te,{onClick:()=>{!t||!R||g.isPending||ce()},disabled:g.isPending,children:g.isPending?e.jsx(z,{size:"sm",label:"Delisting agent"}):"Delist"})]}),dialogProps:{"aria-describedby":"delist-dialog-description"},children:e.jsxs("div",{id:"delist-dialog-description",className:"text-body text-ink-muted",children:['This takes "',s.name,'" off the hub straight away, and nobody will be able to download it. You can upload it again later.']})})]}):e.jsx("div",{className:"flex h-full items-center justify-center",children:e.jsx("p",{className:"text-body text-ink",children:"Agent not found."})})};export{dt as AgentDetailsPage};
@@ -0,0 +1,11 @@
1
+ import{r as n,j as e,c as O}from"./index-C8q85hqs.js";import{b as is,C as rs,a as ls,i as ke,y as Ie,u as os,I as cs}from"./aida-control-B8b5SXix.js";import{P as ds}from"./page-header-B2VyeyKK.js";import{c as Me,g as J,B as g,f as x,E as us,A as K,h as ee,i as se,F as ms,G as hs,H as gs,J as xs,I as fs,p as Te,q as Ce,r as Se,s as Re,t as Ae}from"./textarea-CaRKMTTG.js";import{e as Fe,a8 as de,af as ps,ag as _e,aU as bs,r as js,aV as vs,a9 as ys,aW as Ns,aa as ws,aX as ks,a4 as Ts,aY as Cs,aZ as Ss,a_ as Rs}from"./index-FOmxzVhB.js";import{e as As,f as _s,p as Ps,P as zs,b as Es,h as Os}from"./use-memberships-query-Q1_CwjZE.js";import{O as Is,A as Ms,f as Fs,H as Ls,a as $s,b as Ds,c as Vs,d as Le,C as Bs,u as Us,i as qs}from"./use-download-agent-mutation-B_qjSLGd.js";import{R as Hs}from"./radient-auth-buttons-DUT18lNx.js";import{o as $e,u as Ys,a as Qs,b as Ws}from"./org-surface-gate-CZiYqd1P.js";import"./ui-preferences-store-qSXgzAHu.js";import"./error-boundary-BheI-_hJ.js";import"./console-mirror-iQjAVQrh.js";import"./en-US-BkS8Ixxl.js";import"./book-open-ARKlovXx.js";/**
2
+ * @license lucide-react v0.507.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const Gs=[["path",{d:"M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z",key:"1b4qmf"}],["path",{d:"M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2",key:"i71pzd"}],["path",{d:"M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2",key:"10jefs"}],["path",{d:"M10 6h4",key:"1itunk"}],["path",{d:"M10 10h4",key:"tcdvrf"}],["path",{d:"M10 14h4",key:"kelpxr"}],["path",{d:"M10 18h4",key:"1ulq68"}]],De=Me("building-2",Gs);/**
7
+ * @license lucide-react v0.507.0 - ISC
8
+ *
9
+ * This source code is licensed under the ISC license.
10
+ * See the LICENSE file in the root directory of this source tree.
11
+ */const Zs=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M17 12h.01",key:"1m0b6t"}],["path",{d:"M12 12h.01",key:"1mp3jc"}],["path",{d:"M7 12h.01",key:"eqddd0"}]],Js=Me("circle-ellipsis",Zs),Xs=({agent:a,isLiked:t,isFavourited:i,onLikeToggle:r,onFavouriteToggle:l,onDownload:o,isLikeActionLoading:m=!1,isFavouriteActionLoading:j=!1,isDownloading:h=!1,actionError:d=null,onRetryAction:v,showActions:y=!0,viewerStateKnown:p=!0,orgName:b=null})=>{const N=Fe(),{isAuthenticated:u}=de(),I=a.description??"",[M,F]=n.useState(!1),C=n.useRef(null),E=n.useCallback(L=>{if(C.current?.disconnect(),C.current=null,!L)return;const H=()=>F(L.scrollHeight-L.clientHeight>1);H();const Y=new ResizeObserver(H);Y.observe(L),C.current=Y},[]),c=u?p?t?"Unlike agent":"Like agent":"Your likes could not be read, so this is not shown as unliked.":"Log in to Radient to like agents",f=u?p?i?"Unfavourite agent":"Favourite agent":"Your favourites could not be read, so this is not shown as unfavourited.":"Log in to Radient to favourite agents",U=p?t?"Unlike agent":"Like agent":"Like state unavailable",q=p?i?"Unfavourite agent":"Favourite agent":"Favourite state unavailable",A=a.visibility==="org";return e.jsxs("div",{className:"flex h-full flex-col overflow-hidden rounded-md bg-surface transition-colors duration-fast ease-out-quart hover:bg-elevated",children:[e.jsxs("button",{type:"button",onClick:()=>N(`/agent-hub/${a.id}`),className:"flex min-h-0 flex-1 cursor-pointer flex-col gap-2 p-4 text-left","aria-label":`View details for ${a.name}`,children:[e.jsx("h3",{className:"truncate font-medium text-heading text-ink",children:a.name}),A&&e.jsx(Is,{orgName:b}),e.jsx(J,{content:M?I:"",children:e.jsx("span",{ref:E,className:"line-clamp-3 min-h-0 text-body-sm text-ink-muted",children:I})}),e.jsxs("div",{className:"mt-auto flex flex-col gap-2 pt-2",children:[e.jsx(Ms,{tags:a.tags,categories:a.categories}),e.jsxs("p",{className:"truncate text-ink-dim text-meta",children:[a.account_metadata?.name??"Unknown author",e.jsx("span",{"aria-hidden":"true",className:"mx-1.5",children:"·"}),"updated ",Fs(new Date(a.updated_at))," ago"]})]})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-x-2 gap-y-1 border-t border-hairline px-3 py-2",children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-0.5","data-viewer-state":A?"org":u?p?"known":"unknown":"signed-out",children:[!A&&e.jsxs(e.Fragment,{children:[e.jsx(J,{content:c,children:e.jsx("span",{children:e.jsxs(g,{variant:"ghost",size:"sm",onClick:u&&p?()=>r(a.id):void 0,disabled:m||!u||!p,"aria-label":U,className:O(t&&"text-danger"),children:[e.jsx(Ls,{fill:t?"currentColor":"none","data-testid":"agent-like-heart"}),e.jsx("span",{"data-testid":"agent-like-count",className:"inline-flex h-4 min-w-4 items-center font-mono text-mono-sm text-ink-muted",children:a.like_count??0})]})})}),e.jsx(J,{content:f,children:e.jsx("span",{children:e.jsxs(g,{variant:"ghost",size:"sm",onClick:u?()=>l(a.id):void 0,disabled:j||!u||!p,"aria-label":q,className:O(i&&"text-warning"),children:[e.jsx(ps,{fill:i?"currentColor":"none","data-testid":"agent-favourite-star"}),e.jsx("span",{"data-testid":"agent-favourite-count",className:"inline-flex h-4 min-w-4 items-center font-mono text-mono-sm text-ink-muted",children:a.favourite_count??0})]})})})]}),e.jsx(J,{content:"Downloads",children:e.jsxs("span",{className:"ml-1 inline-flex items-center gap-1 pr-1 text-ink-dim",children:[e.jsx(_e,{"aria-hidden":"true",className:"size-3.5"}),e.jsx("span",{className:"inline-flex h-4 min-w-6 items-center font-mono text-mono-sm",children:h?e.jsx(x,{className:"h-3 w-6"}):(a.download_count??0).toLocaleString()})]})})]}),y&&o&&e.jsx("div",{className:"ml-auto flex shrink-0 items-center",children:e.jsxs(g,{variant:"secondary",size:"sm",onClick:()=>o(a),disabled:h,"aria-label":`Download ${a.name}`,"data-tour-tag":"agent-hub-download-button",children:[e.jsx(_e,{"data-testid":"agent-download"}),"Get"]})})]}),d&&e.jsxs("output",{"data-testid":"agent-card-error",className:"flex flex-wrap items-center gap-x-2 gap-y-1 border-t border-hairline px-3 py-2 text-body-sm text-danger",children:[e.jsx("span",{className:"min-w-0 flex-1",children:d}),v&&e.jsx(g,{variant:"ghost",size:"sm",onClick:v,children:"Try again"})]})]})},Ks=({agent:a,status:t,viewerStateKnown:i=!0,orgName:r=null})=>{const{isAuthenticated:l}=de(),[o,m]=n.useState(null),j=t?.liked??!1,h=t?.favourited??!1,d=$s(),v=Ds(),y=Vs(),p=()=>{!l||d.isPending||(m(null),d.mutate({agentId:a.id,isCurrentlyLiked:j},{onError:()=>m("like")}))},b=()=>{!l||v.isPending||(m(null),v.mutate({agentId:a.id,isCurrentlyFavourited:h},{onError:()=>m("favourite")}))},N=()=>{y.isPending||(m(null),y.mutate({agentId:a.id,agentName:a.name},{onError:()=>m("download")}))},u=o?o==="like"?{action:"like",error:d.error,retry:p}:o==="favourite"?{action:"favourite",error:v.error,retry:b}:{action:"download",error:y.error,retry:N}:null;return e.jsx(Xs,{agent:a,isLiked:l&&j,isFavourited:l&&h,onLikeToggle:p,onFavouriteToggle:b,onDownload:N,isLikeActionLoading:d.isPending,isFavouriteActionLoading:v.isPending,isDownloading:y.isPending,viewerStateKnown:i,orgName:r,actionError:u?As(u.action,u.error,a.name):null,onRetryAction:u?.retry})},Pe=({selected:a,onClick:t,children:i,...r})=>e.jsx("button",{type:"button",onClick:t,"aria-pressed":a,className:O("flex w-full cursor-pointer items-center gap-2.5 rounded-sm px-3 py-1.5 text-left","text-body-sm transition-colors duration-fast ease-out-quart",a?js:"text-ink hover:bg-row-hover"),...r,children:i}),ze=Object.keys(Bs),ea=a=>[...a].sort((t,i)=>{const r=ze.indexOf(t),l=ze.indexOf(i);return r!==-1&&l!==-1?r-l:r!==-1?-1:l!==-1?1:t.localeCompare(i)}),sa=({selectedCategory:a,onSelectCategory:t,categories:i})=>{const r=ea(a&&!i.includes(a)?[...i,a]:i);return e.jsxs("div",{className:"flex h-full flex-col overflow-y-auto",children:[e.jsx("h2",{className:"mb-2 px-3 font-medium text-ink-dim text-meta",children:"Categories"}),e.jsxs("div",{className:"flex flex-col gap-0.5",children:[e.jsxs(Pe,{selected:a===null,onClick:()=>t(null),"data-testid":"category-all",children:[e.jsx("span",{className:"flex size-4 shrink-0 items-center justify-center",children:e.jsx(bs,{size:16,"aria-hidden":"true"})}),"All categories"]}),r.map(l=>{const o=Le(l),m=l==="other"?e.jsx(Js,{size:16}):o.icon;return e.jsxs(Pe,{selected:a===l,onClick:()=>t(l),"data-testid":`category-${l}`,children:[e.jsx("span",{className:"flex size-4 shrink-0 items-center justify-center",children:m}),o.label]},l)})]})]})},aa=({page:a,count:t,onChange:i})=>{const r=n.useRef(null),l=n.useRef(null),o=n.useRef(null);return n.useEffect(()=>{const m=o.current;o.current=null,m==="previous"&&r.current?.focus(),m==="next"&&l.current?.focus()},[a]),t<=1?null:e.jsxs("nav",{"aria-label":"Agent pages",className:"mt-6 flex min-h-13 items-center justify-between gap-3 border-t border-hairline","data-testid":"agent-hub-pager",children:[e.jsxs("span",{className:"select-none text-meta text-ink-dim",children:["Page ",a," of ",t]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(g,{variant:"secondary",size:"sm",ref:r,onClick:()=>{a-1<=1&&(o.current="next"),i(a-1)},disabled:a<=1,"aria-label":"Previous page",children:[e.jsx(vs,{"aria-hidden":"true"}),"Previous"]}),e.jsxs(g,{variant:"secondary",size:"sm",ref:l,onClick:()=>{a+1>=t&&(o.current="previous"),i(a+1)},disabled:a>=t,"aria-label":"Next page",children:["Next",e.jsx(us,{"aria-hidden":"true"})]})]})]})},Ve={all:["org-teams"],list:a=>[...Ve.all,"list",a]},Be=({tenantId:a,enabled:t=!0})=>{const i=is({queryKey:Ve.list(a??""),queryFn:async()=>(await _s(a)).result??{teams:[]},enabled:t&&!!a,staleTime:3e5,gcTime:6e5,refetchOnWindowFocus:!1,retryOnMount:!1,retry:rs});return{...i,teams:i.data?.teams??[]}},ta=(a,t)=>{const i=a?.name?.trim()||t?.trim()||"Team",r=a?.renamed_from?.trim()||null;return a?.invalid_name===!0&&r?{level:"warning",message:`Pulled "${i}". The published name "${r}" is not usable locally, so the team was stored as "${i}".`}:r?{level:"success",message:`Pulled "${i}" (you already have a team called "${r}").`}:{level:"success",message:`Pulled team "${i}".`}},na=()=>{const a=ls();return ys({mutationFn:async({teamId:t,tenantId:i})=>{if(!ke.baseUrl)throw new Error("Local Operator API URL is not configured.");return ks.pullOrgTeamFromRadient(ke.baseUrl,t,i)},onSuccess:(t,i)=>{const r=ta(t.result,i.name);r.level==="warning"?Ns(r.message):ws(r.message),a.invalidateQueries({queryKey:["desktop","teams"]})},onError:t=>{console.error("Pulling an organization team failed:",t)}})},ia=["refresh-hub","retry","sign-in"],ra=({tenantId:a,orgName:t})=>{const{teams:i,isLoading:r,isFetching:l,isError:o,error:m,refetch:j}=Be({tenantId:a}),h=$e(m),d=na(),[v,y]=n.useState(null),[p,b]=n.useState(null),N=n.useRef(new Map),u=n.useRef(null);n.useEffect(()=>{d.isPending||u.current===null||(N.current.get(u.current)?.focus(),u.current=null)},[d.isPending]);const[I,M]=n.useState(!1),F=n.useMemo(()=>{if(!Ts(d.error))return null;const c=i.find(f=>f.id===v);return Ps({code:d.error.code,message:d.error.message,details:d.error.details},{name:c?.name??"this team",hubAgentId:null,surface:"pull"})},[d.error,v,i]),C=(c,f)=>{switch(c){case"refresh-hub":j();break;case"retry":E(f);break;case"sign-in":M(!0);break}},E=c=>{d.isPending||(u.current=c.id,y(null),b(c.id),d.mutate({teamId:c.id,tenantId:a,name:c.name},{onSettled:()=>b(null),onError:()=>y(c.id)}))};return e.jsxs("section",{className:"mb-6 max-w-4xl rounded-md bg-surface","aria-label":`Teams shared with ${t??"this organization"}`,"data-testid":"org-teams",children:[r&&e.jsx("div",{className:"flex flex-col gap-2 p-4","data-testid":"org-teams-loading",children:e.jsxs("div",{"aria-hidden":"true",className:"flex flex-col gap-2",children:[e.jsx(x,{className:"h-4.5 w-40"}),e.jsx(x,{className:"h-3.5 w-64"})]})}),!r&&o&&e.jsxs(K,{variant:h?"warning":"danger",className:"m-4 w-auto","data-testid":"org-teams-error",children:[e.jsx(ee,{children:h==="plan"?"That organization needs an active Team plan":h==="no_access"?"You do not have access to that organization":"Teams could not be loaded"}),e.jsx(se,{children:h==="plan"?`Reading an organization's teams is part of the Team plan. An owner of ${t??"this organization"} can activate it in the Radient console, and then its teams will be listed here.`:h==="no_access"?`You are not a member of ${t??"that organization"}, so its teams are not listed here. An owner can invite you again.`:Ie("The teams shared with this organization could not be read.",m)}),h!=="no_access"&&e.jsx("div",{className:"mt-2",children:e.jsx(g,{variant:"primary",size:"sm",onClick:()=>void j(),disabled:l,"aria-busy":l,children:l?"Trying…":"Try again"})})]}),!r&&!o&&i.length===0&&e.jsx("p",{className:"p-4 text-body-sm text-ink-muted","data-testid":"org-teams-empty",children:`Teams shared into ${t??"this organization"} appear here for its members.`}),!r&&!o&&i.length>0&&e.jsx("ul",{className:"flex flex-col divide-y divide-hairline",children:i.map(c=>e.jsxs("li",{className:"flex flex-wrap items-center gap-x-3 gap-y-1 px-4 py-2.5",children:[e.jsxs("div",{className:"flex min-w-0 flex-1 flex-col",children:[e.jsx("span",{className:"truncate font-medium text-body text-ink",children:c.name}),e.jsxs("span",{className:"truncate text-meta text-ink-muted",children:[c.project||"No project",e.jsx("span",{"aria-hidden":"true",className:"mx-1.5",children:"·"}),la(c),c.version?e.jsxs(e.Fragment,{children:[e.jsx("span",{"aria-hidden":"true",className:"mx-1.5",children:"·"}),"v",c.version]}):null]}),v===c.id&&e.jsxs("div",{className:"mt-1 flex flex-col items-start gap-1","data-testid":"org-team-pull-error",children:[e.jsx("output",{className:"text-meta text-danger",children:F?.body??d.error?.message??`"${c.name}" could not be pulled.`}),F?.actions.filter(f=>ia.includes(f)).map(f=>e.jsx(g,{variant:"primary",size:"sm",onClick:()=>C(f,c),children:zs[f]},f)),I&&e.jsx("div",{className:"mt-1","data-testid":"org-team-pull-reauth",children:e.jsx(Hs,{titleText:"Sign in again",descriptionText:"",onSignInSuccess:()=>{M(!1),y(null),j()}})})]})]}),e.jsx(g,{ref:f=>{f?N.current.set(c.id,f):N.current.delete(c.id)},variant:"secondary",size:"sm",onClick:()=>E(c),disabled:d.isPending,"aria-label":`Pull team ${c.name}`,children:p===c.id?"Pulling…":"Pull"})]},c.id))})]})},la=a=>a.members.length===0?"No members":a.members.map(t=>t.count>1?`${t.role} ×${t.count}`:t.role).join(", "),oa={loading:"The public hub lists agents only. Checking your organizations…",orgs:"The public hub lists agents only. Choose an organization to see the teams it has shared with its members.","signed-out":"The public hub lists agents only. Sign in to Radient to see the teams shared with the organizations you belong to.",unavailable:"The public hub lists agents only, and this backend does not serve organizations, so there are no teams to list here.",unreadable:"The public hub lists agents only, and your organizations could not be read, so no teams can be listed.",none:"The public hub lists agents only. You are not in an organization on the Team plan yet, and an organization owner can add you or activate the plan in the Radient console."},ca=({reason:a,orgs:t,onPickOrg:i,onOpenSettings:r,onRetry:l,retrying:o})=>{const m=n.useRef(null),j=n.useRef(null),h=n.useRef(!1);return n.useEffect(()=>{h.current&&(h.current=!1,(j.current??m.current)?.focus())}),e.jsxs("section",{ref:m,tabIndex:-1,className:"flex max-w-2xl flex-col items-start gap-2 rounded-md bg-surface px-6 py-8","aria-labelledby":"agent-hub-teams-public-heading","data-testid":"agent-hub-teams-public",children:[e.jsx("h2",{id:"agent-hub-teams-public-heading",className:"font-medium text-heading text-ink",children:"Teams are shared inside organizations"}),e.jsx("output",{className:"block max-w-md text-body-sm text-ink-muted",children:oa[a]}),a==="orgs"&&e.jsx("div",{className:"mt-2 flex flex-wrap items-center gap-2",children:t.map(d=>e.jsxs(g,{variant:"secondary",onClick:()=>i(d.tenant_id),children:[e.jsx(De,{"aria-hidden":"true"}),e.jsx("span",{className:"max-w-48 truncate",children:d.tenant_name||"Organization"})]},d.tenant_id))}),a==="signed-out"&&e.jsx("div",{className:"mt-2",children:e.jsx(g,{variant:"secondary",onClick:r,children:"Open settings to sign in"})}),a==="unreadable"&&e.jsx("div",{className:"mt-2",children:e.jsx(g,{ref:j,variant:"secondary",onClick:()=>{h.current=!0,l()},disabled:o,"aria-busy":o,children:o?"Trying…":"Try again"})})]})},da=(a,t)=>{const[i,r]=n.useState(a);return n.useEffect(()=>{const l=setTimeout(()=>r(a),t);return()=>clearTimeout(l)},[a,t]),i},X=[{value:"download_count:desc",label:"Most downloaded",sort:"download_count",order:"desc"},{value:"like_count:desc",label:"Most liked",sort:"like_count",order:"desc"},{value:"favourite_count:desc",label:"Most favourited",sort:"favourite_count",order:"desc"},{value:"created_at:desc",label:"Newest",sort:"created_at",order:"desc"},{value:"updated_at:desc",label:"Recently updated",sort:"updated_at",order:"desc"},{value:"name:asc",label:"Name (A to Z)",sort:"name",order:"asc"}],ua=[{value:"name",label:"Name"},{value:"description",label:"Description"}],ma=300,B="public",Ee={agents:"agent-hub-view-agents",teams:"agent-hub-view-teams"},Oe="agent-hub-view-panel",ha=()=>e.jsxs("div",{className:"flex h-full flex-col overflow-hidden rounded-md bg-surface",children:[e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col gap-2 p-4",children:[e.jsx(x,{className:"h-5.5 w-2/3"}),e.jsx(x,{className:"h-3.5 w-full"}),e.jsx(x,{className:"h-3.5 w-full"}),e.jsx(x,{className:"h-3.5 w-1/2"}),e.jsxs("div",{className:"mt-auto flex flex-col gap-2 pt-2",children:[e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(x,{className:"h-5.5 w-24"}),e.jsx(x,{className:"h-5.5 w-20"})]}),e.jsx("div",{className:"flex items-center gap-1.5",children:e.jsx(x,{className:"h-5.5 w-24"})})]}),e.jsx(x,{className:"h-4.5 w-32"})]})]}),e.jsxs("div",{className:"flex items-center gap-2 border-t border-hairline px-3 py-2",children:[e.jsx(x,{className:"size-4"}),e.jsx(x,{className:"h-4 w-6"}),e.jsx(x,{className:"size-4"}),e.jsx(x,{className:"h-4 w-6"}),e.jsx(x,{className:"ml-auto h-7 w-16"})]})]}),Ra=()=>{const a=Fe(),{isAuthenticated:t}=de(),[i,r]=n.useState(1),[l]=n.useState(12),[o,m]=n.useState(null),[j,h]=n.useState(""),[d,v]=n.useState("name"),[y,p]=n.useState(X[0].value),[b,N]=n.useState(B),[u,I]=n.useState("agents"),[M,F]=n.useState([]),C=da(j,ma),E=X.find(s=>s.value===y)??X[0],c=os(),f=Cs(),U=cs(c.data,"radient_org"),q=t?Qs(U,f):null,{memberships:A,isError:L,isPending:H,isFetching:Y,refetch:Ue}=Es({enabled:Ws(U)}),$=n.useMemo(()=>Ys(A),[A]),ue=b===B||$.some(s=>s.tenant_id===b);n.useEffect(()=>{ue||N(B)},[ue]);const w=b===B?null:$.find(s=>s.tenant_id===b)??null,T=w?.tenant_id,me=w?.tenant_name||null,D=o!==null||C!=="",ae=Be({tenantId:T}),Q=T&&ae.isSuccess&&!D?ae.teams.length:null,qe=w?.role==="owner"||w?.role==="admin",He=n.useMemo(()=>new Map(A.map(s=>[s.tenant_id,s.tenant_name])),[A]),{data:W,agents:Ye,isLoading:Qe,isFetching:S,error:_,refetch:he,pagination:R}=Os({page:i,perPage:l,categories:o?[o]:void 0,name:d==="name"&&C||void 0,description:d==="description"&&C||void 0,sort:E.sort,order:E.order,tenantId:T}),V=w?$e(_):null,G=Ye??[],ge=S&&W!==void 0,{statuses:xe,isKnown:We,isError:Ge,isFetching:te,refetch:Ze}=Us({agentIds:T?[]:G.map(s=>s.id)}),ne=n.useRef(null),ie=n.useRef(null),[fe,Je]=n.useState(0);n.useEffect(()=>{fe!==0&&(ne.current??ie.current)?.focus()},[fe]);const pe=n.useRef(null),re=n.useRef(!1),le=n.useMemo(()=>[...new Set((W?.records??[]).flatMap(s=>s.categories??[]))],[W]);n.useEffect(()=>{F(s=>le.every(z=>s.includes(z))?s:[...new Set([...s,...le])])},[le]);const Xe=()=>{m(null),h(""),r(1),Je(s=>s+1)},k=(Qe||S)&&W===void 0,be=!k&&!D&&(_!==null||G.length===0);n.useEffect(()=>{!re.current||k||(re.current=!1,_?pe.current?.focus():(ne.current??ie.current)?.focus())},[k,_]);const je=n.useRef(null),Ke=s=>{r(s),je.current?.scrollIntoView({block:"nearest"})},es=s=>{m(s),r(1)},ss=s=>{h(s),r(1)},ve=s=>{N(s),r(1)},oe=n.useRef(new Map),Z=n.useRef(null);n.useEffect(()=>{Z.current!==null&&(oe.current.get(Z.current)?.focus(),Z.current=null)},[b]);const as=s=>{v(s),r(1)},ye=R&&!D?R.totalRecords:null,ts=$.length>0?"orgs":t?q?"unavailable":L?"unreadable":U==="unknown"||H?"loading":"none":"signed-out",ce=T?`shared with ${me??"this organization"}`:"in the public hub",Ne=(s,z)=>`${s} ${z}${s===1?"":"s"} ${ce}`;let P;return u==="teams"?T?ae.isLoading?P="Loading teams…":Q!==null?P=Ne(Q,"team"):P=`Teams ${ce}`:P=" ":k?P="Loading agents…":R?P=Ne(R.totalRecords,"agent"):P=`Agents ${ce}`,e.jsxs("div",{className:"flex h-full flex-col gap-8 p-6",children:[e.jsx(ds,{title:"Agent hub",subtitle:"Discover and download community agents on Radient",icon:Ss}),e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col gap-4",children:[q&&e.jsxs(K,{variant:"warning",className:"max-w-2xl","data-testid":"agent-hub-org-unavailable",children:[e.jsx(ee,{children:"Organizations are unavailable"}),e.jsx(se,{children:q})]}),e.jsxs("div",{className:"flex shrink-0 flex-wrap items-center gap-x-4 gap-y-2","data-testid":"agent-hub-browse-bar",children:[e.jsx(ms,{value:u,onValueChange:s=>I(s),children:e.jsx(hs,{"aria-label":"Browse the hub by type",children:["agents","teams"].map(s=>e.jsxs(gs,{value:s,id:Ee[s],"aria-controls":u===s?Oe:void 0,"data-testid":`agent-hub-view-${s}`,children:[s==="agents"?"Agents":"Teams",(s==="agents"?ye:Q)!==null&&e.jsx("span",{className:"min-w-[2ch] font-normal text-ink-dim tabular-nums",children:s==="agents"?ye:Q})]},s))})}),$.length>0&&e.jsxs("div",{className:"ml-auto flex min-w-0 items-center gap-2",children:[e.jsx("span",{"aria-hidden":"true",className:"text-meta text-ink-muted",children:"Showing"}),e.jsxs("fieldset",{className:"m-0 min-w-0 border-0 p-0","data-testid":"agent-hub-scope",children:[e.jsx("legend",{className:"sr-only",children:"Show the hub of"}),e.jsx("div",{className:"flex flex-wrap gap-0.5 rounded-md bg-sunken p-0.5",children:[{value:B,label:"Public hub",Icon:Rs},...$.map(s=>({value:s.tenant_id,label:s.tenant_name||"Organization",Icon:De}))].map(({value:s,label:z,Icon:ns})=>e.jsxs(g,{ref:we=>{we?oe.current.set(s,we):oe.current.delete(s)},variant:"ghost",size:"sm","aria-pressed":b===s,onClick:()=>ve(s),title:z,"data-testid":`agent-hub-scope-${s===B?"public":`org-${s}`}`,className:O("max-w-48",b===s&&"bg-surface text-ink hover:bg-surface"),children:[e.jsx(ns,{"aria-hidden":"true"}),e.jsx("span",{className:"truncate",children:z})]},s))})]})]})]}),e.jsx(xs,{id:Oe,labelledBy:Ee[u],children:e.jsxs("div",{className:"flex min-h-0 flex-1 flex-row overflow-hidden",children:[u==="agents"&&e.jsx(e.Fragment,{children:e.jsx("div",{className:"mr-6 hidden w-60 shrink-0 rounded-md bg-surface p-2 md:block","data-tour-tag":"agent-hub-sidebar-container",children:!be&&e.jsx(sa,{selectedCategory:o,onSelectCategory:es,categories:M})})}),e.jsxs("div",{className:"flex min-w-0 flex-1 flex-col overflow-y-auto",children:[u==="agents"&&!be&&e.jsxs("div",{className:"mb-4 flex flex-wrap items-center gap-2",children:[e.jsxs("div",{className:O("flex min-w-56 flex-1 items-center rounded-sm border border-control bg-surface","transition-colors duration-fast ease-out-quart","has-[:focus-visible]:outline-solid has-[:focus-visible]:outline-2","has-[:focus-visible]:outline-accent has-[:focus-visible]:outline-offset-2"),children:[e.jsx(fs,{ref:ne,type:"search",value:j,onChange:s=>ss(s.target.value),placeholder:"Search agents","aria-label":"Search agents",className:"h-8 min-w-0 flex-1 border-0 bg-transparent outline-none","data-testid":"agent-hub-search"}),e.jsxs(Te,{value:d,onValueChange:as,children:[e.jsx(Ce,{className:"w-auto shrink-0 border-y-0 border-l border-hairline border-r-0 bg-transparent pl-2 outline-none","aria-label":"Search in","data-testid":"agent-hub-search-scope",children:e.jsx(Se,{})}),e.jsx(Re,{children:ua.map(s=>e.jsx(Ae,{value:s.value,children:s.label},s.value))})]})]}),e.jsxs(Te,{value:y,onValueChange:p,children:[e.jsx(Ce,{className:"w-48","aria-label":"Sort agents","data-testid":"agent-hub-sort",children:e.jsx(Se,{})}),e.jsx(Re,{children:X.map(s=>e.jsx(Ae,{value:s.value,children:s.label},s.value))})]})]}),e.jsxs("p",{ref:je,"aria-live":"polite",className:"mb-3 text-meta text-ink-dim","data-testid":"agent-hub-status",children:[P,u==="agents"&&ge?e.jsxs(e.Fragment,{children:[" ",e.jsx("span",{"data-testid":"agent-hub-updating",children:"Updating…"})]}):null]}),u==="agents"&&e.jsxs(e.Fragment,{children:[t&&Ge&&e.jsxs("output",{className:"mb-3 flex flex-wrap items-center gap-2 text-meta text-warning","data-testid":"agent-hub-status-unknown",children:[e.jsx("span",{children:"Your likes and favourites could not be read, so no card shows a viewer state."}),e.jsx(g,{variant:"ghost",size:"sm",onClick:()=>void Ze(),disabled:te,"aria-busy":te,children:te?"Trying…":"Try again"})]}),k&&e.jsx("div",{"data-testid":"agent-hub-loading",className:"grid grid-cols-[repeat(auto-fill,minmax(17.5rem,1fr))] gap-6",children:Array.from({length:6},(s,z)=>e.jsx(ha,{},z))}),k&&R===void 0&&e.jsx("div",{"aria-hidden":"true",className:"mt-6 flex min-h-13 items-center justify-center","data-testid":"agent-hub-pager-placeholder",children:e.jsx(x,{className:"h-4 w-24"})}),e.jsx("output",{"aria-live":"polite","data-testid":"agent-hub-outage",className:O(!k&&_&&!V?"block":"sr-only"),children:!k&&_&&!V&&e.jsxs(K,{variant:"danger",className:"max-w-2xl","aria-busy":S,"data-testid":"agent-hub-error",children:[e.jsx(ee,{children:t?"The hub could not be loaded":"Sign in to use the hub"}),e.jsx(se,{children:t?Ie("The agent list could not be loaded.",_):"You are not signed in to Radient, so the hub has no credential to read the agent list with. Sign in on the settings page, then try again."}),e.jsx("div",{className:"mt-2",children:e.jsx(g,{ref:pe,variant:"outline",size:"sm",onClick:()=>{re.current=!0,he()},disabled:S,"aria-busy":S,children:S?"Trying…":"Try again"})})]})}),!k&&V&&w&&e.jsxs(K,{variant:"warning",className:"max-w-2xl","data-testid":"agent-hub-org-no-access",children:[e.jsx(ee,{children:V==="plan"?"That organization needs an active Team plan":"You do not have access to that organization"}),e.jsx(se,{children:V==="plan"?`Sharing agents inside an organization is part of the Team plan. An owner of ${w.tenant_name||"this organization"} can activate it in the Radient console, and then its agents will be listed here.`:`You are not a member of ${w.tenant_name||"that organization"}, so its agents are not listed here. An owner can invite you again.`}),V==="plan"&&e.jsx("div",{className:"mt-2",children:e.jsx(g,{variant:"primary",size:"sm",onClick:()=>void he(),disabled:S,"aria-busy":S,children:S?"Trying…":"Try again"})})]}),!k&&!_&&e.jsx("div",{className:"grid grid-cols-[repeat(auto-fill,minmax(17.5rem,1fr))] gap-6","aria-busy":ge,children:G.length===0?e.jsxs("div",{"data-testid":"agent-hub-empty",className:O("col-span-full w-full flex flex-col items-center gap-2 rounded-md bg-surface px-6 py-10 text-center",!T&&"max-w-2xl justify-self-center"),children:[e.jsx("p",{className:"text-heading text-ink",children:T?"This organization has no shared agents yet.":o?`No agents in ${Le(o).label}.`:D?"No agents match that search.":"The hub is empty."}),e.jsx("p",{className:"max-w-md text-body-sm text-ink-muted",children:T?`Agents published into ${w?.tenant_name||"this organization"} appear here for its members.`:o?"Nothing in this category yet. Clear the filter to see the whole hub.":D?"No agent's name or description carries that. Clear it to see the whole hub.":"Nobody has published an agent yet. Yours could be the first."}),e.jsx("div",{className:"mt-2 flex flex-wrap items-center justify-center gap-2",children:D?e.jsx(g,{variant:"secondary",onClick:Xe,children:o?"Clear filter":"Clear search"}):T&&!qe?null:e.jsx(g,{ref:ie,variant:"secondary",onClick:()=>a("/agents"),children:"Publish an agent"})})]}):G.map(s=>e.jsx(Ks,{agent:s,status:t?xe[s.id]:void 0,viewerStateKnown:t&&qs(We,xe,s.id),orgName:s.visibility==="org"?He.get(s.tenant_id)??null:null},s.id))}),!k&&R&&R.totalPages>1&&e.jsx(aa,{count:R.totalPages,page:R.page,onChange:Ke})]}),u==="teams"&&(w?e.jsx(ra,{tenantId:w.tenant_id,orgName:me}):e.jsx(ca,{reason:ts,orgs:$,onPickOrg:s=>{Z.current=s,ve(s)},onOpenSettings:()=>a("/settings"),onRetry:()=>void Ue(),retrying:Y}))]})]})})]})]})};export{Ra as AgentHubPage};