@ai-zen/cli 0.9.0 → 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 +42 -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
@@ -0,0 +1,511 @@
1
+ /**
2
+ * 配置编辑 —— 纯函数层
3
+ *
4
+ * TUI 的「凭据设置屏」与「配置中心」只做渲染与键盘分发,所有对 `AppConfig` 的
5
+ * 读取与不可变改写集中在本模块,以便脱离 Ink 单测。
6
+ *
7
+ * 设计原则:
8
+ * - 每个改写函数都返回**新对象**,调用方负责持久化(`saveConfig()`);
9
+ * - 不抛异常、不写盘、不读盘,纯输入 → 输出。
10
+ */
11
+ import { Message } from "@ai-zen/agents-core";
12
+ // ==================== 查询 ====================
13
+ /** 按 id 查找模型 */
14
+ export function findModel(config, modelId) {
15
+ if (!modelId)
16
+ return undefined;
17
+ return config.models.find((model) => model.id === modelId);
18
+ }
19
+ /** 按 id 查找端点 */
20
+ export function findEndpoint(config, endpointId) {
21
+ if (!endpointId)
22
+ return undefined;
23
+ return config.endpoints.find((endpoint) => endpoint.id === endpointId);
24
+ }
25
+ /** 引用某端点的模型清单(用于提示改动波及范围) */
26
+ export function modelsUsingEndpoint(config, endpointId) {
27
+ return config.models.filter((model) => model.endpointId === endpointId);
28
+ }
29
+ /** API Key 是否已设置(空白视为未设置) */
30
+ export function isApiKeySet(apiKey) {
31
+ return Boolean(apiKey && apiKey.trim());
32
+ }
33
+ /**
34
+ * 解析某模型对应的端点凭据。
35
+ *
36
+ * 模型缺失或端点缺失时返回 `undefined`(此时无法给出「输入 Key」的引导,
37
+ * 属于配置本身残缺,交由调用方报错)。
38
+ */
39
+ export function resolveCredential(config, modelId) {
40
+ const model = findModel(config, modelId);
41
+ if (!model)
42
+ return undefined;
43
+ const endpoint = findEndpoint(config, model.endpointId);
44
+ if (!endpoint)
45
+ return undefined;
46
+ return {
47
+ modelId: model.id,
48
+ modelName: model.name || model.id,
49
+ endpointId: endpoint.id,
50
+ endpointName: endpoint.name || endpoint.id,
51
+ baseUrl: endpoint.baseUrl,
52
+ apiKey: endpoint.apiKey ?? "",
53
+ configured: isApiKeySet(endpoint.apiKey),
54
+ };
55
+ }
56
+ /** 端点清单的一行摘要,如 `OpenAI ✗ · DeepSeek ✓` */
57
+ export function summarizeEndpoints(config) {
58
+ if (config.endpoints.length === 0)
59
+ return "无端点";
60
+ return config.endpoints
61
+ .map((endpoint) => `${endpoint.name || endpoint.id} ${isApiKeySet(endpoint.apiKey) ? "✓" : "✗"}`)
62
+ .join(" · ");
63
+ }
64
+ /**
65
+ * 密钥掩码:保留首 4 / 末 4 位,中间省略。未设置时返回 `未设置`。
66
+ * 已知密钥(如 `sk-` 开头)同样按此规则裁剪,避免整串回显到屏幕。
67
+ */
68
+ export function maskApiKey(apiKey) {
69
+ const key = (apiKey ?? "").trim();
70
+ if (!key)
71
+ return "未设置";
72
+ if (key.length <= 8)
73
+ return "*".repeat(key.length);
74
+ return `${key.slice(0, 4)}…${key.slice(-4)}`;
75
+ }
76
+ const VENDOR_GUIDES = [
77
+ { match: "bigmodel.cn", vendor: "智谱 AI(BigModelCN)", url: "https://open.bigmodel.cn/usercenter/apikeys" },
78
+ { match: "deepseek.com", vendor: "DeepSeek", url: "https://platform.deepseek.com/api_keys" },
79
+ { match: "openai.com", vendor: "OpenAI", url: "https://platform.openai.com/api-keys" },
80
+ { match: "moonshot", vendor: "Moonshot(Kimi)", url: "https://platform.moonshot.cn/console/api-keys" },
81
+ { match: "dashscope", vendor: "阿里云百炼(DashScope)", url: "https://bailian.console.aliyun.com/" },
82
+ ];
83
+ export function apiKeyGuide(baseUrl) {
84
+ const url = (baseUrl ?? "").toLowerCase();
85
+ for (const guide of VENDOR_GUIDES) {
86
+ if (url.includes(guide.match))
87
+ return { vendor: guide.vendor, url: guide.url };
88
+ }
89
+ return { vendor: "OpenAI 兼容端点" };
90
+ }
91
+ // ==================== 不可变改写 ====================
92
+ /** 写入某端点的 API Key(去除首尾空白) */
93
+ export function setEndpointApiKey(config, endpointId, apiKey) {
94
+ return {
95
+ ...config,
96
+ endpoints: config.endpoints.map((endpoint) => endpoint.id === endpointId ? { ...endpoint, apiKey: apiKey.trim() } : endpoint),
97
+ };
98
+ }
99
+ /** 写入某端点的 Base URL(去除首尾空白) */
100
+ export function setEndpointBaseUrl(config, endpointId, baseUrl) {
101
+ return {
102
+ ...config,
103
+ endpoints: config.endpoints.map((endpoint) => endpoint.id === endpointId ? { ...endpoint, baseUrl: baseUrl.trim() } : endpoint),
104
+ };
105
+ }
106
+ /** 设置默认模型(传 `undefined` 表示清空,交由 SDK 回退出厂默认) */
107
+ export function setDefaultModel(config, modelId) {
108
+ return { ...config, defaultModel: modelId };
109
+ }
110
+ /** 由名称派生唯一 id:小写、非字母数字折叠为 `-`,冲突时追加序号 */
111
+ function deriveUniqueId(taken, name, fallback) {
112
+ const base = name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 32) || fallback;
113
+ if (!taken.has(base))
114
+ return base;
115
+ for (let i = 2;; i += 1) {
116
+ const candidate = `${base}-${i}`;
117
+ if (!taken.has(candidate))
118
+ return candidate;
119
+ }
120
+ }
121
+ /** 由端点名派生唯一的端点 id */
122
+ export function uniqueEndpointId(config, name) {
123
+ return deriveUniqueId(new Set(config.endpoints.map((endpoint) => endpoint.id)), name, "endpoint");
124
+ }
125
+ /** 由模型名派生唯一的模型 id */
126
+ export function uniqueModelId(config, name) {
127
+ return deriveUniqueId(new Set(config.models.map((model) => model.id)), name, "model");
128
+ }
129
+ /** 由图片模型名派生唯一的图片模型 id */
130
+ export function uniqueImageModelId(config, name) {
131
+ return deriveUniqueId(new Set((config.imageModels ?? []).map((model) => model.id)), name, "image");
132
+ }
133
+ /** 新增端点(id 由名称派生) */
134
+ export function addEndpoint(config, input) {
135
+ const id = uniqueEndpointId(config, input.name);
136
+ const endpoint = {
137
+ id,
138
+ name: input.name.trim() || id,
139
+ baseUrl: input.baseUrl.trim(),
140
+ apiKey: input.apiKey.trim(),
141
+ };
142
+ return { config: { ...config, endpoints: [...config.endpoints, endpoint] }, endpoint };
143
+ }
144
+ // ==================== 通用改写(配置中心)====================
145
+ /** 通用端点字段改写(不可变) */
146
+ export function updateEndpoint(config, endpointId, patch) {
147
+ return {
148
+ ...config,
149
+ endpoints: config.endpoints.map((endpoint) => endpoint.id === endpointId ? { ...endpoint, ...patch } : endpoint),
150
+ };
151
+ }
152
+ /** 删除端点(调用方负责确认它不再被任何模型引用) */
153
+ export function removeEndpoint(config, endpointId) {
154
+ return { ...config, endpoints: config.endpoints.filter((endpoint) => endpoint.id !== endpointId) };
155
+ }
156
+ /** 通用模型字段改写(不可变) */
157
+ export function updateModel(config, modelId, patch) {
158
+ return {
159
+ ...config,
160
+ models: config.models.map((model) => (model.id === modelId ? { ...model, ...patch } : model)),
161
+ };
162
+ }
163
+ /**
164
+ * 删除模型;若 `defaultModel` / `defaultMigrationModel` 指向它,
165
+ * 则改指剩余的第一个模型(无剩余模型则清空)。
166
+ */
167
+ export function removeModel(config, modelId) {
168
+ const models = config.models.filter((model) => model.id !== modelId);
169
+ const ids = new Set(models.map((model) => model.id));
170
+ const fallback = models[0]?.id;
171
+ return {
172
+ ...config,
173
+ models,
174
+ defaultModel: config.defaultModel && ids.has(config.defaultModel) ? config.defaultModel : fallback,
175
+ defaultMigrationModel: config.defaultMigrationModel && ids.has(config.defaultMigrationModel)
176
+ ? config.defaultMigrationModel
177
+ : fallback,
178
+ };
179
+ }
180
+ /** 新增模型(id 由名称派生;默认 `custom: true`,避免被 SDK 出厂清单托管覆盖) */
181
+ export function addModel(config, input) {
182
+ const id = uniqueModelId(config, input.name);
183
+ const model = {
184
+ id,
185
+ name: input.name.trim() || id,
186
+ endpointId: input.endpointId,
187
+ modelName: input.modelName?.trim() || id,
188
+ maxContextTokens: 128_000,
189
+ custom: true,
190
+ };
191
+ return { config: { ...config, models: [...config.models, model] }, model };
192
+ }
193
+ /** 通用图片模型字段改写(不可变) */
194
+ export function updateImageModel(config, modelId, patch) {
195
+ return {
196
+ ...config,
197
+ imageModels: (config.imageModels ?? []).map((model) => model.id === modelId ? { ...model, ...patch } : model),
198
+ };
199
+ }
200
+ /** 删除图片模型;若 `defaultImageModel` 指向它,则改指剩余的第一个(无剩余则清空) */
201
+ export function removeImageModel(config, modelId) {
202
+ const imageModels = (config.imageModels ?? []).filter((model) => model.id !== modelId);
203
+ const ids = new Set(imageModels.map((model) => model.id));
204
+ return {
205
+ ...config,
206
+ imageModels,
207
+ defaultImageModel: config.defaultImageModel && ids.has(config.defaultImageModel)
208
+ ? config.defaultImageModel
209
+ : imageModels[0]?.id,
210
+ };
211
+ }
212
+ /** 新增图片模型(id 由名称派生;默认 `custom: true`) */
213
+ export function addImageModel(config, input) {
214
+ const id = uniqueImageModelId(config, input.name);
215
+ const model = {
216
+ id,
217
+ name: input.name.trim() || id,
218
+ endpointId: input.endpointId,
219
+ modelName: id,
220
+ custom: true,
221
+ };
222
+ return { config: { ...config, imageModels: [...(config.imageModels ?? []), model] }, model };
223
+ }
224
+ /** 设置默认图片模型(传 `undefined` 表示清空) */
225
+ export function setDefaultImageModel(config, modelId) {
226
+ return { ...config, defaultImageModel: modelId };
227
+ }
228
+ /** 设置默认 Agent(传 `undefined` 表示清空,交给 SDK 选第一个 Agent) */
229
+ export function setDefaultAgent(config, agentId) {
230
+ return { ...config, defaultAgent: agentId };
231
+ }
232
+ /** 设置默认迁移模型(传 `undefined` 表示清空,交由 SDK 回退出厂默认) */
233
+ export function setDefaultMigrationModel(config, modelId) {
234
+ return { ...config, defaultMigrationModel: modelId };
235
+ }
236
+ /** 设置工具输出上限(字符数) */
237
+ export function setMaxToolOutput(config, value) {
238
+ return { ...config, maxToolOutput: value };
239
+ }
240
+ // ==================== MCP 配置改写 ====================
241
+ /**
242
+ * 解析参数串为 argv:支持单 / 双引号包裹,以及反斜杠转义空白。
243
+ * 例如 `-y chrome-devtools-mcp@latest` → `["-y", "chrome-devtools-mcp@latest"]`。
244
+ */
245
+ export function parseArgs(raw) {
246
+ const out = [];
247
+ let cur = "";
248
+ let started = false;
249
+ let quote = null;
250
+ for (let i = 0; i < raw.length; i += 1) {
251
+ const ch = raw[i];
252
+ if (quote) {
253
+ if (ch === quote)
254
+ quote = null;
255
+ else if (ch === "\\" && quote === '"' && i + 1 < raw.length) {
256
+ cur += raw[i + 1];
257
+ i += 1;
258
+ }
259
+ else
260
+ cur += ch;
261
+ started = true;
262
+ continue;
263
+ }
264
+ if (ch === '"' || ch === "'") {
265
+ quote = ch;
266
+ started = true;
267
+ continue;
268
+ }
269
+ if (ch === "\\" && i + 1 < raw.length && /\s/.test(raw[i + 1])) {
270
+ cur += raw[i + 1];
271
+ i += 1;
272
+ started = true;
273
+ continue;
274
+ }
275
+ if (/\s/.test(ch)) {
276
+ if (started) {
277
+ out.push(cur);
278
+ cur = "";
279
+ started = false;
280
+ }
281
+ continue;
282
+ }
283
+ cur += ch;
284
+ started = true;
285
+ }
286
+ if (started)
287
+ out.push(cur);
288
+ return out;
289
+ }
290
+ /** argv → 单行文本(含空白 / 引号 / 反斜杠的参数用双引号包裹并转义) */
291
+ export function formatArgs(args) {
292
+ if (!args || args.length === 0)
293
+ return "";
294
+ return args
295
+ .map((arg) => (arg === "" || /[\s"'\\]/.test(arg) ? `"${arg.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"` : arg))
296
+ .join(" ");
297
+ }
298
+ /** 解析 `KEY=VALUE`(以首个 `=` 分割;KEY 去空白,VALUE 原样保留);不含 `=` 或 KEY 为空返回 null */
299
+ export function parseKvInput(raw) {
300
+ const at = raw.indexOf("=");
301
+ if (at < 0)
302
+ return null;
303
+ const key = raw.slice(0, at).trim();
304
+ if (!key)
305
+ return null;
306
+ return { key, value: raw.slice(at + 1) };
307
+ }
308
+ /** 键值映射 → 有序数组(保持插入顺序) */
309
+ export function kvEntries(map) {
310
+ return Object.entries(map ?? {}).map(([key, value]) => ({ key, value }));
311
+ }
312
+ /** 键值映射的展示摘要,如 `2 项(PATH, HOME)` / `(空)` */
313
+ export function kvSummary(map) {
314
+ const keys = Object.keys(map ?? {});
315
+ if (keys.length === 0)
316
+ return "(空)";
317
+ return `${keys.length} 项(${keys.join(", ")})`;
318
+ }
319
+ /** 按 id 查找 MCP 服务器 */
320
+ export function findMcpServer(mcp, id) {
321
+ if (!id)
322
+ return undefined;
323
+ return mcp.mcpServers[id];
324
+ }
325
+ /** id 是否已被占用(`except` 用于重命名时排除自身) */
326
+ export function mcpServerIdTaken(mcp, id, except) {
327
+ return id !== except && Object.prototype.hasOwnProperty.call(mcp.mcpServers, id);
328
+ }
329
+ /** 由名称派生唯一的 MCP 服务器 id */
330
+ export function uniqueMcpServerId(mcp, name) {
331
+ return deriveUniqueId(new Set(Object.keys(mcp.mcpServers)), name, "server");
332
+ }
333
+ /** 新增 MCP 服务器(id 由名称派生;默认 stdio、启用) */
334
+ export function addMcpServer(mcp, name) {
335
+ const id = uniqueMcpServerId(mcp, name);
336
+ const entry = { type: "stdio", disabled: false };
337
+ return { mcp: { ...mcp, mcpServers: { ...mcp.mcpServers, [id]: entry } }, id };
338
+ }
339
+ /** 改写某 MCP 服务器的字段(不可变;未列出的字段原样保留) */
340
+ export function updateMcpServer(mcp, id, patch) {
341
+ const current = mcp.mcpServers[id];
342
+ if (!current)
343
+ return mcp;
344
+ return { ...mcp, mcpServers: { ...mcp.mcpServers, [id]: { ...current, ...patch } } };
345
+ }
346
+ /** 删除 MCP 服务器 */
347
+ export function removeMcpServer(mcp, id) {
348
+ if (!Object.prototype.hasOwnProperty.call(mcp.mcpServers, id))
349
+ return mcp;
350
+ const mcpServers = { ...mcp.mcpServers };
351
+ delete mcpServers[id];
352
+ return { ...mcp, mcpServers };
353
+ }
354
+ /** 重命名 MCP 服务器(改 key;保持原有顺序;假定新名已通过唯一性校验) */
355
+ export function renameMcpServer(mcp, oldId, newId) {
356
+ const mcpServers = {};
357
+ for (const [key, value] of Object.entries(mcp.mcpServers)) {
358
+ mcpServers[key === oldId ? newId : key] = value;
359
+ }
360
+ return { ...mcp, mcpServers };
361
+ }
362
+ // ==================== Agent / Sub-agent 定义改写 ====================
363
+ /** Agent 四维权限的维度顺序 */
364
+ export const PERMISSION_DIMENSIONS = ["tools", "skills", "mcps", "subagents"];
365
+ /** 由名称派生唯一的 Agent id(在既有 id 集合内避让) */
366
+ export function uniqueAgentId(taken, name, fallback = "agent") {
367
+ return deriveUniqueId(new Set(taken), name, fallback);
368
+ }
369
+ /** 提示词 = 首条 system 消息的文本内容(无则空串) */
370
+ export function getAgentPrompt(def) {
371
+ const sys = (def.messages ?? []).find((m) => m.role === "system" && typeof m.content === "string");
372
+ return typeof sys?.content === "string" ? sys.content : "";
373
+ }
374
+ /** 写入提示词:替换首条 system 消息;不存在则前插一条 */
375
+ export function setAgentPrompt(def, text) {
376
+ const messages = [...(def.messages ?? [])];
377
+ const index = messages.findIndex((m) => m.role === "system");
378
+ if (index >= 0)
379
+ messages[index] = { ...messages[index], content: text };
380
+ else
381
+ messages.unshift(Message.System(text));
382
+ return { ...def, messages };
383
+ }
384
+ /** 权限策略 → 紧凑文本(`allow: a, b` / `deny: *`);未设置 → 空串 */
385
+ export function formatPermission(policy) {
386
+ if (!policy)
387
+ return "";
388
+ if ("allow" in policy)
389
+ return `allow: ${policy.allow.join(", ")}`;
390
+ return `deny: ${policy.deny.join(", ")}`;
391
+ }
392
+ /**
393
+ * 紧凑文本 → 权限策略:
394
+ * - 空串 → `null`(未设置)
395
+ * - 非法 → 返回错误文本(string)
396
+ * - 合法 → 返回 `PermissionPolicy`
397
+ */
398
+ export function parsePermission(raw) {
399
+ const text = raw.trim();
400
+ if (!text)
401
+ return null;
402
+ const match = /^(allow|deny)\s*:\s*(.*)$/i.exec(text);
403
+ if (!match)
404
+ return "格式应为「allow: a, b」或「deny: x」";
405
+ const mode = match[1].toLowerCase();
406
+ const list = match[2]
407
+ .split(",")
408
+ .map((piece) => piece.trim())
409
+ .filter(Boolean);
410
+ if (list.length === 0)
411
+ return "至少需要一个模式(如 `*`)";
412
+ return mode === "allow" ? { allow: list } : { deny: list };
413
+ }
414
+ /** 读某维权限的紧凑文本 */
415
+ export function formatAgentPermission(permissions, dim) {
416
+ return formatPermission(permissions?.[dim]);
417
+ }
418
+ /** 权限总览:列出已配置的维度(如 `4 维(tools, skills, mcps, subagents)`) */
419
+ export function summarizePermissions(permissions) {
420
+ const set = PERMISSION_DIMENSIONS.filter((dim) => permissions?.[dim]);
421
+ if (set.length === 0)
422
+ return "(未设置)";
423
+ return `${set.length} 维(${set.join(", ")})`;
424
+ }
425
+ /** 写入某一维权限(`policy` 为 null 时删除该维) */
426
+ export function setAgentPermission(def, dim, policy) {
427
+ const permissions = { ...(def.permissions ?? {}) };
428
+ if (policy)
429
+ permissions[dim] = policy;
430
+ else
431
+ delete permissions[dim];
432
+ return { ...def, permissions };
433
+ }
434
+ /** 通用 Agent 字段改写(纯合并;`updatedAt` 由写盘侧统一刷新) */
435
+ export function updateAgentDefinition(def, patch) {
436
+ return { ...def, ...patch };
437
+ }
438
+ /** 函数参数 schema → 紧凑 JSON 文本 */
439
+ export function formatFunctionParameters(fn) {
440
+ return fn?.parameters ? JSON.stringify(fn.parameters) : "{}";
441
+ }
442
+ /** 解析函数参数 JSON;合法返回对象,非法返回错误文本 */
443
+ export function parseFunctionParameters(raw) {
444
+ const text = raw.trim();
445
+ if (!text)
446
+ return "参数 schema 不能为空(至少为 {})";
447
+ let parsed;
448
+ try {
449
+ parsed = JSON.parse(text);
450
+ }
451
+ catch (cause) {
452
+ return `JSON 解析失败:${cause?.message ?? cause}`;
453
+ }
454
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
455
+ return "参数需为 JSON 对象";
456
+ return parsed;
457
+ }
458
+ /** 改写 Sub-agent 的 `function`(缺省时补一个骨架) */
459
+ export function updateAgentFunction(def, patch) {
460
+ const fn = def.function ?? { name: `sub_agent_${def.id.replace(/-/g, "_")}`, description: "", parameters: {} };
461
+ return { ...def, function: { ...fn, ...patch } };
462
+ }
463
+ /** 新建顶层 Agent 定义 */
464
+ export function createAgentDefinition(input) {
465
+ const now = input.now ?? new Date().toISOString();
466
+ return {
467
+ id: input.id,
468
+ name: input.name,
469
+ description: "",
470
+ messages: [Message.System(input.prompt ?? "")],
471
+ permissions: {
472
+ tools: { allow: ["*"] },
473
+ skills: { allow: ["*"] },
474
+ mcps: { allow: ["*"] },
475
+ subagents: { allow: ["*"] },
476
+ },
477
+ custom: true,
478
+ createdAt: now,
479
+ updatedAt: now,
480
+ };
481
+ }
482
+ /** 新建 Sub-agent 定义(带 function 骨架,尾部保留 `{{task}}` 用户消息) */
483
+ export function createSubAgentDefinition(input) {
484
+ const now = input.now ?? new Date().toISOString();
485
+ return {
486
+ id: input.id,
487
+ name: input.name,
488
+ description: "",
489
+ messages: [Message.System(input.prompt ?? ""), Message.User("{{task}}")],
490
+ permissions: {
491
+ tools: { allow: ["*"] },
492
+ skills: { allow: ["*"] },
493
+ mcps: { allow: ["*"] },
494
+ subagents: { deny: ["*"] },
495
+ },
496
+ function: {
497
+ name: `sub_agent_${input.id.replace(/-/g, "_")}`,
498
+ description: input.name,
499
+ parameters: {
500
+ type: "object",
501
+ properties: { task: { type: "string", description: "完整的任务描述" } },
502
+ required: ["task"],
503
+ additionalProperties: false,
504
+ },
505
+ },
506
+ custom: true,
507
+ createdAt: now,
508
+ updatedAt: now,
509
+ };
510
+ }
511
+ //# sourceMappingURL=config-editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-editor.js","sourceRoot":"","sources":["../src/config-editor.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -15,7 +15,7 @@
15
15
  * ├── mcp-oauth/ ← MCP OAuth token(共享)
16
16
  * └── cli/ ← CLI 运行时数据
17
17
  * ├── conversations/ ← 对话记录
18
- * └── drafts/ ← 草稿
18
+ * └── last-session.json ← 「上一轮会话 id」指针
19
19
  *
20
20
  * ~/.agents/ ← 业界通用规范(如 Cursor、Windsurf、Cline)
21
21
  * ├── skills/ ← 用户级 Skill
@@ -43,7 +43,6 @@ export declare const AI_ZEN_DIR: string;
43
43
  export declare const CLI_DIR: string;
44
44
  export declare const CONFIG_FILE: string;
45
45
  export declare const CONVERSATIONS_DIR: string;
46
- export declare const DRAFTS_DIR: string;
47
46
  export declare const AGENTS_DIR: string;
48
47
  export declare const SUB_AGENTS_DIR: string;
49
48
  export declare const SKILLS_DIR: string;
@@ -63,35 +62,61 @@ export declare const SHARED_MCP_CONFIG_FILE: string;
63
62
  * 确保配置目录和默认文件存在。
64
63
  *
65
64
  * 共享实体(Agent、SubAgent、Skill 目录等)委托给 SDK 的 ConfigManager.bootstrap()。
66
- * CLI 自身的运行时目录(conversations/、drafts/)由本函数额外创建。
65
+ * CLI 自身的运行时目录(conversations/)由本函数额外创建。
67
66
  * SDK 的出厂默认配置会自动写入 config.json(如果不存在)。
68
67
  */
69
68
  export declare function ensureConfigDir(): Promise<void>;
70
69
  export declare function readConfig(): Promise<AppConfig>;
71
70
  export declare function saveConfig(config: AppConfig): Promise<void>;
71
+ /** MCP 配置的作用域:全局(~/.ai-zen/mcp.json) / 项目(<cwd>/.ai-zen/mcp.json) */
72
+ export type McpScope = "global" | "project";
73
+ /**
74
+ * 单个 MCP 服务器条目(业界标准字段,外加保留未知字段)。
75
+ * 与 SDK `discoverMcpServers` 的解析一致:`type` 缺省时按 command/url 推断,`disabled: true` 会被跳过。
76
+ */
77
+ export interface McpServerEntry {
78
+ /** 传输方式,业界标准字段名 `type`(与 SDK normalizeConfig 一致,缺省按 command/url 推断) */
79
+ type?: "stdio" | "http" | "sse";
80
+ /** 是否禁用(true 时 SDK 会跳过该服务器) */
81
+ disabled?: boolean;
82
+ /** 描述(供 load_mcp 呈现给 LLM,非连接必需) */
83
+ description?: string;
84
+ command?: string;
85
+ args?: string[];
86
+ env?: Record<string, string>;
87
+ url?: string;
88
+ headers?: Record<string, string>;
89
+ /** OAuth 配置(本 CLI 暂不单独编辑,读写时原样保留) */
90
+ oauth?: Record<string, unknown>;
91
+ /** 其它未知字段原样保留,避免写回时丢字段(如 oauth 展开字段、厂商扩展) */
92
+ [key: string]: unknown;
93
+ }
72
94
  export interface McpServersMap {
73
- [name: string]: {
74
- /** 传输方式,业界标准字段名 `type`(与 SDK normalizeConfig 一致) */
75
- type?: "stdio" | "http" | "sse";
76
- command?: string;
77
- args?: string[];
78
- env?: Record<string, string>;
79
- url?: string;
80
- headers?: Record<string, string>;
81
- };
95
+ [name: string]: McpServerEntry;
82
96
  }
83
97
  export interface McpConfig {
84
98
  /** 业界标准 mcpServers 顶层字段(与 SDK @ai-zen/agents-sdk 保持一致) */
85
99
  mcpServers: McpServersMap;
86
100
  }
101
+ /** 作用域对应的 mcp.json 路径 */
102
+ export declare function mcpConfigPath(scope: McpScope): string;
87
103
  /**
88
- * 读取全局 ~/.ai-zen/mcp.json,不存在时返回空结构。
104
+ * 读取指定路径的 mcp.json,不存在 / 解析失败时返回空结构。
89
105
  * 采用业界标准 `mcpServers` 顶层字段(与 SDK discoverMcpServers 一致)。
90
106
  */
91
- export declare function readMcpConfig(): Promise<McpConfig>;
107
+ export declare function readMcpConfigAt(path: string): Promise<McpConfig>;
108
+ /**
109
+ * 原子写入指定路径的 mcp.json(必要时创建父目录)。
110
+ */
111
+ export declare function writeMcpConfigAt(path: string, mcpConfig: McpConfig): Promise<void>;
112
+ /**
113
+ * 读取某个作用域的 mcp.json(默认全局 ~/.ai-zen/mcp.json)。
114
+ */
115
+ export declare function readMcpConfig(scope?: McpScope): Promise<McpConfig>;
92
116
  /**
93
- * 原子写入全局 ~/.ai-zen/mcp.json。
117
+ * 原子写入某个作用域的 mcp.json(默认全局 ~/.ai-zen/mcp.json)。
94
118
  */
95
- export declare function writeMcpConfig(mcpConfig: McpConfig): Promise<void>;
119
+ export declare function writeMcpConfig(mcpConfig: McpConfig, scope?: McpScope): Promise<void>;
120
+ /** 读取项目级 <cwd>/.ai-zen/mcp.json(等价于 readMcpConfig("project")) */
96
121
  export declare function readProjectMcpConfig(): Promise<McpConfig>;
97
122
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAIpD,eAAO,MAAM,UAAU,QAGtB,CAAC;AAIF,eAAO,MAAM,OAAO,QAA0B,CAAC;AAC/C,eAAO,MAAM,WAAW,QAAkC,CAAC;AAC3D,eAAO,MAAM,iBAAiB,QAAiC,CAAC;AAChE,eAAO,MAAM,UAAU,QAA0B,CAAC;AAIlD,eAAO,MAAM,UAAU,QAA6B,CAAC;AACrD,eAAO,MAAM,cAAc,QAAiC,CAAC;AAC7D,eAAO,MAAM,UAAU,QAA6B,CAAC;AACrD,eAAO,MAAM,SAAS,QAA4B,CAAC;AAInD,eAAO,MAAM,sBAAsB,QAA+C,CAAC;AACnF,eAAO,MAAM,kBAAkB,QAA2C,CAAC;AAC3E,eAAO,MAAM,iBAAiB,QAA0C,CAAC;AASzE,eAAO,MAAM,sBAAsB,QAAkC,CAAC;AACtE,eAAO,MAAM,2BAA2B,QAAoC,CAAC;AAI7E,eAAO,MAAM,kBAAkB,QAAiC,CAAC;AACjE,eAAO,MAAM,yBAAyB,QAAqC,CAAC;AAC5E,eAAO,MAAM,8BAA8B,QAAuC,CAAC;AAInF,eAAO,MAAM,eAAe,QAA+B,CAAC;AAC5D,eAAO,MAAM,uBAAuB,QAA6C,CAAC;AAClF,eAAO,MAAM,sBAAsB,QAAmC,CAAC;AAQvE;;;;;;GAMG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAcrD;AAID,wBAAsB,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC,CAGrD;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjE;AAID,MAAM,WAAW,aAAa;IAC5B,CAAC,IAAI,EAAE,MAAM,GAAG;QACd,oDAAoD;QACpD,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;QAChC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,CAAC;CACH;AAED,MAAM,WAAW,SAAS;IACxB,0DAA0D;IAC1D,UAAU,EAAE,aAAa,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,SAAS,CAAC,CAaxD;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAIxE;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,SAAS,CAAC,CAa/D"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAIpD,eAAO,MAAM,UAAU,QAGtB,CAAC;AAIF,eAAO,MAAM,OAAO,QAA0B,CAAC;AAC/C,eAAO,MAAM,WAAW,QAAkC,CAAC;AAC3D,eAAO,MAAM,iBAAiB,QAAiC,CAAC;AAIhE,eAAO,MAAM,UAAU,QAA6B,CAAC;AACrD,eAAO,MAAM,cAAc,QAAiC,CAAC;AAC7D,eAAO,MAAM,UAAU,QAA6B,CAAC;AACrD,eAAO,MAAM,SAAS,QAA4B,CAAC;AAInD,eAAO,MAAM,sBAAsB,QAA+C,CAAC;AACnF,eAAO,MAAM,kBAAkB,QAA2C,CAAC;AAC3E,eAAO,MAAM,iBAAiB,QAA0C,CAAC;AASzE,eAAO,MAAM,sBAAsB,QAAkC,CAAC;AACtE,eAAO,MAAM,2BAA2B,QAAoC,CAAC;AAI7E,eAAO,MAAM,kBAAkB,QAAiC,CAAC;AACjE,eAAO,MAAM,yBAAyB,QAAqC,CAAC;AAC5E,eAAO,MAAM,8BAA8B,QAAuC,CAAC;AAInF,eAAO,MAAM,eAAe,QAA+B,CAAC;AAC5D,eAAO,MAAM,uBAAuB,QAA6C,CAAC;AAClF,eAAO,MAAM,sBAAsB,QAAmC,CAAC;AAQvE;;;;;;GAMG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAcrD;AAID,wBAAsB,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC,CAGrD;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjE;AAID,qEAAqE;AACrE,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE5C;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,uEAAuE;IACvE,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;IAChC,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mCAAmC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,6CAA6C;IAC7C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC;CAChC;AAED,MAAM,WAAW,SAAS;IACxB,0DAA0D;IAC1D,UAAU,EAAE,aAAa,CAAC;CAC3B;AAED,yBAAyB;AACzB,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAErD;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAatE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAKxF;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,KAAK,GAAE,QAAmB,GAAG,OAAO,CAAC,SAAS,CAAC,CAElF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,GAAE,QAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpG;AAED,iEAAiE;AACjE,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,SAAS,CAAC,CAE/D"}