@onesclawkolor/onesclaw 0.1.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 (141) hide show
  1. package/README.md +65 -0
  2. package/dist/agent/conversation.d.ts +34 -0
  3. package/dist/agent/conversation.js +61 -0
  4. package/dist/agent/conversation.js.map +1 -0
  5. package/dist/agent/loop.d.ts +40 -0
  6. package/dist/agent/loop.js +213 -0
  7. package/dist/agent/loop.js.map +1 -0
  8. package/dist/agent/session.d.ts +73 -0
  9. package/dist/agent/session.js +225 -0
  10. package/dist/agent/session.js.map +1 -0
  11. package/dist/audit/file-sink.d.ts +6 -0
  12. package/dist/audit/file-sink.js +21 -0
  13. package/dist/audit/file-sink.js.map +1 -0
  14. package/dist/audit/ids.d.ts +3 -0
  15. package/dist/audit/ids.js +15 -0
  16. package/dist/audit/ids.js.map +1 -0
  17. package/dist/audit/types.d.ts +13 -0
  18. package/dist/audit/types.js +2 -0
  19. package/dist/audit/types.js.map +1 -0
  20. package/dist/cli/commands.d.ts +31 -0
  21. package/dist/cli/commands.js +433 -0
  22. package/dist/cli/commands.js.map +1 -0
  23. package/dist/cli/logger.d.ts +57 -0
  24. package/dist/cli/logger.js +79 -0
  25. package/dist/cli/logger.js.map +1 -0
  26. package/dist/cli/output.d.ts +59 -0
  27. package/dist/cli/output.js +306 -0
  28. package/dist/cli/output.js.map +1 -0
  29. package/dist/cli/prompt.d.ts +29 -0
  30. package/dist/cli/prompt.js +197 -0
  31. package/dist/cli/prompt.js.map +1 -0
  32. package/dist/cli/repl.d.ts +4 -0
  33. package/dist/cli/repl.js +486 -0
  34. package/dist/cli/repl.js.map +1 -0
  35. package/dist/commands/init.d.ts +4 -0
  36. package/dist/commands/init.js +84 -0
  37. package/dist/commands/init.js.map +1 -0
  38. package/dist/commands/model.d.ts +3 -0
  39. package/dist/commands/model.js +178 -0
  40. package/dist/commands/model.js.map +1 -0
  41. package/dist/commands/plugin-init.d.ts +23 -0
  42. package/dist/commands/plugin-init.js +303 -0
  43. package/dist/commands/plugin-init.js.map +1 -0
  44. package/dist/commands/provider-auth.d.ts +14 -0
  45. package/dist/commands/provider-auth.js +153 -0
  46. package/dist/commands/provider-auth.js.map +1 -0
  47. package/dist/config/manager.d.ts +71 -0
  48. package/dist/config/manager.js +201 -0
  49. package/dist/config/manager.js.map +1 -0
  50. package/dist/config/types.d.ts +43 -0
  51. package/dist/config/types.js +2 -0
  52. package/dist/config/types.js.map +1 -0
  53. package/dist/errors.d.ts +37 -0
  54. package/dist/errors.js +55 -0
  55. package/dist/errors.js.map +1 -0
  56. package/dist/index.d.ts +2 -0
  57. package/dist/index.js +207 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/llm/anthropic.d.ts +83 -0
  60. package/dist/llm/anthropic.js +190 -0
  61. package/dist/llm/anthropic.js.map +1 -0
  62. package/dist/llm/factory.d.ts +105 -0
  63. package/dist/llm/factory.js +164 -0
  64. package/dist/llm/factory.js.map +1 -0
  65. package/dist/llm/openai-codex.d.ts +102 -0
  66. package/dist/llm/openai-codex.js +445 -0
  67. package/dist/llm/openai-codex.js.map +1 -0
  68. package/dist/llm/openai.d.ts +71 -0
  69. package/dist/llm/openai.js +289 -0
  70. package/dist/llm/openai.js.map +1 -0
  71. package/dist/llm/provider.d.ts +1 -0
  72. package/dist/llm/provider.js +2 -0
  73. package/dist/llm/provider.js.map +1 -0
  74. package/dist/llm/types.d.ts +72 -0
  75. package/dist/llm/types.js +2 -0
  76. package/dist/llm/types.js.map +1 -0
  77. package/dist/mcp/bridge.d.ts +17 -0
  78. package/dist/mcp/bridge.js +74 -0
  79. package/dist/mcp/bridge.js.map +1 -0
  80. package/dist/mcp/config.d.ts +10 -0
  81. package/dist/mcp/config.js +27 -0
  82. package/dist/mcp/config.js.map +1 -0
  83. package/dist/mcp/manager.d.ts +67 -0
  84. package/dist/mcp/manager.js +207 -0
  85. package/dist/mcp/manager.js.map +1 -0
  86. package/dist/memory/scope.d.ts +4 -0
  87. package/dist/memory/scope.js +14 -0
  88. package/dist/memory/scope.js.map +1 -0
  89. package/dist/memory/store.d.ts +28 -0
  90. package/dist/memory/store.js +126 -0
  91. package/dist/memory/store.js.map +1 -0
  92. package/dist/prompts/system.d.ts +4 -0
  93. package/dist/prompts/system.js +197 -0
  94. package/dist/prompts/system.js.map +1 -0
  95. package/dist/skills/loader.d.ts +25 -0
  96. package/dist/skills/loader.js +98 -0
  97. package/dist/skills/loader.js.map +1 -0
  98. package/dist/skills/registry.d.ts +57 -0
  99. package/dist/skills/registry.js +132 -0
  100. package/dist/skills/registry.js.map +1 -0
  101. package/dist/skills/sync.d.ts +33 -0
  102. package/dist/skills/sync.js +180 -0
  103. package/dist/skills/sync.js.map +1 -0
  104. package/dist/skills/types.d.ts +1 -0
  105. package/dist/skills/types.js +2 -0
  106. package/dist/skills/types.js.map +1 -0
  107. package/dist/tools/ask.d.ts +30 -0
  108. package/dist/tools/ask.js +60 -0
  109. package/dist/tools/ask.js.map +1 -0
  110. package/dist/tools/confirmation.d.ts +12 -0
  111. package/dist/tools/confirmation.js +75 -0
  112. package/dist/tools/confirmation.js.map +1 -0
  113. package/dist/tools/plugin-init.d.ts +29 -0
  114. package/dist/tools/plugin-init.js +47 -0
  115. package/dist/tools/plugin-init.js.map +1 -0
  116. package/dist/tools/registry.d.ts +56 -0
  117. package/dist/tools/registry.js +123 -0
  118. package/dist/tools/registry.js.map +1 -0
  119. package/dist/tools/safety.d.ts +2 -0
  120. package/dist/tools/safety.js +30 -0
  121. package/dist/tools/safety.js.map +1 -0
  122. package/dist/tools/server.d.ts +91 -0
  123. package/dist/tools/server.js +149 -0
  124. package/dist/tools/server.js.map +1 -0
  125. package/dist/tools/shell.d.ts +11 -0
  126. package/dist/tools/shell.js +174 -0
  127. package/dist/tools/shell.js.map +1 -0
  128. package/dist/tools/skills-sync.d.ts +19 -0
  129. package/dist/tools/skills-sync.js +29 -0
  130. package/dist/tools/skills-sync.js.map +1 -0
  131. package/dist/tools/ssh.d.ts +62 -0
  132. package/dist/tools/ssh.js +343 -0
  133. package/dist/tools/ssh.js.map +1 -0
  134. package/dist/tools/types.d.ts +10 -0
  135. package/dist/tools/types.js +2 -0
  136. package/dist/tools/types.js.map +1 -0
  137. package/dist/utils/retry.d.ts +7 -0
  138. package/dist/utils/retry.js +34 -0
  139. package/dist/utils/retry.js.map +1 -0
  140. package/install.sh +171 -0
  141. package/package.json +49 -0
