@ai-zen/cli 1.0.0-alpha.8 → 1.0.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.
- package/CHANGELOG.md +1340 -269
- package/LICENSE +21 -0
- package/README.md +136 -31
- package/README.zh.md +136 -31
- 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 +85 -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 +245 -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 +249 -0
- package/dist/i18n/zh.js.map +1 -0
- package/dist/index.js +52 -23
- 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 +144 -13
- package/dist/tui/chat-session.d.ts.map +1 -1
- package/dist/tui/chat-session.js +312 -73
- package/dist/tui/chat-session.js.map +1 -1
- package/dist/tui/components.d.ts +109 -6
- 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 +17 -1
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +105 -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 +78 -1
- package/dist/tui/screens/chat-commands.d.ts.map +1 -1
- package/dist/tui/screens/chat-commands.js +688 -157
- package/dist/tui/screens/chat-commands.js.map +1 -1
- package/dist/tui/screens/chat.d.ts +57 -1
- package/dist/tui/screens/chat.d.ts.map +1 -1
- package/dist/tui/screens/chat.js +751 -265
- 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.map +1 -1
- package/dist/tui/screens/frame-buffer.js.map +1 -1
- 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 +7 -5
- package/dist/tui/screens/index.d.ts.map +1 -1
- package/dist/tui/screens/index.js +6 -5
- 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 +49 -0
- package/dist/tui/screens/layout.d.ts.map +1 -1
- package/dist/tui/screens/layout.js +45 -7
- package/dist/tui/screens/layout.js.map +1 -1
- package/dist/tui/screens/lines.d.ts +7 -0
- package/dist/tui/screens/lines.d.ts.map +1 -1
- package/dist/tui/screens/lines.js +6 -6
- package/dist/tui/screens/lines.js.map +1 -1
- package/dist/tui/screens/messages-view.d.ts +20 -1
- package/dist/tui/screens/messages-view.d.ts.map +1 -1
- package/dist/tui/screens/messages-view.js +55 -8
- package/dist/tui/screens/messages-view.js.map +1 -1
- 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 +44 -10
- package/dist/tui/screens/notice.d.ts.map +1 -1
- package/dist/tui/screens/notice.js +75 -15
- package/dist/tui/screens/notice.js.map +1 -1
- 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 +1 -1
- package/dist/tui/screens/render.d.ts.map +1 -1
- package/dist/tui/screens/render.js +18 -11
- package/dist/tui/screens/render.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/screens/welcome.d.ts +12 -0
- package/dist/tui/screens/welcome.d.ts.map +1 -0
- package/dist/tui/screens/welcome.js +36 -0
- package/dist/tui/screens/welcome.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 +22 -7
- package/dist/tui/text.d.ts.map +1 -1
- package/dist/tui/text.js +110 -39
- 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 +7 -5
- 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/splash.d.ts +0 -5
- package/dist/tui/screens/splash.d.ts.map +0 -1
- package/dist/tui/screens/splash.js +0 -51
- package/dist/tui/screens/splash.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-simple.js","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-simple.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAExI,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"step-simple.js","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-simple.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
import { AppConfig } from "@ai-zen/agents-sdk";
|
|
1
|
+
import { AppConfig, ReasoningPresets } from "@ai-zen/agents-sdk";
|
|
2
2
|
import { McpConfig, McpScope } from "../../config.js";
|
|
3
3
|
import { AgentKind, AgentStore } from "../../agents-store.js";
|
|
4
4
|
/** 可编辑的端点字段(首启引导 / `/key` 的直达编辑步骤用) */
|
|
5
5
|
export type EndpointField = "apiKey" | "baseUrl";
|
|
6
|
-
/**
|
|
7
|
-
|
|
6
|
+
/**
|
|
7
|
+
* 「默认项」的可选目标。
|
|
8
|
+
*
|
|
9
|
+
* 前三个是 id 型默认值(从列表里挑一个);后两个是**中断策略**(固定两档),
|
|
10
|
+
* 改完需要重建会话才生效(宿主按 `sessionOptionsChanged` 判)。
|
|
11
|
+
*/
|
|
12
|
+
export type DefaultTarget = "defaultImageModel" | "defaultAgent" | "defaultMigrationModel" | "abortedMessageStrategy" | "abortedToolRoundStrategy";
|
|
8
13
|
/** 向导步骤(判别联合,逐步收敛) */
|
|
9
14
|
export type WizardStep = {
|
|
10
15
|
kind: "menu";
|
|
@@ -104,15 +109,33 @@ export interface WizardCloseResult {
|
|
|
104
109
|
mcpChanged?: boolean;
|
|
105
110
|
/** 是否有 Agent 定义改动(宿主据此重建会话,让新定义生效) */
|
|
106
111
|
agentsChanged?: boolean;
|
|
112
|
+
/**
|
|
113
|
+
* 是否有「建 Agent 时才读的配置」改动(目前是中断策略)——宿主据此重建会话,
|
|
114
|
+
* 否则用户改完策略得自己再敲一次 `/reload` 才生效。
|
|
115
|
+
*/
|
|
116
|
+
sessionOptionsChanged?: boolean;
|
|
107
117
|
}
|
|
108
118
|
/** MCP 配置快照:全局 + 项目两个作用域 */
|
|
109
119
|
export interface McpSnapshot {
|
|
110
120
|
global: McpConfig;
|
|
111
121
|
project: McpConfig;
|
|
122
|
+
/**
|
|
123
|
+
* 各作用域 mcp.json 读 / 解析失败的原因。
|
|
124
|
+
*
|
|
125
|
+
* 有值 = 该文件已损坏:屏上要写明「无法解析」,但仍让用户继续编辑 ——
|
|
126
|
+
* 保存产出的是一份格式正确的新文件,那就是修复。
|
|
127
|
+
*/
|
|
128
|
+
errors?: Partial<Record<McpScope, string>>;
|
|
112
129
|
}
|
|
113
130
|
export interface ConfigWizardProps {
|
|
114
131
|
/** 打开向导时的配置快照 */
|
|
115
132
|
config: AppConfig;
|
|
133
|
+
/**
|
|
134
|
+
* 思考策略表(`readReasoningPresets()`)。
|
|
135
|
+
*
|
|
136
|
+
* 只用于给模型的「思考策略」字段做合法性校验与提示;不传则不做校验。
|
|
137
|
+
*/
|
|
138
|
+
reasoningPresets?: ReasoningPresets;
|
|
116
139
|
/** 起始步骤(默认配置中心菜单) */
|
|
117
140
|
initialStep?: WizardStep;
|
|
118
141
|
/**
|
|
@@ -124,6 +147,11 @@ export interface ConfigWizardProps {
|
|
|
124
147
|
columns: number;
|
|
125
148
|
rows: number;
|
|
126
149
|
};
|
|
150
|
+
/**
|
|
151
|
+
* 打开系统编辑器的实现(默认 `spawnSync`)。测试注入假实现即可,
|
|
152
|
+
* 不必 `vi.mock("child_process")` —— 模块级 mock 全局注册,多文件会互相覆盖。
|
|
153
|
+
*/
|
|
154
|
+
openEditor?: (editor: string, file: string) => void;
|
|
127
155
|
/** 首启引导模式:文案更完整,Esc 语义为「放弃」 */
|
|
128
156
|
onboarding?: boolean;
|
|
129
157
|
/** 保存成功后直接关闭(首启引导 / `/key`),否则回到配置中心菜单 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tui/config-wizard/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tui/config-wizard/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/tui/config-wizard/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/tui/config-wizard/types.ts"],"names":[],"mappings":"AAiDA,2CAA2C;AAC3C,MAAM,CAAC,MAAM,YAAY,GAAG,kBAAkB,CAAC;AAC/C,MAAM,CAAC,MAAM,SAAS,GAAG,eAAe,CAAC;AACzC,MAAM,CAAC,MAAM,eAAe,GAAG,qBAAqB,CAAC;AACrD,uBAAuB;AACvB,MAAM,CAAC,MAAM,YAAY,GAAG,sBAAsB,CAAC;AACnD,uBAAuB;AACvB,MAAM,CAAC,MAAM,cAAc,GAAG,oBAAoB,CAAC;AACnD,wCAAwC;AACxC,MAAM,CAAC,MAAM,SAAS,GAAG,eAAe,CAAC;AACzC,MAAM,CAAC,MAAM,YAAY,GAAG,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { PathEntry } from "./mention.js";
|
|
2
|
+
/** 索引有效期:过期后下一次 `@` 重新扫 */
|
|
3
|
+
export declare const INDEX_TTL_MS = 15000;
|
|
4
|
+
/** 扫描超时:到点就用手上已有的部分(git 子进程超时即失败 → 落回 fs.glob) */
|
|
5
|
+
export declare const SCAN_TIMEOUT_MS = 5000;
|
|
6
|
+
/** 索引条数上限 */
|
|
7
|
+
export declare const MAX_ENTRIES = 20000;
|
|
8
|
+
/**
|
|
9
|
+
* `fs.glob` 兜底时的排除项。
|
|
10
|
+
*
|
|
11
|
+
* `node_modules` / `.git` 不是「代码」;`dist` 是本仓的构建产物(已在 .gitignore 里,
|
|
12
|
+
* 走 git 时天然被排除,兜底路径要自己排除)。
|
|
13
|
+
*/
|
|
14
|
+
export declare const DEFAULT_EXCLUDES: string[];
|
|
15
|
+
/** 可注入的依赖:扫描是 IO,测试要能不起子进程、不碰真磁盘 */
|
|
16
|
+
export interface FileIndexDeps {
|
|
17
|
+
/** git 清单(相对 cwd)。返回 `null` 表示 git 不可用(不是仓库 / 没装 git) */
|
|
18
|
+
gitPaths?: (cwd: string) => Promise<string[] | null>;
|
|
19
|
+
/** `fs.glob` 兜底 */
|
|
20
|
+
globPaths?: (cwd: string) => Promise<PathEntry[]>;
|
|
21
|
+
now?: () => number;
|
|
22
|
+
}
|
|
23
|
+
/** 清空缓存(测试 / 用户切目录后想强制重扫时用) */
|
|
24
|
+
export declare function invalidateFileIndex(): void;
|
|
25
|
+
/**
|
|
26
|
+
* 把 git 的文件清单补全成「文件 + 祖先目录」条目。
|
|
27
|
+
*
|
|
28
|
+
* git 只列文件,但补全也要能「钻目录」(`@src/tui/` → 继续列其下内容),
|
|
29
|
+
* 所以从每个文件的路径里反推出所有祖先目录。`Set` 去重,顺序上目录在前更好读。
|
|
30
|
+
*/
|
|
31
|
+
export declare function fromGitList(names: readonly string[]): PathEntry[];
|
|
32
|
+
/**
|
|
33
|
+
* 取当前项目(cwd)的候选路径,带 15s 缓存。
|
|
34
|
+
*
|
|
35
|
+
* 任何异常都收敛成空数组:补全挂了不该影响用户发消息。
|
|
36
|
+
*/
|
|
37
|
+
export declare function listProjectPaths(cwd: string, deps?: FileIndexDeps): Promise<PathEntry[]>;
|
|
38
|
+
//# sourceMappingURL=file-index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-index.d.ts","sourceRoot":"","sources":["../../src/tui/file-index.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,2BAA2B;AAC3B,eAAO,MAAM,YAAY,QAAS,CAAC;AACnC,kDAAkD;AAClD,eAAO,MAAM,eAAe,OAAQ,CAAC;AACrC,aAAa;AACb,eAAO,MAAM,WAAW,QAAS,CAAC;AAClC;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,UAAqD,CAAC;AAEnF,oCAAoC;AACpC,MAAM,WAAW,aAAa;IAC5B,yDAAyD;IACzD,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;IACrD,mBAAmB;IACnB,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAID,+BAA+B;AAC/B,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EAAE,CAmBjE;AA8BD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAgBlG"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 项目文件索引 —— 给 `@` 补全提供一份「候选路径清单」,带缓存。
|
|
3
|
+
*
|
|
4
|
+
* ## 为什么 git 优先、`fs.glob` 兜底
|
|
5
|
+
*
|
|
6
|
+
* `git ls-files -co --exclude-standard` 一次同时拿到**已跟踪 + 未跟踪**,且**尊重 .gitignore**
|
|
7
|
+
* (本仓实测 166 条 / 约 30ms)。`fs.promises.glob` 更快(178 条 / 4ms)且不依赖外部进程,
|
|
8
|
+
* 但它不认 .gitignore、也不返回隐藏文件(实测 `.gitignore`、`.ai-zen/` 全丢),所以只当
|
|
9
|
+
* 「不在 git 仓库里」时的兜底。两者都不需要新增依赖:`fs.glob` 是 Node 22+ 内置的。
|
|
10
|
+
*
|
|
11
|
+
* ## 为什么缓存
|
|
12
|
+
*
|
|
13
|
+
* 索引只跟 cwd 有关:一次 `@` 补全里每敲一个键都要重新过滤一遍,不能每键都扫盘。
|
|
14
|
+
* 缓存 15s 后过期(新建的文件能被看到),`invalidateFileIndex()` 供测试与显式刷新。
|
|
15
|
+
*
|
|
16
|
+
* ## 上限
|
|
17
|
+
*
|
|
18
|
+
* 大仓 / `$HOME` 下扫描可能上万条:`MAX_ENTRIES` 封顶、`SCAN_TIMEOUT_MS` 超时即放弃,
|
|
19
|
+
* 拿到多少算多少 —— 补全失败远好过让输入框卡住。
|
|
20
|
+
*/
|
|
21
|
+
import { execFile } from "node:child_process";
|
|
22
|
+
import * as fsp from "node:fs/promises";
|
|
23
|
+
import path from "node:path";
|
|
24
|
+
/** 索引有效期:过期后下一次 `@` 重新扫 */
|
|
25
|
+
export const INDEX_TTL_MS = 15_000;
|
|
26
|
+
/** 扫描超时:到点就用手上已有的部分(git 子进程超时即失败 → 落回 fs.glob) */
|
|
27
|
+
export const SCAN_TIMEOUT_MS = 5_000;
|
|
28
|
+
/** 索引条数上限 */
|
|
29
|
+
export const MAX_ENTRIES = 20_000;
|
|
30
|
+
/**
|
|
31
|
+
* `fs.glob` 兜底时的排除项。
|
|
32
|
+
*
|
|
33
|
+
* `node_modules` / `.git` 不是「代码」;`dist` 是本仓的构建产物(已在 .gitignore 里,
|
|
34
|
+
* 走 git 时天然被排除,兜底路径要自己排除)。
|
|
35
|
+
*/
|
|
36
|
+
export const DEFAULT_EXCLUDES = ["**/node_modules/**", "**/.git/**", "**/dist/**"];
|
|
37
|
+
let cache = null;
|
|
38
|
+
/** 清空缓存(测试 / 用户切目录后想强制重扫时用) */
|
|
39
|
+
export function invalidateFileIndex() {
|
|
40
|
+
cache = null;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 把 git 的文件清单补全成「文件 + 祖先目录」条目。
|
|
44
|
+
*
|
|
45
|
+
* git 只列文件,但补全也要能「钻目录」(`@src/tui/` → 继续列其下内容),
|
|
46
|
+
* 所以从每个文件的路径里反推出所有祖先目录。`Set` 去重,顺序上目录在前更好读。
|
|
47
|
+
*/
|
|
48
|
+
export function fromGitList(names) {
|
|
49
|
+
const dirs = new Set();
|
|
50
|
+
const files = [];
|
|
51
|
+
for (const raw of names) {
|
|
52
|
+
// git 在 Windows 上可能给反斜杠(core.autocrlf 场景),统一成 `/`:候选与插入都用 `/`
|
|
53
|
+
const file = raw.trim().replace(/\\/g, "/");
|
|
54
|
+
if (!file)
|
|
55
|
+
continue;
|
|
56
|
+
files.push(file);
|
|
57
|
+
let idx = file.lastIndexOf("/");
|
|
58
|
+
while (idx > 0) {
|
|
59
|
+
dirs.add(file.slice(0, idx));
|
|
60
|
+
idx = file.lastIndexOf("/", idx - 1);
|
|
61
|
+
}
|
|
62
|
+
if (files.length + dirs.size >= MAX_ENTRIES)
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
const entries = [];
|
|
66
|
+
for (const dir of dirs)
|
|
67
|
+
entries.push({ path: dir, dir: true });
|
|
68
|
+
for (const file of files)
|
|
69
|
+
entries.push({ path: file, dir: false });
|
|
70
|
+
return entries.slice(0, MAX_ENTRIES);
|
|
71
|
+
}
|
|
72
|
+
/** `git ls-files -co --exclude-standard`(路径相对 cwd);失败返回 `null` */
|
|
73
|
+
function gitList(cwd) {
|
|
74
|
+
return new Promise((resolve) => {
|
|
75
|
+
execFile("git", ["ls-files", "-co", "--exclude-standard"], { cwd, timeout: SCAN_TIMEOUT_MS, maxBuffer: 64 * 1024 * 1024 }, (error, stdout) => resolve(error ? null : stdout.split("\n").filter(Boolean)));
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/** 非 git 目录的兜底:`fs.glob` 递归 + 排除表 */
|
|
79
|
+
async function globList(cwd) {
|
|
80
|
+
const entries = [];
|
|
81
|
+
for await (const dirent of fsp.glob("**/*", {
|
|
82
|
+
cwd,
|
|
83
|
+
exclude: DEFAULT_EXCLUDES,
|
|
84
|
+
withFileTypes: true,
|
|
85
|
+
})) {
|
|
86
|
+
const rel = path.relative(cwd, path.join(dirent.parentPath, dirent.name)).replace(/\\/g, "/");
|
|
87
|
+
if (!rel)
|
|
88
|
+
continue;
|
|
89
|
+
entries.push({ path: rel, dir: dirent.isDirectory() });
|
|
90
|
+
if (entries.length >= MAX_ENTRIES)
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
return entries;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* 取当前项目(cwd)的候选路径,带 15s 缓存。
|
|
97
|
+
*
|
|
98
|
+
* 任何异常都收敛成空数组:补全挂了不该影响用户发消息。
|
|
99
|
+
*/
|
|
100
|
+
export async function listProjectPaths(cwd, deps = {}) {
|
|
101
|
+
const now = deps.now ?? Date.now;
|
|
102
|
+
if (cache && cache.cwd === cwd && now() - cache.at < INDEX_TTL_MS)
|
|
103
|
+
return cache.paths;
|
|
104
|
+
const readGit = deps.gitPaths ?? gitList;
|
|
105
|
+
const readGlob = deps.globPaths ?? globList;
|
|
106
|
+
let paths = [];
|
|
107
|
+
try {
|
|
108
|
+
const tracked = await readGit(cwd);
|
|
109
|
+
paths = tracked ? fromGitList(tracked) : await readGlob(cwd);
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
paths = [];
|
|
113
|
+
}
|
|
114
|
+
cache = { cwd, paths, at: now() };
|
|
115
|
+
return paths;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=file-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-index.js","sourceRoot":"","sources":["../../src/tui/file-index.ts"],"names":[],"mappings":"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"}
|
package/dist/tui/index.d.ts
CHANGED
|
@@ -30,5 +30,21 @@ export declare const RENDER_OPTIONS: {
|
|
|
30
30
|
readonly mode: "disabled";
|
|
31
31
|
};
|
|
32
32
|
};
|
|
33
|
-
|
|
33
|
+
/** `runTui()` 的可选参数 */
|
|
34
|
+
export interface RunTuiOptions {
|
|
35
|
+
/**
|
|
36
|
+
* 进入对话屏后**自动作为首条消息发送**的内容。
|
|
37
|
+
*
|
|
38
|
+
* 来源只有一处:shell 兜底钩子 `ai --tui --new "$@"`(命令不存在时把原命令带进来)。
|
|
39
|
+
* 不预填到输入框——钩子的语义就是「这条命令跑不了,你帮我处理」,等用户再敲一次回车没有意义。
|
|
40
|
+
*/
|
|
41
|
+
initialPrompt?: string;
|
|
42
|
+
/**
|
|
43
|
+
* `--new`:**开一条新会话**,跳过「续接该目录上一轮对话」(`last-session.json` 指针)。
|
|
44
|
+
*
|
|
45
|
+
* 默认(不带 `--new`)保持续接行为:`ai` 回到上次的对话是常用预期。
|
|
46
|
+
*/
|
|
47
|
+
newSession?: boolean;
|
|
48
|
+
}
|
|
49
|
+
export declare function runTui(options?: RunTuiOptions): Promise<void>;
|
|
34
50
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/tui/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tui/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tui/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAqDH;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,cAAc;aACzB,WAAW;aACX,eAAe;aAGf,oBAAoB;aACpB,aAAa;iBAAI,IAAI,EAAE,UAAU;;CACzB,CAAC;AA8MX,uBAAuB;AACvB,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwDvE"}
|
package/dist/tui/index.js
CHANGED
|
@@ -11,12 +11,17 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
11
11
|
*/
|
|
12
12
|
import { render, useApp } from "ink";
|
|
13
13
|
import { AgentRepository } from "@ai-zen/agents-sdk";
|
|
14
|
-
import { AGENTS_DIR, readConfig, saveConfig } from "../config.js";
|
|
14
|
+
import { AGENTS_DIR, ensureConfigDir, readConfig, saveConfig } from "../config.js";
|
|
15
15
|
import { resolveCredential } from "../config-editor.js";
|
|
16
16
|
import { ConfigWizard } from "./config-wizard/index.js";
|
|
17
17
|
import { conversationRepository } from "../conversation-repository.js";
|
|
18
18
|
import { readLastSession } from "../session-pointer.js";
|
|
19
|
-
import {
|
|
19
|
+
import { Chat } from "./screens/index.js";
|
|
20
|
+
import { keyDebugStart } from "./key-debug.js";
|
|
21
|
+
import { disableMouseTracking, enableMouseTracking } from "./mouse.js";
|
|
22
|
+
import { installSdkLogger } from "../sdk-log.js";
|
|
23
|
+
import { initLocale } from "../i18n/preferences.js";
|
|
24
|
+
import { t } from "../i18n/index.js";
|
|
20
25
|
/** ANSI:清屏 + 光标归位 + 显示光标(屏幕间切换时从头绘制,避免行偏移) */
|
|
21
26
|
const CLEAR_SCREEN = "\x1b[2J\x1b[H\x1b[?25h";
|
|
22
27
|
/**
|
|
@@ -27,6 +32,13 @@ const CLEAR_SCREEN = "\x1b[2J\x1b[H\x1b[?25h";
|
|
|
27
32
|
* 保证退出即干净交还 shell(Windows 下 TTY 写为异步,用回调 + 兜底定时器双保险)。
|
|
28
33
|
*/
|
|
29
34
|
function farewell() {
|
|
35
|
+
// 先关鼠标上报:不关的话,回到 shell 后每次滚轮都会在提示符前吐一串 `^[[<64;…M`
|
|
36
|
+
try {
|
|
37
|
+
disableMouseTracking();
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
/* ignore */
|
|
41
|
+
}
|
|
30
42
|
try {
|
|
31
43
|
process.stdin.setRawMode?.(false);
|
|
32
44
|
}
|
|
@@ -40,7 +52,7 @@ function farewell() {
|
|
|
40
52
|
/* ignore */
|
|
41
53
|
}
|
|
42
54
|
const finish = () => process.exit(0);
|
|
43
|
-
process.stdout.write(
|
|
55
|
+
process.stdout.write(`\x1b[?25h${t("app.goodbye")}`, finish);
|
|
44
56
|
setTimeout(finish, 250);
|
|
45
57
|
}
|
|
46
58
|
/** 当前活动的 Ink 实例(用于信号处理时兜底卸载) */
|
|
@@ -69,9 +81,13 @@ export const RENDER_OPTIONS = {
|
|
|
69
81
|
};
|
|
70
82
|
function mount(node) {
|
|
71
83
|
process.stdout.write(CLEAR_SCREEN);
|
|
84
|
+
// 鼠标上报随实例生命周期开关:本 TUI 会反复挂载(启动屏 → 对话 → 配置向导),
|
|
85
|
+
// 每个实例结束时都关掉,避免「已卸载却仍在收鼠标事件」。
|
|
86
|
+
enableMouseTracking();
|
|
72
87
|
const instance = render(node, RENDER_OPTIONS);
|
|
73
88
|
activeInstance = instance;
|
|
74
89
|
return instance.waitUntilExit().finally(() => {
|
|
90
|
+
disableMouseTracking();
|
|
75
91
|
if (activeInstance === instance)
|
|
76
92
|
activeInstance = null;
|
|
77
93
|
});
|
|
@@ -100,37 +116,48 @@ async function ensureCredential(modelId) {
|
|
|
100
116
|
const result = (await mount(_jsx(CredentialGate, { config: config, endpointId: credential.endpointId })));
|
|
101
117
|
return Boolean(result?.dirty);
|
|
102
118
|
}
|
|
103
|
-
|
|
119
|
+
/**
|
|
120
|
+
* 解析某个 Agent 绑定模型(**唯一真相源**)。
|
|
121
|
+
*
|
|
122
|
+
* 配置层已无 `defaultModel`、会话存档也不再记模型,所以这里缺失就直接报错,
|
|
123
|
+
* 绝不做任何隐式回退——回退正是「状态栏显示 A、实发请求 B」的根源。
|
|
124
|
+
*/
|
|
125
|
+
async function modelOf(agentId) {
|
|
126
|
+
const id = agentId || "default";
|
|
127
|
+
// 先跑一次配置初始化:bootstrap 会为缺 modelId 的历史 Agent 补上并落盘。
|
|
128
|
+
// 不做这一步就会读到“未绑定模型”的旧定义,把一次正常的升级变成启动错误。
|
|
104
129
|
const config = await readConfig();
|
|
105
|
-
const
|
|
106
|
-
const
|
|
107
|
-
const agentId = config.defaultAgent ?? agents[0]?.id;
|
|
108
|
-
let modelId;
|
|
109
|
-
if (agentId) {
|
|
110
|
-
const agent = await repository.read(agentId);
|
|
111
|
-
modelId = agent?.modelId;
|
|
112
|
-
}
|
|
113
|
-
modelId = modelId ?? config.defaultModel ?? config.models[0]?.id;
|
|
130
|
+
const agent = await new AgentRepository(AGENTS_DIR).read(id);
|
|
131
|
+
const modelId = agent?.modelId;
|
|
114
132
|
if (!modelId) {
|
|
115
|
-
throw new Error("
|
|
133
|
+
throw new Error(t("app.agentNoModel", { id }));
|
|
134
|
+
}
|
|
135
|
+
if (!config.models.some((model) => model.id === modelId)) {
|
|
136
|
+
throw new Error(t("app.agentModelGone", { id, model: modelId }));
|
|
116
137
|
}
|
|
117
|
-
return
|
|
138
|
+
return modelId;
|
|
118
139
|
}
|
|
119
|
-
|
|
120
|
-
async function modelExists(modelId) {
|
|
140
|
+
async function resolveTarget() {
|
|
121
141
|
const config = await readConfig();
|
|
122
|
-
|
|
142
|
+
const repository = new AgentRepository(AGENTS_DIR);
|
|
143
|
+
const agents = await repository.list();
|
|
144
|
+
const agentId = config.defaultAgent ?? agents[0]?.id;
|
|
145
|
+
if (!agentId)
|
|
146
|
+
throw new Error(t("app.noAgents"));
|
|
147
|
+
// 校验模型可用(缺失时抛出可读错误,交给启动屏展示)
|
|
148
|
+
await modelOf(agentId);
|
|
149
|
+
return { agentId };
|
|
123
150
|
}
|
|
124
151
|
/** 读取「上一轮会话 id」指针,续接该会话(指针缺失或会话不存在时返回 null) */
|
|
125
152
|
async function resumeLastSession() {
|
|
126
153
|
const pointer = await readLastSession(process.cwd());
|
|
127
154
|
if (!pointer)
|
|
128
155
|
return null;
|
|
129
|
-
const conversation = await conversationRepository.read(pointer.id);
|
|
156
|
+
const conversation = await conversationRepository().read(pointer.id);
|
|
130
157
|
if (!conversation)
|
|
131
158
|
return null;
|
|
159
|
+
// 模型由 Agent 定义决定(旧存档里的 modelId 一律忽略)
|
|
132
160
|
return targetFromMessages({
|
|
133
|
-
modelId: conversation.modelId,
|
|
134
161
|
agentId: conversation.agentId,
|
|
135
162
|
messages: conversation.messages,
|
|
136
163
|
conversationId: conversation.id,
|
|
@@ -140,7 +167,6 @@ async function resumeLastSession() {
|
|
|
140
167
|
/** 从已保存对话构造对话目标 */
|
|
141
168
|
function targetFromMessages(input) {
|
|
142
169
|
return {
|
|
143
|
-
modelId: input.modelId,
|
|
144
170
|
agentId: input.agentId,
|
|
145
171
|
messages: input.messages,
|
|
146
172
|
conversationId: input.conversationId,
|
|
@@ -152,62 +178,75 @@ function targetFromMessages(input) {
|
|
|
152
178
|
* 运行对话屏;`/clear`、`/back`、`/load` 通过重挂载(新 Ink 实例 + 原生清屏)实现,
|
|
153
179
|
* 其余退出(退出)直接结束。
|
|
154
180
|
*/
|
|
155
|
-
async function runChat(target) {
|
|
181
|
+
async function runChat(target, options = {}) {
|
|
156
182
|
let current = target;
|
|
157
183
|
let messages = target.messages;
|
|
158
184
|
let initialInput;
|
|
185
|
+
/** 重挂载后要展示一次的系统提示(如 `/model` 的写入结果,旧实例已卸载,只能传给新屏) */
|
|
186
|
+
let initialNotice;
|
|
187
|
+
/**
|
|
188
|
+
* shell 钩子(`ai --tui --new "$@"`)带来的首条消息。
|
|
189
|
+
* **只发一次**:挂载后置空,否则重挂载(切模型 / `/lang` 等)会反复重发。
|
|
190
|
+
*/
|
|
191
|
+
let initialPrompt = options.initialPrompt;
|
|
159
192
|
while (true) {
|
|
160
|
-
const result = await mount(_jsx(Chat, {
|
|
193
|
+
const result = await mount(_jsx(Chat, { agentId: current.agentId, messages: messages, conversationId: current.conversationId, conversationName: current.conversationName, initialInput: initialInput, initialNotice: initialNotice, initialPrompt: initialPrompt }));
|
|
194
|
+
initialPrompt = undefined;
|
|
161
195
|
if (result && typeof result === "object") {
|
|
162
196
|
const value = result;
|
|
163
197
|
if (value.load) {
|
|
164
|
-
// /load
|
|
198
|
+
// /load:整体切换到另一段已保存对话(含 Agent),重挂载对话屏
|
|
165
199
|
current = {
|
|
166
|
-
modelId: value.load.modelId,
|
|
167
200
|
agentId: value.load.agentId,
|
|
168
201
|
conversationId: value.load.conversationId,
|
|
169
202
|
conversationName: value.load.conversationName,
|
|
170
203
|
};
|
|
171
204
|
messages = value.load.messages;
|
|
172
205
|
initialInput = undefined;
|
|
206
|
+
initialNotice = undefined;
|
|
173
207
|
continue;
|
|
174
208
|
}
|
|
175
209
|
if (value.restart) {
|
|
176
210
|
messages = value.messages ?? messages;
|
|
177
211
|
initialInput = value.initialInput;
|
|
212
|
+
initialNotice = value.notice;
|
|
213
|
+
// `/model` 换模型:Agent 定义里的 modelId 已变,需重建会话(阈值、工具集跟着变)
|
|
214
|
+
if (value.agentId) {
|
|
215
|
+
current = { ...current, agentId: value.agentId };
|
|
216
|
+
}
|
|
178
217
|
continue;
|
|
179
218
|
}
|
|
180
219
|
}
|
|
181
220
|
return;
|
|
182
221
|
}
|
|
183
222
|
}
|
|
184
|
-
|
|
185
|
-
export async function runTui() {
|
|
223
|
+
export async function runTui(options = {}) {
|
|
186
224
|
const uninstallSignals = installSignalSafety();
|
|
225
|
+
// 接管 SDK 全局日志:关掉库自带的 console 兜底。必须在任何 Ink 渲染之前——
|
|
226
|
+
// SDK 的 logger 默认是 console.log,直写 stdout 会把界面撕坏
|
|
227
|
+
// (`load_mcp` 甚至会把整份 manifest 打出来)。AIZ_DEBUG_SDK=1 可改为落盘。
|
|
228
|
+
installSdkLogger();
|
|
229
|
+
// 界面语言必须在任何渲染之前定下来:首次启动按系统语言识别并落盘,
|
|
230
|
+
// 之后以 preferences.json 为准(`/lang` 可随时改)。
|
|
231
|
+
await initLocale();
|
|
232
|
+
// 按键诊断:AIZ_DEBUG_KEYS=1 时把终端环境 + 每次按键写进日志(默认关闭,零开销)
|
|
233
|
+
keyDebugStart();
|
|
187
234
|
try {
|
|
188
|
-
//
|
|
189
|
-
|
|
190
|
-
//
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
...fallback,
|
|
199
|
-
messages: target.messages,
|
|
200
|
-
conversationId: target.conversationId,
|
|
201
|
-
conversationName: target.conversationName,
|
|
202
|
-
}
|
|
203
|
-
: null;
|
|
204
|
-
}
|
|
205
|
-
else if (!target) {
|
|
235
|
+
// 配置初始化必须早于任何 Agent 读取:
|
|
236
|
+
// - 目录 / config.json / 默认 Agent / 出厂策略表都在这里释放;
|
|
237
|
+
// - 历史 Agent 缺 `modelId` 的补齐也在这里(`ensureDefaultAgent`)。
|
|
238
|
+
// 而「续接上一轮会话」这条路径不会经过 `resolveTarget()`,少了这一步,
|
|
239
|
+
// 升级后第一次启动会直接报「Agent 未绑定模型」。
|
|
240
|
+
await ensureConfigDir();
|
|
241
|
+
// 直达对话:优先续接「上一轮会话」,否则新建对话。
|
|
242
|
+
// `--new` 跳过续接(不读 last-session.json 指针),直接走新建路径
|
|
243
|
+
let target = options.newSession ? null : await resumeLastSession();
|
|
244
|
+
if (!target) {
|
|
206
245
|
try {
|
|
207
246
|
target = await resolveTarget();
|
|
208
247
|
}
|
|
209
248
|
catch (error) {
|
|
210
|
-
process.stderr.write(`\n
|
|
249
|
+
process.stderr.write(`\n${t("app.bootFailed", { error: error?.message ?? error })}\n`);
|
|
211
250
|
}
|
|
212
251
|
}
|
|
213
252
|
if (!target) {
|
|
@@ -215,11 +254,21 @@ export async function runTui() {
|
|
|
215
254
|
return;
|
|
216
255
|
}
|
|
217
256
|
// 端点凭据预检:未配置 API Key 时先弹出输入屏,而不是「报错即退出」
|
|
218
|
-
|
|
257
|
+
// 模型从 Agent 定义读 —— 与 SDK 实发请求用的是同一个值
|
|
258
|
+
let modelId = null;
|
|
259
|
+
try {
|
|
260
|
+
modelId = await modelOf(target.agentId);
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
process.stderr.write(`\n${t("app.bootFailed", { error: error?.message ?? error })}\n`);
|
|
219
264
|
farewell();
|
|
220
265
|
return;
|
|
221
266
|
}
|
|
222
|
-
await
|
|
267
|
+
if (!(await ensureCredential(modelId))) {
|
|
268
|
+
farewell();
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
await runChat(target, options);
|
|
223
272
|
farewell();
|
|
224
273
|
}
|
|
225
274
|
finally {
|
|
@@ -236,6 +285,13 @@ function installSignalSafety() {
|
|
|
236
285
|
catch {
|
|
237
286
|
/* 忽略 */
|
|
238
287
|
}
|
|
288
|
+
// 任何异常退出路径都要把终端鼠标上报关掉,否则终端会持续把滚轮写成转义序列
|
|
289
|
+
try {
|
|
290
|
+
disableMouseTracking();
|
|
291
|
+
}
|
|
292
|
+
catch {
|
|
293
|
+
/* 忽略 */
|
|
294
|
+
}
|
|
239
295
|
activeInstance = null;
|
|
240
296
|
};
|
|
241
297
|
const onSigint = () => {
|
|
@@ -248,7 +304,7 @@ function installSignalSafety() {
|
|
|
248
304
|
};
|
|
249
305
|
const onFatal = (error) => {
|
|
250
306
|
restore();
|
|
251
|
-
process.stderr.write(`\n
|
|
307
|
+
process.stderr.write(`\n${t("app.unexpected", { error: error?.message ?? error })}\n`);
|
|
252
308
|
process.exit(1);
|
|
253
309
|
};
|
|
254
310
|
process.on("SIGINT", onSigint);
|
package/dist/tui/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tui/index.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAiB,MAAM,KAAK,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tui/index.tsx"],"names":[],"mappings":"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"}
|