ysagc-agent 0.2.0 → 0.4.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 (58) hide show
  1. package/README.md +36 -66
  2. package/dist/agent.d.ts +17 -0
  3. package/dist/agent.d.ts.map +1 -0
  4. package/dist/agent.js +293 -0
  5. package/dist/agent.js.map +1 -0
  6. package/dist/cli.d.ts +14 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +267 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/config.d.ts +52 -0
  11. package/dist/config.d.ts.map +1 -0
  12. package/dist/config.js +135 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/executor.d.ts +46 -0
  15. package/dist/executor.d.ts.map +1 -0
  16. package/dist/executor.js +397 -0
  17. package/dist/executor.js.map +1 -0
  18. package/dist/index.d.ts +19 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +34 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/logger.d.ts +37 -0
  23. package/dist/logger.d.ts.map +1 -0
  24. package/dist/logger.js +121 -0
  25. package/dist/logger.js.map +1 -0
  26. package/dist/path-utils.d.ts +44 -0
  27. package/dist/path-utils.d.ts.map +1 -0
  28. package/dist/path-utils.js +206 -0
  29. package/dist/path-utils.js.map +1 -0
  30. package/dist/protocol.d.ts +77 -0
  31. package/dist/protocol.d.ts.map +1 -0
  32. package/dist/protocol.js +94 -0
  33. package/dist/protocol.js.map +1 -0
  34. package/dist/security.d.ts +32 -0
  35. package/dist/security.d.ts.map +1 -0
  36. package/dist/security.js +228 -0
  37. package/dist/security.js.map +1 -0
  38. package/dist/tools.d.ts +36 -0
  39. package/dist/tools.d.ts.map +1 -0
  40. package/dist/tools.js +498 -0
  41. package/dist/tools.js.map +1 -0
  42. package/package.json +36 -21
  43. package/src/config.js +0 -94
  44. package/src/http-fs.js +0 -178
  45. package/src/index.js +0 -439
  46. package/src/logger.js +0 -84
  47. package/src/methods/dialog.js +0 -84
  48. package/src/methods/fs.js +0 -674
  49. package/src/methods/git.js +0 -391
  50. package/src/methods/project.js +0 -57
  51. package/src/methods/scaffold.js +0 -131
  52. package/src/methods/skill.js +0 -347
  53. package/src/methods/system.js +0 -82
  54. package/src/methods/terminal.js +0 -234
  55. package/src/origin.js +0 -38
  56. package/src/pairing.js +0 -168
  57. package/src/rpc.js +0 -62
  58. package/src/sandbox.js +0 -178
