@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.
Files changed (42) hide show
  1. package/dist/chrome/ProductPickerSheet.d.ts.map +1 -1
  2. package/dist/chrome/ProductSwitcher.d.ts.map +1 -1
  3. package/dist/chrome/notificationCenter/NotificationList.d.ts.map +1 -1
  4. package/dist/shared/assistant/api.d.ts +34 -0
  5. package/dist/shared/assistant/api.d.ts.map +1 -0
  6. package/dist/shared/assistant/api.js +226 -0
  7. package/dist/shared/assistant/capabilities.d.ts +21 -0
  8. package/dist/shared/assistant/capabilities.d.ts.map +1 -0
  9. package/dist/shared/assistant/capabilities.js +21 -0
  10. package/dist/shared/assistant/createSandboxAssistantTransport.d.ts +7 -0
  11. package/dist/shared/assistant/createSandboxAssistantTransport.d.ts.map +1 -0
  12. package/dist/shared/assistant/createSandboxAssistantTransport.js +91 -0
  13. package/dist/shared/assistant/gatewayClient.d.ts +11 -0
  14. package/dist/shared/assistant/gatewayClient.d.ts.map +1 -0
  15. package/dist/shared/assistant/gatewayClient.js +56 -0
  16. package/dist/shared/assistant/images.d.ts +16 -0
  17. package/dist/shared/assistant/images.d.ts.map +1 -0
  18. package/dist/shared/assistant/images.js +34 -0
  19. package/dist/shared/assistant/index.d.ts +14 -0
  20. package/dist/shared/assistant/index.d.ts.map +1 -0
  21. package/dist/shared/assistant/operations.d.ts +19 -0
  22. package/dist/shared/assistant/operations.d.ts.map +1 -0
  23. package/dist/shared/assistant/operations.js +4 -0
  24. package/dist/shared/assistant/progress.d.ts +26 -0
  25. package/dist/shared/assistant/progress.d.ts.map +1 -0
  26. package/dist/shared/assistant/progress.js +74 -0
  27. package/dist/shared/assistant/runtime.d.ts +34 -0
  28. package/dist/shared/assistant/runtime.d.ts.map +1 -0
  29. package/dist/shared/assistant/runtime.js +91 -0
  30. package/dist/shared/assistant/types.d.ts +109 -0
  31. package/dist/shared/assistant/types.d.ts.map +1 -0
  32. package/dist/shared/assistant/useSandboxAssistantTransport.d.ts +3 -0
  33. package/dist/shared/assistant/useSandboxAssistantTransport.d.ts.map +1 -0
  34. package/dist/shared/assistant/useSandboxAssistantTransport.js +41 -0
  35. package/dist/shared/components/assistantWidget/AssistantWidget.d.ts +1 -1
  36. package/dist/shared/components/assistantWidget/AssistantWidget.d.ts.map +1 -1
  37. package/dist/shared/components/assistantWidget/AssistantWidget.js +130 -111
  38. package/dist/shared/components/assistantWidget/types.d.ts +12 -2
  39. package/dist/shared/components/assistantWidget/types.d.ts.map +1 -1
  40. package/dist/shared-assistant.d.ts +2 -0
  41. package/dist/shared-assistant.js +6 -0
  42. package/package.json +5 -1
