workerclaw 0.2.0

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 (224) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +129 -0
  3. package/dist/active-behavior/behavior-scheduler.d.ts +119 -0
  4. package/dist/active-behavior/behavior-scheduler.d.ts.map +1 -0
  5. package/dist/active-behavior/behavior-scheduler.js +297 -0
  6. package/dist/active-behavior/behavior-scheduler.js.map +1 -0
  7. package/dist/active-behavior/frequency-control.d.ts +72 -0
  8. package/dist/active-behavior/frequency-control.d.ts.map +1 -0
  9. package/dist/active-behavior/frequency-control.js +206 -0
  10. package/dist/active-behavior/frequency-control.js.map +1 -0
  11. package/dist/active-behavior/index.d.ts +8 -0
  12. package/dist/active-behavior/index.d.ts.map +1 -0
  13. package/dist/active-behavior/index.js +6 -0
  14. package/dist/active-behavior/index.js.map +1 -0
  15. package/dist/agent/agent-engine.d.ts +122 -0
  16. package/dist/agent/agent-engine.d.ts.map +1 -0
  17. package/dist/agent/agent-engine.js +380 -0
  18. package/dist/agent/agent-engine.js.map +1 -0
  19. package/dist/agent/context-window.d.ts +69 -0
  20. package/dist/agent/context-window.d.ts.map +1 -0
  21. package/dist/agent/context-window.js +210 -0
  22. package/dist/agent/context-window.js.map +1 -0
  23. package/dist/agent/llm-client.d.ts +37 -0
  24. package/dist/agent/llm-client.d.ts.map +1 -0
  25. package/dist/agent/llm-client.js +155 -0
  26. package/dist/agent/llm-client.js.map +1 -0
  27. package/dist/agent/personality.d.ts +71 -0
  28. package/dist/agent/personality.d.ts.map +1 -0
  29. package/dist/agent/personality.js +147 -0
  30. package/dist/agent/personality.js.map +1 -0
  31. package/dist/agent/session-manager.d.ts +111 -0
  32. package/dist/agent/session-manager.d.ts.map +1 -0
  33. package/dist/agent/session-manager.js +205 -0
  34. package/dist/agent/session-manager.js.map +1 -0
  35. package/dist/agent/tool-executor.d.ts +34 -0
  36. package/dist/agent/tool-executor.d.ts.map +1 -0
  37. package/dist/agent/tool-executor.js +145 -0
  38. package/dist/agent/tool-executor.js.map +1 -0
  39. package/dist/agent/tool-registry.d.ts +67 -0
  40. package/dist/agent/tool-registry.d.ts.map +1 -0
  41. package/dist/agent/tool-registry.js +272 -0
  42. package/dist/agent/tool-registry.js.map +1 -0
  43. package/dist/cli/configure.d.ts +16 -0
  44. package/dist/cli/configure.d.ts.map +1 -0
  45. package/dist/cli/configure.js +212 -0
  46. package/dist/cli/configure.js.map +1 -0
  47. package/dist/cli/index.d.ts +17 -0
  48. package/dist/cli/index.d.ts.map +1 -0
  49. package/dist/cli/index.js +256 -0
  50. package/dist/cli/index.js.map +1 -0
  51. package/dist/cli/prompter.d.ts +59 -0
  52. package/dist/cli/prompter.d.ts.map +1 -0
  53. package/dist/cli/prompter.js +120 -0
  54. package/dist/cli/prompter.js.map +1 -0
  55. package/dist/cli/sections/index.d.ts +9 -0
  56. package/dist/cli/sections/index.d.ts.map +1 -0
  57. package/dist/cli/sections/index.js +9 -0
  58. package/dist/cli/sections/index.js.map +1 -0
  59. package/dist/cli/sections/llm.d.ts +14 -0
  60. package/dist/cli/sections/llm.d.ts.map +1 -0
  61. package/dist/cli/sections/llm.js +155 -0
  62. package/dist/cli/sections/llm.js.map +1 -0
  63. package/dist/cli/sections/personality.d.ts +14 -0
  64. package/dist/cli/sections/personality.d.ts.map +1 -0
  65. package/dist/cli/sections/personality.js +90 -0
  66. package/dist/cli/sections/personality.js.map +1 -0
  67. package/dist/cli/sections/platform.d.ts +14 -0
  68. package/dist/cli/sections/platform.d.ts.map +1 -0
  69. package/dist/cli/sections/platform.js +179 -0
  70. package/dist/cli/sections/platform.js.map +1 -0
  71. package/dist/cli/sections/security.d.ts +14 -0
  72. package/dist/cli/sections/security.d.ts.map +1 -0
  73. package/dist/cli/sections/security.js +106 -0
  74. package/dist/cli/sections/security.js.map +1 -0
  75. package/dist/cli/sections/skills.d.ts +10 -0
  76. package/dist/cli/sections/skills.d.ts.map +1 -0
  77. package/dist/cli/sections/skills.js +149 -0
  78. package/dist/cli/sections/skills.js.map +1 -0
  79. package/dist/cli.d.ts +8 -0
  80. package/dist/cli.d.ts.map +1 -0
  81. package/dist/cli.js +116 -0
  82. package/dist/cli.js.map +1 -0
  83. package/dist/core/config.d.ts +175 -0
  84. package/dist/core/config.d.ts.map +1 -0
  85. package/dist/core/config.js +109 -0
  86. package/dist/core/config.js.map +1 -0
  87. package/dist/core/events.d.ts +211 -0
  88. package/dist/core/events.d.ts.map +1 -0
  89. package/dist/core/events.js +152 -0
  90. package/dist/core/events.js.map +1 -0
  91. package/dist/core/logger.d.ts +23 -0
  92. package/dist/core/logger.d.ts.map +1 -0
  93. package/dist/core/logger.js +53 -0
  94. package/dist/core/logger.js.map +1 -0
  95. package/dist/core/workerclaw.d.ts +83 -0
  96. package/dist/core/workerclaw.d.ts.map +1 -0
  97. package/dist/core/workerclaw.js +161 -0
  98. package/dist/core/workerclaw.js.map +1 -0
  99. package/dist/index.d.ts +27 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +21 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/ingress/message-parser.d.ts +36 -0
  104. package/dist/ingress/message-parser.d.ts.map +1 -0
  105. package/dist/ingress/message-parser.js +107 -0
  106. package/dist/ingress/message-parser.js.map +1 -0
  107. package/dist/ingress/miniabc-client.d.ts +109 -0
  108. package/dist/ingress/miniabc-client.d.ts.map +1 -0
  109. package/dist/ingress/miniabc-client.js +345 -0
  110. package/dist/ingress/miniabc-client.js.map +1 -0
  111. package/dist/ingress/platform-api.d.ts +82 -0
  112. package/dist/ingress/platform-api.d.ts.map +1 -0
  113. package/dist/ingress/platform-api.js +209 -0
  114. package/dist/ingress/platform-api.js.map +1 -0
  115. package/dist/sandbox/command-sandbox.d.ts +46 -0
  116. package/dist/sandbox/command-sandbox.d.ts.map +1 -0
  117. package/dist/sandbox/command-sandbox.js +144 -0
  118. package/dist/sandbox/command-sandbox.js.map +1 -0
  119. package/dist/sandbox/fs-sandbox.d.ts +56 -0
  120. package/dist/sandbox/fs-sandbox.d.ts.map +1 -0
  121. package/dist/sandbox/fs-sandbox.js +119 -0
  122. package/dist/sandbox/fs-sandbox.js.map +1 -0
  123. package/dist/sandbox/network-sandbox.d.ts +41 -0
  124. package/dist/sandbox/network-sandbox.d.ts.map +1 -0
  125. package/dist/sandbox/network-sandbox.js +114 -0
  126. package/dist/sandbox/network-sandbox.js.map +1 -0
  127. package/dist/security/content-scanner.d.ts +59 -0
  128. package/dist/security/content-scanner.d.ts.map +1 -0
  129. package/dist/security/content-scanner.js +289 -0
  130. package/dist/security/content-scanner.js.map +1 -0
  131. package/dist/security/gate.d.ts +78 -0
  132. package/dist/security/gate.d.ts.map +1 -0
  133. package/dist/security/gate.js +150 -0
  134. package/dist/security/gate.js.map +1 -0
  135. package/dist/security/permission-level.d.ts +68 -0
  136. package/dist/security/permission-level.d.ts.map +1 -0
  137. package/dist/security/permission-level.js +191 -0
  138. package/dist/security/permission-level.js.map +1 -0
  139. package/dist/security/rate-limiter.d.ts +52 -0
  140. package/dist/security/rate-limiter.d.ts.map +1 -0
  141. package/dist/security/rate-limiter.js +133 -0
  142. package/dist/security/rate-limiter.js.map +1 -0
  143. package/dist/security/source-verifier.d.ts +33 -0
  144. package/dist/security/source-verifier.d.ts.map +1 -0
  145. package/dist/security/source-verifier.js +106 -0
  146. package/dist/security/source-verifier.js.map +1 -0
  147. package/dist/skills/builtin/code.d.ts +27 -0
  148. package/dist/skills/builtin/code.d.ts.map +1 -0
  149. package/dist/skills/builtin/code.js +132 -0
  150. package/dist/skills/builtin/code.js.map +1 -0
  151. package/dist/skills/builtin/index.d.ts +12 -0
  152. package/dist/skills/builtin/index.d.ts.map +1 -0
  153. package/dist/skills/builtin/index.js +16 -0
  154. package/dist/skills/builtin/index.js.map +1 -0
  155. package/dist/skills/builtin/search.d.ts +27 -0
  156. package/dist/skills/builtin/search.d.ts.map +1 -0
  157. package/dist/skills/builtin/search.js +105 -0
  158. package/dist/skills/builtin/search.js.map +1 -0
  159. package/dist/skills/builtin/writing.d.ts +22 -0
  160. package/dist/skills/builtin/writing.d.ts.map +1 -0
  161. package/dist/skills/builtin/writing.js +93 -0
  162. package/dist/skills/builtin/writing.js.map +1 -0
  163. package/dist/skills/index.d.ts +11 -0
  164. package/dist/skills/index.d.ts.map +1 -0
  165. package/dist/skills/index.js +10 -0
  166. package/dist/skills/index.js.map +1 -0
  167. package/dist/skills/pack-loader.d.ts +31 -0
  168. package/dist/skills/pack-loader.d.ts.map +1 -0
  169. package/dist/skills/pack-loader.js +167 -0
  170. package/dist/skills/pack-loader.js.map +1 -0
  171. package/dist/skills/pack-registry.d.ts +40 -0
  172. package/dist/skills/pack-registry.d.ts.map +1 -0
  173. package/dist/skills/pack-registry.js +80 -0
  174. package/dist/skills/pack-registry.js.map +1 -0
  175. package/dist/skills/pack-types.d.ts +64 -0
  176. package/dist/skills/pack-types.d.ts.map +1 -0
  177. package/dist/skills/pack-types.js +7 -0
  178. package/dist/skills/pack-types.js.map +1 -0
  179. package/dist/skills/skill-registry.d.ts +83 -0
  180. package/dist/skills/skill-registry.d.ts.map +1 -0
  181. package/dist/skills/skill-registry.js +206 -0
  182. package/dist/skills/skill-registry.js.map +1 -0
  183. package/dist/skills/skill-runner.d.ts +49 -0
  184. package/dist/skills/skill-runner.d.ts.map +1 -0
  185. package/dist/skills/skill-runner.js +128 -0
  186. package/dist/skills/skill-runner.js.map +1 -0
  187. package/dist/skills/types.d.ts +94 -0
  188. package/dist/skills/types.d.ts.map +1 -0
  189. package/dist/skills/types.js +7 -0
  190. package/dist/skills/types.js.map +1 -0
  191. package/dist/task/concurrency.d.ts +87 -0
  192. package/dist/task/concurrency.d.ts.map +1 -0
  193. package/dist/task/concurrency.js +269 -0
  194. package/dist/task/concurrency.js.map +1 -0
  195. package/dist/task/task-evaluator.d.ts +52 -0
  196. package/dist/task/task-evaluator.d.ts.map +1 -0
  197. package/dist/task/task-evaluator.js +141 -0
  198. package/dist/task/task-evaluator.js.map +1 -0
  199. package/dist/task/task-manager.d.ts +112 -0
  200. package/dist/task/task-manager.d.ts.map +1 -0
  201. package/dist/task/task-manager.js +382 -0
  202. package/dist/task/task-manager.js.map +1 -0
  203. package/dist/task/task-state-machine.d.ts +63 -0
  204. package/dist/task/task-state-machine.d.ts.map +1 -0
  205. package/dist/task/task-state-machine.js +149 -0
  206. package/dist/task/task-state-machine.js.map +1 -0
  207. package/dist/types/agent.d.ts +79 -0
  208. package/dist/types/agent.d.ts.map +1 -0
  209. package/dist/types/agent.js +7 -0
  210. package/dist/types/agent.js.map +1 -0
  211. package/dist/types/index.d.ts +7 -0
  212. package/dist/types/index.d.ts.map +1 -0
  213. package/dist/types/index.js +5 -0
  214. package/dist/types/index.js.map +1 -0
  215. package/dist/types/message.d.ts +87 -0
  216. package/dist/types/message.d.ts.map +1 -0
  217. package/dist/types/message.js +30 -0
  218. package/dist/types/message.js.map +1 -0
  219. package/dist/types/task.d.ts +176 -0
  220. package/dist/types/task.d.ts.map +1 -0
  221. package/dist/types/task.js +5 -0
  222. package/dist/types/task.js.map +1 -0
  223. package/package.json +57 -0
  224. package/workerclaw.config.example.json +78 -0
