@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.
Files changed (336) hide show
  1. package/CHANGELOG.md +1340 -269
  2. package/LICENSE +21 -0
  3. package/README.md +136 -31
  4. package/README.zh.md +136 -31
  5. package/dist/agent-creator.d.ts +11 -0
  6. package/dist/agent-creator.d.ts.map +1 -1
  7. package/dist/agent-creator.js +50 -20
  8. package/dist/agent-creator.js.map +1 -1
  9. package/dist/agent-switch.d.ts +61 -0
  10. package/dist/agent-switch.d.ts.map +1 -0
  11. package/dist/agent-switch.js +83 -0
  12. package/dist/agent-switch.js.map +1 -0
  13. package/dist/agents-store.d.ts +6 -1
  14. package/dist/agents-store.d.ts.map +1 -1
  15. package/dist/agents-store.js +46 -4
  16. package/dist/agents-store.js.map +1 -1
  17. package/dist/auto-migrate-confirm.d.ts +43 -0
  18. package/dist/auto-migrate-confirm.d.ts.map +1 -0
  19. package/dist/auto-migrate-confirm.js +47 -0
  20. package/dist/auto-migrate-confirm.js.map +1 -0
  21. package/dist/clipboard.d.ts +68 -0
  22. package/dist/clipboard.d.ts.map +1 -0
  23. package/dist/clipboard.js +177 -0
  24. package/dist/clipboard.js.map +1 -0
  25. package/dist/config-editor.d.ts +42 -5
  26. package/dist/config-editor.d.ts.map +1 -1
  27. package/dist/config-editor.js +80 -27
  28. package/dist/config-editor.js.map +1 -1
  29. package/dist/config.d.ts +76 -17
  30. package/dist/config.d.ts.map +1 -1
  31. package/dist/config.js +143 -39
  32. package/dist/config.js.map +1 -1
  33. package/dist/conversation-commands/registry.d.ts +127 -4
  34. package/dist/conversation-commands/registry.d.ts.map +1 -1
  35. package/dist/conversation-commands/registry.js +93 -14
  36. package/dist/conversation-commands/registry.js.map +1 -1
  37. package/dist/conversation-persist-plugin.d.ts +0 -1
  38. package/dist/conversation-persist-plugin.d.ts.map +1 -1
  39. package/dist/conversation-persist-plugin.js +7 -16
  40. package/dist/conversation-persist-plugin.js.map +1 -1
  41. package/dist/conversation-repository.d.ts +79 -18
  42. package/dist/conversation-repository.d.ts.map +1 -1
  43. package/dist/conversation-repository.js +96 -30
  44. package/dist/conversation-repository.js.map +1 -1
  45. package/dist/cwd-tracker-plugin.d.ts.map +1 -1
  46. package/dist/cwd-tracker-plugin.js +22 -7
  47. package/dist/cwd-tracker-plugin.js.map +1 -1
  48. package/dist/format-time.d.ts +17 -6
  49. package/dist/format-time.d.ts.map +1 -1
  50. package/dist/format-time.js +32 -14
  51. package/dist/format-time.js.map +1 -1
  52. package/dist/handoff-service.d.ts +19 -0
  53. package/dist/handoff-service.d.ts.map +1 -0
  54. package/dist/handoff-service.js +85 -0
  55. package/dist/handoff-service.js.map +1 -0
  56. package/dist/hook.d.ts.map +1 -1
  57. package/dist/hook.js +69 -15
  58. package/dist/hook.js.map +1 -1
  59. package/dist/i18n/en-wizard.d.ts +8 -0
  60. package/dist/i18n/en-wizard.d.ts.map +1 -0
  61. package/dist/i18n/en-wizard.js +303 -0
  62. package/dist/i18n/en-wizard.js.map +1 -0
  63. package/dist/i18n/en.d.ts +7 -0
  64. package/dist/i18n/en.d.ts.map +1 -0
  65. package/dist/i18n/en.js +245 -0
  66. package/dist/i18n/en.js.map +1 -0
  67. package/dist/i18n/index.d.ts +57 -0
  68. package/dist/i18n/index.d.ts.map +1 -0
  69. package/dist/i18n/index.js +109 -0
  70. package/dist/i18n/index.js.map +1 -0
  71. package/dist/i18n/preferences.d.ts +37 -0
  72. package/dist/i18n/preferences.d.ts.map +1 -0
  73. package/dist/i18n/preferences.js +73 -0
  74. package/dist/i18n/preferences.js.map +1 -0
  75. package/dist/i18n/zh-wizard.d.ts +11 -0
  76. package/dist/i18n/zh-wizard.d.ts.map +1 -0
  77. package/dist/i18n/zh-wizard.js +306 -0
  78. package/dist/i18n/zh-wizard.js.map +1 -0
  79. package/dist/i18n/zh.d.ts +10 -0
  80. package/dist/i18n/zh.d.ts.map +1 -0
  81. package/dist/i18n/zh.js +249 -0
  82. package/dist/i18n/zh.js.map +1 -0
  83. package/dist/index.js +52 -23
  84. package/dist/index.js.map +1 -1
  85. package/dist/mcp-command.d.ts +32 -0
  86. package/dist/mcp-command.d.ts.map +1 -0
  87. package/dist/mcp-command.js +37 -0
  88. package/dist/mcp-command.js.map +1 -0
  89. package/dist/mode.d.ts +31 -4
  90. package/dist/mode.d.ts.map +1 -1
  91. package/dist/mode.js +42 -7
  92. package/dist/mode.js.map +1 -1
  93. package/dist/model-switch.d.ts +58 -0
  94. package/dist/model-switch.d.ts.map +1 -0
  95. package/dist/model-switch.js +62 -0
  96. package/dist/model-switch.js.map +1 -0
  97. package/dist/reasoning-effort.d.ts +96 -0
  98. package/dist/reasoning-effort.d.ts.map +1 -0
  99. package/dist/reasoning-effort.js +164 -0
  100. package/dist/reasoning-effort.js.map +1 -0
  101. package/dist/reasoning-presets.d.ts +34 -0
  102. package/dist/reasoning-presets.d.ts.map +1 -0
  103. package/dist/reasoning-presets.js +85 -0
  104. package/dist/reasoning-presets.js.map +1 -0
  105. package/dist/sdk-log.d.ts +84 -0
  106. package/dist/sdk-log.d.ts.map +1 -0
  107. package/dist/sdk-log.js +167 -0
  108. package/dist/sdk-log.js.map +1 -0
  109. package/dist/session-pointer.d.ts.map +1 -1
  110. package/dist/session-pointer.js +10 -4
  111. package/dist/session-pointer.js.map +1 -1
  112. package/dist/stdio-runner.d.ts.map +1 -1
  113. package/dist/stdio-runner.js +32 -30
  114. package/dist/stdio-runner.js.map +1 -1
  115. package/dist/sub-agent-guard-plugin.d.ts +10 -7
  116. package/dist/sub-agent-guard-plugin.d.ts.map +1 -1
  117. package/dist/sub-agent-guard-plugin.js +12 -9
  118. package/dist/sub-agent-guard-plugin.js.map +1 -1
  119. package/dist/tui/chat-history.d.ts +29 -0
  120. package/dist/tui/chat-history.d.ts.map +1 -0
  121. package/dist/tui/chat-history.js +55 -0
  122. package/dist/tui/chat-history.js.map +1 -0
  123. package/dist/tui/chat-session.d.ts +144 -13
  124. package/dist/tui/chat-session.d.ts.map +1 -1
  125. package/dist/tui/chat-session.js +312 -73
  126. package/dist/tui/chat-session.js.map +1 -1
  127. package/dist/tui/components.d.ts +109 -6
  128. package/dist/tui/components.d.ts.map +1 -1
  129. package/dist/tui/components.js +177 -12
  130. package/dist/tui/components.js.map +1 -1
  131. package/dist/tui/config-wizard/detail.d.ts +18 -10
  132. package/dist/tui/config-wizard/detail.d.ts.map +1 -1
  133. package/dist/tui/config-wizard/detail.js +53 -46
  134. package/dist/tui/config-wizard/detail.js.map +1 -1
  135. package/dist/tui/config-wizard/engine.d.ts +2 -2
  136. package/dist/tui/config-wizard/engine.d.ts.map +1 -1
  137. package/dist/tui/config-wizard/engine.js +48 -26
  138. package/dist/tui/config-wizard/engine.js.map +1 -1
  139. package/dist/tui/config-wizard/fields.d.ts +3 -1
  140. package/dist/tui/config-wizard/fields.d.ts.map +1 -1
  141. package/dist/tui/config-wizard/fields.js +202 -167
  142. package/dist/tui/config-wizard/fields.js.map +1 -1
  143. package/dist/tui/config-wizard/frame.js +1 -1
  144. package/dist/tui/config-wizard/kv-editor.d.ts.map +1 -1
  145. package/dist/tui/config-wizard/kv-editor.js +13 -5
  146. package/dist/tui/config-wizard/kv-editor.js.map +1 -1
  147. package/dist/tui/config-wizard/list.d.ts +3 -1
  148. package/dist/tui/config-wizard/list.d.ts.map +1 -1
  149. package/dist/tui/config-wizard/list.js +4 -4
  150. package/dist/tui/config-wizard/list.js.map +1 -1
  151. package/dist/tui/config-wizard/mcp-helpers.d.ts.map +1 -1
  152. package/dist/tui/config-wizard/mcp-helpers.js +4 -3
  153. package/dist/tui/config-wizard/mcp-helpers.js.map +1 -1
  154. package/dist/tui/config-wizard/menu.d.ts.map +1 -1
  155. package/dist/tui/config-wizard/menu.js +33 -21
  156. package/dist/tui/config-wizard/menu.js.map +1 -1
  157. package/dist/tui/config-wizard/prompt-editor.d.ts +8 -1
  158. package/dist/tui/config-wizard/prompt-editor.d.ts.map +1 -1
  159. package/dist/tui/config-wizard/prompt-editor.js +11 -7
  160. package/dist/tui/config-wizard/prompt-editor.js.map +1 -1
  161. package/dist/tui/config-wizard/prompt.d.ts.map +1 -1
  162. package/dist/tui/config-wizard/prompt.js +8 -7
  163. package/dist/tui/config-wizard/prompt.js.map +1 -1
  164. package/dist/tui/config-wizard/step-agents.d.ts.map +1 -1
  165. package/dist/tui/config-wizard/step-agents.js +50 -29
  166. package/dist/tui/config-wizard/step-agents.js.map +1 -1
  167. package/dist/tui/config-wizard/step-defaults.d.ts.map +1 -1
  168. package/dist/tui/config-wizard/step-defaults.js +77 -27
  169. package/dist/tui/config-wizard/step-defaults.js.map +1 -1
  170. package/dist/tui/config-wizard/step-endpoints.d.ts.map +1 -1
  171. package/dist/tui/config-wizard/step-endpoints.js +27 -14
  172. package/dist/tui/config-wizard/step-endpoints.js.map +1 -1
  173. package/dist/tui/config-wizard/step-mcp.d.ts.map +1 -1
  174. package/dist/tui/config-wizard/step-mcp.js +29 -25
  175. package/dist/tui/config-wizard/step-mcp.js.map +1 -1
  176. package/dist/tui/config-wizard/step-models.d.ts.map +1 -1
  177. package/dist/tui/config-wizard/step-models.js +98 -43
  178. package/dist/tui/config-wizard/step-models.js.map +1 -1
  179. package/dist/tui/config-wizard/step-new-endpoint.d.ts.map +1 -1
  180. package/dist/tui/config-wizard/step-new-endpoint.js +16 -12
  181. package/dist/tui/config-wizard/step-new-endpoint.js.map +1 -1
  182. package/dist/tui/config-wizard/step-simple.d.ts.map +1 -1
  183. package/dist/tui/config-wizard/step-simple.js +18 -17
  184. package/dist/tui/config-wizard/step-simple.js.map +1 -1
  185. package/dist/tui/config-wizard/types.d.ts +31 -3
  186. package/dist/tui/config-wizard/types.d.ts.map +1 -1
  187. package/dist/tui/config-wizard/types.js.map +1 -1
  188. package/dist/tui/file-index.d.ts +38 -0
  189. package/dist/tui/file-index.d.ts.map +1 -0
  190. package/dist/tui/file-index.js +117 -0
  191. package/dist/tui/file-index.js.map +1 -0
  192. package/dist/tui/index.d.ts +17 -1
  193. package/dist/tui/index.d.ts.map +1 -1
  194. package/dist/tui/index.js +105 -49
  195. package/dist/tui/index.js.map +1 -1
  196. package/dist/tui/input-editing.d.ts +52 -0
  197. package/dist/tui/input-editing.d.ts.map +1 -0
  198. package/dist/tui/input-editing.js +91 -0
  199. package/dist/tui/input-editing.js.map +1 -0
  200. package/dist/tui/key-debug.d.ts +62 -0
  201. package/dist/tui/key-debug.d.ts.map +1 -0
  202. package/dist/tui/key-debug.js +92 -0
  203. package/dist/tui/key-debug.js.map +1 -0
  204. package/dist/tui/mention.d.ts +47 -0
  205. package/dist/tui/mention.d.ts.map +1 -0
  206. package/dist/tui/mention.js +152 -0
  207. package/dist/tui/mention.js.map +1 -0
  208. package/dist/tui/mouse.d.ts +55 -0
  209. package/dist/tui/mouse.d.ts.map +1 -0
  210. package/dist/tui/mouse.js +74 -0
  211. package/dist/tui/mouse.js.map +1 -0
  212. package/dist/tui/phase.d.ts +64 -0
  213. package/dist/tui/phase.d.ts.map +1 -0
  214. package/dist/tui/phase.js +112 -0
  215. package/dist/tui/phase.js.map +1 -0
  216. package/dist/tui/screens/agent-tabs.d.ts +53 -0
  217. package/dist/tui/screens/agent-tabs.d.ts.map +1 -0
  218. package/dist/tui/screens/agent-tabs.js +81 -0
  219. package/dist/tui/screens/agent-tabs.js.map +1 -0
  220. package/dist/tui/screens/chat-commands.d.ts +78 -1
  221. package/dist/tui/screens/chat-commands.d.ts.map +1 -1
  222. package/dist/tui/screens/chat-commands.js +688 -157
  223. package/dist/tui/screens/chat-commands.js.map +1 -1
  224. package/dist/tui/screens/chat.d.ts +57 -1
  225. package/dist/tui/screens/chat.d.ts.map +1 -1
  226. package/dist/tui/screens/chat.js +751 -265
  227. package/dist/tui/screens/chat.js.map +1 -1
  228. package/dist/tui/screens/common-keys.d.ts +36 -0
  229. package/dist/tui/screens/common-keys.d.ts.map +1 -0
  230. package/dist/tui/screens/common-keys.js +67 -0
  231. package/dist/tui/screens/common-keys.js.map +1 -0
  232. package/dist/tui/screens/frame-buffer.d.ts.map +1 -1
  233. package/dist/tui/screens/frame-buffer.js.map +1 -1
  234. package/dist/tui/screens/handoff-choice.d.ts +37 -0
  235. package/dist/tui/screens/handoff-choice.d.ts.map +1 -0
  236. package/dist/tui/screens/handoff-choice.js +42 -0
  237. package/dist/tui/screens/handoff-choice.js.map +1 -0
  238. package/dist/tui/screens/index.d.ts +7 -5
  239. package/dist/tui/screens/index.d.ts.map +1 -1
  240. package/dist/tui/screens/index.js +6 -5
  241. package/dist/tui/screens/index.js.map +1 -1
  242. package/dist/tui/screens/input-row.d.ts +64 -0
  243. package/dist/tui/screens/input-row.d.ts.map +1 -0
  244. package/dist/tui/screens/input-row.js +67 -0
  245. package/dist/tui/screens/input-row.js.map +1 -0
  246. package/dist/tui/screens/input.d.ts +77 -1
  247. package/dist/tui/screens/input.d.ts.map +1 -1
  248. package/dist/tui/screens/input.js +125 -8
  249. package/dist/tui/screens/input.js.map +1 -1
  250. package/dist/tui/screens/layout.d.ts +49 -0
  251. package/dist/tui/screens/layout.d.ts.map +1 -1
  252. package/dist/tui/screens/layout.js +45 -7
  253. package/dist/tui/screens/layout.js.map +1 -1
  254. package/dist/tui/screens/lines.d.ts +7 -0
  255. package/dist/tui/screens/lines.d.ts.map +1 -1
  256. package/dist/tui/screens/lines.js +6 -6
  257. package/dist/tui/screens/lines.js.map +1 -1
  258. package/dist/tui/screens/messages-view.d.ts +20 -1
  259. package/dist/tui/screens/messages-view.d.ts.map +1 -1
  260. package/dist/tui/screens/messages-view.js +55 -8
  261. package/dist/tui/screens/messages-view.js.map +1 -1
  262. package/dist/tui/screens/notice-bar.d.ts +5 -0
  263. package/dist/tui/screens/notice-bar.d.ts.map +1 -0
  264. package/dist/tui/screens/notice-bar.js +21 -0
  265. package/dist/tui/screens/notice-bar.js.map +1 -0
  266. package/dist/tui/screens/notice.d.ts +44 -10
  267. package/dist/tui/screens/notice.d.ts.map +1 -1
  268. package/dist/tui/screens/notice.js +75 -15
  269. package/dist/tui/screens/notice.js.map +1 -1
  270. package/dist/tui/screens/overlays.d.ts.map +1 -1
  271. package/dist/tui/screens/overlays.js +4 -3
  272. package/dist/tui/screens/overlays.js.map +1 -1
  273. package/dist/tui/screens/render.d.ts +1 -1
  274. package/dist/tui/screens/render.d.ts.map +1 -1
  275. package/dist/tui/screens/render.js +18 -11
  276. package/dist/tui/screens/render.js.map +1 -1
  277. package/dist/tui/screens/use-chat-viewport.d.ts +22 -0
  278. package/dist/tui/screens/use-chat-viewport.d.ts.map +1 -0
  279. package/dist/tui/screens/use-chat-viewport.js +50 -0
  280. package/dist/tui/screens/use-chat-viewport.js.map +1 -0
  281. package/dist/tui/screens/use-input-editing.d.ts +69 -0
  282. package/dist/tui/screens/use-input-editing.d.ts.map +1 -0
  283. package/dist/tui/screens/use-input-editing.js +220 -0
  284. package/dist/tui/screens/use-input-editing.js.map +1 -0
  285. package/dist/tui/screens/use-overlays.d.ts +25 -0
  286. package/dist/tui/screens/use-overlays.d.ts.map +1 -0
  287. package/dist/tui/screens/use-overlays.js +32 -0
  288. package/dist/tui/screens/use-overlays.js.map +1 -0
  289. package/dist/tui/screens/use-wizard-host.d.ts +46 -0
  290. package/dist/tui/screens/use-wizard-host.d.ts.map +1 -0
  291. package/dist/tui/screens/use-wizard-host.js +123 -0
  292. package/dist/tui/screens/use-wizard-host.js.map +1 -0
  293. package/dist/tui/screens/welcome.d.ts +12 -0
  294. package/dist/tui/screens/welcome.d.ts.map +1 -0
  295. package/dist/tui/screens/welcome.js +36 -0
  296. package/dist/tui/screens/welcome.js.map +1 -0
  297. package/dist/tui/status-segments.d.ts +37 -0
  298. package/dist/tui/status-segments.d.ts.map +1 -0
  299. package/dist/tui/status-segments.js +166 -0
  300. package/dist/tui/status-segments.js.map +1 -0
  301. package/dist/tui/text.d.ts +22 -7
  302. package/dist/tui/text.d.ts.map +1 -1
  303. package/dist/tui/text.js +110 -39
  304. package/dist/tui/text.js.map +1 -1
  305. package/dist/tui/theme.d.ts +2 -0
  306. package/dist/tui/theme.d.ts.map +1 -1
  307. package/dist/tui/theme.js +2 -0
  308. package/dist/tui/theme.js.map +1 -1
  309. package/dist/tui/token-rate.d.ts +83 -0
  310. package/dist/tui/token-rate.d.ts.map +1 -0
  311. package/dist/tui/token-rate.js +195 -0
  312. package/dist/tui/token-rate.js.map +1 -0
  313. package/dist/types.d.ts +7 -8
  314. package/dist/types.d.ts.map +1 -1
  315. package/dist/user-content.d.ts +41 -0
  316. package/dist/user-content.d.ts.map +1 -0
  317. package/dist/user-content.js +37 -0
  318. package/dist/user-content.js.map +1 -0
  319. package/dist/version-compare.d.ts +37 -0
  320. package/dist/version-compare.d.ts.map +1 -0
  321. package/dist/version-compare.js +105 -0
  322. package/dist/version-compare.js.map +1 -0
  323. package/dist/version.js.map +1 -1
  324. package/package.json +7 -5
  325. package/dist/auto-migrate-confirm-plugin.d.ts +0 -58
  326. package/dist/auto-migrate-confirm-plugin.d.ts.map +0 -1
  327. package/dist/auto-migrate-confirm-plugin.js +0 -61
  328. package/dist/auto-migrate-confirm-plugin.js.map +0 -1
  329. package/dist/migration-service.d.ts +0 -15
  330. package/dist/migration-service.d.ts.map +0 -1
  331. package/dist/migration-service.js +0 -59
  332. package/dist/migration-service.js.map +0 -1
  333. package/dist/tui/screens/splash.d.ts +0 -5
  334. package/dist/tui/screens/splash.d.ts.map +0 -1
  335. package/dist/tui/screens/splash.js +0 -51
  336. package/dist/tui/screens/splash.js.map +0 -1
