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.
- package/dist/node-server/electron-controller.d.ts +41 -0
- package/dist/node-server/electron-controller.js +141 -2
- package/dist/ui/assets/{account-store-CgAAyHLk.js → account-store-BFu2wpYi.js} +2 -2
- package/dist/ui/assets/{account-store-BSWhkeUU.js → account-store-DxfOlB8e.js} +2 -2
- package/dist/ui/assets/{adobe-DVOKhr5o.js → adobe-De0SCRDs.js} +1 -1
- package/dist/ui/assets/{adobe-Dabz-c1b.js → adobe-mHlZtWIg.js} +1 -1
- package/dist/ui/assets/adobe-oauth-state---RmeoFk.js +1 -0
- package/dist/ui/assets/adobe-oauth-state-CFSzJXWq.js +1 -0
- package/dist/ui/assets/{agent-message-to-chat-CWox17CS.js → agent-message-to-chat-CBdRedlh.js} +1 -1
- package/dist/ui/assets/{apps-CyJkA1Ss.js → apps-CrGd0C9h.js} +1 -1
- package/dist/ui/assets/{azure-openai-DD0bOrFE.js → azure-openai-CrgoU7Mo.js} +1 -1
- package/dist/ui/assets/{azure-openai-DStnDWxb.js → azure-openai-VHwRfKEo.js} +1 -1
- package/dist/ui/assets/{connect-surface-D-7hiIJH.js → connect-surface-e_JWQTT3.js} +1 -1
- package/dist/ui/assets/dip-D-xWN625.js +1 -0
- package/dist/ui/assets/{dist-DDrbeHp-.js → dist-DW2jZP4V.js} +1 -1
- package/dist/ui/assets/{dist-CwUZZxjO.js → dist-ryy5xZYY.js} +1 -1
- package/dist/ui/assets/{ensure-speech-assets-DhvaWMCZ.js → ensure-speech-assets-M1rNkts7.js} +1 -1
- package/dist/ui/assets/esp8266-DeyAQ0IL.js +1 -0
- package/dist/ui/assets/{esptool-operations-D6AgovRo.js → esptool-operations-DlOqRYst.js} +2 -2
- package/dist/ui/assets/{fs-CfNmdIYb.js → fs-BCnBG7oR.js} +2 -2
- package/dist/ui/assets/{fs-B0s5DOPm.js → fs-DRqRzEMk.js} +1 -1
- package/dist/ui/assets/{github-JXOuvOgk.js → github-CS9hqCNH.js} +2 -2
- package/dist/ui/assets/{github-DaqFhOZP.js → github-Dkm3riGH.js} +1 -1
- package/dist/ui/assets/{github-copilot-CdXKe3Ig.js → github-copilot-Cz4psYiK.js} +1 -1
- package/dist/ui/assets/{github-copilot-DWSna0qk.js → github-copilot-u3Q45lH5.js} +1 -1
- package/dist/ui/assets/{hear-BvUxceLo.js → hear-D1i6dtBX.js} +1 -1
- package/dist/ui/assets/{kernel-worker-J4YngSNJ.js → kernel-worker-BmQZWRvS.js} +18 -18
- package/dist/ui/assets/{kokoro-engine-zsom_wfq.js → kokoro-engine-O37ADPh9.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-BR2JsTcy.js → lick-ws-bridge-BHT_1a0_.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-Ys5bz6tK.js → lick-ws-bridge-DrN6tFcI.js} +1 -1
- package/dist/ui/assets/{local-llm-BsCfySh9.js → local-llm-BddLqaEw.js} +1 -1
- package/dist/ui/assets/{main-BYXYn5lL.js → main-BwdgxuNS.js} +4 -4
- package/dist/ui/assets/{mount-RI83s6cq.js → mount-CQ4ampll.js} +1 -1
- package/dist/ui/assets/{mount-D5aZn5UA.js → mount-CZbS6HHT.js} +2 -2
- package/dist/ui/assets/{new-session-D1pUlqr9.js → new-session-C6hbhQF6.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-DnFRqhTe.js → oauth-bootstrap-BwY44cXF.js} +2 -2
- package/dist/ui/assets/{openai-codex-CTCaZUVt.js → openai-codex-BThq9a2_.js} +1 -1
- package/dist/ui/assets/{openai-codex-BWS9sBDG.js → openai-codex-s-HBZe5g.js} +1 -1
- package/dist/ui/assets/{page-follower-tray-DCrCjXYf.js → page-follower-tray-Bl330p52.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-D1fon1hK.js → panel-rpc-handlers-BQXgX65i.js} +1 -1
- package/dist/ui/assets/{provider-CwwkGZVJ.js → provider-CBCHQlUE.js} +1 -1
- package/dist/ui/assets/{provider-C0fCYLH-.js → provider-Dt59pzMj.js} +2 -2
- package/dist/ui/assets/provider-store-access-B3JEhbtT.js +1 -0
- package/dist/ui/assets/provider-store-access-C8wURhlf.js +1 -0
- package/dist/ui/assets/{providers-B_eCX3Nu.js → providers-CGElA-Wa.js} +1 -1
- package/dist/ui/assets/{quick-llm-m5pdShbE.js → quick-llm-BpWn09ND.js} +1 -1
- package/dist/ui/assets/session-freezer-BNE39rHt.js +1 -0
- package/dist/ui/assets/{speak-CTxSD6c5.js → speak-BYuYkAdf.js} +1 -1
- package/dist/ui/assets/{sprinkle-manager-DsUKtbgD.js → sprinkle-manager-DMKw_0X0.js} +1 -1
- package/dist/ui/assets/{store-D0KeVCvq.js → store-CImrwyZM.js} +1 -1
- package/dist/ui/assets/{sudo-BOythF7w.js → sudo-DDLdxY_L.js} +1 -1
- package/dist/ui/assets/{transformers-env-CiEjooqk.js → transformers-env-BN4qzyfU.js} +1 -1
- package/dist/ui/assets/{tray-leader-Dm-f62te.js → tray-leader-CMqSLc5G.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-BTog2DuL.js → tray-leave-runtime-BdRgiGqj.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-CnL02iHa.js → upgrade-detection-DjMkeT0A.js} +1 -1
- package/dist/ui/assets/{wc-attach-DvbyWBMw.js → wc-attach-DmcJ-dhE.js} +2 -2
- package/dist/ui/assets/{wc-detached-9XYAfyPX.js → wc-detached-bhqfErQt.js} +1 -1
- package/dist/ui/assets/{wc-extension-BhN0fpsk.js → wc-extension-BUlChmLO.js} +2 -2
- package/dist/ui/assets/{wc-follower-iuKgs6xl.js → wc-follower-B7BEs6w1.js} +2 -2
- package/dist/ui/assets/{wc-live-BIYGig0S.js → wc-live-B4HP346v.js} +5 -5
- package/dist/ui/assets/{wc-nav-Cvf1-2nX.js → wc-nav-BDFJw9KE.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-CUwGI4YF.js → wc-onboarding-DaR6aKTK.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-Bfe2f-DP.js → wc-placeholder-DEQADLhe.js} +3 -3
- package/dist/ui/assets/{wc-settings-CxXvMDY5.js → wc-settings-vLODM2qc.js} +2 -2
- package/dist/ui/assets/{wc-shell-BjLcm1xH.js → wc-shell-CHxgFWBV.js} +140 -112
- package/dist/ui/assets/{wc-sprinkles-CF-l37VL.js → wc-sprinkles-DDTZQPie.js} +2 -2
- package/dist/ui/assets/{wc-tray-BG2_SPu3.js → wc-tray-BACo16m5.js} +2 -2
- package/dist/ui/assets/{whisper-engine-V1cvMrOk.js → whisper-engine-CA9D6LHM.js} +1 -1
- package/dist/ui/assets/{xai-grok-BUrTSCNQ.js → xai-grok-CS22LJ7i.js} +1 -1
- package/dist/ui/assets/{xai-grok-CuAKXYhq.js → xai-grok-D0g7L-L2.js} +1 -1
- package/dist/ui/electron-overlay-entry.js +125 -97
- package/dist/ui/index.html +2 -2
- package/dist/ui/packages/webapp/index.html +2 -2
- package/package.json +1 -1
- package/dist/ui/assets/adobe-oauth-state-fjk_YXgL.js +0 -1
- package/dist/ui/assets/adobe-oauth-state-y6CyddCs.js +0 -1
- package/dist/ui/assets/dip-CyGE3IVW.js +0 -1
- package/dist/ui/assets/esp8266-ClLgRR2o.js +0 -1
- package/dist/ui/assets/provider-store-access-CxKSyOVg.js +0 -1
- package/dist/ui/assets/provider-store-access-D6KoHCRf.js +0 -1
- 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-
|
|
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};
|