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

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 (298) hide show
  1. package/CHANGELOG.md +59 -1
  2. package/README.md +94 -40
  3. package/README.zh.md +94 -40
  4. package/dist/agent-creator.d.ts +7 -1
  5. package/dist/agent-creator.d.ts.map +1 -1
  6. package/dist/agent-creator.js +16 -1
  7. package/dist/agent-creator.js.map +1 -1
  8. package/dist/agents-store.d.ts +33 -0
  9. package/dist/agents-store.d.ts.map +1 -0
  10. package/dist/agents-store.js +50 -0
  11. package/dist/agents-store.js.map +1 -0
  12. package/dist/auto-migrate-confirm-plugin.d.ts +7 -7
  13. package/dist/auto-migrate-confirm-plugin.d.ts.map +1 -1
  14. package/dist/auto-migrate-confirm-plugin.js +3 -21
  15. package/dist/auto-migrate-confirm-plugin.js.map +1 -1
  16. package/dist/config-editor.d.ts +201 -0
  17. package/dist/config-editor.d.ts.map +1 -0
  18. package/dist/config-editor.js +511 -0
  19. package/dist/config-editor.js.map +1 -0
  20. package/dist/config.d.ts +41 -16
  21. package/dist/config.d.ts.map +1 -1
  22. package/dist/config.js +32 -29
  23. package/dist/config.js.map +1 -1
  24. package/dist/conversation-commands/registry.d.ts +4 -5
  25. package/dist/conversation-commands/registry.d.ts.map +1 -1
  26. package/dist/conversation-commands/registry.js +9 -6
  27. package/dist/conversation-commands/registry.js.map +1 -1
  28. package/dist/conversation-persist-plugin.d.ts +25 -0
  29. package/dist/conversation-persist-plugin.d.ts.map +1 -0
  30. package/dist/conversation-persist-plugin.js +44 -0
  31. package/dist/conversation-persist-plugin.js.map +1 -0
  32. package/dist/conversation-repository.d.ts +19 -2
  33. package/dist/conversation-repository.d.ts.map +1 -1
  34. package/dist/conversation-repository.js +48 -5
  35. package/dist/conversation-repository.js.map +1 -1
  36. package/dist/format-time.d.ts +2 -2
  37. package/dist/format-time.js +2 -2
  38. package/dist/hook.d.ts.map +1 -1
  39. package/dist/hook.js +58 -46
  40. package/dist/hook.js.map +1 -1
  41. package/dist/index.js +65 -36
  42. package/dist/index.js.map +1 -1
  43. package/dist/migration-service.d.ts +3 -1
  44. package/dist/migration-service.d.ts.map +1 -1
  45. package/dist/migration-service.js +26 -23
  46. package/dist/migration-service.js.map +1 -1
  47. package/dist/mode.d.ts +56 -0
  48. package/dist/mode.d.ts.map +1 -0
  49. package/dist/mode.js +83 -0
  50. package/dist/mode.js.map +1 -0
  51. package/dist/session-pointer.d.ts +22 -0
  52. package/dist/session-pointer.d.ts.map +1 -0
  53. package/dist/session-pointer.js +49 -0
  54. package/dist/session-pointer.js.map +1 -0
  55. package/dist/stdio-runner.d.ts +34 -0
  56. package/dist/stdio-runner.d.ts.map +1 -0
  57. package/dist/stdio-runner.js +161 -0
  58. package/dist/stdio-runner.js.map +1 -0
  59. package/dist/tui/chat-session.d.ts +100 -0
  60. package/dist/tui/chat-session.d.ts.map +1 -0
  61. package/dist/tui/chat-session.js +263 -0
  62. package/dist/tui/chat-session.js.map +1 -0
  63. package/dist/tui/components.d.ts +44 -0
  64. package/dist/tui/components.d.ts.map +1 -0
  65. package/dist/tui/components.js +62 -0
  66. package/dist/tui/components.js.map +1 -0
  67. package/dist/tui/config-wizard/detail.d.ts +51 -0
  68. package/dist/tui/config-wizard/detail.d.ts.map +1 -0
  69. package/dist/tui/config-wizard/detail.js +273 -0
  70. package/dist/tui/config-wizard/detail.js.map +1 -0
  71. package/dist/tui/config-wizard/engine.d.ts +36 -0
  72. package/dist/tui/config-wizard/engine.d.ts.map +1 -0
  73. package/dist/tui/config-wizard/engine.js +187 -0
  74. package/dist/tui/config-wizard/engine.js.map +1 -0
  75. package/dist/tui/config-wizard/fields.d.ts +24 -0
  76. package/dist/tui/config-wizard/fields.d.ts.map +1 -0
  77. package/dist/tui/config-wizard/fields.js +411 -0
  78. package/dist/tui/config-wizard/fields.js.map +1 -0
  79. package/dist/tui/config-wizard/frame.d.ts +27 -0
  80. package/dist/tui/config-wizard/frame.d.ts.map +1 -0
  81. package/dist/tui/config-wizard/frame.js +28 -0
  82. package/dist/tui/config-wizard/frame.js.map +1 -0
  83. package/dist/tui/config-wizard/index.d.ts +6 -0
  84. package/dist/tui/config-wizard/index.d.ts.map +1 -0
  85. package/dist/tui/config-wizard/index.js +7 -0
  86. package/dist/tui/config-wizard/index.js.map +1 -0
  87. package/dist/tui/config-wizard/kv-editor.d.ts +18 -0
  88. package/dist/tui/config-wizard/kv-editor.d.ts.map +1 -0
  89. package/dist/tui/config-wizard/kv-editor.js +116 -0
  90. package/dist/tui/config-wizard/kv-editor.js.map +1 -0
  91. package/dist/tui/config-wizard/list.d.ts +13 -0
  92. package/dist/tui/config-wizard/list.d.ts.map +1 -0
  93. package/dist/tui/config-wizard/list.js +29 -0
  94. package/dist/tui/config-wizard/list.js.map +1 -0
  95. package/dist/tui/config-wizard/mcp-helpers.d.ts +9 -0
  96. package/dist/tui/config-wizard/mcp-helpers.d.ts.map +1 -0
  97. package/dist/tui/config-wizard/mcp-helpers.js +19 -0
  98. package/dist/tui/config-wizard/mcp-helpers.js.map +1 -0
  99. package/dist/tui/config-wizard/menu.d.ts +18 -0
  100. package/dist/tui/config-wizard/menu.d.ts.map +1 -0
  101. package/dist/tui/config-wizard/menu.js +70 -0
  102. package/dist/tui/config-wizard/menu.js.map +1 -0
  103. package/dist/tui/config-wizard/prompt-editor.d.ts +24 -0
  104. package/dist/tui/config-wizard/prompt-editor.d.ts.map +1 -0
  105. package/dist/tui/config-wizard/prompt-editor.js +83 -0
  106. package/dist/tui/config-wizard/prompt-editor.js.map +1 -0
  107. package/dist/tui/config-wizard/prompt.d.ts +57 -0
  108. package/dist/tui/config-wizard/prompt.d.ts.map +1 -0
  109. package/dist/tui/config-wizard/prompt.js +130 -0
  110. package/dist/tui/config-wizard/prompt.js.map +1 -0
  111. package/dist/tui/config-wizard/step-agents.d.ts +4 -0
  112. package/dist/tui/config-wizard/step-agents.d.ts.map +1 -0
  113. package/dist/tui/config-wizard/step-agents.js +110 -0
  114. package/dist/tui/config-wizard/step-agents.js.map +1 -0
  115. package/dist/tui/config-wizard/step-defaults.d.ts +4 -0
  116. package/dist/tui/config-wizard/step-defaults.d.ts.map +1 -0
  117. package/dist/tui/config-wizard/step-defaults.js +76 -0
  118. package/dist/tui/config-wizard/step-defaults.js.map +1 -0
  119. package/dist/tui/config-wizard/step-endpoints.d.ts +4 -0
  120. package/dist/tui/config-wizard/step-endpoints.d.ts.map +1 -0
  121. package/dist/tui/config-wizard/step-endpoints.js +43 -0
  122. package/dist/tui/config-wizard/step-endpoints.js.map +1 -0
  123. package/dist/tui/config-wizard/step-mcp.d.ts +4 -0
  124. package/dist/tui/config-wizard/step-mcp.d.ts.map +1 -0
  125. package/dist/tui/config-wizard/step-mcp.js +97 -0
  126. package/dist/tui/config-wizard/step-mcp.js.map +1 -0
  127. package/dist/tui/config-wizard/step-menu.d.ts +4 -0
  128. package/dist/tui/config-wizard/step-menu.d.ts.map +1 -0
  129. package/dist/tui/config-wizard/step-menu.js +28 -0
  130. package/dist/tui/config-wizard/step-menu.js.map +1 -0
  131. package/dist/tui/config-wizard/step-models.d.ts +4 -0
  132. package/dist/tui/config-wizard/step-models.d.ts.map +1 -0
  133. package/dist/tui/config-wizard/step-models.js +114 -0
  134. package/dist/tui/config-wizard/step-models.js.map +1 -0
  135. package/dist/tui/config-wizard/step-new-endpoint.d.ts +4 -0
  136. package/dist/tui/config-wizard/step-new-endpoint.d.ts.map +1 -0
  137. package/dist/tui/config-wizard/step-new-endpoint.js +54 -0
  138. package/dist/tui/config-wizard/step-new-endpoint.js.map +1 -0
  139. package/dist/tui/config-wizard/step-simple.d.ts +4 -0
  140. package/dist/tui/config-wizard/step-simple.d.ts.map +1 -0
  141. package/dist/tui/config-wizard/step-simple.js +55 -0
  142. package/dist/tui/config-wizard/step-simple.js.map +1 -0
  143. package/dist/tui/config-wizard/types.d.ts +138 -0
  144. package/dist/tui/config-wizard/types.d.ts.map +1 -0
  145. package/dist/tui/config-wizard/types.js +12 -0
  146. package/dist/tui/config-wizard/types.js.map +1 -0
  147. package/dist/tui/config-wizard/wizard.d.ts +9 -0
  148. package/dist/tui/config-wizard/wizard.d.ts.map +1 -0
  149. package/dist/tui/config-wizard/wizard.js +33 -0
  150. package/dist/tui/config-wizard/wizard.js.map +1 -0
  151. package/dist/tui/highlight.d.ts +34 -0
  152. package/dist/tui/highlight.d.ts.map +1 -0
  153. package/dist/tui/highlight.js +116 -0
  154. package/dist/tui/highlight.js.map +1 -0
  155. package/dist/tui/index.d.ts +33 -0
  156. package/dist/tui/index.d.ts.map +1 -0
  157. package/dist/tui/index.js +265 -0
  158. package/dist/tui/index.js.map +1 -0
  159. package/dist/tui/screens/chat-commands.d.ts +27 -0
  160. package/dist/tui/screens/chat-commands.d.ts.map +1 -0
  161. package/dist/tui/screens/chat-commands.js +176 -0
  162. package/dist/tui/screens/chat-commands.js.map +1 -0
  163. package/dist/tui/screens/chat.d.ts +25 -0
  164. package/dist/tui/screens/chat.d.ts.map +1 -0
  165. package/dist/tui/screens/chat.js +494 -0
  166. package/dist/tui/screens/chat.js.map +1 -0
  167. package/dist/tui/screens/index.d.ts +13 -0
  168. package/dist/tui/screens/index.d.ts.map +1 -0
  169. package/dist/tui/screens/index.js +14 -0
  170. package/dist/tui/screens/index.js.map +1 -0
  171. package/dist/tui/screens/input.d.ts +29 -0
  172. package/dist/tui/screens/input.d.ts.map +1 -0
  173. package/dist/tui/screens/input.js +54 -0
  174. package/dist/tui/screens/input.js.map +1 -0
  175. package/dist/tui/screens/layout.d.ts +42 -0
  176. package/dist/tui/screens/layout.d.ts.map +1 -0
  177. package/dist/tui/screens/layout.js +45 -0
  178. package/dist/tui/screens/layout.js.map +1 -0
  179. package/dist/tui/screens/lines.d.ts +71 -0
  180. package/dist/tui/screens/lines.d.ts.map +1 -0
  181. package/dist/tui/screens/lines.js +198 -0
  182. package/dist/tui/screens/lines.js.map +1 -0
  183. package/dist/tui/screens/overlays.d.ts +12 -0
  184. package/dist/tui/screens/overlays.d.ts.map +1 -0
  185. package/dist/tui/screens/overlays.js +34 -0
  186. package/dist/tui/screens/overlays.js.map +1 -0
  187. package/dist/tui/screens/render.d.ts +9 -0
  188. package/dist/tui/screens/render.d.ts.map +1 -0
  189. package/dist/tui/screens/render.js +97 -0
  190. package/dist/tui/screens/render.js.map +1 -0
  191. package/dist/tui/screens/splash.d.ts +5 -0
  192. package/dist/tui/screens/splash.d.ts.map +1 -0
  193. package/dist/tui/screens/splash.js +51 -0
  194. package/dist/tui/screens/splash.js.map +1 -0
  195. package/dist/tui/screens/state.d.ts +13 -0
  196. package/dist/tui/screens/state.d.ts.map +1 -0
  197. package/dist/tui/screens/state.js +75 -0
  198. package/dist/tui/screens/state.js.map +1 -0
  199. package/dist/tui/text.d.ts +71 -0
  200. package/dist/tui/text.d.ts.map +1 -0
  201. package/dist/tui/text.js +191 -0
  202. package/dist/tui/text.js.map +1 -0
  203. package/dist/tui/theme.d.ts +62 -0
  204. package/dist/tui/theme.d.ts.map +1 -0
  205. package/dist/tui/theme.js +120 -0
  206. package/dist/tui/theme.js.map +1 -0
  207. package/dist/types.d.ts +1 -2
  208. package/dist/types.d.ts.map +1 -1
  209. package/dist/types.js +1 -1
  210. package/package.json +11 -6
  211. package/dist/config-wizard.d.ts +0 -6
  212. package/dist/config-wizard.d.ts.map +0 -1
  213. package/dist/config-wizard.js +0 -46
  214. package/dist/config-wizard.js.map +0 -1
  215. package/dist/conversation-commands/back.d.ts +0 -3
  216. package/dist/conversation-commands/back.d.ts.map +0 -1
  217. package/dist/conversation-commands/back.js +0 -144
  218. package/dist/conversation-commands/back.js.map +0 -1
  219. package/dist/conversation-commands/clear.d.ts +0 -3
  220. package/dist/conversation-commands/clear.d.ts.map +0 -1
  221. package/dist/conversation-commands/clear.js +0 -8
  222. package/dist/conversation-commands/clear.js.map +0 -1
  223. package/dist/conversation-commands/editor.d.ts +0 -3
  224. package/dist/conversation-commands/editor.d.ts.map +0 -1
  225. package/dist/conversation-commands/editor.js +0 -15
  226. package/dist/conversation-commands/editor.js.map +0 -1
  227. package/dist/conversation-commands/exit.d.ts +0 -3
  228. package/dist/conversation-commands/exit.d.ts.map +0 -1
  229. package/dist/conversation-commands/exit.js +0 -37
  230. package/dist/conversation-commands/exit.js.map +0 -1
  231. package/dist/conversation-commands/help.d.ts +0 -3
  232. package/dist/conversation-commands/help.d.ts.map +0 -1
  233. package/dist/conversation-commands/help.js +0 -10
  234. package/dist/conversation-commands/help.js.map +0 -1
  235. package/dist/conversation-commands/index.d.ts +0 -13
  236. package/dist/conversation-commands/index.d.ts.map +0 -1
  237. package/dist/conversation-commands/index.js +0 -66
  238. package/dist/conversation-commands/index.js.map +0 -1
  239. package/dist/conversation-commands/migrate.d.ts +0 -12
  240. package/dist/conversation-commands/migrate.d.ts.map +0 -1
  241. package/dist/conversation-commands/migrate.js +0 -56
  242. package/dist/conversation-commands/migrate.js.map +0 -1
  243. package/dist/conversation-commands/new.d.ts +0 -3
  244. package/dist/conversation-commands/new.d.ts.map +0 -1
  245. package/dist/conversation-commands/new.js +0 -45
  246. package/dist/conversation-commands/new.js.map +0 -1
  247. package/dist/conversation-commands/save.d.ts +0 -3
  248. package/dist/conversation-commands/save.d.ts.map +0 -1
  249. package/dist/conversation-commands/save.js +0 -32
  250. package/dist/conversation-commands/save.js.map +0 -1
  251. package/dist/conversation-runner.d.ts +0 -17
  252. package/dist/conversation-runner.d.ts.map +0 -1
  253. package/dist/conversation-runner.js +0 -176
  254. package/dist/conversation-runner.js.map +0 -1
  255. package/dist/delta-renderer.d.ts +0 -33
  256. package/dist/delta-renderer.d.ts.map +0 -1
  257. package/dist/delta-renderer.js +0 -120
  258. package/dist/delta-renderer.js.map +0 -1
  259. package/dist/draft-plugin.d.ts +0 -19
  260. package/dist/draft-plugin.d.ts.map +0 -1
  261. package/dist/draft-plugin.js +0 -30
  262. package/dist/draft-plugin.js.map +0 -1
  263. package/dist/draft-repository.d.ts +0 -34
  264. package/dist/draft-repository.d.ts.map +0 -1
  265. package/dist/draft-repository.js +0 -64
  266. package/dist/draft-repository.js.map +0 -1
  267. package/dist/menus/agents.d.ts +0 -5
  268. package/dist/menus/agents.d.ts.map +0 -1
  269. package/dist/menus/agents.js +0 -219
  270. package/dist/menus/agents.js.map +0 -1
  271. package/dist/menus/common.d.ts +0 -41
  272. package/dist/menus/common.d.ts.map +0 -1
  273. package/dist/menus/common.js +0 -104
  274. package/dist/menus/common.js.map +0 -1
  275. package/dist/menus/config-display.d.ts +0 -2
  276. package/dist/menus/config-display.d.ts.map +0 -1
  277. package/dist/menus/config-display.js +0 -82
  278. package/dist/menus/config-display.js.map +0 -1
  279. package/dist/menus/config.d.ts +0 -8
  280. package/dist/menus/config.d.ts.map +0 -1
  281. package/dist/menus/config.js +0 -407
  282. package/dist/menus/config.js.map +0 -1
  283. package/dist/menus/conversations.d.ts +0 -20
  284. package/dist/menus/conversations.d.ts.map +0 -1
  285. package/dist/menus/conversations.js +0 -83
  286. package/dist/menus/conversations.js.map +0 -1
  287. package/dist/menus/index.d.ts +0 -5
  288. package/dist/menus/index.d.ts.map +0 -1
  289. package/dist/menus/index.js +0 -59
  290. package/dist/menus/index.js.map +0 -1
  291. package/dist/menus/start-conversation.d.ts +0 -16
  292. package/dist/menus/start-conversation.d.ts.map +0 -1
  293. package/dist/menus/start-conversation.js +0 -176
  294. package/dist/menus/start-conversation.js.map +0 -1
  295. package/dist/slash-hint-prompt.d.ts +0 -41
  296. package/dist/slash-hint-prompt.d.ts.map +0 -1
  297. package/dist/slash-hint-prompt.js +0 -92
  298. package/dist/slash-hint-prompt.js.map +0 -1
