@dsh-enhanced/owner-console 0.0.0-stage → 0.1.67

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 (56) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +320 -2
  3. package/cordis.patch.yml +3 -0
  4. package/lib/art.d.ts +7 -0
  5. package/lib/art.d.ts.map +1 -0
  6. package/lib/art.js +22 -0
  7. package/lib/art.js.map +1 -0
  8. package/lib/artwork.d.ts +15 -0
  9. package/lib/artwork.d.ts.map +1 -0
  10. package/lib/artwork.js +15 -0
  11. package/lib/artwork.js.map +1 -0
  12. package/lib/build-approvals.d.ts +11 -0
  13. package/lib/build-approvals.d.ts.map +1 -0
  14. package/lib/build-approvals.js +64 -0
  15. package/lib/build-approvals.js.map +1 -0
  16. package/lib/chat-view.d.ts +50 -0
  17. package/lib/chat-view.d.ts.map +1 -0
  18. package/lib/chat-view.js +545 -0
  19. package/lib/chat-view.js.map +1 -0
  20. package/lib/chat.d.ts +345 -0
  21. package/lib/chat.d.ts.map +1 -0
  22. package/lib/chat.js +418 -0
  23. package/lib/chat.js.map +1 -0
  24. package/lib/client.d.ts +131 -0
  25. package/lib/client.d.ts.map +1 -0
  26. package/lib/client.js +17214 -0
  27. package/lib/client.js.map +1 -0
  28. package/lib/index.d.ts +16 -0
  29. package/lib/index.d.ts.map +1 -0
  30. package/lib/index.js +18 -0
  31. package/lib/index.js.map +1 -0
  32. package/lib/service.d.ts +78 -0
  33. package/lib/service.d.ts.map +1 -0
  34. package/lib/service.js +683 -0
  35. package/lib/service.js.map +1 -0
  36. package/lib/settings.d.ts +136 -0
  37. package/lib/settings.d.ts.map +1 -0
  38. package/lib/settings.js +31 -0
  39. package/lib/settings.js.map +1 -0
  40. package/lib/state.d.ts +35 -0
  41. package/lib/state.d.ts.map +1 -0
  42. package/lib/state.js +84 -0
  43. package/lib/state.js.map +1 -0
  44. package/lib/typert.d.ts +1307 -0
  45. package/lib/typert.d.ts.map +1 -0
  46. package/lib/typert.js +271 -0
  47. package/lib/typert.js.map +1 -0
  48. package/lib/ui.d.ts +142 -0
  49. package/lib/ui.d.ts.map +1 -0
  50. package/lib/ui.js +87 -0
  51. package/lib/ui.js.map +1 -0
  52. package/lib/version.d.ts +2 -0
  53. package/lib/version.d.ts.map +1 -0
  54. package/lib/version.js +2 -0
  55. package/lib/version.js.map +1 -0
  56. package/package.json +99 -3
