@burdenoff/fe-libs 2026.825.5 → 2026.825.7

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.
@@ -1,5 +1,15 @@
1
1
  import { AssistantMode, AssistantPromptPart, AssistantRawMessage, AssistantSandboxAuthContext, AssistantArtifact, AssistantSessionInfo, DownloadedAssistantArtifact, StreamAccess } from './types';
2
- export declare function findExistingSandbox(workspaceId: string, mode: AssistantMode, isProd: boolean, authContext: AssistantSandboxAuthContext): Promise<string | null>;
2
+ export declare function findExistingSandbox(workspaceId: string, mode: AssistantMode, isProd: boolean, authContext: AssistantSandboxAuthContext, excludedSandboxIds?: ReadonlySet<string>): Promise<string | null>;
3
+ export interface ExistingAssistantSandbox {
4
+ id: string;
5
+ name: string;
6
+ status: string;
7
+ metadata: Record<string, unknown> | null;
8
+ template: string;
9
+ createdBy: string;
10
+ }
11
+ /** Pure reuse selector, kept separate so quarantine behavior is regression-testable. */
12
+ export declare function selectExistingAssistantSandbox(sandboxes: ExistingAssistantSandbox[], mode: AssistantMode, isProd: boolean, authContext: Pick<AssistantSandboxAuthContext, 'userId'>, excludedSandboxIds?: ReadonlySet<string>): string | null;
3
13
  /**
4
14
  * Does this mode write through the gateway, and therefore need the
5
15
  * confirm-before-write gate?
@@ -31,6 +41,12 @@ export declare function waitForAssistantServiceReady(sandboxId: string, workspac
31
41
  export declare function createAssistantSession(sandboxId: string, workspaceId: string, mode: AssistantMode, authContext: AssistantSandboxAuthContext): Promise<{
32
42
  sessionId: string;
33
43
  }>;
44
+ /**
45
+ * Terminalize a sandbox whose Cloudflare data plane was reaped while its DB
46
+ * record remained RUNNING. Invoked only for Cloudflare's exact connection-
47
+ * refused signature before provisioning the replacement.
48
+ */
49
+ export declare function stopReapedAssistantSandbox(sandboxId: string, workspaceId: string, authContext: AssistantSandboxAuthContext): Promise<void>;
34
50
  /**
35
51
  * Assemble the `/sessions/:id/prompt-async` request body. Pure + exported so the
36
52
  * backward-compatibility contract is unit-testable without touching the network.
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/api.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import { buildSandboxContextInput as e, executeSandboxGraphQL as t } from "./gatewayClient.js";
2
- import { CHECK_AI_CREDITS as n, CREATE_SANDBOX as r, EXTEND_SANDBOX_TTL as i, GET_ACTIVE_SANDBOXES as a, GET_SANDBOX as o, PROXY_SANDBOX_REQUEST as s, REPORT_AI_TOKEN_USAGE as c, WAIT_FOR_SANDBOX_RUNNING as l } from "./operations.js";
3
- import { ASSISTANT_API_AUTH_STRATEGY as u, getImageForMode as d, getImageTagForMode as f, getResourcesForMode as p, resolveSandboxAssistantMode as m } from "./images.js";
4
- import { getCapability as h, isUnknownFieldError as g, markSupported as _, markUnsupported as v } from "./capabilities.js";
2
+ import { CHECK_AI_CREDITS as n, CREATE_SANDBOX as r, EXTEND_SANDBOX_TTL as i, GET_ACTIVE_SANDBOXES as a, GET_SANDBOX as o, PROXY_SANDBOX_REQUEST as s, REPORT_AI_TOKEN_USAGE as c, STOP_ASSISTANT_SANDBOX as l, WAIT_FOR_SANDBOX_RUNNING as u } from "./operations.js";
3
+ import { ASSISTANT_API_AUTH_STRATEGY as d, getImageForMode as f, getImageTagForMode as p, getResourcesForMode as m, resolveSandboxAssistantMode as h } from "./images.js";
4
+ import { getCapability as g, isUnknownFieldError as _, markSupported as v, markUnsupported as y } from "./capabilities.js";
5
5
  //#region src/shared/assistant/api.ts
6
- async function y(n, r, i, a, o, c) {
6
+ async function b(n, r, i, a, o, c) {
7
7
  let l = (await t({
8
8
  query: s,
9
9
  operationName: "ProxySandboxRequest",
@@ -25,19 +25,22 @@ async function y(n, r, i, a, o, c) {
25
25
  }
26
26
  return l.body;
27
27
  }
28
- async function b(n, r, i, o) {
29
- return ((await t({
28
+ async function x(n, r, i, o, s = /* @__PURE__ */ new Set()) {
29
+ return S((await t({
30
30
  query: a,
31
31
  operationName: "GetActiveSandboxes",
32
32
  variables: { context: e(n, o) },
33
33
  workspaceId: n,
34
34
  authContext: o
35
- })).getActiveSandboxes ?? []).find((e) => (e.status === "RUNNING" || e.status === "PROVISIONING" || e.status === "PENDING") && e.template === "AI_BUILDER" && m(e) === r && (!o.userId || e.createdBy === o.userId) && e.metadata?.authStrategy === "sandbox-app-client-headers-v1" && e.metadata?.imageTag === f(r, i) && (!x(r) || e.metadata?.confirmWrites === !0))?.id ?? null;
35
+ })).getActiveSandboxes ?? [], r, i, o, s);
36
36
  }
