@ai-zen/cli 1.0.0-alpha.3 → 1.0.0-alpha.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +885 -0
- package/LICENSE +21 -0
- package/README.md +135 -30
- package/README.zh.md +135 -30
- package/dist/agent-creator.d.ts +11 -0
- package/dist/agent-creator.d.ts.map +1 -1
- package/dist/agent-creator.js +50 -20
- package/dist/agent-creator.js.map +1 -1
- package/dist/agent-switch.d.ts +61 -0
- package/dist/agent-switch.d.ts.map +1 -0
- package/dist/agent-switch.js +83 -0
- package/dist/agent-switch.js.map +1 -0
- package/dist/agents-store.d.ts +6 -1
- package/dist/agents-store.d.ts.map +1 -1
- package/dist/agents-store.js +46 -4
- package/dist/agents-store.js.map +1 -1
- package/dist/auto-migrate-confirm.d.ts +43 -0
- package/dist/auto-migrate-confirm.d.ts.map +1 -0
- package/dist/auto-migrate-confirm.js +47 -0
- package/dist/auto-migrate-confirm.js.map +1 -0
- package/dist/clipboard.d.ts +68 -0
- package/dist/clipboard.d.ts.map +1 -0
- package/dist/clipboard.js +177 -0
- package/dist/clipboard.js.map +1 -0
- package/dist/config-editor.d.ts +42 -5
- package/dist/config-editor.d.ts.map +1 -1
- package/dist/config-editor.js +80 -27
- package/dist/config-editor.js.map +1 -1
- package/dist/config.d.ts +76 -17
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +143 -39
- package/dist/config.js.map +1 -1
- package/dist/conversation-commands/registry.d.ts +127 -4
- package/dist/conversation-commands/registry.d.ts.map +1 -1
- package/dist/conversation-commands/registry.js +93 -14
- package/dist/conversation-commands/registry.js.map +1 -1
- package/dist/conversation-persist-plugin.d.ts +0 -1
- package/dist/conversation-persist-plugin.d.ts.map +1 -1
- package/dist/conversation-persist-plugin.js +7 -16
- package/dist/conversation-persist-plugin.js.map +1 -1
- package/dist/conversation-repository.d.ts +79 -18
- package/dist/conversation-repository.d.ts.map +1 -1
- package/dist/conversation-repository.js +96 -30
- package/dist/conversation-repository.js.map +1 -1
- package/dist/cwd-tracker-plugin.d.ts.map +1 -1
- package/dist/cwd-tracker-plugin.js +22 -7
- package/dist/cwd-tracker-plugin.js.map +1 -1
- package/dist/format-time.d.ts +17 -6
- package/dist/format-time.d.ts.map +1 -1
- package/dist/format-time.js +32 -14
- package/dist/format-time.js.map +1 -1
- package/dist/handoff-service.d.ts +19 -0
- package/dist/handoff-service.d.ts.map +1 -0
- package/dist/handoff-service.js +89 -0
- package/dist/handoff-service.js.map +1 -0
- package/dist/hook.d.ts.map +1 -1
- package/dist/hook.js +69 -15
- package/dist/hook.js.map +1 -1
- package/dist/i18n/en-wizard.d.ts +8 -0
- package/dist/i18n/en-wizard.d.ts.map +1 -0
- package/dist/i18n/en-wizard.js +303 -0
- package/dist/i18n/en-wizard.js.map +1 -0
- package/dist/i18n/en.d.ts +7 -0
- package/dist/i18n/en.d.ts.map +1 -0
- package/dist/i18n/en.js +247 -0
- package/dist/i18n/en.js.map +1 -0
- package/dist/i18n/index.d.ts +57 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +109 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/preferences.d.ts +37 -0
- package/dist/i18n/preferences.d.ts.map +1 -0
- package/dist/i18n/preferences.js +73 -0
- package/dist/i18n/preferences.js.map +1 -0
- package/dist/i18n/zh-wizard.d.ts +11 -0
- package/dist/i18n/zh-wizard.d.ts.map +1 -0
- package/dist/i18n/zh-wizard.js +306 -0
- package/dist/i18n/zh-wizard.js.map +1 -0
- package/dist/i18n/zh.d.ts +10 -0
- package/dist/i18n/zh.d.ts.map +1 -0
- package/dist/i18n/zh.js +251 -0
- package/dist/i18n/zh.js.map +1 -0
- package/dist/index.js +72 -25
- package/dist/index.js.map +1 -1
- package/dist/mcp-command.d.ts +32 -0
- package/dist/mcp-command.d.ts.map +1 -0
- package/dist/mcp-command.js +37 -0
- package/dist/mcp-command.js.map +1 -0
- package/dist/mode.d.ts +31 -4
- package/dist/mode.d.ts.map +1 -1
- package/dist/mode.js +42 -7
- package/dist/mode.js.map +1 -1
- package/dist/model-switch.d.ts +58 -0
- package/dist/model-switch.d.ts.map +1 -0
- package/dist/model-switch.js +62 -0
- package/dist/model-switch.js.map +1 -0
- package/dist/reasoning-effort.d.ts +96 -0
- package/dist/reasoning-effort.d.ts.map +1 -0
- package/dist/reasoning-effort.js +164 -0
- package/dist/reasoning-effort.js.map +1 -0
- package/dist/reasoning-presets.d.ts +34 -0
- package/dist/reasoning-presets.d.ts.map +1 -0
- package/dist/reasoning-presets.js +85 -0
- package/dist/reasoning-presets.js.map +1 -0
- package/dist/sdk-log.d.ts +84 -0
- package/dist/sdk-log.d.ts.map +1 -0
- package/dist/sdk-log.js +167 -0
- package/dist/sdk-log.js.map +1 -0
- package/dist/session-pointer.d.ts.map +1 -1
- package/dist/session-pointer.js +10 -4
- package/dist/session-pointer.js.map +1 -1
- package/dist/stdio-runner.d.ts.map +1 -1
- package/dist/stdio-runner.js +32 -30
- package/dist/stdio-runner.js.map +1 -1
- package/dist/sub-agent-guard-plugin.d.ts +10 -7
- package/dist/sub-agent-guard-plugin.d.ts.map +1 -1
- package/dist/sub-agent-guard-plugin.js +12 -9
- package/dist/sub-agent-guard-plugin.js.map +1 -1
- package/dist/tui/chat-history.d.ts +29 -0
- package/dist/tui/chat-history.d.ts.map +1 -0
- package/dist/tui/chat-history.js +55 -0
- package/dist/tui/chat-history.js.map +1 -0
- package/dist/tui/chat-session.d.ts +177 -57
- package/dist/tui/chat-session.d.ts.map +1 -1
- package/dist/tui/chat-session.js +362 -126
- package/dist/tui/chat-session.js.map +1 -1
- package/dist/tui/components.d.ts +113 -7
- package/dist/tui/components.d.ts.map +1 -1
- package/dist/tui/components.js +177 -12
- package/dist/tui/components.js.map +1 -1
- package/dist/tui/config-wizard/detail.d.ts +18 -10
- package/dist/tui/config-wizard/detail.d.ts.map +1 -1
- package/dist/tui/config-wizard/detail.js +53 -46
- package/dist/tui/config-wizard/detail.js.map +1 -1
- package/dist/tui/config-wizard/engine.d.ts +2 -2
- package/dist/tui/config-wizard/engine.d.ts.map +1 -1
- package/dist/tui/config-wizard/engine.js +48 -26
- package/dist/tui/config-wizard/engine.js.map +1 -1
- package/dist/tui/config-wizard/fields.d.ts +3 -1
- package/dist/tui/config-wizard/fields.d.ts.map +1 -1
- package/dist/tui/config-wizard/fields.js +202 -167
- package/dist/tui/config-wizard/fields.js.map +1 -1
- package/dist/tui/config-wizard/frame.js +1 -1
- package/dist/tui/config-wizard/kv-editor.d.ts.map +1 -1
- package/dist/tui/config-wizard/kv-editor.js +13 -5
- package/dist/tui/config-wizard/kv-editor.js.map +1 -1
- package/dist/tui/config-wizard/list.d.ts +3 -1
- package/dist/tui/config-wizard/list.d.ts.map +1 -1
- package/dist/tui/config-wizard/list.js +4 -4
- package/dist/tui/config-wizard/list.js.map +1 -1
- package/dist/tui/config-wizard/mcp-helpers.d.ts.map +1 -1
- package/dist/tui/config-wizard/mcp-helpers.js +4 -3
- package/dist/tui/config-wizard/mcp-helpers.js.map +1 -1
- package/dist/tui/config-wizard/menu.d.ts.map +1 -1
- package/dist/tui/config-wizard/menu.js +33 -21
- package/dist/tui/config-wizard/menu.js.map +1 -1
- package/dist/tui/config-wizard/prompt-editor.d.ts +8 -1
- package/dist/tui/config-wizard/prompt-editor.d.ts.map +1 -1
- package/dist/tui/config-wizard/prompt-editor.js +11 -7
- package/dist/tui/config-wizard/prompt-editor.js.map +1 -1
- package/dist/tui/config-wizard/prompt.d.ts.map +1 -1
- package/dist/tui/config-wizard/prompt.js +8 -7
- package/dist/tui/config-wizard/prompt.js.map +1 -1
- package/dist/tui/config-wizard/step-agents.d.ts.map +1 -1
- package/dist/tui/config-wizard/step-agents.js +50 -29
- package/dist/tui/config-wizard/step-agents.js.map +1 -1
- package/dist/tui/config-wizard/step-defaults.d.ts.map +1 -1
- package/dist/tui/config-wizard/step-defaults.js +77 -27
- package/dist/tui/config-wizard/step-defaults.js.map +1 -1
- package/dist/tui/config-wizard/step-endpoints.d.ts.map +1 -1
- package/dist/tui/config-wizard/step-endpoints.js +27 -14
- package/dist/tui/config-wizard/step-endpoints.js.map +1 -1
- package/dist/tui/config-wizard/step-mcp.d.ts.map +1 -1
- package/dist/tui/config-wizard/step-mcp.js +29 -25
- package/dist/tui/config-wizard/step-mcp.js.map +1 -1
- package/dist/tui/config-wizard/step-models.d.ts.map +1 -1
- package/dist/tui/config-wizard/step-models.js +98 -43
- package/dist/tui/config-wizard/step-models.js.map +1 -1
- package/dist/tui/config-wizard/step-new-endpoint.d.ts.map +1 -1
- package/dist/tui/config-wizard/step-new-endpoint.js +16 -12
- package/dist/tui/config-wizard/step-new-endpoint.js.map +1 -1
- package/dist/tui/config-wizard/step-simple.d.ts.map +1 -1
- package/dist/tui/config-wizard/step-simple.js +18 -17
- package/dist/tui/config-wizard/step-simple.js.map +1 -1
- package/dist/tui/config-wizard/types.d.ts +31 -3
- package/dist/tui/config-wizard/types.d.ts.map +1 -1
- package/dist/tui/config-wizard/types.js.map +1 -1
- package/dist/tui/file-index.d.ts +38 -0
- package/dist/tui/file-index.d.ts.map +1 -0
- package/dist/tui/file-index.js +117 -0
- package/dist/tui/file-index.js.map +1 -0
- package/dist/tui/index.d.ts +18 -1
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +107 -49
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/input-editing.d.ts +52 -0
- package/dist/tui/input-editing.d.ts.map +1 -0
- package/dist/tui/input-editing.js +91 -0
- package/dist/tui/input-editing.js.map +1 -0
- package/dist/tui/key-debug.d.ts +62 -0
- package/dist/tui/key-debug.d.ts.map +1 -0
- package/dist/tui/key-debug.js +92 -0
- package/dist/tui/key-debug.js.map +1 -0
- package/dist/tui/mention.d.ts +47 -0
- package/dist/tui/mention.d.ts.map +1 -0
- package/dist/tui/mention.js +152 -0
- package/dist/tui/mention.js.map +1 -0
- package/dist/tui/mouse.d.ts +55 -0
- package/dist/tui/mouse.d.ts.map +1 -0
- package/dist/tui/mouse.js +74 -0
- package/dist/tui/mouse.js.map +1 -0
- package/dist/tui/phase.d.ts +64 -0
- package/dist/tui/phase.d.ts.map +1 -0
- package/dist/tui/phase.js +112 -0
- package/dist/tui/phase.js.map +1 -0
- package/dist/tui/screens/agent-tabs.d.ts +53 -0
- package/dist/tui/screens/agent-tabs.d.ts.map +1 -0
- package/dist/tui/screens/agent-tabs.js +81 -0
- package/dist/tui/screens/agent-tabs.js.map +1 -0
- package/dist/tui/screens/chat-commands.d.ts +82 -3
- package/dist/tui/screens/chat-commands.d.ts.map +1 -1
- package/dist/tui/screens/chat-commands.js +688 -160
- package/dist/tui/screens/chat-commands.js.map +1 -1
- package/dist/tui/screens/chat.d.ts +57 -5
- package/dist/tui/screens/chat.d.ts.map +1 -1
- package/dist/tui/screens/chat.js +799 -304
- package/dist/tui/screens/chat.js.map +1 -1
- package/dist/tui/screens/common-keys.d.ts +36 -0
- package/dist/tui/screens/common-keys.d.ts.map +1 -0
- package/dist/tui/screens/common-keys.js +67 -0
- package/dist/tui/screens/common-keys.js.map +1 -0
- package/dist/tui/screens/frame-buffer.d.ts +47 -0
- package/dist/tui/screens/frame-buffer.d.ts.map +1 -0
- package/dist/tui/screens/frame-buffer.js +78 -0
- package/dist/tui/screens/frame-buffer.js.map +1 -0
- package/dist/tui/screens/handoff-choice.d.ts +37 -0
- package/dist/tui/screens/handoff-choice.d.ts.map +1 -0
- package/dist/tui/screens/handoff-choice.js +42 -0
- package/dist/tui/screens/handoff-choice.js.map +1 -0
- package/dist/tui/screens/index.d.ts +11 -9
- package/dist/tui/screens/index.d.ts.map +1 -1
- package/dist/tui/screens/index.js +9 -8
- package/dist/tui/screens/index.js.map +1 -1
- package/dist/tui/screens/input-row.d.ts +64 -0
- package/dist/tui/screens/input-row.d.ts.map +1 -0
- package/dist/tui/screens/input-row.js +67 -0
- package/dist/tui/screens/input-row.js.map +1 -0
- package/dist/tui/screens/input.d.ts +77 -1
- package/dist/tui/screens/input.d.ts.map +1 -1
- package/dist/tui/screens/input.js +125 -8
- package/dist/tui/screens/input.js.map +1 -1
- package/dist/tui/screens/layout.d.ts +42 -3
- package/dist/tui/screens/layout.d.ts.map +1 -1
- package/dist/tui/screens/layout.js +43 -13
- package/dist/tui/screens/layout.js.map +1 -1
- package/dist/tui/screens/lines.d.ts +6 -36
- package/dist/tui/screens/lines.d.ts.map +1 -1
- package/dist/tui/screens/lines.js +8 -71
- package/dist/tui/screens/lines.js.map +1 -1
- package/dist/tui/screens/messages-view.d.ts +29 -0
- package/dist/tui/screens/messages-view.d.ts.map +1 -0
- package/dist/tui/screens/messages-view.js +162 -0
- package/dist/tui/screens/messages-view.js.map +1 -0
- package/dist/tui/screens/notice-bar.d.ts +5 -0
- package/dist/tui/screens/notice-bar.d.ts.map +1 -0
- package/dist/tui/screens/notice-bar.js +21 -0
- package/dist/tui/screens/notice-bar.js.map +1 -0
- package/dist/tui/screens/notice.d.ts +66 -0
- package/dist/tui/screens/notice.d.ts.map +1 -0
- package/dist/tui/screens/notice.js +106 -0
- package/dist/tui/screens/notice.js.map +1 -0
- package/dist/tui/screens/overlays.d.ts.map +1 -1
- package/dist/tui/screens/overlays.js +4 -3
- package/dist/tui/screens/overlays.js.map +1 -1
- package/dist/tui/screens/render.d.ts +2 -4
- package/dist/tui/screens/render.d.ts.map +1 -1
- package/dist/tui/screens/render.js +19 -50
- package/dist/tui/screens/render.js.map +1 -1
- package/dist/tui/screens/splash.d.ts +1 -1
- package/dist/tui/screens/splash.d.ts.map +1 -1
- package/dist/tui/screens/splash.js +12 -3
- package/dist/tui/screens/splash.js.map +1 -1
- package/dist/tui/screens/use-chat-viewport.d.ts +22 -0
- package/dist/tui/screens/use-chat-viewport.d.ts.map +1 -0
- package/dist/tui/screens/use-chat-viewport.js +50 -0
- package/dist/tui/screens/use-chat-viewport.js.map +1 -0
- package/dist/tui/screens/use-input-editing.d.ts +69 -0
- package/dist/tui/screens/use-input-editing.d.ts.map +1 -0
- package/dist/tui/screens/use-input-editing.js +220 -0
- package/dist/tui/screens/use-input-editing.js.map +1 -0
- package/dist/tui/screens/use-overlays.d.ts +25 -0
- package/dist/tui/screens/use-overlays.d.ts.map +1 -0
- package/dist/tui/screens/use-overlays.js +32 -0
- package/dist/tui/screens/use-overlays.js.map +1 -0
- package/dist/tui/screens/use-wizard-host.d.ts +46 -0
- package/dist/tui/screens/use-wizard-host.d.ts.map +1 -0
- package/dist/tui/screens/use-wizard-host.js +123 -0
- package/dist/tui/screens/use-wizard-host.js.map +1 -0
- package/dist/tui/status-segments.d.ts +37 -0
- package/dist/tui/status-segments.d.ts.map +1 -0
- package/dist/tui/status-segments.js +166 -0
- package/dist/tui/status-segments.js.map +1 -0
- package/dist/tui/text.d.ts +27 -7
- package/dist/tui/text.d.ts.map +1 -1
- package/dist/tui/text.js +116 -38
- package/dist/tui/text.js.map +1 -1
- package/dist/tui/theme.d.ts +2 -0
- package/dist/tui/theme.d.ts.map +1 -1
- package/dist/tui/theme.js +2 -0
- package/dist/tui/theme.js.map +1 -1
- package/dist/tui/token-rate.d.ts +83 -0
- package/dist/tui/token-rate.d.ts.map +1 -0
- package/dist/tui/token-rate.js +195 -0
- package/dist/tui/token-rate.js.map +1 -0
- package/dist/types.d.ts +7 -8
- package/dist/types.d.ts.map +1 -1
- package/dist/user-content.d.ts +41 -0
- package/dist/user-content.d.ts.map +1 -0
- package/dist/user-content.js +37 -0
- package/dist/user-content.js.map +1 -0
- package/dist/version-compare.d.ts +37 -0
- package/dist/version-compare.d.ts.map +1 -0
- package/dist/version-compare.js +105 -0
- package/dist/version-compare.js.map +1 -0
- package/dist/version.js.map +1 -1
- package/package.json +5 -4
- package/dist/auto-migrate-confirm-plugin.d.ts +0 -58
- package/dist/auto-migrate-confirm-plugin.d.ts.map +0 -1
- package/dist/auto-migrate-confirm-plugin.js +0 -61
- package/dist/auto-migrate-confirm-plugin.js.map +0 -1
- package/dist/migration-service.d.ts +0 -15
- package/dist/migration-service.d.ts.map +0 -1
- package/dist/migration-service.js +0 -59
- package/dist/migration-service.js.map +0 -1
- package/dist/tui/screens/state.d.ts +0 -30
- package/dist/tui/screens/state.d.ts.map +0 -1
- package/dist/tui/screens/state.js +0 -100
- package/dist/tui/screens/state.js.map +0 -1
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `↑` 历史的唯一数据源 —— 直接派生自 `session.messages` 里的用户消息。
|
|
3
|
+
*
|
|
4
|
+
* ## 为什么不另存一份历史
|
|
5
|
+
*
|
|
6
|
+
* 旧实现在 `useInputEditing` 内部维护 `string[]`:只有文本。于是 `↑` 翻回一条**带图片**
|
|
7
|
+
* 的消息时图片静默丢失,用户直接回车就把「图 + 文」重发成了纯文本 —— 看起来什么都没少,
|
|
8
|
+
* 但模型收到的完全不同。而真相本来就在 messages 的内容段里(`Ctrl+V` 粘贴的图会以
|
|
9
|
+
* `image_url` 的 data URL 落进用户消息),派生出来即可,不需要第二份会漂移的副本。
|
|
10
|
+
*
|
|
11
|
+
* ## 还原不了的情况(刻意如此)
|
|
12
|
+
*
|
|
13
|
+
* 走 Files API 上传过的图片在消息里是 `file_id`,本地没有副本 —— 这种只恢复文本,
|
|
14
|
+
* 不塞一个空壳附件(重发时才会真的丢图,而不是假装有)。
|
|
15
|
+
*/
|
|
16
|
+
import { AgentNS } from "@ai-zen/agents-core";
|
|
17
|
+
import { stripCwdNote } from "./text.js";
|
|
18
|
+
/** `data:<mime>;base64,<data>` → `{ base64, mime }`;不是内联图片(http URL 等)返回 null */
|
|
19
|
+
function parseDataUrl(url) {
|
|
20
|
+
const match = /^data:([^;,]+);base64,(.*)$/s.exec(url);
|
|
21
|
+
if (!match)
|
|
22
|
+
return null;
|
|
23
|
+
return { mime: match[1], base64: match[2] };
|
|
24
|
+
}
|
|
25
|
+
/** 一条用户消息 → 草稿(文本剥掉 CwdTracker 追加的工作目录注记) */
|
|
26
|
+
function toDraft(message) {
|
|
27
|
+
const content = message.content;
|
|
28
|
+
if (content == null)
|
|
29
|
+
return { text: "", images: [] };
|
|
30
|
+
if (typeof content === "string")
|
|
31
|
+
return { text: stripCwdNote(content), images: [] };
|
|
32
|
+
const texts = [];
|
|
33
|
+
const images = [];
|
|
34
|
+
for (const part of content) {
|
|
35
|
+
if (part.type === "text") {
|
|
36
|
+
texts.push(part.text);
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
if (part.type !== "image_url")
|
|
40
|
+
continue; // `file`(Files API)本地无副本
|
|
41
|
+
const image = parseDataUrl(part.image_url.url);
|
|
42
|
+
if (image)
|
|
43
|
+
images.push(image);
|
|
44
|
+
}
|
|
45
|
+
return { text: stripCwdNote(texts.join("")), images };
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 用户消息 → 草稿列表(按发送顺序,**最后一条最新**)。
|
|
49
|
+
*
|
|
50
|
+
* `↑` 从末尾往回走,与「最近说过的话先翻出来」一致。
|
|
51
|
+
*/
|
|
52
|
+
export function userDrafts(messages) {
|
|
53
|
+
return messages.filter((message) => message.role === AgentNS.Role.User).map(toDraft);
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=chat-history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-history.js","sourceRoot":"","sources":["../../src/tui/chat-history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAQzC,iFAAiF;AACjF,SAAS,YAAY,CAAC,GAAW;IAC/B,MAAM,KAAK,GAAG,8BAA8B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,CAAC;AAChD,CAAC;AAED,6CAA6C;AAC7C,SAAS,OAAO,CAAC,OAAwB;IACvC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACrD,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAEpF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;YAAE,SAAS,CAAC,yBAAyB;QAClE,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,KAAK;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;AACxD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,QAAoC;IAC7D,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACvF,CAAC"}
|
|
@@ -1,79 +1,177 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* TUI 对话会话 —— Agent
|
|
2
|
+
* TUI 对话会话 —— Agent 装配 + 「内容变更」信号
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* 渲染以 SDK 的 `agent.messages` 为**唯一数据源**:本模块不再把流式 delta 翻译成
|
|
5
|
+
* 自定义事件 / 中间模型(Block / LiveAssistant),只做两件事:
|
|
6
|
+
* 1. SDK 事件到达时通知上层「messages 变了,该重渲染了」;
|
|
7
|
+
* 2. 把系统级提示(notice / error)转发到独立通道(绝不写进 messages)。
|
|
7
8
|
*
|
|
8
9
|
* 本模块不依赖 React / Ink,可独立单测。
|
|
9
10
|
*/
|
|
10
11
|
import { AgentNS } from "@ai-zen/agents-core";
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
12
|
+
import type { Agent as CoreAgent } from "@ai-zen/agents-core";
|
|
13
|
+
import { type AutoMigrateTriggerInfo, type HandoffMode } from "@ai-zen/agents-sdk";
|
|
14
|
+
import { createAgent, resetScope } from "../agent-creator.js";
|
|
15
|
+
import type { ClipboardImage } from "../clipboard.js";
|
|
16
|
+
import type { TokenThresholds } from "@ai-zen/agents-sdk";
|
|
17
|
+
import { stripCwdNote } from "./text.js";
|
|
18
|
+
import { type RateSample } from "./token-rate.js";
|
|
19
|
+
import { type PhaseInfo } from "./phase.js";
|
|
20
|
+
/** 会话 → UI 的对外信号 */
|
|
21
|
+
export interface ChatSessionNotifier {
|
|
22
|
+
/** 转录可能已变化(内容以 `agent.messages` 为准);`immediate=true` 表示应立即上屏 */
|
|
23
|
+
onChange(immediate: boolean): void;
|
|
24
|
+
/** 系统级提示(notice / error),走独立栏位,绝不进 messages */
|
|
25
|
+
onNotice(text: string, tone: "info" | "error"): void;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 子 Agent 的执行状态。
|
|
29
|
+
*
|
|
30
|
+
* 内联在 Agent 栏目的标签上(`●` / `✓` / `✖`),**不往通知栏推**:通知栏为进度多出
|
|
31
|
+
* 一行,整帧高度就会跟着跳(多行通知踩过同一坑)。
|
|
32
|
+
*/
|
|
33
|
+
export type SubAgentStatus = "running" | "done" | "failed";
|
|
34
|
+
/**
|
|
35
|
+
* 子 Agent 视图:委派期间收集,供对话屏的 Agent 栏目切换查看。
|
|
36
|
+
*
|
|
37
|
+
* 为何能一直可读:core 的 `AgentTool` / `AgentToolLazy` 在 `exec()` 里 `new Agent(...)` /
|
|
38
|
+
* `buildAgent()` 出子 Agent,委派结束后**实例不销毁**(`onSubAgentEnd` 只是钩子),
|
|
39
|
+
* 所以 `agent.messages` 始终是本子 Agent 的完整对话。这里只要持有引用,栏目就能回看。
|
|
40
|
+
*
|
|
41
|
+
* 生命周期:**只活在当前这一轮的内循环里**。栏目能做的事只有「切换看」,而子 Agent
|
|
42
|
+
* 是内循环中工具调用的产物;一旦本轮内循环全部结束(`send()` 即将返回),主 Agent 已经
|
|
43
|
+
* 给出最终答案,子 Agent 只剩历史价值,留着只会白占一行。
|
|
44
|
+
* 因此清空发生在 `send()` 的 `finally`(异常 / 中止同样清);`reset()` / `reload()` /
|
|
45
|
+
* `migrate()` 换了 Agent 或会话也一并清空一一它们只换 `agent`,不重建本类实例。
|
|
46
|
+
*/
|
|
47
|
+
export interface SubAgentView {
|
|
48
|
+
/** 稳定 id(React key / 选中态标识) */
|
|
49
|
+
id: string;
|
|
50
|
+
/** 出现序号(从 1 起):栏目标签直接叫「子AGENT1」,序号就是展示的一部分 */
|
|
25
51
|
index: number;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
} | {
|
|
32
|
-
type: "subagent-end";
|
|
33
|
-
name: string;
|
|
34
|
-
} | {
|
|
35
|
-
type: "notice";
|
|
36
|
-
text: string;
|
|
37
|
-
} | {
|
|
38
|
-
type: "error";
|
|
39
|
-
text: string;
|
|
40
|
-
} | {
|
|
41
|
-
type: "done";
|
|
42
|
-
};
|
|
43
|
-
export type ChatEventHandler = (e: ChatEvent) => void;
|
|
52
|
+
/** 子 Agent 实例:`.messages` 即它自己的完整对话 */
|
|
53
|
+
agent: CoreAgent;
|
|
54
|
+
/** 执行状态(渲染期读,故设为可变字段) */
|
|
55
|
+
status: SubAgentStatus;
|
|
56
|
+
}
|
|
44
57
|
export interface ChatSessionOptions {
|
|
45
|
-
modelId: string;
|
|
46
58
|
agentId?: string;
|
|
47
59
|
messages?: AgentNS.Message[];
|
|
48
60
|
conversationId?: string;
|
|
49
61
|
conversationName?: string;
|
|
50
|
-
/**
|
|
51
|
-
|
|
62
|
+
/**
|
|
63
|
+
* 自动迁移时的执行者选择(由 Ink 层弹出选择器实现)。
|
|
64
|
+
* 返回 `null` 表示跳过本次迁移;未提供时按默认执行者(原 agent 自交接)直接迁移。
|
|
65
|
+
*/
|
|
66
|
+
requestMode?: (info: AutoMigrateTriggerInfo) => Promise<HandoffMode | null>;
|
|
67
|
+
/**
|
|
68
|
+
* 可注入的 Agent 工厂 / Scope 重置。缺省用真实实现;测试注入假实现即可,
|
|
69
|
+
* **不必** `vi.mock("../agent-creator.js")` —— 进程内共享模块时模块级 mock 会串。
|
|
70
|
+
*/
|
|
71
|
+
deps?: {
|
|
72
|
+
createAgent?: typeof createAgent;
|
|
73
|
+
resetScope?: typeof resetScope;
|
|
74
|
+
};
|
|
52
75
|
}
|
|
53
|
-
/** 去掉 CwdTrackerPlugin
|
|
54
|
-
export
|
|
76
|
+
/** 去掉 CwdTrackerPlugin 追加在用户消息末尾的工作目录提示(转发自 ./text.js) */
|
|
77
|
+
export { stripCwdNote };
|
|
55
78
|
export declare class ChatSession {
|
|
56
|
-
|
|
79
|
+
/**
|
|
80
|
+
* 当前模型 id —— 从 Agent 定义读,**不再单独存一份**。
|
|
81
|
+
*
|
|
82
|
+
* 模型的唯一真相源是 `AgentDefinition.modelId`:会话不记模型,配置也没有
|
|
83
|
+
* `defaultModel`。这样状态栏、落盘与 SDK 实发请求用的永远是同一个值。
|
|
84
|
+
*/
|
|
85
|
+
get modelId(): string;
|
|
57
86
|
readonly agentId: string;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
87
|
+
/** 当前模型的上下文阈值(交接软线 + 阻断硬线),缺省时不装护栏插件 */
|
|
88
|
+
readonly tokenThresholds?: TokenThresholds;
|
|
89
|
+
/**
|
|
90
|
+
* 会话 id / 名称的**唯一真相源是 `ctx`**(`ConversationContext`)。
|
|
91
|
+
*
|
|
92
|
+
* 为什么必须代理而不是各存一份:自动迁移由 SDK 的 `AutoMigratePlugin` 直接驱动
|
|
93
|
+
* `HandoffService.migrate()`,**不经过本类任何方法**,新 id 只会写进 `ctx.currentId`
|
|
94
|
+
* (`onMigrated` 钩子)。若本类另持一份 `currentId`,自动迁移后它就停在旧值上,
|
|
95
|
+
* 而 `ConversationPersistPlugin.getId()` 读的正是这份旧值——于是 prune 之后的
|
|
96
|
+
* 「系统提示 + 交接断点」会被写进**旧会话文件**,把已保存的完整历史覆盖掉。
|
|
97
|
+
*/
|
|
98
|
+
get currentId(): string;
|
|
99
|
+
set currentId(id: string);
|
|
100
|
+
get currentName(): string;
|
|
101
|
+
set currentName(name: string);
|
|
61
102
|
private agent;
|
|
62
103
|
private readonly ctx;
|
|
63
|
-
private readonly
|
|
64
|
-
private readonly
|
|
65
|
-
private readonly
|
|
104
|
+
private readonly handoffService;
|
|
105
|
+
private readonly notifier;
|
|
106
|
+
private readonly requestMode?;
|
|
66
107
|
private readonly disposers;
|
|
108
|
+
/** 生成过程的 token 速率统计(状态栏展示,见 `token-rate.ts`) */
|
|
109
|
+
private readonly rate;
|
|
110
|
+
/** 当前生成阶段(消息栏 spinner 文案,见 `phase.ts`) */
|
|
111
|
+
private readonly phaseTracker;
|
|
112
|
+
/**
|
|
113
|
+
* 进行中的交接/迁移的取消句柄(`null` = 当前没有交接)。
|
|
114
|
+
*
|
|
115
|
+
* 为什么不能只靠 `agent.abort()`:交接的 `summary` 模式走的是独立的
|
|
116
|
+
* `chat.completions.create` 请求,`agent.abort()` 根本够不到它;而 `self` 模式
|
|
117
|
+
* 虽然能中断,但 core 层把中止收敛成「消息标记 Aborted、send 正常返回」,SDK 那边
|
|
118
|
+
* 会误判成「模型没写出文档」而重试 + 降级 summary 再跑一轮。
|
|
119
|
+
* 所以交接必须自己带一条 `AbortSignal`。
|
|
120
|
+
*/
|
|
121
|
+
private handoffAbort;
|
|
122
|
+
/** 本次会话中已出现的子 Agent(只保留当前一轮,见 {@link SubAgentView} 的生命周期说明) */
|
|
123
|
+
private subAgentViews;
|
|
124
|
+
/** 展示序号(每轮归零,标签回到「子AGENT1」) */
|
|
125
|
+
private subAgentSeq;
|
|
126
|
+
/**
|
|
127
|
+
* 视图 id 序号(**永久递增,每轮也不清零**)。
|
|
128
|
+
*
|
|
129
|
+
* 与展示序号分开是必要的:若 id 也跟着归零,下一轮的 `sub-1` 会与上一轮同名,
|
|
130
|
+
* 而选中态是按 id 匹配的——残留的选中 id 会突然「接上」新一轮的子 Agent。
|
|
131
|
+
*/
|
|
132
|
+
private subAgentIdSeq;
|
|
133
|
+
/** Agent 工厂 / Scope 重置(构造时可注入,见 `ChatSessionOptions.deps`) */
|
|
134
|
+
private readonly createAgentFn;
|
|
135
|
+
private readonly resetScopeFn;
|
|
67
136
|
private constructor();
|
|
68
|
-
/** 创建会话:装配 Agent
|
|
69
|
-
static create(options: ChatSessionOptions,
|
|
137
|
+
/** 创建会话:装配 Agent、插件与「变更信号」 */
|
|
138
|
+
static create(options: ChatSessionOptions, notifier: ChatSessionNotifier): Promise<ChatSession>;
|
|
139
|
+
/** 对话消息(唯一真相源) */
|
|
70
140
|
get messages(): AgentNS.Message[];
|
|
71
|
-
/**
|
|
141
|
+
/** 本次会话已出现的子 Agent(按出现顺序);对话屏据此渲染 Agent 栏目 */
|
|
142
|
+
get subAgents(): readonly SubAgentView[];
|
|
143
|
+
/** 最近一次响应的 token 用量(供「本轮 / 当前上下文占用」展示与阈值判定) */
|
|
72
144
|
get lastUsage(): AgentNS.Usage | undefined;
|
|
73
|
-
/**
|
|
74
|
-
|
|
145
|
+
/**
|
|
146
|
+
* 本会话累计 token 用量。
|
|
147
|
+
*
|
|
148
|
+
* 逐消息求和(`sumUsage`):含各 assistant 消息的 `usage`(自身响应)与工具消息的
|
|
149
|
+
* `subAgentUsage`(内部委派——含所有层级子 Agent)。每轮请求都会重发完整历史,
|
|
150
|
+
* 故求和即计费口径的累计消耗;且随消息持久化,续接 / `/load` 亦不丢。
|
|
151
|
+
*/
|
|
152
|
+
get totalUsage(): AgentNS.Usage;
|
|
153
|
+
/** 当前速率快照:生成中看 `live`(实时),结束后看 `average`(本轮平均) */
|
|
154
|
+
get rateSample(): RateSample;
|
|
155
|
+
/** 当前生成阶段;空闲时为 null(消息栏据此显示「处理中」或不起 spinner) */
|
|
156
|
+
get phase(): PhaseInfo | null;
|
|
157
|
+
/** 清空 Agent 栏目(新一轮输入 / 换 Agent / 换会话时调用;序号一并归零) */
|
|
158
|
+
private clearSubAgents;
|
|
159
|
+
/**
|
|
160
|
+
* 发送一条消息;内容变化经 `notifier.onChange` 通知,`resolve` 表示本轮结束。
|
|
161
|
+
*
|
|
162
|
+
* `images` 非空时,消息内容由「文本段 + 图片内容块」组成(转换规则与降级全在
|
|
163
|
+
* `user-content.ts`):这是粘贴图片唯一的入口,不另开一条发送路径。
|
|
164
|
+
*/
|
|
165
|
+
send(input: string, images?: readonly ClipboardImage[]): Promise<void>;
|
|
75
166
|
/** 中止当前请求(Ctrl+C 语义:仅取消本轮,不退出) */
|
|
76
167
|
abort(): void;
|
|
168
|
+
/**
|
|
169
|
+
* 按「可取消」方式跑一段交接:创建 `AbortController` 并在结束时收尾。
|
|
170
|
+
*
|
|
171
|
+
* 收尾放 `finally`:成功后也要清掉,否则下一次 Ctrl+C 会往一个已完成的
|
|
172
|
+
* controller 上发出无意义的 abort。
|
|
173
|
+
*/
|
|
174
|
+
private runCancellable;
|
|
77
175
|
/**
|
|
78
176
|
* 重置会话(/new):先把当前对话归档(有内容才存),再清空历史并重建 Agent。
|
|
79
177
|
*
|
|
@@ -90,17 +188,39 @@ export declare class ChatSession {
|
|
|
90
188
|
* 否则端点凭据仍是旧的(这也是 `resetScope()` 要 `dispose` 旧实例的原因)。
|
|
91
189
|
*/
|
|
92
190
|
reload(): Promise<void>;
|
|
93
|
-
/**
|
|
94
|
-
migrate(): Promise<
|
|
191
|
+
/** 手动任务迁移(`/migrate`):交接 + 开新会话;与自动迁移共用同一服务实例 */
|
|
192
|
+
migrate(mode?: HandoffMode): Promise<string>;
|
|
193
|
+
/**
|
|
194
|
+
* 只产出交接文档(`/handoff`):不切换会话、不改动历史。
|
|
195
|
+
*
|
|
196
|
+
* 交接回合(指令 + 工具调用 + 回执)会留在 `agent.messages` 里,
|
|
197
|
+
* 用户可继续要求细化同一份文档(重写同一路径即可)。
|
|
198
|
+
*/
|
|
199
|
+
handoff(mode?: HandoffMode): Promise<string>;
|
|
95
200
|
/** 撤回:删除索引 index 起的消息,返回被撤回的首条用户消息文本(用于预填输入) */
|
|
96
201
|
rollbackTo(index: number): string;
|
|
97
202
|
/** 保存当前对话到存档 */
|
|
98
203
|
save(): Promise<string>;
|
|
204
|
+
/**
|
|
205
|
+
* 把当前会话存成指定文件名(`/save <名字>`),成功后 `currentId` 与 last-session
|
|
206
|
+
* 指针一并跟过去,于是后续自动落盘直接写新文件。
|
|
207
|
+
*
|
|
208
|
+
* 实现是「写新文件 → 删旧文件」,而不是 `fs.rename`:
|
|
209
|
+
* · rename 要求旧文件**已存在**,而刚开的新会话还没落过盘(会 ENOENT);
|
|
210
|
+
* · 覆盖已有目标在 Windows 上还得先 unlink,跨平台两边都得写分支;
|
|
211
|
+
* · 写新文件时父目录由仓储 `write()` 的 `mkdir(recursive)` 负责(`/save a/b` 可用)。
|
|
212
|
+
* 中途被杀最多留下两份副本(可读、无损),不会丢内容。
|
|
213
|
+
*/
|
|
214
|
+
saveAs(id: string): Promise<string>;
|
|
99
215
|
/** 释放事件监听(重建 Agent 时调用,避免监听器泄漏) */
|
|
100
216
|
dispose(): void;
|
|
101
217
|
private attach;
|
|
218
|
+
/**
|
|
219
|
+
* 订阅 SDK 事件,仅把它们当作「messages 可能已变化」的信号:
|
|
220
|
+
* - `chunk-parsed`(每片 delta 应用后):高频 → 走合帧(`immediate=false`);
|
|
221
|
+
* - `open` / `parsed` / `finally`:轮次边界 → 立即上屏;
|
|
222
|
+
* - `error`:转发到通知通道。
|
|
223
|
+
*/
|
|
102
224
|
private wire;
|
|
103
|
-
/** 把流式 delta 翻译为结构化事件 */
|
|
104
|
-
private emitDelta;
|
|
105
225
|
}
|
|
106
226
|
//# sourceMappingURL=chat-session.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-session.d.ts","sourceRoot":"","sources":["../../src/tui/chat-session.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"chat-session.d.ts","sourceRoot":"","sources":["../../src/tui/chat-session.ts"],"names":[],"mappings":"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"}
|