@lemoncat7/dsh-partner 2.24.0-rc.9 → 2.25.0

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 (173) hide show
  1. package/README.md +2 -2
  2. package/docs/releases/2.24.0-rc.10.md +8 -0
  3. package/docs/releases/2.24.0-rc.11.md +10 -0
  4. package/docs/releases/2.25.0-rc.1.md +12 -0
  5. package/docs/releases/2.25.0-rc.11.md +5 -0
  6. package/docs/releases/2.25.0-rc.2.md +10 -0
  7. package/docs/releases/2.25.0-rc.3.md +11 -0
  8. package/docs/releases/2.25.0-rc.4.md +3 -0
  9. package/docs/releases/2.25.0-rc.5.md +3 -0
  10. package/docs/releases/2.25.0.md +32 -0
  11. package/lib/agent-runtime.d.ts +2 -1
  12. package/lib/agent-runtime.d.ts.map +1 -1
  13. package/lib/agent-runtime.js +38 -14
  14. package/lib/agent-runtime.js.map +1 -1
  15. package/lib/api/features/tts-api.d.ts +4 -0
  16. package/lib/api/features/tts-api.d.ts.map +1 -0
  17. package/lib/api/features/tts-api.js +49 -0
  18. package/lib/api/features/tts-api.js.map +1 -0
  19. package/lib/api.d.ts +2 -0
  20. package/lib/api.d.ts.map +1 -1
  21. package/lib/api.js +11 -5
  22. package/lib/api.js.map +1 -1
  23. package/lib/channels/activity-defaults.d.ts.map +1 -1
  24. package/lib/channels/activity-defaults.js +5 -0
  25. package/lib/channels/activity-defaults.js.map +1 -1
  26. package/lib/channels/direct/transport.d.ts +1 -1
  27. package/lib/channels/direct/transport.d.ts.map +1 -1
  28. package/lib/channels/manager.d.ts +2 -0
  29. package/lib/channels/manager.d.ts.map +1 -1
  30. package/lib/channels/manager.js +16 -2
  31. package/lib/channels/manager.js.map +1 -1
  32. package/lib/channels/outbound-media.d.ts +1 -1
  33. package/lib/channels/outbound-media.d.ts.map +1 -1
  34. package/lib/channels/outbound-media.js +3 -2
  35. package/lib/channels/outbound-media.js.map +1 -1
  36. package/lib/channels/qq/authority.js +1 -1
  37. package/lib/channels/qq/authority.js.map +1 -1
  38. package/lib/channels/qq/reply-tool.d.ts +1 -1
  39. package/lib/channels/qq/reply-tool.d.ts.map +1 -1
  40. package/lib/channels/qq/reply-tool.js +7 -2
  41. package/lib/channels/qq/reply-tool.js.map +1 -1
  42. package/lib/channels/weixin/api.d.ts +1 -1
  43. package/lib/channels/weixin/api.d.ts.map +1 -1
  44. package/lib/channels/weixin/api.js +7 -1
  45. package/lib/channels/weixin/api.js.map +1 -1
  46. package/lib/channels/weixin/connect.d.ts +2 -0
  47. package/lib/channels/weixin/connect.d.ts.map +1 -1
  48. package/lib/character/activity-journal.d.ts +3 -1
  49. package/lib/character/activity-journal.d.ts.map +1 -1
  50. package/lib/character/activity-journal.js +43 -7
  51. package/lib/character/activity-journal.js.map +1 -1
  52. package/lib/character/activity-summary.d.ts +23 -0
  53. package/lib/character/activity-summary.d.ts.map +1 -0
  54. package/lib/character/activity-summary.js +23 -0
  55. package/lib/character/activity-summary.js.map +1 -0
  56. package/lib/character/conversation-behavior.d.ts +1 -0
  57. package/lib/character/conversation-behavior.d.ts.map +1 -1
  58. package/lib/character/conversation-behavior.js +7 -4
  59. package/lib/character/conversation-behavior.js.map +1 -1
  60. package/lib/character/idle-contact.d.ts +7 -0
  61. package/lib/character/idle-contact.d.ts.map +1 -1
  62. package/lib/character/idle-contact.js +57 -8
  63. package/lib/character/idle-contact.js.map +1 -1
  64. package/lib/chat/live-speech.js +1 -1
  65. package/lib/chat/live-speech.js.map +1 -1
  66. package/lib/chat/persona-delivery.d.ts +2 -0
  67. package/lib/chat/persona-delivery.d.ts.map +1 -1
  68. package/lib/chat/persona-delivery.js +2 -0
  69. package/lib/chat/persona-delivery.js.map +1 -1
  70. package/lib/chat/protocol.d.ts +1 -1
  71. package/lib/chat/protocol.js +1 -1
  72. package/lib/chat/tools.d.ts.map +1 -1
  73. package/lib/chat/tools.js +6 -3
  74. package/lib/chat/tools.js.map +1 -1
  75. package/lib/client-api.d.ts +7 -0
  76. package/lib/client-api.d.ts.map +1 -1
  77. package/lib/client-api.js.map +1 -1
  78. package/lib/client.activities.js +3 -0
  79. package/lib/client.js +1126 -1114
  80. package/lib/client.js.map +4 -4
  81. package/lib/client.tts.js +7 -0
  82. package/lib/collaboration/tool-discovery.d.ts +1 -1
  83. package/lib/collaboration/tool-discovery.d.ts.map +1 -1
  84. package/lib/collaboration/tool-discovery.js +10 -5
  85. package/lib/collaboration/tool-discovery.js.map +1 -1
  86. package/lib/companions/management.d.ts +4 -4
  87. package/lib/concern-execution-receipt.d.ts +2 -1
  88. package/lib/concern-execution-receipt.d.ts.map +1 -1
  89. package/lib/concern-execution-receipt.js +15 -13
  90. package/lib/concern-execution-receipt.js.map +1 -1
  91. package/lib/concern-execution.d.ts +3 -1
  92. package/lib/concern-execution.d.ts.map +1 -1
  93. package/lib/concern-execution.js +20 -1
  94. package/lib/concern-execution.js.map +1 -1
  95. package/lib/concern-recording.d.ts +1 -1
  96. package/lib/concern-recording.d.ts.map +1 -1
  97. package/lib/concern-recording.js +14 -5
  98. package/lib/concern-recording.js.map +1 -1
  99. package/lib/concern-store.d.ts.map +1 -1
  100. package/lib/concern-store.js +3 -1
  101. package/lib/concern-store.js.map +1 -1
  102. package/lib/domain.d.ts +3 -0
  103. package/lib/domain.d.ts.map +1 -1
  104. package/lib/domain.js.map +1 -1
  105. package/lib/execution/task-preamble.js +1 -1
  106. package/lib/execution/task-preamble.js.map +1 -1
  107. package/lib/execution/work-tool.js +1 -1
  108. package/lib/execution/work-tool.js.map +1 -1
  109. package/lib/heartbeat.js +1 -1
  110. package/lib/heartbeat.js.map +1 -1
  111. package/lib/index.d.ts.map +1 -1
  112. package/lib/index.js +8 -3
  113. package/lib/index.js.map +1 -1
  114. package/lib/observation-loop.d.ts.map +1 -1
  115. package/lib/observation-loop.js +7 -3
  116. package/lib/observation-loop.js.map +1 -1
  117. package/lib/store.d.ts.map +1 -1
  118. package/lib/store.js +3 -1
  119. package/lib/store.js.map +1 -1
  120. package/lib/ui/channels-panel.d.ts.map +1 -1
  121. package/lib/ui/channels-panel.js +9 -3
  122. package/lib/ui/channels-panel.js.map +1 -1
  123. package/lib/ui/identity-editor.js +1 -1
  124. package/lib/ui/identity-editor.js.map +1 -1
  125. package/lib/ui/idle-contact-editor.js +1 -1
  126. package/lib/ui/idle-contact-editor.js.map +1 -1
  127. package/lib/ui/memory/concern-board.js +1 -1
  128. package/lib/ui/memory/concern-board.js.map +1 -1
  129. package/lib/ui/memory/concern-execution-status.d.ts.map +1 -1
  130. package/lib/ui/memory/concern-execution-status.js +2 -2
  131. package/lib/ui/memory/concern-execution-status.js.map +1 -1
  132. package/lib/ui/qq-channel-settings.js +3 -3
  133. package/lib/ui/qq-channel-settings.js.map +1 -1
  134. package/lib/ui/thoughts-panel-loader.d.ts +4 -0
  135. package/lib/ui/thoughts-panel-loader.d.ts.map +1 -0
  136. package/lib/ui/thoughts-panel-loader.js +23 -0
  137. package/lib/ui/thoughts-panel-loader.js.map +1 -0
  138. package/lib/ui/thoughts-panel.d.ts.map +1 -1
  139. package/lib/ui/thoughts-panel.js +7 -5
  140. package/lib/ui/thoughts-panel.js.map +1 -1
  141. package/lib/ui/tts-settings-loader.d.ts +4 -0
  142. package/lib/ui/tts-settings-loader.d.ts.map +1 -0
  143. package/lib/ui/tts-settings-loader.js +23 -0
  144. package/lib/ui/tts-settings-loader.js.map +1 -0
  145. package/lib/ui/tts-settings.d.ts +11 -0
  146. package/lib/ui/tts-settings.d.ts.map +1 -0
  147. package/lib/ui/tts-settings.js +63 -0
  148. package/lib/ui/tts-settings.js.map +1 -0
  149. package/lib/voice/credentials.d.ts +9 -0
  150. package/lib/voice/credentials.d.ts.map +1 -0
  151. package/lib/voice/credentials.js +12 -0
  152. package/lib/voice/credentials.js.map +1 -0
  153. package/lib/voice/domain.d.ts +42 -0
  154. package/lib/voice/domain.d.ts.map +1 -0
  155. package/lib/voice/domain.js +53 -0
  156. package/lib/voice/domain.js.map +1 -0
  157. package/lib/voice/service.d.ts +63 -0
  158. package/lib/voice/service.d.ts.map +1 -0
  159. package/lib/voice/service.js +211 -0
  160. package/lib/voice/service.js.map +1 -0
  161. package/lib/voice/synthesize.d.ts +12 -0
  162. package/lib/voice/synthesize.d.ts.map +1 -0
  163. package/lib/voice/synthesize.js +97 -0
  164. package/lib/voice/synthesize.js.map +1 -0
  165. package/lib/voice/tool.d.ts +7 -0
  166. package/lib/voice/tool.d.ts.map +1 -0
  167. package/lib/voice/tool.js +73 -0
  168. package/lib/voice/tool.js.map +1 -0
  169. package/lib/voice/validation.d.ts +3 -0
  170. package/lib/voice/validation.d.ts.map +1 -0
  171. package/lib/voice/validation.js +31 -0
  172. package/lib/voice/validation.js.map +1 -0
  173. package/package.json +10 -1
@@ -10,7 +10,7 @@ import { api } from '../client-api.js';
10
10
  import { qqSettings, qqGroupPeer } from '../channels/qq/settings.js';
11
11
  import { ChannelStatus } from './partner-components.js';
12
12
  import { errorMessage } from './workspace-components.js';
