sliccy 4.24.0 → 4.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/dist/node-server/bridge-security.d.ts +14 -1
  2. package/dist/node-server/bridge-security.js +66 -2
  3. package/dist/node-server/fetch-proxy-headers.d.ts +8 -2
  4. package/dist/node-server/fetch-proxy-headers.js +9 -2
  5. package/dist/node-server/routes/fetch-proxy.d.ts +8 -0
  6. package/dist/node-server/routes/fetch-proxy.js +6 -1
  7. package/dist/ui/assets/{account-store-CcqPXFk-.js → account-store-CCx84KSO.js} +2 -2
  8. package/dist/ui/assets/{account-store-BXT0RMpF.js → account-store-D6F5ht1K.js} +2 -2
  9. package/dist/ui/assets/adobe-B_gJbGrM.js +1 -0
  10. package/dist/ui/assets/adobe-D8jV1ibX.js +2 -0
  11. package/dist/ui/assets/{agent-message-to-chat-Cihra740.js → agent-message-to-chat-Dt9iSVuQ.js} +1 -1
  12. package/dist/ui/assets/{apps-CPyXd9Mk.js → apps-CyKH98UU.js} +1 -1
  13. package/dist/ui/assets/{azure-openai-BEec8FHP.js → azure-openai-CTCrw8ag.js} +1 -1
  14. package/dist/ui/assets/{azure-openai-lMn0o-9C.js → azure-openai-DHxbdJP2.js} +1 -1
  15. package/dist/ui/assets/{bsh-watchdog-Dgr_OA1N.js → bsh-watchdog-DRf6YtLF.js} +1 -1
  16. package/dist/ui/assets/{connect-surface-BzhaxP0L.js → connect-surface-BAkLQjYg.js} +1 -1
  17. package/dist/ui/assets/dip-CoQDOdRF.js +1 -0
  18. package/dist/ui/assets/{dist-DIjck1q7.js → dist-DstXLyS2.js} +1 -1
  19. package/dist/ui/assets/{dist-ChTQy8at.js → dist-Gjxc3CGe.js} +1 -1
  20. package/dist/ui/assets/{es-B8GxLLfB.js → es-BtePr83c.js} +1 -1
  21. package/dist/ui/assets/{fs-xQUivn-8.js → fs-CES5lb4o.js} +1 -1
  22. package/dist/ui/assets/{fs-ATai1P5Q.js → fs-D3A8iUb-.js} +2 -2
  23. package/dist/ui/assets/{github-CUVBUETF.js → github-BD9mji3m.js} +1 -1
  24. package/dist/ui/assets/{github-C6vLSHER.js → github-BjJwZAID.js} +2 -2
  25. package/dist/ui/assets/{github-copilot-ggchxbZd.js → github-copilot-O5-ryiZR.js} +1 -1
  26. package/dist/ui/assets/{github-copilot-BqMS3_4S.js → github-copilot-yWe1M0K_.js} +1 -1
  27. package/dist/ui/assets/{hear-Bm8tL0z2.js → hear-CFjk8o5A.js} +1 -1
  28. package/dist/ui/assets/{kernel-worker-CqATTm08.js → kernel-worker-DS4Sjo4b.js} +1007 -1007
  29. package/dist/ui/assets/{kokoro-engine-BzgKX1A1.js → kokoro-engine-TLc0ityO.js} +1 -1
  30. package/dist/ui/assets/{lick-ws-bridge-DFQu2sM8.js → lick-ws-bridge-Fa3rBD7K.js} +1 -1
  31. package/dist/ui/assets/{local-llm-D09l_nRy.js → local-llm-77SlLHlX.js} +1 -1
  32. package/dist/ui/assets/main-RvuAuHo8.js +24 -0
  33. package/dist/ui/assets/{mount-D7RXkT90.js → mount-B3baMU-O.js} +1 -1
  34. package/dist/ui/assets/{mount-sEjqfa02.js → mount-Dwoznret.js} +2 -2
  35. package/dist/ui/assets/{new-session-B0xwp5hO.js → new-session-BnW6Ia6h.js} +2 -2
  36. package/dist/ui/assets/{oauth-bootstrap-Uz3oksBR.js → oauth-bootstrap-D4jfK89n.js} +2 -2
  37. package/dist/ui/assets/oauth-service-CoJ-pYVD.js +1 -0
  38. package/dist/ui/assets/oauth-service-hTyvduF1.js +1 -0
  39. package/dist/ui/assets/{openai-codex-d2uBt8CN.js → openai-codex-BG86bd3g.js} +1 -1
  40. package/dist/ui/assets/{openai-codex-BMr_sYj2.js → openai-codex-W1k-olNJ.js} +1 -1
  41. package/dist/ui/assets/{panel-rpc-handlers-1U8M-tQU.js → panel-rpc-handlers-BAwdZnUG.js} +1 -1
  42. package/dist/ui/assets/{provider-BbwD43pe.js → provider-Ba8_qOfx.js} +1 -1
  43. package/dist/ui/assets/{provider-B_3MhsjL.js → provider-fDZ2ppW0.js} +2 -2
  44. package/dist/ui/assets/provider-store-access-BVVboGQW.js +1 -0
  45. package/dist/ui/assets/provider-store-access-DLLL3FmZ.js +1 -0
  46. package/dist/ui/assets/{providers-DRQ-n4v0.js → providers-DteOckdy.js} +1 -1
  47. package/dist/ui/assets/proxied-fetch-BBO8HwcV.js +1 -0
  48. package/dist/ui/assets/{quick-llm-CHWi-jSD.js → quick-llm-BRbz1fDI.js} +1 -1
  49. package/dist/ui/assets/{remote-terminal-view-FVcjc7kw.js → remote-terminal-view-CSqiig2G.js} +1 -1
  50. package/dist/ui/assets/session-freezer-tVkiu4V5.js +1 -0
  51. package/dist/ui/assets/{setup-sprinkle-exec-BGXT8k4k.js → setup-sprinkle-exec-C7SBZY7y.js} +1 -1
  52. package/dist/ui/assets/setup-sudo-DWfiGlOf.js +1 -0
  53. package/dist/ui/assets/{speak-Cr05k3rj.js → speak-DhkLZ-am.js} +1 -1
  54. package/dist/ui/assets/{sprinkle-manager-B7xN0WFf.js → sprinkle-manager-BLhwuVdT.js} +1 -1
  55. package/dist/ui/assets/{store-CfuBHukr.js → store-T-K8TeFw.js} +1 -1
  56. package/dist/ui/assets/{sudo-CnG9mh3w.js → sudo-qsDyNaAG.js} +1 -1
  57. package/dist/ui/assets/terminal-session-client-CbAduNfC.js +1 -0
  58. package/dist/ui/assets/{transformers-env-BEM0HkoC.js → transformers-env-DSAN95G3.js} +1 -1
  59. package/dist/ui/assets/{tray-leave-runtime-CD-xjbXc.js → tray-leave-runtime-tqIb9yl_.js} +1 -1
  60. package/dist/ui/assets/upgrade-detection-pjQXVRWP.js +1 -0
  61. package/dist/ui/assets/{wc-attach-D7JTvNE3.js → wc-attach-DwcZ5MaG.js} +2 -2
  62. package/dist/ui/assets/{wc-detached-DfgIMcuk.js → wc-detached-BvZo_AId.js} +1 -1
  63. package/dist/ui/assets/{wc-extension-BNpR2nAA.js → wc-extension-CtHl8VdG.js} +2 -2
  64. package/dist/ui/assets/wc-live-BHTqp_8F.js +253 -0
  65. package/dist/ui/assets/{wc-nav-BVFjm1zp.js → wc-nav-BJuQ2irW.js} +2 -2
  66. package/dist/ui/assets/wc-onboarding-84S404WJ.js +2 -0
  67. package/dist/ui/assets/{wc-placeholder-CLNwZTGs.js → wc-placeholder-DXEcgvyw.js} +3 -3
  68. package/dist/ui/assets/wc-settings-DWuDKTDp.js +24 -0
  69. package/dist/ui/assets/{wc-shell-CeWID7O0.js → wc-shell-B_z0VSKk.js} +3 -3
  70. package/dist/ui/assets/{wc-sprinkles-DYTck3a-.js → wc-sprinkles-BsYJVGg_.js} +2 -2
  71. package/dist/ui/assets/{wc-tray-ByE1fpIQ.js → wc-tray-CWJphCmt.js} +3 -3
  72. package/dist/ui/assets/{xai-grok-BcQs9t1L.js → xai-grok-D7ULF1Ef.js} +1 -1
  73. package/dist/ui/assets/{xai-grok-Bx-LJDfy.js → xai-grok-DQ32cJt0.js} +1 -1
  74. package/dist/ui/index.html +2 -2
  75. package/dist/ui/llm-proxy-sw.js +1 -1
  76. package/dist/ui/packages/webapp/index.html +2 -2
  77. package/package.json +1 -1
  78. package/dist/ui/assets/adobe-Dvkc5_oM.js +0 -2
  79. package/dist/ui/assets/adobe-Dyvxqy9s.js +0 -1
  80. package/dist/ui/assets/dip-CIhLisNq.js +0 -1
  81. package/dist/ui/assets/main-sWMjBmPA.js +0 -24
  82. package/dist/ui/assets/oauth-service-CTlktxVj.js +0 -1
  83. package/dist/ui/assets/oauth-service-DQVciyk_.js +0 -1
  84. package/dist/ui/assets/provider-store-access-Cop2VuvO.js +0 -1
  85. package/dist/ui/assets/provider-store-access-_8NADMDP.js +0 -1
  86. package/dist/ui/assets/proxied-fetch-3ooUUAsF.js +0 -1
  87. package/dist/ui/assets/session-freezer-mzV5cASX.js +0 -1
  88. package/dist/ui/assets/setup-sudo-DSt9eI8G.js +0 -1
  89. package/dist/ui/assets/terminal-session-client-C_tYJ1IB.js +0 -1
  90. package/dist/ui/assets/upgrade-detection-CwNs_M6E.js +0 -1
  91. package/dist/ui/assets/wc-live-cbtCpYYl.js +0 -253
  92. package/dist/ui/assets/wc-onboarding-C-b3gfT3.js +0 -2
  93. package/dist/ui/assets/wc-settings-BRCPA5ys.js +0 -24
