@ai-zen/cli 0.8.2 → 1.0.0-alpha.1

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 +64 -1
  2. package/README.md +95 -41
  3. package/README.zh.md +95 -41
  4. package/dist/agent-creator.d.ts +11 -5
  5. package/dist/agent-creator.d.ts.map +1 -1
  6. package/dist/agent-creator.js +32 -15
  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
@@ -0,0 +1,130 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // 由 src/tui/config-wizard.tsx 拆分而来 —— 单行输入屏 PromptScreen + promptLayout
3
+ import { useState } from "react";
4
+ import { Box, Text, useCursor, useInput } from "ink";
5
+ import { theme } from "../theme.js";
6
+ import { KeyHints } from "../components.js";
7
+ import { INPUT_PREFIX_WIDTH, bottomPadding, displayWidth, layoutInput, isTerminalReply } from "../text.js";
8
+ import { Header, WizardFrame, textRows } from "./frame.js";
9
+ /** 计算输入屏的顶部留白与硬件光标坐标(吸底布局 + IME 跟随) */
10
+ export function promptLayout(input) {
11
+ const contentLines = input.headerLines + input.inputLines + input.extraLines + input.hintLines;
12
+ const topPadding = bottomPadding(input.terminalRows, contentLines);
13
+ const before = Array.from(input.lineText).slice(0, input.cursorCol).join("");
14
+ return {
15
+ contentLines,
16
+ topPadding,
17
+ cursor: {
18
+ x: INPUT_PREFIX_WIDTH + displayWidth(before),
19
+ y: topPadding + input.headerLines + input.cursorRow,
20
+ },
21
+ };
22
+ }
23
+ /**
24
+ * 全屏单行输入:标题 + 输入行 + 键位提示(吸底布局)。
25
+ *
26
+ * 硬件光标 y 由 `promptLayout()` 按「顶部留白 + 标题行数 + 输入行内偏移」算出,
27
+ * 而整帧高度恒小于终端行数(不命中 Ink 全屏分支),因此 IME 候选框与自绘光标精确对齐。
28
+ */
29
+ export function PromptScreen(props) {
30
+ const { setCursorPosition } = useCursor();
31
+ const [value, setValue] = useState(props.initialValue ?? "");
32
+ const [cursor, setCursor] = useState(Array.from(props.initialValue ?? "").length);
33
+ const [revealed, setRevealed] = useState(!props.mask);
34
+ const chars = Array.from(value);
35
+ const caret = Math.max(0, Math.min(cursor, chars.length));
36
+ const display = revealed ? value : "•".repeat(chars.length);
37
+ const layout = layoutInput(display, caret, Math.max(4, props.columns - 4));
38
+ const header = [
39
+ ...textRows(`? ${props.title}`, props.columns, theme.warn, true),
40
+ ...(props.details ?? []).flatMap((detail) => textRows(detail, props.columns, theme.dim)),
41
+ ];
42
+ // 输入区之后的附加行:空值提示 / 校验错误 / 明文提示
43
+ const extraLines = (chars.length === 0 ? 1 : 0) + (props.error ? 1 : 0) + (props.mask && revealed ? 1 : 0);
44
+ const position = promptLayout({
45
+ terminalRows: props.rows,
46
+ headerLines: header.length,
47
+ inputLines: layout.lines.length,
48
+ extraLines,
49
+ hintLines: 1,
50
+ cursorRow: layout.cursorRow,
51
+ cursorCol: layout.cursorCol,
52
+ lineText: layout.lines[layout.cursorRow] ?? "",
53
+ });
54
+ setCursorPosition(position.cursor);
55
+ const update = (next, nextCursor) => {
56
+ setValue(next);
57
+ setCursor(nextCursor);
58
+ props.onChange?.(next);
59
+ };
60
+ const insert = (text) => {
61
+ update(chars.slice(0, caret).join("") + text + chars.slice(caret).join(""), caret + Array.from(text).length);
62
+ };
63
+ const deleteBefore = () => {
64
+ if (caret === 0)
65
+ return;
66
+ update(chars.slice(0, caret - 1).join("") + chars.slice(caret).join(""), caret - 1);
67
+ };
68
+ const deleteAfter = () => {
69
+ if (caret >= chars.length)
70
+ return;
71
+ update(chars.slice(0, caret).join("") + chars.slice(caret + 1).join(""), caret);
72
+ };
73
+ useInput((char, key) => {
74
+ // 终端应答序列(如 Kitty 查询应答 `[?0u`)不是用户输入,丢弃
75
+ if (isTerminalReply(char))
76
+ return;
77
+ if (key.escape) {
78
+ props.onCancel();
79
+ return;
80
+ }
81
+ if (key.return) {
82
+ props.onSubmit(value);
83
+ return;
84
+ }
85
+ if (key.tab && props.mask) {
86
+ setRevealed((v) => !v);
87
+ return;
88
+ }
89
+ if (char === "u" && key.ctrl) {
90
+ update("", 0);
91
+ return;
92
+ }
93
+ if (key.leftArrow) {
94
+ setCursor(Math.max(0, caret - 1));
95
+ return;
96
+ }
97
+ if (key.rightArrow) {
98
+ setCursor(Math.min(chars.length, caret + 1));
99
+ return;
100
+ }
101
+ if (key.home) {
102
+ setCursor(0);
103
+ return;
104
+ }
105
+ if (key.end) {
106
+ setCursor(chars.length);
107
+ return;
108
+ }
109
+ if (key.backspace) {
110
+ deleteBefore();
111
+ return;
112
+ }
113
+ if (key.delete) {
114
+ deleteAfter();
115
+ return;
116
+ }
117
+ if (char && !key.ctrl && !key.meta)
118
+ insert(char);
119
+ });
120
+ return (_jsxs(WizardFrame, { columns: props.columns, rows: props.rows, contentLines: position.contentLines, children: [_jsx(Header, { rows: header }), _jsx(Box, { flexDirection: "column", paddingX: 1, children: layout.lines.map((line, index) => {
121
+ const prompt = index === 0 ? (_jsx(Text, { color: theme.brand[0], bold: true, children: "❯ " })) : (_jsx(Text, { children: " " }));
122
+ if (index !== layout.cursorRow) {
123
+ return (_jsxs(Text, { wrap: "truncate", children: [prompt, _jsx(Text, { children: line })] }, index));
124
+ }
125
+ const rowChars = Array.from(line);
126
+ const at = rowChars[layout.cursorCol];
127
+ return (_jsxs(Text, { wrap: "truncate", children: [prompt, _jsx(Text, { children: rowChars.slice(0, layout.cursorCol).join("") }), _jsx(Text, { inverse: true, color: theme.brand[0], children: at ?? " " }), _jsx(Text, { children: rowChars.slice(layout.cursorCol + 1).join("") })] }, index));
128
+ }) }), chars.length === 0 ? (_jsx(Box, { paddingX: 1, children: _jsx(Text, { color: theme.faint, wrap: "truncate", children: props.mask ? "(粘贴或输入后按 Enter 保存,Tab 可切明文核对)" : "(输入后按 Enter 确认)" }) })) : null, props.error ? (_jsx(Box, { paddingX: 1, children: _jsxs(Text, { color: theme.error, wrap: "truncate", children: ["\u2716 ", props.error] }) })) : null, props.mask && revealed ? (_jsx(Box, { paddingX: 1, children: _jsx(Text, { color: theme.warn, wrap: "truncate", children: "\u26A0 \u5F53\u524D\u4E3A\u660E\u6587\u663E\u793A\uFF08Tab \u5207\u56DE\u63A9\u7801\uFF09" }) })) : null, _jsx(KeyHints, { hints: props.hints })] }));
129
+ }
130
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../src/tui/config-wizard/prompt.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { ReactNode } from "react";
2
+ import { WizardContext } from "./engine.js";
3
+ export declare function renderAgentsStep(ctx: WizardContext): ReactNode;
4
+ //# sourceMappingURL=step-agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-agents.d.ts","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-agents.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKlC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAM5C,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,CA6L9D"}
@@ -0,0 +1,110 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { agentKindLabel, agentList, findAgentDefinition } from "../../agents-store.js";
3
+ import { createAgentDefinition, createSubAgentDefinition, getAgentPrompt, parseFunctionParameters, setAgentPrompt, uniqueAgentId, updateAgentFunction } from "../../config-editor.js";
4
+ import { NEW_AGENT, NEW_SUBAGENT } from "./types.js";
5
+ import { ListStep } from "./list.js";
6
+ import { DetailStep } from "./detail.js";
7
+ import { PromptEditorScreen } from "./prompt-editor.js";
8
+ import { PromptScreen } from "./prompt.js";
9
+ export function renderAgentsStep(ctx) {
10
+ const { store, error, notice, activeStep, go, saveAgent, deleteAgent, setError, agentFields, agentPermFields, cols, rows } = ctx;
11
+ // ---------- Agent 定义列表 ----------
12
+ if (activeStep.kind === "agents") {
13
+ const items = [
14
+ { label: "+ 新建 Agent", value: NEW_AGENT, hint: "顶层 Agent(可作为默认 Agent)" },
15
+ { label: "+ 新建 Sub-agent", value: NEW_SUBAGENT, hint: "可被委派的子 Agent" },
16
+ ...store.agents.map((def) => ({
17
+ label: def.name || def.id,
18
+ value: `agent:${def.id}`,
19
+ hint: `Agent · ${def.id}${def.custom ? "" : " · 出厂托管"}`,
20
+ })),
21
+ ...store.subAgents.map((def) => ({
22
+ label: def.name || def.id,
23
+ value: `subagent:${def.id}`,
24
+ hint: `Sub-agent · ${def.id}`,
25
+ })),
26
+ ];
27
+ return (_jsx(ListStep, { columns: cols, rows: rows, title: "\u25C6 Agent \u5B9A\u4E49", subtitle: `Agent ${store.agents.length} · Sub-agent ${store.subAgents.length}`, items: items, onPick: (value) => {
28
+ if (value === NEW_AGENT)
29
+ go({ kind: "agent-new", agentKind: "agent" });
30
+ else if (value === NEW_SUBAGENT)
31
+ go({ kind: "agent-new", agentKind: "subagent" });
32
+ else {
33
+ const [kind, id] = value.split(":");
34
+ go({ kind: "agent", agentKind: kind, agentId: id });
35
+ }
36
+ }, onCancel: () => go({ kind: "menu" }) }));
37
+ }
38
+ // ---------- Agent 详情 ----------
39
+ if (activeStep.kind === "agent") {
40
+ const { agentKind, agentId } = activeStep;
41
+ const def = findAgentDefinition(store, agentKind, agentId);
42
+ return (_jsx(DetailStep, { columns: cols, rows: rows, title: `◆ ${agentKindLabel(agentKind)} · ${def.name || def.id}`, details: [
43
+ `${def.id} · ${def.custom ? "自定义" : "出厂托管"}${agentKind === "subagent" ? " · Sub-agent" : ""}`,
44
+ "↑ ↓ 移动 · Enter 编辑/切换/进入 · 改动即时写入磁盘",
45
+ ], fields: agentFields(agentKind, def), notice: notice, action: {
46
+ label: `删除${agentKindLabel(agentKind)}`,
47
+ run: async () => {
48
+ const failure = await deleteAgent(agentKind, def.id);
49
+ if (!failure)
50
+ go({ kind: "agents" });
51
+ return failure;
52
+ },
53
+ }, onBack: () => go({ kind: "agents" }) }));
54
+ }
55
+ // ---------- Agent 权限子屏 ----------
56
+ if (activeStep.kind === "agent-perms") {
57
+ const { agentKind, agentId } = activeStep;
58
+ const def = findAgentDefinition(store, agentKind, agentId);
59
+ return (_jsx(DetailStep, { columns: cols, rows: rows, title: `◆ ${agentKindLabel(agentKind)} · ${def.id} · 权限`, details: ["格式:`allow: a, b` 或 `deny: x`(逗号分隔;留空清除该维)", "↑ ↓ 移动 · Enter 编辑 · Esc 返回"], fields: agentPermFields(agentKind, def), notice: notice, onBack: () => go({ kind: "agent", agentKind, agentId }) }));
60
+ }
61
+ // ---------- Agent / Sub-agent 多行文本编辑(提示词 / 函数说明 / 参数 schema,系统编辑器)----------
62
+ if (activeStep.kind === "agent-text") {
63
+ const { agentKind, agentId, field } = activeStep;
64
+ const def = findAgentDefinition(store, agentKind, agentId);
65
+ const managed = agentKind === "agent" && !def.custom;
66
+ const target = managed ? { ...def, custom: true } : def;
67
+ const name = `${agentKindLabel(agentKind)} ${def.id}`;
68
+ const back = () => go({ kind: "agent", agentKind, agentId });
69
+ if (field === "fnParams") {
70
+ return (_jsx(PromptEditorScreen, { columns: cols, rows: rows, title: `◆ ${agentKindLabel(agentKind)} · ${def.id} · 参数 schema`, subtitle: "JSON \u5BF9\u8C61\uFF1BEnter \u6253\u5F00\u7CFB\u7EDF\u7F16\u8F91\u5668\uFF0C\u4FDD\u5B58\u540E\u7ACB\u5373\u6821\u9A8C\u5E76\u5199\u76D8", text: JSON.stringify(def.function?.parameters ?? {}, null, 2), ext: "json", notice: notice, onSave: (value) => {
71
+ const parsed = parseFunctionParameters(value);
72
+ if (typeof parsed === "string")
73
+ return Promise.resolve(parsed);
74
+ return saveAgent(agentKind, updateAgentFunction(target, { parameters: parsed }), `${name} 的参数 schema 已更新`);
75
+ }, onBack: back }));
76
+ }
77
+ if (field === "fnDesc") {
78
+ return (_jsx(PromptEditorScreen, { columns: cols, rows: rows, title: `◆ ${agentKindLabel(agentKind)} · ${def.id} · 函数说明`, subtitle: "Enter \u6253\u5F00\u7CFB\u7EDF\u7F16\u8F91\u5668\uFF08$EDITOR / notepad\uFF09\uFF1B\u6539\u5B8C\u4FDD\u5B58\u5373\u5199\u76D8", text: def.function?.description ?? "", notice: notice, onSave: (value) => saveAgent(agentKind, updateAgentFunction(target, { description: value }), `${name} 的函数说明已更新`), onBack: back }));
79
+ }
80
+ // field === "prompt"
81
+ return (_jsx(PromptEditorScreen, { columns: cols, rows: rows, title: `◆ ${agentKindLabel(agentKind)} · ${def.id} · 提示词`, subtitle: "Enter \u6253\u5F00\u7CFB\u7EDF\u7F16\u8F91\u5668\uFF08$EDITOR / notepad\uFF09\uFF1B\u6539\u5B8C\u4FDD\u5B58\u5373\u5199\u76D8", text: getAgentPrompt(def), notice: notice, onSave: (value) => saveAgent(agentKind, setAgentPrompt(target, value), `${name} 的提示词已更新`), onBack: back }));
82
+ }
83
+ // ---------- 新建 Agent / Sub-agent ----------
84
+ if (activeStep.kind === "agent-new") {
85
+ const kind = activeStep.agentKind;
86
+ const kindName = agentKindLabel(kind);
87
+ return (_jsx(PromptScreen, { columns: cols, rows: rows, title: `新建 ${kindName} · 名称`, details: [
88
+ "用于在列表与状态栏中标识该定义,例如 Coder",
89
+ kind === "agent" ? "创建后可在「默认项 → 默认 Agent」中选为默认" : "创建后自动生成 function 骨架(可编辑)",
90
+ ], error: error, hints: [["Enter", "创建并编辑"], ["Esc", "返回"]], onSubmit: (value) => {
91
+ const name = value.trim();
92
+ if (!name) {
93
+ setError("名称不能为空");
94
+ return;
95
+ }
96
+ const id = uniqueAgentId(agentList(store, kind).map((item) => item.id), name, kind === "agent" ? "agent" : "subagent");
97
+ const def = kind === "agent" ? createAgentDefinition({ id, name }) : createSubAgentDefinition({ id, name });
98
+ void (async () => {
99
+ const failure = await saveAgent(kind, def, `已新建 ${kindName} ${name}(${id})`);
100
+ if (failure) {
101
+ setError(failure);
102
+ return;
103
+ }
104
+ go({ kind: "agent", agentKind: kind, agentId: id });
105
+ })();
106
+ }, onCancel: () => go({ kind: "agents" }) }, `new:${kind}`));
107
+ }
108
+ return null;
109
+ }
110
+ //# sourceMappingURL=step-agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-agents.js","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-agents.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAa,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAClG,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,cAAc,EAAE,uBAAuB,EAAE,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACtL,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,UAAU,gBAAgB,CAAC,GAAkB;IACjD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC;IACjI,mCAAmC;IACnC,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,KAAK,GAAyB;YAClC,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,uBAAuB,EAAE;YACxE,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE;YACtE,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC5B,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE;gBACzB,KAAK,EAAE,SAAS,GAAG,CAAC,EAAE,EAAE;gBACxB,IAAI,EAAE,WAAW,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE;aACxD,CAAC,CAAC;YACH,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC/B,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE;gBACzB,KAAK,EAAE,YAAY,GAAG,CAAC,EAAE,EAAE;gBAC3B,IAAI,EAAE,eAAe,GAAG,CAAC,EAAE,EAAE;aAC9B,CAAC,CAAC;SACJ,CAAC;QACF,OAAO,CACL,KAAC,QAAQ,IACP,OAAO,EAAE,IAAI,EACb,IAAI,EAAE,IAAI,EACV,KAAK,EAAC,2BAAY,EAClB,QAAQ,EAAE,SAAS,KAAK,CAAC,MAAM,CAAC,MAAM,gBAAgB,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,EAC9E,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBAChB,IAAI,KAAK,KAAK,SAAS;oBAAE,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;qBAClE,IAAI,KAAK,KAAK,YAAY;oBAAE,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;qBAC7E,CAAC;oBACJ,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACpC,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,IAAiB,EAAE,OAAO,EAAE,EAAG,EAAE,CAAC,CAAC;gBACpE,CAAC;YACH,CAAC,EACD,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,GACpC,CACH,CAAC;IACJ,CAAC;IAGD,iCAAiC;IACjC,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAChC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;QAC1C,MAAM,GAAG,GAAG,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAE,CAAC;QAC5D,OAAO,CACL,KAAC,UAAU,IACT,OAAO,EAAE,IAAI,EACb,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,cAAc,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,EAAE,EAC/D,OAAO,EAAE;gBACP,GAAG,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC7F,oCAAoC;aACrC,EACD,MAAM,EAAE,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,EACnC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE;gBACN,KAAK,EAAE,KAAK,cAAc,CAAC,SAAS,CAAC,EAAE;gBACvC,GAAG,EAAE,KAAK,IAAI,EAAE;oBACd,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;oBACrD,IAAI,CAAC,OAAO;wBAAE,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;oBACrC,OAAO,OAAO,CAAC;gBACjB,CAAC;aACF,EACD,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,GACpC,CACH,CAAC;IACJ,CAAC;IAGD,mCAAmC;IACnC,IAAI,UAAU,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACtC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;QAC1C,MAAM,GAAG,GAAG,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAE,CAAC;QAC5D,OAAO,CACL,KAAC,UAAU,IACT,OAAO,EAAE,IAAI,EACb,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,cAAc,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,OAAO,EACxD,OAAO,EAAE,CAAC,2CAA2C,EAAE,4BAA4B,CAAC,EACpF,MAAM,EAAE,eAAe,CAAC,SAAS,EAAE,GAAG,CAAC,EACvC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,GACvD,CACH,CAAC;IACJ,CAAC;IAGD,8EAA8E;IAC9E,IAAI,UAAU,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACrC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC;QACjD,MAAM,GAAG,GAAG,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAE,CAAC;QAC5D,MAAM,OAAO,GAAG,SAAS,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;QACrD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QACxD,MAAM,IAAI,GAAG,GAAG,cAAc,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;QACtD,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QAE7D,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;YACzB,OAAO,CACL,KAAC,kBAAkB,IACjB,OAAO,EAAE,IAAI,EACb,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,cAAc,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,cAAc,EAC/D,QAAQ,EAAC,2IAAkC,EAC3C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAC7D,GAAG,EAAC,MAAM,EACV,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;oBAChB,MAAM,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;oBAC9C,IAAI,OAAO,MAAM,KAAK,QAAQ;wBAAE,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBAC/D,OAAO,SAAS,CAAC,SAAS,EAAE,mBAAmB,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,IAAI,iBAAiB,CAAC,CAAC;gBAC7G,CAAC,EACD,MAAM,EAAE,IAAI,GACZ,CACH,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvB,OAAO,CACL,KAAC,kBAAkB,IACjB,OAAO,EAAE,IAAI,EACb,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,cAAc,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,SAAS,EAC1D,QAAQ,EAAC,+HAA0C,EACnD,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,WAAW,IAAI,EAAE,EACrC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,mBAAmB,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,WAAW,CAAC,EAChH,MAAM,EAAE,IAAI,GACZ,CACH,CAAC;QACJ,CAAC;QAED,qBAAqB;QACrB,OAAO,CACL,KAAC,kBAAkB,IACjB,OAAO,EAAE,IAAI,EACb,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,cAAc,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,QAAQ,EACzD,QAAQ,EAAC,+HAA0C,EACnD,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC,EACzB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,UAAU,CAAC,EACzF,MAAM,EAAE,IAAI,GACZ,CACH,CAAC;IACJ,CAAC;IAGD,6CAA6C;IAC7C,IAAI,UAAU,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC;QAClC,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,CACL,KAAC,YAAY,IAEX,OAAO,EAAE,IAAI,EACb,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,MAAM,QAAQ,OAAO,EAC5B,OAAO,EAAE;gBACP,0BAA0B;gBAC1B,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,0BAA0B;aAC7E,EACD,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAC1C,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;gBAClB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACnB,OAAO;gBACT,CAAC;gBACD,MAAM,EAAE,GAAG,aAAa,CACtB,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAC7C,IAAI,EACJ,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CACxC,CAAC;gBACF,MAAM,GAAG,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC5G,KAAK,CAAC,KAAK,IAAI,EAAE;oBACf,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,QAAQ,IAAI,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC;oBAC7E,IAAI,OAAO,EAAE,CAAC;wBACZ,QAAQ,CAAC,OAAO,CAAC,CAAC;wBAClB,OAAO;oBACT,CAAC;oBACD,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;gBACtD,CAAC,CAAC,EAAE,CAAC;YACP,CAAC,EACD,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,IA/BjC,OAAO,IAAI,EAAE,CAgClB,CACH,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { ReactNode } from "react";
2
+ import { WizardContext } from "./engine.js";
3
+ export declare function renderDefaultsStep(ctx: WizardContext): ReactNode;
4
+ //# sourceMappingURL=step-defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-defaults.d.ts","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-defaults.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,CA0FhE"}
@@ -0,0 +1,76 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { findEndpoint, findModel, isApiKeySet, setDefaultAgent, setDefaultImageModel, setDefaultMigrationModel, setDefaultModel } from "../../config-editor.js";
3
+ import { ListStep } from "./list.js";
4
+ export function renderDefaultsStep(ctx) {
5
+ const { config, store, activeStep, go, commit, cols, rows, props } = ctx;
6
+ // ---------- 默认项子菜单 ----------
7
+ if (activeStep.kind === "defaults") {
8
+ const defaultImage = (config.imageModels ?? []).find((model) => model.id === config.defaultImageModel);
9
+ const items = [
10
+ {
11
+ label: "默认模型",
12
+ value: "defaultModel",
13
+ hint: findModel(config, config.defaultModel)?.name ?? config.defaultModel ?? "未设置",
14
+ },
15
+ {
16
+ label: "默认图片模型",
17
+ value: "defaultImageModel",
18
+ hint: defaultImage?.name ?? config.defaultImageModel ?? "未设置",
19
+ },
20
+ { label: "默认 Agent", value: "defaultAgent", hint: config.defaultAgent ?? "未设置" },
21
+ {
22
+ label: "默认迁移模型",
23
+ value: "defaultMigrationModel",
24
+ hint: findModel(config, config.defaultMigrationModel)?.name ?? config.defaultMigrationModel ?? "未设置",
25
+ },
26
+ ];
27
+ return (_jsx(ListStep, { columns: cols, rows: rows, title: "\u9ED8\u8BA4\u9879", subtitle: "\u65B0\u4F1A\u8BDD / \u4EFB\u52A1\u8FC1\u79FB\u4F7F\u7528\u7684\u9ED8\u8BA4\u503C", items: items, onPick: (target) => go({ kind: "pick-default", target }), onCancel: () => go({ kind: "menu" }) }));
28
+ }
29
+ // ---------- 选择某个默认项的值 ----------
30
+ if (activeStep.kind === "pick-default") {
31
+ const target = activeStep.target;
32
+ let title = "默认项";
33
+ let items = [];
34
+ if (target === "defaultModel" || target === "defaultMigrationModel") {
35
+ title = target === "defaultModel" ? "默认模型" : "默认迁移模型";
36
+ items = config.models.map((model) => {
37
+ const endpoint = findEndpoint(config, model.endpointId);
38
+ return {
39
+ label: model.name || model.id,
40
+ value: model.id,
41
+ hint: `${endpoint?.name ?? model.endpointId} · ${isApiKeySet(endpoint?.apiKey) ? "密钥就绪" : "缺 API Key"}`,
42
+ };
43
+ });
44
+ }
45
+ else if (target === "defaultImageModel") {
46
+ title = "默认图片模型";
47
+ items = (config.imageModels ?? []).map((model) => ({
48
+ label: model.name || model.id,
49
+ value: model.id,
50
+ hint: findEndpoint(config, model.endpointId)?.name ?? model.endpointId,
51
+ }));
52
+ }
53
+ else {
54
+ title = "默认 Agent";
55
+ const source = props.agentStore
56
+ ? store.agents.map((agent) => ({ id: agent.id, name: agent.name || agent.id }))
57
+ : (props.agents ?? []);
58
+ items = source.map((agent) => ({ label: agent.name, value: agent.id, hint: agent.id }));
59
+ }
60
+ items = [...items, { label: "(未设置)", value: "" }];
61
+ return (_jsx(ListStep, { columns: cols, rows: rows, title: title, subtitle: "\u9009\u4E2D\u540E\u5373\u65F6\u5199\u76D8", items: items, onPick: (value) => {
62
+ const id = value || undefined;
63
+ const label = value || "未设置";
64
+ if (target === "defaultModel")
65
+ void commit(setDefaultModel(config, id), `默认模型 → ${label}`, [], { kind: "defaults" });
66
+ else if (target === "defaultMigrationModel")
67
+ void commit(setDefaultMigrationModel(config, id), `默认迁移模型 → ${label}`, [], { kind: "defaults" });
68
+ else if (target === "defaultImageModel")
69
+ void commit(setDefaultImageModel(config, id), `默认图片模型 → ${label}`, [], { kind: "defaults" });
70
+ else
71
+ void commit(setDefaultAgent(config, id), `默认 Agent → ${label}`, [], { kind: "defaults" });
72
+ }, onCancel: () => go({ kind: "defaults" }) }));
73
+ }
74
+ return null;
75
+ }
76
+ //# sourceMappingURL=step-defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-defaults.js","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-defaults.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { ReactNode } from "react";
2
+ import { WizardContext } from "./engine.js";
3
+ export declare function renderEndpointsStep(ctx: WizardContext): ReactNode;
4
+ //# sourceMappingURL=step-endpoints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-endpoints.d.ts","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-endpoints.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,CA6DjE"}
@@ -0,0 +1,43 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { findEndpoint, maskApiKey, modelsUsingEndpoint, removeEndpoint } from "../../config-editor.js";
3
+ import { NEW_ENDPOINT } from "./types.js";
4
+ import { ListStep } from "./list.js";
5
+ import { DetailStep } from "./detail.js";
6
+ export function renderEndpointsStep(ctx) {
7
+ const { config, notice, draft, activeStep, go, persist, endpointFields, cols, rows } = ctx;
8
+ // ---------- 端点管理([新建端点] + 端点列表)----------
9
+ if (activeStep.kind === "endpoints") {
10
+ const items = [
11
+ { label: "+ 新建端点", value: NEW_ENDPOINT, hint: "自定义 OpenAI 兼容服务" },
12
+ ...config.endpoints.map((endpoint) => ({
13
+ label: endpoint.name || endpoint.id,
14
+ value: endpoint.id,
15
+ hint: `${maskApiKey(endpoint.apiKey)} · ${endpoint.baseUrl}`,
16
+ })),
17
+ ];
18
+ return (_jsx(ListStep, { columns: cols, rows: rows, title: "\u7AEF\u70B9\u7BA1\u7406", subtitle: `共 ${config.endpoints.length} 个端点 · 选中后可就地编辑 / 删除`, items: items, onPick: (value) => value === NEW_ENDPOINT
19
+ ? go({ kind: "new-endpoint", field: "name", draft })
20
+ : go({ kind: "endpoint", endpointId: value }), onCancel: () => go({ kind: "menu" }) }));
21
+ }
22
+ // ---------- 端点详情(就地编辑名称 / Base URL / API Key / 描述)----------
23
+ if (activeStep.kind === "endpoint") {
24
+ const endpoint = findEndpoint(config, activeStep.endpointId);
25
+ const name = endpoint.name || endpoint.id;
26
+ const modelCount = modelsUsingEndpoint(config, endpoint.id).length;
27
+ return (_jsx(DetailStep, { columns: cols, rows: rows, title: `◆ 端点 · ${name}`, details: [`${endpoint.id}${modelCount > 0 ? ` · ${modelCount} 个模型引用` : ""}`, "↑ ↓ 移动 · Enter 编辑 · 改动即时写入磁盘"], fields: endpointFields(endpoint), notice: notice, action: {
28
+ label: "删除端点",
29
+ run: async () => {
30
+ const refs = modelsUsingEndpoint(config, endpoint.id);
31
+ if (refs.length > 0) {
32
+ return `无法删除:仍被 ${refs.length} 个模型引用(${refs.map((m) => m.name || m.id).join("、")}),请先删除或改绑这些模型`;
33
+ }
34
+ const failure = await persist(removeEndpoint(config, endpoint.id), `已删除端点 ${name}`);
35
+ if (!failure)
36
+ go({ kind: "endpoints" });
37
+ return failure;
38
+ },
39
+ }, onBack: () => go({ kind: "endpoints" }) }));
40
+ }
41
+ return null;
42
+ }
43
+ //# sourceMappingURL=step-endpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-endpoints.js","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-endpoints.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { ReactNode } from "react";
2
+ import { WizardContext } from "./engine.js";
3
+ export declare function renderMcpStep(ctx: WizardContext): ReactNode;
4
+ //# sourceMappingURL=step-mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-mcp.d.ts","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-mcp.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKlC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAO5C,wBAAgB,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,CA8I3D"}
@@ -0,0 +1,97 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { mcpConfigPath } from "../../config.js";
3
+ import { addMcpServer, findMcpServer, mcpServerIdTaken, removeMcpServer, updateMcpServer } from "../../config-editor.js";
4
+ import { SWITCH_SCOPE, NEW_MCP_SERVER } from "./types.js";
5
+ import { ListStep } from "./list.js";
6
+ import { DetailStep } from "./detail.js";
7
+ import { KvEditorScreen } from "./kv-editor.js";
8
+ import { PromptScreen } from "./prompt.js";
9
+ import { scopeLabel, mcpCount, mcpServerHint } from "./mcp-helpers.js";
10
+ export function renderMcpStep(ctx) {
11
+ const { mcp, error, notice, activeStep, go, persistMcp, setError, mcpServerFields, cols, rows } = ctx;
12
+ // ---------- MCP 服务器列表(含作用域切换)----------
13
+ if (activeStep.kind === "mcp") {
14
+ const scope = activeStep.scope;
15
+ const other = scope === "global" ? "project" : "global";
16
+ const items = [
17
+ {
18
+ label: `⇄ 切换到「${scopeLabel(other)}」作用域`,
19
+ value: SWITCH_SCOPE,
20
+ hint: `${mcpCount(mcp, other)} 个服务器`,
21
+ },
22
+ { label: "+ 新建服务器", value: NEW_MCP_SERVER, hint: "stdio / http / sse" },
23
+ ...Object.entries(mcp[scope].mcpServers).map(([id, entry]) => ({
24
+ label: id,
25
+ value: id,
26
+ hint: mcpServerHint(entry),
27
+ })),
28
+ ];
29
+ return (_jsx(ListStep, { columns: cols, rows: rows, title: `◆ MCP 服务器 · ${scopeLabel(scope)}`, subtitle: `${mcpCount(mcp, scope)} 个 · ${mcpConfigPath(scope)}`, items: items, onPick: (value) => {
30
+ if (value === SWITCH_SCOPE)
31
+ go({ kind: "mcp", scope: other });
32
+ else if (value === NEW_MCP_SERVER)
33
+ go({ kind: "mcp-new", scope });
34
+ else
35
+ go({ kind: "mcp-server", scope, serverId: value });
36
+ }, onCancel: () => go({ kind: "menu" }) }));
37
+ }
38
+ // ---------- MCP 服务器详情 ----------
39
+ if (activeStep.kind === "mcp-server") {
40
+ const { scope, serverId } = activeStep;
41
+ const entry = findMcpServer(mcp[scope], serverId);
42
+ return (_jsx(DetailStep, { columns: cols, rows: rows, title: `◆ MCP · ${serverId}`, details: [
43
+ `${scopeLabel(scope)} · ${mcpConfigPath(scope)}`,
44
+ `传输 ${entry.type ?? "stdio"} · ↑ ↓ 移动 · Enter 编辑/切换`,
45
+ ], fields: mcpServerFields(scope, serverId, entry), notice: notice, action: {
46
+ label: "删除服务器",
47
+ run: async () => {
48
+ const failure = await persistMcp(scope, removeMcpServer(mcp[scope], serverId), `已删除 MCP 服务器 ${serverId}(${scopeLabel(scope)})`);
49
+ if (!failure)
50
+ go({ kind: "mcp", scope });
51
+ return failure;
52
+ },
53
+ }, onBack: () => go({ kind: "mcp", scope }) }));
54
+ }
55
+ // ---------- MCP 键值编辑(env / headers)----------
56
+ if (activeStep.kind === "mcp-kv") {
57
+ const { scope, serverId, field } = activeStep;
58
+ const entry = findMcpServer(mcp[scope], serverId);
59
+ const label = field === "env" ? "环境变量" : "请求头";
60
+ const current = entry[field] ?? {};
61
+ return (_jsx(KvEditorScreen, { columns: cols, rows: rows, title: `◆ MCP · ${serverId} · ${label}`, subtitle: `${scopeLabel(scope)} · ${Object.keys(current).length} 项`, map: current, notice: notice, onCommit: (next) => {
62
+ const patch = field === "env"
63
+ ? { env: Object.keys(next).length ? next : undefined }
64
+ : { headers: Object.keys(next).length ? next : undefined };
65
+ return persistMcp(scope, updateMcpServer(mcp[scope], serverId, patch), `MCP ${serverId} 的${label}已更新(${scopeLabel(scope)})`);
66
+ }, onBack: () => go({ kind: "mcp-server", scope, serverId }) }));
67
+ }
68
+ // ---------- 新建 MCP 服务器 ----------
69
+ if (activeStep.kind === "mcp-new") {
70
+ const scope = activeStep.scope;
71
+ return (_jsx(PromptScreen, { columns: cols, rows: rows, title: `新建 MCP 服务器 · 名称(${scopeLabel(scope)})`, details: [
72
+ "作为 mcpServers 的键,例如 github / chrome-devtools",
73
+ "创建后默认 stdio,可编辑传输方式 / 命令 / 参数 / 环境变量等",
74
+ ], error: error, hints: [["Enter", "创建并编辑"], ["Esc", "返回"]], onSubmit: (value) => {
75
+ const name = value.trim();
76
+ if (!name) {
77
+ setError("名称不能为空");
78
+ return;
79
+ }
80
+ if (mcpServerIdTaken(mcp[scope], name)) {
81
+ setError(`已存在名为 ${name} 的服务器`);
82
+ return;
83
+ }
84
+ const { mcp: next, id } = addMcpServer(mcp[scope], name);
85
+ void (async () => {
86
+ const failure = await persistMcp(scope, next, `已新建 MCP 服务器 ${id}(${scopeLabel(scope)})`);
87
+ if (failure) {
88
+ setError(failure);
89
+ return;
90
+ }
91
+ go({ kind: "mcp-server", scope, serverId: id });
92
+ })();
93
+ }, onCancel: () => go({ kind: "mcp", scope }) }, `new:mcp:${scope}`));
94
+ }
95
+ return null;
96
+ }
97
+ //# sourceMappingURL=step-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-mcp.js","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-mcp.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { ReactNode } from "react";
2
+ import { WizardContext } from "./engine.js";
3
+ export declare function renderMenuStep(ctx: WizardContext): ReactNode;
4
+ //# sourceMappingURL=step-menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-menu.d.ts","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-menu.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,wBAAgB,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,CA6B5D"}
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { MenuStep } from "./menu.js";
3
+ export function renderMenuStep(ctx) {
4
+ const { config, mcp, store, notice, activeStep, acc, snapshot, go, cols, rows, props } = ctx;
5
+ // ---------- 配置中心菜单 ----------
6
+ if (activeStep.kind === "menu") {
7
+ return (_jsx(MenuStep, { columns: cols, rows: rows, config: config, mcp: mcp, agentStore: store, savedCount: acc.current.summary.length, notice: notice, onClose: () => props.onClose(snapshot()), onPick: (action) => {
8
+ if (action === "endpoints")
9
+ go({ kind: "endpoints" });
10
+ else if (action === "models")
11
+ go({ kind: "models" });
12
+ else if (action === "imageModels")
13
+ go({ kind: "image-models" });
14
+ else if (action === "mcp")
15
+ go({ kind: "mcp", scope: "global" });
16
+ else if (action === "agents")
17
+ go({ kind: "agents" });
18
+ else if (action === "defaults")
19
+ go({ kind: "defaults" });
20
+ else if (action === "maxToolOutput")
21
+ go({ kind: "max-tool-output" });
22
+ else
23
+ props.onClose(snapshot());
24
+ } }));
25
+ }
26
+ return null;
27
+ }
28
+ //# sourceMappingURL=step-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-menu.js","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-menu.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,UAAU,cAAc,CAAC,GAAkB;IAC/C,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;IAC7F,+BAA+B;IAC/B,IAAI,UAAU,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC/B,OAAO,CACL,KAAC,QAAQ,IACP,OAAO,EAAE,IAAI,EACb,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,KAAK,EACjB,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EACtC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,EACxC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;gBACjB,IAAI,MAAM,KAAK,WAAW;oBAAE,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;qBACjD,IAAI,MAAM,KAAK,QAAQ;oBAAE,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;qBAChD,IAAI,MAAM,KAAK,aAAa;oBAAE,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;qBAC3D,IAAI,MAAM,KAAK,KAAK;oBAAE,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;qBAC3D,IAAI,MAAM,KAAK,QAAQ;oBAAE,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;qBAChD,IAAI,MAAM,KAAK,UAAU;oBAAE,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;qBACpD,IAAI,MAAM,KAAK,eAAe;oBAAE,EAAE,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;;oBAChE,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;YACjC,CAAC,GACD,CACH,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { ReactNode } from "react";
2
+ import { WizardContext } from "./engine.js";
3
+ export declare function renderModelsStep(ctx: WizardContext): ReactNode;
4
+ //# sourceMappingURL=step-models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-models.d.ts","sourceRoot":"","sources":["../../../src/tui/config-wizard/step-models.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAK5C,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,CAqL9D"}