@easynet/agent-tool 1.0.102 → 1.0.104
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 +33 -35
- package/config/build/build.sh +182 -0
- package/config/build/tsconfig.dts.json +34 -0
- package/config/build/tsup.config.ts +19 -0
- package/config/build/vitest.config.ts +29 -0
- package/config/tool.yaml +1 -0
- package/dist/api/adapters/LangChainToolsHub.d.ts +1 -0
- package/dist/api/adapters/LangChainToolsHub.d.ts.map +1 -1
- package/dist/api/extension/createExtension.d.ts +1 -1
- package/dist/api/extension/createExtension.d.ts.map +1 -1
- package/dist/api/extension/index.d.ts +3 -3
- package/dist/api/extension/index.d.ts.map +1 -1
- package/dist/api/extension/support/groupPrefix.d.ts.map +1 -0
- package/dist/api/extension/{types.d.ts → support/types.d.ts} +3 -3
- package/dist/api/extension/support/types.d.ts.map +1 -0
- package/dist/api/resolveAgentSkillRoots.d.ts +7 -0
- package/dist/api/resolveAgentSkillRoots.d.ts.map +1 -0
- package/dist/api/runtimeFromConfig.d.ts +2 -65
- package/dist/api/runtimeFromConfig.d.ts.map +1 -1
- package/dist/api/runtimeFromConfig.types.d.ts +37 -0
- package/dist/api/runtimeFromConfig.types.d.ts.map +1 -0
- package/dist/build.cjs +5 -5
- package/dist/build.js +2 -2
- package/dist/{chunk-34SBJLFZ.js → chunk-2MSEJB6X.js} +82 -19
- package/dist/chunk-2MSEJB6X.js.map +1 -0
- package/dist/{chunk-YBMF3C6F.cjs → chunk-2THI5UWA.cjs} +90 -21
- package/dist/chunk-2THI5UWA.cjs.map +1 -0
- package/dist/{chunk-POUTZDWB.js → chunk-2Y6T67HJ.js} +3 -3
- package/dist/chunk-2Y6T67HJ.js.map +1 -0
- package/dist/{chunk-VLV5F6HX.cjs → chunk-45MCEW2Y.cjs} +3 -3
- package/dist/chunk-45MCEW2Y.cjs.map +1 -0
- package/dist/{chunk-34SG3EMW.js → chunk-WNWMAS7C.js} +3 -3
- package/dist/{chunk-34SG3EMW.js.map → chunk-WNWMAS7C.js.map} +1 -1
- package/dist/{chunk-XUIGSBWG.cjs → chunk-YAIP4AYQ.cjs} +7 -7
- package/dist/{chunk-XUIGSBWG.cjs.map → chunk-YAIP4AYQ.cjs.map} +1 -1
- package/dist/core/runtime/PTCRuntimePipeline.d.ts.map +1 -1
- package/dist/index.cjs +120 -17
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +112 -11
- package/dist/index.js.map +1 -1
- package/dist/sdk.cjs +1 -1
- package/dist/sdk.cjs.map +1 -1
- package/dist/sdk.js +1 -1
- package/dist/sdk.js.map +1 -1
- package/dist/tools/mcp/index.d.ts +1 -0
- package/dist/tools/mcp/index.d.ts.map +1 -1
- package/dist/tools/mcp/support/types.d.ts.map +1 -0
- package/dist/tools/util/toolConfig.d.ts +7 -0
- package/dist/tools/util/toolConfig.d.ts.map +1 -1
- package/dist/utils/cli/index.cjs +19 -19
- package/dist/utils/cli/index.js +3 -3
- package/package.json +4 -4
- package/dist/api/extension/groupPrefix.d.ts.map +0 -1
- package/dist/api/extension/types.d.ts.map +0 -1
- package/dist/chunk-34SBJLFZ.js.map +0 -1
- package/dist/chunk-POUTZDWB.js.map +0 -1
- package/dist/chunk-VLV5F6HX.cjs.map +0 -1
- package/dist/chunk-YBMF3C6F.cjs.map +0 -1
- package/dist/tools/mcp/types.d.ts.map +0 -1
- /package/dist/api/extension/{groupPrefix.d.ts → support/groupPrefix.d.ts} +0 -0
- /package/dist/tools/mcp/{types.d.ts → support/types.d.ts} +0 -0
|
@@ -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","__dirname","path4","path5","fs3"],"mappings":"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","file":"chunk-34SG3EMW.js","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","__dirname","path4","path5","fs3"],"mappings":"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","file":"chunk-WNWMAS7C.js","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,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunk45MCEW2Y_cjs = require('./chunk-45MCEW2Y.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
|
+
chunk45MCEW2Y_cjs.discoverTools("function", projectPath, opts),
|
|
138
|
+
chunk45MCEW2Y_cjs.discoverTools("skill", projectPath, opts),
|
|
139
|
+
...includeN8n ? [chunk45MCEW2Y_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-YAIP4AYQ.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-YAIP4AYQ.cjs.map
|
|
350
|
+
//# sourceMappingURL=chunk-YAIP4AYQ.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-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"]}
|
|
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-YAIP4AYQ.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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PTCRuntimePipeline.d.ts","sourceRoot":"","sources":["../../../src/core/runtime/PTCRuntimePipeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,eAAe,EAAyB,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAqB,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAU5C,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAE5D,8GAA8G;AAC9G,MAAM,MAAM,kBAAkB,GAAG,CAC/B,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,WAAW,KACb,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AAE7B,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE;QAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;QAAC,QAAQ,IAAI,QAAQ,EAAE,CAAA;KAAE,CAAC;IAC9E,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACnC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC7C,SAAS,EAAE,eAAe,CAAC;IAC3B,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,6GAA6G;IAC7G,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,oBAAoB,CAAC,UAAU,CAAC,GACzC,QAAQ,
|
|
1
|
+
{"version":3,"file":"PTCRuntimePipeline.d.ts","sourceRoot":"","sources":["../../../src/core/runtime/PTCRuntimePipeline.ts"],"names":[],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
require('./chunk-HMC5G5FQ.cjs');
|
|
4
|
-
var
|
|
5
|
-
var
|
|
4
|
+
var chunk2THI5UWA_cjs = require('./chunk-2THI5UWA.cjs');
|
|
5
|
+
var chunk45MCEW2Y_cjs = require('./chunk-45MCEW2Y.cjs');
|
|
6
6
|
require('./chunk-AGLGFQUW.cjs');
|
|
7
7
|
require('./chunk-JW4EMVTE.cjs');
|
|
8
8
|
var chunkUUNG3GL3_cjs = require('./chunk-UUNG3GL3.cjs');
|
|
@@ -12,6 +12,7 @@ var tools = require('@langchain/core/tools');
|
|
|
12
12
|
var url = require('url');
|
|
13
13
|
var path = require('path');
|
|
14
14
|
var fs = require('fs');
|
|
15
|
+
var module$1 = require('module');
|
|
15
16
|
|
|
16
17
|
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
|
|
17
18
|
function getArgsSchemaIfWrapped(inputSchema) {
|
|
@@ -35,7 +36,7 @@ function buildIntent(toolName, inputSchema, args) {
|
|
|
35
36
|
return {
|
|
36
37
|
tool: toolName,
|
|
37
38
|
args: hasArgsWrapper(inputSchema) ? { args } : args,
|
|
38
|
-
purpose:
|
|
39
|
+
purpose: chunk45MCEW2Y_cjs.LANGCHAIN_KIND
|
|
39
40
|
};
|
|
40
41
|
}
|
|
41
42
|
function normalizeArgs(args) {
|
|
@@ -67,7 +68,8 @@ var LangChainToolsHub = class {
|
|
|
67
68
|
getLangChainTools() {
|
|
68
69
|
const registry = this.runtime.getRegistry();
|
|
69
70
|
const specs = registry.snapshot();
|
|
70
|
-
|
|
71
|
+
const modelToolNames = this.buildModelToolNames(specs);
|
|
72
|
+
return specs.map((spec) => this.specToLangChainTool(spec, modelToolNames.get(spec.name) ?? spec.name));
|
|
71
73
|
}
|
|
72
74
|
/**
|
|
73
75
|
* Returns LangChain tools for a subset of tools (by name or query).
|
|
@@ -76,23 +78,43 @@ var LangChainToolsHub = class {
|
|
|
76
78
|
const registry = this.runtime.getRegistry();
|
|
77
79
|
const set = new Set(toolNames);
|
|
78
80
|
const specs = registry.snapshot().filter((s) => set.has(s.name));
|
|
79
|
-
|
|
81
|
+
const modelToolNames = this.buildModelToolNames(specs);
|
|
82
|
+
return specs.map((spec) => this.specToLangChainTool(spec, modelToolNames.get(spec.name) ?? spec.name));
|
|
80
83
|
}
|
|
81
|
-
|
|
84
|
+
buildModelToolNames(specs) {
|
|
85
|
+
const preferred = specs.map((spec) => {
|
|
86
|
+
const shortName = spec._meta?.shortName;
|
|
87
|
+
return {
|
|
88
|
+
spec,
|
|
89
|
+
preferredName: typeof shortName === "string" && shortName.trim().length > 0 ? shortName.trim() : spec.name
|
|
90
|
+
};
|
|
91
|
+
});
|
|
92
|
+
const counts = /* @__PURE__ */ new Map();
|
|
93
|
+
for (const item of preferred) {
|
|
94
|
+
counts.set(item.preferredName, (counts.get(item.preferredName) ?? 0) + 1);
|
|
95
|
+
}
|
|
96
|
+
return new Map(
|
|
97
|
+
preferred.map(({ spec, preferredName }) => [
|
|
98
|
+
spec.name,
|
|
99
|
+
(counts.get(preferredName) ?? 0) === 1 ? preferredName : spec.name
|
|
100
|
+
])
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
specToLangChainTool(spec, modelToolName) {
|
|
82
104
|
const runtime = this.runtime;
|
|
83
105
|
const ctxFactory = this.ctxFactory;
|
|
84
106
|
const enriched = chunkUUNG3GL3_cjs.enrichSpecWithCanonicalSchema(spec);
|
|
85
107
|
const schema = schemaForLangChain(enriched.inputSchema);
|
|
86
108
|
return new tools.DynamicStructuredTool({
|
|
87
|
-
name:
|
|
88
|
-
description: spec.description ?? `Tool: ${
|
|
109
|
+
name: modelToolName,
|
|
110
|
+
description: spec.description ?? `Tool: ${modelToolName}`,
|
|
89
111
|
schema,
|
|
90
112
|
func: async (args) => {
|
|
91
113
|
const normalizedArgs = normalizeArgs(args);
|
|
92
114
|
const intent = buildIntent(spec.name, enriched.inputSchema, normalizedArgs);
|
|
93
115
|
const ctx = ctxFactory();
|
|
94
116
|
const result = await runtime.invoke(intent, ctx);
|
|
95
|
-
return
|
|
117
|
+
return chunk2THI5UWA_cjs.toToolObservationText(result, { includeFeedbackMarker: true });
|
|
96
118
|
}
|
|
97
119
|
});
|
|
98
120
|
}
|
|
@@ -200,9 +222,9 @@ function resolveEmbeddedToolConfigPath() {
|
|
|
200
222
|
}
|
|
201
223
|
var EMBEDDED_TOOL_CONFIG_PATH = resolveEmbeddedToolConfigPath();
|
|
202
224
|
function loadMergedToolConfig(overridePath) {
|
|
203
|
-
const baseConfig =
|
|
225
|
+
const baseConfig = chunk2THI5UWA_cjs.loadToolConfig(EMBEDDED_TOOL_CONFIG_PATH);
|
|
204
226
|
if (!overridePath) return baseConfig;
|
|
205
|
-
const overrideConfig =
|
|
227
|
+
const overrideConfig = chunk2THI5UWA_cjs.loadToolConfig(overridePath);
|
|
206
228
|
return utils.deepMerge({}, baseConfig, overrideConfig);
|
|
207
229
|
}
|
|
208
230
|
function flattenSourceGroupedToolConfig(sources) {
|
|
@@ -214,7 +236,7 @@ function flattenSourceGroupedToolConfig(sources) {
|
|
|
214
236
|
}
|
|
215
237
|
continue;
|
|
216
238
|
}
|
|
217
|
-
const packagePrefix = descriptor.startsWith("npm:") ?
|
|
239
|
+
const packagePrefix = descriptor.startsWith("npm:") ? chunk2THI5UWA_cjs.npmDescriptorToPackagePrefix(descriptor) : descriptor.startsWith("file:") ? chunk2THI5UWA_cjs.fileDescriptorToPackagePrefix(descriptor) : "";
|
|
218
240
|
for (const [toolName, toolConfig] of Object.entries(toolMap)) {
|
|
219
241
|
flat[packagePrefix ? `${packagePrefix}::${toolName}` : toolName] = toolConfig;
|
|
220
242
|
}
|
|
@@ -222,14 +244,14 @@ function flattenSourceGroupedToolConfig(sources) {
|
|
|
222
244
|
return flat;
|
|
223
245
|
}
|
|
224
246
|
function buildConfiguredToolSelections(toolConfig) {
|
|
225
|
-
return
|
|
247
|
+
return chunk2THI5UWA_cjs.getPathSourceDescriptors(toolConfig);
|
|
226
248
|
}
|
|
227
249
|
function runtimeOptionsFromConfig(opts, toolConfig, configPathForResolve, extensionEmbeddedDefaults) {
|
|
228
250
|
const coreTools = opts.coreTools ?? { sandboxRoot: process.cwd(), allowedHosts: [], enableSandboxValidation: false };
|
|
229
251
|
{
|
|
230
252
|
const updates = {};
|
|
231
253
|
if (toolConfig.sandboxedPath && typeof toolConfig.sandboxedPath === "string") {
|
|
232
|
-
updates.sandboxRoot =
|
|
254
|
+
updates.sandboxRoot = chunk2THI5UWA_cjs.resolveSandboxedPath(configPathForResolve, toolConfig.sandboxedPath);
|
|
233
255
|
}
|
|
234
256
|
if (typeof toolConfig.enableSandboxValidation === "boolean") {
|
|
235
257
|
updates.enableSandboxValidation = toolConfig.enableSandboxValidation;
|
|
@@ -271,14 +293,14 @@ async function createLangChainAgentToolsAsync(options) {
|
|
|
271
293
|
configPathForResolve,
|
|
272
294
|
{}
|
|
273
295
|
);
|
|
274
|
-
const { runtime } = await
|
|
296
|
+
const { runtime } = await chunk2THI5UWA_cjs.createRuntimeFromConfig(runtimeOpts);
|
|
275
297
|
const hub = new LangChainToolsHub(runtime);
|
|
276
298
|
const names = buildConfiguredToolSelections(mergedToolConfig);
|
|
277
299
|
if (names.length > 0) {
|
|
278
300
|
const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);
|
|
279
|
-
const allBarePackages = names.every((n) =>
|
|
301
|
+
const allBarePackages = names.every((n) => chunk2THI5UWA_cjs.isBarePackageDescriptor(String(n)));
|
|
280
302
|
if (allBarePackages) return hub.getLangChainTools();
|
|
281
|
-
return hub.getLangChainToolsForNames(
|
|
303
|
+
return hub.getLangChainToolsForNames(chunk2THI5UWA_cjs.expandToolDescriptorsToRegistryNames(names, registryNames));
|
|
282
304
|
}
|
|
283
305
|
return hub.getLangChainTools();
|
|
284
306
|
}
|
|
@@ -290,7 +312,88 @@ async function createAgentTools(configPathOrOptions) {
|
|
|
290
312
|
getDefaultAgentContext().set(agentCommon.AgentContextTokens.Tools, tools);
|
|
291
313
|
return tools;
|
|
292
314
|
}
|
|
315
|
+
function resolveSkillDirectory(root, skillPath) {
|
|
316
|
+
const candidate = path.resolve(root, skillPath);
|
|
317
|
+
if (!fs.existsSync(candidate) || !fs.statSync(candidate).isDirectory()) return null;
|
|
318
|
+
return candidate;
|
|
319
|
+
}
|
|
320
|
+
function getInstalledPackageVersionFromRequire(packageName, req) {
|
|
321
|
+
try {
|
|
322
|
+
const pkgJsonPath = req.resolve(`${packageName}/package.json`);
|
|
323
|
+
const json = fs.readFileSync(pkgJsonPath, "utf-8");
|
|
324
|
+
const pkg = JSON.parse(json);
|
|
325
|
+
return pkg.version ?? null;
|
|
326
|
+
} catch {
|
|
327
|
+
return null;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
function resolveFileDescriptorRoot(descriptor, configFilePath) {
|
|
331
|
+
const parsed = chunk2THI5UWA_cjs.parseToolPath(descriptor.trim());
|
|
332
|
+
if (!parsed || parsed.protocol !== "file") return null;
|
|
333
|
+
const localPath = path.isAbsolute(configFilePath) ? configFilePath : path.resolve(process.cwd(), configFilePath);
|
|
334
|
+
const configDir = path.dirname(localPath);
|
|
335
|
+
const pathPart = `${parsed.scope}/${parsed.packageWithVersion}`;
|
|
336
|
+
const resolvedPath = path.resolve(configDir, pathPart);
|
|
337
|
+
if (!fs.existsSync(resolvedPath) || !fs.statSync(resolvedPath).isDirectory()) return null;
|
|
338
|
+
return resolvedPath;
|
|
339
|
+
}
|
|
340
|
+
function resolveNpmDescriptorRoot(descriptor, configFilePath) {
|
|
341
|
+
const parsed = chunk2THI5UWA_cjs.parseNpmDescriptor(descriptor.trim());
|
|
342
|
+
if (!parsed) return null;
|
|
343
|
+
const localPath = path.isAbsolute(configFilePath) ? configFilePath : path.resolve(process.cwd(), configFilePath);
|
|
344
|
+
const configDir = path.dirname(localPath);
|
|
345
|
+
const packageJsonPath = (() => {
|
|
346
|
+
let dir = path.resolve(configDir);
|
|
347
|
+
while (true) {
|
|
348
|
+
const pkg = path.join(dir, "package.json");
|
|
349
|
+
if (fs.existsSync(pkg)) return pkg;
|
|
350
|
+
const parent = path.dirname(dir);
|
|
351
|
+
if (parent === dir) return null;
|
|
352
|
+
dir = parent;
|
|
353
|
+
}
|
|
354
|
+
})();
|
|
355
|
+
const configRequire = packageJsonPath ? module$1.createRequire(packageJsonPath) : null;
|
|
356
|
+
const npmCwd = packageJsonPath ? path.dirname(packageJsonPath) : configDir;
|
|
357
|
+
if (configRequire) {
|
|
358
|
+
try {
|
|
359
|
+
const installed = getInstalledPackageVersionFromRequire(parsed.packageName, configRequire);
|
|
360
|
+
const requested = parsed.version === "latest" || !parsed.version?.trim() ? null : parsed.version;
|
|
361
|
+
const resolvedVersion = requested ?? installed ?? chunk2THI5UWA_cjs.resolveLatestVersionFromRegistry(parsed.packageName, { cwd: npmCwd });
|
|
362
|
+
if (installed === resolvedVersion) {
|
|
363
|
+
return path.dirname(configRequire.resolve(`${parsed.packageName}/package.json`));
|
|
364
|
+
}
|
|
365
|
+
} catch {
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
const cacheBase = chunk2THI5UWA_cjs.getCacheBaseFromToolConfig(localPath);
|
|
369
|
+
const cacheOptions = cacheBase ? [{ cacheBase, cwd: npmCwd }, { cwd: npmCwd }] : [{ cwd: npmCwd }];
|
|
370
|
+
for (const opts of cacheOptions) {
|
|
371
|
+
try {
|
|
372
|
+
const cacheDir = chunk2THI5UWA_cjs.ensurePackageInCache(parsed.packageName, parsed.version, opts);
|
|
373
|
+
return cacheDir;
|
|
374
|
+
} catch {
|
|
375
|
+
if (cacheBase && "cacheBase" in opts) continue;
|
|
376
|
+
break;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
return null;
|
|
380
|
+
}
|
|
381
|
+
function resolveDescriptorRoot(descriptor, configFilePath) {
|
|
382
|
+
if (descriptor.startsWith("npm:")) return resolveNpmDescriptorRoot(descriptor, configFilePath);
|
|
383
|
+
if (descriptor.startsWith("file:")) return resolveFileDescriptorRoot(descriptor, configFilePath);
|
|
384
|
+
return null;
|
|
385
|
+
}
|
|
386
|
+
function resolveAgentSkillRoots(options) {
|
|
387
|
+
const config = chunk2THI5UWA_cjs.loadToolConfig(options.configFilePath);
|
|
388
|
+
const skillPath = options.skillPath ?? config.skillPath ?? "skills";
|
|
389
|
+
const descriptors = chunk2THI5UWA_cjs.getPathSourceDescriptors(config);
|
|
390
|
+
const roots = descriptors.map((descriptor) => resolveDescriptorRoot(descriptor, options.configFilePath)).filter((value) => typeof value === "string").map((root) => resolveSkillDirectory(root, skillPath)).filter((value) => typeof value === "string");
|
|
391
|
+
return [...new Set(roots)];
|
|
392
|
+
}
|
|
393
|
+
var resolveAgentSkillRootsFromToolConfig = resolveAgentSkillRoots;
|
|
293
394
|
|
|
294
395
|
exports.createAgentTools = createAgentTools;
|
|
396
|
+
exports.resolveAgentSkillRoots = resolveAgentSkillRoots;
|
|
397
|
+
exports.resolveAgentSkillRootsFromToolConfig = resolveAgentSkillRootsFromToolConfig;
|
|
295
398
|
//# sourceMappingURL=index.cjs.map
|
|
296
399
|
//# sourceMappingURL=index.cjs.map
|