@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.
- package/LICENSE +21 -0
- package/README.md +320 -2
- package/cordis.patch.yml +3 -0
- package/lib/art.d.ts +7 -0
- package/lib/art.d.ts.map +1 -0
- package/lib/art.js +22 -0
- package/lib/art.js.map +1 -0
- package/lib/artwork.d.ts +15 -0
- package/lib/artwork.d.ts.map +1 -0
- package/lib/artwork.js +15 -0
- package/lib/artwork.js.map +1 -0
- package/lib/build-approvals.d.ts +11 -0
- package/lib/build-approvals.d.ts.map +1 -0
- package/lib/build-approvals.js +64 -0
- package/lib/build-approvals.js.map +1 -0
- package/lib/chat-view.d.ts +50 -0
- package/lib/chat-view.d.ts.map +1 -0
- package/lib/chat-view.js +545 -0
- package/lib/chat-view.js.map +1 -0
- package/lib/chat.d.ts +345 -0
- package/lib/chat.d.ts.map +1 -0
- package/lib/chat.js +418 -0
- package/lib/chat.js.map +1 -0
- package/lib/client.d.ts +131 -0
- package/lib/client.d.ts.map +1 -0
- package/lib/client.js +17214 -0
- package/lib/client.js.map +1 -0
- package/lib/index.d.ts +16 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +18 -0
- package/lib/index.js.map +1 -0
- package/lib/service.d.ts +78 -0
- package/lib/service.d.ts.map +1 -0
- package/lib/service.js +683 -0
- package/lib/service.js.map +1 -0
- package/lib/settings.d.ts +136 -0
- package/lib/settings.d.ts.map +1 -0
- package/lib/settings.js +31 -0
- package/lib/settings.js.map +1 -0
- package/lib/state.d.ts +35 -0
- package/lib/state.d.ts.map +1 -0
- package/lib/state.js +84 -0
- package/lib/state.js.map +1 -0
- package/lib/typert.d.ts +1307 -0
- package/lib/typert.d.ts.map +1 -0
- package/lib/typert.js +271 -0
- package/lib/typert.js.map +1 -0
- package/lib/ui.d.ts +142 -0
- package/lib/ui.d.ts.map +1 -0
- package/lib/ui.js +87 -0
- package/lib/ui.js.map +1 -0
- package/lib/version.d.ts +2 -0
- package/lib/version.d.ts.map +1 -0
- package/lib/version.js +2 -0
- package/lib/version.js.map +1 -0
- package/package.json +99 -3
package/lib/chat-view.js
ADDED
|
@@ -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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"}
|