@ai-zen/cli 1.0.0-alpha.2 → 1.0.0-alpha.20
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 +356 -0
- package/README.md +99 -28
- package/README.zh.md +99 -28
- package/dist/agent-creator.d.ts +11 -0
- package/dist/agent-creator.d.ts.map +1 -1
- package/dist/agent-creator.js +20 -11
- package/dist/agent-creator.js.map +1 -1
- package/dist/agents-store.d.ts.map +1 -1
- package/dist/agents-store.js +40 -3
- 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 +46 -0
- package/dist/auto-migrate-confirm.js.map +1 -0
- package/dist/config-editor.d.ts +4 -4
- package/dist/config-editor.d.ts.map +1 -1
- package/dist/config-editor.js +6 -8
- package/dist/config-editor.js.map +1 -1
- package/dist/config.d.ts +23 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +26 -2
- package/dist/config.js.map +1 -1
- package/dist/conversation-commands/registry.d.ts.map +1 -1
- package/dist/conversation-commands/registry.js +4 -1
- 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 +2 -3
- package/dist/conversation-persist-plugin.js.map +1 -1
- package/dist/conversation-repository.d.ts +5 -1
- package/dist/conversation-repository.d.ts.map +1 -1
- package/dist/conversation-repository.js +1 -2
- package/dist/conversation-repository.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 +86 -0
- package/dist/handoff-service.js.map +1 -0
- package/dist/index.js +21 -3
- package/dist/index.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 +61 -0
- package/dist/model-switch.js.map +1 -0
- package/dist/reasoning-effort.d.ts +77 -0
- package/dist/reasoning-effort.d.ts.map +1 -0
- package/dist/reasoning-effort.js +137 -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 +48 -0
- package/dist/sdk-log.d.ts.map +1 -0
- package/dist/sdk-log.js +67 -0
- package/dist/sdk-log.js.map +1 -0
- package/dist/session-pointer.d.ts +22 -9
- package/dist/session-pointer.d.ts.map +1 -1
- package/dist/session-pointer.js +55 -23
- package/dist/session-pointer.js.map +1 -1
- package/dist/stdio-runner.d.ts.map +1 -1
- package/dist/stdio-runner.js +15 -13
- package/dist/stdio-runner.js.map +1 -1
- package/dist/sub-agent-guard-plugin.d.ts +5 -5
- package/dist/sub-agent-guard-plugin.d.ts.map +1 -1
- package/dist/sub-agent-guard-plugin.js +7 -7
- package/dist/sub-agent-guard-plugin.js.map +1 -1
- package/dist/tui/chat-session.d.ts +83 -59
- package/dist/tui/chat-session.d.ts.map +1 -1
- package/dist/tui/chat-session.js +161 -105
- package/dist/tui/chat-session.js.map +1 -1
- package/dist/tui/components.d.ts +7 -2
- package/dist/tui/components.d.ts.map +1 -1
- package/dist/tui/components.js +3 -3
- package/dist/tui/components.js.map +1 -1
- package/dist/tui/config-wizard/engine.js +1 -1
- 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 +58 -6
- package/dist/tui/config-wizard/fields.js.map +1 -1
- package/dist/tui/config-wizard/menu.d.ts.map +1 -1
- package/dist/tui/config-wizard/menu.js +2 -3
- package/dist/tui/config-wizard/menu.js.map +1 -1
- package/dist/tui/config-wizard/step-defaults.d.ts.map +1 -1
- package/dist/tui/config-wizard/step-defaults.js +4 -11
- package/dist/tui/config-wizard/step-defaults.js.map +1 -1
- package/dist/tui/config-wizard/types.d.ts +18 -3
- package/dist/tui/config-wizard/types.d.ts.map +1 -1
- package/dist/tui/config-wizard/wizard.d.ts.map +1 -1
- package/dist/tui/config-wizard/wizard.js +4 -3
- package/dist/tui/config-wizard/wizard.js.map +1 -1
- package/dist/tui/highlight.d.ts +3 -2
- package/dist/tui/highlight.d.ts.map +1 -1
- package/dist/tui/highlight.js +3 -2
- package/dist/tui/highlight.js.map +1 -1
- package/dist/tui/index.d.ts +1 -0
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +87 -40
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/input-editing.d.ts +49 -0
- package/dist/tui/input-editing.d.ts.map +1 -0
- package/dist/tui/input-editing.js +87 -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/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/screens/chat-commands.d.ts +12 -2
- package/dist/tui/screens/chat-commands.d.ts.map +1 -1
- package/dist/tui/screens/chat-commands.js +204 -17
- package/dist/tui/screens/chat-commands.js.map +1 -1
- package/dist/tui/screens/chat.d.ts +2 -5
- package/dist/tui/screens/chat.d.ts.map +1 -1
- package/dist/tui/screens/chat.js +460 -98
- package/dist/tui/screens/chat.js.map +1 -1
- 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 +41 -0
- package/dist/tui/screens/handoff-choice.js.map +1 -0
- package/dist/tui/screens/index.d.ts +8 -8
- package/dist/tui/screens/index.d.ts.map +1 -1
- package/dist/tui/screens/index.js +7 -7
- package/dist/tui/screens/index.js.map +1 -1
- package/dist/tui/screens/input.d.ts +35 -0
- package/dist/tui/screens/input.d.ts.map +1 -1
- package/dist/tui/screens/input.js +66 -0
- package/dist/tui/screens/input.js.map +1 -1
- package/dist/tui/screens/layout.d.ts +13 -3
- package/dist/tui/screens/layout.d.ts.map +1 -1
- package/dist/tui/screens/layout.js +15 -8
- package/dist/tui/screens/layout.js.map +1 -1
- package/dist/tui/screens/lines.d.ts +12 -41
- package/dist/tui/screens/lines.d.ts.map +1 -1
- package/dist/tui/screens/lines.js +87 -95
- package/dist/tui/screens/lines.js.map +1 -1
- package/dist/tui/screens/messages-view.d.ts +10 -0
- package/dist/tui/screens/messages-view.d.ts.map +1 -0
- package/dist/tui/screens/messages-view.js +115 -0
- package/dist/tui/screens/messages-view.js.map +1 -0
- package/dist/tui/screens/notice.d.ts +32 -0
- package/dist/tui/screens/notice.d.ts.map +1 -0
- package/dist/tui/screens/notice.js +46 -0
- package/dist/tui/screens/notice.js.map +1 -0
- 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 +7 -43
- package/dist/tui/screens/render.js.map +1 -1
- package/dist/tui/screens/splash.d.ts.map +1 -1
- package/dist/tui/screens/splash.js +7 -1
- package/dist/tui/screens/splash.js.map +1 -1
- package/dist/tui/text.d.ts +12 -2
- package/dist/tui/text.d.ts.map +1 -1
- package/dist/tui/text.js +17 -3
- package/dist/tui/text.js.map +1 -1
- package/dist/tui/theme.d.ts +7 -1
- package/dist/tui/theme.d.ts.map +1 -1
- package/dist/tui/theme.js +15 -3
- package/dist/tui/theme.js.map +1 -1
- package/dist/types.d.ts +7 -5
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
- 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 -13
- package/dist/tui/screens/state.d.ts.map +0 -1
- package/dist/tui/screens/state.js +0 -75
- package/dist/tui/screens/state.js.map +0 -1
package/README.zh.md
CHANGED
|
@@ -66,12 +66,79 @@ ai --version
|
|
|
66
66
|
╚═╝ ╚═╝╚═╝ ╚══════╝╚══════╝╚═╝ ╚═══╝
|
|
67
67
|
|
|
68
68
|
终端里的 AI 协作台
|
|
69
|
-
v1.0.0-alpha.
|
|
69
|
+
v1.0.0-alpha.20 · sdk x · core y
|
|
70
70
|
```
|
|
71
71
|
|
|
72
|
-
启动界面结束后**直接进入对话界面**(若存在「上一轮会话」则自动续接,否则新建对话)。对话界面采用**底部固定**布局:分隔线、输入行与状态栏(模型 · Agent · token 用量 · 生成状态)始终贴在终端底部,对话内容在其上方滚动;生成中时输入行位置显示进度指示。
|
|
72
|
+
启动界面结束后**直接进入对话界面**(若存在「上一轮会话」则自动续接,否则新建对话)。对话界面采用**底部固定**布局:分隔线、输入行与状态栏(模型 · Agent · 本轮/累计 token 用量 · 生成状态)始终贴在终端底部,对话内容在其上方滚动;生成中时输入行位置显示进度指示。
|
|
73
73
|
|
|
74
|
-
对话界面包含:流式输出区(思考过程 / 回答正文 / 工具调用分行展示)、多行输入(`Enter` 发送、`Ctrl+N` 换行、`← →` 移动光标、`Ctrl+← →`
|
|
74
|
+
对话界面包含:流式输出区(思考过程 / 回答正文 / 工具调用分行展示)、多行输入(`Enter` 发送、`Ctrl+N` 换行、`← →` 移动光标、`Ctrl+← →` 跨词、`Ctrl+W` / `Alt+Backspace` 删前一个词、`Alt+D` / `Ctrl+Delete` 删后一个词、`Ctrl+K` 删到行尾、`Ctrl+U` 删到行首、`PgUp`/`PgDn`(或 `Alt+V`/`Ctrl+V`)翻页、鼠标滚轮按行滚动;macOS 上另支持 `⌘← →` 跨词、`⌘⌫`/`⌘⌦` 按词删除、`⌘[`/`⌘]` 翻页、`⌘;`/`⌘'` 按行滚动(取决于终端是否上报 Cmd,见下))与内联 `/` 命令菜单(↑↓ 选择、`Tab` 补全)。工具调用以 `⚙ 名称(参数)` 展示并带 **JSON 语法高亮**,正文与思考按 **Markdown 源码着色**(标题 / 粗体 / 斜体 / 行内代码 / 列表 / 引用 / 链接),**围栏代码块按语言高亮并保留围栏标记**(高亮数据来自 `highlight.js` / `lowlight`)。`Ctrl+C` 在生成中取消本轮请求、空闲时退出。
|
|
75
|
+
|
|
76
|
+
### 键盘与终端兼容(macOS 等)
|
|
77
|
+
|
|
78
|
+
macOS 上终端 TUI 的通行做法是 **Option 当 Meta + readline 系 Ctrl 键**:`Cmd` 不在终端协议里(`super` 只有 kitty 键盘协议才会上报,见 [kitty keyboard protocol](https://sw.kovidgoyal.net/kitty/keyboard-protocol/)),因此 `⌘` 主要留给终端自身(复制 / 粘贴 / 搜索)。本 CLI 的键位与这条路线一致。
|
|
79
|
+
|
|
80
|
+
**第一步:把 Option 设为 Meta**。macOS 终端默认不发送 Option 修饰位,不设则所有 `Option+X` 全部无效:
|
|
81
|
+
|
|
82
|
+
| 终端 | 设置 |
|
|
83
|
+
|------|------|
|
|
84
|
+
| Apple Terminal | 设置 → 描述文件 → 键盘 → 勾选「**将 Option 用作 Meta 键**」 |
|
|
85
|
+
| iTerm2 | Settings → Profiles → Keys → General → Left/Right Option key 设为 `Esc+` |
|
|
86
|
+
| VS Code / Cursor | settings 里加 `"terminal.integrated.macOptionIsMeta": true` |
|
|
87
|
+
| Ghostty / kitty / WezTerm | 配置文件中启用 Option-as-Alt / Option-as-Meta |
|
|
88
|
+
|
|
89
|
+
键位一览(与 [Claude Code](https://docs.claude.com/en/docs/claude-code/interactive-mode) 对齐):
|
|
90
|
+
|
|
91
|
+
| 键位 | 作用 |
|
|
92
|
+
|------|------|
|
|
93
|
+
| `Enter` | 发送 |
|
|
94
|
+
| `Ctrl+J`、`Ctrl+Enter`、`Alt+Enter`、`Shift+Enter` | 换行 |
|
|
95
|
+
| `Ctrl+C` | 生成中:中断本轮;空闲:有草稿先清空,再按退出 |
|
|
96
|
+
| `Ctrl+D` | 有草稿:删光标后一个字符;空输入:连按两次退出 |
|
|
97
|
+
| `Esc` | 生成中:中断;否则清空草稿并回到底部 |
|
|
98
|
+
| `Ctrl+A` / `Ctrl+E` | 行首 / 行尾 |
|
|
99
|
+
| `Ctrl+P` / `Ctrl+N` | 历史上一条 / 下一条(也用于斜杠菜单选择) |
|
|
100
|
+
| `Ctrl+K` / `Ctrl+U` | 删到行尾 / 删到行首 |
|
|
101
|
+
| `Ctrl+W` | 删到前一空白(标点不切分:`src/utils/foo.ts` 一次删完) |
|
|
102
|
+
| `Alt+B` / `Alt+F` | 跨词移动 |
|
|
103
|
+
| `Alt+D`、`Alt+Backspace`、`Ctrl+Delete` | 按词删除(标点算分隔) |
|
|
104
|
+
| `Ctrl+Y` / `Alt+Y` | 取回刚删掉的文本 / 循环取回更早的 |
|
|
105
|
+
| `Ctrl+_` | 撤销上一次输入编辑 |
|
|
106
|
+
| `Ctrl+S` | 暂存当前草稿 / 再按恢复 |
|
|
107
|
+
| `Ctrl+V` | 预留:粘贴图片(**暂未实现**,按下会提示) |
|
|
108
|
+
| `Ctrl+L` | 清屏(保留上下文) |
|
|
109
|
+
| `PgUp` / `PgDn` | 应用内翻页回看 |
|
|
110
|
+
| 鼠标滚轮 | 按行滚动(每格 3 行)。开启鼠标上报后拖选复制需按住 `Shift`(终端原生选择);`tmux` 用户需 `set -g mouse off`,否则滚轮会先被 copy-mode 拦下 |
|
|
111
|
+
| `Shift+↑ ↓`、`Alt+↑ ↓`、`⌘;` / `⌘'`* | 按行滚动 |
|
|
112
|
+
| `\` + `Enter` | 换行(任何终端可用) |
|
|
113
|
+
|
|
114
|
+
未实现(我们的场景没有对应物):`Ctrl+O` 转录查看器、`Ctrl+R` 反向历史搜索、`Ctrl+B` 后台任务、`Ctrl+T` 任务清单、`Shift+Tab` 权限模式。
|
|
115
|
+
|
|
116
|
+
`Ctrl+V`(Claude Code 的「粘贴图片」)**暂未实现**:按下会提示未支持。原因是它需要先解决「文件 → 内容块」的端点能力探测(Files API 上传 vs base64内联),不能简单硬编码某个端点。⌘⌫ 已被终端映射为 `Ctrl+U`,所以这里删到行首;要清空草稿用 `Esc`。
|
|
117
|
+
|
|
118
|
+
\* `⌘` 组合只有终端**启用 kitty 键盘协议**时才会带上 `super` 位(iTerm2 还需把 Cmd 映射为 Super);不支持的终端(如 Apple Terminal)只能在终端里把 `⌘` 映射成 `ESC` 序列(如 `⌘←` → `ESC[1;9D`,等价于 `Alt+←`),或直接用上表的 Alt 组合。
|
|
119
|
+
|
|
120
|
+
> macOS 的 `⌘⌫` 会被 iTerm2 / Terminal.app 映射为 `Ctrl+U`,因此本 CLI 的 `Ctrl+U` 取 readline 语义「删到行首」——若做成「清空全部」,Mac 用户按 `⌘⌫` 会丢掉整个草稿。
|
|
121
|
+
|
|
122
|
+
> `Ctrl+← →` 无效通常是系统原因:macOS 默认把它绑定给「调度中心 → 向左/向右移动一个空间」,按键在到达终端前就被截走。可在「系统设置 → 键盘 → 键盘快捷键 → 调度中心」取消勾选。
|
|
123
|
+
|
|
124
|
+
若某个键仍然没反应,打开**按键诊断**再按一次:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
AIZ_DEBUG_KEYS=1 aiz
|
|
128
|
+
# 另开一个窗口
|
|
129
|
+
tail -f /tmp/aiz-key-debug.log
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
首行记录终端环境(`TERM` / `TERM_PROGRAM` 等),之后每次按键一行:
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
key input="d" flags=[meta] raw=true
|
|
136
|
+
key input="" flags=[pageUp] raw=false
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
- **按了键却没有新行** → 键被系统 / 终端截走(改系统快捷键或终端键位映射)
|
|
140
|
+
- **有行但 `flags` 与预期不符** → 序列已到达应用,是匹配逻辑问题(反馈时贴这一行)
|
|
141
|
+
- **`raw=false`** → stdin 不在 raw mode,按键被终端自己解释(例如去滚 scrollback)
|
|
75
142
|
|
|
76
143
|
### 首次配置(API Key)
|
|
77
144
|
|
|
@@ -113,26 +180,27 @@ ai --version
|
|
|
113
180
|
| `/editor` | 使用系统编辑器(vim/nano)输入长消息 |
|
|
114
181
|
| `/clear` | 清屏 |
|
|
115
182
|
| `/config` | 打开配置中心(端点 / 模型 / 图片模型 / MCP 服务器 / Agent 定义 / 默认项 / 工具上限) |
|
|
183
|
+
| `/model` | 切换当前会话使用的模型并写入配置(写 Agent 的 `modelId`;思考强度重置为模型默认) |
|
|
184
|
+
| `/think` `/effort` | 切换思考强度(可选档位来自模型的思考策略表,如 `low/high/max`),写入当前 Agent 定义并立即生效;`/think default` 恢复跟随模型默认 |
|
|
116
185
|
| `/key` | 设置当前端点的 API Key(保存后自动重建会话) |
|
|
117
|
-
| `/
|
|
186
|
+
| `/handoff` | 编写任务交接文档(会话照旧,不弹确认) |
|
|
187
|
+
| `/migrate` `/migration` | 交接 + 开启新会话(清空历史,需确认) |
|
|
118
188
|
| `/help` | 显示可用命令 |
|
|
119
189
|
|
|
120
|
-
###
|
|
190
|
+
### 任务交接与迁移
|
|
121
191
|
|
|
122
|
-
|
|
192
|
+
两条命令,同一条管道:
|
|
123
193
|
|
|
124
|
-
|
|
194
|
+
- **`/handoff`** — 原 agent 停下手头工作,用自己的工具核实真实状态(分支、未提交改动、测试、端口),把交接文档写到 `<项目>/.ai-zen/handoffs/<时间戳>-<会话id>.md`。会话照旧运行,因此可以继续打磨这份文档。
|
|
195
|
+
- **`/migrate`** — 同一次交接,然后把历史清空、以该文档开启新会话(断点消息只带路径,由新 agent 自己读取)。
|
|
125
196
|
|
|
126
|
-
|
|
197
|
+
两种执行者:`self`(默认——原 agent 在会话内写,保真度最高)与 `summary`(一次独立模型调用,便宜但有损)。`self` 失败时**单向**降级为 `summary`。可用 `/handoff summary` 或 `/migrate self` 显式指定。
|
|
127
198
|
|
|
128
|
-
|
|
129
|
-
- **对话断点** — 最后一段对话原文引用
|
|
130
|
-
- **已完成的任务** — 任务标题和产出路径
|
|
131
|
-
- **未完成的任务** — 描述、进度、下一步
|
|
132
|
-
- **重要记忆** — 技术偏好、踩坑记录、架构决策
|
|
133
|
-
- **文件索引** — 关键文件及用途说明
|
|
134
|
-
- **接手指令** — 先读文件验真、再对状态、后行动的 SOP
|
|
199
|
+
当 `usage.prompt_tokens` 超过模型的 `tokenThresholds.handoff`,交互式终端会弹出三选一选择器(自交接 / 独立摘要 / 跳过);管道等非交互场景按默认执行者迁移,不阻塞。
|
|
135
200
|
|
|
201
|
+
文档模板不在代码里:来自 `handoff` Skill(`~/.ai-zen/skills/handoff/SKILL.md`,由 SDK 释放并随版本同步;在 frontmatter 写 `metadata.custom: "true"` 可保留你自己的版本,也可在项目内覆盖)。完整链路、成本说明与模板章节见 [任务交接与迁移](./docs/zh/migration.md)。
|
|
202
|
+
|
|
203
|
+
同样的上下文护栏也作用于**子 Agent**:每次委派边界(`onSubAgentStart`)CLI 都会把同一个 `ContextGuardPlugin`(同一 `maxTokens`)安插到新建的子 Agent 上,因此被委派的子 Agent(含 `call_skill_sub_agent` 创建的技能子 Agent)在上下文超出硬上限时同样会被中断。该过程是透明的,正常运行的子 Agent 不受影响。
|
|
136
204
|
### Shell 兜底钩子
|
|
137
205
|
|
|
138
206
|
当你在终端输入一个不存在的命令时,自动转发给 AI 处理:
|
|
@@ -162,7 +230,7 @@ ai hook uninstall
|
|
|
162
230
|
| 端点 / 模型 / 图片模型、MCP 服务器、Agent 定义(含 Sub-agent)、默认项、工具输出上限 | 对话内 `/config`(配置中心,全面管理) |
|
|
163
231
|
| 其它高级项(Skill / 用户工具等) | 手动编辑 `~/.ai-zen/` 下的文件 |
|
|
164
232
|
|
|
165
|
-
其中 `
|
|
233
|
+
其中 `tokenThresholds` 是两条用量线:`handoff`(交接软线,超过它触发任务交接)与 `guard`(强行阻断硬线,请求前超过它中断本轮)。两者都是绝对值,建议 `guard ≈ handoff × 1.5`(`handoff` 通常设为模型实际上下文窗口的约 25%,例如 1M tokens 的模型设为 250,000)。
|
|
166
234
|
|
|
167
235
|
```jsonc
|
|
168
236
|
{
|
|
@@ -180,7 +248,8 @@ ai hook uninstall
|
|
|
180
248
|
"name": "GPT-6.1 Sol",
|
|
181
249
|
"endpointId": "openai",
|
|
182
250
|
"modelName": "gpt-6.1-sol",
|
|
183
|
-
"
|
|
251
|
+
"tokenThresholds": { "handoff": 250000, "guard": 375000 },
|
|
252
|
+
"reasoningPreset": "openai",
|
|
184
253
|
"custom": true
|
|
185
254
|
}
|
|
186
255
|
],
|
|
@@ -193,7 +262,6 @@ ai hook uninstall
|
|
|
193
262
|
"defaultSize": "1024x1024"
|
|
194
263
|
}
|
|
195
264
|
],
|
|
196
|
-
"defaultModel": "deepseek-flash",
|
|
197
265
|
"defaultImageModel": "cogview-4",
|
|
198
266
|
"defaultAgent": "default",
|
|
199
267
|
"defaultMigrationModel": "deepseek-flash"
|
|
@@ -201,10 +269,13 @@ ai hook uninstall
|
|
|
201
269
|
```
|
|
202
270
|
|
|
203
271
|
> 说明:`models` / `imageModels` 中**未标 `custom: true`** 的条目属于**出厂托管**——每次启动会与 SDK 出厂清单对齐、被替换为最新定义;自建模型请加 `"custom": true`。`endpoints` 始终保留用户配置,不受影响。
|
|
272
|
+
>
|
|
273
|
+
> 模型**不在 `config.json` 里指定**:每个 Agent 在自己的定义文件(`agents/<id>.json`)的 `modelId` 字段上绑定模型,这是运行期的唯一真相源;`/model` 切换写的也是它。
|
|
204
274
|
|
|
205
275
|
### 环境变量
|
|
206
276
|
|
|
207
277
|
- `AI_ZEN_DIR` — 覆盖共享根目录(默认 `~/.ai-zen`)。CLI 运行时数据在 `$AI_ZEN_DIR/cli/`,共享资源(agents、skills、tools、MCP 等)在 `$AI_ZEN_DIR/`。
|
|
278
|
+
- `AIZ_DEBUG_KEYS=1` — 开启按键诊断日志(默认关闭,零开销);`AIZ_KEYS_FILE=<路径>` 可改落盘位置(默认 `/tmp/aiz-key-debug.log`)。
|
|
208
279
|
|
|
209
280
|
## 文件系统布局
|
|
210
281
|
|
|
@@ -262,25 +333,25 @@ CLI 提供 20 个内置工具,由 `@ai-zen/agents-sdk` 实现。工具可用
|
|
|
262
333
|
| 工具 | 说明 |
|
|
263
334
|
|------|------|
|
|
264
335
|
| `cwd` | 获取当前工作目录 |
|
|
265
|
-
| `
|
|
266
|
-
| `
|
|
267
|
-
| `
|
|
336
|
+
| `read` | 读取文件内容(支持 `range` 分批读取) |
|
|
337
|
+
| `inspect_file` | 勘察文件结构概况(行数、字符数、列宽分布、行尾风格),不读取内容 |
|
|
338
|
+
| `write` | 写入文件 |
|
|
268
339
|
| `edit` | 替换文件中的文本(单次替换) |
|
|
269
|
-
| `
|
|
340
|
+
| `batch_edit` | 批量编辑文本 |
|
|
270
341
|
| `exec` | 执行 shell 命令 |
|
|
271
|
-
| `
|
|
342
|
+
| `spawn` | 异步执行 shell 命令(立即返回,不等待结果) |
|
|
272
343
|
| `mkdir` | 创建目录 |
|
|
273
344
|
| `rm` | 删除文件或目录 |
|
|
274
345
|
| `glob` | 通配符扫描文件 |
|
|
275
346
|
| `ls` | 列出目录 |
|
|
276
347
|
| `exist` | 检查路径是否存在 |
|
|
277
|
-
| `
|
|
278
|
-
| `
|
|
348
|
+
| `find_text` | 在文件中查找文本 |
|
|
349
|
+
| `download_file` | 从 URL 下载文件 |
|
|
279
350
|
| `rename` | 重命名或移动文件 |
|
|
280
351
|
| `copy` | 复制文件或目录 |
|
|
281
352
|
| `sleep` | 等待指定毫秒数 |
|
|
282
|
-
| `
|
|
283
|
-
| `
|
|
353
|
+
| `view_image` | 查看/分析图片 — 仅视觉模型可用(`Model.vision`)。网络图片直接以 `image_url` 内容块返回;本地图片经 Files API 自动上传后以 `file` 内容块返回 |
|
|
354
|
+
| `generate_image` | 根据描述生成图片 — 需配置 `defaultImageModel`;统一返回字符串(含图片 URL 列表与 `view_image` / `download_file` 提示的 JSON),不再强制返回图片内容块 |
|
|
284
355
|
|
|
285
356
|
### 动态工具
|
|
286
357
|
|
|
@@ -299,7 +370,7 @@ CLI 提供 20 个内置工具,由 `@ai-zen/agents-sdk` 实现。工具可用
|
|
|
299
370
|
工具装配由 SDK 的 `Scope` 能力管线管理,分为三个阶段:
|
|
300
371
|
|
|
301
372
|
1. **发现** — 扫描文件系统获取内置工具、用户工具、SubAgent、Skill 和 MCP 服务器。20 个内置工具全部无条件发现(此阶段不做过滤)
|
|
302
|
-
2. **过滤** — 应用权限(`allow`/`deny`)、安全排除(递归保护),以及各工具自声明的 `isAvailable(config, definition)`(在模型已知的构建阶段判断可用性;如 `
|
|
373
|
+
2. **过滤** — 应用权限(`allow`/`deny`)、安全排除(递归保护),以及各工具自声明的 `isAvailable(config, definition)`(在模型已知的构建阶段判断可用性;如 `view_image` 仅视觉模型、`generate_image` 需配置 `defaultImageModel`)
|
|
303
374
|
3. **实例化** — 将过滤后的名称映射为 `Tool` 实例,注册动态加载器
|
|
304
375
|
|
|
305
376
|
每个 Agent 拥有独立的权限配置,父 Agent 与 SubAgent 之间不继承权限。唯一的例外是 `call_skill_sub_agent` 创建的临时 Skill 子 Agent——它是临时的对话分身而非独立实体,因此沿用调用者的工具能力(不再走第二遍权限过滤)。
|
package/dist/agent-creator.d.ts
CHANGED
|
@@ -6,6 +6,17 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { Scope, SdkAgent } from "@ai-zen/agents-sdk";
|
|
8
8
|
import type { AgentNS } from "@ai-zen/agents-core";
|
|
9
|
+
/**
|
|
10
|
+
* Skill 目录列表(优先级从高到低):
|
|
11
|
+
* 1. 项目/.ai-zen/skills/
|
|
12
|
+
* 2. 项目/.agents/skills/ ← 业界通用规范
|
|
13
|
+
* 3. ~/.ai-zen/skills/
|
|
14
|
+
* 4. ~/.agents/skills/ ← 业界通用规范
|
|
15
|
+
*
|
|
16
|
+
* 同时供 Scope 装配与交接服务(读取 `handoff` Skill 正文)使用,避免两处各算一遍。
|
|
17
|
+
* 只返回**当前真实存在**的目录,不存在的不参与发现。
|
|
18
|
+
*/
|
|
19
|
+
export declare function listSkillDirs(): string[];
|
|
9
20
|
export declare function getScope(): Promise<Scope>;
|
|
10
21
|
/**
|
|
11
22
|
* 重置 Scope 单例:释放当前 Scope(断开 MCP 连接等),下次 `getScope()` 按磁盘配置重建。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-creator.d.ts","sourceRoot":"","sources":["../src/agent-creator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EACL,KAAK,EAGL,QAAQ,EACT,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAiBnD,wBAAsB,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"agent-creator.d.ts","sourceRoot":"","sources":["../src/agent-creator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EACL,KAAK,EAGL,QAAQ,EACT,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAiBnD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAOxC;AAED,wBAAsB,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,CAqC/C;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAShD;AAID,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAchF"}
|
package/dist/agent-creator.js
CHANGED
|
@@ -13,6 +13,24 @@ import { readConfig } from "./config.js";
|
|
|
13
13
|
let _scope = null;
|
|
14
14
|
/** existsSync 的别名,用于数组 .filter() 场景 */
|
|
15
15
|
const exists = existsSync;
|
|
16
|
+
/**
|
|
17
|
+
* Skill 目录列表(优先级从高到低):
|
|
18
|
+
* 1. 项目/.ai-zen/skills/
|
|
19
|
+
* 2. 项目/.agents/skills/ ← 业界通用规范
|
|
20
|
+
* 3. ~/.ai-zen/skills/
|
|
21
|
+
* 4. ~/.agents/skills/ ← 业界通用规范
|
|
22
|
+
*
|
|
23
|
+
* 同时供 Scope 装配与交接服务(读取 `handoff` Skill 正文)使用,避免两处各算一遍。
|
|
24
|
+
* 只返回**当前真实存在**的目录,不存在的不参与发现。
|
|
25
|
+
*/
|
|
26
|
+
export function listSkillDirs() {
|
|
27
|
+
return [
|
|
28
|
+
PROJECT_SKILLS_DIR,
|
|
29
|
+
PROJECT_AGENTS_SKILLS_DIR,
|
|
30
|
+
SKILLS_DIR,
|
|
31
|
+
USER_AGENTS_SKILLS_DIR,
|
|
32
|
+
].filter(exists);
|
|
33
|
+
}
|
|
16
34
|
export async function getScope() {
|
|
17
35
|
if (_scope)
|
|
18
36
|
return _scope;
|
|
@@ -30,17 +48,8 @@ export async function getScope() {
|
|
|
30
48
|
join(AI_ZEN_DIR, "mcp.json"),
|
|
31
49
|
USER_AGENTS_MCP_CONFIG_FILE,
|
|
32
50
|
].filter(exists);
|
|
33
|
-
// Skills
|
|
34
|
-
|
|
35
|
-
// 2. 项目/.agents/skills/ ← 业界通用规范
|
|
36
|
-
// 3. ~/.ai-zen/skills/
|
|
37
|
-
// 4. ~/.agents/skills/ ← 业界通用规范
|
|
38
|
-
const skillsPaths = [
|
|
39
|
-
PROJECT_SKILLS_DIR,
|
|
40
|
-
PROJECT_AGENTS_SKILLS_DIR,
|
|
41
|
-
SKILLS_DIR,
|
|
42
|
-
USER_AGENTS_SKILLS_DIR,
|
|
43
|
-
].filter(exists);
|
|
51
|
+
// Skills 目录优先级(从高到低):见 listSkillDirs()
|
|
52
|
+
const skillsPaths = listSkillDirs();
|
|
44
53
|
_scope = new Scope({
|
|
45
54
|
config,
|
|
46
55
|
agentsDir: AGENTS_DIR,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-creator.js","sourceRoot":"","sources":["../src/agent-creator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EACL,KAAK,EACL,QAAQ,EACR,WAAW,IAAI,cAAc,GAE9B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EACjD,UAAU,EACV,sBAAsB,EAAE,kBAAkB,EAAE,iBAAiB,EAC7D,sBAAsB,EAAE,2BAA2B,EACnD,yBAAyB,EAAE,8BAA8B,GAC1D,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,wDAAwD;AAExD,IAAI,MAAM,GAAiB,IAAI,CAAC;AAEhC,uCAAuC;AACvC,MAAM,MAAM,GAAG,UAAU,CAAC;AAE1B,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAElC,qBAAqB;IACrB,oBAAoB;IACpB,2BAA2B;IAC3B,8CAA8C;IAC9C,0BAA0B;IAC1B,gDAAgD;IAChD,MAAM,QAAQ,GAAG;QACf,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC;QAC1C,8BAA8B;QAC9B,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC;QAC5B,2BAA2B;KAC5B,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAEjB,
|
|
1
|
+
{"version":3,"file":"agent-creator.js","sourceRoot":"","sources":["../src/agent-creator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents-store.d.ts","sourceRoot":"","sources":["../src/agents-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"agents-store.d.ts","sourceRoot":"","sources":["../src/agents-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,eAAe,EAA+B,MAAM,oBAAoB,CAAC;AAIvF,qCAAqC;AACrC,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;AAE7C,sBAAsB;AACtB,wBAAgB,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAEhD;AAED,gBAAgB;AAChB,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAEtD;AAED,oCAAoC;AACpC,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,IAAI,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD;AAED,oBAAoB;AACpB,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,GAAG,eAAe,EAAE,CAE/E;AAED,wBAAwB;AACxB,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,SAAS,EACf,EAAE,EAAE,MAAM,GAAG,SAAS,GACrB,eAAe,GAAG,SAAS,CAG7B;AAED,yBAAyB;AACzB,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,UAAU,CAWpG;AAED,2CAA2C;AAC3C,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,CAiC1D"}
|
package/dist/agents-store.js
CHANGED
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
* 与「快照 + 写操作」的组装,便于 TUI 与单测共用。
|
|
10
10
|
*/
|
|
11
11
|
import { AgentRepository } from "@ai-zen/agents-sdk";
|
|
12
|
-
import { AGENTS_DIR, SUB_AGENTS_DIR } from "./config.js";
|
|
12
|
+
import { AGENTS_DIR, SUB_AGENTS_DIR, readConfig, readReasoningPresets } from "./config.js";
|
|
13
|
+
import { patchOf, presetFor } from "./reasoning-presets.js";
|
|
13
14
|
/** 某个 kind 对应的定义目录 */
|
|
14
15
|
export function agentDir(kind) {
|
|
15
16
|
return kind === "agent" ? AGENTS_DIR : SUB_AGENTS_DIR;
|
|
@@ -43,8 +44,44 @@ export function createAgentStore(agents, subAgents) {
|
|
|
43
44
|
}
|
|
44
45
|
/** 从磁盘读取 Agent / Sub-agent 快照,并附带真实读写能力 */
|
|
45
46
|
export async function readAgentStore() {
|
|
46
|
-
const
|
|
47
|
-
const
|
|
47
|
+
const repoAgents = new AgentRepository(AGENTS_DIR);
|
|
48
|
+
const repoSubAgents = new AgentRepository(SUB_AGENTS_DIR);
|
|
49
|
+
const [rawAgents, rawSubAgents] = await Promise.all([repoAgents.list(), repoSubAgents.list()]);
|
|
50
|
+
// 旧版 `/think` 把档位名写在 `reasoningEffort` 上;现在档位在写入时就展开成参数。
|
|
51
|
+
// 这里做一次性迁移:能查到策略就展开进 `modelParams`,查不到就只删旧字段。
|
|
52
|
+
const isLegacy = (def) => "reasoningEffort" in def;
|
|
53
|
+
const legacy = (defs) => defs.filter(isLegacy);
|
|
54
|
+
const needsMigration = legacy(rawAgents).length + legacy(rawSubAgents).length > 0;
|
|
55
|
+
if (!needsMigration)
|
|
56
|
+
return createAgentStore(rawAgents, rawSubAgents);
|
|
57
|
+
const [config, presets] = await Promise.all([readConfig(), readReasoningPresets()]);
|
|
58
|
+
const migrate = async (repo, defs) => {
|
|
59
|
+
const out = [];
|
|
60
|
+
for (const def of defs) {
|
|
61
|
+
if (!isLegacy(def)) {
|
|
62
|
+
out.push(def);
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
out.push(await migrateDefinition(repo, def, config, presets));
|
|
66
|
+
}
|
|
67
|
+
return out;
|
|
68
|
+
};
|
|
69
|
+
const agents = await migrate(repoAgents, rawAgents);
|
|
70
|
+
const subAgents = await migrate(repoSubAgents, rawSubAgents);
|
|
48
71
|
return createAgentStore(agents, subAgents);
|
|
49
72
|
}
|
|
73
|
+
/** 把旧 `reasoningEffort` 展开成 `modelParams` 并写回(只跑一次:写完旧字段就没了) */
|
|
74
|
+
async function migrateDefinition(repo, def, config, presets) {
|
|
75
|
+
const { reasoningEffort, ...rest } = def;
|
|
76
|
+
// 模型只认 Agent 定义自身的 modelId(配置层已无 defaultModel)
|
|
77
|
+
const modelId = rest.modelId;
|
|
78
|
+
const model = (config.models ?? []).find((item) => item.id === modelId);
|
|
79
|
+
const preset = model ? presetFor(model.id, model.reasoningPreset, presets) : undefined;
|
|
80
|
+
const patch = reasoningEffort ? patchOf(preset, reasoningEffort) : undefined;
|
|
81
|
+
const next = patch
|
|
82
|
+
? { ...rest, modelParams: { ...(rest.modelParams ?? {}), ...patch } }
|
|
83
|
+
: rest;
|
|
84
|
+
await repo.write(next);
|
|
85
|
+
return next;
|
|
86
|
+
}
|
|
50
87
|
//# sourceMappingURL=agents-store.js.map
|
package/dist/agents-store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents-store.js","sourceRoot":"","sources":["../src/agents-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"agents-store.js","sourceRoot":"","sources":["../src/agents-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 自动迁移的「执行者选择」入口(CLI 层)。
|
|
3
|
+
*
|
|
4
|
+
* 背景:SDK 的 `AutoMigratePlugin` 在 `usage.prompt_tokens` 超过阈值时触发迁移,
|
|
5
|
+
* 但「谁来写交接文档」是产品决策——保真度高的**原 agent 自交接**,还是便宜的**独立摘要**。
|
|
6
|
+
* SDK 已把该决策抽象为 `resolveMode` 回调,CLI 在这里把它接到「用户三选一」上:
|
|
7
|
+
* 原 agent 自交接 / 独立摘要 / 跳过本次迁移。
|
|
8
|
+
*
|
|
9
|
+
* 边界(保持 SDK 的分工,不重复实现「何时迁移」的语义):
|
|
10
|
+
* - **何时迁移**:`AutoMigratePlugin`(阈值判断 + busy 让行);
|
|
11
|
+
* - **用什么执行者**:本模块的 `resolveMode`;
|
|
12
|
+
* - **实际怎么交接**:共享的 `HandoffService`(与 `/migrate`、`/handoff` 同一条链路)。
|
|
13
|
+
*
|
|
14
|
+
* 交互约定:
|
|
15
|
+
* - 仅在 stdin 与 stdout **均为 TTY**(人类交互终端)时询问;
|
|
16
|
+
* - 非交互环境(管道、重定向、e2e 脚本)没有选择通道,直接按 `defaultMode` 迁移,
|
|
17
|
+
* 不阻塞等待输入、不额外输出,管道语义不变;
|
|
18
|
+
* - 选择器默认高亮 `self`(保真),Esc/取消 = 跳过本次迁移,不影响当前对话
|
|
19
|
+
* (历史未被剔除);只要仍处于超限状态,下次发送后还会再问。
|
|
20
|
+
*/
|
|
21
|
+
import { AutoMigratePlugin, type AutoMigrateTriggerInfo, type HandoffMode, type HandoffService } from "@ai-zen/agents-sdk";
|
|
22
|
+
export interface AutoMigrateModeOptions {
|
|
23
|
+
/** 交接服务实例(与 `/migrate`、`/handoff` 共用同一实例) */
|
|
24
|
+
service: HandoffService;
|
|
25
|
+
/** 交接阈值(`tokenThresholds.handoff`):prompt_tokens 超过它即触发迁移 */
|
|
26
|
+
handoffTokens: number;
|
|
27
|
+
/**
|
|
28
|
+
* 用户的执行者选择(由调用方注入:TUI 用选择器浮层)。
|
|
29
|
+
* 返回 `null` 表示跳过本次迁移。
|
|
30
|
+
*/
|
|
31
|
+
choose: (info: AutoMigrateTriggerInfo) => Promise<HandoffMode | null>;
|
|
32
|
+
/** 非交互环境下的执行者,默认 `self` */
|
|
33
|
+
defaultMode?: HandoffMode;
|
|
34
|
+
/** 是否需要向用户确认;默认「stdin 与 stdout 均为 TTY」。可注入,便于单测 */
|
|
35
|
+
shouldConfirm?: () => boolean;
|
|
36
|
+
/** 输出信息(如「已跳过本次迁移」);由调用方注入(TUI 走 Ink notice),默认丢弃 */
|
|
37
|
+
log?: (text: string) => void;
|
|
38
|
+
}
|
|
39
|
+
/** 默认交互判定:仅当 stdin 与 stdout 均为 TTY 时才具备选择通道 */
|
|
40
|
+
export declare function canPromptUser(): boolean;
|
|
41
|
+
/** 构造带「执行者选择」的自动迁移插件 */
|
|
42
|
+
export declare function createAutoMigratePlugin(options: AutoMigrateModeOptions): AutoMigratePlugin;
|
|
43
|
+
//# sourceMappingURL=auto-migrate-confirm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-migrate-confirm.d.ts","sourceRoot":"","sources":["../src/auto-migrate-confirm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAChB,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,sBAAsB;IACrC,6CAA6C;IAC7C,OAAO,EAAE,cAAc,CAAC;IACxB,6DAA6D;IAC7D,aAAa,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,MAAM,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACtE,2BAA2B;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,mDAAmD;IACnD,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC;IAC9B,qDAAqD;IACrD,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,+CAA+C;AAC/C,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED,wBAAwB;AACxB,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,sBAAsB,GAAG,iBAAiB,CA4B1F"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 自动迁移的「执行者选择」入口(CLI 层)。
|
|
3
|
+
*
|
|
4
|
+
* 背景:SDK 的 `AutoMigratePlugin` 在 `usage.prompt_tokens` 超过阈值时触发迁移,
|
|
5
|
+
* 但「谁来写交接文档」是产品决策——保真度高的**原 agent 自交接**,还是便宜的**独立摘要**。
|
|
6
|
+
* SDK 已把该决策抽象为 `resolveMode` 回调,CLI 在这里把它接到「用户三选一」上:
|
|
7
|
+
* 原 agent 自交接 / 独立摘要 / 跳过本次迁移。
|
|
8
|
+
*
|
|
9
|
+
* 边界(保持 SDK 的分工,不重复实现「何时迁移」的语义):
|
|
10
|
+
* - **何时迁移**:`AutoMigratePlugin`(阈值判断 + busy 让行);
|
|
11
|
+
* - **用什么执行者**:本模块的 `resolveMode`;
|
|
12
|
+
* - **实际怎么交接**:共享的 `HandoffService`(与 `/migrate`、`/handoff` 同一条链路)。
|
|
13
|
+
*
|
|
14
|
+
* 交互约定:
|
|
15
|
+
* - 仅在 stdin 与 stdout **均为 TTY**(人类交互终端)时询问;
|
|
16
|
+
* - 非交互环境(管道、重定向、e2e 脚本)没有选择通道,直接按 `defaultMode` 迁移,
|
|
17
|
+
* 不阻塞等待输入、不额外输出,管道语义不变;
|
|
18
|
+
* - 选择器默认高亮 `self`(保真),Esc/取消 = 跳过本次迁移,不影响当前对话
|
|
19
|
+
* (历史未被剔除);只要仍处于超限状态,下次发送后还会再问。
|
|
20
|
+
*/
|
|
21
|
+
import { AutoMigratePlugin, } from "@ai-zen/agents-sdk";
|
|
22
|
+
/** 默认交互判定:仅当 stdin 与 stdout 均为 TTY 时才具备选择通道 */
|
|
23
|
+
export function canPromptUser() {
|
|
24
|
+
return Boolean(process.stdin.isTTY && process.stdout.isTTY);
|
|
25
|
+
}
|
|
26
|
+
/** 构造带「执行者选择」的自动迁移插件 */
|
|
27
|
+
export function createAutoMigratePlugin(options) {
|
|
28
|
+
const { service, handoffTokens, choose, defaultMode = "self", shouldConfirm = canPromptUser, log = () => { }, } = options;
|
|
29
|
+
return new AutoMigratePlugin({
|
|
30
|
+
service,
|
|
31
|
+
handoffTokens,
|
|
32
|
+
resolveMode: async (info) => {
|
|
33
|
+
// 非交互环境:没有选择通道,按默认执行者迁移(不阻塞、不额外输出)
|
|
34
|
+
if (!shouldConfirm())
|
|
35
|
+
return defaultMode;
|
|
36
|
+
const mode = await choose(info);
|
|
37
|
+
if (mode == null) {
|
|
38
|
+
// 合并为单条:notice 通道只保留最新一条,拆成两行会被后者覆盖
|
|
39
|
+
log("⏭️ 已跳过本次任务迁移;可随时输入 /migrate 手动迁移,若继续增长至严重超限对话会被安全护栏中断。");
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
return mode;
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=auto-migrate-confirm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-migrate-confirm.js","sourceRoot":"","sources":["../src/auto-migrate-confirm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EACL,iBAAiB,GAIlB,MAAM,oBAAoB,CAAC;AAoB5B,+CAA+C;AAC/C,MAAM,UAAU,aAAa;IAC3B,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED,wBAAwB;AACxB,MAAM,UAAU,uBAAuB,CAAC,OAA+B;IACrE,MAAM,EACJ,OAAO,EACP,aAAa,EACb,MAAM,EACN,WAAW,GAAG,MAAM,EACpB,aAAa,GAAG,aAAa,EAC7B,GAAG,GAAG,GAAG,EAAE,GAAE,CAAC,GACf,GAAG,OAAO,CAAC;IAEZ,OAAO,IAAI,iBAAiB,CAAC;QAC3B,OAAO;QACP,aAAa;QACb,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC1B,mCAAmC;YACnC,IAAI,CAAC,aAAa,EAAE;gBAAE,OAAO,WAAW,CAAC;YAEzC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;gBACjB,oCAAoC;gBACpC,GAAG,CACD,wDAAwD,CACzD,CAAC;gBACF,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
package/dist/config-editor.d.ts
CHANGED
|
@@ -55,8 +55,6 @@ export declare function apiKeyGuide(baseUrl: string | undefined): ApiKeyGuide;
|
|
|
55
55
|
export declare function setEndpointApiKey(config: AppConfig, endpointId: string, apiKey: string): AppConfig;
|
|
56
56
|
/** 写入某端点的 Base URL(去除首尾空白) */
|
|
57
57
|
export declare function setEndpointBaseUrl(config: AppConfig, endpointId: string, baseUrl: string): AppConfig;
|
|
58
|
-
/** 设置默认模型(传 `undefined` 表示清空,交由 SDK 回退出厂默认) */
|
|
59
|
-
export declare function setDefaultModel(config: AppConfig, modelId: string | undefined): AppConfig;
|
|
60
58
|
/** 由端点名派生唯一的端点 id */
|
|
61
59
|
export declare function uniqueEndpointId(config: AppConfig, name: string): string;
|
|
62
60
|
/** 由模型名派生唯一的模型 id */
|
|
@@ -79,8 +77,10 @@ export declare function removeEndpoint(config: AppConfig, endpointId: string): A
|
|
|
79
77
|
/** 通用模型字段改写(不可变) */
|
|
80
78
|
export declare function updateModel(config: AppConfig, modelId: string, patch: Partial<Model>): AppConfig;
|
|
81
79
|
/**
|
|
82
|
-
* 删除模型;若 `
|
|
83
|
-
*
|
|
80
|
+
* 删除模型;若 `defaultMigrationModel` 指向它,则改指剩余的第一个模型(无剩余则清空)。
|
|
81
|
+
*
|
|
82
|
+
* 模型真相源是 `AgentDefinition.modelId`(不在配置里),所以这里无需处理任何
|
|
83
|
+
* 「默认模型」——删除后由 `createAgent` 报错引导用户重选,而不是静默回退。
|
|
84
84
|
*/
|
|
85
85
|
export declare function removeModel(config: AppConfig, modelId: string): AppConfig;
|
|
86
86
|
/** 新增模型(id 由名称派生;默认 `custom: true`,避免被 SDK 出厂清单托管覆盖) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-editor.d.ts","sourceRoot":"","sources":["../src/config-editor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,UAAU,EACV,KAAK,EACL,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAiB,MAAM,aAAa,CAAC;AAI5E,gBAAgB;AAChB,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,CAG3F;AAED,gBAAgB;AAChB,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAGpG;AAED,6BAA6B;AAC7B,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,KAAK,EAAE,CAElF;AAED,6BAA6B;AAC7B,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE/D;AAED,iCAAiC;AACjC,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc;IACd,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,CAc5G;AAED,0CAA0C;AAC1C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAK5D;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAK7D;AAED,4BAA4B;AAC5B,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAUD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAMpE;AAID,6BAA6B;AAC7B,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAOlG;AAED,8BAA8B;AAC9B,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAOpG;
|
|
1
|
+
{"version":3,"file":"config-editor.d.ts","sourceRoot":"","sources":["../src/config-editor.ts"],"names":[],"mappings":"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"}
|
package/dist/config-editor.js
CHANGED
|
@@ -103,10 +103,6 @@ export function setEndpointBaseUrl(config, endpointId, baseUrl) {
|
|
|
103
103
|
endpoints: config.endpoints.map((endpoint) => endpoint.id === endpointId ? { ...endpoint, baseUrl: baseUrl.trim() } : endpoint),
|
|
104
104
|
};
|
|
105
105
|
}
|
|
106
|
-
/** 设置默认模型(传 `undefined` 表示清空,交由 SDK 回退出厂默认) */
|
|
107
|
-
export function setDefaultModel(config, modelId) {
|
|
108
|
-
return { ...config, defaultModel: modelId };
|
|
109
|
-
}
|
|
110
106
|
/** 由名称派生唯一 id:小写、非字母数字折叠为 `-`,冲突时追加序号 */
|
|
111
107
|
function deriveUniqueId(taken, name, fallback) {
|
|
112
108
|
const base = name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 32) || fallback;
|
|
@@ -161,8 +157,10 @@ export function updateModel(config, modelId, patch) {
|
|
|
161
157
|
};
|
|
162
158
|
}
|
|
163
159
|
/**
|
|
164
|
-
* 删除模型;若 `
|
|
165
|
-
*
|
|
160
|
+
* 删除模型;若 `defaultMigrationModel` 指向它,则改指剩余的第一个模型(无剩余则清空)。
|
|
161
|
+
*
|
|
162
|
+
* 模型真相源是 `AgentDefinition.modelId`(不在配置里),所以这里无需处理任何
|
|
163
|
+
* 「默认模型」——删除后由 `createAgent` 报错引导用户重选,而不是静默回退。
|
|
166
164
|
*/
|
|
167
165
|
export function removeModel(config, modelId) {
|
|
168
166
|
const models = config.models.filter((model) => model.id !== modelId);
|
|
@@ -171,7 +169,6 @@ export function removeModel(config, modelId) {
|
|
|
171
169
|
return {
|
|
172
170
|
...config,
|
|
173
171
|
models,
|
|
174
|
-
defaultModel: config.defaultModel && ids.has(config.defaultModel) ? config.defaultModel : fallback,
|
|
175
172
|
defaultMigrationModel: config.defaultMigrationModel && ids.has(config.defaultMigrationModel)
|
|
176
173
|
? config.defaultMigrationModel
|
|
177
174
|
: fallback,
|
|
@@ -185,7 +182,8 @@ export function addModel(config, input) {
|
|
|
185
182
|
name: input.name.trim() || id,
|
|
186
183
|
endpointId: input.endpointId,
|
|
187
184
|
modelName: input.modelName?.trim() || id,
|
|
188
|
-
|
|
185
|
+
// 交接软线 128K / 阻断硬线 192K(与 SDK 迁移兜底一致)
|
|
186
|
+
tokenThresholds: { handoff: 128_000, guard: 192_000 },
|
|
189
187
|
custom: true,
|
|
190
188
|
};
|
|
191
189
|
return { config: { ...config, models: [...config.models, model] }, model };
|