@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.
Files changed (47) hide show
  1. package/dist/shared/assistant/adminModeSendGate.d.ts +43 -0
  2. package/dist/shared/assistant/adminModeSendGate.d.ts.map +1 -1
  3. package/dist/shared/assistant/adminModeSendGate.js +33 -18
  4. package/dist/shared/assistant/api.d.ts +17 -0
  5. package/dist/shared/assistant/api.d.ts.map +1 -1
  6. package/dist/shared/assistant/api.js +88 -66
  7. package/dist/shared/assistant/attachmentTurn.d.ts +21 -0
  8. package/dist/shared/assistant/attachmentTurn.d.ts.map +1 -0
  9. package/dist/shared/assistant/attachmentTurn.js +48 -0
  10. package/dist/shared/assistant/attachments.d.ts +85 -6
  11. package/dist/shared/assistant/attachments.d.ts.map +1 -1
  12. package/dist/shared/assistant/attachments.js +165 -112
  13. package/dist/shared/assistant/conversation.d.ts +21 -0
  14. package/dist/shared/assistant/conversation.d.ts.map +1 -1
  15. package/dist/shared/assistant/documentExtract.d.ts +11 -2
  16. package/dist/shared/assistant/documentExtract.d.ts.map +1 -1
  17. package/dist/shared/assistant/documentExtract.js +39 -37
  18. package/dist/shared/assistant/gatewayLimits.d.ts +10 -0
  19. package/dist/shared/assistant/gatewayLimits.d.ts.map +1 -1
  20. package/dist/shared/assistant/gatewayLimits.js +2 -2
  21. package/dist/shared/assistant/i18nManifest.d.ts +5 -0
  22. package/dist/shared/assistant/i18nManifest.d.ts.map +1 -1
  23. package/dist/shared/assistant/i18nManifest.js +6 -1
  24. package/dist/shared/assistant/index.d.ts +2 -0
  25. package/dist/shared/assistant/index.d.ts.map +1 -1
  26. package/dist/shared/assistant/modeCapabilities.d.ts +25 -0
  27. package/dist/shared/assistant/modeCapabilities.d.ts.map +1 -1
  28. package/dist/shared/assistant/modeCapabilities.js +6 -2
  29. package/dist/shared/assistant/store.d.ts +26 -5
  30. package/dist/shared/assistant/store.d.ts.map +1 -1
  31. package/dist/shared/assistant/store.js +28 -18
  32. package/dist/shared/assistant/ui/AssistantApiCallsConsentDialog.d.ts +27 -10
  33. package/dist/shared/assistant/ui/AssistantApiCallsConsentDialog.d.ts.map +1 -1
  34. package/dist/shared/assistant/ui/AssistantApiCallsConsentDialog.js +22 -16
  35. package/dist/shared/assistant/ui/AssistantChatArea.d.ts.map +1 -1
  36. package/dist/shared/assistant/ui/AssistantChatArea.js +305 -272
  37. package/dist/shared/assistant/ui/composer/AssistantComposer.d.ts +12 -0
  38. package/dist/shared/assistant/ui/composer/AssistantComposer.d.ts.map +1 -1
  39. package/dist/shared/assistant/ui/composer/AssistantComposer.js +57 -57
  40. package/dist/shared/assistant/useAssistantAttachments.d.ts +12 -1
  41. package/dist/shared/assistant/useAssistantAttachments.d.ts.map +1 -1
  42. package/dist/shared/assistant/useAssistantAttachments.js +98 -98
  43. package/dist/shared/assistant/writeModeConsent.d.ts +99 -0
  44. package/dist/shared/assistant/writeModeConsent.d.ts.map +1 -0
  45. package/dist/shared/assistant/writeModeConsent.js +48 -0
  46. package/dist/shared-assistant.js +116 -114
  47. 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":"AAEA,+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,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,CAsDrB;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"}
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 t = 1e4;
4
- function n(e) {
5
- let n = e, r = [], i = (e) => {
6
- let t = r;
7
- r = [];
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
- n = e, e.loading || i(e);
13
+ t = e, e.loading || i(e);
13
14
  },
14
- wait(e = t) {
15
- return n.loading ? new Promise((t) => {
15
+ wait(e = r) {
16
+ return t.loading ? new Promise((r) => {
16
17
  let i = {
17
- settle: t,
18
+ settle: r,
18
19
  timer: null
19
20
  };
20
21
  i.timer = setTimeout(() => {
21
- r = r.filter((e) => e !== i), t(n);
22
- }, e), r.push(i);
23
- }) : Promise.resolve(n);
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(n);
27
+ i(t);
27
28
  },
28
29
  get pendingCount() {
29
- return r.length;
30
+ return n.length;
30
31
  }
31
32
  };
32
33
  }
33
- async function r(n, r, i = t) {
34
- return n?.requiresAdmin ? e(n, await r.wait(i)) : null;
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 { t as ADMIN_MODE_ACCESS_WAIT_MS, r as adminOnlyModeSendRefusalAfterAccess, n as createAdminModeAccessGate };
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":"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"}
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 b(e) {
7
+ function x(e) {
7
8
  return e === "assistant";
8
9
  }
9
- async function x(n, r, i, a, o, c, l) {
10
- let u = (await t({
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: n,
15
- path: i,
16
- method: a,
17
- body: o,
18
- context: e(r, l),
19
- ...b(c) ? {
20
- forwardedAuthToken: l?.accessToken ?? void 0,
21
- forwardedWorkspaceToken: l?.workspaceToken ?? void 0
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
- workspaceId: r,
25
- authContext: l
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 (!u || u.status >= 400) {
28
- let e = u?.body;
29
- throw Error(e?.error ?? `Proxy error: ${u?.status ?? "unknown"}`);
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 u.body;
37
+ return c.body;
32
38
  }
33
- async function S(n, r, i, o, s, c = /* @__PURE__ */ new Set()) {
34
- return C((await t({
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 C(e, t, n, r, i, a = /* @__PURE__ */ new Set()) {
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 && (!w(n) || e.metadata?.confirmWrites === !0))?.id ?? null;
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 w(e) {
51
+ function E(e) {
46
52
  return e === "api-calls";
47
53
  }
48
- function T(e, t, n, r) {
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
- })), w(t) && i.push({
82
+ })), E(t) && i.push({
77
83
  name: "AI_ASSISTANT_CONFIRM_WRITES",
78
84
  value: "1"
79
85
  }), i;
80
86
  }
81
- async function E(n, i, a, o, s, c) {
82
- let l = m(i), u = T(n, i, a, c), h = (t) => ({
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: w(i)
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 D(n, r, i) {
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 O(e, t) {
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 k(n, r, i, a = 3e5) {
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
- O(o?.status, o?.errorMessage);
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 D(n, r, i);
172
+ let e = await k(n, r, i);
167
173
  if (e?.status === "RUNNING") return;
168
- O(e?.status, e?.errorMessage), await new Promise((e) => setTimeout(e, 2e3));
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 A(e, t, n, r, i = 9e4) {
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 x(e, t, "/health", "GET", void 0, n, r);
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 j(e, t, n, r) {
187
- return { sessionId: (await x(e, t, "/sessions", "POST", { mode: n }, n, r)).session.id };
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 M(e, t, n, r, i) {
190
- let a = await x(e, t, `/write-confirmations/${encodeURIComponent(n)}/approve`, "POST", {}, r, i);
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 N(e, t, n, r, i, a = /* @__PURE__ */ new Set()) {
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 P(n, r, i, o, s, c = /* @__PURE__ */ new Set()) {
202
+ async function I(n, r, i, o, s, c = /* @__PURE__ */ new Set()) {
197
203
  let l;
198
204
  try {
199
- l = N((await t({
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 F(e, n, s), e;
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 F(n, r, i) {
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 I(e) {
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
- async function L(e, t, n, r, i, a, o, s) {
238
- let c = await x(e, t, `/sessions/${n}/prompt-async`, "POST", I({
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 R(e, t, n, r, i, a) {
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 x(e, t, o, "GET", void 0, r, i);
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 z(e, t, n, r, i) {
274
+ async function U(e, t, n, r, i) {
253
275
  if (g("sse") === "unsupported") return null;
254
276
  try {
255
- let a = await x(e, t, `/sessions/${n}/stream-url`, "GET", void 0, r, i);
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 B(n, r, a, o) {
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 V(e, t, n, r, i) {
278
- await x(e, t, `/sessions/${n}/heartbeat`, "POST", void 0, r, i).catch(() => void 0);
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 H(e, t, n, r, i) {
302
+ async function K(e, t, n, r, i) {
281
303
  try {
282
- return (await x(e, t, `/sessions/${n}/abort`, "POST", void 0, r, i))?.aborted === !0;
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 U(e, t, n, r, i) {
288
- return ((await x(e, t, `/sessions/${n}/artifacts`, "GET", void 0, r, i)).artifacts ?? []).filter((e) => !e.name.startsWith("."));
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 W(e, t, n, r, i) {
291
- let a = await x(e, t, `/sessions/${n}`, "GET", void 0, r, i);
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 G(e, t, n, r, i, a) {
298
- let o = (await x(e, t, `/sessions/${n}/artifacts/download?path=${encodeURIComponent(r)}`, "GET", void 0, i, a)).artifact;
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 K(e, r) {
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 q(e, n, r, i, a, o) {
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 { H as abortAssistantTurn, M as approvePendingWrite, T as buildAssistantSandboxEnv, I as buildPromptRequestBody, K as checkAssistantAiCredits, E as createAssistantSandbox, j as createAssistantSession, G as downloadAssistantArtifact, B as extendAssistantSandboxTTL, S as findExistingSandbox, b as forwardsUserTokensToSandbox, U as getAssistantArtifacts, R as getAssistantMessages, W as getAssistantSession, z as getAssistantStreamAccess, w as modeRequiresConfirmWrites, P as releaseSupersededAssistantSandboxes, q as reportAssistantAiTokenUsage, C as selectExistingAssistantSandbox, N as selectSupersededAssistantSandboxes, L as sendAssistantPromptAsync, V as sendHeartbeat, F as stopReapedAssistantSandbox, A as waitForAssistantServiceReady, k as waitForSandboxRunning };
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 };