@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.
- package/dist/shared/assistant/api.d.ts +17 -1
- package/dist/shared/assistant/api.d.ts.map +1 -1
- package/dist/shared/assistant/api.js +72 -57
- package/dist/shared/assistant/createSandboxAssistantTransport.d.ts.map +1 -1
- package/dist/shared/assistant/createSandboxAssistantTransport.js +59 -52
- package/dist/shared/assistant/operations.d.ts +1 -0
- package/dist/shared/assistant/operations.d.ts.map +1 -1
- package/dist/shared/assistant/operations.js +2 -2
- package/dist/shared/assistant/progress.d.ts +7 -0
- package/dist/shared/assistant/progress.d.ts.map +1 -1
- package/dist/shared/assistant/progress.js +8 -4
- package/dist/shared/assistant/runtime.d.ts +6 -2
- package/dist/shared/assistant/runtime.d.ts.map +1 -1
- package/dist/shared/assistant/runtime.js +12 -6
- package/dist/shared/graphql/links/sse-link.d.ts.map +1 -1
- package/dist/shared/graphql/links/sse-link.js +3 -1
- package/package.json +2 -2
|
@@ -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":"AAAA;;;;;GAKG;
|
|
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,
|
|
3
|
-
import { ASSISTANT_API_AUTH_STRATEGY as
|
|
4
|
-
import { getCapability as
|
|
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
|
|
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
|
|
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 ?? []
|
|
35
|
+
})).getActiveSandboxes ?? [], r, i, o, s);
|
|
36
36
|
}
|
|
37
|
-
function
|
|
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
|
|
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
|
-
})),
|
|
71
|
+
})), C(t) && i.push({
|
|
69
72
|
name: "AI_ASSISTANT_CONFIRM_WRITES",
|
|
70
73
|
value: "1"
|
|
71
74
|
}), i;
|
|
72
75
|
}
|
|
73
|
-
async function
|
|
74
|
-
let l =
|
|
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:
|
|
84
|
+
image: f(i, o),
|
|
82
85
|
ports: [{
|
|
83
86
|
containerPort: 8080,
|
|
84
87
|
name: "http"
|
|
85
88
|
}],
|
|
86
|
-
env:
|
|
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:
|
|
95
|
-
imageTag:
|
|
96
|
-
confirmWrites:
|
|
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
|
|
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
|
|
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
|
|
134
|
+
async function O(n, r, i, a = 3e5) {
|
|
132
135
|
let o = Date.now();
|
|
133
|
-
if (
|
|
136
|
+
if (g("waitForSandboxRunning") !== "unsupported") for (; Date.now() - o < a;) try {
|
|
134
137
|
let a = await t({
|
|
135
|
-
query:
|
|
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
|
-
|
|
148
|
+
v("waitForSandboxRunning");
|
|
146
149
|
let o = a.waitForSandboxRunning;
|
|
147
150
|
if (o?.status === "RUNNING") return;
|
|
148
|
-
|
|
151
|
+
D(o?.status, o?.errorMessage);
|
|
149
152
|
} catch (e) {
|
|
150
|
-
if (
|
|
151
|
-
|
|
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
|
|
160
|
+
let e = await E(n, r, i);
|
|
158
161
|
if (e?.status === "RUNNING") return;
|
|
159
|
-
|
|
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
|
|
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
|
|
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
|
|
178
|
-
return { sessionId: (await
|
|
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
|
|
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
|
|
189
|
-
let c = await
|
|
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
|
|
212
|
+
async function P(e, t, n, r, i) {
|
|
198
213
|
let a = `/sessions/${n}/messages?limit=${i?.limit ?? 50}`;
|
|
199
|
-
i?.sinceMs &&
|
|
200
|
-
let o = await
|
|
201
|
-
return typeof o.now == "number" &&
|
|
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
|
|
204
|
-
if (
|
|
218
|
+
async function F(e, t, n, r) {
|
|
219
|
+
if (g("sse") === "unsupported") return null;
|
|
205
220
|
try {
|
|
206
|
-
let i = await
|
|
207
|
-
return typeof i.url == "string" && typeof i.expiresAt == "number" ? (
|
|
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
|
-
}) : (
|
|
225
|
+
}) : (y("sse"), null);
|
|
211
226
|
} catch {
|
|
212
|
-
return
|
|
227
|
+
return y("sse"), null;
|
|
213
228
|
}
|
|
214
229
|
}
|
|
215
|
-
async function
|
|
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
|
|
229
|
-
await
|
|
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
|
|
232
|
-
return ((await
|
|
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
|
|
235
|
-
let i = await
|
|
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
|
|
242
|
-
let a = (await
|
|
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
|
|
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
|
|
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 {
|
|
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;
|
|
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
|
|
4
|
-
import { buildProgress as
|
|
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
|
|
7
|
-
function
|
|
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
|
|
15
|
-
let
|
|
16
|
-
product:
|
|
17
|
-
mode:
|
|
18
|
-
ttlSeconds:
|
|
19
|
-
isProd:
|
|
20
|
-
getWorkspaceId:
|
|
21
|
-
getAuthContext:
|
|
22
|
-
}),
|
|
23
|
-
async function
|
|
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:
|
|
26
|
-
|
|
27
|
-
let
|
|
28
|
-
await a(
|
|
29
|
-
let
|
|
30
|
-
if (
|
|
31
|
-
|
|
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
|
-
|
|
33
|
+
if (p) {
|
|
34
|
+
let e = p;
|
|
35
|
+
p = null, e();
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
_.onmessage = e, _.addEventListener("message.part.updated", e), _.addEventListener("message.updated", e), _.onerror = () => {
|
|
39
|
+
_?.close(), _ = null;
|
|
40
40
|
};
|
|
41
41
|
} catch {
|
|
42
|
-
|
|
42
|
+
_ = null;
|
|
43
43
|
}
|
|
44
|
-
let
|
|
44
|
+
let S = (t) => new Promise((n) => {
|
|
45
45
|
if (e.signal.aborted) return n();
|
|
46
46
|
let r = setTimeout(() => {
|
|
47
|
-
|
|
47
|
+
p = null, n();
|
|
48
48
|
}, t);
|
|
49
|
-
|
|
49
|
+
p = () => {
|
|
50
50
|
clearTimeout(r), n();
|
|
51
51
|
};
|
|
52
|
-
}),
|
|
53
|
-
for (; Date.now() <
|
|
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(
|
|
56
|
-
D =
|
|
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 =
|
|
62
|
-
let i = Date.now() -
|
|
63
|
-
await (
|
|
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 (
|
|
66
|
-
let A = await n(
|
|
67
|
-
if (
|
|
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,
|
|
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:
|
|
71
|
+
return { text: f(j.content) };
|
|
72
72
|
} catch (n) {
|
|
73
|
-
if (
|
|
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 =
|
|
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 =
|
|
82
|
-
return
|
|
83
|
-
e(t) &&
|
|
84
|
-
}),
|
|
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) =>
|
|
87
|
-
suspend: () =>
|
|
93
|
+
prewarm: (e) => T.prewarm(e),
|
|
94
|
+
suspend: () => T.stopKeepWarm()
|
|
88
95
|
};
|
|
89
96
|
}
|
|
90
97
|
//#endregion
|
|
91
|
-
export {
|
|
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",
|
|
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 {
|
|
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,
|
|
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("
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
21
|
-
reset(
|
|
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;
|
|
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
|
-
|
|
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;
|
|
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.
|
|
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",
|