@burdenoff/fe-libs 2026.928.3 → 2026.929.1
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 +6 -5
- package/dist/shared/assistant/adminModeSendGate.d.ts.map +1 -1
- package/dist/shared/assistant/adminModeSendGate.js +11 -11
- package/dist/shared/assistant/api.d.ts +291 -28
- package/dist/shared/assistant/api.d.ts.map +1 -1
- package/dist/shared/assistant/api.js +351 -147
- package/dist/shared/assistant/autoRouting.d.ts +11 -3
- package/dist/shared/assistant/autoRouting.d.ts.map +1 -1
- package/dist/shared/assistant/autoRouting.js +7 -7
- package/dist/shared/assistant/capabilities.d.ts +28 -0
- package/dist/shared/assistant/capabilities.d.ts.map +1 -1
- package/dist/shared/assistant/capabilities.js +19 -10
- package/dist/shared/assistant/conversation.d.ts +24 -2
- package/dist/shared/assistant/conversation.d.ts.map +1 -1
- package/dist/shared/assistant/createSandboxAssistantTransport.d.ts.map +1 -1
- package/dist/shared/assistant/createSandboxAssistantTransport.js +67 -54
- package/dist/shared/assistant/history/historyList.js +1 -1
- package/dist/shared/assistant/history/historyMapping.d.ts.map +1 -1
- package/dist/shared/assistant/history/historyMapping.js +5 -1
- package/dist/shared/assistant/history/historyResume.js +7 -7
- package/dist/shared/assistant/i18nManifest.d.ts +53 -0
- package/dist/shared/assistant/i18nManifest.d.ts.map +1 -1
- package/dist/shared/assistant/i18nManifest.js +75 -16
- package/dist/shared/assistant/index.d.ts +15 -0
- package/dist/shared/assistant/index.d.ts.map +1 -1
- package/dist/shared/assistant/modeCapabilities.js +1 -1
- package/dist/shared/assistant/operations.d.ts +22 -0
- package/dist/shared/assistant/operations.d.ts.map +1 -1
- package/dist/shared/assistant/operations.js +2 -2
- package/dist/shared/assistant/prewarm.d.ts +7 -0
- package/dist/shared/assistant/prewarm.d.ts.map +1 -1
- package/dist/shared/assistant/prewarm.js +1 -1
- package/dist/shared/assistant/product.d.ts +80 -2
- package/dist/shared/assistant/product.d.ts.map +1 -1
- package/dist/shared/assistant/product.js +10 -6
- package/dist/shared/assistant/proposalWriteRules.d.ts +40 -0
- package/dist/shared/assistant/proposalWriteRules.d.ts.map +1 -0
- package/dist/shared/assistant/proposalWriteRules.js +14 -0
- package/dist/shared/assistant/store.d.ts +17 -0
- package/dist/shared/assistant/store.d.ts.map +1 -1
- package/dist/shared/assistant/store.js +50 -43
- package/dist/shared/assistant/turnOutcome.d.ts +34 -2
- package/dist/shared/assistant/turnOutcome.d.ts.map +1 -1
- package/dist/shared/assistant/turnOutcome.js +28 -17
- package/dist/shared/assistant/turnOutcomeCopy.d.ts +29 -7
- package/dist/shared/assistant/turnOutcomeCopy.d.ts.map +1 -1
- package/dist/shared/assistant/turnOutcomeCopy.js +18 -6
- package/dist/shared/assistant/types.d.ts +5 -1
- package/dist/shared/assistant/types.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantApiCallsConsentDialog.js +4 -4
- package/dist/shared/assistant/ui/AssistantChatArea.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantChatArea.js +989 -718
- package/dist/shared/assistant/ui/AssistantConversationList.js +6 -6
- package/dist/shared/assistant/ui/AssistantLanguageMenu.js +6 -6
- package/dist/shared/assistant/ui/AssistantMessageItem.d.ts +8 -1
- package/dist/shared/assistant/ui/AssistantMessageItem.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantMessageItem.js +77 -76
- package/dist/shared/assistant/ui/AssistantMessageList.d.ts +13 -1
- package/dist/shared/assistant/ui/AssistantMessageList.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantMessageList.js +15 -13
- package/dist/shared/assistant/ui/AssistantReplyLanguageSelector.js +5 -5
- package/dist/shared/assistant/ui/AssistantSpeechProvider.js +209 -209
- package/dist/shared/assistant/ui/AssistantWriteConfirmDialog.d.ts +62 -0
- package/dist/shared/assistant/ui/AssistantWriteConfirmDialog.d.ts.map +1 -0
- package/dist/shared/assistant/ui/AssistantWriteConfirmDialog.js +253 -0
- package/dist/shared/assistant/ui/AssistantWriteProposalCard.d.ts +72 -0
- package/dist/shared/assistant/ui/AssistantWriteProposalCard.d.ts.map +1 -0
- package/dist/shared/assistant/ui/AssistantWriteProposalCard.js +439 -0
- package/dist/shared/assistant/ui/AssistantWriteProposalSlot.d.ts +40 -0
- package/dist/shared/assistant/ui/AssistantWriteProposalSlot.d.ts.map +1 -0
- package/dist/shared/assistant/ui/AssistantWriteProposalSlot.js +35 -0
- package/dist/shared/assistant/ui/composer/AssistantComposer.js +8 -8
- package/dist/shared/assistant/ui/useVoiceSession.d.ts +28 -0
- package/dist/shared/assistant/ui/useVoiceSession.d.ts.map +1 -1
- package/dist/shared/assistant/ui/useVoiceSession.js +159 -110
- package/dist/shared/assistant/ui/useWriteProposalConfirm.d.ts +61 -0
- package/dist/shared/assistant/ui/useWriteProposalConfirm.d.ts.map +1 -0
- package/dist/shared/assistant/ui/useWriteProposalConfirm.js +109 -0
- package/dist/shared/assistant/ui/useWriteProposals.d.ts +102 -0
- package/dist/shared/assistant/ui/useWriteProposals.d.ts.map +1 -0
- package/dist/shared/assistant/ui/useWriteProposals.js +230 -0
- package/dist/shared/assistant/ui/voice/AssistantVoiceSession.d.ts +17 -1
- package/dist/shared/assistant/ui/voice/AssistantVoiceSession.d.ts.map +1 -1
- package/dist/shared/assistant/ui/voice/AssistantVoiceSession.js +141 -109
- package/dist/shared/assistant/ui/writeProposalPresentation.d.ts +76 -0
- package/dist/shared/assistant/ui/writeProposalPresentation.d.ts.map +1 -0
- package/dist/shared/assistant/ui/writeProposalPresentation.js +110 -0
- package/dist/shared/assistant/usageReporting.d.ts +108 -0
- package/dist/shared/assistant/usageReporting.d.ts.map +1 -0
- package/dist/shared/assistant/usageReporting.js +155 -0
- package/dist/shared/assistant/useAssistantApiAccess.d.ts +49 -14
- package/dist/shared/assistant/useAssistantApiAccess.d.ts.map +1 -1
- package/dist/shared/assistant/useAssistantApiAccess.js +43 -25
- package/dist/shared/assistant/useAssistantHeartbeat.d.ts.map +1 -1
- package/dist/shared/assistant/useAssistantHeartbeat.js +5 -5
- package/dist/shared/assistant/useWorkspaceWriteAccess.d.ts +5 -6
- package/dist/shared/assistant/useWorkspaceWriteAccess.d.ts.map +1 -1
- package/dist/shared/assistant/voice/voiceSession.d.ts +46 -0
- package/dist/shared/assistant/voice/voiceSession.d.ts.map +1 -1
- package/dist/shared/assistant/voice/voiceSession.js +35 -2
- package/dist/shared/assistant/writeConfirmSeam.d.ts +32 -0
- package/dist/shared/assistant/writeConfirmSeam.d.ts.map +1 -0
- package/dist/shared/assistant/writeConfirmSeam.js +23 -0
- package/dist/shared/assistant/writeModeConsent.d.ts +16 -8
- package/dist/shared/assistant/writeModeConsent.d.ts.map +1 -1
- package/dist/shared/assistant/writeModeConsent.js +2 -2
- package/dist/shared/assistant/writeProposalDiscovery.d.ts +123 -0
- package/dist/shared/assistant/writeProposalDiscovery.d.ts.map +1 -0
- package/dist/shared/assistant/writeProposalDiscovery.js +210 -0
- package/dist/shared/assistant/writeProposalErrorCopy.d.ts +135 -0
- package/dist/shared/assistant/writeProposalErrorCopy.d.ts.map +1 -0
- package/dist/shared/assistant/writeProposalErrorCopy.js +135 -0
- package/dist/shared/assistant/writeProposalVoice.d.ts +133 -0
- package/dist/shared/assistant/writeProposalVoice.d.ts.map +1 -0
- package/dist/shared/assistant/writeProposalVoice.js +66 -0
- package/dist/shared/assistant/writeProposals.d.ts +268 -0
- package/dist/shared/assistant/writeProposals.d.ts.map +1 -0
- package/dist/shared/assistant/writeProposals.js +445 -0
- package/dist/shared/assistant/writeReplyBinder.d.ts +166 -0
- package/dist/shared/assistant/writeReplyBinder.d.ts.map +1 -0
- package/dist/shared/assistant/writeReplyBinder.js +233 -0
- package/dist/shared/assistant/writeReplySend.d.ts +110 -0
- package/dist/shared/assistant/writeReplySend.d.ts.map +1 -0
- package/dist/shared/assistant/writeReplySend.js +93 -0
- package/dist/shared-assistant.js +167 -152
- package/dist/ui/modal-shell.d.ts +14 -1
- package/dist/ui/modal-shell.d.ts.map +1 -1
- package/dist/ui/modal-shell.js +8 -6
- package/package.json +1 -1
|
@@ -1,33 +1,35 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { extensionObjectsIn as e } from "./quota.js";
|
|
2
|
+
import { buildSandboxContextInput as t, executeAssistantGraphQLOnce as n, executeSandboxGraphQL as r } from "./gatewayClient.js";
|
|
3
|
+
import { CHECK_AI_CREDITS as i, CREATE_SANDBOX as a, EXTEND_MY_ASSISTANT_SANDBOX_TTL as o, EXTEND_SANDBOX_TTL as s, GET_ACTIVE_SANDBOXES as c, GET_SANDBOX as l, PROVISION_ASSISTANT_SANDBOX as u, PROXY_SANDBOX_REQUEST as d, REPORT_AI_TOKEN_USAGE as f, STOP_ASSISTANT_SANDBOX as p, STOP_MY_ASSISTANT_SANDBOX as ee, WAIT_FOR_SANDBOX_RUNNING as te } from "./operations.js";
|
|
4
|
+
import { ASSISTANT_API_AUTH_STRATEGY as ne, getImageForMode as m, getImageTagForMode as re, getResourcesForMode as ie, resolveSandboxAssistantMode as h } from "./images.js";
|
|
5
|
+
import { getCapability as g, isMissingGatewayFieldError as _, isUnknownFieldError as ae, markSupported as v, markUnsupported as y } from "./capabilities.js";
|
|
6
|
+
import { useAssistantStore as oe } from "./store.js";
|
|
7
|
+
import { REQUEST_TOO_LARGE_REFUSAL as se } from "./gatewayLimits.js";
|
|
6
8
|
//#region src/shared/assistant/api.ts
|
|
7
|
-
function
|
|
8
|
-
return e === "assistant";
|
|
9
|
+
function b(e) {
|
|
10
|
+
return e === "assistant" || e === "api-calls";
|
|
9
11
|
}
|
|
10
|
-
function
|
|
12
|
+
function x(e, n, r, i, a, o, s) {
|
|
11
13
|
return {
|
|
12
|
-
query:
|
|
14
|
+
query: d,
|
|
13
15
|
operationName: "ProxySandboxRequest",
|
|
14
16
|
variables: { input: {
|
|
15
|
-
sandboxId:
|
|
17
|
+
sandboxId: e,
|
|
16
18
|
path: r,
|
|
17
19
|
method: i,
|
|
18
20
|
body: a,
|
|
19
|
-
context:
|
|
20
|
-
...
|
|
21
|
-
forwardedAuthToken:
|
|
22
|
-
forwardedWorkspaceToken:
|
|
21
|
+
context: t(n, s),
|
|
22
|
+
...b(o) ? {
|
|
23
|
+
forwardedAuthToken: s?.accessToken ?? void 0,
|
|
24
|
+
forwardedWorkspaceToken: s?.workspaceToken ?? void 0
|
|
23
25
|
} : {}
|
|
24
26
|
} }
|
|
25
27
|
};
|
|
26
28
|
}
|
|
27
|
-
async function
|
|
28
|
-
let c = (await
|
|
29
|
-
...
|
|
30
|
-
workspaceId:
|
|
29
|
+
async function S(e, t, n, i, a, o, s) {
|
|
30
|
+
let c = (await r({
|
|
31
|
+
...x(e, t, n, i, a, o, s),
|
|
32
|
+
workspaceId: t,
|
|
31
33
|
authContext: s
|
|
32
34
|
})).proxySandboxRequest;
|
|
33
35
|
if (!c || c.status >= 400) {
|
|
@@ -36,32 +38,56 @@ async function C(e, n, r, i, a, o, s) {
|
|
|
36
38
|
}
|
|
37
39
|
return c.body;
|
|
38
40
|
}
|
|
39
|
-
async function
|
|
40
|
-
|
|
41
|
+
async function ce(e, t, r, i, a, o, s) {
|
|
42
|
+
let c = (await n({
|
|
43
|
+
...x(e, t, r, i, a, o, s),
|
|
44
|
+
workspaceId: t,
|
|
45
|
+
authContext: s
|
|
46
|
+
})).proxySandboxRequest;
|
|
47
|
+
if (typeof c != "object" || !c || !("status" in c) || typeof c.status != "number" || !Number.isInteger(c.status)) throw Error("Proxy error: unknown");
|
|
48
|
+
return {
|
|
49
|
+
status: c.status,
|
|
50
|
+
body: "body" in c ? c.body ?? null : null
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
async function le(e, t, n, r, i, a = /* @__PURE__ */ new Set(), o = "legacy") {
|
|
54
|
+
return (await C(e, t, n, r, i, a, o))?.id ?? null;
|
|
41
55
|
}
|
|
42
|
-
async function
|
|
43
|
-
let
|
|
44
|
-
query:
|
|
56
|
+
async function C(e, n, i, a, o, s = /* @__PURE__ */ new Set(), l = "legacy") {
|
|
57
|
+
let u = (await r({
|
|
58
|
+
query: c,
|
|
45
59
|
operationName: "GetActiveSandboxes",
|
|
46
|
-
variables: { context: e
|
|
47
|
-
workspaceId:
|
|
48
|
-
authContext:
|
|
49
|
-
})).getActiveSandboxes ?? []
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
60
|
+
variables: { context: t(e, o) },
|
|
61
|
+
workspaceId: e,
|
|
62
|
+
authContext: o
|
|
63
|
+
})).getActiveSandboxes ?? [];
|
|
64
|
+
N(u);
|
|
65
|
+
let d = T(u, n, i, a, o, s, I(l));
|
|
66
|
+
return d ? {
|
|
67
|
+
id: d,
|
|
68
|
+
status: w(u, d)
|
|
53
69
|
} : null;
|
|
54
70
|
}
|
|
55
|
-
function
|
|
71
|
+
function w(e, t) {
|
|
56
72
|
return e.find((e) => e.id === t)?.status ?? "UNKNOWN";
|
|
57
73
|
}
|
|
58
|
-
function
|
|
59
|
-
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 && (!
|
|
74
|
+
function T(e, t, n, r, i, a = /* @__PURE__ */ new Set(), o = "legacy") {
|
|
75
|
+
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 && (!k(n) || O(e.metadata, o)) && E(e, n, o))?.id ?? null;
|
|
60
76
|
}
|
|
61
|
-
function
|
|
77
|
+
function E(e, t, n) {
|
|
78
|
+
return t !== "assistant" || n !== "proposal-v1" ? !0 : M(e);
|
|
79
|
+
}
|
|
80
|
+
function D(e) {
|
|
81
|
+
return typeof e == "object" && !!e && !Array.isArray(e);
|
|
82
|
+
}
|
|
83
|
+
function O(e, t) {
|
|
84
|
+
let n = e?.assistantAuth;
|
|
85
|
+
return D(n) && n.accessProfile === "member" ? !0 : (e?.writeApproval ?? "legacy") === t ? e?.confirmWrites === (t === "proposal-v1" ? "proposal-v1" : !0) : !1;
|
|
86
|
+
}
|
|
87
|
+
function k(e) {
|
|
62
88
|
return e === "api-calls";
|
|
63
89
|
}
|
|
64
|
-
function
|
|
90
|
+
function A(e, t, n, r) {
|
|
65
91
|
let i = [
|
|
66
92
|
{
|
|
67
93
|
name: "AI_ASSISTANT_MODE",
|
|
@@ -89,20 +115,106 @@ function k(e, t, n, r) {
|
|
|
89
115
|
}), r.workspaceToken && i.push({
|
|
90
116
|
name: "WORKSPACE_AUTH_TOKEN",
|
|
91
117
|
value: r.workspaceToken
|
|
92
|
-
})),
|
|
118
|
+
})), k(t) && i.push({
|
|
93
119
|
name: "AI_ASSISTANT_CONFIRM_WRITES",
|
|
94
120
|
value: "1"
|
|
95
121
|
}), i;
|
|
96
122
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
123
|
+
var ue = "assistant.errors.assistantProvisioningUnavailable", de = "provisionAssistantSandbox", fe = [
|
|
124
|
+
"ProvisionAssistantSandboxInput",
|
|
125
|
+
"SandboxAssistantMode",
|
|
126
|
+
"SandboxAssistantWriteApproval"
|
|
127
|
+
], j = /* @__PURE__ */ new Set();
|
|
128
|
+
function M(e) {
|
|
129
|
+
let t = e.metadata?.assistantAuth;
|
|
130
|
+
return D(t) && t.provisionedVia === de;
|
|
131
|
+
}
|
|
132
|
+
function N(e) {
|
|
133
|
+
for (let t of e) M(t) && j.add(t.id);
|
|
134
|
+
}
|
|
135
|
+
function P(e) {
|
|
136
|
+
return j.has(e);
|
|
137
|
+
}
|
|
138
|
+
function F(e, t) {
|
|
139
|
+
return G(t) === "proposal-v1" && (e === "assistant" || e === "api-calls") && g("provisionAssistantSandbox") !== "unsupported";
|
|
140
|
+
}
|
|
141
|
+
function I(e) {
|
|
142
|
+
return G(e) === "proposal-v1" && g("provisionAssistantSandbox") !== "unsupported" ? "proposal-v1" : "legacy";
|
|
143
|
+
}
|
|
144
|
+
function L(t) {
|
|
145
|
+
return e(t).some((e) => e.i18nKey === ue || e.code === "SERVICE_UNAVAILABLE");
|
|
146
|
+
}
|
|
147
|
+
function R(e, t) {
|
|
148
|
+
if (t <= 600) return !1;
|
|
149
|
+
let n = e instanceof Error ? e.message.toLowerCase() : String(e);
|
|
150
|
+
return n.includes("ttl") || n.includes("validation") || n.includes("maximum");
|
|
151
|
+
}
|
|
152
|
+
function z(e, n, r, i, a, o) {
|
|
153
|
+
if (n !== "assistant" && n !== "api-calls") throw Error(`Mode ${n} is not provisioned through the assistant path`);
|
|
154
|
+
return {
|
|
155
|
+
mode: n === "assistant" ? "ASSISTANT" : "API_CALLS",
|
|
156
|
+
product: e,
|
|
157
|
+
image: m(n, i),
|
|
158
|
+
ttlSeconds: a,
|
|
159
|
+
...n === "api-calls" ? { writeApproval: "PROPOSAL_V1" } : {},
|
|
160
|
+
env: [
|
|
161
|
+
{
|
|
162
|
+
name: "AI_ASSISTANT_PRODUCT",
|
|
163
|
+
value: e
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
name: "HOSTNAME",
|
|
167
|
+
value: "0.0.0.0"
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
name: "WORKSPACE_ID",
|
|
171
|
+
value: r
|
|
172
|
+
}
|
|
173
|
+
],
|
|
174
|
+
context: t(r, o)
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
async function B(e, t, n, i, a, o) {
|
|
178
|
+
let s = (await r({
|
|
179
|
+
query: u,
|
|
180
|
+
operationName: "ProvisionAssistantSandbox",
|
|
181
|
+
variables: { input: z(e, t, n, i, a, o) },
|
|
182
|
+
workspaceId: n,
|
|
183
|
+
authContext: o
|
|
184
|
+
}))?.provisionAssistantSandbox?.id;
|
|
185
|
+
if (!s) throw Error("provisionAssistantSandbox returned empty response");
|
|
186
|
+
return s;
|
|
187
|
+
}
|
|
188
|
+
async function V(e, t, n, r, i, a) {
|
|
189
|
+
try {
|
|
190
|
+
return await B(e, t, n, r, i, a);
|
|
191
|
+
} catch (o) {
|
|
192
|
+
if (L(o) || H(o) || !R(o, i)) throw o;
|
|
193
|
+
return B(e, t, n, r, 600, a);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
function H(e) {
|
|
197
|
+
return _(e, "provisionAssistantSandbox", fe);
|
|
198
|
+
}
|
|
199
|
+
async function pe(e, t, n, r, i, a, o = {}) {
|
|
200
|
+
if (F(t, o.writeApproval)) try {
|
|
201
|
+
let o = await V(e, t, n, r, i, a);
|
|
202
|
+
return v("provisionAssistantSandbox"), j.add(o), o;
|
|
203
|
+
} catch (e) {
|
|
204
|
+
if (!H(e)) throw e;
|
|
205
|
+
y("provisionAssistantSandbox");
|
|
206
|
+
}
|
|
207
|
+
return me(e, t, n, r, i, a);
|
|
208
|
+
}
|
|
209
|
+
async function me(e, n, i, o, s, c) {
|
|
210
|
+
let l = ie(n), u = A(e, n, i, c), d = (r) => ({
|
|
211
|
+
name: `ai-assistant-${n}-${Date.now()}`,
|
|
212
|
+
description: `AI Assistant sandbox (${n} mode)`,
|
|
101
213
|
template: "AI_BUILDER",
|
|
102
214
|
mode: "DEPLOYMENT",
|
|
103
215
|
containers: [{
|
|
104
216
|
name: "ai-assistant",
|
|
105
|
-
image:
|
|
217
|
+
image: m(n, o),
|
|
106
218
|
ports: [{
|
|
107
219
|
containerPort: 8080,
|
|
108
220
|
name: "http"
|
|
@@ -110,87 +222,86 @@ async function A(n, i, a, o, s, c) {
|
|
|
110
222
|
env: u
|
|
111
223
|
}],
|
|
112
224
|
resources: l,
|
|
113
|
-
ttlSeconds:
|
|
225
|
+
ttlSeconds: r,
|
|
114
226
|
metadata: {
|
|
115
|
-
assistantMode:
|
|
116
|
-
assistantProduct:
|
|
227
|
+
assistantMode: n,
|
|
228
|
+
assistantProduct: e,
|
|
117
229
|
assistantOwnerUserId: c.userId ?? null,
|
|
118
230
|
assistantOrganizationId: c.organizationId ?? null,
|
|
119
|
-
authStrategy:
|
|
120
|
-
imageTag:
|
|
121
|
-
confirmWrites:
|
|
231
|
+
authStrategy: ne,
|
|
232
|
+
imageTag: re(n, o),
|
|
233
|
+
confirmWrites: k(n)
|
|
122
234
|
},
|
|
123
|
-
context:
|
|
124
|
-
}),
|
|
125
|
-
query:
|
|
235
|
+
context: t(i, c)
|
|
236
|
+
}), f = (e) => r({
|
|
237
|
+
query: a,
|
|
126
238
|
operationName: "CreateSandbox",
|
|
127
|
-
variables: { input:
|
|
128
|
-
workspaceId:
|
|
239
|
+
variables: { input: d(e) },
|
|
240
|
+
workspaceId: i,
|
|
129
241
|
authContext: c
|
|
130
|
-
}),
|
|
242
|
+
}), p;
|
|
131
243
|
try {
|
|
132
|
-
|
|
244
|
+
p = await f(s);
|
|
133
245
|
} catch (e) {
|
|
134
|
-
|
|
135
|
-
if (s > 600 && (t.includes("ttl") || t.includes("validation") || t.includes("maximum"))) _ = await g(600);
|
|
246
|
+
if (R(e, s)) p = await f(600);
|
|
136
247
|
else throw e;
|
|
137
248
|
}
|
|
138
|
-
if (!
|
|
139
|
-
return
|
|
249
|
+
if (!p?.createSandbox?.id) throw Error("createSandbox returned empty response");
|
|
250
|
+
return p.createSandbox.id;
|
|
140
251
|
}
|
|
141
|
-
async function
|
|
142
|
-
return (await
|
|
143
|
-
query:
|
|
252
|
+
async function U(e, n, i) {
|
|
253
|
+
return (await r({
|
|
254
|
+
query: l,
|
|
144
255
|
operationName: "GetSandbox",
|
|
145
256
|
variables: {
|
|
146
|
-
id:
|
|
147
|
-
context:
|
|
257
|
+
id: e,
|
|
258
|
+
context: t(n, i)
|
|
148
259
|
},
|
|
149
|
-
workspaceId:
|
|
260
|
+
workspaceId: n,
|
|
150
261
|
authContext: i
|
|
151
262
|
})).getSandbox;
|
|
152
263
|
}
|
|
153
|
-
function
|
|
264
|
+
function W(e, t) {
|
|
154
265
|
if (e === "FAILED" || e === "STOPPED" || e === "EXPIRED") throw Error(t ? `Sandbox ${e.toLowerCase()}: ${t}` : `Sandbox ${e.toLowerCase()}`);
|
|
155
266
|
}
|
|
156
|
-
async function
|
|
267
|
+
async function he(e, n, i, a = 3e5) {
|
|
157
268
|
let o = Date.now();
|
|
158
269
|
if (g("waitForSandboxRunning") !== "unsupported") for (; Date.now() - o < a;) try {
|
|
159
|
-
let a = await
|
|
160
|
-
query:
|
|
270
|
+
let a = await r({
|
|
271
|
+
query: te,
|
|
161
272
|
operationName: "WaitForSandboxRunning",
|
|
162
273
|
variables: {
|
|
163
|
-
id:
|
|
274
|
+
id: e,
|
|
164
275
|
timeoutSeconds: 25,
|
|
165
|
-
context:
|
|
276
|
+
context: t(n, i)
|
|
166
277
|
},
|
|
167
|
-
workspaceId:
|
|
278
|
+
workspaceId: n,
|
|
168
279
|
authContext: i
|
|
169
280
|
});
|
|
170
281
|
v("waitForSandboxRunning");
|
|
171
282
|
let o = a.waitForSandboxRunning;
|
|
172
283
|
if (o?.status === "RUNNING") return;
|
|
173
|
-
|
|
284
|
+
W(o?.status, o?.errorMessage);
|
|
174
285
|
} catch (e) {
|
|
175
|
-
if (
|
|
286
|
+
if (ae(e)) {
|
|
176
287
|
y("waitForSandboxRunning");
|
|
177
288
|
break;
|
|
178
289
|
}
|
|
179
290
|
throw e;
|
|
180
291
|
}
|
|
181
292
|
for (; Date.now() - o < a;) {
|
|
182
|
-
let
|
|
183
|
-
if (
|
|
184
|
-
|
|
293
|
+
let t = await U(e, n, i);
|
|
294
|
+
if (t?.status === "RUNNING") return;
|
|
295
|
+
W(t?.status, t?.errorMessage), await new Promise((e) => setTimeout(e, 2e3));
|
|
185
296
|
}
|
|
186
297
|
throw Error("Sandbox startup timed out");
|
|
187
298
|
}
|
|
188
|
-
async function
|
|
299
|
+
async function ge(e, t, n, r, i = 9e4, a) {
|
|
189
300
|
let o = Date.now();
|
|
190
301
|
for (; Date.now() - o < i;) {
|
|
191
302
|
try {
|
|
192
|
-
await
|
|
193
|
-
return;
|
|
303
|
+
let i = await S(e, t, "/health", "GET", void 0, n, r);
|
|
304
|
+
return oe.getState().setSandboxWriteCapabilities(e, q(i)), i;
|
|
194
305
|
} catch (e) {
|
|
195
306
|
let t = e instanceof Error ? e.message : String(e);
|
|
196
307
|
if (!/proxy error: 502|proxy error: 503|proxy error: 404|service not available|starting/i.test(t)) throw e;
|
|
@@ -200,65 +311,137 @@ async function P(e, t, n, r, i = 9e4, a) {
|
|
|
200
311
|
}
|
|
201
312
|
throw Error("Assistant service did not become healthy before timeout");
|
|
202
313
|
}
|
|
203
|
-
|
|
204
|
-
return
|
|
314
|
+
function G(e) {
|
|
315
|
+
return e === "proposal-v1" ? "proposal-v1" : "legacy";
|
|
205
316
|
}
|
|
206
|
-
|
|
207
|
-
|
|
317
|
+
function K(e, t) {
|
|
318
|
+
return e === "enabled" || e === void 0 && !t ? "enabled" : "fenced";
|
|
319
|
+
}
|
|
320
|
+
var _e = new Set([
|
|
321
|
+
"relay",
|
|
322
|
+
"delegated",
|
|
323
|
+
"direct",
|
|
324
|
+
"unconfigured"
|
|
325
|
+
]);
|
|
326
|
+
function q(e) {
|
|
327
|
+
let t = typeof e == "object" && e && !Array.isArray(e) ? e.capabilities : void 0, n = typeof t == "object" && t && !Array.isArray(t) ? t : {}, r = n.writeProposals !== void 0 || n.writeApprovalMode !== void 0 || n.writeExecution !== void 0, i = n.writeRiskVersion, a = n.sessionCredentials;
|
|
328
|
+
return {
|
|
329
|
+
proposals: n.writeProposals === "v1",
|
|
330
|
+
writeApprovalMode: G(n.writeApprovalMode),
|
|
331
|
+
writeExecution: K(n.writeExecution, r),
|
|
332
|
+
replyApproval: "off",
|
|
333
|
+
...typeof i == "string" && i ? { writeRiskVersion: i } : {},
|
|
334
|
+
...typeof a == "string" && _e.has(a) ? { sessionCredentials: a } : {}
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
async function ve(e, t, n, r) {
|
|
338
|
+
return { sessionId: (await S(e, t, "/sessions", "POST", { mode: n }, n, r)).session.id };
|
|
339
|
+
}
|
|
340
|
+
async function ye(e, t, n, r, i) {
|
|
341
|
+
let a = await S(e, t, `/write-confirmations/${encodeURIComponent(n)}/approve`, "POST", {}, r, i);
|
|
208
342
|
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.");
|
|
209
343
|
}
|
|
210
|
-
function
|
|
211
|
-
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) : [];
|
|
344
|
+
function J(e, t, n, r, i, a = /* @__PURE__ */ new Set(), o = "legacy") {
|
|
345
|
+
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 && (!k(n) || O(e.metadata, o)) && E(e, n, o))).map((e) => e.id) : [];
|
|
212
346
|
}
|
|
213
|
-
async function
|
|
214
|
-
let
|
|
347
|
+
async function be(e, n, i, a, o, s = /* @__PURE__ */ new Set(), l = "legacy") {
|
|
348
|
+
let u, d = /* @__PURE__ */ new Set();
|
|
215
349
|
try {
|
|
216
|
-
|
|
217
|
-
query:
|
|
350
|
+
let f = (await r({
|
|
351
|
+
query: c,
|
|
218
352
|
operationName: "GetActiveSandboxes",
|
|
219
|
-
variables: { context: e
|
|
220
|
-
workspaceId:
|
|
221
|
-
authContext:
|
|
222
|
-
})).getActiveSandboxes ?? []
|
|
353
|
+
variables: { context: t(e, o) },
|
|
354
|
+
workspaceId: e,
|
|
355
|
+
authContext: o
|
|
356
|
+
})).getActiveSandboxes ?? [];
|
|
357
|
+
N(f);
|
|
358
|
+
let p = I(l);
|
|
359
|
+
if (u = J(f, n, i, a, o, s, p), p === "proposal-v1") {
|
|
360
|
+
let e = new Set(u);
|
|
361
|
+
for (let t of f) {
|
|
362
|
+
let n = h(t);
|
|
363
|
+
e.has(t.id) && (n === "assistant" || n === "api-calls") && d.add(t.id);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
223
366
|
} catch {
|
|
224
367
|
return [];
|
|
225
368
|
}
|
|
226
|
-
return (await Promise.all(
|
|
369
|
+
return (await Promise.all(u.map(async (t) => {
|
|
227
370
|
try {
|
|
228
|
-
return await
|
|
371
|
+
return await Y(t, e, o, { ownerScoped: d.has(t) }), t;
|
|
229
372
|
} catch {
|
|
230
373
|
return null;
|
|
231
374
|
}
|
|
232
375
|
}))).filter((e) => e !== null);
|
|
233
376
|
}
|
|
234
|
-
async function
|
|
235
|
-
|
|
236
|
-
|
|
377
|
+
async function Y(e, n, i, a = {}) {
|
|
378
|
+
if ((a.ownerScoped === !0 || P(e)) && g("stopMyAssistantSandbox") !== "unsupported") try {
|
|
379
|
+
await r({
|
|
380
|
+
query: ee,
|
|
381
|
+
operationName: "StopMyAssistantSandbox",
|
|
382
|
+
variables: {
|
|
383
|
+
id: e,
|
|
384
|
+
context: t(n, i)
|
|
385
|
+
},
|
|
386
|
+
workspaceId: n,
|
|
387
|
+
authContext: i
|
|
388
|
+
}), v("stopMyAssistantSandbox");
|
|
389
|
+
return;
|
|
390
|
+
} catch (e) {
|
|
391
|
+
if (!_(e, "stopMyAssistantSandbox")) throw e;
|
|
392
|
+
y("stopMyAssistantSandbox");
|
|
393
|
+
}
|
|
394
|
+
await r({
|
|
395
|
+
query: p,
|
|
237
396
|
operationName: "StopAssistantSandbox",
|
|
238
397
|
variables: {
|
|
239
|
-
id:
|
|
240
|
-
context:
|
|
398
|
+
id: e,
|
|
399
|
+
context: t(n, i)
|
|
241
400
|
},
|
|
242
|
-
workspaceId:
|
|
401
|
+
workspaceId: n,
|
|
243
402
|
authContext: i
|
|
244
403
|
});
|
|
245
404
|
}
|
|
246
|
-
|
|
405
|
+
var X = /^[A-Za-z0-9_-]{1,128}$/, xe = new Set([
|
|
406
|
+
"affirm",
|
|
407
|
+
"decline",
|
|
408
|
+
"other"
|
|
409
|
+
]), Se = new Set([
|
|
410
|
+
"typed",
|
|
411
|
+
"spoken",
|
|
412
|
+
"chip",
|
|
413
|
+
"host_queued",
|
|
414
|
+
"retry",
|
|
415
|
+
"proposal_result"
|
|
416
|
+
]), Ce = /^wp_[0-9a-f]{32}$/;
|
|
417
|
+
function we(e) {
|
|
418
|
+
return !e || !xe.has(e.kind) || !Se.has(e.origin) ? null : e.proposalId === void 0 ? {
|
|
419
|
+
kind: e.kind,
|
|
420
|
+
origin: e.origin
|
|
421
|
+
} : Ce.test(e.proposalId) ? {
|
|
422
|
+
kind: e.kind,
|
|
423
|
+
origin: e.origin,
|
|
424
|
+
proposalId: e.proposalId
|
|
425
|
+
} : null;
|
|
426
|
+
}
|
|
427
|
+
function Z(e) {
|
|
247
428
|
let { mode: t, prompt: n, pageContext: r, parts: i } = e, a = {
|
|
248
429
|
mode: t,
|
|
249
430
|
prompt: n,
|
|
250
431
|
pageContext: r
|
|
251
432
|
};
|
|
252
|
-
|
|
433
|
+
i && i.length > 0 && (a.parts = i), typeof e.conversationId == "string" && X.test(e.conversationId) && (a.conversationId = e.conversationId);
|
|
434
|
+
let o = we(e.writeReply);
|
|
435
|
+
return o && (a.writeReply = o), a;
|
|
253
436
|
}
|
|
254
|
-
function
|
|
255
|
-
return
|
|
437
|
+
function Q(e) {
|
|
438
|
+
return x(e.sandboxId, e.workspaceId, `/sessions/${e.sessionId}/prompt-async`, "POST", Z(e), e.mode, e.authContext);
|
|
256
439
|
}
|
|
257
|
-
function
|
|
258
|
-
return new TextEncoder().encode(JSON.stringify(
|
|
440
|
+
function $(e) {
|
|
441
|
+
return new TextEncoder().encode(JSON.stringify(Q(e))).byteLength;
|
|
259
442
|
}
|
|
260
|
-
async function
|
|
261
|
-
if (
|
|
443
|
+
async function Te(e, t, n, r, i, a, o, s) {
|
|
444
|
+
if ($({
|
|
262
445
|
sandboxId: e,
|
|
263
446
|
workspaceId: t,
|
|
264
447
|
sessionId: n,
|
|
@@ -266,26 +449,30 @@ async function U(e, t, n, r, i, a, o, s) {
|
|
|
266
449
|
mode: i,
|
|
267
450
|
pageContext: a,
|
|
268
451
|
authContext: o,
|
|
269
|
-
parts: s?.parts
|
|
270
|
-
|
|
271
|
-
|
|
452
|
+
parts: s?.parts,
|
|
453
|
+
conversationId: s?.conversationId,
|
|
454
|
+
writeReply: s?.writeReply
|
|
455
|
+
}) > 262144) throw Error(se);
|
|
456
|
+
let c = await S(e, t, `/sessions/${n}/prompt-async`, "POST", Z({
|
|
272
457
|
mode: i,
|
|
273
458
|
prompt: r,
|
|
274
459
|
pageContext: a,
|
|
275
|
-
parts: s?.parts
|
|
460
|
+
parts: s?.parts,
|
|
461
|
+
conversationId: s?.conversationId,
|
|
462
|
+
writeReply: s?.writeReply
|
|
276
463
|
}), i, o);
|
|
277
464
|
return { messageID: typeof c.messageID == "string" ? c.messageID : void 0 };
|
|
278
465
|
}
|
|
279
|
-
async function
|
|
466
|
+
async function Ee(e, t, n, r, i, a) {
|
|
280
467
|
let o = `/sessions/${n}/messages?limit=${a?.limit ?? 50}`;
|
|
281
468
|
a?.sinceMs && g("sinceParam") !== "unsupported" && (o += `&since=${a.sinceMs}`);
|
|
282
|
-
let s = await
|
|
469
|
+
let s = await S(e, t, o, "GET", void 0, r, i);
|
|
283
470
|
return typeof s.now == "number" && v("sinceParam"), s.messages ?? [];
|
|
284
471
|
}
|
|
285
|
-
async function
|
|
472
|
+
async function De(e, t, n, r, i) {
|
|
286
473
|
if (g("sse") === "unsupported") return null;
|
|
287
474
|
try {
|
|
288
|
-
let a = await
|
|
475
|
+
let a = await S(e, t, `/sessions/${n}/stream-url`, "GET", void 0, r, i);
|
|
289
476
|
return typeof a.url == "string" && typeof a.expiresAt == "number" ? (v("sse"), {
|
|
290
477
|
url: a.url,
|
|
291
478
|
expiresAt: a.expiresAt
|
|
@@ -294,41 +481,58 @@ async function G(e, t, n, r, i) {
|
|
|
294
481
|
return y("sse"), null;
|
|
295
482
|
}
|
|
296
483
|
}
|
|
297
|
-
async function
|
|
298
|
-
|
|
299
|
-
|
|
484
|
+
async function Oe(e, n, i, a) {
|
|
485
|
+
if (P(e) && g("extendMyAssistantSandboxTTL") !== "unsupported") try {
|
|
486
|
+
await r({
|
|
487
|
+
query: o,
|
|
488
|
+
operationName: "ExtendMyAssistantSandboxTtl",
|
|
489
|
+
variables: {
|
|
490
|
+
id: e,
|
|
491
|
+
additionalSeconds: i,
|
|
492
|
+
context: t(n, a)
|
|
493
|
+
},
|
|
494
|
+
workspaceId: n,
|
|
495
|
+
authContext: a
|
|
496
|
+
}), v("extendMyAssistantSandboxTTL");
|
|
497
|
+
return;
|
|
498
|
+
} catch (e) {
|
|
499
|
+
if (!_(e, "extendMyAssistantSandboxTTL")) throw e;
|
|
500
|
+
y("extendMyAssistantSandboxTTL");
|
|
501
|
+
}
|
|
502
|
+
await r({
|
|
503
|
+
query: s,
|
|
300
504
|
operationName: "ExtendSandboxTtl",
|
|
301
505
|
variables: {
|
|
302
|
-
id:
|
|
303
|
-
additionalSeconds:
|
|
304
|
-
context:
|
|
506
|
+
id: e,
|
|
507
|
+
additionalSeconds: i,
|
|
508
|
+
context: t(n, a)
|
|
305
509
|
},
|
|
306
|
-
workspaceId:
|
|
307
|
-
authContext:
|
|
510
|
+
workspaceId: n,
|
|
511
|
+
authContext: a
|
|
308
512
|
});
|
|
309
513
|
}
|
|
310
|
-
async function
|
|
311
|
-
await
|
|
514
|
+
async function ke(e, t, n, r, i) {
|
|
515
|
+
await S(e, t, `/sessions/${n}/heartbeat`, "POST", void 0, r, i).catch(() => void 0);
|
|
312
516
|
}
|
|
313
|
-
async function
|
|
517
|
+
async function Ae(e, t, n, r, i) {
|
|
314
518
|
try {
|
|
315
|
-
return (await
|
|
519
|
+
return (await S(e, t, `/sessions/${n}/abort`, "POST", void 0, r, i))?.aborted === !0;
|
|
316
520
|
} catch {
|
|
317
521
|
return !1;
|
|
318
522
|
}
|
|
319
523
|
}
|
|
320
|
-
async function
|
|
321
|
-
return ((await
|
|
524
|
+
async function je(e, t, n, r, i) {
|
|
525
|
+
return ((await S(e, t, `/sessions/${n}/artifacts`, "GET", void 0, r, i)).artifacts ?? []).filter((e) => !e.name.startsWith("."));
|
|
322
526
|
}
|
|
323
|
-
async function
|
|
324
|
-
let a = await
|
|
527
|
+
async function Me(e, t, n, r, i) {
|
|
528
|
+
let a = await S(e, t, `/sessions/${n}`, "GET", void 0, r, i);
|
|
325
529
|
return {
|
|
326
530
|
id: a.session?.id ?? n,
|
|
327
531
|
mode: a.mode ?? "unknown"
|
|
328
532
|
};
|
|
329
533
|
}
|
|
330
|
-
async function
|
|
331
|
-
let o = (await
|
|
534
|
+
async function Ne(e, t, n, r, i, a) {
|
|
535
|
+
let o = (await S(e, t, `/sessions/${n}/artifacts/download?path=${encodeURIComponent(r)}`, "GET", void 0, i, a)).artifact;
|
|
332
536
|
if (!o) throw Error("Artifact download returned an empty response");
|
|
333
537
|
return {
|
|
334
538
|
filename: o.filename,
|
|
@@ -336,30 +540,30 @@ async function Z(e, t, n, r, i, a) {
|
|
|
336
540
|
contentBase64: o.contentBase64
|
|
337
541
|
};
|
|
338
542
|
}
|
|
339
|
-
async function
|
|
340
|
-
return (await
|
|
341
|
-
query:
|
|
543
|
+
async function Pe(e, t) {
|
|
544
|
+
return (await r({
|
|
545
|
+
query: i,
|
|
342
546
|
operationName: "CheckAiCredits",
|
|
343
547
|
variables: {},
|
|
344
548
|
workspaceId: e,
|
|
345
|
-
authContext:
|
|
549
|
+
authContext: t
|
|
346
550
|
})).checkAiCredits;
|
|
347
551
|
}
|
|
348
|
-
async function
|
|
349
|
-
let s = Math.max(0, Math.round(a.input ?? 0)),
|
|
350
|
-
s +
|
|
351
|
-
query:
|
|
552
|
+
async function Fe(e, t, n, i, a, o) {
|
|
553
|
+
let s = Math.max(0, Math.round(a.input ?? 0)), c = Math.max(0, Math.round(a.output ?? 0));
|
|
554
|
+
s + c === 0 || !i || await r({
|
|
555
|
+
query: f,
|
|
352
556
|
operationName: "ReportAiTokenUsage",
|
|
353
557
|
variables: { input: {
|
|
354
|
-
sessionId:
|
|
355
|
-
messageId:
|
|
558
|
+
sessionId: t,
|
|
559
|
+
messageId: n,
|
|
356
560
|
model: i,
|
|
357
561
|
inputTokens: s,
|
|
358
|
-
outputTokens:
|
|
562
|
+
outputTokens: c
|
|
359
563
|
} },
|
|
360
564
|
workspaceId: e,
|
|
361
565
|
authContext: o
|
|
362
566
|
});
|
|
363
567
|
}
|
|
364
568
|
//#endregion
|
|
365
|
-
export {
|
|
569
|
+
export { X as PROMPT_CONVERSATION_ID_PATTERN, Ae as abortAssistantTurn, ye as approvePendingWrite, E as askReuseMatchesProvisioning, A as buildAssistantSandboxEnv, Q as buildPromptGatewayRequest, Z as buildPromptRequestBody, z as buildProvisionAssistantSandboxInput, Pe as checkAssistantAiCredits, pe as createAssistantSandbox, ve as createAssistantSession, Ne as downloadAssistantArtifact, Oe as extendAssistantSandboxTTL, le as findExistingSandbox, C as findExistingSandboxWithStatus, b as forwardsUserTokensToSandbox, je as getAssistantArtifacts, Ee as getAssistantMessages, Me as getAssistantSession, De as getAssistantStreamAccess, L as isAssistantProvisioningUnavailable, P as isDedicatedAssistantSandbox, M as isDedicatedAssistantSandboxRow, k as modeRequiresConfirmWrites, $ as promptGatewayRequestBytes, ce as proxySandboxRaw, q as readSandboxWriteCapabilities, be as releaseSupersededAssistantSandboxes, Fe as reportAssistantAiTokenUsage, w as sandboxStatusOf, T as selectExistingAssistantSandbox, J as selectSupersededAssistantSandboxes, Te as sendAssistantPromptAsync, ke as sendHeartbeat, Y as stopReapedAssistantSandbox, F as usesDedicatedAssistantProvisioning, ge as waitForAssistantServiceReady, he as waitForSandboxRunning, G as writeApprovalModeOf, O as writeApprovalReuseMatches, K as writeExecutionOf };
|