@burdenoff/fe-libs 2026.906.6 → 2026.907.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.
@@ -41,6 +41,24 @@ export declare function waitForAssistantServiceReady(sandboxId: string, workspac
41
41
  export declare function createAssistantSession(sandboxId: string, workspaceId: string, mode: AssistantMode, authContext: AssistantSandboxAuthContext): Promise<{
42
42
  sessionId: string;
43
43
  }>;
44
+ /**
45
+ * Tell the sandbox the user approved a pending write.
46
+ *
47
+ * ★★ This is the frontend half of the write gate. The sandbox no longer puts
48
+ * the confirmation token in anything the model can read — the refusal carries a
49
+ * reference that NAMES the pending change and authorises nothing — so the only
50
+ * way a refused write becomes executable is this call, made because a person
51
+ * pressed a button. The model is not in this path.
52
+ *
53
+ * ★ The reference is not a secret and is validated as hex by the parser before
54
+ * it reaches here, so it can safely sit in the URL.
55
+ *
56
+ * ★ Throws on failure rather than resolving quietly. A 404 means the pending
57
+ * write expired or was already spent, and the user must see that their approval
58
+ * did NOT land — silently swallowing it would leave them believing a change was
59
+ * authorised when it was not.
60
+ */
61
+ export declare function approvePendingWrite(sandboxId: string, workspaceId: string, reference: string, authContext: AssistantSandboxAuthContext): Promise<void>;
44
62
  /**
45
63
  * Our own assistant sandboxes in this workspace that are for a DIFFERENT mode.
46
64
  *
@@ -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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"}
@@ -181,14 +181,18 @@ async function k(e, t, n, r = 9e4) {
181
181
  async function A(e, t, n, r) {
182
182
  return { sessionId: (await b(e, t, "/sessions", "POST", { mode: n }, r)).session.id };
183
183
  }
184
- function j(e, t, n, r, i) {
184
+ async function j(e, t, n, r) {
185
+ let i = await b(e, t, `/write-confirmations/${encodeURIComponent(n)}/approve`, "POST", {}, r);
186
+ if (i?.approved !== !0) throw Error(typeof i?.error == "string" ? i.error : "The change could not be approved. It may have expired — ask the assistant to try again.");
187
+ }
188
+ function M(e, t, n, r, i) {
185
189
  let a = p(n, r);
186
190
  return e.filter((e) => e.metadata?.authStrategy === "sandbox-app-client-headers-v1" && e.metadata?.assistantProduct === t && (!i.userId || e.createdBy === i.userId) && !(h(e) === n && e.metadata?.imageTag === a)).map((e) => e.id);
187
191
  }
188
- async function M(n, r, i, o, s) {
192
+ async function N(n, r, i, o, s) {
189
193
  let c;
190
194
  try {
191
- c = j((await t({
195
+ c = M((await t({
192
196
  query: a,
193
197
  operationName: "GetActiveSandboxes",
194
198
  variables: { context: e(n, s) },
@@ -200,13 +204,13 @@ async function M(n, r, i, o, s) {
200
204
  }
201
205
  return (await Promise.all(c.map(async (e) => {
202
206
  try {
203
- return await N(e, n, s), e;
207
+ return await P(e, n, s), e;
204
208
  } catch {
205
209
  return null;
206
210
  }
207
211
  }))).filter((e) => e !== null);
208
212
  }
209
- async function N(n, r, i) {
213
+ async function P(n, r, i) {
210
214
  await t({
211
215
  query: l,
212
216
  operationName: "StopAssistantSandbox",
@@ -218,7 +222,7 @@ async function N(n, r, i) {
218
222
  authContext: i
219
223
  });
220
224
  }
221
- function P(e) {
225
+ function F(e) {
222
226
  let { mode: t, prompt: n, pageContext: r, parts: i } = e, a = {
223
227
  mode: t,
224
228
  prompt: n,
@@ -226,8 +230,8 @@ function P(e) {
226
230
  };
227
231
  return i && i.length > 0 && (a.parts = i), a;
228
232
  }
229
- async function F(e, t, n, r, i, a, o, s) {
230
- let c = await b(e, t, `/sessions/${n}/prompt-async`, "POST", P({
233
+ async function I(e, t, n, r, i, a, o, s) {
234
+ let c = await b(e, t, `/sessions/${n}/prompt-async`, "POST", F({
231
235
  mode: i,
232
236
  prompt: r,
233
237
  pageContext: a,
@@ -235,13 +239,13 @@ async function F(e, t, n, r, i, a, o, s) {
235
239
  }), o);
236
240
  return { messageID: typeof c.messageID == "string" ? c.messageID : void 0 };
237
241
  }
238
- async function I(e, t, n, r, i) {
242
+ async function L(e, t, n, r, i) {
239
243
  let a = `/sessions/${n}/messages?limit=${i?.limit ?? 50}`;
240
244
  i?.sinceMs && g("sinceParam") !== "unsupported" && (a += `&since=${i.sinceMs}`);
241
245
  let o = await b(e, t, a, "GET", void 0, r);
242
246
  return typeof o.now == "number" && v("sinceParam"), o.messages ?? [];
243
247
  }
244
- async function L(e, t, n, r) {
248
+ async function R(e, t, n, r) {
245
249
  if (g("sse") === "unsupported") return null;
246
250
  try {
247
251
  let i = await b(e, t, `/sessions/${n}/stream-url`, "GET", void 0, r);
@@ -253,7 +257,7 @@ async function L(e, t, n, r) {
253
257
  return y("sse"), null;
254
258
  }
255
259
  }
256
- async function R(n, r, a, o) {
260
+ async function z(n, r, a, o) {
257
261
  await t({
258
262
  query: i,
259
263
  operationName: "ExtendSandboxTtl",
@@ -266,20 +270,20 @@ async function R(n, r, a, o) {
266
270
  authContext: o
267
271
  });
268
272
  }
269
- async function z(e, t, n, r) {
273
+ async function B(e, t, n, r) {
270
274
  await b(e, t, `/sessions/${n}/heartbeat`, "POST", void 0, r).catch(() => void 0);
271
275
  }
272
- async function B(e, t, n, r) {
276
+ async function V(e, t, n, r) {
273
277
  return ((await b(e, t, `/sessions/${n}/artifacts`, "GET", void 0, r)).artifacts ?? []).filter((e) => !e.name.startsWith("."));
274
278
  }
275
- async function V(e, t, n, r) {
279
+ async function H(e, t, n, r) {
276
280
  let i = await b(e, t, `/sessions/${n}`, "GET", void 0, r);
277
281
  return {
278
282
  id: i.session?.id ?? n,
279
283
  mode: i.mode ?? "unknown"
280
284
  };
281
285
  }
282
- async function H(e, t, n, r, i) {
286
+ async function U(e, t, n, r, i) {
283
287
  let a = (await b(e, t, `/sessions/${n}/artifacts/download?path=${encodeURIComponent(r)}`, "GET", void 0, i)).artifact;
284
288
  if (!a) throw Error("Artifact download returned an empty response");
285
289
  return {
@@ -288,7 +292,7 @@ async function H(e, t, n, r, i) {
288
292
  contentBase64: a.contentBase64
289
293
  };
290
294
  }
291
- async function U(e, r) {
295
+ async function W(e, r) {
292
296
  return (await t({
293
297
  query: n,
294
298
  operationName: "CheckAiCredits",
@@ -297,7 +301,7 @@ async function U(e, r) {
297
301
  authContext: r
298
302
  })).checkAiCredits;
299
303
  }
300
- async function W(e, n, r, i, a, o) {
304
+ async function G(e, n, r, i, a, o) {
301
305
  let s = Math.max(0, Math.round(a.input ?? 0)), l = Math.max(0, Math.round(a.output ?? 0));
302
306
  s + l === 0 || !i || await t({
303
307
  query: c,
@@ -314,4 +318,4 @@ async function W(e, n, r, i, a, o) {
314
318
  });
315
319
  }
316
320
  //#endregion
317
- export { w as buildAssistantSandboxEnv, P as buildPromptRequestBody, U as checkAssistantAiCredits, T as createAssistantSandbox, A as createAssistantSession, H as downloadAssistantArtifact, R as extendAssistantSandboxTTL, x as findExistingSandbox, B as getAssistantArtifacts, I as getAssistantMessages, V as getAssistantSession, L as getAssistantStreamAccess, C as modeRequiresConfirmWrites, M as releaseSupersededAssistantSandboxes, W as reportAssistantAiTokenUsage, S as selectExistingAssistantSandbox, j as selectSupersededAssistantSandboxes, F as sendAssistantPromptAsync, z as sendHeartbeat, N as stopReapedAssistantSandbox, k as waitForAssistantServiceReady, O as waitForSandboxRunning };
321
+ export { j as approvePendingWrite, w as buildAssistantSandboxEnv, F as buildPromptRequestBody, W as checkAssistantAiCredits, T as createAssistantSandbox, A as createAssistantSession, U as downloadAssistantArtifact, z as extendAssistantSandboxTTL, x as findExistingSandbox, V as getAssistantArtifacts, L as getAssistantMessages, H as getAssistantSession, R as getAssistantStreamAccess, C as modeRequiresConfirmWrites, N as releaseSupersededAssistantSandboxes, G as reportAssistantAiTokenUsage, S as selectExistingAssistantSandbox, M as selectSupersededAssistantSandboxes, I as sendAssistantPromptAsync, B as sendHeartbeat, P as stopReapedAssistantSandbox, k as waitForAssistantServiceReady, O as waitForSandboxRunning };
@@ -38,6 +38,19 @@ export interface PendingWrite {
38
38
  * naming the operation alone rather than implying there is nothing to send.
39
39
  */
40
40
  values: PendingWriteValue[] | null;
41
+ /**
42
+ * The pending change's public reference, when the sandbox emitted one.
43
+ *
44
+ * ★★ NOT a token, and the distinction is the whole design. The reference
45
+ * NAMES the pending write so the panel can approve that exact one; it
46
+ * authorises nothing on its own. The token never leaves the sandbox — being
47
+ * shown it is what used to let the model approve itself.
48
+ *
49
+ * `null` on a sandbox running an image from before the approval endpoint
50
+ * existed, in which case the card has nothing to approve WITH and correctly
51
+ * falls back to asking the user to reply in prose.
52
+ */
53
+ reference: string | null;
41
54
  }