37
- function x(e) {
37
+ function S(e, t, n, r, i = /* @__PURE__ */ new Set()) {
38
+ return e.find((e) => !i.has(e.id) && (e.status === "RUNNING" || e.status === "PROVISIONING" || e.status === "PENDING") && e.template === "AI_BUILDER" && h(e) === t && (!r.userId || e.createdBy === r.userId) && e.metadata?.authStrategy === "sandbox-app-client-headers-v1" && e.metadata?.imageTag === p(t, n) && (!C(t) || e.metadata?.confirmWrites === !0))?.id ?? null;
39
+ }
40
+ function C(e) {
38
41
  return e === "api-calls";
39
42
  }
40
- function S(e, t, n, r) {
43
+ function w(e, t, n, r) {
41
44
  let i = [
42
45
  {
43
46
  name: "AI_ASSISTANT_MODE",
@@ -65,25 +68,25 @@ function S(e, t, n, r) {
65
68
  }), r.workspaceToken && i.push({
66
69
  name: "WORKSPACE_AUTH_TOKEN",
67
70
  value: r.workspaceToken
68
- })), x(t) && i.push({
71
+ })), C(t) && i.push({
69
72
  name: "AI_ASSISTANT_CONFIRM_WRITES",
70
73
  value: "1"
71
74
  }), i;
72
75
  }
73
- async function C(n, i, a, o, s, c) {
74
- let l = p(i), m = S(n, i, a, c), h = (t) => ({
76
+ async function T(n, i, a, o, s, c) {
77
+ let l = m(i), u = w(n, i, a, c), h = (t) => ({
75
78
  name: `ai-assistant-${i}-${Date.now()}`,
76
79
  description: `AI Assistant sandbox (${i} mode)`,
77
80
  template: "AI_BUILDER",
78
81
  mode: "DEPLOYMENT",
79
82
  containers: [{
80
83
  name: "ai-assistant",
81
- image: d(i, o),
84
+ image: f(i, o),
82
85
  ports: [{
83
86
  containerPort: 8080,
84
87
  name: "http"
85
88
  }],
86
- env: m
89
+ env: u
87
90
  }],
88
91
  resources: l,
89
92
  ttlSeconds: t,
@@ -91,9 +94,9 @@ async function C(n, i, a, o, s, c) {
91
94
  assistantMode: i,
92
95
  assistantOwnerUserId: c.userId ?? null,
93
96
  assistantOrganizationId: c.organizationId ?? null,
94
- authStrategy: u,
95
- imageTag: f(i, o),
96
- confirmWrites: x(i)
97
+ authStrategy: d,
98
+ imageTag: p(i, o),
99
+ confirmWrites: C(i)
97
100
  },
98
101
  context: e(a, c)
99
102
  }), g = (e) => t({
@@ -113,7 +116,7 @@ async function C(n, i, a, o, s, c) {
113
116
  if (!_?.createSandbox?.id) throw Error("createSandbox returned empty response");
114
117
  return _.createSandbox.id;
115
118
  }
116
- async function w(n, r, i) {
119
+ async function E(n, r, i) {
117
120
  return (await t({
118
121
  query: o,
119
122
  operationName: "GetSandbox",
@@ -125,14 +128,14 @@ async function w(n, r, i) {
125
128
  authContext: i
126
129
  })).getSandbox;
127
130
  }
128
- function T(e, t) {
131
+ function D(e, t) {
129
132
  if (e === "FAILED" || e === "STOPPED" || e === "EXPIRED") throw Error(t ? `Sandbox ${e.toLowerCase()}: ${t}` : `Sandbox ${e.toLowerCase()}`);
130
133
  }
131
- async function E(n, r, i, a = 3e5) {
134
+ async function O(n, r, i, a = 3e5) {
132
135
  let o = Date.now();
133
- if (h("waitForSandboxRunning") !== "unsupported") for (; Date.now() - o < a;) try {
136
+ if (g("waitForSandboxRunning") !== "unsupported") for (; Date.now() - o < a;) try {
134
137
  let a = await t({
135
- query: l,
138
+ query: u,
136
139
  operationName: "WaitForSandboxRunning",
137
140
  variables: {
138
141
  id: n,
@@ -142,29 +145,29 @@ async function E(n, r, i, a = 3e5) {
142
145
  workspaceId: r,
143
146
  authContext: i
144
147
  });
145
- _("waitForSandboxRunning");
148
+ v("waitForSandboxRunning");
146
149
  let o = a.waitForSandboxRunning;
147
150
  if (o?.status === "RUNNING") return;
148
- T(o?.status, o?.errorMessage);
151
+ D(o?.status, o?.errorMessage);
149
152
  } catch (e) {
150
- if (g(e)) {
151
- v("waitForSandboxRunning");
153
+ if (_(e)) {
154
+ y("waitForSandboxRunning");
152
155
  break;
153
156
  }
154
157
  throw e;
155
158
  }
156
159
  for (; Date.now() - o < a;) {
157
- let e = await w(n, r, i);
160
+ let e = await E(n, r, i);
158
161
  if (e?.status === "RUNNING") return;
159
- T(e?.status, e?.errorMessage), await new Promise((e) => setTimeout(e, 2e3));
162
+ D(e?.status, e?.errorMessage), await new Promise((e) => setTimeout(e, 2e3));
160
163
  }
161
164
  throw Error("Sandbox startup timed out");
162
165
  }
163
- async function D(e, t, n, r = 9e4) {
166
+ async function k(e, t, n, r = 9e4) {
164
167
  let i = Date.now();
165
168
  for (; Date.now() - i < r;) {
166
169
  try {
167
- await y(e, t, "/health", "GET", void 0, n);
170
+ await b(e, t, "/health", "GET", void 0, n);
168
171
  return;
169
172
  } catch (e) {
170
173
  let t = e instanceof Error ? e.message : String(e);
@@ -174,10 +177,22 @@ async function D(e, t, n, r = 9e4) {
174
177
  }
175
178
  throw Error("Assistant service did not become healthy before timeout");
176
179
  }
177
- async function O(e, t, n, r) {
178
- return { sessionId: (await y(e, t, "/sessions", "POST", { mode: n }, r)).session.id };
180
+ async function A(e, t, n, r) {
181
+ return { sessionId: (await b(e, t, "/sessions", "POST", { mode: n }, r)).session.id };
182
+ }
183
+ async function j(n, r, i) {
184
+ await t({
185
+ query: l,
186
+ operationName: "StopAssistantSandbox",
187
+ variables: {
188
+ id: n,
189
+ context: e(r, i)
190
+ },
191
+ workspaceId: r,
192
+ authContext: i
193
+ });
179
194
  }
180
- function k(e) {
195
+ function M(e) {
181
196
  let { mode: t, prompt: n, pageContext: r, parts: i } = e, a = {
182
197
  mode: t,
183
198
  prompt: n,
@@ -185,8 +200,8 @@ function k(e) {
185
200
  };
186
201
  return i && i.length > 0 && (a.parts = i), a;
187
202
  }
188
- async function A(e, t, n, r, i, a, o, s) {
189
- let c = await y(e, t, `/sessions/${n}/prompt-async`, "POST", k({
203
+ async function N(e, t, n, r, i, a, o, s) {
204
+ let c = await b(e, t, `/sessions/${n}/prompt-async`, "POST", M({
190
205
  mode: i,
191
206
  prompt: r,
192
207
  pageContext: a,
@@ -194,25 +209,25 @@ async function A(e, t, n, r, i, a, o, s) {
194
209
  }), o);
195
210
  return { messageID: typeof c.messageID == "string" ? c.messageID : void 0 };
196
211
  }
197
- async function j(e, t, n, r, i) {
212
+ async function P(e, t, n, r, i) {
198
213
  let a = `/sessions/${n}/messages?limit=${i?.limit ?? 50}`;
199
- i?.sinceMs && h("sinceParam") !== "unsupported" && (a += `&since=${i.sinceMs}`);
200
- let o = await y(e, t, a, "GET", void 0, r);
201
- return typeof o.now == "number" && _("sinceParam"), o.messages ?? [];
214
+ i?.sinceMs && g("sinceParam") !== "unsupported" && (a += `&since=${i.sinceMs}`);
215
+ let o = await b(e, t, a, "GET", void 0, r);
216
+ return typeof o.now == "number" && v("sinceParam"), o.messages ?? [];
202
217
  }
203
- async function M(e, t, n, r) {
204
- if (h("sse") === "unsupported") return null;
218
+ async function F(e, t, n, r) {
219
+ if (g("sse") === "unsupported") return null;
205
220
  try {
206
- let i = await y(e, t, `/sessions/${n}/stream-url`, "GET", void 0, r);
207
- return typeof i.url == "string" && typeof i.expiresAt == "number" ? (_("sse"), {
221
+ let i = await b(e, t, `/sessions/${n}/stream-url`, "GET", void 0, r);
222
+ return typeof i.url == "string" && typeof i.expiresAt == "number" ? (v("sse"), {
208
223
  url: i.url,
209
224
  expiresAt: i.expiresAt
210
- }) : (v("sse"), null);
225
+ }) : (y("sse"), null);
211
226
  } catch {
212
- return v("sse"), null;
227
+ return y("sse"), null;
213
228
  }
214
229
  }
215
- async function N(n, r, a, o) {
230
+ async function I(n, r, a, o) {
216
231
  await t({
217
232
  query: i,
218
233
  operationName: "ExtendSandboxTtl",
@@ -225,21 +240,21 @@ async function N(n, r, a, o) {
225
240
  authContext: o
226
241
  });
227
242
  }
228
- async function P(e, t, n, r) {
229
- await y(e, t, `/sessions/${n}/heartbeat`, "POST", void 0, r).catch(() => void 0);
243
+ async function L(e, t, n, r) {
244
+ await b(e, t, `/sessions/${n}/heartbeat`, "POST", void 0, r).catch(() => void 0);
230
245
  }
231
- async function F(e, t, n, r) {
232
- return ((await y(e, t, `/sessions/${n}/artifacts`, "GET", void 0, r)).artifacts ?? []).filter((e) => !e.name.startsWith("."));
246
+ async function R(e, t, n, r) {
247
+ return ((await b(e, t, `/sessions/${n}/artifacts`, "GET", void 0, r)).artifacts ?? []).filter((e) => !e.name.startsWith("."));
233
248
  }
234
- async function I(e, t, n, r) {
235
- let i = await y(e, t, `/sessions/${n}`, "GET", void 0, r);
249
+ async function z(e, t, n, r) {
250
+ let i = await b(e, t, `/sessions/${n}`, "GET", void 0, r);
236
251
  return {
237
252
  id: i.session?.id ?? n,
238
253
  mode: i.mode ?? "unknown"
239
254
  };
240
255
  }
241
- async function L(e, t, n, r, i) {
242
- let a = (await y(e, t, `/sessions/${n}/artifacts/download?path=${encodeURIComponent(r)}`, "GET", void 0, i)).artifact;
256
+ async function B(e, t, n, r, i) {
257
+ let a = (await b(e, t, `/sessions/${n}/artifacts/download?path=${encodeURIComponent(r)}`, "GET", void 0, i)).artifact;
243
258
  if (!a) throw Error("Artifact download returned an empty response");
244
259
  return {
245
260
  filename: a.filename,
@@ -247,7 +262,7 @@ async function L(e, t, n, r, i) {
247
262
  contentBase64: a.contentBase64
248
263
  };
249
264
  }
250
- async function R(e, r) {
265
+ async function V(e, r) {
251
266
  return (await t({
252
267
  query: n,
253
268
  operationName: "CheckAiCredits",
@@ -256,7 +271,7 @@ async function R(e, r) {
256
271
  authContext: r
257
272
  })).checkAiCredits;
258
273
  }
259
- async function z(e, n, r, i, a, o) {
274
+ async function H(e, n, r, i, a, o) {
260
275
  let s = Math.max(0, Math.round(a.input ?? 0)), l = Math.max(0, Math.round(a.output ?? 0));
261
276
  s + l === 0 || !i || await t({
262
277
  query: c,
@@ -273,4 +288,4 @@ async function z(e, n, r, i, a, o) {
273
288
  });
274
289
  }
275
290
  //#endregion
276
- export { k as buildPromptRequestBody, R as checkAssistantAiCredits, C as createAssistantSandbox, O as createAssistantSession, L as downloadAssistantArtifact, N as extendAssistantSandboxTTL, b as findExistingSandbox, F as getAssistantArtifacts, j as getAssistantMessages, I as getAssistantSession, M as getAssistantStreamAccess, z as reportAssistantAiTokenUsage, A as sendAssistantPromptAsync, P as sendHeartbeat, D as waitForAssistantServiceReady, E as waitForSandboxRunning };
291
+ export { M as buildPromptRequestBody, V as checkAssistantAiCredits, T as createAssistantSandbox, A as createAssistantSession, B as downloadAssistantArtifact, I as extendAssistantSandboxTTL, x as findExistingSandbox, R as getAssistantArtifacts, P as getAssistantMessages, z as getAssistantSession, F as getAssistantStreamAccess, H as reportAssistantAiTokenUsage, N as sendAssistantPromptAsync, L as sendHeartbeat, j as stopReapedAssistantSandbox, k as waitForAssistantServiceReady, O as waitForSandboxRunning };
@@ -1 +1 @@
1
- {"version":3,"file":"createSandboxAssistantTransport.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/createSandboxAssistantTransport.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,OAAO,KAAK,EAGV,2BAA2B,EAE3B,sBAAsB,EACtB,yBAAyB,EAC1B,MAAM,SAAS,CAAC;AAOjB,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,2BAA2B,CAAC;IAClD,cAAc,EAAE,MAAM,MAAM,CAAC;CAC9B;AAYD,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,sBAAsB,EAC9B,IAAI,EAAE,aAAa,GAClB,yBAAyB,CAgL3B"}
1
+ {"version":3,"file":"createSandboxAssistantTransport.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/createSandboxAssistantTransport.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAmBH,OAAO,KAAK,EAGV,2BAA2B,EAE3B,sBAAsB,EACtB,yBAAyB,EAC1B,MAAM,SAAS,CAAC;AAOjB,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,2BAA2B,CAAC;IAClD,cAAc,EAAE,MAAM,MAAM,CAAC;CAC9B;AAYD,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,sBAAsB,EAC9B,IAAI,EAAE,aAAa,GAClB,yBAAyB,CA2L3B"}
@@ -1,91 +1,98 @@
1
1
  import { isQuotaExhaustedError as e } from "./gatewayClient.js";
2
- import { checkAssistantAiCredits as t, getAssistantMessages as n, getAssistantStreamAccess as r, reportAssistantAiTokenUsage as i, sendAssistantPromptAsync as a } from "./api.js";
3
- import { AssistantRuntimeManager as o } from "./runtime.js";
4
- import { buildProgress as s, isRecoverable as c, mergeMessagesById as l, sanitize as u } from "./progress.js";
2
+ import { checkAssistantAiCredits as t, getAssistantMessages as n, getAssistantStreamAccess as r, reportAssistantAiTokenUsage as i, sendAssistantPromptAsync as a, stopReapedAssistantSandbox as o } from "./api.js";
3
+ import { AssistantRuntimeManager as s } from "./runtime.js";
4
+ import { buildProgress as c, isReapedSandboxConnectionError as l, isRecoverable as u, mergeMessagesById as d, sanitize as f } from "./progress.js";
5
5
  //#region src/shared/assistant/createSandboxAssistantTransport.ts
6
- var d = 42e4, f = 400, p = 2e3, m = 5e3;
7
- function h() {
6
+ var p = 42e4, m = 400, h = 2e3, g = 5e3;
7
+ function _() {
8
8
  return typeof window > "u" ? {} : {
9
9
  currentUrl: window.location.href,
10
10
  currentPage: window.location.pathname.split("/").filter(Boolean).slice(0, 3).join("/") || "home",
11
11
  viewportSize: `${window.innerWidth}x${window.innerHeight}`
12
12
  };
13
13
  }
14
- function g(g, _) {
15
- let v = g.mode ?? "assistant", y = g.streamBudgetMs ?? d, b = g.ttlSeconds ?? 3600, x = g.isProdRuntime ?? (() => !1), S = g.enableCredits ?? !1, C = new o({
16
- product: g.product,
17
- mode: v,
18
- ttlSeconds: b,
19
- isProd: x,
20
- getWorkspaceId: _.getWorkspaceId,
21
- getAuthContext: _.getAuthContext
22
- }), w = () => g.gatherPageContext ? { ...g.gatherPageContext() } : h();
23
- async function T(e, t, o, d) {
14
+ function v(v, y) {
15
+ let b = v.mode ?? "assistant", x = v.streamBudgetMs ?? p, S = v.ttlSeconds ?? 3600, C = v.isProdRuntime ?? (() => !1), w = v.enableCredits ?? !1, T = new s({
16
+ product: v.product,
17
+ mode: b,
18
+ ttlSeconds: S,
19
+ isProd: C,
20
+ getWorkspaceId: y.getWorkspaceId,
21
+ getAuthContext: y.getAuthContext
22
+ }), E = () => v.gatherPageContext ? { ...v.gatherPageContext() } : _();
23
+ async function D(e, t, s, p) {
24
24
  try {
25
- let { sandboxId: c, sessionId: d } = await C.ensureRuntime();
26
- C.startKeepWarm();
27
- let h = Date.now();
28
- await a(c, t, d, e.prompt, v, w(), o, e.parts?.length ? { parts: e.parts } : void 0);
29
- let _ = null, b = null, x = await r(c, t, d, o).catch(() => null);
30
- if (x && typeof EventSource < "u") try {
31
- b = new EventSource(x.url);
25
+ let { sandboxId: o, sessionId: l } = await T.ensureRuntime();
26
+ T.startKeepWarm();
27
+ let u = Date.now();
28
+ await a(o, t, l, e.prompt, b, E(), s, e.parts?.length ? { parts: e.parts } : void 0);
29
+ let p = null, _ = null, y = await r(o, t, l, s).catch(() => null);
30
+ if (y && typeof EventSource < "u") try {
31
+ _ = new EventSource(y.url);
32
32
  let e = () => {
33
- if (_) {
34
- let e = _;
35
- _ = null, e();
33
+ if (p) {
34
+ let e = p;
35
+ p = null, e();
36
36
  }
37
37
  };
38
- b.onmessage = e, b.addEventListener("message.part.updated", e), b.addEventListener("message.updated", e), b.onerror = () => {
39
- b?.close(), b = null;
38
+ _.onmessage = e, _.addEventListener("message.part.updated", e), _.addEventListener("message.updated", e), _.onerror = () => {
39
+ _?.close(), _ = null;
40
40
  };
41
41
  } catch {
42
- b = null;
42
+ _ = null;
43
43
  }
44
- let T = (t) => new Promise((n) => {
44
+ let S = (t) => new Promise((n) => {
45
45
  if (e.signal.aborted) return n();
46
46
  let r = setTimeout(() => {
47
- _ = null, n();
47
+ p = null, n();
48
48
  }, t);
49
- _ = () => {
49
+ p = () => {
50
50
  clearTimeout(r), n();
51
51
  };
52
- }), E = h + y, D = [], O = s([], h), k = h;
53
- for (; Date.now() < E;) {
52
+ }), C = u + x, D = [], O = c([], u), k = u;
53
+ for (; Date.now() < C;) {
54
54
  if (e.signal.aborted) throw Error("Cancelled");
55
- let r = await n(c, t, d, o, { sinceMs: k });
56
- D = l(D, r);
55
+ let r = await n(o, t, l, s, { sinceMs: k });
56
+ D = d(D, r);
57
57
  for (let e of r) {
58
58
  let t = e.info?.time?.created;
59
59
  typeof t == "number" && t > k && (k = t);
60
60
  }
61
- if (O = s(D, h), e.onProgress(u(O.content)), O.done) break;
62
- let i = Date.now() - h < m ? f : p;
63
- await (b ? T(i) : new Promise((e) => setTimeout(e, i)));
61
+ if (O = c(D, u), e.onProgress(f(O.content)), O.done) break;
62
+ let i = Date.now() - u < g ? m : h;
63
+ await (_ ? S(i) : new Promise((e) => setTimeout(e, i)));
64
64
  }
65
- if (b?.close(), !O.done) throw Error("The assistant timed out while responding. Please try again.");
66
- let A = await n(c, t, d, o, { limit: 50 }).catch(() => D), j = s(l(D, A), h);
67
- if (S) {
65
+ if (_?.close(), !O.done) throw Error("The assistant timed out while responding. Please try again.");
66
+ let A = await n(o, t, l, s, { limit: 50 }).catch(() => D), j = c(d(D, A), u);
67
+ if (w) {
68
68
  let e = A.filter((e) => e.info?.role === "assistant").sort((e, t) => (t.info?.time?.created ?? 0) - (e.info?.time?.created ?? 0))[0], n = e?.info?.tokens, r = e?.info?.providerID && e?.info?.modelID ? `${e.info.providerID}/${e.info.modelID}` : void 0;
69
- e?.info?.id && n && i(t, d, e.info.id, r, n, o).then(() => g.onCreditsUpdated?.()).catch(() => void 0);
69
+ e?.info?.id && n && i(t, l, e.info.id, r, n, s).then(() => v.onCreditsUpdated?.()).catch(() => void 0);
70
70
  }
71
- return { text: u(j.content) };
71
+ return { text: f(j.content) };
72
72
  } catch (n) {
73
- if (d === 1 && c(n)) return C.reset(), T(e, t, o, 2);
73
+ if (p === 1 && u(n)) {
74
+ let r = l(n);
75
+ if (r) {
76
+ let e = T.getSandboxId();
77
+ e && await o(e, t, s).catch(() => void 0);
78
+ }
79
+ return T.reset({ quarantineCurrentSandbox: r }), D(e, t, s, 2);
80
+ }
74
81
  throw n;
75
82
  }
76
83
  }
77
84
  return {
78
85
  sendPrompt: async (n) => {
79
- let r = _.getWorkspaceId();
86
+ let r = y.getWorkspaceId();
80
87
  if (!r) throw Error("The assistant needs an active workspace. Open a workspace and try again.");
81
- let i = _.getAuthContext();
82
- return S && t(r, i).catch((t) => {
83
- e(t) && g.onQuotaExhausted?.(t);
84
- }), T(n, r, i, 1);
88
+ let i = y.getAuthContext();
89
+ return w && t(r, i).catch((t) => {
90
+ e(t) && v.onQuotaExhausted?.(t);
91
+ }), D(n, r, i, 1);
85
92
  },
86
- prewarm: (e) => C.prewarm(e),
87
- suspend: () => C.stopKeepWarm()
93
+ prewarm: (e) => T.prewarm(e),
94
+ suspend: () => T.stopKeepWarm()
88
95
  };
89
96
  }
90
97
  //#endregion
91
- export { g as createSandboxAssistantTransport };
98
+ export { v as createSandboxAssistantTransport };
@@ -13,6 +13,7 @@ export declare const GET_SANDBOX = "\n query GetSandbox($id: ID!, $context: Con
13
13
  export declare const WAIT_FOR_SANDBOX_RUNNING = "\n query WaitForSandboxRunning($id: ID!, $timeoutSeconds: Int, $context: ContextInput!) {\n waitForSandboxRunning(id: $id, timeoutSeconds: $timeoutSeconds, context: $context) {\n id\n status\n errorMessage\n }\n }\n";
14
14
  export declare const GET_ACTIVE_SANDBOXES = "\n query GetActiveSandboxes($context: ContextInput!) {\n getActiveSandboxes(context: $context) {\n id\n name\n status\n metadata\n template\n createdBy\n }\n }\n";
15
15
  export declare const PROXY_SANDBOX_REQUEST = "\n mutation ProxySandboxRequest($input: ProxySandboxRequestInput!) {\n proxySandboxRequest(input: $input) {\n status\n body\n }\n }\n";
16
+ export declare const STOP_ASSISTANT_SANDBOX = "\n mutation StopAssistantSandbox($id: ID!, $context: ContextInput!) {\n stopSandbox(id: $id, context: $context) {\n id\n status\n }\n }\n";
16
17
  export declare const EXTEND_SANDBOX_TTL = "\n mutation ExtendSandboxTtl($id: ID!, $additionalSeconds: Int!, $context: ContextInput!) {\n extendSandboxTTL(id: $id, additionalSeconds: $additionalSeconds, context: $context) {\n id\n expiresAt\n }\n }\n";
17
18
  export declare const CHECK_AI_CREDITS = "\n mutation CheckAiCredits {\n checkAiCredits\n }\n";
18
19
  export declare const REPORT_AI_TOKEN_USAGE = "\n mutation ReportAiTokenUsage($input: ReportAiTokenUsageInput!) {\n reportAiTokenUsage(input: $input)\n }\n";
@@ -1 +1 @@
1
- {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/operations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,cAAc,mMAW1B,CAAC;AAEF,eAAO,MAAM,WAAW,qNAWvB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,mPAQpC,CAAC;AAEF,eAAO,MAAM,oBAAoB,4MAWhC,CAAC;AAEF,eAAO,MAAM,qBAAqB,4JAOjC,CAAC;AAEF,eAAO,MAAM,kBAAkB,qOAO9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,6DAI5B,CAAC;AAEF,eAAO,MAAM,qBAAqB,sHAIjC,CAAC"}
1
+ {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/operations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,cAAc,mMAW1B,CAAC;AAEF,eAAO,MAAM,WAAW,qNAWvB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,mPAQpC,CAAC;AAEF,eAAO,MAAM,oBAAoB,4MAWhC,CAAC;AAEF,eAAO,MAAM,qBAAqB,4JAOjC,CAAC;AAEF,eAAO,MAAM,sBAAsB,gKAOlC,CAAC;AAEF,eAAO,MAAM,kBAAkB,qOAO9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,6DAI5B,CAAC;AAEF,eAAO,MAAM,qBAAqB,sHAIjC,CAAC"}
@@ -1,4 +1,4 @@
1
1
  //#region src/shared/assistant/operations.ts
2
- var e = "\n mutation CreateSandbox($input: CreateSandboxInput!) {\n createSandbox(input: $input) {\n id\n name\n status\n network {\n internalUrl\n }\n }\n }\n", t = "\n query GetSandbox($id: ID!, $context: ContextInput!) {\n getSandbox(id: $id, context: $context) {\n id\n status\n errorMessage\n network {\n internalUrl\n }\n }\n }\n", n = "\n query WaitForSandboxRunning($id: ID!, $timeoutSeconds: Int, $context: ContextInput!) {\n waitForSandboxRunning(id: $id, timeoutSeconds: $timeoutSeconds, context: $context) {\n id\n status\n errorMessage\n }\n }\n", r = "\n query GetActiveSandboxes($context: ContextInput!) {\n getActiveSandboxes(context: $context) {\n id\n name\n status\n metadata\n template\n createdBy\n }\n }\n", i = "\n mutation ProxySandboxRequest($input: ProxySandboxRequestInput!) {\n proxySandboxRequest(input: $input) {\n status\n body\n }\n }\n", a = "\n mutation ExtendSandboxTtl($id: ID!, $additionalSeconds: Int!, $context: ContextInput!) {\n extendSandboxTTL(id: $id, additionalSeconds: $additionalSeconds, context: $context) {\n id\n expiresAt\n }\n }\n", o = "\n mutation CheckAiCredits {\n checkAiCredits\n }\n", s = "\n mutation ReportAiTokenUsage($input: ReportAiTokenUsageInput!) {\n reportAiTokenUsage(input: $input)\n }\n";
2
+ var e = "\n mutation CreateSandbox($input: CreateSandboxInput!) {\n createSandbox(input: $input) {\n id\n name\n status\n network {\n internalUrl\n }\n }\n }\n", t = "\n query GetSandbox($id: ID!, $context: ContextInput!) {\n getSandbox(id: $id, context: $context) {\n id\n status\n errorMessage\n network {\n internalUrl\n }\n }\n }\n", n = "\n query WaitForSandboxRunning($id: ID!, $timeoutSeconds: Int, $context: ContextInput!) {\n waitForSandboxRunning(id: $id, timeoutSeconds: $timeoutSeconds, context: $context) {\n id\n status\n errorMessage\n }\n }\n", r = "\n query GetActiveSandboxes($context: ContextInput!) {\n getActiveSandboxes(context: $context) {\n id\n name\n status\n metadata\n template\n createdBy\n }\n }\n", i = "\n mutation ProxySandboxRequest($input: ProxySandboxRequestInput!) {\n proxySandboxRequest(input: $input) {\n status\n body\n }\n }\n", a = "\n mutation StopAssistantSandbox($id: ID!, $context: ContextInput!) {\n stopSandbox(id: $id, context: $context) {\n id\n status\n }\n }\n", o = "\n mutation ExtendSandboxTtl($id: ID!, $additionalSeconds: Int!, $context: ContextInput!) {\n extendSandboxTTL(id: $id, additionalSeconds: $additionalSeconds, context: $context) {\n id\n expiresAt\n }\n }\n", s = "\n mutation CheckAiCredits {\n checkAiCredits\n }\n", c = "\n mutation ReportAiTokenUsage($input: ReportAiTokenUsageInput!) {\n reportAiTokenUsage(input: $input)\n }\n";
3
3
  //#endregion
4
- export { o as CHECK_AI_CREDITS, e as CREATE_SANDBOX, a as EXTEND_SANDBOX_TTL, r as GET_ACTIVE_SANDBOXES, t as GET_SANDBOX, i as PROXY_SANDBOX_REQUEST, s as REPORT_AI_TOKEN_USAGE, n as WAIT_FOR_SANDBOX_RUNNING };
4
+ export { s as CHECK_AI_CREDITS, e as CREATE_SANDBOX, o as EXTEND_SANDBOX_TTL, r as GET_ACTIVE_SANDBOXES, t as GET_SANDBOX, i as PROXY_SANDBOX_REQUEST, c as REPORT_AI_TOKEN_USAGE, a as STOP_ASSISTANT_SANDBOX, n as WAIT_FOR_SANDBOX_RUNNING };
@@ -27,6 +27,13 @@ export declare function buildProgress(messages: AssistantRawMessage[], sinceMs:
27
27
  };
28
28
  /** Redact credentials that might leak into a rendered answer. */
29
29
  export declare function sanitize(response: string): string;
30
+ /**
31
+ * Cloudflare's sandbox proxy emits this exact connection-refused copy after a
32
+ * sandbox has been reaped but its control-plane record still looks RUNNING.
33
+ * Keep this deliberately narrow: replaying an arbitrary timeout can duplicate
34
+ * a prompt whose first attempt actually reached the model.
35
+ */
36
+ export declare function isReapedSandboxConnectionError(error: unknown): boolean;
30
37
  /** Whether an error is worth one retry from a clean runtime (union of fleet fragments). */
31
38
  export declare function isRecoverable(error: unknown): boolean;
32
39
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/progress.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAA2B,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEpG,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAE3E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,GAAG,MAAM,CAM5E;AA8CD;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE,CAkB/E;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE,CAU7E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,mBAAmB,EAAE,EAC/B,OAAO,EAAE,MAAM,GACd;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAuBpC;AAED,iEAAiE;AACjE,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAyBrD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,mBAAmB,EAAE,EAClC,QAAQ,EAAE,mBAAmB,EAAE,GAC9B,mBAAmB,EAAE,CAavB;AAED,2FAA2F;AAC3F,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,GAAG,sBAAsB,EAAE,CAyB7F"}
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/progress.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAA2B,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEpG,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAE3E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,GAAG,MAAM,CAM5E;AA8CD;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE,CAkB/E;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE,CAU7E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,mBAAmB,EAAE,EAC/B,OAAO,EAAE,MAAM,GACd;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAuBpC;AAED,iEAAiE;AACjE,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAItE;AAED,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CA0BrD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,mBAAmB,EAAE,EAClC,QAAQ,EAAE,mBAAmB,EAAE,GAC9B,mBAAmB,EAAE,CAavB;AAED,2FAA2F;AAC3F,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,GAAG,sBAAsB,EAAE,CAyB7F"}
@@ -59,7 +59,11 @@ function c(e) {
59
59
  }
60
60
  function l(e) {
61
61
  let t = e instanceof Error ? e.message.toLowerCase() : String(e).toLowerCase();
62
- return t.includes("rate limit exceeded") || t.includes("unauthorized") || t.includes("k8s api error 401") ? !1 : [
62
+ return t.includes("unable to connect") && t.includes("able to access the url");
63
+ }
64
+ function u(e) {
65
+ let t = e instanceof Error ? e.message.toLowerCase() : String(e).toLowerCase();
66
+ return t.includes("rate limit exceeded") || t.includes("unauthorized") || t.includes("k8s api error 401") ? !1 : l(e) ? !0 : [
63
67
  "sandbox not found",
64
68
  "sandbox is not running",
65
69
  "sandbox service not available yet",
@@ -75,7 +79,7 @@ function l(e) {
75
79
  "proxy error: 503"
76
80
  ].some((e) => t.includes(e));
77
81
  }
78
- function u(t, n) {
82
+ function d(t, n) {
79
83
  let r = /* @__PURE__ */ new Map();
80
84
  for (let e of t) {
81
85
  let t = e.info?.id;
@@ -87,7 +91,7 @@ function u(t, n) {
87
91
  }
88
92
  return Array.from(r.values()).sort((t, n) => e(t) - e(n));
89
93
  }
90
- function d(n) {
94
+ function f(n) {
91
95
  let r = [];
92
96
  for (let i of n) {
93
97
  let n = i.info?.role;
@@ -102,4 +106,4 @@ function d(n) {
102
106
  return r;
103
107
  }
104
108
  //#endregion
105
- export { s as buildProgress, a as getAssistantMedia, l as isRecoverable, d as mapSessionToHistory, u as mergeMessagesById, c as sanitize };
109
+ export { s as buildProgress, a as getAssistantMedia, l as isReapedSandboxConnectionError, u as isRecoverable, f as mapSessionToHistory, d as mergeMessagesById, c as sanitize };
@@ -11,14 +11,18 @@ export declare class AssistantRuntimeManager {
11
11
  private readonly deps;
12
12
  private sandboxId;
13
13
  private sessionId;
14
+ private provisioningSandboxId;
15
+ private readonly quarantinedSandboxIds;
14
16
  private inFlight;
15
17
  private keepWarmTimer;
16
18
  private visibilityHandler;
17
19
  constructor(deps: RuntimeDeps);
18
20
  private key;
19
21
  private persist;
20
- /** Drop the warm refs after a recoverable error so the next call re-provisions. */
21
- reset(): void;
22
+ /** Drop warm refs and optionally quarantine a reaped runtime for this manager's lifetime. */
23
+ reset(options?: {
24
+ quarantineCurrentSandbox?: boolean;
25
+ }): void;
22
26
  /** Single-flight provision: find-or-create → ready → service-health → session. */
23
27
  ensureRuntime(): Promise<{
24
28
  sandboxId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/runtime.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,OAAO,KAAK,EAAE,aAAa,EAAE,2BAA2B,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAIxF,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB,cAAc,EAAE,MAAM,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,2BAA2B,CAAC;CACnD;AAED,qBAAa,uBAAuB;IAOtB,OAAO,CAAC,QAAQ,CAAC,IAAI;IANjC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,QAAQ,CAAkE;IAClF,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,iBAAiB,CAA6B;gBAEzB,IAAI,EAAE,WAAW;IAU9C,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,OAAO;IAWf,mFAAmF;IACnF,KAAK,IAAI,IAAI;IAOb,kFAAkF;IAClF,aAAa,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IA8DlE,gFAAgF;IAChF,OAAO,CAAC,KAAK,GAAE,YAAqB,GAAG,IAAI;IAsB3C,+EAA+E;IAC/E,aAAa,IAAI,IAAI;IAsBrB,YAAY,IAAI,IAAI;IAWpB,YAAY,IAAI,MAAM,GAAG,IAAI;CAG9B"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/runtime.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,OAAO,KAAK,EAAE,aAAa,EAAE,2BAA2B,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAIxF,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB,cAAc,EAAE,MAAM,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,2BAA2B,CAAC;CACnD;AAED,qBAAa,uBAAuB;IAStB,OAAO,CAAC,QAAQ,CAAC,IAAI;IARjC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,qBAAqB,CAAuB;IACpD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAqB;IAC3D,OAAO,CAAC,QAAQ,CAAkE;IAClF,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,iBAAiB,CAA6B;gBAEzB,IAAI,EAAE,WAAW;IAU9C,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,OAAO;IAWf,6FAA6F;IAC7F,KAAK,CAAC,OAAO,GAAE;QAAE,wBAAwB,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,IAAI;IAYjE,kFAAkF;IAClF,aAAa,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAsElE,gFAAgF;IAChF,OAAO,CAAC,KAAK,GAAE,YAAqB,GAAG,IAAI;IA4B3C,+EAA+E;IAC/E,aAAa,IAAI,IAAI;IAsBrB,YAAY,IAAI,IAAI;IAWpB,YAAY,IAAI,MAAM,GAAG,IAAI;CAG9B"}
@@ -3,6 +3,8 @@ import { createAssistantSandbox as e, createAssistantSession as t, extendAssista
3
3
  var s = 240 * 1e3, c = class {
4
4
  sandboxId = null;
5
5
  sessionId = null;
6
+ provisioningSandboxId = null;
7
+ quarantinedSandboxIds = /* @__PURE__ */ new Set();
6
8
  inFlight = null;
7
9
  keepWarmTimer = null;
8
10
  visibilityHandler = null;
@@ -20,8 +22,12 @@ var s = 240 * 1e3, c = class {
20
22
  this.sandboxId ? sessionStorage.setItem(this.key("sandbox"), this.sandboxId) : sessionStorage.removeItem(this.key("sandbox")), this.sessionId ? sessionStorage.setItem(this.key("session"), this.sessionId) : sessionStorage.removeItem(this.key("session"));
21
23
  } catch {}
22
24
  }
23
- reset() {
24
- this.sandboxId = null, this.sessionId = null, this.inFlight = null, this.persist();
25
+ reset(e = {}) {
26
+ if (e.quarantineCurrentSandbox) {
27
+ let e = this.sandboxId ?? this.provisioningSandboxId;
28
+ e && this.quarantinedSandboxIds.add(e);
29
+ }
30
+ this.sandboxId = null, this.sessionId = null, this.provisioningSandboxId = null, this.inFlight = null, this.persist();
25
31
  }
26
32
  ensureRuntime() {
27
33
  if (this.sandboxId && this.sessionId) return Promise.resolve({
@@ -35,11 +41,11 @@ var s = 240 * 1e3, c = class {
35
41
  return this.inFlight = (async () => {
36
42
  let s = this.deps.isProd(), c = this.sandboxId;
37
43
  if (!c) {
38
- if (c = await r(n, this.deps.mode, s, i), !c) {
44
+ if (c = await r(n, this.deps.mode, s, i, this.quarantinedSandboxIds), !c) {
39
45
  if (!i.accessToken) throw Error("The assistant requires an authenticated session. Please sign in again.");
40
46
  c = await e(this.deps.product, this.deps.mode, n, s, this.deps.ttlSeconds, i);
41
47
  }
42
- await o(c, n, i), await a(c, n, i), this.sandboxId = c;
48
+ this.provisioningSandboxId = c, await o(c, n, i), await a(c, n, i), this.sandboxId = c, this.provisioningSandboxId = null;
43
49
  }
44
50
  let l = this.sessionId;
45
51
  return l || (l = (await t(c, n, this.deps.mode, i)).sessionId, this.sessionId = l), this.persist(), {
@@ -59,7 +65,7 @@ var s = 240 * 1e3, c = class {
59
65
  if (e === "probe") {
60
66
  if (this.sandboxId || this.inFlight) return;
61
67
  let e = this.deps.getAuthContext();
62
- r(t, this.deps.mode, this.deps.isProd(), e).then(async (n) => {
68
+ r(t, this.deps.mode, this.deps.isProd(), e, this.quarantinedSandboxIds).then(async (n) => {
63
69
  n && (await a(n, t, e).catch(() => void 0), this.sandboxId = n, this.persist());
64
70
  }).catch(() => void 0);
65
71
  return;
@@ -84,7 +90,7 @@ var s = 240 * 1e3, c = class {
84
90
  this.keepWarmTimer &&= (clearInterval(this.keepWarmTimer), null), this.visibilityHandler && typeof document < "u" && (document.removeEventListener("visibilitychange", this.visibilityHandler), this.visibilityHandler = null);
85
91
  }
86
92
  getSandboxId() {
87
- return this.sandboxId;
93
+ return this.sandboxId ?? this.provisioningSandboxId;
88
94
  }
89
95
  };
90
96
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"sse-link.d.ts","sourceRoot":"","sources":["../../../../src/shared/graphql/links/sse-link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGlE,MAAM,WAAW,cAAc;IAC7B,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,OAAQ,SAAQ,UAAU;IACrC,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,KAAK,CAAU;gBAEX,OAAO,EAAE,cAAc;IAOnC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAIjD;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAQxC,OAAO,CAAC,SAAS,EAAE,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC;CAqJvD"}
1
+ {"version":3,"file":"sse-link.d.ts","sourceRoot":"","sources":["../../../../src/shared/graphql/links/sse-link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGlE,MAAM,WAAW,cAAc;IAC7B,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,OAAQ,SAAQ,UAAU;IACrC,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,KAAK,CAAU;gBAEX,OAAO,EAAE,cAAc;IAOnC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAIjD;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAQxC,OAAO,CAAC,SAAS,EAAE,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC;CA8JvD"}
@@ -26,11 +26,13 @@ var r = class extends e {
26
26
  }), i = new AbortController(), a = e.getContext().headers ?? {};
27
27
  return this.debug && console.log("[SSELink] Starting subscription:", e.operationName, "context-header-keys:", Object.keys(a)), fetch(this.url, {
28
28
  method: "POST",
29
+ credentials: "include",
29
30
  headers: {
30
31
  "Content-Type": "application/json",
31
32
  Accept: "text/event-stream",
32
33
  ...this.headers,
33
- ...a
34
+ ...a,
35
+ "Apollo-Require-Preflight": "true"
34
36
  },
35
37
  body: r,
36
38
  signal: i.signal
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/fe-libs",
3
- "version": "2026.825.5",
3
+ "version": "2026.825.7",
4
4
  "description": "Burdenoff frontend primitives and domain libraries",
5
5
  "type": "module",
6
6
  "bin": {
@@ -296,7 +296,7 @@
296
296
  "lint:sanity": "if [ \"${CI:-}\" = \"true\" ]; then bun run lint; else bun run lint -- --cache --cache-location .eslintcache; fi",
297
297
  "format": "prettier --config shared/config/prettier.config.mjs --write \"src/**/*.{ts,tsx}\" \"!src/config/*.config.ts\"",
298
298
  "type:check": "bash scripts/build-limits.sh tsc --noEmit",
299
- "test": "bun test scripts/graphql-schema-drift/__tests__ scripts/a11y-audit/__tests__ src/credentials src/storage src/shared/assistant src/shared/providers/AppShellProvider.test.ts src/shared/events/sinks/RybbitSink.test.ts src/shell-native src/shared/native src/chrome/__tests__ src/ui/__tests__",
299
+ "test": "bun test scripts/graphql-schema-drift/__tests__ scripts/a11y-audit/__tests__ src/credentials src/storage src/shared/assistant src/shared/graphql/links/sse-link.test.ts src/shared/providers/AppShellProvider.test.ts src/shared/events/sinks/RybbitSink.test.ts src/shell-native src/shared/native src/chrome/__tests__ src/ui/__tests__",
300
300
  "sanity": "bash scripts/build-limits.sh --gate bash -c 'bun run lint:sanity && bun run format && bun run type:check && bun run test && bun run build'",
301
301
  "switch:status": "bun scripts/deps-mode.ts status",
302
302
  "switch:remote": "bun scripts/deps-mode.ts remote",