@easynet/agent-tool 1.0.93 → 1.0.95
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.
- package/README.md +26 -0
- package/dist/agent-context.d.ts +1 -1
- package/dist/agent-context.d.ts.map +1 -1
- package/dist/build.cjs +5 -5
- package/dist/build.js +2 -2
- package/dist/{chunk-BMU5SD2G.cjs → chunk-2TFGOUXN.cjs} +10 -10
- package/dist/chunk-2TFGOUXN.cjs.map +1 -0
- package/dist/{chunk-2YP4Q4BW.js → chunk-34SG3EMW.js} +3 -3
- package/dist/{chunk-2YP4Q4BW.js.map → chunk-34SG3EMW.js.map} +1 -1
- package/dist/{chunk-QYY6PNIB.cjs → chunk-HMC5G5FQ.cjs} +4 -4
- package/dist/chunk-HMC5G5FQ.cjs.map +1 -0
- package/dist/{chunk-IJVVH4JN.js → chunk-JEOBJ37J.js} +3 -3
- package/dist/chunk-JEOBJ37J.js.map +1 -0
- package/dist/{chunk-SNN4QJ5Z.js → chunk-POUTZDWB.js} +3 -3
- package/dist/chunk-POUTZDWB.js.map +1 -0
- package/dist/{chunk-LKE7PMRB.cjs → chunk-VLV5F6HX.cjs} +4 -4
- package/dist/chunk-VLV5F6HX.cjs.map +1 -0
- package/dist/{chunk-Z6FD2GKB.js → chunk-WCMZLN3F.js} +4 -4
- package/dist/chunk-WCMZLN3F.js.map +1 -0
- package/dist/{chunk-ZDEQREVL.cjs → chunk-XUIGSBWG.cjs} +7 -7
- package/dist/{chunk-ZDEQREVL.cjs.map → chunk-XUIGSBWG.cjs.map} +1 -1
- package/dist/index.cjs +21 -20
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/dist/sdk.cjs +6 -6
- package/dist/sdk.js +2 -2
- package/dist/utils/cli/index.cjs +17 -17
- package/dist/utils/cli/index.js +3 -3
- package/package.json +1 -1
- package/dist/chunk-BMU5SD2G.cjs.map +0 -1
- package/dist/chunk-IJVVH4JN.js.map +0 -1
- package/dist/chunk-LKE7PMRB.cjs.map +0 -1
- package/dist/chunk-QYY6PNIB.cjs.map +0 -1
- package/dist/chunk-SNN4QJ5Z.js.map +0 -1
- package/dist/chunk-Z6FD2GKB.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkVLV5F6HX_cjs = require('./chunk-VLV5F6HX.cjs');
|
|
4
4
|
var chunkJW4EMVTE_cjs = require('./chunk-JW4EMVTE.cjs');
|
|
5
5
|
var fs2 = require('fs/promises');
|
|
6
6
|
var path3 = require('path');
|
|
@@ -134,16 +134,16 @@ async function scanForAllTools(projectPath, options = {}) {
|
|
|
134
134
|
const includeN8n = options.includeN8n === true;
|
|
135
135
|
const opts = { include, tsconfigPath };
|
|
136
136
|
const results = await Promise.all([
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
...includeN8n ? [
|
|
137
|
+
chunkVLV5F6HX_cjs.discoverTools("function", projectPath, opts),
|
|
138
|
+
chunkVLV5F6HX_cjs.discoverTools("skill", projectPath, opts),
|
|
139
|
+
...includeN8n ? [chunkVLV5F6HX_cjs.discoverTools("n8n", projectPath, opts)] : []
|
|
140
140
|
]);
|
|
141
141
|
const specs = results.flatMap((r) => r.specs);
|
|
142
142
|
const errors = results.flatMap((r) => r.errors);
|
|
143
143
|
const warnings = results.flatMap((r) => r.warnings ?? []);
|
|
144
144
|
return { specs, errors, warnings };
|
|
145
145
|
}
|
|
146
|
-
var __dirname$1 = path3__namespace.dirname(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-
|
|
146
|
+
var __dirname$1 = path3__namespace.dirname(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-XUIGSBWG.cjs', document.baseURI).href))));
|
|
147
147
|
async function loadTemplate(name) {
|
|
148
148
|
for (const dir of [
|
|
149
149
|
path3__namespace.join(__dirname$1, "templates"),
|
|
@@ -346,5 +346,5 @@ async function runMCPServer(options = {}) {
|
|
|
346
346
|
exports.buildMCPPackage = buildMCPPackage;
|
|
347
347
|
exports.initProject = initProject;
|
|
348
348
|
exports.runMCPServer = runMCPServer;
|
|
349
|
-
//# sourceMappingURL=chunk-
|
|
350
|
-
//# sourceMappingURL=chunk-
|
|
349
|
+
//# sourceMappingURL=chunk-XUIGSBWG.cjs.map
|
|
350
|
+
//# sourceMappingURL=chunk-XUIGSBWG.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/api/expose/mcp-build/init.ts","../src/tools/scanPackage.ts","../src/api/expose/mcp-build/generator.ts","../src/api/expose/mcp-build/build.ts","../src/api/expose/mcp-build/run.ts"],"names":["path","fs","discoverTools","__dirname","path3","fileURLToPath","fs2","FUNCTION_KIND","SKILL_KIND","N8N_KIND","path4","path5","fs3","spawn"],"mappings":"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","file":"chunk-ZDEQREVL.cjs","sourcesContent":["/**\n * Scaffold a new MCP tool project: @tool TS, SKILL sample, tsconfig, README.\n * Use: init → build → run.\n */\n\nimport * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\n\nexport interface InitOptions {\n /** Target directory to create project (default: cwd). */\n targetPath?: string;\n}\n\nconst TEMPLATES = {\n \"package.json\": `{\n \"name\": \"my-mcp-tools\",\n \"version\": \"1.0.0\",\n \"private\": true,\n \"type\": \"module\",\n \"scripts\": {\n \"build\": \"node build.mjs\",\n \"start\": \"node start.mjs\"\n },\n \"devDependencies\": {\n \"@easynet/agent-tool\": \"latest\"\n }\n}\n`,\n \"build.mjs\": `import { buildMCPPackage } from \"@easynet/agent-tool/build\";\n\nconst result = await buildMCPPackage({ outDir: \"dist\" });\nconsole.log(\"Built\", result.toolCount, \"tool(s) ->\", result.outDir);\n`,\n \"start.mjs\": `import { runMCPServer } from \"@easynet/agent-tool/build\";\n\nconst { process: child } = await runMCPServer({ path: \"./dist\" });\nchild.stdin?.pipe(process.stdin);\nchild.stdout?.pipe(process.stdout);\nchild.stderr?.pipe(process.stderr);\nprocess.stdin?.ref();\nchild.on(\"close\", (code) => process.exit(code ?? 0));\n`,\n \"tsconfig.json\": `{\n \"compilerOptions\": {\n \"target\": \"ES2022\",\n \"module\": \"ESNext\",\n \"strict\": true,\n \"skipLibCheck\": true,\n \"noEmit\": true\n },\n \"include\": [\"src/**/*.ts\"]\n}\n`,\n \"src/tools/example.ts\": `/**\n * Add two numbers.\n * @tool\n */\nexport async function add(a: number, b: number): Promise<number> {\n return a + b;\n}\n`,\n \"skills/hello-skill/SKILL.md\": `---\nname: hello-skill\ndescription: Say hello with a name.\n---\n\n# Hello Skill\n\nReturns a greeting for the given name.\n`,\n \"skills/hello-skill/handler.js\": `export default async function handler(args, ctx) {\n const name = args?.name ?? \"World\";\n return { message: \\`Hello, \\${name}!\\` };\n}\n`,\n \"README.md\": `# MCP Tool Project\n\nScaffolded by \\`agent-tool init\\`. Workflow:\n\n1. **init** — create project template (you are here)\n2. **npm install** — install dependencies\n3. **npm run build** — generate MCP package under \\`dist/\\`\n4. **npm start** — start the MCP server for testing\n\n## Quick start\n\n\\`\\`\\`bash\nnpm install\nnpm run build\nnpm start\n\\`\\`\\`\n\nEdit \\`src/tools/*.ts\\` (add \\`@tool\\` JSDoc) and/or \\`skills/*/SKILL.md\\`, then \\`npm run build\\` again.\n`,\n};\n\n/**\n * Create project template at targetPath. Writes tsconfig, src/tools/example.ts,\n * skills/hello-skill (SKILL.md + handler.js), and README.\n */\nexport async function initProject(options: InitOptions = {}): Promise<{ targetPath: string; filesCreated: string[] }> {\n const targetPath = path.resolve(options.targetPath ?? process.cwd());\n const filesCreated: string[] = [];\n\n await fs.mkdir(targetPath, { recursive: true });\n\n for (const [relPath, content] of Object.entries(TEMPLATES)) {\n const fullPath = path.join(targetPath, relPath);\n await fs.mkdir(path.dirname(fullPath), { recursive: true });\n try {\n await fs.access(fullPath);\n if (relPath === \"package.json\") continue; // skip so we don't overwrite existing\n } catch {\n // file doesn't exist, write it\n }\n await fs.writeFile(fullPath, content, \"utf8\");\n filesCreated.push(relPath);\n }\n\n return { targetPath, filesCreated };\n}\n","/**\n * Scan package for tools: scanForAllTools, scanPackageForTools, registerPackageTools.\n * Aggregates function/skill/n8n discovery and optional directory discovery.\n */\n\nimport * as path from \"node:path\";\nimport type { ToolSpec } from \"../core/types/ToolSpec.js\";\nimport {\n discoverTools,\n DirectoryScanner,\n type DiscoverToolsOptions,\n} from \"./discoveryFactory.js\";\n\nexport interface ScanAllToolsResult {\n specs: ToolSpec[];\n errors: Array<{ file: string; message: string }>;\n warnings: Array<{ file: string; message: string }>;\n}\n\nexport interface ScanAllToolsOptions {\n include?: string[];\n tsconfigPath?: string;\n includeN8n?: boolean;\n}\n\nexport async function scanForAllTools(\n projectPath: string,\n options: ScanAllToolsOptions = {},\n): Promise<ScanAllToolsResult> {\n const include = options.include ?? [\"**/*.ts\"];\n const tsconfigPath = options.tsconfigPath;\n const includeN8n = options.includeN8n === true;\n const opts: DiscoverToolsOptions = { include, tsconfigPath };\n\n const results = await Promise.all([\n discoverTools(\"function\", projectPath, opts),\n discoverTools(\"skill\", projectPath, opts),\n ...(includeN8n ? [discoverTools(\"n8n\", projectPath, opts)] : []),\n ]);\n const specs = results.flatMap((r) => r.specs);\n const errors = results.flatMap((r) => r.errors);\n const warnings = results.flatMap((r) => r.warnings ?? []);\n\n return { specs, errors, warnings };\n}\n\nexport interface ScanPackageResult {\n specs: ToolSpec[];\n errors: Array<{ file: string; message: string }>;\n warnings: Array<{ file: string; message: string }>;\n}\n\nexport interface ScanPackageOptions extends ScanAllToolsOptions {\n includeDirectoryDiscovery?: boolean;\n namespace?: string;\n}\n\nexport async function scanPackageForTools(\n packagePath: string,\n options: ScanPackageOptions = {},\n): Promise<ScanPackageResult> {\n const root = path.resolve(packagePath);\n const includeDirectoryDiscovery = options.includeDirectoryDiscovery !== false;\n const namespace = options.namespace ?? \"pkg\";\n\n const errors: Array<{ file: string; message: string }> = [];\n const warnings: Array<{ file: string; message: string }> = [];\n\n const scanResult = await scanForAllTools(root, {\n include: options.include,\n tsconfigPath: options.tsconfigPath,\n includeN8n: options.includeN8n,\n });\n errors.push(...scanResult.errors);\n warnings.push(...scanResult.warnings);\n\n let dirSpecs: ToolSpec[] = [];\n if (includeDirectoryDiscovery) {\n const scanner = new DirectoryScanner({\n roots: [root],\n namespace,\n onError: (dir, err) => errors.push({ file: dir, message: err.message }),\n });\n try {\n dirSpecs = await scanner.scan();\n } catch (err) {\n errors.push({\n file: root,\n message: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n const byName = new Map<string, ToolSpec>();\n for (const spec of dirSpecs) byName.set(spec.name, spec);\n for (const spec of scanResult.specs) {\n if (!byName.has(spec.name)) byName.set(spec.name, spec);\n }\n\n return { specs: Array.from(byName.values()), errors, warnings };\n}\n\nexport async function registerPackageTools(\n registry: { bulkRegister: (specs: ToolSpec[]) => void },\n packagePath: string,\n options: ScanPackageOptions = {},\n): Promise<ScanPackageResult> {\n const result = await scanPackageForTools(packagePath, options);\n if (result.specs.length > 0) registry.bulkRegister(result.specs);\n return result;\n}\n","/**\n * Generate MCP server entrypoint, tool-specs.json, invokers for function/skill/n8n.\n * Accepts unified ToolSpec[] (reads _meta.sourcePath/exportName, endpoint for codegen).\n */\n\nimport * as path from \"node:path\";\nimport * as fs from \"node:fs/promises\";\nimport { fileURLToPath } from \"node:url\";\nimport type { ToolSpec } from \"../../../core/types/ToolSpec.js\";\nimport { FUNCTION_KIND } from \"../../../tools/function/types.js\";\nimport { SKILL_KIND } from \"../../../tools/skill/types.js\";\nimport { N8N_KIND } from \"../../../tools/n8n/types.js\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\n/** Function spec with required codegen fields (from ToolSpec._meta). */\ninterface FunctionSpecForCodegen extends ToolSpec {\n kind: \"function\";\n _meta: { sourcePath: string; exportName: string; projectPath?: string };\n}\n\n/** Skill spec with required codegen fields. */\ninterface SkillSpecForCodegen extends ToolSpec {\n kind: \"skill\";\n _meta: { sourcePath: string; projectPath?: string };\n}\n\n/** N8n spec with endpoint (webhook URL) and _meta.sourcePath. */\ninterface N8nSpecForCodegen extends ToolSpec {\n kind: \"n8n\";\n endpoint?: string;\n _meta?: { sourcePath?: string };\n}\n\nasync function loadTemplate(name: string): Promise<string> {\n for (const dir of [\n path.join(__dirname, \"templates\"),\n path.join(__dirname, \"..\", \"templates\"),\n ]) {\n try {\n return await fs.readFile(path.join(dir, name), \"utf-8\");\n } catch {\n continue;\n }\n }\n throw new Error(`Template not found: ${name}. Tried templates/ next to generator and ../templates.`);\n}\n\nconst TEMPLATE_NAMES = {\n mcpServer: \"mcp-server.js\",\n toolIndex: \"tool-index.js\",\n skillInvoker: \"skill-invoker.js\",\n n8nInvoker: \"n8n-invoker.js\",\n} as const;\n\nfunction buildToolIndexCases(specs: FunctionSpecForCodegen[], fromGeneratedToProject: string): string {\n return specs\n .map((s) => {\n const modPath = path.join(fromGeneratedToProject, s._meta.sourcePath).replace(/\\\\/g, \"/\");\n return ` case \"${s.name}\": return (await import(\"${modPath}\")).${s._meta.exportName};`;\n })\n .join(\"\\n\");\n}\n\nfunction buildSkillInvokerCases(specs: SkillSpecForCodegen[], fromGeneratedToProject: string): string {\n return specs\n .map((s) => {\n const handlerPath = path.join(fromGeneratedToProject, s._meta.sourcePath, \"handler\").replace(/\\\\/g, \"/\");\n const descEscaped = (s.description ?? \"\").replace(/\"/g, '\\\\\"');\n return ` case \"${s.name}\": {\n const mod = await import(\"${handlerPath}.js\")\n .catch(() => import(\"${handlerPath}.mjs\"))\n .catch(() => null);\n if (!mod) return { result: null, error: \"No handler\" };\n const fn = mod.default ?? mod.handler;\n if (typeof fn !== \"function\") return { result: null, error: \"No handler\" };\n const ctx = { requestId: \"mcp\", taskId: \"mcp\", skill: { name: \"${s.name}\", description: \"${descEscaped}\", instructions: \"\", resources: [], readResource: async () => \"\", getResourcesByType: () => [], dirPath: \"\" } };\n const out = await fn(args, ctx);\n return out?.result !== undefined ? out.result : out;\n }`;\n })\n .join(\"\\n\");\n}\n\nfunction buildN8nInvokerCases(specs: N8nSpecForCodegen[]): string {\n return specs\n .map((s) => {\n const webhookUrl = s.endpoint;\n const url =\n webhookUrl\n ? `\"${webhookUrl}\"`\n : \"process.env.N8N_WEBHOOK_\" + s.name.replace(/[^a-zA-Z0-9]/g, \"_\").toUpperCase() + \" ?? null\";\n return ` case \"${s.name}\": {\n const url = ${url};\n if (!url) throw new Error(\"n8n webhook not configured for ${s.name}. Set N8N_WEBHOOK_* or add webhook to workflow.\");\n const res = await fetch(url, { method: \"POST\", headers: { \"Content-Type\": \"application/json\" }, body: JSON.stringify(args) });\n if (!res.ok) throw new Error(\"n8n request failed: \" + res.status);\n return res.json().catch(() => ({}));\n }`;\n })\n .join(\"\\n\");\n}\n\n/** Write generated files into outDir. projectPath is the folder containing source. */\nexport async function generate(options: {\n specs: ToolSpec[];\n outDir: string;\n projectPath: string;\n}): Promise<{ entryPath: string; mcpJsonPath: string }> {\n const { specs, outDir, projectPath } = options;\n await fs.mkdir(outDir, { recursive: true });\n\n const functionSpecs = specs.filter(\n (s): s is FunctionSpecForCodegen =>\n s.kind === FUNCTION_KIND && s._meta?.sourcePath != null && s._meta?.exportName != null,\n );\n const skillSpecs = specs.filter(\n (s): s is SkillSpecForCodegen => s.kind === SKILL_KIND && s._meta?.sourcePath != null,\n );\n const n8nSpecs = specs.filter((s): s is N8nSpecForCodegen => s.kind === N8N_KIND);\n\n const toolSpecsJson = specs.map((s) => ({\n kind: s.kind,\n name: s.name,\n description: s.description,\n inputSchema: s.inputSchema,\n ...(s.kind === FUNCTION_KIND && s._meta?.sourcePath != null && s._meta?.exportName != null && {\n outputSchema: s.outputSchema ?? { type: \"object\", additionalProperties: true },\n sourcePath: s._meta.sourcePath,\n exportName: s._meta.exportName,\n }),\n _meta: s._meta,\n ...(s.kind === SKILL_KIND && s._meta?.sourcePath != null && { sourcePath: s._meta.sourcePath }),\n ...(s.kind === N8N_KIND && {\n sourcePath: s._meta?.sourcePath,\n webhookUrl: s.endpoint,\n }),\n }));\n await fs.writeFile(\n path.join(outDir, \"tool-specs.json\"),\n JSON.stringify(toolSpecsJson, null, 2),\n \"utf-8\",\n );\n\n const configJson = { projectPath: path.resolve(projectPath) };\n await fs.writeFile(path.join(outDir, \"config.json\"), JSON.stringify(configJson, null, 2), \"utf-8\");\n\n const rel = path.relative(outDir, projectPath) || \".\";\n const fromGeneratedToProject = rel.split(path.sep).length ? rel : \".\";\n\n const [mcpServerTemplate, toolIndexTemplate, skillInvokerTemplate, n8nInvokerTemplate] = await Promise.all([\n loadTemplate(TEMPLATE_NAMES.mcpServer),\n loadTemplate(TEMPLATE_NAMES.toolIndex),\n loadTemplate(TEMPLATE_NAMES.skillInvoker),\n loadTemplate(TEMPLATE_NAMES.n8nInvoker),\n ]);\n\n const toolIndexTs = toolIndexTemplate.replace(\"{{CASES}}\", buildToolIndexCases(functionSpecs, fromGeneratedToProject));\n await fs.writeFile(path.join(outDir, \"tool-index.ts\"), toolIndexTs, \"utf-8\");\n\n const skillCases = buildSkillInvokerCases(skillSpecs, fromGeneratedToProject);\n const skillDefaultCase =\n skillSpecs.length === 0 ? \"default: throw new Error('Unknown skill: ' + name);\" : 'default: throw new Error(\"Unknown skill: \" + name);';\n const skillInvokerTs = skillInvokerTemplate.replace(\"{{CASES}}\", skillCases).replace(\"{{DEFAULT_CASE}}\", skillDefaultCase);\n await fs.writeFile(path.join(outDir, \"skill-invoker.ts\"), skillInvokerTs, \"utf-8\");\n\n const n8nCases = buildN8nInvokerCases(n8nSpecs);\n const n8nDefaultCase =\n n8nSpecs.length === 0 ? \"default: throw new Error('Unknown n8n tool: ' + name);\" : 'default: throw new Error(\"Unknown n8n tool: \" + name);';\n const n8nInvokerTs = n8nInvokerTemplate.replace(\"{{CASES}}\", n8nCases).replace(\"{{DEFAULT_CASE}}\", n8nDefaultCase);\n await fs.writeFile(path.join(outDir, \"n8n-invoker.ts\"), n8nInvokerTs, \"utf-8\");\n\n await fs.writeFile(path.join(outDir, \"mcp-server.ts\"), mcpServerTemplate, \"utf-8\");\n\n const mcpJson = {\n command: \"npx\",\n args: [\"-y\", \"tsx\", path.join(outDir, \"mcp-server.ts\")],\n };\n await fs.writeFile(path.join(outDir, \"mcp.json\"), JSON.stringify(mcpJson, null, 2), \"utf-8\");\n\n const packageJson = {\n name: \"function-tools-mcp\",\n version: \"1.0.0\",\n type: \"module\",\n description: \"MCP server generated from @tool functions, SKILL.md, and workflow.json\",\n main: \"mcp-server.ts\",\n scripts: { start: \"npx tsx mcp-server.ts\" },\n dependencies: {\n \"@modelcontextprotocol/sdk\": \"^1.25.3\",\n typescript: \">=5.0.0\",\n tsx: \">=4.0.0\",\n },\n };\n await fs.writeFile(path.join(outDir, \"package.json\"), JSON.stringify(packageJson, null, 2), \"utf-8\");\n\n return {\n entryPath: path.join(outDir, \"mcp-server.ts\"),\n mcpJsonPath: path.join(outDir, \"mcp.json\"),\n };\n}\n","/**\n * MCP build: scan project for @tool, SKILL, n8n; generate MCP entrypoint and npm package.\n */\n\nimport * as path from \"node:path\";\nimport { scanForAllTools } from \"../../../tools/scanPackage.js\";\nimport { generate } from \"./generator.js\";\nimport type { BuildResult } from \"./types.js\";\nimport type { ToolSpec } from \"../../../core/types/ToolSpec.js\";\n\nexport interface BuildOptions {\n /** Project root (folder to scan; default: cwd). */\n projectPath?: string;\n /** Output directory for generated files (default: projectPath/dist). */\n outDir?: string;\n /** Glob patterns for TS files (default: [\"**\\/*.ts\"]). Used for @tool (TypeScript) scanning only. */\n include?: string[];\n /** Path to tsconfig.json (default: projectPath/tsconfig.json). Used for @tool scanning only. */\n tsconfigPath?: string;\n /** Include n8n (workflow.json) tools. Default false: we do not start or install n8n-local; set true if you use n8n. */\n includeN8n?: boolean;\n}\n\n/**\n * Scan project for all tools (@tool, SKILL, n8n); generate MCP server + tool-specs + invokers (npm package).\n */\nexport async function buildMCPPackage(options: BuildOptions = {}): Promise<BuildResult> {\n const projectPath = path.resolve(options.projectPath ?? process.cwd());\n const outDir = path.resolve(projectPath, options.outDir ?? \"dist\");\n const include = options.include ?? [\"**/*.ts\"];\n const tsconfigPath = options.tsconfigPath;\n\n const scanResult = await scanForAllTools(projectPath, {\n include,\n tsconfigPath,\n includeN8n: options.includeN8n,\n });\n\n if (scanResult.errors.length > 0) {\n const msg = scanResult.errors.map((e) => `${e.file}: ${e.message}`).join(\"; \");\n throw new Error(`Scan failed: ${msg}`);\n }\n\n const allSpecs: ToolSpec[] = scanResult.specs;\n\n if (allSpecs.length === 0) {\n throw new Error(\n \"No tools found. Add @tool functions (JSDoc), SKILL.md directories, or workflow.json directories.\",\n );\n }\n\n const { entryPath, mcpJsonPath } = await generate({\n specs: allSpecs,\n outDir,\n projectPath,\n });\n\n return {\n outDir,\n toolCount: allSpecs.length,\n entryPath,\n mcpJsonPath,\n };\n}\n","/**\n * Run step: start the generated MCP server (stdio) for testing. Spawns entrypoint via npx tsx.\n */\n\nimport { spawn } from \"node:child_process\";\nimport * as path from \"node:path\";\nimport * as fs from \"node:fs/promises\";\n\nexport interface RunOptions {\n /** Directory containing generated mcp-server (default: cwd or cwd/dist). */\n path?: string;\n}\n\n/**\n * Start the MCP server from the given directory.\n * Expects mcp-server.ts and tool-specs.json there; runs via npx tsx mcp-server.ts.\n * Returns a child process; caller should handle stdin/stdout and cleanup.\n */\nexport async function runMCPServer(options: RunOptions = {}): Promise<{ process: ReturnType<typeof spawn> }> {\n const base = options.path ?? process.cwd();\n const candidates = [\n path.join(base, \"mcp-server.ts\"),\n path.join(base, \"mcp-server.js\"),\n path.join(base, \"dist\", \"mcp-server.ts\"),\n path.join(base, \"dist\", \"mcp-server.js\"),\n path.join(base, \"generated\", \"mcp-server.ts\"),\n path.join(base, \"generated\", \"mcp-server.js\"),\n ];\n let entry = \"\";\n for (const p of candidates) {\n try {\n await fs.access(p);\n entry = p;\n break;\n } catch {\n // continue\n }\n }\n if (!entry) {\n throw new Error(\n `MCP entrypoint not found. Run \"agent-tool build\" first, or pass --path to a directory containing mcp-server.ts. Tried: ${candidates.join(\", \")}`,\n );\n }\n\n const dir = path.dirname(entry);\n const child = spawn(\"npx\", [\"-y\", \"tsx\", path.basename(entry)], {\n cwd: dir,\n stdio: [\"pipe\", \"pipe\", \"inherit\"],\n shell: false,\n });\n\n return { process: child };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/api/expose/mcp-build/init.ts","../src/tools/scanPackage.ts","../src/api/expose/mcp-build/generator.ts","../src/api/expose/mcp-build/build.ts","../src/api/expose/mcp-build/run.ts"],"names":["path","fs","discoverTools","__dirname","path3","fileURLToPath","fs2","FUNCTION_KIND","SKILL_KIND","N8N_KIND","path4","path5","fs3","spawn"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,IAAM,SAAA,GAAY;AAAA,EAChB,cAAA,EAAgB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,EAchB,WAAA,EAAa,CAAA;;AAAA;AAAA;AAAA,CAAA;AAAA,EAKb,WAAA,EAAa,CAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,EASb,eAAA,EAAiB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,EAWjB,sBAAA,EAAwB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,EAQxB,6BAAA,EAA+B,CAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,CAAA;AAAA,EAS/B,+BAAA,EAAiC,CAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,EAKjC,WAAA,EAAa,CAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAmBf,CAAA;AAMA,eAAsB,WAAA,CAAY,OAAA,GAAuB,EAAC,EAA4D;AACpH,EAAA,MAAM,aAAkBA,gBAAA,CAAA,OAAA,CAAQ,OAAA,CAAQ,UAAA,IAAc,OAAA,CAAQ,KAAK,CAAA;AACnE,EAAA,MAAM,eAAyB,EAAC;AAEhC,EAAA,MAASC,cAAA,CAAA,KAAA,CAAM,UAAA,EAAY,EAAE,SAAA,EAAW,MAAM,CAAA;AAE9C,EAAA,KAAA,MAAW,CAAC,OAAA,EAAS,OAAO,KAAK,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC1D,IAAA,MAAM,QAAA,GAAgBD,gBAAA,CAAA,IAAA,CAAK,UAAA,EAAY,OAAO,CAAA;AAC9C,IAAA,MAASC,qBAAWD,gBAAA,CAAA,OAAA,CAAQ,QAAQ,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAC1D,IAAA,IAAI;AACF,MAAA,MAASC,sBAAO,QAAQ,CAAA;AACxB,MAAA,IAAI,YAAY,cAAA,EAAgB;AAAA,IAClC,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,MAASA,cAAA,CAAA,SAAA,CAAU,QAAA,EAAU,OAAA,EAAS,MAAM,CAAA;AAC5C,IAAA,YAAA,CAAa,KAAK,OAAO,CAAA;AAAA,EAC3B;AAEA,EAAA,OAAO,EAAE,YAAY,YAAA,EAAa;AACpC;AC/FA,eAAsB,eAAA,CACpB,WAAA,EACA,OAAA,GAA+B,EAAC,EACH;AAC7B,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,IAAW,CAAC,SAAS,CAAA;AAC7C,EAAA,MAAM,eAAe,OAAA,CAAQ,YAAA;AAC7B,EAAA,MAAM,UAAA,GAAa,QAAQ,UAAA,KAAe,IAAA;AAC1C,EAAA,MAAM,IAAA,GAA6B,EAAE,OAAA,EAAS,YAAA,EAAa;AAE3D,EAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,GAAA,CAAI;AAAA,IAChCC,+BAAA,CAAc,UAAA,EAAY,WAAA,EAAa,IAAI,CAAA;AAAA,IAC3CA,+BAAA,CAAc,OAAA,EAAS,WAAA,EAAa,IAAI,CAAA;AAAA,IACxC,GAAI,aAAa,CAACA,+BAAA,CAAc,OAAO,WAAA,EAAa,IAAI,CAAC,CAAA,GAAI;AAAC,GAC/D,CAAA;AACD,EAAA,MAAM,QAAQ,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAA,KAAM,EAAE,KAAK,CAAA;AAC5C,EAAA,MAAM,SAAS,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAA,KAAM,EAAE,MAAM,CAAA;AAC9C,EAAA,MAAM,QAAA,GAAW,QAAQ,OAAA,CAAQ,CAAC,MAAM,CAAA,CAAE,QAAA,IAAY,EAAE,CAAA;AAExD,EAAA,OAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAS;AACnC;AC/BA,IAAMC,WAAA,GAAiBC,gBAAA,CAAA,OAAA,CAAQC,iBAAA,CAAc,oQAAe,CAAC,CAAA;AAqB7D,eAAe,aAAa,IAAA,EAA+B;AACzD,EAAA,KAAA,MAAW,GAAA,IAAO;AAAA,IACXD,gBAAA,CAAA,IAAA,CAAKD,aAAW,WAAW,CAAA;AAAA,IAC3BC,gBAAA,CAAA,IAAA,CAAKD,WAAA,EAAW,IAAA,EAAM,WAAW;AAAA,GACxC,EAAG;AACD,IAAA,IAAI;AACF,MAAA,OAAO,MAASG,cAAA,CAAA,QAAA,CAAcF,gBAAA,CAAA,IAAA,CAAK,GAAA,EAAK,IAAI,GAAG,OAAO,CAAA;AAAA,IACxD,CAAA,CAAA,MAAQ;AACN,MAAA;AAAA,IACF;AAAA,EACF;AACA,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,IAAI,CAAA,sDAAA,CAAwD,CAAA;AACrG;AAEA,IAAM,cAAA,GAAiB;AAAA,EACrB,SAAA,EAAW,eAAA;AAAA,EACX,SAAA,EAAW,eAAA;AAAA,EACX,YAAA,EAAc,kBAAA;AAAA,EACd,UAAA,EAAY;AACd,CAAA;AAEA,SAAS,mBAAA,CAAoB,OAAiC,sBAAA,EAAwC;AACpG,EAAA,OAAO,KAAA,CACJ,GAAA,CAAI,CAAC,CAAA,KAAM;AACV,IAAA,MAAM,OAAA,GAAeA,sBAAK,sBAAA,EAAwB,CAAA,CAAE,MAAM,UAAU,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA;AACxF,IAAA,OAAO,CAAA,UAAA,EAAa,EAAE,IAAI,CAAA,yBAAA,EAA4B,OAAO,CAAA,IAAA,EAAO,CAAA,CAAE,MAAM,UAAU,CAAA,CAAA,CAAA;AAAA,EACxF,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AACd;AAEA,SAAS,sBAAA,CAAuB,OAA8B,sBAAA,EAAwC;AACpG,EAAA,OAAO,KAAA,CACJ,GAAA,CAAI,CAAC,CAAA,KAAM;AACV,IAAA,MAAM,WAAA,GAAmBA,gBAAA,CAAA,IAAA,CAAK,sBAAA,EAAwB,CAAA,CAAE,KAAA,CAAM,YAAY,SAAS,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA;AACvG,IAAA,MAAM,eAAe,CAAA,CAAE,WAAA,IAAe,EAAA,EAAI,OAAA,CAAQ,MAAM,KAAK,CAAA;AAC7D,IAAA,OAAO,CAAA,UAAA,EAAa,EAAE,IAAI,CAAA;AAAA,gCAAA,EACE,WAAW,CAAA;AAAA,6BAAA,EACd,WAAW,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qEAAA,EAK6B,CAAA,CAAE,IAAI,CAAA,iBAAA,EAAoB,WAAW,CAAA;AAAA;AAAA;AAAA,KAAA,CAAA;AAAA,EAIxG,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AACd;AAEA,SAAS,qBAAqB,KAAA,EAAoC;AAChE,EAAA,OAAO,KAAA,CACJ,GAAA,CAAI,CAAC,CAAA,KAAM;AACV,IAAA,MAAM,aAAa,CAAA,CAAE,QAAA;AACrB,IAAA,MAAM,GAAA,GACJ,UAAA,GACI,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,CAAA,GACd,0BAAA,GAA6B,CAAA,CAAE,IAAA,CAAK,OAAA,CAAQ,eAAA,EAAiB,GAAG,CAAA,CAAE,aAAY,GAAI,UAAA;AACxF,IAAA,OAAO,CAAA,UAAA,EAAa,EAAE,IAAI,CAAA;AAAA,kBAAA,EACZ,GAAG,CAAA;AAAA,gEAAA,EAC2C,EAAE,IAAI,CAAA;AAAA;AAAA;AAAA;AAAA,KAAA,CAAA;AAAA,EAKpE,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AACd;AAGA,eAAsB,SAAS,OAAA,EAIyB;AACtD,EAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,WAAA,EAAY,GAAI,OAAA;AACvC,EAAA,MAASE,cAAA,CAAA,KAAA,CAAM,MAAA,EAAQ,EAAE,SAAA,EAAW,MAAM,CAAA;AAE1C,EAAA,MAAM,gBAAgB,KAAA,CAAM,MAAA;AAAA,IAC1B,CAAC,CAAA,KACC,CAAA,CAAE,IAAA,KAASC,+BAAA,IAAiB,CAAA,CAAE,KAAA,EAAO,UAAA,IAAc,IAAA,IAAQ,CAAA,CAAE,KAAA,EAAO,UAAA,IAAc;AAAA,GACtF;AACA,EAAA,MAAM,aAAa,KAAA,CAAM,MAAA;AAAA,IACvB,CAAC,CAAA,KAAgC,CAAA,CAAE,SAASC,4BAAA,IAAc,CAAA,CAAE,OAAO,UAAA,IAAc;AAAA,GACnF;AACA,EAAA,MAAM,WAAW,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAA8B,CAAA,CAAE,SAASC,0BAAQ,CAAA;AAEhF,EAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACtC,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,aAAa,CAAA,CAAE,WAAA;AAAA,IACf,aAAa,CAAA,CAAE,WAAA;AAAA,IACf,GAAI,CAAA,CAAE,IAAA,KAASF,+BAAA,IAAiB,CAAA,CAAE,KAAA,EAAO,UAAA,IAAc,IAAA,IAAQ,CAAA,CAAE,KAAA,EAAO,UAAA,IAAc,IAAA,IAAQ;AAAA,MAC5F,cAAc,CAAA,CAAE,YAAA,IAAgB,EAAE,IAAA,EAAM,QAAA,EAAU,sBAAsB,IAAA,EAAK;AAAA,MAC7E,UAAA,EAAY,EAAE,KAAA,CAAM,UAAA;AAAA,MACpB,UAAA,EAAY,EAAE,KAAA,CAAM;AAAA,KACtB;AAAA,IACA,OAAO,CAAA,CAAE,KAAA;AAAA,IACT,GAAI,CAAA,CAAE,IAAA,KAASC,4BAAA,IAAc,CAAA,CAAE,KAAA,EAAO,UAAA,IAAc,IAAA,IAAQ,EAAE,UAAA,EAAY,CAAA,CAAE,KAAA,CAAM,UAAA,EAAW;AAAA,IAC7F,GAAI,CAAA,CAAE,IAAA,KAASC,0BAAA,IAAY;AAAA,MACzB,UAAA,EAAY,EAAE,KAAA,EAAO,UAAA;AAAA,MACrB,YAAY,CAAA,CAAE;AAAA;AAChB,GACF,CAAE,CAAA;AACF,EAAA,MAASH,cAAA,CAAA,SAAA;AAAA,IACFF,gBAAA,CAAA,IAAA,CAAK,QAAQ,iBAAiB,CAAA;AAAA,IACnC,IAAA,CAAK,SAAA,CAAU,aAAA,EAAe,IAAA,EAAM,CAAC,CAAA;AAAA,IACrC;AAAA,GACF;AAEA,EAAA,MAAM,UAAA,GAAa,EAAE,WAAA,EAAkBA,gBAAA,CAAA,OAAA,CAAQ,WAAW,CAAA,EAAE;AAC5D,EAAA,MAASE,cAAA,CAAA,SAAA,CAAeF,gBAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,aAAa,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,UAAA,EAAY,IAAA,EAAM,CAAC,CAAA,EAAG,OAAO,CAAA;AAEjG,EAAA,MAAM,GAAA,GAAWA,gBAAA,CAAA,QAAA,CAAS,MAAA,EAAQ,WAAW,CAAA,IAAK,GAAA;AAClD,EAAA,MAAM,yBAAyB,GAAA,CAAI,KAAA,CAAWA,gBAAA,CAAA,GAAG,CAAA,CAAE,SAAS,GAAA,GAAM,GAAA;AAElE,EAAA,MAAM,CAAC,mBAAmB,iBAAA,EAAmB,oBAAA,EAAsB,kBAAkB,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,IACzG,YAAA,CAAa,eAAe,SAAS,CAAA;AAAA,IACrC,YAAA,CAAa,eAAe,SAAS,CAAA;AAAA,IACrC,YAAA,CAAa,eAAe,YAAY,CAAA;AAAA,IACxC,YAAA,CAAa,eAAe,UAAU;AAAA,GACvC,CAAA;AAED,EAAA,MAAM,cAAc,iBAAA,CAAkB,OAAA,CAAQ,aAAa,mBAAA,CAAoB,aAAA,EAAe,sBAAsB,CAAC,CAAA;AACrH,EAAA,MAASE,yBAAeF,gBAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,eAAe,CAAA,EAAG,aAAa,OAAO,CAAA;AAE3E,EAAA,MAAM,UAAA,GAAa,sBAAA,CAAuB,UAAA,EAAY,sBAAsB,CAAA;AAC5E,EAAA,MAAM,gBAAA,GACJ,UAAA,CAAW,MAAA,KAAW,CAAA,GAAI,qDAAA,GAAwD,qDAAA;AACpF,EAAA,MAAM,cAAA,GAAiB,qBAAqB,OAAA,CAAQ,WAAA,EAAa,UAAU,CAAA,CAAE,OAAA,CAAQ,oBAAoB,gBAAgB,CAAA;AACzH,EAAA,MAASE,yBAAeF,gBAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,kBAAkB,CAAA,EAAG,gBAAgB,OAAO,CAAA;AAEjF,EAAA,MAAM,QAAA,GAAW,qBAAqB,QAAQ,CAAA;AAC9C,EAAA,MAAM,cAAA,GACJ,QAAA,CAAS,MAAA,KAAW,CAAA,GAAI,wDAAA,GAA2D,wDAAA;AACrF,EAAA,MAAM,YAAA,GAAe,mBAAmB,OAAA,CAAQ,WAAA,EAAa,QAAQ,CAAA,CAAE,OAAA,CAAQ,oBAAoB,cAAc,CAAA;AACjH,EAAA,MAASE,yBAAeF,gBAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,gBAAgB,CAAA,EAAG,cAAc,OAAO,CAAA;AAE7E,EAAA,MAASE,yBAAeF,gBAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,eAAe,CAAA,EAAG,mBAAmB,OAAO,CAAA;AAEjF,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,OAAA,EAAS,KAAA;AAAA,IACT,MAAM,CAAC,IAAA,EAAM,OAAYA,gBAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,eAAe,CAAC;AAAA,GACxD;AACA,EAAA,MAASE,cAAA,CAAA,SAAA,CAAeF,gBAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,UAAU,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,IAAA,EAAM,CAAC,CAAA,EAAG,OAAO,CAAA;AAE3F,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,IAAA,EAAM,oBAAA;AAAA,IACN,OAAA,EAAS,OAAA;AAAA,IACT,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa,wEAAA;AAAA,IACb,IAAA,EAAM,eAAA;AAAA,IACN,OAAA,EAAS,EAAE,KAAA,EAAO,uBAAA,EAAwB;AAAA,IAC1C,YAAA,EAAc;AAAA,MACZ,2BAAA,EAA6B,SAAA;AAAA,MAC7B,UAAA,EAAY,SAAA;AAAA,MACZ,GAAA,EAAK;AAAA;AACP,GACF;AACA,EAAA,MAASE,cAAA,CAAA,SAAA,CAAeF,gBAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,cAAc,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,WAAA,EAAa,IAAA,EAAM,CAAC,CAAA,EAAG,OAAO,CAAA;AAEnG,EAAA,OAAO;AAAA,IACL,SAAA,EAAgBA,gBAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,eAAe,CAAA;AAAA,IAC5C,WAAA,EAAkBA,gBAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,UAAU;AAAA,GAC3C;AACF;;;AC7KA,eAAsB,eAAA,CAAgB,OAAA,GAAwB,EAAC,EAAyB;AACtF,EAAA,MAAM,cAAmBM,gBAAA,CAAA,OAAA,CAAQ,OAAA,CAAQ,WAAA,IAAe,OAAA,CAAQ,KAAK,CAAA;AACrE,EAAA,MAAM,MAAA,GAAcA,gBAAA,CAAA,OAAA,CAAQ,WAAA,EAAa,OAAA,CAAQ,UAAU,MAAM,CAAA;AACjE,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,IAAW,CAAC,SAAS,CAAA;AAC7C,EAAA,MAAM,eAAe,OAAA,CAAQ,YAAA;AAE7B,EAAA,MAAM,UAAA,GAAa,MAAM,eAAA,CAAgB,WAAA,EAAa;AAAA,IACpD,OAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAY,OAAA,CAAQ;AAAA,GACrB,CAAA;AAED,EAAA,IAAI,UAAA,CAAW,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAChC,IAAA,MAAM,GAAA,GAAM,UAAA,CAAW,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAG,CAAA,CAAE,IAAI,KAAK,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AAC7E,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,aAAA,EAAgB,GAAG,CAAA,CAAE,CAAA;AAAA,EACvC;AAEA,EAAA,MAAM,WAAuB,UAAA,CAAW,KAAA;AAExC,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,EAAE,SAAA,EAAW,WAAA,EAAY,GAAI,MAAM,QAAA,CAAS;AAAA,IAChD,KAAA,EAAO,QAAA;AAAA,IACP,MAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,WAAW,QAAA,CAAS,MAAA;AAAA,IACpB,SAAA;AAAA,IACA;AAAA,GACF;AACF;AC7CA,eAAsB,YAAA,CAAa,OAAA,GAAsB,EAAC,EAAmD;AAC3G,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,IAAA,IAAQ,OAAA,CAAQ,GAAA,EAAI;AACzC,EAAA,MAAM,UAAA,GAAa;AAAA,IACZC,gBAAA,CAAA,IAAA,CAAK,MAAM,eAAe,CAAA;AAAA,IAC1BA,gBAAA,CAAA,IAAA,CAAK,MAAM,eAAe,CAAA;AAAA,IAC1BA,gBAAA,CAAA,IAAA,CAAK,IAAA,EAAM,MAAA,EAAQ,eAAe,CAAA;AAAA,IAClCA,gBAAA,CAAA,IAAA,CAAK,IAAA,EAAM,MAAA,EAAQ,eAAe,CAAA;AAAA,IAClCA,gBAAA,CAAA,IAAA,CAAK,IAAA,EAAM,WAAA,EAAa,eAAe,CAAA;AAAA,IACvCA,gBAAA,CAAA,IAAA,CAAK,IAAA,EAAM,WAAA,EAAa,eAAe;AAAA,GAC9C;AACA,EAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,EAAA,KAAA,MAAW,KAAK,UAAA,EAAY;AAC1B,IAAA,IAAI;AACF,MAAA,MAASC,sBAAO,CAAC,CAAA;AACjB,MAAA,KAAA,GAAQ,CAAA;AACR,MAAA;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACA,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,uHAAA,EAA0H,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KACjJ;AAAA,EACF;AAEA,EAAA,MAAM,GAAA,GAAWD,yBAAQ,KAAK,CAAA;AAC9B,EAAA,MAAM,KAAA,GAAQE,oBAAM,KAAA,EAAO,CAAC,MAAM,KAAA,EAAYF,gBAAA,CAAA,QAAA,CAAS,KAAK,CAAC,CAAA,EAAG;AAAA,IAC9D,GAAA,EAAK,GAAA;AAAA,IACL,KAAA,EAAO,CAAC,MAAA,EAAQ,MAAA,EAAQ,SAAS,CAAA;AAAA,IACjC,KAAA,EAAO;AAAA,GACR,CAAA;AAED,EAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAC1B","file":"chunk-XUIGSBWG.cjs","sourcesContent":["/**\n * Scaffold a new MCP tool project: @tool TS, SKILL sample, tsconfig, README.\n * Use: init → build → run.\n */\n\nimport * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\n\nexport interface InitOptions {\n /** Target directory to create project (default: cwd). */\n targetPath?: string;\n}\n\nconst TEMPLATES = {\n \"package.json\": `{\n \"name\": \"my-mcp-tools\",\n \"version\": \"1.0.0\",\n \"private\": true,\n \"type\": \"module\",\n \"scripts\": {\n \"build\": \"node build.mjs\",\n \"start\": \"node start.mjs\"\n },\n \"devDependencies\": {\n \"@easynet/agent-tool\": \"latest\"\n }\n}\n`,\n \"build.mjs\": `import { buildMCPPackage } from \"@easynet/agent-tool/build\";\n\nconst result = await buildMCPPackage({ outDir: \"dist\" });\nconsole.log(\"Built\", result.toolCount, \"tool(s) ->\", result.outDir);\n`,\n \"start.mjs\": `import { runMCPServer } from \"@easynet/agent-tool/build\";\n\nconst { process: child } = await runMCPServer({ path: \"./dist\" });\nchild.stdin?.pipe(process.stdin);\nchild.stdout?.pipe(process.stdout);\nchild.stderr?.pipe(process.stderr);\nprocess.stdin?.ref();\nchild.on(\"close\", (code) => process.exit(code ?? 0));\n`,\n \"tsconfig.json\": `{\n \"compilerOptions\": {\n \"target\": \"ES2022\",\n \"module\": \"ESNext\",\n \"strict\": true,\n \"skipLibCheck\": true,\n \"noEmit\": true\n },\n \"include\": [\"src/**/*.ts\"]\n}\n`,\n \"src/tools/example.ts\": `/**\n * Add two numbers.\n * @tool\n */\nexport async function add(a: number, b: number): Promise<number> {\n return a + b;\n}\n`,\n \"skills/hello-skill/SKILL.md\": `---\nname: hello-skill\ndescription: Say hello with a name.\n---\n\n# Hello Skill\n\nReturns a greeting for the given name.\n`,\n \"skills/hello-skill/handler.js\": `export default async function handler(args, ctx) {\n const name = args?.name ?? \"World\";\n return { message: \\`Hello, \\${name}!\\` };\n}\n`,\n \"README.md\": `# MCP Tool Project\n\nScaffolded by \\`agent-tool init\\`. Workflow:\n\n1. **init** — create project template (you are here)\n2. **npm install** — install dependencies\n3. **npm run build** — generate MCP package under \\`dist/\\`\n4. **npm start** — start the MCP server for testing\n\n## Quick start\n\n\\`\\`\\`bash\nnpm install\nnpm run build\nnpm start\n\\`\\`\\`\n\nEdit \\`src/tools/*.ts\\` (add \\`@tool\\` JSDoc) and/or \\`skills/*/SKILL.md\\`, then \\`npm run build\\` again.\n`,\n};\n\n/**\n * Create project template at targetPath. Writes tsconfig, src/tools/example.ts,\n * skills/hello-skill (SKILL.md + handler.js), and README.\n */\nexport async function initProject(options: InitOptions = {}): Promise<{ targetPath: string; filesCreated: string[] }> {\n const targetPath = path.resolve(options.targetPath ?? process.cwd());\n const filesCreated: string[] = [];\n\n await fs.mkdir(targetPath, { recursive: true });\n\n for (const [relPath, content] of Object.entries(TEMPLATES)) {\n const fullPath = path.join(targetPath, relPath);\n await fs.mkdir(path.dirname(fullPath), { recursive: true });\n try {\n await fs.access(fullPath);\n if (relPath === \"package.json\") continue; // skip so we don't overwrite existing\n } catch {\n // file doesn't exist, write it\n }\n await fs.writeFile(fullPath, content, \"utf8\");\n filesCreated.push(relPath);\n }\n\n return { targetPath, filesCreated };\n}\n","/**\n * Scan package for tools: scanForAllTools, scanPackageForTools, registerPackageTools.\n * Aggregates function/skill/n8n discovery and optional directory discovery.\n */\n\nimport * as path from \"node:path\";\nimport type { ToolSpec } from \"../core/types/ToolSpec.js\";\nimport {\n discoverTools,\n DirectoryScanner,\n type DiscoverToolsOptions,\n} from \"./discoveryFactory.js\";\n\nexport interface ScanAllToolsResult {\n specs: ToolSpec[];\n errors: Array<{ file: string; message: string }>;\n warnings: Array<{ file: string; message: string }>;\n}\n\nexport interface ScanAllToolsOptions {\n include?: string[];\n tsconfigPath?: string;\n includeN8n?: boolean;\n}\n\nexport async function scanForAllTools(\n projectPath: string,\n options: ScanAllToolsOptions = {},\n): Promise<ScanAllToolsResult> {\n const include = options.include ?? [\"**/*.ts\"];\n const tsconfigPath = options.tsconfigPath;\n const includeN8n = options.includeN8n === true;\n const opts: DiscoverToolsOptions = { include, tsconfigPath };\n\n const results = await Promise.all([\n discoverTools(\"function\", projectPath, opts),\n discoverTools(\"skill\", projectPath, opts),\n ...(includeN8n ? [discoverTools(\"n8n\", projectPath, opts)] : []),\n ]);\n const specs = results.flatMap((r) => r.specs);\n const errors = results.flatMap((r) => r.errors);\n const warnings = results.flatMap((r) => r.warnings ?? []);\n\n return { specs, errors, warnings };\n}\n\nexport interface ScanPackageResult {\n specs: ToolSpec[];\n errors: Array<{ file: string; message: string }>;\n warnings: Array<{ file: string; message: string }>;\n}\n\nexport interface ScanPackageOptions extends ScanAllToolsOptions {\n includeDirectoryDiscovery?: boolean;\n namespace?: string;\n}\n\nexport async function scanPackageForTools(\n packagePath: string,\n options: ScanPackageOptions = {},\n): Promise<ScanPackageResult> {\n const root = path.resolve(packagePath);\n const includeDirectoryDiscovery = options.includeDirectoryDiscovery !== false;\n const namespace = options.namespace ?? \"pkg\";\n\n const errors: Array<{ file: string; message: string }> = [];\n const warnings: Array<{ file: string; message: string }> = [];\n\n const scanResult = await scanForAllTools(root, {\n include: options.include,\n tsconfigPath: options.tsconfigPath,\n includeN8n: options.includeN8n,\n });\n errors.push(...scanResult.errors);\n warnings.push(...scanResult.warnings);\n\n let dirSpecs: ToolSpec[] = [];\n if (includeDirectoryDiscovery) {\n const scanner = new DirectoryScanner({\n roots: [root],\n namespace,\n onError: (dir, err) => errors.push({ file: dir, message: err.message }),\n });\n try {\n dirSpecs = await scanner.scan();\n } catch (err) {\n errors.push({\n file: root,\n message: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n const byName = new Map<string, ToolSpec>();\n for (const spec of dirSpecs) byName.set(spec.name, spec);\n for (const spec of scanResult.specs) {\n if (!byName.has(spec.name)) byName.set(spec.name, spec);\n }\n\n return { specs: Array.from(byName.values()), errors, warnings };\n}\n\nexport async function registerPackageTools(\n registry: { bulkRegister: (specs: ToolSpec[]) => void },\n packagePath: string,\n options: ScanPackageOptions = {},\n): Promise<ScanPackageResult> {\n const result = await scanPackageForTools(packagePath, options);\n if (result.specs.length > 0) registry.bulkRegister(result.specs);\n return result;\n}\n","/**\n * Generate MCP server entrypoint, tool-specs.json, invokers for function/skill/n8n.\n * Accepts unified ToolSpec[] (reads _meta.sourcePath/exportName, endpoint for codegen).\n */\n\nimport * as path from \"node:path\";\nimport * as fs from \"node:fs/promises\";\nimport { fileURLToPath } from \"node:url\";\nimport type { ToolSpec } from \"../../../core/types/ToolSpec.js\";\nimport { FUNCTION_KIND } from \"../../../tools/function/types.js\";\nimport { SKILL_KIND } from \"../../../tools/skill/types.js\";\nimport { N8N_KIND } from \"../../../tools/n8n/types.js\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\n/** Function spec with required codegen fields (from ToolSpec._meta). */\ninterface FunctionSpecForCodegen extends ToolSpec {\n kind: \"function\";\n _meta: { sourcePath: string; exportName: string; projectPath?: string };\n}\n\n/** Skill spec with required codegen fields. */\ninterface SkillSpecForCodegen extends ToolSpec {\n kind: \"skill\";\n _meta: { sourcePath: string; projectPath?: string };\n}\n\n/** N8n spec with endpoint (webhook URL) and _meta.sourcePath. */\ninterface N8nSpecForCodegen extends ToolSpec {\n kind: \"n8n\";\n endpoint?: string;\n _meta?: { sourcePath?: string };\n}\n\nasync function loadTemplate(name: string): Promise<string> {\n for (const dir of [\n path.join(__dirname, \"templates\"),\n path.join(__dirname, \"..\", \"templates\"),\n ]) {\n try {\n return await fs.readFile(path.join(dir, name), \"utf-8\");\n } catch {\n continue;\n }\n }\n throw new Error(`Template not found: ${name}. Tried templates/ next to generator and ../templates.`);\n}\n\nconst TEMPLATE_NAMES = {\n mcpServer: \"mcp-server.js\",\n toolIndex: \"tool-index.js\",\n skillInvoker: \"skill-invoker.js\",\n n8nInvoker: \"n8n-invoker.js\",\n} as const;\n\nfunction buildToolIndexCases(specs: FunctionSpecForCodegen[], fromGeneratedToProject: string): string {\n return specs\n .map((s) => {\n const modPath = path.join(fromGeneratedToProject, s._meta.sourcePath).replace(/\\\\/g, \"/\");\n return ` case \"${s.name}\": return (await import(\"${modPath}\")).${s._meta.exportName};`;\n })\n .join(\"\\n\");\n}\n\nfunction buildSkillInvokerCases(specs: SkillSpecForCodegen[], fromGeneratedToProject: string): string {\n return specs\n .map((s) => {\n const handlerPath = path.join(fromGeneratedToProject, s._meta.sourcePath, \"handler\").replace(/\\\\/g, \"/\");\n const descEscaped = (s.description ?? \"\").replace(/\"/g, '\\\\\"');\n return ` case \"${s.name}\": {\n const mod = await import(\"${handlerPath}.js\")\n .catch(() => import(\"${handlerPath}.mjs\"))\n .catch(() => null);\n if (!mod) return { result: null, error: \"No handler\" };\n const fn = mod.default ?? mod.handler;\n if (typeof fn !== \"function\") return { result: null, error: \"No handler\" };\n const ctx = { requestId: \"mcp\", taskId: \"mcp\", skill: { name: \"${s.name}\", description: \"${descEscaped}\", instructions: \"\", resources: [], readResource: async () => \"\", getResourcesByType: () => [], dirPath: \"\" } };\n const out = await fn(args, ctx);\n return out?.result !== undefined ? out.result : out;\n }`;\n })\n .join(\"\\n\");\n}\n\nfunction buildN8nInvokerCases(specs: N8nSpecForCodegen[]): string {\n return specs\n .map((s) => {\n const webhookUrl = s.endpoint;\n const url =\n webhookUrl\n ? `\"${webhookUrl}\"`\n : \"process.env.N8N_WEBHOOK_\" + s.name.replace(/[^a-zA-Z0-9]/g, \"_\").toUpperCase() + \" ?? null\";\n return ` case \"${s.name}\": {\n const url = ${url};\n if (!url) throw new Error(\"n8n webhook not configured for ${s.name}. Set N8N_WEBHOOK_* or add webhook to workflow.\");\n const res = await fetch(url, { method: \"POST\", headers: { \"Content-Type\": \"application/json\" }, body: JSON.stringify(args) });\n if (!res.ok) throw new Error(\"n8n request failed: \" + res.status);\n return res.json().catch(() => ({}));\n }`;\n })\n .join(\"\\n\");\n}\n\n/** Write generated files into outDir. projectPath is the folder containing source. */\nexport async function generate(options: {\n specs: ToolSpec[];\n outDir: string;\n projectPath: string;\n}): Promise<{ entryPath: string; mcpJsonPath: string }> {\n const { specs, outDir, projectPath } = options;\n await fs.mkdir(outDir, { recursive: true });\n\n const functionSpecs = specs.filter(\n (s): s is FunctionSpecForCodegen =>\n s.kind === FUNCTION_KIND && s._meta?.sourcePath != null && s._meta?.exportName != null,\n );\n const skillSpecs = specs.filter(\n (s): s is SkillSpecForCodegen => s.kind === SKILL_KIND && s._meta?.sourcePath != null,\n );\n const n8nSpecs = specs.filter((s): s is N8nSpecForCodegen => s.kind === N8N_KIND);\n\n const toolSpecsJson = specs.map((s) => ({\n kind: s.kind,\n name: s.name,\n description: s.description,\n inputSchema: s.inputSchema,\n ...(s.kind === FUNCTION_KIND && s._meta?.sourcePath != null && s._meta?.exportName != null && {\n outputSchema: s.outputSchema ?? { type: \"object\", additionalProperties: true },\n sourcePath: s._meta.sourcePath,\n exportName: s._meta.exportName,\n }),\n _meta: s._meta,\n ...(s.kind === SKILL_KIND && s._meta?.sourcePath != null && { sourcePath: s._meta.sourcePath }),\n ...(s.kind === N8N_KIND && {\n sourcePath: s._meta?.sourcePath,\n webhookUrl: s.endpoint,\n }),\n }));\n await fs.writeFile(\n path.join(outDir, \"tool-specs.json\"),\n JSON.stringify(toolSpecsJson, null, 2),\n \"utf-8\",\n );\n\n const configJson = { projectPath: path.resolve(projectPath) };\n await fs.writeFile(path.join(outDir, \"config.json\"), JSON.stringify(configJson, null, 2), \"utf-8\");\n\n const rel = path.relative(outDir, projectPath) || \".\";\n const fromGeneratedToProject = rel.split(path.sep).length ? rel : \".\";\n\n const [mcpServerTemplate, toolIndexTemplate, skillInvokerTemplate, n8nInvokerTemplate] = await Promise.all([\n loadTemplate(TEMPLATE_NAMES.mcpServer),\n loadTemplate(TEMPLATE_NAMES.toolIndex),\n loadTemplate(TEMPLATE_NAMES.skillInvoker),\n loadTemplate(TEMPLATE_NAMES.n8nInvoker),\n ]);\n\n const toolIndexTs = toolIndexTemplate.replace(\"{{CASES}}\", buildToolIndexCases(functionSpecs, fromGeneratedToProject));\n await fs.writeFile(path.join(outDir, \"tool-index.ts\"), toolIndexTs, \"utf-8\");\n\n const skillCases = buildSkillInvokerCases(skillSpecs, fromGeneratedToProject);\n const skillDefaultCase =\n skillSpecs.length === 0 ? \"default: throw new Error('Unknown skill: ' + name);\" : 'default: throw new Error(\"Unknown skill: \" + name);';\n const skillInvokerTs = skillInvokerTemplate.replace(\"{{CASES}}\", skillCases).replace(\"{{DEFAULT_CASE}}\", skillDefaultCase);\n await fs.writeFile(path.join(outDir, \"skill-invoker.ts\"), skillInvokerTs, \"utf-8\");\n\n const n8nCases = buildN8nInvokerCases(n8nSpecs);\n const n8nDefaultCase =\n n8nSpecs.length === 0 ? \"default: throw new Error('Unknown n8n tool: ' + name);\" : 'default: throw new Error(\"Unknown n8n tool: \" + name);';\n const n8nInvokerTs = n8nInvokerTemplate.replace(\"{{CASES}}\", n8nCases).replace(\"{{DEFAULT_CASE}}\", n8nDefaultCase);\n await fs.writeFile(path.join(outDir, \"n8n-invoker.ts\"), n8nInvokerTs, \"utf-8\");\n\n await fs.writeFile(path.join(outDir, \"mcp-server.ts\"), mcpServerTemplate, \"utf-8\");\n\n const mcpJson = {\n command: \"npx\",\n args: [\"-y\", \"tsx\", path.join(outDir, \"mcp-server.ts\")],\n };\n await fs.writeFile(path.join(outDir, \"mcp.json\"), JSON.stringify(mcpJson, null, 2), \"utf-8\");\n\n const packageJson = {\n name: \"function-tools-mcp\",\n version: \"1.0.0\",\n type: \"module\",\n description: \"MCP server generated from @tool functions, SKILL.md, and workflow.json\",\n main: \"mcp-server.ts\",\n scripts: { start: \"npx tsx mcp-server.ts\" },\n dependencies: {\n \"@modelcontextprotocol/sdk\": \"^1.25.3\",\n typescript: \">=5.0.0\",\n tsx: \">=4.0.0\",\n },\n };\n await fs.writeFile(path.join(outDir, \"package.json\"), JSON.stringify(packageJson, null, 2), \"utf-8\");\n\n return {\n entryPath: path.join(outDir, \"mcp-server.ts\"),\n mcpJsonPath: path.join(outDir, \"mcp.json\"),\n };\n}\n","/**\n * MCP build: scan project for @tool, SKILL, n8n; generate MCP entrypoint and npm package.\n */\n\nimport * as path from \"node:path\";\nimport { scanForAllTools } from \"../../../tools/scanPackage.js\";\nimport { generate } from \"./generator.js\";\nimport type { BuildResult } from \"./types.js\";\nimport type { ToolSpec } from \"../../../core/types/ToolSpec.js\";\n\nexport interface BuildOptions {\n /** Project root (folder to scan; default: cwd). */\n projectPath?: string;\n /** Output directory for generated files (default: projectPath/dist). */\n outDir?: string;\n /** Glob patterns for TS files (default: [\"**\\/*.ts\"]). Used for @tool (TypeScript) scanning only. */\n include?: string[];\n /** Path to tsconfig.json (default: projectPath/tsconfig.json). Used for @tool scanning only. */\n tsconfigPath?: string;\n /** Include n8n (workflow.json) tools. Default false: we do not start or install n8n-local; set true if you use n8n. */\n includeN8n?: boolean;\n}\n\n/**\n * Scan project for all tools (@tool, SKILL, n8n); generate MCP server + tool-specs + invokers (npm package).\n */\nexport async function buildMCPPackage(options: BuildOptions = {}): Promise<BuildResult> {\n const projectPath = path.resolve(options.projectPath ?? process.cwd());\n const outDir = path.resolve(projectPath, options.outDir ?? \"dist\");\n const include = options.include ?? [\"**/*.ts\"];\n const tsconfigPath = options.tsconfigPath;\n\n const scanResult = await scanForAllTools(projectPath, {\n include,\n tsconfigPath,\n includeN8n: options.includeN8n,\n });\n\n if (scanResult.errors.length > 0) {\n const msg = scanResult.errors.map((e) => `${e.file}: ${e.message}`).join(\"; \");\n throw new Error(`Scan failed: ${msg}`);\n }\n\n const allSpecs: ToolSpec[] = scanResult.specs;\n\n if (allSpecs.length === 0) {\n throw new Error(\n \"No tools found. Add @tool functions (JSDoc), SKILL.md directories, or workflow.json directories.\",\n );\n }\n\n const { entryPath, mcpJsonPath } = await generate({\n specs: allSpecs,\n outDir,\n projectPath,\n });\n\n return {\n outDir,\n toolCount: allSpecs.length,\n entryPath,\n mcpJsonPath,\n };\n}\n","/**\n * Run step: start the generated MCP server (stdio) for testing. Spawns entrypoint via npx tsx.\n */\n\nimport { spawn } from \"node:child_process\";\nimport * as path from \"node:path\";\nimport * as fs from \"node:fs/promises\";\n\nexport interface RunOptions {\n /** Directory containing generated mcp-server (default: cwd or cwd/dist). */\n path?: string;\n}\n\n/**\n * Start the MCP server from the given directory.\n * Expects mcp-server.ts and tool-specs.json there; runs via npx tsx mcp-server.ts.\n * Returns a child process; caller should handle stdin/stdout and cleanup.\n */\nexport async function runMCPServer(options: RunOptions = {}): Promise<{ process: ReturnType<typeof spawn> }> {\n const base = options.path ?? process.cwd();\n const candidates = [\n path.join(base, \"mcp-server.ts\"),\n path.join(base, \"mcp-server.js\"),\n path.join(base, \"dist\", \"mcp-server.ts\"),\n path.join(base, \"dist\", \"mcp-server.js\"),\n path.join(base, \"generated\", \"mcp-server.ts\"),\n path.join(base, \"generated\", \"mcp-server.js\"),\n ];\n let entry = \"\";\n for (const p of candidates) {\n try {\n await fs.access(p);\n entry = p;\n break;\n } catch {\n // continue\n }\n }\n if (!entry) {\n throw new Error(\n `MCP entrypoint not found. Run \"agent-tool build\" first, or pass --path to a directory containing mcp-server.ts. Tried: ${candidates.join(\", \")}`,\n );\n }\n\n const dir = path.dirname(entry);\n const child = spawn(\"npx\", [\"-y\", \"tsx\", path.basename(entry)], {\n cwd: dir,\n stdio: [\"pipe\", \"pipe\", \"inherit\"],\n shell: false,\n });\n\n return { process: child };\n}\n"]}
|
package/dist/index.cjs
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkHMC5G5FQ_cjs = require('./chunk-HMC5G5FQ.cjs');
|
|
4
|
+
var chunk2TFGOUXN_cjs = require('./chunk-2TFGOUXN.cjs');
|
|
5
|
+
var chunkVLV5F6HX_cjs = require('./chunk-VLV5F6HX.cjs');
|
|
6
6
|
require('./chunk-AGLGFQUW.cjs');
|
|
7
7
|
require('./chunk-JW4EMVTE.cjs');
|
|
8
8
|
var chunkUUNG3GL3_cjs = require('./chunk-UUNG3GL3.cjs');
|
|
9
|
-
var
|
|
9
|
+
var context = require('@easynet/agent-common/context');
|
|
10
|
+
var utils = require('@easynet/agent-common/utils');
|
|
10
11
|
var tools = require('@langchain/core/tools');
|
|
11
12
|
var url = require('url');
|
|
12
13
|
var path = require('path');
|
|
@@ -34,11 +35,11 @@ function buildIntent(toolName, inputSchema, args) {
|
|
|
34
35
|
return {
|
|
35
36
|
tool: toolName,
|
|
36
37
|
args: hasArgsWrapper(inputSchema) ? { args } : args,
|
|
37
|
-
purpose:
|
|
38
|
+
purpose: chunkVLV5F6HX_cjs.LANGCHAIN_KIND
|
|
38
39
|
};
|
|
39
40
|
}
|
|
40
41
|
function normalizeArgs(args) {
|
|
41
|
-
return
|
|
42
|
+
return utils.stripNullishObjectFields(args ?? {});
|
|
42
43
|
}
|
|
43
44
|
var DEFAULT_CTX_FACTORY = () => ({
|
|
44
45
|
requestId: `lc-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,
|
|
@@ -91,7 +92,7 @@ var LangChainToolsHub = class {
|
|
|
91
92
|
const intent = buildIntent(spec.name, enriched.inputSchema, normalizedArgs);
|
|
92
93
|
const ctx = ctxFactory();
|
|
93
94
|
const result = await runtime.invoke(intent, ctx);
|
|
94
|
-
return
|
|
95
|
+
return chunk2TFGOUXN_cjs.toToolObservationText(result, { includeFeedbackMarker: true });
|
|
95
96
|
}
|
|
96
97
|
});
|
|
97
98
|
}
|
|
@@ -133,9 +134,9 @@ function collectExtensionEmbeddedDefaults(exts) {
|
|
|
133
134
|
) ?? "";
|
|
134
135
|
if (!configPath) continue;
|
|
135
136
|
try {
|
|
136
|
-
const toolDefaults =
|
|
137
|
+
const toolDefaults = chunk2TFGOUXN_cjs.loadToolConfig(configPath).toolDefaults ?? {};
|
|
137
138
|
if (Object.keys(toolDefaults).length === 0) continue;
|
|
138
|
-
const manifest =
|
|
139
|
+
const manifest = chunkHMC5G5FQ_cjs.loadExtensionManifest(ext.packageRoot);
|
|
139
140
|
const ownToolNames = /* @__PURE__ */ new Set();
|
|
140
141
|
for (const e of manifest.entries) {
|
|
141
142
|
if (e.name) ownToolNames.add(e.name);
|
|
@@ -154,17 +155,17 @@ function collectExtensionEmbeddedDefaults(exts) {
|
|
|
154
155
|
return merged;
|
|
155
156
|
}
|
|
156
157
|
function loadMergedToolConfig(overridePath) {
|
|
157
|
-
const baseConfig =
|
|
158
|
+
const baseConfig = chunk2TFGOUXN_cjs.loadToolConfig(EMBEDDED_TOOL_CONFIG_PATH);
|
|
158
159
|
if (!overridePath) return baseConfig;
|
|
159
|
-
const overrideConfig =
|
|
160
|
-
return
|
|
160
|
+
const overrideConfig = chunk2TFGOUXN_cjs.loadToolConfig(overridePath);
|
|
161
|
+
return utils.deepMerge({}, baseConfig, overrideConfig);
|
|
161
162
|
}
|
|
162
163
|
function runtimeOptionsFromConfig(opts, toolConfig, configPathForResolve, extensionEmbeddedDefaults) {
|
|
163
164
|
const coreTools = opts.coreTools ?? { sandboxRoot: process.cwd(), allowedHosts: [], enableSandboxValidation: false };
|
|
164
165
|
{
|
|
165
166
|
const updates = {};
|
|
166
167
|
if (toolConfig.sandboxedPath && typeof toolConfig.sandboxedPath === "string") {
|
|
167
|
-
updates.sandboxRoot =
|
|
168
|
+
updates.sandboxRoot = chunk2TFGOUXN_cjs.resolveSandboxedPath(configPathForResolve, toolConfig.sandboxedPath);
|
|
168
169
|
}
|
|
169
170
|
if (typeof toolConfig.enableSandboxValidation === "boolean") {
|
|
170
171
|
updates.enableSandboxValidation = toolConfig.enableSandboxValidation;
|
|
@@ -191,7 +192,7 @@ function runtimeOptionsFromConfig(opts, toolConfig, configPathForResolve, extens
|
|
|
191
192
|
const packageDefaults = { ...coreTools.packageDefaults };
|
|
192
193
|
if (toolConfig.packageToolDefaults != null && Object.keys(toolConfig.packageToolDefaults).length > 0) {
|
|
193
194
|
for (const [descriptor, pkgConfig] of Object.entries(toolConfig.packageToolDefaults)) {
|
|
194
|
-
const prefix = descriptor.startsWith("file:") ?
|
|
195
|
+
const prefix = descriptor.startsWith("file:") ? chunk2TFGOUXN_cjs.fileDescriptorToPackagePrefix(descriptor) : chunk2TFGOUXN_cjs.npmDescriptorToPackagePrefixWithVersion(descriptor);
|
|
195
196
|
if (!prefix) continue;
|
|
196
197
|
const pkgDefaults = pkgConfig?.defaults != null && typeof pkgConfig.defaults === "object" && !Array.isArray(pkgConfig.defaults) ? pkgConfig.defaults : {};
|
|
197
198
|
if (Object.keys(pkgDefaults).length > 0) {
|
|
@@ -220,10 +221,10 @@ function buildRuntimeAndHub(options = {}) {
|
|
|
220
221
|
const configPathForResolve = options.configFilePath ?? EMBEDDED_TOOL_CONFIG_PATH;
|
|
221
222
|
const mergedToolConfig = loadMergedToolConfig(options.configFilePath);
|
|
222
223
|
const extensionEmbeddedDefaults = collectExtensionEmbeddedDefaults(
|
|
223
|
-
|
|
224
|
+
chunk2TFGOUXN_cjs.loadAllExtensionsFromToolYamlSync(configPathForResolve)
|
|
224
225
|
);
|
|
225
226
|
const runtimeOpts = runtimeOptionsFromConfig(options, mergedToolConfig, configPathForResolve, extensionEmbeddedDefaults);
|
|
226
|
-
const { runtime } =
|
|
227
|
+
const { runtime } = chunk2TFGOUXN_cjs.createRuntimeFromConfigSync(runtimeOpts);
|
|
227
228
|
const hub = new LangChainToolsHub(runtime);
|
|
228
229
|
return { runtime, hub, mergedToolConfig };
|
|
229
230
|
}
|
|
@@ -233,9 +234,9 @@ function createLangChainAgentTools(options) {
|
|
|
233
234
|
const names = Array.isArray(mergedToolConfig.tools) ? mergedToolConfig.tools : [];
|
|
234
235
|
if (names.length > 0) {
|
|
235
236
|
const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);
|
|
236
|
-
const allBarePackages = names.every((n) =>
|
|
237
|
+
const allBarePackages = names.every((n) => chunk2TFGOUXN_cjs.isBarePackageDescriptor(String(n)));
|
|
237
238
|
if (allBarePackages) return hub.getLangChainTools();
|
|
238
|
-
return hub.getLangChainToolsForNames(
|
|
239
|
+
return hub.getLangChainToolsForNames(chunk2TFGOUXN_cjs.expandToolDescriptorsToRegistryNames(names, registryNames));
|
|
239
240
|
}
|
|
240
241
|
return hub.getLangChainTools();
|
|
241
242
|
}
|
|
@@ -247,7 +248,7 @@ function getDefaultAgentContext() {
|
|
|
247
248
|
const store = globalThis;
|
|
248
249
|
const existing = store[DEFAULT_CONTEXT_KEY];
|
|
249
250
|
if (isAgentContext(existing)) return existing;
|
|
250
|
-
const created =
|
|
251
|
+
const created = context.createAgentContext();
|
|
251
252
|
store[DEFAULT_CONTEXT_KEY] = created;
|
|
252
253
|
return created;
|
|
253
254
|
}
|
|
@@ -255,7 +256,7 @@ function getDefaultAgentContext() {
|
|
|
255
256
|
// src/api/register-tools.ts
|
|
256
257
|
function createAgentTools(options) {
|
|
257
258
|
const tools = createLangChainAgentTools(options);
|
|
258
|
-
getDefaultAgentContext().set(
|
|
259
|
+
getDefaultAgentContext().set(context.AgentContextTokens.Tools, tools);
|
|
259
260
|
return tools;
|
|
260
261
|
}
|
|
261
262
|
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/api/adapters/LangChainToolsHub.ts","../src/api/createAgentTools.ts","../src/agent-context.ts","../src/api/register-tools.ts"],"names":["LANGCHAIN_KIND","stripNullishObjectFields","enrichSpecWithCanonicalSchema","DynamicStructuredTool","toToolObservationText","dirname","fileURLToPath","resolve","existsSync","loadToolConfig","loadExtensionManifest","deepMerge","resolveSandboxedPath","fileDescriptorToPackagePrefix","npmDescriptorToPackagePrefixWithVersion","loadAllExtensionsFromToolYamlSync","createRuntimeFromConfigSync","isBarePackageDescriptor","expandToolDescriptorsToRegistryNames","createAgentContext","AgentContextTokens"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Exposes all tools from a ToolRegistry + PTCRuntime as LangChain tools\n * for local agent use (e.g. with createReactAgent, AgentExecutor).\n *\n * For most users, use createAgentTools() from @easynet/agent-tool, which loads from tool.yaml and returns\n * StructuredTool[]. Use LangChainToolsHub when you need a custom runtime or ctxFactory.\n *\n * Use: new LangChainToolsHub(runtime, ctxFactory).getLangChainTools()\n */\n\nimport { DynamicStructuredTool, type StructuredToolInterface } from \"@langchain/core/tools\";\nimport { stripNullishObjectFields } from \"@easynet/agent-common\";\nimport type { PTCRuntime } from \"../../core/runtime/PTCRuntime.js\";\nimport type { ToolSpec } from \"../../core/types/ToolSpec.js\";\nimport type { ExecContext } from \"../../core/types/ToolIntent.js\";\nimport type { ToolIntent } from \"../../core/types/ToolIntent.js\";\nimport { enrichSpecWithCanonicalSchema } from \"../../tools/util/canonicalCoreSchemas.js\";\nimport { LANGCHAIN_KIND } from \"../../tools/langchain/types.js\";\nimport { toToolObservationText } from \"../../core/runtime/toolObservation.js\";\n\n/**\n * If inputSchema wraps all params in a single \"args\" object (manifest convention),\n * returns that inner args schema; otherwise returns null.\n */\nfunction getArgsSchemaIfWrapped(inputSchema: object): Record<string, unknown> | null {\n const s = inputSchema as Record<string, unknown>;\n if (s?.type !== \"object\" || !s.properties || typeof s.properties !== \"object\") return null;\n const args = (s.properties as Record<string, unknown>).args;\n if (\n args != null &&\n typeof args === \"object\" &&\n (args as Record<string, unknown>).type === \"object\" &&\n (args as Record<string, unknown>).properties != null\n ) {\n return args as Record<string, unknown>;\n }\n return null;\n}\n\n/**\n * True when inputSchema wraps all params in a single \"args\" object (manifest convention).\n */\nfunction hasArgsWrapper(inputSchema: object): boolean {\n return getArgsSchemaIfWrapped(inputSchema) !== null;\n}\n\n/**\n * If inputSchema is { type: \"object\", properties: { args: { type: \"object\", properties: {...} } } },\n * return the inner args schema so the LLM can pass { path: \".\" } instead of { args: { path: \".\" } }.\n */\nfunction schemaForLangChain(inputSchema: object): Record<string, unknown> {\n const wrapped = getArgsSchemaIfWrapped(inputSchema);\n if (wrapped !== null) return wrapped;\n return inputSchema as Record<string, unknown>;\n}\n\nfunction buildIntent(\n toolName: string,\n inputSchema: object,\n args: Record<string, unknown>,\n): ToolIntent {\n return {\n tool: toolName,\n args: hasArgsWrapper(inputSchema) ? { args } : args,\n purpose: LANGCHAIN_KIND,\n };\n}\n\nfunction normalizeArgs(args: Record<string, unknown> | undefined): Record<string, unknown> {\n return stripNullishObjectFields(args ?? {}) as Record<string, unknown>;\n}\n\nexport type ExecContextFactory = () => ExecContext;\n\nconst DEFAULT_CTX_FACTORY: ExecContextFactory = () => ({\n requestId: `lc-${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 ],\n});\n\n/**\n * Hub that wraps PTCRuntime and exposes every registered tool as a LangChain\n * StructuredTool (DynamicStructuredTool), so local agents (LangChain AgentExecutor,\n * createReactAgent, etc.) can use the same tools as MCP and OpenAPI.\n */\nexport class LangChainToolsHub {\n constructor(\n private readonly runtime: PTCRuntime,\n private readonly ctxFactory: ExecContextFactory = DEFAULT_CTX_FACTORY,\n ) {}\n\n /**\n * Returns all registered tools as LangChain StructuredTool[].\n * Each tool invokes the runtime through the full pipeline (policy, HITL, etc.).\n */\n getLangChainTools(): StructuredToolInterface[] {\n const registry = this.runtime.getRegistry();\n const specs = registry.snapshot();\n\n return specs.map((spec) => this.specToLangChainTool(spec));\n }\n\n /**\n * Returns LangChain tools for a subset of tools (by name or query).\n */\n getLangChainToolsForNames(toolNames: string[]): StructuredToolInterface[] {\n const registry = this.runtime.getRegistry();\n const set = new Set(toolNames);\n const specs = registry.snapshot().filter((s) => set.has(s.name));\n return specs.map((spec) => this.specToLangChainTool(spec));\n }\n\n private specToLangChainTool(spec: ToolSpec): DynamicStructuredTool {\n const runtime = this.runtime;\n const ctxFactory = this.ctxFactory;\n const enriched = enrichSpecWithCanonicalSchema(spec);\n\n const schema = schemaForLangChain(enriched.inputSchema);\n return new DynamicStructuredTool({\n name: spec.name,\n description: spec.description ?? `Tool: ${spec.name}`,\n schema,\n func: async (args: Record<string, unknown>): Promise<string> => {\n const normalizedArgs = normalizeArgs(args);\n const intent = buildIntent(spec.name, enriched.inputSchema, normalizedArgs);\n const ctx = ctxFactory();\n const result = await runtime.invoke(intent, ctx);\n return toToolObservationText(result, { includeFeedbackMarker: true });\n },\n });\n }\n}\n","/**\n * Standalone tool creation functions. Each function:\n * - Uses the embedded config/tool.yaml as the default base.\n * - If a configFilePath is provided, merges it on top of the default.\n * - If no options are provided at all, behaves as if only the embedded default is used.\n *\n * Public module API uses createAgentTools() in register-tools.ts.\n * This file keeps internal builders for LangChain / MCP / OpenAPI outputs.\n */\n\nimport { loadToolConfig, resolveSandboxedPath } from \"../tools/util/toolConfig.js\";\nimport type { ToolYamlShape } from \"../tools/util/toolConfig.js\";\nimport { loadExtensionManifest } from \"./extension/registerFromManifest.js\";\nimport {\n expandToolDescriptorsToRegistryNames,\n isBarePackageDescriptor,\n npmDescriptorToPackagePrefixWithVersion,\n fileDescriptorToPackagePrefix,\n} from \"../tools/util/toolDescriptor.js\";\nimport { deepMerge } from \"@easynet/agent-common\";\nimport { createRuntimeFromConfigSync, loadAllExtensionsFromToolYamlSync } from \"./runtimeFromConfig.js\";\nimport type { CreateRuntimeOptions, LoadedExtension } from \"./runtimeFromConfig.js\";\nimport { LangChainToolsHub } from \"./adapters/LangChainToolsHub.js\";\nimport { createMCPServer, type MCPServerOptions, type McpServer } from \"./expose/mcpServer.js\";\nimport {\n createOpenAPIHttpServer,\n type OpenAPIExpressApp,\n type OpenAPIHttpServerOptions,\n} from \"./expose/openapiHttp.js\";\nimport type { StructuredToolInterface } from \"@langchain/core/tools\";\nimport { fileURLToPath } from \"node:url\";\nimport { dirname, resolve } from \"node:path\";\nimport { existsSync } from \"node:fs\";\n\nexport interface CreateAgentToolsOptions extends CreateRuntimeOptions {\n /** Path to an override tool.yaml; its values are merged on top of the embedded default config/tool.yaml */\n configFilePath?: string;\n}\n\n/** Merge host lists from multiple sources (e.g. tool.yaml + programmatic). Union, dedup, preserves order. */\nfunction mergeHostLists(a?: string[], b?: string[]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const list of [a ?? [], b ?? []]) {\n for (const h of list) {\n if (!seen.has(h)) {\n seen.add(h);\n out.push(h);\n }\n }\n }\n return out;\n}\n\nfunction resolveEmbeddedToolConfigPath(): string {\n const moduleDir = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n resolve(moduleDir, \"../../config/tool.yaml\"), // src/api -> config\n resolve(moduleDir, \"../config/tool.yaml\"), // dist/* -> config\n resolve(process.cwd(), \"config/tool.yaml\"), // fallback for local app runtime\n ];\n for (const candidate of candidates) {\n if (existsSync(candidate)) return candidate;\n }\n return candidates[0]!;\n}\n\nconst EMBEDDED_TOOL_CONFIG_PATH = resolveEmbeddedToolConfigPath();\n\n/**\n * For each loaded extension, load its embedded config/tool.yaml (layer 2) and collect\n * the toolDefaults into a flat map. Later entries in the list win over earlier ones.\n *\n * Security constraint: each extension's embedded config may only set defaults for tools\n * that belong to that extension (verified against its own manifest). Keys that reference\n * tools from other extensions or global config fields are silently ignored.\n */\nfunction collectExtensionEmbeddedDefaults(\n exts: LoadedExtension[],\n): Record<string, Record<string, unknown>> {\n const merged: Record<string, Record<string, unknown>> = {};\n for (const ext of exts) {\n // Prefer dist/config/tool.yaml (published package); fall back to config/tool.yaml (local dev).\n const configPath =\n [resolve(ext.packageRoot, \"dist/config/tool.yaml\"), resolve(ext.packageRoot, \"config/tool.yaml\")].find(\n existsSync,\n ) ?? \"\";\n if (!configPath) continue;\n try {\n const toolDefaults = loadToolConfig(configPath).toolDefaults ?? {};\n if (Object.keys(toolDefaults).length === 0) continue;\n\n // Build the set of short names this extension owns from its manifest.\n // Include both the explicit name field and the dot-path derived from sourcePath\n // (e.g. \"listDir\" and \"fs.listDir\" for src/fs/listDir) so that config keys in\n // either format are accepted.\n const manifest = loadExtensionManifest(ext.packageRoot);\n const ownToolNames = new Set<string>();\n for (const e of manifest.entries) {\n if (e.name) ownToolNames.add(e.name);\n if (e.sourcePath) {\n ownToolNames.add(e.sourcePath.replace(/^src\\//, \"\").replace(/\\//g, \".\"));\n }\n }\n\n for (const [k, v] of Object.entries(toolDefaults)) {\n // Only allow keys that are short names of tools this extension registers.\n if (ownToolNames.has(k)) {\n merged[k] = v;\n }\n }\n } catch {\n // skip malformed extension config or missing manifest\n }\n }\n return merged;\n}\n\nfunction loadMergedToolConfig(overridePath?: string): ToolYamlShape {\n const baseConfig = loadToolConfig(EMBEDDED_TOOL_CONFIG_PATH);\n if (!overridePath) return baseConfig;\n const overrideConfig = loadToolConfig(overridePath);\n return deepMerge({} as ToolYamlShape, baseConfig, overrideConfig);\n}\n\nfunction runtimeOptionsFromConfig(\n opts: CreateAgentToolsOptions,\n toolConfig: ToolYamlShape,\n configPathForResolve: string,\n extensionEmbeddedDefaults: Record<string, Record<string, unknown>>,\n): CreateRuntimeOptions {\n const coreTools = opts.coreTools ?? { sandboxRoot: process.cwd(), allowedHosts: [], enableSandboxValidation: false };\n {\n const updates: {\n sandboxRoot?: string;\n enableSandboxValidation?: boolean;\n allowedHosts?: string[];\n blockedHosts?: string[];\n blockedCidrs?: string[];\n toolOverrides?: Record<string, Record<string, unknown>>;\n packageDefaults?: Record<string, Record<string, unknown>>;\n } = {};\n if (toolConfig.sandboxedPath && typeof toolConfig.sandboxedPath === \"string\") {\n updates.sandboxRoot = resolveSandboxedPath(configPathForResolve, toolConfig.sandboxedPath);\n }\n if (typeof toolConfig.enableSandboxValidation === \"boolean\") {\n updates.enableSandboxValidation = toolConfig.enableSandboxValidation;\n } else if (coreTools.enableSandboxValidation == null) {\n updates.enableSandboxValidation = false;\n }\n // Smart merge: union of allowedHosts and blockedHosts from yaml + programmatic (both lists always applied)\n updates.allowedHosts = mergeHostLists(coreTools.allowedHosts, toolConfig.allowedHosts);\n updates.blockedHosts = mergeHostLists(coreTools.blockedHosts, toolConfig.blockedHosts);\n if (Array.isArray(toolConfig.blockedCidrs) && toolConfig.blockedCidrs.length > 0) {\n updates.blockedCidrs = toolConfig.blockedCidrs;\n } else if (coreTools.blockedCidrs?.length) {\n updates.blockedCidrs = coreTools.blockedCidrs;\n }\n let hasToolDefaults = false;\n // Priority (low → high): extension embedded (layer 2) < programmatic coreTools < layer 1+3 toolDefaults\n const flatOverrides: Record<string, Record<string, unknown>> = {\n ...extensionEmbeddedDefaults,\n ...coreTools.toolOverrides,\n };\n if (Object.keys(extensionEmbeddedDefaults).length > 0) hasToolDefaults = true;\n if (toolConfig.toolDefaults != null && Object.keys(toolConfig.toolDefaults).length > 0) {\n Object.assign(flatOverrides, toolConfig.toolDefaults);\n hasToolDefaults = true;\n }\n const packageDefaults: Record<string, Record<string, unknown>> = { ...coreTools.packageDefaults };\n if (toolConfig.packageToolDefaults != null && Object.keys(toolConfig.packageToolDefaults).length > 0) {\n for (const [descriptor, pkgConfig] of Object.entries(toolConfig.packageToolDefaults)) {\n const prefix = descriptor.startsWith(\"file:\")\n ? fileDescriptorToPackagePrefix(descriptor)\n : npmDescriptorToPackagePrefixWithVersion(descriptor);\n if (!prefix) continue;\n const pkgDefaults =\n pkgConfig?.defaults != null && typeof pkgConfig.defaults === \"object\" && !Array.isArray(pkgConfig.defaults)\n ? (pkgConfig.defaults as Record<string, unknown>)\n : {};\n if (Object.keys(pkgDefaults).length > 0) {\n packageDefaults[prefix] = pkgDefaults;\n }\n const toolConfigs = pkgConfig?.tools != null && typeof pkgConfig.tools === \"object\" && !Array.isArray(pkgConfig.tools) ? pkgConfig.tools : {};\n for (const [toolName, config] of Object.entries(toolConfigs)) {\n if (config != null && typeof config === \"object\") {\n hasToolDefaults = true;\n flatOverrides[`${prefix}::${toolName}`] = { ...pkgDefaults, ...(config as Record<string, unknown>) };\n }\n }\n }\n if (Object.keys(packageDefaults).length > 0) {\n updates.packageDefaults = packageDefaults;\n }\n }\n if (hasToolDefaults) {\n updates.toolOverrides = flatOverrides;\n }\n if (Object.keys(updates).length > 0) return { ...opts, coreTools: { ...coreTools, ...updates } };\n }\n return { ...opts, coreTools };\n}\n\n/**\n * Build a ready-to-use runtime + hub from options.\n * - No options → embedded default config/tool.yaml only.\n * - options.configFilePath → override merged on top of embedded default.\n */\nfunction buildRuntimeAndHub(options: CreateAgentToolsOptions = {}): {\n runtime: ReturnType<typeof createRuntimeFromConfigSync>[\"runtime\"];\n hub: LangChainToolsHub;\n mergedToolConfig: ToolYamlShape;\n} {\n const configPathForResolve = options.configFilePath ?? EMBEDDED_TOOL_CONFIG_PATH;\n const mergedToolConfig = loadMergedToolConfig(options.configFilePath);\n // Collect layer-2 defaults from each extension's embedded config/tool.yaml.\n // loadAllExtensionsFromToolYamlSync is cheap here (require() is cached by Node.js).\n const extensionEmbeddedDefaults = collectExtensionEmbeddedDefaults(\n loadAllExtensionsFromToolYamlSync(configPathForResolve),\n );\n const runtimeOpts = runtimeOptionsFromConfig(options, mergedToolConfig, configPathForResolve, extensionEmbeddedDefaults);\n const { runtime } = createRuntimeFromConfigSync(runtimeOpts);\n const hub = new LangChainToolsHub(runtime);\n return { runtime, hub, mergedToolConfig };\n}\n\n/**\n * Internal: create LangChain tools from config/runtime.\n *\n * - No argument → uses embedded default config/tool.yaml.\n * - options.configFilePath → merged on top of embedded default.\n * - All other CreateAgentToolsOptions (coreTools, etc.) are applied as programmatic overrides.\n *\n * @example\n * Internal helper consumed by createAgentTools().\n */\nexport function createLangChainAgentTools(\n options?: CreateAgentToolsOptions | string,\n): StructuredToolInterface[] {\n const opts: CreateAgentToolsOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const { runtime, hub, mergedToolConfig } = buildRuntimeAndHub(opts);\n\n const names = Array.isArray(mergedToolConfig.tools) ? mergedToolConfig.tools : [];\n if (names.length > 0) {\n const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);\n const allBarePackages = names.every((n) => isBarePackageDescriptor(String(n)));\n if (allBarePackages) return hub.getLangChainTools();\n return hub.getLangChainToolsForNames(expandToolDescriptorsToRegistryNames(names, registryNames));\n }\n return hub.getLangChainTools();\n}\n\n/**\n * Internal: create an MCP server from tool config.\n *\n * - No argument → uses embedded default config/tool.yaml.\n * - options.configFilePath → merged on top of embedded default.\n * - options.mcp → passed to the MCP server (name, version, execContextFactory).\n *\n * @example\n * Internal helper consumed by createAgentTools() expose flows.\n */\nexport async function createMcpServer(\n options?: (CreateAgentToolsOptions & MCPServerOptions) | string,\n): Promise<McpServer> {\n const opts: CreateAgentToolsOptions & MCPServerOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const { runtime, mergedToolConfig } = buildRuntimeAndHub(opts);\n const serverOpts: MCPServerOptions = {\n name: opts.name ?? mergedToolConfig.mcp?.name,\n version: opts.version ?? mergedToolConfig.mcp?.version,\n execContextFactory: opts.execContextFactory,\n };\n const { server } = await createMCPServer(runtime, serverOpts);\n return server;\n}\n\n/**\n * Internal: create an OpenAPI / Swagger HTTP server from tool config.\n *\n * - No argument → uses embedded default config/tool.yaml.\n * - options.configFilePath → merged on top of embedded default.\n * - options.port, host, basePath → passed to the HTTP server; tool.yaml openapi: section provides defaults.\n *\n * @example\n * Internal helper consumed by createAgentTools() expose flows.\n */\nexport async function createOpenAPIServer(\n options?: (CreateAgentToolsOptions & OpenAPIHttpServerOptions) | string,\n): Promise<OpenAPIExpressApp> {\n const opts: CreateAgentToolsOptions & OpenAPIHttpServerOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const { runtime, mergedToolConfig } = buildRuntimeAndHub(opts);\n const serverOpts: OpenAPIHttpServerOptions = {\n host: opts.host ?? mergedToolConfig.openapi?.host,\n port: opts.port ?? mergedToolConfig.openapi?.port,\n basePath: opts.basePath ?? mergedToolConfig.openapi?.basePath,\n execContextFactory: opts.execContextFactory,\n };\n return createOpenAPIHttpServer(runtime, serverOpts);\n}\n","import { createAgentContext, type AgentContext } from \"@easynet/agent-common\";\n\nconst DEFAULT_CONTEXT_KEY = \"__easynet_agent_default_context__\";\n\nfunction isAgentContext(value: unknown): value is AgentContext {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as AgentContext).get === \"function\" &&\n typeof (value as AgentContext).set === \"function\" &&\n typeof (value as AgentContext).has === \"function\"\n );\n}\n\nexport function getDefaultAgentContext(): AgentContext {\n const store = globalThis as Record<string, unknown>;\n const existing = store[DEFAULT_CONTEXT_KEY];\n if (isAgentContext(existing)) return existing;\n\n const created = createAgentContext();\n store[DEFAULT_CONTEXT_KEY] = created;\n return created;\n}\n","import { AgentContextTokens } from \"@easynet/agent-common\";\nimport { createLangChainAgentTools, type CreateAgentToolsOptions } from \"./createAgentTools.js\";\nimport type { StructuredToolInterface } from \"@langchain/core/tools\";\nimport { getDefaultAgentContext } from \"../agent-context.js\";\n\nexport interface CreateAgentToolsModuleOptions extends CreateAgentToolsOptions {}\n\n/**\n * Initialize LangChain agent tools and register them into the process-level singleton AgentContext.\n *\n * Sets:\n * - AgentContextTokens.Tools → StructuredToolInterface[]\n *\n * @example\n * ```ts\n * createAgentTools({ configFilePath: \"config/tool.yaml\" });\n * ```\n */\nexport function createAgentTools(options?: CreateAgentToolsModuleOptions): StructuredToolInterface[] {\n const tools = createLangChainAgentTools(options);\n getDefaultAgentContext().set(AgentContextTokens.Tools, tools);\n return tools;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/api/adapters/LangChainToolsHub.ts","../src/api/createAgentTools.ts","../src/agent-context.ts","../src/api/register-tools.ts"],"names":["LANGCHAIN_KIND","stripNullishObjectFields","enrichSpecWithCanonicalSchema","DynamicStructuredTool","toToolObservationText","dirname","fileURLToPath","resolve","existsSync","loadToolConfig","loadExtensionManifest","deepMerge","resolveSandboxedPath","fileDescriptorToPackagePrefix","npmDescriptorToPackagePrefixWithVersion","loadAllExtensionsFromToolYamlSync","createRuntimeFromConfigSync","isBarePackageDescriptor","expandToolDescriptorsToRegistryNames","createAgentContext","AgentContextTokens"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Exposes all tools from a ToolRegistry + PTCRuntime as LangChain tools\n * for local agent use (e.g. with createReactAgent, AgentExecutor).\n *\n * For most users, use createAgentTools() from @easynet/agent-tool, which loads from tool.yaml and returns\n * StructuredTool[]. Use LangChainToolsHub when you need a custom runtime or ctxFactory.\n *\n * Use: new LangChainToolsHub(runtime, ctxFactory).getLangChainTools()\n */\n\nimport { DynamicStructuredTool, type StructuredToolInterface } from \"@langchain/core/tools\";\nimport { stripNullishObjectFields } from \"@easynet/agent-common/utils\";\nimport type { PTCRuntime } from \"../../core/runtime/PTCRuntime.js\";\nimport type { ToolSpec } from \"../../core/types/ToolSpec.js\";\nimport type { ExecContext } from \"../../core/types/ToolIntent.js\";\nimport type { ToolIntent } from \"../../core/types/ToolIntent.js\";\nimport { enrichSpecWithCanonicalSchema } from \"../../tools/util/canonicalCoreSchemas.js\";\nimport { LANGCHAIN_KIND } from \"../../tools/langchain/types.js\";\nimport { toToolObservationText } from \"../../core/runtime/toolObservation.js\";\n\n/**\n * If inputSchema wraps all params in a single \"args\" object (manifest convention),\n * returns that inner args schema; otherwise returns null.\n */\nfunction getArgsSchemaIfWrapped(inputSchema: object): Record<string, unknown> | null {\n const s = inputSchema as Record<string, unknown>;\n if (s?.type !== \"object\" || !s.properties || typeof s.properties !== \"object\") return null;\n const args = (s.properties as Record<string, unknown>).args;\n if (\n args != null &&\n typeof args === \"object\" &&\n (args as Record<string, unknown>).type === \"object\" &&\n (args as Record<string, unknown>).properties != null\n ) {\n return args as Record<string, unknown>;\n }\n return null;\n}\n\n/**\n * True when inputSchema wraps all params in a single \"args\" object (manifest convention).\n */\nfunction hasArgsWrapper(inputSchema: object): boolean {\n return getArgsSchemaIfWrapped(inputSchema) !== null;\n}\n\n/**\n * If inputSchema is { type: \"object\", properties: { args: { type: \"object\", properties: {...} } } },\n * return the inner args schema so the LLM can pass { path: \".\" } instead of { args: { path: \".\" } }.\n */\nfunction schemaForLangChain(inputSchema: object): Record<string, unknown> {\n const wrapped = getArgsSchemaIfWrapped(inputSchema);\n if (wrapped !== null) return wrapped;\n return inputSchema as Record<string, unknown>;\n}\n\nfunction buildIntent(\n toolName: string,\n inputSchema: object,\n args: Record<string, unknown>,\n): ToolIntent {\n return {\n tool: toolName,\n args: hasArgsWrapper(inputSchema) ? { args } : args,\n purpose: LANGCHAIN_KIND,\n };\n}\n\nfunction normalizeArgs(args: Record<string, unknown> | undefined): Record<string, unknown> {\n return stripNullishObjectFields(args ?? {}) as Record<string, unknown>;\n}\n\nexport type ExecContextFactory = () => ExecContext;\n\nconst DEFAULT_CTX_FACTORY: ExecContextFactory = () => ({\n requestId: `lc-${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 ],\n});\n\n/**\n * Hub that wraps PTCRuntime and exposes every registered tool as a LangChain\n * StructuredTool (DynamicStructuredTool), so local agents (LangChain AgentExecutor,\n * createReactAgent, etc.) can use the same tools as MCP and OpenAPI.\n */\nexport class LangChainToolsHub {\n constructor(\n private readonly runtime: PTCRuntime,\n private readonly ctxFactory: ExecContextFactory = DEFAULT_CTX_FACTORY,\n ) {}\n\n /**\n * Returns all registered tools as LangChain StructuredTool[].\n * Each tool invokes the runtime through the full pipeline (policy, HITL, etc.).\n */\n getLangChainTools(): StructuredToolInterface[] {\n const registry = this.runtime.getRegistry();\n const specs = registry.snapshot();\n\n return specs.map((spec) => this.specToLangChainTool(spec));\n }\n\n /**\n * Returns LangChain tools for a subset of tools (by name or query).\n */\n getLangChainToolsForNames(toolNames: string[]): StructuredToolInterface[] {\n const registry = this.runtime.getRegistry();\n const set = new Set(toolNames);\n const specs = registry.snapshot().filter((s) => set.has(s.name));\n return specs.map((spec) => this.specToLangChainTool(spec));\n }\n\n private specToLangChainTool(spec: ToolSpec): DynamicStructuredTool {\n const runtime = this.runtime;\n const ctxFactory = this.ctxFactory;\n const enriched = enrichSpecWithCanonicalSchema(spec);\n\n const schema = schemaForLangChain(enriched.inputSchema);\n return new DynamicStructuredTool({\n name: spec.name,\n description: spec.description ?? `Tool: ${spec.name}`,\n schema,\n func: async (args: Record<string, unknown>): Promise<string> => {\n const normalizedArgs = normalizeArgs(args);\n const intent = buildIntent(spec.name, enriched.inputSchema, normalizedArgs);\n const ctx = ctxFactory();\n const result = await runtime.invoke(intent, ctx);\n return toToolObservationText(result, { includeFeedbackMarker: true });\n },\n });\n }\n}\n","/**\n * Standalone tool creation functions. Each function:\n * - Uses the embedded config/tool.yaml as the default base.\n * - If a configFilePath is provided, merges it on top of the default.\n * - If no options are provided at all, behaves as if only the embedded default is used.\n *\n * Public module API uses createAgentTools() in register-tools.ts.\n * This file keeps internal builders for LangChain / MCP / OpenAPI outputs.\n */\n\nimport { loadToolConfig, resolveSandboxedPath } from \"../tools/util/toolConfig.js\";\nimport type { ToolYamlShape } from \"../tools/util/toolConfig.js\";\nimport { loadExtensionManifest } from \"./extension/registerFromManifest.js\";\nimport {\n expandToolDescriptorsToRegistryNames,\n isBarePackageDescriptor,\n npmDescriptorToPackagePrefixWithVersion,\n fileDescriptorToPackagePrefix,\n} from \"../tools/util/toolDescriptor.js\";\nimport { deepMerge } from \"@easynet/agent-common/utils\";\nimport { createRuntimeFromConfigSync, loadAllExtensionsFromToolYamlSync } from \"./runtimeFromConfig.js\";\nimport type { CreateRuntimeOptions, LoadedExtension } from \"./runtimeFromConfig.js\";\nimport { LangChainToolsHub } from \"./adapters/LangChainToolsHub.js\";\nimport { createMCPServer, type MCPServerOptions, type McpServer } from \"./expose/mcpServer.js\";\nimport {\n createOpenAPIHttpServer,\n type OpenAPIExpressApp,\n type OpenAPIHttpServerOptions,\n} from \"./expose/openapiHttp.js\";\nimport type { StructuredToolInterface } from \"@langchain/core/tools\";\nimport { fileURLToPath } from \"node:url\";\nimport { dirname, resolve } from \"node:path\";\nimport { existsSync } from \"node:fs\";\n\nexport interface CreateAgentToolsOptions extends CreateRuntimeOptions {\n /** Path to an override tool.yaml; its values are merged on top of the embedded default config/tool.yaml */\n configFilePath?: string;\n}\n\n/** Merge host lists from multiple sources (e.g. tool.yaml + programmatic). Union, dedup, preserves order. */\nfunction mergeHostLists(a?: string[], b?: string[]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const list of [a ?? [], b ?? []]) {\n for (const h of list) {\n if (!seen.has(h)) {\n seen.add(h);\n out.push(h);\n }\n }\n }\n return out;\n}\n\nfunction resolveEmbeddedToolConfigPath(): string {\n const moduleDir = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n resolve(moduleDir, \"../../config/tool.yaml\"), // src/api -> config\n resolve(moduleDir, \"../config/tool.yaml\"), // dist/* -> config\n resolve(process.cwd(), \"config/tool.yaml\"), // fallback for local app runtime\n ];\n for (const candidate of candidates) {\n if (existsSync(candidate)) return candidate;\n }\n return candidates[0]!;\n}\n\nconst EMBEDDED_TOOL_CONFIG_PATH = resolveEmbeddedToolConfigPath();\n\n/**\n * For each loaded extension, load its embedded config/tool.yaml (layer 2) and collect\n * the toolDefaults into a flat map. Later entries in the list win over earlier ones.\n *\n * Security constraint: each extension's embedded config may only set defaults for tools\n * that belong to that extension (verified against its own manifest). Keys that reference\n * tools from other extensions or global config fields are silently ignored.\n */\nfunction collectExtensionEmbeddedDefaults(\n exts: LoadedExtension[],\n): Record<string, Record<string, unknown>> {\n const merged: Record<string, Record<string, unknown>> = {};\n for (const ext of exts) {\n // Prefer dist/config/tool.yaml (published package); fall back to config/tool.yaml (local dev).\n const configPath =\n [resolve(ext.packageRoot, \"dist/config/tool.yaml\"), resolve(ext.packageRoot, \"config/tool.yaml\")].find(\n existsSync,\n ) ?? \"\";\n if (!configPath) continue;\n try {\n const toolDefaults = loadToolConfig(configPath).toolDefaults ?? {};\n if (Object.keys(toolDefaults).length === 0) continue;\n\n // Build the set of short names this extension owns from its manifest.\n // Include both the explicit name field and the dot-path derived from sourcePath\n // (e.g. \"listDir\" and \"fs.listDir\" for src/fs/listDir) so that config keys in\n // either format are accepted.\n const manifest = loadExtensionManifest(ext.packageRoot);\n const ownToolNames = new Set<string>();\n for (const e of manifest.entries) {\n if (e.name) ownToolNames.add(e.name);\n if (e.sourcePath) {\n ownToolNames.add(e.sourcePath.replace(/^src\\//, \"\").replace(/\\//g, \".\"));\n }\n }\n\n for (const [k, v] of Object.entries(toolDefaults)) {\n // Only allow keys that are short names of tools this extension registers.\n if (ownToolNames.has(k)) {\n merged[k] = v;\n }\n }\n } catch {\n // skip malformed extension config or missing manifest\n }\n }\n return merged;\n}\n\nfunction loadMergedToolConfig(overridePath?: string): ToolYamlShape {\n const baseConfig = loadToolConfig(EMBEDDED_TOOL_CONFIG_PATH);\n if (!overridePath) return baseConfig;\n const overrideConfig = loadToolConfig(overridePath);\n return deepMerge({} as ToolYamlShape, baseConfig, overrideConfig);\n}\n\nfunction runtimeOptionsFromConfig(\n opts: CreateAgentToolsOptions,\n toolConfig: ToolYamlShape,\n configPathForResolve: string,\n extensionEmbeddedDefaults: Record<string, Record<string, unknown>>,\n): CreateRuntimeOptions {\n const coreTools = opts.coreTools ?? { sandboxRoot: process.cwd(), allowedHosts: [], enableSandboxValidation: false };\n {\n const updates: {\n sandboxRoot?: string;\n enableSandboxValidation?: boolean;\n allowedHosts?: string[];\n blockedHosts?: string[];\n blockedCidrs?: string[];\n toolOverrides?: Record<string, Record<string, unknown>>;\n packageDefaults?: Record<string, Record<string, unknown>>;\n } = {};\n if (toolConfig.sandboxedPath && typeof toolConfig.sandboxedPath === \"string\") {\n updates.sandboxRoot = resolveSandboxedPath(configPathForResolve, toolConfig.sandboxedPath);\n }\n if (typeof toolConfig.enableSandboxValidation === \"boolean\") {\n updates.enableSandboxValidation = toolConfig.enableSandboxValidation;\n } else if (coreTools.enableSandboxValidation == null) {\n updates.enableSandboxValidation = false;\n }\n // Smart merge: union of allowedHosts and blockedHosts from yaml + programmatic (both lists always applied)\n updates.allowedHosts = mergeHostLists(coreTools.allowedHosts, toolConfig.allowedHosts);\n updates.blockedHosts = mergeHostLists(coreTools.blockedHosts, toolConfig.blockedHosts);\n if (Array.isArray(toolConfig.blockedCidrs) && toolConfig.blockedCidrs.length > 0) {\n updates.blockedCidrs = toolConfig.blockedCidrs;\n } else if (coreTools.blockedCidrs?.length) {\n updates.blockedCidrs = coreTools.blockedCidrs;\n }\n let hasToolDefaults = false;\n // Priority (low → high): extension embedded (layer 2) < programmatic coreTools < layer 1+3 toolDefaults\n const flatOverrides: Record<string, Record<string, unknown>> = {\n ...extensionEmbeddedDefaults,\n ...coreTools.toolOverrides,\n };\n if (Object.keys(extensionEmbeddedDefaults).length > 0) hasToolDefaults = true;\n if (toolConfig.toolDefaults != null && Object.keys(toolConfig.toolDefaults).length > 0) {\n Object.assign(flatOverrides, toolConfig.toolDefaults);\n hasToolDefaults = true;\n }\n const packageDefaults: Record<string, Record<string, unknown>> = { ...coreTools.packageDefaults };\n if (toolConfig.packageToolDefaults != null && Object.keys(toolConfig.packageToolDefaults).length > 0) {\n for (const [descriptor, pkgConfig] of Object.entries(toolConfig.packageToolDefaults)) {\n const prefix = descriptor.startsWith(\"file:\")\n ? fileDescriptorToPackagePrefix(descriptor)\n : npmDescriptorToPackagePrefixWithVersion(descriptor);\n if (!prefix) continue;\n const pkgDefaults =\n pkgConfig?.defaults != null && typeof pkgConfig.defaults === \"object\" && !Array.isArray(pkgConfig.defaults)\n ? (pkgConfig.defaults as Record<string, unknown>)\n : {};\n if (Object.keys(pkgDefaults).length > 0) {\n packageDefaults[prefix] = pkgDefaults;\n }\n const toolConfigs = pkgConfig?.tools != null && typeof pkgConfig.tools === \"object\" && !Array.isArray(pkgConfig.tools) ? pkgConfig.tools : {};\n for (const [toolName, config] of Object.entries(toolConfigs)) {\n if (config != null && typeof config === \"object\") {\n hasToolDefaults = true;\n flatOverrides[`${prefix}::${toolName}`] = { ...pkgDefaults, ...(config as Record<string, unknown>) };\n }\n }\n }\n if (Object.keys(packageDefaults).length > 0) {\n updates.packageDefaults = packageDefaults;\n }\n }\n if (hasToolDefaults) {\n updates.toolOverrides = flatOverrides;\n }\n if (Object.keys(updates).length > 0) return { ...opts, coreTools: { ...coreTools, ...updates } };\n }\n return { ...opts, coreTools };\n}\n\n/**\n * Build a ready-to-use runtime + hub from options.\n * - No options → embedded default config/tool.yaml only.\n * - options.configFilePath → override merged on top of embedded default.\n */\nfunction buildRuntimeAndHub(options: CreateAgentToolsOptions = {}): {\n runtime: ReturnType<typeof createRuntimeFromConfigSync>[\"runtime\"];\n hub: LangChainToolsHub;\n mergedToolConfig: ToolYamlShape;\n} {\n const configPathForResolve = options.configFilePath ?? EMBEDDED_TOOL_CONFIG_PATH;\n const mergedToolConfig = loadMergedToolConfig(options.configFilePath);\n // Collect layer-2 defaults from each extension's embedded config/tool.yaml.\n // loadAllExtensionsFromToolYamlSync is cheap here (require() is cached by Node.js).\n const extensionEmbeddedDefaults = collectExtensionEmbeddedDefaults(\n loadAllExtensionsFromToolYamlSync(configPathForResolve),\n );\n const runtimeOpts = runtimeOptionsFromConfig(options, mergedToolConfig, configPathForResolve, extensionEmbeddedDefaults);\n const { runtime } = createRuntimeFromConfigSync(runtimeOpts);\n const hub = new LangChainToolsHub(runtime);\n return { runtime, hub, mergedToolConfig };\n}\n\n/**\n * Internal: create LangChain tools from config/runtime.\n *\n * - No argument → uses embedded default config/tool.yaml.\n * - options.configFilePath → merged on top of embedded default.\n * - All other CreateAgentToolsOptions (coreTools, etc.) are applied as programmatic overrides.\n *\n * @example\n * Internal helper consumed by createAgentTools().\n */\nexport function createLangChainAgentTools(\n options?: CreateAgentToolsOptions | string,\n): StructuredToolInterface[] {\n const opts: CreateAgentToolsOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const { runtime, hub, mergedToolConfig } = buildRuntimeAndHub(opts);\n\n const names = Array.isArray(mergedToolConfig.tools) ? mergedToolConfig.tools : [];\n if (names.length > 0) {\n const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);\n const allBarePackages = names.every((n) => isBarePackageDescriptor(String(n)));\n if (allBarePackages) return hub.getLangChainTools();\n return hub.getLangChainToolsForNames(expandToolDescriptorsToRegistryNames(names, registryNames));\n }\n return hub.getLangChainTools();\n}\n\n/**\n * Internal: create an MCP server from tool config.\n *\n * - No argument → uses embedded default config/tool.yaml.\n * - options.configFilePath → merged on top of embedded default.\n * - options.mcp → passed to the MCP server (name, version, execContextFactory).\n *\n * @example\n * Internal helper consumed by createAgentTools() expose flows.\n */\nexport async function createMcpServer(\n options?: (CreateAgentToolsOptions & MCPServerOptions) | string,\n): Promise<McpServer> {\n const opts: CreateAgentToolsOptions & MCPServerOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const { runtime, mergedToolConfig } = buildRuntimeAndHub(opts);\n const serverOpts: MCPServerOptions = {\n name: opts.name ?? mergedToolConfig.mcp?.name,\n version: opts.version ?? mergedToolConfig.mcp?.version,\n execContextFactory: opts.execContextFactory,\n };\n const { server } = await createMCPServer(runtime, serverOpts);\n return server;\n}\n\n/**\n * Internal: create an OpenAPI / Swagger HTTP server from tool config.\n *\n * - No argument → uses embedded default config/tool.yaml.\n * - options.configFilePath → merged on top of embedded default.\n * - options.port, host, basePath → passed to the HTTP server; tool.yaml openapi: section provides defaults.\n *\n * @example\n * Internal helper consumed by createAgentTools() expose flows.\n */\nexport async function createOpenAPIServer(\n options?: (CreateAgentToolsOptions & OpenAPIHttpServerOptions) | string,\n): Promise<OpenAPIExpressApp> {\n const opts: CreateAgentToolsOptions & OpenAPIHttpServerOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const { runtime, mergedToolConfig } = buildRuntimeAndHub(opts);\n const serverOpts: OpenAPIHttpServerOptions = {\n host: opts.host ?? mergedToolConfig.openapi?.host,\n port: opts.port ?? mergedToolConfig.openapi?.port,\n basePath: opts.basePath ?? mergedToolConfig.openapi?.basePath,\n execContextFactory: opts.execContextFactory,\n };\n return createOpenAPIHttpServer(runtime, serverOpts);\n}\n","import { createAgentContext, type AgentContext } from \"@easynet/agent-common/context\";\n\nconst DEFAULT_CONTEXT_KEY = \"__easynet_agent_default_context__\";\n\nfunction isAgentContext(value: unknown): value is AgentContext {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as AgentContext).get === \"function\" &&\n typeof (value as AgentContext).set === \"function\" &&\n typeof (value as AgentContext).has === \"function\"\n );\n}\n\nexport function getDefaultAgentContext(): AgentContext {\n const store = globalThis as Record<string, unknown>;\n const existing = store[DEFAULT_CONTEXT_KEY];\n if (isAgentContext(existing)) return existing;\n\n const created = createAgentContext();\n store[DEFAULT_CONTEXT_KEY] = created;\n return created;\n}\n","import { AgentContextTokens } from \"@easynet/agent-common/context\";\nimport { createLangChainAgentTools, type CreateAgentToolsOptions } from \"./createAgentTools.js\";\nimport type { StructuredToolInterface } from \"@langchain/core/tools\";\nimport { getDefaultAgentContext } from \"../agent-context.js\";\n\nexport interface CreateAgentToolsModuleOptions extends CreateAgentToolsOptions {}\n\n/**\n * Initialize LangChain agent tools and register them into the process-level singleton AgentContext.\n *\n * Sets:\n * - AgentContextTokens.Tools → StructuredToolInterface[]\n *\n * @example\n * ```ts\n * createAgentTools({ configFilePath: \"config/tool.yaml\" });\n * ```\n */\nexport function createAgentTools(options?: CreateAgentToolsModuleOptions): StructuredToolInterface[] {\n const tools = createLangChainAgentTools(options);\n getDefaultAgentContext().set(AgentContextTokens.Tools, tools);\n return tools;\n}\n"]}
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { loadExtensionManifest } from './chunk-
|
|
2
|
-
import { isBarePackageDescriptor, expandToolDescriptorsToRegistryNames, loadAllExtensionsFromToolYamlSync, createRuntimeFromConfigSync, loadToolConfig, resolveSandboxedPath, fileDescriptorToPackagePrefix, npmDescriptorToPackagePrefixWithVersion, toToolObservationText } from './chunk-
|
|
3
|
-
import { LANGCHAIN_KIND } from './chunk-
|
|
1
|
+
import { loadExtensionManifest } from './chunk-JEOBJ37J.js';
|
|
2
|
+
import { isBarePackageDescriptor, expandToolDescriptorsToRegistryNames, loadAllExtensionsFromToolYamlSync, createRuntimeFromConfigSync, loadToolConfig, resolveSandboxedPath, fileDescriptorToPackagePrefix, npmDescriptorToPackagePrefixWithVersion, toToolObservationText } from './chunk-WCMZLN3F.js';
|
|
3
|
+
import { LANGCHAIN_KIND } from './chunk-POUTZDWB.js';
|
|
4
4
|
import './chunk-IVL4TBFB.js';
|
|
5
5
|
import './chunk-BDUSB6GT.js';
|
|
6
6
|
import { enrichSpecWithCanonicalSchema } from './chunk-NTWOVFEY.js';
|
|
7
|
-
import { AgentContextTokens, createAgentContext
|
|
7
|
+
import { AgentContextTokens, createAgentContext } from '@easynet/agent-common/context';
|
|
8
|
+
import { deepMerge, stripNullishObjectFields } from '@easynet/agent-common/utils';
|
|
8
9
|
import { DynamicStructuredTool } from '@langchain/core/tools';
|
|
9
10
|
import { fileURLToPath } from 'url';
|
|
10
11
|
import { dirname, resolve } from 'path';
|