42
55
  /**
43
56
  * A tool part as the transport delivers it. Deliberately loose: `state.output`
@@ -1 +1 @@
1
- {"version":3,"file":"pendingWrite.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/pendingWrite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,MAAM,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC;CACpC;AAOD;;;;GAIG;AACH,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAAG,SAAS,CAAC;CAClE;AA+BD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAsD1E;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,GAAG,YAAY,GAAG,IAAI,CAWhG"}
1
+ {"version":3,"file":"pendingWrite.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/pendingWrite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,MAAM,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC;IACnC;;;;;;;;;;;OAWG;IACH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AASD;;;;GAIG;AACH,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAAG,SAAS,CAAC;CAClE;AAqCD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAgE1E;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,GACzC,YAAY,GAAG,IAAI,CAWrB"}
@@ -1,6 +1,6 @@
1
1
  //#region src/shared/assistant/pendingWrite.ts
2
- var e = "CONFIRMATION_REQUIRED", t = /CONFIRMATION_REQUIRED: the write "([^"]+)" was NOT sent/, n = "Values you were about to send:";
3
- function r(e) {
2
+ var e = "CONFIRMATION_REQUIRED", t = /CONFIRMATION_REQUIRED: the write "([^"]+)" was NOT sent/, n = "Values you were about to send:", r = /Pending change reference:\s*([0-9a-f]{6,64})\b/;
3
+ function i(e) {
4
4
  if (typeof e == "string") return e;
5
5
  if (e && typeof e == "object" && "output" in e) {
6
6
  let t = e.output;
@@ -8,7 +8,7 @@ function r(e) {
8
8
  }
9
9
  return null;
10
10
  }
11
- function i(e) {
11
+ function a(e) {
12
12
  if (!e || typeof e != "object" || Array.isArray(e)) return null;
13
13
  let t = Object.entries(e);
14
14
  return t.length === 0 ? null : t.map(([e, t]) => ({
@@ -16,70 +16,76 @@ function i(e) {
16
16
  value: typeof t == "string" ? t : t == null ? "—" : JSON.stringify(t)
17
17
  }));
18
18
  }
19
- function a(r) {
20
- if (!r.includes(e)) return null;
21
- let a = t.exec(r)?.[1]?.trim();
22
- if (!a) return null;
23
- let o = r.indexOf(n);
24
- if (o === -1) return {
25
- operation: a,
26
- values: null
19
+ function o(i) {
20
+ if (!i.includes(e)) return null;
21
+ let o = t.exec(i)?.[1]?.trim();
22
+ if (!o) return null;
23
+ let s = r.exec(i)?.[1] ?? null, c = i.indexOf(n);
24
+ if (c === -1) return {
25
+ operation: o,
26
+ values: null,
27
+ reference: s
27
28
  };
28
- let s = r.slice(o + 30).trim();
29
- if (!s || s.startsWith("(no variables)")) return {
30
- operation: a,
31
- values: null
29
+ let l = i.slice(c + 30).trim();
30
+ if (!l || l.startsWith("(no variables)")) return {
31
+ operation: o,
32
+ values: null,
33
+ reference: s
32
34
  };
33
- let c = s.indexOf("{");
34
- if (c === -1) return {
35
- operation: a,
36
- values: null
35
+ let u = l.indexOf("{");
36
+ if (u === -1) return {
37
+ operation: o,
38
+ values: null,
39
+ reference: s
37
40
  };
38
- let l = 0, u = -1, d = !1, f = !1;
39
- for (let e = c; e < s.length; e += 1) {
40
- let t = s[e];
41
- if (f) {
42
- f = !1;
41
+ let d = 0, f = -1, p = !1, m = !1;
42
+ for (let e = u; e < l.length; e += 1) {
43
+ let t = l[e];
44
+ if (m) {
45
+ m = !1;
43
46
  continue;
44
47
  }
45
- if (t === "\\" && d) {
46
- f = !0;
48
+ if (t === "\\" && p) {
49
+ m = !0;
47
50
  continue;
48
51
  }
49
- if (t === "\"") d = !d;
50
- else if (!d && t === "{") l += 1;
51
- else if (!d && t === "}" && (--l, l === 0)) {
52
- u = e + 1;
52
+ if (t === "\"") p = !p;
53
+ else if (!p && t === "{") d += 1;
54
+ else if (!p && t === "}" && (--d, d === 0)) {
55
+ f = e + 1;
53
56
  break;
54
57
  }
55
58
  }
56
- if (u === -1) return {
57
- operation: a,
58
- values: null
59
+ if (f === -1) return {
60
+ operation: o,
61
+ values: null,
62
+ reference: s
59
63
  };
60
64
  try {
61
65
  return {
62
- operation: a,
63
- values: i(JSON.parse(s.slice(c, u)))
66
+ operation: o,
67
+ values: a(JSON.parse(l.slice(u, f))),
68
+ reference: s
64
69
  };
65
70
  } catch {
66
71
  return {
67
- operation: a,
68
- values: null
72
+ operation: o,
73
+ values: null,
74
+ reference: s
69
75
  };
70
76
  }
71
77
  }
72
- function o(e) {
78
+ function s(e) {
73
79
  if (!e) return null;
74
80
  let t = null;
75
81
  for (let n of e) {
76
82
  if (n?.type !== "tool") continue;
77
- let e = r(n.state?.output);
83
+ let e = i(n.state?.output);
78
84
  if (!e) continue;
79
- let i = a(e);
80
- i && (t = i);
85
+ let r = o(e);
86
+ r && (t = r);
81
87
  }
82
88
  return t;
83
89
  }
84
90
  //#endregion
85
- export { o as findPendingWrite, a as parseConfirmationRefusal };
91
+ export { s as findPendingWrite, o as parseConfirmationRefusal };
@@ -43,6 +43,36 @@ export type QuotaRefusal = "exhausted" | "not-provisioned";
43
43
  * would not help.
44
44
  */