@@ -0,0 +1,545 @@
1
+ /**
2
+ * 文鳐's dedicated chat window. It is a real native Session surface, not a second agent:
3
+ * messages come from the retained Session's durable event window, sending goes through
4
+ * `SessionFace.prompt`, attachments through the staged `fileUpload` service, permission
5
+ * changes through the Host `/permission` command, and stop through `SessionFace.cancel`.
6
+ * A client bundle may only import `react` at runtime, so all Host services arrive through
7
+ * the injected {@link ChatRuntime}.
8
+ */
9
+ import { useEffect, useRef, useState } from 'react';
10
+ import { jsx } from 'react/jsx-runtime';
11
+ import { QUIET_PHRASE } from './art.js';
12
+ import { WENYAO_BACKDROP_DATA_URI, WENYAO_BACKDROP_HEIGHT, WENYAO_BACKDROP_WIDTH, WENYAO_ICON_DATA_URI } from './artwork.js';
13
+ import { boundedText, chatMessages, openDedicatedChatSession, permissionLabel, permissionOptions, permissionValue, remoteFailureSummary, requiresPermissionConfirmation, sendChatMessage, streamingAssistantText, } from './chat.js';
14
+ import { accent, actionsStyle, backdropImageStyle, backdropStyle, border, borderStrong, buttonStyle, caption, danger, el, hairline, hintStyle, idle, ink, muted, pill, placeholder, primaryButtonStyle, subheadStyle, sunken, surface, tint, } from './ui.js';
15
+ const EMPTY_SESSION = {};
16
+ const EMPTY_CONVERSATION = { activeTargets: new Set() };
17
+ const EMPTY_SESSION_LIST = { byId: {} };
18
+ const readEmptySession = (selector) => selector(EMPTY_SESSION);
19
+ const readEmptyConversation = (selector) => selector(EMPTY_CONVERSATION);
20
+ const readEmptySessionList = (selector) => selector(EMPTY_SESSION_LIST);
21
+ const chatRootStyle = { position: 'relative', isolation: 'isolate', height: '100%', minHeight: 0, display: 'flex',
22
+ flexDirection: 'column', overflow: 'hidden', color: ink, fontSize: 13, lineHeight: 1.5 };
23
+ const chatColumnStyle = { position: 'relative', zIndex: 1, height: '100%', minHeight: 0, width: '100%', maxWidth: 840,
24
+ margin: '0 auto', padding: '16px 18px', boxSizing: 'border-box', display: 'flex', flexDirection: 'column', gap: 10 };
25
+ const headerStyle = { display: 'flex', alignItems: 'center', gap: 12, flexWrap: 'wrap', padding: '12px 14px',
26
+ border: `1px solid ${border}`, borderRadius: 14, background: surface, boxShadow: '0 1px 2px rgba(0, 0, 0, 0.04)' };
27
+ const logStyle = { flex: '1 1 auto', minHeight: 96, overflowY: 'auto', overscrollBehavior: 'contain', display: 'grid',
28
+ alignContent: 'start', gap: 10, padding: '12px 12px 14px', border: `1px solid ${border}`, borderRadius: 12,
29
+ background: surface, boxShadow: '0 1px 2px rgba(0, 0, 0, 0.04)' };
30
+ const composerStyle = { display: 'grid', gap: 8, padding: '12px 14px', border: `1px solid ${border}`, borderRadius: 14,
31
+ background: surface, boxShadow: '0 1px 2px rgba(0, 0, 0, 0.04)' };
32
+ const bubbleStyle = { maxWidth: '86%', padding: '9px 12px', borderRadius: 12, fontSize: 13, lineHeight: 1.55,
33
+ whiteSpace: 'pre-wrap', overflowWrap: 'anywhere' };
34
+ const assistantBubbleStyle = { ...bubbleStyle, justifySelf: 'start', background: sunken, border: `1px solid ${border}`, color: ink };
35
+ const userBubbleStyle = { ...bubbleStyle, justifySelf: 'end', background: tint(accent, 12), border: `1px solid ${tint(accent, 28)}`, color: ink };
36
+ const toolRowStyle = { justifySelf: 'start', display: 'inline-flex', alignItems: 'center', gap: 8, padding: '2px 8px',
37
+ borderRadius: 999, border: `1px solid ${hairline}`, color: caption, fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace', fontSize: 11 };
38
+ const errorRowStyle = { padding: '8px 12px', borderRadius: 10, fontSize: 12, color: ink, background: tint(danger, 10),
39
+ border: `1px solid ${tint(danger, 32)}` };
40
+ const smallButtonStyle = { ...buttonStyle, padding: '4px 10px', fontSize: 12 };
41
+ const ghostButtonStyle = { ...buttonStyle, border: '1px solid transparent', color: muted };
42
+ const gearButtonStyle = { ...buttonStyle, padding: '5px 10px', fontSize: 16, lineHeight: 1.15 };
43
+ const noticeStyle = (tone) => ({ ...(tone === 'error' ? errorRowStyle : { padding: '8px 12px', borderRadius: 10,
44
+ fontSize: 12, color: ink, background: tint(accent, 10), border: `1px solid ${tint(accent, 30)}` }) });
45
+ const TOOL_STATUS_LABELS = {
46
+ running: '运行中', ok: '完成', error: '失败',
47
+ };
48
+ /** The factory-local view selection: the native Chat view, exactly as the shipped Conversation uses it. */
49
+ function ChatConversationView({ renderSlot }) {
50
+ return renderSlot?.('conversation.session', { view: 'chat' }) ?? null;
51
+ }
52
+ /**
53
+ * Child slot body rendered under the injected SessionProvider. It computes the native
54
+ * Conversation phase from the Session's own snapshots and renders the shipped
55
+ * `conversation.content` factory with `hero:false` so no workspace picker or catalog appears.
56
+ */
57
+ export function OwnerConsoleConversation({ sessionId, renderFactorySlot, useSession, useConversation, useSessions }) {
58
+ // Hooks are called unconditionally so the fallback functions cannot change hook order.
59
+ const session = (useSession ?? readEmptySession)(value => value);
60
+ const conversation = (useConversation ?? readEmptyConversation)(value => value);
61
+ const summaryBlank = (useSessions ?? readEmptySessionList)(state => state.byId[sessionId ?? '']?.blank);
62
+ if (renderFactorySlot === undefined)
63
+ return placeholder('原生对话组件未加载,可用右上角「原生会话」进入完整会话。');
64
+ const active = conversation.activeTargets.size > 0
65
+ || (session.blank !== true && session.awaitingFirstTurn !== true)
66
+ || session.running === true;
67
+ const shellPhase = active ? 'active' : session.promptAttempted === true ? 'engaging' : 'blank';
68
+ const settling = shellPhase === 'blank' && session.openState === 'loading' && summaryBlank !== true;
69
+ const hero = shellPhase === 'blank' && (session.openState === 'open' || summaryBlank === true);
70
+ const phase = settling ? 'settling' : hero ? 'hero' : 'active';
71
+ // The hero layout is deliberately suppressed here; the sticky active composer layout is what
72
+ // remains usable without the workspace picker, so never hand the native surface a hero phase.
73
+ return renderFactorySlot('conversation.content', { variant: 'embedded', phase: hero ? 'active' : phase, hero: false }, {
74
+ slots: { views: ChatConversationView },
75
+ fallback: placeholder('原生对话组件未加载,可用右上角「原生会话」进入完整会话。'),
76
+ });
77
+ }
78
+ /** Round 02 水墨化鹏 fish-and-peng mark used by the chat header. */
79
+ function ChatMark() {
80
+ return el('img', { src: WENYAO_ICON_DATA_URI, alt: '', 'aria-hidden': 'true', draggable: false,
81
+ 'data-owner-console-art': 'chat-mark', width: 34, height: 34,
82
+ style: { display: 'block', width: 34, height: 34, borderRadius: '50%', objectFit: 'cover', flex: 'none' } });
83
+ }
84
+ /** One compact transcript row; every visual state also carries a text label. */
85
+ function ChatMessageRow({ message }) {
86
+ if (message.kind === 'tool') {
87
+ return el('div', { 'data-chat-message-kind': 'tool', style: toolRowStyle, role: 'status',
88
+ 'aria-label': `工具 ${message.name}:${TOOL_STATUS_LABELS[message.status]}` }, el('span', {}, message.name), el('span', { 'aria-hidden': true }, '·'), el('span', {}, TOOL_STATUS_LABELS[message.status]));
89
+ }
90
+ if (message.kind === 'error') {
91
+ return el('div', { 'data-chat-message-kind': 'error', role: 'alert', style: errorRowStyle }, message.text);
92
+ }
93
+ return el('div', { 'data-chat-message-kind': message.kind, style: message.kind === 'user' ? userBubbleStyle : assistantBubbleStyle }, el('span', { style: { display: 'block', fontSize: 11, color: caption, marginBottom: 3 } }, message.kind === 'user' ? '你' : '文鳐'), message.text);
94
+ }
95
+ /** Session lifecycle as a text pill; absence means the chat is still preparing. */
96
+ function sessionPill(snapshot, ready) {
97
+ if (!ready)
98
+ return pill('准备中', 'neutral');
99
+ if (snapshot.openState === 'error')
100
+ return pill('会话不可用', 'error');
101
+ if (snapshot.removed === true)
102
+ return pill('会话已移除', 'error');
103
+ if (snapshot.running === true)
104
+ return pill('回复中', 'warn');
105
+ if (snapshot.openState === 'loading' || snapshot.openState === 'cold')
106
+ return pill('连接中', 'neutral');
107
+ return pill('就绪', 'ok');
108
+ }
109
+ /** Permission value pill: full access is visibly risky even though text carries the meaning. */
110
+ function permissionTone(value) {
111
+ if (value === undefined)
112
+ return 'neutral';
113
+ if (value === 'danger-full-access')
114
+ return 'error';
115
+ if (value === 'auto')
116
+ return 'warn';
117
+ return 'ok';
118
+ }
119
+ /** Current permission plus the catalog selector; every write goes through the native command. */
120
+ function PermissionBar({ session, permission, catalog, switching, pending, notice, request, confirm, cancel }) {
121
+ // Keep the selector mounted while a switch is in flight (disabled), so a rerender cannot
122
+ // replace the user's focused control with the notice line.
123
+ const selectable = session !== undefined && permission !== undefined && catalog.phase === 'ok';
124
+ const options = catalog.phase === 'ok' ? permissionOptions(catalog.catalog, permission) : [];
125
+ return el('div', { 'data-owner-console-permissions': '', style: { display: 'flex', alignItems: 'center', gap: 8,
126
+ flexWrap: 'wrap', padding: '0 2px', minHeight: 26 } }, el('span', { style: subheadStyle }, '权限'), permission === undefined ? pill('权限不可用', 'neutral') : pill(permissionLabel(permission, catalog.phase === 'ok' ? catalog.catalog : undefined), permissionTone(permission)), selectable
127
+ ? el('select', { 'aria-label': '切换权限预设', title: '切换通过 Host 的 /permission 命令完成,权限策略仍然生效',
128
+ value: permission, disabled: switching, onChange: (event) => request(event.target.value),
129
+ style: { padding: '4px 8px', borderRadius: 8, border: `1px solid ${borderStrong}`, background: 'transparent',
130
+ color: 'inherit', fontSize: 12, maxWidth: 260 } }, ...options.map(option => el('option', { key: option.value, value: option.value }, `${option.name}(${option.value})`)))
131
+ : catalog.phase === 'loading'
132
+ ? el('span', { style: hintStyle }, '正在读取权限目录…')
133
+ : catalog.phase === 'failed'
134
+ ? el('span', { style: hintStyle }, `权限目录读取失败:${boundedText(catalog.error, 120)};只能显示当前值。`)
135
+ : permission === undefined
136
+ ? el('span', { style: hintStyle }, '未加载权限服务;这里不会绕过 Host 策略。')
137
+ : null, catalog.phase === 'ok' && catalog.catalog.defaultPreset !== undefined
138
+ ? el('span', { style: { fontSize: 11, color: caption } }, `新会话默认:${permissionLabel(catalog.catalog.defaultPreset, catalog.catalog)}`)
139
+ : null, pending === undefined ? null : el('div', { role: 'alertdialog', 'aria-label': '确认切换权限',
140
+ style: { display: 'flex', alignItems: 'center', gap: 8, flexWrap: 'wrap', padding: '4px 10px', borderRadius: 10,
141
+ fontSize: 12, background: tint(danger, 10), border: `1px solid ${tint(danger, 32)}` } }, `切换到「${permissionLabel(pending, catalog.phase === 'ok' ? catalog.catalog : undefined)}」会扩大文鳐的权限,确认?`, el('button', { type: 'button', style: smallButtonStyle, onClick: () => confirm(pending) }, '确认切换'), el('button', { type: 'button', style: smallButtonStyle, onClick: cancel }, '取消')), notice === '' ? null : el('span', { role: 'status', style: { fontSize: 12, color: muted } }, notice));
142
+ }
143
+ /** Composer: real text, staged attachments, browser speech, stop, and one send path. */
144
+ function Composer(props) {
145
+ const input = useRef(null);
146
+ const blocked = props.disabled || props.sending || (props.draft.trim() === '' && props.files.length === 0);
147
+ return el('form', { 'data-owner-console-composer': '', style: composerStyle, 'aria-label': '消息输入',
148
+ onSubmit: props.onSubmit }, props.files.length === 0 ? null : el('ul', { 'aria-label': '待发送附件', style: { ...actionsStyle, listStyle: 'none', margin: 0, padding: 0 } }, ...props.files.map((file, index) => {
149
+ const name = file.name ?? `附件 ${index + 1}`;
150
+ return el('li', { key: `${name}:${index}`, style: { display: 'inline-flex', alignItems: 'center', gap: 6, padding: '3px 8px',
151
+ borderRadius: 999, border: `1px solid ${border}`, fontSize: 12, background: sunken } }, el('span', { style: { maxWidth: 220, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' } }, name), el('button', { type: 'button', style: { ...ghostButtonStyle, padding: '0 2px', fontSize: 14 },
152
+ 'aria-label': `移除附件 ${name}`, onClick: () => props.onRemoveFile(index) }, '×'));
153
+ })), el('textarea', { value: props.draft, rows: 3, 'aria-label': '给文鳐的消息', placeholder: '对文鳐说点什么…(Enter 发送,Shift+Enter 换行)',
154
+ disabled: props.disabled || props.sending, onChange: (event) => props.onDraft(event.target.value),
155
+ onKeyDown: props.onKeyDown,
156
+ style: { ...buttonlessInputStyle, resize: 'vertical', minHeight: 72 } }), el('div', { style: { display: 'flex', alignItems: 'center', gap: 8, flexWrap: 'wrap' } }, el('input', { ref: input, type: 'file', multiple: true, 'aria-label': '选择附件', tabIndex: -1,
157
+ style: { display: 'none' }, onChange: (event) => {
158
+ props.onFiles(event.target.files ?? null);
159
+ if (event.target.value !== undefined)
160
+ event.target.value = '';
161
+ } }), el('button', { type: 'button', style: smallButtonStyle, onClick: () => input.current?.click(),
162
+ 'aria-label': '添加附件', title: '附件会先上传到本会话,再随消息发送' }, '附件'), el('button', { type: 'button', style: props.voiceAvailable ? smallButtonStyle : idle(smallButtonStyle, true),
163
+ 'aria-label': props.voiceAvailable ? (props.listening ? '停止语音对话' : '语音对话') : '语音对话(当前浏览器不支持)',
164
+ 'aria-pressed': props.listening,
165
+ title: props.voiceAvailable
166
+ ? '语音输入由浏览器 SpeechRecognition 提供,音频可能发送给浏览器厂商的语音服务,不属于 DSH 权限模型或审计范围'
167
+ : '当前浏览器未提供 SpeechRecognition,语音输入不可用;该功能由浏览器提供,不是 DSH 模型功能',
168
+ disabled: !props.voiceAvailable || props.sending, onClick: props.onVoice }, props.listening ? '停止语音' : '语音对话'), el('button', { type: 'button', style: props.speakAvailable && props.speakReady ? smallButtonStyle : idle(smallButtonStyle, true),
169
+ 'aria-label': '朗读最近一条回复', title: props.speakAvailable
170
+ ? '用浏览器 SpeechSynthesis 朗读最近一条回复;远端语音可能把文本发送给浏览器厂商,不是 DSH 模型'
171
+ : '当前浏览器未提供 SpeechSynthesis,朗读不可用',
172
+ disabled: !props.speakAvailable || !props.speakReady || props.sending, onClick: props.onSpeak }, '朗读'), el('span', { 'aria-hidden': true, style: { flex: '1 1 20px' } }), props.running ? el('button', { type: 'button', style: smallButtonStyle, disabled: props.cancelling, onClick: props.onStop }, props.cancelling ? '停止中…' : '停止') : null, el('button', { type: 'submit', style: idle(primaryButtonStyle, blocked), disabled: blocked,
173
+ 'aria-label': props.sending ? '正在发送消息' : '发送消息' }, props.sending ? '发送中…' : '发送')), el('p', { style: { ...hintStyle, fontSize: 11 } }, '消息经由 DSH 会话发送;附件先上传到本会话。语音输入与朗读由浏览器提供,音频或文本可能发送给浏览器厂商的语音服务,不是 DSH 模型功能。'));
174
+ }
175
+ /** One-line textarea style: same input shell without the single-line padding assumptions. */
176
+ const buttonlessInputStyle = { padding: '8px 10px', borderRadius: 10, border: `1px solid ${borderStrong}`,
177
+ background: 'transparent', color: 'inherit', fontSize: 13, lineHeight: 1.5, width: '100%', minWidth: 0,
178
+ boxSizing: 'border-box' };
179
+ /** The sidebar's 文鳐 panel: a native-Session chat window with a settings gear. */
180
+ export function OwnerConsoleChat({ runtime, onOpenSettings, renderer }) {
181
+ const [state, setState] = useState({ phase: 'preparing' });
182
+ const [attempt, setAttempt] = useState(0);
183
+ const [snapshot, setSnapshot] = useState({});
184
+ const [window, setWindow] = useState({});
185
+ const [permission, setPermission] = useState();
186
+ const [catalog, setCatalog] = useState({ phase: 'loading' });
187
+ const [pendingPermission, setPendingPermission] = useState();
188
+ const [switching, setSwitching] = useState(false);
189
+ const [permissionNotice, setPermissionNotice] = useState('');
190
+ const [draft, setDraft] = useState('');
191
+ const [files, setFiles] = useState([]);
192
+ const [sending, setSending] = useState(false);
193
+ const [cancelling, setCancelling] = useState(false);
194
+ const [notice, setNotice] = useState();
195
+ const [listening, setListening] = useState(false);
196
+ const recognition = useRef(null);
197
+ const log = useRef(null);
198
+ const stick = useRef(true);
199
+ const alive = useRef(true);
200
+ useEffect(() => () => { alive.current = false; }, []);
201
+ // Acquire one retained native Session; release it exactly when the chat surface unmounts.
202
+ useEffect(() => {
203
+ alive.current = true;
204
+ let disposed = false;
205
+ let reference;
206
+ const controller = new AbortController();
207
+ const sessions = runtime.sessions();
208
+ if (sessions === undefined) {
209
+ setState({ phase: 'unavailable' });
210
+ return () => { disposed = true; };
211
+ }
212
+ setState({ phase: 'preparing' });
213
+ void (async () => {
214
+ try {
215
+ reference = await openDedicatedChatSession(sessions, runtime.storage(), undefined, runtime.createSession, controller.signal);
216
+ if (disposed) {
217
+ reference.release();
218
+ return;
219
+ }
220
+ setState({ phase: 'ready', reference, binding: reference.binding });
221
+ }
222
+ catch (error) {
223
+ if (disposed)
224
+ return;
225
+ setState({ phase: 'failed', error: error instanceof Error ? boundedText(error.message) : '无法打开对话。' });
226
+ }
227
+ })();
228
+ return () => {
229
+ disposed = true;
230
+ // Cancelling the acquisition stops the Host waiting on a hung open, so this panel
231
+ // cannot leak its retention after unmount.
232
+ controller.abort();
233
+ reference?.release();
234
+ };
235
+ }, [runtime, attempt]);
236
+ const binding = state.phase === 'ready' ? state.binding : undefined;
237
+ const reference = state.phase === 'ready' ? state.reference : undefined;
238
+ const nativeSurface = reference !== undefined && renderer?.SessionProvider !== undefined && renderer.renderSlot !== undefined
239
+ ? { reference, provider: renderer.SessionProvider, renderSlot: renderer.renderSlot }
240
+ : undefined;
241
+ const native = nativeSurface !== undefined;
242
+ // Session lifecycle and durable transcript subscriptions.
243
+ useEffect(() => {
244
+ if (binding === undefined) {
245
+ setSnapshot({});
246
+ setWindow({});
247
+ return;
248
+ }
249
+ const syncSession = () => setSnapshot(binding.session.getSnapshot());
250
+ const syncEvents = () => setWindow(binding.eventSource.getSnapshot());
251
+ syncSession();
252
+ syncEvents();
253
+ const stopSession = binding.session.subscribe(syncSession);
254
+ const stopEvents = binding.eventSource.subscribe(syncEvents);
255
+ return () => { stopSession(); stopEvents(); };
256
+ }, [binding]);
257
+ // Current permission comes from the native Session projection, never from a local guess.
258
+ useEffect(() => {
259
+ if (binding === undefined) {
260
+ setPermission(undefined);
261
+ return;
262
+ }
263
+ const face = binding.session.projections.faceOf('permissions');
264
+ const sync = () => setPermission(permissionValue(face.getSnapshot()));
265
+ sync();
266
+ return face.subscribe(sync);
267
+ }, [binding]);
268
+ // Selectable presets come from the Host's process catalog Remote.
269
+ useEffect(() => {
270
+ let disposed = false;
271
+ let pending;
272
+ try {
273
+ pending = runtime.permissionCatalog();
274
+ }
275
+ catch (error) {
276
+ setCatalog({ phase: 'failed', error: error instanceof Error ? error.message : '权限目录读取失败' });
277
+ return () => { disposed = true; };
278
+ }
279
+ if (pending === undefined) {
280
+ setCatalog({ phase: 'absent' });
281
+ return () => { disposed = true; };
282
+ }
283
+ setCatalog({ phase: 'loading' });
284
+ void pending.then(result => {
285
+ if (disposed)
286
+ return;
287
+ if (result.ok)
288
+ setCatalog({ phase: 'ok', catalog: result.value });
289
+ else
290
+ setCatalog({ phase: 'failed', error: remoteFailureSummary(result.error) });
291
+ }, (error) => {
292
+ if (!disposed)
293
+ setCatalog({ phase: 'failed', error: error instanceof Error ? error.message : '权限目录读取失败' });
294
+ });
295
+ return () => { disposed = true; };
296
+ }, [runtime]);
297
+ const messages = chatMessages(window.entries);
298
+ const streaming = streamingAssistantText(window.entries);
299
+ const lastAssistant = [...messages].reverse().find(message => message.kind === 'assistant');
300
+ const voiceAvailable = runtime.voiceAvailable();
301
+ const speakAvailable = runtime.speakAvailable();
302
+ // The native composer already owns the canonical permission chip. Show our own bar only when
303
+ // that native seat is unavailable (no renderer surface, or no permission-preset remote).
304
+ const showPermissionBar = !native || catalog.phase === 'absent' || catalog.phase === 'failed';
305
+ // Follow new output only while the reader is already at the bottom.
306
+ useEffect(() => {
307
+ const node = log.current;
308
+ if (node !== null && stick.current)
309
+ node.scrollTop = node.scrollHeight;
310
+ }, [messages, streaming, binding]);
311
+ useEffect(() => () => {
312
+ const active = recognition.current;
313
+ recognition.current = null;
314
+ try {
315
+ active?.stop();
316
+ }
317
+ catch { /* a browser may already have ended it */ }
318
+ }, []);
319
+ const submit = () => {
320
+ if (binding === undefined || sending)
321
+ return;
322
+ if (draft.trim() === '' && files.length === 0)
323
+ return;
324
+ setSending(true);
325
+ setNotice(undefined);
326
+ void sendChatMessage({ sessionId: binding.sessionId, session: binding.session, uploads: runtime.fileUploads(),
327
+ text: draft, files }).then(outcome => {
328
+ if (!alive.current)
329
+ return;
330
+ setSending(false);
331
+ if (!outcome.ok) {
332
+ setNotice({ tone: 'error', text: outcome.error });
333
+ return;
334
+ }
335
+ setDraft('');
336
+ setFiles([]);
337
+ }, (error) => {
338
+ if (!alive.current)
339
+ return;
340
+ setSending(false);
341
+ setNotice({ tone: 'error', text: error instanceof Error ? error.message : '消息未发送,稍后重试。' });
342
+ });
343
+ };
344
+ const stop = () => {
345
+ if (binding === undefined || cancelling)
346
+ return;
347
+ setCancelling(true);
348
+ setNotice(undefined);
349
+ void binding.session.cancel().then(result => {
350
+ if (!alive.current)
351
+ return;
352
+ setCancelling(false);
353
+ if (!result.ok)
354
+ setNotice({ tone: 'error', text: `停止失败(${remoteFailureSummary(result.error)})` });
355
+ }, (error) => {
356
+ if (!alive.current)
357
+ return;
358
+ setCancelling(false);
359
+ setNotice({ tone: 'error', text: error instanceof Error ? error.message : '停止失败。' });
360
+ });
361
+ };
362
+ const applyPermission = (value) => {
363
+ if (binding === undefined || switching)
364
+ return;
365
+ setPendingPermission(undefined);
366
+ setSwitching(true);
367
+ setPermissionNotice('');
368
+ void binding.session.command(`/permission ${value}`).then(result => {
369
+ if (!alive.current)
370
+ return;
371
+ setSwitching(false);
372
+ if (!result.ok) {
373
+ setPermissionNotice(`权限切换被拒绝(${remoteFailureSummary(result.error)})`);
374
+ return;
375
+ }
376
+ if (result.value.matched === false) {
377
+ setPermissionNotice('Host 没有提供 /permission 命令,权限未改变。');
378
+ return;
379
+ }
380
+ setPermissionNotice(`已请求切换到「${permissionLabel(value, catalog.phase === 'ok' ? catalog.catalog : undefined)}」;以会话权限投影为准。`);
381
+ }, (error) => {
382
+ if (!alive.current)
383
+ return;
384
+ setSwitching(false);
385
+ setPermissionNotice(error instanceof Error ? boundedText(error.message) : '权限切换失败。');
386
+ });
387
+ };
388
+ const requestPermission = (value) => {
389
+ if (value === permission)
390
+ return;
391
+ if (requiresPermissionConfirmation(value)) {
392
+ setPendingPermission(value);
393
+ return;
394
+ }
395
+ applyPermission(value);
396
+ };
397
+ const toggleVoice = () => {
398
+ if (listening) {
399
+ const active = recognition.current;
400
+ recognition.current = null;
401
+ setListening(false);
402
+ try {
403
+ active?.stop();
404
+ }
405
+ catch { /* already ended */ }
406
+ return;
407
+ }
408
+ const created = runtime.createRecognition();
409
+ if (created === undefined) {
410
+ setNotice({ tone: 'error', text: '当前浏览器未提供 SpeechRecognition,语音输入不可用;语音识别由浏览器提供,不是 DSH 模型功能。' });
411
+ return;
412
+ }
413
+ created.lang = runtime.recognitionLang();
414
+ created.interimResults = true;
415
+ created.continuous = false;
416
+ created.onresult = event => {
417
+ // A late result from a stopped/replaced recognizer (or after unmount) must not touch the draft.
418
+ if (!alive.current || recognition.current !== created)
419
+ return;
420
+ let finalText = '';
421
+ for (let index = event.resultIndex; index < event.results.length; index += 1) {
422
+ const result = event.results[index];
423
+ if (result?.isFinal === true)
424
+ finalText += result[0]?.transcript ?? '';
425
+ }
426
+ if (finalText === '')
427
+ return;
428
+ if (native && reference !== undefined) {
429
+ const inserted = runtime.insertDraft?.(reference, finalText) ?? false;
430
+ if (!inserted) {
431
+ setNotice({ tone: 'error', text: '当前界面未提供原生草稿写入接口(conversation.input 未加载),语音文字未写入。' });
432
+ }
433
+ return;
434
+ }
435
+ setDraft(previous => previous === '' ? finalText : `${previous} ${finalText}`);
436
+ };
437
+ created.onerror = event => {
438
+ if (!alive.current || recognition.current !== created)
439
+ return;
440
+ recognition.current = null;
441
+ setListening(false);
442
+ setNotice({ tone: 'error', text: `语音识别失败:${event.error ?? '未知错误'}。语音识别由浏览器提供,不是 DSH 模型功能。` });
443
+ };
444
+ created.onend = () => {
445
+ // A stopped/replaced recognizer must not clear the instance that replaced it.
446
+ if (!alive.current || recognition.current !== created)
447
+ return;
448
+ recognition.current = null;
449
+ setListening(false);
450
+ };
451
+ recognition.current = created;
452
+ try {
453
+ created.start();
454
+ setListening(true);
455
+ setNotice(undefined);
456
+ }
457
+ catch {
458
+ recognition.current = null;
459
+ setNotice({ tone: 'error', text: '浏览器拒绝启动语音识别。' });
460
+ }
461
+ };
462
+ const speak = () => {
463
+ if (lastAssistant === undefined) {
464
+ setNotice({ tone: 'info', text: '还没有可朗读的回复。' });
465
+ return;
466
+ }
467
+ if (!runtime.speak(lastAssistant.text)) {
468
+ setNotice({ tone: 'error', text: '浏览器语音合成不可用。' });
469
+ }
470
+ };
471
+ const addFiles = (chosen) => {
472
+ if (runtime.fileUploads() === undefined) {
473
+ setNotice({ tone: 'error', text: '当前界面未提供附件上传服务(fileUpload 未加载),无法上传附件。' });
474
+ return;
475
+ }
476
+ const next = [...files];
477
+ for (const file of Array.from(chosen ?? []))
478
+ next.push(file);
479
+ if (next.length > 10) {
480
+ setNotice({ tone: 'error', text: '一次最多附加 10 个文件。' });
481
+ }
482
+ setFiles(next.slice(0, 10));
483
+ };
484
+ const openNative = () => {
485
+ if (binding !== undefined && runtime.openNativeSession(binding.sessionId))
486
+ return;
487
+ setNotice({ tone: 'error', text: '当前界面未提供原生会话视图(uiWorkspace 未加载);文鳐仍在这个窗口中对话。' });
488
+ };
489
+ const keyDown = (event) => {
490
+ if (event.key !== 'Enter' || event.shiftKey === true || event.nativeEvent?.isComposing === true)
491
+ return;
492
+ event.preventDefault();
493
+ submit();
494
+ };
495
+ const ready = binding !== undefined;
496
+ const disabled = !ready || sending;
497
+ const scroll = (event) => {
498
+ stick.current = event.currentTarget.scrollHeight - event.currentTarget.scrollTop - event.currentTarget.clientHeight < 48;
499
+ };
500
+ let transcript;
501
+ if (state.phase === 'preparing')
502
+ transcript = placeholder('正在准备对话…');
503
+ else if (state.phase === 'unavailable') {
504
+ transcript = el('div', { style: { display: 'grid', gap: 10, justifyItems: 'start' } }, placeholder('当前界面未提供会话服务(sessions 未加载),无法在这里对话。可以进入原生会话界面继续。'), el('button', { type: 'button', style: primaryButtonStyle, onClick: () => runtime.startConversation() }, '进入原生会话'));
505
+ }
506
+ else if (state.phase === 'failed') {
507
+ transcript = el('div', { style: { display: 'grid', gap: 10, justifyItems: 'start' } }, el('p', { role: 'alert', style: { ...hintStyle, color: danger } }, `无法打开对话:${state.error}`), el('button', { type: 'button', style: primaryButtonStyle, onClick: () => setAttempt(value => value + 1) }, '重试'));
508
+ }
509
+ else if (messages.length === 0 && streaming === '') {
510
+ transcript = placeholder('和文鳐说点什么吧。', QUIET_PHRASE);
511
+ }
512
+ else {
513
+ transcript = [
514
+ window.hasMore === true ? el('button', { key: 'older', type: 'button', style: smallButtonStyle,
515
+ onClick: () => { void state.binding.session.loadOlder(); } }, '载入更早的消息') : null,
516
+ ...messages.map(message => jsx(ChatMessageRow, { message }, message.key)),
517
+ streaming === '' ? null : el('div', { key: 'streaming', 'data-chat-message-kind': 'streaming', style: assistantBubbleStyle, 'aria-live': 'polite' }, el('span', { style: { display: 'block', fontSize: 11, color: caption, marginBottom: 3 } }, '文鳐正在回复…'), streaming),
518
+ ];
519
+ }
520
+ return el('section', { 'aria-label': '文鳐对话', 'data-owner-console-chat': '', style: chatRootStyle }, el('div', { style: backdropStyle }, el('img', { src: WENYAO_BACKDROP_DATA_URI, alt: '', 'aria-hidden': 'true', draggable: false,
521
+ 'data-owner-console-art': 'backdrop', width: WENYAO_BACKDROP_WIDTH, height: WENYAO_BACKDROP_HEIGHT,
522
+ style: backdropImageStyle })), el('div', { style: chatColumnStyle }, el('header', { 'data-owner-console-chat-header': '', style: headerStyle }, jsx(ChatMark, {}), el('div', { style: { display: 'grid', gap: 2, minWidth: 0, flex: '1 1 220px' } }, el('div', { style: { display: 'flex', alignItems: 'center', gap: 8, flexWrap: 'wrap' } }, el('h2', { style: { margin: 0, fontSize: 18, fontWeight: 600, letterSpacing: '0.02em' } }, '文鳐 Ray'), sessionPill(snapshot, ready)), el('p', { style: { margin: 0, fontSize: 12, color: muted, fontFamily: "'STKaiti', 'KaiTi', 'Songti SC', 'STSong', serif", letterSpacing: '0.04em' } }, '你的个人助手小鳐 · 小鳐小鳐,游而化飞')), el('div', { style: { ...actionsStyle, marginLeft: 'auto' } }, el('button', { type: 'button', style: smallButtonStyle, onClick: openNative, 'aria-label': '在原生会话中打开' }, '原生会话'), el('button', { type: 'button', style: gearButtonStyle, onClick: onOpenSettings, 'aria-label': '打开设置',
523
+ title: '配置、飞书 / TraeX 与插件管理' }, el('span', { 'aria-hidden': true }, '⚙')))), showPermissionBar
524
+ ? jsx(PermissionBar, { session: binding?.session, permission, catalog, switching, pending: pendingPermission,
525
+ notice: permissionNotice, request: requestPermission, confirm: applyPermission, cancel: () => setPendingPermission(undefined) })
526
+ : null, notice === undefined ? null : el('p', { role: notice.tone === 'error' ? 'alert' : 'status', style: noticeStyle(notice.tone) }, notice.text), ...(nativeSurface === undefined
527
+ ? [
528
+ el('div', { ref: log, 'data-owner-console-chat-log': '', role: 'log', 'aria-label': '对话消息',
529
+ 'aria-live': 'polite', style: logStyle, onScroll: scroll }, transcript),
530
+ jsx(Composer, { disabled, sending, draft, files, running: snapshot.running === true, cancelling,
531
+ voiceAvailable, listening, speakAvailable, speakReady: lastAssistant !== undefined,
532
+ onDraft: setDraft, onSubmit: (event) => { event.preventDefault(); submit(); },
533
+ onKeyDown: keyDown, onFiles: addFiles,
534
+ onRemoveFile: (index) => setFiles(files.filter((_file, at) => at !== index)),
535
+ onVoice: toggleVoice, onSpeak: speak, onStop: stop }),
536
+ ]
537
+ : [
538
+ el('div', { 'data-owner-console-native-conversation': '',
539
+ style: { flex: '1 1 auto', minHeight: 0, display: 'flex', flexDirection: 'column', overflow: 'hidden' } }, jsx(nativeSurface.provider, {
540
+ session: nativeSurface.reference,
541
+ children: nativeSurface.renderSlot('owner-console.conversation', { sessionId: nativeSurface.reference.binding.sessionId }, { fallback: placeholder('正在载入原生对话…') }),
542
+ })),
543
+ ])));
544
+ }
545
+ //# sourceMappingURL=chat-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-view.js","sourceRoot":"","sources":["../src/chat-view.ts"],"names":[],"mappings":"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"}