@@ -0,0 +1,256 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * WorkerClaw CLI 入口
4
+ *
5
+ * 基于 citty 的命令行框架
6
+ *
7
+ * 用法:
8
+ * workerclaw configure # 交互式配置向导
9
+ * workerclaw configure --section llm # 配置指定区域
10
+ * workerclaw start [config-file] # 启动 WorkerClaw
11
+ * workerclaw status # 查看状态
12
+ * workerclaw skills list # 列出技能
13
+ * workerclaw skills install <pkg> # 安装技能包
14
+ * workerclaw skills uninstall <name> # 卸载技能包
15
+ */
16
+ import { defineCommand, runMain } from 'citty';
17
+ import { existsSync, readFileSync } from 'node:fs';
18
+ import { resolve, dirname } from 'node:path';
19
+ import { fileURLToPath } from 'node:url';
20
+ import { homedir } from 'node:os';
21
+ const __dirname = dirname(fileURLToPath(import.meta.url));
22
+ // ==================== 环境变量替换 ====================
23
+ function resolveEnvVars(obj) {
24
+ if (typeof obj === 'string') {
25
+ return obj.replace(/\$\{([^}]+)\}/g, (_, varName) => {
26
+ return process.env[varName] || '';
27
+ });
28
+ }
29
+ if (Array.isArray(obj))
30
+ return obj.map(resolveEnvVars);
31
+ if (obj && typeof obj === 'object') {
32
+ const result = {};
33
+ for (const key of Object.keys(obj)) {
34
+ result[key] = resolveEnvVars(obj[key]);
35
+ }
36
+ return result;
37
+ }
38
+ return obj;
39
+ }
40
+ // ==================== 配置文件查找 ====================
41
+ function findConfigPath(explicitPath) {
42
+ if (explicitPath) {
43
+ const abs = resolve(explicitPath);
44
+ return existsSync(abs) ? abs : null;
45
+ }
46
+ // 按优先级查找
47
+ const searchPaths = [
48
+ './workerclaw.config.json',
49
+ './config/workerclaw.config.json',
50
+ './config.json',
51
+ `${homedir()}/.workerclaw/config.json`,
52
+ ];
53
+ for (const p of searchPaths) {
54
+ if (existsSync(p))
55
+ return resolve(p);
56
+ }
57
+ return null;
58
+ }
59
+ // ==================== 主命令 ====================
60
+ const main = defineCommand({
61
+ meta: {
62
+ name: 'workerclaw',
63
+ version: '0.2.0',
64
+ description: 'WorkerClaw - 公域 AI Agent 框架,专为智工坊平台的「打工虾」设计',
65
+ },
66
+ subCommands: {
67
+ // 配置命令
68
+ configure: defineCommand({
69
+ meta: {
70
+ name: 'configure',
71
+ description: '交互式配置向导',
72
+ },
73
+ args: {
74
+ section: {
75
+ type: 'string',
76
+ description: '配置区域 (platform/llm/personality/security)',
77
+ alias: 's',
78
+ },
79
+ 'config-file': {
80
+ type: 'string',
81
+ description: '配置文件路径',
82
+ alias: 'c',
83
+ },
84
+ },
85
+ async run({ args }) {
86
+ const { configureWizard, DEFAULT_CONFIG_PATH } = await import('./configure.js');
87
+ const configPath = args['config-file'] || DEFAULT_CONFIG_PATH;
88
+ await configureWizard(args.section, configPath);
89
+ },
90
+ }),
91
+ // 启动命令
92
+ start: defineCommand({
93
+ meta: {
94
+ name: 'start',
95
+ description: '启动 WorkerClaw',
96
+ },
97
+ args: {
98
+ 'config-file': {
99
+ type: 'string',
100
+ description: '配置文件路径',
101
+ alias: 'c',
102
+ },
103
+ },
104
+ async run({ args }) {
105
+ const configPath = findConfigPath(args['config-file']);
106
+ if (!configPath) {
107
+ console.error('❌ 未找到配置文件。请先运行配置向导:');
108
+ console.error(' workerclaw configure');
109
+ process.exit(1);
110
+ }
111
+ console.log(`📄 加载配置: ${configPath}`);
112
+ let rawConfig;
113
+ try {
114
+ rawConfig = JSON.parse(readFileSync(configPath, 'utf-8'));
115
+ }
116
+ catch (err) {
117
+ console.error(`❌ 配置文件解析失败: ${err}`);
118
+ process.exit(1);
119
+ }
120
+ const config = resolveEnvVars(rawConfig);
121
+ // 验证必要配置
122
+ if (!config.platform?.wsUrl || !config.platform?.token) {
123
+ console.error('❌ 缺少必要配置: platform.wsUrl 和 platform.token');
124
+ console.error(' 运行 workerclaw configure 重新配置');
125
+ process.exit(1);
126
+ }
127
+ if (!config.llm?.apiKey || !config.llm?.baseUrl) {
128
+ console.error('❌ 缺少必要配置: llm.apiKey 和 llm.baseUrl');
129
+ console.error(' 运行 workerclaw configure 重新配置');
130
+ process.exit(1);
131
+ }
132
+ // 动态导入核心模块
133
+ const { createWorkerClaw } = await import('../index.js');
134
+ const workerclaw = createWorkerClaw(config);
135
+ // 优雅关闭
136
+ const shutdown = async (signal) => {
137
+ console.log(`\n收到 ${signal} 信号,正在关闭...`);
138
+ await workerclaw.stop();
139
+ process.exit(0);
140
+ };
141
+ process.on('SIGINT', () => shutdown('SIGINT'));
142
+ process.on('SIGTERM', () => shutdown('SIGTERM'));
143
+ process.on('uncaughtException', async (err) => {
144
+ console.error('未捕获的异常:', err);
145
+ await workerclaw.stop();
146
+ process.exit(1);
147
+ });
148
+ process.on('unhandledRejection', async (reason) => {
149
+ console.error('未处理的 Promise 拒绝:', reason);
150
+ });
151
+ // 启动
152
+ try {
153
+ await workerclaw.start();
154
+ }
155
+ catch (err) {
156
+ console.error('❌ WorkerClaw 启动失败:', err);
157
+ process.exit(1);
158
+ }
159
+ },
160
+ }),
161
+ // 状态命令
162
+ status: defineCommand({
163
+ meta: {
164
+ name: 'status',
165
+ description: '查看 WorkerClaw 状态',
166
+ },
167
+ async run() {
168
+ const configPath = findConfigPath();
169
+ if (!configPath) {
170
+ console.log('❌ 未找到配置文件');
171
+ console.log(' 运行 workerclaw configure 进行配置');
172
+ return;
173
+ }
174
+ console.log(`📄 配置文件: ${configPath}`);
175
+ try {
176
+ const config = JSON.parse(readFileSync(configPath, 'utf-8'));
177
+ // 隐藏敏感信息
178
+ if (config.platform?.token) {
179
+ config.platform.token = config.platform.token.slice(0, 8) + '...';
180
+ }
181
+ if (config.llm?.apiKey) {
182
+ config.llm.apiKey = config.llm.apiKey.slice(0, 8) + '...';
183
+ }
184
+ console.log('\n📋 配置概览:');
185
+ console.log(` 实例名称: ${config.name || '未设置'}`);
186
+ console.log(` Agent 名称: ${config.personality?.name || '未设置'}`);
187
+ console.log(` 平台: ${config.platform?.botId || '未配置'}`);
188
+ console.log(` LLM: ${config.llm?.provider || '未配置'} / ${config.llm?.model || '未知'}`);
189
+ console.log(` 安全级别: ${config.security?.contentScan?.promptInjection?.enabled ? '已启用' : '未启用'} 内容扫描`);
190
+ console.log(` 智能活跃: ${config.activeBehavior?.enabled ? '已启用' : '未启用'}`);
191
+ // 技能状态
192
+ const { getBuiltinSkills } = await import('../skills/builtin/index.js');
193
+ const builtins = getBuiltinSkills();
194
+ console.log(`\n🔧 内置技能: ${builtins.length} 个`);
195
+ for (const skill of builtins) {
196
+ console.log(` - ${skill.metadata.displayName} (${skill.metadata.name})`);
197
+ }
198
+ }
199
+ catch {
200
+ console.error('❌ 配置文件解析失败');
201
+ }
202
+ },
203
+ }),
204
+ // 技能管理命令
205
+ skills: defineCommand({
206
+ meta: {
207
+ name: 'skills',
208
+ description: '技能管理',
209
+ },
210
+ args: {
211
+ action: {
212
+ type: 'positional',
213
+ required: false,
214
+ description: '操作 (list/install/uninstall)',
215
+ },
216
+ target: {
217
+ type: 'positional',
218
+ required: false,
219
+ description: '目标(包名或路径)',
220
+ },
221
+ },
222
+ async run({ args }) {
223
+ const { manageSkills } = await import('./sections/skills.js');
224
+ await manageSkills(args.action);
225
+ },
226
+ }),
227
+ },
228
+ // 默认行为:如果没有子命令,显示帮助
229
+ async run({ rawArgs }) {
230
+ // citty 会先执行子命令再执行主命令 run,需要检测是否已有子命令被处理
231
+ const knownSubCommands = ['configure', 'start', 'status', 'skills'];
232
+ if (rawArgs.length > 0 && knownSubCommands.includes(rawArgs[0])) {
233
+ return; // 子命令已处理,不再输出帮助
234
+ }
235
+ console.log('🦞 WorkerClaw v0.2.0 - 公域 AI Agent 框架\n');
236
+ console.log('用法:');
237
+ console.log(' workerclaw configure 交互式配置向导');
238
+ console.log(' workerclaw start 启动 WorkerClaw');
239
+ console.log(' workerclaw status 查看状态');
240
+ console.log(' workerclaw skills [list|install|uninstall] 技能管理');
241
+ console.log('');
242
+ console.log('首次使用请运行: workerclaw configure');
243
+ console.log('');
244
+ const configPath = findConfigPath();
245
+ if (!configPath) {
246
+ console.log('⚠️ 未找到配置文件,请先运行配置向导:');
247
+ console.log(' workerclaw configure');
248
+ }
249
+ else {
250
+ console.log(`📄 配置文件: ${configPath}`);
251
+ }
252
+ },
253
+ });
254
+ // 执行
255
+ runMain(main);
256
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,mDAAmD;AAEnD,SAAS,cAAc,CAAC,GAAQ;IAC9B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE;YAClD,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACvD,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,MAAM,GAAQ,EAAE,CAAC;QACvB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,mDAAmD;AAEnD,SAAS,cAAc,CAAC,YAAqB;IAC3C,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QAClC,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACtC,CAAC;IAED,SAAS;IACT,MAAM,WAAW,GAAG;QAClB,0BAA0B;QAC1B,iCAAiC;QACjC,eAAe;QACf,GAAG,OAAO,EAAE,0BAA0B;KACvC,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gDAAgD;AAEhD,MAAM,IAAI,GAAG,aAAa,CAAC;IACzB,IAAI,EAAE;QACJ,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,6CAA6C;KAC3D;IACD,WAAW,EAAE;QACX,OAAO;QACP,SAAS,EAAE,aAAa,CAAC;YACvB,IAAI,EAAE;gBACJ,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,SAAS;aACvB;YACD,IAAI,EAAE;gBACJ,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,0CAA0C;oBACvD,KAAK,EAAE,GAAG;iBACX;gBACD,aAAa,EAAE;oBACb,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,QAAQ;oBACrB,KAAK,EAAE,GAAG;iBACX;aACF;YACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;gBAChB,MAAM,EAAE,eAAe,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;gBAChF,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAW,IAAI,mBAAmB,CAAC;gBACxE,MAAM,eAAe,CAAC,IAAI,CAAC,OAAiB,EAAE,UAAU,CAAC,CAAC;YAC5D,CAAC;SACF,CAAC;QAEF,OAAO;QACP,KAAK,EAAE,aAAa,CAAC;YACnB,IAAI,EAAE;gBACJ,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,eAAe;aAC7B;YACD,IAAI,EAAE;gBACJ,aAAa,EAAE;oBACb,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,QAAQ;oBACrB,KAAK,EAAE,GAAG;iBACX;aACF;YACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;gBAChB,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,aAAa,CAAW,CAAC,CAAC;gBAEjE,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;oBACrC,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;oBACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,YAAY,UAAU,EAAE,CAAC,CAAC;gBAEtC,IAAI,SAAc,CAAC;gBACnB,IAAI,CAAC;oBACH,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC5D,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC;oBACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBAED,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;gBAEzC,SAAS;gBACT,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC;oBACvD,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;oBAC3D,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;oBACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC;oBAChD,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;oBACpD,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;oBACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBAED,WAAW;gBACX,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;gBACzD,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBAE5C,OAAO;gBACP,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;oBACxC,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,aAAa,CAAC,CAAC;oBACzC,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;oBACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC,CAAC;gBAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC/C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;gBACjD,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;oBAC5C,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;oBAC9B,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;oBACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;oBAChD,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;gBAC5C,CAAC,CAAC,CAAC;gBAEH,KAAK;gBACL,IAAI,CAAC;oBACH,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;gBAC3B,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;oBACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;SACF,CAAC;QAEF,OAAO;QACP,MAAM,EAAE,aAAa,CAAC;YACpB,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kBAAkB;aAChC;YACD,KAAK,CAAC,GAAG;gBACP,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;gBAEpC,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;oBACzB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;oBAC/C,OAAO;gBACT,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,YAAY,UAAU,EAAE,CAAC,CAAC;gBAEtC,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;oBAE7D,SAAS;oBACT,IAAI,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC;wBAC3B,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;oBACpE,CAAC;oBACD,IAAI,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC;wBACvB,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;oBAC5D,CAAC;oBAED,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;oBAC1B,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;oBAC/C,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,WAAW,EAAE,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;oBAChE,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,QAAQ,EAAE,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC;oBACxD,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,GAAG,EAAE,QAAQ,IAAI,KAAK,MAAM,MAAM,CAAC,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;oBACtF,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;oBACtG,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;oBAEzE,OAAO;oBACP,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;oBACxE,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;oBACpC,OAAO,CAAC,GAAG,CAAC,cAAc,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC;oBAC/C,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;wBAC7B,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,QAAQ,CAAC,WAAW,KAAK,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;oBAC5E,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;SACF,CAAC;QAEF,SAAS;QACT,MAAM,EAAE,aAAa,CAAC;YACpB,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,MAAM;aACpB;YACD,IAAI,EAAE;gBACJ,MAAM,EAAE;oBACN,IAAI,EAAE,YAAY;oBAClB,QAAQ,EAAE,KAAK;oBACf,WAAW,EAAE,6BAA6B;iBAC3C;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,YAAY;oBAClB,QAAQ,EAAE,KAAK;oBACf,WAAW,EAAE,WAAW;iBACzB;aACF;YACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;gBAChB,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;gBAC9D,MAAM,YAAY,CAAC,IAAI,CAAC,MAAgB,CAAC,CAAC;YAC5C,CAAC;SACF,CAAC;KACH;IAED,oBAAoB;IACpB,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE;QACnB,yCAAyC;QACzC,MAAM,gBAAgB,GAAG,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,OAAO,CAAC,gBAAgB;QAC1B,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;QACpC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,YAAY,UAAU,EAAE,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,KAAK;AACL,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * WorkerClaw CLI - @clack/prompts 适配层
4
+ *
5
+ * 统一封装 @clack/prompts 的交互式提示,提供简洁接口
6
+ */
7
+ /**
8
+ * 启动 Clack 交互流程
9
+ */
10
+ export declare function intro(title: string): void;
11
+ /**
12
+ * 结束 Clack 交互流程
13
+ */
14
+ export declare function outro(message: string): void;
15
+ /**
16
+ * 取消交互流程
17
+ */
18
+ export declare function cancel(message?: string): void;
19
+ /**
20
+ * 确认提示
21
+ */
22
+ export declare function confirm(message: string, initialValue?: boolean): Promise<boolean>;
23
+ /**
24
+ * 单选
25
+ */
26
+ export declare function select(message: string, options: Array<{
27
+ value: string;
28
+ label: string;
29
+ hint?: string;
30
+ }>, initialValue?: string): Promise<string | null>;
31
+ /**
32
+ * 多选
33
+ */
34
+ export declare function multiselect(message: string, options: Array<{
35
+ value: string;
36
+ label: string;
37
+ hint?: string;
38
+ }>, required?: boolean, initialValue?: string[]): Promise<string[]>;
39
+ /**
40
+ * 文本输入
41
+ */
42
+ export declare function text(message: string, placeholder?: string, initialValue?: string): Promise<string | null>;
43
+ /**
44
+ * 密码输入
45
+ */
46
+ export declare function password(message: string): Promise<string | null>;
47
+ /**
48
+ * 数字输入
49
+ */
50
+ export declare function num(message: string, initialValue?: number, min?: number, max?: number): Promise<number | null>;
51
+ /**
52
+ * 进度提示(spinner)
53
+ */
54
+ export declare function spinner(): {
55
+ start: (message: string) => void;
56
+ stop: (message: string) => void;
57
+ message: (msg: string) => void;
58
+ };
59
+ //# sourceMappingURL=prompter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompter.d.ts","sourceRoot":"","sources":["../../src/cli/prompter.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AAeH;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEzC;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAMvF;AAED;;GAEG;AACH,wBAAsB,MAAM,CAC1B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EAC/D,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQxB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EAC/D,QAAQ,CAAC,EAAE,OAAO,EAClB,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB;AAED;;GAEG;AACH,wBAAsB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQ/G;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMtE;AAED;;GAEG;AACH,wBAAsB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcpH;AAED;;GAEG;AACH,wBAAgB,OAAO,IAAI;IACzB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC,CAOA"}
@@ -0,0 +1,120 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * WorkerClaw CLI - @clack/prompts 适配层
4
+ *
5
+ * 统一封装 @clack/prompts 的交互式提示,提供简洁接口
6
+ */
7
+ import { intro as clackIntro, outro as clackOutro, cancel as clackCancel, confirm as clackConfirm, select as clackSelect, multiselect as clackMultiselect, text as clackText, password as clackPassword, spinner as clackSpinner, isCancel, } from '@clack/prompts';
8
+ /**
9
+ * 启动 Clack 交互流程
10
+ */
11
+ export function intro(title) {
12
+ clackIntro(title);
13
+ }
14
+ /**
15
+ * 结束 Clack 交互流程
16
+ */
17
+ export function outro(message) {
18
+ clackOutro(message);
19
+ }
20
+ /**
21
+ * 取消交互流程
22
+ */
23
+ export function cancel(message) {
24
+ clackCancel(message || '操作已取消');
25
+ }
26
+ /**
27
+ * 确认提示
28
+ */
29
+ export async function confirm(message, initialValue) {
30
+ const result = await clackConfirm({
31
+ message,
32
+ initialValue,
33
+ });
34
+ return isCancel(result) ? false : result;
35
+ }
36
+ /**
37
+ * 单选
38
+ */
39
+ export async function select(message, options, initialValue) {
40
+ const result = await clackSelect({
41
+ message,
42
+ options: options,
43
+ initialValue,
44
+ });
45
+ if (isCancel(result))
46
+ return null;
47
+ return result;
48
+ }
49
+ /**
50
+ * 多选
51
+ */
52
+ export async function multiselect(message, options, required, initialValue) {
53
+ const result = await clackMultiselect({
54
+ message,
55
+ options: options,
56
+ required,
57
+ initialValues: initialValue,
58
+ });
59
+ if (isCancel(result))
60
+ return [];
61
+ return result;
62
+ }
63
+ /**
64
+ * 文本输入
65
+ */
66
+ export async function text(message, placeholder, initialValue) {
67
+ const result = await clackText({
68
+ message,
69
+ placeholder,
70
+ initialValue,
71
+ });
72
+ if (isCancel(result))
73
+ return null;
74
+ return result;
75
+ }
76
+ /**
77
+ * 密码输入
78
+ */
79
+ export async function password(message) {
80
+ const result = await clackPassword({
81
+ message,
82
+ });
83
+ if (isCancel(result))
84
+ return null;
85
+ return result;
86
+ }
87
+ /**
88
+ * 数字输入
89
+ */
90
+ export async function num(message, initialValue, min, max) {
91
+ const result = await clackText({
92
+ message,
93
+ initialValue: initialValue?.toString(),
94
+ placeholder: min !== undefined && max !== undefined ? `${min} - ${max}` : undefined,
95
+ validate: (value) => {
96
+ const n = Number(value);
97
+ if (isNaN(n))
98
+ return '请输入有效数字';
99
+ if (min !== undefined && n < min)
100
+ return `最小值为 ${min}`;
101
+ if (max !== undefined && n > max)
102
+ return `最大值为 ${max}`;
103
+ },
104
+ });
105
+ if (isCancel(result))
106
+ return null;
107
+ return Number(result);
108
+ }
109
+ /**
110
+ * 进度提示(spinner)
111
+ */
112
+ export function spinner() {
113
+ const s = clackSpinner();
114
+ return {
115
+ start: (message) => { s.start(message); },
116
+ stop: (message) => { s.stop(message); },
117
+ message: (msg) => { s.message(msg); },
118
+ };
119
+ }
120
+ //# sourceMappingURL=prompter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompter.js","sourceRoot":"","sources":["../../src/cli/prompter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * CLI 配置区域导出
3
+ */
4
+ export { configurePlatform, type PlatformSectionResult } from './platform.js';
5
+ export { configureLLM, type LLMSectionResult } from './llm.js';
6
+ export { configurePersonality, type PersonalitySectionResult } from './personality.js';
7
+ export { configureSecurity, type SecuritySectionResult } from './security.js';
8
+ export { manageSkills } from './skills.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/sections/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,KAAK,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * CLI 配置区域导出
3
+ */
4
+ export { configurePlatform } from './platform.js';
5
+ export { configureLLM } from './llm.js';
6
+ export { configurePersonality } from './personality.js';
7
+ export { configureSecurity } from './security.js';
8
+ export { manageSkills } from './skills.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/sections/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAA8B,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAyB,MAAM,UAAU,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAiC,MAAM,kBAAkB,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAA8B,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * WorkerClaw CLI - 大模型配置 section
3
+ *
4
+ * 交互式配置 LLM 提供商、模型和 API Key
5
+ */
6
+ import type { LLMConfig } from '../../core/config.js';
7
+ export interface LLMSectionResult {
8
+ llm: Partial<LLMConfig>;
9
+ }
10
+ /**
11
+ * 大模型配置
12
+ */
13
+ export declare function configureLLM(existing?: Partial<LLMConfig>): Promise<LLMSectionResult | null>;
14
+ //# sourceMappingURL=llm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../../src/cli/sections/llm.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;CACzB;AA6DD;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAqGlG"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * WorkerClaw CLI - 大模型配置 section
3
+ *
4
+ * 交互式配置 LLM 提供商、模型和 API Key
5
+ */
6
+ import { select, password, num } from '../prompter.js';
7
+ /** LLM 提供商预设 */
8
+ const LLM_PROVIDERS = {
9
+ openai: {
10
+ name: 'OpenAI',
11
+ baseUrl: 'https://api.openai.com/v1',
12
+ defaultModel: 'gpt-4o',
13
+ models: ['gpt-4o', 'gpt-4o-mini', 'gpt-4-turbo', 'gpt-3.5-turbo'],
14
+ hint: 'GPT-4o / GPT-4 系列模型',
15
+ },
16
+ deepseek: {
17
+ name: 'DeepSeek',
18
+ baseUrl: 'https://api.deepseek.com/v1',
19
+ defaultModel: 'deepseek-chat',
20
+ models: ['deepseek-chat', 'deepseek-reasoner'],
21
+ hint: 'DeepSeek V3 / R1 系列',
22
+ },
23
+ qwen: {
24
+ name: '通义千问',
25
+ baseUrl: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
26
+ defaultModel: 'qwen-plus',
27
+ models: ['qwen-turbo', 'qwen-plus', 'qwen-max'],
28
+ hint: '阿里云通义千问系列',
29
+ },
30
+ kimi: {
31
+ name: 'Kimi (月之暗面)',
32
+ baseUrl: 'https://api.moonshot.cn/v1',
33
+ defaultModel: 'moonshot-v1-8k',
34
+ models: ['moonshot-v1-8k', 'moonshot-v1-32k', 'moonshot-v1-128k'],
35
+ hint: 'Moonshot Kimi 系列',
36
+ },
37
+ zhipu: {
38
+ name: '智谱 GLM',
39
+ baseUrl: 'https://open.bigmodel.cn/api/paas/v4',
40
+ defaultModel: 'glm-4',
41
+ models: ['glm-4-flash', 'glm-4', 'glm-4-plus'],
42
+ hint: '智谱 GLM-4 系列',
43
+ },
44
+ ollama: {
45
+ name: 'Ollama (本地)',
46
+ baseUrl: 'http://localhost:11434/v1',
47
+ defaultModel: 'qwen2.5:7b',
48
+ models: ['qwen2.5:7b', 'qwen2.5:14b', 'llama3:8b', 'mistral:7b'],
49
+ hint: '本地模型,无需 API Key',
50
+ },
51
+ custom: {
52
+ name: '自定义 (OpenAI 兼容)',
53
+ baseUrl: '',
54
+ defaultModel: '',
55
+ models: [],
56
+ hint: '兼容 OpenAI API 格式的自定义服务',
57
+ },
58
+ };
59
+ /**
60
+ * 大模型配置
61
+ */
62
+ export async function configureLLM(existing) {
63
+ // 选择提供商
64
+ const providerKey = await select('选择大模型提供商', Object.entries(LLM_PROVIDERS).map(([key, p]) => ({
65
+ value: key,
66
+ label: p.name,
67
+ hint: p.hint,
68
+ })), existing?.provider && LLM_PROVIDERS[existing.provider] ? existing.provider : undefined);
69
+ if (!providerKey)
70
+ return null;
71
+ const provider = LLM_PROVIDERS[providerKey];
72
+ const isLocal = providerKey === 'ollama';
73
+ let baseUrl = provider.baseUrl;
74
+ let model = provider.defaultModel;
75
+ // 自定义提供商需要输入 baseUrl
76
+ if (providerKey === 'custom') {
77
+ const customUrl = await select('选择 API 格式', [
78
+ { value: 'openai', label: 'OpenAI 兼容格式', hint: '/v1/chat/completions' },
79
+ ]);
80
+ if (!customUrl)
81
+ return null;
82
+ const customBaseUrl = await password('API Base URL');
83
+ if (!customBaseUrl)
84
+ return null;
85
+ baseUrl = customBaseUrl.replace(/\/$/, '');
86
+ const customModel = await password('模型名称');
87
+ if (!customModel)
88
+ return null;
89
+ model = customModel;
90
+ }
91
+ else {
92
+ // 允许修改 baseUrl
93
+ const customUrl = await password(`API Base URL (${provider.name})`);
94
+ if (customUrl === null)
95
+ return null;
96
+ if (customUrl)
97
+ baseUrl = customUrl.replace(/\/$/, '');
98
+ }
99
+ // 选择模型
100
+ if (provider.models.length > 0 && providerKey !== 'custom') {
101
+ const selectedModel = await select('选择模型', [
102
+ { value: model, label: `${model} (默认)`, hint: '推荐' },
103
+ ...provider.models
104
+ .filter(m => m !== model)
105
+ .map(m => ({ value: m, label: m })),
106
+ { value: '__custom__', label: '自定义模型名...' },
107
+ ], model);
108
+ if (!selectedModel)
109
+ return null;
110
+ if (selectedModel === '__custom__') {
111
+ const customModel = await password('输入模型名称');
112
+ if (!customModel)
113
+ return null;
114
+ model = customModel;
115
+ }
116
+ else {
117
+ model = selectedModel;
118
+ }
119
+ }
120
+ // API Key(Ollama 本地模型不需要)
121
+ let apiKey = '';
122
+ if (!isLocal) {
123
+ apiKey = existing?.apiKey || '';
124
+ const inputKey = await password('API Key');
125
+ if (inputKey === null)
126
+ return null;
127
+ if (inputKey)
128
+ apiKey = inputKey;
129
+ }
130
+ // 高级参数(使用默认值)
131
+ const maxTokens = await num('最大输出 Token 数', 4096, 256, 32768);
132
+ if (maxTokens === null)
133
+ return null;
134
+ const temperature = await num('Temperature (创造性,0-2)', 0.7, 0, 2);
135
+ if (temperature === null)
136
+ return null;
137
+ return {
138
+ llm: {
139
+ provider: providerKey,
140
+ model,
141
+ apiKey,
142
+ baseUrl,
143
+ safety: {
144
+ maxTokens: maxTokens || 4096,
145
+ temperature: temperature ?? 0.7,
146
+ topP: 0.9,
147
+ },
148
+ retry: {
149
+ maxRetries: 3,
150
+ backoffMs: 2000,
151
+ },
152
+ },
153
+ };
154
+ }
155
+ //# sourceMappingURL=llm.js.map