@ai-zen/cli 1.0.0-alpha.2 → 1.0.0-alpha.22

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 (311) hide show
  1. package/CHANGELOG.md +514 -0
  2. package/README.md +136 -39
  3. package/README.zh.md +136 -39
  4. package/dist/agent-creator.d.ts +11 -0
  5. package/dist/agent-creator.d.ts.map +1 -1
  6. package/dist/agent-creator.js +52 -21
  7. package/dist/agent-creator.js.map +1 -1
  8. package/dist/agent-switch.d.ts +61 -0
  9. package/dist/agent-switch.d.ts.map +1 -0
  10. package/dist/agent-switch.js +83 -0
  11. package/dist/agent-switch.js.map +1 -0
  12. package/dist/agents-store.d.ts +6 -1
  13. package/dist/agents-store.d.ts.map +1 -1
  14. package/dist/agents-store.js +46 -4
  15. package/dist/agents-store.js.map +1 -1
  16. package/dist/auto-migrate-confirm.d.ts +43 -0
  17. package/dist/auto-migrate-confirm.d.ts.map +1 -0
  18. package/dist/auto-migrate-confirm.js +47 -0
  19. package/dist/auto-migrate-confirm.js.map +1 -0
  20. package/dist/config-editor.d.ts +13 -5
  21. package/dist/config-editor.d.ts.map +1 -1
  22. package/dist/config-editor.js +36 -27
  23. package/dist/config-editor.js.map +1 -1
  24. package/dist/config.d.ts +24 -3
  25. package/dist/config.d.ts.map +1 -1
  26. package/dist/config.js +55 -15
  27. package/dist/config.js.map +1 -1
  28. package/dist/conversation-commands/registry.d.ts +123 -4
  29. package/dist/conversation-commands/registry.d.ts.map +1 -1
  30. package/dist/conversation-commands/registry.js +92 -14
  31. package/dist/conversation-commands/registry.js.map +1 -1
  32. package/dist/conversation-persist-plugin.d.ts +0 -1
  33. package/dist/conversation-persist-plugin.d.ts.map +1 -1
  34. package/dist/conversation-persist-plugin.js +7 -16
  35. package/dist/conversation-persist-plugin.js.map +1 -1
  36. package/dist/conversation-repository.d.ts +71 -13
  37. package/dist/conversation-repository.d.ts.map +1 -1
  38. package/dist/conversation-repository.js +81 -24
  39. package/dist/conversation-repository.js.map +1 -1
  40. package/dist/cwd-tracker-plugin.d.ts.map +1 -1
  41. package/dist/cwd-tracker-plugin.js +6 -2
  42. package/dist/cwd-tracker-plugin.js.map +1 -1
  43. package/dist/format-time.d.ts +17 -6
  44. package/dist/format-time.d.ts.map +1 -1
  45. package/dist/format-time.js +32 -14
  46. package/dist/format-time.js.map +1 -1
  47. package/dist/handoff-service.d.ts +19 -0
  48. package/dist/handoff-service.d.ts.map +1 -0
  49. package/dist/handoff-service.js +89 -0
  50. package/dist/handoff-service.js.map +1 -0
  51. package/dist/hook.d.ts.map +1 -1
  52. package/dist/hook.js +69 -15
  53. package/dist/hook.js.map +1 -1
  54. package/dist/i18n/en-wizard.d.ts +8 -0
  55. package/dist/i18n/en-wizard.d.ts.map +1 -0
  56. package/dist/i18n/en-wizard.js +290 -0
  57. package/dist/i18n/en-wizard.js.map +1 -0
  58. package/dist/i18n/en.d.ts +7 -0
  59. package/dist/i18n/en.d.ts.map +1 -0
  60. package/dist/i18n/en.js +224 -0
  61. package/dist/i18n/en.js.map +1 -0
  62. package/dist/i18n/index.d.ts +57 -0
  63. package/dist/i18n/index.d.ts.map +1 -0
  64. package/dist/i18n/index.js +109 -0
  65. package/dist/i18n/index.js.map +1 -0
  66. package/dist/i18n/preferences.d.ts +34 -0
  67. package/dist/i18n/preferences.d.ts.map +1 -0
  68. package/dist/i18n/preferences.js +69 -0
  69. package/dist/i18n/preferences.js.map +1 -0
  70. package/dist/i18n/zh-wizard.d.ts +11 -0
  71. package/dist/i18n/zh-wizard.d.ts.map +1 -0
  72. package/dist/i18n/zh-wizard.js +293 -0
  73. package/dist/i18n/zh-wizard.js.map +1 -0
  74. package/dist/i18n/zh.d.ts +10 -0
  75. package/dist/i18n/zh.d.ts.map +1 -0
  76. package/dist/i18n/zh.js +228 -0
  77. package/dist/i18n/zh.js.map +1 -0
  78. package/dist/index.js +61 -25
  79. package/dist/index.js.map +1 -1
  80. package/dist/mcp-command.d.ts +32 -0
  81. package/dist/mcp-command.d.ts.map +1 -0
  82. package/dist/mcp-command.js +37 -0
  83. package/dist/mcp-command.js.map +1 -0
  84. package/dist/mode.d.ts +31 -4
  85. package/dist/mode.d.ts.map +1 -1
  86. package/dist/mode.js +42 -7
  87. package/dist/mode.js.map +1 -1
  88. package/dist/model-switch.d.ts +58 -0
  89. package/dist/model-switch.d.ts.map +1 -0
  90. package/dist/model-switch.js +62 -0
  91. package/dist/model-switch.js.map +1 -0
  92. package/dist/reasoning-effort.d.ts +96 -0
  93. package/dist/reasoning-effort.d.ts.map +1 -0
  94. package/dist/reasoning-effort.js +164 -0
  95. package/dist/reasoning-effort.js.map +1 -0
  96. package/dist/reasoning-presets.d.ts +34 -0
  97. package/dist/reasoning-presets.d.ts.map +1 -0
  98. package/dist/reasoning-presets.js +85 -0
  99. package/dist/reasoning-presets.js.map +1 -0
  100. package/dist/sdk-log.d.ts +55 -0
  101. package/dist/sdk-log.d.ts.map +1 -0
  102. package/dist/sdk-log.js +91 -0
  103. package/dist/sdk-log.js.map +1 -0
  104. package/dist/session-pointer.d.ts +22 -9
  105. package/dist/session-pointer.d.ts.map +1 -1
  106. package/dist/session-pointer.js +55 -23
  107. package/dist/session-pointer.js.map +1 -1
  108. package/dist/stdio-runner.d.ts.map +1 -1
  109. package/dist/stdio-runner.js +32 -30
  110. package/dist/stdio-runner.js.map +1 -1
  111. package/dist/sub-agent-guard-plugin.d.ts +5 -5
  112. package/dist/sub-agent-guard-plugin.d.ts.map +1 -1
  113. package/dist/sub-agent-guard-plugin.js +7 -7
  114. package/dist/sub-agent-guard-plugin.js.map +1 -1
  115. package/dist/tui/chat-session.d.ts +110 -59
  116. package/dist/tui/chat-session.d.ts.map +1 -1
  117. package/dist/tui/chat-session.js +268 -120
  118. package/dist/tui/chat-session.js.map +1 -1
  119. package/dist/tui/components.d.ts +48 -2
  120. package/dist/tui/components.d.ts.map +1 -1
  121. package/dist/tui/components.js +96 -3
  122. package/dist/tui/components.js.map +1 -1
  123. package/dist/tui/config-wizard/detail.d.ts +12 -6
  124. package/dist/tui/config-wizard/detail.d.ts.map +1 -1
  125. package/dist/tui/config-wizard/detail.js +33 -32
  126. package/dist/tui/config-wizard/detail.js.map +1 -1
  127. package/dist/tui/config-wizard/engine.d.ts.map +1 -1
  128. package/dist/tui/config-wizard/engine.js +27 -21
  129. package/dist/tui/config-wizard/engine.js.map +1 -1
  130. package/dist/tui/config-wizard/fields.d.ts +3 -1
  131. package/dist/tui/config-wizard/fields.d.ts.map +1 -1
  132. package/dist/tui/config-wizard/fields.js +216 -152
  133. package/dist/tui/config-wizard/fields.js.map +1 -1
  134. package/dist/tui/config-wizard/kv-editor.d.ts.map +1 -1
  135. package/dist/tui/config-wizard/kv-editor.js +9 -5
  136. package/dist/tui/config-wizard/kv-editor.js.map +1 -1
  137. package/dist/tui/config-wizard/list.d.ts.map +1 -1
  138. package/dist/tui/config-wizard/list.js +2 -1
  139. package/dist/tui/config-wizard/list.js.map +1 -1
  140. package/dist/tui/config-wizard/mcp-helpers.d.ts.map +1 -1
  141. package/dist/tui/config-wizard/mcp-helpers.js +4 -3
  142. package/dist/tui/config-wizard/mcp-helpers.js.map +1 -1
  143. package/dist/tui/config-wizard/menu.d.ts.map +1 -1
  144. package/dist/tui/config-wizard/menu.js +33 -21
  145. package/dist/tui/config-wizard/menu.js.map +1 -1
  146. package/dist/tui/config-wizard/prompt-editor.d.ts.map +1 -1
  147. package/dist/tui/config-wizard/prompt-editor.js +4 -3
  148. package/dist/tui/config-wizard/prompt-editor.js.map +1 -1
  149. package/dist/tui/config-wizard/prompt.d.ts.map +1 -1
  150. package/dist/tui/config-wizard/prompt.js +8 -7
  151. package/dist/tui/config-wizard/prompt.js.map +1 -1
  152. package/dist/tui/config-wizard/step-agents.d.ts.map +1 -1
  153. package/dist/tui/config-wizard/step-agents.js +29 -20
  154. package/dist/tui/config-wizard/step-agents.js.map +1 -1
  155. package/dist/tui/config-wizard/step-defaults.d.ts.map +1 -1
  156. package/dist/tui/config-wizard/step-defaults.js +24 -27
  157. package/dist/tui/config-wizard/step-defaults.js.map +1 -1
  158. package/dist/tui/config-wizard/step-endpoints.d.ts.map +1 -1
  159. package/dist/tui/config-wizard/step-endpoints.js +16 -6
  160. package/dist/tui/config-wizard/step-endpoints.js.map +1 -1
  161. package/dist/tui/config-wizard/step-mcp.d.ts.map +1 -1
  162. package/dist/tui/config-wizard/step-mcp.js +17 -19
  163. package/dist/tui/config-wizard/step-mcp.js.map +1 -1
  164. package/dist/tui/config-wizard/step-models.d.ts.map +1 -1
  165. package/dist/tui/config-wizard/step-models.js +41 -26
  166. package/dist/tui/config-wizard/step-models.js.map +1 -1
  167. package/dist/tui/config-wizard/step-new-endpoint.d.ts.map +1 -1
  168. package/dist/tui/config-wizard/step-new-endpoint.js +16 -12
  169. package/dist/tui/config-wizard/step-new-endpoint.js.map +1 -1
  170. package/dist/tui/config-wizard/step-simple.d.ts.map +1 -1
  171. package/dist/tui/config-wizard/step-simple.js +18 -17
  172. package/dist/tui/config-wizard/step-simple.js.map +1 -1
  173. package/dist/tui/config-wizard/types.d.ts +18 -3
  174. package/dist/tui/config-wizard/types.d.ts.map +1 -1
  175. package/dist/tui/config-wizard/wizard.d.ts.map +1 -1
  176. package/dist/tui/config-wizard/wizard.js +4 -3
  177. package/dist/tui/config-wizard/wizard.js.map +1 -1
  178. package/dist/tui/highlight.d.ts +3 -2
  179. package/dist/tui/highlight.d.ts.map +1 -1
  180. package/dist/tui/highlight.js +3 -2
  181. package/dist/tui/highlight.js.map +1 -1
  182. package/dist/tui/index.d.ts +18 -1
  183. package/dist/tui/index.d.ts.map +1 -1
  184. package/dist/tui/index.js +107 -49
  185. package/dist/tui/index.js.map +1 -1
  186. package/dist/tui/input-editing.d.ts +52 -0
  187. package/dist/tui/input-editing.d.ts.map +1 -0
  188. package/dist/tui/input-editing.js +91 -0
  189. package/dist/tui/input-editing.js.map +1 -0
  190. package/dist/tui/key-debug.d.ts +62 -0
  191. package/dist/tui/key-debug.d.ts.map +1 -0
  192. package/dist/tui/key-debug.js +92 -0
  193. package/dist/tui/key-debug.js.map +1 -0
  194. package/dist/tui/mouse.d.ts +55 -0
  195. package/dist/tui/mouse.d.ts.map +1 -0
  196. package/dist/tui/mouse.js +74 -0
  197. package/dist/tui/mouse.js.map +1 -0
  198. package/dist/tui/phase.d.ts +64 -0
  199. package/dist/tui/phase.d.ts.map +1 -0
  200. package/dist/tui/phase.js +112 -0
  201. package/dist/tui/phase.js.map +1 -0
  202. package/dist/tui/screens/chat-commands.d.ts +64 -3
  203. package/dist/tui/screens/chat-commands.d.ts.map +1 -1
  204. package/dist/tui/screens/chat-commands.js +483 -157
  205. package/dist/tui/screens/chat-commands.js.map +1 -1
  206. package/dist/tui/screens/chat.d.ts +10 -5
  207. package/dist/tui/screens/chat.d.ts.map +1 -1
  208. package/dist/tui/screens/chat.js +464 -301
  209. package/dist/tui/screens/chat.js.map +1 -1
  210. package/dist/tui/screens/common-keys.d.ts +36 -0
  211. package/dist/tui/screens/common-keys.d.ts.map +1 -0
  212. package/dist/tui/screens/common-keys.js +67 -0
  213. package/dist/tui/screens/common-keys.js.map +1 -0
  214. package/dist/tui/screens/frame-buffer.d.ts +47 -0
  215. package/dist/tui/screens/frame-buffer.d.ts.map +1 -0
  216. package/dist/tui/screens/frame-buffer.js +78 -0
  217. package/dist/tui/screens/frame-buffer.js.map +1 -0
  218. package/dist/tui/screens/handoff-choice.d.ts +37 -0
  219. package/dist/tui/screens/handoff-choice.d.ts.map +1 -0
  220. package/dist/tui/screens/handoff-choice.js +42 -0
  221. package/dist/tui/screens/handoff-choice.js.map +1 -0
  222. package/dist/tui/screens/index.d.ts +8 -8
  223. package/dist/tui/screens/index.d.ts.map +1 -1
  224. package/dist/tui/screens/index.js +7 -7
  225. package/dist/tui/screens/index.js.map +1 -1
  226. package/dist/tui/screens/input-row.d.ts +64 -0
  227. package/dist/tui/screens/input-row.d.ts.map +1 -0
  228. package/dist/tui/screens/input-row.js +67 -0
  229. package/dist/tui/screens/input-row.js.map +1 -0
  230. package/dist/tui/screens/input.d.ts +46 -1
  231. package/dist/tui/screens/input.d.ts.map +1 -1
  232. package/dist/tui/screens/input.js +83 -8
  233. package/dist/tui/screens/input.js.map +1 -1
  234. package/dist/tui/screens/layout.d.ts +21 -3
  235. package/dist/tui/screens/layout.d.ts.map +1 -1
  236. package/dist/tui/screens/layout.js +20 -9
  237. package/dist/tui/screens/layout.js.map +1 -1
  238. package/dist/tui/screens/lines.d.ts +12 -41
  239. package/dist/tui/screens/lines.d.ts.map +1 -1
  240. package/dist/tui/screens/lines.js +90 -98
  241. package/dist/tui/screens/lines.js.map +1 -1
  242. package/dist/tui/screens/messages-view.d.ts +10 -0
  243. package/dist/tui/screens/messages-view.d.ts.map +1 -0
  244. package/dist/tui/screens/messages-view.js +116 -0
  245. package/dist/tui/screens/messages-view.js.map +1 -0
  246. package/dist/tui/screens/notice-bar.d.ts +5 -0
  247. package/dist/tui/screens/notice-bar.d.ts.map +1 -0
  248. package/dist/tui/screens/notice-bar.js +15 -0
  249. package/dist/tui/screens/notice-bar.js.map +1 -0
  250. package/dist/tui/screens/notice.d.ts +64 -0
  251. package/dist/tui/screens/notice.d.ts.map +1 -0
  252. package/dist/tui/screens/notice.js +106 -0
  253. package/dist/tui/screens/notice.js.map +1 -0
  254. package/dist/tui/screens/overlays.d.ts.map +1 -1
  255. package/dist/tui/screens/overlays.js +3 -2
  256. package/dist/tui/screens/overlays.js.map +1 -1
  257. package/dist/tui/screens/render.d.ts +2 -4
  258. package/dist/tui/screens/render.d.ts.map +1 -1
  259. package/dist/tui/screens/render.js +7 -43
  260. package/dist/tui/screens/render.js.map +1 -1
  261. package/dist/tui/screens/splash.d.ts +1 -1
  262. package/dist/tui/screens/splash.d.ts.map +1 -1
  263. package/dist/tui/screens/splash.js +12 -3
  264. package/dist/tui/screens/splash.js.map +1 -1
  265. package/dist/tui/screens/use-chat-viewport.d.ts +22 -0
  266. package/dist/tui/screens/use-chat-viewport.d.ts.map +1 -0
  267. package/dist/tui/screens/use-chat-viewport.js +50 -0
  268. package/dist/tui/screens/use-chat-viewport.js.map +1 -0
  269. package/dist/tui/screens/use-input-editing.d.ts +44 -0
  270. package/dist/tui/screens/use-input-editing.d.ts.map +1 -0
  271. package/dist/tui/screens/use-input-editing.js +192 -0
  272. package/dist/tui/screens/use-input-editing.js.map +1 -0
  273. package/dist/tui/screens/use-overlays.d.ts +25 -0
  274. package/dist/tui/screens/use-overlays.d.ts.map +1 -0
  275. package/dist/tui/screens/use-overlays.js +32 -0
  276. package/dist/tui/screens/use-overlays.js.map +1 -0
  277. package/dist/tui/screens/use-wizard-host.d.ts +35 -0
  278. package/dist/tui/screens/use-wizard-host.d.ts.map +1 -0
  279. package/dist/tui/screens/use-wizard-host.js +103 -0
  280. package/dist/tui/screens/use-wizard-host.js.map +1 -0
  281. package/dist/tui/status-segments.d.ts +37 -0
  282. package/dist/tui/status-segments.d.ts.map +1 -0
  283. package/dist/tui/status-segments.js +166 -0
  284. package/dist/tui/status-segments.js.map +1 -0
  285. package/dist/tui/text.d.ts +20 -7
  286. package/dist/tui/text.d.ts.map +1 -1
  287. package/dist/tui/text.js +111 -37
  288. package/dist/tui/text.js.map +1 -1
  289. package/dist/tui/theme.d.ts +7 -1
  290. package/dist/tui/theme.d.ts.map +1 -1
  291. package/dist/tui/theme.js +15 -3
  292. package/dist/tui/theme.js.map +1 -1
  293. package/dist/tui/token-rate.d.ts +83 -0
  294. package/dist/tui/token-rate.d.ts.map +1 -0
  295. package/dist/tui/token-rate.js +195 -0
  296. package/dist/tui/token-rate.js.map +1 -0
  297. package/dist/types.d.ts +7 -8
  298. package/dist/types.d.ts.map +1 -1
  299. package/package.json +4 -3
  300. package/dist/auto-migrate-confirm-plugin.d.ts +0 -58
  301. package/dist/auto-migrate-confirm-plugin.d.ts.map +0 -1
  302. package/dist/auto-migrate-confirm-plugin.js +0 -61
  303. package/dist/auto-migrate-confirm-plugin.js.map +0 -1
  304. package/dist/migration-service.d.ts +0 -15
  305. package/dist/migration-service.d.ts.map +0 -1
  306. package/dist/migration-service.js +0 -59
  307. package/dist/migration-service.js.map +0 -1
  308. package/dist/tui/screens/state.d.ts +0 -13
  309. package/dist/tui/screens/state.d.ts.map +0 -1
  310. package/dist/tui/screens/state.js +0 -75
  311. package/dist/tui/screens/state.js.map +0 -1
