@easynet/agent-tool 1.0.37 → 1.0.39

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 (43) hide show
  1. package/dist/api/createAgentTools.d.ts.map +1 -1
  2. package/dist/api/expose/extension-init/initExtension.d.ts +2 -0
  3. package/dist/api/expose/extension-init/initExtension.d.ts.map +1 -1
  4. package/dist/api/main.cjs +14 -14
  5. package/dist/api/main.js +3 -3
  6. package/dist/api/runtimeFromConfig.d.ts +2 -0
  7. package/dist/api/runtimeFromConfig.d.ts.map +1 -1
  8. package/dist/{chunk-WFRHBW32.cjs → chunk-23KQ6MPJ.cjs} +9 -9
  9. package/dist/{chunk-WFRHBW32.cjs.map → chunk-23KQ6MPJ.cjs.map} +1 -1
  10. package/dist/{chunk-DTWOUO7M.cjs → chunk-5BYLYZ22.cjs} +7 -7
  11. package/dist/{chunk-DTWOUO7M.cjs.map → chunk-5BYLYZ22.cjs.map} +1 -1
  12. package/dist/{chunk-4HPV2K7P.cjs → chunk-HUUG5MZ7.cjs} +21 -16
  13. package/dist/chunk-HUUG5MZ7.cjs.map +1 -0
  14. package/dist/{chunk-LP7KHBA3.cjs → chunk-JGQVKMRY.cjs} +54 -6
  15. package/dist/chunk-JGQVKMRY.cjs.map +1 -0
  16. package/dist/{chunk-HEMWFWSK.js → chunk-JRT4FEQB.js} +3 -3
  17. package/dist/{chunk-HEMWFWSK.js.map → chunk-JRT4FEQB.js.map} +1 -1
  18. package/dist/{chunk-NJ46JOBI.js → chunk-OAZPWIHV.js} +3 -3
  19. package/dist/{chunk-NJ46JOBI.js.map → chunk-OAZPWIHV.js.map} +1 -1
  20. package/dist/{chunk-NCPOKCX5.js → chunk-TRJL2ZIH.js} +10 -5
  21. package/dist/chunk-TRJL2ZIH.js.map +1 -0
  22. package/dist/{chunk-7VBJ64YC.js → chunk-YZLDVSS4.js} +52 -6
  23. package/dist/chunk-YZLDVSS4.js.map +1 -0
  24. package/dist/index.cjs +59 -90
  25. package/dist/index.cjs.map +1 -1
  26. package/dist/index.d.ts +1 -1
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +7 -45
  29. package/dist/index.js.map +1 -1
  30. package/dist/security/sandbox.d.ts +1 -0
  31. package/dist/security/sandbox.d.ts.map +1 -1
  32. package/dist/tools/util/toolConfig.d.ts +2 -0
  33. package/dist/tools/util/toolConfig.d.ts.map +1 -1
  34. package/dist/utils/cli/index.cjs +42 -28
  35. package/dist/utils/cli/index.cjs.map +1 -1
  36. package/dist/utils/cli/index.d.ts.map +1 -1
  37. package/dist/utils/cli/index.js +29 -15
  38. package/dist/utils/cli/index.js.map +1 -1
  39. package/package.json +1 -1
  40. package/dist/chunk-4HPV2K7P.cjs.map +0 -1
  41. package/dist/chunk-7VBJ64YC.js.map +0 -1
  42. package/dist/chunk-LP7KHBA3.cjs.map +0 -1
  43. package/dist/chunk-NCPOKCX5.js.map +0 -1
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  'use strict';
3
3
 
4
- var chunkWFRHBW32_cjs = require('../../chunk-WFRHBW32.cjs');
5
- var chunkDTWOUO7M_cjs = require('../../chunk-DTWOUO7M.cjs');
6
- var chunkLP7KHBA3_cjs = require('../../chunk-LP7KHBA3.cjs');
4
+ var chunk23KQ6MPJ_cjs = require('../../chunk-23KQ6MPJ.cjs');
5
+ var chunk5BYLYZ22_cjs = require('../../chunk-5BYLYZ22.cjs');
6
+ var chunkJGQVKMRY_cjs = require('../../chunk-JGQVKMRY.cjs');
7
7
  require('../../chunk-TOSPHMYU.cjs');
8
8
  require('../../chunk-DYDNPIV2.cjs');
9
9
  var chunkUUNG3GL3_cjs = require('../../chunk-UUNG3GL3.cjs');
@@ -61,11 +61,13 @@ function templates(packageName) {
61
61
  "pretest": "npm run build",
62
62
  "test": "vitest run"
63
63
  },
64
+ "dependencies": {
65
+ "@easynet/agent-tool": "latest"
66
+ },
64
67
  "peerDependencies": {
65
- "@easynet/agent-tool": ">=1.0.31"
68
+ "@easynet/agent-tool": "*"
66
69
  },