45
45
  export declare function classifyQuotaError(error: unknown): QuotaRefusal | null;
46
+ /**
47
+ * A quota refusal, plus the facts needed to act on it.
48
+ *
49
+ * ★★★ Why this exists (prod, 2026-09-07). The assistant was dead for hours and
50
+ * the only thing anyone could see was "You've reached your sandbox limit on the
51
+ * current plan." The gateway had named the exact ceiling —
52
+ * `platform.sandbox.runtime_hours` — in `extensions.quotaName`, and we threw it
53
+ * away. The workspace had TWO sandbox quotas; the one everybody stared at
54
+ * (`platform.sandbox.environments`, 0 of 60 used) was fine, and the one that was
55
+ * actually blocking went unexamined because nothing on screen named it.
56
+ *
57
+ * A ceiling you cannot name is a ceiling you cannot raise.
58
+ */
59
+ export interface QuotaRefusalDetail {
60
+ refusal: QuotaRefusal;
61
+ /** WHICH ceiling — e.g. `platform.sandbox.runtime_hours`. */
62
+ quotaName: string | null;
63
+ /** The refusing service's trace id, so support can find the request. */
64
+ traceId: string | null;
65
+ }
66
+ /**
67
+ * Which refusal this is AND what it was about, or null when not a quota wall.
68
+ *
69
+ * ★ Deliberately falls back to {@link isQuotaExhaustedError} rather than using
70
+ * {@link classifyQuotaError} alone: the classifier keys on `extensions.code`,
71
+ * but the assistant's raw-fetch transport can surface a bare quota string with
72
+ * no code at all. Dropping that path here would have quietly narrowed the wall
73
+ * the chat area already catches.
74
+ */
75
+ export declare function describeQuotaError(error: unknown): QuotaRefusalDetail | null;
46
76
  export type QuotaKind = "sandbox" | "ai-credits" | "generic";
