sliccy 5.4.1 → 5.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist/node-server/electron-controller.d.ts +41 -0
  2. package/dist/node-server/electron-controller.js +141 -2
  3. package/dist/ui/assets/{account-store-CgAAyHLk.js → account-store-BFu2wpYi.js} +2 -2
  4. package/dist/ui/assets/{account-store-BSWhkeUU.js → account-store-DxfOlB8e.js} +2 -2
  5. package/dist/ui/assets/{adobe-DVOKhr5o.js → adobe-De0SCRDs.js} +1 -1
  6. package/dist/ui/assets/{adobe-Dabz-c1b.js → adobe-mHlZtWIg.js} +1 -1
  7. package/dist/ui/assets/adobe-oauth-state---RmeoFk.js +1 -0
  8. package/dist/ui/assets/adobe-oauth-state-CFSzJXWq.js +1 -0
  9. package/dist/ui/assets/{agent-message-to-chat-CWox17CS.js → agent-message-to-chat-CBdRedlh.js} +1 -1
  10. package/dist/ui/assets/{apps-CyJkA1Ss.js → apps-CrGd0C9h.js} +1 -1
  11. package/dist/ui/assets/{azure-openai-DD0bOrFE.js → azure-openai-CrgoU7Mo.js} +1 -1
  12. package/dist/ui/assets/{azure-openai-DStnDWxb.js → azure-openai-VHwRfKEo.js} +1 -1
  13. package/dist/ui/assets/{connect-surface-D-7hiIJH.js → connect-surface-e_JWQTT3.js} +1 -1
  14. package/dist/ui/assets/dip-D-xWN625.js +1 -0
  15. package/dist/ui/assets/{dist-DDrbeHp-.js → dist-DW2jZP4V.js} +1 -1
  16. package/dist/ui/assets/{dist-CwUZZxjO.js → dist-ryy5xZYY.js} +1 -1
  17. package/dist/ui/assets/{ensure-speech-assets-DhvaWMCZ.js → ensure-speech-assets-M1rNkts7.js} +1 -1
  18. package/dist/ui/assets/esp8266-DeyAQ0IL.js +1 -0
  19. package/dist/ui/assets/{esptool-operations-D6AgovRo.js → esptool-operations-DlOqRYst.js} +2 -2
  20. package/dist/ui/assets/{fs-CfNmdIYb.js → fs-BCnBG7oR.js} +2 -2
  21. package/dist/ui/assets/{fs-B0s5DOPm.js → fs-DRqRzEMk.js} +1 -1
  22. package/dist/ui/assets/{github-JXOuvOgk.js → github-CS9hqCNH.js} +2 -2
  23. package/dist/ui/assets/{github-DaqFhOZP.js → github-Dkm3riGH.js} +1 -1
  24. package/dist/ui/assets/{github-copilot-CdXKe3Ig.js → github-copilot-Cz4psYiK.js} +1 -1
  25. package/dist/ui/assets/{github-copilot-DWSna0qk.js → github-copilot-u3Q45lH5.js} +1 -1
  26. package/dist/ui/assets/{hear-BvUxceLo.js → hear-D1i6dtBX.js} +1 -1
  27. package/dist/ui/assets/{kernel-worker-J4YngSNJ.js → kernel-worker-BmQZWRvS.js} +18 -18
  28. package/dist/ui/assets/{kokoro-engine-zsom_wfq.js → kokoro-engine-O37ADPh9.js} +1 -1
  29. package/dist/ui/assets/{lick-ws-bridge-BR2JsTcy.js → lick-ws-bridge-BHT_1a0_.js} +1 -1
  30. package/dist/ui/assets/{lick-ws-bridge-Ys5bz6tK.js → lick-ws-bridge-DrN6tFcI.js} +1 -1
  31. package/dist/ui/assets/{local-llm-BsCfySh9.js → local-llm-BddLqaEw.js} +1 -1
  32. package/dist/ui/assets/{main-BYXYn5lL.js → main-BwdgxuNS.js} +4 -4
  33. package/dist/ui/assets/{mount-RI83s6cq.js → mount-CQ4ampll.js} +1 -1
  34. package/dist/ui/assets/{mount-D5aZn5UA.js → mount-CZbS6HHT.js} +2 -2
  35. package/dist/ui/assets/{new-session-D1pUlqr9.js → new-session-C6hbhQF6.js} +2 -2
  36. package/dist/ui/assets/{oauth-bootstrap-DnFRqhTe.js → oauth-bootstrap-BwY44cXF.js} +2 -2
  37. package/dist/ui/assets/{openai-codex-CTCaZUVt.js → openai-codex-BThq9a2_.js} +1 -1
  38. package/dist/ui/assets/{openai-codex-BWS9sBDG.js → openai-codex-s-HBZe5g.js} +1 -1
  39. package/dist/ui/assets/{page-follower-tray-DCrCjXYf.js → page-follower-tray-Bl330p52.js} +1 -1
  40. package/dist/ui/assets/{panel-rpc-handlers-D1fon1hK.js → panel-rpc-handlers-BQXgX65i.js} +1 -1
  41. package/dist/ui/assets/{provider-CwwkGZVJ.js → provider-CBCHQlUE.js} +1 -1
  42. package/dist/ui/assets/{provider-C0fCYLH-.js → provider-Dt59pzMj.js} +2 -2
  43. package/dist/ui/assets/provider-store-access-B3JEhbtT.js +1 -0
  44. package/dist/ui/assets/provider-store-access-C8wURhlf.js +1 -0
  45. package/dist/ui/assets/{providers-B_eCX3Nu.js → providers-CGElA-Wa.js} +1 -1
  46. package/dist/ui/assets/{quick-llm-m5pdShbE.js → quick-llm-BpWn09ND.js} +1 -1
  47. package/dist/ui/assets/session-freezer-BNE39rHt.js +1 -0
  48. package/dist/ui/assets/{speak-CTxSD6c5.js → speak-BYuYkAdf.js} +1 -1
  49. package/dist/ui/assets/{sprinkle-manager-DsUKtbgD.js → sprinkle-manager-DMKw_0X0.js} +1 -1
  50. package/dist/ui/assets/{store-D0KeVCvq.js → store-CImrwyZM.js} +1 -1
  51. package/dist/ui/assets/{sudo-BOythF7w.js → sudo-DDLdxY_L.js} +1 -1
  52. package/dist/ui/assets/{transformers-env-CiEjooqk.js → transformers-env-BN4qzyfU.js} +1 -1
  53. package/dist/ui/assets/{tray-leader-Dm-f62te.js → tray-leader-CMqSLc5G.js} +1 -1
  54. package/dist/ui/assets/{tray-leave-runtime-BTog2DuL.js → tray-leave-runtime-BdRgiGqj.js} +1 -1
  55. package/dist/ui/assets/{upgrade-detection-CnL02iHa.js → upgrade-detection-DjMkeT0A.js} +1 -1
  56. package/dist/ui/assets/{wc-attach-DvbyWBMw.js → wc-attach-DmcJ-dhE.js} +2 -2
  57. package/dist/ui/assets/{wc-detached-9XYAfyPX.js → wc-detached-bhqfErQt.js} +1 -1
  58. package/dist/ui/assets/{wc-extension-BhN0fpsk.js → wc-extension-BUlChmLO.js} +2 -2
  59. package/dist/ui/assets/{wc-follower-iuKgs6xl.js → wc-follower-B7BEs6w1.js} +2 -2
  60. package/dist/ui/assets/{wc-live-BIYGig0S.js → wc-live-B4HP346v.js} +5 -5
  61. package/dist/ui/assets/{wc-nav-Cvf1-2nX.js → wc-nav-BDFJw9KE.js} +2 -2
  62. package/dist/ui/assets/{wc-onboarding-CUwGI4YF.js → wc-onboarding-DaR6aKTK.js} +2 -2
  63. package/dist/ui/assets/{wc-placeholder-Bfe2f-DP.js → wc-placeholder-DEQADLhe.js} +3 -3
  64. package/dist/ui/assets/{wc-settings-CxXvMDY5.js → wc-settings-vLODM2qc.js} +2 -2
  65. package/dist/ui/assets/{wc-shell-BjLcm1xH.js → wc-shell-CHxgFWBV.js} +140 -112
  66. package/dist/ui/assets/{wc-sprinkles-CF-l37VL.js → wc-sprinkles-DDTZQPie.js} +2 -2
  67. package/dist/ui/assets/{wc-tray-BG2_SPu3.js → wc-tray-BACo16m5.js} +2 -2
  68. package/dist/ui/assets/{whisper-engine-V1cvMrOk.js → whisper-engine-CA9D6LHM.js} +1 -1
  69. package/dist/ui/assets/{xai-grok-BUrTSCNQ.js → xai-grok-CS22LJ7i.js} +1 -1
  70. package/dist/ui/assets/{xai-grok-CuAKXYhq.js → xai-grok-D0g7L-L2.js} +1 -1
  71. package/dist/ui/electron-overlay-entry.js +125 -97
  72. package/dist/ui/index.html +2 -2
  73. package/dist/ui/packages/webapp/index.html +2 -2
  74. package/package.json +1 -1
  75. package/dist/ui/assets/adobe-oauth-state-fjk_YXgL.js +0 -1
  76. package/dist/ui/assets/adobe-oauth-state-y6CyddCs.js +0 -1
  77. package/dist/ui/assets/dip-CyGE3IVW.js +0 -1
  78. package/dist/ui/assets/esp8266-ClLgRR2o.js +0 -1
  79. package/dist/ui/assets/provider-store-access-CxKSyOVg.js +0 -1
  80. package/dist/ui/assets/provider-store-access-D6KoHCRf.js +0 -1
  81. package/dist/ui/assets/session-freezer-BxRf88jp.js +0 -1