@@ -9,65 +9,142 @@
9
9
  * 本模块不依赖 React / Ink,可独立单测。
10
10
  */
11
11
  import { AgentNS, sumUsage } from "@ai-zen/agents-core";
12
+ import { t } from "../i18n/index.js";
12
13
  import { AutoRefreshToolsPlugin, ContextGuardPlugin, } from "@ai-zen/agents-sdk";
13
14
  import { createAgent, resetScope } from "../agent-creator.js";
14
15
  import { readConfig } from "../config.js";
16
+ import { buildUserContent } from "../user-content.js";
15
17
  import { CwdTrackerPlugin } from "../cwd-tracker-plugin.js";
16
18
  import { ConversationPersistPlugin } from "../conversation-persist-plugin.js";
17
19
  import { SubAgentGuardInstallerPlugin } from "../sub-agent-guard-plugin.js";
18
- import { AutoMigrateConfirmPlugin } from "../auto-migrate-confirm-plugin.js";
19
- import { createMigrationService } from "../migration-service.js";
20
- import { conversationRepository, generateConversationId } from "../conversation-repository.js";
21
- import { writeLastSession } from "../session-pointer.js";
20
+ import { createAutoMigratePlugin } from "../auto-migrate-confirm.js";
21
+ import { createHandoffService } from "../handoff-service.js";
22
+ import { promises as fs } from "node:fs";
23
+ import { generateConversationId, conversationRepository, persistConversation, } from "../conversation-repository.js";
22
24
  import { stripCwdNote } from "./text.js";
