@burdenoff/fe-libs 2026.904.14 → 2026.904.16
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/index.d.ts +2 -0
- package/dist/shared/assistant/index.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantMessageItem.d.ts +19 -0
- package/dist/shared/assistant/ui/AssistantMessageItem.d.ts.map +1 -0
- package/dist/shared/assistant/ui/AssistantMessageItem.js +185 -0
- package/dist/shared/assistant/ui/AssistantMessageList.d.ts +13 -0
- package/dist/shared/assistant/ui/AssistantMessageList.d.ts.map +1 -0
- package/dist/shared/assistant/ui/AssistantMessageList.js +37 -0
- package/dist/shared-assistant.js +3 -1
- package/package.json +1 -1
|
@@ -104,4 +104,6 @@ export * from './ui/AssistantHeader';
|
|
|
104
104
|
export * from './ui/AssistantConversationList';
|
|
105
105
|
export * from './ui/AssistantEmptyState';
|
|
106
106
|
export * from './exportConversation';
|
|
107
|
+
export * from './ui/AssistantMessageItem';
|
|
108
|
+
export * from './ui/AssistantMessageList';
|
|
107
109
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAGH,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC;AAClD,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AAGxB,cAAc,wBAAwB,CAAC;AAKvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAG9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,gBAAgB,CAAC;AAK/B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAG3C,cAAc,QAAQ,CAAC;AAEvB,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AAGrC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qCAAqC,CAAC;AACpD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,yCAAyC,CAAC;AACxD,cAAc,wCAAwC,CAAC;AACvD,cAAc,yCAAyC,CAAC;AACxD,cAAc,qCAAqC,CAAC;AACpD,cAAc,oCAAoC,CAAC;AACnD,cAAc,sCAAsC,CAAC;AACrD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wCAAwC,CAAC;AACvD,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AACjD,cAAc,0BAA0B,CAAC;AAGzC,cAAc,WAAW,CAAC;AAE1B,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/assistant/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAGH,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC;AAClD,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AAGxB,cAAc,wBAAwB,CAAC;AAKvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAG9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,gBAAgB,CAAC;AAK/B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAG3C,cAAc,QAAQ,CAAC;AAEvB,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AAGrC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qCAAqC,CAAC;AACpD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,yCAAyC,CAAC;AACxD,cAAc,wCAAwC,CAAC;AACvD,cAAc,yCAAyC,CAAC;AACxD,cAAc,qCAAqC,CAAC;AACpD,cAAc,oCAAoC,CAAC;AACnD,cAAc,sCAAsC,CAAC;AACrD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wCAAwC,CAAC;AACvD,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AACjD,cAAc,0BAA0B,CAAC;AAGzC,cAAc,WAAW,CAAC;AAE1B,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AAErC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { Message } from '../conversation';
|
|
3
|
+
interface Props {
|
|
4
|
+
message: Message;
|
|
5
|
+
isStreaming?: boolean;
|
|
6
|
+
/** This assistant message ended in an error — show the Retry affordance. */
|
|
7
|
+
isFailed?: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* The most recent assistant turn. Retry is offered here too — a turn can
|
|
10
|
+
* "complete" with an apology (e.g. a gateway 403 the model reports as text)
|
|
11
|
+
* without ever tripping `isFailed`, and the user still needs a way to re-run.
|
|
12
|
+
*/
|
|
13
|
+
isLastAssistant?: boolean;
|
|
14
|
+
/** Re-send the last user prompt (wired by AssistantChatArea). */
|
|
15
|
+
onRetry?: () => void;
|
|
16
|
+
}
|
|
17
|
+
export declare const AssistantMessageItem: FC<Props>;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=AssistantMessageItem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssistantMessageItem.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantMessageItem.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAoBnD,OAAO,KAAK,EAGV,OAAO,EACR,MAAM,iBAAiB,CAAC;AAIzB,UAAU,KAAK;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAyCD,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,KAAK,CA0R1C,CAAC"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { useAuthToken as e } from "../../providers/shell/AuthTokenProvider.js";
|
|
2
|
+
import "../../../shared-providers-shell.js";
|
|
3
|
+
import { downloadAssistantArtifact as t } from "../api.js";
|
|
4
|
+
import { useAssistantTr as n } from "../i18n.js";
|
|
5
|
+
import { AssistantToolActivity as r, parseToolActivity as i } from "./AssistantToolActivity.js";
|
|
6
|
+
import { useAssistantSpeech as a } from "./AssistantSpeechProvider.js";
|
|
7
|
+
import { copyToClipboard as o } from "../clipboard.js";
|
|
8
|
+
import { AssistantMarkdownRenderer as s } from "./AssistantMarkdownRenderer.js";
|
|
9
|
+
import { AssistantMessageAttachments as c } from "./AssistantMessageAttachments.js";
|
|
10
|
+
import { AssistantPendingWriteCard as l } from "./AssistantPendingWriteCard.js";
|
|
11
|
+
import { AssistantSpeakButton as u } from "./AssistantSpeakButton.js";
|
|
12
|
+
import { SaveToFilesButton as d } from "../../../storage/SaveToFilesButton.js";
|
|
13
|
+
import "../../../storage/index.js";
|
|
14
|
+
import { useMemo as f, useState as p } from "react";
|
|
15
|
+
import { Check as m, Copy as h, RotateCcw as g, Sparkles as _ } from "lucide-react";
|
|
16
|
+
import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
|
|
17
|
+
//#region src/shared/assistant/ui/AssistantMessageItem.tsx
|
|
18
|
+
function x(e) {
|
|
19
|
+
return e.role === "assistant" ? e.metadata : void 0;
|
|
20
|
+
}
|
|
21
|
+
function S(e) {
|
|
22
|
+
return e?.artifacts ?? [];
|
|
23
|
+
}
|
|
24
|
+
function C(e) {
|
|
25
|
+
return window.atob(e);
|
|
26
|
+
}
|
|
27
|
+
function w(e, t, n) {
|
|
28
|
+
let r = C(e), i = new Uint8Array(r.length);
|
|
29
|
+
for (let e = 0; e < r.length; e += 1) i[e] = r.charCodeAt(e);
|
|
30
|
+
let a = new Blob([i], { type: n }), o = URL.createObjectURL(a), s = document.createElement("a");
|
|
31
|
+
s.href = o, s.download = t, document.body.appendChild(s), s.click(), document.body.removeChild(s), URL.revokeObjectURL(o);
|
|
32
|
+
}
|
|
33
|
+
var T = ({ message: C, isStreaming: T, isFailed: E, isLastAssistant: D, onRetry: O }) => {
|
|
34
|
+
let k = n(), { getAccessToken: A, getWorkspaceToken: j } = e(), M = a(), [N, P] = p(null), [F, I] = p(!1), L = C.role === "user", R = f(() => x(C), [C]), z = f(() => S(R), [R]), { steps: B, text: V } = f(() => L ? {
|
|
35
|
+
steps: [],
|
|
36
|
+
text: C.content
|
|
37
|
+
} : i(C.content), [L, C.content]), H = () => {
|
|
38
|
+
o(V || C.content).then((e) => {
|
|
39
|
+
e && (I(!0), setTimeout(() => I(!1), 2e3));
|
|
40
|
+
});
|
|
41
|
+
}, U = async (e) => {
|
|
42
|
+
if (!R?.sandboxId || !R.sessionId) return;
|
|
43
|
+
let n = new URLSearchParams(window.location.search).get("workspace") ?? "";
|
|
44
|
+
if (n) {
|
|
45
|
+
P(e.path);
|
|
46
|
+
try {
|
|
47
|
+
let r = await t(R.sandboxId, n, R.sessionId, e.path, {
|
|
48
|
+
accessToken: A(),
|
|
49
|
+
workspaceToken: j()
|
|
50
|
+
});
|
|
51
|
+
w(r.contentBase64, r.filename, r.mimeType);
|
|
52
|
+
} finally {
|
|
53
|
+
P(null);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}, W = new Date(C.timestamp).toLocaleTimeString([], {
|
|
57
|
+
hour: "2-digit",
|
|
58
|
+
minute: "2-digit"
|
|
59
|
+
});
|
|
60
|
+
if (C.role === "system") return /* @__PURE__ */ y("div", {
|
|
61
|
+
className: "flex justify-center px-2 py-1",
|
|
62
|
+
"data-testid": "assistant-message-system",
|
|
63
|
+
children: /* @__PURE__ */ y("p", {
|
|
64
|
+
className: "max-w-[90%] whitespace-pre-wrap break-words rounded-lg border border-border-subtle bg-bg-sunken/60 px-3 py-2 text-center text-xs leading-relaxed text-text-muted",
|
|
65
|
+
children: C.content
|
|
66
|
+
})
|
|
67
|
+
});
|
|
68
|
+
if (L) {
|
|
69
|
+
let e = C.metadata?.attachments ?? [];
|
|
70
|
+
return /* @__PURE__ */ y("div", {
|
|
71
|
+
className: "flex justify-end",
|
|
72
|
+
"data-testid": "assistant-message-user",
|
|
73
|
+
children: /* @__PURE__ */ b("div", {
|
|
74
|
+
className: "max-w-[85%]",
|
|
75
|
+
children: [
|
|
76
|
+
C.content && /* @__PURE__ */ y("div", {
|
|
77
|
+
className: "rounded-2xl rounded-br-md bg-action-primary-bg/12 px-3.5 py-2.5 text-[15px] leading-relaxed text-text-primary",
|
|
78
|
+
children: /* @__PURE__ */ y("p", {
|
|
79
|
+
className: "whitespace-pre-wrap",
|
|
80
|
+
children: C.content
|
|
81
|
+
})
|
|
82
|
+
}),
|
|
83
|
+
/* @__PURE__ */ y(c, { attachments: e }),
|
|
84
|
+
/* @__PURE__ */ y("div", {
|
|
85
|
+
className: "mt-1 pr-1 text-right text-[10px] text-text-muted",
|
|
86
|
+
children: W
|
|
87
|
+
})
|
|
88
|
+
]
|
|
89
|
+
})
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
return /* @__PURE__ */ b("div", {
|
|
93
|
+
className: "flex gap-2.5",
|
|
94
|
+
"data-testid": "assistant-message-assistant",
|
|
95
|
+
children: [/* @__PURE__ */ y("div", {
|
|
96
|
+
className: "mt-0.5 flex size-6 flex-shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-action-primary-bg/25 to-action-primary-bg/5 text-action-primary-bg",
|
|
97
|
+
children: /* @__PURE__ */ y(_, { className: "size-3.5" })
|
|
98
|
+
}), /* @__PURE__ */ b("div", {
|
|
99
|
+
className: "min-w-0 flex-1",
|
|
100
|
+
children: [
|
|
101
|
+
B.length > 0 && /* @__PURE__ */ y(r, { steps: B }),
|
|
102
|
+
R?.pendingWrite ? /* @__PURE__ */ y(l, { pendingWrite: R.pendingWrite }) : null,
|
|
103
|
+
V && /* @__PURE__ */ y("div", {
|
|
104
|
+
className: "text-[15px] leading-relaxed text-text-primary",
|
|
105
|
+
children: /* @__PURE__ */ y(s, { content: V })
|
|
106
|
+
}),
|
|
107
|
+
T && /* @__PURE__ */ y("span", {
|
|
108
|
+
"aria-hidden": "true",
|
|
109
|
+
className: "ml-0.5 inline-block h-4 w-1.5 rounded-sm bg-text-secondary align-middle motion-safe:animate-pulse"
|
|
110
|
+
}),
|
|
111
|
+
z.length > 0 && R?.sandboxId && R.sessionId && /* @__PURE__ */ b("div", {
|
|
112
|
+
className: "mt-3 space-y-2 border-t border-border-subtle pt-2",
|
|
113
|
+
children: [/* @__PURE__ */ y("p", {
|
|
114
|
+
className: "text-[10px] font-medium uppercase tracking-wide text-text-muted",
|
|
115
|
+
children: k("message.downloads", "Downloads")
|
|
116
|
+
}), /* @__PURE__ */ y("div", {
|
|
117
|
+
className: "flex flex-wrap gap-2",
|
|
118
|
+
children: z.map((e) => {
|
|
119
|
+
let t = `${e.name}${e.type === "directory" ? ".tar.gz" : ""}`;
|
|
120
|
+
return /* @__PURE__ */ y(d, {
|
|
121
|
+
label: t,
|
|
122
|
+
disabled: N === e.path,
|
|
123
|
+
testId: `assistant-artifact-${e.name}`,
|
|
124
|
+
source: {
|
|
125
|
+
kind: "sandbox-artifact",
|
|
126
|
+
sandboxId: R.sandboxId,
|
|
127
|
+
sessionId: R.sessionId,
|
|
128
|
+
path: e.path,
|
|
129
|
+
filename: t
|
|
130
|
+
},
|
|
131
|
+
defaultFolderPath: "/HealthyBowl/AI Assistant/Artifacts",
|
|
132
|
+
onDownload: () => U(e)
|
|
133
|
+
}, e.path);
|
|
134
|
+
})
|
|
135
|
+
})]
|
|
136
|
+
}),
|
|
137
|
+
!T && (V || E || D) && /* @__PURE__ */ b("div", {
|
|
138
|
+
className: "mt-1.5 flex items-center gap-1",
|
|
139
|
+
children: [
|
|
140
|
+
V && /* @__PURE__ */ y("button", {
|
|
141
|
+
type: "button",
|
|
142
|
+
onClick: H,
|
|
143
|
+
className: "flex items-center gap-1 rounded-md px-1.5 py-1 text-[11px] text-text-muted transition-colors hover:bg-bg-elevated hover:text-text-secondary",
|
|
144
|
+
"aria-label": k("message.copy", "Copy message"),
|
|
145
|
+
"data-testid": "assistant-message-copy",
|
|
146
|
+
children: F ? /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y(m, { className: "size-3 text-status-success-text" }), /* @__PURE__ */ y("span", { children: k("message.copied", "Copied") })] }) : /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y(h, { className: "size-3" }), /* @__PURE__ */ y("span", { children: k("message.copy", "Copy") })] })
|
|
147
|
+
}),
|
|
148
|
+
V && M.isSupported && (() => {
|
|
149
|
+
let e = M.blockedFor(C.id) ?? M.disabledReason, t = !!e && !!D, n = t ? `speak-reason-${C.id}` : void 0;
|
|
150
|
+
return /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y(u, {
|
|
151
|
+
isSpeaking: M.isSpeaking(C.id),
|
|
152
|
+
disabled: e !== null,
|
|
153
|
+
disabledReason: e,
|
|
154
|
+
describedById: n,
|
|
155
|
+
onClick: () => M.toggle(C.id, V, R?.lang)
|
|
156
|
+
}), t && /* @__PURE__ */ y("span", {
|
|
157
|
+
id: n,
|
|
158
|
+
className: "text-[11px] text-text-muted",
|
|
159
|
+
"data-testid": "assistant-speak-reason",
|
|
160
|
+
children: e
|
|
161
|
+
})] });
|
|
162
|
+
})(),
|
|
163
|
+
(E || D) && O && /* @__PURE__ */ b("button", {
|
|
164
|
+
type: "button",
|
|
165
|
+
onClick: O,
|
|
166
|
+
className: `flex items-center gap-1 rounded-md px-1.5 py-1 text-[11px] transition-colors hover:bg-bg-elevated ${E ? "text-status-error-text" : "text-text-muted hover:text-text-secondary"}`,
|
|
167
|
+
"aria-label": k("message.retry", "Retry"),
|
|
168
|
+
"data-testid": "assistant-message-retry",
|
|
169
|
+
children: [/* @__PURE__ */ y(g, { className: "size-3" }), /* @__PURE__ */ y("span", { children: k("message.retry", "Retry") })]
|
|
170
|
+
})
|
|
171
|
+
]
|
|
172
|
+
}),
|
|
173
|
+
/* @__PURE__ */ b("div", {
|
|
174
|
+
className: "mt-1 text-[10px] text-text-muted",
|
|
175
|
+
children: [W, C.tokens && /* @__PURE__ */ b("span", {
|
|
176
|
+
className: "ml-2",
|
|
177
|
+
children: [C.tokens.input + C.tokens.output, " tokens"]
|
|
178
|
+
})]
|
|
179
|
+
})
|
|
180
|
+
]
|
|
181
|
+
})]
|
|
182
|
+
});
|
|
183
|
+
};
|
|
184
|
+
//#endregion
|
|
185
|
+
export { T as AssistantMessageItem };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { Message } from '../conversation';
|
|
3
|
+
interface Props {
|
|
4
|
+
messages: Message[];
|
|
5
|
+
streamingMessageId: string | null;
|
|
6
|
+
/** The assistant message (if any) whose turn ended in an error. */
|
|
7
|
+
failedMessageId?: string | null;
|
|
8
|
+
/** Re-send the last user prompt — shown on the failed message. */
|
|
9
|
+
onRetry?: () => void;
|
|
10
|
+
}
|
|
11
|
+
export declare const AssistantMessageList: FC<Props>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=AssistantMessageList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssistantMessageList.d.ts","sourceRoot":"","sources":["../../../../src/shared/assistant/ui/AssistantMessageList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAEnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG/C,UAAU,KAAK;IACb,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,mEAAmE;IACnE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,KAAK,CA0E1C,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { useAssistantTr as e } from "../i18n.js";
|
|
2
|
+
import { AssistantMessageItem as t } from "./AssistantMessageItem.js";
|
|
3
|
+
import { useEffect as n, useRef as r } from "react";
|
|
4
|
+
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
5
|
+
//#region src/shared/assistant/ui/AssistantMessageList.tsx
|
|
6
|
+
var o = ({ messages: o, streamingMessageId: s, failedMessageId: c, onRetry: l }) => {
|
|
7
|
+
let u = e(), d = (() => {
|
|
8
|
+
for (let e = o.length - 1; e >= 0; --e) if (o[e].role === "assistant") return o[e].id;
|
|
9
|
+
return null;
|
|
10
|
+
})(), f = r(null), p = r(null);
|
|
11
|
+
return n(() => {
|
|
12
|
+
let e = p.current;
|
|
13
|
+
if (e && e.scrollHeight - e.scrollTop - e.clientHeight < 100) {
|
|
14
|
+
let e = typeof window < "u" && window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;
|
|
15
|
+
f.current?.scrollIntoView({ behavior: e ? "auto" : "smooth" });
|
|
16
|
+
}
|
|
17
|
+
}, [o, s]), n(() => {
|
|
18
|
+
f.current?.scrollIntoView({ behavior: "instant" });
|
|
19
|
+
}, []), /* @__PURE__ */ a("div", {
|
|
20
|
+
ref: p,
|
|
21
|
+
className: "flex-1 space-y-4 overflow-y-auto p-3",
|
|
22
|
+
role: "log",
|
|
23
|
+
"aria-live": "polite",
|
|
24
|
+
"aria-relevant": "additions",
|
|
25
|
+
"aria-busy": s !== null,
|
|
26
|
+
"aria-label": u("messageList.ariaLabel", "Conversation messages"),
|
|
27
|
+
children: [o.map((e) => /* @__PURE__ */ i(t, {
|
|
28
|
+
message: e,
|
|
29
|
+
isStreaming: e.id === s,
|
|
30
|
+
isFailed: e.id === c,
|
|
31
|
+
isLastAssistant: e.id === d,
|
|
32
|
+
onRetry: l
|
|
33
|
+
}, e.id)), /* @__PURE__ */ i("div", { ref: f })]
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
//#endregion
|
|
37
|
+
export { o as AssistantMessageList };
|
package/dist/shared-assistant.js
CHANGED
|
@@ -70,4 +70,6 @@ import { AssistantMoreMenu as Jr } from "./shared/assistant/ui/AssistantMoreMenu
|
|
|
70
70
|
import { AssistantHeader as Yr } from "./shared/assistant/ui/AssistantHeader.js";
|
|
71
71
|
import { AssistantConversationList as Xr } from "./shared/assistant/ui/AssistantConversationList.js";
|
|
72
72
|
import { AssistantEmptyState as Zr } from "./shared/assistant/ui/AssistantEmptyState.js";
|
|
73
|
-
|
|
73
|
+
import { AssistantMessageItem as Qr } from "./shared/assistant/ui/AssistantMessageItem.js";
|
|
74
|
+
import { AssistantMessageList as $r } from "./shared/assistant/ui/AssistantMessageList.js";
|
|
75
|
+
export { p as ASSISTANT_API_AUTH_STRATEGY, At as ASSISTANT_LANGUAGES, Mr as ASSISTANT_MODE_META, Cn as ATTACHMENT_ACCEPT, dr as ATTACHMENT_SOURCES, Ir as AUTO_VOICE, Or as AssistantAttachmentButton, kr as AssistantAttachmentChips, _r as AssistantAutoSpeakToggle, Xr as AssistantConversationList, Zr as AssistantEmptyState, Yr as AssistantHeader, Ht as AssistantI18nProvider, Ar as AssistantLanguageSelector, vr as AssistantMarkdownImage, xr as AssistantMarkdownRenderer, Cr as AssistantMessageAttachments, Qr as AssistantMessageItem, $r as AssistantMessageList, Nr as AssistantModeSelector, Jr as AssistantMoreMenu, wr as AssistantPendingWriteCard, Rt as AssistantProductProvider, Tr as AssistantReplyLanguageSelector, U as AssistantRuntimeManager, Er as AssistantSpeakButton, ir as AssistantSpeechProvider, Dr as AssistantSpokenTurnsNotice, nr as AssistantToolActivity, Fr as AssistantVoiceButton, Rr as AssistantVoiceOrb, Lr as AssistantVoiceSelector, zr as AssistantVoiceSessionButton, wn as AttachmentRejectedError, nn as BOILERPLATE_PAGE_SHARE, i as CHECK_AI_CREDITS, a as CREATE_SANDBOX, dt as DEFAULT_SPEAKABLE_LABELS, jt as DEFAULT_SPEECH_RATE, Re as ENDPOINT_GRACE_MS, o as EXTEND_SANDBOX_TTL, jr as FOLLOW_APP_LOCALE, s as GET_ACTIVE_SANDBOXES, c as GET_SANDBOX, me as HOSTED_TTS_MAX_CHARS, ue as HOSTED_TTS_TIER, de as HOSTED_VOICES, Xt as IDLE_PLAYBACK, ze as INITIAL_SESSION, Tn as INLINE_IMAGE_MAX_DIM, En as INLINE_IMAGE_QUALITY, Be as INTERRUPT_MAX_MS, Ve as INTERRUPT_MIN_MS, Dn as MAX_ATTACHMENTS, rn as MAX_BOILERPLATE_LINE_CHARS, an as MAX_EXTRACTED_CHARS, On as MAX_FILE_BYTES, kn as MAX_INLINE_CHARS_PER_FILE, An as MAX_INLINE_CHARS_TOTAL, en as MAX_INLINE_IMAGE_BASE64_BYTES, jn as MAX_INLINE_IMAGE_BASE64_CHARS, Mn as MAX_INLINE_IMAGE_PARTS, Nn as MAX_INLINE_TURN_BODY_BYTES, on as MAX_PDF_PAGES_SCANNED, tn as MAX_REQUEST_BODY_BYTES, ft as MAX_SPEAKABLE_CHARS, pt as MAX_SPOKEN_TABLE_ROWS, Pn as MAX_TURN_BODY_BYTES, sn as MIN_PAGE_TEXT_CHARS, cn as MIN_TEXT_PAGE_SHARE, Ct as POLL_FAST_MS, wt as POLL_FAST_UNTIL_MS, Tt as POLL_SLOW_MS, Et as POLL_STEADY_MS, Dt as POLL_STEADY_UNTIL_MS, xt as PREVIEW_LANGUAGES, Fn as PROMPT_ENVELOPE_RESERVE_BYTES, l as PROXY_SANDBOX_REQUEST, u as REPORT_AI_TOKEN_USAGE, mr as SANDBOX_READY_TTL_MS, He as SILENCE_SUBMIT_MS, he as SPEAKING_RATE_MAX, ge as SPEAKING_RATE_MAX_STREAMING, _e as SPEAKING_RATE_MAX_SYNC, ve as SPEAKING_RATE_MIN, mt as SPEECH_CHUNK_CHARS, ht as SPEECH_CHUNK_CJK_CHARS, Xe as SPEECH_LANG, Kt as SPOKEN_LABEL_LANGUAGES, d as STOP_ASSISTANT_SANDBOX, In as TURN_BODY_HEADROOM_BYTES, Ze as VOICE_LIST_TIMEOUT_MS, Br as VoiceCaption, Vr as VoiceConversationView, Ur as VoiceMiniController, Wr as VoiceStage, Gr as VoiceTranscriptDrawer, Hr as VoiceWaveform, f as WAIT_FOR_SANDBOX_RUNNING, Ut as assistantTranslationKey, Sr as assistantUrlTransform, fr as availableAttachmentSources, ye as base64ToBytes, le as browserSpeechEngine, C as buildAssistantSandboxEnv, Ln as buildAttachmentPromptBlock, ct as buildContinuedFromVoiceNote, W as buildProgress, Rn as buildPromptParts, w as buildPromptRequestBody, zn as buildPromptWithAttachments, be as buildRequest, t as buildSandboxContextInput, lt as buildVoiceTranscriptMarkdown, ne as chatTurns, T as checkAssistantAiCredits, gt as chunkForSpeech, Bn as classifyAttachment, xe as classifyHttpFailure, ln as columnLetterToIndex, De as configureSpeechEngine, _t as containsCjk, sr as copyToClipboard, Vn as countInlineImageCandidates, Hn as countInlinedImageParts, E as createAssistantSandbox, D as createAssistantSession, Te as createHostedTtsEngine, hr as createReadinessTracker, Ee as createRoutingSpeechEngine, ee as createSandboxAssistantTransport, Oe as createSpeechEngines, Se as decodeAudioResponse, un as decodeXmlEntities, Un as detectDocumentFormat, Jt as detectScriptLocale, pr as deviceHasCamera, dn as docxXmlToText, O as downloadAssistantArtifact, Kr as downloadFile, Wn as estimateTurnBodyBytes, n as executeSandboxGraphQL, qr as exportConversation, k as extendAssistantSandboxTTL, Mt as findAssistantLanguage, A as findExistingSandbox, It as findPendingWrite, fn as fitPdfPages, Gn as formatBytes, pn as formatPageRanges, cr as getActorId, j as getAssistantArtifacts, G as getAssistantMedia, M as getAssistantMessages, N as getAssistantSession, P as getAssistantStreamAccess, K as getAssistantText, Kn as getAttachmentSendBlocker, y as getCapability, qn as getExtension, m as getImageForMode, h as getImageTagForMode, lr as getOrganizationId, q as getRawMessageCreatedAt, g as getResourcesForMode, _ as getSandboxImageRegistry, Jn as getSendableAttachments, ke as getSpeechEngine, J as getToolProgress, ur as getWorkspaceId, re as groupBySession, ie as groupConsecutiveBySession, Yn as hasAttachmentWorkInFlight, fe as hostedLocaleFor, pe as hostedSupportsLanguage, yr as imageHostLabel, Ue as isCapturing, We as isEcho, mn as isMostlyImagePages, r as isQuotaExhaustedError, Y as isReapedSandboxConnectionError, gr as isRecentlyVerified, X as isRecoverable, br as isRemoteImageSrc, Zt as isSpeakingMessage, Qe as isSpeechBlocked, Ge as isSubmittable, tr as isTurnInFlight, b as isUnknownFieldError, ae as isVoiceTurn, hn as joinSheets, $e as languageDisplayName, Z as mapSessionToHistory, x as markSupported, S as markUnsupported, Q as mergeMessagesById, Me as micIsInterrupt, F as modeRequiresConfirmWrites, Pr as nextModeIndex, et as normalizeLangTag, Ke as orbMode, gn as pageMarker, Lt as parseConfirmationRefusal, Xn as parseDataUrl, _n as parseSharedStrings, rr as parseToolActivity, vn as parseWorkbookSheets, yn as pdfTextItemsToPage, qe as planReplyConsumption, Ot as pollDelayMs, tt as primaryLanguageSubtag, Ae as readSpeechEngineConfig, Pt as replyFollowsInput, I as reportAssistantAiTokenUsage, Qt as requiresCancel, je as resetSpeechEngine, Nt as resolveAssistantLanguage, Ft as resolveLanguagePair, zt as resolveModeConfig, v as resolveSandboxAssistantMode, Yt as resolveSpeechLocale, $ as sanitize, L as selectExistingAssistantSandbox, nt as selectVoiceForLocale, R as sendAssistantPromptAsync, z as sendHeartbeat, bn as sheetXmlToRows, Ce as shouldDisableEngine, Ne as showsAssistantCaption, Pe as showsUserCaption, vt as speakableEmail, rt as speechGate, qt as speechLabelsFor, it as speechLangForLocale, $t as speechPlaybackReducer, we as splitForVendor, yt as splitTableRow, Je as spokenSoFar, B as stopReapedAssistantSandbox, xn as summarisePageText, kt as toCaptionText, Zn as toMessageAttachment, bt as toSpeakableText, Qn as truncateForInline, Sn as truncatePagesForInline, Wt as useAssistantI18nNamespace, Bt as useAssistantProduct, Vt as useAssistantProductOrNull, ar as useAssistantSpeech, er as useAssistantStore, Gt as useAssistantTr, te as useSandboxAssistantTransport, e as useVoiceInput, or as useVoiceSession, $n as validateFile, at as voiceAvailability, oe as voiceMarker, St as voicePreviewText, ot as voiceQualityRank, se as voiceSessionIdOf, Ye as voiceSessionReducer, Fe as voiceStageState, ut as voiceTranscriptFilename, ce as voiceTurnsOnly, st as voicesForLocale, V as waitForAssistantServiceReady, H as waitForSandboxRunning, Ie as waveformIsActive, Le as waveformIsSettled };
|