@@ -1,81 +1,121 @@
1
1
  /**
2
- * TUI 对话会话 —— Agent 装配与结构化流式事件
2
+ * TUI 对话会话 —— Agent 装配 + 「内容变更」信号
3
3
  *
4
- * 与旧的行式渲染器(`src/conversation-runner.ts`)不同,这里把流式 delta
5
- * 翻译成**结构化事件**交给 React 层渲染,而非直接写 stdout,从而支持 Ink 的
6
- * 可控重绘(增量、无撕裂)。
4
+ * 渲染以 SDK 的 `agent.messages` 为**唯一数据源**:本模块不再把流式 delta 翻译成
5
+ * 自定义事件 / 中间模型(Block / LiveAssistant),只做两件事:
6
+ * 1. SDK 事件到达时通知上层「messages 变了,该重渲染了」;
7
+ * 2. 把系统级提示(notice / error)转发到独立通道(绝不写进 messages)。
7
8
  *
8
9
  * 本模块不依赖 React / Ink,可独立单测。
9
10
  */
10
11
  import { AgentNS } from "@ai-zen/agents-core";
11
- /** 流式事件:由 React 层消费并拼接成消息块 */
12
- export type ChatEvent = {
13
- type: "user";
14
- text: string;
15
- } | {
16
- type: "assistant-start";
17
- } | {
18
- type: "reasoning";
19
- text: string;
20
- } | {
21
- type: "content";
22
- text: string;
23
- } | {
24
- type: "tool";
25
- index: number;
26
- name?: string;
27
- args?: string;
28
- } | {
29
- type: "subagent-start";
30
- name: string;
31
- } | {
32
- type: "subagent-end";
33
- name: string;
34
- } | {
35
- type: "notice";
36
- text: string;
37
- } | {
38
- type: "error";
39
- text: string;
40
- } | {
41
- type: "done";
42
- };
43
- export type ChatEventHandler = (e: ChatEvent) => void;
12
+ import { type AutoMigrateTriggerInfo, type HandoffMode } from "@ai-zen/agents-sdk";
13
+ import type { TokenThresholds } from "@ai-zen/agents-sdk";
14
+ import { stripCwdNote } from "./text.js";
15
+ import { type RateSample } from "./token-rate.js";
16
+ import { type PhaseInfo } from "./phase.js";
17
+ /** 会话 → UI 的对外信号 */
18
+ export interface ChatSessionNotifier {
19
+ /** 转录可能已变化(内容以 `agent.messages` 为准);`immediate=true` 表示应立即上屏 */
20
+ onChange(immediate: boolean): void;
21
+ /** 系统级提示(notice / error),走独立栏位,绝不进 messages */
22
+ onNotice(text: string, tone: "info" | "error"): void;
23
+ }
44
24
  export interface ChatSessionOptions {
45
- modelId: string;
46
25
  agentId?: string;
47
26
  messages?: AgentNS.Message[];
48
27
  conversationId?: string;
49
28
  conversationName?: string;
50
- /** 自动迁移二次确认(由 Ink 层弹出确认框实现) */
51
- requestConfirm?: (question: string) => Promise<boolean>;
29
+ /**
30
+ * 自动迁移时的执行者选择(由 Ink 层弹出选择器实现)。
31
+ * 返回 `null` 表示跳过本次迁移;未提供时按默认执行者(原 agent 自交接)直接迁移。
32
+ */
33
+ requestMode?: (info: AutoMigrateTriggerInfo) => Promise<HandoffMode | null>;
52
34
  }