@@ -0,0 +1,26 @@
1
+ import { AssistantRawMessage, AssistantWidgetMessage } from './types';
2
+ export declare function getRawMessageCreatedAt(message: AssistantRawMessage): number;
3
+ export declare function getAssistantText(parts: AssistantRawMessage['parts']): string;
4
+ export declare function getToolProgress(parts: AssistantRawMessage['parts']): string[];
5
+ /**
6
+ * Reduce the assistant messages created at/after `sinceMs` into display content +
7
+ * a done flag. Done ⇔ the newest assistant message has `info.time.completed` and
8
+ * carries either text or tool progress.
9
+ */
10
+ export declare function buildProgress(messages: AssistantRawMessage[], sinceMs: number): {
11
+ content: string;
12
+ done: boolean;
13
+ };
14
+ /** Redact credentials that might leak into a rendered answer. */
15
+ export declare function sanitize(response: string): string;
16
+ /** Whether an error is worth one retry from a clean runtime (union of fleet fragments). */
17
+ export declare function isRecoverable(error: unknown): boolean;
18
+ /**
19
+ * Upsert delta messages into an accumulator keyed by message id. Correct against
20
+ * BOTH a `?since=` delta (a few messages) and an old agent that returns the full
21
+ * window (upsert is idempotent), so enabling the delta param is always safe.
22
+ */
23
+ export declare function mergeMessagesById(accumulator: AssistantRawMessage[], incoming: AssistantRawMessage[]): AssistantRawMessage[];
24
+ /** Map raw session messages to widget history, dropping injected-context noReply turns. */
25
+ export declare function mapSessionToHistory(messages: AssistantRawMessage[]): AssistantWidgetMessage[];
26
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/progress.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAA2B,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEpG,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAE3E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,GAAG,MAAM,CAM5E;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE,CAU7E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,mBAAmB,EAAE,EAC/B,OAAO,EAAE,MAAM,GACd;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAkBpC;AAED,iEAAiE;AACjE,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAyBrD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,mBAAmB,EAAE,EAClC,QAAQ,EAAE,mBAAmB,EAAE,GAC9B,mBAAmB,EAAE,CAavB;AAED,2FAA2F;AAC3F,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,GAAG,sBAAsB,EAAE,CAqB7F"}
@@ -0,0 +1,74 @@
1
+ //#region src/shared/assistant/progress.ts
2
+ function e(e) {
3
+ return e.info?.time?.created ?? 0;
4
+ }
5
+ function t(e) {
6
+ return (e ?? []).filter((e) => e.type === "text" && typeof e.text == "string").map((e) => e.text?.trim() ?? "").filter(Boolean).join("\n");
7
+ }
8
+ function n(e) {
9
+ return (e ?? []).filter((e) => e.type === "tool" && e.tool).map((e) => {
10
+ let t = e.state?.status ?? "running", n = e.tool ?? "tool";
11
+ return t === "completed" ? `Completed: ${n}` : t === "failed" ? `Failed: ${n}` : `Running: ${n}`;
12
+ });
13
+ }
14
+ function r(r, i) {
15
+ let a = r.filter((t) => t.info?.role === "assistant" && e(t) >= i).sort((t, n) => e(t) - e(n));
16
+ if (a.length === 0) return {
17
+ content: "Thinking…",
18
+ done: !1
19
+ };
20
+ let o = a[a.length - 1], s = t(o.parts), c = n(o.parts);
21
+ return {
22
+ content: [s, ...c].filter(Boolean).join("\n\n") || "Thinking…",
23
+ done: !!o.info?.time?.completed && (!!s || c.length > 0)
24
+ };
25
+ }
26
+ function i(e) {
27
+ return e.replace(/(Authorization\s*:\s*Bearer\s+)[^\s\n]+/gi, "$1[REDACTED]").replace(/(X-Workspace-Authorization\s*:\s*Bearer\s+)[^\s\n]+/gi, "$1[REDACTED]").replace(/\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9._-]+\.[A-Za-z0-9._-]+\b/g, "[REDACTED_JWT]").replace(/\bsk-ant-[A-Za-z0-9-]+\b/g, "[REDACTED_API_KEY]");
28
+ }
29
+ function a(e) {
30
+ let t = e instanceof Error ? e.message.toLowerCase() : String(e).toLowerCase();
31
+ return t.includes("rate limit exceeded") || t.includes("unauthorized") || t.includes("k8s api error 401") ? !1 : [
32
+ "sandbox not found",
33
+ "sandbox is not running",
34
+ "sandbox service not available yet",
35
+ "sandbox failed",
36
+ "sandbox startup timed out",
37
+ "assistant service did not become healthy",
38
+ "assistant service not available",
39
+ "image pull",
40
+ "unexpected error",
41
+ "failed to fetch",
42
+ "proxy error: 404",
43
+ "proxy error: 502",
44
+ "proxy error: 503"
45
+ ].some((e) => t.includes(e));
46
+ }
47
+ function o(t, n) {
48
+ let r = /* @__PURE__ */ new Map();
49
+ for (let e of t) {
50
+ let t = e.info?.id;
51
+ t && r.set(t, e);
52
+ }
53
+ for (let e of n) {
54
+ let t = e.info?.id;
55
+ t && r.set(t, e);
56
+ }
57
+ return Array.from(r.values()).sort((t, n) => e(t) - e(n));
58
+ }
59
+ function s(n) {
60
+ let r = [];
61
+ for (let i of n) {
62
+ let n = i.info?.role;
63
+ if (n !== "user" && n !== "assistant") continue;
64
+ let a = t(i.parts);
65
+ a && (n === "user" && (a.startsWith("[Context file:") || a.startsWith("User's current context:")) || r.push({
66
+ id: i.info?.id ?? `${n}-${e(i)}`,
67
+ role: n,
68
+ content: a
69
+ }));
70
+ }
71
+ return r;
72
+ }
73
+ //#endregion
74
+ export { r as buildProgress, a as isRecoverable, s as mapSessionToHistory, o as mergeMessagesById, i as sanitize };
@@ -0,0 +1,34 @@
1
+ import { AssistantMode, AssistantSandboxAuthContext, PrewarmLevel } from './types';
2
+ export interface RuntimeDeps {
3
+ product: string;
4
+ mode: AssistantMode;
5
+ ttlSeconds: number;
6
+ isProd: () => boolean;
7
+ getWorkspaceId: () => string;
8
+ getAuthContext: () => AssistantSandboxAuthContext;
9
+ }
10
+ export declare class AssistantRuntimeManager {
11
+ private readonly deps;
12
+ private sandboxId;
13
+ private sessionId;
14
+ private inFlight;
15
+ private keepWarmTimer;
16
+ private visibilityHandler;
17
+ constructor(deps: RuntimeDeps);
18
+ private key;
19
+ private persist;
20
+ /** Drop the warm refs after a recoverable error so the next call re-provisions. */
21
+ reset(): void;
22
+ /** Single-flight provision: find-or-create → ready → service-health → session. */
23
+ ensureRuntime(): Promise<{
24
+ sandboxId: string;
25
+ sessionId: string;
26
+ }>;
27
+ /** Intent pre-warm. 'probe' never creates a paid sandbox; 'full' provisions. */
28
+ prewarm(level?: PrewarmLevel): void;
29
+ /** Start the visibility-gated keep-warm heartbeat while the widget is open. */
30
+ startKeepWarm(): void;
31
+ stopKeepWarm(): void;
32
+ getSandboxId(): string | null;
33
+ }
34
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/runtime.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,OAAO,KAAK,EAAE,aAAa,EAAE,2BAA2B,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAIxF,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB,cAAc,EAAE,MAAM,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,2BAA2B,CAAC;CACnD;AAED,qBAAa,uBAAuB;IAOtB,OAAO,CAAC,QAAQ,CAAC,IAAI;IANjC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,QAAQ,CAAkE;IAClF,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,iBAAiB,CAA6B;gBAEzB,IAAI,EAAE,WAAW;IAU9C,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,OAAO;IAWf,mFAAmF;IACnF,KAAK,IAAI,IAAI;IAOb,kFAAkF;IAClF,aAAa,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IA8DlE,gFAAgF;IAChF,OAAO,CAAC,KAAK,GAAE,YAAqB,GAAG,IAAI;IAsB3C,+EAA+E;IAC/E,aAAa,IAAI,IAAI;IAsBrB,YAAY,IAAI,IAAI;IAWpB,YAAY,IAAI,MAAM,GAAG,IAAI;CAG9B"}
@@ -0,0 +1,91 @@
1
+ import { createAssistantSandbox as e, createAssistantSession as t, extendAssistantSandboxTTL as n, findExistingSandbox as r, sendHeartbeat as i, waitForAssistantServiceReady as a, waitForSandboxRunning as o } from "./api.js";
2
+ //#region src/shared/assistant/runtime.ts
3
+ var s = 240 * 1e3, c = class {
4
+ sandboxId = null;
5
+ sessionId = null;
6
+ inFlight = null;
7
+ keepWarmTimer = null;
8
+ visibilityHandler = null;
9
+ constructor(e) {
10
+ this.deps = e;
11
+ try {
12
+ this.sandboxId = sessionStorage.getItem(this.key("sandbox")) || null, this.sessionId = sessionStorage.getItem(this.key("session")) || null;
13
+ } catch {}
14
+ }
15
+ key(e) {
16
+ return `bf-assistant:${this.deps.product}:${this.deps.mode}:${e}`;
17
+ }
18
+ persist() {
19
+ try {
20
+ this.sandboxId ? sessionStorage.setItem(this.key("sandbox"), this.sandboxId) : sessionStorage.removeItem(this.key("sandbox")), this.sessionId ? sessionStorage.setItem(this.key("session"), this.sessionId) : sessionStorage.removeItem(this.key("session"));
21
+ } catch {}
22
+ }
23
+ reset() {
24
+ this.sandboxId = null, this.sessionId = null, this.inFlight = null, this.persist();
25
+ }
26
+ ensureRuntime() {
27
+ if (this.sandboxId && this.sessionId) return Promise.resolve({
28
+ sandboxId: this.sandboxId,
29
+ sessionId: this.sessionId
30
+ });
31
+ if (this.inFlight) return this.inFlight;
32
+ let n = this.deps.getWorkspaceId();
33
+ if (!n) return Promise.reject(/* @__PURE__ */ Error("The assistant needs an active workspace. Open a workspace and try again."));
34
+ let i = this.deps.getAuthContext();
35
+ return this.inFlight = (async () => {
36
+ let s = this.deps.isProd(), c = this.sandboxId;
37
+ if (!c) {
38
+ if (c = await r(n, this.deps.mode, s, i), !c) {
39
+ if (!i.accessToken) throw Error("The assistant requires an authenticated session. Please sign in again.");
40
+ c = await e(this.deps.product, this.deps.mode, n, s, this.deps.ttlSeconds, i);
41
+ }
42
+ await o(c, n, i), await a(c, n, i), this.sandboxId = c;
43
+ }
44
+ let l = this.sessionId;
45
+ return l || (l = (await t(c, n, this.deps.mode, i)).sessionId, this.sessionId = l), this.persist(), {
46
+ sandboxId: c,
47
+ sessionId: l
48
+ };
49
+ })(), this.inFlight.catch(() => {
50
+ this.inFlight = null;
51
+ }).then(() => {
52
+ this.inFlight = null;
53
+ }), this.inFlight;
54
+ }
55
+ prewarm(e = "full") {
56
+ if (this.sandboxId && this.sessionId) return;
57
+ let t = this.deps.getWorkspaceId();
58
+ if (t) {
59
+ if (e === "probe") {
60
+ if (this.sandboxId || this.inFlight) return;
61
+ let e = this.deps.getAuthContext();
62
+ r(t, this.deps.mode, this.deps.isProd(), e).then(async (n) => {
63
+ n && (await a(n, t, e).catch(() => void 0), this.sandboxId = n, this.persist());
64
+ }).catch(() => void 0);
65
+ return;
66
+ }
67
+ this.ensureRuntime().catch(() => void 0);
68
+ }
69
+ }
70
+ startKeepWarm() {
71
+ if (this.keepWarmTimer) return;
72
+ let e = () => {
73
+ if (typeof document < "u" && document.visibilityState !== "visible" || !this.sandboxId) return;
74
+ let e = this.deps.getWorkspaceId();
75
+ if (!e) return;
76
+ let t = this.deps.getAuthContext();
77
+ n(this.sandboxId, e, this.deps.ttlSeconds, t).catch(() => void 0), this.sessionId && i(this.sandboxId, e, this.sessionId, t);
78
+ };
79
+ this.keepWarmTimer = setInterval(e, s), this.visibilityHandler = () => {
80
+ typeof document < "u" && document.visibilityState === "visible" && e();
81
+ }, typeof document < "u" && document.addEventListener("visibilitychange", this.visibilityHandler);
82
+ }
83
+ stopKeepWarm() {
84
+ this.keepWarmTimer &&= (clearInterval(this.keepWarmTimer), null), this.visibilityHandler && typeof document < "u" && (document.removeEventListener("visibilitychange", this.visibilityHandler), this.visibilityHandler = null);
85
+ }
86
+ getSandboxId() {
87
+ return this.sandboxId;
88
+ }
89
+ };
90
+ //#endregion
91
+ export { c as AssistantRuntimeManager };
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Shared AI-assistant transport types (Layer 1, fe-libs).
3
+ *
4
+ * One implementation of the sandbox-backed assistant transport for ALL products.
5
+ * Previously each `microfe-<product>` shipped a near-identical ~600-900 line copy
6
+ * of this logic; this module centralizes it behind a config-driven factory. The
7
+ * only genuine per-product inputs are the product id and its `gatherPageContext`.
8
+ */
9
+ export type AssistantMode = 'general' | 'api-calls' | 'vibe-plugins' | 'assistant';
10
+ /** Local mirror of a product's PageContext; the transport forwards a subset. */
11
+ export interface PageContext {
12
+ currentUrl?: string;
13
+ currentPage?: string;
14
+ entityType?: string;
15
+ entityId?: string;
16
+ platform?: string;
17
+ version?: string;
18
+ viewportSize?: string;
19
+ [key: string]: unknown;
20
+ }
21
+ export interface AssistantSandboxAuthContext {
22
+ accessToken?: string | null;
23
+ workspaceToken?: string | null;
24
+ userId?: string | null;
25
+ organizationId?: string | null;
26
+ }
27
+ export interface AssistantRawMessagePart {
28
+ type?: string;
29
+ text?: string;
30
+ tool?: string;
31
+ state?: {
32
+ status?: string;
33
+ input?: unknown;
34
+ output?: unknown;
35
+ raw?: unknown;
36
+ };
37
+ }
38
+ export interface AssistantRawMessage {
39
+ info?: {
40
+ id?: string;
41
+ role?: string;
42
+ providerID?: string;
43
+ modelID?: string;
44
+ tokens?: {
45
+ input: number;
46
+ output: number;
47
+ };
48
+ time?: {
49
+ created?: number;
50
+ completed?: number;
51
+ };
52
+ };
53
+ parts?: AssistantRawMessagePart[];
54
+ }
55
+ export interface AssistantArtifact {
56
+ name: string;
57
+ path: string;
58
+ type: string;
59
+ size: number;
60
+ downloadPath: string;
61
+ }
62
+ export interface AssistantWidgetMessage {
63
+ id: string;
64
+ role: 'user' | 'assistant';
65
+ content: string;
66
+ pending?: boolean;
67
+ }
68
+ /** What a product passes to build its transport. Only `product` is required. */
69
+ export interface SandboxAssistantConfig {
70
+ /** AI_ASSISTANT_PRODUCT for the sandbox container (drives per-product docs). */
71
+ product: string;
72
+ /** Per-product page-context gatherer; a minimal window-based default is used if absent. */
73
+ gatherPageContext?: () => PageContext;
74
+ /** Session mode. Default 'assistant' (combined docs + api-calls). */
75
+ mode?: AssistantMode;
76
+ /** Enable AI-credit metering (preflight + post-turn report). Fails open. */
77
+ enableCredits?: boolean;
78
+ /** Overall per-turn deadline. Default 420_000ms. */
79
+ streamBudgetMs?: number;
80
+ /** Sandbox TTL at create (retries at 600 on validation error). Default 3600. */
81
+ ttlSeconds?: number;
82
+ /** Optional prod-runtime detector for image-tag pinning (hostname-based). */
83
+ isProdRuntime?: () => boolean;
84
+ /** Called when a quota error is detected (widget/panel surfaces it). */
85
+ onQuotaExhausted?: (error: unknown) => void;
86
+ /** Called after a successful post-turn credit charge. */
87
+ onCreditsUpdated?: () => void;
88
+ }
89
+ export interface AssistantSendArgs {
90
+ prompt: string;
91
+ onProgress: (partialText: string) => void;
92
+ signal: AbortSignal;
93
+ }
94
+ export type PrewarmLevel = 'probe' | 'full';
95
+ /** The transport contract consumed by the fe-libs AssistantWidget. */
96
+ export interface SandboxAssistantTransport {
97
+ sendPrompt: (args: AssistantSendArgs) => Promise<{
98
+ text: string;
99
+ }>;
100
+ /** Fire-and-forget warm-up (single-flighted). 'probe' never creates a sandbox. */
101
+ prewarm: (level?: PrewarmLevel) => void;
102
+ /** Stop the keep-warm heartbeat (widget closed / tab hidden). */
103
+ suspend: () => void;
104
+ }
105
+ export interface StreamAccess {
106
+ url: string;
107
+ expiresAt: number;
108
+ }
109
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { SandboxAssistantConfig, SandboxAssistantTransport } from './types';
2
+ export declare function useSandboxAssistantTransport(config: SandboxAssistantConfig): SandboxAssistantTransport;
3
+ //# sourceMappingURL=useSandboxAssistantTransport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSandboxAssistantTransport.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/useSandboxAssistantTransport.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAEV,sBAAsB,EACtB,yBAAyB,EAC1B,MAAM,SAAS,CAAC;AA+BjB,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,sBAAsB,GAC7B,yBAAyB,CAqB3B"}
@@ -0,0 +1,41 @@
1
+ import { useAuthToken as e } from "../providers/shell/AuthTokenProvider.js";
2
+ import "../../shared-providers-shell.js";
3
+ import { createSandboxAssistantTransport as t } from "./createSandboxAssistantTransport.js";
4
+ import { useEffect as n, useMemo as r } from "react";
5
+ //#region src/shared/assistant/useSandboxAssistantTransport.ts
6
+ function i(e) {
7
+ try {
8
+ let t = e === "workspaceId" ? "burdenoff-active-context-workspace" : "burdenoff-active-context-organization", n = localStorage.getItem(t);
9
+ if (n) return n;
10
+ let r = sessionStorage.getItem("bf-active-profile");
11
+ if (!r) return "";
12
+ let i = localStorage.getItem(`bf-p-${r}-context`);
13
+ return i ? JSON.parse(i)[e] ?? "" : "";
14
+ } catch {
15
+ return "";
16
+ }
17
+ }
18
+ function a() {
19
+ return new URLSearchParams(window.location.search).get("workspace") ?? i("workspaceId");
20
+ }
21
+ function o() {
22
+ return new URLSearchParams(window.location.search).get("org") ?? i("organizationId");
23
+ }
24
+ function s(i) {
25
+ let { getAccessToken: s, getWorkspaceToken: c, userId: l } = e(), u = r(() => t(i, {
26
+ getWorkspaceId: a,
27
+ getAuthContext: () => ({
28
+ accessToken: s(),
29
+ workspaceToken: c(),
30
+ userId: l,
31
+ organizationId: o()
32
+ })
33
+ }), [
34
+ i.product,
35
+ i.mode,
36
+ l
37
+ ]);
38
+ return n(() => () => u.suspend(), [u]), u;
39
+ }
40
+ //#endregion
41
+ export { s as useSandboxAssistantTransport };
@@ -22,7 +22,7 @@ export interface AssistantWidgetProps {
22
22
  */
23
23
  layout?: 'floating' | 'sidebar';
24
24
  /**
25
- * Show the conversations rail (New chat / Clear chat / History).
25
+ * Show the conversations rail (New chat / History, with per-chat delete).
26
26
  * Ignored unless the transport actually implements session management —
27
27
  * a panel whose buttons do nothing is worse than no panel.
28
28
  */
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantWidget.d.ts","sourceRoot":"","sources":["../../../../src/shared/components/assistantWidget/AssistantWidget.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAML,KAAK,EAAE,EAER,MAAM,OAAO,CAAC;AAef,OAAO,KAAK,EAA2B,kBAAkB,EAA0B,MAAM,SAAS,CAAC;AAEnG,MAAM,WAAW,oBAAoB;IACnC,oDAAoD;IACpD,SAAS,EAAE,kBAAkB,CAAC;IAC9B,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAChC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,4EAA4E;IAC5E,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,8EAA8E;AAC9E,eAAO,MAAM,6BAA6B,+BAA+B,CAAC;AAyB1E,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CA+epD,CAAC"}
1
+ {"version":3,"file":"AssistantWidget.d.ts","sourceRoot":"","sources":["../../../../src/shared/components/assistantWidget/AssistantWidget.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAML,KAAK,EAAE,EAER,MAAM,OAAO,CAAC;AAef,OAAO,KAAK,EAA2B,kBAAkB,EAA0B,MAAM,SAAS,CAAC;AAEnG,MAAM,WAAW,oBAAoB;IACnC,oDAAoD;IACpD,SAAS,EAAE,kBAAkB,CAAC;IAC9B,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAChC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,4EAA4E;IAC5E,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,8EAA8E;AAC9E,eAAO,MAAM,6BAA6B,+BAA+B,CAAC;AAyB1E,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CAgiBpD,CAAC"}