@ai-zen/cli 0.1.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/README.md +319 -0
  2. package/README.zh.md +319 -0
  3. package/dist/agent-creator.d.ts +17 -0
  4. package/dist/agent-creator.d.ts.map +1 -0
  5. package/dist/agent-creator.js +112 -0
  6. package/dist/agent-creator.js.map +1 -0
  7. package/dist/config-wizard.d.ts +6 -0
  8. package/dist/config-wizard.d.ts.map +1 -0
  9. package/dist/config-wizard.js +46 -0
  10. package/dist/config-wizard.js.map +1 -0
  11. package/dist/config.d.ts +68 -0
  12. package/dist/config.d.ts.map +1 -0
  13. package/dist/config.js +111 -0
  14. package/dist/config.js.map +1 -0
  15. package/dist/conversation-commands/back.d.ts +3 -0
  16. package/dist/conversation-commands/back.d.ts.map +1 -0
  17. package/dist/conversation-commands/back.js +144 -0
  18. package/dist/conversation-commands/back.js.map +1 -0
  19. package/dist/conversation-commands/clear.d.ts +3 -0
  20. package/dist/conversation-commands/clear.d.ts.map +1 -0
  21. package/dist/conversation-commands/clear.js +8 -0
  22. package/dist/conversation-commands/clear.js.map +1 -0
  23. package/dist/conversation-commands/editor.d.ts +3 -0
  24. package/dist/conversation-commands/editor.d.ts.map +1 -0
  25. package/dist/conversation-commands/editor.js +15 -0
  26. package/dist/conversation-commands/editor.js.map +1 -0
  27. package/dist/conversation-commands/exit.d.ts +3 -0
  28. package/dist/conversation-commands/exit.d.ts.map +1 -0
  29. package/dist/conversation-commands/exit.js +39 -0
  30. package/dist/conversation-commands/exit.js.map +1 -0
  31. package/dist/conversation-commands/help.d.ts +3 -0
  32. package/dist/conversation-commands/help.d.ts.map +1 -0
  33. package/dist/conversation-commands/help.js +12 -0
  34. package/dist/conversation-commands/help.js.map +1 -0
  35. package/dist/conversation-commands/index.d.ts +15 -0
  36. package/dist/conversation-commands/index.d.ts.map +1 -0
  37. package/dist/conversation-commands/index.js +63 -0
  38. package/dist/conversation-commands/index.js.map +1 -0
  39. package/dist/conversation-commands/new.d.ts +3 -0
  40. package/dist/conversation-commands/new.d.ts.map +1 -0
  41. package/dist/conversation-commands/new.js +47 -0
  42. package/dist/conversation-commands/new.js.map +1 -0
  43. package/dist/conversation-commands/save.d.ts +3 -0
  44. package/dist/conversation-commands/save.d.ts.map +1 -0
  45. package/dist/conversation-commands/save.js +34 -0
  46. package/dist/conversation-commands/save.js.map +1 -0
  47. package/dist/conversation-runner.d.ts +17 -0
  48. package/dist/conversation-runner.d.ts.map +1 -0
  49. package/dist/conversation-runner.js +212 -0
  50. package/dist/conversation-runner.js.map +1 -0
  51. package/dist/delta-renderer.d.ts +33 -0
  52. package/dist/delta-renderer.d.ts.map +1 -0
  53. package/dist/delta-renderer.js +117 -0
  54. package/dist/delta-renderer.js.map +1 -0
  55. package/dist/format-time.d.ts +38 -0
  56. package/dist/format-time.d.ts.map +1 -0
  57. package/dist/format-time.js +66 -0
  58. package/dist/format-time.js.map +1 -0
  59. package/dist/hook.d.ts +3 -0
  60. package/dist/hook.d.ts.map +1 -0
  61. package/dist/hook.js +83 -0
  62. package/dist/hook.js.map +1 -0
  63. package/dist/index.d.ts +3 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +47 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/menus/agents.d.ts +5 -0
  68. package/dist/menus/agents.d.ts.map +1 -0
  69. package/dist/menus/agents.js +219 -0
  70. package/dist/menus/agents.js.map +1 -0
  71. package/dist/menus/common.d.ts +41 -0
  72. package/dist/menus/common.d.ts.map +1 -0
  73. package/dist/menus/common.js +104 -0
  74. package/dist/menus/common.js.map +1 -0
  75. package/dist/menus/config-display.d.ts +2 -0
  76. package/dist/menus/config-display.d.ts.map +1 -0
  77. package/dist/menus/config-display.js +69 -0
  78. package/dist/menus/config-display.js.map +1 -0
  79. package/dist/menus/config.d.ts +8 -0
  80. package/dist/menus/config.d.ts.map +1 -0
  81. package/dist/menus/config.js +407 -0
  82. package/dist/menus/config.js.map +1 -0
  83. package/dist/menus/conversations.d.ts +20 -0
  84. package/dist/menus/conversations.d.ts.map +1 -0
  85. package/dist/menus/conversations.js +74 -0
  86. package/dist/menus/conversations.js.map +1 -0
  87. package/dist/menus/index.d.ts +5 -0
  88. package/dist/menus/index.d.ts.map +1 -0
  89. package/dist/menus/index.js +63 -0
  90. package/dist/menus/index.js.map +1 -0
  91. package/dist/menus/start-conversation.d.ts +16 -0
  92. package/dist/menus/start-conversation.d.ts.map +1 -0
  93. package/dist/menus/start-conversation.js +176 -0
  94. package/dist/menus/start-conversation.js.map +1 -0
  95. package/dist/types.d.ts +20 -0
  96. package/dist/types.d.ts.map +1 -0
  97. package/dist/types.js +8 -0
  98. package/dist/types.js.map +1 -0
  99. package/package.json +53 -0