@@ -23,6 +23,12 @@
23
23
  * origins (parallel to chrome-extension's `BRIDGE_DEV_ORIGINS`). Add a new
24
24
  * origin here and in the extension allowlist together — they MUST stay in
25
25
  * sync, otherwise extension and standalone disagree on what's a leader.
26
+ *
27
+ * Dev-only extra origins can be added at process start via the
28
+ * `BRIDGE_DEV_ALLOWED_ORIGINS` env var (comma-separated). Used by the
29
+ * local two-service harness (wrangler dev UI on :8787 + node-server
30
+ * bridge); see Wave 5c. When the env var is unset, the effective
31
+ * allowlist is byte-identical to this frozen base — prod is unaffected.
26
32
  */
27
33
  export declare const BRIDGE_ALLOWED_ORIGINS: readonly string[];
28
34
  /** Subprotocol prefix advertised by the leader; the per-process token is appended. */
@@ -40,7 +46,14 @@ export declare const BRIDGE_WS_QUERY_PARAM = "bridge";
40
46
  * on the preflight.
41
47
  */
42
48
  export declare const BRIDGE_TOKEN_HEADER = "X-Bridge-Token";
43
- /** True iff `origin` is in the bridge allowlist. Case-sensitive (origins are normalized lowercase). */
49
+ /**
50
+ * True iff `origin` is in the bridge allowlist. The frozen prod base
51
+ * (`BRIDGE_ALLOWED_ORIGINS`) is matched case-sensitively against the
52
+ * raw origin; the dev-only env-supplied extras (normalized lowercase
53
+ * + trailing-slash-stripped at load) are matched against a normalized
54
+ * copy of the input, so a leader sending `Origin: HTTP://Localhost:8787`
55
+ * (or with a stray trailing slash) still resolves correctly.
56
+ */
44
57
  export declare function isAllowedBridgeOrigin(origin: string | undefined | null): boolean;
45
58
  /**
46
59
  * True iff `origin` is a loopback host (localhost / 127.0.0.1 / ::1).
@@ -24,6 +24,12 @@ import { randomUUID, timingSafeEqual } from 'node:crypto';
24
24
  * origins (parallel to chrome-extension's `BRIDGE_DEV_ORIGINS`). Add a new
25
25
  * origin here and in the extension allowlist together — they MUST stay in
26
26
  * sync, otherwise extension and standalone disagree on what's a leader.
27
+ *
28
+ * Dev-only extra origins can be added at process start via the
29
+ * `BRIDGE_DEV_ALLOWED_ORIGINS` env var (comma-separated). Used by the
30
+ * local two-service harness (wrangler dev UI on :8787 + node-server
31
+ * bridge); see Wave 5c. When the env var is unset, the effective
32
+ * allowlist is byte-identical to this frozen base — prod is unaffected.
27
33
  */
28
34
  export const BRIDGE_ALLOWED_ORIGINS = Object.freeze([
29
35
  'https://www.sliccy.ai',
@@ -31,6 +37,50 @@ export const BRIDGE_ALLOWED_ORIGINS = Object.freeze([
31
37
  'http://localhost:5710',
32
38
  'http://127.0.0.1:5710',
33
39
  ]);
40
+ /**
41
+ * Normalize a single env-supplied origin: trim, lowercase, drop trailing
42
+ * slash. Returns `null` for blank/whitespace entries or anything that
43
+ * `URL` can't parse. Never throws.
44
+ */
45
+ function normalizeDevOrigin(raw) {
46
+ const trimmed = raw.trim();
47
+ if (!trimmed)
48
+ return null;
49
+ let candidate = trimmed.toLowerCase();
50
+ while (candidate.endsWith('/')) {
51
+ candidate = candidate.slice(0, -1);
52
+ }
53
+ if (!candidate)
54
+ return null;
55
+ try {
56
+ // Sanity check: must parse as an absolute URL with scheme + host.
57
+ const parsed = new URL(candidate);
58
+ if (!parsed.protocol || !parsed.hostname)
59
+ return null;
60
+ }
61
+ catch {
62
+ return null;
63
+ }
64
+ return candidate;
65
+ }
66
+ /**
67
+ * Dev-only extra origins parsed once from `BRIDGE_DEV_ALLOWED_ORIGINS` at
68
+ * module load. Comma-separated; blank entries ignored; malformed entries
69
+ * dropped. Frozen prod base above is left intact; `isAllowedBridgeOrigin`
70
+ * consults the union.
71
+ */
72
+ const BRIDGE_DEV_ALLOWED_ORIGINS = (() => {
73
+ const raw = process.env.BRIDGE_DEV_ALLOWED_ORIGINS;
74
+ if (!raw)
75
+ return new Set();
76
+ const set = new Set();
77
+ for (const entry of raw.split(',')) {
78
+ const normalized = normalizeDevOrigin(entry);
79
+ if (normalized)
80
+ set.add(normalized);
81
+ }
82
+ return set;
83
+ })();
34
84
  /** Subprotocol prefix advertised by the leader; the per-process token is appended. */
35
85
  export const BRIDGE_SUBPROTOCOL_PREFIX = 'slicc.bridge.v1.';
36
86
  /** Query-param name the launch URL uses to forward the subprotocol token to the leader. */
@@ -75,11 +125,25 @@ const CORS_BASE_ALLOW_HEADERS = [
75
125
  const CORS_EXPOSE_HEADERS = 'Link, X-Proxy-Error, X-Proxy-Set-Cookie';
76
126
  /** Methods exposed to the hosted leader. */
77
127
  const CORS_ALLOW_METHODS = 'GET, POST, PUT, DELETE, OPTIONS';
78
- /** True iff `origin` is in the bridge allowlist. Case-sensitive (origins are normalized lowercase). */
128
+ /**
129
+ * True iff `origin` is in the bridge allowlist. The frozen prod base
130
+ * (`BRIDGE_ALLOWED_ORIGINS`) is matched case-sensitively against the
131
+ * raw origin; the dev-only env-supplied extras (normalized lowercase
132
+ * + trailing-slash-stripped at load) are matched against a normalized
133
+ * copy of the input, so a leader sending `Origin: HTTP://Localhost:8787`
134
+ * (or with a stray trailing slash) still resolves correctly.
135
+ */
79
136
  export function isAllowedBridgeOrigin(origin) {
80
137
  if (!origin)
81
138
  return false;
82
- return BRIDGE_ALLOWED_ORIGINS.includes(origin);
139
+ if (BRIDGE_ALLOWED_ORIGINS.includes(origin))
140
+ return true;
141
+ if (BRIDGE_DEV_ALLOWED_ORIGINS.size === 0)
142
+ return false;
143
+ const normalized = normalizeDevOrigin(origin);
144
+ if (!normalized)
145
+ return false;
146
+ return BRIDGE_DEV_ALLOWED_ORIGINS.has(normalized);
83
147
  }
84
148
  /**
85
149
  * True iff `origin` is a loopback host (localhost / 127.0.0.1 / ::1).
@@ -3,9 +3,15 @@
3
3
  *
4
4
  * Includes hop-by-hop headers (`host`, `connection`, `transfer-encoding`,
5
5
  * `content-length`), proxy-internal markers (`x-target-url`,
6
- * `x-slicc-raw-body`), and forbidden-header transports the client uses
6
+ * `x-slicc-raw-body`), forbidden-header transports the client uses
7
7
  * to smuggle reserved names through `fetch()` (`x-proxy-cookie`,
8
- * `x-proxy-origin`, `x-proxy-referer`).
8
+ * `x-proxy-origin`, `x-proxy-referer`), and the thin-bridge auth header
9
+ * (`x-bridge-token`) which authenticates the browser->local hop only
10
+ * and must not leak onward to `targetUrl`. The bridge-token middleware
11
+ * (`createThinBridgeCorsMiddleware` in `index.ts`) is mounted ahead of
12
+ * this route and reads `req.headers` directly, so token validation
13
+ * still sees the header - this Set only filters what gets COPIED into
14
+ * the forwarded request.
9
15
  *
10
16
  * Lives in its own module (rather than `index.ts`) so tests can import
11
17
  * it without triggering the server bootstrap that runs at `index.ts`
@@ -3,9 +3,15 @@
3
3
  *
4
4
  * Includes hop-by-hop headers (`host`, `connection`, `transfer-encoding`,
5
5
  * `content-length`), proxy-internal markers (`x-target-url`,
6
- * `x-slicc-raw-body`), and forbidden-header transports the client uses
6
+ * `x-slicc-raw-body`), forbidden-header transports the client uses
7
7
  * to smuggle reserved names through `fetch()` (`x-proxy-cookie`,
8
- * `x-proxy-origin`, `x-proxy-referer`).
8
+ * `x-proxy-origin`, `x-proxy-referer`), and the thin-bridge auth header
9
+ * (`x-bridge-token`) which authenticates the browser->local hop only
10
+ * and must not leak onward to `targetUrl`. The bridge-token middleware
11
+ * (`createThinBridgeCorsMiddleware` in `index.ts`) is mounted ahead of
12
+ * this route and reads `req.headers` directly, so token validation
13
+ * still sees the header - this Set only filters what gets COPIED into
14
+ * the forwarded request.
9
15
  *
10
16
  * Lives in its own module (rather than `index.ts`) so tests can import
11
17
  * it without triggering the server bootstrap that runs at `index.ts`
@@ -21,4 +27,5 @@ export const FETCH_PROXY_SKIP_HEADERS = new Set([
21
27
  'x-proxy-cookie',
22
28
  'x-proxy-origin',
23
29
  'x-proxy-referer',
30
+ 'x-bridge-token',
24
31
  ]);
@@ -2,6 +2,14 @@ import type { Express } from 'express';
2
2
  import type { SecretProxyManager } from '../secrets/proxy-manager.js';
3
3
  export interface FetchProxyDeps {
4
4
  secretProxy: SecretProxyManager;
5
+ /**
6
+ * Optional logger sink for per-request observability. Defaults to
7
+ * `console`. Tests pass a silent sink so the route's logging doesn't
8
+ * leak into test output. The bridge's silence on `Failed to fetch`
9
+ * regressions was the original motivation — see issue tracker for
10
+ * the thin-bridge curl diagnosis.
11
+ */
12
+ logger?: Pick<Console, 'log' | 'warn' | 'error'>;
5
13
  }
6
14
  /**
7
15
  * Fetch proxy — forwards cross-origin requests from the browser to bypass
@@ -241,15 +241,17 @@ function streamUpstreamBody(res, upstream, secretProxy, detachClientClose) {
241
241
  * checks req.body first.
242
242
  */
243
243
  export function registerFetchProxyRoute(app, deps) {
244
- const { secretProxy } = deps;
244
+ const { secretProxy, logger = console } = deps;
245
245
  app.all('/api/fetch-proxy', async (req, res) => {
246
246
  const rawBody = await collectRawBody(req);
247
247
  const targetUrl = req.headers['x-target-url'];
248
248
  if (!targetUrl) {
249
+ logger.warn(`[fetch-proxy] ${req.method} → 400 (missing X-Target-URL)`);
249
250
  res.setHeader('X-Proxy-Error', '1');
250
251
  res.status(400).json({ error: 'Missing X-Target-URL header' });
251
252
  return;
252
253
  }
254
+ logger.log(`[fetch-proxy] ${req.method} ${targetUrl}`);
253
255
  // Hoisted so the catch handler can detach it on early failures (e.g. fetch
254
256
  // threw before the success-path detach could run).
255
257
  let onClientClose = null;
@@ -271,6 +273,7 @@ export function registerFetchProxyRoute(app, deps) {
271
273
  }
272
274
  const injection = injectRequestSecrets(secretProxy, headers, targetUrl, targetHostname);
273
275
  if ('forbidden' in injection) {
276
+ logger.warn(`[fetch-proxy] ${req.method} ${targetUrl} → 403 (secret "${injection.forbidden.secretName}" not allowed for "${injection.forbidden.hostname}")`);
274
277
  res.setHeader('X-Proxy-Error', '1');
275
278
  res.status(403).json({
276
279
  error: `Secret "${injection.forbidden.secretName}" is not allowed for domain "${injection.forbidden.hostname}"`,
@@ -296,6 +299,7 @@ export function registerFetchProxyRoute(app, deps) {
296
299
  res.on('close', onClientClose);
297
300
  fetchInit.signal = abortController.signal;
298
301
  const upstream = await fetch(injection.cleanedUrl, fetchInit);
302
+ logger.log(`[fetch-proxy] ${req.method} ${targetUrl} ← ${upstream.status}`);
299
303
  forwardUpstreamHeaders(res, upstream, secretProxy);
300
304
  if (!upstream.body) {
301
305
  res.end();
@@ -309,6 +313,7 @@ export function registerFetchProxyRoute(app, deps) {
309
313
  // listener attached to the response object.
310
314
  detachClientClose();
311
315
  const message = err instanceof Error ? err.message : String(err);
316
+ logger.error(`[fetch-proxy] ${req.method} ${targetUrl} ← 502 (${message})`);
312
317
  res.setHeader('X-Proxy-Error', '1');
313
318
  res.status(502).json({ error: `Proxy fetch failed: ${message}` });
314
319
  }
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/azure-openai-BEec8FHP.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-sWMjBmPA.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/logger-DDBAeTLF.js","assets/clipboard-DgFtRQbq.js","assets/bedrock-camp-9-QEmC9Z.js","assets/local-llm-D09l_nRy.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-Dvkc5_oM.js","assets/oauth-service-CTlktxVj.js","assets/panel-rpc-DqT2FG7c.js","assets/llm-session-id-DVmZ9C2t.js","assets/github-copilot-BqMS3_4S.js","assets/github-C6vLSHER.js","assets/global-db-CbuLl-zx.js","assets/openai-codex-d2uBt8CN.js","assets/xai-grok-sanitize-CR2JoOJd.js","assets/xai-grok-models-CeEBaUMC.js","assets/xai-grok-BcQs9t1L.js","assets/xai-grok-errors-bnlIBeu-.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/azure-openai-CTCrw8ag.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-RvuAuHo8.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/logger-DDBAeTLF.js","assets/clipboard-DgFtRQbq.js","assets/bedrock-camp-9-QEmC9Z.js","assets/local-llm-77SlLHlX.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-D8jV1ibX.js","assets/oauth-service-CoJ-pYVD.js","assets/proxied-fetch-BBO8HwcV.js","assets/panel-rpc-DqT2FG7c.js","assets/llm-session-id-DVmZ9C2t.js","assets/github-copilot-yWe1M0K_.js","assets/github-BjJwZAID.js","assets/global-db-CbuLl-zx.js","assets/openai-codex-BG86bd3g.js","assets/xai-grok-sanitize-CR2JoOJd.js","assets/xai-grok-models-CeEBaUMC.js","assets/xai-grok-D7ULF1Ef.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"./tool-ui-YOPqzMmL.js";import{n as s,t as c}from"./src-DlEHAkLd.js";import{n as l,t as u}from"./panel-rpc-DqT2FG7c.js";import{r as d,t as f}from"./bedrock-camp-9-QEmC9Z.js";var p=Symbol.for(`yaml.alias`),m=Symbol.for(`yaml.document`),h=Symbol.for(`yaml.map`),g=Symbol.for(`yaml.pair`),_=Symbol.for(`yaml.scalar`),v=Symbol.for(`yaml.seq`),y=Symbol.for(`yaml.node.type`),b=e=>!!e&&typeof e==`object`&&e[y]===p,x=e=>!!e&&typeof e==`object`&&e[y]===m,S=e=>!!e&&typeof e==`object`&&e[y]===h,C=e=>!!e&&typeof e==`object`&&e[y]===g,w=e=>!!e&&typeof e==`object`&&e[y]===_,T=e=>!!e&&typeof e==`object`&&e[y]===v;function E(e){if(e&&typeof e==`object`)switch(e[y]){case h:case v:return!0}return!1}function D(e){if(e&&typeof e==`object`)switch(e[y]){case p:case h:case _:case v:return!0}return!1}var O=e=>(w(e)||E(e))&&!!e.anchor,k=Symbol(`break visit`),ee=Symbol(`skip children`),A=Symbol(`remove node`);function j(e,t){let n=ne(t);x(e)?M(null,e.contents,n,Object.freeze([e]))===A&&(e.contents=null):M(null,e,n,Object.freeze([]))}j.BREAK=k,j.SKIP=ee,j.REMOVE=A;function M(e,t,n,r){let i=re(e,t,n,r);if(D(i)||C(i))return ie(e,r,i),M(e,i,n,r);if(typeof i!=`symbol`){if(E(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){let i=M(e,t.items[e],n,r);if(typeof i==`number`)e=i-1;else if(i===k)return k;else i===A&&(t.items.splice(e,1),--e)}}else if(C(t)){r=Object.freeze(r.concat(t));let e=M(`key`,t.key,n,r);if(e===k)return k;e===A&&(t.key=null);let i=M(`value`,t.value,n,r);if(i===k)return k;i===A&&(t.value=null)}}return i}async function te(e,t){let n=ne(t);x(e)?await N(null,e.contents,n,Object.freeze([e]))===A&&(e.contents=null):await N(null,e,n,Object.freeze([]))}te.BREAK=k,te.SKIP=ee,te.REMOVE=A;async function N(e,t,n,r){let i=await re(e,t,n,r);if(D(i)||C(i))return ie(e,r,i),N(e,i,n,r);if(typeof i!=`symbol`){if(E(t)){r=Object.freeze(r.concat(t));for(let e=0;e<t.items.length;++e){let i=await N(e,t.items[e],n,r);if(typeof i==`number`)e=i-1;else if(i===k)return k;else i===A&&(t.items.splice(e,1),--e)}}else if(C(t)){r=Object.freeze(r.concat(t));let e=await N(`key`,t.key,n,r);if(e===k)return k;e===A&&(t.key=null);let i=await N(`value`,t.value,n,r);if(i===k)return k;i===A&&(t.value=null)}}return i}function ne(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 re(e,t,n,r){if(typeof n==`function`)return n(e,t,r);if(S(t))return n.Map?.(e,t,r);if(T(t))return n.Seq?.(e,t,r);if(C(t))return n.Pair?.(e,t,r);if(w(t))return n.Scalar?.(e,t,r);if(b(t))return n.Alias?.(e,t,r)}function ie(e,t,n){let r=t[t.length-1];if(E(r))r.items[e]=n;else if(C(r))e===`key`?r.key=n:r.value=n;else if(x(r))r.contents=n;else{let e=b(r)?`alias`:`scalar`;throw Error(`Cannot replace node with ${e} parent`)}}var ae={"!":`%21`,",":`%2C`,"[":`%5B`,"]":`%5D`,"{":`%7B`,"}":`%7D`},oe=e=>e.replace(/[!,[\]{}]/g,e=>ae[e]),se=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+oe(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&&D(e.contents)){let t={};j(e.contents,(e,n)=>{D(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
  `)}};se.defaultYaml={explicit:!1,version:`1.2`},se.defaultTags={"!!":`tag:yaml.org,2002:`};function ce(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 le(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=le(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=le(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=le(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=le(e,r,t,n);i===void 0?delete r[t]:i!==n&&(r[t]=i)}return e.call(t,n,r)}function P(e,t,n){if(Array.isArray(e))return e.map((e,t)=>P(e,String(t),n));if(e&&typeof e.toJSON==`function`){if(!n||!O(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 ue=class{constructor(e){Object.defineProperty(this,y,{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(!x(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=P(this,``,a);if(typeof r==`function`)for(let{count:e,res:t}of a.anchors.values())r(t,e);return typeof i==`function`?le(i,{"":o},``,o):o}},de=class extends ue{constructor(e){super(p),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=[],j(e,{Node:(e,t)=>{(b(t)||O(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||=(P(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=fe(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(ce(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 fe(e,t,n){if(b(t)){let r=t.resolve(e),i=n&&r&&n.get(r);return i?i.count*i.aliasCount:0}else if(E(t)){let r=0;for(let i of t.items){let t=fe(e,i,n);t>r&&(r=t)}return r}else if(C(t)){let r=fe(e,t.key,n),i=fe(e,t.value,n);return Math.max(r,i)}return 1}var pe=e=>!e||typeof e!=`function`&&typeof e!=`object`,F=class extends ue{constructor(e){super(_),this.value=e}toJSON(e,t){return t?.keep?this.value:P(this.value,e,t)}toString(){return String(this.value)}};F.BLOCK_FOLDED=`BLOCK_FOLDED`,F.BLOCK_LITERAL=`BLOCK_LITERAL`,F.PLAIN=`PLAIN`,F.QUOTE_DOUBLE=`QUOTE_DOUBLE`,F.QUOTE_SINGLE=`QUOTE_SINGLE`;var me=`tag:yaml.org,2002:`;function he(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 ge(e,t,n){if(x(e)&&(e=e.contents),D(e))return e;if(C(e)){let t=n.schema[h].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 de(c.anchor);c={anchor:null,node:null},s.set(e,c)}t?.startsWith(`!!`)&&(t=me+t.slice(2));let l=he(e,t,o.tags);if(!l){if(e&&typeof e.toJSON==`function`&&(e=e.toJSON()),!e||typeof e!=`object`){let t=new F(e);return c&&(c.node=t),t}l=e instanceof Map?o[h]:Symbol.iterator in Object(e)?o[v]:o[h]}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 F(e);return t?u.tag=t:l.default||(u.tag=l.tag),c&&(c.node=u),u}function _e(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 ge(r,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw Error(`This should not happen, please report a bug.`)},schema:e,sourceObjects:new Map})}var ve=e=>e==null||typeof e==`object`&&!!e[Symbol.iterator]().next().done,ye=class extends ue{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=>D(t)||C(t)?t.clone(e):t),this.range&&(t.range=this.range.slice()),t}addIn(e,t){if(ve(e))this.add(t);else{let[n,...r]=e,i=this.get(n,!0);if(E(i))i.addIn(r,t);else if(i===void 0&&this.schema)this.set(n,_e(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(E(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&&w(i)?i.value:i:E(i)?i.getIn(r,t):void 0}hasAllNullValues(e){return this.items.every(t=>{if(!C(t))return!1;let n=t.value;return n==null||e&&w(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 E(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(E(e))e.setIn(r,t);else if(e===void 0&&this.schema)this.set(n,_e(this.schema,r,t));else throw Error(`Expected YAML collection at ${n}. Remaining path: ${r}`)}}},be=e=>e.replace(/^(?!$)(?: $)?/gm,`#`);function xe(e,t){return/^\n+$/.test(e)?e.substring(1):t?e.replace(/^(?! *$)/gm,t):e}var I=(e,t,n)=>e.endsWith(`
4
4
  `)?xe(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
  `+xe(l(e),c),s&&s()):d&&o&&o(),p}function Qe({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(D(i))i.spaceBefore&&d.push(``),$e(t,d,i.commentBefore,!1),i.comment&&(a=i.comment);else if(C(i)){let e=D(i.key)?i.key:null;e&&(e.spaceBefore&&d.push(``),$e(t,d,e.commentBefore,!1),e.comment&&(l=!0));let n=D(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=Re(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+=I(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 $e({indent:e,options:{commentString:t}},n,r,i){if(r&&i&&(r=r.replace(/^\n+/,``)),r){let i=xe(t(r),e);n.push(i.trimStart())}}function B(e,t){let n=w(t)?t.value:t;for(let r of e)if(C(r)&&(r.key===t||r.key===n||w(r.key)&&r.key.value===n))return r}var V=class extends ye{static get tagName(){return`tag:yaml.org,2002:map`}constructor(e){super(h,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(Ye(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=C(e)?e:!e||typeof e!=`object`||!(`key`in e)?new z(e,e?.value):new z(e.key,e.value);let r=B(this.items,n.key),i=this.schema?.sortMapEntries;if(r){if(!t)throw Error(`Key ${n.key} already set`);w(r.value)&&pe(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=B(this.items,e);return t?this.items.splice(this.items.indexOf(t),1).length>0:!1}get(e,t){let n=B(this.items,e)?.value;return(!t&&w(n)?n.value:n)??void 0}has(e){return!!B(this.items,e)}set(e,t){this.add(new z(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)qe(t,r,e);return r}toString(e,t,n){if(!e)return JSON.stringify(this);for(let e of this.items)if(!C(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})),Xe(this,e,{blockItemPrefix:``,flowChars:{start:`{`,end:`}`},itemIndent:e.indent||``,onChompKeep:n,onComment:t})}},et={collection:`map`,default:!0,nodeClass:V,tag:`tag:yaml.org,2002:map`,resolve(e,t){return S(e)||t(`Expected a mapping for this tag`),e},createNode:(e,t,n)=>V.from(e,t,n)},tt=class extends ye{static get tagName(){return`tag:yaml.org,2002:seq`}constructor(e){super(v,e),this.items=[]}add(e){this.items.push(e)}delete(e){let t=nt(e);return typeof t==`number`?this.items.splice(t,1).length>0:!1}get(e,t){let n=nt(e);if(typeof n!=`number`)return;let r=this.items[n];return!t&&w(r)?r.value:r}has(e){let t=nt(e);return typeof t==`number`&&t<this.items.length}set(e,t){let n=nt(e);if(typeof n!=`number`)throw Error(`Expected a valid index, not ${e}.`);let r=this.items[n];w(r)&&pe(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(P(e,String(r++),t));return n}toString(e,t,n){return e?Xe(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(ge(a,void 0,n))}}return i}};function nt(e){let t=w(e)?e.value:e;return t&&typeof t==`string`&&(t=Number(t)),typeof t==`number`&&Number.isInteger(t)&&t>=0?t:null}var rt={collection:`seq`,default:!0,nodeClass:tt,tag:`tag:yaml.org,2002:seq`,resolve(e,t){return T(e)||t(`Expected a sequence for this tag`),e},createNode:(e,t,n)=>tt.from(e,t,n)};function it(e){return typeof e==`bigint`||Number.isInteger(e)}var at=({value:e})=>JSON.stringify(e),ot=[{identify:e=>typeof e==`string`,default:!0,tag:`tag:yaml.org,2002:str`,resolve:e=>e,stringify:at},{identify:e=>e==null,createNode:()=>new F(null),default:!0,tag:`tag:yaml.org,2002:null`,test:/^null$/,resolve:()=>null,stringify:at},{identify:e=>typeof e==`boolean`,default:!0,tag:`tag:yaml.org,2002:bool`,test:/^true$|^false$/,resolve:e=>e===`true`,stringify:at},{identify:it,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})=>it(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:at}];[et,rt].concat(ot,{default:!0,tag:``,test:/^/,resolve(e,t){return t(`Unresolved plain scalar ${JSON.stringify(e)}`),e}});function st(e,t,n){let{replacer:r}=n,i=new tt(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(Ye(o,s,n))}return i}var ct=class e extends tt{constructor(){super(),this.add=V.prototype.add.bind(this),this.delete=V.prototype.delete.bind(this),this.get=V.prototype.get.bind(this),this.has=V.prototype.has.bind(this),this.set=V.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(C(e)?(r=P(e.key,``,t),i=P(e.value,r,t)):r=P(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=st(e,t,n),i=new this;return i.items=r.items,i}};ct.tag=`tag:yaml.org,2002:omap`;var lt=class e extends V{constructor(t){super(t),this.tag=e.tag}add(e){let t;t=C(e)?e:e&&typeof e==`object`&&`key`in e&&`value`in e&&e.value===null?new z(e.key,null):new z(e,null),B(this.items,t.key)||this.items.push(t)}get(e,t){let n=B(this.items,e);return!t&&C(n)?w(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=B(this.items,e);n&&!t?this.items.splice(this.items.indexOf(n),1):!n&&t&&this.items.push(new z(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(Ye(e,null,n));return i}};lt.tag=`tag:yaml.org,2002:set`;var ut=Symbol(`break visit`),dt=Symbol(`skip children`),ft=Symbol(`remove item`);function H(e,t){`type`in e&&e.type===`document`&&(e={start:e.start,value:e.value}),pt(Object.freeze([]),e,t)}H.BREAK=ut,H.SKIP=dt,H.REMOVE=ft,H.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},H.parentCollection=(e,t)=>{let n=H.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 pt(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=pt(Object.freeze(e.concat([[i,t]])),a.items[t],n);if(typeof r==`number`)t=r-1;else if(r===ut)return ut;else r===ft&&(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`,E={[w](e,t){return`${t?`${t}[^/]+`:`[^/]*`}(?=$|\\/$)`},[T](e,t){return`${t?`${t}[^/]*`:`[^/]*`}(?=$|\\/$)`}},D=e=>S.reduce((t,[n,r])=>t.replace(n,r.bind(e)),e),O=e=>typeof e==`string`,k=e=>e&&O(e)&&!s.test(e)&&!c.test(e)&&e.indexOf(`#`)!==0,ee=e=>e.split(d).filter(Boolean),A=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,E[e]),r=this.ignoreCase?new RegExp(n,`i`):new RegExp(n);return _(this,t,r)}},j=({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=D(i);return new A(e,t,i,n,r,a)},M=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(O(e)&&(e={pattern:e}),k(e.pattern)){let t=j(e,this._ignoreCase);this._added=!0,this._rules.push(t)}}add(e){return this._added=!1,n(O(e)?ee(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}},te=(e,t)=>{throw new t(e)},N=(e,t,n)=>O(e)?e?N.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),ne=e=>f.test(e);N.isNotRelative=ne,N.convert=e=>e;var re=class{constructor({ignorecase:e=!0,ignoreCase:t=e,allowRelativePaths:n=!1}={}){_(this,g,!0),this._rules=new M(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&&N.convert(e);return N(i,e,this._strictPathCheck?te: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)}},ie=e=>new re(e),ae=e=>N(e&&N.convert(e),e,y),oe=()=>{N.convert=e=>/^\\\\\?\\/.test(e)||/["<>|\u0000-\u001F]+/u.test(e)?e:e.replace(/\\/g,`/`);let e=/^[a-z]:\//i;N.isNotRelative=t=>e.test(t)||ne(t)};typeof process<`u`&&process.platform===`win32`&&oe(),t.exports=ie,ie.default=ie,t.exports.isPathValid=ae,_(t.exports,Symbol.for(`setupWindows`),oe)}))(),globalThis.Buffer,o(`secret-scrub`),o(`image-processor`),o(`tool-adapter`);var mt=Object.assign({"/packages/dev-tools/providers.build.json":{include:[`*`],exclude:[`amazon-bedrock`]}})[`/packages/dev-tools/providers.build.json`]??{include:[`*`],exclude:[]};function ht(e){let{include:t,exclude:n}=mt;return n.includes(`*`)||n.includes(e)?!1:!!(t.includes(`*`)||t.includes(e))}var gt=Object.assign({"./built-in/azure-ai-foundry.ts":()=>n(()=>import(`./azure-ai-foundry-Bo0FAJyX.js`),[]),"./built-in/azure-openai.ts":()=>n(()=>import(`./azure-openai-BEec8FHP.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12])),"./built-in/bedrock-camp.ts":()=>n(()=>import(`./bedrock-camp-9-QEmC9Z.js`).then(e=>e.n),__vite__mapDeps([13,5,1,2,3,4,6,7])),"./built-in/local-llm.ts":()=>n(()=>import(`./local-llm-D09l_nRy.js`),__vite__mapDeps([14,1,2,3,4,5,6,15,16,17,7,18,19,8,11]))}),_t=Object.assign({"/packages/webapp/providers/adobe.ts":()=>n(()=>import(`./adobe-Dvkc5_oM.js`),__vite__mapDeps([20,2,1,3,4,5,6,9,10,11,12,13,7,21,22,23])),"/packages/webapp/providers/github-copilot.ts":()=>n(()=>import(`./github-copilot-BqMS3_4S.js`),__vite__mapDeps([24,2,1,3,4,5,6,9,10,11,12])),"/packages/webapp/providers/github.ts":()=>n(()=>import(`./github-C6vLSHER.js`),__vite__mapDeps([25,2,9,5,10,11,12,26,21,22])),"/packages/webapp/providers/openai-codex.ts":()=>n(()=>import(`./openai-codex-d2uBt8CN.js`),__vite__mapDeps([27,1,2,3,4,5,6,9,10,11,12])),"/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([28,29])),"/packages/webapp/providers/xai-grok.ts":()=>n(()=>import(`./xai-grok-BcQs9t1L.js`),__vite__mapDeps([30,1,2,3,4,5,6,9,10,11,12,31,29,28]))}),U=new Map,vt=null;function yt(){return vt||(vt=(async()=>{for(let[e,t]of Object.entries(gt)){let e=await t();e.config&&ht(e.config.id)&&(U.set(e.config.id,e.config),e.register?.())}for(let[e,t]of Object.entries(_t)){let e=await t();e.config&&(U.set(e.config.id,e.config),e.register?.())}})(),vt)}function bt(e){return U.get(e)}function xt(){return[...U.keys()]}function St(e){U.set(e.id,e)}var Ct=e({ACCOUNTS_KEY:()=>W,__test__:()=>Nt,addAccount:()=>X,applyProviderDefaults:()=>Bt,clearAllSettings:()=>bn,clearApiKey:()=>hn,clearBaseUrl:()=>vn,clearSelectedProvider:()=>fn,exportProviders:()=>yn,getAccounts:()=>Y,getAllAvailableModels:()=>Wt,getAllExtraOAuthDomains:()=>Jt,getApiKey:()=>pn,getApiKeyForProvider:()=>on,getApiVersionForProvider:()=>cn,getAvailableProviders:()=>Pt,getBaseUrl:()=>gn,getBaseUrlForProvider:()=>Z,getDeploymentForProvider:()=>sn,getExtraOAuthDomains:()=>Gt,getOAuthAccountInfo:()=>Rt,getProviderConfig:()=>K,getProviderModels:()=>q,getRawApiKeyForProvider:()=>an,getSelectedModelId:()=>Q,getSelectedProvider:()=>$,isModelHiddenFromPicker:()=>Ht,logoutOAuthAccount:()=>$t,maskOAuthTokenWithRetry:()=>en,migrateLegacyAuthOnlySelection:()=>jt,persistOAuthMaskViaServiceWorker:()=>tn,providerOffersLlmModels:()=>Ft,removeAccount:()=>Qt,resolveCurrentModel:()=>Tn,resolveModelById:()=>wn,saveOAuthAccount:()=>nn,setApiKey:()=>mn,setBaseUrl:()=>_n,setExtraOAuthDomains:()=>Kt,setExtraOAuthDomainsAsync:()=>qt,setSelectedModelId:()=>ln,setSelectedProvider:()=>dn}),wt=r,Tt=i,W=`slicc_accounts`,G=`selected-model`,Et=[`slicc_provider`,`slicc_api_key`,`slicc_base_url`,`anthropic_api_key`,`api_provider`,`azure_resource`,`bedrock_region`],Dt=new Set([`github`]);function Ot(e){let t;try{t=a()}catch{return!1}return t.includes(e)&&!ht(e)}var kt=!1;function At(){if(!kt){kt=!0;for(let e of Et)try{localStorage.removeItem(e)}catch{}jt()}}function jt(){try{let e=localStorage.getItem(G);if(e){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t);(Dt.has(n)||Ot(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`&&Ot(e.providerId)));n.length!==t.length&&localStorage.setItem(W,JSON.stringify(n))}catch{}}function Mt(){kt=!1}var Nt={_resetLegacyCleanup:Mt};function Pt(){let e=a().filter(ht),t=xt();return[...new Set([...e,...t])].filter(e=>!bt(e)?.hidden)}function Ft(e){try{if(q(e).length>0)return!0}catch{}try{if(i(e).length>0)return!0}catch{}let t=bt(e);return!!(t?.modelOverrides&&Object.keys(t.modelOverrides).length>0)}function It(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=bt(e);return!!(n?.modelOverrides&&Object.hasOwn(n.modelOverrides,t))}function K(e){return bt(e)||{id:e,name:e.split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),description:`${e} provider`,requiresApiKey:!0,requiresBaseUrl:!1}}function Lt(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=f(Z(`bedrock-camp`));return Tt(`amazon-bedrock`).filter(t=>d(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 Tt(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=Sn(e,n.id,``,i),n.name&&(o.name=n.name));let s=t.modelOverrides?.[n.id];return s&&Lt(o,s),Lt(o,n),o})}if(t.isOAuth){let n=Tt(`anthropic`),r=`${e}-anthropic`;return n.map(n=>{let i={...n,api:r,provider:e},a=t.modelOverrides?.[n.id];return a&&Lt(i,a),i})}return Tt(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 Rt(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 zt=Object.assign({})[`/packages/webapp/providers.json`]??[],J=o(`provider-settings`);function Bt(e=zt){if(e.length===0||Y().length>0)return;let t=new Set(Pt());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}X(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 Vt=[/haiku/i];function Ht(e){return Vt.some(t=>t.test(e))}function Ut(e){return e.filter(e=>!Ht(e.id))}function Wt(){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||Ot(n.providerId))continue;let r=Ut(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(){At();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 Gt(e){return c(localStorage)[e]??[]}function Kt(e,t){let n=c(localStorage),r=t.map(e=>e.trim()).filter(e=>e.length>0);r.length===0?delete n[e]:n[e]=r,s(localStorage,n)}async function qt(e,t){if(l()){Kt(e,t);return}let n=u();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{s(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 Jt(){return c(localStorage)}function Yt(e){localStorage.setItem(W,JSON.stringify(e))}async function Xt(e){if(l()){Yt(e);return}let t=u();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 X(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),Yt(a)}async function Zt(e){let t=typeof chrome<`u`&&!!chrome?.runtime?.id;try{if(t){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{let t=await fetch(`/api/secrets/oauth/${e}`,{method:`DELETE`});!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,isExtension:t,error:n instanceof Error?n.message:String(n)})}}async function Qt(e){let t=Y().find(t=>t.providerId===e),n=K(e);t&&n?.isOAuth&&await $t(e),await Zt(e),await Xt(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 $t(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-CTlktxVj.js`);return{openIdpLogoutUrl:e}},__vite__mapDeps([21,2,22,5]));await t(i).catch(t=>{J.warn(`IdP logout popup failed`,{providerId:e,error:t instanceof Error?t.message:String(t)})})}}await Xt(Y().map(t=>t.providerId===e?{providerId:t.providerId,apiKey:``,baseUrl:t.baseUrl,userName:t.userName,userAvatar:t.userAvatar,loggedOut:!0}:t)),await Zt(e)}}async function en(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 tn(e,t,n){let r={providerId:e.providerId,accessToken:e.accessToken,domains:e.domains.join(`,`)},{maskedValue:i,lastError:a}=await en(()=>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 nn(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 Xt(n);let r=K(e.providerId)?.oauthTokenDomains??[],i=Gt(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 s=typeof chrome<`u`&&!!chrome?.runtime?.id;try{if(s)await tn({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:Xt});else if(!globalThis.__slicc_connect_mode){let t=await fetch(`/api/secrets/oauth-update`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({providerId:e.providerId,accessToken:e.accessToken,domains:o})});if(t.ok){let n=await t.json(),r=Y(),i=r.find(t=>t.providerId===e.providerId);i&&typeof n.maskedValue==`string`&&(i.maskedValue=n.maskedValue,await Xt(r))}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,isExtension:s,error:t instanceof Error?t.message:String(t)})}}var rn=`local`;function an(e){let t=Y().find(t=>t.providerId===e);return t&&(t.accessToken||t.apiKey)||null}function on(e){let t=Y().find(t=>t.providerId===e);return t?t.accessToken||t.apiKey||(K(e).optionalApiKey?rn:null):null}function Z(e){return Y().find(t=>t.providerId===e)?.baseUrl??null}function sn(e){return Y().find(t=>t.providerId===e)?.deployment??null}function cn(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 ln(e){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t),r=new Set([...xt(),...Pt()]),i=n.includes(`.`);if(r.has(n)||!i){localStorage.setItem(G,e);return}}let n=$();localStorage.setItem(G,`${n}:${e}`)}function un(){return localStorage.getItem(G)||``}function $(){let e=un(),t=e.indexOf(`:`);if(t>0)return e.slice(0,t);let n=Y(),r=Q();if(r){let e=n.find(e=>Ft(e.providerId)&&It(e.providerId,r));if(e)return e.providerId}let i=n.find(e=>Ft(e.providerId));return i?i.providerId:n.length>0?n[0].providerId:`anthropic`}function dn(e){let t=Q();localStorage.setItem(G,`${e}:${t}`)}function fn(){let e=Q();localStorage.setItem(G,e)}function pn(){return on($())}function mn(e){let t=$();X(t,e,Z(t)??void 0)}async function hn(){await Qt($())}function gn(){return Z($())}function _n(e){let t=$(),n=an(t);n&&X(t,n,e||void 0)}function vn(){let e=$(),t=an(e);t&&X(e,t)}function yn(){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 bn(){let e=Y();await Promise.allSettled(e.map(e=>Qt(e.providerId))),localStorage.removeItem(W),localStorage.removeItem(G);for(let e of Et)localStorage.removeItem(e)}function xn(e){return/^(?:gpt[-.]?|o[0-9]|chatgpt)/i.test(e)?`openai`:`anthropic`}function Sn(e,t,n,r){return{id:t,name:t,provider:e,api:r??`${e}-${xn(t)}`,baseUrl:n??``,contextWindow:2e5,maxTokens:16384,input:[`text`,`image`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},reasoning:!0}}function Cn(e,t){return t.isOAuth||e===`azure-ai-foundry`?`anthropic`:e===`bedrock-camp`?`amazon-bedrock`:e}function wn(e){if(!e)return Tn();let t=$(),n=Z(t),r=K(t);try{let i=wt(Cn(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:Sn(t,e,n)}return Tn()}}function Tn(){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=Cn(e,i),a=wt(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?Sn(e,o,n):wt(`anthropic`,`claude-sonnet-4-0`)}}export{en as A,Kt as B,K as C,$ as D,Q as E,Tn as F,St as G,ln as H,wn as I,yt as K,nn as L,tn as M,Ft as N,Ht as O,Qt as P,mn as R,Rt as S,an as T,dn as U,qt as V,bt as W,Pt as _,Bt as a,sn as b,vn as c,Y as d,Wt as f,cn as g,on as h,X as i,jt as j,$t as k,fn as l,pn as m,Nt as n,bn as o,Jt as p,Ct as r,hn as s,W as t,yn as u,gn as v,q as w,Gt as x,Z as y,_n as z};
38
+ `;return`${e}\n${i}${p}`}else return`${f}${o}${d.join(` `)}${o}${p}`}function $e({indent:e,options:{commentString:t}},n,r,i){if(r&&i&&(r=r.replace(/^\n+/,``)),r){let i=xe(t(r),e);n.push(i.trimStart())}}function B(e,t){let n=w(t)?t.value:t;for(let r of e)if(C(r)&&(r.key===t||r.key===n||w(r.key)&&r.key.value===n))return r}var V=class extends ye{static get tagName(){return`tag:yaml.org,2002:map`}constructor(e){super(h,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(Ye(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=C(e)?e:!e||typeof e!=`object`||!(`key`in e)?new z(e,e?.value):new z(e.key,e.value);let r=B(this.items,n.key),i=this.schema?.sortMapEntries;if(r){if(!t)throw Error(`Key ${n.key} already set`);w(r.value)&&pe(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=B(this.items,e);return t?this.items.splice(this.items.indexOf(t),1).length>0:!1}get(e,t){let n=B(this.items,e)?.value;return(!t&&w(n)?n.value:n)??void 0}has(e){return!!B(this.items,e)}set(e,t){this.add(new z(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)qe(t,r,e);return r}toString(e,t,n){if(!e)return JSON.stringify(this);for(let e of this.items)if(!C(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})),Xe(this,e,{blockItemPrefix:``,flowChars:{start:`{`,end:`}`},itemIndent:e.indent||``,onChompKeep:n,onComment:t})}},et={collection:`map`,default:!0,nodeClass:V,tag:`tag:yaml.org,2002:map`,resolve(e,t){return S(e)||t(`Expected a mapping for this tag`),e},createNode:(e,t,n)=>V.from(e,t,n)},tt=class extends ye{static get tagName(){return`tag:yaml.org,2002:seq`}constructor(e){super(v,e),this.items=[]}add(e){this.items.push(e)}delete(e){let t=nt(e);return typeof t==`number`?this.items.splice(t,1).length>0:!1}get(e,t){let n=nt(e);if(typeof n!=`number`)return;let r=this.items[n];return!t&&w(r)?r.value:r}has(e){let t=nt(e);return typeof t==`number`&&t<this.items.length}set(e,t){let n=nt(e);if(typeof n!=`number`)throw Error(`Expected a valid index, not ${e}.`);let r=this.items[n];w(r)&&pe(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(P(e,String(r++),t));return n}toString(e,t,n){return e?Xe(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(ge(a,void 0,n))}}return i}};function nt(e){let t=w(e)?e.value:e;return t&&typeof t==`string`&&(t=Number(t)),typeof t==`number`&&Number.isInteger(t)&&t>=0?t:null}var rt={collection:`seq`,default:!0,nodeClass:tt,tag:`tag:yaml.org,2002:seq`,resolve(e,t){return T(e)||t(`Expected a sequence for this tag`),e},createNode:(e,t,n)=>tt.from(e,t,n)};function it(e){return typeof e==`bigint`||Number.isInteger(e)}var at=({value:e})=>JSON.stringify(e),ot=[{identify:e=>typeof e==`string`,default:!0,tag:`tag:yaml.org,2002:str`,resolve:e=>e,stringify:at},{identify:e=>e==null,createNode:()=>new F(null),default:!0,tag:`tag:yaml.org,2002:null`,test:/^null$/,resolve:()=>null,stringify:at},{identify:e=>typeof e==`boolean`,default:!0,tag:`tag:yaml.org,2002:bool`,test:/^true$|^false$/,resolve:e=>e===`true`,stringify:at},{identify:it,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})=>it(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:at}];[et,rt].concat(ot,{default:!0,tag:``,test:/^/,resolve(e,t){return t(`Unresolved plain scalar ${JSON.stringify(e)}`),e}});function st(e,t,n){let{replacer:r}=n,i=new tt(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(Ye(o,s,n))}return i}var ct=class e extends tt{constructor(){super(),this.add=V.prototype.add.bind(this),this.delete=V.prototype.delete.bind(this),this.get=V.prototype.get.bind(this),this.has=V.prototype.has.bind(this),this.set=V.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(C(e)?(r=P(e.key,``,t),i=P(e.value,r,t)):r=P(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=st(e,t,n),i=new this;return i.items=r.items,i}};ct.tag=`tag:yaml.org,2002:omap`;var lt=class e extends V{constructor(t){super(t),this.tag=e.tag}add(e){let t;t=C(e)?e:e&&typeof e==`object`&&`key`in e&&`value`in e&&e.value===null?new z(e.key,null):new z(e,null),B(this.items,t.key)||this.items.push(t)}get(e,t){let n=B(this.items,e);return!t&&C(n)?w(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=B(this.items,e);n&&!t?this.items.splice(this.items.indexOf(n),1):!n&&t&&this.items.push(new z(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(Ye(e,null,n));return i}};lt.tag=`tag:yaml.org,2002:set`;var ut=Symbol(`break visit`),dt=Symbol(`skip children`),ft=Symbol(`remove item`);function H(e,t){`type`in e&&e.type===`document`&&(e={start:e.start,value:e.value}),pt(Object.freeze([]),e,t)}H.BREAK=ut,H.SKIP=dt,H.REMOVE=ft,H.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},H.parentCollection=(e,t)=>{let n=H.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 pt(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=pt(Object.freeze(e.concat([[i,t]])),a.items[t],n);if(typeof r==`number`)t=r-1;else if(r===ut)return ut;else r===ft&&(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`,E={[w](e,t){return`${t?`${t}[^/]+`:`[^/]*`}(?=$|\\/$)`},[T](e,t){return`${t?`${t}[^/]*`:`[^/]*`}(?=$|\\/$)`}},D=e=>S.reduce((t,[n,r])=>t.replace(n,r.bind(e)),e),O=e=>typeof e==`string`,k=e=>e&&O(e)&&!s.test(e)&&!c.test(e)&&e.indexOf(`#`)!==0,ee=e=>e.split(d).filter(Boolean),A=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,E[e]),r=this.ignoreCase?new RegExp(n,`i`):new RegExp(n);return _(this,t,r)}},j=({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=D(i);return new A(e,t,i,n,r,a)},M=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(O(e)&&(e={pattern:e}),k(e.pattern)){let t=j(e,this._ignoreCase);this._added=!0,this._rules.push(t)}}add(e){return this._added=!1,n(O(e)?ee(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}},te=(e,t)=>{throw new t(e)},N=(e,t,n)=>O(e)?e?N.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),ne=e=>f.test(e);N.isNotRelative=ne,N.convert=e=>e;var re=class{constructor({ignorecase:e=!0,ignoreCase:t=e,allowRelativePaths:n=!1}={}){_(this,g,!0),this._rules=new M(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&&N.convert(e);return N(i,e,this._strictPathCheck?te: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)}},ie=e=>new re(e),ae=e=>N(e&&N.convert(e),e,y),oe=()=>{N.convert=e=>/^\\\\\?\\/.test(e)||/["<>|\u0000-\u001F]+/u.test(e)?e:e.replace(/\\/g,`/`);let e=/^[a-z]:\//i;N.isNotRelative=t=>e.test(t)||ne(t)};typeof process<`u`&&process.platform===`win32`&&oe(),t.exports=ie,ie.default=ie,t.exports.isPathValid=ae,_(t.exports,Symbol.for(`setupWindows`),oe)}))(),globalThis.Buffer,o(`secret-scrub`),o(`image-processor`),o(`tool-adapter`);var mt=Object.assign({"/packages/dev-tools/providers.build.json":{include:[`*`],exclude:[`amazon-bedrock`]}})[`/packages/dev-tools/providers.build.json`]??{include:[`*`],exclude:[]};function ht(e){let{include:t,exclude:n}=mt;return n.includes(`*`)||n.includes(e)?!1:!!(t.includes(`*`)||t.includes(e))}var gt=Object.assign({"./built-in/azure-ai-foundry.ts":()=>n(()=>import(`./azure-ai-foundry-Bo0FAJyX.js`),[]),"./built-in/azure-openai.ts":()=>n(()=>import(`./azure-openai-CTCrw8ag.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12])),"./built-in/bedrock-camp.ts":()=>n(()=>import(`./bedrock-camp-9-QEmC9Z.js`).then(e=>e.n),__vite__mapDeps([13,5,1,2,3,4,6,7])),"./built-in/local-llm.ts":()=>n(()=>import(`./local-llm-77SlLHlX.js`),__vite__mapDeps([14,1,2,3,4,5,6,15,16,17,7,18,19,8,11]))}),_t=Object.assign({"/packages/webapp/providers/adobe.ts":()=>n(()=>import(`./adobe-D8jV1ibX.js`),__vite__mapDeps([20,2,1,3,4,5,6,9,10,11,12,13,7,21,22,23,24])),"/packages/webapp/providers/github-copilot.ts":()=>n(()=>import(`./github-copilot-yWe1M0K_.js`),__vite__mapDeps([25,2,1,3,4,5,6,9,10,11,12])),"/packages/webapp/providers/github.ts":()=>n(()=>import(`./github-BjJwZAID.js`),__vite__mapDeps([26,2,9,5,10,11,12,27,21,22,23])),"/packages/webapp/providers/openai-codex.ts":()=>n(()=>import(`./openai-codex-BG86bd3g.js`),__vite__mapDeps([28,1,2,3,4,5,6,9,10,11,12])),"/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([29,30])),"/packages/webapp/providers/xai-grok.ts":()=>n(()=>import(`./xai-grok-D7ULF1Ef.js`),__vite__mapDeps([31,1,2,3,4,5,6,9,10,11,12,32,30,29]))}),U=new Map,vt=null;function yt(){return vt||(vt=(async()=>{for(let[e,t]of Object.entries(gt)){let e=await t();e.config&&ht(e.config.id)&&(U.set(e.config.id,e.config),e.register?.())}for(let[e,t]of Object.entries(_t)){let e=await t();e.config&&(U.set(e.config.id,e.config),e.register?.())}})(),vt)}function bt(e){return U.get(e)}function xt(){return[...U.keys()]}function St(e){U.set(e.id,e)}var Ct=e({ACCOUNTS_KEY:()=>W,__test__:()=>Nt,addAccount:()=>X,applyProviderDefaults:()=>Bt,clearAllSettings:()=>bn,clearApiKey:()=>hn,clearBaseUrl:()=>vn,clearSelectedProvider:()=>fn,exportProviders:()=>yn,getAccounts:()=>Y,getAllAvailableModels:()=>Wt,getAllExtraOAuthDomains:()=>Jt,getApiKey:()=>pn,getApiKeyForProvider:()=>on,getApiVersionForProvider:()=>cn,getAvailableProviders:()=>Pt,getBaseUrl:()=>gn,getBaseUrlForProvider:()=>Z,getDeploymentForProvider:()=>sn,getExtraOAuthDomains:()=>Gt,getOAuthAccountInfo:()=>Rt,getProviderConfig:()=>K,getProviderModels:()=>q,getRawApiKeyForProvider:()=>an,getSelectedModelId:()=>Q,getSelectedProvider:()=>$,isModelHiddenFromPicker:()=>Ht,logoutOAuthAccount:()=>$t,maskOAuthTokenWithRetry:()=>en,migrateLegacyAuthOnlySelection:()=>jt,persistOAuthMaskViaServiceWorker:()=>tn,providerOffersLlmModels:()=>Ft,removeAccount:()=>Qt,resolveCurrentModel:()=>Tn,resolveModelById:()=>wn,saveOAuthAccount:()=>nn,setApiKey:()=>mn,setBaseUrl:()=>_n,setExtraOAuthDomains:()=>Kt,setExtraOAuthDomainsAsync:()=>qt,setSelectedModelId:()=>ln,setSelectedProvider:()=>dn}),wt=r,Tt=i,W=`slicc_accounts`,G=`selected-model`,Et=[`slicc_provider`,`slicc_api_key`,`slicc_base_url`,`anthropic_api_key`,`api_provider`,`azure_resource`,`bedrock_region`],Dt=new Set([`github`]);function Ot(e){let t;try{t=a()}catch{return!1}return t.includes(e)&&!ht(e)}var kt=!1;function At(){if(!kt){kt=!0;for(let e of Et)try{localStorage.removeItem(e)}catch{}jt()}}function jt(){try{let e=localStorage.getItem(G);if(e){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t);(Dt.has(n)||Ot(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`&&Ot(e.providerId)));n.length!==t.length&&localStorage.setItem(W,JSON.stringify(n))}catch{}}function Mt(){kt=!1}var Nt={_resetLegacyCleanup:Mt};function Pt(){let e=a().filter(ht),t=xt();return[...new Set([...e,...t])].filter(e=>!bt(e)?.hidden)}function Ft(e){try{if(q(e).length>0)return!0}catch{}try{if(i(e).length>0)return!0}catch{}let t=bt(e);return!!(t?.modelOverrides&&Object.keys(t.modelOverrides).length>0)}function It(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=bt(e);return!!(n?.modelOverrides&&Object.hasOwn(n.modelOverrides,t))}function K(e){return bt(e)||{id:e,name:e.split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),description:`${e} provider`,requiresApiKey:!0,requiresBaseUrl:!1}}function Lt(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=f(Z(`bedrock-camp`));return Tt(`amazon-bedrock`).filter(t=>d(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 Tt(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=Sn(e,n.id,``,i),n.name&&(o.name=n.name));let s=t.modelOverrides?.[n.id];return s&&Lt(o,s),Lt(o,n),o})}if(t.isOAuth){let n=Tt(`anthropic`),r=`${e}-anthropic`;return n.map(n=>{let i={...n,api:r,provider:e},a=t.modelOverrides?.[n.id];return a&&Lt(i,a),i})}return Tt(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 Rt(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 zt=Object.assign({})[`/packages/webapp/providers.json`]??[],J=o(`provider-settings`);function Bt(e=zt){if(e.length===0||Y().length>0)return;let t=new Set(Pt());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}X(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 Vt=[/haiku/i];function Ht(e){return Vt.some(t=>t.test(e))}function Ut(e){return e.filter(e=>!Ht(e.id))}function Wt(){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||Ot(n.providerId))continue;let r=Ut(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(){At();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 Gt(e){return c(localStorage)[e]??[]}function Kt(e,t){let n=c(localStorage),r=t.map(e=>e.trim()).filter(e=>e.length>0);r.length===0?delete n[e]:n[e]=r,s(localStorage,n)}async function qt(e,t){if(l()){Kt(e,t);return}let n=u();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{s(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 Jt(){return c(localStorage)}function Yt(e){localStorage.setItem(W,JSON.stringify(e))}async function Xt(e){if(l()){Yt(e);return}let t=u();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 X(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),Yt(a)}async function Zt(e){let t=typeof chrome<`u`&&!!chrome?.runtime?.id;try{if(t){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{let t=await fetch(`/api/secrets/oauth/${e}`,{method:`DELETE`});!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,isExtension:t,error:n instanceof Error?n.message:String(n)})}}async function Qt(e){let t=Y().find(t=>t.providerId===e),n=K(e);t&&n?.isOAuth&&await $t(e),await Zt(e),await Xt(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 $t(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-CoJ-pYVD.js`);return{openIdpLogoutUrl:e}},__vite__mapDeps([21,2,22,5,23]));await t(i).catch(t=>{J.warn(`IdP logout popup failed`,{providerId:e,error:t instanceof Error?t.message:String(t)})})}}await Xt(Y().map(t=>t.providerId===e?{providerId:t.providerId,apiKey:``,baseUrl:t.baseUrl,userName:t.userName,userAvatar:t.userAvatar,loggedOut:!0}:t)),await Zt(e)}}async function en(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 tn(e,t,n){let r={providerId:e.providerId,accessToken:e.accessToken,domains:e.domains.join(`,`)},{maskedValue:i,lastError:a}=await en(()=>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 nn(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 Xt(n);let r=K(e.providerId)?.oauthTokenDomains??[],i=Gt(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 s=typeof chrome<`u`&&!!chrome?.runtime?.id;try{if(s)await tn({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:Xt});else if(!globalThis.__slicc_connect_mode){let t=await fetch(`/api/secrets/oauth-update`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({providerId:e.providerId,accessToken:e.accessToken,domains:o})});if(t.ok){let n=await t.json(),r=Y(),i=r.find(t=>t.providerId===e.providerId);i&&typeof n.maskedValue==`string`&&(i.maskedValue=n.maskedValue,await Xt(r))}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,isExtension:s,error:t instanceof Error?t.message:String(t)})}}var rn=`local`;function an(e){let t=Y().find(t=>t.providerId===e);return t&&(t.accessToken||t.apiKey)||null}function on(e){let t=Y().find(t=>t.providerId===e);return t?t.accessToken||t.apiKey||(K(e).optionalApiKey?rn:null):null}function Z(e){return Y().find(t=>t.providerId===e)?.baseUrl??null}function sn(e){return Y().find(t=>t.providerId===e)?.deployment??null}function cn(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 ln(e){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t),r=new Set([...xt(),...Pt()]),i=n.includes(`.`);if(r.has(n)||!i){localStorage.setItem(G,e);return}}let n=$();localStorage.setItem(G,`${n}:${e}`)}function un(){return localStorage.getItem(G)||``}function $(){let e=un(),t=e.indexOf(`:`);if(t>0)return e.slice(0,t);let n=Y(),r=Q();if(r){let e=n.find(e=>Ft(e.providerId)&&It(e.providerId,r));if(e)return e.providerId}let i=n.find(e=>Ft(e.providerId));return i?i.providerId:n.length>0?n[0].providerId:`anthropic`}function dn(e){let t=Q();localStorage.setItem(G,`${e}:${t}`)}function fn(){let e=Q();localStorage.setItem(G,e)}function pn(){return on($())}function mn(e){let t=$();X(t,e,Z(t)??void 0)}async function hn(){await Qt($())}function gn(){return Z($())}function _n(e){let t=$(),n=an(t);n&&X(t,n,e||void 0)}function vn(){let e=$(),t=an(e);t&&X(e,t)}function yn(){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 bn(){let e=Y();await Promise.allSettled(e.map(e=>Qt(e.providerId))),localStorage.removeItem(W),localStorage.removeItem(G);for(let e of Et)localStorage.removeItem(e)}function xn(e){return/^(?:gpt[-.]?|o[0-9]|chatgpt)/i.test(e)?`openai`:`anthropic`}function Sn(e,t,n,r){return{id:t,name:t,provider:e,api:r??`${e}-${xn(t)}`,baseUrl:n??``,contextWindow:2e5,maxTokens:16384,input:[`text`,`image`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},reasoning:!0}}function Cn(e,t){return t.isOAuth||e===`azure-ai-foundry`?`anthropic`:e===`bedrock-camp`?`amazon-bedrock`:e}function wn(e){if(!e)return Tn();let t=$(),n=Z(t),r=K(t);try{let i=wt(Cn(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:Sn(t,e,n)}return Tn()}}function Tn(){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=Cn(e,i),a=wt(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?Sn(e,o,n):wt(`anthropic`,`claude-sonnet-4-0`)}}export{en as A,Kt as B,K as C,$ as D,Q as E,Tn as F,St as G,ln as H,wn as I,yt as K,nn as L,tn as M,Ft as N,Ht as O,Qt as P,mn as R,Rt as S,an as T,dn as U,qt as V,bt as W,Pt as _,Bt as a,sn as b,vn as c,Y as d,Wt as f,cn as g,on as h,X as i,jt as j,$t as k,fn as l,pn as m,Nt as n,bn as o,Jt as p,Ct as r,hn as s,W as t,yn as u,gn as v,q as w,Gt as x,Z as y,_n as z};