@@ -1,45 +0,0 @@
1
- import chalk from "chalk";
2
- import inquirer from "inquirer";
3
- import { Message } from "@ai-zen/agents-core";
4
- import { formatShortTime } from "../format-time.js";
5
- import { conversationRepository } from "../conversation-repository.js";
6
- import { draftRepository } from "../draft-repository.js";
7
- export async function handleNew(ctx) {
8
- const agent = ctx.agent;
9
- const { confirmNew } = await inquirer.prompt([
10
- {
11
- type: "confirm",
12
- name: "confirmNew",
13
- message: "确定要开始新对话吗?当前对话将丢失。",
14
- default: false,
15
- },
16
- ]);
17
- if (!confirmNew) {
18
- console.log(chalk.gray("已取消\n"));
19
- return;
20
- }
21
- // 将当前草稿存档(如果有),避免丢失
22
- const draft = await draftRepository.read();
23
- if (draft && draft.messages.length > 1) {
24
- const name = `草稿-${formatShortTime(draft.updatedAt)}`;
25
- const id = name.replace(/[\\/:*?"<>|]/g, "_");
26
- await conversationRepository.write({
27
- id,
28
- agentId: draft.agentId || "default",
29
- modelId: draft.modelId,
30
- messages: draft.messages,
31
- createdAt: new Date().toISOString(),
32
- updatedAt: new Date().toISOString(),
33
- });
34
- console.log(chalk.gray(`📦 当前对话已存档: ${name}\n`));
35
- await draftRepository.delete();
36
- }
37
- // 重置为 Agent 定义的初始消息(system prompt + few-shot 示例等)
38
- agent.messages = agent.definition.messages.map((m) => new Message(m));
39
- // 更新上下文状态
40
- ctx.currentName = `对话_${formatShortTime(new Date().toISOString())}`;
41
- ctx.currentId = undefined;
42
- ctx.input = "";
43
- console.log(chalk.blue.bold("\n🆕 新会话已开始\n"));
44
- }
45
- //# sourceMappingURL=new.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/conversation-commands/new.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAW,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAwB;IACtD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACxB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QAC3C;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,oBAAoB;YAC7B,OAAO,EAAE,KAAK;SACf;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IAED,oBAAoB;IACpB,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,CAAC;IAC3C,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QACtD,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;QAC9C,MAAM,sBAAsB,CAAC,KAAK,CAAC;YACjC,EAAE;YACF,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,SAAS;YACnC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC,CAAC;QACjD,MAAM,eAAe,CAAC,MAAM,EAAE,CAAC;IACjC,CAAC;IAED,kDAAkD;IAClD,KAAK,CAAC,QAAQ,GAAI,KAAK,CAAC,UAAU,CAAC,QAA8B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7F,UAAU;IACV,GAAG,CAAC,WAAW,GAAG,MAAM,eAAe,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;IACpE,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;IAC1B,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;IAEf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;AAChD,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { ConversationContext } from "../types.js";
2
- export declare function handleSave(ctx: ConversationContext): Promise<void>;
3
- //# sourceMappingURL=save.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../src/conversation-commands/save.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,wBAAsB,UAAU,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BxE"}
@@ -1,32 +0,0 @@
1
- import chalk from "chalk";
2
- import inquirer from "inquirer";
3
- import { conversationRepository } from "../conversation-repository.js";
4
- export async function handleSave(ctx) {
5
- const agent = ctx.agent;
6
- const { name } = await inquirer.prompt([
7
- {
8
- type: "input",
9
- name: "name",
10
- message: "对话名称:",
11
- default: ctx.currentName,
12
- },
13
- ]);
14
- try {
15
- const id = ctx.currentId || name.replace(/[\\/:*?"<>|]/g, "_");
16
- await conversationRepository.write({
17
- id,
18
- agentId: ctx.agentId || "default",
19
- modelId: ctx.modelId,
20
- messages: agent.messages,
21
- createdAt: new Date().toISOString(),
22
- updatedAt: new Date().toISOString(),
23
- });
24
- console.log(chalk.green(`\n✅ 对话已保存: ${name} (ID: ${id})\n`));
25
- ctx.currentName = name;
26
- ctx.currentId = id;
27
- }
28
- catch (error) {
29
- console.error(chalk.red(`\n❌ 保存失败: ${error}\n`));
30
- }
31
- }
32
- //# sourceMappingURL=save.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"save.js","sourceRoot":"","sources":["../../src/conversation-commands/save.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAGvE,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAwB;IACvD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACxB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACrC;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,GAAG,CAAC,WAAW;SACzB;KACF,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;QAC/D,MAAM,sBAAsB,CAAC,KAAK,CAAC;YACjC,EAAE;YACF,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,SAAS;YACjC,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,IAAI,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;QAC7D,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC;QACvB,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC;IACnD,CAAC;AACH,CAAC"}
@@ -1,17 +0,0 @@
1
- /**
2
- * 对话运行器 — CLI 对话主循环
3
- *
4
- * 使用 SDK 的 SdkAgent + 插件驱动对话。
5
- * CLI 层只负责:流式渲染、命令处理、UI 交互。
6
- */
7
- import { AgentNS } from "@ai-zen/agents-core";
8
- export interface RunConversationOptions {
9
- modelId: string;
10
- agentId?: string;
11
- messages?: AgentNS.Message[];
12
- conversationId?: string;
13
- conversationName?: string;
14
- query?: string;
15
- }
16
- export declare function runConversation(options: RunConversationOptions): Promise<void>;
17
- //# sourceMappingURL=conversation-runner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"conversation-runner.d.ts","sourceRoot":"","sources":["../src/conversation-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AA0D9C,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqJpF"}
@@ -1,176 +0,0 @@
1
- /**
2
- * 对话运行器 — CLI 对话主循环
3
- *
4
- * 使用 SDK 的 SdkAgent + 插件驱动对话。
5
- * CLI 层只负责:流式渲染、命令处理、UI 交互。
6
- */
7
- import chalk from "chalk";
8
- import { AgentNS } from "@ai-zen/agents-core";
9
- import { AutoRefreshToolsPlugin, ContextGuardPlugin } from "@ai-zen/agents-sdk";
10
- import { AutoMigrateConfirmPlugin } from "./auto-migrate-confirm-plugin.js";
11
- import { SubAgentGuardInstallerPlugin } from "./sub-agent-guard-plugin.js";
12
- import { DeltaRenderer } from "./delta-renderer.js";
13
- import { createAgent } from "./agent-creator.js";
14
- import { readConfig } from "./config.js";
15
- import { CwdTrackerPlugin } from "./cwd-tracker-plugin.js";
16
- import { DraftPlugin } from "./draft-plugin.js";
17
- import { saveConversation } from "./conversation-repository.js";
18
- import { createMigrationService } from "./migration-service.js";
19
- import { ensureEndpointConfig } from "./config-wizard.js";
20
- import { formatShortTime } from "./format-time.js";
21
- import { dispatchCommand, getCommandNames } from "./conversation-commands/index.js";
22
- import { askInput } from "./slash-hint-prompt.js";
23
- // ==================== 发送消息 ====================
24
- async function sendAndStream(ctx) {
25
- console.log(chalk.green.bold("\n🤖 AI:"));
26
- try {
27
- const messages = await ctx.agent.send(ctx.input);
28
- process.stdout.write("\n\n");
29
- const lastMessage = messages.at(-1);
30
- if (lastMessage?.status === "error") {
31
- console.error(chalk.red(`\n❌ 发生错误: ${JSON.stringify(lastMessage)}\n`));
32
- try {
33
- await saveConversation(ctx);
34
- console.log(chalk.yellow(`💾 错误时对话已自动保存: ${ctx.currentName}\n`));
35
- }
36
- catch (saveError) {
37
- console.error(chalk.red(`❌ 自动保存失败: ${saveError}\n`));
38
- }
39
- return;
40
- }
41
- if (lastMessage?.role === AgentNS.Role.Assistant && Array.isArray(lastMessage.content)) {
42
- for (const section of lastMessage.content) {
43
- if (section.type === "image_url")
44
- console.log(chalk.yellow(`[图片: ${section.image_url.url}]`));
45
- }
46
- }
47
- console.log();
48
- }
49
- catch (error) {
50
- process.stdout.write(chalk.red(`\n❌ 请求错误: ${error?.message || error}\n`));
51
- if (error.message?.includes("API Key") || error.message?.includes("401") || error.message?.includes("403")) {
52
- console.log(chalk.yellow("💡 提示: 请使用 'aiz config set-key' 设置正确的 API Key\n"));
53
- }
54
- }
55
- }
56
- export async function runConversation(options) {
57
- const { modelId, agentId, messages, conversationId, conversationName, query } = options;
58
- // 确保端点配置完整(如 API Key 已设置)
59
- await ensureEndpointConfig(modelId);
60
- // 在 runConversation 内部创建 agent
61
- const agent = await createAgent({ messages, agentId });
62
- // 会话上下文:先创建基础字段(迁移服务实例随后装配并回填 migrationService)
63
- const ctx = {
64
- agent,
65
- input: "",
66
- currentName: conversationName || `对话_${formatShortTime(new Date().toISOString())}`,
67
- currentId: conversationId,
68
- modelId,
69
- agentId,
70
- running: true,
71
- };
72
- // ============ 插件注册 ============
73
- // 1. cwdTracker — 追踪工作目录变化,动态通知 Agent
74
- agent.use(new CwdTrackerPlugin());
75
- // 2. autoRefreshTools — 每次 send 前刷新文件系统工具
76
- agent.use(new AutoRefreshToolsPlugin());
77
- // 3. draftPlugin — 每次 send 后自动保存草稿(CLI 产品特性,不依赖 SDK;始终写入 _current.json,统一草稿检测入口)
78
- agent.use(new DraftPlugin({
79
- agentId: agentId || "default",
80
- modelId,
81
- cwd: process.cwd(),
82
- }));
83
- // 4/5. contextGuard 与 autoMigrate 的前置准备(读取模型最大上下文 token)
84
- const config = await readConfig();
85
- const modelConfig = config.models.find((m) => m.id === modelId);
86
- const maxTokens = modelConfig?.maxContextTokens ?? (modelConfig?.maxContextChars ? Math.floor(modelConfig.maxContextChars / 4) : undefined);
87
- // 迁移服务实例:自动迁移(AutoMigratePlugin)与手动迁移(/migrate 命令)共用同一实例。
88
- // 迁移前后处理(保存旧对话 / 开启新会话 / 落盘草稿)统一收敛到 src/migration-service.ts。
89
- const migrationService = createMigrationService(ctx);
90
- ctx.migrationService = migrationService;
91
- if (maxTokens && maxTokens > 0) {
92
- // contextGuard — 请求前检测用量,严重超限(> maxTokens×1.5)时抛 ContextOverflowError 中断对话。
93
- // 作为安全护栏置于迁移插件之前:防止读入超大文件等突发超限在迁移生效前撑爆上下文。
94
- agent.use(new ContextGuardPlugin({ maxTokens }));
95
- // autoMigrate — 检测 token 超限时自动迁移。仅负责触发(何时迁移),实际迁移委托给共享的 migrationService。
96
- // 触发后先做一次「二次确认」(AutoMigrateConfirmPlugin,CLI 层):非交互环境无确认通道,
97
- // 保持既有静默自动迁移行为;用户拒绝则跳过本次迁移、不改变当前对话。
98
- agent.use(new AutoMigrateConfirmPlugin({ service: migrationService, maxTokens }));
99
- // subAgentGuard — 子 Agent 上下文护栏:委派前给子 Agent 安插主 Agent 同款的
100
- // ContextGuardPlugin(同一 maxTokens)。子 Agent 由 SDK 新建实例、不继承宿主插件
101
- // (且走 run() 而非 send()),故必须经 onSubAgentStart 显式安插。
102
- agent.use(new SubAgentGuardInstallerPlugin({ maxTokens }));
103
- }
104
- // 初始化所有插件
105
- await agent.init();
106
- const cmdList = getCommandNames().map((c) => `/${c}`).join(", ");
107
- console.log(chalk.blue.bold(`💬 对话已开始 (输入 ${cmdList} 查看和操作)\n`));
108
- // ============ 流式渲染器 ============
109
- const renderer = new DeltaRenderer({
110
- reasoningHeader: "\n\n💭 思考中...\n",
111
- contentHeader: "\n\n💭 回答中...\n",
112
- reasoningStyle: chalk.blue,
113
- });
114
- const onRun = () => { renderer.reset(); };
115
- const onChunk = (chunk) => {
116
- if (!chunk?.choices?.[0]?.delta)
117
- return;
118
- const delta = chunk.choices[0].delta;
119
- const fr = chunk.choices[0].finish_reason ?? null;
120
- renderer.render(delta, fr);
121
- };
122
- const onError = (error) => {
123
- process.stdout.write(chalk.red(`\n❌ 错误: ${error?.message || error}\n`));
124
- };
125
- // ============ 子 Agent 渲染 ============
126
- const onSubAgent = ({ subAgent, toolCallContext }) => {
127
- const toolName = toolCallContext?.tool_call?.function?.name || "子任务";
128
- process.stdout.write(chalk.yellow.bold(`\n 🧩 ${toolName}:\n`));
129
- subAgent.events.on("open", onRun);
130
- subAgent.events.on("chunk", onChunk);
131
- subAgent.events.on("error", onError);
132
- };
133
- const onSubAgentEnd = ({ toolCallContext }) => {
134
- const toolName = toolCallContext?.tool_call?.function?.name || "子任务";
135
- process.stdout.write(chalk.gray(`\n ✅ ${toolName} 完成\n`));
136
- };
137
- // ============ 注册事件 ============
138
- ctx.agent.events.on("open", onRun);
139
- ctx.agent.events.on("chunk", onChunk);
140
- ctx.agent.events.on("error", onError);
141
- ctx.agent.events.on("sub-agent-start", onSubAgent);
142
- ctx.agent.events.on("sub-agent-end", onSubAgentEnd);
143
- // ============ 初始消息 ============
144
- if (query) {
145
- ctx.input = query;
146
- console.log(chalk.cyan("💬 你: ") + query + "\n");
147
- await sendAndStream(ctx);
148
- }
149
- // ============ 主循环 ============
150
- while (ctx.running) {
151
- // 命令提示(输入 / 时列出候选命令)由输入提示自行渲染,此处只取输入内容
152
- ctx.input = await askInput();
153
- if (!ctx.input)
154
- continue;
155
- const handled = await dispatchCommand(ctx);
156
- if (handled) {
157
- if (ctx.shouldSend) {
158
- ctx.shouldSend = false;
159
- console.log(chalk.cyan("💬 你: ") + ctx.input + "\n");
160
- }
161
- else {
162
- continue;
163
- }
164
- }
165
- if (!ctx.input)
166
- continue;
167
- await sendAndStream(ctx);
168
- }
169
- ctx.agent.events.off("open", onRun);
170
- ctx.agent.events.off("chunk", onChunk);
171
- ctx.agent.events.off("error", onError);
172
- ctx.agent.events.off("sub-agent-start", onSubAgent);
173
- ctx.agent.events.off("sub-agent-end", onSubAgentEnd);
174
- console.log(chalk.blue.bold("\n👋 再见!\n"));
175
- }
176
- //# sourceMappingURL=conversation-runner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"conversation-runner.js","sourceRoot":"","sources":["../src/conversation-runner.ts"],"names":[],"mappings":"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"}
@@ -1,33 +0,0 @@
1
- import { AgentNS } from "@ai-zen/agents-core";
2
- export interface DeltaRendererOptions {
3
- /** 首次 reasoning 时打印的头部 */
4
- reasoningHeader?: string;
5
- /** 首次 content 时打印的头部 */
6
- contentHeader?: string;
7
- /** reasoning 文本的样式 */
8
- reasoningStyle?: any;
9
- /** content 文本的样式 */
10
- contentStyle?: any;
11
- /** 每行前的缩进 */
12
- indent?: string;
13
- }
14
- /**
15
- * 流式 Delta 渲染器,管理 reasoning/content/tool_calls 的状态和输出
16
- */
17
- export declare class DeltaRenderer {
18
- private reasoningPrinted;
19
- private contentPrinted;
20
- private toolPrints;
21
- private opts;
22
- constructor(opts?: DeltaRendererOptions);
23
- /**
24
- * 渲染一个 delta,同时处理 content、reasoning_content 和 tool_calls
25
- * @param delta - 流式 delta
26
- * @param finishReason - 当前 choice 的 finish_reason(用于 tool_calls 完成标记)
27
- */
28
- render(delta: AgentNS.Delta, finishReason?: AgentNS.FinishReason | null): void;
29
- /** 重置状态(新一轮对话时调用) */
30
- reset(): void;
31
- private renderToolCalls;
32
- }
33
- //# sourceMappingURL=delta-renderer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delta-renderer.d.ts","sourceRoot":"","sources":["../src/delta-renderer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAiB9C,MAAM,WAAW,oBAAoB;IACnC,0BAA0B;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wBAAwB;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sBAAsB;IACtB,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,oBAAoB;IACpB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,aAAa;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,UAAU,CAAqC;IACvD,OAAO,CAAC,IAAI,CAAiC;gBAEjC,IAAI,GAAE,oBAAyB;IAU3C;;;;OAIG;IACH,MAAM,CACJ,KAAK,EAAE,OAAO,CAAC,KAAK,EACpB,YAAY,GAAE,OAAO,CAAC,YAAY,GAAG,IAAW,GAC/C,IAAI;IAiCP,qBAAqB;IACrB,KAAK,IAAI,IAAI;IAQb,OAAO,CAAC,eAAe;CAgExB"}
@@ -1,120 +0,0 @@
1
- import chalk from "chalk";
2
- import { AgentNS } from "@ai-zen/agents-core";
3
- /** 无颜色样式:普通文本保持终端默认前景色,避免在浅色背景下看不清 */
4
- const noStyle = (s) => s;
5
- // ==================== 流式渲染器 ====================
6
- /**
7
- * 流式 Delta 渲染器,管理 reasoning/content/tool_calls 的状态和输出
8
- */
9
- export class DeltaRenderer {
10
- reasoningPrinted = false;
11
- contentPrinted = false;
12
- toolPrints = {};
13
- opts;
14
- constructor(opts = {}) {
15
- this.opts = {
16
- reasoningHeader: opts.reasoningHeader ?? "",
17
- contentHeader: opts.contentHeader ?? "",
18
- reasoningStyle: opts.reasoningStyle ?? chalk.blue,
19
- contentStyle: opts.contentStyle ?? noStyle,
20
- indent: opts.indent ?? "",
21
- };
22
- }
23
- /**
24
- * 渲染一个 delta,同时处理 content、reasoning_content 和 tool_calls
25
- * @param delta - 流式 delta
26
- * @param finishReason - 当前 choice 的 finish_reason(用于 tool_calls 完成标记)
27
- */
28
- render(delta, finishReason = null) {
29
- // 1. 渲染工具调用
30
- if (delta.tool_calls) {
31
- this.renderToolCalls(delta, finishReason);
32
- }
33
- // 2. 渲染 reasoning
34
- if (delta.reasoning_content) {
35
- if (!this.reasoningPrinted && this.opts.reasoningHeader) {
36
- process.stdout.write(this.opts.indent + this.opts.reasoningHeader);
37
- this.reasoningPrinted = true;
38
- }
39
- process.stdout.write(this.opts.reasoningStyle(delta.reasoning_content));
40
- }
41
- // 3. 渲染 content
42
- if (delta.content) {
43
- if (!this.contentPrinted && this.opts.contentHeader) {
44
- process.stdout.write(this.opts.indent + this.opts.contentHeader);
45
- this.contentPrinted = true;
46
- }
47
- if (typeof delta.content === "string") {
48
- process.stdout.write(this.opts.contentStyle(delta.content));
49
- }
50
- else if (Array.isArray(delta.content)) {
51
- for (const s of delta.content) {
52
- if (s.type === "text" && s.text) {
53
- process.stdout.write(this.opts.contentStyle(s.text));
54
- }
55
- }
56
- }
57
- }
58
- }
59
- /** 重置状态(新一轮对话时调用) */
60
- reset() {
61
- this.reasoningPrinted = false;
62
- this.contentPrinted = false;
63
- for (const k in this.toolPrints)
64
- delete this.toolPrints[k];
65
- }
66
- // ==================== 工具调用渲染 ====================
67
- renderToolCalls(delta, finishReason) {
68
- if (!delta.tool_calls || delta.tool_calls.length === 0)
69
- return;
70
- const isFirstToolCall = Object.keys(this.toolPrints).length === 0 &&
71
- delta.tool_calls.some((tc) => tc.function?.name || tc.function?.arguments);
72
- if (isFirstToolCall)
73
- process.stdout.write(chalk.blue.bold("\n\n💭 工具调用中..."));
74
- for (const tc of delta.tool_calls) {
75
- const index = tc.index ?? 0;
76
- const func = tc.function;
77
- if (!this.toolPrints[index]) {
78
- this.toolPrints[index] = {
79
- name: "",
80
- arguments: "",
81
- namePrinted: false,
82
- argsPrinted: false,
83
- completed: false,
84
- };
85
- }
86
- const p = this.toolPrints[index];
87
- if (func?.name)
88
- p.name += func.name;
89
- if (func?.arguments)
90
- p.arguments += func.arguments;
91
- if (p.name && !p.namePrinted) {
92
- process.stdout.write(chalk.magenta.bold(`\n🔧 ${index} ${p.name}\n`));
93
- p.namePrinted = true;
94
- }
95
- if (p.arguments && !p.argsPrinted && p.namePrinted)
96
- p.argsPrinted = true;
97
- if (func?.arguments && p.argsPrinted)
98
- process.stdout.write(chalk.gray(func.arguments));
99
- if (finishReason === AgentNS.FinishReason.ToolCalls)
100
- p.completed = true;
101
- }
102
- if (finishReason === AgentNS.FinishReason.ToolCalls) {
103
- for (const idx of Object.keys(this.toolPrints).map(Number)) {
104
- const p = this.toolPrints[idx];
105
- if (p.completed && p.arguments) {
106
- process.stdout.write("\n");
107
- try {
108
- const parsed = JSON.parse(p.arguments);
109
- process.stdout.write(chalk.gray(` ${JSON.stringify(parsed, null, 4)}\n`));
110
- }
111
- catch {
112
- process.stdout.write(chalk.gray(` ${p.arguments}\n`));
113
- }
114
- }
115
- }
116
- process.stdout.write("\n");
117
- }
118
- }
119
- }
120
- //# sourceMappingURL=delta-renderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delta-renderer.js","sourceRoot":"","sources":["../src/delta-renderer.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- /**
2
- * DraftPlugin — CLI 草稿自动保存插件。
3
- *
4
- * 草稿是 CLI 的产品特性(交互式对话暂存),不依赖 SDK。
5
- * 每次内循环结束后把当前消息列表写入草稿,供下次启动恢复。
6
- */
7
- import type { AgentPlugin, SendContext } from "@ai-zen/agents-sdk";
8
- export interface DraftPluginOptions {
9
- agentId: string;
10
- modelId: string;
11
- conversationId?: string;
12
- cwd?: string;
13
- }
14
- export declare class DraftPlugin implements AgentPlugin {
15
- private options;
16
- constructor(options: DraftPluginOptions);
17
- onInnerLoopEnd(ctx: SendContext): Promise<void>;
18
- }
19
- //# sourceMappingURL=draft-plugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"draft-plugin.d.ts","sourceRoot":"","sources":["../src/draft-plugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGnE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,WAAY,YAAW,WAAW;IACjC,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,kBAAkB;IAEzC,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAgBtD"}
@@ -1,30 +0,0 @@
1
- /**
2
- * DraftPlugin — CLI 草稿自动保存插件。
3
- *
4
- * 草稿是 CLI 的产品特性(交互式对话暂存),不依赖 SDK。
5
- * 每次内循环结束后把当前消息列表写入草稿,供下次启动恢复。
6
- */
7
- import { draftRepository } from "./draft-repository.js";
8
- export class DraftPlugin {
9
- options;
10
- constructor(options) {
11
- this.options = options;
12
- }
13
- async onInnerLoopEnd(ctx) {
14
- const { agentId, modelId, conversationId, cwd } = this.options;
15
- try {
16
- await draftRepository.write({
17
- conversationId,
18
- agentId,
19
- modelId,
20
- messages: ctx.agent.messages,
21
- cwd,
22
- updatedAt: new Date().toISOString(),
23
- });
24
- }
25
- catch (err) {
26
- console.warn(`[draft] 保存失败: ${err?.message ?? err}`);
27
- }
28
- }
29
- }
30
- //# sourceMappingURL=draft-plugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"draft-plugin.js","sourceRoot":"","sources":["../src/draft-plugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AASxD,MAAM,OAAO,WAAW;IACF;IAApB,YAAoB,OAA2B;QAA3B,YAAO,GAAP,OAAO,CAAoB;IAAG,CAAC;IAEnD,KAAK,CAAC,cAAc,CAAC,GAAgB;QACnC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAE/D,IAAI,CAAC;YACH,MAAM,eAAe,CAAC,KAAK,CAAC;gBAC1B,cAAc;gBACd,OAAO;gBACP,OAAO;gBACP,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ;gBAC5B,GAAG;gBACH,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,iBAAiB,GAAG,EAAE,OAAO,IAAI,GAAG,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;CACF"}
@@ -1,34 +0,0 @@
1
- /**
2
- * CLI 草稿存储 — Draft 类型与草稿仓储。
3
- *
4
- * 草稿是 CLI 的产品特性(交互式对话暂存),Draft 无 id 字段,单独实现。
5
- * 文件名基于 conversationId:
6
- * - 有 conversationId → ${conversationId}.json
7
- * - 无 conversationId → _current.json
8
- */
9
- import type { AgentNS } from "@ai-zen/agents-core";
10
- export interface Draft {
11
- conversationId?: string;
12
- agentId: string;
13
- modelId: string;
14
- messages: AgentNS.Message[];
15
- cwd?: string;
16
- updatedAt: string;
17
- }
18
- /**
19
- * 草稿仓储。
20
- * 文件名基于 conversationId:
21
- * - 有 conversationId → ${conversationId}.json
22
- * - 无 conversationId → _current.json
23
- */
24
- export declare class DraftRepository {
25
- private dir;
26
- constructor(dir: string);
27
- private path;
28
- read(conversationId?: string): Promise<Draft | null>;
29
- write(draft: Draft): Promise<void>;
30
- delete(conversationId?: string): Promise<void>;
31
- }
32
- /** CLI 草稿存储单例 */
33
- export declare const draftRepository: DraftRepository;
34
- //# sourceMappingURL=draft-repository.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"draft-repository.d.ts","sourceRoot":"","sources":["../src/draft-repository.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGnD,MAAM,WAAW,KAAK;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAID;;;;;GAKG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,MAAM;IAE/B,OAAO,CAAC,IAAI;IAIN,IAAI,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAcpD,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAalC,MAAM,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CASrD;AAED,iBAAiB;AACjB,eAAO,MAAM,eAAe,iBAAkC,CAAC"}
@@ -1,64 +0,0 @@
1
- /**
2
- * CLI 草稿存储 — Draft 类型与草稿仓储。
3
- *
4
- * 草稿是 CLI 的产品特性(交互式对话暂存),Draft 无 id 字段,单独实现。
5
- * 文件名基于 conversationId:
6
- * - 有 conversationId → ${conversationId}.json
7
- * - 无 conversationId → _current.json
8
- */
9
- import { promises as fs } from "node:fs";
10
- import { join } from "node:path";
11
- import { DRAFTS_DIR } from "./config.js";
12
- const CURRENT_DRAFT = "_current.json";
13
- /**
14
- * 草稿仓储。
15
- * 文件名基于 conversationId:
16
- * - 有 conversationId → ${conversationId}.json
17
- * - 无 conversationId → _current.json
18
- */
19
- export class DraftRepository {
20
- dir;
21
- constructor(dir) {
22
- this.dir = dir;
23
- }
24
- path(conversationId) {
25
- return join(this.dir, conversationId ? `${conversationId}.json` : CURRENT_DRAFT);
26
- }
27
- async read(conversationId) {
28
- const p = this.path(conversationId);
29
- try {
30
- await fs.access(p);
31
- }
32
- catch {
33
- return null;
34
- }
35
- try {
36
- return JSON.parse(await fs.readFile(p, "utf-8"));
37
- }
38
- catch {
39
- return null;
40
- }
41
- }
42
- async write(draft) {
43
- try {
44
- await fs.access(this.dir);
45
- }
46
- catch {
47
- await fs.mkdir(this.dir, { recursive: true });
48
- }
49
- await fs.writeFile(this.path(draft.conversationId), JSON.stringify(draft, null, 2), "utf-8");
50
- }
51
- async delete(conversationId) {
52
- const p = this.path(conversationId);
53
- try {
54
- await fs.access(p);
55
- await fs.unlink(p);
56
- }
57
- catch {
58
- // 文件不存在,忽略
59
- }
60
- }
61
- }
62
- /** CLI 草稿存储单例 */
63
- export const draftRepository = new DraftRepository(DRAFTS_DIR);
64
- //# sourceMappingURL=draft-repository.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"draft-repository.js","sourceRoot":"","sources":["../src/draft-repository.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAWzC,MAAM,aAAa,GAAG,eAAe,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,OAAO,eAAe;IACN;IAApB,YAAoB,GAAW;QAAX,QAAG,GAAH,GAAG,CAAQ;IAAG,CAAC;IAE3B,IAAI,CAAC,cAAuB;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IACnF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,cAAuB;QAChC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAU,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAY;QACtB,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAC/B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAC9B,OAAO,CACR,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,cAAuB;QAClC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACnB,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,WAAW;QACb,CAAC;IACH,CAAC;CACF;AAED,iBAAiB;AACjB,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC"}