@burdenoff/fe-libs 2026.713.3 → 2026.713.5
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/chrome/ProductPickerSheet.d.ts.map +1 -1
- package/dist/chrome/ProductSwitcher.d.ts.map +1 -1
- package/dist/chrome/notificationCenter/NotificationList.d.ts.map +1 -1
- package/dist/shared/assistant/api.d.ts +34 -0
- package/dist/shared/assistant/api.d.ts.map +1 -0
- package/dist/shared/assistant/api.js +226 -0
- package/dist/shared/assistant/capabilities.d.ts +21 -0
- package/dist/shared/assistant/capabilities.d.ts.map +1 -0
- package/dist/shared/assistant/capabilities.js +21 -0
- package/dist/shared/assistant/createSandboxAssistantTransport.d.ts +7 -0
- package/dist/shared/assistant/createSandboxAssistantTransport.d.ts.map +1 -0
- package/dist/shared/assistant/createSandboxAssistantTransport.js +91 -0
- package/dist/shared/assistant/gatewayClient.d.ts +11 -0
- package/dist/shared/assistant/gatewayClient.d.ts.map +1 -0
- package/dist/shared/assistant/gatewayClient.js +56 -0
- package/dist/shared/assistant/images.d.ts +16 -0
- package/dist/shared/assistant/images.d.ts.map +1 -0
- package/dist/shared/assistant/images.js +34 -0
- package/dist/shared/assistant/index.d.ts +14 -0
- package/dist/shared/assistant/index.d.ts.map +1 -0
- package/dist/shared/assistant/operations.d.ts +19 -0
- package/dist/shared/assistant/operations.d.ts.map +1 -0
- package/dist/shared/assistant/operations.js +4 -0
- package/dist/shared/assistant/progress.d.ts +26 -0
- package/dist/shared/assistant/progress.d.ts.map +1 -0
- package/dist/shared/assistant/progress.js +74 -0
- package/dist/shared/assistant/runtime.d.ts +34 -0
- package/dist/shared/assistant/runtime.d.ts.map +1 -0
- package/dist/shared/assistant/runtime.js +91 -0
- package/dist/shared/assistant/types.d.ts +109 -0
- package/dist/shared/assistant/types.d.ts.map +1 -0
- package/dist/shared/assistant/useSandboxAssistantTransport.d.ts +3 -0
- package/dist/shared/assistant/useSandboxAssistantTransport.d.ts.map +1 -0
- package/dist/shared/assistant/useSandboxAssistantTransport.js +41 -0
- package/dist/shared/components/assistantWidget/AssistantWidget.d.ts +1 -1
- package/dist/shared/components/assistantWidget/AssistantWidget.d.ts.map +1 -1
- package/dist/shared/components/assistantWidget/AssistantWidget.js +130 -111
- package/dist/shared/components/assistantWidget/types.d.ts +12 -2
- package/dist/shared/components/assistantWidget/types.d.ts.map +1 -1
- package/dist/shared-assistant.d.ts +2 -0
- package/dist/shared-assistant.js +6 -0
- package/package.json +5 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductPickerSheet.d.ts","sourceRoot":"","sources":["../../src/chrome/ProductPickerSheet.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAO3C,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAC9C;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,uBAAuB,
|
|
1
|
+
{"version":3,"file":"ProductPickerSheet.d.ts","sourceRoot":"","sources":["../../src/chrome/ProductPickerSheet.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAO3C,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAC9C;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,uBAAuB,CAiI1D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductSwitcher.d.ts","sourceRoot":"","sources":["../../src/chrome/ProductSwitcher.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAShC,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,
|
|
1
|
+
{"version":3,"file":"ProductSwitcher.d.ts","sourceRoot":"","sources":["../../src/chrome/ProductSwitcher.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAShC,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EACzF,QAAQ,EAAE,CAAC,EAAE,EACb,KAAK,EAAE,MAAM,GACZ,CAAC,EAAE,CASL;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,OAAO,EAAE,EACnB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,GAAG,SAAS,CAKrB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,4CAA4C;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CA0NpD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotificationList.d.ts","sourceRoot":"","sources":["../../../src/chrome/notificationCenter/NotificationList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAGhC,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEvE,UAAU,qBAAqB;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,
|
|
1
|
+
{"version":3,"file":"NotificationList.d.ts","sourceRoot":"","sources":["../../../src/chrome/notificationCenter/NotificationList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAGhC,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEvE,UAAU,qBAAqB;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAkFtD,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { AssistantMode, AssistantRawMessage, AssistantSandboxAuthContext, AssistantArtifact, StreamAccess } from './types';
|
|
2
|
+
export declare function findExistingSandbox(workspaceId: string, mode: AssistantMode, isProd: boolean, authContext: AssistantSandboxAuthContext): Promise<string | null>;
|
|
3
|
+
export declare function createAssistantSandbox(product: string, mode: AssistantMode, workspaceId: string, isProd: boolean, ttlSeconds: number, authContext: AssistantSandboxAuthContext): Promise<string>;
|
|
4
|
+
/**
|
|
5
|
+
* Wait for RUNNING. Prefers the svc long-poll (waitForSandboxRunning); on an
|
|
6
|
+
* older gateway that field errors → falls back to 2s getSandbox polling. Keeps
|
|
7
|
+
* the same terminal-error strings either way.
|
|
8
|
+
*/
|
|
9
|
+
export declare function waitForSandboxRunning(sandboxId: string, workspaceId: string, authContext: AssistantSandboxAuthContext, maxWaitMs?: number): Promise<void>;
|
|
10
|
+
export declare function waitForAssistantServiceReady(sandboxId: string, workspaceId: string, authContext: AssistantSandboxAuthContext, maxWaitMs?: number): Promise<void>;
|
|
11
|
+
export declare function createAssistantSession(sandboxId: string, workspaceId: string, mode: AssistantMode, authContext: AssistantSandboxAuthContext): Promise<{
|
|
12
|
+
sessionId: string;
|
|
13
|
+
}>;
|
|
14
|
+
export declare function sendAssistantPromptAsync(sandboxId: string, workspaceId: string, sessionId: string, prompt: string, mode: AssistantMode, pageContext: Record<string, unknown> | undefined, authContext: AssistantSandboxAuthContext): Promise<{
|
|
15
|
+
messageID?: string;
|
|
16
|
+
}>;
|
|
17
|
+
export declare function getAssistantMessages(sandboxId: string, workspaceId: string, sessionId: string, authContext: AssistantSandboxAuthContext, opts?: {
|
|
18
|
+
limit?: number;
|
|
19
|
+
sinceMs?: number;
|
|
20
|
+
}): Promise<AssistantRawMessage[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Ask the svc to mint a signed SSE stream URL. Returns null when unavailable
|
|
23
|
+
* (older backend / preview data plane off) → caller falls back to polling.
|
|
24
|
+
*/
|
|
25
|
+
export declare function getAssistantStreamAccess(sandboxId: string, workspaceId: string, sessionId: string, authContext: AssistantSandboxAuthContext): Promise<StreamAccess | null>;
|
|
26
|
+
export declare function extendAssistantSandboxTTL(sandboxId: string, workspaceId: string, additionalSeconds: number, authContext: AssistantSandboxAuthContext): Promise<void>;
|
|
27
|
+
export declare function sendHeartbeat(sandboxId: string, workspaceId: string, sessionId: string, authContext: AssistantSandboxAuthContext): Promise<void>;
|
|
28
|
+
export declare function getAssistantArtifacts(sandboxId: string, workspaceId: string, sessionId: string, authContext: AssistantSandboxAuthContext): Promise<AssistantArtifact[]>;
|
|
29
|
+
export declare function checkAssistantAiCredits(workspaceId: string, authContext: AssistantSandboxAuthContext): Promise<boolean>;
|
|
30
|
+
export declare function reportAssistantAiTokenUsage(workspaceId: string, sessionId: string, messageId: string, model: string | undefined, tokens: {
|
|
31
|
+
input: number;
|
|
32
|
+
output: number;
|
|
33
|
+
}, authContext: AssistantSandboxAuthContext): Promise<void>;
|
|
34
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/api.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqBH,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,2BAA2B,EAC3B,iBAAiB,EACjB,YAAY,EACb,MAAM,SAAS,CAAC;AAuCjB,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,OAAO,EACf,WAAW,EAAE,2BAA2B,GACvC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA6BxB;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,aAAa,EACnB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,2BAA2B,GACvC,OAAO,CAAC,MAAM,CAAC,CA4DjB;AAiCD;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,2BAA2B,EACxC,SAAS,SAAU,GAClB,OAAO,CAAC,IAAI,CAAC,CA0Cf;AAED,wBAAsB,4BAA4B,CAChD,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,2BAA2B,EACxC,SAAS,SAAS,GACjB,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,aAAa,EACnB,WAAW,EAAE,2BAA2B,GACvC,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAWhC;AAED,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,aAAa,EACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAChD,WAAW,EAAE,2BAA2B,GACvC,OAAO,CAAC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAUjC;AAED,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,2BAA2B,EACxC,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1C,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAUhC;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,2BAA2B,GACvC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAqB9B;AAED,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,iBAAiB,EAAE,MAAM,EACzB,WAAW,EAAE,2BAA2B,GACvC,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,2BAA2B,GACvC,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,2BAA2B,GACvC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAY9B;AAED,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,2BAA2B,GACvC,OAAO,CAAC,OAAO,CAAC,CASlB;AAED,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EACzC,WAAW,EAAE,2BAA2B,GACvC,OAAO,CAAC,IAAI,CAAC,CAWf"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { buildSandboxContextInput as e, executeSandboxGraphQL as t } from "./gatewayClient.js";
|
|
2
|
+
import { CHECK_AI_CREDITS as n, CREATE_SANDBOX as r, EXTEND_SANDBOX_TTL as i, GET_ACTIVE_SANDBOXES as a, GET_SANDBOX as o, PROXY_SANDBOX_REQUEST as s, REPORT_AI_TOKEN_USAGE as c, WAIT_FOR_SANDBOX_RUNNING as l } from "./operations.js";
|
|
3
|
+
import { ASSISTANT_API_AUTH_STRATEGY as u, getImageForMode as d, getImageTagForMode as f, getResourcesForMode as p, resolveSandboxAssistantMode as m } from "./images.js";
|
|
4
|
+
import { getCapability as h, isUnknownFieldError as g, markSupported as _, markUnsupported as v } from "./capabilities.js";
|
|
5
|
+
//#region src/shared/assistant/api.ts
|
|
6
|
+
async function y(n, r, i, a, o, c) {
|
|
7
|
+
let l = (await t({
|
|
8
|
+
query: s,
|
|
9
|
+
operationName: "ProxySandboxRequest",
|
|
10
|
+
variables: { input: {
|
|
11
|
+
sandboxId: n,
|
|
12
|
+
path: i,
|
|
13
|
+
method: a,
|
|
14
|
+
body: o,
|
|
15
|
+
context: e(r, c)
|
|
16
|
+
} },
|
|
17
|
+
workspaceId: r,
|
|
18
|
+
authContext: c
|
|
19
|
+
})).proxySandboxRequest;
|
|
20
|
+
if (!l || l.status >= 400) {
|
|
21
|
+
let e = l?.body;
|
|
22
|
+
throw Error(e?.error ?? `Proxy error: ${l?.status ?? "unknown"}`);
|
|
23
|
+
}
|
|
24
|
+
return l.body;
|
|
25
|
+
}
|
|
26
|
+
async function b(n, r, i, o) {
|
|
27
|
+
return ((await t({
|
|
28
|
+
query: a,
|
|
29
|
+
operationName: "GetActiveSandboxes",
|
|
30
|
+
variables: { context: e(n, o) },
|
|
31
|
+
workspaceId: n,
|
|
32
|
+
authContext: o
|
|
33
|
+
})).getActiveSandboxes ?? []).find((e) => (e.status === "RUNNING" || e.status === "PROVISIONING" || e.status === "PENDING") && e.template === "AI_BUILDER" && m(e) === r && (!o.userId || e.createdBy === o.userId) && e.metadata?.authStrategy === "sandbox-app-client-headers-v1" && e.metadata?.imageTag === f(r, i))?.id ?? null;
|
|
34
|
+
}
|
|
35
|
+
async function x(n, i, a, o, s, c) {
|
|
36
|
+
let l = p(i), m = [
|
|
37
|
+
{
|
|
38
|
+
name: "AI_ASSISTANT_MODE",
|
|
39
|
+
value: i
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: "HOSTNAME",
|
|
43
|
+
value: "0.0.0.0"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: "WORKSPACE_ID",
|
|
47
|
+
value: a
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: "AI_ASSISTANT_PRODUCT",
|
|
51
|
+
value: n
|
|
52
|
+
}
|
|
53
|
+
], h = (t) => ({
|
|
54
|
+
name: `ai-assistant-${i}-${Date.now()}`,
|
|
55
|
+
description: `AI Assistant sandbox (${i} mode)`,
|
|
56
|
+
template: "AI_BUILDER",
|
|
57
|
+
mode: "DEPLOYMENT",
|
|
58
|
+
containers: [{
|
|
59
|
+
name: "ai-assistant",
|
|
60
|
+
image: d(i, o),
|
|
61
|
+
ports: [{
|
|
62
|
+
containerPort: 8080,
|
|
63
|
+
name: "http"
|
|
64
|
+
}],
|
|
65
|
+
env: m
|
|
66
|
+
}],
|
|
67
|
+
resources: l,
|
|
68
|
+
ttlSeconds: t,
|
|
69
|
+
metadata: {
|
|
70
|
+
assistantMode: i,
|
|
71
|
+
assistantOwnerUserId: c.userId ?? null,
|
|
72
|
+
assistantOrganizationId: c.organizationId ?? null,
|
|
73
|
+
authStrategy: u,
|
|
74
|
+
imageTag: f(i, o)
|
|
75
|
+
},
|
|
76
|
+
context: e(a, c)
|
|
77
|
+
}), g = (e) => t({
|
|
78
|
+
query: r,
|
|
79
|
+
operationName: "CreateSandbox",
|
|
80
|
+
variables: { input: h(e) },
|
|
81
|
+
workspaceId: a,
|
|
82
|
+
authContext: c
|
|
83
|
+
}), _;
|
|
84
|
+
try {
|
|
85
|
+
_ = await g(s);
|
|
86
|
+
} catch (e) {
|
|
87
|
+
let t = e instanceof Error ? e.message.toLowerCase() : String(e);
|
|
88
|
+
if (s > 600 && (t.includes("ttl") || t.includes("validation") || t.includes("maximum"))) _ = await g(600);
|
|
89
|
+
else throw e;
|
|
90
|
+
}
|
|
91
|
+
if (!_?.createSandbox?.id) throw Error("createSandbox returned empty response");
|
|
92
|
+
return _.createSandbox.id;
|
|
93
|
+
}
|
|
94
|
+
async function S(n, r, i) {
|
|
95
|
+
return (await t({
|
|
96
|
+
query: o,
|
|
97
|
+
operationName: "GetSandbox",
|
|
98
|
+
variables: {
|
|
99
|
+
id: n,
|
|
100
|
+
context: e(r, i)
|
|
101
|
+
},
|
|
102
|
+
workspaceId: r,
|
|
103
|
+
authContext: i
|
|
104
|
+
})).getSandbox;
|
|
105
|
+
}
|
|
106
|
+
function C(e, t) {
|
|
107
|
+
if (e === "FAILED" || e === "STOPPED" || e === "EXPIRED") throw Error(t ? `Sandbox ${e.toLowerCase()}: ${t}` : `Sandbox ${e.toLowerCase()}`);
|
|
108
|
+
}
|
|
109
|
+
async function w(n, r, i, a = 3e5) {
|
|
110
|
+
let o = Date.now();
|
|
111
|
+
if (h("waitForSandboxRunning") !== "unsupported") for (; Date.now() - o < a;) try {
|
|
112
|
+
let a = await t({
|
|
113
|
+
query: l,
|
|
114
|
+
operationName: "WaitForSandboxRunning",
|
|
115
|
+
variables: {
|
|
116
|
+
id: n,
|
|
117
|
+
timeoutSeconds: 25,
|
|
118
|
+
context: e(r, i)
|
|
119
|
+
},
|
|
120
|
+
workspaceId: r,
|
|
121
|
+
authContext: i
|
|
122
|
+
});
|
|
123
|
+
_("waitForSandboxRunning");
|
|
124
|
+
let o = a.waitForSandboxRunning;
|
|
125
|
+
if (o?.status === "RUNNING") return;
|
|
126
|
+
C(o?.status, o?.errorMessage);
|
|
127
|
+
} catch (e) {
|
|
128
|
+
if (g(e)) {
|
|
129
|
+
v("waitForSandboxRunning");
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
throw e;
|
|
133
|
+
}
|
|
134
|
+
for (; Date.now() - o < a;) {
|
|
135
|
+
let e = await S(n, r, i);
|
|
136
|
+
if (e?.status === "RUNNING") return;
|
|
137
|
+
C(e?.status, e?.errorMessage), await new Promise((e) => setTimeout(e, 2e3));
|
|
138
|
+
}
|
|
139
|
+
throw Error("Sandbox startup timed out");
|
|
140
|
+
}
|
|
141
|
+
async function T(e, t, n, r = 9e4) {
|
|
142
|
+
let i = Date.now();
|
|
143
|
+
for (; Date.now() - i < r;) {
|
|
144
|
+
try {
|
|
145
|
+
await y(e, t, "/health", "GET", void 0, n);
|
|
146
|
+
return;
|
|
147
|
+
} catch (e) {
|
|
148
|
+
let t = e instanceof Error ? e.message : String(e);
|
|
149
|
+
if (!/proxy error: 502|proxy error: 503|proxy error: 404|service not available|starting/i.test(t)) throw e;
|
|
150
|
+
}
|
|
151
|
+
await new Promise((e) => setTimeout(e, 2e3));
|
|
152
|
+
}
|
|
153
|
+
throw Error("Assistant service did not become healthy before timeout");
|
|
154
|
+
}
|
|
155
|
+
async function E(e, t, n, r) {
|
|
156
|
+
return { sessionId: (await y(e, t, "/sessions", "POST", { mode: n }, r)).session.id };
|
|
157
|
+
}
|
|
158
|
+
async function D(e, t, n, r, i, a, o) {
|
|
159
|
+
let s = await y(e, t, `/sessions/${n}/prompt-async`, "POST", {
|
|
160
|
+
mode: i,
|
|
161
|
+
prompt: r,
|
|
162
|
+
pageContext: a
|
|
163
|
+
}, o);
|
|
164
|
+
return { messageID: typeof s.messageID == "string" ? s.messageID : void 0 };
|
|
165
|
+
}
|
|
166
|
+
async function O(e, t, n, r, i) {
|
|
167
|
+
let a = `/sessions/${n}/messages?limit=${i?.limit ?? 50}`;
|
|
168
|
+
i?.sinceMs && h("sinceParam") !== "unsupported" && (a += `&since=${i.sinceMs}`);
|
|
169
|
+
let o = await y(e, t, a, "GET", void 0, r);
|
|
170
|
+
return typeof o.now == "number" && _("sinceParam"), o.messages ?? [];
|
|
171
|
+
}
|
|
172
|
+
async function k(e, t, n, r) {
|
|
173
|
+
if (h("sse") === "unsupported") return null;
|
|
174
|
+
try {
|
|
175
|
+
let i = await y(e, t, `/sessions/${n}/stream-url`, "GET", void 0, r);
|
|
176
|
+
return typeof i.url == "string" && typeof i.expiresAt == "number" ? (_("sse"), {
|
|
177
|
+
url: i.url,
|
|
178
|
+
expiresAt: i.expiresAt
|
|
179
|
+
}) : (v("sse"), null);
|
|
180
|
+
} catch {
|
|
181
|
+
return v("sse"), null;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
async function A(n, r, a, o) {
|
|
185
|
+
await t({
|
|
186
|
+
query: i,
|
|
187
|
+
operationName: "ExtendSandboxTtl",
|
|
188
|
+
variables: {
|
|
189
|
+
id: n,
|
|
190
|
+
additionalSeconds: a,
|
|
191
|
+
context: e(r, o)
|
|
192
|
+
},
|
|
193
|
+
workspaceId: r,
|
|
194
|
+
authContext: o
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
async function j(e, t, n, r) {
|
|
198
|
+
await y(e, t, `/sessions/${n}/heartbeat`, "POST", void 0, r).catch(() => void 0);
|
|
199
|
+
}
|
|
200
|
+
async function M(e, r) {
|
|
201
|
+
return (await t({
|
|
202
|
+
query: n,
|
|
203
|
+
operationName: "CheckAiCredits",
|
|
204
|
+
variables: {},
|
|
205
|
+
workspaceId: e,
|
|
206
|
+
authContext: r
|
|
207
|
+
})).checkAiCredits;
|
|
208
|
+
}
|
|
209
|
+
async function N(e, n, r, i, a, o) {
|
|
210
|
+
let s = Math.max(0, Math.round(a.input ?? 0)), l = Math.max(0, Math.round(a.output ?? 0));
|
|
211
|
+
s + l === 0 || !i || await t({
|
|
212
|
+
query: c,
|
|
213
|
+
operationName: "ReportAiTokenUsage",
|
|
214
|
+
variables: { input: {
|
|
215
|
+
sessionId: n,
|
|
216
|
+
messageId: r,
|
|
217
|
+
model: i,
|
|
218
|
+
inputTokens: s,
|
|
219
|
+
outputTokens: l
|
|
220
|
+
} },
|
|
221
|
+
workspaceId: e,
|
|
222
|
+
authContext: o
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
//#endregion
|
|
226
|
+
export { M as checkAssistantAiCredits, x as createAssistantSandbox, E as createAssistantSession, A as extendAssistantSandboxTTL, b as findExistingSandbox, O as getAssistantMessages, k as getAssistantStreamAccess, N as reportAssistantAiTokenUsage, D as sendAssistantPromptAsync, j as sendHeartbeat, T as waitForAssistantServiceReady, w as waitForSandboxRunning };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-page-load capability cache — the entire backward-compat story for a
|
|
3
|
+
* mixed-version rollout. Each capability starts `unknown`; a successful use flips
|
|
4
|
+
* it `supported`, a "Cannot query field" / 404 flips it `unsupported`. No
|
|
5
|
+
* coordinated feature flags: the FE simply degrades (delta→full poll,
|
|
6
|
+
* long-poll→2s poll, SSE→poll) against an older backend, and lights up
|
|
7
|
+
* automatically once the backend advertises the capability.
|
|
8
|
+
*/
|
|
9
|
+
export type CapabilityState = 'unknown' | 'supported' | 'unsupported';
|
|
10
|
+
interface AssistantCapabilities {
|
|
11
|
+
waitForSandboxRunning: CapabilityState;
|
|
12
|
+
sinceParam: CapabilityState;
|
|
13
|
+
sse: CapabilityState;
|
|
14
|
+
}
|
|
15
|
+
export declare function getCapability(key: keyof AssistantCapabilities): CapabilityState;
|
|
16
|
+
export declare function markSupported(key: keyof AssistantCapabilities): void;
|
|
17
|
+
export declare function markUnsupported(key: keyof AssistantCapabilities): void;
|
|
18
|
+
/** True when an error indicates the server doesn't know a field/route yet. */
|
|
19
|
+
export declare function isUnknownFieldError(error: unknown): boolean;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,CAAC;AAEtE,UAAU,qBAAqB;IAC7B,qBAAqB,EAAE,eAAe,CAAC;IACvC,UAAU,EAAE,eAAe,CAAC;IAC5B,GAAG,EAAE,eAAe,CAAC;CACtB;AAQD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,qBAAqB,GAAG,eAAe,CAE/E;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,qBAAqB,GAAG,IAAI,CAEpE;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,qBAAqB,GAAG,IAAI,CAEtE;AAED,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAK3D"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region src/shared/assistant/capabilities.ts
|
|
2
|
+
var e = {
|
|
3
|
+
waitForSandboxRunning: "unknown",
|
|
4
|
+
sinceParam: "unknown",
|
|
5
|
+
sse: "unknown"
|
|
6
|
+
};
|
|
7
|
+
function t(t) {
|
|
8
|
+
return e[t];
|
|
9
|
+
}
|
|
10
|
+
function n(t) {
|
|
11
|
+
e[t] = "supported";
|
|
12
|
+
}
|
|
13
|
+
function r(t) {
|
|
14
|
+
e[t] = "unsupported";
|
|
15
|
+
}
|
|
16
|
+
function i(e) {
|
|
17
|
+
let t = e instanceof Error ? e.message : String(e);
|
|
18
|
+
return /Cannot query field|Unknown field|Unknown argument|not defined by type|\b404\b|not found/i.test(t);
|
|
19
|
+
}
|
|
20
|
+
//#endregion
|
|
21
|
+
export { t as getCapability, i as isUnknownFieldError, n as markSupported, r as markUnsupported };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { AssistantSandboxAuthContext, SandboxAssistantConfig, SandboxAssistantTransport } from './types';
|
|
2
|
+
export interface TransportDeps {
|
|
3
|
+
getAuthContext: () => AssistantSandboxAuthContext;
|
|
4
|
+
getWorkspaceId: () => string;
|
|
5
|
+
}
|
|
6
|
+
export declare function createSandboxAssistantTransport(config: SandboxAssistantConfig, deps: TransportDeps): SandboxAssistantTransport;
|
|
7
|
+
//# sourceMappingURL=createSandboxAssistantTransport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createSandboxAssistantTransport.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/createSandboxAssistantTransport.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,OAAO,KAAK,EAGV,2BAA2B,EAE3B,sBAAsB,EACtB,yBAAyB,EAC1B,MAAM,SAAS,CAAC;AAOjB,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,2BAA2B,CAAC;IAClD,cAAc,EAAE,MAAM,MAAM,CAAC;CAC9B;AAYD,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,sBAAsB,EAC9B,IAAI,EAAE,aAAa,GAClB,yBAAyB,CA4K3B"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { isQuotaExhaustedError as e } from "./gatewayClient.js";
|
|
2
|
+
import { checkAssistantAiCredits as t, getAssistantMessages as n, getAssistantStreamAccess as r, reportAssistantAiTokenUsage as i, sendAssistantPromptAsync as a } from "./api.js";
|
|
3
|
+
import { AssistantRuntimeManager as o } from "./runtime.js";
|
|
4
|
+
import { buildProgress as s, isRecoverable as c, mergeMessagesById as l, sanitize as u } from "./progress.js";
|
|
5
|
+
//#region src/shared/assistant/createSandboxAssistantTransport.ts
|
|
6
|
+
var d = 42e4, f = 400, p = 2e3, m = 5e3;
|
|
7
|
+
function h() {
|
|
8
|
+
return typeof window > "u" ? {} : {
|
|
9
|
+
currentUrl: window.location.href,
|
|
10
|
+
currentPage: window.location.pathname.split("/").filter(Boolean).slice(0, 3).join("/") || "home",
|
|
11
|
+
viewportSize: `${window.innerWidth}x${window.innerHeight}`
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function g(g, _) {
|
|
15
|
+
let v = g.mode ?? "assistant", y = g.streamBudgetMs ?? d, b = g.ttlSeconds ?? 3600, x = g.isProdRuntime ?? (() => !1), S = g.enableCredits ?? !1, C = new o({
|
|
16
|
+
product: g.product,
|
|
17
|
+
mode: v,
|
|
18
|
+
ttlSeconds: b,
|
|
19
|
+
isProd: x,
|
|
20
|
+
getWorkspaceId: _.getWorkspaceId,
|
|
21
|
+
getAuthContext: _.getAuthContext
|
|
22
|
+
}), w = () => g.gatherPageContext ? { ...g.gatherPageContext() } : h();
|
|
23
|
+
async function T(e, t, o, d) {
|
|
24
|
+
try {
|
|
25
|
+
let { sandboxId: c, sessionId: d } = await C.ensureRuntime();
|
|
26
|
+
C.startKeepWarm();
|
|
27
|
+
let h = Date.now();
|
|
28
|
+
await a(c, t, d, e.prompt, v, w(), o);
|
|
29
|
+
let _ = null, b = null, x = await r(c, t, d, o).catch(() => null);
|
|
30
|
+
if (x && typeof EventSource < "u") try {
|
|
31
|
+
b = new EventSource(x.url);
|
|
32
|
+
let e = () => {
|
|
33
|
+
if (_) {
|
|
34
|
+
let e = _;
|
|
35
|
+
_ = null, e();
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
b.onmessage = e, b.addEventListener("message.part.updated", e), b.addEventListener("message.updated", e), b.onerror = () => {
|
|
39
|
+
b?.close(), b = null;
|
|
40
|
+
};
|
|
41
|
+
} catch {
|
|
42
|
+
b = null;
|
|
43
|
+
}
|
|
44
|
+
let T = (t) => new Promise((n) => {
|
|
45
|
+
if (e.signal.aborted) return n();
|
|
46
|
+
let r = setTimeout(() => {
|
|
47
|
+
_ = null, n();
|
|
48
|
+
}, t);
|
|
49
|
+
_ = () => {
|
|
50
|
+
clearTimeout(r), n();
|
|
51
|
+
};
|
|
52
|
+
}), E = h + y, D = [], O = s([], h), k = h;
|
|
53
|
+
for (; Date.now() < E;) {
|
|
54
|
+
if (e.signal.aborted) throw Error("Cancelled");
|
|
55
|
+
let r = await n(c, t, d, o, { sinceMs: k });
|
|
56
|
+
D = l(D, r);
|
|
57
|
+
for (let e of r) {
|
|
58
|
+
let t = e.info?.time?.created;
|
|
59
|
+
typeof t == "number" && t > k && (k = t);
|
|
60
|
+
}
|
|
61
|
+
if (O = s(D, h), e.onProgress(u(O.content)), O.done) break;
|
|
62
|
+
let i = Date.now() - h < m ? f : p;
|
|
63
|
+
await (b ? T(i) : new Promise((e) => setTimeout(e, i)));
|
|
64
|
+
}
|
|
65
|
+
if (b?.close(), !O.done) throw Error("The assistant timed out while responding. Please try again.");
|
|
66
|
+
let A = await n(c, t, d, o, { limit: 50 }).catch(() => D), j = s(l(D, A), h);
|
|
67
|
+
if (S) {
|
|
68
|
+
let e = A.filter((e) => e.info?.role === "assistant").sort((e, t) => (t.info?.time?.created ?? 0) - (e.info?.time?.created ?? 0))[0], n = e?.info?.tokens, r = e?.info?.providerID && e?.info?.modelID ? `${e.info.providerID}/${e.info.modelID}` : void 0;
|
|
69
|
+
e?.info?.id && n && i(t, d, e.info.id, r, n, o).then(() => g.onCreditsUpdated?.()).catch(() => void 0);
|
|
70
|
+
}
|
|
71
|
+
return { text: u(j.content) };
|
|
72
|
+
} catch (n) {
|
|
73
|
+
if (d === 1 && c(n)) return C.reset(), T(e, t, o, 2);
|
|
74
|
+
throw n;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
sendPrompt: async (n) => {
|
|
79
|
+
let r = _.getWorkspaceId();
|
|
80
|
+
if (!r) throw Error("The assistant needs an active workspace. Open a workspace and try again.");
|
|
81
|
+
let i = _.getAuthContext();
|
|
82
|
+
return S && t(r, i).catch((t) => {
|
|
83
|
+
e(t) && g.onQuotaExhausted?.(t);
|
|
84
|
+
}), T(n, r, i, 1);
|
|
85
|
+
},
|
|
86
|
+
prewarm: (e) => C.prewarm(e),
|
|
87
|
+
suspend: () => C.stopKeepWarm()
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
//#endregion
|
|
91
|
+
export { g as createSandboxAssistantTransport };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AssistantSandboxAuthContext } from './types';
|
|
2
|
+
export declare function isQuotaExhaustedError(error: unknown): boolean;
|
|
3
|
+
export declare function buildSandboxContextInput(workspaceId: string, authContext?: AssistantSandboxAuthContext): Record<string, unknown>;
|
|
4
|
+
export declare function executeSandboxGraphQL<TData>(params: {
|
|
5
|
+
query: string;
|
|
6
|
+
operationName: string;
|
|
7
|
+
variables: Record<string, unknown>;
|
|
8
|
+
workspaceId: string;
|
|
9
|
+
authContext?: AssistantSandboxAuthContext;
|
|
10
|
+
}): Promise<TData>;
|
|
11
|
+
//# sourceMappingURL=gatewayClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gatewayClient.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/gatewayClient.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAe3D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAO7D;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,2BAA2B,GACxC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAOzB;AAuCD,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,2BAA2B,CAAC;CAC3C,GAAG,OAAO,CAAC,KAAK,CAAC,CAqBjB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { graphqlFetch as e } from "../graphql/fetch.js";
|
|
2
|
+
import "../../shared-graphql.js";
|
|
3
|
+
//#region src/shared/assistant/gatewayClient.ts
|
|
4
|
+
function t() {
|
|
5
|
+
try {
|
|
6
|
+
return `bf-assistant-${crypto.randomUUID()}`;
|
|
7
|
+
} catch {
|
|
8
|
+
return `bf-assistant-${Date.now()}-${Math.random().toString(36).slice(2)}`;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
function n(e) {
|
|
12
|
+
let t = e;
|
|
13
|
+
if (t?.statusCode === 429 || t?.extensions?.code === "QUOTA_EXHAUSTED") return !0;
|
|
14
|
+
let n = t instanceof Error ? t.message.toLowerCase() : String(t).toLowerCase();
|
|
15
|
+
return n.includes("quota") && (n.includes("exhaust") || n.includes("exceeded"));
|
|
16
|
+
}
|
|
17
|
+
function r(e, t) {
|
|
18
|
+
return {
|
|
19
|
+
workspaceId: e,
|
|
20
|
+
...t?.organizationId ? { custom: { organizationId: t.organizationId } } : {}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
async function i(n) {
|
|
24
|
+
let r = await e({
|
|
25
|
+
gateway: "workspace",
|
|
26
|
+
query: n.query,
|
|
27
|
+
operationName: n.operationName,
|
|
28
|
+
variables: n.variables,
|
|
29
|
+
authToken: n.authContext?.accessToken ?? void 0,
|
|
30
|
+
workspaceToken: !0,
|
|
31
|
+
workspaceId: n.workspaceId,
|
|
32
|
+
organizationId: n.authContext?.organizationId ?? !0,
|
|
33
|
+
suppressGlobalErrorEvent: !0,
|
|
34
|
+
extraHeaders: { "x-request-id": t() }
|
|
35
|
+
});
|
|
36
|
+
if (r.errors?.length) {
|
|
37
|
+
let e = r.errors[0], t = Error(e.message);
|
|
38
|
+
throw t.extensions = e.extensions, t;
|
|
39
|
+
}
|
|
40
|
+
if (r.data == null) throw Error("Sandbox GraphQL returned no data");
|
|
41
|
+
return r.data;
|
|
42
|
+
}
|
|
43
|
+
async function a(e) {
|
|
44
|
+
let t;
|
|
45
|
+
for (let n = 0; n < 3; n++) try {
|
|
46
|
+
return await i(e);
|
|
47
|
+
} catch (e) {
|
|
48
|
+
t = e;
|
|
49
|
+
let r = e instanceof Error ? e.message.toLowerCase() : String(e).toLowerCase();
|
|
50
|
+
if (!(r.includes("failed to fetch") || r.includes("networkerror") || r.includes("network request failed") || r.includes("aborted") || r.includes("load failed")) || n === 2) throw e;
|
|
51
|
+
await new Promise((e) => setTimeout(e, 250 * 2 ** n));
|
|
52
|
+
}
|
|
53
|
+
throw t;
|
|
54
|
+
}
|
|
55
|
+
//#endregion
|
|
56
|
+
export { r as buildSandboxContextInput, a as executeSandboxGraphQL, n as isQuotaExhaustedError };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { AssistantMode } from './types';
|
|
2
|
+
declare const ASSISTANT_API_AUTH_STRATEGY = "sandbox-app-client-headers-v1";
|
|
3
|
+
export declare function getImageTagForMode(mode: AssistantMode, isProd: boolean): string;
|
|
4
|
+
export declare function getImageForMode(mode: AssistantMode, isProd: boolean): string;
|
|
5
|
+
export declare function getResourcesForMode(mode: AssistantMode): {
|
|
6
|
+
cpuRequest: string;
|
|
7
|
+
cpuLimit: string;
|
|
8
|
+
memoryRequest: string;
|
|
9
|
+
memoryLimit: string;
|
|
10
|
+
};
|
|
11
|
+
export { ASSISTANT_API_AUTH_STRATEGY };
|
|
12
|
+
export declare function resolveSandboxAssistantMode(sandbox: {
|
|
13
|
+
metadata: Record<string, unknown> | null;
|
|
14
|
+
name?: string | null;
|
|
15
|
+
}): AssistantMode | null;
|
|
16
|
+
//# sourceMappingURL=images.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/images.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAG7C,QAAA,MAAM,2BAA2B,kCAAkC,CAAC;AAEpE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CAS/E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CAI5E;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,aAAa,GAAG;IACxD,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB,CAKA;AAED,OAAO,EAAE,2BAA2B,EAAE,CAAC;AAEvC,wBAAgB,2BAA2B,CAAC,OAAO,EAAE;IACnD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,GAAG,aAAa,GAAG,IAAI,CAgBvB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
//#region src/shared/assistant/images.ts
|
|
2
|
+
var e = "burdenoffregistry.azurecr.io", t = "sandbox-app-client-headers-v1";
|
|
3
|
+
function n(e, t) {
|
|
4
|
+
switch (e) {
|
|
5
|
+
case "general":
|
|
6
|
+
case "vibe-plugins": return t ? "prod" : "alpha-proxy-auth-v1";
|
|
7
|
+
case "assistant":
|
|
8
|
+
case "api-calls": return t ? "prod" : "alpha-delegated-auth-v11";
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
function r(t, r) {
|
|
12
|
+
return `${e}/wspace/ai-assistant-${t === "assistant" ? "api-calls" : t}:${n(t, r)}`;
|
|
13
|
+
}
|
|
14
|
+
function i(e) {
|
|
15
|
+
return e === "general" ? {
|
|
16
|
+
cpuRequest: "100m",
|
|
17
|
+
cpuLimit: "500m",
|
|
18
|
+
memoryRequest: "256Mi",
|
|
19
|
+
memoryLimit: "1Gi"
|
|
20
|
+
} : {
|
|
21
|
+
cpuRequest: "150m",
|
|
22
|
+
cpuLimit: "750m",
|
|
23
|
+
memoryRequest: "384Mi",
|
|
24
|
+
memoryLimit: "1536Mi"
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function a(e) {
|
|
28
|
+
let t = e.metadata?.assistantMode;
|
|
29
|
+
if (t === "assistant" || t === "general" || t === "api-calls" || t === "vibe-plugins") return t;
|
|
30
|
+
let n = e.name ?? "";
|
|
31
|
+
return n.startsWith("ai-assistant-vibe-plugins-") ? "vibe-plugins" : n.startsWith("ai-assistant-api-calls-") ? "api-calls" : n.startsWith("ai-assistant-general-") ? "general" : n.startsWith("ai-assistant-assistant-") ? "assistant" : null;
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
export { t as ASSISTANT_API_AUTH_STRATEGY, r as getImageForMode, n as getImageTagForMode, i as getResourcesForMode, a as resolveSandboxAssistantMode };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @burdenoff/fe-libs/shared/assistant — the one sandbox-backed AI-assistant
|
|
3
|
+
* transport for all products. A product's MFE typically only needs:
|
|
4
|
+
*
|
|
5
|
+
* export const useAssistantTransport = () =>
|
|
6
|
+
* useSandboxAssistantTransport({ product: 'myproduct', gatherPageContext });
|
|
7
|
+
*/
|
|
8
|
+
export { useSandboxAssistantTransport } from './useSandboxAssistantTransport';
|
|
9
|
+
export { createSandboxAssistantTransport } from './createSandboxAssistantTransport';
|
|
10
|
+
export { AssistantRuntimeManager } from './runtime';
|
|
11
|
+
export { isQuotaExhaustedError } from './gatewayClient';
|
|
12
|
+
export { buildProgress, sanitize, isRecoverable, mergeMessagesById, mapSessionToHistory, } from './progress';
|
|
13
|
+
export type { AssistantMode, PageContext, SandboxAssistantConfig, SandboxAssistantTransport, AssistantSendArgs, PrewarmLevel, AssistantRawMessage, AssistantWidgetMessage, AssistantArtifact, StreamAccess, } from './types';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AACpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EACL,aAAa,EACb,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,aAAa,EACb,WAAW,EACX,sBAAsB,EACtB,yBAAyB,EACzB,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,YAAY,GACb,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GraphQL operations as plain strings — deliberately NOT imported from any
|
|
3
|
+
* product's generated `wspace-operations`, so this module has no per-MFE
|
|
4
|
+
* dependency and every product's ~15-line wrapper stays trivial.
|
|
5
|
+
*/
|
|
6
|
+
export declare const CREATE_SANDBOX = "\n mutation CreateSandbox($input: CreateSandboxInput!) {\n createSandbox(input: $input) {\n id\n name\n status\n network {\n internalUrl\n }\n }\n }\n";
|
|
7
|
+
export declare const GET_SANDBOX = "\n query GetSandbox($id: ID!, $context: ContextInput!) {\n getSandbox(id: $id, context: $context) {\n id\n status\n errorMessage\n network {\n internalUrl\n }\n }\n }\n";
|
|
8
|
+
/**
|
|
9
|
+
* Server-side readiness long-poll (new). Feature-detected: on an older gateway
|
|
10
|
+
* this errors "Cannot query field waitForSandboxRunning" and the transport falls
|
|
11
|
+
* back to polling getSandbox.
|
|
12
|
+
*/
|
|
13
|
+
export declare const WAIT_FOR_SANDBOX_RUNNING = "\n query WaitForSandboxRunning($id: ID!, $timeoutSeconds: Int, $context: ContextInput!) {\n waitForSandboxRunning(id: $id, timeoutSeconds: $timeoutSeconds, context: $context) {\n id\n status\n errorMessage\n }\n }\n";
|
|
14
|
+
export declare const GET_ACTIVE_SANDBOXES = "\n query GetActiveSandboxes($context: ContextInput!) {\n getActiveSandboxes(context: $context) {\n id\n name\n status\n metadata\n template\n createdBy\n }\n }\n";
|
|
15
|
+
export declare const PROXY_SANDBOX_REQUEST = "\n mutation ProxySandboxRequest($input: ProxySandboxRequestInput!) {\n proxySandboxRequest(input: $input) {\n status\n body\n }\n }\n";
|
|
16
|
+
export declare const EXTEND_SANDBOX_TTL = "\n mutation ExtendSandboxTtl($id: ID!, $additionalSeconds: Int!, $context: ContextInput!) {\n extendSandboxTTL(id: $id, additionalSeconds: $additionalSeconds, context: $context) {\n id\n expiresAt\n }\n }\n";
|
|
17
|
+
export declare const CHECK_AI_CREDITS = "\n mutation CheckAiCredits {\n checkAiCredits\n }\n";
|
|
18
|
+
export declare const REPORT_AI_TOKEN_USAGE = "\n mutation ReportAiTokenUsage($input: ReportAiTokenUsageInput!) {\n reportAiTokenUsage(input: $input)\n }\n";
|
|
19
|
+
//# sourceMappingURL=operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/operations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,cAAc,mMAW1B,CAAC;AAEF,eAAO,MAAM,WAAW,qNAWvB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,mPAQpC,CAAC;AAEF,eAAO,MAAM,oBAAoB,4MAWhC,CAAC;AAEF,eAAO,MAAM,qBAAqB,4JAOjC,CAAC;AAEF,eAAO,MAAM,kBAAkB,qOAO9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,6DAI5B,CAAC;AAEF,eAAO,MAAM,qBAAqB,sHAIjC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
//#region src/shared/assistant/operations.ts
|
|
2
|
+
var e = "\n mutation CreateSandbox($input: CreateSandboxInput!) {\n createSandbox(input: $input) {\n id\n name\n status\n network {\n internalUrl\n }\n }\n }\n", t = "\n query GetSandbox($id: ID!, $context: ContextInput!) {\n getSandbox(id: $id, context: $context) {\n id\n status\n errorMessage\n network {\n internalUrl\n }\n }\n }\n", n = "\n query WaitForSandboxRunning($id: ID!, $timeoutSeconds: Int, $context: ContextInput!) {\n waitForSandboxRunning(id: $id, timeoutSeconds: $timeoutSeconds, context: $context) {\n id\n status\n errorMessage\n }\n }\n", r = "\n query GetActiveSandboxes($context: ContextInput!) {\n getActiveSandboxes(context: $context) {\n id\n name\n status\n metadata\n template\n createdBy\n }\n }\n", i = "\n mutation ProxySandboxRequest($input: ProxySandboxRequestInput!) {\n proxySandboxRequest(input: $input) {\n status\n body\n }\n }\n", a = "\n mutation ExtendSandboxTtl($id: ID!, $additionalSeconds: Int!, $context: ContextInput!) {\n extendSandboxTTL(id: $id, additionalSeconds: $additionalSeconds, context: $context) {\n id\n expiresAt\n }\n }\n", o = "\n mutation CheckAiCredits {\n checkAiCredits\n }\n", s = "\n mutation ReportAiTokenUsage($input: ReportAiTokenUsageInput!) {\n reportAiTokenUsage(input: $input)\n }\n";
|
|
3
|
+
//#endregion
|
|
4
|
+
export { o as CHECK_AI_CREDITS, e as CREATE_SANDBOX, a as EXTEND_SANDBOX_TTL, r as GET_ACTIVE_SANDBOXES, t as GET_SANDBOX, i as PROXY_SANDBOX_REQUEST, s as REPORT_AI_TOKEN_USAGE, n as WAIT_FOR_SANDBOX_RUNNING };
|