@@ -0,0 +1,433 @@
1
+ // @ts-nocheck
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { loadServers, saveServers } from '../config/manager.js';
5
+ import { syncSkills } from '../skills/sync.js';
6
+ import { CancelError, promptQuestion, promptChoice } from './prompt.js';
7
+ import { modelInfo, modelSet, modelAuth } from '../commands/model.js';
8
+ import { pluginInitCore } from '../commands/plugin-init.js';
9
+ export const COMMAND_TREE = [
10
+ {
11
+ name: 'skills',
12
+ description: '管理 Skills',
13
+ subCommands: [
14
+ { name: 'list', description: '列出所有 Skills' },
15
+ { name: 'sync', description: '手动同步远程 Skills' },
16
+ ],
17
+ },
18
+ {
19
+ name: 'server',
20
+ description: '管理 SSH 服务器',
21
+ subCommands: [
22
+ { name: 'list', description: '列出所有服务器' },
23
+ { name: 'add', description: '添加新服务器' },
24
+ { name: 'remove', description: '删除指定服务器' },
25
+ ],
26
+ },
27
+ {
28
+ name: 'plugin',
29
+ description: 'ONES 插件开发助手',
30
+ subCommands: [
31
+ { name: 'init', description: '初始化新插件项目' },
32
+ ],
33
+ },
34
+ {
35
+ name: 'model',
36
+ description: '管理 LLM 模型配置',
37
+ subCommands: [
38
+ { name: 'set', description: '切换 Provider 和模型' },
39
+ { name: 'auth', description: '配置 Provider 授权' },
40
+ ],
41
+ },
42
+ { name: 'clear', description: '清空对话历史' },
43
+ { name: 'exit', description: '退出 ONESCLAW CLI' },
44
+ { name: 'help', description: '显示帮助信息' },
45
+ ];
46
+ /**
47
+ * 根据当前输入计算候选列表
48
+ * @param input 当前输入(含 /),保留尾部空格用于触发子命令候选
49
+ */
50
+ export function getCommandCandidates(input) {
51
+ if (!input.startsWith('/'))
52
+ return [];
53
+ const body = input.slice(1); // 去掉 /
54
+ const hasSpace = body.includes(' ');
55
+ if (!hasSpace) {
56
+ // 主命令阶段:"/", "/he", "/server"(无空格)
57
+ const prefix = body.toLowerCase();
58
+ return COMMAND_TREE.filter((cmd) => cmd.name.startsWith(prefix)).map((cmd) => ({
59
+ text: `/${cmd.name}`,
60
+ description: cmd.description,
61
+ }));
62
+ }
63
+ // 子命令阶段:"/server ", "/server li" 等(含空格)
64
+ const spaceIndex = body.indexOf(' ');
65
+ const mainName = body.slice(0, spaceIndex).toLowerCase();
66
+ const subInput = body.slice(spaceIndex + 1).trimStart().toLowerCase();
67
+ const mainCmd = COMMAND_TREE.find((c) => c.name === mainName);
68
+ if (!mainCmd?.subCommands)
69
+ return [];
70
+ return mainCmd.subCommands
71
+ .filter((sub) => sub.name.startsWith(subInput))
72
+ .map((sub) => ({
73
+ text: `/${mainName} ${sub.name}`,
74
+ description: sub.description,
75
+ }));
76
+ }
77
+ // ─── Command Execution ───────────────────────────────────────
78
+ /**
79
+ * 判断输入是否为斜杠命令
80
+ * 仅当 "/" 后的第一个词匹配已知命令名时才返回 true,
81
+ * 避免将文件路径(如 /tmp/...)误判为斜杠命令。
82
+ */
83
+ export function isSlashCommand(input) {
84
+ if (!input.startsWith('/'))
85
+ return false;
86
+ const rest = input.slice(1).trim();
87
+ // 单独输入 "/" 视为斜杠命令(显示帮助提示)
88
+ if (!rest)
89
+ return true;
90
+ const mainCmd = rest.split(/[\s/]/)[0]?.toLowerCase();
91
+ return COMMAND_TREE.some((cmd) => cmd.name === mainCmd);
92
+ }
93
+ /**
94
+ * 处理斜杠命令
95
+ * @returns false 表示应退出 REPL 循环
96
+ */
97
+ export async function handleSlashCommand(input, context) {
98
+ const parts = input.trim().split(/\s+/);
99
+ const command = parts[0].toLowerCase();
100
+ switch (command) {
101
+ case '/help':
102
+ printHelp();
103
+ return true;
104
+ case '/model':
105
+ return handleModelCommand(parts.slice(1), context);
106
+ case '/skills':
107
+ return handleSkillsCommand(parts.slice(1), context);
108
+ case '/server':
109
+ return handleServerCommand(parts.slice(1), context);
110
+ case '/plugin':
111
+ return handlePluginCommand(parts.slice(1), context);
112
+ case '/clear':
113
+ context.agentLoop.clearHistory();
114
+ console.log(chalk.green(' ✓ 对话历史已清空'));
115
+ return true;
116
+ case '/exit':
117
+ console.log(chalk.gray(' 再见 👋'));
118
+ return false;
119
+ default:
120
+ console.log(chalk.yellow(` 未知命令: ${command}`) +
121
+ chalk.gray(',输入 /help 查看可用命令'));
122
+ return true;
123
+ }
124
+ }
125
+ // ─── /help ────────────────────────────────────────────────────
126
+ function printHelp() {
127
+ console.log();
128
+ console.log(chalk.bold(' 可用命令:'));
129
+ console.log();
130
+ for (const cmd of COMMAND_TREE) {
131
+ if (cmd.subCommands) {
132
+ for (const sub of cmd.subCommands) {
133
+ const full = `/${cmd.name} ${sub.name}`;
134
+ console.log(` ${chalk.cyan(full.padEnd(22))}${sub.description}`);
135
+ }
136
+ }
137
+ else {
138
+ console.log(` ${chalk.cyan(`/${cmd.name}`.padEnd(22))}${cmd.description}`);
139
+ }
140
+ }
141
+ console.log();
142
+ console.log(chalk.gray(' 直接输入文本与 AI Agent 对话'));
143
+ console.log();
144
+ }
145
+ // ─── /skills ──────────────────────────────────────────────────
146
+ function printSkills(skills) {
147
+ if (skills.length === 0) {
148
+ console.log(chalk.yellow('\n 没有可用的 Skills\n'));
149
+ return;
150
+ }
151
+ const normalized = skills.map((skill) => ({
152
+ name: typeof skill.name === 'string' && skill.name.trim() ? skill.name.trim() : '(unnamed)',
153
+ version: typeof skill.version === 'string' && skill.version.trim() ? skill.version.trim() : '-',
154
+ domain: typeof skill.domain === 'string' && skill.domain.trim() ? skill.domain.trim() : 'general',
155
+ description: typeof skill.description === 'string' ? skill.description : '',
156
+ }));
157
+ console.log();
158
+ console.log(chalk.bold(' Available Skills:'));
159
+ console.log();
160
+ // 计算列宽
161
+ const nameWidth = Math.max(6, ...normalized.map((s) => s.name.length));
162
+ const versionWidth = Math.max(7, ...normalized.map((s) => s.version.length));
163
+ const domainWidth = Math.max(8, ...normalized.map((s) => s.domain.length));
164
+ // 表头
165
+ console.log(` ${chalk.gray('Name'.padEnd(nameWidth + 2))}` +
166
+ `${chalk.gray('Version'.padEnd(versionWidth + 2))}` +
167
+ `${chalk.gray('Domain'.padEnd(domainWidth + 2))}` +
168
+ `${chalk.gray('Description')}`);
169
+ console.log(chalk.gray(` ${'─'.repeat(nameWidth + versionWidth + domainWidth + 46)}`));
170
+ // 行
171
+ for (const skill of normalized) {
172
+ const desc = skill.description.length > 40
173
+ ? skill.description.slice(0, 40) + '...'
174
+ : skill.description;
175
+ console.log(` ${skill.name.padEnd(nameWidth + 2)}` +
176
+ `${chalk.green(skill.version.padEnd(versionWidth + 2))}` +
177
+ `${chalk.cyan(skill.domain.padEnd(domainWidth + 2))}` +
178
+ `${chalk.gray(desc)}`);
179
+ }
180
+ console.log();
181
+ }
182
+ // ─── /skills ─────────────────────────────────────────────────
183
+ async function handleSkillsCommand(args, context) {
184
+ const subCommand = args[0]?.toLowerCase();
185
+ switch (subCommand) {
186
+ case 'sync':
187
+ return skillsSync(context);
188
+ case 'list':
189
+ case undefined:
190
+ printSkills(context.skills);
191
+ return true;
192
+ default:
193
+ console.log(chalk.yellow(` 未知子命令: ${subCommand}`) +
194
+ chalk.gray(',可用: list, sync'));
195
+ return true;
196
+ }
197
+ }
198
+ async function skillsSync(context) {
199
+ const spinner = ora({ text: '同步 Skills...', indent: 2, discardStdin: false });
200
+ spinner.start();
201
+ try {
202
+ const result = await syncSkills(context.config);
203
+ if (result.success) {
204
+ spinner.succeed(`Skills 已同步 (${result.skillCount} 个技能)`);
205
+ // 重新加载 skills
206
+ context.skills = await context.reloadSkills();
207
+ }
208
+ else {
209
+ spinner.fail(`Skills 同步失败: ${result.error}`);
210
+ }
211
+ }
212
+ catch (error) {
213
+ spinner.fail(`Skills 同步失败: ${error instanceof Error ? error.message : String(error)}`);
214
+ }
215
+ return true;
216
+ }
217
+ // ─── /model ──────────────────────────────────────────────────
218
+ async function handleModelCommand(args, context) {
219
+ const subCommand = args[0]?.toLowerCase();
220
+ try {
221
+ switch (subCommand) {
222
+ case 'set':
223
+ await modelSet(context.rl, context.config, context.switchLLMProvider);
224
+ return true;
225
+ case 'auth':
226
+ await modelAuth(context.rl, context.config, context.switchLLMProvider);
227
+ return true;
228
+ case undefined:
229
+ await modelInfo(context.config);
230
+ return true;
231
+ default:
232
+ console.log(chalk.yellow(` 未知子命令: ${subCommand}`) +
233
+ chalk.gray(',可用: set, auth'));
234
+ return true;
235
+ }
236
+ }
237
+ catch (error) {
238
+ if (error instanceof CancelError) {
239
+ console.log();
240
+ return true;
241
+ }
242
+ throw error;
243
+ }
244
+ }
245
+ // ─── /server ──────────────────────────────────────────────────
246
+ async function handleServerCommand(args, context) {
247
+ const subCommand = args[0]?.toLowerCase();
248
+ switch (subCommand) {
249
+ case 'list':
250
+ case undefined:
251
+ await serverList();
252
+ return true;
253
+ case 'add':
254
+ return serverAdd(context.rl);
255
+ case 'remove': {
256
+ const name = args[1];
257
+ if (!name) {
258
+ console.log(chalk.yellow(' 用法: /server remove <name>'));
259
+ return true;
260
+ }
261
+ await serverRemove(name);
262
+ return true;
263
+ }
264
+ default:
265
+ console.log(chalk.yellow(` 未知子命令: ${subCommand}`) +
266
+ chalk.gray(',可用: list, add, remove'));
267
+ return true;
268
+ }
269
+ }
270
+ async function serverList() {
271
+ const { servers } = await loadServers();
272
+ if (servers.length === 0) {
273
+ console.log(chalk.yellow('\n 没有已配置的服务器,使用 /server add 添加\n'));
274
+ return;
275
+ }
276
+ console.log();
277
+ console.log(chalk.bold(' SSH 服务器:'));
278
+ console.log();
279
+ const nameWidth = Math.max(6, ...servers.map((s) => s.name.length));
280
+ const hostWidth = Math.max(6, ...servers.map((s) => s.host.length));
281
+ const userWidth = Math.max(6, ...servers.map((s) => s.user.length));
282
+ const authWidth = 10;
283
+ console.log(` ${chalk.gray('Name'.padEnd(nameWidth + 2))}` +
284
+ `${chalk.gray('Host'.padEnd(hostWidth + 2))}` +
285
+ `${chalk.gray('User'.padEnd(userWidth + 2))}` +
286
+ `${chalk.gray('Port')} ` +
287
+ `${chalk.gray('Auth'.padEnd(authWidth))}` +
288
+ `${chalk.gray('Description')}`);
289
+ console.log(chalk.gray(` ${'─'.repeat(nameWidth + hostWidth + userWidth + authWidth + 30)}`));
290
+ for (const s of servers) {
291
+ const auth = s.auth_type === 'password' ? 'password' : 'ssh-key';
292
+ console.log(` ${s.name.padEnd(nameWidth + 2)}` +
293
+ `${s.host.padEnd(hostWidth + 2)}` +
294
+ `${s.user.padEnd(userWidth + 2)}` +
295
+ `${String(s.port).padEnd(6)}` +
296
+ `${auth.padEnd(authWidth)}` +
297
+ `${chalk.gray(s.description || '')}`);
298
+ }
299
+ console.log();
300
+ }
301
+ async function serverAdd(rl) {
302
+ try {
303
+ console.log();
304
+ console.log(chalk.gray(' 添加服务器 [按 ESC 键取消]'));
305
+ console.log();
306
+ const name = await promptQuestion(rl, chalk.cyan(' Server name: '));
307
+ if (!name) {
308
+ console.log(chalk.yellow(' 服务器名称不能为空'));
309
+ return true;
310
+ }
311
+ const host = await promptQuestion(rl, chalk.cyan(' Host: '));
312
+ if (!host) {
313
+ console.log(chalk.yellow(' 主机地址不能为空'));
314
+ return true;
315
+ }
316
+ const userInput = await promptQuestion(rl, chalk.cyan(' User [root]: '));
317
+ const user = userInput || 'root';
318
+ const portInput = await promptQuestion(rl, chalk.cyan(' Port [22]: '));
319
+ const port = portInput ? parseInt(portInput, 10) : 22;
320
+ if (isNaN(port)) {
321
+ console.log(chalk.yellow(' 端口号无效'));
322
+ return true;
323
+ }
324
+ // 认证方式选择
325
+ console.log();
326
+ console.log(chalk.cyan(' Auth method:'));
327
+ const authIdx = await promptChoice(rl, '', [
328
+ 'SSH Key',
329
+ 'Password',
330
+ ], 0);
331
+ const authType = authIdx === 1 ? 'password' : 'ssh-key';
332
+ let identity_file;
333
+ let password;
334
+ if (authType === 'ssh-key') {
335
+ const identityInput = await promptQuestion(rl, chalk.cyan(' Identity file [~/.ssh/id_rsa]: '));
336
+ identity_file = identityInput || '~/.ssh/id_rsa';
337
+ }
338
+ else {
339
+ password = await promptQuestion(rl, chalk.cyan(' Password: '));
340
+ if (!password) {
341
+ console.log(chalk.yellow(' 密码不能为空'));
342
+ return true;
343
+ }
344
+ }
345
+ const description = await promptQuestion(rl, chalk.cyan(' Description: '));
346
+ // 保存
347
+ const config = await loadServers();
348
+ // 检查重名
349
+ if (config.servers.some((s) => s.name === name)) {
350
+ console.log(chalk.yellow(`\n 服务器 "${name}" 已存在,请使用其他名称\n`));
351
+ return true;
352
+ }
353
+ config.servers.push({
354
+ name,
355
+ host,
356
+ user,
357
+ port,
358
+ auth_type: authType,
359
+ identity_file,
360
+ password,
361
+ description,
362
+ });
363
+ await saveServers(config);
364
+ console.log(chalk.green(`\n ✓ Server "${name}" added successfully\n`));
365
+ return true;
366
+ }
367
+ catch (error) {
368
+ if (error instanceof CancelError) {
369
+ // ESC 取消,静默返回
370
+ console.log();
371
+ return true;
372
+ }
373
+ throw error;
374
+ }
375
+ }
376
+ async function serverRemove(name) {
377
+ const config = await loadServers();
378
+ const index = config.servers.findIndex((s) => s.name === name);
379
+ if (index === -1) {
380
+ console.log(chalk.yellow(`\n 未找到服务器: ${name}\n`));
381
+ return;
382
+ }
383
+ config.servers.splice(index, 1);
384
+ await saveServers(config);
385
+ console.log(chalk.green(`\n ✓ Server "${name}" removed\n`));
386
+ }
387
+ // ─── /plugin ─────────────────────────────────────────────────
388
+ async function handlePluginCommand(args, context) {
389
+ const subCommand = args[0]?.toLowerCase();
390
+ switch (subCommand) {
391
+ case 'init':
392
+ return pluginInit(context.rl);
393
+ case undefined:
394
+ console.log(chalk.yellow(' 用法: /plugin init') +
395
+ chalk.gray(' 初始化新插件项目'));
396
+ return true;
397
+ default:
398
+ console.log(chalk.yellow(` 未知子命令: ${subCommand}`) +
399
+ chalk.gray(',可用: init'));
400
+ return true;
401
+ }
402
+ }
403
+ async function pluginInit(rl) {
404
+ try {
405
+ console.log();
406
+ console.log(chalk.gray(' [按 ESC 键取消]'));
407
+ console.log();
408
+ // ── 收集插件信息 ────────────────────────────────────────
409
+ const pluginName = await promptQuestion(rl, chalk.cyan(' 插件名称: '));
410
+ if (!pluginName) {
411
+ console.log(chalk.yellow(' 插件名称不能为空'));
412
+ return true;
413
+ }
414
+ const pluginDir = await promptQuestion(rl, chalk.cyan(' 项目目录: ') + chalk.gray('(留空为当前目录) '));
415
+ // ── 调用核心逻辑 ────────────────────────────────────────
416
+ const result = await pluginInitCore({
417
+ pluginName,
418
+ pluginDir: pluginDir || undefined,
419
+ });
420
+ if (!result.success) {
421
+ console.log(chalk.yellow(`\n ${result.message}\n`));
422
+ }
423
+ return true;
424
+ }
425
+ catch (error) {
426
+ if (error instanceof CancelError) {
427
+ console.log();
428
+ return true;
429
+ }
430
+ throw error;
431
+ }
432
+ }
433
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import type { AuditSink } from '../audit/types.js';
2
+ /**
3
+ * 全局日志管理器
4
+ *
5
+ * - debug 级别:仅 debugMode 时输出到 stderr,始终写入日志文件
6
+ * - info/error 级别:始终写入日志文件,不输出到终端
7
+ * - 日志文件:~/.onesclaw/logs/YYYY-MM-DD.log(JSON lines 格式)
8
+ */
9
+ declare class Logger {
10
+ debugMode: boolean;
11
+ sink: any;
12
+ constructor();
13
+ setAuditSink(sink: AuditSink): void;
14
+ /**
15
+ * 设置 debug 模式(由 --debug flag 控制)
16
+ */
17
+ setDebugMode(enabled: boolean): void;
18
+ /**
19
+ * Debug 级别日志
20
+ * debugMode 时输出到 stderr,始终写入文件
21
+ */
22
+ debug(category: string, message: string, data?: unknown): void;
23
+ /**
24
+ * Info 级别日志(仅写入文件)
25
+ */
26
+ info(category: string, message: string, data?: unknown): void;
27
+ /**
28
+ * Error 级别日志(仅写入文件)
29
+ */
30
+ error(category: string, message: string, data?: unknown): void;
31
+ createEntry(level: 'debug' | 'info' | 'error', category: string, message: string, data?: unknown): {
32
+ time: string;
33
+ level: "error" | "debug" | "info";
34
+ category: string;
35
+ message: string;
36
+ session_id: string;
37
+ trace_id: any;
38
+ command_id: any;
39
+ };
40
+ /**
41
+ * 写入日志文件(~/.onesclaw/logs/YYYY-MM-DD.log)
42
+ * 失败时静默忽略,不影响主流程
43
+ */
44
+ writeToFile(entry: {
45
+ time: string;
46
+ level: 'debug' | 'info' | 'error';
47
+ category: string;
48
+ message: string;
49
+ session_id?: string;
50
+ trace_id?: string;
51
+ command_id?: string;
52
+ data?: unknown;
53
+ }): void;
54
+ }
55
+ /** 全局 Logger 单例 */
56
+ export declare const logger: Logger;
57
+ export {};
@@ -0,0 +1,79 @@
1
+ // @ts-nocheck
2
+ import { getLogsDir } from '../config/manager.js';
3
+ import { FileAuditSink } from '../audit/file-sink.js';
4
+ import { getSessionId } from '../audit/ids.js';
5
+ import chalk from 'chalk';
6
+ /**
7
+ * 全局日志管理器
8
+ *
9
+ * - debug 级别:仅 debugMode 时输出到 stderr,始终写入日志文件
10
+ * - info/error 级别:始终写入日志文件,不输出到终端
11
+ * - 日志文件:~/.onesclaw/logs/YYYY-MM-DD.log(JSON lines 格式)
12
+ */
13
+ class Logger {
14
+ debugMode = false;
15
+ sink;
16
+ constructor() {
17
+ this.sink = new FileAuditSink(getLogsDir());
18
+ }
19
+ setAuditSink(sink) {
20
+ this.sink = sink;
21
+ }
22
+ /**
23
+ * 设置 debug 模式(由 --debug flag 控制)
24
+ */
25
+ setDebugMode(enabled) {
26
+ this.debugMode = enabled;
27
+ }
28
+ /**
29
+ * Debug 级别日志
30
+ * debugMode 时输出到 stderr,始终写入文件
31
+ */
32
+ debug(category, message, data) {
33
+ const entry = this.createEntry('debug', category, message, data);
34
+ this.writeToFile(entry);
35
+ if (this.debugMode) {
36
+ process.stderr.write(chalk.gray(`[debug:${category}] ${message}`) + '\n');
37
+ }
38
+ }
39
+ /**
40
+ * Info 级别日志(仅写入文件)
41
+ */
42
+ info(category, message, data) {
43
+ const entry = this.createEntry('info', category, message, data);
44
+ this.writeToFile(entry);
45
+ }
46
+ /**
47
+ * Error 级别日志(仅写入文件)
48
+ */
49
+ error(category, message, data) {
50
+ const entry = this.createEntry('error', category, message, data);
51
+ this.writeToFile(entry);
52
+ }
53
+ createEntry(level, category, message, data) {
54
+ const payload = data && typeof data === 'object' ? data : undefined;
55
+ const entry = {
56
+ time: new Date().toISOString(),
57
+ level,
58
+ category,
59
+ message,
60
+ session_id: getSessionId(),
61
+ trace_id: payload?.trace_id,
62
+ command_id: payload?.command_id,
63
+ };
64
+ if (data) {
65
+ entry.data = data;
66
+ }
67
+ return entry;
68
+ }
69
+ /**
70
+ * 写入日志文件(~/.onesclaw/logs/YYYY-MM-DD.log)
71
+ * 失败时静默忽略,不影响主流程
72
+ */
73
+ writeToFile(entry) {
74
+ this.sink.write(entry);
75
+ }
76
+ }
77
+ /** 全局 Logger 单例 */
78
+ export const logger = new Logger();
79
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/cli/logger.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B;;;;;;GAMG;AACH,MAAM,MAAM;IACR,SAAS,GAAG,KAAK,CAAC;IAClB,IAAI,CAAC;IACL;QACI,IAAI,CAAC,IAAI,GAAG,IAAI,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,YAAY,CAAC,IAAe;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IACD;;OAEG;IACH,YAAY,CAAC,OAAgB;QACzB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;IAC7B,CAAC;IACD;;;OAGG;IACH,KAAK,CAAC,QAAgB,EAAE,OAAe,EAAE,IAAc;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACjE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,QAAQ,KAAK,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAC9E,CAAC;IACL,CAAC;IACD;;OAEG;IACH,IAAI,CAAC,QAAgB,EAAE,OAAe,EAAE,IAAc;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAChE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IACD;;OAEG;IACH,KAAK,CAAC,QAAgB,EAAE,OAAe,EAAE,IAAc;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACjE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IACD,WAAW,CAAC,KAAiC,EAAE,QAAgB,EAAE,OAAe,EAAE,IAAc;QAC5F,MAAM,OAAO,GAAG,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,MAAM,KAAK,GAAG;YACV,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC9B,KAAK;YACL,QAAQ;YACR,OAAO;YACP,UAAU,EAAE,YAAY,EAAE;YAC1B,QAAQ,EAAE,OAAO,EAAE,QAAQ;YAC3B,UAAU,EAAE,OAAO,EAAE,UAAU;SAClC,CAAC;QACF,IAAI,IAAI,EAAE,CAAC;YACP,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IACD;;;OAGG;IACH,WAAW,CAAC,KASX;QACG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;CACJ;AACD,mBAAmB;AACnB,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * 计算字符串在终端中的显示宽度(列数)
3
+ * 全角字符(CJK 等)占 2 列,其余占 1 列
4
+ */
5
+ export declare function getDisplayWidth(str: any): number;
6
+ /**
7
+ * 将 Markdown 文本渲染为终端 ANSI 格式
8
+ */
9
+ export declare function renderMarkdown(text: any): any;
10
+ /**
11
+ * 计算从当前光标位置需要向上移动多少行才能回到文本起始行
12
+ *
13
+ * 关键:如果文本以 \n 结尾,split 产生的尾部空字符串不代表可见行,
14
+ * 但光标已在新行,所以需要向上移 N 行(N = 可见行数)。
15
+ * 如果文本不以 \n 结尾,光标在最后一行末尾,向上移 N-1 行。
16
+ *
17
+ * 返回 { rows, needCR }:
18
+ * - rows:需要 \x1b[{rows}A 的值
19
+ * - needCR:是否需要先 \r 到行首
20
+ */
21
+ export declare function computeCursorRewind(text: any): {
22
+ rows: number;
23
+ needCR: boolean;
24
+ };
25
+ /**
26
+ * 输出启动横幅
27
+ * 显示 ONESCLAW Logo、版本信息、当前用户、MCP 连接状态、Skills 状态
28
+ */
29
+ export declare function printBanner(version: any, user: any, connectedServers: any, skillsInfo: any, model: any): void;
30
+ /**
31
+ * 实时输出流式文本到终端
32
+ * 不换行,支持逐字符/逐块追加
33
+ */
34
+ export declare function streamText(text: any): void;
35
+ /**
36
+ * 输出工具调用信息(灰色,低视觉干扰)
37
+ * 格式:→ name(args_summary)
38
+ */
39
+ export declare function printToolCall(name: any, args: any): void;
40
+ /**
41
+ * 输出工具执行结果摘要
42
+ */
43
+ export declare function printToolResult(name: any, result: any, isError: any): void;
44
+ /**
45
+ * 输出错误信息
46
+ * debug 模式下额外输出 stack trace
47
+ */
48
+ export declare function printError(error: any, debug?: boolean): void;
49
+ /**
50
+ * 创建加载动画 spinner
51
+ */
52
+ export declare function createSpinner(text: any): import("ora").Ora;
53
+ export declare function createTimedSpinner(text: any): {
54
+ start(): void;
55
+ update(newText: any): void;
56
+ stop(): void;
57
+ succeed(msg: any): void;
58
+ fail(msg: any): void;
59
+ };