67
70
  "devDependencies": {
68
- "@easynet/agent-tool": "^1.0.34",
69
71
  "tsx": "^4.19.2",
70
72
  "typescript": "~5.7.2",
71
73
  "vitest": "^2.1.8"
@@ -177,7 +179,9 @@ async function initExtension(options) {
177
179
  throw new Error("Extension name is required");
178
180
  }
179
181
  const targetPath = path2__namespace.join(parent, name);
180
- const packageName = toPackageName(name) || name.replace(/\s/g, "-").toLowerCase();
182
+ const baseName = toPackageName(name) || name.replace(/\s/g, "-").toLowerCase();
183
+ const scopeNorm = options.scope?.trim().replace(/^@/, "") || "";
184
+ const packageName = scopeNorm ? `@${scopeNorm}/${baseName}` : baseName;
181
185
  const filesCreated = [];
182
186
  const tmpl = templates(packageName);
183
187
  await fs__namespace.mkdir(targetPath, { recursive: true });
@@ -191,18 +195,19 @@ async function initExtension(options) {
191
195
  }
192
196
 
193
197
  // src/utils/cli/index.ts
194
- ({
195
- sandboxRoot: process.cwd()});
198
+ var DEFAULT_CORE_CONFIG = {
199
+ sandboxRoot: process.cwd(),
200
+ enableSandboxValidation: false};
196
201
  async function getRuntimeWithTools(pathOpt, verbose = false) {
197
202
  const cwd = process.cwd();
198
203
  const searchDir = path2__namespace.default.resolve(cwd, pathOpt ?? ".");
199
204
  const stepLog = verbose ? (msg) => process.stderr.write(`[agent-tool] ${msg}
200
205
  `) : void 0;
201
206
  if (stepLog) stepLog(`Loading tool config from ${searchDir}`);
202
- const config = chunkLP7KHBA3_cjs.findAndLoadToolConfig(searchDir);
207
+ const config = chunkJGQVKMRY_cjs.findAndLoadToolConfig(searchDir);
203
208
  let sandboxRoot = cwd;
204
209
  if (config.sandboxedPath && typeof config.sandboxedPath === "string" && config.configPath) {
205
- sandboxRoot = chunkLP7KHBA3_cjs.resolveSandboxedPath(config.configPath, config.sandboxedPath);
210
+ sandboxRoot = chunkJGQVKMRY_cjs.resolveSandboxedPath2(config.configPath, config.sandboxedPath);
206
211
  }
207
212
  if (stepLog) {
208
213
  if (config.configPath) {
@@ -212,8 +217,12 @@ async function getRuntimeWithTools(pathOpt, verbose = false) {
212
217
  stepLog("No tool.yaml found");
213
218
  }
214
219
  }
215
- const coreConfig = { sandboxRoot, allowedHosts: [] };
216
- const result = await chunkLP7KHBA3_cjs.createRuntimeFromConfig({
220
+ const coreConfig = {
221
+ sandboxRoot,
222
+ enableSandboxValidation: config.enableSandboxValidation ?? DEFAULT_CORE_CONFIG.enableSandboxValidation,
223
+ allowedHosts: []
224
+ };
225
+ const result = await chunkJGQVKMRY_cjs.createRuntimeFromConfig({
217
226
  coreTools: coreConfig,
218
227
  configFilePath: config.configPath,
219
228
  stepLog
@@ -235,6 +244,7 @@ function parseArgv(argv) {
235
244
  let mcpStdio = false;
236
245
  let pathOpt = "";
237
246
  let extensionName = "";
247
+ let scope = "";
238
248
  let outDir = "";
239
249
  let include = [];
240
250
  let includeN8n = false;
@@ -278,6 +288,8 @@ function parseArgv(argv) {
278
288
  } else if (arg === "--host") {
279
289
  const v = args[++i];
280
290
  if (v !== void 0) host = v;
291
+ } else if (arg === "--scope" || arg === "-s") {
292
+ scope = args[++i] ?? "";
281
293
  } else if (arg && !arg.startsWith("-") && commands.includes(arg)) {
282
294
  command = arg;
283
295
  const nextArg = args[i + 1];
@@ -296,7 +308,7 @@ function parseArgv(argv) {
296
308
  }
297
309
  }
298
310
  }
299
- return { command, startSub, help, verbose, mcpStdio, pathOpt, extensionName, outDir, include, includeN8n, toolName, toolArgsJson, port, host };
311
+ return { command, startSub, help, verbose, mcpStdio, pathOpt, extensionName, scope, outDir, include, includeN8n, toolName, toolArgsJson, port, host };
300
312
  }
301
313
  function printHelp() {
302
314
  const bin = "agent-tool";
@@ -320,6 +332,7 @@ Other commands:
320
332
 
321
333
  Options:
322
334
  --path, -p <path> For init/build/serve: path (default: cwd).
335
+ --scope, -s <scope> For init [extension name]: npm package scope (e.g. wallee \u2192 @wallee/<name>).
323
336
  --out, -o <path> For build: output directory.
324
337
  --include, -i <glob> For build: glob for TS files.
325
338
  --include-n8n For build: include n8n workflow tools.
@@ -342,12 +355,13 @@ Examples:
342
355
  For agent run (ReAct + agent.yaml): npx @easynet/agent-orchestra run "task" -c agent.yaml
343
356
  `);
344
357
  }
345
- async function cmdInitExtension(extensionName, pathOpt) {
358
+ async function cmdInitExtension(extensionName, pathOpt, scope) {
346
359
  try {
347
360
  const parentDir = pathOpt ? path2__namespace.default.resolve(process.cwd(), pathOpt) : void 0;
348
361
  const { targetPath, filesCreated } = await initExtension({
349
362
  extensionName,
350
- parentDir: parentDir || process.cwd()
363
+ parentDir: parentDir || process.cwd(),
364
+ scope: scope || void 0
351
365
  });
352
366
  process.stdout.write(
353
367
  `Extension scaffold at ${targetPath}
@@ -364,7 +378,7 @@ Next: cd ${path2__namespace.default.basename(targetPath)} && npm install && npm
364
378
  }
365
379
  async function cmdInit(pathOpt) {
366
380
  try {
367
- const { targetPath, filesCreated } = await chunkWFRHBW32_cjs.initProject({ targetPath: pathOpt || void 0 });
381
+ const { targetPath, filesCreated } = await chunk23KQ6MPJ_cjs.initProject({ targetPath: pathOpt || void 0 });
368
382
  process.stdout.write(`Initialized project at ${targetPath}
369
383
  Created: ${filesCreated.join(", ")}
370
384
  Next: npm install && npm run build
@@ -378,7 +392,7 @@ Next: npm install && npm run build
378
392
  }
379
393
  async function cmdBuild(pathOpt, outDir, include, includeN8n) {
380
394
  try {
381
- const result = await chunkWFRHBW32_cjs.buildMcpPackage({
395
+ const result = await chunk23KQ6MPJ_cjs.buildMcpPackage({
382
396
  projectPath: pathOpt || void 0,
383
397
  outDir: outDir || void 0,
384
398
  include: include.length > 0 ? include : void 0,
@@ -399,7 +413,7 @@ mcp.json: ${result.mcpJsonPath}
399
413
  }
400
414
  async function cmdServe(pathOpt) {
401
415
  try {
402
- const { process: child } = await chunkWFRHBW32_cjs.runMcpServer({ path: pathOpt || void 0 });
416
+ const { process: child } = await chunk23KQ6MPJ_cjs.runMcpServer({ path: pathOpt || void 0 });
403
417
  child.stdin?.pipe(process.stdin);
404
418
  child.stdout?.pipe(process.stdout);
405
419
  process.stdin?.unref();
@@ -417,7 +431,7 @@ var LS_DESC_MAX = 72;
417
431
  function formatLsOutput(specs) {
418
432
  const rows = specs.map((spec) => {
419
433
  const { name } = parseToolName(spec.name);
420
- const scope = chunkLP7KHBA3_cjs.getDisplayScope(spec.name, spec.kind, spec.version);
434
+ const scope = chunkJGQVKMRY_cjs.getDisplayScope(spec.name, spec.kind, spec.version);
421
435
  const desc = (spec.description ?? "").replace(/\n/g, " ").trim().slice(0, LS_DESC_MAX);
422
436
  return { scope, name, description: desc || "(no description)" };
423
437
  });
@@ -444,7 +458,7 @@ function formatLsOutput(specs) {
444
458
  }
445
459
  function formatDescribeOutput(spec) {
446
460
  const { name: localName } = parseToolName(spec.name);
447
- const scope = chunkLP7KHBA3_cjs.getDisplayScope(spec.name, spec.kind, spec.version);
461
+ const scope = chunkJGQVKMRY_cjs.getDisplayScope(spec.name, spec.kind, spec.version);
448
462
  const sections = [];
449
463
  sections.push("\u250C\u2500 Tool");
450
464
  sections.push(`\u2502 name: ${spec.name}`);
@@ -480,7 +494,7 @@ async function cmdLs(pathOpt, verbose = false) {
480
494
  process.stdout.write("No tools registered.\n");
481
495
  const cwd = process.cwd();
482
496
  const searchDir = path2__namespace.default.resolve(cwd, pathOpt ?? ".");
483
- const config = chunkLP7KHBA3_cjs.findAndLoadToolConfig(searchDir);
497
+ const config = chunkJGQVKMRY_cjs.findAndLoadToolConfig(searchDir);
484
498
  const hasNpmTools = Array.isArray(config.tools) && config.tools.some((t) => typeof t === "string" && t.startsWith("npm:"));
485
499
  if (hasNpmTools) {
486
500
  process.stdout.write(
@@ -505,7 +519,7 @@ async function cmdDescribe(toolName, pathOpt, verbose = false) {
505
519
  }
506
520
  try {
507
521
  const { registry } = await getRuntimeWithTools(pathOpt, verbose);
508
- const registryName = chunkLP7KHBA3_cjs.resolveToolDescriptor(toolName.trim());
522
+ const registryName = chunkJGQVKMRY_cjs.resolveToolDescriptor(toolName.trim());
509
523
  const spec = registry.get(registryName);
510
524
  if (!spec) {
511
525
  process.stderr.write(`Tool not found: ${toolName}
@@ -554,7 +568,7 @@ async function cmdRun(toolName, toolArgsJson, pathOpt, verbose = false) {
554
568
  }
555
569
  try {
556
570
  const { runtime, registry } = await getRuntimeWithTools(pathOpt, verbose);
557
- const registryName = chunkLP7KHBA3_cjs.resolveToolDescriptor(toolName.trim());
571
+ const registryName = chunkJGQVKMRY_cjs.resolveToolDescriptor(toolName.trim());
558
572
  if (!registry.get(registryName)) {
559
573
  process.stderr.write(`Tool not found: ${toolName}
560
574
  `);
@@ -582,10 +596,10 @@ async function cmdStartMcp(pathOpt, verbose = false, stdio = false, port = 3e3,
582
596
  try {
583
597
  const { runtime } = await getRuntimeWithTools(pathOpt, verbose);
584
598
  if (stdio) {
585
- await chunkDTWOUO7M_cjs.runMCPServerOverStdio(runtime);
599
+ await chunk5BYLYZ22_cjs.runMCPServerOverStdio(runtime);
586
600
  return 0;
587
601
  }
588
- const streamable = await chunkDTWOUO7M_cjs.createMCPServerStreamableHttp(runtime, { port, host, path: "/mcp" });
602
+ const streamable = await chunk5BYLYZ22_cjs.createMCPServerStreamableHttp(runtime, { port, host, path: "/mcp" });
589
603
  const { url, port: actualPort } = await streamable.listen(port, host);
590
604
  process.stdout.write(`MCP Streamable HTTP: ${url}
591
605
  `);
@@ -601,7 +615,7 @@ async function cmdStartMcp(pathOpt, verbose = false, stdio = false, port = 3e3,
601
615
  async function cmdStartHttp(port, host, pathOpt, verbose = false) {
602
616
  try {
603
617
  const { runtime } = await getRuntimeWithTools(pathOpt, verbose);
604
- const http = await chunkDTWOUO7M_cjs.createHttpService(runtime);
618
+ const http = await chunk5BYLYZ22_cjs.createHttpService(runtime);
605
619
  const { port: actualPort, host: actualHost } = await http.listen({ port, host });
606
620
  const base = `http://${actualHost}:${actualPort}`;
607
621
  process.stdout.write(`API: ${base}/invoke (POST), ${base}/tools (GET)
@@ -618,13 +632,13 @@ async function cmdStartHttp(port, host, pathOpt, verbose = false) {
618
632
  }
619
633
  }
620
634
  async function main(argv = process.argv) {
621
- const { command, startSub, help, verbose, mcpStdio, pathOpt, extensionName, outDir, include, includeN8n, toolName, toolArgsJson, port, host } = parseArgv(argv);
635
+ const { command, startSub, help, verbose, mcpStdio, pathOpt, extensionName, scope, outDir, include, includeN8n, toolName, toolArgsJson, port, host } = parseArgv(argv);
622
636
  if (help || command === "help") {
623
637
  printHelp();
624
638
  return 0;
625
639
  }
626
640
  if (command === "init") {
627
- if (extensionName) return cmdInitExtension(extensionName, pathOpt);
641
+ if (extensionName) return cmdInitExtension(extensionName, pathOpt, scope);
628
642
  return cmdInit(pathOpt);
629
643
  }
630
644
  if (command === "build") return cmdBuild(pathOpt, outDir, include, includeN8n);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/api/expose/extension-init/initExtension.ts","../../../src/utils/cli/index.ts"],"names":["path","fs","findAndLoadToolConfig","resolveSandboxedPath","createRuntimeFromConfig","initProject","buildMcpPackage","runMcpServer","resolve","getDisplayScope","resolveToolDescriptor","enrichSpecWithCanonicalSchema","runMCPServerOverStdio","createMCPServerStreamableHttp","createHttpService","fileURLToPath","realpathSync"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Scaffold a new agent-tool extension: folder, src, hello-world tool, generate-manifest, index, package.json.\n * Use: agent-tool init <extension name> → then cd <name> && npm install && npm run build.\n */\n\nimport * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\n\nexport interface InitExtensionOptions {\n /** Extension name (folder name to create). */\n extensionName: string;\n /** Parent directory (default: process.cwd()). */\n parentDir?: string;\n}\n\n/** Sanitize extension name for npm package name: lowercase, hyphens allowed. */\nfunction toPackageName(name: string): string {\n return name\n .trim()\n .toLowerCase()\n .replace(/\\s+/g, \"-\")\n .replace(/[^a-z0-9-]/g, \"\");\n}\n\nfunction templates(packageName: string) {\n return {\n \"package.json\": `{\n \"name\": \"${packageName}\",\n \"version\": \"0.0.1\",\n \"description\": \"Tools extension for @easynet/agent-tool\",\n \"type\": \"module\",\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"default\": \"./dist/index.js\"\n }\n },\n \"files\": [\"dist\"],\n \"scripts\": {\n \"build\": \"tsx generate-manifest.ts && tsc -p tsconfig.build.json\",\n \"clean\": \"rm -rf dist\",\n \"pretest\": \"npm run build\",\n \"test\": \"vitest run\"\n },\n \"peerDependencies\": {\n \"@easynet/agent-tool\": \">=1.0.31\"\n },\n \"devDependencies\": {\n \"@easynet/agent-tool\": \"^1.0.34\",\n \"tsx\": \"^4.19.2\",\n \"typescript\": \"~5.7.2\",\n \"vitest\": \"^2.1.8\"\n },\n \"license\": \"MIT\"\n}\n`,\n \"tsconfig.json\": `{\n \"compilerOptions\": {\n \"target\": \"ES2022\",\n \"module\": \"NodeNext\",\n \"moduleResolution\": \"NodeNext\",\n \"lib\": [\"ES2022\"],\n \"strict\": true,\n \"skipLibCheck\": true,\n \"declaration\": true,\n \"declarationMap\": true,\n \"sourceMap\": true,\n \"outDir\": \"./dist\",\n \"rootDir\": \".\",\n \"resolveJsonModule\": true,\n \"isolatedModules\": true\n },\n \"include\": [\"./**/*.ts\"],\n \"exclude\": [\"node_modules\", \"dist\", \"**/dist/**\"]\n}\n`,\n \"tsconfig.build.json\": `{\n \"extends\": \"./tsconfig.json\",\n \"compilerOptions\": { \"rootDir\": \".\", \"outDir\": \"dist\" },\n \"include\": [\"./**/*.ts\"],\n \"exclude\": [\"node_modules\", \"dist\", \"**/dist/**\", \"**/tsconfig*.json\", \"**/*.test.ts\", \"test\", \"scripts\", \"generate-manifest.ts\"]\n}\n`,\n \"generate-manifest.ts\": `/**\n * Build step: run framework generateManifest (scan src, emit manifest).\n * Tool names in the manifest are the exported function names.\n */\nimport { generateManifest } from \"@easynet/agent-tool\";\n\ngenerateManifest(process.cwd());\n`,\n \"index.ts\": `import { createExtension } from \"@easynet/agent-tool\";\nimport type { ToolRegistry, ToolAdapter } from \"@easynet/agent-tool\";\n\nconst ext = createExtension({ importMeta: import.meta });\n\n/** Framework contract: extension exports register(registry, options). */\nexport function register(\n registry: ToolRegistry,\n options?: { only?: string[]; namePrefixes?: string[] },\n): ToolAdapter {\n return ext.register(registry, options ?? {});\n}\n\nexport const getExtensionContext = ext.getContext;\nexport const runWithExtensionContext = ext.runWith;\n`,\n \"src/helloWorld.ts\": `/**\n * A simple hello-world tool.\n * @tool\n * @effect none\n */\nexport async function helloWorld(_args: Record<string, unknown>) {\n return {\n result: { message: \"Hello, World!\" },\n evidence: [\n {\n type: \"tool\",\n ref: \"helloWorld\",\n summary: \"Hello, World!\",\n createdAt: new Date().toISOString(),\n },\n ],\n };\n}\n`,\n \"README.md\": `# ${packageName}\n\nScaffolded by \\`agent-tool init ${packageName}\\`.\n\n## Quick start\n\n\\`\\`\\`bash\nnpm install\nnpm run build\n\\`\\`\\`\n\nAdd more tools under \\`src/\\` (export async functions with \\`@tool\\` JSDoc), then \\`npm run build\\` again.\n\n## Use in tool config\n\nIn your \\`tool.yaml\\` \\`tools.packages\\`:\n\n\\`\\`\\`yaml\ntools:\n packages:\n file:./path/to/${packageName}: {}\n\\`\\`\\`\n\nOr publish and use: \\`npm:@your-scope/${packageName}\\`\n`,\n };\n}\n\n/**\n * Create extension scaffold at parentDir/extensionName.\n * Returns target path and list of created files.\n */\nexport async function initExtension(\n options: InitExtensionOptions,\n): Promise<{ targetPath: string; filesCreated: string[] }> {\n const parent = path.resolve(options.parentDir ?? process.cwd());\n const name = options.extensionName.trim();\n if (!name) {\n throw new Error(\"Extension name is required\");\n }\n const targetPath = path.join(parent, name);\n const packageName = toPackageName(name) || name.replace(/\\s/g, \"-\").toLowerCase();\n const filesCreated: string[] = [];\n const tmpl = templates(packageName);\n\n await fs.mkdir(targetPath, { recursive: true });\n\n for (const [relPath, content] of Object.entries(tmpl)) {\n const fullPath = path.join(targetPath, relPath);\n await fs.mkdir(path.dirname(fullPath), { recursive: true });\n await fs.writeFile(fullPath, content.trimStart(), \"utf8\");\n filesCreated.push(relPath);\n }\n\n return { targetPath, filesCreated };\n}\n","#!/usr/bin/env node\n/**\n * CLI for @easynet/agent-tool: ls | describe | run | start mcp | start http | init | build | serve | help.\n * Usage: agent-tool <command> [options] [args]\n * Primary: ls, describe [tool path], run [tool path] [parameters], start mcp, start http.\n */\n\nimport path from \"node:path\";\nimport { realpathSync } from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport { initProject } from \"../../api/expose/mcp-build/init.js\";\nimport { initExtension } from \"../../api/expose/extension-init/index.js\";\nimport { buildMcpPackage } from \"../../api/expose/mcp-build/build.js\";\nimport { runMcpServer } from \"../../api/expose/mcp-build/run.js\";\nimport { createRuntimeFromConfig, createRuntimeFromConfigSync } from \"../../api/runtimeFromConfig.js\";\nimport { createHttpService } from \"../../api/expose/openapiHttp.js\";\nimport { runMCPServerOverStdio, createMCPServerStreamableHttp } from \"../../api/expose/mcpServer.js\";\nimport type { ToolSpec } from \"../../core/types/ToolSpec.js\";\nimport type { ExecContext } from \"../../core/types/ToolIntent.js\";\nimport { getDisplayScope, resolveToolDescriptor } from \"../../tools/util/toolDescriptor.js\";\nimport { findAndLoadToolConfig, resolveSandboxedPath } from \"../../tools/util/toolConfig.js\";\nimport { enrichSpecWithCanonicalSchema } from \"../../tools/util/canonicalCoreSchemas.js\";\n\ntype CliCommand = \"init\" | \"build\" | \"serve\" | \"list\" | \"ls\" | \"show\" | \"describe\" | \"run\" | \"start\" | \"help\";\ntype StartSubcommand = \"mcp\" | \"http\";\n\ninterface CliArgs {\n command: CliCommand;\n startSub: StartSubcommand;\n help: boolean;\n verbose: boolean;\n /** For start mcp: use stdio transport (default: streamable HTTP) */\n mcpStdio: boolean;\n pathOpt: string;\n /** For init: extension name (folder to create). If set, scaffold extension; else MCP project. */\n extensionName: string;\n outDir: string;\n include: string[];\n includeN8n: boolean;\n toolName: string;\n toolArgsJson: string;\n port: number;\n host: string;\n}\n\nconst DEFAULT_CORE_CONFIG = {\n sandboxRoot: process.cwd(),\n allowedHosts: [] as string[],\n};\n\nasync function getRuntimeWithTools(pathOpt?: string, verbose = false): Promise<{ runtime: Awaited<ReturnType<typeof createRuntimeFromConfig>>[\"runtime\"]; registry: Awaited<ReturnType<typeof createRuntimeFromConfig>>[\"registry\"] }> {\n const cwd = process.cwd();\n const searchDir = path.resolve(cwd, pathOpt ?? \".\");\n const stepLog = verbose ? (msg: string) => process.stderr.write(`[agent-tool] ${msg}\\n`) : undefined;\n if (stepLog) stepLog(`Loading tool config from ${searchDir}`);\n const config = findAndLoadToolConfig(searchDir);\n let sandboxRoot = cwd;\n if (config.sandboxedPath && typeof config.sandboxedPath === \"string\" && config.configPath) {\n sandboxRoot = resolveSandboxedPath(config.configPath, config.sandboxedPath);\n }\n if (stepLog) {\n if (config.configPath) {\n const n = Array.isArray(config.tools) ? config.tools.length : 0;\n stepLog(`Config: ${config.configPath} (${n} tool(s)), sandbox: ${sandboxRoot}`);\n } else {\n stepLog(\"No tool.yaml found\");\n }\n }\n const coreConfig = { sandboxRoot, allowedHosts: [] as string[] };\n const result = await createRuntimeFromConfig({\n coreTools: coreConfig,\n configFilePath: config.configPath,\n stepLog,\n });\n if (stepLog) stepLog(`Registered ${result.registry.snapshot().length} tool(s)`);\n return result;\n}\n\n/** Parse \"scope/name\" into { scope, name }; if no slash, scope is \"\", name is full. */\nfunction parseToolName(fullName: string): { scope: string; name: string } {\n const i = fullName.indexOf(\"/\");\n if (i < 0) return { scope: \"\", name: fullName };\n return { scope: fullName.slice(0, i), name: fullName.slice(i + 1) };\n}\n\nfunction parseArgv(argv: string[]): CliArgs {\n const args = argv.slice(2);\n let command: CliCommand = \"help\";\n let startSub: StartSubcommand = \"http\";\n let help = false;\n let verbose = false;\n let mcpStdio = false;\n let pathOpt = \"\";\n let extensionName = \"\";\n let outDir = \"\";\n let include: string[] = [];\n let includeN8n = false;\n let toolName = \"\";\n let toolArgsJson = \"{}\";\n let port = 3000;\n let host = \"127.0.0.1\";\n\n const commands: CliCommand[] = [\n \"init\", \"build\", \"serve\", \"list\", \"ls\", \"show\", \"describe\", \"run\", \"start\", \"help\",\n ];\n const startSubcommands: StartSubcommand[] = [\"mcp\", \"http\"];\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === \"--help\" || arg === \"-h\") {\n help = true;\n } else if (arg === \"--verbose\" || arg === \"-v\") {\n verbose = true;\n } else if (arg === \"--stdio\") {\n mcpStdio = true;\n } else if (arg === \"--path\" || arg === \"-p\") {\n pathOpt = path.resolve(process.cwd(), args[++i] ?? \"\");\n } else if (arg === \"--out\" || arg === \"-o\") {\n outDir = path.resolve(process.cwd(), args[++i] ?? \"\");\n } else if (arg === \"--include\" || arg === \"-i\") {\n const v = args[++i];\n if (v) include.push(v);\n } else if (arg === \"--include-n8n\") {\n includeN8n = true;\n } else if (arg === \"--port\") {\n const v = args[++i];\n if (v !== undefined) port = parseInt(v, 10) || 3000;\n } else if (arg === \"--host\") {\n const v = args[++i];\n if (v !== undefined) host = v;\n } else if (arg && !arg.startsWith(\"-\") && commands.includes(arg as CliCommand)) {\n command = arg as CliCommand;\n const nextArg = args[i + 1];\n if (command === \"init\" && nextArg !== undefined && !nextArg.startsWith(\"-\")) {\n extensionName = args[++i] ?? \"\";\n } else if ((command === \"show\" || command === \"describe\") && nextArg !== undefined && !nextArg.startsWith(\"-\")) {\n toolName = args[++i] ?? \"\";\n } else if (command === \"run\" && nextArg !== undefined && !nextArg.startsWith(\"-\")) {\n toolName = args[++i] ?? \"\";\n const runNext = args[i + 1];\n if (runNext !== undefined && !runNext.startsWith(\"-\")) {\n toolArgsJson = args[++i] ?? \"{}\";\n }\n } else if (command === \"start\" && nextArg !== undefined && !nextArg.startsWith(\"-\") && startSubcommands.includes(nextArg as StartSubcommand)) {\n startSub = args[++i] as StartSubcommand;\n }\n }\n }\n\n return { command, startSub, help, verbose, mcpStdio, pathOpt, extensionName, outDir, include, includeN8n, toolName, toolArgsJson, port, host };\n}\n\nfunction printHelp(): void {\n const bin = \"agent-tool\";\n process.stdout.write(`\nUsage: ${bin} <command> [options] [args]\n\nPrimary commands:\n ls List all tools (scope, name, description).\n describe <tool path> Show tool details (schema, capabilities, etc.).\n run <tool path> [params] Run a tool. Params: JSON, e.g. '{\"path\":\"README.md\"}'\n start mcp Start MCP server (default: Streamable HTTP; use --stdio for stdio).\n start http Start OpenAPI HTTP server (API + Swagger).\n\nOther commands:\n init [extension name] Create extension scaffold (folder + src + hello-world + generate-manifest + index + package.json). With no name: create MCP project in --path. Then: cd <folder> && npm install && npm run build.\n build Scan folder for @tool / SKILL / n8n, generate MCP npm package.\n serve Start the generated MCP server (stdio) for testing.\n list Alias for ls.\n show <tool> Alias for describe.\n help Show this help.\n\nOptions:\n --path, -p <path> For init/build/serve: path (default: cwd).\n --out, -o <path> For build: output directory.\n --include, -i <glob> For build: glob for TS files.\n --include-n8n For build: include n8n workflow tools.\n --verbose, -v Print step logs (config load, cache, tools registered).\n --stdio For start mcp: use stdio transport (default: Streamable HTTP).\n --port <number> For start mcp/http: port (default: 3000).\n --host <string> For start mcp/http: host (default: 127.0.0.1).\n --help, -h Show this help.\n\nExamples:\n ${bin} ls\n ${bin} describe core.fs.readText\n ${bin} run core.fs.readText '{\"path\":\"README.md\"}'\n ${bin} start mcp\n ${bin} start mcp --stdio\n ${bin} start http --port 3000\n ${bin} build --path . --out dist\n ${bin} init my-extension\n\nFor agent run (ReAct + agent.yaml): npx @easynet/agent-orchestra run \"task\" -c agent.yaml\n`);\n}\n\nasync function cmdInitExtension(extensionName: string, pathOpt: string): Promise<number> {\n try {\n const parentDir = pathOpt ? path.resolve(process.cwd(), pathOpt) : undefined;\n const { targetPath, filesCreated } = await initExtension({\n extensionName,\n parentDir: parentDir || process.cwd(),\n });\n process.stdout.write(\n `Extension scaffold at ${targetPath}\\nCreated: ${filesCreated.join(\", \")}\\nNext: cd ${path.basename(targetPath)} && npm install && npm run build\\n`,\n );\n return 0;\n } catch (err) {\n process.stderr.write(`Init extension failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n}\n\nasync function cmdInit(pathOpt: string): Promise<number> {\n try {\n const { targetPath, filesCreated } = await initProject({ targetPath: pathOpt || undefined });\n process.stdout.write(`Initialized project at ${targetPath}\\nCreated: ${filesCreated.join(\", \")}\\nNext: npm install && npm run build\\n`);\n return 0;\n } catch (err) {\n process.stderr.write(`Init failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n}\n\nasync function cmdBuild(\n pathOpt: string,\n outDir: string,\n include: string[],\n includeN8n: boolean,\n): Promise<number> {\n try {\n const result = await buildMcpPackage({\n projectPath: pathOpt || undefined,\n outDir: outDir || undefined,\n include: include.length > 0 ? include : undefined,\n includeN8n: includeN8n || undefined,\n });\n process.stdout.write(\n `Built ${result.toolCount} tool(s) -> ${result.outDir}\\nEntry: ${result.entryPath}\\nmcp.json: ${result.mcpJsonPath}\\n`,\n );\n return 0;\n } catch (err) {\n process.stderr.write(`Build failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n}\n\nasync function cmdServe(pathOpt: string): Promise<number> {\n try {\n const { process: child } = await runMcpServer({ path: pathOpt || undefined });\n child.stdin?.pipe(process.stdin);\n child.stdout?.pipe(process.stdout);\n process.stdin?.unref();\n const exit = new Promise<number>((resolve) => {\n child.on(\"close\", (code) => resolve(code ?? 0));\n });\n return exit;\n } catch (err) {\n process.stderr.write(`Serve failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n}\n\nconst LS_DESC_MAX = 72;\n\n/** Format tool list as table: SCOPE (full package name) | NAME | DESCRIPTION */\nfunction formatLsOutput(specs: ToolSpec[]): string {\n const rows = specs.map((spec) => {\n const { name } = parseToolName(spec.name);\n const scope = getDisplayScope(spec.name, spec.kind, spec.version);\n const desc = (spec.description ?? \"\")\n .replace(/\\n/g, \" \")\n .trim()\n .slice(0, LS_DESC_MAX);\n return { scope, name, description: desc || \"(no description)\" };\n });\n\n const scopeW = Math.max(6, ...rows.map((r) => r.scope.length));\n const nameW = Math.max(4, ...rows.map((r) => r.name.length));\n\n const sep = `${\"─\".repeat(scopeW)}┬${\"─\".repeat(nameW)}┬${\"─\".repeat(LS_DESC_MAX + 2)}`;\n const header = [\n \"SCOPE\".padEnd(scopeW),\n \"NAME\".padEnd(nameW),\n \"DESCRIPTION\",\n ].join(\" │ \");\n const lines = [\n header,\n sep,\n ...rows.map((r) =>\n [\n r.scope.padEnd(scopeW),\n r.name.padEnd(nameW),\n r.description,\n ].join(\" │ \")\n ),\n ];\n return lines.join(\"\\n\");\n}\n\n/** Format single tool details (describe) with clear sections */\nfunction formatDescribeOutput(spec: ToolSpec): string {\n const { name: localName } = parseToolName(spec.name);\n const scope = getDisplayScope(spec.name, spec.kind, spec.version);\n const sections: string[] = [];\n\n sections.push(\"┌─ Tool\");\n sections.push(`│ name: ${spec.name}`);\n sections.push(`│ scope: ${scope}`);\n sections.push(`│ localName: ${localName}`);\n sections.push(`│ version: ${spec.version}`);\n sections.push(`│ kind: ${spec.kind}`);\n sections.push(\"├─ Description\");\n sections.push(`│ ${(spec.description ?? \"(none)\").replace(/\\n/g, \"\\n│ \")}`);\n sections.push(\"├─ Tags\");\n sections.push(`│ ${spec.tags?.length ? spec.tags.join(\", \") : \"(none)\"}`);\n sections.push(\"├─ Capabilities\");\n sections.push(`│ ${spec.capabilities.join(\", \")}`);\n if (spec._meta?.hitl?.sideEffect) {\n sections.push(\"├─ HITL\");\n sections.push(`│ sideEffect: ${spec._meta.hitl.sideEffect}`);\n }\n sections.push(\"├─ Input schema\");\n sections.push(\n \"│ \" + JSON.stringify(spec.inputSchema, null, 2).replace(/\\n/g, \"\\n│ \")\n );\n sections.push(\"└─ Output schema\");\n sections.push(\n \" \" + JSON.stringify(spec.outputSchema, null, 2).replace(/\\n/g, \"\\n \")\n );\n\n return sections.join(\"\\n\");\n}\n\nasync function cmdLs(pathOpt?: string, verbose = false): Promise<number> {\n try {\n const { registry } = await getRuntimeWithTools(pathOpt, verbose);\n const specs = registry.snapshot();\n if (specs.length === 0) {\n process.stdout.write(\"No tools registered.\\n\");\n const cwd = process.cwd();\n const searchDir = path.resolve(cwd, pathOpt ?? \".\");\n const config = findAndLoadToolConfig(searchDir);\n const hasNpmTools = Array.isArray(config.tools) && config.tools.some((t) => typeof t === \"string\" && t.startsWith(\"npm:\"));\n if (hasNpmTools) {\n process.stdout.write(\n \"Tip: Install builtin tools in this directory so 'agent-tool ls' finds them: npm init -y && npm install @easynet/agent-tool-buildin\\n\"\n );\n }\n return 0;\n }\n specs.sort((a, b) => a.name.localeCompare(b.name));\n process.stdout.write(formatLsOutput(specs) + \"\\n\");\n return 0;\n } catch (err) {\n process.stderr.write(`ls failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n}\n\nasync function cmdDescribe(toolName: string, pathOpt?: string, verbose = false): Promise<number> {\n if (!toolName.trim()) {\n process.stderr.write(\"Usage: agent-tool describe <tool path>\\n\");\n return 1;\n }\n try {\n const { registry } = await getRuntimeWithTools(pathOpt, verbose);\n const registryName = resolveToolDescriptor(toolName.trim());\n const spec = registry.get(registryName);\n if (!spec) {\n process.stderr.write(`Tool not found: ${toolName}\\n`);\n return 1;\n }\n process.stdout.write(formatDescribeOutput(enrichSpecWithCanonicalSchema(spec)) + \"\\n\");\n return 0;\n } catch (err) {\n process.stderr.write(`describe failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n}\n\nfunction defaultExecContext(): ExecContext {\n return {\n requestId: `cli-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,\n taskId: `task-${Date.now()}`,\n permissions: [\n \"read:web\",\n \"read:fs\",\n \"write:fs\",\n \"read:db\",\n \"write:db\",\n \"network\",\n \"workflow\",\n \"danger:destructive\",\n \"exec\",\n ],\n };\n}\n\nasync function cmdRun(toolName: string, toolArgsJson: string, pathOpt?: string, verbose = false): Promise<number> {\n if (!toolName.trim()) {\n process.stderr.write(\"Usage: agent-tool run <tool path> [<json params>]\\n\");\n return 1;\n }\n let args: unknown = {};\n if (toolArgsJson.trim()) {\n try {\n args = JSON.parse(toolArgsJson) as unknown;\n } catch {\n process.stderr.write(\"Invalid JSON for parameters. Example: '{\\\"path\\\":\\\"README.md\\\"}'\\n\");\n return 1;\n }\n }\n try {\n const { runtime, registry } = await getRuntimeWithTools(pathOpt, verbose);\n const registryName = resolveToolDescriptor(toolName.trim());\n if (!registry.get(registryName)) {\n process.stderr.write(`Tool not found: ${toolName}\\n`);\n return 1;\n }\n const ctx = defaultExecContext();\n const result = await runtime.invoke(\n { tool: registryName, args, purpose: \"cli\" },\n ctx\n );\n if (result.ok) {\n process.stdout.write(JSON.stringify(result.result, null, 2) + \"\\n\");\n return 0;\n }\n process.stderr.write(`Tool error: ${result.error?.kind ?? \"unknown\"} - ${result.error?.message ?? \"\"}\\n`);\n return 1;\n } catch (err) {\n process.stderr.write(`Run failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n}\n\nasync function cmdStartMcp(pathOpt?: string, verbose = false, stdio = false, port = 3000, host = \"127.0.0.1\"): Promise<number> {\n try {\n const { runtime } = await getRuntimeWithTools(pathOpt, verbose);\n if (stdio) {\n await runMCPServerOverStdio(runtime);\n return 0;\n }\n const streamable = await createMCPServerStreamableHttp(runtime, { port, host, path: \"/mcp\" });\n const { url, port: actualPort } = await streamable.listen(port, host);\n process.stdout.write(`MCP Streamable HTTP: ${url}\\n`);\n await new Promise<void>(() => {});\n return 0;\n } catch (err) {\n process.stderr.write(`start mcp failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n}\n\nasync function cmdStartHttp(port: number, host: string, pathOpt?: string, verbose = false): Promise<number> {\n try {\n const { runtime } = await getRuntimeWithTools(pathOpt, verbose);\n const http = await createHttpService(runtime);\n const { port: actualPort, host: actualHost } = await http.listen({ port, host });\n const base = `http://${actualHost}:${actualPort}`;\n process.stdout.write(`API: ${base}/invoke (POST), ${base}/tools (GET)\\n`);\n process.stdout.write(`Swagger UI: ${base}/ (spec: ${base}/openapi.json)\\n`);\n await new Promise<void>(() => {});\n return 0;\n } catch (err) {\n process.stderr.write(`start http failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n}\n\nasync function main(argv: string[] = process.argv): Promise<number> {\n const { command, startSub, help, verbose, mcpStdio, pathOpt, extensionName, outDir, include, includeN8n, toolName, toolArgsJson, port, host } =\n parseArgv(argv);\n\n if (help || command === \"help\") {\n printHelp();\n return 0;\n }\n\n if (command === \"init\") {\n if (extensionName) return cmdInitExtension(extensionName, pathOpt);\n return cmdInit(pathOpt);\n }\n if (command === \"build\") return cmdBuild(pathOpt, outDir, include, includeN8n);\n if (command === \"serve\") return cmdServe(pathOpt);\n if (command === \"ls\" || command === \"list\") return cmdLs(pathOpt, verbose);\n if (command === \"describe\" || command === \"show\") return cmdDescribe(toolName, pathOpt, verbose);\n if (command === \"run\") return cmdRun(toolName, toolArgsJson, pathOpt, verbose);\n if (command === \"start\") {\n if (startSub === \"mcp\") return cmdStartMcp(pathOpt, verbose, mcpStdio, port, host);\n if (startSub === \"http\") return cmdStartHttp(port, host, pathOpt, verbose);\n process.stderr.write(\"Usage: agent-tool start mcp | agent-tool start http [--port 3000] [--host 127.0.0.1]\\n\");\n return 1;\n }\n\n printHelp();\n return 1;\n}\n\n/** Run CLI with the given argv (same shape as process.argv). Exported for tests. */\nexport async function run(argv: string[]): Promise<number> {\n return main(argv);\n}\n\nconst scriptPath = fileURLToPath(import.meta.url);\nconst invokedPath = process.argv[1];\nlet isMain = typeof process !== \"undefined\" && invokedPath !== undefined && invokedPath === scriptPath;\nif (!isMain && invokedPath) {\n try {\n isMain = realpathSync(invokedPath) === realpathSync(scriptPath);\n } catch {\n // keep isMain false if realpath fails\n }\n}\n\nif (isMain) {\n main()\n .then((code) => process.exit(code))\n .catch((err) => {\n process.stderr.write(String(err?.message ?? err) + \"\\n\");\n process.exit(1);\n });\n}\n"]}
1
+ {"version":3,"sources":["../../../src/api/expose/extension-init/initExtension.ts","../../../src/utils/cli/index.ts"],"names":["path","fs","findAndLoadToolConfig","resolveSandboxedPath","createRuntimeFromConfig","initProject","buildMcpPackage","runMcpServer","resolve","getDisplayScope","resolveToolDescriptor","enrichSpecWithCanonicalSchema","runMCPServerOverStdio","createMCPServerStreamableHttp","createHttpService","fileURLToPath","realpathSync"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Scaffold a new agent-tool extension: folder, src, hello-world tool, generate-manifest, index, package.json.\n * Use: agent-tool init <extension name> → then cd <name> && npm install && npm run build.\n */\n\nimport * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\n\nexport interface InitExtensionOptions {\n /** Extension name (folder name to create). */\n extensionName: string;\n /** Parent directory (default: process.cwd()). */\n parentDir?: string;\n /** npm package scope (e.g. \"wallee\" → package name @wallee/<name>). Optional. */\n scope?: string;\n}\n\n/** Sanitize extension name for npm package name: lowercase, hyphens allowed. */\nfunction toPackageName(name: string): string {\n return name\n .trim()\n .toLowerCase()\n .replace(/\\s+/g, \"-\")\n .replace(/[^a-z0-9-]/g, \"\");\n}\n\nfunction templates(packageName: string) {\n return {\n \"package.json\": `{\n \"name\": \"${packageName}\",\n \"version\": \"0.0.1\",\n \"description\": \"Tools extension for @easynet/agent-tool\",\n \"type\": \"module\",\n \"main\": \"./dist/index.js\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"default\": \"./dist/index.js\"\n }\n },\n \"files\": [\"dist\"],\n \"scripts\": {\n \"build\": \"tsx generate-manifest.ts && tsc -p tsconfig.build.json\",\n \"clean\": \"rm -rf dist\",\n \"pretest\": \"npm run build\",\n \"test\": \"vitest run\"\n },\n \"dependencies\": {\n \"@easynet/agent-tool\": \"latest\"\n },\n \"peerDependencies\": {\n \"@easynet/agent-tool\": \"*\"\n },\n \"devDependencies\": {\n \"tsx\": \"^4.19.2\",\n \"typescript\": \"~5.7.2\",\n \"vitest\": \"^2.1.8\"\n },\n \"license\": \"MIT\"\n}\n`,\n \"tsconfig.json\": `{\n \"compilerOptions\": {\n \"target\": \"ES2022\",\n \"module\": \"NodeNext\",\n \"moduleResolution\": \"NodeNext\",\n \"lib\": [\"ES2022\"],\n \"strict\": true,\n \"skipLibCheck\": true,\n \"declaration\": true,\n \"declarationMap\": true,\n \"sourceMap\": true,\n \"outDir\": \"./dist\",\n \"rootDir\": \".\",\n \"resolveJsonModule\": true,\n \"isolatedModules\": true\n },\n \"include\": [\"./**/*.ts\"],\n \"exclude\": [\"node_modules\", \"dist\", \"**/dist/**\"]\n}\n`,\n \"tsconfig.build.json\": `{\n \"extends\": \"./tsconfig.json\",\n \"compilerOptions\": { \"rootDir\": \".\", \"outDir\": \"dist\" },\n \"include\": [\"./**/*.ts\"],\n \"exclude\": [\"node_modules\", \"dist\", \"**/dist/**\", \"**/tsconfig*.json\", \"**/*.test.ts\", \"test\", \"scripts\", \"generate-manifest.ts\"]\n}\n`,\n \"generate-manifest.ts\": `/**\n * Build step: run framework generateManifest (scan src, emit manifest).\n * Tool names in the manifest are the exported function names.\n */\nimport { generateManifest } from \"@easynet/agent-tool\";\n\ngenerateManifest(process.cwd());\n`,\n \"index.ts\": `import { createExtension } from \"@easynet/agent-tool\";\nimport type { ToolRegistry, ToolAdapter } from \"@easynet/agent-tool\";\n\nconst ext = createExtension({ importMeta: import.meta });\n\n/** Framework contract: extension exports register(registry, options). */\nexport function register(\n registry: ToolRegistry,\n options?: { only?: string[]; namePrefixes?: string[] },\n): ToolAdapter {\n return ext.register(registry, options ?? {});\n}\n\nexport const getExtensionContext = ext.getContext;\nexport const runWithExtensionContext = ext.runWith;\n`,\n \"src/helloWorld.ts\": `/**\n * A simple hello-world tool.\n * @tool\n * @effect none\n */\nexport async function helloWorld(_args: Record<string, unknown>) {\n return {\n result: { message: \"Hello, World!\" },\n evidence: [\n {\n type: \"tool\",\n ref: \"helloWorld\",\n summary: \"Hello, World!\",\n createdAt: new Date().toISOString(),\n },\n ],\n };\n}\n`,\n \"README.md\": `# ${packageName}\n\nScaffolded by \\`agent-tool init ${packageName}\\`.\n\n## Quick start\n\n\\`\\`\\`bash\nnpm install\nnpm run build\n\\`\\`\\`\n\nAdd more tools under \\`src/\\` (export async functions with \\`@tool\\` JSDoc), then \\`npm run build\\` again.\n\n## Use in tool config\n\nIn your \\`tool.yaml\\` \\`tools.packages\\`:\n\n\\`\\`\\`yaml\ntools:\n packages:\n file:./path/to/${packageName}: {}\n\\`\\`\\`\n\nOr publish and use: \\`npm:@your-scope/${packageName}\\`\n`,\n };\n}\n\n/**\n * Create extension scaffold at parentDir/extensionName.\n * Returns target path and list of created files.\n */\nexport async function initExtension(\n options: InitExtensionOptions,\n): Promise<{ targetPath: string; filesCreated: string[] }> {\n const parent = path.resolve(options.parentDir ?? process.cwd());\n const name = options.extensionName.trim();\n if (!name) {\n throw new Error(\"Extension name is required\");\n }\n const targetPath = path.join(parent, name);\n const baseName = toPackageName(name) || name.replace(/\\s/g, \"-\").toLowerCase();\n const scopeNorm = options.scope?.trim().replace(/^@/, \"\") || \"\";\n const packageName = scopeNorm ? `@${scopeNorm}/${baseName}` : baseName;\n const filesCreated: string[] = [];\n const tmpl = templates(packageName);\n\n await fs.mkdir(targetPath, { recursive: true });\n\n for (const [relPath, content] of Object.entries(tmpl)) {\n const fullPath = path.join(targetPath, relPath);\n await fs.mkdir(path.dirname(fullPath), { recursive: true });\n await fs.writeFile(fullPath, content.trimStart(), \"utf8\");\n filesCreated.push(relPath);\n }\n\n return { targetPath, filesCreated };\n}\n","#!/usr/bin/env node\n/**\n * CLI for @easynet/agent-tool: ls | describe | run | start mcp | start http | init | build | serve | help.\n * Usage: agent-tool <command> [options] [args]\n * Primary: ls, describe [tool path], run [tool path] [parameters], start mcp, start http.\n */\n\nimport path from \"node:path\";\nimport { realpathSync } from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport { initProject } from \"../../api/expose/mcp-build/init.js\";\nimport { initExtension } from \"../../api/expose/extension-init/index.js\";\nimport { buildMcpPackage } from \"../../api/expose/mcp-build/build.js\";\nimport { runMcpServer } from \"../../api/expose/mcp-build/run.js\";\nimport { createRuntimeFromConfig, createRuntimeFromConfigSync } from \"../../api/runtimeFromConfig.js\";\nimport { createHttpService } from \"../../api/expose/openapiHttp.js\";\nimport { runMCPServerOverStdio, createMCPServerStreamableHttp } from \"../../api/expose/mcpServer.js\";\nimport type { ToolSpec } from \"../../core/types/ToolSpec.js\";\nimport type { ExecContext } from \"../../core/types/ToolIntent.js\";\nimport { getDisplayScope, resolveToolDescriptor } from \"../../tools/util/toolDescriptor.js\";\nimport { findAndLoadToolConfig, resolveSandboxedPath } from \"../../tools/util/toolConfig.js\";\nimport { enrichSpecWithCanonicalSchema } from \"../../tools/util/canonicalCoreSchemas.js\";\n\ntype CliCommand = \"init\" | \"build\" | \"serve\" | \"list\" | \"ls\" | \"show\" | \"describe\" | \"run\" | \"start\" | \"help\";\ntype StartSubcommand = \"mcp\" | \"http\";\n\ninterface CliArgs {\n command: CliCommand;\n startSub: StartSubcommand;\n help: boolean;\n verbose: boolean;\n /** For start mcp: use stdio transport (default: streamable HTTP) */\n mcpStdio: boolean;\n pathOpt: string;\n /** For init: extension name (folder to create). If set, scaffold extension; else MCP project. */\n extensionName: string;\n /** For init [extension name]: npm package scope (e.g. wallee → @wallee/name). */\n scope: string;\n outDir: string;\n include: string[];\n includeN8n: boolean;\n toolName: string;\n toolArgsJson: string;\n port: number;\n host: string;\n}\n\nconst DEFAULT_CORE_CONFIG = {\n sandboxRoot: process.cwd(),\n enableSandboxValidation: false,\n allowedHosts: [] as string[],\n};\n\nasync function getRuntimeWithTools(pathOpt?: string, verbose = false): Promise<{ runtime: Awaited<ReturnType<typeof createRuntimeFromConfig>>[\"runtime\"]; registry: Awaited<ReturnType<typeof createRuntimeFromConfig>>[\"registry\"] }> {\n const cwd = process.cwd();\n const searchDir = path.resolve(cwd, pathOpt ?? \".\");\n const stepLog = verbose ? (msg: string) => process.stderr.write(`[agent-tool] ${msg}\\n`) : undefined;\n if (stepLog) stepLog(`Loading tool config from ${searchDir}`);\n const config = findAndLoadToolConfig(searchDir);\n let sandboxRoot = cwd;\n if (config.sandboxedPath && typeof config.sandboxedPath === \"string\" && config.configPath) {\n sandboxRoot = resolveSandboxedPath(config.configPath, config.sandboxedPath);\n }\n if (stepLog) {\n if (config.configPath) {\n const n = Array.isArray(config.tools) ? config.tools.length : 0;\n stepLog(`Config: ${config.configPath} (${n} tool(s)), sandbox: ${sandboxRoot}`);\n } else {\n stepLog(\"No tool.yaml found\");\n }\n }\n const coreConfig = {\n sandboxRoot,\n enableSandboxValidation: config.enableSandboxValidation ?? DEFAULT_CORE_CONFIG.enableSandboxValidation,\n allowedHosts: [] as string[],\n };\n const result = await createRuntimeFromConfig({\n coreTools: coreConfig,\n configFilePath: config.configPath,\n stepLog,\n });\n if (stepLog) stepLog(`Registered ${result.registry.snapshot().length} tool(s)`);\n return result;\n}\n\n/** Parse \"scope/name\" into { scope, name }; if no slash, scope is \"\", name is full. */\nfunction parseToolName(fullName: string): { scope: string; name: string } {\n const i = fullName.indexOf(\"/\");\n if (i < 0) return { scope: \"\", name: fullName };\n return { scope: fullName.slice(0, i), name: fullName.slice(i + 1) };\n}\n\nfunction parseArgv(argv: string[]): CliArgs {\n const args = argv.slice(2);\n let command: CliCommand = \"help\";\n let startSub: StartSubcommand = \"http\";\n let help = false;\n let verbose = false;\n let mcpStdio = false;\n let pathOpt = \"\";\n let extensionName = \"\";\n let scope = \"\";\n let outDir = \"\";\n let include: string[] = [];\n let includeN8n = false;\n let toolName = \"\";\n let toolArgsJson = \"{}\";\n let port = 3000;\n let host = \"127.0.0.1\";\n\n const commands: CliCommand[] = [\n \"init\", \"build\", \"serve\", \"list\", \"ls\", \"show\", \"describe\", \"run\", \"start\", \"help\",\n ];\n const startSubcommands: StartSubcommand[] = [\"mcp\", \"http\"];\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg === \"--help\" || arg === \"-h\") {\n help = true;\n } else if (arg === \"--verbose\" || arg === \"-v\") {\n verbose = true;\n } else if (arg === \"--stdio\") {\n mcpStdio = true;\n } else if (arg === \"--path\" || arg === \"-p\") {\n pathOpt = path.resolve(process.cwd(), args[++i] ?? \"\");\n } else if (arg === \"--out\" || arg === \"-o\") {\n outDir = path.resolve(process.cwd(), args[++i] ?? \"\");\n } else if (arg === \"--include\" || arg === \"-i\") {\n const v = args[++i];\n if (v) include.push(v);\n } else if (arg === \"--include-n8n\") {\n includeN8n = true;\n } else if (arg === \"--port\") {\n const v = args[++i];\n if (v !== undefined) port = parseInt(v, 10) || 3000;\n } else if (arg === \"--host\") {\n const v = args[++i];\n if (v !== undefined) host = v;\n } else if (arg === \"--scope\" || arg === \"-s\") {\n scope = args[++i] ?? \"\";\n } else if (arg && !arg.startsWith(\"-\") && commands.includes(arg as CliCommand)) {\n command = arg as CliCommand;\n const nextArg = args[i + 1];\n if (command === \"init\" && nextArg !== undefined && !nextArg.startsWith(\"-\")) {\n extensionName = args[++i] ?? \"\";\n } else if ((command === \"show\" || command === \"describe\") && nextArg !== undefined && !nextArg.startsWith(\"-\")) {\n toolName = args[++i] ?? \"\";\n } else if (command === \"run\" && nextArg !== undefined && !nextArg.startsWith(\"-\")) {\n toolName = args[++i] ?? \"\";\n const runNext = args[i + 1];\n if (runNext !== undefined && !runNext.startsWith(\"-\")) {\n toolArgsJson = args[++i] ?? \"{}\";\n }\n } else if (command === \"start\" && nextArg !== undefined && !nextArg.startsWith(\"-\") && startSubcommands.includes(nextArg as StartSubcommand)) {\n startSub = args[++i] as StartSubcommand;\n }\n }\n }\n\n return { command, startSub, help, verbose, mcpStdio, pathOpt, extensionName, scope, outDir, include, includeN8n, toolName, toolArgsJson, port, host };\n}\n\nfunction printHelp(): void {\n const bin = \"agent-tool\";\n process.stdout.write(`\nUsage: ${bin} <command> [options] [args]\n\nPrimary commands:\n ls List all tools (scope, name, description).\n describe <tool path> Show tool details (schema, capabilities, etc.).\n run <tool path> [params] Run a tool. Params: JSON, e.g. '{\"path\":\"README.md\"}'\n start mcp Start MCP server (default: Streamable HTTP; use --stdio for stdio).\n start http Start OpenAPI HTTP server (API + Swagger).\n\nOther commands:\n init [extension name] Create extension scaffold (folder + src + hello-world + generate-manifest + index + package.json). With no name: create MCP project in --path. Then: cd <folder> && npm install && npm run build.\n build Scan folder for @tool / SKILL / n8n, generate MCP npm package.\n serve Start the generated MCP server (stdio) for testing.\n list Alias for ls.\n show <tool> Alias for describe.\n help Show this help.\n\nOptions:\n --path, -p <path> For init/build/serve: path (default: cwd).\n --scope, -s <scope> For init [extension name]: npm package scope (e.g. wallee → @wallee/<name>).\n --out, -o <path> For build: output directory.\n --include, -i <glob> For build: glob for TS files.\n --include-n8n For build: include n8n workflow tools.\n --verbose, -v Print step logs (config load, cache, tools registered).\n --stdio For start mcp: use stdio transport (default: Streamable HTTP).\n --port <number> For start mcp/http: port (default: 3000).\n --host <string> For start mcp/http: host (default: 127.0.0.1).\n --help, -h Show this help.\n\nExamples:\n ${bin} ls\n ${bin} describe core.fs.readText\n ${bin} run core.fs.readText '{\"path\":\"README.md\"}'\n ${bin} start mcp\n ${bin} start mcp --stdio\n ${bin} start http --port 3000\n ${bin} build --path . --out dist\n ${bin} init my-extension\n\nFor agent run (ReAct + agent.yaml): npx @easynet/agent-orchestra run \"task\" -c agent.yaml\n`);\n}\n\nasync function cmdInitExtension(extensionName: string, pathOpt: string, scope: string): Promise<number> {\n try {\n const parentDir = pathOpt ? path.resolve(process.cwd(), pathOpt) : undefined;\n const { targetPath, filesCreated } = await initExtension({\n extensionName,\n parentDir: parentDir || process.cwd(),\n scope: scope || undefined,\n });\n process.stdout.write(\n `Extension scaffold at ${targetPath}\\nCreated: ${filesCreated.join(\", \")}\\nNext: cd ${path.basename(targetPath)} && npm install && npm run build\\n`,\n );\n return 0;\n } catch (err) {\n process.stderr.write(`Init extension failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n}\n\nasync function cmdInit(pathOpt: string): Promise<number> {\n try {\n const { targetPath, filesCreated } = await initProject({ targetPath: pathOpt || undefined });\n process.stdout.write(`Initialized project at ${targetPath}\\nCreated: ${filesCreated.join(\", \")}\\nNext: npm install && npm run build\\n`);\n return 0;\n } catch (err) {\n process.stderr.write(`Init failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n}\n\nasync function cmdBuild(\n pathOpt: string,\n outDir: string,\n include: string[],\n includeN8n: boolean,\n): Promise<number> {\n try {\n const result = await buildMcpPackage({\n projectPath: pathOpt || undefined,\n outDir: outDir || undefined,\n include: include.length > 0 ? include : undefined,\n includeN8n: includeN8n || undefined,\n });\n process.stdout.write(\n `Built ${result.toolCount} tool(s) -> ${result.outDir}\\nEntry: ${result.entryPath}\\nmcp.json: ${result.mcpJsonPath}\\n`,\n );\n return 0;\n } catch (err) {\n process.stderr.write(`Build failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n}\n\nasync function cmdServe(pathOpt: string): Promise<number> {\n try {\n const { process: child } = await runMcpServer({ path: pathOpt || undefined });\n child.stdin?.pipe(process.stdin);\n child.stdout?.pipe(process.stdout);\n process.stdin?.unref();\n const exit = new Promise<number>((resolve) => {\n child.on(\"close\", (code) => resolve(code ?? 0));\n });\n return exit;\n } catch (err) {\n process.stderr.write(`Serve failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n}\n\nconst LS_DESC_MAX = 72;\n\n/** Format tool list as table: SCOPE (full package name) | NAME | DESCRIPTION */\nfunction formatLsOutput(specs: ToolSpec[]): string {\n const rows = specs.map((spec) => {\n const { name } = parseToolName(spec.name);\n const scope = getDisplayScope(spec.name, spec.kind, spec.version);\n const desc = (spec.description ?? \"\")\n .replace(/\\n/g, \" \")\n .trim()\n .slice(0, LS_DESC_MAX);\n return { scope, name, description: desc || \"(no description)\" };\n });\n\n const scopeW = Math.max(6, ...rows.map((r) => r.scope.length));\n const nameW = Math.max(4, ...rows.map((r) => r.name.length));\n\n const sep = `${\"─\".repeat(scopeW)}┬${\"─\".repeat(nameW)}┬${\"─\".repeat(LS_DESC_MAX + 2)}`;\n const header = [\n \"SCOPE\".padEnd(scopeW),\n \"NAME\".padEnd(nameW),\n \"DESCRIPTION\",\n ].join(\" │ \");\n const lines = [\n header,\n sep,\n ...rows.map((r) =>\n [\n r.scope.padEnd(scopeW),\n r.name.padEnd(nameW),\n r.description,\n ].join(\" │ \")\n ),\n ];\n return lines.join(\"\\n\");\n}\n\n/** Format single tool details (describe) with clear sections */\nfunction formatDescribeOutput(spec: ToolSpec): string {\n const { name: localName } = parseToolName(spec.name);\n const scope = getDisplayScope(spec.name, spec.kind, spec.version);\n const sections: string[] = [];\n\n sections.push(\"┌─ Tool\");\n sections.push(`│ name: ${spec.name}`);\n sections.push(`│ scope: ${scope}`);\n sections.push(`│ localName: ${localName}`);\n sections.push(`│ version: ${spec.version}`);\n sections.push(`│ kind: ${spec.kind}`);\n sections.push(\"├─ Description\");\n sections.push(`│ ${(spec.description ?? \"(none)\").replace(/\\n/g, \"\\n│ \")}`);\n sections.push(\"├─ Tags\");\n sections.push(`│ ${spec.tags?.length ? spec.tags.join(\", \") : \"(none)\"}`);\n sections.push(\"├─ Capabilities\");\n sections.push(`│ ${spec.capabilities.join(\", \")}`);\n if (spec._meta?.hitl?.sideEffect) {\n sections.push(\"├─ HITL\");\n sections.push(`│ sideEffect: ${spec._meta.hitl.sideEffect}`);\n }\n sections.push(\"├─ Input schema\");\n sections.push(\n \"│ \" + JSON.stringify(spec.inputSchema, null, 2).replace(/\\n/g, \"\\n│ \")\n );\n sections.push(\"└─ Output schema\");\n sections.push(\n \" \" + JSON.stringify(spec.outputSchema, null, 2).replace(/\\n/g, \"\\n \")\n );\n\n return sections.join(\"\\n\");\n}\n\nasync function cmdLs(pathOpt?: string, verbose = false): Promise<number> {\n try {\n const { registry } = await getRuntimeWithTools(pathOpt, verbose);\n const specs = registry.snapshot();\n if (specs.length === 0) {\n process.stdout.write(\"No tools registered.\\n\");\n const cwd = process.cwd();\n const searchDir = path.resolve(cwd, pathOpt ?? \".\");\n const config = findAndLoadToolConfig(searchDir);\n const hasNpmTools = Array.isArray(config.tools) && config.tools.some((t) => typeof t === \"string\" && t.startsWith(\"npm:\"));\n if (hasNpmTools) {\n process.stdout.write(\n \"Tip: Install builtin tools in this directory so 'agent-tool ls' finds them: npm init -y && npm install @easynet/agent-tool-buildin\\n\"\n );\n }\n return 0;\n }\n specs.sort((a, b) => a.name.localeCompare(b.name));\n process.stdout.write(formatLsOutput(specs) + \"\\n\");\n return 0;\n } catch (err) {\n process.stderr.write(`ls failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n}\n\nasync function cmdDescribe(toolName: string, pathOpt?: string, verbose = false): Promise<number> {\n if (!toolName.trim()) {\n process.stderr.write(\"Usage: agent-tool describe <tool path>\\n\");\n return 1;\n }\n try {\n const { registry } = await getRuntimeWithTools(pathOpt, verbose);\n const registryName = resolveToolDescriptor(toolName.trim());\n const spec = registry.get(registryName);\n if (!spec) {\n process.stderr.write(`Tool not found: ${toolName}\\n`);\n return 1;\n }\n process.stdout.write(formatDescribeOutput(enrichSpecWithCanonicalSchema(spec)) + \"\\n\");\n return 0;\n } catch (err) {\n process.stderr.write(`describe failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n}\n\nfunction defaultExecContext(): ExecContext {\n return {\n requestId: `cli-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,\n taskId: `task-${Date.now()}`,\n permissions: [\n \"read:web\",\n \"read:fs\",\n \"write:fs\",\n \"read:db\",\n \"write:db\",\n \"network\",\n \"workflow\",\n \"danger:destructive\",\n \"exec\",\n ],\n };\n}\n\nasync function cmdRun(toolName: string, toolArgsJson: string, pathOpt?: string, verbose = false): Promise<number> {\n if (!toolName.trim()) {\n process.stderr.write(\"Usage: agent-tool run <tool path> [<json params>]\\n\");\n return 1;\n }\n let args: unknown = {};\n if (toolArgsJson.trim()) {\n try {\n args = JSON.parse(toolArgsJson) as unknown;\n } catch {\n process.stderr.write(\"Invalid JSON for parameters. Example: '{\\\"path\\\":\\\"README.md\\\"}'\\n\");\n return 1;\n }\n }\n try {\n const { runtime, registry } = await getRuntimeWithTools(pathOpt, verbose);\n const registryName = resolveToolDescriptor(toolName.trim());\n if (!registry.get(registryName)) {\n process.stderr.write(`Tool not found: ${toolName}\\n`);\n return 1;\n }\n const ctx = defaultExecContext();\n const result = await runtime.invoke(\n { tool: registryName, args, purpose: \"cli\" },\n ctx\n );\n if (result.ok) {\n process.stdout.write(JSON.stringify(result.result, null, 2) + \"\\n\");\n return 0;\n }\n process.stderr.write(`Tool error: ${result.error?.kind ?? \"unknown\"} - ${result.error?.message ?? \"\"}\\n`);\n return 1;\n } catch (err) {\n process.stderr.write(`Run failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n}\n\nasync function cmdStartMcp(pathOpt?: string, verbose = false, stdio = false, port = 3000, host = \"127.0.0.1\"): Promise<number> {\n try {\n const { runtime } = await getRuntimeWithTools(pathOpt, verbose);\n if (stdio) {\n await runMCPServerOverStdio(runtime);\n return 0;\n }\n const streamable = await createMCPServerStreamableHttp(runtime, { port, host, path: \"/mcp\" });\n const { url, port: actualPort } = await streamable.listen(port, host);\n process.stdout.write(`MCP Streamable HTTP: ${url}\\n`);\n await new Promise<void>(() => {});\n return 0;\n } catch (err) {\n process.stderr.write(`start mcp failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n}\n\nasync function cmdStartHttp(port: number, host: string, pathOpt?: string, verbose = false): Promise<number> {\n try {\n const { runtime } = await getRuntimeWithTools(pathOpt, verbose);\n const http = await createHttpService(runtime);\n const { port: actualPort, host: actualHost } = await http.listen({ port, host });\n const base = `http://${actualHost}:${actualPort}`;\n process.stdout.write(`API: ${base}/invoke (POST), ${base}/tools (GET)\\n`);\n process.stdout.write(`Swagger UI: ${base}/ (spec: ${base}/openapi.json)\\n`);\n await new Promise<void>(() => {});\n return 0;\n } catch (err) {\n process.stderr.write(`start http failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n}\n\nasync function main(argv: string[] = process.argv): Promise<number> {\n const { command, startSub, help, verbose, mcpStdio, pathOpt, extensionName, scope, outDir, include, includeN8n, toolName, toolArgsJson, port, host } =\n parseArgv(argv);\n\n if (help || command === \"help\") {\n printHelp();\n return 0;\n }\n\n if (command === \"init\") {\n if (extensionName) return cmdInitExtension(extensionName, pathOpt, scope);\n return cmdInit(pathOpt);\n }\n if (command === \"build\") return cmdBuild(pathOpt, outDir, include, includeN8n);\n if (command === \"serve\") return cmdServe(pathOpt);\n if (command === \"ls\" || command === \"list\") return cmdLs(pathOpt, verbose);\n if (command === \"describe\" || command === \"show\") return cmdDescribe(toolName, pathOpt, verbose);\n if (command === \"run\") return cmdRun(toolName, toolArgsJson, pathOpt, verbose);\n if (command === \"start\") {\n if (startSub === \"mcp\") return cmdStartMcp(pathOpt, verbose, mcpStdio, port, host);\n if (startSub === \"http\") return cmdStartHttp(port, host, pathOpt, verbose);\n process.stderr.write(\"Usage: agent-tool start mcp | agent-tool start http [--port 3000] [--host 127.0.0.1]\\n\");\n return 1;\n }\n\n printHelp();\n return 1;\n}\n\n/** Run CLI with the given argv (same shape as process.argv). Exported for tests. */\nexport async function run(argv: string[]): Promise<number> {\n return main(argv);\n}\n\nconst scriptPath = fileURLToPath(import.meta.url);\nconst invokedPath = process.argv[1];\nlet isMain = typeof process !== \"undefined\" && invokedPath !== undefined && invokedPath === scriptPath;\nif (!isMain && invokedPath) {\n try {\n isMain = realpathSync(invokedPath) === realpathSync(scriptPath);\n } catch {\n // keep isMain false if realpath fails\n }\n}\n\nif (isMain) {\n main()\n .then((code) => process.exit(code))\n .catch((err) => {\n process.stderr.write(String(err?.message ?? err) + \"\\n\");\n process.exit(1);\n });\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/cli/index.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAgfH,oFAAoF;AACpF,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAEzD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/cli/index.ts"],"names":[],"mappings":";AACA;;;;GAIG;AA4fH,oFAAoF;AACpF,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAEzD"}
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
- import { initProject, buildMcpPackage, runMcpServer } from '../../chunk-HEMWFWSK.js';
3
- import { runMCPServerOverStdio, createMCPServerStreamableHttp, createHttpService } from '../../chunk-NJ46JOBI.js';
4
- import { findAndLoadToolConfig, resolveToolDescriptor, resolveSandboxedPath, createRuntimeFromConfig, getDisplayScope } from '../../chunk-7VBJ64YC.js';
2
+ import { initProject, buildMcpPackage, runMcpServer } from '../../chunk-JRT4FEQB.js';
3
+ import { runMCPServerOverStdio, createMCPServerStreamableHttp, createHttpService } from '../../chunk-OAZPWIHV.js';
4
+ import { findAndLoadToolConfig, resolveToolDescriptor, resolveSandboxedPath2, createRuntimeFromConfig, getDisplayScope } from '../../chunk-YZLDVSS4.js';
5
5
  import '../../chunk-ZRHPGW7W.js';
6
6
  import '../../chunk-KDB3MY2H.js';
7
7
  import { enrichSpecWithCanonicalSchema } from '../../chunk-NTWOVFEY.js';
@@ -38,11 +38,13 @@ function templates(packageName) {
38
38
  "pretest": "npm run build",
39
39
  "test": "vitest run"
40
40
  },
41
+ "dependencies": {
42
+ "@easynet/agent-tool": "latest"
43
+ },
41
44
  "peerDependencies": {
42
- "@easynet/agent-tool": ">=1.0.31"
45
+ "@easynet/agent-tool": "*"
43
46
  },
44
47
  "devDependencies": {
45
- "@easynet/agent-tool": "^1.0.34",
46
48
  "tsx": "^4.19.2",
47
49
  "typescript": "~5.7.2",
48
50
  "vitest": "^2.1.8"
@@ -154,7 +156,9 @@ async function initExtension(options) {
154
156
  throw new Error("Extension name is required");
155
157
  }
156
158
  const targetPath = path2.join(parent, name);
157
- const packageName = toPackageName(name) || name.replace(/\s/g, "-").toLowerCase();
159
+ const baseName = toPackageName(name) || name.replace(/\s/g, "-").toLowerCase();
160
+ const scopeNorm = options.scope?.trim().replace(/^@/, "") || "";
161
+ const packageName = scopeNorm ? `@${scopeNorm}/${baseName}` : baseName;
158
162
  const filesCreated = [];
159
163
  const tmpl = templates(packageName);
160
164
  await fs.mkdir(targetPath, { recursive: true });
@@ -168,8 +172,9 @@ async function initExtension(options) {
168
172
  }
169
173
 
170
174
  // src/utils/cli/index.ts
171
- ({
172
- sandboxRoot: process.cwd()});
175
+ var DEFAULT_CORE_CONFIG = {
176
+ sandboxRoot: process.cwd(),
177
+ enableSandboxValidation: false};
173
178
  async function getRuntimeWithTools(pathOpt, verbose = false) {
174
179
  const cwd = process.cwd();
175
180
  const searchDir = path2__default.resolve(cwd, pathOpt ?? ".");
@@ -179,7 +184,7 @@ async function getRuntimeWithTools(pathOpt, verbose = false) {
179
184
  const config = findAndLoadToolConfig(searchDir);
180
185
  let sandboxRoot = cwd;
181
186
  if (config.sandboxedPath && typeof config.sandboxedPath === "string" && config.configPath) {
182
- sandboxRoot = resolveSandboxedPath(config.configPath, config.sandboxedPath);
187
+ sandboxRoot = resolveSandboxedPath2(config.configPath, config.sandboxedPath);
183
188
  }
184
189
  if (stepLog) {
185
190
  if (config.configPath) {
@@ -189,7 +194,11 @@ async function getRuntimeWithTools(pathOpt, verbose = false) {
189
194
  stepLog("No tool.yaml found");
190
195
  }
191
196
  }
192
- const coreConfig = { sandboxRoot, allowedHosts: [] };
197
+ const coreConfig = {
198
+ sandboxRoot,
199
+ enableSandboxValidation: config.enableSandboxValidation ?? DEFAULT_CORE_CONFIG.enableSandboxValidation,
200
+ allowedHosts: []
201
+ };
193
202
  const result = await createRuntimeFromConfig({
194
203
  coreTools: coreConfig,
195
204
  configFilePath: config.configPath,
@@ -212,6 +221,7 @@ function parseArgv(argv) {
212
221
  let mcpStdio = false;
213
222
  let pathOpt = "";
214
223
  let extensionName = "";
224
+ let scope = "";
215
225
  let outDir = "";
216
226
  let include = [];
217
227
  let includeN8n = false;
@@ -255,6 +265,8 @@ function parseArgv(argv) {
255
265
  } else if (arg === "--host") {
256
266
  const v = args[++i];
257
267
  if (v !== void 0) host = v;
268
+ } else if (arg === "--scope" || arg === "-s") {
269
+ scope = args[++i] ?? "";
258
270
  } else if (arg && !arg.startsWith("-") && commands.includes(arg)) {
259
271
  command = arg;
260
272
  const nextArg = args[i + 1];
@@ -273,7 +285,7 @@ function parseArgv(argv) {
273
285
  }
274
286
  }
275
287
  }
276
- return { command, startSub, help, verbose, mcpStdio, pathOpt, extensionName, outDir, include, includeN8n, toolName, toolArgsJson, port, host };
288
+ return { command, startSub, help, verbose, mcpStdio, pathOpt, extensionName, scope, outDir, include, includeN8n, toolName, toolArgsJson, port, host };
277
289
  }
278
290
  function printHelp() {
279
291
  const bin = "agent-tool";
@@ -297,6 +309,7 @@ Other commands:
297
309
 
298
310
  Options:
299
311
  --path, -p <path> For init/build/serve: path (default: cwd).
312
+ --scope, -s <scope> For init [extension name]: npm package scope (e.g. wallee \u2192 @wallee/<name>).
300
313
  --out, -o <path> For build: output directory.
301
314
  --include, -i <glob> For build: glob for TS files.
302
315
  --include-n8n For build: include n8n workflow tools.
@@ -319,12 +332,13 @@ Examples:
319
332
  For agent run (ReAct + agent.yaml): npx @easynet/agent-orchestra run "task" -c agent.yaml
320
333
  `);
321
334
  }
322
- async function cmdInitExtension(extensionName, pathOpt) {
335
+ async function cmdInitExtension(extensionName, pathOpt, scope) {
323
336
  try {
324
337
  const parentDir = pathOpt ? path2__default.resolve(process.cwd(), pathOpt) : void 0;
325
338
  const { targetPath, filesCreated } = await initExtension({
326
339
  extensionName,
327
- parentDir: parentDir || process.cwd()
340
+ parentDir: parentDir || process.cwd(),
341
+ scope: scope || void 0
328
342
  });
329
343
  process.stdout.write(
330
344
  `Extension scaffold at ${targetPath}
@@ -595,13 +609,13 @@ async function cmdStartHttp(port, host, pathOpt, verbose = false) {
595
609
  }
596
610
  }
597
611
  async function main(argv = process.argv) {
598
- const { command, startSub, help, verbose, mcpStdio, pathOpt, extensionName, outDir, include, includeN8n, toolName, toolArgsJson, port, host } = parseArgv(argv);
612
+ const { command, startSub, help, verbose, mcpStdio, pathOpt, extensionName, scope, outDir, include, includeN8n, toolName, toolArgsJson, port, host } = parseArgv(argv);
599
613
  if (help || command === "help") {
600
614
  printHelp();
601
615
  return 0;
602
616
  }
603
617
  if (command === "init") {
604
- if (extensionName) return cmdInitExtension(extensionName, pathOpt);
618
+ if (extensionName) return cmdInitExtension(extensionName, pathOpt, scope);
605
619
  return cmdInit(pathOpt);
606
620
  }
607
621
  if (command === "build") return cmdBuild(pathOpt, outDir, include, includeN8n);