53
- /** 去掉 CwdTrackerPlugin 追加在用户消息末尾的工作目录提示 */
54
- export declare function stripCwdNote(text: string): string;
35
+ /** 去掉 CwdTrackerPlugin 追加在用户消息末尾的工作目录提示(转发自 ./text.js) */
36
+ export { stripCwdNote };
55
37
  export declare class ChatSession {
56
- readonly modelId: string;
38
+ /**
39
+ * 当前模型 id —— 从 Agent 定义读,**不再单独存一份**。
40
+ *
41
+ * 模型的唯一真相源是 `AgentDefinition.modelId`:会话不记模型,配置也没有
42
+ * `defaultModel`。这样状态栏、落盘与 SDK 实发请求用的永远是同一个值。
43
+ */
44
+ get modelId(): string;
57
45
  readonly agentId: string;
58
- readonly maxTokens?: number;
59
- currentName: string;
60
- currentId: string;
46
+ /** 当前模型的上下文阈值(交接软线 + 阻断硬线),缺省时不装护栏插件 */
47
+ readonly tokenThresholds?: TokenThresholds;
48
+ /**
49
+ * 会话 id / 名称的**唯一真相源是 `ctx`**(`ConversationContext`)。
50
+ *
51
+ * 为什么必须代理而不是各存一份:自动迁移由 SDK 的 `AutoMigratePlugin` 直接驱动
52
+ * `HandoffService.migrate()`,**不经过本类任何方法**,新 id 只会写进 `ctx.currentId`
53
+ * (`onMigrated` 钩子)。若本类另持一份 `currentId`,自动迁移后它就停在旧值上,
54
+ * 而 `ConversationPersistPlugin.getId()` 读的正是这份旧值——于是 prune 之后的
55
+ * 「系统提示 + 交接断点」会被写进**旧会话文件**,把已保存的完整历史覆盖掉。
56
+ */
57
+ get currentId(): string;
58
+ set currentId(id: string);
59
+ get currentName(): string;
60
+ set currentName(name: string);
61
61
  private agent;
62
62
  private readonly ctx;
63
- private readonly migrationService;
64
- private readonly onEvent;
65
- private readonly requestConfirm?;
63
+ private readonly handoffService;
64
+ private readonly notifier;
65
+ private readonly requestMode?;
66
66
  private readonly disposers;
67
+ /** 生成过程的 token 速率统计(状态栏展示,见 `token-rate.ts`) */
68
+ private readonly rate;
69
+ /** 当前生成阶段(消息栏 spinner 文案,见 `phase.ts`) */
70
+ private readonly phaseTracker;
71
+ /**
72
+ * 进行中的交接/迁移的取消句柄(`null` = 当前没有交接)。
73
+ *
74
+ * 为什么不能只靠 `agent.abort()`:交接的 `summary` 模式走的是独立的
75
+ * `chat.completions.create` 请求,`agent.abort()` 根本够不到它;而 `self` 模式
76
+ * 虽然能中断,但 core 层把中止收敛成「消息标记 Aborted、send 正常返回」,SDK 那边
77
+ * 会误判成「模型没写出文档」而重试 + 降级 summary 再跑一轮。
78
+ * 所以交接必须自己带一条 `AbortSignal`。
79
+ */
80
+ private handoffAbort;
67
81
  private constructor();
68
- /** 创建会话:装配 Agent、插件与流式事件 */
69
- static create(options: ChatSessionOptions, onEvent: ChatEventHandler): Promise<ChatSession>;
82
+ /** 创建会话:装配 Agent、插件与「变更信号」 */
83
+ static create(options: ChatSessionOptions, notifier: ChatSessionNotifier): Promise<ChatSession>;
84
+ /** 对话消息(唯一真相源) */
70
85
  get messages(): AgentNS.Message[];
71
- /** 最近一次响应的 token 用量 */
86
+ /** 最近一次响应的 token 用量(供「本轮 / 当前上下文占用」展示与阈值判定) */
72
87
  get lastUsage(): AgentNS.Usage | undefined;
73
- /** 发送一条消息;事件通过 `onEvent` 持续回传;resolve 表示本轮结束 */
88
+ /**
89
+ * 本会话累计 token 用量。
90
+ *
91
+ * 逐消息求和(`sumUsage`):含各 assistant 消息的 `usage`(自身响应)与工具消息的
92
+ * `subAgentUsage`(内部委派——含所有层级子 Agent)。每轮请求都会重发完整历史,
93
+ * 故求和即计费口径的累计消耗;且随消息持久化,续接 / `/load` 亦不丢。
94
+ */
95
+ get totalUsage(): AgentNS.Usage;
96
+ /** 当前速率快照:生成中看 `live`(实时),结束后看 `average`(本轮平均) */
97
+ get rateSample(): RateSample;
98
+ /** 当前生成阶段;空闲时为 null(消息栏据此显示「处理中」或不起 spinner) */
99
+ get phase(): PhaseInfo | null;
100
+ /** 发送一条消息;内容变化经 `notifier.onChange` 通知,`resolve` 表示本轮结束 */
74
101
  send(input: string): Promise<void>;
75
102
  /** 中止当前请求(Ctrl+C 语义:仅取消本轮,不退出) */
76
103
  abort(): void;
77
- /** 重置会话(/new):清空历史并重建 Agent */
78
- reset(): Promise<void>;
104
+ /**
105
+ * 按「可取消」方式跑一段交接:创建 `AbortController` 并在结束时收尾。
106
+ *
107
+ * 收尾放 `finally`:成功后也要清掉,否则下一次 Ctrl+C 会往一个已完成的
108
+ * controller 上发出无意义的 abort。
109
+ */
110
+ private runCancellable;
111
+ /**
112
+ * 重置会话(/new):先把当前对话归档(有内容才存),再清空历史并重建 Agent。
113
+ *
114
+ * 归档必须先于 `currentId` 切换:`save()` 按 `this.currentId` 落盘,若先换 id
115
+ * 会把旧内容写到新会话文件上(等于旧对话丢失)。返回被归档的会话 id,
116
+ * 无内容可存时返回 null。
117
+ */
118
+ reset(): Promise<string | null>;
79
119
  /**
80
120
  * 应用外部配置变更(如 `/config` 改了当前端点的 API Key / Base URL):
81
121
  * **保留消息与上下文**,按磁盘上的新配置重建 Agent。
@@ -84,8 +124,15 @@ export declare class ChatSession {
84
124
  * 否则端点凭据仍是旧的(这也是 `resetScope()` 要 `dispose` 旧实例的原因)。
85
125
  */
86
126
  reload(): Promise<void>;
87
- /** 手动任务迁移(/migrate):与自动迁移共用同一服务实例 */
88
- migrate(): Promise<void>;
127
+ /** 手动任务迁移(`/migrate`):交接 + 开新会话;与自动迁移共用同一服务实例 */
128
+ migrate(mode?: HandoffMode): Promise<string>;
129
+ /**
130
+ * 只产出交接文档(`/handoff`):不切换会话、不改动历史。
131
+ *
132
+ * 交接回合(指令 + 工具调用 + 回执)会留在 `agent.messages` 里,
133
+ * 用户可继续要求细化同一份文档(重写同一路径即可)。
134
+ */
135
+ handoff(mode?: HandoffMode): Promise<string>;
89
136
  /** 撤回:删除索引 index 起的消息,返回被撤回的首条用户消息文本(用于预填输入) */
90
137
  rollbackTo(index: number): string;
91
138
  /** 保存当前对话到存档 */
@@ -93,8 +140,12 @@ export declare class ChatSession {
93
140
  /** 释放事件监听(重建 Agent 时调用,避免监听器泄漏) */
94
141
  dispose(): void;
95
142
  private attach;
143
+ /**
144
+ * 订阅 SDK 事件,仅把它们当作「messages 可能已变化」的信号:
145
+ * - `chunk-parsed`(每片 delta 应用后):高频 → 走合帧(`immediate=false`);
146
+ * - `open` / `parsed` / `finally`:轮次边界 → 立即上屏;
147
+ * - `error`:转发到通知通道。
148
+ */
96
149
  private wire;
97
- /** 把流式 delta 翻译为结构化事件 */
98
- private emitDelta;
99
150
  }
100
151
  //# sourceMappingURL=chat-session.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-session.d.ts","sourceRoot":"","sources":["../../src/tui/chat-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-session.d.ts","sourceRoot":"","sources":["../../src/tui/chat-session.ts"],"names":[],"mappings":"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"}