@burdenoff/fe-libs 2026.910.1 → 2026.910.3
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/ui/AIAssistantPanel.d.ts +11 -0
- package/dist/shared/assistant/ui/AIAssistantPanel.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AIAssistantPanel.js +45 -41
- package/dist/shared/assistant/ui/AssistantMarkdownRenderer.d.ts +52 -1
- package/dist/shared/assistant/ui/AssistantMarkdownRenderer.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantMarkdownRenderer.js +128 -71
- package/dist/shared/graphql/security.js +1 -1
- package/dist/shared-assistant.js +44 -44
- package/package.json +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { FC } from 'react';
|
|
2
2
|
import { PanelProps } from '../../plugins/types';
|
|
3
3
|
import { WorkspaceWriteAccess } from '../useWorkspaceWriteAccess';
|
|
4
|
+
import { AssistantNavigate } from './AssistantMarkdownRenderer';
|
|
4
5
|
export type AIAssistantPanelProps = PanelProps & {
|
|
5
6
|
/** When provided, renders a dock/float toggle in the header. */
|
|
6
7
|
docked?: boolean;
|
|
@@ -13,6 +14,16 @@ export type AIAssistantPanelProps = PanelProps & {
|
|
|
13
14
|
* it and the panel simply never claims a write will be refused.
|
|
14
15
|
*/
|
|
15
16
|
writeAccess?: WorkspaceWriteAccess;
|
|
17
|
+
/**
|
|
18
|
+
* Route an in-app link from an assistant reply instead of a full page load.
|
|
19
|
+
* Receives a router-ready PATH (`/fields?crop=42#yield`), already resolved
|
|
20
|
+
* from the href and proven same-origin — pass it straight to `navigate()`.
|
|
21
|
+
*
|
|
22
|
+
* ★ Threaded through rather than resolved here, for the same reason as
|
|
23
|
+
* `writeAccess`: only the product owns a router. Omit it and internal links
|
|
24
|
+
* stay ordinary same-tab anchors — the assistant never navigates on its own.
|
|
25
|
+
*/
|
|
26
|
+
onNavigate?: AssistantNavigate;
|
|
16
27
|
};
|
|
17
28
|
/**
|
|
18
29
|
* The panel.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIAssistantPanel.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AIAssistantPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAU,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAMtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"AIAssistantPanel.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AIAssistantPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAU,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAMtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAIvE,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,6BAA6B,CAAC;AAKrC,MAAM,MAAM,qBAAqB,GAAG,UAAU,GAAG;IAC/C,gEAAgE;IAChE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CA6GtD,CAAC"}
|
|
@@ -2,49 +2,53 @@ import { useAssistantPageLabel as e } from "../product.js";
|
|
|
2
2
|
import { useAssistantTr as t } from "../i18n.js";
|
|
3
3
|
import { useAssistantStore as n } from "../store.js";
|
|
4
4
|
import { AssistantSpeechProvider as r } from "./AssistantSpeechProvider.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
5
|
+
import { AssistantNavigateProvider as i } from "./AssistantMarkdownRenderer.js";
|
|
6
|
+
import { AssistantHeader as a } from "./AssistantHeader.js";
|
|
7
|
+
import { AssistantConversationList as o } from "./AssistantConversationList.js";
|
|
8
|
+
import { useFilesServiceWarmup as s } from "../../../storage/warmFilesService.js";
|
|
9
|
+
import { useAssistantHeartbeat as c } from "../useAssistantHeartbeat.js";
|
|
10
|
+
import { useAssistantKeyboardShortcuts as l } from "../useAssistantKeyboardShortcuts.js";
|
|
11
|
+
import { AssistantChatArea as u } from "./AssistantChatArea.js";
|
|
12
|
+
import { useRef as d } from "react";
|
|
13
|
+
import { jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
13
14
|
//#region src/shared/assistant/ui/AIAssistantPanel.tsx
|
|
14
|
-
var
|
|
15
|
-
let
|
|
16
|
-
|
|
17
|
-
let
|
|
18
|
-
return
|
|
19
|
-
panelRef:
|
|
20
|
-
onClose:
|
|
21
|
-
}), /* @__PURE__ */
|
|
22
|
-
visible:
|
|
23
|
-
children: /* @__PURE__ */ f(
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
15
|
+
var m = ({ onClose: m, visible: h, docked: g, onToggleDock: _, writeAccess: v, onNavigate: y }) => {
|
|
16
|
+
let b = t(), x = d(null), { conversations: S, activeConversationId: C, conversationListOpen: w, toggleConversationList: T, createConversation: E } = n(), D = S.find((e) => e.id === C);
|
|
17
|
+
c(D?.backendSessionId ?? null, D?.mode ?? null, h ?? !0), s(h ?? !0);
|
|
18
|
+
let O = e(h !== !1);
|
|
19
|
+
return l({
|
|
20
|
+
panelRef: x,
|
|
21
|
+
onClose: m
|
|
22
|
+
}), /* @__PURE__ */ f(r, {
|
|
23
|
+
visible: h ?? !0,
|
|
24
|
+
children: /* @__PURE__ */ f(i, {
|
|
25
|
+
value: y,
|
|
26
|
+
children: /* @__PURE__ */ p("div", {
|
|
27
|
+
ref: x,
|
|
28
|
+
className: "relative flex h-full w-full flex-col bg-bg-surface",
|
|
29
|
+
role: "complementary",
|
|
30
|
+
"aria-label": b("panel.ariaLabel", "AI Assistant"),
|
|
31
|
+
"data-testid": "ai-assistant-panel",
|
|
32
|
+
tabIndex: -1,
|
|
33
|
+
children: [
|
|
34
|
+
/* @__PURE__ */ f(a, {
|
|
35
|
+
contextLabel: O,
|
|
36
|
+
onNewConversation: () => E(),
|
|
37
|
+
onOpenHistory: T,
|
|
38
|
+
historyOpen: w,
|
|
39
|
+
onClose: m,
|
|
40
|
+
docked: g,
|
|
41
|
+
onToggleDock: _
|
|
42
|
+
}),
|
|
43
|
+
w && /* @__PURE__ */ f(o, {}),
|
|
44
|
+
/* @__PURE__ */ f(u, {
|
|
45
|
+
visible: h ?? !0,
|
|
46
|
+
writeAccess: v
|
|
47
|
+
})
|
|
48
|
+
]
|
|
49
|
+
})
|
|
46
50
|
})
|
|
47
51
|
});
|
|
48
52
|
};
|
|
49
53
|
//#endregion
|
|
50
|
-
export {
|
|
54
|
+
export { m as AIAssistantPanel };
|
|
@@ -1,10 +1,61 @@
|
|
|
1
|
-
import { FC } from 'react';
|
|
1
|
+
import { FC, ReactNode } from 'react';
|
|
2
2
|
import { Options } from 'react-markdown';
|
|
3
3
|
interface Props {
|
|
4
4
|
content: string;
|
|
5
5
|
}
|
|
6
6
|
/** @internal Exported for unit tests; not part of the module's public surface. */
|
|
7
7
|
export declare const assistantUrlTransform: Options["urlTransform"];
|
|
8
|
+
/**
|
|
9
|
+
* How a link in an assistant reply should be treated.
|
|
10
|
+
*
|
|
11
|
+
* ★★ `href.startsWith("/")` IS NOT AN INTERNAL TEST. A protocol-relative URL —
|
|
12
|
+
* `//evil.example/path` — has no colon, so react-markdown's `defaultUrlTransform`
|
|
13
|
+
* returns it verbatim and the sanitizer passes it through; the browser then
|
|
14
|
+
* resolves it against the page's SCHEME and lands on another origin. Treating
|
|
15
|
+
* that as internal would hand an attacker-authored destination to the router.
|
|
16
|
+
* So the decision is made by RESOLVING the href and comparing origins.
|
|
17
|
+
*
|
|
18
|
+
* ★ This runs AFTER the sanitizer, so anything with an unsafe scheme has already
|
|
19
|
+
* been reduced to an empty string upstream — `blocked` here is the empty case,
|
|
20
|
+
* not a second scheme allow-list. The scheme policy stays in one place.
|
|
21
|
+
*/
|
|
22
|
+
export type AssistantLinkKind = "internal" | "external" | "fragment" | "blocked";
|
|
23
|
+
/**
|
|
24
|
+
* Route an in-app PATH — `/fields?crop=42#yield`, never a full URL. Supplied by
|
|
25
|
+
* the product; absent means "no SPA routing".
|
|
26
|
+
*/
|
|
27
|
+
export type AssistantNavigate = (path: string) => void;
|
|
28
|
+
/**
|
|
29
|
+
* ★ `baseOrigin` is threaded rather than left to `isSafeRedirectTarget`'s own
|
|
30
|
+
* `window.location.origin` default so this stays callable — and testable — with
|
|
31
|
+
* no DOM. With no origin to compare against we cannot prove a link is internal,
|
|
32
|
+
* so it degrades to `external`: a new tab is the safe direction to fail.
|
|
33
|
+
*/
|
|
34
|
+
export declare function classifyAssistantHref(href: string | null | undefined, baseOrigin?: string): AssistantLinkKind;
|
|
35
|
+
/**
|
|
36
|
+
* The router-ready path for an href already classified as `internal`, or null if
|
|
37
|
+
* it cannot be resolved.
|
|
38
|
+
*
|
|
39
|
+
* ★★ WHY THIS IS NOT THE HREF. An internal link may be written absolutely —
|
|
40
|
+
* `https://app.example.com/fields?q=1#top` is same-origin, so it classifies as
|
|
41
|
+
* internal — and every SPA router reads a `to`/`navigate()` string as a PATH.
|
|
42
|
+
* Handing it the absolute form routes to a literal `/https://app.example.com/...`
|
|
43
|
+
* segment. Resolving here means each product wires one line and cannot get this
|
|
44
|
+
* wrong; the alternative is the same five lines re-derived in every product,
|
|
45
|
+
* with only the ones whose assistant happened to emit an absolute URL finding
|
|
46
|
+
* out they got it wrong.
|
|
47
|
+
*/
|
|
48
|
+
export declare function assistantRoutePath(href: string | null | undefined, baseOrigin?: string): string | null;
|
|
49
|
+
/**
|
|
50
|
+
* ★ Context, not a prop: the renderer is reached by TWO paths — the chat
|
|
51
|
+
* transcript and the voice transcript drawer — and threading a prop through
|
|
52
|
+
* both spines means the next surface silently ships links that reload the app.
|
|
53
|
+
*/
|
|
54
|
+
export declare const AssistantNavigateProvider: FC<{
|
|
55
|
+
value?: AssistantNavigate;
|
|
56
|
+
children: ReactNode;
|
|
57
|
+
}>;
|
|
58
|
+
export declare function useAssistantNavigate(): AssistantNavigate | null;
|
|
8
59
|
export declare const AssistantMarkdownRenderer: FC<Props>;
|
|
9
60
|
export {};
|
|
10
61
|
//# sourceMappingURL=AssistantMarkdownRenderer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantMarkdownRenderer.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantMarkdownRenderer.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"AssistantMarkdownRenderer.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantMarkdownRenderer.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAIL,KAAK,EAAE,EAEP,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAiB,EAIf,KAAK,OAAO,EACb,MAAM,gBAAgB,CAAC;AASxB,UAAU,KAAK;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAqDD,kFAAkF;AAClF,eAAO,MAAM,qBAAqB,EAAE,OAAO,CAAC,cAAc,CAWzD,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;AAEjF;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAUvD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,UAAU,CAAC,EAAE,MAAM,GAClB,iBAAiB,CASnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CA+Bf;AAoBD;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,EAAE,EAAE,CAAC;IACzC,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,EAAE,SAAS,CAAC;CACrB,CAIA,CAAC;AAEF,wBAAgB,oBAAoB,IAAI,iBAAiB,GAAG,IAAI,CAE/D;AAmTD,eAAO,MAAM,yBAAyB,EAAE,EAAE,CAAC,KAAK,CAiB/C,CAAC"}
|
|
@@ -1,52 +1,113 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import n from "../../../node_modules/
|
|
3
|
-
import
|
|
4
|
-
import i from "../../../node_modules/
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
1
|
+
import { isSafeRedirectTarget as e } from "../../graphql/security.js";
|
|
2
|
+
import { Markdown as t, defaultUrlTransform as n } from "../../../node_modules/react-markdown/lib/index.js";
|
|
3
|
+
import r from "../../../node_modules/remark-gfm/lib/index.js";
|
|
4
|
+
import { defaultSchema as i } from "../../../node_modules/hast-util-sanitize/lib/schema.js";
|
|
5
|
+
import a from "../../../node_modules/rehype-sanitize/lib/index.js";
|
|
6
|
+
import { useAssistantTr as o } from "../i18n.js";
|
|
7
|
+
import { copyToClipboard as s } from "../clipboard.js";
|
|
8
|
+
import { AssistantMarkdownImage as c } from "./AssistantMarkdownImage.js";
|
|
9
|
+
import { createContext as l, useContext as u, useState as d } from "react";
|
|
10
|
+
import { Check as f, Copy as p } from "lucide-react";
|
|
11
|
+
import { Fragment as m, jsx as h, jsxs as g } from "react/jsx-runtime";
|
|
11
12
|
//#region src/shared/assistant/ui/AssistantMarkdownRenderer.tsx
|
|
12
|
-
var
|
|
13
|
-
...
|
|
13
|
+
var _ = {
|
|
14
|
+
...i,
|
|
14
15
|
protocols: {
|
|
15
|
-
...
|
|
16
|
-
src: [...
|
|
16
|
+
...i.protocols,
|
|
17
|
+
src: [...i.protocols?.src ?? [], "data"]
|
|
17
18
|
}
|
|
18
|
-
},
|
|
19
|
-
function
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
}, v = /^data:image\/(?:png|jpe?g|gif|webp|avif|bmp);base64,[A-Za-z0-9+/=\s]+$/, y = (e, t, r) => t === "src" && r.tagName === "img" && v.test(e) ? e : n(e);
|
|
20
|
+
function b() {
|
|
21
|
+
try {
|
|
22
|
+
return typeof window > "u" ? null : window.location.origin;
|
|
23
|
+
} catch {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function x(t, n) {
|
|
28
|
+
let r = (t ?? "").trim();
|
|
29
|
+
if (!r) return "blocked";
|
|
30
|
+
if (r.startsWith("#")) return "fragment";
|
|
31
|
+
let i = n ?? b();
|
|
32
|
+
return i && e(r, i) ? "internal" : "external";
|
|
33
|
+
}
|
|
34
|
+
function S(e, t) {
|
|
35
|
+
let n = (e ?? "").trim();
|
|
36
|
+
if (!n) return null;
|
|
37
|
+
let r = t ?? b();
|
|
38
|
+
if (!r) return null;
|
|
39
|
+
try {
|
|
40
|
+
let e = new URL(n, r), t = `${e.pathname}${e.search}${e.hash}`;
|
|
41
|
+
return t.startsWith("//") || t.startsWith("/\\") ? null : t;
|
|
42
|
+
} catch {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function C(e) {
|
|
47
|
+
return e.defaultPrevented || e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey;
|
|
48
|
+
}
|
|
49
|
+
var w = l(null), T = ({ value: e, children: t }) => /* @__PURE__ */ h(w.Provider, {
|
|
50
|
+
value: e ?? null,
|
|
51
|
+
children: t
|
|
52
|
+
});
|
|
53
|
+
function E() {
|
|
54
|
+
return u(w);
|
|
55
|
+
}
|
|
56
|
+
var D = "text-action-primary-bg underline-offset-2 hover:underline", O = ({ href: e, children: t }) => {
|
|
57
|
+
let n = E(), r = x(e), i = r === "internal" ? S(e) : null;
|
|
58
|
+
return r === "blocked" ? /* @__PURE__ */ h(m, { children: t }) : n && i ? /* @__PURE__ */ h("a", {
|
|
59
|
+
href: e,
|
|
60
|
+
className: D,
|
|
61
|
+
"data-testid": "assistant-markdown-link",
|
|
62
|
+
onClick: (e) => {
|
|
63
|
+
C(e) || (e.preventDefault(), n(i));
|
|
64
|
+
},
|
|
65
|
+
children: t
|
|
66
|
+
}) : r === "internal" || r === "fragment" ? /* @__PURE__ */ h("a", {
|
|
67
|
+
href: e,
|
|
68
|
+
className: D,
|
|
69
|
+
"data-testid": "assistant-markdown-link",
|
|
70
|
+
children: t
|
|
71
|
+
}) : /* @__PURE__ */ h("a", {
|
|
72
|
+
href: e,
|
|
73
|
+
target: "_blank",
|
|
74
|
+
rel: "noopener noreferrer",
|
|
75
|
+
className: D,
|
|
76
|
+
"data-testid": "assistant-markdown-link",
|
|
77
|
+
children: t
|
|
78
|
+
});
|
|
79
|
+
}, k = [r], A = [[a, _]];
|
|
80
|
+
function j({ language: e, code: t }) {
|
|
81
|
+
let n = o(), [r, i] = d(!1);
|
|
82
|
+
return /* @__PURE__ */ g("div", {
|
|
22
83
|
className: "group relative my-2 overflow-hidden rounded-md border border-border-default bg-bg-sunken",
|
|
23
|
-
children: [/* @__PURE__ */
|
|
84
|
+
children: [/* @__PURE__ */ g("div", {
|
|
24
85
|
className: "flex items-center justify-between border-b border-border-default bg-bg-elevated px-3 py-1.5",
|
|
25
|
-
children: [/* @__PURE__ */
|
|
86
|
+
children: [/* @__PURE__ */ h("span", {
|
|
26
87
|
className: "font-mono text-[10px] uppercase tracking-wider text-text-muted",
|
|
27
88
|
children: e || "code"
|
|
28
|
-
}), /* @__PURE__ */
|
|
89
|
+
}), /* @__PURE__ */ h("button", {
|
|
29
90
|
type: "button",
|
|
30
91
|
onClick: () => {
|
|
31
|
-
|
|
92
|
+
s(t).then((e) => {
|
|
32
93
|
e && (i(!0), setTimeout(() => i(!1), 2e3));
|
|
33
94
|
});
|
|
34
95
|
},
|
|
35
96
|
className: "flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] text-text-secondary transition-colors hover:bg-bg-sunken hover:text-text-primary",
|
|
36
97
|
"aria-label": n("markdown.copyCode", "Copy code"),
|
|
37
98
|
"data-testid": "assistant-markdown-copy-code",
|
|
38
|
-
children: r ? /* @__PURE__ */
|
|
99
|
+
children: r ? /* @__PURE__ */ g(m, { children: [/* @__PURE__ */ h(f, { className: "size-3 text-status-success-text" }), /* @__PURE__ */ h("span", { children: n("markdown.copied", "Copied") })] }) : /* @__PURE__ */ g(m, { children: [/* @__PURE__ */ h(p, { className: "size-3" }), /* @__PURE__ */ h("span", { children: n("markdown.copy", "Copy") })] })
|
|
39
100
|
})]
|
|
40
|
-
}), /* @__PURE__ */
|
|
101
|
+
}), /* @__PURE__ */ h("pre", {
|
|
41
102
|
className: "overflow-x-auto p-3 text-xs leading-relaxed",
|
|
42
|
-
children: /* @__PURE__ */
|
|
103
|
+
children: /* @__PURE__ */ h("code", {
|
|
43
104
|
className: "font-mono text-text-primary",
|
|
44
105
|
children: t
|
|
45
106
|
})
|
|
46
107
|
})]
|
|
47
108
|
});
|
|
48
109
|
}
|
|
49
|
-
function
|
|
110
|
+
function M(e) {
|
|
50
111
|
let t = e?.children?.[0];
|
|
51
112
|
if (!t || t.type !== "element" || t.tagName !== "code") return null;
|
|
52
113
|
let n = t.children.map((e) => e.type === "text" ? e.value : "").join(""), r = t.properties?.className, i = (Array.isArray(r) ? r.map(String) : String(r ?? "").split(" ")).find((e) => e.startsWith("language-"));
|
|
@@ -55,10 +116,10 @@ function b(e) {
|
|
|
55
116
|
language: i ? i.slice(9) : ""
|
|
56
117
|
};
|
|
57
118
|
}
|
|
58
|
-
function
|
|
119
|
+
function N(e, t) {
|
|
59
120
|
return typeof e == "string" && e.split(" ").includes(t);
|
|
60
121
|
}
|
|
61
|
-
function
|
|
122
|
+
function P({ level: e, children: t }) {
|
|
62
123
|
let n = `h${e}`, r = {
|
|
63
124
|
2: "text-[1.15em]",
|
|
64
125
|
3: "text-[1.08em]",
|
|
@@ -66,133 +127,129 @@ function S({ level: e, children: t }) {
|
|
|
66
127
|
5: "text-[0.95em]",
|
|
67
128
|
6: "text-[0.9em]"
|
|
68
129
|
}[e];
|
|
69
|
-
return /* @__PURE__ */
|
|
130
|
+
return /* @__PURE__ */ h(n, {
|
|
70
131
|
className: `mb-1 mt-3 font-semibold text-text-primary ${r}`,
|
|
71
132
|
children: t
|
|
72
133
|
});
|
|
73
134
|
}
|
|
74
|
-
var
|
|
75
|
-
a: ({ href: e, children: t }) => /* @__PURE__ */
|
|
135
|
+
var F = {
|
|
136
|
+
a: ({ href: e, children: t }) => /* @__PURE__ */ h(O, {
|
|
76
137
|
href: e,
|
|
77
|
-
target: "_blank",
|
|
78
|
-
rel: "noopener noreferrer",
|
|
79
|
-
className: "text-action-primary-bg underline-offset-2 hover:underline",
|
|
80
|
-
"data-testid": "assistant-markdown-link",
|
|
81
138
|
children: t
|
|
82
139
|
}),
|
|
83
|
-
blockquote: ({ children: e }) => /* @__PURE__ */
|
|
140
|
+
blockquote: ({ children: e }) => /* @__PURE__ */ h("blockquote", {
|
|
84
141
|
className: "my-2 border-l-2 border-action-primary-bg pl-3 italic text-text-secondary",
|
|
85
142
|
children: e
|
|
86
143
|
}),
|
|
87
|
-
code: ({ children: e }) => /* @__PURE__ */
|
|
144
|
+
code: ({ children: e }) => /* @__PURE__ */ h("code", {
|
|
88
145
|
className: "rounded bg-bg-sunken px-1 py-0.5 font-mono text-[0.85em] text-text-primary",
|
|
89
146
|
children: e
|
|
90
147
|
}),
|
|
91
|
-
del: ({ children: e }) => /* @__PURE__ */
|
|
148
|
+
del: ({ children: e }) => /* @__PURE__ */ h("del", {
|
|
92
149
|
className: "text-text-muted line-through",
|
|
93
150
|
children: e
|
|
94
151
|
}),
|
|
95
|
-
em: ({ children: e }) => /* @__PURE__ */
|
|
152
|
+
em: ({ children: e }) => /* @__PURE__ */ h("em", {
|
|
96
153
|
className: "italic",
|
|
97
154
|
children: e
|
|
98
155
|
}),
|
|
99
|
-
h1: ({ children: e }) => /* @__PURE__ */
|
|
156
|
+
h1: ({ children: e }) => /* @__PURE__ */ h(P, {
|
|
100
157
|
level: 2,
|
|
101
158
|
children: e
|
|
102
159
|
}),
|
|
103
|
-
h2: ({ children: e }) => /* @__PURE__ */
|
|
160
|
+
h2: ({ children: e }) => /* @__PURE__ */ h(P, {
|
|
104
161
|
level: 3,
|
|
105
162
|
children: e
|
|
106
163
|
}),
|
|
107
|
-
h3: ({ children: e }) => /* @__PURE__ */
|
|
164
|
+
h3: ({ children: e }) => /* @__PURE__ */ h(P, {
|
|
108
165
|
level: 4,
|
|
109
166
|
children: e
|
|
110
167
|
}),
|
|
111
|
-
h4: ({ children: e }) => /* @__PURE__ */
|
|
168
|
+
h4: ({ children: e }) => /* @__PURE__ */ h(P, {
|
|
112
169
|
level: 5,
|
|
113
170
|
children: e
|
|
114
171
|
}),
|
|
115
|
-
h5: ({ children: e }) => /* @__PURE__ */
|
|
172
|
+
h5: ({ children: e }) => /* @__PURE__ */ h(P, {
|
|
116
173
|
level: 6,
|
|
117
174
|
children: e
|
|
118
175
|
}),
|
|
119
|
-
h6: ({ children: e }) => /* @__PURE__ */
|
|
176
|
+
h6: ({ children: e }) => /* @__PURE__ */ h(P, {
|
|
120
177
|
level: 6,
|
|
121
178
|
children: e
|
|
122
179
|
}),
|
|
123
|
-
hr: () => /* @__PURE__ */
|
|
124
|
-
img: ({ src: e, alt: t, title: n }) => /* @__PURE__ */
|
|
180
|
+
hr: () => /* @__PURE__ */ h("hr", { className: "my-3 border-border-default" }),
|
|
181
|
+
img: ({ src: e, alt: t, title: n }) => /* @__PURE__ */ h(c, {
|
|
125
182
|
src: typeof e == "string" ? e : void 0,
|
|
126
183
|
alt: t,
|
|
127
184
|
title: n
|
|
128
185
|
}),
|
|
129
|
-
input: ({ checked: e, type: t }) => t === "checkbox" ? /* @__PURE__ */
|
|
186
|
+
input: ({ checked: e, type: t }) => t === "checkbox" ? /* @__PURE__ */ h("input", {
|
|
130
187
|
type: "checkbox",
|
|
131
188
|
checked: !!e,
|
|
132
189
|
disabled: !0,
|
|
133
190
|
className: "mr-1.5 size-3 flex-shrink-0 align-[-0.1em] accent-[var(--color-action-primary-bg)]"
|
|
134
191
|
}) : null,
|
|
135
|
-
li: ({ className: e, children: t }) => /* @__PURE__ */
|
|
136
|
-
className:
|
|
192
|
+
li: ({ className: e, children: t }) => /* @__PURE__ */ h("li", {
|
|
193
|
+
className: N(e, "task-list-item") ? "list-none text-text-primary" : "text-text-primary",
|
|
137
194
|
children: t
|
|
138
195
|
}),
|
|
139
|
-
ol: ({ children: e }) => /* @__PURE__ */
|
|
196
|
+
ol: ({ children: e }) => /* @__PURE__ */ h("ol", {
|
|
140
197
|
className: "my-1.5 ml-5 list-decimal space-y-0.5",
|
|
141
198
|
children: e
|
|
142
199
|
}),
|
|
143
|
-
p: ({ children: e }) => /* @__PURE__ */
|
|
200
|
+
p: ({ children: e }) => /* @__PURE__ */ h("p", {
|
|
144
201
|
className: "my-1.5 leading-relaxed text-text-primary",
|
|
145
202
|
children: e
|
|
146
203
|
}),
|
|
147
204
|
pre: ({ children: e, node: t }) => {
|
|
148
|
-
let n =
|
|
149
|
-
return n ? /* @__PURE__ */
|
|
205
|
+
let n = M(t);
|
|
206
|
+
return n ? /* @__PURE__ */ h(j, {
|
|
150
207
|
language: n.language,
|
|
151
208
|
code: n.code
|
|
152
|
-
}) : /* @__PURE__ */
|
|
209
|
+
}) : /* @__PURE__ */ h("pre", {
|
|
153
210
|
className: "my-2 overflow-x-auto rounded-md border border-border-default bg-bg-sunken p-3 text-xs leading-relaxed",
|
|
154
211
|
children: e
|
|
155
212
|
});
|
|
156
213
|
},
|
|
157
|
-
strong: ({ children: e }) => /* @__PURE__ */
|
|
214
|
+
strong: ({ children: e }) => /* @__PURE__ */ h("strong", {
|
|
158
215
|
className: "font-semibold text-text-primary",
|
|
159
216
|
children: e
|
|
160
217
|
}),
|
|
161
|
-
table: ({ children: e }) => /* @__PURE__ */
|
|
218
|
+
table: ({ children: e }) => /* @__PURE__ */ h("div", {
|
|
162
219
|
className: "my-2 overflow-x-auto",
|
|
163
220
|
"data-testid": "assistant-markdown-table",
|
|
164
|
-
children: /* @__PURE__ */
|
|
221
|
+
children: /* @__PURE__ */ h("table", {
|
|
165
222
|
className: "w-full border-collapse text-[0.9em]",
|
|
166
223
|
children: e
|
|
167
224
|
})
|
|
168
225
|
}),
|
|
169
|
-
td: ({ children: e }) => /* @__PURE__ */
|
|
226
|
+
td: ({ children: e }) => /* @__PURE__ */ h("td", {
|
|
170
227
|
className: "px-2 py-1.5 align-top text-text-primary",
|
|
171
228
|
children: e
|
|
172
229
|
}),
|
|
173
|
-
th: ({ children: e }) => /* @__PURE__ */
|
|
230
|
+
th: ({ children: e }) => /* @__PURE__ */ h("th", {
|
|
174
231
|
scope: "col",
|
|
175
232
|
className: "px-2 py-1.5 text-left font-semibold text-text-primary",
|
|
176
233
|
children: e
|
|
177
234
|
}),
|
|
178
|
-
tr: ({ children: e }) => /* @__PURE__ */
|
|
235
|
+
tr: ({ children: e }) => /* @__PURE__ */ h("tr", {
|
|
179
236
|
className: "border-b border-border-subtle",
|
|
180
237
|
children: e
|
|
181
238
|
}),
|
|
182
|
-
ul: ({ className: e, children: t }) => /* @__PURE__ */
|
|
183
|
-
className:
|
|
239
|
+
ul: ({ className: e, children: t }) => /* @__PURE__ */ h("ul", {
|
|
240
|
+
className: N(e, "contains-task-list") ? "my-1.5 ml-0.5 list-none space-y-0.5" : "my-1.5 ml-5 list-disc space-y-0.5",
|
|
184
241
|
children: t
|
|
185
242
|
})
|
|
186
|
-
},
|
|
243
|
+
}, I = ({ content: e }) => /* @__PURE__ */ h("div", {
|
|
187
244
|
className: "break-words [&>*:first-child]:mt-0 [&>*:last-child]:mb-0",
|
|
188
245
|
"data-testid": "assistant-markdown",
|
|
189
|
-
children: /* @__PURE__ */
|
|
190
|
-
remarkPlugins:
|
|
191
|
-
rehypePlugins:
|
|
192
|
-
urlTransform:
|
|
193
|
-
components:
|
|
194
|
-
children:
|
|
246
|
+
children: /* @__PURE__ */ h(t, {
|
|
247
|
+
remarkPlugins: k,
|
|
248
|
+
rehypePlugins: A,
|
|
249
|
+
urlTransform: y,
|
|
250
|
+
components: F,
|
|
251
|
+
children: e
|
|
195
252
|
})
|
|
196
253
|
});
|
|
197
254
|
//#endregion
|
|
198
|
-
export {
|
|
255
|
+
export { I as AssistantMarkdownRenderer, T as AssistantNavigateProvider, S as assistantRoutePath, y as assistantUrlTransform, x as classifyAssistantHref, E as useAssistantNavigate };
|
|
@@ -81,4 +81,4 @@ function d(e) {
|
|
|
81
81
|
if (e) return Object.fromEntries(Object.entries(e).filter(([e]) => !t.has(e.toLowerCase())));
|
|
82
82
|
}
|
|
83
83
|
//#endregion
|
|
84
|
-
export { o as getValidAccessTokenFromStorage, l as redirectToSafeLocation, d as sanitizeExtraHeaders, s as sanitizeGeography, u as validateGatewayBaseUrl };
|
|
84
|
+
export { o as getValidAccessTokenFromStorage, c as isSafeRedirectTarget, l as redirectToSafeLocation, d as sanitizeExtraHeaders, s as sanitizeGeography, u as validateGatewayBaseUrl };
|
package/dist/shared-assistant.js
CHANGED
|
@@ -48,47 +48,47 @@ import { ATTACHMENT_SOURCES as Mr, availableAttachmentSources as Nr, deviceHasCa
|
|
|
48
48
|
import { SANDBOX_READY_TTL_MS as Fr, createReadinessTracker as Ir, isRecentlyVerified as Lr } from "./shared/assistant/sandboxReadiness.js";
|
|
49
49
|
import { AssistantAutoSpeakToggle as Rr } from "./shared/assistant/ui/AssistantAutoSpeakToggle.js";
|
|
50
50
|
import { AssistantMarkdownImage as zr, imageHostLabel as Br, isRemoteImageSrc as Vr } from "./shared/assistant/ui/AssistantMarkdownImage.js";
|
|
51
|
-
import { AssistantMarkdownRenderer as Hr,
|
|
52
|
-
import { AssistantMessageAttachments as
|
|
53
|
-
import { AssistantPendingWriteCard as
|
|
54
|
-
import { AssistantLanguageMenu as
|
|
55
|
-
import { AssistantReplyLanguageSelector as
|
|
56
|
-
import { AssistantSpeakButton as
|
|
57
|
-
import { AssistantSpokenTurnsNotice as
|
|
58
|
-
import { AssistantAttachmentButton as
|
|
59
|
-
import { AssistantAttachmentChips as
|
|
60
|
-
import { AssistantLanguageSelector as
|
|
61
|
-
import { ASSISTANT_MODE_META as
|
|
62
|
-
import { AssistantVoiceButton as
|
|
63
|
-
import { AUTO_VOICE as
|
|
64
|
-
import { AssistantVoiceOrb as
|
|
65
|
-
import { AssistantVoiceSessionButton as
|
|
66
|
-
import { CAPTION_SCROLL_ATTR as
|
|
67
|
-
import { VoiceConversationView as
|
|
68
|
-
import { VoiceWaveform as
|
|
69
|
-
import { VoiceMiniController as
|
|
70
|
-
import { VoiceStage as
|
|
71
|
-
import { VoiceTranscriptDrawer as
|
|
72
|
-
import { downloadFile as
|
|
73
|
-
import { AssistantMoreMenu as
|
|
74
|
-
import { AssistantHeader as
|
|
75
|
-
import { AssistantConversationList as
|
|
76
|
-
import { AssistantEmptyState as
|
|
77
|
-
import { AssistantMessageItem as
|
|
78
|
-
import { AssistantMessageList as
|
|
79
|
-
import { AssistantVoiceSession as
|
|
80
|
-
import { useAssistantApiAccess as
|
|
81
|
-
import { useConversationTurns as
|
|
82
|
-
import { isMultimodalBodyRejection as
|
|
83
|
-
import { aiCreditsUpdatedEventName as
|
|
84
|
-
import { useWorkspaceWriteAccess as
|
|
85
|
-
import { extractDocumentText as
|
|
86
|
-
import { useAssistantAttachments as
|
|
87
|
-
import { AssistantComposer as
|
|
88
|
-
import { isProdRuntime as
|
|
89
|
-
import { useAssistantHeartbeat as
|
|
90
|
-
import { useAssistantKeyboardShortcuts as
|
|
91
|
-
import { AssistantApiCallsConsentDialog as
|
|
92
|
-
import { AssistantChatArea as
|
|
93
|
-
import { AIAssistantPanel as
|
|
94
|
-
export {
|
|
51
|
+
import { AssistantMarkdownRenderer as Hr, AssistantNavigateProvider as Ur, assistantRoutePath as Wr, assistantUrlTransform as Gr, classifyAssistantHref as Kr, useAssistantNavigate as qr } from "./shared/assistant/ui/AssistantMarkdownRenderer.js";
|
|
52
|
+
import { AssistantMessageAttachments as Jr } from "./shared/assistant/ui/AssistantMessageAttachments.js";
|
|
53
|
+
import { AssistantPendingWriteCard as Yr } from "./shared/assistant/ui/AssistantPendingWriteCard.js";
|
|
54
|
+
import { AssistantLanguageMenu as Xr } from "./shared/assistant/ui/AssistantLanguageMenu.js";
|
|
55
|
+
import { AssistantReplyLanguageSelector as Zr } from "./shared/assistant/ui/AssistantReplyLanguageSelector.js";
|
|
56
|
+
import { AssistantSpeakButton as Qr } from "./shared/assistant/ui/AssistantSpeakButton.js";
|
|
57
|
+
import { AssistantSpokenTurnsNotice as $r } from "./shared/assistant/ui/AssistantSpokenTurnsNotice.js";
|
|
58
|
+
import { AssistantAttachmentButton as ei } from "./shared/assistant/ui/composer/AssistantAttachmentButton.js";
|
|
59
|
+
import { AssistantAttachmentChips as ti } from "./shared/assistant/ui/composer/AssistantAttachmentChips.js";
|
|
60
|
+
import { AssistantLanguageSelector as ni, FOLLOW_APP_LOCALE as ri } from "./shared/assistant/ui/composer/AssistantLanguageSelector.js";
|
|
61
|
+
import { ASSISTANT_MODE_META as ii, AssistantModeSelector as ai, nextModeIndex as oi } from "./shared/assistant/ui/composer/AssistantModeSelector.js";
|
|
62
|
+
import { AssistantVoiceButton as si } from "./shared/assistant/ui/composer/AssistantVoiceButton.js";
|
|
63
|
+
import { AUTO_VOICE as ci, AssistantVoiceSelector as li } from "./shared/assistant/ui/composer/AssistantVoiceSelector.js";
|
|
64
|
+
import { AssistantVoiceOrb as ui } from "./shared/assistant/ui/voice/AssistantVoiceOrb.js";
|
|
65
|
+
import { AssistantVoiceSessionButton as di } from "./shared/assistant/ui/voice/AssistantVoiceSessionButton.js";
|
|
66
|
+
import { CAPTION_SCROLL_ATTR as fi, VoiceCaption as pi } from "./shared/assistant/ui/voice/VoiceCaption.js";
|
|
67
|
+
import { VoiceConversationView as mi } from "./shared/assistant/ui/voice/VoiceConversationView.js";
|
|
68
|
+
import { VoiceWaveform as hi } from "./shared/assistant/ui/voice/VoiceWaveform.js";
|
|
69
|
+
import { VoiceMiniController as gi } from "./shared/assistant/ui/voice/VoiceMiniController.js";
|
|
70
|
+
import { VoiceStage as _i } from "./shared/assistant/ui/voice/VoiceStage.js";
|
|
71
|
+
import { VoiceTranscriptDrawer as vi } from "./shared/assistant/ui/voice/VoiceTranscriptDrawer.js";
|
|
72
|
+
import { downloadFile as yi, exportConversation as bi } from "./shared/assistant/exportConversation.js";
|
|
73
|
+
import { AssistantMoreMenu as xi } from "./shared/assistant/ui/AssistantMoreMenu.js";
|
|
74
|
+
import { AssistantHeader as Si } from "./shared/assistant/ui/AssistantHeader.js";
|
|
75
|
+
import { AssistantConversationList as Ci } from "./shared/assistant/ui/AssistantConversationList.js";
|
|
76
|
+
import { AssistantEmptyState as wi } from "./shared/assistant/ui/AssistantEmptyState.js";
|
|
77
|
+
import { AssistantMessageItem as Ti } from "./shared/assistant/ui/AssistantMessageItem.js";
|
|
78
|
+
import { AssistantMessageList as Ei } from "./shared/assistant/ui/AssistantMessageList.js";
|
|
79
|
+
import { AssistantVoiceSession as Di } from "./shared/assistant/ui/voice/AssistantVoiceSession.js";
|
|
80
|
+
import { useAssistantApiAccess as Oi } from "./shared/assistant/useAssistantApiAccess.js";
|
|
81
|
+
import { useConversationTurns as ki } from "./shared/assistant/useConversationTurns.js";
|
|
82
|
+
import { isMultimodalBodyRejection as Ai, isRecoverableAssistantError as ji } from "./shared/assistant/transportErrors.js";
|
|
83
|
+
import { aiCreditsUpdatedEventName as Mi, dispatchAssistantQuotaExhausted as Ni, notifyAiCreditsUpdated as Pi } from "./shared/assistant/aiCredits.js";
|
|
84
|
+
import { useWorkspaceWriteAccess as Fi } from "./shared/assistant/useWorkspaceWriteAccess.js";
|
|
85
|
+
import { extractDocumentText as Ii } from "./shared/assistant/documentExtract.js";
|
|
86
|
+
import { useAssistantAttachments as Li } from "./shared/assistant/useAssistantAttachments.js";
|
|
87
|
+
import { AssistantComposer as Ri } from "./shared/assistant/ui/composer/AssistantComposer.js";
|
|
88
|
+
import { isProdRuntime as zi } from "./shared/assistant/env.js";
|
|
89
|
+
import { useAssistantHeartbeat as Bi } from "./shared/assistant/useAssistantHeartbeat.js";
|
|
90
|
+
import { useAssistantKeyboardShortcuts as Vi } from "./shared/assistant/useAssistantKeyboardShortcuts.js";
|
|
91
|
+
import { AssistantApiCallsConsentDialog as Hi } from "./shared/assistant/ui/AssistantApiCallsConsentDialog.js";
|
|
92
|
+
import { AssistantChatArea as Ui } from "./shared/assistant/ui/AssistantChatArea.js";
|
|
93
|
+
import { AIAssistantPanel as Wi } from "./shared/assistant/ui/AIAssistantPanel.js";
|
|
94
|
+
export { Wi as AIAssistantPanel, g as ASSISTANT_API_AUTH_STRATEGY, zt as ASSISTANT_LANGUAGES, ii as ASSISTANT_MODE_META, Fn as ATTACHMENT_ACCEPT, Mr as ATTACHMENT_SOURCES, ci as AUTO_VOICE, Hi as AssistantApiCallsConsentDialog, ei as AssistantAttachmentButton, ti as AssistantAttachmentChips, Rr as AssistantAutoSpeakToggle, Ui as AssistantChatArea, Ri as AssistantComposer, Ci as AssistantConversationList, wi as AssistantEmptyState, Si as AssistantHeader, $t as AssistantI18nProvider, Xr as AssistantLanguageMenu, ni as AssistantLanguageSelector, zr as AssistantMarkdownImage, Hr as AssistantMarkdownRenderer, Jr as AssistantMessageAttachments, Ti as AssistantMessageItem, Ei as AssistantMessageList, ai as AssistantModeSelector, xi as AssistantMoreMenu, Ur as AssistantNavigateProvider, Yr as AssistantPendingWriteCard, qt as AssistantProductProvider, Zr as AssistantReplyLanguageSelector, X as AssistantRuntimeManager, Qr as AssistantSpeakButton, Tr as AssistantSpeechProvider, $r as AssistantSpokenTurnsNotice, Cr as AssistantToolActivity, si as AssistantVoiceButton, ui as AssistantVoiceOrb, li as AssistantVoiceSelector, Di as AssistantVoiceSession, di as AssistantVoiceSessionButton, In as AttachmentRejectedError, hn as BOILERPLATE_PAGE_SHARE, fi as CAPTION_SCROLL_ATTR, s as CHECK_AI_CREDITS, c as CREATE_SANDBOX, vt as DEFAULT_SPEAKABLE_LABELS, Bt as DEFAULT_SPEECH_RATE, Ge as ENDPOINT_GRACE_MS, l as EXTEND_SANDBOX_TTL, ri as FOLLOW_APP_LOCALE, u as GET_ACTIVE_SANDBOXES, d as GET_SANDBOX, xe as HOSTED_TTS_MAX_CHARS, _e as HOSTED_TTS_TIER, ve as HOSTED_VOICES, cn as IDLE_PLAYBACK, Ke as INITIAL_SESSION, Ln as INLINE_IMAGE_MAX_DIM, Rn as INLINE_IMAGE_QUALITY, qe as INTERRUPT_MAX_MS, Je as INTERRUPT_MIN_MS, zn as MAX_ATTACHMENTS, gn as MAX_BOILERPLATE_LINE_CHARS, _n as MAX_EXTRACTED_CHARS, Bn as MAX_FILE_BYTES, Vn as MAX_INLINE_CHARS_PER_FILE, Hn as MAX_INLINE_CHARS_TOTAL, pn as MAX_INLINE_IMAGE_BASE64_BYTES, Un as MAX_INLINE_IMAGE_BASE64_CHARS, Wn as MAX_INLINE_IMAGE_PARTS, Gn as MAX_INLINE_TURN_BODY_BYTES, vn as MAX_PDF_PAGES_SCANNED, mn as MAX_REQUEST_BODY_BYTES, yt as MAX_SPEAKABLE_CHARS, bt as MAX_SPOKEN_TABLE_ROWS, Kn as MAX_TURN_BODY_BYTES, At as MINI_CAPTION_BUDGET, yn as MIN_PAGE_TEXT_CHARS, bn as MIN_TEXT_PAGE_SHARE, gr as PHRASE_ROTATE_MS, Mt as POLL_FAST_MS, Nt as POLL_FAST_UNTIL_MS, Pt as POLL_SLOW_MS, Ft as POLL_STEADY_MS, It as POLL_STEADY_UNTIL_MS, Ot as PREVIEW_LANGUAGES, qn as PROMPT_ENVELOPE_RESERVE_BYTES, f as PROXY_SANDBOX_REQUEST, p as REPORT_AI_TOKEN_USAGE, Fr as SANDBOX_READY_TTL_MS, Ye as SILENCE_SUBMIT_MS, Se as SPEAKING_RATE_MAX, Ce as SPEAKING_RATE_MAX_STREAMING, we as SPEAKING_RATE_MAX_SYNC, Te as SPEAKING_RATE_MIN, xt as SPEECH_CHUNK_CHARS, St as SPEECH_CHUNK_CJK_CHARS, rt as SPEECH_LANG, rn as SPOKEN_LABEL_LANGUAGES, _r as STAGE_COPY, m as STOP_ASSISTANT_SANDBOX, vr as THINKING_PHRASES, Jn as TURN_BODY_HEADROOM_BYTES, it as VOICE_LIST_TIMEOUT_MS, pi as VoiceCaption, mi as VoiceConversationView, gi as VoiceMiniController, _i as VoiceStage, vi as VoiceTranscriptDrawer, hi as VoiceWaveform, h as WAIT_FOR_SANDBOX_RUNNING, E as abortAssistantTurn, Mi as aiCreditsUpdatedEventName, D as approvePendingWrite, Wr as assistantRoutePath, en as assistantTranslationKey, Gr as assistantUrlTransform, Nr as availableAttachmentSources, Ee as base64ToBytes, ge as browserSpeechEngine, O as buildAssistantSandboxEnv, Yn as buildAttachmentPromptBlock, ht as buildContinuedFromVoiceNote, Z as buildProgress, Xn as buildPromptParts, k as buildPromptRequestBody, Zn as buildPromptWithAttachments, De as buildRequest, a as buildSandboxContextInput, gt as buildVoiceTranscriptMarkdown, le as chatTurns, A as checkAssistantAiCredits, Ct as chunkForSpeech, Kr as classifyAssistantHref, Qn as classifyAttachment, Oe as classifyHttpFailure, t as classifyQuotaError, xn as columnLetterToIndex, Pe as configureSpeechEngine, wt as containsCjk, Or as copyToClipboard, $n as countInlineImageCandidates, er as countInlinedImageParts, j as createAssistantSandbox, M as createAssistantSession, Me as createHostedTtsEngine, Ir as createReadinessTracker, Ne as createRoutingSpeechEngine, se as createSandboxAssistantTransport, Fe as createSpeechEngines, ke as decodeAudioResponse, Sn as decodeXmlEntities, n as describeQuotaError, tr as detectDocumentFormat, on as detectScriptLocale, Pr as deviceHasCamera, Ni as dispatchAssistantQuotaExhausted, Cn as docxXmlToText, N as downloadAssistantArtifact, yi as downloadFile, nr as estimateTurnBodyBytes, o as executeSandboxGraphQL, bi as exportConversation, P as extendAssistantSandboxTTL, Ii as extractDocumentText, Vt as findAssistantLanguage, F as findExistingSandbox, Gt as findPendingWrite, wn as fitPdfPages, rr as formatBytes, Tn as formatPageRanges, kr as getActorId, I as getAssistantArtifacts, Q as getAssistantMedia, L as getAssistantMessages, R as getAssistantSession, z as getAssistantStreamAccess, $ as getAssistantText, ir as getAttachmentSendBlocker, S as getCapability, ar as getExtension, _ as getImageForMode, v as getImageTagForMode, Ar as getOrganizationId, ee as getRawMessageCreatedAt, y as getResourcesForMode, b as getSandboxImageRegistry, or as getSendableAttachments, Ie as getSpeechEngine, te as getToolProgress, jr as getWorkspaceId, ue as groupBySession, de as groupConsecutiveBySession, sr as hasAttachmentWorkInFlight, ye as hostedLocaleFor, be as hostedSupportsLanguage, Br as imageHostLabel, Xe as isCapturing, Ze as isEcho, En as isMostlyImagePages, Ai as isMultimodalBodyRejection, zi as isProdRuntime, r as isQuotaExhaustedError, ne as isReapedSandboxConnectionError, Lr as isRecentlyVerified, re as isRecoverable, ji as isRecoverableAssistantError, Vr as isRemoteImageSrc, ln as isSpeakingMessage, at as isSpeechBlocked, yr as isStageCopy, Qe as isSubmittable, pr as isTurnInFlight, C as isUnknownFieldError, fe as isVoiceTurn, Dn as joinSheets, ot as languageDisplayName, ie as mapSessionToHistory, w as markSupported, T as markUnsupported, ae as mergeMessagesById, ze as micIsInterrupt, B as modeRequiresConfirmWrites, oi as nextModeIndex, st as normalizeLangTag, Pi as notifyAiCreditsUpdated, $e as orbMode, On as pageMarker, Kt as parseConfirmationRefusal, cr as parseDataUrl, kn as parseSharedStrings, wr as parseToolActivity, An as parseWorkbookSheets, jn as pdfTextItemsToPage, mr as planAbandonedTurn, et as planReplyConsumption, hr as planTurnAbort, Lt as pollDelayMs, ct as primaryLanguageSubtag, un as publishedChunks, i as quotaExhaustedEventName, Le as readSpeechEngineConfig, V as releaseSupersededAssistantSandboxes, Ut as replyFollowsInput, H as reportAssistantAiTokenUsage, dn as requiresCancel, Re as resetSpeechEngine, Ht as resolveAssistantLanguage, Wt as resolveLanguagePair, Jt as resolveModeConfig, x as resolveSandboxAssistantMode, sn as resolveSpeechLocale, oe as sanitize, U as selectExistingAssistantSandbox, W as selectSupersededAssistantSandboxes, lt as selectVoiceForLocale, G as sendAssistantPromptAsync, K as sendHeartbeat, Mn as sheetXmlToRows, Ae as shouldDisableEngine, jt as showPreviousChunk, Be as showsAssistantCaption, Ve as showsUserCaption, Tt as speakableEmail, ut as speechGate, an as speechLabelsFor, dt as speechLangForLocale, fn as speechPlaybackReducer, je as splitForVendor, Et as splitTableRow, tt as spokenSoFar, br as stageText, xr as statusStageCopy, q as stopReapedAssistantSandbox, Nn as summarisePageText, Sr as thinkingPhrase, Rt as toCaptionText, lr as toMessageAttachment, Dt as toSpeakableText, ur as truncateForInline, Pn as truncatePagesForInline, Oi as useAssistantApiAccess, Li as useAssistantAttachments, Bi as useAssistantHeartbeat, tn as useAssistantI18nNamespace, Vi as useAssistantKeyboardShortcuts, qr as useAssistantNavigate, Yt as useAssistantPageLabel, Xt as useAssistantProduct, Zt as useAssistantProductOrNull, Er as useAssistantSpeech, Qt as useAssistantStorageFolders, fr as useAssistantStore, nn as useAssistantTr, ki as useConversationTurns, ce as useSandboxAssistantTransport, e as useVoiceInput, Dr as useVoiceSession, Fi as useWorkspaceWriteAccess, dr as validateFile, ft as voiceAvailability, pe as voiceMarker, kt as voicePreviewText, pt as voiceQualityRank, me as voiceSessionIdOf, nt as voiceSessionReducer, He as voiceStageState, _t as voiceTranscriptFilename, he as voiceTurnsOnly, mt as voicesForLocale, J as waitForAssistantServiceReady, Y as waitForSandboxRunning, Ue as waveformIsActive, We as waveformIsSettled };
|