@burdenoff/fe-libs 2026.919.1 → 2026.920.2
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/adminModeSendGate.d.ts +43 -0
- package/dist/shared/assistant/adminModeSendGate.d.ts.map +1 -1
- package/dist/shared/assistant/adminModeSendGate.js +33 -18
- package/dist/shared/assistant/api.d.ts +17 -0
- package/dist/shared/assistant/api.d.ts.map +1 -1
- package/dist/shared/assistant/api.js +88 -66
- package/dist/shared/assistant/attachmentTurn.d.ts +21 -0
- package/dist/shared/assistant/attachmentTurn.d.ts.map +1 -0
- package/dist/shared/assistant/attachmentTurn.js +48 -0
- package/dist/shared/assistant/attachments.d.ts +85 -6
- package/dist/shared/assistant/attachments.d.ts.map +1 -1
- package/dist/shared/assistant/attachments.js +165 -112
- package/dist/shared/assistant/conversation.d.ts +21 -0
- package/dist/shared/assistant/conversation.d.ts.map +1 -1
- package/dist/shared/assistant/documentExtract.d.ts +11 -2
- package/dist/shared/assistant/documentExtract.d.ts.map +1 -1
- package/dist/shared/assistant/documentExtract.js +39 -37
- package/dist/shared/assistant/gatewayLimits.d.ts +10 -0
- package/dist/shared/assistant/gatewayLimits.d.ts.map +1 -1
- package/dist/shared/assistant/gatewayLimits.js +2 -2
- package/dist/shared/assistant/i18nManifest.d.ts +5 -0
- package/dist/shared/assistant/i18nManifest.d.ts.map +1 -1
- package/dist/shared/assistant/i18nManifest.js +6 -1
- package/dist/shared/assistant/index.d.ts +2 -0
- package/dist/shared/assistant/index.d.ts.map +1 -1
- package/dist/shared/assistant/modeCapabilities.d.ts +25 -0
- package/dist/shared/assistant/modeCapabilities.d.ts.map +1 -1
- package/dist/shared/assistant/modeCapabilities.js +6 -2
- package/dist/shared/assistant/store.d.ts +26 -5
- package/dist/shared/assistant/store.d.ts.map +1 -1
- package/dist/shared/assistant/store.js +28 -18
- package/dist/shared/assistant/ui/AssistantApiCallsConsentDialog.d.ts +27 -10
- package/dist/shared/assistant/ui/AssistantApiCallsConsentDialog.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantApiCallsConsentDialog.js +22 -16
- package/dist/shared/assistant/ui/AssistantChatArea.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantChatArea.js +305 -272
- package/dist/shared/assistant/ui/composer/AssistantComposer.d.ts +12 -0
- package/dist/shared/assistant/ui/composer/AssistantComposer.d.ts.map +1 -1
- package/dist/shared/assistant/ui/composer/AssistantComposer.js +57 -57
- package/dist/shared/assistant/useAssistantAttachments.d.ts +12 -1
- package/dist/shared/assistant/useAssistantAttachments.d.ts.map +1 -1
- package/dist/shared/assistant/useAssistantAttachments.js +98 -98
- package/dist/shared/assistant/writeModeConsent.d.ts +99 -0
- package/dist/shared/assistant/writeModeConsent.d.ts.map +1 -0
- package/dist/shared/assistant/writeModeConsent.js +48 -0
- package/dist/shared-assistant.js +116 -114
- package/package.json +1 -1
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { AssistantModeCapabilities } from './modeCapabilities';
|
|
2
|
+
import { AssistantModeConfig } from './conversation';
|
|
3
|
+
import { AssistantMode } from './types';
|
|
1
4
|
/** The role check's latest answer: is it still running, and did it say yes? */
|
|
2
5
|
export interface AdminModeAccess {
|
|
3
6
|
readonly loading: boolean;
|
|
@@ -37,6 +40,8 @@ export declare const ADMIN_MODE_ACCESS_WAIT_MS = 10000;
|
|
|
37
40
|
* behind the requested one), not here; the mode list has the same window today.
|
|
38
41
|
*/
|
|
39
42
|
export interface AdminModeAccessGate {
|
|
43
|
+
/** The latest answer, for the final synchronous validation after a wait. */
|
|
44
|
+
read(): AdminModeAccess;
|
|
40
45
|
/** Record the check's current state, releasing every held send once it lands. */
|
|
41
46
|
update(access: AdminModeAccess): void;
|
|
42
47
|
/**
|
|
@@ -78,4 +83,42 @@ export declare function createAdminModeAccessGate(initial: AdminModeAccess): Adm
|
|
|
78
83
|
export declare function adminOnlyModeSendRefusalAfterAccess(config: {
|
|
79
84
|
readonly requiresAdmin?: boolean;
|
|
80
85
|
} | null | undefined, gate: AdminModeAccessGate, timeoutMs?: number): Promise<string | null>;
|
|
86
|
+
/**
|
|
87
|
+
* Why a send in a mode the product does not offer must not go out, or null —
|
|
88
|
+
* decided when the role check has answered, against the product's mode list AS
|
|
89
|
+
* IT IS THEN (BOFF-7308).
|
|
90
|
+
*
|
|
91
|
+
* An unlisted mode gets the same role-check window as the reset effect, and
|
|
92
|
+
* `readConfig` is read again afterwards. This honours a list that arrives
|
|
93
|
+
* DURING that check, but is not a mode-list readiness signal: the product
|
|
94
|
+
* contract cannot distinguish a loading list from a settled empty one.
|
|
95
|
+
*
|
|
96
|
+
* A mode that IS listed is never held: the common path pays nothing.
|
|
97
|
+
*/
|
|
98
|
+
export declare function unofferedModeSendRefusalAfterAccess(mode: AssistantMode, readConfig: () => {
|
|
99
|
+
readonly id: AssistantMode;
|
|
100
|
+
} | null | undefined, gate: AdminModeAccessGate, timeoutMs?: number): Promise<string | null>;
|
|
101
|
+
/** One validated snapshot for the turn's capabilities, consent and voice gates. */
|
|
102
|
+
export interface AssistantSendMode {
|
|
103
|
+
readonly config: AssistantModeConfig | undefined;
|
|
104
|
+
readonly capabilities: AssistantModeCapabilities;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* The one snapshot a send is judged on, taken after BOTH possible access waits
|
|
108
|
+
* (BOFF-7308).
|
|
109
|
+
*
|
|
110
|
+
* ★★ Everything downstream reads THIS, not a value captured when the send
|
|
111
|
+
* began. A held send used to re-read `requiresAdmin` from the live list while
|
|
112
|
+
* keeping the capabilities resolved before the wait, so a turn in a mode whose
|
|
113
|
+
* config landed during the hold ran on built-in defaults: the wrong stream
|
|
114
|
+
* budget, and artifacts never collected for a mode configured to produce them.
|
|
115
|
+
* A removed mode must not fall back to its old config either.
|
|
116
|
+
*
|
|
117
|
+
* ★ Roles are the only thing waited for. A mode list that loads independently
|
|
118
|
+
* of them needs a readiness signal the product seam does not carry today —
|
|
119
|
+
* `AssistantProductProvider` has no "modes still loading" flag, and a settled
|
|
120
|
+
* empty list is indistinguishable from a loading one. Adding that contract,
|
|
121
|
+
* shared with the reset effect, is a separate change.
|
|
122
|
+
*/
|
|
123
|
+
export declare function resolveAssistantSendModeAfterAccess(mode: AssistantMode, readConfig: () => AssistantModeConfig | undefined, gate: AdminModeAccessGate, timeoutMs?: number): Promise<AssistantSendMode>;
|
|
81
124
|
//# sourceMappingURL=adminModeSendGate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adminModeSendGate.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/adminModeSendGate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"adminModeSendGate.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/adminModeSendGate.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,yBAAyB,EAC/B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,+EAA+E;AAC/E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;CACpC;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,WAAW,mBAAmB;IAClC,4EAA4E;IAC5E,IAAI,IAAI,eAAe,CAAC;IACxB,iFAAiF;IACjF,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IACtC;;;OAGG;IACH,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACnD;;;;;;;;;;;;;OAaG;IACH,OAAO,IAAI,IAAI,CAAC;IAChB,gFAAgF;IAChF,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAOD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,eAAe,GACvB,mBAAmB,CAwDrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mCAAmC,CACvD,MAAM,EAAE;IAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,EAC/D,IAAI,EAAE,mBAAmB,EACzB,SAAS,GAAE,MAAkC,GAC5C,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAGxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mCAAmC,CACvD,IAAI,EAAE,aAAa,EACnB,UAAU,EAAE,MAAM;IAAE,QAAQ,CAAC,EAAE,EAAE,aAAa,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,EACnE,IAAI,EAAE,mBAAmB,EACzB,SAAS,GAAE,MAAkC,GAC5C,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAIxB;AAED,mFAAmF;AACnF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,YAAY,EAAE,yBAAyB,CAAC;CAClD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,mCAAmC,CACvD,IAAI,EAAE,aAAa,EACnB,UAAU,EAAE,MAAM,mBAAmB,GAAG,SAAS,EACjD,IAAI,EAAE,mBAAmB,EACzB,SAAS,GAAE,MAAkC,GAC5C,OAAO,CAAC,iBAAiB,CAAC,CA6B5B"}
|
|
@@ -1,37 +1,52 @@
|
|
|
1
|
-
import { adminOnlyModeSendRefusal as e } from "./modeCapabilities.js";
|
|
1
|
+
import { adminOnlyModeSendRefusal as e, resolveAssistantModeCapabilities as t, unofferedModeSendRefusal as n } from "./modeCapabilities.js";
|
|
2
2
|
//#region src/shared/assistant/adminModeSendGate.ts
|
|
3
|
-
var
|
|
4
|
-
function
|
|
5
|
-
let
|
|
6
|
-
let t =
|
|
7
|
-
|
|
3
|
+
var r = 1e4;
|
|
4
|
+
function i(e) {
|
|
5
|
+
let t = e, n = [], i = (e) => {
|
|
6
|
+
let t = n;
|
|
7
|
+
n = [];
|
|
8
8
|
for (let n of t) n.timer !== null && clearTimeout(n.timer), n.settle(e);
|
|
9
9
|
};
|
|
10
10
|
return {
|
|
11
|
+
read: () => t,
|
|
11
12
|
update(e) {
|
|
12
|
-
|
|
13
|
+
t = e, e.loading || i(e);
|
|
13
14
|
},
|
|
14
|
-
wait(e =
|
|
15
|
-
return
|
|
15
|
+
wait(e = r) {
|
|
16
|
+
return t.loading ? new Promise((r) => {
|
|
16
17
|
let i = {
|
|
17
|
-
settle:
|
|
18
|
+
settle: r,
|
|
18
19
|
timer: null
|
|
19
20
|
};
|
|
20
21
|
i.timer = setTimeout(() => {
|
|
21
|
-
|
|
22
|
-
}, e),
|
|
23
|
-
}) : Promise.resolve(
|
|
22
|
+
n = n.filter((e) => e !== i), r(t);
|
|
23
|
+
}, e), n.push(i);
|
|
24
|
+
}) : Promise.resolve(t);
|
|
24
25
|
},
|
|
25
26
|
abandon() {
|
|
26
|
-
i(
|
|
27
|
+
i(t);
|
|
27
28
|
},
|
|
28
29
|
get pendingCount() {
|
|
29
|
-
return
|
|
30
|
+
return n.length;
|
|
30
31
|
}
|
|
31
32
|
};
|
|
32
33
|
}
|
|
33
|
-
async function
|
|
34
|
-
return
|
|
34
|
+
async function a(t, n, i = r) {
|
|
35
|
+
return t?.requiresAdmin ? e(t, await n.wait(i)) : null;
|
|
36
|
+
}
|
|
37
|
+
async function o(e, t, i, a = r) {
|
|
38
|
+
return n(e, t()) === null ? null : (await i.wait(a), n(e, t()));
|
|
39
|
+
}
|
|
40
|
+
async function s(i, a, s, c = r) {
|
|
41
|
+
let l = Date.now() + c, u = await o(i, a, s, c);
|
|
42
|
+
if (u) throw Error(u);
|
|
43
|
+
a()?.requiresAdmin && await s.wait(Math.max(0, l - Date.now()));
|
|
44
|
+
let d = a(), f = t(i, d), p = n(i, d) ?? (f.provisionable ? null : "This assistant mode is not available here. Switch to another mode and send again.") ?? e(d, s.read());
|
|
45
|
+
if (p) throw Error(p);
|
|
46
|
+
return {
|
|
47
|
+
config: d,
|
|
48
|
+
capabilities: f
|
|
49
|
+
};
|
|
35
50
|
}
|
|
36
51
|
//#endregion
|
|
37
|
-
export {
|
|
52
|
+
export { r as ADMIN_MODE_ACCESS_WAIT_MS, a as adminOnlyModeSendRefusalAfterAccess, i as createAdminModeAccessGate, s as resolveAssistantSendModeAfterAccess, o as unofferedModeSendRefusalAfterAccess };
|
|
@@ -150,6 +150,23 @@ export declare function buildPromptRequestBody(args: {
|
|
|
150
150
|
pageContext: Record<string, unknown> | undefined;
|
|
151
151
|
parts?: AssistantPromptPart[];
|
|
152
152
|
}): Record<string, unknown>;
|
|
153
|
+
export interface AssistantPromptGatewayRequest {
|
|
154
|
+
sandboxId: string;
|
|
155
|
+
workspaceId: string;
|
|
156
|
+
sessionId: string;
|
|
157
|
+
mode: AssistantMode;
|
|
158
|
+
prompt: string;
|
|
159
|
+
pageContext: Record<string, unknown> | undefined;
|
|
160
|
+
authContext: AssistantSandboxAuthContext;
|
|
161
|
+
parts?: AssistantPromptPart[];
|
|
162
|
+
}
|
|
163
|
+
/** The actual unbatched GraphQL body, including context and forwarded-token overhead. */
|
|
164
|
+
export declare function buildPromptGatewayRequest(args: AssistantPromptGatewayRequest): {
|
|
165
|
+
query: string;
|
|
166
|
+
operationName: string;
|
|
167
|
+
variables: Record<string, unknown>;
|
|
168
|
+
};
|
|
169
|
+
export declare function promptGatewayRequestBytes(args: AssistantPromptGatewayRequest): number;
|
|
153
170
|
export declare function sendAssistantPromptAsync(sandboxId: string, workspaceId: string, sessionId: string, prompt: string, mode: AssistantMode, pageContext: Record<string, unknown> | undefined, authContext: AssistantSandboxAuthContext,
|
|
154
171
|
/** Multimodal extras. Optional + trailing, so every existing call site is unaffected. */
|
|
155
172
|
options?: {
|
|
@@ -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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"}
|
|
@@ -2,36 +2,42 @@ import { buildSandboxContextInput as e, executeSandboxGraphQL as t } from "./gat
|
|
|
2
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
3
|
import { ASSISTANT_API_AUTH_STRATEGY as d, getImageForMode as f, getImageTagForMode as p, getResourcesForMode as m, resolveSandboxAssistantMode as h } from "./images.js";
|
|
4
4
|
import { getCapability as g, isUnknownFieldError as _, markSupported as v, markUnsupported as y } from "./capabilities.js";
|
|
5
|
+
import { REQUEST_TOO_LARGE_REFUSAL as b } from "./gatewayLimits.js";
|
|
5
6
|
//#region src/shared/assistant/api.ts
|
|
6
|
-
function
|
|
7
|
+
function x(e) {
|
|
7
8
|
return e === "assistant";
|
|
8
9
|
}
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
function S(t, n, r, i, a, o, c) {
|
|
11
|
+
return {
|
|
11
12
|
query: s,
|
|
12
13
|
operationName: "ProxySandboxRequest",
|
|
13
14
|
variables: { input: {
|
|
14
|
-
sandboxId:
|
|
15
|
-
path:
|
|
16
|
-
method:
|
|
17
|
-
body:
|
|
18
|
-
context: e(
|
|
19
|
-
...
|
|
20
|
-
forwardedAuthToken:
|
|
21
|
-
forwardedWorkspaceToken:
|
|
15
|
+
sandboxId: t,
|
|
16
|
+
path: r,
|
|
17
|
+
method: i,
|
|
18
|
+
body: a,
|
|
19
|
+
context: e(n, c),
|
|
20
|
+
...x(o) ? {
|
|
21
|
+
forwardedAuthToken: c?.accessToken ?? void 0,
|
|
22
|
+
forwardedWorkspaceToken: c?.workspaceToken ?? void 0
|
|
22
23
|
} : {}
|
|
23
|
-
} }
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
} }
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
async function C(e, n, r, i, a, o, s) {
|
|
28
|
+
let c = (await t({
|
|
29
|
+
...S(e, n, r, i, a, o, s),
|
|
30
|
+
workspaceId: n,
|
|
31
|
+
authContext: s
|
|
26
32
|
})).proxySandboxRequest;
|
|
27
|
-
if (!
|
|
28
|
-
let e =
|
|
29
|
-
throw Error(e?.error ?? `Proxy error: ${
|
|
33
|
+
if (!c || c.status >= 400) {
|
|
34
|
+
let e = c?.body;
|
|
35
|
+
throw Error(e?.error ?? `Proxy error: ${c?.status ?? "unknown"}`);
|
|
30
36
|
}
|
|
31
|
-
return
|
|
37
|
+
return c.body;
|
|
32
38
|
}
|
|
33
|
-
async function
|
|
34
|
-
return
|
|
39
|
+
async function w(n, r, i, o, s, c = /* @__PURE__ */ new Set()) {
|
|
40
|
+
return T((await t({
|
|
35
41
|
query: a,
|
|
36
42
|
operationName: "GetActiveSandboxes",
|
|
37
43
|
variables: { context: e(n, s) },
|
|
@@ -39,13 +45,13 @@ async function S(n, r, i, o, s, c = /* @__PURE__ */ new Set()) {
|
|
|
39
45
|
authContext: s
|
|
40
46
|
})).getActiveSandboxes ?? [], r, i, o, s, c);
|
|
41
47
|
}
|
|
42
|
-
function
|
|
43
|
-
return e.find((e) => !a.has(e.id) && (e.status === "RUNNING" || e.status === "PROVISIONING" || e.status === "PENDING") && e.template === "AI_BUILDER" && h(e, [n]) === n && (!i.userId || e.createdBy === i.userId) && e.metadata?.authStrategy === "sandbox-app-client-headers-v1" && e.metadata?.assistantProduct === t && (!
|
|
48
|
+
function T(e, t, n, r, i, a = /* @__PURE__ */ new Set()) {
|
|
49
|
+
return e.find((e) => !a.has(e.id) && (e.status === "RUNNING" || e.status === "PROVISIONING" || e.status === "PENDING") && e.template === "AI_BUILDER" && h(e, [n]) === n && (!i.userId || e.createdBy === i.userId) && e.metadata?.authStrategy === "sandbox-app-client-headers-v1" && e.metadata?.assistantProduct === t && (!E(n) || e.metadata?.confirmWrites === !0))?.id ?? null;
|
|
44
50
|
}
|
|
45
|
-
function
|
|
51
|
+
function E(e) {
|
|
46
52
|
return e === "api-calls";
|
|
47
53
|
}
|
|
48
|
-
function
|
|
54
|
+
function D(e, t, n, r) {
|
|
49
55
|
let i = [
|
|
50
56
|
{
|
|
51
57
|
name: "AI_ASSISTANT_MODE",
|
|
@@ -73,13 +79,13 @@ function T(e, t, n, r) {
|
|
|
73
79
|
}), r.workspaceToken && i.push({
|
|
74
80
|
name: "WORKSPACE_AUTH_TOKEN",
|
|
75
81
|
value: r.workspaceToken
|
|
76
|
-
})),
|
|
82
|
+
})), E(t) && i.push({
|
|
77
83
|
name: "AI_ASSISTANT_CONFIRM_WRITES",
|
|
78
84
|
value: "1"
|
|
79
85
|
}), i;
|
|
80
86
|
}
|
|
81
|
-
async function
|
|
82
|
-
let l = m(i), u =
|
|
87
|
+
async function O(n, i, a, o, s, c) {
|
|
88
|
+
let l = m(i), u = D(n, i, a, c), h = (t) => ({
|
|
83
89
|
name: `ai-assistant-${i}-${Date.now()}`,
|
|
84
90
|
description: `AI Assistant sandbox (${i} mode)`,
|
|
85
91
|
template: "AI_BUILDER",
|
|
@@ -102,7 +108,7 @@ async function E(n, i, a, o, s, c) {
|
|
|
102
108
|
assistantOrganizationId: c.organizationId ?? null,
|
|
103
109
|
authStrategy: d,
|
|
104
110
|
imageTag: p(i, o),
|
|
105
|
-
confirmWrites:
|
|
111
|
+
confirmWrites: E(i)
|
|
106
112
|
},
|
|
107
113
|
context: e(a, c)
|
|
108
114
|
}), g = (e) => t({
|
|
@@ -122,7 +128,7 @@ async function E(n, i, a, o, s, c) {
|
|
|
122
128
|
if (!_?.createSandbox?.id) throw Error("createSandbox returned empty response");
|
|
123
129
|
return _.createSandbox.id;
|
|
124
130
|
}
|
|
125
|
-
async function
|
|
131
|
+
async function k(n, r, i) {
|
|
126
132
|
return (await t({
|
|
127
133
|
query: o,
|
|
128
134
|
operationName: "GetSandbox",
|
|
@@ -134,10 +140,10 @@ async function D(n, r, i) {
|
|
|
134
140
|
authContext: i
|
|
135
141
|
})).getSandbox;
|
|
136
142
|
}
|
|
137
|
-
function
|
|
143
|
+
function A(e, t) {
|
|
138
144
|
if (e === "FAILED" || e === "STOPPED" || e === "EXPIRED") throw Error(t ? `Sandbox ${e.toLowerCase()}: ${t}` : `Sandbox ${e.toLowerCase()}`);
|
|
139
145
|
}
|
|
140
|
-
async function
|
|
146
|
+
async function j(n, r, i, a = 3e5) {
|
|
141
147
|
let o = Date.now();
|
|
142
148
|
if (g("waitForSandboxRunning") !== "unsupported") for (; Date.now() - o < a;) try {
|
|
143
149
|
let a = await t({
|
|
@@ -154,7 +160,7 @@ async function k(n, r, i, a = 3e5) {
|
|
|
154
160
|
v("waitForSandboxRunning");
|
|
155
161
|
let o = a.waitForSandboxRunning;
|
|
156
162
|
if (o?.status === "RUNNING") return;
|
|
157
|
-
|
|
163
|
+
A(o?.status, o?.errorMessage);
|
|
158
164
|
} catch (e) {
|
|
159
165
|
if (_(e)) {
|
|
160
166
|
y("waitForSandboxRunning");
|
|
@@ -163,17 +169,17 @@ async function k(n, r, i, a = 3e5) {
|
|
|
163
169
|
throw e;
|
|
164
170
|
}
|
|
165
171
|
for (; Date.now() - o < a;) {
|
|
166
|
-
let e = await
|
|
172
|
+
let e = await k(n, r, i);
|
|
167
173
|
if (e?.status === "RUNNING") return;
|
|
168
|
-
|
|
174
|
+
A(e?.status, e?.errorMessage), await new Promise((e) => setTimeout(e, 2e3));
|
|
169
175
|
}
|
|
170
176
|
throw Error("Sandbox startup timed out");
|
|
171
177
|
}
|
|
172
|
-
async function
|
|
178
|
+
async function M(e, t, n, r, i = 9e4) {
|
|
173
179
|
let a = Date.now();
|
|
174
180
|
for (; Date.now() - a < i;) {
|
|
175
181
|
try {
|
|
176
|
-
await
|
|
182
|
+
await C(e, t, "/health", "GET", void 0, n, r);
|
|
177
183
|
return;
|
|
178
184
|
} catch (e) {
|
|
179
185
|
let t = e instanceof Error ? e.message : String(e);
|
|
@@ -183,20 +189,20 @@ async function A(e, t, n, r, i = 9e4) {
|
|
|
183
189
|
}
|
|
184
190
|
throw Error("Assistant service did not become healthy before timeout");
|
|
185
191
|
}
|
|
186
|
-
async function
|
|
187
|
-
return { sessionId: (await
|
|
192
|
+
async function N(e, t, n, r) {
|
|
193
|
+
return { sessionId: (await C(e, t, "/sessions", "POST", { mode: n }, n, r)).session.id };
|
|
188
194
|
}
|
|
189
|
-
async function
|
|
190
|
-
let a = await
|
|
195
|
+
async function P(e, t, n, r, i) {
|
|
196
|
+
let a = await C(e, t, `/write-confirmations/${encodeURIComponent(n)}/approve`, "POST", {}, r, i);
|
|
191
197
|
if (a?.approved !== !0) throw Error(typeof a?.error == "string" ? a.error : "The change could not be approved. It may have expired — ask the assistant to try again.");
|
|
192
198
|
}
|
|
193
|
-
function
|
|
199
|
+
function F(e, t, n, r, i, a = /* @__PURE__ */ new Set()) {
|
|
194
200
|
return i.userId ? e.filter((e) => e.metadata?.authStrategy === "sandbox-app-client-headers-v1" && e.createdBy === i.userId && !(!a.has(e.id) && e.metadata?.assistantProduct === t && h(e, [n]) === n)).map((e) => e.id) : [];
|
|
195
201
|
}
|
|
196
|
-
async function
|
|
202
|
+
async function I(n, r, i, o, s, c = /* @__PURE__ */ new Set()) {
|
|
197
203
|
let l;
|
|
198
204
|
try {
|
|
199
|
-
l =
|
|
205
|
+
l = F((await t({
|
|
200
206
|
query: a,
|
|
201
207
|
operationName: "GetActiveSandboxes",
|
|
202
208
|
variables: { context: e(n, s) },
|
|
@@ -208,13 +214,13 @@ async function P(n, r, i, o, s, c = /* @__PURE__ */ new Set()) {
|
|
|
208
214
|
}
|
|
209
215
|
return (await Promise.all(l.map(async (e) => {
|
|
210
216
|
try {
|
|
211
|
-
return await
|
|
217
|
+
return await L(e, n, s), e;
|
|
212
218
|
} catch {
|
|
213
219
|
return null;
|
|
214
220
|
}
|
|
215
221
|
}))).filter((e) => e !== null);
|
|
216
222
|
}
|
|
217
|
-
async function
|
|
223
|
+
async function L(n, r, i) {
|
|
218
224
|
await t({
|
|
219
225
|
query: l,
|
|
220
226
|
operationName: "StopAssistantSandbox",
|
|
@@ -226,7 +232,7 @@ async function F(n, r, i) {
|
|
|
226
232
|
authContext: i
|
|
227
233
|
});
|
|
228
234
|
}
|
|
229
|
-
function
|
|
235
|
+
function R(e) {
|
|
230
236
|
let { mode: t, prompt: n, pageContext: r, parts: i } = e, a = {
|
|
231
237
|
mode: t,
|
|
232
238
|
prompt: n,
|
|
@@ -234,8 +240,24 @@ function I(e) {
|
|
|
234
240
|
};
|
|
235
241
|
return i && i.length > 0 && (a.parts = i), a;
|
|
236
242
|
}
|
|
237
|
-
|
|
238
|
-
|
|
243
|
+
function z(e) {
|
|
244
|
+
return S(e.sandboxId, e.workspaceId, `/sessions/${e.sessionId}/prompt-async`, "POST", R(e), e.mode, e.authContext);
|
|
245
|
+
}
|
|
246
|
+
function B(e) {
|
|
247
|
+
return new TextEncoder().encode(JSON.stringify(z(e))).byteLength;
|
|
248
|
+
}
|
|
249
|
+
async function V(e, t, n, r, i, a, o, s) {
|
|
250
|
+
if (B({
|
|
251
|
+
sandboxId: e,
|
|
252
|
+
workspaceId: t,
|
|
253
|
+
sessionId: n,
|
|
254
|
+
prompt: r,
|
|
255
|
+
mode: i,
|
|
256
|
+
pageContext: a,
|
|
257
|
+
authContext: o,
|
|
258
|
+
parts: s?.parts
|
|
259
|
+
}) > 262144) throw Error(b);
|
|
260
|
+
let c = await C(e, t, `/sessions/${n}/prompt-async`, "POST", R({
|
|
239
261
|
mode: i,
|
|
240
262
|
prompt: r,
|
|
241
263
|
pageContext: a,
|
|
@@ -243,16 +265,16 @@ async function L(e, t, n, r, i, a, o, s) {
|
|
|
243
265
|
}), i, o);
|
|
244
266
|
return { messageID: typeof c.messageID == "string" ? c.messageID : void 0 };
|
|
245
267
|
}
|
|
246
|
-
async function
|
|
268
|
+
async function H(e, t, n, r, i, a) {
|
|
247
269
|
let o = `/sessions/${n}/messages?limit=${a?.limit ?? 50}`;
|
|
248
270
|
a?.sinceMs && g("sinceParam") !== "unsupported" && (o += `&since=${a.sinceMs}`);
|
|
249
|
-
let s = await
|
|
271
|
+
let s = await C(e, t, o, "GET", void 0, r, i);
|
|
250
272
|
return typeof s.now == "number" && v("sinceParam"), s.messages ?? [];
|
|
251
273
|
}
|
|
252
|
-
async function
|
|
274
|
+
async function U(e, t, n, r, i) {
|
|
253
275
|
if (g("sse") === "unsupported") return null;
|
|
254
276
|
try {
|
|
255
|
-
let a = await
|
|
277
|
+
let a = await C(e, t, `/sessions/${n}/stream-url`, "GET", void 0, r, i);
|
|
256
278
|
return typeof a.url == "string" && typeof a.expiresAt == "number" ? (v("sse"), {
|
|
257
279
|
url: a.url,
|
|
258
280
|
expiresAt: a.expiresAt
|
|
@@ -261,7 +283,7 @@ async function z(e, t, n, r, i) {
|
|
|
261
283
|
return y("sse"), null;
|
|
262
284
|
}
|
|
263
285
|
}
|
|
264
|
-
async function
|
|
286
|
+
async function W(n, r, a, o) {
|
|
265
287
|
await t({
|
|
266
288
|
query: i,
|
|
267
289
|
operationName: "ExtendSandboxTtl",
|
|
@@ -274,28 +296,28 @@ async function B(n, r, a, o) {
|
|
|
274
296
|
authContext: o
|
|
275
297
|
});
|
|
276
298
|
}
|
|
277
|
-
async function
|
|
278
|
-
await
|
|
299
|
+
async function G(e, t, n, r, i) {
|
|
300
|
+
await C(e, t, `/sessions/${n}/heartbeat`, "POST", void 0, r, i).catch(() => void 0);
|
|
279
301
|
}
|
|
280
|
-
async function
|
|
302
|
+
async function K(e, t, n, r, i) {
|
|
281
303
|
try {
|
|
282
|
-
return (await
|
|
304
|
+
return (await C(e, t, `/sessions/${n}/abort`, "POST", void 0, r, i))?.aborted === !0;
|
|
283
305
|
} catch {
|
|
284
306
|
return !1;
|
|
285
307
|
}
|
|
286
308
|
}
|
|
287
|
-
async function
|
|
288
|
-
return ((await
|
|
309
|
+
async function q(e, t, n, r, i) {
|
|
310
|
+
return ((await C(e, t, `/sessions/${n}/artifacts`, "GET", void 0, r, i)).artifacts ?? []).filter((e) => !e.name.startsWith("."));
|
|
289
311
|
}
|
|
290
|
-
async function
|
|
291
|
-
let a = await
|
|
312
|
+
async function J(e, t, n, r, i) {
|
|
313
|
+
let a = await C(e, t, `/sessions/${n}`, "GET", void 0, r, i);
|
|
292
314
|
return {
|
|
293
315
|
id: a.session?.id ?? n,
|
|
294
316
|
mode: a.mode ?? "unknown"
|
|
295
317
|
};
|
|
296
318
|
}
|
|
297
|
-
async function
|
|
298
|
-
let o = (await
|
|
319
|
+
async function Y(e, t, n, r, i, a) {
|
|
320
|
+
let o = (await C(e, t, `/sessions/${n}/artifacts/download?path=${encodeURIComponent(r)}`, "GET", void 0, i, a)).artifact;
|
|
299
321
|
if (!o) throw Error("Artifact download returned an empty response");
|
|
300
322
|
return {
|
|
301
323
|
filename: o.filename,
|
|
@@ -303,7 +325,7 @@ async function G(e, t, n, r, i, a) {
|
|
|
303
325
|
contentBase64: o.contentBase64
|
|
304
326
|
};
|
|
305
327
|
}
|
|
306
|
-
async function
|
|
328
|
+
async function X(e, r) {
|
|
307
329
|
return (await t({
|
|
308
330
|
query: n,
|
|
309
331
|
operationName: "CheckAiCredits",
|
|
@@ -312,7 +334,7 @@ async function K(e, r) {
|
|
|
312
334
|
authContext: r
|
|
313
335
|
})).checkAiCredits;
|
|
314
336
|
}
|
|
315
|
-
async function
|
|
337
|
+
async function Z(e, n, r, i, a, o) {
|
|
316
338
|
let s = Math.max(0, Math.round(a.input ?? 0)), l = Math.max(0, Math.round(a.output ?? 0));
|
|
317
339
|
s + l === 0 || !i || await t({
|
|
318
340
|
query: c,
|
|
@@ -329,4 +351,4 @@ async function q(e, n, r, i, a, o) {
|
|
|
329
351
|
});
|
|
330
352
|
}
|
|
331
353
|
//#endregion
|
|
332
|
-
export {
|
|
354
|
+
export { K as abortAssistantTurn, P as approvePendingWrite, D as buildAssistantSandboxEnv, z as buildPromptGatewayRequest, R as buildPromptRequestBody, X as checkAssistantAiCredits, O as createAssistantSandbox, N as createAssistantSession, Y as downloadAssistantArtifact, W as extendAssistantSandboxTTL, w as findExistingSandbox, x as forwardsUserTokensToSandbox, q as getAssistantArtifacts, H as getAssistantMessages, J as getAssistantSession, U as getAssistantStreamAccess, E as modeRequiresConfirmWrites, B as promptGatewayRequestBytes, I as releaseSupersededAssistantSandboxes, Z as reportAssistantAiTokenUsage, T as selectExistingAssistantSandbox, F as selectSupersededAssistantSandboxes, V as sendAssistantPromptAsync, G as sendHeartbeat, L as stopReapedAssistantSandbox, M as waitForAssistantServiceReady, j as waitForSandboxRunning };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { AssistantAttachment, AssistantInlineLimits } from './attachments';
|
|
2
|
+
import { AssistantPromptPart } from './types';
|
|
3
|
+
export interface BoundedAttachmentTurn {
|
|
4
|
+
prompt: string;
|
|
5
|
+
parts: AssistantPromptPart[] | undefined;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Fit the FINAL request, after the product preamble and page context are known.
|
|
9
|
+
* The caller measures the real GraphQL envelope; character counts and a fixed
|
|
10
|
+
* headroom allowance cannot account for arbitrary URLs, metadata or Unicode.
|
|
11
|
+
* Ordinary turns keep the existing prompt/parts byte-for-byte.
|
|
12
|
+
*/
|
|
13
|
+
export declare function buildBoundedAttachmentTurn({ content, attachments, limits, wrapPrompt, requestBytes, }: {
|
|
14
|
+
content: string;
|
|
15
|
+
attachments: AssistantAttachment[];
|
|
16
|
+
limits: AssistantInlineLimits;
|
|
17
|
+
/** Pure product preamble; evaluated for each candidate budget. */
|
|
18
|
+
wrapPrompt: (text: string) => string;
|
|
19
|
+
requestBytes: (prompt: string, parts?: AssistantPromptPart[]) => number;
|
|
20
|
+
}): BoundedAttachmentTurn;
|
|
21
|
+
//# sourceMappingURL=attachmentTurn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachmentTurn.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/attachmentTurn.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC3B,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,mBAAmB,EAAE,GAAG,SAAS,CAAC;CAC1C;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,EACzC,OAAO,EACP,WAAW,EACX,MAAM,EACN,UAAU,EACV,YAAY,GACb,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,kEAAkE;IAClE,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACrC,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,mBAAmB,EAAE,KAAK,MAAM,CAAC;CACzE,GAAG,qBAAqB,CAiExB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { REQUEST_TOO_LARGE_REFUSAL as e } from "./gatewayLimits.js";
|
|
2
|
+
import { MAX_TURN_BODY_BYTES as t, buildPromptParts as n, buildPromptWithAttachments as r, getSendableAttachments as i } from "./attachments.js";
|
|
3
|
+
//#region src/shared/assistant/attachmentTurn.ts
|
|
4
|
+
function a({ content: a, attachments: o, limits: s, wrapPrompt: c, requestBytes: l }) {
|
|
5
|
+
let u = (e, n) => l(e, n) <= t, d = (e) => {
|
|
6
|
+
let t = n(e, o);
|
|
7
|
+
return u(e, t) ? t : void 0;
|
|
8
|
+
}, f = (e) => c(r(a, o, {
|
|
9
|
+
...s,
|
|
10
|
+
totalChars: e
|
|
11
|
+
})), p = f(s.totalChars), m = n(p, o);
|
|
12
|
+
if (m) {
|
|
13
|
+
if (u(p, m)) return {
|
|
14
|
+
prompt: p,
|
|
15
|
+
parts: m
|
|
16
|
+
};
|
|
17
|
+
if (u(p)) return {
|
|
18
|
+
prompt: p,
|
|
19
|
+
parts: void 0
|
|
20
|
+
};
|
|
21
|
+
} else if (u(p)) return {
|
|
22
|
+
prompt: p,
|
|
23
|
+
parts: void 0
|
|
24
|
+
};
|
|
25
|
+
let h = f(0);
|
|
26
|
+
if (u(h)) {
|
|
27
|
+
let e = 0, t = s.totalChars, n = h;
|
|
28
|
+
for (; e < t;) {
|
|
29
|
+
let r = Math.ceil((e + t) / 2), i = f(r);
|
|
30
|
+
u(i) ? (e = r, n = i) : t = r - 1;
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
prompt: n,
|
|
34
|
+
parts: d(n)
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
let g = i(o).length;
|
|
38
|
+
if (g > 0) {
|
|
39
|
+
let e = c(`${a}\n\n${g} attachment(s) omitted from this turn to fit the request-size limit. Their contents and links were not sent. Do not guess their contents; ask the user to resend them with a shorter message.`);
|
|
40
|
+
if (u(e)) return {
|
|
41
|
+
prompt: e,
|
|
42
|
+
parts: void 0
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
throw Error(e);
|
|
46
|
+
}
|
|
47
|
+
//#endregion
|
|
48
|
+
export { a as buildBoundedAttachmentTurn };
|