package/dist/tools.js ADDED
@@ -0,0 +1,498 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ToolError = void 0;
37
+ exports.createToolRegistry = createToolRegistry;
38
+ const fs = __importStar(require("node:fs"));
39
+ const path = __importStar(require("node:path"));
40
+ const path_utils_1 = require("./path-utils");
41
+ const security_1 = require("./security");
42
+ const executor_1 = require("./executor");
43
+ /** Thrown when a tool invocation is invalid or unsafe. */
44
+ class ToolError extends Error {
45
+ constructor(code, message) {
46
+ super(message);
47
+ this.name = 'ToolError';
48
+ this.code = code;
49
+ }
50
+ }
51
+ exports.ToolError = ToolError;
52
+ const MAX_WRITE_BYTES = 10 * 1024 * 1024;
53
+ // ---------------------------------------------------------------------------
54
+ // argument coercion helpers
55
+ // ---------------------------------------------------------------------------
56
+ function requireString(args, key) {
57
+ const v = args[key];
58
+ if (typeof v !== 'string' || v.trim() === '') {
59
+ throw new ToolError('INVALID_ARG', `"${key}" is required and must be a non-empty string.`);
60
+ }
61
+ return v;
62
+ }
63
+ function optionalString(args, key, fallback) {
64
+ const v = args[key];
65
+ if (v === undefined || v === null)
66
+ return fallback;
67
+ if (typeof v !== 'string') {
68
+ throw new ToolError('INVALID_ARG', `"${key}" must be a string.`);
69
+ }
70
+ return v;
71
+ }
72
+ function optionalInt(args, key, fallback, opts = {}) {
73
+ const v = args[key];
74
+ if (v === undefined || v === null)
75
+ return fallback;
76
+ const n = typeof v === 'number' ? v : Number(v);
77
+ if (!Number.isFinite(n) || !Number.isInteger(n)) {
78
+ throw new ToolError('INVALID_ARG', `"${key}" must be an integer.`);
79
+ }
80
+ if (opts.min !== undefined && n < opts.min) {
81
+ throw new ToolError('INVALID_ARG', `"${key}" must be >= ${opts.min}.`);
82
+ }
83
+ if (opts.max !== undefined && n > opts.max) {
84
+ throw new ToolError('INVALID_ARG', `"${key}" must be <= ${opts.max}.`);
85
+ }
86
+ return n;
87
+ }
88
+ function requiredArray(args, key) {
89
+ const v = args[key];
90
+ if (!Array.isArray(v)) {
91
+ throw new ToolError('INVALID_ARG', `"${key}" must be an array.`);
92
+ }
93
+ return v;
94
+ }
95
+ function abortIfRequested(signal) {
96
+ if (signal?.aborted) {
97
+ throw new ToolError('ABORTED', 'Operation was cancelled.');
98
+ }
99
+ }
100
+ function assertNotRoot(realRoot, target) {
101
+ if (path.relative(realRoot, target) === '') {
102
+ throw new ToolError('ROOT_PATH', 'The authorisation root itself cannot be written as a file.');
103
+ }
104
+ }
105
+ function assertNotSensitive(target) {
106
+ if ((0, security_1.isSensitivePath)(target)) {
107
+ throw new ToolError('SENSITIVE_PATH', `Path is sensitive and cannot be accessed: ${target}`);
108
+ }
109
+ }
110
+ function isUtf8(buf) {
111
+ try {
112
+ new TextDecoder('utf-8', { fatal: true }).decode(buf);
113
+ return true;
114
+ }
115
+ catch {
116
+ return false;
117
+ }
118
+ }
119
+ function readUpTo(target, length) {
120
+ const fd = fs.openSync(target, 'r');
121
+ try {
122
+ const buf = Buffer.alloc(length);
123
+ const bytesRead = fs.readSync(fd, buf, 0, length, 0);
124
+ return buf.subarray(0, Math.max(0, bytesRead));
125
+ }
126
+ finally {
127
+ fs.closeSync(fd);
128
+ }
129
+ }
130
+ function rel(root, target) {
131
+ return path.relative(root, target).replace(/\\/g, '/');
132
+ }
133
+ function shellQuote(arg) {
134
+ if (arg === '')
135
+ return `''`;
136
+ // Commands are run through a shell on Windows; safer to reject metacharacters.
137
+ if (/[|&;<>`\n]/.test(arg)) {
138
+ throw new ToolError('UNSAFE_ARG', 'git argument contains shell metacharacters.');
139
+ }
140
+ if (/[\s]/.test(arg)) {
141
+ return `"${arg.replace(/"/g, '\\"')}"`;
142
+ }
143
+ return arg;
144
+ }
145
+ // ---------------------------------------------------------------------------
146
+ // executors
147
+ // ---------------------------------------------------------------------------
148
+ const listDir = async (ctx, args) => {
149
+ const p = optionalString(args, 'path', '.') ?? '.';
150
+ const depth = optionalInt(args, 'depth', 1, { min: 0, max: 10 });
151
+ const realRoot = (0, path_utils_1.canonicalize)(ctx.root);
152
+ const target = (0, path_utils_1.safeResolve)(ctx.root, p, realRoot, { allowEqual: true });
153
+ assertNotSensitive(target);
154
+ let stat;
155
+ try {
156
+ stat = fs.statSync(target);
157
+ }
158
+ catch {
159
+ throw new ToolError('NOT_FOUND', `Path does not exist: ${p}`);
160
+ }
161
+ if (!stat.isDirectory()) {
162
+ throw new ToolError('NOT_A_DIR', `Path is not a directory: ${p}`);
163
+ }
164
+ const entries = [];
165
+ const walkDepth = (dir, cur) => {
166
+ if (cur >= depth)
167
+ return;
168
+ let names;
169
+ try {
170
+ names = fs.readdirSync(dir);
171
+ }
172
+ catch {
173
+ return;
174
+ }
175
+ for (const name of names) {
176
+ const full = path.join(dir, name);
177
+ let st;
178
+ try {
179
+ st = fs.lstatSync(full);
180
+ }
181
+ catch {
182
+ continue;
183
+ }
184
+ const type = st.isDirectory() ? 'dir' : st.isSymbolicLink() ? 'symlink' : 'file';
185
+ entries.push({
186
+ name,
187
+ path: rel(realRoot, full),
188
+ type,
189
+ ...(st.isFile() ? { size: st.size } : {}),
190
+ mtime: st.mtimeMs,
191
+ });
192
+ if (st.isDirectory() && cur + 1 < depth) {
193
+ walkDepth(full, cur + 1);
194
+ }
195
+ }
196
+ };
197
+ walkDepth(target, 0);
198
+ entries.sort((a, b) => String(a.name).localeCompare(String(b.name)));
199
+ return { ok: true, result: { path: rel(realRoot, target), depth, entries } };
200
+ };
201
+ const readFile = async (ctx, args, signal) => {
202
+ abortIfRequested(signal);
203
+ const targetStr = requireString(args, 'path');
204
+ const maxBytes = optionalInt(args, 'maxBytes', ctx.maxBytes, { min: 1, max: MAX_WRITE_BYTES });
205
+ const realRoot = (0, path_utils_1.canonicalize)(ctx.root);
206
+ const target = (0, path_utils_1.safeResolve)(ctx.root, targetStr, realRoot);
207
+ assertNotSensitive(target);
208
+ let stat;
209
+ try {
210
+ stat = fs.statSync(target);
211
+ }
212
+ catch {
213
+ throw new ToolError('NOT_FOUND', `Path does not exist: ${targetStr}`);
214
+ }
215
+ if (stat.isDirectory()) {
216
+ throw new ToolError('IS_DIR', `Path is a directory, not a file: ${targetStr}`);
217
+ }
218
+ const totalBytes = stat.size;
219
+ const readLen = Math.min(maxBytes + 1, totalBytes);
220
+ const buf = readUpTo(target, readLen);
221
+ const truncated = totalBytes > maxBytes;
222
+ const bytesRead = buf.length;
223
+ const utf8 = isUtf8(buf);
224
+ const content = utf8 ? buf.toString('utf8') : buf.toString('hex');
225
+ return {
226
+ ok: true,
227
+ result: {
228
+ path: rel(realRoot, target),
229
+ bytesRead,
230
+ totalBytes,
231
+ truncated,
232
+ encoding: utf8 ? 'utf8' : 'hex',
233
+ content,
234
+ },
235
+ };
236
+ };
237
+ const writeFile = async (ctx, args, signal) => {
238
+ abortIfRequested(signal);
239
+ const targetStr = requireString(args, 'path');
240
+ const rawContent = args.content ?? args.contents;
241
+ const content = typeof rawContent === 'string' ? rawContent : '';
242
+ if (typeof rawContent !== 'string') {
243
+ throw new ToolError('INVALID_ARG', '"content" must be a string.');
244
+ }
245
+ const mode = optionalInt(args, 'mode', 0o644, { min: 0, max: 0o777 });
246
+ const realRoot = (0, path_utils_1.canonicalize)(ctx.root);
247
+ const target = (0, path_utils_1.safeResolve)(ctx.root, targetStr, realRoot);
248
+ assertNotRoot(realRoot, target);
249
+ assertNotSensitive(target);
250
+ const totalBytes = Buffer.byteLength(content);
251
+ if (totalBytes > MAX_WRITE_BYTES) {
252
+ throw new ToolError('TOO_LARGE', `Content exceeds ${MAX_WRITE_BYTES} bytes.`);
253
+ }
254
+ fs.mkdirSync(path.dirname(target), { recursive: true });
255
+ fs.writeFileSync(target, content, { mode });
256
+ return {
257
+ ok: true,
258
+ result: { path: rel(realRoot, target), bytesWritten: totalBytes, mode },
259
+ };
260
+ };
261
+ const editFile = async (ctx, args, signal) => {
262
+ abortIfRequested(signal);
263
+ const targetStr = requireString(args, 'path');
264
+ const oldText = requireString(args, 'oldText');
265
+ const newText = typeof args.newText === 'string' ? args.newText : '';
266
+ const realRoot = (0, path_utils_1.canonicalize)(ctx.root);
267
+ const target = (0, path_utils_1.safeResolve)(ctx.root, targetStr, realRoot);
268
+ assertNotRoot(realRoot, target);
269
+ assertNotSensitive(target);
270
+ let stat;
271
+ try {
272
+ stat = fs.statSync(target);
273
+ }
274
+ catch {
275
+ throw new ToolError('NOT_FOUND', `Path does not exist: ${targetStr}`);
276
+ }
277
+ if (stat.isDirectory()) {
278
+ throw new ToolError('IS_DIR', `Path is a directory, not a file: ${targetStr}`);
279
+ }
280
+ const buf = fs.readFileSync(target);
281
+ if (!isUtf8(buf)) {
282
+ throw new ToolError('BINARY_FILE', 'edit_file only supports UTF-8 text files.');
283
+ }
284
+ const text = buf.toString('utf8');
285
+ const count = text.split(oldText).length - 1;
286
+ if (count === 0) {
287
+ throw new ToolError('NO_MATCH', 'oldText was not found in the file.');
288
+ }
289
+ fs.writeFileSync(target, text.split(oldText).join(newText), 'utf8');
290
+ return { ok: true, result: { path: rel(realRoot, target), replacements: count } };
291
+ };
292
+ const runCommandTool = async (ctx, args, signal) => {
293
+ const cmd = requireString(args, 'cmd');
294
+ const cwdArg = optionalString(args, 'cwd', '.') ?? '.';
295
+ const timeout = optionalInt(args, 'timeout', ctx.timeoutMs, { min: 1 });
296
+ const realRoot = (0, path_utils_1.canonicalize)(ctx.root);
297
+ const cwd = (0, path_utils_1.safeResolve)(ctx.root, cwdArg, realRoot, { allowEqual: true });
298
+ const assessment = (0, security_1.isDangerCommand)(cmd);
299
+ if (assessment.danger) {
300
+ return {
301
+ ok: false,
302
+ error: `Blocked dangerous command (${assessment.severity}): ${assessment.reason}`,
303
+ };
304
+ }
305
+ if (ctx.mode === 'supervise') {
306
+ return { ok: false, error: 'run_command requires supervision; denied in supervise mode.' };
307
+ }
308
+ try {
309
+ const res = await (0, executor_1.runCommand)({
310
+ command: cmd,
311
+ cwd,
312
+ timeoutMs: timeout,
313
+ maxBytes: ctx.maxBytes,
314
+ signal,
315
+ });
316
+ return {
317
+ ok: true,
318
+ result: {
319
+ exitCode: res.exitCode,
320
+ stdout: (0, security_1.maskSecrets)(res.stdout),
321
+ stderr: (0, security_1.maskSecrets)(res.stderr),
322
+ durationMs: res.durationMs,
323
+ timedOut: res.timedOut,
324
+ truncated: res.truncated,
325
+ ...(res.stdoutFile ? { stdoutFile: res.stdoutFile } : {}),
326
+ ...(res.stderrFile ? { stderrFile: res.stderrFile } : {}),
327
+ },
328
+ };
329
+ }
330
+ catch (err) {
331
+ const msg = err instanceof Error ? err.message : String(err);
332
+ return { ok: false, error: `run_command failed: ${msg}` };
333
+ }
334
+ };
335
+ const webSearch = async (ctx, args) => {
336
+ const query = optionalString(args, 'query', '') ?? '';
337
+ const base = {
338
+ stub: true,
339
+ provider: 'platform',
340
+ // The real search runs platform-side; the local agent never touches a
341
+ // search backend, so it cannot leak anything.
342
+ note: 'Placeholder: real web search is performed by the platform, not the local agent.',
343
+ query,
344
+ results: [],
345
+ };
346
+ if (!ctx.webEnabled) {
347
+ return {
348
+ ok: true,
349
+ result: { ...base, enabled: false, note: 'web_search is disabled on this agent.' },
350
+ };
351
+ }
352
+ return { ok: true, result: { ...base, enabled: true } };
353
+ };
354
+ const git = async (ctx, args, signal) => {
355
+ const realRoot = (0, path_utils_1.canonicalize)(ctx.root);
356
+ const cwdArg = optionalString(args, 'cwd', '.') ?? '.';
357
+ const cwd = (0, path_utils_1.safeResolve)(ctx.root, cwdArg, realRoot, { allowEqual: true });
358
+ const timeout = optionalInt(args, 'timeout', ctx.timeoutMs, { min: 1 });
359
+ let cmdStr;
360
+ if (typeof args.command === 'string' && args.command.trim() !== '') {
361
+ cmdStr = `git ${args.command.trim()}`;
362
+ }
363
+ else if (Array.isArray(args.args)) {
364
+ const parts = requiredArray(args, 'args').map((a) => shellQuote(String(a)));
365
+ cmdStr = ['git', ...parts].join(' ');
366
+ }
367
+ else {
368
+ throw new ToolError('INVALID_ARG', '"git" requires either "args" (array) or "command" (string).');
369
+ }
370
+ const assessment = (0, security_1.isDangerCommand)(cmdStr);
371
+ if (assessment.danger) {
372
+ return { ok: false, error: `Blocked dangerous git command (${assessment.severity}): ${assessment.reason}` };
373
+ }
374
+ if (ctx.mode === 'supervise') {
375
+ return { ok: false, error: 'git requires supervision; denied in supervise mode.' };
376
+ }
377
+ try {
378
+ const res = await (0, executor_1.runCommand)({ command: cmdStr, cwd, timeoutMs: timeout, maxBytes: ctx.maxBytes, signal });
379
+ return {
380
+ ok: true,
381
+ result: {
382
+ exitCode: res.exitCode,
383
+ stdout: (0, security_1.maskSecrets)(res.stdout),
384
+ stderr: (0, security_1.maskSecrets)(res.stderr),
385
+ durationMs: res.durationMs,
386
+ timedOut: res.timedOut,
387
+ truncated: res.truncated,
388
+ ...(res.stdoutFile ? { stdoutFile: res.stdoutFile } : {}),
389
+ ...(res.stderrFile ? { stderrFile: res.stderrFile } : {}),
390
+ },
391
+ };
392
+ }
393
+ catch (err) {
394
+ const msg = err instanceof Error ? err.message : String(err);
395
+ return { ok: false, error: `git failed: ${msg}` };
396
+ }
397
+ };
398
+ const TEMPLATES = {
399
+ node: [
400
+ { path: 'package.json', content: JSON.stringify({ name: 'project', version: '0.0.1', main: 'index.js', scripts: { start: 'node index.js' } }, null, 2) + '\n' },
401
+ { path: 'index.js', content: "console.log('hello from node');\n" },
402
+ { path: 'README.md', content: '# Node project\n\nA generated skeleton.\n' },
403
+ ],
404
+ react: [
405
+ { path: 'index.html', content: '<!doctype html>\n<html><body><div id="root"></div><script src="./src/main.tsx"></script></body></html>\n' },
406
+ { path: 'src/main.tsx', content: "import { createRoot } from 'react-dom/client';\ncreateRoot(document.getElementById('root')!).render(<h1>Hello React</h1>);\n" },
407
+ { path: 'package.json', content: JSON.stringify({ name: 'project', version: '0.0.1', scripts: { dev: 'vite', build: 'vite build' } }, null, 2) + '\n' },
408
+ ],
409
+ vue: [
410
+ { path: 'src/App.vue', content: '<template><h1>Hello Vue</h1></template>\n<script setup>\n</script>\n' },
411
+ { path: 'index.html', content: '<!doctype html>\n<html><body><div id="app"></div><script src="/src/main.ts"></script></body></html>\n' },
412
+ { path: 'package.json', content: JSON.stringify({ name: 'project', version: '0.0.1', scripts: { dev: 'vite', build: 'vite build' } }, null, 2) + '\n' },
413
+ ],
414
+ python: [
415
+ { path: 'main.py', content: "def main():\n print('hello from python')\n\nif __name__ == '__main__':\n main()\n" },
416
+ { path: 'requirements.txt', content: '# runtime dependencies\n' },
417
+ { path: 'README.md', content: '# Python project\n\nA generated skeleton.\n' },
418
+ ],
419
+ cli: [
420
+ { path: 'cli.js', content: "#!/usr/bin/env node\nconsole.log('cli');\n" },
421
+ { path: 'package.json', content: JSON.stringify({ name: 'project', version: '0.0.1', bin: { project: 'cli.js' } }, null, 2) + '\n' },
422
+ ],
423
+ readme: [
424
+ { path: 'README.md', content: '# {NAME}\n\nGenerated by ysagc-agent.\n' },
425
+ ],
426
+ };
427
+ const generate = async (ctx, args, signal) => {
428
+ abortIfRequested(signal);
429
+ const template = (optionalString(args, 'template', 'node') ?? 'node').toLowerCase();
430
+ const name = requireString(args, 'name');
431
+ if (!/^[A-Za-z0-9._-]+$/.test(name)) {
432
+ throw new ToolError('INVALID_NAME', 'name may only contain letters, digits, ".", "_" and "-".');
433
+ }
434
+ const files = TEMPLATES[template];
435
+ if (!files) {
436
+ throw new ToolError('BAD_TEMPLATE', `Unknown template "${template}". Available: ${Object.keys(TEMPLATES).join(', ')}.`);
437
+ }
438
+ const realRoot = (0, path_utils_1.canonicalize)(ctx.root);
439
+ const targetDir = (0, path_utils_1.safeResolve)(ctx.root, name, realRoot);
440
+ assertNotSensitive(targetDir);
441
+ const written = [];
442
+ for (const tpl of files) {
443
+ const dest = (0, path_utils_1.safeResolve)(ctx.root, path.join(name, tpl.path), realRoot);
444
+ assertNotSensitive(dest);
445
+ fs.mkdirSync(path.dirname(dest), { recursive: true });
446
+ const content = tpl.content.replace(/\{NAME\}/g, name);
447
+ const bytes = Buffer.byteLength(content);
448
+ fs.writeFileSync(dest, content, 'utf8');
449
+ written.push({ path: rel(realRoot, dest), bytes });
450
+ }
451
+ return {
452
+ ok: true,
453
+ result: { template, name, root: rel(realRoot, targetDir), files: written },
454
+ };
455
+ };
456
+ const TOOLS = {
457
+ list_dir: listDir,
458
+ read_file: readFile,
459
+ write_file: writeFile,
460
+ edit_file: editFile,
461
+ run_command: runCommandTool,
462
+ web_search: webSearch,
463
+ git,
464
+ generate,
465
+ };
466
+ /** Build a tool registry bound to a single execution context. */
467
+ function createToolRegistry(ctx) {
468
+ const names = Object.keys(TOOLS);
469
+ return {
470
+ ctx,
471
+ tools: names,
472
+ has(name) {
473
+ return Object.prototype.hasOwnProperty.call(TOOLS, name);
474
+ },
475
+ async dispatch(name, args, signal) {
476
+ const started = Date.now();
477
+ const executor = TOOLS[name];
478
+ if (!executor) {
479
+ return { ok: false, error: `Unknown tool: ${name}`, durationMs: 0 };
480
+ }
481
+ try {
482
+ const outcome = await executor(ctx, args ?? {}, signal);
483
+ const durationMs = Date.now() - started;
484
+ return { ok: outcome.ok, result: outcome.result, error: outcome.error, durationMs };
485
+ }
486
+ catch (err) {
487
+ const durationMs = Date.now() - started;
488
+ if (err instanceof path_utils_1.PathError || err instanceof ToolError) {
489
+ return { ok: false, error: err.message, durationMs };
490
+ }
491
+ const msg = err instanceof Error ? err.message : String(err);
492
+ ctx.logger.error('tool crashed', { tool: name, error: msg });
493
+ return { ok: false, error: `Internal error executing ${name}: ${msg}`, durationMs };
494
+ }
495
+ },
496
+ };
497
+ }
498
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkfA,gDA6BC;AA/gBD,4CAA8B;AAC9B,gDAAkC;AAClC,6CAAoE;AACpE,yCAA2E;AAC3E,yCAAwC;AAIxC,0DAA0D;AAC1D,MAAa,SAAU,SAAQ,KAAK;IAElC,YAAY,IAAY,EAAE,OAAe;QACvC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAPD,8BAOC;AA8BD,MAAM,eAAe,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAEzC,8EAA8E;AAC9E,4BAA4B;AAC5B,8EAA8E;AAE9E,SAAS,aAAa,CAAC,IAA6B,EAAE,GAAW;IAC/D,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC7C,MAAM,IAAI,SAAS,CAAC,aAAa,EAAE,IAAI,GAAG,+CAA+C,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,cAAc,CAAC,IAA6B,EAAE,GAAW,EAAE,QAAiB;IACnF,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IACnD,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,IAAI,SAAS,CAAC,aAAa,EAAE,IAAI,GAAG,qBAAqB,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAOD,SAAS,WAAW,CAClB,IAA6B,EAC7B,GAAW,EACX,QAAgB,EAChB,OAAgB,EAAE;IAElB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IACnD,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,SAAS,CAAC,aAAa,EAAE,IAAI,GAAG,uBAAuB,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3C,MAAM,IAAI,SAAS,CAAC,aAAa,EAAE,IAAI,GAAG,gBAAgB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3C,MAAM,IAAI,SAAS,CAAC,aAAa,EAAE,IAAI,GAAG,gBAAgB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,aAAa,CAAC,IAA6B,EAAE,GAAW;IAC/D,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,SAAS,CAAC,aAAa,EAAE,IAAI,GAAG,qBAAqB,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAoB;IAC5C,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,SAAS,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB,EAAE,MAAc;IACrD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE,4DAA4D,CAAC,CAAC;IACjG,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc;IACxC,IAAI,IAAA,0BAAe,EAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,SAAS,CAAC,gBAAgB,EAAE,6CAA6C,MAAM,EAAE,CAAC,CAAC;IAC/F,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,GAAW;IACzB,IAAI,CAAC;QACH,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,MAAc,EAAE,MAAc;IAC9C,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QACrD,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IACjD,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,GAAG,CAAC,IAAY,EAAE,MAAc;IACvC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAC5B,+EAA+E;IAC/E,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,SAAS,CAAC,YAAY,EAAE,6CAA6C,CAAC,CAAC;IACnF,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;IACzC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,OAAO,GAAiB,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IAChD,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC;IACnD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,IAAA,yBAAY,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,IAAA,wBAAW,EAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,IAAI,IAAc,CAAC;IACnB,IAAI,CAAC;QACH,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE,wBAAwB,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE,4BAA4B,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,OAAO,GAA8B,EAAE,CAAC;IAC9C,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,GAAW,EAAQ,EAAE;QACnD,IAAI,GAAG,IAAI,KAAK;YAAE,OAAO;QACzB,IAAI,KAAe,CAAC;QACpB,IAAI,CAAC;YACH,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAClC,IAAI,EAAY,CAAC;YACjB,IAAI,CAAC;gBACH,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;YACjF,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI;gBACJ,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;gBACzB,IAAI;gBACJ,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzC,KAAK,EAAE,EAAE,CAAC,OAAO;aAClB,CAAC,CAAC;YACH,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,GAAG,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC;gBACxC,SAAS,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACrE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;AAC/E,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAiB,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;IACzD,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,CAAC,CAAC;IAC/F,MAAM,QAAQ,GAAG,IAAA,yBAAY,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,IAAA,wBAAW,EAAC,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC1D,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,IAAI,IAAc,CAAC;IACnB,IAAI,CAAC;QACH,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE,wBAAwB,SAAS,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACvB,MAAM,IAAI,SAAS,CAAC,QAAQ,EAAE,oCAAoC,SAAS,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;IACxC,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC;IAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClE,OAAO;QACL,EAAE,EAAE,IAAI;QACR,MAAM,EAAE;YACN,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;YAC3B,SAAS;YACT,UAAU;YACV,SAAS;YACT,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;YAC/B,OAAO;SACR;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,SAAS,GAAiB,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;IAC1D,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC;IACjD,MAAM,OAAO,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,IAAI,SAAS,CAAC,aAAa,EAAE,6BAA6B,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,IAAA,yBAAY,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,IAAA,wBAAW,EAAC,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC1D,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,UAAU,GAAG,eAAe,EAAE,CAAC;QACjC,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE,mBAAmB,eAAe,SAAS,CAAC,CAAC;IAChF,CAAC;IACD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,OAAO;QACL,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE;KACxE,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAiB,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;IACzD,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACrE,MAAM,QAAQ,GAAG,IAAA,yBAAY,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,IAAA,wBAAW,EAAC,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC1D,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,IAAI,IAAc,CAAC;IACnB,IAAI,CAAC;QACH,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE,wBAAwB,SAAS,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACvB,MAAM,IAAI,SAAS,CAAC,QAAQ,EAAE,oCAAoC,SAAS,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACjB,MAAM,IAAI,SAAS,CAAC,aAAa,EAAE,2CAA2C,CAAC,CAAC;IAClF,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC7C,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,MAAM,IAAI,SAAS,CAAC,UAAU,EAAE,oCAAoC,CAAC,CAAC;IACxE,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;IACpE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC;AACpF,CAAC,CAAC;AAEF,MAAM,cAAc,GAAiB,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;IAC/D,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC;IACvD,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,IAAA,yBAAY,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,IAAA,wBAAW,EAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1E,MAAM,UAAU,GAAG,IAAA,0BAAe,EAAC,GAAG,CAAC,CAAC;IACxC,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QACtB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,8BAA8B,UAAU,CAAC,QAAQ,MAAM,UAAU,CAAC,MAAM,EAAE;SAClF,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC7B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,6DAA6D,EAAE,CAAC;IAC7F,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,IAAA,qBAAU,EAAC;YAC3B,OAAO,EAAE,GAAG;YACZ,GAAG;YACH,SAAS,EAAE,OAAO;YAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,MAAM;SACP,CAAC,CAAC;QACH,OAAO;YACL,EAAE,EAAE,IAAI;YACR,MAAM,EAAE;gBACN,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,MAAM,EAAE,IAAA,sBAAW,EAAC,GAAG,CAAC,MAAM,CAAC;gBAC/B,MAAM,EAAE,IAAA,sBAAW,EAAC,GAAG,CAAC,MAAM,CAAC;gBAC/B,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzD,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1D;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,GAAG,EAAE,EAAE,CAAC;IAC5D,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,SAAS,GAAiB,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IAClD,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IACtD,MAAM,IAAI,GAAG;QACX,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,UAAU;QACpB,sEAAsE;QACtE,8CAA8C;QAC9C,IAAI,EAAE,iFAAiF;QACvF,KAAK;QACL,OAAO,EAAE,EAAe;KACzB,CAAC;IACF,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;QACpB,OAAO;YACL,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,uCAAuC,EAAE;SACnF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,GAAG,GAAiB,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;IACpD,MAAM,QAAQ,GAAG,IAAA,yBAAY,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC;IACvD,MAAM,GAAG,GAAG,IAAA,wBAAW,EAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAExE,IAAI,MAAc,CAAC;IACnB,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACnE,MAAM,GAAG,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;IACxC,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,MAAM,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,SAAS,CAAC,aAAa,EAAE,6DAA6D,CAAC,CAAC;IACpG,CAAC;IAED,MAAM,UAAU,GAAG,IAAA,0BAAe,EAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QACtB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kCAAkC,UAAU,CAAC,QAAQ,MAAM,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;IAC9G,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC7B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,qDAAqD,EAAE,CAAC;IACrF,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,IAAA,qBAAU,EAAC,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3G,OAAO;YACL,EAAE,EAAE,IAAI;YACR,MAAM,EAAE;gBACN,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,MAAM,EAAE,IAAA,sBAAW,EAAC,GAAG,CAAC,MAAM,CAAC;gBAC/B,MAAM,EAAE,IAAA,sBAAW,EAAC,GAAG,CAAC,MAAM,CAAC;gBAC/B,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzD,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1D;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,GAAG,EAAE,EAAE,CAAC;IACpD,CAAC;AACH,CAAC,CAAC;AAMF,MAAM,SAAS,GAAmC;IAChD,IAAI,EAAE;QACJ,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;QAC/J,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,mCAAmC,EAAE;QAClE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,2CAA2C,EAAE;KAC5E;IACD,KAAK,EAAE;QACL,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,0GAA0G,EAAE;QAC3I,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,8HAA8H,EAAE;QACjK,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;KACxJ;IACD,GAAG,EAAE;QACH,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,sEAAsE,EAAE;QACxG,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,uGAAuG,EAAE;QACxI,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;KACxJ;IACD,MAAM,EAAE;QACN,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,yFAAyF,EAAE;QACvH,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,0BAA0B,EAAE;QACjE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,6CAA6C,EAAE;KAC9E;IACD,GAAG,EAAE;QACH,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,4CAA4C,EAAE;QACzE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;KACrI;IACD,MAAM,EAAE;QACN,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,yCAAyC,EAAE;KAC1E;CACF,CAAC;AAEF,MAAM,QAAQ,GAAiB,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;IACzD,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,MAAM,QAAQ,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IACpF,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACzC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,SAAS,CAAC,cAAc,EAAE,0DAA0D,CAAC,CAAC;IAClG,CAAC;IACD,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,SAAS,CAAC,cAAc,EAAE,qBAAqB,QAAQ,iBAAiB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1H,CAAC;IACD,MAAM,QAAQ,GAAG,IAAA,yBAAY,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,IAAA,wBAAW,EAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxD,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC9B,MAAM,OAAO,GAA8B,EAAE,CAAC;IAC9C,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,IAAA,wBAAW,EAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;QACxE,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzB,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACzC,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE;KAC3E,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,KAAK,GAAiC;IAC1C,QAAQ,EAAE,OAAO;IACjB,SAAS,EAAE,QAAQ;IACnB,UAAU,EAAE,SAAS;IACrB,SAAS,EAAE,QAAQ;IACnB,WAAW,EAAE,cAAc;IAC3B,UAAU,EAAE,SAAS;IACrB,GAAG;IACH,QAAQ;CACT,CAAC;AAaF,iEAAiE;AACjE,SAAgB,kBAAkB,CAAC,GAAgB;IACjD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,OAAO;QACL,GAAG;QACH,KAAK,EAAE,KAAK;QACZ,GAAG,CAAC,IAAY;YACd,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC3D,CAAC;QACD,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM;YAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;YACtE,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,IAAI,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;gBACxD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;gBACxC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC;YACtF,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;gBACxC,IAAI,GAAG,YAAY,sBAAS,IAAI,GAAG,YAAY,SAAS,EAAE,CAAC;oBACzD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC;gBACvD,CAAC;gBACD,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7D,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC7D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B,IAAI,KAAK,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC;YACtF,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,37 +1,52 @@
1
1
  {
2
2
  "name": "ysagc-agent",
3
- "version": "0.2.0",
4
- "description": "代码工作台本机代理:替浏览器在本机执行文件/Git/终端操作(JSON-RPC over WebSocket,直连 127.0.0.1,免配对码)",
5
- "main": "src/index.js",
3
+ "version": "0.4.0",
4
+ "description": "Local execution agent for ysagc: a state-agnostic, safety-bounded worker that connects to a platform backend over WebSocket, executes tool instructions inside an authorization root, and reports results back.",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
6
7
  "bin": {
7
- "ysagc-agent": "src/index.js"
8
+ "ysagc-agent": "dist/cli.js"
8
9
  },
9
10
  "files": [
10
- "src",
11
+ "dist",
11
12
  "README.md"
12
13
  ],
13
14
  "engines": {
14
- "node": ">=20"
15
+ "node": ">=18"
15
16
  },
16
- "scripts": {
17
- "start": "node src/index.js",
18
- "smoke": "node scripts/smoke.js"
17
+ "license": "MIT",
18
+ "author": "ysagc <ysagc@example.com>",
19
+ "homepage": "https://github.com/ysagc/ysagc-agent#readme",
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "git+https://github.com/ysagc/ysagc-agent.git"
19
23
  },
20
24
  "keywords": [
21
- "workspace",
25
+ "ai",
22
26
  "agent",
23
- "local-files",
24
- "terminal"
27
+ "local",
28
+ "automation",
29
+ "file",
30
+ "shell",
31
+ "sandbox",
32
+ "workspace",
33
+ "tool",
34
+ "websocket"
25
35
  ],
26
- "license": "UNLICENSED",
27
- "private": false,
36
+ "scripts": {
37
+ "build": "tsc",
38
+ "start": "node dist/cli.js",
39
+ "test": "node dist/cli.js --selftest",
40
+ "prepack": "npm run build"
41
+ },
28
42
  "dependencies": {
29
- "chokidar": "^4.0.3",
30
- "iconv-lite": "^0.6.3",
31
- "jschardet": "^3.1.4",
32
- "node-pty": "^1.1.0",
33
- "ws": "^8.18.0",
34
- "yauzl": "^3.2.0",
35
- "yazl": "^2.5.1"
43
+ "commander": "^11.1.0",
44
+ "ws": "^8.18.0"
45
+ },
46
+ "devDependencies": {
47
+ "@types/node": "^20.14.0",
48
+ "@types/ws": "^8.5.12",
49
+ "typescript": "^5.5.0",
50
+ "ws": "^8.18.0"
36
51
  }
37
52
  }