@@ -0,0 +1,104 @@
1
+ import chalk from "chalk";
2
+ import inquirer from "inquirer";
3
+ // ==================== 工具函数 ====================
4
+ /**
5
+ * 对 API Key 做脱敏显示
6
+ */
7
+ export function maskApiKey(apiKey) {
8
+ if (!apiKey)
9
+ return chalk.red("未设置");
10
+ if (apiKey.length <= 12)
11
+ return apiKey.substring(0, 4) + "..." + apiKey.substring(apiKey.length - 4);
12
+ return apiKey.substring(0, 8) + "..." + apiKey.substring(apiKey.length - 4);
13
+ }
14
+ /**
15
+ * 从列表中选一项(含空判断),支持取消/返回
16
+ * @returns 选中项的值,或 null(取消/返回时)
17
+ */
18
+ export async function selectFromList(items, options) {
19
+ if (items.length === 0) {
20
+ console.log(chalk.yellow(`\n${options.emptyMessage || "⚠️ 没有可用项"}\n`));
21
+ return null;
22
+ }
23
+ const choices = items.map((item) => ({
24
+ name: options.getName(item),
25
+ value: options.getValue(item),
26
+ }));
27
+ // 默认添加"返回"选项
28
+ const shouldAddBack = options.withBack !== false;
29
+ if (shouldAddBack) {
30
+ choices.push({
31
+ name: options.backLabel || "🔙 返回",
32
+ value: "__back__",
33
+ });
34
+ }
35
+ const { selected } = await inquirer.prompt([
36
+ {
37
+ type: "list",
38
+ name: "selected",
39
+ message: options.message,
40
+ choices,
41
+ },
42
+ ]);
43
+ if (selected === "__back__")
44
+ return null;
45
+ return selected;
46
+ }
47
+ /**
48
+ * 从列表中选择一项,之后选择对其执行的操作
49
+ * 返回 { item, action } 或 null(无数据或取消时)
50
+ */
51
+ export async function selectItemAndAction(items, options) {
52
+ if (items.length === 0) {
53
+ console.log(chalk.yellow(`\n${options.emptyMessage}\n`));
54
+ return null;
55
+ }
56
+ // 第一步:选一个条目(带"返回"选项)
57
+ const itemValue = await selectFromList(items, {
58
+ message: options.selectMessage || "请选择:",
59
+ getName: options.getName,
60
+ getValue: options.getValue,
61
+ emptyMessage: options.emptyMessage,
62
+ });
63
+ if (!itemValue)
64
+ return null; // 用户选择返回
65
+ const item = items.find((i) => options.getValue(i) === itemValue);
66
+ // 显示详情
67
+ const details = options.getDetails(item);
68
+ if (details.length > 0) {
69
+ for (const line of details) {
70
+ console.log(line);
71
+ }
72
+ }
73
+ // 第二步:选择操作
74
+ const { action } = await inquirer.prompt([
75
+ {
76
+ type: "list",
77
+ name: "action",
78
+ message: `对 "${options.getName(item)}" 执行操作:`,
79
+ choices: [
80
+ ...options.actions,
81
+ { name: "🔙 返回", value: "__back__" },
82
+ ...(options.actions.length > 0 ? [{ name: "🔚 退出管理", value: "__exit__" }] : []),
83
+ ],
84
+ },
85
+ ]);
86
+ if (action === "__back__")
87
+ return null;
88
+ if (action === "__exit__")
89
+ return { item, action: "__exit__" };
90
+ return { item, action };
91
+ }
92
+ /**
93
+ * 确认操作
94
+ */
95
+ export async function confirmAction(message, defaultVal = false) {
96
+ const { confirm } = await inquirer.prompt([
97
+ { type: "confirm", name: "confirm", message, default: defaultVal },
98
+ ]);
99
+ return confirm;
100
+ }
101
+ // ==================== 分隔线 ====================
102
+ export const SEPARATOR = chalk.gray("─".repeat(60));
103
+ export const SEPARATOR_LONG = chalk.gray("─".repeat(80));
104
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/menus/common.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function showConfig(): void;
2
+ //# sourceMappingURL=config-display.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-display.d.ts","sourceRoot":"","sources":["../../src/menus/config-display.ts"],"names":[],"mappings":"AAKA,wBAAgB,UAAU,IAAI,IAAI,CA+DjC"}
@@ -0,0 +1,69 @@
1
+ import chalk from "chalk";
2
+ import { readConfig, CONFIG_FILE, readMcpConfig, MCP_CONFIG_FILE } from "../config.js";
3
+ import { maskApiKey, SEPARATOR } from "./common.js";
4
+ export function showConfig() {
5
+ const config = readConfig();
6
+ console.log(chalk.blue.bold("\n📋 当前配置总览\n"));
7
+ console.log(chalk.blue.bold("🌐 端点:"));
8
+ if (config.endpoints.length === 0) {
9
+ console.log(chalk.yellow(" (无)"));
10
+ }
11
+ else {
12
+ for (const ep of config.endpoints) {
13
+ console.log(chalk.white(` ${ep.name} (${ep.id})`));
14
+ console.log(chalk.gray(` API Key: ${maskApiKey(ep.apiKey)}`));
15
+ console.log(chalk.gray(` Base URL: ${ep.baseUrl}`));
16
+ }
17
+ }
18
+ console.log(SEPARATOR);
19
+ console.log(chalk.blue.bold("⭐ 默认模型:"));
20
+ if (config.defaultModel) {
21
+ const model = config.models.find((m) => m.id === config.defaultModel);
22
+ console.log(chalk.white(` ${model?.name || config.defaultModel}`));
23
+ }
24
+ else {
25
+ console.log(chalk.yellow(" (未设置)"));
26
+ }
27
+ console.log(SEPARATOR);
28
+ console.log(chalk.blue.bold("🎨 默认图片模型:"));
29
+ if (config.defaultImageModel) {
30
+ const model = (config.imageModels || []).find((m) => m.id === config.defaultImageModel);
31
+ console.log(chalk.white(` ${model?.name || config.defaultImageModel}`));
32
+ }
33
+ else {
34
+ console.log(chalk.yellow(" (未设置)"));
35
+ }
36
+ console.log(SEPARATOR);
37
+ console.log(chalk.blue.bold("🤖 默认 Agent:"));
38
+ if (config.defaultAgent) {
39
+ console.log(chalk.white(` ${config.defaultAgent}`));
40
+ }
41
+ else {
42
+ console.log(chalk.yellow(" (未设置)"));
43
+ }
44
+ console.log(SEPARATOR);
45
+ console.log(chalk.blue.bold("🔌 MCP 服务器:"));
46
+ const mcp = readMcpConfig();
47
+ const names = Object.keys(mcp.servers);
48
+ if (names.length === 0) {
49
+ console.log(chalk.yellow(" (未配置)"));
50
+ }
51
+ else {
52
+ for (const name of names) {
53
+ const srv = mcp.servers[name];
54
+ console.log(chalk.white(` ${name}`));
55
+ console.log(chalk.gray(` 传输方式: ${srv.transport}`));
56
+ if (srv.transport === "stdio") {
57
+ console.log(chalk.gray(` 命令: ${srv.command}`));
58
+ }
59
+ else {
60
+ console.log(chalk.gray(` URL: ${srv.url}`));
61
+ }
62
+ }
63
+ }
64
+ console.log(SEPARATOR);
65
+ console.log(chalk.gray(`配置文件路径: ${CONFIG_FILE}`));
66
+ console.log(chalk.gray(`MCP 配置路径: ${MCP_CONFIG_FILE}`));
67
+ console.log();
68
+ }
69
+ //# sourceMappingURL=config-display.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-display.js","sourceRoot":"","sources":["../../src/menus/config-display.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * 配置管理菜单
3
+ *
4
+ * 所有配置读写委托给 SDK 的 readConfig / saveConfig。
5
+ * 菜单 UI 通过 config 对象的类型化字段直接操作,无需中间包装函数。
6
+ */
7
+ export declare function showInteractiveConfig(): Promise<void>;
8
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/menus/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgVH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAqC3D"}
@@ -0,0 +1,407 @@
1
+ /**
2
+ * 配置管理菜单
3
+ *
4
+ * 所有配置读写委托给 SDK 的 readConfig / saveConfig。
5
+ * 菜单 UI 通过 config 对象的类型化字段直接操作,无需中间包装函数。
6
+ */
7
+ import chalk from "chalk";
8
+ import inquirer from "inquirer";
9
+ import { readConfig, saveConfig, readMcpConfig, writeMcpConfig } from "../config.js";
10
+ import { showConfig } from "./config-display.js";
11
+ import { maskApiKey, selectFromList, SEPARATOR } from "./common.js";
12
+ // ==================== 端点相关 ====================
13
+ function showEndpoints() {
14
+ const config = readConfig();
15
+ console.log(chalk.blue.bold("\n🌐 端点列表:\n"));
16
+ for (const ep of config.endpoints) {
17
+ console.log(chalk.white(` ${ep.name} (${ep.id})`));
18
+ console.log(chalk.gray(` API Key: ${maskApiKey(ep.apiKey)}`));
19
+ console.log(chalk.gray(` Base URL: ${ep.baseUrl}`));
20
+ console.log(SEPARATOR);
21
+ }
22
+ }
23
+ async function editEndpoint() {
24
+ const config = readConfig();
25
+ const endpointId = await selectFromList(config.endpoints, {
26
+ message: "选择要编辑的端点:",
27
+ getName: (e) => `${e.name} (${e.id}) ${e.apiKey ? "✅" : "❌"}`,
28
+ getValue: (e) => e.id,
29
+ emptyMessage: "⚠️ 没有端点",
30
+ backLabel: "🔙 取消",
31
+ });
32
+ if (!endpointId)
33
+ return;
34
+ const endpoint = config.endpoints.find((e) => e.id === endpointId);
35
+ if (!endpoint)
36
+ return;
37
+ const { field } = await inquirer.prompt([
38
+ {
39
+ type: "list",
40
+ name: "field",
41
+ message: "选择要修改的字段:",
42
+ choices: [
43
+ { name: `名称 (当前: ${endpoint.name})`, value: "name" },
44
+ { name: `Base URL (当前: ${endpoint.baseUrl})`, value: "baseUrl" },
45
+ { name: `API Key (当前: ${endpoint.apiKey ? "已设置" : "未设置"})`, value: "apiKey" },
46
+ { name: `描述 (当前: ${endpoint.description || "无"})`, value: "description" },
47
+ { name: "🔙 取消", value: "back" },
48
+ ],
49
+ },
50
+ ]);
51
+ if (field === "back")
52
+ return;
53
+ const { value } = await inquirer.prompt([
54
+ {
55
+ type: field === "apiKey" ? "password" : "input",
56
+ name: "value",
57
+ message: `请输入新的${field === "name" ? "名称" : field === "baseUrl" ? "Base URL" : field === "apiKey" ? "API Key" : "描述"}:`,
58
+ default: String(endpoint[field] ?? ""),
59
+ mask: field === "apiKey" ? "*" : undefined,
60
+ },
61
+ ]);
62
+ endpoint[field] = value;
63
+ saveConfig(config);
64
+ console.log(chalk.green(`\n✅ 端点已更新\n`));
65
+ }
66
+ async function setApiKeyInteractive() {
67
+ const config = readConfig();
68
+ const endpointId = await selectFromList(config.endpoints, {
69
+ message: "选择要设置 API Key 的端点:",
70
+ getName: (e) => `${e.name} (${e.id}) ${e.apiKey ? "✅" : "❌"}`,
71
+ getValue: (e) => e.id,
72
+ emptyMessage: "⚠️ 没有端点",
73
+ backLabel: "🔙 取消",
74
+ });
75
+ if (!endpointId)
76
+ return;
77
+ const endpoint = config.endpoints.find((e) => e.id === endpointId);
78
+ if (!endpoint)
79
+ return;
80
+ const { apiKey } = await inquirer.prompt([
81
+ {
82
+ type: "password",
83
+ name: "apiKey",
84
+ message: `输入 ${endpoint.name} 的 API Key:`,
85
+ mask: "*",
86
+ validate: (input) => input.trim() !== "" || "API Key 不能为空",
87
+ },
88
+ ]);
89
+ endpoint.apiKey = apiKey;
90
+ saveConfig(config);
91
+ console.log(chalk.green(`\n✅ ${endpoint.name} API Key 已设置\n`));
92
+ }
93
+ // ==================== 模型相关 ====================
94
+ async function setDefaultModelInteractive() {
95
+ const config = readConfig();
96
+ const modelId = await selectFromList(config.models, {
97
+ message: "选择默认对话模型:",
98
+ getName: (m) => `${m.name} (${m.id})${config.defaultModel === m.id ? " ⭐ 当前" : ""}`,
99
+ getValue: (m) => m.id,
100
+ emptyMessage: "⚠️ 没有可用的对话模型",
101
+ backLabel: "🔙 取消",
102
+ });
103
+ if (!modelId)
104
+ return;
105
+ config.defaultModel = modelId;
106
+ saveConfig(config);
107
+ const model = config.models.find((m) => m.id === modelId);
108
+ console.log(chalk.green(`\n✅ 默认对话模型已设置为 "${model?.name}"\n`));
109
+ }
110
+ async function setDefaultImageModelInteractive() {
111
+ const config = readConfig();
112
+ const imageModels = config.imageModels || [];
113
+ const modelId = await selectFromList(imageModels, {
114
+ message: "选择默认图片生成模型:",
115
+ getName: (m) => `${m.name} (${m.id})${config.defaultImageModel === m.id ? " ⭐ 当前" : ""}`,
116
+ getValue: (m) => m.id,
117
+ emptyMessage: "⚠️ 没有可用的图片生成模型",
118
+ backLabel: "🔙 取消",
119
+ });
120
+ if (!modelId)
121
+ return;
122
+ config.defaultImageModel = modelId;
123
+ saveConfig(config);
124
+ const model = imageModels.find((m) => m.id === modelId);
125
+ console.log(chalk.green(`\n✅ 默认图片生成模型已设置为 "${model?.name}"\n`));
126
+ }
127
+ function showModels() {
128
+ const config = readConfig();
129
+ console.log(chalk.blue.bold("\n🔧 对话模型列表:\n"));
130
+ if (config.models.length === 0) {
131
+ console.log(chalk.yellow(" (无)\n"));
132
+ return;
133
+ }
134
+ for (const model of config.models) {
135
+ const ep = config.endpoints.find((e) => e.id === model.endpointId);
136
+ const isDefault = config.defaultModel === model.id;
137
+ console.log(chalk.white(` ${isDefault ? "⭐ " : " "}${model.name} (${model.id})`));
138
+ console.log(chalk.gray(` 端点: ${ep ? ep.name : "未知"}`));
139
+ console.log(chalk.gray(` 模型名: ${model.modelName || model.id}`));
140
+ if (model.description)
141
+ console.log(chalk.gray(` 描述: ${model.description}`));
142
+ console.log(SEPARATOR);
143
+ }
144
+ }
145
+ function showImageModels() {
146
+ const config = readConfig();
147
+ const imageModels = config.imageModels || [];
148
+ console.log(chalk.blue.bold("\n🎨 图片生成模型列表:\n"));
149
+ if (imageModels.length === 0) {
150
+ console.log(chalk.yellow(" (无)\n"));
151
+ return;
152
+ }
153
+ for (const model of imageModels) {
154
+ const ep = config.endpoints.find((e) => e.id === model.endpointId);
155
+ const isDefault = config.defaultImageModel === model.id;
156
+ console.log(chalk.white(` ${isDefault ? "⭐ " : " "}${model.name} (${model.id})`));
157
+ console.log(chalk.gray(` 端点: ${ep ? ep.name : "未知"}`));
158
+ console.log(chalk.gray(` 模型名: ${model.modelName || model.id}`));
159
+ if (model.defaultSize)
160
+ console.log(chalk.gray(` 默认尺寸: ${model.defaultSize}`));
161
+ if (model.defaultQuality)
162
+ console.log(chalk.gray(` 默认质量: ${model.defaultQuality}`));
163
+ console.log(SEPARATOR);
164
+ }
165
+ }
166
+ // ==================== MCP 服务器管理(操作 mcp.json)====================
167
+ function showMcpServers() {
168
+ const mcp = readMcpConfig();
169
+ const names = Object.keys(mcp.servers);
170
+ console.log(chalk.blue.bold("\n🔌 MCP 服务器列表:\n"));
171
+ if (names.length === 0) {
172
+ console.log(chalk.yellow(" (未配置 MCP 服务器)\n"));
173
+ return;
174
+ }
175
+ for (const name of names) {
176
+ const srv = mcp.servers[name];
177
+ console.log(chalk.white(` ${name}`));
178
+ console.log(chalk.gray(` 传输方式: ${srv.transport}`));
179
+ if (srv.transport === "stdio") {
180
+ console.log(chalk.gray(` 命令: ${srv.command}`));
181
+ if (srv.args?.length)
182
+ console.log(chalk.gray(` 参数: ${srv.args.join(" ")}`));
183
+ }
184
+ else {
185
+ console.log(chalk.gray(` URL: ${srv.url}`));
186
+ }
187
+ console.log(SEPARATOR);
188
+ }
189
+ }
190
+ async function addMcpServer() {
191
+ const { name, transport } = await inquirer.prompt([
192
+ {
193
+ type: "input",
194
+ name: "name",
195
+ message: "服务器名称(唯一标识):",
196
+ validate: (input) => input.trim() !== "" || "名称不能为空",
197
+ },
198
+ {
199
+ type: "list",
200
+ name: "transport",
201
+ message: "传输方式:",
202
+ choices: [
203
+ { name: "stdio(本地子进程)", value: "stdio" },
204
+ { name: "HTTP/SSE(远程)", value: "http" },
205
+ ],
206
+ },
207
+ ]);
208
+ const server = { transport };
209
+ if (transport === "stdio") {
210
+ const { command, args } = await inquirer.prompt([
211
+ {
212
+ type: "input",
213
+ name: "command",
214
+ message: "启动命令:",
215
+ validate: (input) => input.trim() !== "" || "命令不能为空",
216
+ },
217
+ {
218
+ type: "input",
219
+ name: "args",
220
+ message: "命令参数(空格分隔,可选):",
221
+ },
222
+ ]);
223
+ server.command = command;
224
+ server.args = args.trim() ? args.trim().split(/\s+/) : undefined;
225
+ }
226
+ else {
227
+ const { url } = await inquirer.prompt([
228
+ {
229
+ type: "input",
230
+ name: "url",
231
+ message: "URL:",
232
+ validate: (input) => input.trim() !== "" || "URL 不能为空",
233
+ },
234
+ ]);
235
+ server.url = url;
236
+ }
237
+ const mcp = readMcpConfig();
238
+ if (mcp.servers[name]) {
239
+ console.log(chalk.red(`\n❌ 服务器 "${name}" 已存在\n`));
240
+ return;
241
+ }
242
+ mcp.servers[name] = server;
243
+ writeMcpConfig(mcp);
244
+ console.log(chalk.green(`\n✅ MCP 服务器 "${name}" 已添加\n`));
245
+ }
246
+ async function editMcpServer() {
247
+ const mcp = readMcpConfig();
248
+ const names = Object.keys(mcp.servers);
249
+ const serverName = await selectFromList(names.map((n) => ({ name: n })), {
250
+ message: "选择要编辑的 MCP 服务器:",
251
+ getName: (item) => item.name,
252
+ getValue: (item) => item.name,
253
+ emptyMessage: "⚠️ 没有 MCP 服务器",
254
+ backLabel: "🔙 取消",
255
+ });
256
+ if (!serverName)
257
+ return;
258
+ const server = mcp.servers[serverName];
259
+ if (!server)
260
+ return;
261
+ const { field } = await inquirer.prompt([
262
+ {
263
+ type: "list",
264
+ name: "field",
265
+ message: "选择操作:",
266
+ choices: [
267
+ { name: `名称 (当前: ${serverName})`, value: "name" },
268
+ ...(server.transport === "stdio"
269
+ ? [
270
+ { name: `命令 (当前: ${server.command})`, value: "command" },
271
+ { name: `参数 (当前: ${(server.args || []).join(" ") || "无"})`, value: "args" },
272
+ ]
273
+ : [{ name: `URL (当前: ${server.url})`, value: "url" }]),
274
+ { name: "🗑️ 删除此服务器", value: "delete" },
275
+ { name: "🔙 取消", value: "back" },
276
+ ],
277
+ },
278
+ ]);
279
+ if (field === "back")
280
+ return;
281
+ if (field === "delete") {
282
+ delete mcp.servers[serverName];
283
+ writeMcpConfig(mcp);
284
+ console.log(chalk.green(`\n✅ MCP 服务器 "${serverName}" 已删除\n`));
285
+ return;
286
+ }
287
+ if (field === "name") {
288
+ const { newName } = await inquirer.prompt([
289
+ {
290
+ type: "input",
291
+ name: "newName",
292
+ message: "新名称:",
293
+ default: serverName,
294
+ validate: (input) => input.trim() !== "" || "名称不能为空",
295
+ },
296
+ ]);
297
+ if (newName !== serverName) {
298
+ mcp.servers[newName] = server;
299
+ delete mcp.servers[serverName];
300
+ }
301
+ writeMcpConfig(mcp);
302
+ console.log(chalk.green(`\n✅ MCP 服务器已重命名\n`));
303
+ return;
304
+ }
305
+ const { value } = await inquirer.prompt([
306
+ {
307
+ type: "input",
308
+ name: "value",
309
+ message: `请输入新${field === "command" ? "命令" : field === "args" ? "参数(空格分隔)" : "URL"}:`,
310
+ default: field === "args" ? (server.args || []).join(" ") : String(server[field] ?? ""),
311
+ },
312
+ ]);
313
+ if (field === "args") {
314
+ server.args = value.trim() ? value.trim().split(/\s+/) : [];
315
+ }
316
+ else {
317
+ server[field] = value;
318
+ }
319
+ writeMcpConfig(mcp);
320
+ console.log(chalk.green(`\n✅ MCP 服务器已更新\n`));
321
+ }
322
+ // ==================== 配置管理主菜单 ====================
323
+ export async function showInteractiveConfig() {
324
+ while (true) {
325
+ console.log(chalk.blue.bold("\n⚙️ 配置管理\n"));
326
+ const { action } = await inquirer.prompt([
327
+ {
328
+ type: "list",
329
+ name: "action",
330
+ message: "请选择操作:",
331
+ choices: [
332
+ { name: "📋 查看当前配置(总览)", value: "show" },
333
+ { name: "⭐ 设置默认对话模型", value: "set-default-model" },
334
+ { name: "⭐ 设置默认图片生成模型", value: "set-default-image-model" },
335
+ { name: "🔑 设置 API Key", value: "set-key" },
336
+ { name: "🔧 编辑 API", value: "edit-endpoint" },
337
+ { name: "🌐 查看所有 API", value: "list-endpoints" },
338
+ { name: "📋 查看对话模型", value: "list-models" },
339
+ { name: "📋 查看图片生成模型", value: "list-image-models" },
340
+ { name: "🔌 管理 MCP 服务器", value: "mcp" },
341
+ { name: "🔙 返回主菜单", value: "back" },
342
+ ],
343
+ },
344
+ ]);
345
+ switch (action) {
346
+ case "show":
347
+ showConfig();
348
+ break;
349
+ case "set-key":
350
+ await setApiKeyInteractive();
351
+ break;
352
+ case "list-endpoints":
353
+ showEndpoints();
354
+ break;
355
+ case "edit-endpoint":
356
+ await editEndpoint();
357
+ break;
358
+ case "list-models":
359
+ showModels();
360
+ break;
361
+ case "set-default-model":
362
+ await setDefaultModelInteractive();
363
+ break;
364
+ case "list-image-models":
365
+ showImageModels();
366
+ break;
367
+ case "set-default-image-model":
368
+ await setDefaultImageModelInteractive();
369
+ break;
370
+ case "mcp":
371
+ await manageMcpServers();
372
+ break;
373
+ case "back": return;
374
+ }
375
+ }
376
+ }
377
+ async function manageMcpServers() {
378
+ while (true) {
379
+ console.log(chalk.blue.bold("\n🔌 MCP 服务器管理\n"));
380
+ const { action } = await inquirer.prompt([
381
+ {
382
+ type: "list",
383
+ name: "action",
384
+ message: "请选择操作:",
385
+ choices: [
386
+ { name: "📋 查看所有 MCP 服务器", value: "list" },
387
+ { name: "➕ 新增 MCP 服务器", value: "add" },
388
+ { name: "✏️ 编辑/删除 MCP 服务器", value: "edit" },
389
+ { name: "🔙 返回配置管理", value: "back" },
390
+ ],
391
+ },
392
+ ]);
393
+ switch (action) {
394
+ case "list":
395
+ showMcpServers();
396
+ break;
397
+ case "add":
398
+ await addMcpServer();
399
+ break;
400
+ case "edit":
401
+ await editMcpServer();
402
+ break;
403
+ case "back": return;
404
+ }
405
+ }
406
+ }
407
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/menus/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * 对话管理菜单
3
+ *
4
+ * 直接使用 SDK 的 listConversations / deleteConversation。
5
+ */
6
+ /**
7
+ * 获取对话列表(仅读文件名和 mtime,不解析 JSON 内容)。
8
+ *
9
+ * SDK 的 listConversations 会解析每个文件为完整的 Conversation 对象,
10
+ * 在大量对话场景下可能较慢。这里只读文件元数据,适用于列表展示。
11
+ * 如需完整数据,请使用 SDK 的 readConversation(CONVERSATIONS_DIR, id)。
12
+ */
13
+ export declare function getConversationsList(): Array<{
14
+ id: string;
15
+ name: string;
16
+ updatedAt: string;
17
+ size: number;
18
+ }>;
19
+ export declare function manageConversations(): Promise<void>;
20
+ //# sourceMappingURL=conversations.d.ts.map