47
77
  /**
48
78
  * Event the assistant dispatches on a quota wall, namespaced by product.
@@ -1 +1 @@
1
- {"version":3,"file":"quota.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/quota.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAmBH;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAmB7D;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,iBAAiB,CAAC;AA0C3D;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAStE;AAED,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;AAE7D;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B"}
1
+ {"version":3,"file":"quota.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/quota.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAmBH;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAmB7D;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,iBAAiB,CAAC;AA0C3D;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAStE;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,YAAY,CAAC;IACtB,6DAA6D;IAC7D,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,wEAAwE;IACxE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAwBD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAmB5E;AAED,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;AAE7D;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B"}
@@ -38,8 +38,39 @@ function i(e) {
38
38
  let n = e?.statusCode;
39
39
  return typeof n == "number" && n === 429 ? "exhausted" : null;
40
40
  }
41
- function a(e) {
41
+ function a(t) {
42
+ if (!t || typeof t != "object") return [];
43
+ let n = [
44
+ t,
45
+ t.result,
46
+ t.networkError
47
+ ], r = [];
48
+ for (let t of n) {
49
+ if (!t || typeof t != "object") continue;
50
+ let n = t.extensions;
51
+ n && typeof n == "object" && r.push(n);
52
+ for (let n of e(t, "errors") ?? []) n.extensions && typeof n.extensions == "object" && r.push(n.extensions);
53
+ }
54
+ return r;
55
+ }
56
+ function o(e) {
57
+ let n = i(e) ?? (t(e) ? "exhausted" : null);
58
+ if (!n) return null;
59
+ let r = (t) => {
60
+ for (let n of a(e)) {
61
+ let e = n[t];
62
+ if (typeof e == "string" && e.length > 0) return e;
63
+ }
64
+ return null;
65
+ };
66
+ return {
67
+ refusal: n,
68
+ quotaName: r("quotaName"),
69
+ traceId: r("traceId")
70
+ };
71
+ }
72
+ function s(e) {
42
73
  return `${e}:quota-exhausted`;
43
74
  }
44
75
  //#endregion
45
- export { i as classifyQuotaError, t as isQuotaExhaustedError, a as quotaExhaustedEventName };
76
+ export { i as classifyQuotaError, o as describeQuotaError, t as isQuotaExhaustedError, s as quotaExhaustedEventName };
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantChatArea.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantChatArea.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,EAAE,EACR,MAAM,OAAO,CAAC;AAmEf,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAoLvE;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,EAAE,oBAAoB,CAAC;CACpC;AAED,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CA+nDxD,CAAC"}
1
+ {"version":3,"file":"AssistantChatArea.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantChatArea.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,EAAE,EACR,MAAM,OAAO,CAAC;AAoEf,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAoLvE;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,EAAE,oBAAoB,CAAC;CACpC;AAED,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CAgtDxD,CAAC"}