13
- const titles = { chat: '聊天互动', voice: '语音回复', capabilities: '私有能力', home: 'QQ 设置', connection: '连接与账号', private: '私聊回复', group: '群聊回复', groups: '选择群组', autonomy: '自主回复白名单', sessions: '会话与记忆', media: '表情与图片', access: '访问权限', send: '发送消息' };
13
+ const titles = { chat: '聊天互动', voice: 'QQ 原生语音', capabilities: '私有能力', home: 'QQ 设置', connection: '连接与账号', private: '私聊回复', group: '群聊回复', groups: '选择群组', autonomy: '自主回复白名单', sessions: '会话与记忆', media: '表情与图片', access: '访问权限', send: '发送消息' };
14
14
  export function QqChannelSettings({ channel, pairings, onChanged, onDeleted, editState }) {
15
15
  const [page, setPage] = useState('home'), [policy, setPolicy] = useState(() => qqSettings(channel.qq)), [busy, setBusy] = useState(false), [feedback, setFeedback] = useState(''), [failed, setFailed] = useState(false);
16
16
  const [url, setUrl] = useState(channel.direct?.baseUrl ?? ''), [token, setToken] = useState(''), [confirmDelete, setConfirmDelete] = useState(false);
@@ -20,7 +20,7 @@ export function QqChannelSettings({ channel, pairings, onChanged, onDeleted, edi
20
20
  const [faces, setFaces] = useState([]), [userId, setUserId] = useState(''), [mode, setMode] = useState('text'), [text, setText] = useState(''), [face, setFace] = useState();
21
21
  const filteredFaces = faces.filter(f => (!category || f.category === category) && (f.name + f.id + f.category).includes(search));
22
22
  const dirty = JSON.stringify(policy) !== JSON.stringify(qqSettings(channel.qq));
23
- useEffect(() => { editState.current = { dirty: dirty || url !== (channel.direct?.baseUrl ?? '') || !!token, busy }; return () => { editState.current = { dirty: false, busy: false }; }; }, [dirty, url, token, busy, channel.direct?.baseUrl, editState]);
23
+ useEffect(() => { editState.current = { dirty: dirty || url !== (channel.direct?.baseUrl ?? '') || !!token, busy: busy }; return () => { editState.current = { dirty: false, busy: false }; }; }, [dirty, url, token, busy, channel.direct?.baseUrl, editState]);
24
24
  const owned = pairings.filter(p => p.channelId === channel.id), approved = owned.filter(p => p.status === 'approved');
25
25
  const groupWhite = (userId) => { const peer = qqGroupPeer(userId); return !!peer && policy.groupReplies && policy.groupIds.includes(peer.groupId) && policy.autonomousGroupIds.includes(peer.groupId); };
26
26
  const change = (patch) => setPolicy(current => ({ ...current, ...patch }));
@@ -44,7 +44,7 @@ export function QqChannelSettings({ channel, pairings, onChanged, onDeleted, edi
44
44
  const loadPeers = () => run(async () => { const [g, f] = await Promise.all([api(`/channels/${channel.id}/qq/groups`), api(`/channels/${channel.id}/qq/friends`)]); setGroups(g.groups); setGroupsLoaded(true); setFriends(f.friends); });
45
45
  const loadFaces = () => run(async () => { const data = await api(`/channels/${channel.id}/qq/faces`); setFaces(data.faces); });
46
46
  const entry = (next, detail, note) => _jsxs("button", { type: "button", className: "dsh-partner-qq-entry", disabled: busy, onClick: () => go(next), children: [_jsx("span", { className: "dsh-partner-qq-glyph", "aria-hidden": "true", children: _jsx(Glyph, { name: next }) }), _jsxs("span", { children: [_jsx("strong", { children: titles[next] }), _jsx("small", { children: detail })] }), note && _jsx("em", { children: note }), _jsx("span", { "aria-hidden": "true", children: "\u203A" })] });
47
- return _jsxs("div", { className: "dsh-partner-qq-settings", "aria-busy": busy, children: [page !== 'home' && _jsxs("nav", { className: "dsh-partner-qq-breadcrumb", "aria-label": "QQ \u8BBE\u7F6E\u5BFC\u822A", children: [_jsxs("button", { type: "button", disabled: busy, onClick: () => go((page === 'groups' || page === 'autonomy') ? 'group' : 'home'), children: ["\u2039 ", (page === 'groups' || page === 'autonomy') ? '群聊回复' : 'QQ 设置'] }), _jsx("span", { "aria-hidden": "true", children: "/" }), _jsx("strong", { children: titles[page] })] }), page === 'home' ? _jsxs(_Fragment, { children: [_jsxs("div", { className: "dsh-partner-qq-account", children: [_jsxs("div", { children: [_jsx("small", { children: "QQ \u8D26\u53F7" }), _jsx("strong", { children: channel.accountId }), _jsx("span", { children: "SnowLuma \u00B7 \u6B63\u5411 WebSocket" })] }), _jsx(ChannelStatus, { channel: channel })] }), _jsx(QqConnectionGuide, {}), _jsx("div", { className: "dsh-partner-qq-section-label", children: "\u8FDE\u63A5" }), entry('connection', '管理服务器、凭据与连接状态'), _jsx("div", { className: "dsh-partner-qq-section-label", children: "\u804A\u5929\u56DE\u590D \u00B7 \u7FA4\u767D\u540D\u5355\u4E0E\u8D26\u53F7\u5BA1\u6279" }), entry('private', '好友私聊与配对授权', policy.privateReplies ? '开启' : '关闭'), entry('group', '选择群组,设置何时回复', policy.groupReplies ? `${policy.groupIds.length} 个群` : '关闭'), entry('sessions', '独立聊天,按需接入主会话', `${policy.mainSessionPeers.length} 个共用`), entry('media', 'QQ 原生表情、收藏与默认库'), entry('chat', '消息表情回应与当前群信息', `${policy.enabledActions.filter(id => QQ_PUBLIC_SCOPED_ACTIONS.has(id)).length} 项开启`), entry('voice', '仅向当前聊天对象发送语音', policy.replyVoiceEnabled ? '开启' : '关闭'), _jsx("div", { className: "dsh-partner-qq-section-label", children: "\u79C1\u6709\u80FD\u529B \u00B7 \u5F52\u5C5E\u8D26\u53F7\u4E0E\u7CFB\u7EDF\u81EA\u4E3B\u6267\u884C" }), entry('capabilities', 'QQ 空间、资料与群管理', policy.autonomousActions ? `${policy.enabledActions.filter(id => !QQ_PUBLIC_CHAT_ACTIONS.has(id)).length} 项开启` : '关闭'), _jsx("div", { className: "dsh-partner-qq-section-label", children: "\u7BA1\u7406\u4E0E\u64CD\u4F5C" }), entry('access', '归属账号、关系与能力范围', `${owned.filter(p => p.status === 'pending').length} 待批准`), entry('send', '选择已授权接收人,发送文字或表情')] }) : page === 'chat' ? _jsxs("div", { className: "dsh-partner-qq-pane", children: [_jsx("p", { className: "dsh-partner-qq-hint", children: "\u5DF2\u83B7\u804A\u5929\u8BB8\u53EF\u7684\u8054\u7CFB\u4EBA\u548C\u7FA4\u6210\u5458\u90FD\u53EF\u4F7F\u7528\u5F00\u542F\u7684\u64CD\u4F5C\uFF0C\u4E0D\u4F9D\u8D56\u79C1\u6709\u80FD\u529B\u603B\u5F00\u5173\u3002\u8868\u60C5\u56DE\u5E94\u662F\u9644\u5728\u4E00\u6761\u6D88\u606F\u65C1\u7684\u5C0F\u8868\u60C5\uFF1B\u7FA4\u4FE1\u606F\u67E5\u8BE2\u4EC5\u9650\u5F53\u524D\u7FA4\uFF0C\u4E0D\u5141\u8BB8\u67E5\u770B\u5176\u4ED6\u7FA4\u6216\u79C1\u804A\u3002\u5F00\u542F\u540E\u7531\u4F19\u4F34\u6309\u573A\u666F\u51B3\u5B9A\u662F\u5426\u4F7F\u7528\u3002" }), _jsx("div", { className: "dsh-partner-qq-capabilities", children: QQ_ACTIONS.filter(a => QQ_PUBLIC_SCOPED_ACTIONS.has(a.id)).map(a => _jsxs("label", { className: "dsh-partner-qq-capability", children: [_jsx("input", { type: "checkbox", checked: policy.enabledActions.includes(a.id), disabled: busy, onChange: e => change({ enabledActions: e.target.checked ? [...policy.enabledActions, a.id] : policy.enabledActions.filter(id => id !== a.id) }) }), _jsxs("span", { children: [_jsx("strong", { children: a.title }), _jsx("small", { children: a.id === 'set_msg_emoji_like' ? '为当前会话的消息添加或取消表情回应' : a.category === 'groups' ? '读取当前群的资料,帮助识别群友' : '查看当前会话消息的表情回应' })] })] }, a.id)) })] }) : page === 'voice' ? _jsx(QqVoiceReplySettings, { channel: channel, policy: policy, change: change, busy: busy }) : page === 'capabilities' ? _jsx(QqCapabilitySettings, { channel: channel, policy: policy, change: change, busy: busy }) : page === 'connection' ? _jsxs("div", { className: "dsh-partner-qq-pane", children: [_jsx(QqConnectionGuide, {}), _jsx("p", { className: "dsh-partner-qq-hint", children: "\u4FEE\u6539\u8FDE\u63A5\u65F6\u4F1A\u6838\u5BF9 QQ \u8D26\u53F7\uFF0C\u4FDD\u7559\u5DF2\u6709\u6388\u6743\u3002" }), _jsx(Field, { label: "\u6B63\u5411 WebSocket \u5730\u5740", children: _jsx("input", { value: url, onChange: e => setUrl(e.target.value), disabled: busy, placeholder: "ws://snowluma:3001" }) }), _jsx(Field, { label: "WS Access Token", hint: "\u7559\u7A7A\u4FDD\u7559\u5DF2\u4FDD\u5B58\u4EE4\u724C\uFF1B\u4E0D\u4F1A\u663E\u793A\u539F\u4EE4\u724C\u3002", children: _jsx("input", { type: "password", autoComplete: "new-password", value: token, onChange: e => setToken(e.target.value), disabled: busy }) }), _jsxs("div", { className: "dsh-partner-qq-actions", children: [_jsx("button", { disabled: busy || !url, onClick: () => void run(async () => { await post('connection', { baseUrl: url, botToken: token, testOnly: true, expectedUpdatedAt: channel.updatedAt }); }, '连接测试通过'), children: "\u6D4B\u8BD5\u8FDE\u63A5" }), _jsx("button", { className: "is-primary", disabled: busy || !url, onClick: () => void run(async () => { await post('connection', { baseUrl: url, botToken: token, testOnly: false, expectedUpdatedAt: channel.updatedAt }); setToken(''); await onChanged(); }, '连接已保存'), children: "\u4FDD\u5B58\u8FDE\u63A5" })] }), _jsx("div", { className: "dsh-partner-qq-divider" }), _jsxs("div", { className: "dsh-partner-qq-actions", children: [_jsx("button", { disabled: busy, onClick: () => void run(async () => { await api(`/channels/${channel.id}/enabled`, { method: 'POST', body: JSON.stringify({ enabled: !channel.enabled }) }); await onChanged(); }), children: channel.enabled ? '停用渠道' : '启用渠道' }), channel.enabled && _jsx("button", { disabled: busy, onClick: () => void run(async () => { await api(`/channels/${channel.id}/enabled`, { method: 'POST', body: JSON.stringify({ enabled: true }) }); await onChanged(); }), children: "\u91CD\u65B0\u8FDE\u63A5" })] }), _jsxs("details", { className: "dsh-partner-qq-advanced", children: [_jsx("summary", { children: "\u79FB\u9664\u6E20\u9053" }), _jsx("p", { children: "\u79FB\u9664\u8FDE\u63A5\u3001\u51ED\u636E\u548C\u8054\u7CFB\u4EBA\u6388\u6743\u3002" }), _jsx("button", { disabled: busy, onClick: () => confirmDelete ? void run(async () => { await api(`/channels/${channel.id}`, { method: 'DELETE' }); await onChanged(); onDeleted(); }) : setConfirmDelete(true), children: confirmDelete ? '确认移除 QQ 渠道' : '移除渠道' })] })] }) : page === 'private' ? _jsxs("div", { className: "dsh-partner-qq-pane", children: [_jsx(Toggle, { title: "\u79C1\u804A\u56DE\u590D", detail: "\u5141\u8BB8\u56DE\u590D\u5DF2\u6279\u51C6\u7684\u597D\u53CB\u79C1\u804A\uFF0C\u4E5F\u7528\u4E8E\u79C1\u804A\u901A\u77E5\u3002", value: policy.privateReplies, disabled: busy, onChange: v => change({ privateReplies: v }) }), _jsx("p", { className: "dsh-partner-qq-hint", children: "\u8BBF\u95EE\u8BB8\u53EF\u53EA\u5141\u8BB8\u804A\u5929\uFF0C\u4E0D\u4EE3\u8868\u6388\u4E88\u79C1\u6709\u80FD\u529B\u3002\u65B0\u597D\u53CB\u53D1\u6D88\u606F\u540E\u4F1A\u751F\u6210\u914D\u5BF9\u8BF7\u6C42\u3002\u8BF7\u5728\u300C\u8BBF\u95EE\u6743\u9650\u300D\u6838\u5BF9\u914D\u5BF9\u7801\u540E\u6279\u51C6\uFF1B\u7FA4\u4E34\u65F6\u4F1A\u8BDD\u4E0D\u4F5C\u4E3A\u597D\u53CB\u79C1\u804A\u5904\u7406\u3002" }), entry('access', '查看并管理已批准联系人')] }) : page === 'group' ? _jsxs("div", { className: "dsh-partner-qq-pane", children: [_jsx(Toggle, { title: "\u7FA4\u804A\u56DE\u590D", detail: "\u4EC5\u63A5\u5165\u9009\u4E2D\u7684\u7FA4\u3002\u767D\u540D\u5355\u7FA4\u653E\u884C\u6240\u6709\u6210\u5458\uFF1B\u5176\u4ED6\u7FA4\u9700\u8981\u5BA1\u6279\u53D1\u8A00\u8D26\u53F7\u3002\u79C1\u804A\u59CB\u7EC8\u5355\u72EC\u5BA1\u6279\u3002", value: policy.groupReplies, disabled: busy, onChange: v => change({ groupReplies: v }) }), policy.groupReplies && _jsxs(_Fragment, { children: [entry('groups', '从机器人已加入的群中选择', `${policy.groupIds.length} 个群`), entry('autonomy', '不必 @,由伙伴判断是否接话', `${policy.autonomousGroupIds.length} 个群`), _jsx(Field, { label: "\u5176\u4ED6\u7FA4\u4F55\u65F6\u56DE\u590D", children: _jsxs("select", { disabled: busy, value: policy.groupTrigger, onChange: e => change({ groupTrigger: e.target.value }), children: [_jsx("option", { value: "mention", children: "\u4EC5\u88AB @ \u65F6\u56DE\u590D\uFF08\u63A8\u8350\uFF09" }), _jsx("option", { value: "all", children: "\u56DE\u590D\u7FA4\u5185\u6BCF\u6761\u6D88\u606F" })] }) }), _jsx(Toggle, { title: "\u56DE\u590D\u65F6 @ \u53D1\u8A00\u4EBA", detail: "\u591A\u4EBA\u540C\u65F6\u804A\u5929\u65F6\uFF0C\u6807\u660E\u8FD9\u6761\u56DE\u590D\u5BF9\u5E94\u7684\u6210\u5458\u3002", value: policy.mentionSender, disabled: busy, onChange: v => change({ mentionSender: v }) })] }), _jsx("p", { className: "dsh-partner-qq-hint", children: "\u9ED8\u8BA4\u6BCF\u4E2A\u7FA4\u3001\u6BCF\u4F4D\u79C1\u804A\u7528\u6237\u5404\u7528\u4E00\u4E2A\u4F1A\u8BDD\uFF1B\u5728\u300C\u4F1A\u8BDD\u4E0E\u8BB0\u5FC6\u300D\u9009\u62E9\u4F7F\u7528\u4E3B\u4F1A\u8BDD\u7684\u5BF9\u8C61\u3002\u957F\u671F\u8BB0\u5FC6\u6CBF\u7528\u8BE5\u4F19\u4F34\u3002\u767D\u540D\u5355\u7FA4\u65E0\u9700\u9010\u4EBA\u5BA1\u6279\uFF1B\u5176\u4ED6\u5DF2\u63A5\u5165\u7FA4\u6309\u53D1\u8A00\u8D26\u53F7\u5BA1\u6279\u3002\u7FA4\u5185\u8BB8\u53EF\u4E0D\u5F00\u653E\u79C1\u804A\uFF0C\u81EA\u4E3B\u63A5\u8BDD\u4E0D\u4F1A\u589E\u52A0\u5DE5\u5177\u6743\u9650\u3002" })] }) : page === 'sessions' ? _jsxs("div", { className: "dsh-partner-qq-pane", children: [_jsx("p", { className: "dsh-partner-qq-hint", children: "\u9ED8\u8BA4\u6BCF\u4E2A\u7FA4\u3001\u6BCF\u4F4D\u79C1\u804A\u7528\u6237\u5404\u6709\u72EC\u7ACB\u4F1A\u8BDD\uFF0C\u540D\u79F0\u4F7F\u7528\u7FA4\u540D\u6216\u8054\u7CFB\u4EBA\u540D\u3002\u52FE\u9009\u7684\u5BF9\u8C61\u4F1A\u4E0E\u672C\u5730\u804A\u5929\u5171\u7528\u4E3B\u4F1A\u8BDD\uFF0C\u4E92\u76F8\u53EF\u89C1\u8BE5\u4F1A\u8BDD\u7684\u4E0A\u4E0B\u6587\u3002" }), _jsxs("div", { className: "dsh-partner-qq-actions", children: [_jsxs("span", { children: ["\u4F7F\u7528\u4E3B\u4F1A\u8BDD\uFF1A", policy.mainSessionPeers.length, " \u4E2A\u5BF9\u8C61"] }), _jsx("button", { disabled: busy, onClick: () => void loadPeers(), children: "\u8BFB\u53D6\u597D\u53CB\u4E0E\u7FA4" })] }), _jsxs("div", { className: "dsh-partner-qq-segments", role: "group", "aria-label": "\u4E3B\u4F1A\u8BDD\u5BF9\u8C61\u7C7B\u578B", children: [_jsx("button", { "aria-pressed": sessionKind === 'private', onClick: () => { setSessionKind('private'); setSearch(''); }, children: "\u79C1\u804A\u7528\u6237" }), _jsx("button", { "aria-pressed": sessionKind === 'group', onClick: () => { setSessionKind('group'); setSearch(''); }, children: "\u7FA4\u804A" })] }), _jsx(Field, { label: "\u641C\u7D22\u540D\u79F0\u6216\u53F7\u7801", children: _jsx("input", { value: search, onChange: e => setSearch(e.target.value) }) }), _jsx("div", { className: "dsh-partner-qq-options", children: [...new Map([...(sessionKind === 'group' ? groups : friends), ...(sessionKind === 'group' ? policy.groupIds.map(id => ({ id, name: '群 ' + id })) : owned.filter(p => !p.userId.startsWith('group:')).map(p => ({ id: p.userId, name: p.displayName }))), ...policy.mainSessionPeers.filter(p => p.startsWith(sessionKind + ':')).map(p => ({ id: p.split(':')[1], name: p.split(':')[1] }))].reverse().map(p => [p.id, p])).values()].filter(p => (p.name + p.id).includes(search)).map(p => { const key = `${sessionKind}:${p.id}`; return _jsxs("label", { children: [_jsx("input", { type: "checkbox", checked: policy.mainSessionPeers.includes(key), disabled: busy, onChange: e => change({ mainSessionPeers: e.target.checked ? [...policy.mainSessionPeers, key] : policy.mainSessionPeers.filter(k => k !== key) }) }), _jsxs("span", { children: [_jsx("strong", { children: p.name }), _jsxs("small", { children: [p.id, " \u00B7 ", policy.mainSessionPeers.includes(key) ? '使用主会话' : '独立会话'] })] })] }, key); }) }), _jsx("p", { className: "dsh-partner-qq-hint", children: "\u6CA1\u6709\u627E\u5230\u5BF9\u8C61\u65F6\uFF0C\u70B9\u51FB\u300C\u8BFB\u53D6\u597D\u53CB\u4E0E\u7FA4\u300D\u3002\u4F1A\u8BDD\u9009\u62E9\u4E0D\u6388\u4E88\u56DE\u590D\u6743\u9650\uFF1B\u7FA4\u804A\u9700\u8981\u5DF2\u63A5\u5165\uFF0C\u5E76\u6EE1\u8DB3\u7FA4\u767D\u540D\u5355\u6216\u6210\u5458\u5BA1\u6279\uFF1B\u79C1\u804A\u9700\u8981\u5355\u72EC\u5F00\u542F\u5E76\u6279\u51C6\u8054\u7CFB\u4EBA\u3002" }), _jsx("div", { className: "dsh-partner-qq-divider" }), _jsx("strong", { children: "\u957F\u671F\u8BB0\u5FC6\u5171\u7528" }), _jsx("p", { className: "dsh-partner-qq-hint", children: "\u542F\u7528\u8BB0\u5FC6\u65F6\uFF0C\u72EC\u7ACB\u4F1A\u8BDD\u4E5F\u80FD\u56DE\u5FC6\u8FD9\u4E2A\u4F19\u4F34\u5DF2\u6574\u7406\u7684\u957F\u671F\u8BB0\u5FC6\uFF0C\u5F7C\u6B64\u4E0D\u4F1A\u62FC\u63A5\u804A\u5929\u539F\u6587\u3002\u9700\u8981\u5B8C\u5168\u9694\u79BB\u8D44\u6599\u65F6\uFF0C\u8BF7\u4F7F\u7528\u4E0D\u540C\u4F19\u4F34\u3002" }), _jsx("p", { className: "dsh-partner-qq-hint", children: "\u4FDD\u5B58\u540E\u4ECE\u540E\u7EED\u6D88\u606F\u5F00\u59CB\u5207\u6362\uFF0C\u5386\u53F2\u8BB0\u5F55\u4FDD\u7559\u3002\u53D6\u6D88\u52FE\u9009\u4F1A\u63A5\u56DE\u539F\u72EC\u7ACB\u4F1A\u8BDD\uFF1B\u9996\u6B21\u4F7F\u7528\u624D\u4F1A\u65B0\u5EFA\u3002" })] }) : page === 'autonomy' ? _jsxs("div", { className: "dsh-partner-qq-pane", children: [_jsx("p", { className: "dsh-partner-qq-hint", children: "\u767D\u540D\u5355\u4E2D\u7684\u7FA4\u4F1A\u63A5\u6536\u666E\u901A\u7FA4\u6D88\u606F\uFF0C\u4E0D\u7528 @\u3002\u7ED3\u5408\u5BF9\u8BDD\u5BF9\u8C61\u548C\u8FD1\u671F\u4EA4\u6D41\u63A5\u8BDD\uFF1B\u4E0D\u660E\u786E\u7684\u65B0\u6D88\u606F\u7531\u672C\u5730\u8BED\u4E49\u8F85\u52A9\u5224\u65AD\uFF0C\u6B63\u5E38\u804A\u5929\u4E0D\u4F1A\u9010\u6761\u62BD\u7B7E\u3002" }), _jsx("div", { className: "dsh-partner-qq-options", children: policy.groupIds.map(id => _jsxs("label", { children: [_jsx("input", { type: "checkbox", checked: policy.autonomousGroupIds.includes(id), disabled: busy, onChange: e => change({ autonomousGroupIds: e.target.checked ? [...policy.autonomousGroupIds, id] : policy.autonomousGroupIds.filter(g => g !== id) }) }), _jsxs("span", { children: [_jsx("strong", { children: groups.find(g => g.id === id)?.name ?? '群 ' + id }), _jsx("small", { children: id })] })] }, id)) }), !policy.groupIds.length && entry('groups', '先选择允许接入的群'), _jsx("p", { className: "dsh-partner-qq-hint", children: "\u767D\u540D\u5355\u7FA4\u5185\u6240\u6709\u6210\u5458\u7684\u6D88\u606F\u90FD\u4F1A\u8FDB\u5165\u63A5\u8BDD\u5224\u65AD\uFF0C\u65E0\u9700\u9010\u4EBA\u914D\u5BF9\u3002\u4F19\u4F34\u51B3\u5B9A\u662F\u5426\u63A5\u8BDD\uFF0C\u4E0D\u4FDD\u8BC1\u6BCF\u6761\u5FC5\u56DE\uFF1B\u660E\u786E\u5C4F\u853D\u7684\u6210\u5458\u9664\u5916\u3002\u7FA4\u5185\u8BB8\u53EF\u4E0D\u5F00\u653E\u79C1\u804A\uFF0C\u4E5F\u4E0D\u6388\u4E88\u79C1\u6709\u5DE5\u5177\u6743\u9650\u3002" })] }) : page === 'groups' ? _jsxs("div", { className: "dsh-partner-qq-pane", children: [_jsxs("div", { className: "dsh-partner-qq-actions", children: [_jsxs("span", { children: ["\u5DF2\u9009\u62E9 ", policy.groupIds.length, " \u4E2A\u7FA4"] }), _jsx("button", { disabled: busy, onClick: () => void loadGroups(), children: groupsLoaded ? '刷新群列表' : '读取已加入的群' })] }), _jsx(Field, { label: "\u641C\u7D22\u7FA4\u540D\u79F0\u6216\u7FA4\u53F7", children: _jsx("input", { value: search, onChange: e => setSearch(e.target.value) }) }), _jsxs("div", { className: "dsh-partner-qq-options", children: [groups.filter(g => (g.name + g.id).includes(search)).map(g => _jsxs("label", { children: [_jsx("input", { type: "checkbox", disabled: busy, checked: policy.groupIds.includes(g.id), onChange: e => change({ groupIds: e.target.checked ? [...policy.groupIds, g.id] : policy.groupIds.filter(id => id !== g.id), autonomousGroupIds: e.target.checked ? policy.autonomousGroupIds : policy.autonomousGroupIds.filter(id => id !== g.id), replyVoiceGroupId: !e.target.checked && policy.replyVoiceGroupId === g.id ? '' : (policy.replyVoiceGroupId ?? '') }) }), _jsxs("span", { children: [_jsx("strong", { children: g.name }), _jsx("small", { children: g.id })] })] }, g.id)), policy.groupIds.filter(id => !groups.some(g => g.id === id)).map(id => _jsxs("label", { children: [_jsx("input", { type: "checkbox", checked: true, disabled: busy, onChange: () => change({ groupIds: policy.groupIds.filter(g => g !== id), autonomousGroupIds: policy.autonomousGroupIds.filter(g => g !== id), replyVoiceGroupId: policy.replyVoiceGroupId === id ? '' : (policy.replyVoiceGroupId ?? '') }) }), _jsxs("span", { children: [_jsx("strong", { children: "\u5DF2\u9009\u62E9\u7684\u7FA4" }), _jsx("small", { children: id })] })] }, id))] }), groupsLoaded && !groups.length && _jsx("p", { children: "\u5F53\u524D\u8D26\u53F7\u6CA1\u6709\u53EF\u9009\u62E9\u7684\u7FA4\u3002" })] }) : page === 'media' ? _jsxs("div", { className: "dsh-partner-qq-pane", children: [_jsx("p", { className: "dsh-partner-qq-hint", children: "\u6536\u85CF\u548C\u8BED\u97F3\u56DE\u590D\u5C5E\u4E8E\u516C\u5F00\u804A\u5929\u80FD\u529B\uFF0C\u5DF2\u6279\u51C6\u7684\u79C1\u804A\u8054\u7CFB\u4EBA\u548C\u53EF\u56DE\u590D\u7FA4\u6210\u5458\u5747\u53EF\u4F7F\u7528\uFF1B\u4E0D\u4F9D\u8D56\u5F52\u5C5E\u8D26\u53F7\u6216\u79C1\u6709\u80FD\u529B\u603B\u5F00\u5173\u3002\u4E0B\u9762\u7684\u5F00\u5173\u4FDD\u5B58\u540E\u751F\u6548\u3002" }), [['fetch_custom_face_detail', '查看收藏表情'], ['add_custom_face', '收藏收到的表情'], ['modify_custom_face', '备注收藏表情'], ['move_custom_face_to_front', '置顶喜欢的表情'], ['delete_custom_face', '删除不再需要的表情']].map(([id, title]) => _jsx(Toggle, { title: title, detail: "\u5141\u8BB8\u4F19\u4F34\u5728\u5F53\u524D QQ \u6E20\u9053\u6309\u4EBA\u683C\u548C\u573A\u666F\u81EA\u884C\u4F7F\u7528\u3002", value: policy.enabledActions.includes(id), disabled: busy, onChange: v => change({ enabledActions: v ? [...new Set([...policy.enabledActions, id])] : policy.enabledActions.filter(a => a !== id) }) }, id)), _jsx(Field, { label: "\u804A\u5929\u8868\u60C5\u6765\u6E90", hint: "QQ \u8868\u60C5\u5E93\u5305\u542B\u8BE5\u8D26\u53F7\u7684\u6536\u85CF\u8868\u60C5\u548C\u7CFB\u7EDF\u8868\u60C5\uFF1B\u6CA1\u6709\u5339\u914D\u65F6\u4E0D\u6DF7\u5165\u5185\u7F6E\u5E93\u3002\u4E5F\u53EF\u660E\u786E\u5207\u6362\u5230\u4F19\u4F34\u9ED8\u8BA4\u5E93\u3002", children: _jsxs("select", { value: policy.stickerSource, disabled: busy, onChange: e => change({ stickerSource: e.target.value }), children: [_jsx("option", { value: "channel", children: "QQ \u6536\u85CF\u4E0E\u7CFB\u7EDF\u8868\u60C5\uFF08\u63A8\u8350\uFF09" }), _jsx("option", { value: "default", children: "\u4F7F\u7528\u4F19\u4F34\u9ED8\u8BA4\u8868\u60C5\u5E93" })] }) }), _jsx(Toggle, { title: "QQ \u7CFB\u7EDF\u8868\u60C5", detail: "\u5141\u8BB8\u4F19\u4F34\u8C03\u7528 QQ \u539F\u751F\u8868\u60C5\uFF0C\u4E5F\u53EF\u5728\u300C\u53D1\u9001\u6D88\u606F\u300D\u4E2D\u6D4F\u89C8\u548C\u9009\u62E9\u3002", value: policy.facesEnabled, disabled: busy, onChange: v => change({ facesEnabled: v }) }), _jsx(Toggle, { title: "\u56FE\u7247\u4E0E\u8868\u60C5\u5305", detail: "\u5141\u8BB8\u53D1\u9001\u4F19\u4F34\u751F\u6210\u7684\u56FE\u7247\u548C\u4EBA\u683C\u914D\u7F6E\u4E2D\u7684\u8868\u60C5\u5305\u3002", value: policy.imagesEnabled, disabled: busy, onChange: v => change({ imagesEnabled: v }) }), entry('send', '预览并选择系统表情,再发送给指定接收人'), _jsx("p", { className: "dsh-partner-qq-hint", children: "\u8868\u60C5\u5C5E\u4E8E\u804A\u5929\u56DE\u590D\u80FD\u529B\uFF0C\u672A\u5F52\u5C5E\u8D26\u53F7\u4E5F\u53EF\u4F7F\u7528\u3002\u5206\u6BB5\u548C\u8868\u60C5\u4F7F\u7528\u4E60\u60EF\u5728\u300C\u8EAB\u4EFD \u2192 \u89D2\u8272\u804A\u5929 \u2192 \u804A\u5929\u65B9\u5F0F\u300D\u8BBE\u7F6E\u3002\u8FD9\u91CC\u63A7\u5236 QQ \u6E20\u9053\u80FD\u5426\u53D1\u9001\uFF0C\u4E0D\u5F3A\u5236\u6BCF\u6B21\u56DE\u590D\u9644\u5E26\u8868\u60C5\u3002" })] }) : page === 'access' ? _jsxs("div", { className: "dsh-partner-qq-pane", children: [_jsx(QqIdentityBindingEditor, { value: policy.identityBinding, disabled: busy, pairings: owned, onChange: identityBinding => change({ identityBinding }) }), _jsx("div", { className: "dsh-partner-qq-divider" }), _jsx("strong", { children: "\u8054\u7CFB\u4EBA\u6388\u6743" }), _jsx("p", { className: "dsh-partner-qq-hint", children: "\u79C1\u804A\u59CB\u7EC8\u9700\u8981\u8D26\u53F7\u5BA1\u6279\uFF1B\u767D\u540D\u5355\u7FA4\u653E\u884C\u6240\u6709\u6210\u5458\uFF0C\u5176\u4ED6\u5DF2\u63A5\u5165\u7FA4\u9700\u8981\u5BA1\u6279\u53D1\u8A00\u8D26\u53F7\u3002\u79C1\u804A\u4E0E\u5404\u7FA4\u7684\u8D26\u53F7\u5BA1\u6279\u5206\u522B\u8BB0\u5F55\uFF0C\u4E0D\u4E92\u76F8\u7EE7\u627F\uFF1B\u660E\u786E\u5C4F\u853D\u7684\u8D26\u53F7\u4ECD\u4E0D\u56DE\u590D\u3002\u5F52\u5C5E\u8D26\u53F7\u51B3\u5B9A\u5173\u7CFB\u4E0E\u79C1\u6709\u80FD\u529B\uFF0C\u4E0D\u66FF\u4EE3\u804A\u5929\u8BB8\u53EF\u3002" }), !owned.length && _jsx("p", { children: "\u6682\u65E0\u5BA1\u6279\u8BF7\u6C42\u3002\u79C1\u804A\u6216\u975E\u767D\u540D\u5355\u7684\u5DF2\u63A5\u5165\u7FA4\u9996\u6B21\u89E6\u53D1\u65F6\u4F1A\u751F\u6210\u8BF7\u6C42\uFF1B\u767D\u540D\u5355\u7FA4\u65E0\u9700\u9010\u4EBA\u5BA1\u6279\u3002" }), _jsx("div", { className: "dsh-partner-qq-options", children: owned.map(p => _jsxs("div", { className: "dsh-partner-qq-person", children: [_jsxs("span", { children: [_jsx("strong", { children: p.displayName }), _jsx("small", { children: qqGroupPeer(p.userId) ? (p.status === 'blocked' ? '群内已屏蔽' : groupWhite(p.userId) ? '群白名单已放行' : p.status === 'approved' ? '群内账号已批准' : '群内账号待批准') : p.status === 'approved' ? '私聊已批准' : p.status === 'pending' ? '私聊待批准' : '私聊已阻止' }), !groupWhite(p.userId) && p.status === 'pending' && p.pairingCode && _jsx("code", { children: p.pairingCode })] }), _jsx("button", { disabled: busy, onClick: () => void run(async () => { await api(`/pairings/${p.id}/status`, { method: 'POST', body: JSON.stringify({ status: (groupWhite(p.userId) ? p.status !== 'blocked' : p.status === 'approved') ? 'blocked' : 'approved' }) }); await onChanged(); }), children: groupWhite(p.userId) ? (p.status === 'blocked' ? '解除屏蔽' : '屏蔽') : (p.status === 'approved' ? '撤销' : '批准') })] }, p.id)) })] }) : _jsxs("div", { className: "dsh-partner-qq-pane", children: [_jsx(Field, { label: "\u63A5\u6536\u4EBA", hint: "\u53EA\u5217\u51FA\u5DF2\u6388\u6743\u7684\u79C1\u804A\u597D\u53CB\u548C\u7FA4\u6210\u5458\uFF1B\u7FA4\u6D88\u606F\u4F1A\u53D1\u5230\u5BF9\u5E94\u7684\u7FA4\u3002", children: _jsxs("select", { value: userId, disabled: busy, onChange: e => setUserId(e.target.value), children: [_jsx("option", { value: "", children: "\u8BF7\u9009\u62E9\u63A5\u6536\u4EBA" }), approved.map(p => _jsx("option", { value: p.userId, children: p.displayName }, p.id))] }) }), _jsxs("div", { className: "dsh-partner-qq-segments", role: "group", "aria-label": "\u53D1\u9001\u5185\u5BB9\u7C7B\u578B", children: [_jsx("button", { disabled: busy, "aria-pressed": mode === 'text', onClick: () => setMode('text'), children: "\u6587\u5B57" }), _jsx("button", { disabled: busy, "aria-pressed": mode === 'face', onClick: () => { setMode('face'); if (!faces.length)
47
+ return _jsxs("div", { className: "dsh-partner-qq-settings", "aria-busy": busy, children: [page !== 'home' && _jsxs("nav", { className: "dsh-partner-qq-breadcrumb", "aria-label": "QQ \u8BBE\u7F6E\u5BFC\u822A", children: [_jsxs("button", { type: "button", disabled: busy, onClick: () => go((page === 'groups' || page === 'autonomy') ? 'group' : 'home'), children: ["\u2039 ", (page === 'groups' || page === 'autonomy') ? '群聊回复' : 'QQ 设置'] }), _jsx("span", { "aria-hidden": "true", children: "/" }), _jsx("strong", { children: titles[page] })] }), page === 'home' ? _jsxs(_Fragment, { children: [_jsxs("div", { className: "dsh-partner-qq-account", children: [_jsxs("div", { children: [_jsx("small", { children: "QQ \u8D26\u53F7" }), _jsx("strong", { children: channel.accountId }), _jsx("span", { children: "SnowLuma \u00B7 \u6B63\u5411 WebSocket" })] }), _jsx(ChannelStatus, { channel: channel })] }), _jsx(QqConnectionGuide, {}), _jsx("div", { className: "dsh-partner-qq-section-label", children: "\u8FDE\u63A5" }), entry('connection', '管理服务器、凭据与连接状态'), _jsx("div", { className: "dsh-partner-qq-section-label", children: "\u804A\u5929\u56DE\u590D \u00B7 \u7FA4\u767D\u540D\u5355\u4E0E\u8D26\u53F7\u5BA1\u6279" }), entry('private', '好友私聊与配对授权', policy.privateReplies ? '开启' : '关闭'), entry('group', '选择群组,设置何时回复', policy.groupReplies ? `${policy.groupIds.length} 个群` : '关闭'), entry('sessions', '独立聊天,按需接入主会话', `${policy.mainSessionPeers.length} 个共用`), entry('media', 'QQ 原生表情、收藏与默认库'), entry('chat', '消息表情回应与当前群信息', `${policy.enabledActions.filter(id => QQ_PUBLIC_SCOPED_ACTIONS.has(id)).length} 项开启`), entry('voice', 'QQ 自带音色;通用服务在外层 TTS 中配置', policy.replyVoiceEnabled ? '开启' : '关闭'), _jsx("div", { className: "dsh-partner-qq-section-label", children: "\u79C1\u6709\u80FD\u529B \u00B7 \u5F52\u5C5E\u8D26\u53F7\u4E0E\u7CFB\u7EDF\u81EA\u4E3B\u6267\u884C" }), entry('capabilities', 'QQ 空间、资料与群管理', policy.autonomousActions ? `${policy.enabledActions.filter(id => !QQ_PUBLIC_CHAT_ACTIONS.has(id)).length} 项开启` : '关闭'), _jsx("div", { className: "dsh-partner-qq-section-label", children: "\u7BA1\u7406\u4E0E\u64CD\u4F5C" }), entry('access', '归属账号、关系与能力范围', `${owned.filter(p => p.status === 'pending').length} 待批准`), entry('send', '选择已授权接收人,发送文字或表情')] }) : page === 'chat' ? _jsxs("div", { className: "dsh-partner-qq-pane", children: [_jsx("p", { className: "dsh-partner-qq-hint", children: "\u5DF2\u83B7\u804A\u5929\u8BB8\u53EF\u7684\u8054\u7CFB\u4EBA\u548C\u7FA4\u6210\u5458\u90FD\u53EF\u4F7F\u7528\u5F00\u542F\u7684\u64CD\u4F5C\uFF0C\u4E0D\u4F9D\u8D56\u79C1\u6709\u80FD\u529B\u603B\u5F00\u5173\u3002\u8868\u60C5\u56DE\u5E94\u662F\u9644\u5728\u4E00\u6761\u6D88\u606F\u65C1\u7684\u5C0F\u8868\u60C5\uFF1B\u7FA4\u4FE1\u606F\u67E5\u8BE2\u4EC5\u9650\u5F53\u524D\u7FA4\uFF0C\u4E0D\u5141\u8BB8\u67E5\u770B\u5176\u4ED6\u7FA4\u6216\u79C1\u804A\u3002\u5F00\u542F\u540E\u7531\u4F19\u4F34\u6309\u573A\u666F\u51B3\u5B9A\u662F\u5426\u4F7F\u7528\u3002" }), _jsx("div", { className: "dsh-partner-qq-capabilities", children: QQ_ACTIONS.filter(a => QQ_PUBLIC_SCOPED_ACTIONS.has(a.id)).map(a => _jsxs("label", { className: "dsh-partner-qq-capability", children: [_jsx("input", { type: "checkbox", checked: policy.enabledActions.includes(a.id), disabled: busy, onChange: e => change({ enabledActions: e.target.checked ? [...policy.enabledActions, a.id] : policy.enabledActions.filter(id => id !== a.id) }) }), _jsxs("span", { children: [_jsx("strong", { children: a.title }), _jsx("small", { children: a.id === 'set_msg_emoji_like' ? '为当前会话的消息添加或取消表情回应' : a.category === 'groups' ? '读取当前群的资料,帮助识别群友' : '查看当前会话消息的表情回应' })] })] }, a.id)) })] }) : page === 'voice' ? _jsx(QqVoiceReplySettings, { channel: channel, policy: policy, change: change, busy: busy }) : page === 'capabilities' ? _jsx(QqCapabilitySettings, { channel: channel, policy: policy, change: change, busy: busy }) : page === 'connection' ? _jsxs("div", { className: "dsh-partner-qq-pane", children: [_jsx(QqConnectionGuide, {}), _jsx("p", { className: "dsh-partner-qq-hint", children: "\u4FEE\u6539\u8FDE\u63A5\u65F6\u4F1A\u6838\u5BF9 QQ \u8D26\u53F7\uFF0C\u4FDD\u7559\u5DF2\u6709\u6388\u6743\u3002" }), _jsx(Field, { label: "\u6B63\u5411 WebSocket \u5730\u5740", children: _jsx("input", { value: url, onChange: e => setUrl(e.target.value), disabled: busy, placeholder: "ws://snowluma:3001" }) }), _jsx(Field, { label: "WS Access Token", hint: "\u7559\u7A7A\u4FDD\u7559\u5DF2\u4FDD\u5B58\u4EE4\u724C\uFF1B\u4E0D\u4F1A\u663E\u793A\u539F\u4EE4\u724C\u3002", children: _jsx("input", { type: "password", autoComplete: "new-password", value: token, onChange: e => setToken(e.target.value), disabled: busy }) }), _jsxs("div", { className: "dsh-partner-qq-actions", children: [_jsx("button", { disabled: busy || !url, onClick: () => void run(async () => { await post('connection', { baseUrl: url, botToken: token, testOnly: true, expectedUpdatedAt: channel.updatedAt }); }, '连接测试通过'), children: "\u6D4B\u8BD5\u8FDE\u63A5" }), _jsx("button", { className: "is-primary", disabled: busy || !url, onClick: () => void run(async () => { await post('connection', { baseUrl: url, botToken: token, testOnly: false, expectedUpdatedAt: channel.updatedAt }); setToken(''); await onChanged(); }, '连接已保存'), children: "\u4FDD\u5B58\u8FDE\u63A5" })] }), _jsx("div", { className: "dsh-partner-qq-divider" }), _jsxs("div", { className: "dsh-partner-qq-actions", children: [_jsx("button", { disabled: busy, onClick: () => void run(async () => { await api(`/channels/${channel.id}/enabled`, { method: 'POST', body: JSON.stringify({ enabled: !channel.enabled }) }); await onChanged(); }), children: channel.enabled ? '停用渠道' : '启用渠道' }), channel.enabled && _jsx("button", { disabled: busy, onClick: () => void run(async () => { await api(`/channels/${channel.id}/enabled`, { method: 'POST', body: JSON.stringify({ enabled: true }) }); await onChanged(); }), children: "\u91CD\u65B0\u8FDE\u63A5" })] }), _jsxs("details", { className: "dsh-partner-qq-advanced", children: [_jsx("summary", { children: "\u79FB\u9664\u6E20\u9053" }), _jsx("p", { children: "\u79FB\u9664\u8FDE\u63A5\u3001\u51ED\u636E\u548C\u8054\u7CFB\u4EBA\u6388\u6743\u3002" }), _jsx("button", { disabled: busy, onClick: () => confirmDelete ? void run(async () => { await api(`/channels/${channel.id}`, { method: 'DELETE' }); await onChanged(); onDeleted(); }) : setConfirmDelete(true), children: confirmDelete ? '确认移除 QQ 渠道' : '移除渠道' })] })] }) : page === 'private' ? _jsxs("div", { className: "dsh-partner-qq-pane", children: [_jsx(Toggle, { title: "\u79C1\u804A\u56DE\u590D", detail: "\u5141\u8BB8\u56DE\u590D\u5DF2\u6279\u51C6\u7684\u597D\u53CB\u79C1\u804A\uFF0C\u4E5F\u7528\u4E8E\u79C1\u804A\u901A\u77E5\u3002", value: policy.privateReplies, disabled: busy, onChange: v => change({ privateReplies: v }) }), _jsx("p", { className: "dsh-partner-qq-hint", children: "\u8BBF\u95EE\u8BB8\u53EF\u53EA\u5141\u8BB8\u804A\u5929\uFF0C\u4E0D\u4EE3\u8868\u6388\u4E88\u79C1\u6709\u80FD\u529B\u3002\u65B0\u597D\u53CB\u53D1\u6D88\u606F\u540E\u4F1A\u751F\u6210\u914D\u5BF9\u8BF7\u6C42\u3002\u8BF7\u5728\u300C\u8BBF\u95EE\u6743\u9650\u300D\u6838\u5BF9\u914D\u5BF9\u7801\u540E\u6279\u51C6\uFF1B\u7FA4\u4E34\u65F6\u4F1A\u8BDD\u4E0D\u4F5C\u4E3A\u597D\u53CB\u79C1\u804A\u5904\u7406\u3002" }), entry('access', '查看并管理已批准联系人')] }) : page === 'group' ? _jsxs("div", { className: "dsh-partner-qq-pane", children: [_jsx(Toggle, { title: "\u7FA4\u804A\u56DE\u590D", detail: "\u4EC5\u63A5\u5165\u9009\u4E2D\u7684\u7FA4\u3002\u767D\u540D\u5355\u7FA4\u653E\u884C\u6240\u6709\u6210\u5458\uFF1B\u5176\u4ED6\u7FA4\u9700\u8981\u5BA1\u6279\u53D1\u8A00\u8D26\u53F7\u3002\u79C1\u804A\u59CB\u7EC8\u5355\u72EC\u5BA1\u6279\u3002", value: policy.groupReplies, disabled: busy, onChange: v => change({ groupReplies: v }) }), policy.groupReplies && _jsxs(_Fragment, { children: [entry('groups', '从机器人已加入的群中选择', `${policy.groupIds.length} 个群`), entry('autonomy', '不必 @,由伙伴判断是否接话', `${policy.autonomousGroupIds.length} 个群`), _jsx(Field, { label: "\u5176\u4ED6\u7FA4\u4F55\u65F6\u56DE\u590D", children: _jsxs("select", { disabled: busy, value: policy.groupTrigger, onChange: e => change({ groupTrigger: e.target.value }), children: [_jsx("option", { value: "mention", children: "\u4EC5\u88AB @ \u65F6\u56DE\u590D\uFF08\u63A8\u8350\uFF09" }), _jsx("option", { value: "all", children: "\u56DE\u590D\u7FA4\u5185\u6BCF\u6761\u6D88\u606F" })] }) }), _jsx(Toggle, { title: "\u56DE\u590D\u65F6 @ \u53D1\u8A00\u4EBA", detail: "\u591A\u4EBA\u540C\u65F6\u804A\u5929\u65F6\uFF0C\u6807\u660E\u8FD9\u6761\u56DE\u590D\u5BF9\u5E94\u7684\u6210\u5458\u3002", value: policy.mentionSender, disabled: busy, onChange: v => change({ mentionSender: v }) })] }), _jsx("p", { className: "dsh-partner-qq-hint", children: "\u9ED8\u8BA4\u6BCF\u4E2A\u7FA4\u3001\u6BCF\u4F4D\u79C1\u804A\u7528\u6237\u5404\u7528\u4E00\u4E2A\u4F1A\u8BDD\uFF1B\u5728\u300C\u4F1A\u8BDD\u4E0E\u8BB0\u5FC6\u300D\u9009\u62E9\u4F7F\u7528\u4E3B\u4F1A\u8BDD\u7684\u5BF9\u8C61\u3002\u957F\u671F\u8BB0\u5FC6\u6CBF\u7528\u8BE5\u4F19\u4F34\u3002\u767D\u540D\u5355\u7FA4\u65E0\u9700\u9010\u4EBA\u5BA1\u6279\uFF1B\u5176\u4ED6\u5DF2\u63A5\u5165\u7FA4\u6309\u53D1\u8A00\u8D26\u53F7\u5BA1\u6279\u3002\u7FA4\u5185\u8BB8\u53EF\u4E0D\u5F00\u653E\u79C1\u804A\uFF0C\u81EA\u4E3B\u63A5\u8BDD\u4E0D\u4F1A\u589E\u52A0\u5DE5\u5177\u6743\u9650\u3002" })] }) : page === 'sessions' ? _jsxs("div", { className: "dsh-partner-qq-pane", children: [_jsx("p", { className: "dsh-partner-qq-hint", children: "\u9ED8\u8BA4\u6BCF\u4E2A\u7FA4\u3001\u6BCF\u4F4D\u79C1\u804A\u7528\u6237\u5404\u6709\u72EC\u7ACB\u4F1A\u8BDD\uFF0C\u540D\u79F0\u4F7F\u7528\u7FA4\u540D\u6216\u8054\u7CFB\u4EBA\u540D\u3002\u52FE\u9009\u7684\u5BF9\u8C61\u4F1A\u4E0E\u672C\u5730\u804A\u5929\u5171\u7528\u4E3B\u4F1A\u8BDD\uFF0C\u4E92\u76F8\u53EF\u89C1\u8BE5\u4F1A\u8BDD\u7684\u4E0A\u4E0B\u6587\u3002" }), _jsxs("div", { className: "dsh-partner-qq-actions", children: [_jsxs("span", { children: ["\u4F7F\u7528\u4E3B\u4F1A\u8BDD\uFF1A", policy.mainSessionPeers.length, " \u4E2A\u5BF9\u8C61"] }), _jsx("button", { disabled: busy, onClick: () => void loadPeers(), children: "\u8BFB\u53D6\u597D\u53CB\u4E0E\u7FA4" })] }), _jsxs("div", { className: "dsh-partner-qq-segments", role: "group", "aria-label": "\u4E3B\u4F1A\u8BDD\u5BF9\u8C61\u7C7B\u578B", children: [_jsx("button", { "aria-pressed": sessionKind === 'private', onClick: () => { setSessionKind('private'); setSearch(''); }, children: "\u79C1\u804A\u7528\u6237" }), _jsx("button", { "aria-pressed": sessionKind === 'group', onClick: () => { setSessionKind('group'); setSearch(''); }, children: "\u7FA4\u804A" })] }), _jsx(Field, { label: "\u641C\u7D22\u540D\u79F0\u6216\u53F7\u7801", children: _jsx("input", { value: search, onChange: e => setSearch(e.target.value) }) }), _jsx("div", { className: "dsh-partner-qq-options", children: [...new Map([...(sessionKind === 'group' ? groups : friends), ...(sessionKind === 'group' ? policy.groupIds.map(id => ({ id, name: '群 ' + id })) : owned.filter(p => !p.userId.startsWith('group:')).map(p => ({ id: p.userId, name: p.displayName }))), ...policy.mainSessionPeers.filter(p => p.startsWith(sessionKind + ':')).map(p => ({ id: p.split(':')[1], name: p.split(':')[1] }))].reverse().map(p => [p.id, p])).values()].filter(p => (p.name + p.id).includes(search)).map(p => { const key = `${sessionKind}:${p.id}`; return _jsxs("label", { children: [_jsx("input", { type: "checkbox", checked: policy.mainSessionPeers.includes(key), disabled: busy, onChange: e => change({ mainSessionPeers: e.target.checked ? [...policy.mainSessionPeers, key] : policy.mainSessionPeers.filter(k => k !== key) }) }), _jsxs("span", { children: [_jsx("strong", { children: p.name }), _jsxs("small", { children: [p.id, " \u00B7 ", policy.mainSessionPeers.includes(key) ? '使用主会话' : '独立会话'] })] })] }, key); }) }), _jsx("p", { className: "dsh-partner-qq-hint", children: "\u6CA1\u6709\u627E\u5230\u5BF9\u8C61\u65F6\uFF0C\u70B9\u51FB\u300C\u8BFB\u53D6\u597D\u53CB\u4E0E\u7FA4\u300D\u3002\u4F1A\u8BDD\u9009\u62E9\u4E0D\u6388\u4E88\u56DE\u590D\u6743\u9650\uFF1B\u7FA4\u804A\u9700\u8981\u5DF2\u63A5\u5165\uFF0C\u5E76\u6EE1\u8DB3\u7FA4\u767D\u540D\u5355\u6216\u6210\u5458\u5BA1\u6279\uFF1B\u79C1\u804A\u9700\u8981\u5355\u72EC\u5F00\u542F\u5E76\u6279\u51C6\u8054\u7CFB\u4EBA\u3002" }), _jsx("div", { className: "dsh-partner-qq-divider" }), _jsx("strong", { children: "\u957F\u671F\u8BB0\u5FC6\u5171\u7528" }), _jsx("p", { className: "dsh-partner-qq-hint", children: "\u542F\u7528\u8BB0\u5FC6\u65F6\uFF0C\u72EC\u7ACB\u4F1A\u8BDD\u4E5F\u80FD\u56DE\u5FC6\u8FD9\u4E2A\u4F19\u4F34\u5DF2\u6574\u7406\u7684\u957F\u671F\u8BB0\u5FC6\uFF0C\u5F7C\u6B64\u4E0D\u4F1A\u62FC\u63A5\u804A\u5929\u539F\u6587\u3002\u9700\u8981\u5B8C\u5168\u9694\u79BB\u8D44\u6599\u65F6\uFF0C\u8BF7\u4F7F\u7528\u4E0D\u540C\u4F19\u4F34\u3002" }), _jsx("p", { className: "dsh-partner-qq-hint", children: "\u4FDD\u5B58\u540E\u4ECE\u540E\u7EED\u6D88\u606F\u5F00\u59CB\u5207\u6362\uFF0C\u5386\u53F2\u8BB0\u5F55\u4FDD\u7559\u3002\u53D6\u6D88\u52FE\u9009\u4F1A\u63A5\u56DE\u539F\u72EC\u7ACB\u4F1A\u8BDD\uFF1B\u9996\u6B21\u4F7F\u7528\u624D\u4F1A\u65B0\u5EFA\u3002" })] }) : page === 'autonomy' ? _jsxs("div", { className: "dsh-partner-qq-pane", children: [_jsx("p", { className: "dsh-partner-qq-hint", children: "\u767D\u540D\u5355\u4E2D\u7684\u7FA4\u4F1A\u63A5\u6536\u666E\u901A\u7FA4\u6D88\u606F\uFF0C\u4E0D\u7528 @\u3002\u7ED3\u5408\u5BF9\u8BDD\u5BF9\u8C61\u548C\u8FD1\u671F\u4EA4\u6D41\u63A5\u8BDD\uFF1B\u4E0D\u660E\u786E\u7684\u65B0\u6D88\u606F\u7531\u672C\u5730\u8BED\u4E49\u8F85\u52A9\u5224\u65AD\uFF0C\u6B63\u5E38\u804A\u5929\u4E0D\u4F1A\u9010\u6761\u62BD\u7B7E\u3002" }), _jsx("div", { className: "dsh-partner-qq-options", children: policy.groupIds.map(id => _jsxs("label", { children: [_jsx("input", { type: "checkbox", checked: policy.autonomousGroupIds.includes(id), disabled: busy, onChange: e => change({ autonomousGroupIds: e.target.checked ? [...policy.autonomousGroupIds, id] : policy.autonomousGroupIds.filter(g => g !== id) }) }), _jsxs("span", { children: [_jsx("strong", { children: groups.find(g => g.id === id)?.name ?? '群 ' + id }), _jsx("small", { children: id })] })] }, id)) }), !policy.groupIds.length && entry('groups', '先选择允许接入的群'), _jsx("p", { className: "dsh-partner-qq-hint", children: "\u767D\u540D\u5355\u7FA4\u5185\u6240\u6709\u6210\u5458\u7684\u6D88\u606F\u90FD\u4F1A\u8FDB\u5165\u63A5\u8BDD\u5224\u65AD\uFF0C\u65E0\u9700\u9010\u4EBA\u914D\u5BF9\u3002\u4F19\u4F34\u51B3\u5B9A\u662F\u5426\u63A5\u8BDD\uFF0C\u4E0D\u4FDD\u8BC1\u6BCF\u6761\u5FC5\u56DE\uFF1B\u660E\u786E\u5C4F\u853D\u7684\u6210\u5458\u9664\u5916\u3002\u7FA4\u5185\u8BB8\u53EF\u4E0D\u5F00\u653E\u79C1\u804A\uFF0C\u4E5F\u4E0D\u6388\u4E88\u79C1\u6709\u5DE5\u5177\u6743\u9650\u3002" })] }) : page === 'groups' ? _jsxs("div", { className: "dsh-partner-qq-pane", children: [_jsxs("div", { className: "dsh-partner-qq-actions", children: [_jsxs("span", { children: ["\u5DF2\u9009\u62E9 ", policy.groupIds.length, " \u4E2A\u7FA4"] }), _jsx("button", { disabled: busy, onClick: () => void loadGroups(), children: groupsLoaded ? '刷新群列表' : '读取已加入的群' })] }), _jsx(Field, { label: "\u641C\u7D22\u7FA4\u540D\u79F0\u6216\u7FA4\u53F7", children: _jsx("input", { value: search, onChange: e => setSearch(e.target.value) }) }), _jsxs("div", { className: "dsh-partner-qq-options", children: [groups.filter(g => (g.name + g.id).includes(search)).map(g => _jsxs("label", { children: [_jsx("input", { type: "checkbox", disabled: busy, checked: policy.groupIds.includes(g.id), onChange: e => change({ groupIds: e.target.checked ? [...policy.groupIds, g.id] : policy.groupIds.filter(id => id !== g.id), autonomousGroupIds: e.target.checked ? policy.autonomousGroupIds : policy.autonomousGroupIds.filter(id => id !== g.id), replyVoiceGroupId: !e.target.checked && policy.replyVoiceGroupId === g.id ? '' : (policy.replyVoiceGroupId ?? '') }) }), _jsxs("span", { children: [_jsx("strong", { children: g.name }), _jsx("small", { children: g.id })] })] }, g.id)), policy.groupIds.filter(id => !groups.some(g => g.id === id)).map(id => _jsxs("label", { children: [_jsx("input", { type: "checkbox", checked: true, disabled: busy, onChange: () => change({ groupIds: policy.groupIds.filter(g => g !== id), autonomousGroupIds: policy.autonomousGroupIds.filter(g => g !== id), replyVoiceGroupId: policy.replyVoiceGroupId === id ? '' : (policy.replyVoiceGroupId ?? '') }) }), _jsxs("span", { children: [_jsx("strong", { children: "\u5DF2\u9009\u62E9\u7684\u7FA4" }), _jsx("small", { children: id })] })] }, id))] }), groupsLoaded && !groups.length && _jsx("p", { children: "\u5F53\u524D\u8D26\u53F7\u6CA1\u6709\u53EF\u9009\u62E9\u7684\u7FA4\u3002" })] }) : page === 'media' ? _jsxs("div", { className: "dsh-partner-qq-pane", children: [_jsx("p", { className: "dsh-partner-qq-hint", children: "\u6536\u85CF\u548C\u8BED\u97F3\u56DE\u590D\u5C5E\u4E8E\u516C\u5F00\u804A\u5929\u80FD\u529B\uFF0C\u5DF2\u6279\u51C6\u7684\u79C1\u804A\u8054\u7CFB\u4EBA\u548C\u53EF\u56DE\u590D\u7FA4\u6210\u5458\u5747\u53EF\u4F7F\u7528\uFF1B\u4E0D\u4F9D\u8D56\u5F52\u5C5E\u8D26\u53F7\u6216\u79C1\u6709\u80FD\u529B\u603B\u5F00\u5173\u3002\u4E0B\u9762\u7684\u5F00\u5173\u4FDD\u5B58\u540E\u751F\u6548\u3002" }), [['fetch_custom_face_detail', '查看收藏表情'], ['add_custom_face', '收藏收到的表情'], ['modify_custom_face', '备注收藏表情'], ['move_custom_face_to_front', '置顶喜欢的表情'], ['delete_custom_face', '删除不再需要的表情']].map(([id, title]) => _jsx(Toggle, { title: title, detail: "\u5141\u8BB8\u4F19\u4F34\u5728\u5F53\u524D QQ \u6E20\u9053\u6309\u4EBA\u683C\u548C\u573A\u666F\u81EA\u884C\u4F7F\u7528\u3002", value: policy.enabledActions.includes(id), disabled: busy, onChange: v => change({ enabledActions: v ? [...new Set([...policy.enabledActions, id])] : policy.enabledActions.filter(a => a !== id) }) }, id)), _jsx(Field, { label: "\u804A\u5929\u8868\u60C5\u6765\u6E90", hint: "QQ \u8868\u60C5\u5E93\u5305\u542B\u8BE5\u8D26\u53F7\u7684\u6536\u85CF\u8868\u60C5\u548C\u7CFB\u7EDF\u8868\u60C5\uFF1B\u6CA1\u6709\u5339\u914D\u65F6\u4E0D\u6DF7\u5165\u5185\u7F6E\u5E93\u3002\u4E5F\u53EF\u660E\u786E\u5207\u6362\u5230\u4F19\u4F34\u9ED8\u8BA4\u5E93\u3002", children: _jsxs("select", { value: policy.stickerSource, disabled: busy, onChange: e => change({ stickerSource: e.target.value }), children: [_jsx("option", { value: "channel", children: "QQ \u6536\u85CF\u4E0E\u7CFB\u7EDF\u8868\u60C5\uFF08\u63A8\u8350\uFF09" }), _jsx("option", { value: "default", children: "\u4F7F\u7528\u4F19\u4F34\u9ED8\u8BA4\u8868\u60C5\u5E93" })] }) }), _jsx(Toggle, { title: "QQ \u7CFB\u7EDF\u8868\u60C5", detail: "\u5141\u8BB8\u4F19\u4F34\u8C03\u7528 QQ \u539F\u751F\u8868\u60C5\uFF0C\u4E5F\u53EF\u5728\u300C\u53D1\u9001\u6D88\u606F\u300D\u4E2D\u6D4F\u89C8\u548C\u9009\u62E9\u3002", value: policy.facesEnabled, disabled: busy, onChange: v => change({ facesEnabled: v }) }), _jsx(Toggle, { title: "\u56FE\u7247\u4E0E\u8868\u60C5\u5305", detail: "\u5141\u8BB8\u53D1\u9001\u4F19\u4F34\u751F\u6210\u7684\u56FE\u7247\u548C\u4EBA\u683C\u914D\u7F6E\u4E2D\u7684\u8868\u60C5\u5305\u3002", value: policy.imagesEnabled, disabled: busy, onChange: v => change({ imagesEnabled: v }) }), entry('send', '预览并选择系统表情,再发送给指定接收人'), _jsx("p", { className: "dsh-partner-qq-hint", children: "\u8868\u60C5\u5C5E\u4E8E\u804A\u5929\u56DE\u590D\u80FD\u529B\uFF0C\u672A\u5F52\u5C5E\u8D26\u53F7\u4E5F\u53EF\u4F7F\u7528\u3002\u5206\u6BB5\u548C\u8868\u60C5\u4F7F\u7528\u4E60\u60EF\u5728\u300C\u8EAB\u4EFD \u2192 \u89D2\u8272\u804A\u5929 \u2192 \u804A\u5929\u65B9\u5F0F\u300D\u8BBE\u7F6E\u3002\u8FD9\u91CC\u63A7\u5236 QQ \u6E20\u9053\u80FD\u5426\u53D1\u9001\uFF0C\u4E0D\u5F3A\u5236\u6BCF\u6B21\u56DE\u590D\u9644\u5E26\u8868\u60C5\u3002" })] }) : page === 'access' ? _jsxs("div", { className: "dsh-partner-qq-pane", children: [_jsx(QqIdentityBindingEditor, { value: policy.identityBinding, disabled: busy, pairings: owned, onChange: identityBinding => change({ identityBinding }) }), _jsx("div", { className: "dsh-partner-qq-divider" }), _jsx("strong", { children: "\u8054\u7CFB\u4EBA\u6388\u6743" }), _jsx("p", { className: "dsh-partner-qq-hint", children: "\u79C1\u804A\u59CB\u7EC8\u9700\u8981\u8D26\u53F7\u5BA1\u6279\uFF1B\u767D\u540D\u5355\u7FA4\u653E\u884C\u6240\u6709\u6210\u5458\uFF0C\u5176\u4ED6\u5DF2\u63A5\u5165\u7FA4\u9700\u8981\u5BA1\u6279\u53D1\u8A00\u8D26\u53F7\u3002\u79C1\u804A\u4E0E\u5404\u7FA4\u7684\u8D26\u53F7\u5BA1\u6279\u5206\u522B\u8BB0\u5F55\uFF0C\u4E0D\u4E92\u76F8\u7EE7\u627F\uFF1B\u660E\u786E\u5C4F\u853D\u7684\u8D26\u53F7\u4ECD\u4E0D\u56DE\u590D\u3002\u5F52\u5C5E\u8D26\u53F7\u51B3\u5B9A\u5173\u7CFB\u4E0E\u79C1\u6709\u80FD\u529B\uFF0C\u4E0D\u66FF\u4EE3\u804A\u5929\u8BB8\u53EF\u3002" }), !owned.length && _jsx("p", { children: "\u6682\u65E0\u5BA1\u6279\u8BF7\u6C42\u3002\u79C1\u804A\u6216\u975E\u767D\u540D\u5355\u7684\u5DF2\u63A5\u5165\u7FA4\u9996\u6B21\u89E6\u53D1\u65F6\u4F1A\u751F\u6210\u8BF7\u6C42\uFF1B\u767D\u540D\u5355\u7FA4\u65E0\u9700\u9010\u4EBA\u5BA1\u6279\u3002" }), _jsx("div", { className: "dsh-partner-qq-options", children: owned.map(p => _jsxs("div", { className: "dsh-partner-qq-person", children: [_jsxs("span", { children: [_jsx("strong", { children: p.displayName }), _jsx("small", { children: qqGroupPeer(p.userId) ? (p.status === 'blocked' ? '群内已屏蔽' : groupWhite(p.userId) ? '群白名单已放行' : p.status === 'approved' ? '群内账号已批准' : '群内账号待批准') : p.status === 'approved' ? '私聊已批准' : p.status === 'pending' ? '私聊待批准' : '私聊已阻止' }), !groupWhite(p.userId) && p.status === 'pending' && p.pairingCode && _jsx("code", { children: p.pairingCode })] }), _jsx("button", { disabled: busy, onClick: () => void run(async () => { await api(`/pairings/${p.id}/status`, { method: 'POST', body: JSON.stringify({ status: (groupWhite(p.userId) ? p.status !== 'blocked' : p.status === 'approved') ? 'blocked' : 'approved' }) }); await onChanged(); }), children: groupWhite(p.userId) ? (p.status === 'blocked' ? '解除屏蔽' : '屏蔽') : (p.status === 'approved' ? '撤销' : '批准') })] }, p.id)) })] }) : _jsxs("div", { className: "dsh-partner-qq-pane", children: [_jsx(Field, { label: "\u63A5\u6536\u4EBA", hint: "\u53EA\u5217\u51FA\u5DF2\u6388\u6743\u7684\u79C1\u804A\u597D\u53CB\u548C\u7FA4\u6210\u5458\uFF1B\u7FA4\u6D88\u606F\u4F1A\u53D1\u5230\u5BF9\u5E94\u7684\u7FA4\u3002", children: _jsxs("select", { value: userId, disabled: busy, onChange: e => setUserId(e.target.value), children: [_jsx("option", { value: "", children: "\u8BF7\u9009\u62E9\u63A5\u6536\u4EBA" }), approved.map(p => _jsx("option", { value: p.userId, children: p.displayName }, p.id))] }) }), _jsxs("div", { className: "dsh-partner-qq-segments", role: "group", "aria-label": "\u53D1\u9001\u5185\u5BB9\u7C7B\u578B", children: [_jsx("button", { disabled: busy, "aria-pressed": mode === 'text', onClick: () => setMode('text'), children: "\u6587\u5B57" }), _jsx("button", { disabled: busy, "aria-pressed": mode === 'face', onClick: () => { setMode('face'); if (!faces.length)
48
48
  void loadFaces(); }, children: "QQ \u8868\u60C5" })] }), mode === 'text' ? _jsx(Field, { label: "\u6D88\u606F\u5185\u5BB9", children: _jsx("textarea", { rows: 4, maxLength: 3000, value: text, disabled: busy, onChange: e => setText(e.target.value), placeholder: "\u8F93\u5165\u8981\u53D1\u9001\u7684\u6587\u5B57\u2026" }) }) : _jsxs(_Fragment, { children: [_jsx(Field, { label: "\u8868\u60C5\u5206\u7C7B", children: _jsxs("select", { value: category, onChange: e => { setCategory(e.target.value); setFaceLimit(80); }, children: [_jsx("option", { value: "", children: "\u5168\u90E8\u5206\u7C7B" }), [...new Set(faces.map(f => f.category))].map(c => _jsx("option", { value: c, children: c }, c))] }) }), _jsx(Field, { label: "\u641C\u7D22\u8868\u60C5\u540D\u79F0\u6216\u7F16\u53F7", children: _jsx("input", { value: search, onChange: e => setSearch(e.target.value) }) }), _jsx("div", { className: "dsh-partner-qq-faces", "aria-label": "QQ \u8868\u60C5\u76EE\u5F55", children: filteredFaces.slice(0, faceLimit).map(f => _jsxs("button", { type: "button", "aria-pressed": face?.id === f.id, onClick: () => setFace(f), title: `${f.name} · ${f.id}`, children: [_jsxs("span", { className: "dsh-partner-qq-face-preview", children: [f.image && _jsx("img", { src: f.image, alt: "", loading: "lazy", referrerPolicy: "no-referrer", onError: e => { e.currentTarget.hidden = true; } }), _jsx("span", { className: "dsh-partner-qq-face-number", children: f.id })] }), _jsx("span", { children: f.name })] }, f.id + '-' + f.category)) }), _jsxs("div", { className: "dsh-partner-qq-catalog-info", children: [_jsxs("span", { children: [filteredFaces.length, " \u4E2A\u8868\u60C5"] }), filteredFaces.length > faceLimit && _jsx("button", { onClick: () => setFaceLimit(n => n + 80), children: "\u663E\u793A\u66F4\u591A" })] }), !faces.length && _jsx("button", { disabled: busy, onClick: () => void loadFaces(), children: "\u8BFB\u53D6 QQ \u8868\u60C5\u76EE\u5F55" }), face && _jsxs("p", { children: ["\u5DF2\u9009\u62E9\uFF1A", face.name, " \u00B7 ", face.id] })] }), _jsx("div", { className: "dsh-partner-qq-actions", children: _jsx("button", { className: "is-primary", disabled: busy || !userId || (mode === 'text' ? !text.trim() : !face) || !channel.enabled || (mode === 'face' && (face?.kind === 'custom' ? channel.qq?.imagesEnabled === false : channel.qq?.facesEnabled === false)), onClick: () => void run(async () => { await post('send', { userId, ...(mode === 'text' ? { text } : face.kind === 'custom' ? { customFaceId: face.nativeId } : { faceId: face.id }) }); if (mode === 'text')
49
49
  setText(''); }, '消息已确认发送'), children: busy ? '处理中…' : '发送到所选接收人' }) })] }), channel.lastError && page === 'home' && _jsx("p", { role: "alert", className: "dsh-partner-qq-feedback", children: channel.lastError }), feedback && _jsx("p", { role: failed ? 'alert' : 'status', className: "dsh-partner-qq-feedback", children: feedback }), dirty && _jsxs("footer", { className: "dsh-partner-qq-save", children: [_jsx("span", { children: "\u8BBE\u7F6E\u5C1A\u672A\u4FDD\u5B58" }), _jsx("button", { disabled: busy, onClick: () => setPolicy(qqSettings(channel.qq)), children: "\u8FD8\u539F" }), _jsx("button", { className: "is-primary", disabled: busy, onClick: () => void save(), children: "\u4FDD\u5B58\u8BBE\u7F6E" })] })] });
50
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"qq-channel-settings.js","sourceRoot":"","sources":["../../src/ui/qq-channel-settings.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"qq-channel-settings.js","sourceRoot":"","sources":["../../src/ui/qq-channel-settings.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type ComponentProps } from 'react';
2
+ import type { ThoughtsPanel as Settings } from './thoughts-panel.js';
3
+ export declare function ThoughtsPanel(props: ComponentProps<typeof Settings>): JSX.Element;
4
+ //# sourceMappingURL=thoughts-panel-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thoughts-panel-loader.d.ts","sourceRoot":"","sources":["../../src/ui/thoughts-panel-loader.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,cAAc,EAAC,MAAM,OAAO,CAAA;AAC5D,OAAO,KAAK,EAAC,aAAa,IAAI,QAAQ,EAAC,MAAM,qBAAqB,CAAA;AAWlE,wBAAgB,aAAa,CAAC,KAAK,EAAC,cAAc,CAAC,OAAO,QAAQ,CAAC,GAAE,GAAG,CAAC,OAAO,CAK/E"}
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useState } from 'react';
3
+ let pending;
4
+ function load() {
5
+ return pending ??= require.async('./client.activities.js').then(value => {
6
+ const module = value;
7
+ if (typeof module?.ThoughtsPanel !== 'function')
8
+ throw new Error('活动记录加载失败');
9
+ return module;
10
+ }).catch(error => { pending = undefined; throw error; });
11
+ }
12
+ export function ThoughtsPanel(props) {
13
+ const [module, setModule] = useState(), [failed, setFailed] = useState(false), [attempt, setAttempt] = useState(0);
14
+ useEffect(() => { let active = true; setFailed(false); void load().then(m => { if (active)
15
+ setModule(m); }, () => { if (active)
16
+ setFailed(true); }); return () => { active = false; }; }, [attempt]);
17
+ if (module) {
18
+ const Component = module.ThoughtsPanel;
19
+ return _jsx(Component, { ...props });
20
+ }
21
+ return failed ? _jsxs("p", { role: "alert", children: ["\u6D3B\u52A8\u8BB0\u5F55\u52A0\u8F7D\u5931\u8D25\u3002", _jsx("button", { onClick: () => setAttempt(n => n + 1), children: "\u91CD\u65B0\u52A0\u8F7D" })] }) : _jsx("p", { role: "status", children: "\u6B63\u5728\u52A0\u8F7D\u6D3B\u52A8\u8BB0\u5F55\u2026" });
22
+ }
23
+ //# sourceMappingURL=thoughts-panel-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thoughts-panel-loader.js","sourceRoot":"","sources":["../../src/ui/thoughts-panel-loader.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,SAAS,EAAC,QAAQ,EAAqB,MAAM,OAAO,CAAA;AAI5D,IAAI,OAAiC,CAAA;AACrC,SAAS,IAAI;IACZ,OAAO,OAAO,KAAG,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAA,EAAE;QACpE,MAAM,MAAM,GAAC,KAAe,CAAA;QAC5B,IAAG,OAAO,MAAM,EAAE,aAAa,KAAG,UAAU;YAAC,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAA;QACxE,OAAO,MAAM,CAAA;IACd,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAA,EAAE,GAAC,OAAO,GAAC,SAAS,CAAC,CAAA,MAAM,KAAK,CAAA,CAAA,CAAC,CAAC,CAAA;AACjD,CAAC;AACD,MAAM,UAAU,aAAa,CAAC,KAAqC;IAClE,MAAM,CAAC,MAAM,EAAC,SAAS,CAAC,GAAC,QAAQ,EAAU,EAAC,CAAC,MAAM,EAAC,SAAS,CAAC,GAAC,QAAQ,CAAC,KAAK,CAAC,EAAC,CAAC,OAAO,EAAC,UAAU,CAAC,GAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC/G,SAAS,CAAC,GAAE,EAAE,GAAC,IAAI,MAAM,GAAC,IAAI,CAAC,CAAA,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA,EAAE,GAAC,IAAG,MAAM;QAAC,SAAS,CAAC,CAAC,CAAC,CAAA,CAAA,CAAC,EAAC,GAAE,EAAE,GAAC,IAAG,MAAM;QAAC,SAAS,CAAC,IAAI,CAAC,CAAA,CAAA,CAAC,CAAC,CAAC,CAAA,OAAM,GAAE,EAAE,GAAC,MAAM,GAAC,KAAK,CAAA,CAAA,CAAC,CAAA,CAAA,CAAC,EAAC,CAAC,OAAO,CAAC,CAAC,CAAA;IAClK,IAAG,MAAM,EAAC,CAAC;QAAA,MAAM,SAAS,GAAC,MAAM,CAAC,aAAa,CAAC;QAAA,OAAO,KAAC,SAAS,OAAK,KAAK,GAAG,CAAA;IAAA,CAAC;IAC/E,OAAO,MAAM,CAAA,CAAC,CAAA,aAAG,IAAI,EAAC,OAAO,uEAAU,iBAAQ,OAAO,EAAE,GAAE,EAAE,CAAA,UAAU,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,GAAC,CAAC,CAAC,yCAAe,IAAI,CAAA,CAAC,CAAA,YAAG,IAAI,EAAC,QAAQ,uEAAc,CAAA;AACjI,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"thoughts-panel.d.ts","sourceRoot":"","sources":["../../src/ui/thoughts-panel.tsx"],"names":[],"mappings":"AAIA,wBAAgB,aAAa,CAAC,EAAC,WAAW,EAAC,EAAC;IAAC,WAAW,EAAC,MAAM,CAAA;CAAC,GAAE,GAAG,CAAC,OAAO,CAuC5E"}
1
+ {"version":3,"file":"thoughts-panel.d.ts","sourceRoot":"","sources":["../../src/ui/thoughts-panel.tsx"],"names":[],"mappings":"AAKA,wBAAgB,aAAa,CAAC,EAAC,WAAW,EAAC,EAAC;IAAC,WAAW,EAAC,MAAM,CAAA;CAAC,GAAE,GAAG,CAAC,OAAO,CAmD5E"}
@@ -1,12 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { summarizeActivities, activitySharingLabel } from '../character/activity-summary.js';
2
3
  import { useEffect, useState } from 'react';
3
4
  import { loadPartner } from '../client-api.js';
4
5
  import { errorMessage } from './workspace-components.js';
5
6
  export function ThoughtsPanel({ companionId }) {
6
- const [open, setOpen] = useState(false), [snapshot, setSnapshot] = useState(), [error, setError] = useState(''), [loading, setLoading] = useState(false), [revision, setRevision] = useState(0);
7
+ const [snapshot, setSnapshot] = useState(), [error, setError] = useState(''), [loading, setLoading] = useState(false), [revision, setRevision] = useState(0);
7
8
  useEffect(() => {
8
- if (!open)
9
- return;
10
9
  let alive = true, running = false;
11
10
  const refresh = async () => {
12
11
  if (running || document.hidden)
@@ -33,9 +32,12 @@ export function ThoughtsPanel({ companionId }) {
33
32
  void refresh();
34
33
  const timer = setInterval(() => void refresh(), 30000);
35
34
  return () => { alive = false; clearInterval(timer); };
36
- }, [companionId, open, revision]);
35
+ }, [companionId, revision]);
36
+ const [visible, setVisible] = useState(8);
37
+ useEffect(() => setVisible(8), [companionId]);
37
38
  const plan = snapshot?.companions.find(c => c.id === companionId)?.activityPlan;
38
39
  const journal = [...(snapshot?.companions.find(c => c.id === companionId)?.activityJournal ?? [])].reverse();
40
+ const stats = summarizeActivities(journal);
39
41
  const thoughts = [...(snapshot?.companions.find(c => c.id === companionId)?.thoughts ?? [])].sort((a, b) => b.updatedAt - a.updatedAt);
40
42
  const label = (id) => {
41
43
  const route = snapshot?.sessions.find(r => r.id === id);
@@ -46,6 +48,6 @@ export function ThoughtsPanel({ companionId }) {
46
48
  const group = route.userId.match(/^group:(\d+):/);
47
49
  return group ? `群 ${group[1]}` : `${snapshot?.channels.find(c => c.id === route.channelId)?.name ?? '渠道'} · ${snapshot?.pairings.find(p => p.channelId === route.channelId && p.userId === route.userId)?.displayName ?? route.userId}`;
48
50
  };
49
- return _jsxs("details", { className: "dsh-partner-memory-record", onToggle: e => setOpen(e.currentTarget.open), children: [_jsxs("summary", { children: ["\u6700\u8FD1\u5728\u60F3\u4EC0\u4E48\u3001\u505A\u4E86\u4EC0\u4E48 ", _jsx("small", { children: snapshot ? `${thoughts.filter(t => t.status === 'open').length} 个还惦记着的念头` : '见闻、想法与后续' })] }), _jsxs("div", { className: "dsh-partner-character-fields", children: [_jsx("p", { className: "dsh-partner-character-hint", children: "\u4ECE\u771F\u5B9E\u4E92\u52A8\u6216\u81EA\u4E3B\u6D3B\u52A8\u4E2D\u5F62\u6210\uFF0C\u7531\u4F19\u4F34\u51B3\u5B9A\u7EE7\u7EED\u3001\u6362\u4E2A\u4F1A\u8BDD\u804A\uFF0C\u6216\u653E\u4E0B\u3002\u5FF5\u5934\u4E0D\u662F\u5DF2\u53D1\u751F\u7684\u4E8B\u5B9E\u3002" }), plan && _jsxs("p", { className: "dsh-partner-character-hint", style: { overflowWrap: 'anywhere' }, children: ["\u4E0B\u4E00\u6B65\uFF1A", plan.intention, _jsx("br", {}), label(plan.targetRouteId), " \u00B7 ", { waiting: '等待本轮完成', pending: '等待唤起', claimed: '已唤起', cancelled: '已取消' }[plan.status], plan.status === 'pending' ? ` · ${new Date(plan.dueAt).toLocaleString()}` : ''] }), error && _jsx("p", { role: "alert", className: "dsh-partner-inline-error", children: error }), !snapshot && loading && _jsx("p", { role: "status", children: "\u6B63\u5728\u8BFB\u53D6\u2026" }), snapshot && !thoughts.length && _jsx("p", { className: "dsh-partner-character-hint", children: "\u6682\u65F6\u6CA1\u6709\u7559\u4E0B\u5FF5\u5934\uFF0C\u4E0D\u8981\u6C42\u6BCF\u6B21\u4E92\u52A8\u90FD\u4EA7\u751F\u3002" }), !!journal.length && _jsxs("details", { className: "dsh-partner-memory-record", children: [_jsx("summary", { children: "\u6700\u8FD1\u505A\u4E86\u4EC0\u4E48" }), journal.map(a => _jsxs("p", { style: { overflowWrap: 'anywhere' }, children: [_jsxs("small", { children: [new Date(a.at).toLocaleString(), " \u00B7 ", a.silent ? '安静结束' : '活动结束'] }), _jsx("br", {}), a.summary, _jsx("br", {}), _jsxs("small", { children: ["\u5DE5\u5177\u8BB0\u5F55\uFF1A", a.tools.map(t => t.name + (t.ok ? ' ✓' : ' ×')).join('、'), _jsx("br", {}), a.artifacts.join('、')] })] }, a.sessionId + ':' + a.id))] }), thoughts.map(t => _jsxs("details", { className: "dsh-partner-memory-record", children: [_jsxs("summary", { children: [_jsx("span", { style: { whiteSpace: 'normal', overflowWrap: 'anywhere' }, children: t.text }), _jsx("small", { children: t.status === 'done' ? '已完成(自主标记)' : t.status === 'dismissed' ? '已放下' : t.lastOutcome ? { considered: '已考虑', silent: '暂时安静', delivered: '已发送', failed: '未确认送达' }[t.lastOutcome] : '还惦记着' })] }), _jsxs("div", { className: "dsh-partner-character-fields", children: [_jsx("p", { children: t.why }), _jsxs("small", { children: ["\u6765\u81EA\uFF1A", t.sourceRouteIds.map(label).join('、'), " \u00B7 ", new Date(t.sourceAt).toLocaleString()] }), _jsxs("small", { children: ["\u60F3\u53BB\uFF1A", label(t.targetRouteId)] }), t.result && _jsx("p", { children: t.result }), _jsxs("details", { children: [_jsx("summary", { children: "\u6765\u6E90\u4F9D\u636E" }), _jsx("p", { style: { whiteSpace: 'pre-wrap', overflowWrap: 'anywhere' }, children: t.evidence })] })] })] }, t.id)), _jsx("button", { type: "button", disabled: loading, onClick: () => setRevision(n => n + 1), children: loading ? '读取中…' : '刷新念头' })] })] });
51
+ return _jsxs("section", { className: "dsh-partner-memory-record", "aria-label": "\u81EA\u4E3B\u6D3B\u52A8\u8BB0\u5F55", children: [_jsx("h3", { children: "\u81EA\u4E3B\u6D3B\u52A8\u8BB0\u5F55" }), _jsxs("div", { className: "dsh-partner-character-fields", children: [_jsx("p", { className: "dsh-partner-character-hint", children: "\u4ECE\u771F\u5B9E\u4E92\u52A8\u6216\u81EA\u4E3B\u6D3B\u52A8\u4E2D\u5F62\u6210\uFF0C\u7531\u4F19\u4F34\u51B3\u5B9A\u7EE7\u7EED\u3001\u6362\u4E2A\u4F1A\u8BDD\u804A\uFF0C\u6216\u653E\u4E0B\u3002\u5FF5\u5934\u4E0D\u662F\u5DF2\u53D1\u751F\u7684\u4E8B\u5B9E\u3002" }), plan && _jsxs("p", { className: "dsh-partner-character-hint", style: { overflowWrap: 'anywhere' }, children: ["\u4E0B\u4E00\u6B65\uFF1A", plan.intention, _jsx("br", {}), label(plan.targetRouteId), " \u00B7 ", { waiting: '等待本轮完成', pending: '等待唤起', claimed: '已唤起', cancelled: '已取消' }[plan.status], plan.status === 'pending' ? ` · ${new Date(plan.dueAt).toLocaleString()}` : ''] }), error && _jsx("p", { role: "alert", className: "dsh-partner-inline-error", children: error }), !snapshot && loading && _jsx("p", { role: "status", children: "\u6B63\u5728\u8BFB\u53D6\u2026" }), snapshot && !thoughts.length && _jsx("p", { className: "dsh-partner-character-hint", children: "\u6682\u65F6\u6CA1\u6709\u7559\u4E0B\u5FF5\u5934\uFF0C\u4E0D\u8981\u6C42\u6BCF\u6B21\u4E92\u52A8\u90FD\u4EA7\u751F\u3002" }), snapshot && _jsxs("p", { className: "dsh-partner-character-hint", children: ["\u6700\u8FD1\u4FDD\u7559 ", stats.total, " \u8F6E \u00B7 \u5DF2\u786E\u8BA4\u53D1\u9001 ", stats.confirmed, " \u8F6E \u00B7 \u5F85\u786E\u8BA4 ", stats.pending, " \u8F6E \u00B7 \u542B\u5931\u8D25\u64CD\u4F5C ", stats.failed, " \u8F6E", stats.unknown ? ` · 历史发送状态未知 ${stats.unknown} 轮` : '', _jsx("br", {}), "\u5404\u7C7B\u578B\u53EF\u91CD\u53E0\uFF1A", stats.categories.map(c => `${c.name} ${c.count}`).join(' · ') || '暂无操作记录', "\u3002\u4EC5\u7EDF\u8BA1\u6700\u8FD1\u4FDD\u7559\u8BB0\u5F55\uFF0C\u4E0D\u4EE3\u8868\u5168\u90E8\u5386\u53F2\u3002"] }), snapshot && !journal.length && _jsx("p", { children: "\u6682\u65F6\u6CA1\u6709\u81EA\u4E3B\u6D3B\u52A8\u8BB0\u5F55\u3002" }), _jsx("div", { "aria-label": "\u6D3B\u52A8\u65F6\u95F4\u7EBF", children: journal.slice(0, visible).map(a => _jsxs("article", { className: "dsh-partner-memory-record", style: { overflowWrap: 'anywhere' }, children: [_jsxs("small", { children: [new Date(a.at).toLocaleString(), " \u00B7 ", activitySharingLabel(a), a.tools.some(t => !t.ok) ? ' · 有操作失败' : ''] }), _jsx("p", { children: a.summary }), a.artifacts.map(path => _jsxs("p", { children: [_jsxs("small", { children: ["\u4F5C\u54C1\uFF1A", path, journal.filter(r => r.artifacts.includes(path)).length > 1 ? ` · 关联 ${journal.filter(r => r.artifacts.includes(path)).length} 轮进展` : ''] }), _jsx("button", { type: "button", onClick: () => { void navigator.clipboard.writeText(path).catch(() => setError('复制失败,请手动选择路径复制')); }, children: "\u590D\u5236\u8DEF\u5F84" })] }, path)), _jsxs("details", { children: [_jsx("summary", { children: "\u6267\u884C\u4F9D\u636E" }), _jsxs("p", { children: [a.silent ? '本轮以安静结束工具收尾;之前可能已发送。' : '本轮已结束。', "\u53D1\u9001\u72B6\u6001\u4EC5\u4F9D\u636E\u5DF2\u8BB0\u5F55\u56DE\u6267\uFF0C\u4E0D\u5C06\u5DE5\u5177\u8C03\u7528\u5F53\u4F5C\u6536\u4EF6\u6210\u529F\u3002"] }), _jsx("p", { children: a.tools.map(t => t.name + (t.ok ? ' ✓' : ' ×')).join('、') || '未记录工具操作' })] })] }, a.sessionId + ':' + a.id)) }), visible < journal.length && _jsx("button", { type: "button", onClick: () => setVisible(v => v + 8), children: "\u67E5\u770B\u66F4\u591A\u6D3B\u52A8" }), _jsxs("details", { children: [_jsxs("summary", { children: ["\u8FD8\u60E6\u8BB0\u7740\u4EC0\u4E48\uFF08", thoughts.filter(t => t.status === 'open').length, "\uFF09"] }), thoughts.map(t => _jsxs("details", { className: "dsh-partner-memory-record", children: [_jsxs("summary", { children: [_jsx("span", { style: { whiteSpace: 'normal', overflowWrap: 'anywhere' }, children: t.text }), _jsx("small", { children: t.status === 'done' ? '已完成(自主标记)' : t.status === 'dismissed' ? '已放下' : t.lastOutcome ? { considered: '已考虑', silent: '暂时安静', delivered: '已发送', failed: '未确认送达' }[t.lastOutcome] : '还惦记着' })] }), _jsxs("div", { className: "dsh-partner-character-fields", children: [_jsx("p", { children: t.why }), _jsxs("small", { children: ["\u6765\u81EA\uFF1A", t.sourceRouteIds.map(label).join('、'), " \u00B7 ", new Date(t.sourceAt).toLocaleString()] }), _jsxs("small", { children: ["\u60F3\u53BB\uFF1A", label(t.targetRouteId)] }), t.result && _jsx("p", { children: t.result }), _jsxs("details", { children: [_jsx("summary", { children: "\u6765\u6E90\u4F9D\u636E" }), _jsx("p", { style: { whiteSpace: 'pre-wrap', overflowWrap: 'anywhere' }, children: t.evidence })] })] })] }, t.id))] }), _jsx("button", { type: "button", disabled: loading, onClick: () => setRevision(n => n + 1), children: loading ? '读取中…' : '刷新活动' })] })] });
50
52
  }
51
53
  //# sourceMappingURL=thoughts-panel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"thoughts-panel.js","sourceRoot":"","sources":["../../src/ui/thoughts-panel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"thoughts-panel.js","sourceRoot":"","sources":["../../src/ui/thoughts-panel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,mBAAmB,EAAC,oBAAoB,EAAC,MAAM,kCAAkC,CAAA;AACzF,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAwB,MAAM,kBAAkB,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAExD,MAAM,UAAU,aAAa,CAAC,EAAC,WAAW,EAAsB;IAC9D,MAAM,CAAC,QAAQ,EAAC,WAAW,CAAC,GAAC,QAAQ,EAAmB,EAAC,CAAC,KAAK,EAAC,QAAQ,CAAC,GAAC,QAAQ,CAAC,EAAE,CAAC,EAAC,CAAC,OAAO,EAAC,UAAU,CAAC,GAAC,QAAQ,CAAC,KAAK,CAAC,EAAC,CAAC,QAAQ,EAAC,WAAW,CAAC,GAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC9J,SAAS,CAAC,GAAE,EAAE;QACZ,IAAI,KAAK,GAAC,IAAI,EAAC,OAAO,GAAC,KAAK,CAAA;QAC5B,MAAM,OAAO,GAAC,KAAK,IAAE,EAAE;YACrB,IAAG,OAAO,IAAE,QAAQ,CAAC,MAAM;gBAAC,OAAM;YAClC,OAAO,GAAC,IAAI,CAAC;YAAA,UAAU,CAAC,IAAI,CAAC,CAAA;YAC7B,IAAG,CAAC;gBAAA,MAAM,IAAI,GAAC,MAAM,WAAW,EAAE,CAAC;gBAAA,IAAG,KAAK,EAAC,CAAC;oBAAA,WAAW,CAAC,IAAI,CAAC,CAAC;oBAAA,QAAQ,CAAC,EAAE,CAAC,CAAA;gBAAA,CAAC;YAAA,CAAC;YAAA,OAAM,CAAC,EAAC,CAAC;gBAAA,IAAG,KAAK;oBAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;YAAA,CAAC;oBAAO,CAAC;gBAAA,OAAO,GAAC,KAAK,CAAC;gBAAA,IAAG,KAAK;oBAAC,UAAU,CAAC,KAAK,CAAC,CAAA;YAAA,CAAC;QAC5K,CAAC,CAAA;QACD,KAAK,OAAO,EAAE,CAAC;QAAA,MAAM,KAAK,GAAC,WAAW,CAAC,GAAE,EAAE,CAAA,KAAK,OAAO,EAAE,EAAC,KAAK,CAAC,CAAA;QAChE,OAAM,GAAE,EAAE,GAAC,KAAK,GAAC,KAAK,CAAC,CAAA,aAAa,CAAC,KAAK,CAAC,CAAA,CAAA,CAAC,CAAA;IAC9C,CAAC,EAAC,CAAC,WAAW,EAAC,QAAQ,CAAC,CAAC,CAAA;IACzB,MAAM,CAAC,OAAO,EAAC,UAAU,CAAC,GAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IACtC,SAAS,CAAC,GAAE,EAAE,CAAA,UAAU,CAAC,CAAC,CAAC,EAAC,CAAC,WAAW,CAAC,CAAC,CAAA;IAC1C,MAAM,IAAI,GAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,CAAC,EAAE,KAAG,WAAW,CAAC,EAAE,YAAY,CAAA;IACzE,MAAM,OAAO,GAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,CAAC,EAAE,KAAG,WAAW,CAAC,EAAE,eAAe,IAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;IACpG,MAAM,KAAK,GAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;IACxC,MAAM,QAAQ,GAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,CAAC,EAAE,KAAG,WAAW,CAAC,EAAE,QAAQ,IAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,EAAE,CAAA,CAAC,CAAC,SAAS,GAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IACzH,MAAM,KAAK,GAAC,CAAC,EAAS,EAAC,EAAE;QACvB,MAAM,KAAK,GAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,CAAC,EAAE,KAAG,EAAE,CAAC,CAAA;QACjD,IAAG,CAAC,KAAK;YAAC,OAAO,QAAQ,CAAA;QACzB,IAAG,KAAK,CAAC,IAAI,KAAG,OAAO;YAAC,OAAO,OAAO,CAAA;QACtC,MAAM,KAAK,GAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;QAC/C,OAAO,KAAK,CAAA,CAAC,CAAA,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA,CAAC,CAAA,GAAG,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,CAAC,EAAE,KAAG,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,IAAE,IAAI,MAAM,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,CAAC,SAAS,KAAG,KAAK,CAAC,SAAS,IAAE,CAAC,CAAC,MAAM,KAAG,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,IAAE,KAAK,CAAC,MAAM,EAAE,CAAA;IACrN,CAAC,CAAA;IACD,OAAO,mBAAS,SAAS,EAAC,2BAA2B,gBAAY,sCAAQ,aACvE,gEAAe,EACf,eAAK,SAAS,EAAC,8BAA8B,aAC3C,YAAG,SAAS,EAAC,4BAA4B,mRAAgD,EACxF,IAAI,IAAE,aAAG,SAAS,EAAC,4BAA4B,EAAC,KAAK,EAAE,EAAC,YAAY,EAAC,UAAU,EAAC,yCAAO,IAAI,CAAC,SAAS,EAAC,cAAK,EAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,cAAK,EAAC,OAAO,EAAC,QAAQ,EAAC,OAAO,EAAC,MAAM,EAAC,OAAO,EAAC,KAAK,EAAC,SAAS,EAAC,KAAK,EAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,KAAG,SAAS,CAAA,CAAC,CAAA,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,EAAE,CAAA,CAAC,CAAA,EAAE,IAAK,EACrS,KAAK,IAAE,YAAG,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,0BAA0B,YAAE,KAAK,GAAK,EACvE,CAAC,QAAQ,IAAE,OAAO,IAAE,YAAG,IAAI,EAAC,QAAQ,+CAAU,EAC9C,QAAQ,IAAE,CAAC,QAAQ,CAAC,MAAM,IAAE,YAAG,SAAS,EAAC,4BAA4B,yIAAyB,EAC9F,QAAQ,IAAE,aAAG,SAAS,EAAC,4BAA4B,0CAAO,KAAK,CAAC,KAAK,oDAAa,KAAK,CAAC,SAAS,wCAAW,KAAK,CAAC,OAAO,oDAAa,KAAK,CAAC,MAAM,aAAI,KAAK,CAAC,OAAO,CAAA,CAAC,CAAA,eAAe,KAAK,CAAC,OAAO,IAAI,CAAA,CAAC,CAAA,EAAE,EAAC,cAAK,gDAAQ,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA,EAAE,CAAA,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAE,QAAQ,0HAAwB,EAClT,QAAQ,IAAE,CAAC,OAAO,CAAC,MAAM,IAAE,6FAAkB,EAC9C,4BAAgB,gCAAO,YAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA,EAAE,CAAA,mBAAoC,SAAS,EAAC,2BAA2B,EAAC,KAAK,EAAE,EAAC,YAAY,EAAC,UAAU,EAAC,aACjK,4BAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,cAAc,EAAE,cAAK,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA,CAAC,CAAA,UAAU,CAAA,CAAC,CAAA,EAAE,IAAS,EAClH,sBAAI,CAAC,CAAC,OAAO,GAAK,EACjB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAA,EAAE,CAAA,wBAAc,kDAAW,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAC,CAAC,CAAA,CAAC,CAAA,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,MAAM,CAAA,CAAC,CAAA,EAAE,IAAS,EAAA,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,GAAE,EAAE,GAAC,KAAK,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAE,EAAE,CAAA,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAA,CAAA,CAAC,yCAAe,KAA/R,IAAI,CAA+R,CAAC,EACnU,8BAAS,yDAAuB,EAAA,wBAAI,CAAC,CAAC,MAAM,CAAA,CAAC,CAAA,sBAAsB,CAAA,CAAC,CAAA,QAAQ,oKAA+B,EAAA,sBAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,CAAC,IAAI,GAAC,CAAC,CAAC,CAAC,EAAE,CAAA,CAAC,CAAA,IAAI,CAAA,CAAC,CAAA,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAE,SAAS,GAAK,IAAU,KAJrH,CAAC,CAAC,SAAS,GAAC,GAAG,GAAC,CAAC,CAAC,EAAE,CAKjF,CAAC,GAAO,EACjB,OAAO,GAAC,OAAO,CAAC,MAAM,IAAE,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,GAAE,EAAE,CAAA,UAAU,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,GAAC,CAAC,CAAC,qDAAiB,EAC/F,8BAAS,4EAAiB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,CAAC,MAAM,KAAG,MAAM,CAAC,CAAC,MAAM,cAAY,EACjF,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA,EAAE,CAAA,mBAAoB,SAAS,EAAC,2BAA2B,aACxE,8BAAS,eAAM,KAAK,EAAE,EAAC,UAAU,EAAC,QAAQ,EAAC,YAAY,EAAC,UAAU,EAAC,YAAG,CAAC,CAAC,IAAI,GAAQ,EAAA,0BAAQ,CAAC,CAAC,MAAM,KAAG,MAAM,CAAA,CAAC,CAAA,WAAW,CAAA,CAAC,CAAA,CAAC,CAAC,MAAM,KAAG,WAAW,CAAA,CAAC,CAAA,KAAK,CAAA,CAAC,CAAA,CAAC,CAAC,WAAW,CAAA,CAAC,CAAA,EAAC,UAAU,EAAC,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,SAAS,EAAC,KAAK,EAAC,MAAM,EAAC,OAAO,EAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA,CAAC,CAAA,MAAM,GAAS,IAAU,EAC7Q,eAAK,SAAS,EAAC,8BAA8B,aAAC,sBAAI,CAAC,CAAC,GAAG,GAAK,EAAA,kDAAW,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,cAAK,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,cAAc,EAAE,IAAS,EAAA,kDAAW,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,IAAS,EAAC,CAAC,CAAC,MAAM,IAAE,sBAAI,CAAC,CAAC,MAAM,GAAK,EAAC,8BAAS,yDAAuB,EAAA,YAAG,KAAK,EAAE,EAAC,UAAU,EAAC,UAAU,EAAC,YAAY,EAAC,UAAU,EAAC,YAAG,CAAC,CAAC,QAAQ,GAAK,IAAU,IAAM,KAFpU,CAAC,CAAC,EAAE,CAGzB,CAAC,IACD,EACV,iBAAQ,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAE,EAAE,CAAA,WAAW,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,GAAC,CAAC,CAAC,YAAG,OAAO,CAAA,CAAC,CAAA,MAAM,CAAA,CAAC,CAAA,MAAM,GAAU,IACvG,IACE,CAAA;AACZ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type ComponentProps } from 'react';
2
+ import type { TtsSettings as Settings } from './tts-settings.js';
3
+ export declare function TtsSettings(props: ComponentProps<typeof Settings>): JSX.Element;
4
+ //# sourceMappingURL=tts-settings-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tts-settings-loader.d.ts","sourceRoot":"","sources":["../../src/ui/tts-settings-loader.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,cAAc,EAAC,MAAM,OAAO,CAAA;AAC5D,OAAO,KAAK,EAAC,WAAW,IAAI,QAAQ,EAAC,MAAM,mBAAmB,CAAA;AAW9D,wBAAgB,WAAW,CAAC,KAAK,EAAC,cAAc,CAAC,OAAO,QAAQ,CAAC,GAAE,GAAG,CAAC,OAAO,CAK7E"}
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useState } from 'react';
3
+ let pending;
4
+ function load() {
5
+ return pending ??= require.async('./client.tts.js').then(value => {
6
+ const module = value;
7
+ if (typeof module?.TtsSettings !== 'function')
8
+ throw new Error('语音模块加载失败');
9
+ return module;
10
+ }).catch(error => { pending = undefined; throw error; });
11
+ }
12
+ export function TtsSettings(props) {
13
+ const [module, setModule] = useState(), [failed, setFailed] = useState(false), [attempt, setAttempt] = useState(0);
14
+ useEffect(() => { let active = true; setFailed(false); void load().then(m => { if (active)
15
+ setModule(m); }, () => { if (active)
16
+ setFailed(true); }); return () => { active = false; }; }, [attempt]);
17
+ if (module) {
18
+ const Component = module.TtsSettings;
19
+ return _jsx(Component, { ...props });
20
+ }
21
+ return failed ? _jsxs("p", { role: "alert", children: ["\u8BED\u97F3\u6A21\u5757\u52A0\u8F7D\u5931\u8D25\u3002", _jsx("button", { onClick: () => setAttempt(n => n + 1), children: "\u91CD\u65B0\u52A0\u8F7D" })] }) : _jsx("p", { role: "status", children: "\u6B63\u5728\u52A0\u8F7D\u8BED\u97F3\u8BBE\u7F6E\u2026" });
22
+ }
23
+ //# sourceMappingURL=tts-settings-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tts-settings-loader.js","sourceRoot":"","sources":["../../src/ui/tts-settings-loader.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,SAAS,EAAC,QAAQ,EAAqB,MAAM,OAAO,CAAA;AAI5D,IAAI,OAAiC,CAAA;AACrC,SAAS,IAAI;IACZ,OAAO,OAAO,KAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAA,EAAE;QAC7D,MAAM,MAAM,GAAC,KAAe,CAAA;QAC5B,IAAG,OAAO,MAAM,EAAE,WAAW,KAAG,UAAU;YAAC,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAA;QACtE,OAAO,MAAM,CAAA;IACd,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAA,EAAE,GAAC,OAAO,GAAC,SAAS,CAAC,CAAA,MAAM,KAAK,CAAA,CAAA,CAAC,CAAC,CAAA;AACjD,CAAC;AACD,MAAM,UAAU,WAAW,CAAC,KAAqC;IAChE,MAAM,CAAC,MAAM,EAAC,SAAS,CAAC,GAAC,QAAQ,EAAU,EAAC,CAAC,MAAM,EAAC,SAAS,CAAC,GAAC,QAAQ,CAAC,KAAK,CAAC,EAAC,CAAC,OAAO,EAAC,UAAU,CAAC,GAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC/G,SAAS,CAAC,GAAE,EAAE,GAAC,IAAI,MAAM,GAAC,IAAI,CAAC,CAAA,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA,EAAE,GAAC,IAAG,MAAM;QAAC,SAAS,CAAC,CAAC,CAAC,CAAA,CAAA,CAAC,EAAC,GAAE,EAAE,GAAC,IAAG,MAAM;QAAC,SAAS,CAAC,IAAI,CAAC,CAAA,CAAA,CAAC,CAAC,CAAC,CAAA,OAAM,GAAE,EAAE,GAAC,MAAM,GAAC,KAAK,CAAA,CAAA,CAAC,CAAA,CAAA,CAAC,EAAC,CAAC,OAAO,CAAC,CAAC,CAAA;IAClK,IAAG,MAAM,EAAC,CAAC;QAAA,MAAM,SAAS,GAAC,MAAM,CAAC,WAAW,CAAC;QAAA,OAAO,KAAC,SAAS,OAAK,KAAK,GAAG,CAAA;IAAA,CAAC;IAC7E,OAAO,MAAM,CAAA,CAAC,CAAA,aAAG,IAAI,EAAC,OAAO,uEAAU,iBAAQ,OAAO,EAAE,GAAE,EAAE,CAAA,UAAU,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,GAAC,CAAC,CAAC,yCAAe,IAAI,CAAA,CAAC,CAAA,YAAG,IAAI,EAAC,QAAQ,uEAAc,CAAA;AACjI,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type ChannelView } from '../client-api.js';
2
+ export declare function TtsSettings({ companionId, channels, onChanged, onEdit }: {
3
+ companionId: string;
4
+ channels: ChannelView[];
5
+ onChanged(): Promise<void>;
6
+ onEdit(value: {
7
+ dirty: boolean;
8
+ busy: boolean;
9
+ }): void;
10
+ }): JSX.Element;
11
+ //# sourceMappingURL=tts-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tts-settings.d.ts","sourceRoot":"","sources":["../../src/ui/tts-settings.tsx"],"names":[],"mappings":"AACA,OAAO,EAAK,KAAK,WAAW,EAAC,MAAM,kBAAkB,CAAA;AAKrD,wBAAgB,WAAW,CAAC,EAAC,WAAW,EAAC,QAAQ,EAAC,SAAS,EAAC,MAAM,EAAC,EAAC;IAAC,WAAW,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,WAAW,EAAE,CAAC;IAAA,SAAS,IAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAAA,MAAM,CAAC,KAAK,EAAC;QAAC,KAAK,EAAC,OAAO,CAAC;QAAA,IAAI,EAAC,OAAO,CAAA;KAAC,GAAE,IAAI,CAAA;CAAC,GAAE,GAAG,CAAC,OAAO,CA+BrM"}
@@ -0,0 +1,63 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useEffect, useState } from 'react';
3
+ import { api } from '../client-api.js';
4
+ import { supportsChannelTts } from '../voice/domain.js';
5
+ const fresh = () => ({ name: 'BreezeBlue', provider: 'breezeblue', endpoint: 'https://api.breeze.blue', model: 'breeze-tts-2', voice: '', language: 'zh', speed: 1, format: 'wav', instructions: '', authHeader: 'Authorization', authPrefix: 'Bearer ', responseMode: 'binary', responsePath: 'audio', bodyTemplate: '{\n "text": "{{text}}",\n "voice": "{{voice}}",\n "model": "{{model}}"\n}' });
6
+ export function TtsSettings({ companionId, channels, onChanged, onEdit }) {
7
+ const [profiles, setProfiles] = useState([]), [form, setForm] = useState(), [original, setOriginal] = useState(''), [key, setKey] = useState(''), [busy, setBusy] = useState(false), [message, setMessage] = useState(''), [failed, setFailed] = useState(false), [sample, setSample] = useState('你好,这是语音试听。'), [audio, setAudio] = useState(''), [bindingEdit, setBindingEdit] = useState({ dirty: false, busy: false });
8
+ const formDirty = !!form && (JSON.stringify(form) !== original || !!key);
9
+ useEffect(() => { onEdit({ dirty: formDirty || bindingEdit.dirty, busy: busy || bindingEdit.busy }); return () => onEdit({ dirty: false, busy: false }); }, [formDirty, bindingEdit, busy, onEdit]);
10
+ const load = async () => { const r = await api(`/tts/profiles/${companionId}`); setProfiles(r.profiles); };
11
+ useEffect(() => { void load().catch(() => { setFailed(true); setMessage('语音服务读取失败,请重新打开设置'); }); }, [companionId]);
12
+ useEffect(() => () => { if (audio)
13
+ URL.revokeObjectURL(audio); }, [audio]);
14
+ const run = async (fn, done) => { if (busy)
15
+ return; setBusy(true); setMessage(''); setFailed(false); try {
16
+ await fn();
17
+ setMessage(done);
18
+ }
19
+ catch (e) {
20
+ setFailed(true);
21
+ setMessage(e instanceof Error ? e.message : '操作失败');
22
+ }
23
+ finally {
24
+ setBusy(false);
25
+ } };
26
+ const edit = (p) => { if (formDirty && !window.confirm('放弃尚未保存的服务修改?'))
27
+ return; const value = p ? { ...fresh(), ...p } : fresh(); setForm(value); setOriginal(JSON.stringify(value)); setKey(''); setAudio(''); };
28
+ const change = (name, value) => setForm(f => ({ ...f, [name]: value }));
29
+ return _jsxs("section", { className: "dsh-partner-tts", "aria-label": "\u8BED\u97F3 TTS", "aria-busy": busy, children: [_jsx("p", { className: "dsh-partner-qq-hint", children: "\u72EC\u7ACB\u4E8E\u6D88\u606F\u6E20\u9053\u7684\u8BED\u97F3\u670D\u52A1\uFF0C\u540C\u4E00\u4F19\u4F34\u7684\u591A\u4E2A\u6E20\u9053\u53EF\u5171\u7528\u3002\u5148\u6DFB\u52A0\u670D\u52A1\uFF0C\u518D\u9009\u62E9\u54EA\u4E9B\u6E20\u9053\u4F7F\u7528\uFF1B\u5BC6\u94A5\u4E0D\u4F1A\u4EA4\u7ED9\u6A21\u578B\u3002" }), _jsxs("div", { className: "dsh-partner-qq-actions", children: [_jsx("strong", { children: "\u8BED\u97F3\u670D\u52A1" }), _jsx("button", { disabled: busy, onClick: () => edit(), children: "\u6DFB\u52A0\u670D\u52A1" })] }), profiles.length === 0 && _jsx("p", { className: "dsh-partner-qq-hint", children: "\u8FD8\u6CA1\u6709\u5916\u90E8\u670D\u52A1\u3002\u6DFB\u52A0 BreezeBlue\u3001OpenAI \u517C\u5BB9\u670D\u52A1\uFF0C\u6216\u81EA\u5B9A\u4E49\u540C\u6B65 HTTP \u63A5\u53E3\u3002" }), profiles.map(p => _jsxs("div", { className: "dsh-partner-tts-service", children: [_jsxs("span", { children: [_jsx("strong", { children: p.name }), _jsxs("small", { children: [p.provider, " \u00B7 ", p.voice] })] }), _jsx("button", { disabled: busy, onClick: () => edit(p), children: "\u7F16\u8F91\u4E0E\u8BD5\u542C" })] }, p.id)), form && _jsxs("fieldset", { disabled: busy, className: "dsh-partner-tts-editor", children: [_jsx("legend", { children: form.id ? '编辑语音服务' : '添加语音服务' }), _jsxs("label", { className: "dsh-partner-qq-field", children: [_jsx("span", { children: "\u670D\u52A1\u540D\u79F0" }), _jsx("input", { value: form.name, onChange: e => change('name', e.target.value), maxLength: 80 })] }), _jsxs("label", { className: "dsh-partner-qq-field", children: [_jsx("span", { children: "\u63A5\u53E3\u7C7B\u578B" }), _jsxs("select", { value: form.provider, onChange: e => { const type = e.target.value; setForm(f => ({ ...f, provider: type, endpoint: type === 'breezeblue' ? 'https://api.breeze.blue' : type === 'openai' ? 'https://api.openai.com/v1' : '', model: type === 'breezeblue' ? 'breeze-tts-2' : type === 'openai' ? 'tts-1' : '', format: 'wav', responseMode: 'binary' })); setKey(''); }, children: [_jsx("option", { value: "breezeblue", children: "BreezeBlue" }), _jsx("option", { value: "openai", children: "OpenAI \u517C\u5BB9 TTS" }), _jsx("option", { value: "http", children: "\u81EA\u5B9A\u4E49 HTTP\uFF08\u540C\u6B65\uFF09" })] })] }), _jsxs("label", { className: "dsh-partner-qq-field", children: [_jsx("span", { children: form.provider === 'http' ? '完整 POST 接口地址' : '服务地址' }), _jsx("input", { type: "url", value: form.endpoint, onChange: e => change('endpoint', e.target.value) }), _jsx("small", { children: form.provider === 'breezeblue' ? '例如 https://api.breeze.blue,不包含 /v1。' : form.provider === 'openai' ? '例如 https://api.openai.com/v1,程序追加 /audio/speech。' : '支持直接音频或 JSON Base64 响应;异步任务和下载链接暂不支持。' })] }), _jsxs("label", { className: "dsh-partner-qq-field", children: [_jsx("span", { children: "API \u5BC6\u94A5" }), _jsx("input", { type: "password", autoComplete: "new-password", value: key, onChange: e => setKey(e.target.value), placeholder: form.credentialConfigured ? '已配置,留空保留' : '填写密钥' }), _jsx("small", { children: "\u66F4\u6362\u670D\u52A1\u5730\u5740\u65F6\u9700\u91CD\u65B0\u586B\u5199\u5BC6\u94A5\u3002\u81EA\u5EFA\u65E0\u9274\u6743 HTTP \u63A5\u53E3\u53EF\u7559\u7A7A\u3002" })] }), _jsxs("div", { className: "dsh-partner-tts-grid", children: [_jsxs("label", { className: "dsh-partner-qq-field", children: [_jsx("span", { children: "\u6A21\u578B" }), _jsx("input", { value: form.model, onChange: e => change('model', e.target.value) })] }), _jsxs("label", { className: "dsh-partner-qq-field", children: [_jsx("span", { children: "\u9ED8\u8BA4\u97F3\u8272 ID" }), _jsx("input", { value: form.voice, onChange: e => change('voice', e.target.value) })] }), _jsxs("label", { className: "dsh-partner-qq-field", children: [_jsx("span", { children: "\u8BED\u8A00" }), _jsx("input", { value: form.language, onChange: e => change('language', e.target.value) })] }), _jsxs("label", { className: "dsh-partner-qq-field", children: [_jsx("span", { children: "\u8BED\u901F" }), _jsx("input", { type: "number", min: "0.5", max: "2", step: "0.05", value: form.speed, onChange: e => change('speed', Number(e.target.value)) })] })] }), _jsxs("label", { className: "dsh-partner-qq-field", children: [_jsx("span", { children: "\u97F3\u9891\u683C\u5F0F" }), _jsxs("select", { value: form.format, onChange: e => change('format', e.target.value), children: [_jsx("option", { value: "wav", children: "WAV" }), _jsx("option", { value: "mp3", children: "MP3" })] })] }), _jsxs("label", { className: "dsh-partner-qq-field", children: [_jsx("span", { children: "\u8868\u6F14\u6307\u4EE4\uFF08\u53EF\u9009\uFF09" }), _jsx("textarea", { rows: 2, value: form.instructions, onChange: e => change('instructions', e.target.value), maxLength: 2000 }), _jsx("small", { children: "\u7559\u7A7A\u6CBF\u7528\u670D\u52A1\u9ED8\u8BA4\u3002\u4EC5\u652F\u6301\u8BE5\u53C2\u6570\u7684\u6A21\u578B\u4F1A\u751F\u6548\uFF0C\u4E0D\u6539\u53D8\u56DE\u590D\u53F0\u8BCD\u3002" })] }), form.provider === 'http' && _jsxs("details", { open: true, children: [_jsx("summary", { children: "HTTP \u63A5\u53E3\u6620\u5C04" }), _jsxs("label", { className: "dsh-partner-qq-field", children: [_jsx("span", { children: "\u9274\u6743 Header" }), _jsx("input", { value: form.authHeader, onChange: e => change('authHeader', e.target.value) })] }), _jsxs("label", { className: "dsh-partner-qq-field", children: [_jsx("span", { children: "\u5BC6\u94A5\u524D\u7F00" }), _jsx("input", { value: form.authPrefix, onChange: e => change('authPrefix', e.target.value) }), _jsx("small", { children: "\u4F8B\u5982 Bearer \u540E\u5E26\u4E00\u4E2A\u7A7A\u683C\uFF1B\u4E0D\u9700\u8981\u524D\u7F00\u65F6\u7559\u7A7A\u3002" })] }), _jsxs("label", { className: "dsh-partner-qq-field", children: [_jsx("span", { children: "JSON \u8BF7\u6C42\u6A21\u677F" }), _jsx("textarea", { rows: 6, value: form.bodyTemplate, onChange: e => change('bodyTemplate', e.target.value) }), _jsx("small", { children: '变量:{{text}}、{{voice}}、{{model}}、{{speed}}、{{language}}、{{instructions}}、{{format}}。不要在模板写密钥。' })] }), _jsxs("label", { className: "dsh-partner-qq-field", children: [_jsx("span", { children: "\u54CD\u5E94\u7C7B\u578B" }), _jsxs("select", { value: form.responseMode, onChange: e => change('responseMode', e.target.value), children: [_jsx("option", { value: "binary", children: "\u97F3\u9891\u4E8C\u8FDB\u5236" }), _jsx("option", { value: "base64", children: "JSON Base64" })] })] }), form.responseMode === 'base64' && _jsxs("label", { className: "dsh-partner-qq-field", children: [_jsx("span", { children: "\u97F3\u9891\u5B57\u6BB5\u8DEF\u5F84" }), _jsx("input", { value: form.responsePath, onChange: e => change('responsePath', e.target.value), placeholder: "data.audio" })] })] }), _jsxs("div", { className: "dsh-partner-qq-actions", children: [_jsx("button", { className: "is-primary", onClick: () => void run(async () => { const saved = await api(`/tts/profiles/${companionId}`, { method: 'POST', body: JSON.stringify({ ...form, expectedUpdatedAt: form.updatedAt, apiKey: key }) }); const value = { ...fresh(), ...saved }; setForm(value); setOriginal(JSON.stringify(value)); setKey(''); await load(); await onChanged(); }, '语音服务已保存'), children: "\u4FDD\u5B58\u670D\u52A1" }), _jsx("button", { onClick: () => { if (!formDirty || window.confirm('放弃尚未保存的修改?')) {
30
+ setForm(undefined);
31
+ setKey('');
32
+ } }, children: "\u5173\u95ED\u7F16\u8F91" }), form.id && _jsx("button", { onClick: () => { if (window.confirm('删除此语音服务?正在被渠道使用的服务不能删除。'))
33
+ void run(async () => { await api(`/tts/profiles/${companionId}`, { method: 'DELETE', body: JSON.stringify({ id: form.id, expectedUpdatedAt: form.updatedAt }) }); setForm(undefined); setKey(''); await load(); await onChanged(); }, '服务已删除'); }, children: "\u5220\u9664\u670D\u52A1" })] }), _jsx("hr", { className: "dsh-partner-tts-divider" }), _jsxs("label", { className: "dsh-partner-qq-field", children: [_jsx("span", { children: "\u8BD5\u542C\u6587\u5B57" }), _jsx("input", { maxLength: 200, value: sample, onChange: e => setSample(e.target.value) }), _jsx("small", { children: "\u4F7F\u7528\u5DF2\u4FDD\u5B58\u914D\u7F6E\u751F\u6210\u97F3\u9891\uFF0C\u4EC5\u5728\u5F53\u524D\u9875\u9762\u64AD\u653E\uFF0C\u4E0D\u53D1\u9001\u5230\u804A\u5929\u3002\u4F9B\u5E94\u5546\u53EF\u80FD\u8BA1\u8D39\u3002" })] }), _jsx("button", { disabled: !form.id || formDirty || !sample.trim(), onClick: () => void run(async () => { const r = await api(`/tts/preview/${companionId}`, { method: 'POST', body: JSON.stringify({ profileId: form.id, text: sample }) }); const bytes = Uint8Array.from(atob(r.audio), c => c.charCodeAt(0)); setAudio(URL.createObjectURL(new Blob([bytes], { type: r.mediaType }))); }, '试听已生成,点击播放'), children: "\u751F\u6210\u8BD5\u542C" }), audio && _jsx("audio", { controls: true, src: audio, "aria-label": "TTS \u8BD5\u542C\u97F3\u9891" })] }), _jsx("hr", { className: "dsh-partner-tts-divider" }), _jsx(ChannelTtsBindings, { channels: channels.filter(c => c.companionId === companionId), profiles: profiles, onChanged: onChanged, onEdit: setBindingEdit, disabled: busy || formDirty }), message && _jsx("p", { role: failed ? 'alert' : 'status', className: "dsh-partner-qq-feedback", children: message })] });
34
+ }
35
+ const emptyConfig = () => ({ enabled: false, profileId: '', voice: '' });
36
+ function ChannelTtsBindings({ channels, profiles, onChanged, onEdit, disabled }) {
37
+ const supported = channels.filter(c => supportsChannelTts(c.platform));
38
+ const [channelId, setChannelId] = useState(() => supported[0]?.id ?? ''), [draft, setDraft] = useState(), [busy, setBusy] = useState(false), [error, setError] = useState(''), [saved, setSaved] = useState(false);
39
+ const channel = supported.find(c => c.id === channelId);
40
+ const config = draft?.config ?? channel?.tts ?? emptyConfig();
41
+ const dirty = !!draft && JSON.stringify(draft.config) !== JSON.stringify(draft.original);
42
+ useEffect(() => { onEdit({ dirty, busy }); return () => onEdit({ dirty: false, busy: false }); }, [dirty, busy, onEdit]);
43
+ useEffect(() => { if (!channelId && supported.length)
44
+ setChannelId(supported[0].id); }, [channelId, channels]);
45
+ const change = (patch) => { if (!channel)
46
+ return; setSaved(false); setDraft(d => ({ ...d, config: { ...(d?.config ?? channel.tts ?? emptyConfig()), ...patch }, original: d?.original ?? channel.tts ?? emptyConfig(), expectedAt: d?.expectedAt ?? channel.updatedAt })); };
47
+ const save = async () => { if (!channel || !draft || busy)
48
+ return; setBusy(true); setError(''); setSaved(false); try {
49
+ await api(`/channels/${channel.id}/tts`, { method: 'POST', body: JSON.stringify({ ...draft.config, expectedUpdatedAt: draft.expectedAt }) });
50
+ await onChanged();
51
+ setDraft(undefined);
52
+ setSaved(true);
53
+ }
54
+ catch (e) {
55
+ setError(e instanceof Error ? e.message : '语音配置保存失败');
56
+ }
57
+ finally {
58
+ setBusy(false);
59
+ } };
60
+ return _jsxs("section", { className: "dsh-partner-tts", "aria-label": "TTS \u6E20\u9053\u4F7F\u7528", "aria-busy": busy, children: [_jsx("strong", { children: "\u6E20\u9053\u4F7F\u7528" }), _jsx("p", { className: "dsh-partner-qq-hint", children: "QQ \u53D1\u9001\u8BED\u97F3\u6761\uFF1B\u5FAE\u4FE1\u3001Matrix\u3001Mattermost \u53D1\u9001\u53EF\u64AD\u653E\u6216\u4E0B\u8F7D\u7684\u97F3\u9891\u9644\u4EF6\u3002\u5F00\u542F\u540E\u7531\u4F19\u4F34\u6309\u573A\u666F\u51B3\u5B9A\u662F\u5426\u4F7F\u7528\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u7FA4\u53D1\u3002" }), !supported.length ? _jsx("p", { children: "\u5C1A\u672A\u6DFB\u52A0\u652F\u6301\u8BED\u97F3\u7684\u6D88\u606F\u6E20\u9053\uFF0C\u53EF\u5148\u4FDD\u5B58\u670D\u52A1\u548C\u8BD5\u542C\u3002" }) : _jsxs(_Fragment, { children: [_jsxs("label", { className: "dsh-partner-qq-field", children: [_jsx("span", { children: "\u6D88\u606F\u6E20\u9053" }), _jsxs("select", { disabled: disabled || busy, value: channelId, onChange: e => { if (dirty && !window.confirm('放弃当前渠道尚未保存的语音选择?'))
61
+ return; setChannelId(e.target.value); setDraft(undefined); setError(''); setSaved(false); }, children: [_jsx("option", { value: "", disabled: true, children: "\u8BF7\u9009\u62E9\u6E20\u9053" }), supported.map(c => _jsxs("option", { value: c.id, children: [c.name, " \u00B7 ", c.platform ?? 'weixin', c.enabled ? '' : ' · 已停用'] }, c.id))] })] }), channel ? _jsxs(_Fragment, { children: [_jsxs("label", { className: "dsh-partner-qq-field", children: [_jsx("span", { children: "\u901A\u7528 TTS" }), _jsxs("select", { disabled: disabled || busy, value: config.enabled ? 'on' : 'off', onChange: e => change({ enabled: e.target.value === 'on' }), children: [_jsx("option", { value: "off", children: "\u4E0D\u4F7F\u7528" }), _jsx("option", { value: "on", children: "\u4F7F\u7528\u5916\u90E8\u8BED\u97F3\u670D\u52A1" })] })] }), config.enabled && _jsxs(_Fragment, { children: [_jsxs("label", { className: "dsh-partner-qq-field", children: [_jsx("span", { children: "\u8BED\u97F3\u670D\u52A1" }), _jsxs("select", { disabled: disabled || busy, value: config.profileId, onChange: e => change({ profileId: e.target.value }), children: [_jsx("option", { value: "", children: "\u8BF7\u9009\u62E9\u670D\u52A1" }), profiles.map(p => _jsx("option", { value: p.id, children: p.name }, p.id))] })] }), _jsxs("label", { className: "dsh-partner-qq-field", children: [_jsx("span", { children: "\u672C\u6E20\u9053\u97F3\u8272\uFF08\u53EF\u9009\uFF09" }), _jsx("input", { disabled: disabled || busy, value: config.voice, onChange: e => change({ voice: e.target.value }), placeholder: profiles.find(p => p.id === config.profileId)?.voice || '留空使用服务默认音色' })] })] }), channel.platform === 'qq' && _jsx("p", { className: "dsh-partner-qq-hint", children: "\u4F7F\u7528\u901A\u7528 TTS \u65F6\u4F18\u5148\u91C7\u7528\u6B64\u670D\u52A1\uFF1B\u5173\u95ED\u540E\u662F\u5426\u4F7F\u7528 QQ \u539F\u751F\u8BED\u97F3\uFF0C\u7531 QQ \u8BBE\u7F6E\u4E2D\u7684\u5F00\u5173\u51B3\u5B9A\u3002" }), dirty && _jsxs("div", { className: "dsh-partner-qq-actions", children: [_jsx("button", { disabled: disabled || busy, onClick: () => { setDraft(undefined); setError(''); }, children: "\u8FD8\u539F\u9009\u62E9" }), _jsx("button", { className: "is-primary", disabled: disabled || busy || config.enabled && !profiles.some(p => p.id === config.profileId), onClick: () => void save(), children: "\u4FDD\u5B58\u6E20\u9053\u8BED\u97F3" })] })] }) : _jsx("p", { role: "alert", children: "\u6B64\u6E20\u9053\u5DF2\u79FB\u9664\uFF0C\u8BF7\u9009\u62E9\u5176\u4ED6\u6D88\u606F\u6E20\u9053\u3002" })] }), error && _jsx("p", { role: "alert", children: error }), saved && _jsx("p", { role: "status", children: "\u6E20\u9053\u8BED\u97F3\u5DF2\u4FDD\u5B58" })] });
62
+ }
63
+ //# sourceMappingURL=tts-settings.js.map