@@ -116,12 +116,25 @@ export interface ThinBootstrapSet {
116
116
  * 'no-src' / 'blank:<href>'`.
117
117
  */
118
118
  export declare const OVERLAY_LOADED_PROBE_EXPRESSION = "(function() {\n var host = document.getElementById('slicc-electron-overlay-root');\n if (!host || !host.shadowRoot) return 'no-host';\n var iframe = host.shadowRoot.querySelector('iframe');\n if (!iframe) return 'no-iframe';\n if (!iframe.src) return 'no-src';\n try {\n // Thin-bridge overlay is ALWAYS cross-origin (hosted webapp) vs the app\n // document. A committed cross-origin navigation makes this access THROW.\n // Any READABLE href means the cross-origin nav did NOT commit \u2014 still\n // about:blank, or swapped to chrome-error://chromewebdata/ by a CSP block \u2014\n // so the overlay did NOT load and the setBypassCSP escalation must fire.\n var href = iframe.contentWindow && iframe.contentWindow.location ? iframe.contentWindow.location.href : '';\n return 'blank:' + href;\n } catch (e) {\n return 'ok';\n }\n })()";
119
+ /**
120
+ * JS probe that reports whether the overlay was *evicted* — i.e. the
121
+ * `window.__SLICC_ELECTRON_OVERLAY__` marker is still present (the bootstrap
122
+ * ran at least once on this document) but the `#slicc-electron-overlay-root`
123
+ * host element is gone, which happens when an SPA framework (React/Vue)
124
+ * re-renders the DOM root out from under it on an in-page route change.
125
+ * Returns `'evicted'` only in that exact state so re-injection is gated to the
126
+ * genuine eviction case and never loops while the host element is still
127
+ * attached. A full document replacement wipes the marker too, so that case
128
+ * reports `'ok'` here and is covered by the new-document hook instead.
129
+ */
130
+ export declare const OVERLAY_EVICTED_PROBE_EXPRESSION = "(function() {\n try {\n var hasMarker = typeof window.__SLICC_ELECTRON_OVERLAY__ !== 'undefined';\n var hasRoot = !!document.getElementById('slicc-electron-overlay-root');\n return (hasMarker && !hasRoot) ? 'evicted' : 'ok';\n } catch (e) {\n return 'ok';\n }\n })()";
119
131
  export declare class ElectronOverlayInjector {
120
132
  private readonly cdpPort;
121
133
  private readonly servePort;
122
134
  /** Thin-mode bootstrap pair — the only overlay path. */
123
135
  private readonly thinBootstraps;
124
136
  private readonly probeDelayMs;
137
+ private readonly presenceCheckIntervalMs;
125
138
  private readonly connections;
126
139
  private readonly cspBypassedTargets;
127
140
  /**
@@ -156,6 +169,7 @@ export declare class ElectronOverlayInjector {
156
169
  servePort: number;
157
170
  thinBootstraps?: ThinBootstrapSet;
158
171
  probeDelayMs?: number;
172
+ presenceCheckIntervalMs?: number;
159
173
  }): ElectronOverlayInjector;
160
174
  /** Test-only: snapshot the elected leader target URL (null when no leader). */
161
175
  _testingLeaderTargetUrl(): string | null;
@@ -199,6 +213,33 @@ export declare class ElectronOverlayInjector {
199
213
  * bootstrap is target-specific (leader vs. follower).
200
214
  */
201
215
  private buildThemedBootstrap;
216
+ /**
217
+ * Wrap the target's role bootstrap in a top-frame guard for use as a
218
+ * `Page.addScriptToEvaluateOnNewDocument` source. The hook fires in every
219
+ * frame of a new document, so without the guard the overlay iframe (the
220
+ * hosted webapp, which also ships `__SLICC_ELECTRON_OVERLAY__`) would re-run
221
+ * the bootstrap inside itself and recurse. Re-using `resolveBootstrapForTarget`
222
+ * keeps the re-injected overlay's leader/follower role stable.
223
+ */
224
+ private buildNewDocumentBootstrap;
225
+ /**
226
+ * Evaluate {@link OVERLAY_EVICTED_PROBE_EXPRESSION} on the target and resolve
227
+ * `true` only when the overlay marker is present but the host element is gone
228
+ * — the SPA-DOM-root eviction case that re-injection must repair. Mirrors
229
+ * {@link probeOverlayIframeLoaded}'s one-shot message-listener pattern.
230
+ */
231
+ private probeOverlayEvicted;
232
+ /**
233
+ * Re-inject the overlay if (and only if) it was evicted from an
234
+ * already-connected target — an in-page SPA route change or DOM-root
235
+ * re-render that removed `#slicc-electron-overlay-root` while the
236
+ * `__SLICC_ELECTRON_OVERLAY__` marker persists. Gated on the eviction probe
237
+ * so it is idempotent and never loops while the host element is still
238
+ * attached, and skipped while the CSP-bypass reload / Fetch-proxy escalation
239
+ * owns injection (`pendingReload`). Re-uses the target's existing role
240
+ * bootstrap, so no leader/follower re-election occurs.
241
+ */
242
+ private reinjectIfEvicted;
202
243
  /**
203
244
  * Handle the initial CDP `ws.on('open', ...)` event for a target: enable
204
245
  * Runtime/Page, set CSP bypass, detect theme, inject the overlay, and (on a
@@ -10,6 +10,12 @@ import { BRIDGE_TOKEN_QUERY_PARAM, BRIDGE_WS_QUERY_PARAM } from './bridge-securi
10
10
  import { buildElectronAppLaunchSpec, buildElectronOverlayBootstrapScript, buildElectronOverlayEntryUrl, ELECTRON_OVERLAY_APP_PATH, getElectronOverlayEntryDistPath, getElectronServeOrigin, selectBestOverlayTargets, } from './electron-runtime.js';
11
11
  const execFile = promisify(nodeExecFile);
12
12
  const ELECTRON_OVERLAY_SYNC_INTERVAL_MS = 1500;
13
+ /**
14
+ * Cadence of the per-connection overlay presence re-check. Covers SPAs that
15
+ * re-render their DOM root (evicting `#slicc-electron-overlay-root`) without
16
+ * emitting any navigation event for the event-driven re-injection to hook.
17
+ */
18
+ const ELECTRON_OVERLAY_PRESENCE_CHECK_INTERVAL_MS = 2000;
13
19
  /**
14
20
  * Query param name used to mark the role of an overlay tab on the hosted
15
21
  * launcher URL. The pinned leader carries `role=leader`; auto-follow
@@ -516,12 +522,33 @@ export const OVERLAY_LOADED_PROBE_EXPRESSION = `(function() {
516
522
  return 'ok';
517
523
  }
518
524
  })()`;
525
+ /**
526
+ * JS probe that reports whether the overlay was *evicted* — i.e. the
527
+ * `window.__SLICC_ELECTRON_OVERLAY__` marker is still present (the bootstrap
528
+ * ran at least once on this document) but the `#slicc-electron-overlay-root`
529
+ * host element is gone, which happens when an SPA framework (React/Vue)
530
+ * re-renders the DOM root out from under it on an in-page route change.
531
+ * Returns `'evicted'` only in that exact state so re-injection is gated to the
532
+ * genuine eviction case and never loops while the host element is still
533
+ * attached. A full document replacement wipes the marker too, so that case
534
+ * reports `'ok'` here and is covered by the new-document hook instead.
535
+ */
536
+ export const OVERLAY_EVICTED_PROBE_EXPRESSION = `(function() {
537
+ try {
538
+ var hasMarker = typeof window.__SLICC_ELECTRON_OVERLAY__ !== 'undefined';
539
+ var hasRoot = !!document.getElementById('slicc-electron-overlay-root');
540
+ return (hasMarker && !hasRoot) ? 'evicted' : 'ok';
541
+ } catch (e) {
542
+ return 'ok';
543
+ }
544
+ })()`;
519
545
  export class ElectronOverlayInjector {
520
546
  cdpPort;
521
547
  servePort;
522
548
  /** Thin-mode bootstrap pair — the only overlay path. */
523
549
  thinBootstraps;
524
550
  probeDelayMs;
551
+ presenceCheckIntervalMs;
525
552
  connections = new Map();
526
553
  cspBypassedTargets = new Set();
527
554
  /**
@@ -532,11 +559,12 @@ export class ElectronOverlayInjector {
532
559
  leaderTargetUrl = null;
533
560
  syncTimer = null;
534
561
  syncing = false;
535
- constructor(cdpPort, servePort, thinBootstraps, probeDelayMs = 1500) {
562
+ constructor(cdpPort, servePort, thinBootstraps, probeDelayMs = 1500, presenceCheckIntervalMs = ELECTRON_OVERLAY_PRESENCE_CHECK_INTERVAL_MS) {
536
563
  this.cdpPort = cdpPort;
537
564
  this.servePort = servePort;
538
565
  this.thinBootstraps = thinBootstraps;
539
566
  this.probeDelayMs = probeDelayMs;
567
+ this.presenceCheckIntervalMs = presenceCheckIntervalMs;
540
568
  }
541
569
  static async create(options) {
542
570
  const bundleSource = await loadElectronOverlayBundleSource(options);
@@ -558,7 +586,7 @@ export class ElectronOverlayInjector {
558
586
  * `_testing_*` hooks on `ElectronOverlayInjector`.
559
587
  */
560
588
  static _createForTesting(options) {
561
- return new ElectronOverlayInjector(options.cdpPort ?? 9223, options.servePort, options.thinBootstraps ?? { leader: '/* test-leader */', follower: '/* test-follower */' }, options.probeDelayMs ?? 1500);
589
+ return new ElectronOverlayInjector(options.cdpPort ?? 9223, options.servePort, options.thinBootstraps ?? { leader: '/* test-leader */', follower: '/* test-follower */' }, options.probeDelayMs ?? 1500, options.presenceCheckIntervalMs ?? ELECTRON_OVERLAY_PRESENCE_CHECK_INTERVAL_MS);
562
590
  }
563
591
  /** Test-only: snapshot the elected leader target URL (null when no leader). */
564
592
  _testingLeaderTargetUrl() {
@@ -739,6 +767,76 @@ export class ElectronOverlayInjector {
739
767
  const themeScript = `try{localStorage.setItem('slicc-theme',${JSON.stringify(theme)})}catch(e){}`;
740
768
  return `${themeScript}\n${this.resolveBootstrapForTarget(target)}`;
741
769
  }
770
+ /**
771
+ * Wrap the target's role bootstrap in a top-frame guard for use as a
772
+ * `Page.addScriptToEvaluateOnNewDocument` source. The hook fires in every
773
+ * frame of a new document, so without the guard the overlay iframe (the
774
+ * hosted webapp, which also ships `__SLICC_ELECTRON_OVERLAY__`) would re-run
775
+ * the bootstrap inside itself and recurse. Re-using `resolveBootstrapForTarget`
776
+ * keeps the re-injected overlay's leader/follower role stable.
777
+ */
778
+ buildNewDocumentBootstrap(target) {
779
+ const bootstrap = this.resolveBootstrapForTarget(target);
780
+ return `(function(){try{if(window.top!==window.self)return;}catch(e){return;}\n${bootstrap}\n})();`;
781
+ }
782
+ /**
783
+ * Evaluate {@link OVERLAY_EVICTED_PROBE_EXPRESSION} on the target and resolve
784
+ * `true` only when the overlay marker is present but the host element is gone
785
+ * — the SPA-DOM-root eviction case that re-injection must repair. Mirrors
786
+ * {@link probeOverlayIframeLoaded}'s one-shot message-listener pattern.
787
+ */
788
+ async probeOverlayEvicted(ws, send) {
789
+ return new Promise((resolve) => {
790
+ const probeId = send('Runtime.evaluate', {
791
+ expression: OVERLAY_EVICTED_PROBE_EXPRESSION,
792
+ awaitPromise: false,
793
+ returnByValue: true,
794
+ });
795
+ const timeout = setTimeout(() => {
796
+ cleanup();
797
+ resolve(false);
798
+ }, 3000);
799
+ const onMessage = (data) => {
800
+ try {
801
+ const msg = JSON.parse(data.toString());
802
+ if (msg.id === probeId) {
803
+ cleanup();
804
+ resolve(msg.result?.result?.value === 'evicted');
805
+ }
806
+ }
807
+ catch {
808
+ /* ignore */
809
+ }
810
+ };
811
+ const cleanup = () => {
812
+ clearTimeout(timeout);
813
+ ws.off('message', onMessage);
814
+ };
815
+ ws.on('message', onMessage);
816
+ });
817
+ }
818
+ /**
819
+ * Re-inject the overlay if (and only if) it was evicted from an
820
+ * already-connected target — an in-page SPA route change or DOM-root
821
+ * re-render that removed `#slicc-electron-overlay-root` while the
822
+ * `__SLICC_ELECTRON_OVERLAY__` marker persists. Gated on the eviction probe
823
+ * so it is idempotent and never loops while the host element is still
824
+ * attached, and skipped while the CSP-bypass reload / Fetch-proxy escalation
825
+ * owns injection (`pendingReload`). Re-uses the target's existing role
826
+ * bootstrap, so no leader/follower re-election occurs.
827
+ */
828
+ async reinjectIfEvicted(ws, send, target, state) {
829
+ if (ws.readyState !== WebSocket.OPEN || state.pendingReload)
830
+ return;
831
+ const evicted = await this.probeOverlayEvicted(ws, send);
832
+ if (!evicted || ws.readyState !== WebSocket.OPEN || state.pendingReload)
833
+ return;
834
+ console.log(`[electron-float] Overlay evicted, re-injecting: ${target.url}`);
835
+ send('Runtime.evaluate', {
836
+ expression: this.resolveBootstrapForTarget(target),
837
+ awaitPromise: false,
838
+ });
839
+ }
742
840
  /**
743
841
  * Handle the initial CDP `ws.on('open', ...)` event for a target: enable
744
842
  * Runtime/Page, set CSP bypass, detect theme, inject the overlay, and (on a
@@ -755,6 +853,16 @@ export class ElectronOverlayInjector {
755
853
  console.log(`[electron-float] Connected to target, bypassed=${alreadyBypassed}, url=${target.url}`);
756
854
  send('Runtime.enable');
757
855
  send('Page.enable');
856
+ // Install the role bootstrap as a permanent new-document hook (parity with
857
+ // swift-server) so a full document reload / load-driven navigation of this
858
+ // already-connected target re-injects the overlay automatically. Without
859
+ // this, `syncTargets` only injects into brand-new CDP targets, so a reload
860
+ // of an existing target would lose the overlay permanently (the marker is
861
+ // wiped along with the host element, so the eviction re-check below can't
862
+ // recover it).
863
+ send('Page.addScriptToEvaluateOnNewDocument', {
864
+ source: this.buildNewDocumentBootstrap(target),
865
+ });
758
866
  // Set CSP bypass — affects future resource loads on the current page
759
867
  send('Page.setBypassCSP', { enabled: true });
760
868
  if (alreadyBypassed) {
@@ -939,8 +1047,24 @@ export class ElectronOverlayInjector {
939
1047
  pendingCspEscalation: false,
940
1048
  fetchProxyActive: false,
941
1049
  };
1050
+ // Periodic presence re-check: covers SPAs that re-render their DOM root
1051
+ // (evicting the overlay) without firing a navigation event. Cleared on
1052
+ // close/error so it never outlives the connection.
1053
+ let presenceTimer = null;
1054
+ const clearPresenceTimer = () => {
1055
+ if (presenceTimer) {
1056
+ clearInterval(presenceTimer);
1057
+ presenceTimer = null;
1058
+ }
1059
+ };
942
1060
  ws.on('open', () => {
943
1061
  this.handleSocketOpen(ws, send, target, state);
1062
+ presenceTimer = setInterval(() => {
1063
+ void this.reinjectIfEvicted(ws, send, target, state).catch((error) => {
1064
+ const message = error instanceof Error ? error.message : String(error);
1065
+ console.warn(`[electron-float] Presence-check re-injection failed: ${message}`);
1066
+ });
1067
+ }, this.presenceCheckIntervalMs);
944
1068
  });
945
1069
  // Handle CDP events: lifecycle events and Fetch interception
946
1070
  ws.on('message', (data) => {
@@ -950,6 +1074,19 @@ export class ElectronOverlayInjector {
950
1074
  if (msg.method === 'Page.loadEventFired' && state.pendingReload) {
951
1075
  this.handlePageLoadAfterReload(ws, send, target, state);
952
1076
  }
1077
+ // In-page SPA route change (history.pushState / hashchange) — no new
1078
+ // document is created, so the new-document hook never fires. Re-inject
1079
+ // the role bootstrap if the host element was evicted. `Page.frameNavigated`
1080
+ // is handled only for the main frame (subframe navs never touch the
1081
+ // top-level overlay), and the eviction probe keeps the main-frame full
1082
+ // navigation a no-op (its marker is wiped, so the new-document hook owns it).
1083
+ const isMainFrameNavigated = msg.method === 'Page.frameNavigated' && !msg.params?.frame?.parentId;
1084
+ if (msg.method === 'Page.navigatedWithinDocument' || isMainFrameNavigated) {
1085
+ void this.reinjectIfEvicted(ws, send, target, state).catch((error) => {
1086
+ const message = error instanceof Error ? error.message : String(error);
1087
+ console.warn(`[electron-float] Navigation re-injection failed: ${message}`);
1088
+ });
1089
+ }
953
1090
  if (msg.method === 'Fetch.requestPaused' && state.fetchProxyActive) {
954
1091
  this.handleFetchRequestPaused(ws, send, msg);
955
1092
  }
@@ -959,11 +1096,13 @@ export class ElectronOverlayInjector {
959
1096
  }
960
1097
  });
961
1098
  ws.on('close', () => {
1099
+ clearPresenceTimer();
962
1100
  if (this.connections.get(targetId) === ws) {
963
1101
  this.connections.delete(targetId);
964
1102
  }
965
1103
  });
966
1104
  ws.on('error', (error) => {
1105
+ clearPresenceTimer();
967
1106
  const message = error instanceof Error ? error.message : String(error);
968
1107
  console.error(`[electron-float] Overlay target connection failed for ${target.url}:`, message);
969
1108
  if (this.connections.get(targetId) === ws) {
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/azure-openai-DStnDWxb.js","assets/dist-BmWy99kl.js","assets/preload-helper-zJ_50EbN.js","assets/event-stream-BJI_nGaK.js","assets/json-parse-BUunmmNl.js","assets/chunk-aKtaBQYM.js","assets/__vite-browser-external-C7iut881.js","assets/transform-messages-DzB_lMo-.js","assets/openai-Cn5LRPCm.js","assets/main-BYXYn5lL.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/logger-DDBAeTLF.js","assets/proxied-fetch-CKDBmEMl.js","assets/fetch-body-D2PwksUW.js","assets/clipboard-DgFtRQbq.js","assets/bedrock-camp-9-QEmC9Z.js","assets/local-llm-BsCfySh9.js","assets/openai-completions-DLI0t_lj.js","assets/github-copilot-headers-DZtWWv8W.js","assets/openai-prompt-cache-DXo9f3w5.js","assets/headers-DO1UzNKu.js","assets/sanitize-unicode-DmIE6hZJ.js","assets/adobe-DVOKhr5o.js","assets/adobe-oauth-state-y6CyddCs.js","assets/oauth-service-YGl8VFS-.js","assets/panel-rpc-DqT2FG7c.js","assets/wc-permissions-registry-CR1rTd2H.js","assets/llm-session-id-DVmZ9C2t.js","assets/github-copilot-DWSna0qk.js","assets/github-JXOuvOgk.js","assets/global-db-CbuLl-zx.js","assets/openai-codex-CTCaZUVt.js","assets/xai-grok-sanitize-CR2JoOJd.js","assets/xai-grok-models-CeEBaUMC.js","assets/xai-grok-CuAKXYhq.js","assets/xai-grok-errors-bnlIBeu-.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/azure-openai-VHwRfKEo.js","assets/dist-BmWy99kl.js","assets/preload-helper-zJ_50EbN.js","assets/event-stream-BJI_nGaK.js","assets/json-parse-BUunmmNl.js","assets/chunk-aKtaBQYM.js","assets/__vite-browser-external-C7iut881.js","assets/transform-messages-DzB_lMo-.js","assets/openai-Cn5LRPCm.js","assets/main-BwdgxuNS.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/logger-DDBAeTLF.js","assets/proxied-fetch-CKDBmEMl.js","assets/fetch-body-D2PwksUW.js","assets/clipboard-DgFtRQbq.js","assets/bedrock-camp-9-QEmC9Z.js","assets/local-llm-BddLqaEw.js","assets/openai-completions-DLI0t_lj.js","assets/github-copilot-headers-DZtWWv8W.js","assets/openai-prompt-cache-DXo9f3w5.js","assets/headers-DO1UzNKu.js","assets/sanitize-unicode-DmIE6hZJ.js","assets/adobe-De0SCRDs.js","assets/adobe-oauth-state-CFSzJXWq.js","assets/oauth-service-YGl8VFS-.js","assets/panel-rpc-DqT2FG7c.js","assets/wc-permissions-registry-CR1rTd2H.js","assets/llm-session-id-DVmZ9C2t.js","assets/github-copilot-u3Q45lH5.js","assets/github-CS9hqCNH.js","assets/global-db-CbuLl-zx.js","assets/openai-codex-BThq9a2_.js","assets/xai-grok-sanitize-CR2JoOJd.js","assets/xai-grok-models-CeEBaUMC.js","assets/xai-grok-D0g7L-L2.js","assets/xai-grok-errors-bnlIBeu-.js"])))=>i.map(i=>d[i]);
2
2
  import{n as e,t}from"./chunk-aKtaBQYM.js";import"./dist-BmWy99kl.js";import{t as n}from"./preload-helper-zJ_50EbN.js";import{a as r,o as i,s as a}from"./event-stream-BJI_nGaK.js";import"./context-compaction-CFWyOzX1.js";import{t as o}from"./logger-DDBAeTLF.js";import{a as s,t as c}from"./proxied-fetch-CKDBmEMl.js";import{t as l}from"./secret-topology-bwXIzzAK.js";import{t as u}from"./secrets-bridge-client-BSipj-5f.js";import"./tool-ui-DfXu6quJ.js";import{n as d,t as f}from"./src-DlEHAkLd.js";import{n as p,t as m}from"./panel-rpc-DqT2FG7c.js";import{r as h,t as g}from"./bedrock-camp-9-QEmC9Z.js";var _=Symbol.for(`yaml.alias`),v=Symbol.for(`yaml.document`),y=Symbol.for(`yaml.map`),b=Symbol.for(`yaml.pair`),x=Symbol.for(`yaml.scalar`),S=Symbol.for(`yaml.seq`),C=Symbol.for(`yaml.node.type`),w=e=>!!e&&typeof e==`object`&&e[C]===_,T=e=>!!e&&typeof e==`object`&&e[C]===v,ee=e=>!!e&&typeof e==`object`&&e[C]===y,E=e=>!!e&&typeof e==`object`&&e[C]===b,D=e=>!!e&&typeof e==`object`&&e[C]===x,te=e=>!!e&&typeof e==`object`&&e[C]===S;function O(e){if(e&&typeof e==`object`)switch(e[C]){case y:case S:return!0}return!1}function k(e){if(e&&typeof e==`object`)switch(e[C]){case _:case y:case x:case S:return!0}return!1}var ne=e=>(D(e)||O(e))&&!!e.anchor,A=Symbol(`break visit`),re=Symbol(`skip children`),j=Symbol(`remove node`);function M(e,t){let n=ie(t);T(e)?N(null,e.contents,n,Object.freeze([e]))===j&&(e.contents=null):N(null,e,n,Object.freeze([]))}M.BREAK=A,M.SKIP=re,M.REMOVE=j;function N(e,t,n,r){let i=ae(e,t,n,r);if(k(i)||E(i))return oe(e,r,i),N(e,i,n,r);if(typeof i!=`symbol`){if(O(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){let i=N(e,t.items[e],n,r);if(typeof i==`number`)e=i-1;else if(i===A)return A;else i===j&&(t.items.splice(e,1),--e)}}else if(E(t)){r=Object.freeze(r.concat(t));let e=N(`key`,t.key,n,r);if(e===A)return A;e===j&&(t.key=null);let i=N(`value`,t.value,n,r);if(i===A)return A;i===j&&(t.value=null)}}return i}async function P(e,t){let n=ie(t);T(e)?await F(null,e.contents,n,Object.freeze([e]))===j&&(e.contents=null):await F(null,e,n,Object.freeze([]))}P.BREAK=A,P.SKIP=re,P.REMOVE=j;async function F(e,t,n,r){let i=await ae(e,t,n,r);if(k(i)||E(i))return oe(e,r,i),F(e,i,n,r);if(typeof i!=`symbol`){if(O(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){let i=await F(e,t.items[e],n,r);if(typeof i==`number`)e=i-1;else if(i===A)return A;else i===j&&(t.items.splice(e,1),--e)}}else if(E(t)){r=Object.freeze(r.concat(t));let e=await F(`key`,t.key,n,r);if(e===A)return A;e===j&&(t.key=null);let i=await F(`value`,t.value,n,r);if(i===A)return A;i===j&&(t.value=null)}}return i}function ie(e){return typeof e==`object`&&(e.Collection||e.Node||e.Value)?Object.assign({Alias:e.Node,Map:e.Node,Scalar:e.Node,Seq:e.Node},e.Value&&{Map:e.Value,Scalar:e.Value,Seq:e.Value},e.Collection&&{Map:e.Collection,Seq:e.Collection},e):e}function ae(e,t,n,r){if(typeof n==`function`)return n(e,t,r);if(ee(t))return n.Map?.(e,t,r);if(te(t))return n.Seq?.(e,t,r);if(E(t))return n.Pair?.(e,t,r);if(D(t))return n.Scalar?.(e,t,r);if(w(t))return n.Alias?.(e,t,r)}function oe(e,t,n){let r=t[t.length-1];if(O(r))r.items[e]=n;else if(E(r))e===`key`?r.key=n:r.value=n;else if(T(r))r.contents=n;else{let e=w(r)?`alias`:`scalar`;throw Error(`Cannot replace node with ${e} parent`)}}var se={"!":`%21`,",":`%2C`,"[":`%5B`,"]":`%5D`,"{":`%7B`,"}":`%7D`},ce=e=>e.replace(/[!,[\]{}]/g,e=>se[e]),le=class e{constructor(t,n){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},e.defaultYaml,t),this.tags=Object.assign({},e.defaultTags,n)}clone(){let t=new e(this.yaml,this.tags);return t.docStart=this.docStart,t}atDocument(){let t=new e(this.yaml,this.tags);switch(this.yaml.version){case`1.1`:this.atNextDocument=!0;break;case`1.2`:this.atNextDocument=!1,this.yaml={explicit:e.defaultYaml.explicit,version:`1.2`},this.tags=Object.assign({},e.defaultTags);break}return t}add(t,n){this.atNextDocument&&=(this.yaml={explicit:e.defaultYaml.explicit,version:`1.1`},this.tags=Object.assign({},e.defaultTags),!1);let r=t.trim().split(/[ \t]+/),i=r.shift();switch(i){case`%TAG`:{if(r.length!==2&&(n(0,`%TAG directive should contain exactly two parts`),r.length<2))return!1;let[e,t]=r;return this.tags[e]=t,!0}case`%YAML`:{if(this.yaml.explicit=!0,r.length!==1)return n(0,`%YAML directive should contain exactly one part`),!1;let[e]=r;if(e===`1.1`||e===`1.2`)return this.yaml.version=e,!0;{let t=/^\d+\.\d+$/.test(e);return n(6,`Unsupported YAML version ${e}`,t),!1}}default:return n(0,`Unknown directive ${i}`,!0),!1}}tagName(e,t){if(e===`!`)return`!`;if(e[0]!==`!`)return t(`Not a valid tag: ${e}`),null;if(e[1]===`<`){let n=e.slice(2,-1);return n===`!`||n===`!!`?(t(`Verbatim tags aren't resolved, so ${e} is invalid.`),null):(e[e.length-1]!==`>`&&t(`Verbatim tags must end with a >`),n)}let[,n,r]=e.match(/^(.*!)([^!]*)$/s);r||t(`The ${e} tag has no suffix`);let i=this.tags[n];if(i)try{return i+decodeURIComponent(r)}catch(e){return t(String(e)),null}return n===`!`?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(let[t,n]of Object.entries(this.tags))if(e.startsWith(n))return t+ce(e.substring(n.length));return e[0]===`!`?e:`!<${e}>`}toString(e){let t=this.yaml.explicit?[`%YAML ${this.yaml.version||`1.2`}`]:[],n=Object.entries(this.tags),r;if(e&&n.length>0&&k(e.contents)){let t={};M(e.contents,(e,n)=>{k(n)&&n.tag&&(t[n.tag]=!0)}),r=Object.keys(t)}else r=[];for(let[i,a]of n)i===`!!`&&a===`tag:yaml.org,2002:`||(!e||r.some(e=>e.startsWith(a)))&&t.push(`%TAG ${i} ${a}`);return t.join(`
3
3
  `)}};le.defaultYaml={explicit:!1,version:`1.2`},le.defaultTags={"!!":`tag:yaml.org,2002:`};function ue(e){if(/[\x00-\x19\s,[\]{}]/.test(e)){let t=`Anchor must not contain whitespace or control characters: ${JSON.stringify(e)}`;throw Error(t)}return!0}function de(e,t,n,r){if(r&&typeof r==`object`)if(Array.isArray(r))for(let t=0,n=r.length;t<n;++t){let n=r[t],i=de(e,r,String(t),n);i===void 0?delete r[t]:i!==n&&(r[t]=i)}else if(r instanceof Map)for(let t of Array.from(r.keys())){let n=r.get(t),i=de(e,r,t,n);i===void 0?r.delete(t):i!==n&&r.set(t,i)}else if(r instanceof Set)for(let t of Array.from(r)){let n=de(e,r,t,t);n===void 0?r.delete(t):n!==t&&(r.delete(t),r.add(n))}else for(let[t,n]of Object.entries(r)){let i=de(e,r,t,n);i===void 0?delete r[t]:i!==n&&(r[t]=i)}return e.call(t,n,r)}function I(e,t,n){if(Array.isArray(e))return e.map((e,t)=>I(e,String(t),n));if(e&&typeof e.toJSON==`function`){if(!n||!ne(e))return e.toJSON(t,n);let r={aliasCount:0,count:1,res:void 0};n.anchors.set(e,r),n.onCreate=e=>{r.res=e,delete n.onCreate};let i=e.toJSON(t,n);return n.onCreate&&n.onCreate(i),i}return typeof e==`bigint`&&!n?.keep?Number(e):e}var fe=class{constructor(e){Object.defineProperty(this,C,{value:e})}clone(){let e=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(e.range=this.range.slice()),e}toJS(e,{mapAsMap:t,maxAliasCount:n,onAnchor:r,reviver:i}={}){if(!T(e))throw TypeError(`A document argument is required`);let a={anchors:new Map,doc:e,keep:!0,mapAsMap:t===!0,mapKeyWarned:!1,maxAliasCount:typeof n==`number`?n:100},o=I(this,``,a);if(typeof r==`function`)for(let{count:e,res:t}of a.anchors.values())r(t,e);return typeof i==`function`?de(i,{"":o},``,o):o}},pe=class extends fe{constructor(e){super(_),this.source=e,Object.defineProperty(this,"tag",{set(){throw Error(`Alias nodes cannot have tags`)}})}resolve(e,t){if(t?.maxAliasCount===0)throw ReferenceError(`Alias resolution is disabled`);let n;t?.aliasResolveCache?n=t.aliasResolveCache:(n=[],M(e,{Node:(e,t)=>{(w(t)||ne(t))&&n.push(t)}}),t&&(t.aliasResolveCache=n));let r;for(let e of n){if(e===this)break;e.anchor===this.source&&(r=e)}return r}toJSON(e,t){if(!t)return{source:this.source};let{anchors:n,doc:r,maxAliasCount:i}=t,a=this.resolve(r,t);if(!a){let e=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw ReferenceError(e)}let o=n.get(a);if(o||=(I(a,null,t),n.get(a)),o?.res===void 0)throw ReferenceError(`This should not happen: Alias anchor was not resolved?`);if(i>=0&&(o.count+=1,o.aliasCount===0&&(o.aliasCount=me(r,a,n)),o.count*o.aliasCount>i))throw ReferenceError(`Excessive alias count indicates a resource exhaustion attack`);return o.res}toString(e,t,n){let r=`*${this.source}`;if(e){if(ue(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){let e=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw Error(e)}if(e.implicitKey)return`${r} `}return r}};function me(e,t,n){if(w(t)){let r=t.resolve(e),i=n&&r&&n.get(r);return i?i.count*i.aliasCount:0}else if(O(t)){let r=0;for(let i of t.items){let t=me(e,i,n);t>r&&(r=t)}return r}else if(E(t)){let r=me(e,t.key,n),i=me(e,t.value,n);return Math.max(r,i)}return 1}var he=e=>!e||typeof e!=`function`&&typeof e!=`object`,L=class extends fe{constructor(e){super(x),this.value=e}toJSON(e,t){return t?.keep?this.value:I(this.value,e,t)}toString(){return String(this.value)}};L.BLOCK_FOLDED=`BLOCK_FOLDED`,L.BLOCK_LITERAL=`BLOCK_LITERAL`,L.PLAIN=`PLAIN`,L.QUOTE_DOUBLE=`QUOTE_DOUBLE`,L.QUOTE_SINGLE=`QUOTE_SINGLE`;var ge=`tag:yaml.org,2002:`;function _e(e,t,n){if(t){let e=n.filter(e=>e.tag===t),r=e.find(e=>!e.format)??e[0];if(!r)throw Error(`Tag ${t} not found`);return r}return n.find(t=>t.identify?.(e)&&!t.format)}function ve(e,t,n){if(T(e)&&(e=e.contents),k(e))return e;if(E(e)){let t=n.schema[y].createNode?.(n.schema,null,n);return t.items.push(e),t}(e instanceof String||e instanceof Number||e instanceof Boolean||typeof BigInt<`u`&&e instanceof BigInt)&&(e=e.valueOf());let{aliasDuplicateObjects:r,onAnchor:i,onTagObj:a,schema:o,sourceObjects:s}=n,c;if(r&&e&&typeof e==`object`){if(c=s.get(e),c)return c.anchor??=i(e),new pe(c.anchor);c={anchor:null,node:null},s.set(e,c)}t?.startsWith(`!!`)&&(t=ge+t.slice(2));let l=_e(e,t,o.tags);if(!l){if(e&&typeof e.toJSON==`function`&&(e=e.toJSON()),!e||typeof e!=`object`){let t=new L(e);return c&&(c.node=t),t}l=e instanceof Map?o[y]:Symbol.iterator in Object(e)?o[S]:o[y]}a&&(a(l),delete n.onTagObj);let u=l?.createNode?l.createNode(n.schema,e,n):typeof l?.nodeClass?.from==`function`?l.nodeClass.from(n.schema,e,n):new L(e);return t?u.tag=t:l.default||(u.tag=l.tag),c&&(c.node=u),u}function ye(e,t,n){let r=n;for(let e=t.length-1;e>=0;--e){let n=t[e];if(typeof n==`number`&&Number.isInteger(n)&&n>=0){let e=[];e[n]=r,r=e}else r=new Map([[n,r]])}return ve(r,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw Error(`This should not happen, please report a bug.`)},schema:e,sourceObjects:new Map})}var be=e=>e==null||typeof e==`object`&&!!e[Symbol.iterator]().next().done,xe=class extends fe{constructor(e,t){super(e),Object.defineProperty(this,"schema",{value:t,configurable:!0,enumerable:!1,writable:!0})}clone(e){let t=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return e&&(t.schema=e),t.items=t.items.map(t=>k(t)||E(t)?t.clone(e):t),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(be(e))this.add(t);else{let[n,...r]=e,i=this.get(n,!0);if(O(i))i.addIn(r,t);else if(i===void 0&&this.schema)this.set(n,ye(this.schema,r,t));else throw Error(`Expected YAML collection at ${n}. Remaining path: ${r}`)}}deleteIn(e){let[t,...n]=e;if(n.length===0)return this.delete(t);let r=this.get(t,!0);if(O(r))return r.deleteIn(n);throw Error(`Expected YAML collection at ${t}. Remaining path: ${n}`)}getIn(e,t){let[n,...r]=e,i=this.get(n,!0);return r.length===0?!t&&D(i)?i.value:i:O(i)?i.getIn(r,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!E(t))return!1;let n=t.value;return n==null||e&&D(n)&&n.value==null&&!n.commentBefore&&!n.comment&&!n.tag})}hasIn(e){let[t,...n]=e;if(n.length===0)return this.has(t);let r=this.get(t,!0);return O(r)?r.hasIn(n):!1}setIn(e,t){let[n,...r]=e;if(r.length===0)this.set(n,t);else{let e=this.get(n,!0);if(O(e))e.setIn(r,t);else if(e===void 0&&this.schema)this.set(n,ye(this.schema,r,t));else throw Error(`Expected YAML collection at ${n}. Remaining path: ${r}`)}}},Se=e=>e.replace(/^(?!$)(?: $)?/gm,`#`);function Ce(e,t){return/^\n+$/.test(e)?e.substring(1):t?e.replace(/^(?! *$)/gm,t):e}var R=(e,t,n)=>e.endsWith(`
4
4
  `)?Ce(n,t):n.includes(`
@@ -35,4 +35,4 @@ $&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,`$1$2`).replace(/\
35
35
  `}}return e?(p+=`
36
36
  `+Ce(l(e),c),s&&s()):d&&o&&o(),p}function tt({items:e},t,{flowChars:n,itemIndent:r}){let{indent:i,indentStep:a,flowCollectionPadding:o,options:{commentString:s}}=t;r+=a;let c=Object.assign({},t,{indent:r,inFlow:!0,type:null}),l=!1,u=0,d=[];for(let n=0;n<e.length;++n){let i=e[n],a=null;if(k(i))i.spaceBefore&&d.push(``),nt(t,d,i.commentBefore,!1),i.comment&&(a=i.comment);else if(E(i)){let e=k(i.key)?i.key:null;e&&(e.spaceBefore&&d.push(``),nt(t,d,e.commentBefore,!1),e.comment&&(l=!0));let n=k(i.value)?i.value:null;n?(n.comment&&(a=n.comment),n.commentBefore&&(l=!0)):i.value==null&&e?.comment&&(a=e.comment)}a&&(l=!0);let o=Ve(i,c,()=>a=null);l||=d.length>u||o.includes(`
37
37
  `),n<e.length-1?o+=`,`:t.options.trailingComma&&(t.options.lineWidth>0&&(l||=d.reduce((e,t)=>e+t.length+2,2)+(o.length+2)>t.options.lineWidth),l&&(o+=`,`)),a&&(o+=R(o,r,s(a))),d.push(o),u=d.length}let{start:f,end:p}=n;if(d.length===0)return f+p;if(!l){let e=d.reduce((e,t)=>e+t.length+2,2);l=t.options.lineWidth>0&&e>t.options.lineWidth}if(l){let e=f;for(let t of d)e+=t?`\n${a}${i}${t}`:`
38
- `;return`${e}\n${i}${p}`}else return`${f}${o}${d.join(` `)}${o}${p}`}function nt({indent:e,options:{commentString:t}},n,r,i){if(r&&i&&(r=r.replace(/^\n+/,``)),r){let i=Ce(t(r),e);n.push(i.trimStart())}}function V(e,t){let n=D(t)?t.value:t;for(let r of e)if(E(r)&&(r.key===t||r.key===n||D(r.key)&&r.key.value===n))return r}var H=class extends xe{static get tagName(){return`tag:yaml.org,2002:map`}constructor(e){super(y,e),this.items=[]}static from(e,t,n){let{keepUndefined:r,replacer:i}=n,a=new this(e),o=(e,o)=>{if(typeof i==`function`)o=i.call(t,e,o);else if(Array.isArray(i)&&!i.includes(e))return;(o!==void 0||r)&&a.items.push(Qe(e,o,n))};if(t instanceof Map)for(let[e,n]of t)o(e,n);else if(t&&typeof t==`object`)for(let e of Object.keys(t))o(e,t[e]);return typeof e.sortMapEntries==`function`&&a.items.sort(e.sortMapEntries),a}add(e,t){let n;n=E(e)?e:!e||typeof e!=`object`||!(`key`in e)?new B(e,e?.value):new B(e.key,e.value);let r=V(this.items,n.key),i=this.schema?.sortMapEntries;if(r){if(!t)throw Error(`Key ${n.key} already set`);D(r.value)&&he(n.value)?r.value.value=n.value:r.value=n.value}else if(i){let e=this.items.findIndex(e=>i(n,e)<0);e===-1?this.items.push(n):this.items.splice(e,0,n)}else this.items.push(n)}delete(e){let t=V(this.items,e);return t?this.items.splice(this.items.indexOf(t),1).length>0:!1}get(e,t){let n=V(this.items,e)?.value;return(!t&&D(n)?n.value:n)??void 0}has(e){return!!V(this.items,e)}set(e,t){this.add(new B(e,t),!0)}toJSON(e,t,n){let r=n?new n:t?.mapAsMap?new Map:{};t?.onCreate&&t.onCreate(r);for(let e of this.items)Xe(t,r,e);return r}toString(e,t,n){if(!e)return JSON.stringify(this);for(let e of this.items)if(!E(e))throw Error(`Map items must all be pairs; found ${JSON.stringify(e)} instead`);return!e.allNullValues&&this.hasAllNullValues(!1)&&(e=Object.assign({},e,{allNullValues:!0})),$e(this,e,{blockItemPrefix:``,flowChars:{start:`{`,end:`}`},itemIndent:e.indent||``,onChompKeep:n,onComment:t})}},rt={collection:`map`,default:!0,nodeClass:H,tag:`tag:yaml.org,2002:map`,resolve(e,t){return ee(e)||t(`Expected a mapping for this tag`),e},createNode:(e,t,n)=>H.from(e,t,n)},it=class extends xe{static get tagName(){return`tag:yaml.org,2002:seq`}constructor(e){super(S,e),this.items=[]}add(e){this.items.push(e)}delete(e){let t=at(e);return typeof t==`number`?this.items.splice(t,1).length>0:!1}get(e,t){let n=at(e);if(typeof n!=`number`)return;let r=this.items[n];return!t&&D(r)?r.value:r}has(e){let t=at(e);return typeof t==`number`&&t<this.items.length}set(e,t){let n=at(e);if(typeof n!=`number`)throw Error(`Expected a valid index, not ${e}.`);let r=this.items[n];D(r)&&he(t)?r.value=t:this.items[n]=t}toJSON(e,t){let n=[];t?.onCreate&&t.onCreate(n);let r=0;for(let e of this.items)n.push(I(e,String(r++),t));return n}toString(e,t,n){return e?$e(this,e,{blockItemPrefix:`- `,flowChars:{start:`[`,end:`]`},itemIndent:(e.indent||``)+` `,onChompKeep:n,onComment:t}):JSON.stringify(this)}static from(e,t,n){let{replacer:r}=n,i=new this(e);if(t&&Symbol.iterator in Object(t)){let e=0;for(let a of t){if(typeof r==`function`){let n=t instanceof Set?a:String(e++);a=r.call(t,n,a)}i.items.push(ve(a,void 0,n))}}return i}};function at(e){let t=D(e)?e.value:e;return t&&typeof t==`string`&&(t=Number(t)),typeof t==`number`&&Number.isInteger(t)&&t>=0?t:null}var ot={collection:`seq`,default:!0,nodeClass:it,tag:`tag:yaml.org,2002:seq`,resolve(e,t){return te(e)||t(`Expected a sequence for this tag`),e},createNode:(e,t,n)=>it.from(e,t,n)};function st(e){return typeof e==`bigint`||Number.isInteger(e)}var ct=({value:e})=>JSON.stringify(e),lt=[{identify:e=>typeof e==`string`,default:!0,tag:`tag:yaml.org,2002:str`,resolve:e=>e,stringify:ct},{identify:e=>e==null,createNode:()=>new L(null),default:!0,tag:`tag:yaml.org,2002:null`,test:/^null$/,resolve:()=>null,stringify:ct},{identify:e=>typeof e==`boolean`,default:!0,tag:`tag:yaml.org,2002:bool`,test:/^true$|^false$/,resolve:e=>e===`true`,stringify:ct},{identify:st,default:!0,tag:`tag:yaml.org,2002:int`,test:/^-?(?:0|[1-9][0-9]*)$/,resolve:(e,t,{intAsBigInt:n})=>n?BigInt(e):parseInt(e,10),stringify:({value:e})=>st(e)?e.toString():JSON.stringify(e)},{identify:e=>typeof e==`number`,default:!0,tag:`tag:yaml.org,2002:float`,test:/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:e=>parseFloat(e),stringify:ct}];[rt,ot].concat(lt,{default:!0,tag:``,test:/^/,resolve(e,t){return t(`Unresolved plain scalar ${JSON.stringify(e)}`),e}});function ut(e,t,n){let{replacer:r}=n,i=new it(e);i.tag=`tag:yaml.org,2002:pairs`;let a=0;if(t&&Symbol.iterator in Object(t))for(let e of t){typeof r==`function`&&(e=r.call(t,String(a++),e));let o,s;if(Array.isArray(e))if(e.length===2)o=e[0],s=e[1];else throw TypeError(`Expected [key, value] tuple: ${e}`);else if(e&&e instanceof Object){let t=Object.keys(e);if(t.length===1)o=t[0],s=e[o];else throw TypeError(`Expected tuple with one key, not ${t.length} keys`)}else o=e;i.items.push(Qe(o,s,n))}return i}var dt=class e extends it{constructor(){super(),this.add=H.prototype.add.bind(this),this.delete=H.prototype.delete.bind(this),this.get=H.prototype.get.bind(this),this.has=H.prototype.has.bind(this),this.set=H.prototype.set.bind(this),this.tag=e.tag}toJSON(e,t){if(!t)return super.toJSON(e);let n=new Map;t?.onCreate&&t.onCreate(n);for(let e of this.items){let r,i;if(E(e)?(r=I(e.key,``,t),i=I(e.value,r,t)):r=I(e,``,t),n.has(r))throw Error(`Ordered maps must not include duplicate keys`);n.set(r,i)}return n}static from(e,t,n){let r=ut(e,t,n),i=new this;return i.items=r.items,i}};dt.tag=`tag:yaml.org,2002:omap`;var ft=class e extends H{constructor(t){super(t),this.tag=e.tag}add(e){let t;t=E(e)?e:e&&typeof e==`object`&&`key`in e&&`value`in e&&e.value===null?new B(e.key,null):new B(e,null),V(this.items,t.key)||this.items.push(t)}get(e,t){let n=V(this.items,e);return!t&&E(n)?D(n.key)?n.key.value:n.key:n}set(e,t){if(typeof t!=`boolean`)throw Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof t}`);let n=V(this.items,e);n&&!t?this.items.splice(this.items.indexOf(n),1):!n&&t&&this.items.push(new B(e))}toJSON(e,t){return super.toJSON(e,t,Set)}toString(e,t,n){if(!e)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},e,{allNullValues:!0}),t,n);throw Error(`Set items must all have null values`)}static from(e,t,n){let{replacer:r}=n,i=new this(e);if(t&&Symbol.iterator in Object(t))for(let e of t)typeof r==`function`&&(e=r.call(t,e,e)),i.items.push(Qe(e,null,n));return i}};ft.tag=`tag:yaml.org,2002:set`;var pt=Symbol(`break visit`),mt=Symbol(`skip children`),ht=Symbol(`remove item`);function U(e,t){`type`in e&&e.type===`document`&&(e={start:e.start,value:e.value}),gt(Object.freeze([]),e,t)}U.BREAK=pt,U.SKIP=mt,U.REMOVE=ht,U.itemAtPath=(e,t)=>{let n=e;for(let[e,r]of t){let t=n?.[e];if(t&&`items`in t)n=t.items[r];else return}return n},U.parentCollection=(e,t)=>{let n=U.itemAtPath(e,t.slice(0,-1)),r=t[t.length-1][0],i=n?.[r];if(i&&`items`in i)return i;throw Error(`Parent collection not found`)};function gt(e,t,n){let r=n(t,e);if(typeof r==`symbol`)return r;for(let i of[`key`,`value`]){let a=t[i];if(a&&`items`in a){for(let t=0;t<a.items.length;++t){let r=gt(Object.freeze(e.concat([[i,t]])),a.items[t],n);if(typeof r==`number`)t=r-1;else if(r===pt)return pt;else r===ht&&(a.items.splice(t,1),--t)}typeof r==`function`&&i===`key`&&(r=r(t,e))}}return typeof r==`function`?r(t,e):r}t(((e,t)=>{function n(e){return Array.isArray(e)?e:[e]}var r=void 0,i=``,a=` `,o=`\\`,s=/^\s+$/,c=/(?:[^\\]|^)\\$/,l=/^\\!/,u=/^\\#/,d=/\r?\n/g,f=/^\.{0,2}\/|^\.{1,2}$/,p=/\/$/,m=`/`,h=`node-ignore`;typeof Symbol<`u`&&(h=Symbol.for(`node-ignore`));var g=h,_=(e,t,n)=>(Object.defineProperty(e,t,{value:n}),n),v=/([0-z])-([0-z])/g,y=()=>!1,b=e=>e.replace(v,(e,t,n)=>t.charCodeAt(0)<=n.charCodeAt(0)?e:i),x=e=>{let{length:t}=e;return e.slice(0,t-t%2)},S=[[/^\uFEFF/,()=>i],[/((?:\\\\)*?)(\\?\s+)$/,(e,t,n)=>t+(n.indexOf(`\\`)===0?a:i)],[/(\\+?)\s/g,(e,t)=>{let{length:n}=t;return t.slice(0,n-n%2)+a}],[/[\\$.|*+(){^]/g,e=>`\\${e}`],[/(?!\\)\?/g,()=>`[^/]`],[/^\//,()=>`^`],[/\//g,()=>`\\/`],[/^\^*\\\*\\\*\\\//,()=>`^(?:.*\\/)?`],[/^(?=[^^])/,function(){return/\/(?!$)/.test(this)?`^`:`(?:^|\\/)`}],[/\\\/\\\*\\\*(?=\\\/|$)/g,(e,t,n)=>t+6<n.length?`(?:\\/[^\\/]+)*`:`\\/.+`],[/(^|[^\\]+)(\\\*)+(?=.+)/g,(e,t,n)=>t+n.replace(/\\\*/g,`[^\\/]*`)],[/\\\\\\(?=[$.|*+(){^])/g,()=>o],[/\\\\/g,()=>o],[/(\\)?\[([^\]/]*?)(\\*)($|\])/g,(e,t,n,r,i)=>t===o?`\\[${n}${x(r)}${i}`:i===`]`&&r.length%2==0?`[${b(n)}${r}]`:`[]`],[/(?:[^*])$/,e=>/\/$/.test(e)?`${e}$`:`${e}(?=$|\\/$)`]],C=/(^|\\\/)?\\\*$/,w=`regex`,T=`checkRegex`,ee={[w](e,t){return`${t?`${t}[^/]+`:`[^/]*`}(?=$|\\/$)`},[T](e,t){return`${t?`${t}[^/]*`:`[^/]*`}(?=$|\\/$)`}},E=e=>S.reduce((t,[n,r])=>t.replace(n,r.bind(e)),e),D=e=>typeof e==`string`,te=e=>e&&D(e)&&!s.test(e)&&!c.test(e)&&e.indexOf(`#`)!==0,O=e=>e.split(d).filter(Boolean),k=class{constructor(e,t,n,r,i,a){this.pattern=e,this.mark=t,this.negative=i,_(this,`body`,n),_(this,`ignoreCase`,r),_(this,`regexPrefix`,a)}get regex(){let e=`_regex`;return this[e]?this[e]:this._make(w,e)}get checkRegex(){let e=`_checkRegex`;return this[e]?this[e]:this._make(T,e)}_make(e,t){let n=this.regexPrefix.replace(C,ee[e]),r=this.ignoreCase?new RegExp(n,`i`):new RegExp(n);return _(this,t,r)}},ne=({pattern:e,mark:t},n)=>{let r=!1,i=e;i.indexOf(`!`)===0&&(r=!0,i=i.substr(1)),i=i.replace(l,`!`).replace(u,`#`);let a=E(i);return new k(e,t,i,n,r,a)},A=class{constructor(e){this._ignoreCase=e,this._rules=[]}_add(e){if(e&&e[g]){this._rules=this._rules.concat(e._rules._rules),this._added=!0;return}if(D(e)&&(e={pattern:e}),te(e.pattern)){let t=ne(e,this._ignoreCase);this._added=!0,this._rules.push(t)}}add(e){return this._added=!1,n(D(e)?O(e):e).forEach(this._add,this),this._added}test(e,t,n){let i=!1,a=!1,o;this._rules.forEach(s=>{let{negative:c}=s;a===c&&i!==a||c&&!i&&!a&&!t||s[n].test(e)&&(i=!c,a=c,o=c?r:s)});let s={ignored:i,unignored:a};return o&&(s.rule=o),s}},re=(e,t)=>{throw new t(e)},j=(e,t,n)=>D(e)?e?j.isNotRelative(e)?n(`path should be a \`path.relative()\`d string, but got "${t}"`,RangeError):!0:n(`path must not be empty`,TypeError):n(`path must be a string, but got \`${t}\``,TypeError),M=e=>f.test(e);j.isNotRelative=M,j.convert=e=>e;var N=class{constructor({ignorecase:e=!0,ignoreCase:t=e,allowRelativePaths:n=!1}={}){_(this,g,!0),this._rules=new A(t),this._strictPathCheck=!n,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}add(e){return this._rules.add(e)&&this._initCache(),this}addPattern(e){return this.add(e)}_test(e,t,n,r){let i=e&&j.convert(e);return j(i,e,this._strictPathCheck?re:y),this._t(i,t,n,r)}checkIgnore(e){if(!p.test(e))return this.test(e);let t=e.split(m).filter(Boolean);if(t.pop(),t.length){let e=this._t(t.join(m)+m,this._testCache,!0,t);if(e.ignored)return e}return this._rules.test(e,!1,T)}_t(e,t,n,r){if(e in t)return t[e];if(r||=e.split(m).filter(Boolean),r.pop(),!r.length)return t[e]=this._rules.test(e,n,w);let i=this._t(r.join(m)+m,t,n,r);return t[e]=i.ignored?i:this._rules.test(e,n,w)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return n(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},P=e=>new N(e),F=e=>j(e&&j.convert(e),e,y),ie=()=>{j.convert=e=>/^\\\\\?\\/.test(e)||/["<>|\u0000-\u001F]+/u.test(e)?e:e.replace(/\\/g,`/`);let e=/^[a-z]:\//i;j.isNotRelative=t=>e.test(t)||M(t)};typeof process<`u`&&process.platform===`win32`&&ie(),t.exports=P,P.default=P,t.exports.isPathValid=F,_(t.exports,Symbol.for(`setupWindows`),ie)}))(),globalThis.Buffer,o(`secret-scrub`),o(`image-processor`),o(`tool-adapter`);var _t=Object.assign({"/packages/dev-tools/providers.build.json":{include:[`*`],exclude:[`amazon-bedrock`]}})[`/packages/dev-tools/providers.build.json`]??{include:[`*`],exclude:[]};function vt(e){let{include:t,exclude:n}=_t;return n.includes(`*`)||n.includes(e)?!1:!!(t.includes(`*`)||t.includes(e))}var yt=Object.assign({"./built-in/azure-ai-foundry.ts":()=>n(()=>import(`./azure-ai-foundry-Bo0FAJyX.js`),[]),"./built-in/azure-openai.ts":()=>n(()=>import(`./azure-openai-DStnDWxb.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14])),"./built-in/bedrock-camp.ts":()=>n(()=>import(`./bedrock-camp-9-QEmC9Z.js`).then(e=>e.n),__vite__mapDeps([15,5,1,2,3,4,6,7])),"./built-in/local-llm.ts":()=>n(()=>import(`./local-llm-BsCfySh9.js`),__vite__mapDeps([16,1,2,3,4,5,6,17,18,19,7,20,21,8,11]))}),bt=Object.assign({"/packages/webapp/providers/adobe.ts":()=>n(()=>import(`./adobe-DVOKhr5o.js`),__vite__mapDeps([22,2,1,3,4,5,6,9,10,11,12,13,14,23,15,7,24,25,26,27])),"/packages/webapp/providers/github-copilot.ts":()=>n(()=>import(`./github-copilot-DWSna0qk.js`),__vite__mapDeps([28,2,1,3,4,5,6,9,10,11,12,13,14])),"/packages/webapp/providers/github.ts":()=>n(()=>import(`./github-JXOuvOgk.js`),__vite__mapDeps([29,2,9,5,10,11,12,13,14,30,23,24,25,26])),"/packages/webapp/providers/openai-codex.ts":()=>n(()=>import(`./openai-codex-CTCaZUVt.js`),__vite__mapDeps([31,1,2,3,4,5,6,9,10,11,12,13,14])),"/packages/webapp/providers/xai-grok-errors.ts":()=>n(()=>import(`./xai-grok-errors-bnlIBeu-.js`),[]),"/packages/webapp/providers/xai-grok-models.ts":()=>n(()=>import(`./xai-grok-models-CeEBaUMC.js`),[]),"/packages/webapp/providers/xai-grok-sanitize.ts":()=>n(()=>import(`./xai-grok-sanitize-CR2JoOJd.js`),__vite__mapDeps([32,33])),"/packages/webapp/providers/xai-grok.ts":()=>n(()=>import(`./xai-grok-CuAKXYhq.js`),__vite__mapDeps([34,1,2,3,4,5,6,9,10,11,12,13,14,35,33,32]))}),xt=new Map,St=null;function Ct(){return St||(St=(async()=>{for(let[e,t]of Object.entries(yt)){let e=await t();e.config&&vt(e.config.id)&&(xt.set(e.config.id,e.config),e.register?.())}for(let[e,t]of Object.entries(bt)){let e=await t();e.config&&(xt.set(e.config.id,e.config),e.register?.())}})(),St)}function wt(e){return xt.get(e)}function Tt(){return[...xt.keys()]}function Et(e){xt.set(e.id,e)}var Dt=e({ACCOUNTS_KEY:()=>W,__test__:()=>Lt,addAccount:()=>en,applyProviderDefaults:()=>Wt,clearAllSettings:()=>wn,clearApiKey:()=>yn,clearBaseUrl:()=>Sn,clearSelectedProvider:()=>gn,exportProviders:()=>Cn,getAccounts:()=>Y,getAllAvailableModels:()=>Jt,getAllExtraOAuthDomains:()=>Qt,getApiKey:()=>_n,getApiKeyForProvider:()=>un,getApiVersionForProvider:()=>fn,getAvailableProviders:()=>Rt,getBaseUrl:()=>bn,getBaseUrlForProvider:()=>Z,getDeploymentForProvider:()=>dn,getExtraOAuthDomains:()=>Yt,getOAuthAccountInfo:()=>Ht,getProviderConfig:()=>K,getProviderModels:()=>q,getRawApiKeyForProvider:()=>ln,getSelectedModelId:()=>Q,getSelectedProvider:()=>$,isModelHiddenFromPicker:()=>Kt,logoutOAuthAccount:()=>rn,maskOAuthTokenWithRetry:()=>an,migrateLegacyAuthOnlySelection:()=>Ft,persistOAuthMaskViaServiceWorker:()=>on,providerOffersLlmModels:()=>zt,removeAccount:()=>nn,resolveCurrentModel:()=>kn,resolveModelById:()=>On,resolveModelByShorthand:()=>An,saveOAuthAccount:()=>sn,setApiKey:()=>vn,setBaseUrl:()=>xn,setExtraOAuthDomains:()=>Xt,setExtraOAuthDomainsAsync:()=>Zt,setSelectedModelId:()=>pn,setSelectedProvider:()=>hn}),Ot=r,kt=i,W=`slicc_accounts`,G=`selected-model`,At=[`slicc_provider`,`slicc_api_key`,`slicc_base_url`,`anthropic_api_key`,`api_provider`,`azure_resource`,`bedrock_region`],jt=new Set([`github`]);function Mt(e){let t;try{t=a()}catch{return!1}return t.includes(e)&&!vt(e)}var Nt=!1;function Pt(){if(!Nt){Nt=!0;for(let e of At)try{localStorage.removeItem(e)}catch{}Ft()}}function Ft(){try{let e=localStorage.getItem(G);if(e){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t);(jt.has(n)||Mt(n))&&localStorage.removeItem(G)}}}catch{}try{let e=localStorage.getItem(W);if(!e)return;let t=JSON.parse(e);if(!Array.isArray(t))return;let n=t.filter(e=>!(typeof e==`object`&&e&&typeof e.providerId==`string`&&Mt(e.providerId)));n.length!==t.length&&localStorage.setItem(W,JSON.stringify(n))}catch{}}function It(){Nt=!1}var Lt={_resetLegacyCleanup:It};function Rt(){let e=a().filter(vt),t=Tt();return[...new Set([...e,...t])].filter(e=>!wt(e)?.hidden)}function zt(e){try{if(q(e).length>0)return!0}catch{}try{if(i(e).length>0)return!0}catch{}let t=wt(e);return!!(t?.modelOverrides&&Object.keys(t.modelOverrides).length>0)}function Bt(e,t){try{if(q(e).some(e=>e.id===t))return!0}catch{}try{if(i(e).some(e=>e.id===t))return!0}catch{}let n=wt(e);return!!(n?.modelOverrides&&Object.hasOwn(n.modelOverrides,t))}function K(e){return wt(e)||{id:e,name:e.split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),description:`${e} provider`,requiresApiKey:!0,requiresBaseUrl:!1}}function Vt(e,t){t.context_window!==void 0&&(e.contextWindow=t.context_window),t.max_tokens!==void 0&&(e.maxTokens=t.max_tokens),t.reasoning!==void 0&&(e.reasoning=t.reasoning),t.input!==void 0&&(e.input=t.input),t.compat!==void 0&&(e.compat={...e.compat??{},...t.compat}),t.thinkingLevelMap!==void 0&&(e.thinkingLevelMap={...e.thinkingLevelMap??{},...t.thinkingLevelMap})}function q(e){try{if(e===`bedrock-camp`){let e=g(Z(`bedrock-camp`));return kt(`amazon-bedrock`).filter(t=>h(t,e)).map(e=>({...e,api:`bedrock-camp-converse`,provider:`bedrock-camp`}))}let t=K(e);if(t.getModelIds){let n;try{n=t.getModelIds()}catch(t){return J.error(`Provider getModelIds callback failed`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}let r=new Map;for(let e of a())try{for(let t of kt(e))r.set(t.id,t)}catch{}return n.map(n=>{let i=`${e}-${n.api===`openai`?`openai`:`anthropic`}`,a=r.get(n.id),o;a?o={...a,api:i,provider:e}:(o=En(e,n.id,``,i),n.name&&(o.name=n.name));let s=t.modelOverrides?.[n.id];return s&&Vt(o,s),Vt(o,n),o})}if(t.isOAuth){let n=kt(`anthropic`),r=`${e}-anthropic`;return n.map(n=>{let i={...n,api:r,provider:e},a=t.modelOverrides?.[n.id];return a&&Vt(i,a),i})}return kt(e===`azure-ai-foundry`?`anthropic`:e)}catch(t){return J.error(`Failed to load models`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}}function Ht(e){let t=Y().find(t=>t.providerId===e);if(!t?.accessToken)return null;let n=!!t.tokenExpiresAt&&Date.now()>t.tokenExpiresAt-6e4;return{token:t.accessToken,maskedValue:t.maskedValue,expiresAt:t.tokenExpiresAt,userName:t.userName,userAvatar:t.userAvatar,expired:n}}var Ut=Object.assign({})[`/packages/webapp/providers.json`]??[],J=o(`provider-settings`);function Wt(e=Ut){if(e.length===0||Y().length>0)return;let t=new Set(Rt());for(let n of e)if(!(!n.providerId||!n.apiKey)){if(!t.has(n.providerId)){J.warn(`Unknown provider "${n.providerId}" in providers.json — skipping`);continue}en(n.providerId,n.apiKey,n.baseUrl)}let n=e.find(e=>e.providerId&&e.apiKey&&t.has(e.providerId));n?.model&&!localStorage.getItem(G)&&localStorage.setItem(G,`${n.providerId}:${n.model}`)}var Gt=[/haiku/i];function Kt(e){return Gt.some(t=>t.test(e))}function qt(e){return e.filter(e=>!Kt(e.id))}function Jt(){let e=Y();if(e.length===0)return[];let t=new Map;for(let n of e){if(t.has(n.providerId))continue;let e=K(n.providerId);if(e.hidden||Mt(n.providerId))continue;let r=qt(q(n.providerId));if(r.length===0)continue;let i={providerId:n.providerId,providerName:e.name,models:r};t.set(n.providerId,i)}return[...t.values()]}function Y(){Pt();let e=localStorage.getItem(W);if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`object`&&!!e&&typeof e.providerId==`string`&&typeof e.apiKey==`string`):[]}catch{return[]}}function Yt(e){return f(localStorage)[e]??[]}function Xt(e,t){let n=f(localStorage),r=t.map(e=>e.trim()).filter(e=>e.length>0);r.length===0?delete n[e]:n[e]=r,d(localStorage,n)}async function Zt(e,t){if(p()){Xt(e,t);return}let n=m();if(!n)throw Error(`setExtraOAuthDomainsAsync: no DOM and no panel-rpc client — cannot persist to page localStorage`);let{storeAfter:r}=await n.call(`oauth-extras-set`,{providerId:e,domains:t});try{d(localStorage,r)}catch(t){J.warn(`worker-shim mirror failed after successful page write — reload to refresh`,{providerId:e,error:t instanceof Error?t.message:String(t)})}}function Qt(){return f(localStorage)}function $t(e){localStorage.setItem(W,JSON.stringify(e))}async function X(e){if(p()){$t(e);return}let t=m();if(!t)throw Error(`saveAccountsAsync: no DOM and no panel-rpc client — cannot persist to page localStorage`);let n=JSON.stringify(e),{storedJson:r}=await t.call(`save-oauth-accounts`,{accountsJson:n});try{localStorage.setItem(W,r)}catch(e){J.warn(`worker-shim mirror failed after successful page write — reload to refresh`,{error:e instanceof Error?e.message:String(e)})}}function en(e,t,n,r,i){let a=Y().filter(t=>t.providerId!==e),o={providerId:e,apiKey:t};n&&(o.baseUrl=n),r&&(o.deployment=r),i&&(o.apiVersion=i),a.push(o),$t(a)}async function tn(e){let t=l();try{if(t===`extension-direct`){let t=await new Promise(t=>{chrome.runtime.sendMessage({type:`secrets.delete`,name:`oauth.${e}.token`},n=>{chrome.runtime.lastError&&J.error(`SW secrets.delete transport failed`,{providerId:e,error:chrome.runtime.lastError.message}),t(n??{})})});t.error&&J.error(`SW secrets.delete returned error`,{providerId:e,error:t.error})}else if(t===`extension-delegate`){let t=await u(`secrets.delete`,{name:`oauth.${e}.token`});t?.error&&J.error(`Bridge secrets.delete returned error`,{providerId:e,error:t.error})}else if(t!==`connect`){let t=await fetch(s(`/api/secrets/oauth/${e}`),{method:`DELETE`,headers:c()});!t.ok&&t.status!==404&&J.warn(`OAuth replica DELETE non-ok`,{providerId:e,status:t.status})}}catch(n){J.error(`OAuth replica removal failed`,{providerId:e,topology:t,error:n instanceof Error?n.message:String(n)})}}async function nn(e){let t=Y().find(t=>t.providerId===e),n=K(e);t&&n?.isOAuth&&await rn(e),await tn(e),await X(Y().filter(t=>t.providerId!==e));let r=localStorage.getItem(G)??``,i=r.indexOf(`:`);i>0&&r.slice(0,i)===e&&localStorage.removeItem(G)}async function rn(e){let t=Y().find(t=>t.providerId===e);if(!t)return;let r=K(e);if(r?.isOAuth){if(r.onOAuthLogout)try{await r.onOAuthLogout()}catch(t){J.warn(`onOAuthLogout failed`,{providerId:e,error:t instanceof Error?t.message:String(t)})}if(r.getOAuthLogoutUrl){let i=r.getOAuthLogoutUrl(t);if(i){let{openIdpLogoutUrl:t}=await n(async()=>{let{openIdpLogoutUrl:e}=await import(`./oauth-service-YGl8VFS-.js`);return{openIdpLogoutUrl:e}},__vite__mapDeps([24,2,12,5,13,25,26]));await t(i).catch(t=>{J.warn(`IdP logout popup failed`,{providerId:e,error:t instanceof Error?t.message:String(t)})})}}await X(Y().map(t=>t.providerId===e?{providerId:t.providerId,apiKey:``,baseUrl:t.baseUrl,userName:t.userName,userAvatar:t.userAvatar,loggedOut:!0}:t)),await tn(e)}}async function an(e,t={}){let n=Math.max(1,t.attempts??3),r=t.delayMs??150,i=t.sleep??(e=>new Promise(t=>setTimeout(t,e))),a;for(let t=0;t<n;t++){let o=await e();if(o.maskedValue)return{maskedValue:o.maskedValue};o.error&&(a=o.error),t<n-1&&await i(r)}return{lastError:a}}async function on(e,t,n){let r={providerId:e.providerId,accessToken:e.accessToken,domains:e.domains.join(`,`)},{maskedValue:i,lastError:a}=await an(()=>t.sendMaskRequest(r),n);if(!i){J.error(`OAuth mask give-up: no masked value after retries`,{providerId:e.providerId,reason:a??`no error reported (cold SW or empty reply)`});return}let o=t.getAccounts(),s=o.find(t=>t.providerId===e.providerId);s&&(s.maskedValue=i,await t.saveAccounts(o))}async function sn(e){let t=Y().find(t=>t.providerId===e.providerId),n=Y().filter(t=>t.providerId!==e.providerId);n.push({providerId:e.providerId,apiKey:``,accessToken:e.accessToken,refreshToken:e.refreshToken,tokenExpiresAt:e.tokenExpiresAt,userName:e.userName,userAvatar:e.userAvatar,baseUrl:e.baseUrl??t?.baseUrl}),await X(n);let r=K(e.providerId)?.oauthTokenDomains??[],i=Yt(e.providerId),a=new Set,o=[];for(let e of[...r,...i]){let t=e.toLowerCase();a.has(t)||(a.add(t),o.push(e))}if(o.length===0)return;let d=l();try{if(d===`extension-direct`)await on({providerId:e.providerId,accessToken:e.accessToken,domains:o},{sendMaskRequest:t=>new Promise(n=>{chrome.runtime.sendMessage({type:`secrets.mask-oauth-token`,...t},t=>{chrome.runtime.lastError&&J.error(`SW mask-oauth-token transport failed`,{providerId:e.providerId,error:chrome.runtime.lastError.message}),t?.error&&J.warn(`SW mask-oauth-token returned error`,{providerId:e.providerId,error:t.error}),n(t??{})})}),getAccounts:Y,saveAccounts:X});else if(d===`extension-delegate`)await on({providerId:e.providerId,accessToken:e.accessToken,domains:o},{sendMaskRequest:t=>u(`secrets.mask-oauth-token`,t).then(t=>(t?.error&&J.warn(`Bridge mask-oauth-token returned error`,{providerId:e.providerId,error:t.error}),t??{})).catch(t=>(J.error(`Bridge mask-oauth-token transport failed`,{providerId:e.providerId,error:t instanceof Error?t.message:String(t)}),{})),getAccounts:Y,saveAccounts:X});else if(d!==`connect`){let t=await fetch(s(`/api/secrets/oauth-update`),{method:`POST`,headers:c({"Content-Type":`application/json`}),body:JSON.stringify({providerId:e.providerId,accessToken:e.accessToken,domains:o})});if(t.ok){let n=await t.json();if(typeof n.maskedValue==`string`){let t=Y(),r=t.find(t=>t.providerId===e.providerId);r&&(r.maskedValue=n.maskedValue,await X(t))}else J.warn(`OAuth replica POST ok but missing maskedValue`,{providerId:e.providerId})}else J.warn(`OAuth replica POST non-ok`,{providerId:e.providerId,status:t.status})}}catch(t){J.error(`OAuth replica sync failed`,{providerId:e.providerId,topology:d,error:t instanceof Error?t.message:String(t)})}}var cn=`local`;function ln(e){let t=Y().find(t=>t.providerId===e);return t&&(t.accessToken||t.apiKey)||null}function un(e){let t=Y().find(t=>t.providerId===e);return t?t.accessToken||t.apiKey||(K(e).optionalApiKey?cn:null):null}function Z(e){return Y().find(t=>t.providerId===e)?.baseUrl??null}function dn(e){return Y().find(t=>t.providerId===e)?.deployment??null}function fn(e){return Y().find(t=>t.providerId===e)?.apiVersion??null}function Q(){let e=localStorage.getItem(G)||``,t=e.indexOf(`:`);return t>=0?e.slice(t+1):e}function pn(e){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t),r=new Set([...Tt(),...Rt()]),i=n.includes(`.`);if(r.has(n)||!i){localStorage.setItem(G,e);return}}let n=$();localStorage.setItem(G,`${n}:${e}`)}function mn(){return localStorage.getItem(G)||``}function $(){let e=mn(),t=e.indexOf(`:`);if(t>0)return e.slice(0,t);let n=Y(),r=Q();if(r){let e=n.find(e=>zt(e.providerId)&&Bt(e.providerId,r));if(e)return e.providerId}let i=n.find(e=>zt(e.providerId));return i?i.providerId:n.length>0?n[0].providerId:`anthropic`}function hn(e){let t=Q();localStorage.setItem(G,`${e}:${t}`)}function gn(){let e=Q();localStorage.setItem(G,e)}function _n(){return un($())}function vn(e){let t=$();en(t,e,Z(t)??void 0)}async function yn(){await nn($())}function bn(){return Z($())}function xn(e){let t=$(),n=ln(t);n&&en(t,n,e||void 0)}function Sn(){let e=$(),t=ln(e);t&&en(e,t)}function Cn(){let e=Y(),t=$(),n=Q();return e.map(e=>{let r={providerId:e.providerId,apiKey:e.apiKey};return e.baseUrl&&(r.baseUrl=e.baseUrl),e.providerId===t&&n&&(r.model=n),r})}async function wn(){let e=Y();await Promise.allSettled(e.map(e=>nn(e.providerId))),localStorage.removeItem(W),localStorage.removeItem(G);for(let e of At)localStorage.removeItem(e)}function Tn(e){return/^(?:gpt[-.]?|o[0-9]|chatgpt)/i.test(e)?`openai`:`anthropic`}function En(e,t,n,r){return{id:t,name:t,provider:e,api:r??`${e}-${Tn(t)}`,baseUrl:n??``,contextWindow:2e5,maxTokens:16384,input:[`text`,`image`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},reasoning:!0}}function Dn(e,t){return t.isOAuth||e===`azure-ai-foundry`?`anthropic`:e===`bedrock-camp`?`amazon-bedrock`:e}function On(e){if(!e)return kn();let t=$(),n=Z(t),r=K(t);try{let i=Ot(Dn(t,r),e);if(!i?.id)throw Error(`Model ${e} not found`);let a=i;return r.isOAuth?a=q(t).find(t=>t.id===e)||{...a,api:`${t}-anthropic`,provider:t}:t===`bedrock-camp`&&(a={...a,api:`bedrock-camp-converse`,provider:`bedrock-camp`}),n&&(a={...a,baseUrl:n}),a}catch(i){if(J.debug(`resolveModelById: pi-ai lookup miss, using provider fallback`,{providerId:t,modelId:e,error:i instanceof Error?i.message:String(i)}),r.isOAuth){let r=q(t).find(t=>t.id===e);return r?n?{...r,baseUrl:n}:r:En(t,e,n)}return kn()}}function kn(){let e=$(),t=Q(),n=Z(e),r=q(e),i=K(e),a=i.defaultModelId?r.find(e=>e.id.toLowerCase().includes(i.defaultModelId.toLowerCase()))?.id:void 0,o=t||a||r[0]?.id||`claude-sonnet-4-6`;try{let t=Dn(e,i),a=Ot(t,o);if(!a?.id)throw Error(`Model ${o} not found in ${t} registry`);let s=a;return i.isOAuth?s=r.find(e=>e.id===o)||{...s,api:`${e}-anthropic`,provider:e}:e===`bedrock-camp`&&(s={...s,api:`bedrock-camp-converse`,provider:`bedrock-camp`}),n&&(s={...s,baseUrl:n}),s}catch(t){J.debug(`resolveCurrentModel: pi-ai lookup miss, using provider fallback`,{providerId:e,effectiveModelId:o,error:t instanceof Error?t.message:String(t)});let a=r.find(e=>e.id===o);return a?n?{...a,baseUrl:n}:a:i.isOAuth?En(e,o,n):Ot(`anthropic`,`claude-sonnet-4-0`)}}function An(e){let t=e.toLowerCase();if(!t)return null;let n=null,r=-1;for(let e of Y())for(let i of q(e.providerId)){let e=i.id.toLowerCase(),a=(i.name??``).toLowerCase();if(!e.includes(t)&&!a.includes(t))continue;let o=i.contextWindow??0;(o>r||o===r&&jn(i.id,n??``)>0)&&(r=o,n=i.id)}return n}function jn(e,t){let n=e.match(/\d+/g)?.map(Number)??[],r=t.match(/\d+/g)?.map(Number)??[],i=Math.max(n.length,r.length);for(let e=0;e<i;e++){let t=(n[e]??0)-(r[e]??0);if(t!==0)return t}return 0}export{an as A,xn as B,K as C,$ as D,Q as E,kn as F,wt as G,Zt as H,On as I,Et as K,An as L,on as M,zt as N,Kt as O,nn as P,sn as R,Ht as S,ln as T,pn as U,Xt as V,hn as W,Rt as _,Wt as a,dn as b,Sn as c,Y as d,Jt as f,fn as g,un as h,en as i,Ft as j,rn as k,gn as l,_n as m,Lt as n,wn as o,Qt as p,Ct as q,Dt as r,yn as s,W as t,Cn as u,bn as v,q as w,Yt as x,Z as y,vn as z};
38
+ `;return`${e}\n${i}${p}`}else return`${f}${o}${d.join(` `)}${o}${p}`}function nt({indent:e,options:{commentString:t}},n,r,i){if(r&&i&&(r=r.replace(/^\n+/,``)),r){let i=Ce(t(r),e);n.push(i.trimStart())}}function V(e,t){let n=D(t)?t.value:t;for(let r of e)if(E(r)&&(r.key===t||r.key===n||D(r.key)&&r.key.value===n))return r}var H=class extends xe{static get tagName(){return`tag:yaml.org,2002:map`}constructor(e){super(y,e),this.items=[]}static from(e,t,n){let{keepUndefined:r,replacer:i}=n,a=new this(e),o=(e,o)=>{if(typeof i==`function`)o=i.call(t,e,o);else if(Array.isArray(i)&&!i.includes(e))return;(o!==void 0||r)&&a.items.push(Qe(e,o,n))};if(t instanceof Map)for(let[e,n]of t)o(e,n);else if(t&&typeof t==`object`)for(let e of Object.keys(t))o(e,t[e]);return typeof e.sortMapEntries==`function`&&a.items.sort(e.sortMapEntries),a}add(e,t){let n;n=E(e)?e:!e||typeof e!=`object`||!(`key`in e)?new B(e,e?.value):new B(e.key,e.value);let r=V(this.items,n.key),i=this.schema?.sortMapEntries;if(r){if(!t)throw Error(`Key ${n.key} already set`);D(r.value)&&he(n.value)?r.value.value=n.value:r.value=n.value}else if(i){let e=this.items.findIndex(e=>i(n,e)<0);e===-1?this.items.push(n):this.items.splice(e,0,n)}else this.items.push(n)}delete(e){let t=V(this.items,e);return t?this.items.splice(this.items.indexOf(t),1).length>0:!1}get(e,t){let n=V(this.items,e)?.value;return(!t&&D(n)?n.value:n)??void 0}has(e){return!!V(this.items,e)}set(e,t){this.add(new B(e,t),!0)}toJSON(e,t,n){let r=n?new n:t?.mapAsMap?new Map:{};t?.onCreate&&t.onCreate(r);for(let e of this.items)Xe(t,r,e);return r}toString(e,t,n){if(!e)return JSON.stringify(this);for(let e of this.items)if(!E(e))throw Error(`Map items must all be pairs; found ${JSON.stringify(e)} instead`);return!e.allNullValues&&this.hasAllNullValues(!1)&&(e=Object.assign({},e,{allNullValues:!0})),$e(this,e,{blockItemPrefix:``,flowChars:{start:`{`,end:`}`},itemIndent:e.indent||``,onChompKeep:n,onComment:t})}},rt={collection:`map`,default:!0,nodeClass:H,tag:`tag:yaml.org,2002:map`,resolve(e,t){return ee(e)||t(`Expected a mapping for this tag`),e},createNode:(e,t,n)=>H.from(e,t,n)},it=class extends xe{static get tagName(){return`tag:yaml.org,2002:seq`}constructor(e){super(S,e),this.items=[]}add(e){this.items.push(e)}delete(e){let t=at(e);return typeof t==`number`?this.items.splice(t,1).length>0:!1}get(e,t){let n=at(e);if(typeof n!=`number`)return;let r=this.items[n];return!t&&D(r)?r.value:r}has(e){let t=at(e);return typeof t==`number`&&t<this.items.length}set(e,t){let n=at(e);if(typeof n!=`number`)throw Error(`Expected a valid index, not ${e}.`);let r=this.items[n];D(r)&&he(t)?r.value=t:this.items[n]=t}toJSON(e,t){let n=[];t?.onCreate&&t.onCreate(n);let r=0;for(let e of this.items)n.push(I(e,String(r++),t));return n}toString(e,t,n){return e?$e(this,e,{blockItemPrefix:`- `,flowChars:{start:`[`,end:`]`},itemIndent:(e.indent||``)+` `,onChompKeep:n,onComment:t}):JSON.stringify(this)}static from(e,t,n){let{replacer:r}=n,i=new this(e);if(t&&Symbol.iterator in Object(t)){let e=0;for(let a of t){if(typeof r==`function`){let n=t instanceof Set?a:String(e++);a=r.call(t,n,a)}i.items.push(ve(a,void 0,n))}}return i}};function at(e){let t=D(e)?e.value:e;return t&&typeof t==`string`&&(t=Number(t)),typeof t==`number`&&Number.isInteger(t)&&t>=0?t:null}var ot={collection:`seq`,default:!0,nodeClass:it,tag:`tag:yaml.org,2002:seq`,resolve(e,t){return te(e)||t(`Expected a sequence for this tag`),e},createNode:(e,t,n)=>it.from(e,t,n)};function st(e){return typeof e==`bigint`||Number.isInteger(e)}var ct=({value:e})=>JSON.stringify(e),lt=[{identify:e=>typeof e==`string`,default:!0,tag:`tag:yaml.org,2002:str`,resolve:e=>e,stringify:ct},{identify:e=>e==null,createNode:()=>new L(null),default:!0,tag:`tag:yaml.org,2002:null`,test:/^null$/,resolve:()=>null,stringify:ct},{identify:e=>typeof e==`boolean`,default:!0,tag:`tag:yaml.org,2002:bool`,test:/^true$|^false$/,resolve:e=>e===`true`,stringify:ct},{identify:st,default:!0,tag:`tag:yaml.org,2002:int`,test:/^-?(?:0|[1-9][0-9]*)$/,resolve:(e,t,{intAsBigInt:n})=>n?BigInt(e):parseInt(e,10),stringify:({value:e})=>st(e)?e.toString():JSON.stringify(e)},{identify:e=>typeof e==`number`,default:!0,tag:`tag:yaml.org,2002:float`,test:/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:e=>parseFloat(e),stringify:ct}];[rt,ot].concat(lt,{default:!0,tag:``,test:/^/,resolve(e,t){return t(`Unresolved plain scalar ${JSON.stringify(e)}`),e}});function ut(e,t,n){let{replacer:r}=n,i=new it(e);i.tag=`tag:yaml.org,2002:pairs`;let a=0;if(t&&Symbol.iterator in Object(t))for(let e of t){typeof r==`function`&&(e=r.call(t,String(a++),e));let o,s;if(Array.isArray(e))if(e.length===2)o=e[0],s=e[1];else throw TypeError(`Expected [key, value] tuple: ${e}`);else if(e&&e instanceof Object){let t=Object.keys(e);if(t.length===1)o=t[0],s=e[o];else throw TypeError(`Expected tuple with one key, not ${t.length} keys`)}else o=e;i.items.push(Qe(o,s,n))}return i}var dt=class e extends it{constructor(){super(),this.add=H.prototype.add.bind(this),this.delete=H.prototype.delete.bind(this),this.get=H.prototype.get.bind(this),this.has=H.prototype.has.bind(this),this.set=H.prototype.set.bind(this),this.tag=e.tag}toJSON(e,t){if(!t)return super.toJSON(e);let n=new Map;t?.onCreate&&t.onCreate(n);for(let e of this.items){let r,i;if(E(e)?(r=I(e.key,``,t),i=I(e.value,r,t)):r=I(e,``,t),n.has(r))throw Error(`Ordered maps must not include duplicate keys`);n.set(r,i)}return n}static from(e,t,n){let r=ut(e,t,n),i=new this;return i.items=r.items,i}};dt.tag=`tag:yaml.org,2002:omap`;var ft=class e extends H{constructor(t){super(t),this.tag=e.tag}add(e){let t;t=E(e)?e:e&&typeof e==`object`&&`key`in e&&`value`in e&&e.value===null?new B(e.key,null):new B(e,null),V(this.items,t.key)||this.items.push(t)}get(e,t){let n=V(this.items,e);return!t&&E(n)?D(n.key)?n.key.value:n.key:n}set(e,t){if(typeof t!=`boolean`)throw Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof t}`);let n=V(this.items,e);n&&!t?this.items.splice(this.items.indexOf(n),1):!n&&t&&this.items.push(new B(e))}toJSON(e,t){return super.toJSON(e,t,Set)}toString(e,t,n){if(!e)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},e,{allNullValues:!0}),t,n);throw Error(`Set items must all have null values`)}static from(e,t,n){let{replacer:r}=n,i=new this(e);if(t&&Symbol.iterator in Object(t))for(let e of t)typeof r==`function`&&(e=r.call(t,e,e)),i.items.push(Qe(e,null,n));return i}};ft.tag=`tag:yaml.org,2002:set`;var pt=Symbol(`break visit`),mt=Symbol(`skip children`),ht=Symbol(`remove item`);function U(e,t){`type`in e&&e.type===`document`&&(e={start:e.start,value:e.value}),gt(Object.freeze([]),e,t)}U.BREAK=pt,U.SKIP=mt,U.REMOVE=ht,U.itemAtPath=(e,t)=>{let n=e;for(let[e,r]of t){let t=n?.[e];if(t&&`items`in t)n=t.items[r];else return}return n},U.parentCollection=(e,t)=>{let n=U.itemAtPath(e,t.slice(0,-1)),r=t[t.length-1][0],i=n?.[r];if(i&&`items`in i)return i;throw Error(`Parent collection not found`)};function gt(e,t,n){let r=n(t,e);if(typeof r==`symbol`)return r;for(let i of[`key`,`value`]){let a=t[i];if(a&&`items`in a){for(let t=0;t<a.items.length;++t){let r=gt(Object.freeze(e.concat([[i,t]])),a.items[t],n);if(typeof r==`number`)t=r-1;else if(r===pt)return pt;else r===ht&&(a.items.splice(t,1),--t)}typeof r==`function`&&i===`key`&&(r=r(t,e))}}return typeof r==`function`?r(t,e):r}t(((e,t)=>{function n(e){return Array.isArray(e)?e:[e]}var r=void 0,i=``,a=` `,o=`\\`,s=/^\s+$/,c=/(?:[^\\]|^)\\$/,l=/^\\!/,u=/^\\#/,d=/\r?\n/g,f=/^\.{0,2}\/|^\.{1,2}$/,p=/\/$/,m=`/`,h=`node-ignore`;typeof Symbol<`u`&&(h=Symbol.for(`node-ignore`));var g=h,_=(e,t,n)=>(Object.defineProperty(e,t,{value:n}),n),v=/([0-z])-([0-z])/g,y=()=>!1,b=e=>e.replace(v,(e,t,n)=>t.charCodeAt(0)<=n.charCodeAt(0)?e:i),x=e=>{let{length:t}=e;return e.slice(0,t-t%2)},S=[[/^\uFEFF/,()=>i],[/((?:\\\\)*?)(\\?\s+)$/,(e,t,n)=>t+(n.indexOf(`\\`)===0?a:i)],[/(\\+?)\s/g,(e,t)=>{let{length:n}=t;return t.slice(0,n-n%2)+a}],[/[\\$.|*+(){^]/g,e=>`\\${e}`],[/(?!\\)\?/g,()=>`[^/]`],[/^\//,()=>`^`],[/\//g,()=>`\\/`],[/^\^*\\\*\\\*\\\//,()=>`^(?:.*\\/)?`],[/^(?=[^^])/,function(){return/\/(?!$)/.test(this)?`^`:`(?:^|\\/)`}],[/\\\/\\\*\\\*(?=\\\/|$)/g,(e,t,n)=>t+6<n.length?`(?:\\/[^\\/]+)*`:`\\/.+`],[/(^|[^\\]+)(\\\*)+(?=.+)/g,(e,t,n)=>t+n.replace(/\\\*/g,`[^\\/]*`)],[/\\\\\\(?=[$.|*+(){^])/g,()=>o],[/\\\\/g,()=>o],[/(\\)?\[([^\]/]*?)(\\*)($|\])/g,(e,t,n,r,i)=>t===o?`\\[${n}${x(r)}${i}`:i===`]`&&r.length%2==0?`[${b(n)}${r}]`:`[]`],[/(?:[^*])$/,e=>/\/$/.test(e)?`${e}$`:`${e}(?=$|\\/$)`]],C=/(^|\\\/)?\\\*$/,w=`regex`,T=`checkRegex`,ee={[w](e,t){return`${t?`${t}[^/]+`:`[^/]*`}(?=$|\\/$)`},[T](e,t){return`${t?`${t}[^/]*`:`[^/]*`}(?=$|\\/$)`}},E=e=>S.reduce((t,[n,r])=>t.replace(n,r.bind(e)),e),D=e=>typeof e==`string`,te=e=>e&&D(e)&&!s.test(e)&&!c.test(e)&&e.indexOf(`#`)!==0,O=e=>e.split(d).filter(Boolean),k=class{constructor(e,t,n,r,i,a){this.pattern=e,this.mark=t,this.negative=i,_(this,`body`,n),_(this,`ignoreCase`,r),_(this,`regexPrefix`,a)}get regex(){let e=`_regex`;return this[e]?this[e]:this._make(w,e)}get checkRegex(){let e=`_checkRegex`;return this[e]?this[e]:this._make(T,e)}_make(e,t){let n=this.regexPrefix.replace(C,ee[e]),r=this.ignoreCase?new RegExp(n,`i`):new RegExp(n);return _(this,t,r)}},ne=({pattern:e,mark:t},n)=>{let r=!1,i=e;i.indexOf(`!`)===0&&(r=!0,i=i.substr(1)),i=i.replace(l,`!`).replace(u,`#`);let a=E(i);return new k(e,t,i,n,r,a)},A=class{constructor(e){this._ignoreCase=e,this._rules=[]}_add(e){if(e&&e[g]){this._rules=this._rules.concat(e._rules._rules),this._added=!0;return}if(D(e)&&(e={pattern:e}),te(e.pattern)){let t=ne(e,this._ignoreCase);this._added=!0,this._rules.push(t)}}add(e){return this._added=!1,n(D(e)?O(e):e).forEach(this._add,this),this._added}test(e,t,n){let i=!1,a=!1,o;this._rules.forEach(s=>{let{negative:c}=s;a===c&&i!==a||c&&!i&&!a&&!t||s[n].test(e)&&(i=!c,a=c,o=c?r:s)});let s={ignored:i,unignored:a};return o&&(s.rule=o),s}},re=(e,t)=>{throw new t(e)},j=(e,t,n)=>D(e)?e?j.isNotRelative(e)?n(`path should be a \`path.relative()\`d string, but got "${t}"`,RangeError):!0:n(`path must not be empty`,TypeError):n(`path must be a string, but got \`${t}\``,TypeError),M=e=>f.test(e);j.isNotRelative=M,j.convert=e=>e;var N=class{constructor({ignorecase:e=!0,ignoreCase:t=e,allowRelativePaths:n=!1}={}){_(this,g,!0),this._rules=new A(t),this._strictPathCheck=!n,this._initCache()}_initCache(){this._ignoreCache=Object.create(null),this._testCache=Object.create(null)}add(e){return this._rules.add(e)&&this._initCache(),this}addPattern(e){return this.add(e)}_test(e,t,n,r){let i=e&&j.convert(e);return j(i,e,this._strictPathCheck?re:y),this._t(i,t,n,r)}checkIgnore(e){if(!p.test(e))return this.test(e);let t=e.split(m).filter(Boolean);if(t.pop(),t.length){let e=this._t(t.join(m)+m,this._testCache,!0,t);if(e.ignored)return e}return this._rules.test(e,!1,T)}_t(e,t,n,r){if(e in t)return t[e];if(r||=e.split(m).filter(Boolean),r.pop(),!r.length)return t[e]=this._rules.test(e,n,w);let i=this._t(r.join(m)+m,t,n,r);return t[e]=i.ignored?i:this._rules.test(e,n,w)}ignores(e){return this._test(e,this._ignoreCache,!1).ignored}createFilter(){return e=>!this.ignores(e)}filter(e){return n(e).filter(this.createFilter())}test(e){return this._test(e,this._testCache,!0)}},P=e=>new N(e),F=e=>j(e&&j.convert(e),e,y),ie=()=>{j.convert=e=>/^\\\\\?\\/.test(e)||/["<>|\u0000-\u001F]+/u.test(e)?e:e.replace(/\\/g,`/`);let e=/^[a-z]:\//i;j.isNotRelative=t=>e.test(t)||M(t)};typeof process<`u`&&process.platform===`win32`&&ie(),t.exports=P,P.default=P,t.exports.isPathValid=F,_(t.exports,Symbol.for(`setupWindows`),ie)}))(),globalThis.Buffer,o(`secret-scrub`),o(`image-processor`),o(`tool-adapter`);var _t=Object.assign({"/packages/dev-tools/providers.build.json":{include:[`*`],exclude:[`amazon-bedrock`]}})[`/packages/dev-tools/providers.build.json`]??{include:[`*`],exclude:[]};function vt(e){let{include:t,exclude:n}=_t;return n.includes(`*`)||n.includes(e)?!1:!!(t.includes(`*`)||t.includes(e))}var yt=Object.assign({"./built-in/azure-ai-foundry.ts":()=>n(()=>import(`./azure-ai-foundry-Bo0FAJyX.js`),[]),"./built-in/azure-openai.ts":()=>n(()=>import(`./azure-openai-VHwRfKEo.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14])),"./built-in/bedrock-camp.ts":()=>n(()=>import(`./bedrock-camp-9-QEmC9Z.js`).then(e=>e.n),__vite__mapDeps([15,5,1,2,3,4,6,7])),"./built-in/local-llm.ts":()=>n(()=>import(`./local-llm-BddLqaEw.js`),__vite__mapDeps([16,1,2,3,4,5,6,17,18,19,7,20,21,8,11]))}),bt=Object.assign({"/packages/webapp/providers/adobe.ts":()=>n(()=>import(`./adobe-De0SCRDs.js`),__vite__mapDeps([22,2,1,3,4,5,6,9,10,11,12,13,14,23,15,7,24,25,26,27])),"/packages/webapp/providers/github-copilot.ts":()=>n(()=>import(`./github-copilot-u3Q45lH5.js`),__vite__mapDeps([28,2,1,3,4,5,6,9,10,11,12,13,14])),"/packages/webapp/providers/github.ts":()=>n(()=>import(`./github-CS9hqCNH.js`),__vite__mapDeps([29,2,9,5,10,11,12,13,14,30,23,24,25,26])),"/packages/webapp/providers/openai-codex.ts":()=>n(()=>import(`./openai-codex-BThq9a2_.js`),__vite__mapDeps([31,1,2,3,4,5,6,9,10,11,12,13,14])),"/packages/webapp/providers/xai-grok-errors.ts":()=>n(()=>import(`./xai-grok-errors-bnlIBeu-.js`),[]),"/packages/webapp/providers/xai-grok-models.ts":()=>n(()=>import(`./xai-grok-models-CeEBaUMC.js`),[]),"/packages/webapp/providers/xai-grok-sanitize.ts":()=>n(()=>import(`./xai-grok-sanitize-CR2JoOJd.js`),__vite__mapDeps([32,33])),"/packages/webapp/providers/xai-grok.ts":()=>n(()=>import(`./xai-grok-D0g7L-L2.js`),__vite__mapDeps([34,1,2,3,4,5,6,9,10,11,12,13,14,35,33,32]))}),xt=new Map,St=null;function Ct(){return St||(St=(async()=>{for(let[e,t]of Object.entries(yt)){let e=await t();e.config&&vt(e.config.id)&&(xt.set(e.config.id,e.config),e.register?.())}for(let[e,t]of Object.entries(bt)){let e=await t();e.config&&(xt.set(e.config.id,e.config),e.register?.())}})(),St)}function wt(e){return xt.get(e)}function Tt(){return[...xt.keys()]}function Et(e){xt.set(e.id,e)}var Dt=e({ACCOUNTS_KEY:()=>W,__test__:()=>Lt,addAccount:()=>en,applyProviderDefaults:()=>Wt,clearAllSettings:()=>wn,clearApiKey:()=>yn,clearBaseUrl:()=>Sn,clearSelectedProvider:()=>gn,exportProviders:()=>Cn,getAccounts:()=>Y,getAllAvailableModels:()=>Jt,getAllExtraOAuthDomains:()=>Qt,getApiKey:()=>_n,getApiKeyForProvider:()=>un,getApiVersionForProvider:()=>fn,getAvailableProviders:()=>Rt,getBaseUrl:()=>bn,getBaseUrlForProvider:()=>Z,getDeploymentForProvider:()=>dn,getExtraOAuthDomains:()=>Yt,getOAuthAccountInfo:()=>Ht,getProviderConfig:()=>K,getProviderModels:()=>q,getRawApiKeyForProvider:()=>ln,getSelectedModelId:()=>Q,getSelectedProvider:()=>$,isModelHiddenFromPicker:()=>Kt,logoutOAuthAccount:()=>rn,maskOAuthTokenWithRetry:()=>an,migrateLegacyAuthOnlySelection:()=>Ft,persistOAuthMaskViaServiceWorker:()=>on,providerOffersLlmModels:()=>zt,removeAccount:()=>nn,resolveCurrentModel:()=>kn,resolveModelById:()=>On,resolveModelByShorthand:()=>An,saveOAuthAccount:()=>sn,setApiKey:()=>vn,setBaseUrl:()=>xn,setExtraOAuthDomains:()=>Xt,setExtraOAuthDomainsAsync:()=>Zt,setSelectedModelId:()=>pn,setSelectedProvider:()=>hn}),Ot=r,kt=i,W=`slicc_accounts`,G=`selected-model`,At=[`slicc_provider`,`slicc_api_key`,`slicc_base_url`,`anthropic_api_key`,`api_provider`,`azure_resource`,`bedrock_region`],jt=new Set([`github`]);function Mt(e){let t;try{t=a()}catch{return!1}return t.includes(e)&&!vt(e)}var Nt=!1;function Pt(){if(!Nt){Nt=!0;for(let e of At)try{localStorage.removeItem(e)}catch{}Ft()}}function Ft(){try{let e=localStorage.getItem(G);if(e){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t);(jt.has(n)||Mt(n))&&localStorage.removeItem(G)}}}catch{}try{let e=localStorage.getItem(W);if(!e)return;let t=JSON.parse(e);if(!Array.isArray(t))return;let n=t.filter(e=>!(typeof e==`object`&&e&&typeof e.providerId==`string`&&Mt(e.providerId)));n.length!==t.length&&localStorage.setItem(W,JSON.stringify(n))}catch{}}function It(){Nt=!1}var Lt={_resetLegacyCleanup:It};function Rt(){let e=a().filter(vt),t=Tt();return[...new Set([...e,...t])].filter(e=>!wt(e)?.hidden)}function zt(e){try{if(q(e).length>0)return!0}catch{}try{if(i(e).length>0)return!0}catch{}let t=wt(e);return!!(t?.modelOverrides&&Object.keys(t.modelOverrides).length>0)}function Bt(e,t){try{if(q(e).some(e=>e.id===t))return!0}catch{}try{if(i(e).some(e=>e.id===t))return!0}catch{}let n=wt(e);return!!(n?.modelOverrides&&Object.hasOwn(n.modelOverrides,t))}function K(e){return wt(e)||{id:e,name:e.split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),description:`${e} provider`,requiresApiKey:!0,requiresBaseUrl:!1}}function Vt(e,t){t.context_window!==void 0&&(e.contextWindow=t.context_window),t.max_tokens!==void 0&&(e.maxTokens=t.max_tokens),t.reasoning!==void 0&&(e.reasoning=t.reasoning),t.input!==void 0&&(e.input=t.input),t.compat!==void 0&&(e.compat={...e.compat??{},...t.compat}),t.thinkingLevelMap!==void 0&&(e.thinkingLevelMap={...e.thinkingLevelMap??{},...t.thinkingLevelMap})}function q(e){try{if(e===`bedrock-camp`){let e=g(Z(`bedrock-camp`));return kt(`amazon-bedrock`).filter(t=>h(t,e)).map(e=>({...e,api:`bedrock-camp-converse`,provider:`bedrock-camp`}))}let t=K(e);if(t.getModelIds){let n;try{n=t.getModelIds()}catch(t){return J.error(`Provider getModelIds callback failed`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}let r=new Map;for(let e of a())try{for(let t of kt(e))r.set(t.id,t)}catch{}return n.map(n=>{let i=`${e}-${n.api===`openai`?`openai`:`anthropic`}`,a=r.get(n.id),o;a?o={...a,api:i,provider:e}:(o=En(e,n.id,``,i),n.name&&(o.name=n.name));let s=t.modelOverrides?.[n.id];return s&&Vt(o,s),Vt(o,n),o})}if(t.isOAuth){let n=kt(`anthropic`),r=`${e}-anthropic`;return n.map(n=>{let i={...n,api:r,provider:e},a=t.modelOverrides?.[n.id];return a&&Vt(i,a),i})}return kt(e===`azure-ai-foundry`?`anthropic`:e)}catch(t){return J.error(`Failed to load models`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}}function Ht(e){let t=Y().find(t=>t.providerId===e);if(!t?.accessToken)return null;let n=!!t.tokenExpiresAt&&Date.now()>t.tokenExpiresAt-6e4;return{token:t.accessToken,maskedValue:t.maskedValue,expiresAt:t.tokenExpiresAt,userName:t.userName,userAvatar:t.userAvatar,expired:n}}var Ut=Object.assign({})[`/packages/webapp/providers.json`]??[],J=o(`provider-settings`);function Wt(e=Ut){if(e.length===0||Y().length>0)return;let t=new Set(Rt());for(let n of e)if(!(!n.providerId||!n.apiKey)){if(!t.has(n.providerId)){J.warn(`Unknown provider "${n.providerId}" in providers.json — skipping`);continue}en(n.providerId,n.apiKey,n.baseUrl)}let n=e.find(e=>e.providerId&&e.apiKey&&t.has(e.providerId));n?.model&&!localStorage.getItem(G)&&localStorage.setItem(G,`${n.providerId}:${n.model}`)}var Gt=[/haiku/i];function Kt(e){return Gt.some(t=>t.test(e))}function qt(e){return e.filter(e=>!Kt(e.id))}function Jt(){let e=Y();if(e.length===0)return[];let t=new Map;for(let n of e){if(t.has(n.providerId))continue;let e=K(n.providerId);if(e.hidden||Mt(n.providerId))continue;let r=qt(q(n.providerId));if(r.length===0)continue;let i={providerId:n.providerId,providerName:e.name,models:r};t.set(n.providerId,i)}return[...t.values()]}function Y(){Pt();let e=localStorage.getItem(W);if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`object`&&!!e&&typeof e.providerId==`string`&&typeof e.apiKey==`string`):[]}catch{return[]}}function Yt(e){return f(localStorage)[e]??[]}function Xt(e,t){let n=f(localStorage),r=t.map(e=>e.trim()).filter(e=>e.length>0);r.length===0?delete n[e]:n[e]=r,d(localStorage,n)}async function Zt(e,t){if(p()){Xt(e,t);return}let n=m();if(!n)throw Error(`setExtraOAuthDomainsAsync: no DOM and no panel-rpc client — cannot persist to page localStorage`);let{storeAfter:r}=await n.call(`oauth-extras-set`,{providerId:e,domains:t});try{d(localStorage,r)}catch(t){J.warn(`worker-shim mirror failed after successful page write — reload to refresh`,{providerId:e,error:t instanceof Error?t.message:String(t)})}}function Qt(){return f(localStorage)}function $t(e){localStorage.setItem(W,JSON.stringify(e))}async function X(e){if(p()){$t(e);return}let t=m();if(!t)throw Error(`saveAccountsAsync: no DOM and no panel-rpc client — cannot persist to page localStorage`);let n=JSON.stringify(e),{storedJson:r}=await t.call(`save-oauth-accounts`,{accountsJson:n});try{localStorage.setItem(W,r)}catch(e){J.warn(`worker-shim mirror failed after successful page write — reload to refresh`,{error:e instanceof Error?e.message:String(e)})}}function en(e,t,n,r,i){let a=Y().filter(t=>t.providerId!==e),o={providerId:e,apiKey:t};n&&(o.baseUrl=n),r&&(o.deployment=r),i&&(o.apiVersion=i),a.push(o),$t(a)}async function tn(e){let t=l();try{if(t===`extension-direct`){let t=await new Promise(t=>{chrome.runtime.sendMessage({type:`secrets.delete`,name:`oauth.${e}.token`},n=>{chrome.runtime.lastError&&J.error(`SW secrets.delete transport failed`,{providerId:e,error:chrome.runtime.lastError.message}),t(n??{})})});t.error&&J.error(`SW secrets.delete returned error`,{providerId:e,error:t.error})}else if(t===`extension-delegate`){let t=await u(`secrets.delete`,{name:`oauth.${e}.token`});t?.error&&J.error(`Bridge secrets.delete returned error`,{providerId:e,error:t.error})}else if(t!==`connect`){let t=await fetch(s(`/api/secrets/oauth/${e}`),{method:`DELETE`,headers:c()});!t.ok&&t.status!==404&&J.warn(`OAuth replica DELETE non-ok`,{providerId:e,status:t.status})}}catch(n){J.error(`OAuth replica removal failed`,{providerId:e,topology:t,error:n instanceof Error?n.message:String(n)})}}async function nn(e){let t=Y().find(t=>t.providerId===e),n=K(e);t&&n?.isOAuth&&await rn(e),await tn(e),await X(Y().filter(t=>t.providerId!==e));let r=localStorage.getItem(G)??``,i=r.indexOf(`:`);i>0&&r.slice(0,i)===e&&localStorage.removeItem(G)}async function rn(e){let t=Y().find(t=>t.providerId===e);if(!t)return;let r=K(e);if(r?.isOAuth){if(r.onOAuthLogout)try{await r.onOAuthLogout()}catch(t){J.warn(`onOAuthLogout failed`,{providerId:e,error:t instanceof Error?t.message:String(t)})}if(r.getOAuthLogoutUrl){let i=r.getOAuthLogoutUrl(t);if(i){let{openIdpLogoutUrl:t}=await n(async()=>{let{openIdpLogoutUrl:e}=await import(`./oauth-service-YGl8VFS-.js`);return{openIdpLogoutUrl:e}},__vite__mapDeps([24,2,12,5,13,25,26]));await t(i).catch(t=>{J.warn(`IdP logout popup failed`,{providerId:e,error:t instanceof Error?t.message:String(t)})})}}await X(Y().map(t=>t.providerId===e?{providerId:t.providerId,apiKey:``,baseUrl:t.baseUrl,userName:t.userName,userAvatar:t.userAvatar,loggedOut:!0}:t)),await tn(e)}}async function an(e,t={}){let n=Math.max(1,t.attempts??3),r=t.delayMs??150,i=t.sleep??(e=>new Promise(t=>setTimeout(t,e))),a;for(let t=0;t<n;t++){let o=await e();if(o.maskedValue)return{maskedValue:o.maskedValue};o.error&&(a=o.error),t<n-1&&await i(r)}return{lastError:a}}async function on(e,t,n){let r={providerId:e.providerId,accessToken:e.accessToken,domains:e.domains.join(`,`)},{maskedValue:i,lastError:a}=await an(()=>t.sendMaskRequest(r),n);if(!i){J.error(`OAuth mask give-up: no masked value after retries`,{providerId:e.providerId,reason:a??`no error reported (cold SW or empty reply)`});return}let o=t.getAccounts(),s=o.find(t=>t.providerId===e.providerId);s&&(s.maskedValue=i,await t.saveAccounts(o))}async function sn(e){let t=Y().find(t=>t.providerId===e.providerId),n=Y().filter(t=>t.providerId!==e.providerId);n.push({providerId:e.providerId,apiKey:``,accessToken:e.accessToken,refreshToken:e.refreshToken,tokenExpiresAt:e.tokenExpiresAt,userName:e.userName,userAvatar:e.userAvatar,baseUrl:e.baseUrl??t?.baseUrl}),await X(n);let r=K(e.providerId)?.oauthTokenDomains??[],i=Yt(e.providerId),a=new Set,o=[];for(let e of[...r,...i]){let t=e.toLowerCase();a.has(t)||(a.add(t),o.push(e))}if(o.length===0)return;let d=l();try{if(d===`extension-direct`)await on({providerId:e.providerId,accessToken:e.accessToken,domains:o},{sendMaskRequest:t=>new Promise(n=>{chrome.runtime.sendMessage({type:`secrets.mask-oauth-token`,...t},t=>{chrome.runtime.lastError&&J.error(`SW mask-oauth-token transport failed`,{providerId:e.providerId,error:chrome.runtime.lastError.message}),t?.error&&J.warn(`SW mask-oauth-token returned error`,{providerId:e.providerId,error:t.error}),n(t??{})})}),getAccounts:Y,saveAccounts:X});else if(d===`extension-delegate`)await on({providerId:e.providerId,accessToken:e.accessToken,domains:o},{sendMaskRequest:t=>u(`secrets.mask-oauth-token`,t).then(t=>(t?.error&&J.warn(`Bridge mask-oauth-token returned error`,{providerId:e.providerId,error:t.error}),t??{})).catch(t=>(J.error(`Bridge mask-oauth-token transport failed`,{providerId:e.providerId,error:t instanceof Error?t.message:String(t)}),{})),getAccounts:Y,saveAccounts:X});else if(d!==`connect`){let t=await fetch(s(`/api/secrets/oauth-update`),{method:`POST`,headers:c({"Content-Type":`application/json`}),body:JSON.stringify({providerId:e.providerId,accessToken:e.accessToken,domains:o})});if(t.ok){let n=await t.json();if(typeof n.maskedValue==`string`){let t=Y(),r=t.find(t=>t.providerId===e.providerId);r&&(r.maskedValue=n.maskedValue,await X(t))}else J.warn(`OAuth replica POST ok but missing maskedValue`,{providerId:e.providerId})}else J.warn(`OAuth replica POST non-ok`,{providerId:e.providerId,status:t.status})}}catch(t){J.error(`OAuth replica sync failed`,{providerId:e.providerId,topology:d,error:t instanceof Error?t.message:String(t)})}}var cn=`local`;function ln(e){let t=Y().find(t=>t.providerId===e);return t&&(t.accessToken||t.apiKey)||null}function un(e){let t=Y().find(t=>t.providerId===e);return t?t.accessToken||t.apiKey||(K(e).optionalApiKey?cn:null):null}function Z(e){return Y().find(t=>t.providerId===e)?.baseUrl??null}function dn(e){return Y().find(t=>t.providerId===e)?.deployment??null}function fn(e){return Y().find(t=>t.providerId===e)?.apiVersion??null}function Q(){let e=localStorage.getItem(G)||``,t=e.indexOf(`:`);return t>=0?e.slice(t+1):e}function pn(e){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t),r=new Set([...Tt(),...Rt()]),i=n.includes(`.`);if(r.has(n)||!i){localStorage.setItem(G,e);return}}let n=$();localStorage.setItem(G,`${n}:${e}`)}function mn(){return localStorage.getItem(G)||``}function $(){let e=mn(),t=e.indexOf(`:`);if(t>0)return e.slice(0,t);let n=Y(),r=Q();if(r){let e=n.find(e=>zt(e.providerId)&&Bt(e.providerId,r));if(e)return e.providerId}let i=n.find(e=>zt(e.providerId));return i?i.providerId:n.length>0?n[0].providerId:`anthropic`}function hn(e){let t=Q();localStorage.setItem(G,`${e}:${t}`)}function gn(){let e=Q();localStorage.setItem(G,e)}function _n(){return un($())}function vn(e){let t=$();en(t,e,Z(t)??void 0)}async function yn(){await nn($())}function bn(){return Z($())}function xn(e){let t=$(),n=ln(t);n&&en(t,n,e||void 0)}function Sn(){let e=$(),t=ln(e);t&&en(e,t)}function Cn(){let e=Y(),t=$(),n=Q();return e.map(e=>{let r={providerId:e.providerId,apiKey:e.apiKey};return e.baseUrl&&(r.baseUrl=e.baseUrl),e.providerId===t&&n&&(r.model=n),r})}async function wn(){let e=Y();await Promise.allSettled(e.map(e=>nn(e.providerId))),localStorage.removeItem(W),localStorage.removeItem(G);for(let e of At)localStorage.removeItem(e)}function Tn(e){return/^(?:gpt[-.]?|o[0-9]|chatgpt)/i.test(e)?`openai`:`anthropic`}function En(e,t,n,r){return{id:t,name:t,provider:e,api:r??`${e}-${Tn(t)}`,baseUrl:n??``,contextWindow:2e5,maxTokens:16384,input:[`text`,`image`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},reasoning:!0}}function Dn(e,t){return t.isOAuth||e===`azure-ai-foundry`?`anthropic`:e===`bedrock-camp`?`amazon-bedrock`:e}function On(e){if(!e)return kn();let t=$(),n=Z(t),r=K(t);try{let i=Ot(Dn(t,r),e);if(!i?.id)throw Error(`Model ${e} not found`);let a=i;return r.isOAuth?a=q(t).find(t=>t.id===e)||{...a,api:`${t}-anthropic`,provider:t}:t===`bedrock-camp`&&(a={...a,api:`bedrock-camp-converse`,provider:`bedrock-camp`}),n&&(a={...a,baseUrl:n}),a}catch(i){if(J.debug(`resolveModelById: pi-ai lookup miss, using provider fallback`,{providerId:t,modelId:e,error:i instanceof Error?i.message:String(i)}),r.isOAuth){let r=q(t).find(t=>t.id===e);return r?n?{...r,baseUrl:n}:r:En(t,e,n)}return kn()}}function kn(){let e=$(),t=Q(),n=Z(e),r=q(e),i=K(e),a=i.defaultModelId?r.find(e=>e.id.toLowerCase().includes(i.defaultModelId.toLowerCase()))?.id:void 0,o=t||a||r[0]?.id||`claude-sonnet-4-6`;try{let t=Dn(e,i),a=Ot(t,o);if(!a?.id)throw Error(`Model ${o} not found in ${t} registry`);let s=a;return i.isOAuth?s=r.find(e=>e.id===o)||{...s,api:`${e}-anthropic`,provider:e}:e===`bedrock-camp`&&(s={...s,api:`bedrock-camp-converse`,provider:`bedrock-camp`}),n&&(s={...s,baseUrl:n}),s}catch(t){J.debug(`resolveCurrentModel: pi-ai lookup miss, using provider fallback`,{providerId:e,effectiveModelId:o,error:t instanceof Error?t.message:String(t)});let a=r.find(e=>e.id===o);return a?n?{...a,baseUrl:n}:a:i.isOAuth?En(e,o,n):Ot(`anthropic`,`claude-sonnet-4-0`)}}function An(e){let t=e.toLowerCase();if(!t)return null;let n=null,r=-1;for(let e of Y())for(let i of q(e.providerId)){let e=i.id.toLowerCase(),a=(i.name??``).toLowerCase();if(!e.includes(t)&&!a.includes(t))continue;let o=i.contextWindow??0;(o>r||o===r&&jn(i.id,n??``)>0)&&(r=o,n=i.id)}return n}function jn(e,t){let n=e.match(/\d+/g)?.map(Number)??[],r=t.match(/\d+/g)?.map(Number)??[],i=Math.max(n.length,r.length);for(let e=0;e<i;e++){let t=(n[e]??0)-(r[e]??0);if(t!==0)return t}return 0}export{an as A,xn as B,K as C,$ as D,Q as E,kn as F,wt as G,Zt as H,On as I,Et as K,An as L,on as M,zt as N,Kt as O,nn as P,sn as R,Ht as S,ln as T,pn as U,Xt as V,hn as W,Rt as _,Wt as a,dn as b,Sn as c,Y as d,Jt as f,fn as g,un as h,en as i,Ft as j,rn as k,gn as l,_n as m,Lt as n,wn as o,Qt as p,Ct as q,Dt as r,yn as s,W as t,Cn as u,bn as v,q as w,Yt as x,Z as y,vn as z};