25
+ import { TokenRateMeter, deltaText } from "./token-rate.js";
26
+ import { PhaseTracker } from "./phase.js";
27
+ /**
28
+ * 把「请求即将发出」报给阶段跟踪器。
29
+ *
30
+ * SDK 的 `open` 事件是在 `chat.completions.create()` **await 返回之后**才发的,
31
+ * 也就是说它只代表响应头到了;在那之前的 DNS / TCP / TLS / 服务端受理都是静黙的。
32
+ * 所以要一个插件钩子把这一段补上——否则首轮会一直停在上一个状态。
33
+ */
34
+ class PhasePlugin {
35
+ tracker;
36
+ constructor(tracker) {
37
+ this.tracker = tracker;
38
+ }
39
+ onInnerLoopStart() {
40
+ this.tracker.connecting();
41
+ }
42
+ }
23
43
  /** 去掉 CwdTrackerPlugin 追加在用户消息末尾的工作目录提示(转发自 ./text.js) */
24
44
  export { stripCwdNote };
25
45
  export class ChatSession {
26
- modelId;
46
+ /**
47
+ * 当前模型 id —— 从 Agent 定义读,**不再单独存一份**。
48
+ *
49
+ * 模型的唯一真相源是 `AgentDefinition.modelId`:会话不记模型,配置也没有
50
+ * `defaultModel`。这样状态栏、落盘与 SDK 实发请求用的永远是同一个值。
51
+ */
52
+ get modelId() {
53
+ return this.agent.definition.modelId ?? "";
54
+ }
27
55
  agentId;
28
- maxTokens;
29
- currentName;
30
- currentId;
56
+ /** 当前模型的上下文阈值(交接软线 + 阻断硬线),缺省时不装护栏插件 */
57
+ tokenThresholds;
58
+ /**
59
+ * 会话 id / 名称的**唯一真相源是 `ctx`**(`ConversationContext`)。
60
+ *
61
+ * 为什么必须代理而不是各存一份:自动迁移由 SDK 的 `AutoMigratePlugin` 直接驱动
62
+ * `HandoffService.migrate()`,**不经过本类任何方法**,新 id 只会写进 `ctx.currentId`
63
+ * (`onMigrated` 钩子)。若本类另持一份 `currentId`,自动迁移后它就停在旧值上,
64
+ * 而 `ConversationPersistPlugin.getId()` 读的正是这份旧值——于是 prune 之后的
65
+ * 「系统提示 + 交接断点」会被写进**旧会话文件**,把已保存的完整历史覆盖掉。
66
+ */
67
+ get currentId() {
68
+ return this.ctx.currentId;
69
+ }
70
+ set currentId(id) {
71
+ this.ctx.currentId = id;
72
+ }
73
+ get currentName() {
74
+ return this.ctx.currentName;
75
+ }
76
+ set currentName(name) {
77
+ this.ctx.currentName = name;
78
+ }
31
79
  agent;
32
80
  ctx;
33
- migrationService;
81
+ handoffService;
34
82
  notifier;
35
- requestConfirm;
83
+ requestMode;
36
84
  disposers = [];
37
- constructor(migrationService, ctx, options, maxTokens, notifier) {
38
- this.migrationService = migrationService;
85
+ /** 生成过程的 token 速率统计(状态栏展示,见 `token-rate.ts`) */
86
+ rate = new TokenRateMeter();
87
+ /** 当前生成阶段(消息栏 spinner 文案,见 `phase.ts`) */
88
+ phaseTracker = new PhaseTracker();
89
+ /**
90
+ * 进行中的交接/迁移的取消句柄(`null` = 当前没有交接)。
91
+ *
92
+ * 为什么不能只靠 `agent.abort()`:交接的 `summary` 模式走的是独立的
93
+ * `chat.completions.create` 请求,`agent.abort()` 根本够不到它;而 `self` 模式
94
+ * 虽然能中断,但 core 层把中止收敛成「消息标记 Aborted、send 正常返回」,SDK 那边
95
+ * 会误判成「模型没写出文档」而重试 + 降级 summary 再跑一轮。
96
+ * 所以交接必须自己带一条 `AbortSignal`。
97
+ */
98
+ handoffAbort = null;
99
+ /** 本次会话中已出现的子 Agent(只保留当前一轮,见 {@link SubAgentView} 的生命周期说明) */
100
+ subAgentViews = [];
101
+ /** 展示序号(每轮归零,标签回到「子AGENT1」) */
102
+ subAgentSeq = 0;
103
+ /**
104
+ * 视图 id 序号(**永久递增,每轮也不清零**)。
105
+ *
106
+ * 与展示序号分开是必要的:若 id 也跟着归零,下一轮的 `sub-1` 会与上一轮同名,
107
+ * 而选中态是按 id 匹配的——残留的选中 id 会突然「接上」新一轮的子 Agent。
108
+ */
109
+ subAgentIdSeq = 0;
110
+ /** Agent 工厂 / Scope 重置(构造时可注入,见 `ChatSessionOptions.deps`) */
111
+ createAgentFn;
112
+ resetScopeFn;
113
+ constructor(handoffService, ctx, options, tokenThresholds, notifier) {
114
+ this.handoffService = handoffService;
39
115
  this.ctx = ctx;
40
- this.modelId = options.modelId;
41
116
  this.agentId = options.agentId || "default";
42
- this.maxTokens = maxTokens;
117
+ this.tokenThresholds = tokenThresholds;
43
118
  this.currentId = ctx.currentId || generateConversationId();
44
119
  this.currentName = ctx.currentName;
45
120
  this.notifier = notifier;
46
- this.requestConfirm = options.requestConfirm;
121
+ this.requestMode = options.requestMode;
122
+ this.createAgentFn = options.deps?.createAgent ?? createAgent;
123
+ this.resetScopeFn = options.deps?.resetScope ?? resetScope;
47
124
  }
48
125
  /** 创建会话:装配 Agent、插件与「变更信号」 */
49
126
  static async create(options, notifier) {
50
127
  const config = await readConfig();
51
- const model = config.models.find((m) => m.id === options.modelId);
52
- const maxTokens = model?.maxContextTokens ??
53
- (model?.maxContextChars ? Math.floor(model.maxContextChars / 4) : undefined);
54
- const agent = await createAgent({ messages: options.messages, agentId: options.agentId });
128
+ // 先建 Agent:模型来自 Agent 定义(`createAgent` 内部解析 modelId),
129
+ // 阈值再按该模型查配置——不存在「CLI 以为的模型」与「实发模型」两套值。
130
+ const createAgentFn = options.deps?.createAgent ?? createAgent;
131
+ const agent = await createAgentFn({ messages: options.messages, agentId: options.agentId });
132
+ const model = config.models.find((m) => m.id === agent.definition.modelId);
133
+ // 阈值由配置直接给出(旧字段已在 SDK 的 ConfigManager.read() 里迁移过)
134
+ const tokenThresholds = model?.tokenThresholds;
55
135
  const currentId = options.conversationId || generateConversationId();
56
136
  const ctx = {
57
137
  agent,
58
- input: "",
59
138
  currentName: options.conversationName || currentId,
60
139
  currentId,
61
- modelId: options.modelId,
62
140
  agentId: options.agentId,
63
- running: true,
64
141
  };
65
- const migrationService = createMigrationService(ctx, {
142
+ const handoffService = createHandoffService(ctx, {
66
143
  // 迁移进度/结果经通知通道渲染,避免直接写 stdout 撕裂画面
67
144
  log: (text) => notifier.onNotice(text, "info"),
68
145
  });
69
- ctx.migrationService = migrationService;
70
- const session = new ChatSession(migrationService, ctx, options, maxTokens, notifier);
146
+ ctx.handoffService = handoffService;
147
+ const session = new ChatSession(handoffService, ctx, options, tokenThresholds, notifier);
71
148
  session.agent = agent;
72
149
  await session.attach(agent);
73
150
  return session;
@@ -76,6 +153,10 @@ export class ChatSession {
76
153
  get messages() {
77
154
  return this.agent.messages;
78
155
  }
156
+ /** 本次会话已出现的子 Agent(按出现顺序);对话屏据此渲染 Agent 栏目 */
157
+ get subAgents() {
158
+ return this.subAgentViews;
159
+ }
79
160
  /** 最近一次响应的 token 用量(供「本轮 / 当前上下文占用」展示与阈值判定) */
80
161
  get lastUsage() {
81
162
  return this.agent.lastUsage;
@@ -90,22 +171,81 @@ export class ChatSession {
90
171
  get totalUsage() {
91
172
  return sumUsage(this.agent.messages);
92
173
  }
93
- /** 发送一条消息;内容变化经 `notifier.onChange` 通知,`resolve` 表示本轮结束 */
94
- async send(input) {
174
+ /** 当前速率快照:生成中看 `live`(实时),结束后看 `average`(本轮平均) */
175
+ get rateSample() {
176
+ return this.rate.snapshot();
177
+ }
178
+ /** 当前生成阶段;空闲时为 null(消息栏据此显示「处理中」或不起 spinner) */
179
+ get phase() {
180
+ return this.phaseTracker.phase;
181
+ }
182
+ /** 清空 Agent 栏目(新一轮输入 / 换 Agent / 换会话时调用;序号一并归零) */
183
+ clearSubAgents() {
184
+ this.subAgentViews = [];
185
+ this.subAgentSeq = 0;
186
+ }
187
+ /**
188
+ * 发送一条消息;内容变化经 `notifier.onChange` 通知,`resolve` 表示本轮结束。
189
+ *
190
+ * `images` 非空时,消息内容由「文本段 + 图片内容块」组成(转换规则与降级全在
191
+ * `user-content.ts`):这是粘贴图片唯一的入口,不另开一条发送路径。
192
+ */
193
+ async send(input, images = []) {
194
+ this.rate.begin();
195
+ this.phaseTracker.connecting();
95
196
  try {
96
- await this.agent.send(input);
197
+ if (images.length === 0) {
198
+ await this.agent.send(input);
199
+ }
200
+ else {
201
+ const config = await readConfig();
202
+ const { content, warnings } = await buildUserContent({
203
+ text: input,
204
+ images,
205
+ config,
206
+ // 端点 / 视觉能力按**实发模型名**反查:`file_id` 是端点维度资源,传错端点会 not found
207
+ apiModelName: this.agent.model,
208
+ });
209
+ for (const warning of warnings)
210
+ this.notifier.onNotice(warning, "info");
211
+ await this.agent.send(content);
212
+ }
97
213
  }
98
214
  catch (error) {
99
215
  this.notifier.onNotice(error?.message ?? String(error), "error");
100
216
  }
101
217
  finally {
218
+ this.rate.finish();
219
+ this.phaseTracker.reset();
220
+ // 本轮内循环(含全部工具调用)已结束:子 Agent 只剩历史价值,栏目随之消失。
221
+ // 放 `finally` 是为了中止 / 出错时也不留残影;序号一并归零,下一轮又是「子AGENT1」。
222
+ this.clearSubAgents();
102
223
  this.notifier.onChange(true);
103
224
  }
104
225
  }
105
226
  /** 中止当前请求(Ctrl+C 语义:仅取消本轮,不退出) */
106
227
  abort() {
228
+ // 交接/迁移进行中:先按交接的取消通道(否则 summary 那步压根拦不住)
229
+ this.handoffAbort?.abort();
107
230
  this.agent.abort();
108
231
  }
232
+ /**
233
+ * 按「可取消」方式跑一段交接:创建 `AbortController` 并在结束时收尾。
234
+ *
235
+ * 收尾放 `finally`:成功后也要清掉,否则下一次 Ctrl+C 会往一个已完成的
236
+ * controller 上发出无意义的 abort。
237
+ */
238
+ async runCancellable(run) {
239
+ const controller = new AbortController();
240
+ this.handoffAbort = controller;
241
+ try {
242
+ return await run(controller.signal);
243
+ }
244
+ finally {
245
+ if (this.handoffAbort === controller)
246
+ this.handoffAbort = null;
247
+ }
248
+ }
109
249
  /**
110
250
  * 重置会话(/new):先把当前对话归档(有内容才存),再清空历史并重建 Agent。
111
251
  *
@@ -117,15 +257,14 @@ export class ChatSession {
117
257
  const hasContent = this.agent.messages.some((m) => m.role === AgentNS.Role.User);
118
258
  const archivedId = hasContent ? await this.save() : null;
119
259
  this.dispose();
120
- const agent = await createAgent({
260
+ this.clearSubAgents();
261
+ const agent = await this.createAgentFn({
121
262
  agentId: this.agentId === "default" ? undefined : this.agentId,
122
263
  });
123
264
  this.agent = agent;
124
265
  this.ctx.agent = agent;
125
266
  this.currentId = generateConversationId();
126
- this.ctx.currentId = this.currentId;
127
267
  this.currentName = this.currentId;
128
- this.ctx.currentName = this.currentName;
129
268
  await this.attach(agent);
130
269
  this.notifier.onChange(true);
131
270
  return archivedId;
@@ -140,8 +279,9 @@ export class ChatSession {
140
279
  async reload() {
141
280
  const messages = [...this.agent.messages];
142
281
  this.dispose();
143
- await resetScope();
144
- const agent = await createAgent({
282
+ this.clearSubAgents();
283
+ await this.resetScopeFn();
284
+ const agent = await this.createAgentFn({
145
285
  messages,
146
286
  agentId: this.agentId === "default" ? undefined : this.agentId,
147
287
  });
@@ -150,16 +290,39 @@ export class ChatSession {
150
290
  await this.attach(agent);
151
291
  this.notifier.onChange(true);
152
292
  }
153
- /** 手动任务迁移(/migrate):与自动迁移共用同一服务实例 */
154
- async migrate() {
293
+ /** 手动任务迁移(`/migrate`):交接 + 开新会话;与自动迁移共用同一服务实例 */
294
+ async migrate(mode) {
295
+ if (!this.messages.some((m) => m.role === AgentNS.Role.User)) {
296
+ throw new Error(t("chat.noMigratable"));
297
+ }
298
+ const ctx = await this.runCancellable((signal) => this.handoffService.migrate({
299
+ agent: this.agent,
300
+ mode,
301
+ signal,
302
+ }));
303
+ // 迁移后服务会开启新会话:新 id 已写进 ctx(唯一真相源),这里只需同步名称并刷新界面
304
+ this.currentName = this.currentId;
305
+ this.clearSubAgents();
306
+ this.notifier.onChange(true);
307
+ return ctx.handoffPath;
308
+ }
309
+ /**
310
+ * 只产出交接文档(`/handoff`):不切换会话、不改动历史。
311
+ *
312
+ * 交接回合(指令 + 工具调用 + 回执)会留在 `agent.messages` 里,
313
+ * 用户可继续要求细化同一份文档(重写同一路径即可)。
314
+ */
315
+ async handoff(mode) {
155
316
  if (!this.messages.some((m) => m.role === AgentNS.Role.User)) {
156
- throw new Error("当前对话还没有可迁移的内容");
317
+ throw new Error(t("chat.noHandoffable"));
157
318
  }
158
- await this.migrationService.migrate({ agent: this.agent });
159
- // 迁移后服务会开启新会话,同步会话元信息
160
- this.currentName = this.ctx.currentName;
161
- this.currentId = this.ctx.currentId ?? generateConversationId();
319
+ const ctx = await this.runCancellable((signal) => this.handoffService.handoff({
320
+ agent: this.agent,
321
+ mode,
322
+ signal,
323
+ }));
162
324
  this.notifier.onChange(true);
325
+ return ctx.handoffPath;
163
326
  }
164
327
  /** 撤回:删除索引 index 起的消息,返回被撤回的首条用户消息文本(用于预填输入) */
165
328
  rollbackTo(index) {
@@ -173,48 +336,75 @@ export class ChatSession {
173
336
  }
174
337
  /** 保存当前对话到存档 */
175
338
  async save() {
176
- const id = this.currentId;
177
- const existing = await conversationRepository.read(id);
178
- const now = new Date().toISOString();
179
- await conversationRepository.write({
339
+ return persistConversation({
340
+ id: this.currentId,
341
+ agentId: this.agentId,
342
+ messages: this.agent.messages,
343
+ cwd: process.cwd(),
344
+ });
345
+ }
346
+ /**
347
+ * 把当前会话存成指定文件名(`/save <名字>`),成功后 `currentId` 与 last-session
348
+ * 指针一并跟过去,于是后续自动落盘直接写新文件。
349
+ *
350
+ * 实现是「写新文件 → 删旧文件」,而不是 `fs.rename`:
351
+ * · rename 要求旧文件**已存在**,而刚开的新会话还没落过盘(会 ENOENT);
352
+ * · 覆盖已有目标在 Windows 上还得先 unlink,跨平台两边都得写分支;
353
+ * · 写新文件时父目录由仓储 `write()` 的 `mkdir(recursive)` 负责(`/save a/b` 可用)。
354
+ * 中途被杀最多留下两份副本(可读、无损),不会丢内容。
355
+ */
356
+ async saveAs(id) {
357
+ const previous = this.currentId;
358
+ await persistConversation({
180
359
  id,
181
360
  agentId: this.agentId,
182
- modelId: this.modelId,
183
361
  messages: this.agent.messages,
184
362
  cwd: process.cwd(),
185
- createdAt: existing?.createdAt ?? now,
186
- updatedAt: now,
187
363
  });
188
- await writeLastSession(process.cwd(), id);
364
+ if (id === previous)
365
+ return id; // 自己盖自己:不删
366
+ // 旧文件不能留:同一份对话出现两条记录会让 `/load` 里分不清哪条是新的
367
+ await fs.rm(conversationRepository().filePath(previous), { force: true });
368
+ this.currentId = id;
369
+ this.currentName = id;
189
370
  return id;
190
371
  }
191
372
  /** 释放事件监听(重建 Agent 时调用,避免监听器泄漏) */
192
373
  dispose() {
193
374
  for (const off of this.disposers.splice(0))
194
375
  off();
376
+ this.rate.reset();
377
+ this.phaseTracker.reset();
195
378
  }
196
379
  // ==================== 内部:装配 Agent 与插件 ====================
197
380
  async attach(agent) {
381
+ agent.use(new PhasePlugin(this.phaseTracker));
198
382
  agent.use(new CwdTrackerPlugin());
199
383
  agent.use(new AutoRefreshToolsPlugin());
200
384
  agent.use(new ConversationPersistPlugin({
201
385
  getId: () => this.currentId,
202
386
  agentId: this.agentId,
203
- modelId: this.modelId,
204
387
  cwd: process.cwd(),
205
- onError: (text) => this.notifier.onNotice(text, "info"),
388
+ // 每轮自动落盘失败是真错误(用户会以为什么都没丢)—— 走 error 语气
389
+ onError: (text) => this.notifier.onNotice(text, "error"),
206
390
  }));
207
- if (this.maxTokens && this.maxTokens > 0) {
208
- agent.use(new ContextGuardPlugin({ maxTokens: this.maxTokens }));
209
- agent.use(new AutoMigrateConfirmPlugin({
210
- service: this.migrationService,
211
- maxTokens: this.maxTokens,
212
- // TUI 下由 Ink 层提供确认通道
213
- shouldConfirm: () => Boolean(this.requestConfirm),
214
- confirm: (info) => this.requestConfirm(`上下文即将超限(${info.promptTokens}/${info.maxTokens} tokens),是否立即执行任务迁移?`),
391
+ if (this.tokenThresholds) {
392
+ const { handoff, guard } = this.tokenThresholds;
393
+ // 硬线:请求前用量超过 guard 即中断本轮(绝对值,不再有 ratio/放宽档)。
394
+ // 交接/迁移回合本身就是"上下文最满"时才发起的,由护栏自己让行(谁做限制谁放宽)
395
+ agent.use(new ContextGuardPlugin({
396
+ guardTokens: guard,
397
+ isSuspended: () => this.handoffService.busy,
398
+ }));
399
+ agent.use(createAutoMigratePlugin({
400
+ service: this.handoffService,
401
+ handoffTokens: handoff,
402
+ // TUI 下由 Ink 层提供执行者选择器;无选择通道时按默认执行者(原 agent 自交接)迁移
403
+ shouldConfirm: () => Boolean(this.requestMode),
404
+ choose: (info) => this.requestMode(info),
215
405
  log: (text) => this.notifier.onNotice(text, "info"),
216
406
  }));
217
- agent.use(new SubAgentGuardInstallerPlugin({ maxTokens: this.maxTokens }));
407
+ agent.use(new SubAgentGuardInstallerPlugin({ guardTokens: guard }));
218
408
  }
219
409
  this.wire(agent);
220
410
  await agent.init();
@@ -227,27 +417,76 @@ export class ChatSession {
227
417
  */
228
418
  wire(agent) {
229
419
  const notify = (immediate) => this.notifier.onChange(immediate);
230
- const onOpen = () => notify(true);
231
- const onChunk = () => notify(false);
232
- const onParsed = () => notify(true);
420
+ const onOpen = () => {
421
+ this.phaseTracker.opened();
422
+ notify(true);
423
+ };
424
+ /**
425
+ * 每片 delta 应用后:除了通知重渲染,还要把这段文本计入速率统计。
426
+ *
427
+ * 子 Agent 的 chunk 也走这个回调(`onSubStart` 里同样订阅),因此速率包含
428
+ * 委派出去的子任务输出——它们也是真实从网络接收的 token。
429
+ */
430
+ const onChunk = (_receiver, chunk) => {
431
+ this.rate.addDelta(deltaText(chunk));
432
+ // 流末 chunk 携带真实用量(`stream_options.include_usage`):多轮工具调用逐轮累加
433
+ this.rate.addExact(chunk?.usage?.completion_tokens);
434
+ this.phaseTracker.delta(chunk);
435
+ notify(false);
436
+ };
437
+ const onParsed = (receiver) => {
438
+ // 该轮带工具调用 → 接下来是工具执行(模型不在跑),阶段转「等工具返回」
439
+ this.phaseTracker.streamEnded(receiver);
440
+ notify(true);
441
+ };
442
+ /** 子 Agent 的事件:只重绘,不推进主阶段(理由见 `onSubStart`) */
443
+ const onSubOpen = () => notify(true);
444
+ const onSubChunk = (_receiver, chunk) => {
445
+ this.rate.addDelta(deltaText(chunk));
446
+ this.rate.addExact(chunk?.usage?.completion_tokens);
447
+ notify(false);
448
+ };
233
449
  const onFinally = () => notify(true);
234
450
  const onError = (error) => {
235
451
  this.notifier.onNotice(error?.message ?? String(error), "error");
236
452
  notify(true);
237
453
  };
238
- const onSubStart = ({ subAgent, toolCallContext }) => {
239
- const name = toolCallContext?.tool_call?.function?.name || "子任务";
240
- this.notifier.onNotice(`🧩 子任务 ${name} 运行中…`, "info");
241
- subAgent.events.on("open", onOpen);
242
- subAgent.events.on("chunk-parsed", onChunk);
243
- subAgent.events.on("error", onError);
454
+ const onSubStart = ({ subAgent }) => {
455
+ // 执行状态内联到栏目标签(`●` / `✓` / `✖`),**不再推「子任务运行中」通知**:
456
+ // 那种通知让通知栏凭空多出一行,整帧高度跟着跳。
457
+ const index = ++this.subAgentSeq;
458
+ const view = {
459
+ id: `sub-${++this.subAgentIdSeq}`,
460
+ index,
461
+ agent: subAgent,
462
+ status: "running",
463
+ };
464
+ this.subAgentViews.push(view);
465
+ // 记进 Agent 栏目:实例在委派结束后仍保留 messages,所以这里存引用即可随时回看。
466
+ // 不看 `sub_agent_*` 与 `call_skill_sub_agent` 的差别——两条路径现在都走 core 的
467
+ // AgentToolLazy,全部会在 onSubAgentStart 出现。
468
+ // 子 Agent 的流只计入速率并触发重绘,**不推进主阶段**:此刻主 Agent 正在等
469
+ // 这个工具(委派)返回,阶段应停在「等待 xxx 返回」;而子 Agent 自己的思考 / 输出
470
+ // 是工具内部的事,拿它的 delta 去改主阶段,界面会变成「输出中」——正好盖掉了
471
+ // 用户最需要知道的那句话。
472
+ // 这里挂的监听**不需要**在 `onSubEnd` 撤销:子 Agent 实例是「每次委派新建」的
473
+ // (core 的 `AgentTool.exec()` 里 `new Agent(...)`、`AgentToolLazy.exec()` 里
474
+ // `buildAgent(...)`),随本次 run 结束回收,监听器跟着走。别为此再加 off。
475
+ subAgent.events.on("open", onSubOpen);
476
+ subAgent.events.on("chunk-parsed", onSubChunk);
477
+ // 出错要落到标签上(✖);错误信息仍送通知栏——那是错误,不是进度
478
+ subAgent.events.on("error", (error) => {
479
+ view.status = "failed";
480
+ this.notifier.onNotice(error?.message ?? String(error), "error");
481
+ notify(true);
482
+ });
244
483
  notify(true);
245
484
  };
246
- const onSubEnd = ({ toolCallContext }) => {
247
- const name = toolCallContext?.tool_call?.function?.name || "子任务";
248
- // 子 Agent 的用量由 core 在委派边界钉到父侧 tool 消息的 subAgentUsage 上,
249
- // 故此处只需提示,累计经 sumUsage(agent.messages) 自然包含
250
- this.notifier.onNotice(`✓ 子任务 ${name} 完成`, "info");
485
+ const onSubEnd = ({ subAgent }) => {
486
+ // 只把「还在跑」的置为完成:失败已由 error 监听标成 failed,不能被这里覆盖
487
+ const view = this.subAgentViews.find((item) => item.agent === subAgent);
488
+ if (view && view.status === "running")
489
+ view.status = "done";
251
490
  notify(true);
252
491
  };
253
492
  agent.events.on("open", onOpen);
@@ -1 +1 @@
1
- {"version":3,"file":"chat-session.js","sourceRoot":"","sources":["../../src/tui/chat-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-session.js","sourceRoot":"","sources":["../../src/tui/chat-session.ts"],"names":[],"mappings":"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"}