@easynet/agent-tool 1.0.74 → 1.0.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +10 -5
  2. package/dist/api/adapters/LangChainToolsHub.d.ts +1 -1
  3. package/dist/api/createAgentTools.d.ts +8 -10
  4. package/dist/api/createAgentTools.d.ts.map +1 -1
  5. package/dist/api/expose/index.d.ts +2 -2
  6. package/dist/api/expose/index.d.ts.map +1 -1
  7. package/dist/api/expose/mcpServer.d.ts +3 -4
  8. package/dist/api/expose/mcpServer.d.ts.map +1 -1
  9. package/dist/api/expose/openapiHttp.d.ts +15 -31
  10. package/dist/api/expose/openapiHttp.d.ts.map +1 -1
  11. package/dist/api/main.cjs +18 -22
  12. package/dist/api/main.d.ts +6 -7
  13. package/dist/api/main.d.ts.map +1 -1
  14. package/dist/api/main.js +2 -2
  15. package/dist/api/runtimeFromConfig.d.ts +1 -1
  16. package/dist/api/runtimeFromConfig.d.ts.map +1 -1
  17. package/dist/{chunk-JYADGZQP.js → chunk-MBCFJBZY.js} +298 -268
  18. package/dist/chunk-MBCFJBZY.js.map +1 -0
  19. package/dist/{chunk-SE6IMOIE.cjs → chunk-PYTHEY6A.cjs} +301 -269
  20. package/dist/chunk-PYTHEY6A.cjs.map +1 -0
  21. package/dist/{chunk-KTQTDKWU.cjs → chunk-SR53PQTG.cjs} +97 -78
  22. package/dist/chunk-SR53PQTG.cjs.map +1 -0
  23. package/dist/{chunk-ECHW6AWF.js → chunk-XS26ZNYC.js} +84 -65
  24. package/dist/chunk-XS26ZNYC.js.map +1 -0
  25. package/dist/index.cjs +17 -21
  26. package/dist/index.cjs.map +1 -1
  27. package/dist/index.d.ts +2 -2
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +3 -3
  30. package/dist/index.js.map +1 -1
  31. package/dist/tools/util/toolConfig.d.ts +13 -0
  32. package/dist/tools/util/toolConfig.d.ts.map +1 -1
  33. package/dist/utils/cli/index.cjs +12 -12
  34. package/dist/utils/cli/index.js +1 -1
  35. package/package.json +4 -1
  36. package/dist/chunk-ECHW6AWF.js.map +0 -1
  37. package/dist/chunk-JYADGZQP.js.map +0 -1
  38. package/dist/chunk-KTQTDKWU.cjs.map +0 -1
  39. package/dist/chunk-SE6IMOIE.cjs.map +0 -1
@@ -1,11 +1,15 @@
1
1
  'use strict';
2
2
 
3
- var chunkSE6IMOIE_cjs = require('./chunk-SE6IMOIE.cjs');
3
+ var chunkPYTHEY6A_cjs = require('./chunk-PYTHEY6A.cjs');
4
4
  var chunkUUNG3GL3_cjs = require('./chunk-UUNG3GL3.cjs');
5
5
  var chunk33N4Y6IS_cjs = require('./chunk-33N4Y6IS.cjs');
6
- var tools = require('@langchain/core/tools');
7
6
  var agentCommon = require('@easynet/agent-common');
7
+ var tools = require('@langchain/core/tools');
8
+ var url = require('url');
9
+ var path = require('path');
10
+ var fs = require('fs');
8
11
 
12
+ var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
9
13
  function getArgsSchemaIfWrapped(inputSchema) {
10
14
  const s = inputSchema;
11
15
  if (s?.type !== "object" || !s.properties || typeof s.properties !== "object") return null;
@@ -100,8 +104,6 @@ var LangChainToolsHub = class {
100
104
  });
101
105
  }
102
106
  };
103
-
104
- // src/api/createAgentTools.ts
105
107
  function mergeHostLists(a, b) {
106
108
  const seen = /* @__PURE__ */ new Set();
107
109
  const out = [];
@@ -115,13 +117,34 @@ function mergeHostLists(a, b) {
115
117
  }
116
118
  return out;
117
119
  }
118
- function runtimeOptionsFromConfig(opts) {
120
+ function resolveEmbeddedToolConfigPath() {
121
+ const moduleDir = path.dirname(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-SR53PQTG.cjs', document.baseURI).href))));
122
+ const candidates = [
123
+ path.resolve(moduleDir, "../../config/tool.yaml"),
124
+ // src/api -> config
125
+ path.resolve(moduleDir, "../config/tool.yaml"),
126
+ // dist/* -> config
127
+ path.resolve(process.cwd(), "config/tool.yaml")
128
+ // fallback for local app runtime
129
+ ];
130
+ for (const candidate of candidates) {
131
+ if (fs.existsSync(candidate)) return candidate;
132
+ }
133
+ return candidates[0];
134
+ }
135
+ var EMBEDDED_TOOL_CONFIG_PATH = resolveEmbeddedToolConfigPath();
136
+ function loadMergedToolConfig(overridePath) {
137
+ const baseConfig = chunkPYTHEY6A_cjs.loadToolConfig(EMBEDDED_TOOL_CONFIG_PATH);
138
+ if (!overridePath) return baseConfig;
139
+ const overrideConfig = chunkPYTHEY6A_cjs.loadToolConfig(overridePath);
140
+ return agentCommon.deepMerge({}, baseConfig, overrideConfig);
141
+ }
142
+ function runtimeOptionsFromConfig(opts, toolConfig, configPathForResolve) {
119
143
  const coreTools = opts.coreTools ?? { sandboxRoot: process.cwd(), allowedHosts: [], enableSandboxValidation: false };
120
- if (opts.configFilePath) {
121
- const toolConfig = chunkSE6IMOIE_cjs.loadToolConfig(opts.configFilePath);
144
+ {
122
145
  const updates = {};
123
146
  if (toolConfig.sandboxedPath && typeof toolConfig.sandboxedPath === "string") {
124
- updates.sandboxRoot = chunkSE6IMOIE_cjs.resolveSandboxedPath(opts.configFilePath, toolConfig.sandboxedPath);
147
+ updates.sandboxRoot = chunkPYTHEY6A_cjs.resolveSandboxedPath(configPathForResolve, toolConfig.sandboxedPath);
125
148
  }
126
149
  if (typeof toolConfig.enableSandboxValidation === "boolean") {
127
150
  updates.enableSandboxValidation = toolConfig.enableSandboxValidation;
@@ -144,7 +167,7 @@ function runtimeOptionsFromConfig(opts) {
144
167
  const packageDefaults = { ...coreTools.packageDefaults };
145
168
  if (toolConfig.packageToolDefaults != null && Object.keys(toolConfig.packageToolDefaults).length > 0) {
146
169
  for (const [descriptor, pkgConfig] of Object.entries(toolConfig.packageToolDefaults)) {
147
- const prefix = descriptor.startsWith("file:") ? chunkSE6IMOIE_cjs.fileDescriptorToPackagePrefix(descriptor) : chunkSE6IMOIE_cjs.npmDescriptorToPackagePrefixWithVersion(descriptor);
170
+ const prefix = descriptor.startsWith("file:") ? chunkPYTHEY6A_cjs.fileDescriptorToPackagePrefix(descriptor) : chunkPYTHEY6A_cjs.npmDescriptorToPackagePrefixWithVersion(descriptor);
148
171
  if (!prefix) continue;
149
172
  const pkgDefaults = pkgConfig?.defaults != null && typeof pkgConfig.defaults === "object" && !Array.isArray(pkgConfig.defaults) ? pkgConfig.defaults : {};
150
173
  if (Object.keys(pkgDefaults).length > 0) {
@@ -165,107 +188,103 @@ function runtimeOptionsFromConfig(opts) {
165
188
  if (hasToolDefaults) {
166
189
  updates.toolOverrides = flatOverrides;
167
190
  }
168
- if (Object.keys(updates).length > 0) {
169
- return { ...opts, coreTools: { ...coreTools, ...updates } };
170
- }
191
+ if (Object.keys(updates).length > 0) return { ...opts, coreTools: { ...coreTools, ...updates } };
171
192
  }
172
193
  return { ...opts, coreTools };
173
194
  }
174
- function createAgentTools(options) {
175
- const registry = createAgentToolsRegistry(options);
176
- return registry.getAgentTools();
177
- }
178
- function createAgentToolsRegistry(options) {
195
+ function createAgentToolRegistry(options) {
179
196
  const opts = typeof options === "string" ? { configFilePath: options } : options ?? {};
180
- const runtimeOpts = runtimeOptionsFromConfig(opts);
181
- const { runtime } = chunkSE6IMOIE_cjs.createRuntimeFromConfigSync(runtimeOpts);
197
+ const configPathForResolve = opts.configFilePath ?? EMBEDDED_TOOL_CONFIG_PATH;
198
+ const mergedToolConfig = loadMergedToolConfig(opts.configFilePath);
199
+ const runtimeOpts = runtimeOptionsFromConfig(opts, mergedToolConfig, configPathForResolve);
200
+ const { runtime } = chunkPYTHEY6A_cjs.createRuntimeFromConfigSync(runtimeOpts);
182
201
  const hub = new LangChainToolsHub(runtime);
183
- if (opts.configFilePath) {
184
- const toolConfig = chunkSE6IMOIE_cjs.loadToolConfig(opts.configFilePath);
185
- const names = Array.isArray(toolConfig.tools) ? toolConfig.tools : [];
202
+ let cachedTools;
203
+ const getAllOrFilteredTools = () => {
204
+ if (cachedTools) return cachedTools;
205
+ const names = Array.isArray(mergedToolConfig.tools) ? mergedToolConfig.tools : [];
186
206
  if (names.length > 0) {
187
207
  const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);
188
- const allBarePackages = names.every((n) => chunkSE6IMOIE_cjs.isBarePackageDescriptor(String(n)));
189
- if (allBarePackages) {
190
- const allTools = hub.getLangChainTools();
191
- return {
192
- getAgentTools(id) {
193
- if (!id) return allTools;
194
- const picked = allTools.filter((tool) => tool.name === id);
195
- if (picked.length === 0) throw new Error(`agent-tool cannot find tool id: ${id}`);
196
- return picked;
197
- }
198
- };
199
- }
200
- const expanded = chunkSE6IMOIE_cjs.expandToolDescriptorsToRegistryNames(names, registryNames);
201
- const tools2 = hub.getLangChainToolsForNames(expanded);
202
- return {
203
- getAgentTools(id) {
204
- if (!id) return tools2;
205
- const picked = tools2.filter((tool) => tool.name === id);
206
- if (picked.length === 0) throw new Error(`agent-tool cannot find tool id: ${id}`);
207
- return picked;
208
- }
209
- };
208
+ const allBarePackages = names.every((n) => chunkPYTHEY6A_cjs.isBarePackageDescriptor(String(n)));
209
+ cachedTools = allBarePackages ? hub.getLangChainTools() : hub.getLangChainToolsForNames(chunkPYTHEY6A_cjs.expandToolDescriptorsToRegistryNames(names, registryNames));
210
+ return cachedTools;
210
211
  }
211
- }
212
- const tools = hub.getLangChainTools();
212
+ cachedTools = hub.getLangChainTools();
213
+ return cachedTools;
214
+ };
215
+ const pickToolsById = (id) => {
216
+ const tools = getAllOrFilteredTools();
217
+ if (!id) return tools;
218
+ const picked = tools.filter((tool) => tool.name === id);
219
+ if (picked.length === 0) throw new Error(`agent-tool cannot find tool id: ${id}`);
220
+ return picked;
221
+ };
213
222
  return {
214
- getAgentTools(id) {
215
- if (!id) return tools;
216
- const picked = tools.filter((tool) => tool.name === id);
217
- if (picked.length === 0) throw new Error(`agent-tool cannot find tool id: ${id}`);
218
- return picked;
223
+ getLangChainAgentTools(id) {
224
+ return pickToolsById(id);
225
+ },
226
+ async getMcpServer(options2) {
227
+ const yamlDefaults = {
228
+ name: mergedToolConfig.mcp?.name,
229
+ version: mergedToolConfig.mcp?.version
230
+ };
231
+ const { server } = await chunkPYTHEY6A_cjs.createMCPServer(runtime, { ...yamlDefaults, ...options2 ?? {} });
232
+ return server;
233
+ },
234
+ async getOpenAPIServer(options2) {
235
+ const yamlDefaults = {
236
+ host: mergedToolConfig.openapi?.host,
237
+ port: mergedToolConfig.openapi?.port,
238
+ basePath: mergedToolConfig.openapi?.basePath
239
+ };
240
+ return chunkPYTHEY6A_cjs.createOpenAPIHttpServer(runtime, { ...yamlDefaults, ...options2 ?? {} });
219
241
  }
220
242
  };
221
243
  }
222
244
  async function createLangChainToolsAsync(options = {}) {
223
- const runtimeOpts = runtimeOptionsFromConfig(options);
224
- const { runtime } = await chunkSE6IMOIE_cjs.createRuntimeFromConfig(runtimeOpts);
245
+ const configPathForResolve = options.configFilePath ?? EMBEDDED_TOOL_CONFIG_PATH;
246
+ const mergedToolConfig = loadMergedToolConfig(options.configFilePath);
247
+ const runtimeOpts = runtimeOptionsFromConfig(options, mergedToolConfig, configPathForResolve);
248
+ const { runtime } = await chunkPYTHEY6A_cjs.createRuntimeFromConfig(runtimeOpts);
225
249
  const hub = new LangChainToolsHub(runtime);
226
- if (options.configFilePath) {
227
- const toolConfig = chunkSE6IMOIE_cjs.loadToolConfig(options.configFilePath);
228
- const names = Array.isArray(toolConfig.tools) ? toolConfig.tools : [];
229
- if (names.length > 0) {
230
- const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);
231
- const allBarePackages = names.every((n) => chunkSE6IMOIE_cjs.isBarePackageDescriptor(String(n)));
232
- if (allBarePackages) {
233
- return hub.getLangChainTools();
234
- }
235
- const expanded = chunkSE6IMOIE_cjs.expandToolDescriptorsToRegistryNames(names, registryNames);
236
- return hub.getLangChainToolsForNames(expanded);
250
+ const names = Array.isArray(mergedToolConfig.tools) ? mergedToolConfig.tools : [];
251
+ if (names.length > 0) {
252
+ const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);
253
+ const allBarePackages = names.every((n) => chunkPYTHEY6A_cjs.isBarePackageDescriptor(String(n)));
254
+ if (allBarePackages) {
255
+ return hub.getLangChainTools();
237
256
  }
257
+ const expanded = chunkPYTHEY6A_cjs.expandToolDescriptorsToRegistryNames(names, registryNames);
258
+ return hub.getLangChainToolsForNames(expanded);
238
259
  }
239
260
  return hub.getLangChainTools();
240
261
  }
241
262
 
242
263
  // src/api/main.ts
243
264
  var langchainApi = {
244
- createAgentTools,
245
- createAgentToolsRegistry,
265
+ createAgentToolRegistry,
246
266
  createLangChainToolsAsync
247
267
  };
248
268
  var runtimeApi = {
249
- createRuntimeFromConfig: chunkSE6IMOIE_cjs.createRuntimeFromConfig,
250
- createRuntimeFromConfigSync: chunkSE6IMOIE_cjs.createRuntimeFromConfigSync
269
+ createRuntimeFromConfig: chunkPYTHEY6A_cjs.createRuntimeFromConfig,
270
+ createRuntimeFromConfigSync: chunkPYTHEY6A_cjs.createRuntimeFromConfigSync
251
271
  };
252
272
  var mcpApi = {
253
- createMCPServer: chunkSE6IMOIE_cjs.createMCPServer,
254
- runMCPServerOverStdio: chunkSE6IMOIE_cjs.runMCPServerOverStdio,
255
- createMCPStreamableHttpHandler: chunkSE6IMOIE_cjs.createMCPStreamableHttpHandler,
256
- createMCPServerStreamableHttp: chunkSE6IMOIE_cjs.createMCPServerStreamableHttp
273
+ createMCPServer: chunkPYTHEY6A_cjs.createMCPServer,
274
+ runMCPServerOverStdio: chunkPYTHEY6A_cjs.runMCPServerOverStdio,
275
+ createMCPStreamableHttpHandler: chunkPYTHEY6A_cjs.createMCPStreamableHttpHandler,
276
+ createMCPServerStreamableHttp: chunkPYTHEY6A_cjs.createMCPServerStreamableHttp
257
277
  };
258
278
  var openApi = {
259
- createOpenAPIServer: chunkSE6IMOIE_cjs.createHttpService,
260
- createHttpService: chunkSE6IMOIE_cjs.createHttpService
279
+ createOpenAPIServer: chunkPYTHEY6A_cjs.createHttpService,
280
+ createHttpService: chunkPYTHEY6A_cjs.createHttpService
261
281
  };
262
282
 
263
- exports.createAgentTools = createAgentTools;
264
- exports.createAgentToolsRegistry = createAgentToolsRegistry;
283
+ exports.createAgentToolRegistry = createAgentToolRegistry;
265
284
  exports.createLangChainToolsAsync = createLangChainToolsAsync;
266
285
  exports.langchainApi = langchainApi;
267
286
  exports.mcpApi = mcpApi;
268
287
  exports.openApi = openApi;
269
288
  exports.runtimeApi = runtimeApi;
270
- //# sourceMappingURL=chunk-KTQTDKWU.cjs.map
271
- //# sourceMappingURL=chunk-KTQTDKWU.cjs.map
289
+ //# sourceMappingURL=chunk-SR53PQTG.cjs.map
290
+ //# sourceMappingURL=chunk-SR53PQTG.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api/adapters/LangChainToolsHub.ts","../src/api/createAgentTools.ts","../src/api/main.ts"],"names":["LANGCHAIN_KIND","stripNullishObjectFields","enrichSpecWithCanonicalSchema","DynamicStructuredTool","dirname","fileURLToPath","resolve","existsSync","loadToolConfig","deepMerge","resolveSandboxedPath","fileDescriptorToPackagePrefix","npmDescriptorToPackagePrefixWithVersion","createRuntimeFromConfigSync","isBarePackageDescriptor","expandToolDescriptorsToRegistryNames","options","createMCPServer","createOpenAPIHttpServer","createRuntimeFromConfig","runMCPServerOverStdio","createMCPStreamableHttpHandler","createMCPServerStreamableHttp","createHttpService"],"mappings":"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","file":"chunk-SR53PQTG.cjs","sourcesContent":["/**\n * Exposes all tools from a ToolRegistry + PTCRuntime as LangChain tools\n * for local agent use (e.g. with createReactAgent, AgentExecutor).\n *\n * For most users, use createAgentToolRegistry().getLangChainAgentTools() which loads from tools.yaml and returns\n * StructuredTool[]. Use LangChainToolsHub when you need a custom runtime or ctxFactory.\n *\n * Use: new LangChainToolsHub(runtime, ctxFactory).getLangChainTools()\n */\n\nimport { DynamicStructuredTool, type StructuredToolInterface } from \"@langchain/core/tools\";\nimport { stripNullishObjectFields } from \"@easynet/agent-common\";\nimport type { PTCRuntime } from \"../../core/runtime/PTCRuntime.js\";\nimport type { ToolSpec } from \"../../core/types/ToolSpec.js\";\nimport type { ToolResult } from \"../../core/types/ToolResult.js\";\nimport type { ExecContext } from \"../../core/types/ToolIntent.js\";\nimport type { ToolIntent } from \"../../core/types/ToolIntent.js\";\nimport { enrichSpecWithCanonicalSchema } from \"../../tools/util/canonicalCoreSchemas.js\";\nimport { LANGCHAIN_KIND } from \"../../tools/langchain/types.js\";\n\n/**\n * If inputSchema wraps all params in a single \"args\" object (manifest convention),\n * returns that inner args schema; otherwise returns null.\n */\nfunction getArgsSchemaIfWrapped(inputSchema: object): Record<string, unknown> | null {\n const s = inputSchema as Record<string, unknown>;\n if (s?.type !== \"object\" || !s.properties || typeof s.properties !== \"object\") return null;\n const args = (s.properties as Record<string, unknown>).args;\n if (\n args != null &&\n typeof args === \"object\" &&\n (args as Record<string, unknown>).type === \"object\" &&\n (args as Record<string, unknown>).properties != null\n ) {\n return args as Record<string, unknown>;\n }\n return null;\n}\n\n/**\n * True when inputSchema wraps all params in a single \"args\" object (manifest convention).\n */\nfunction hasArgsWrapper(inputSchema: object): boolean {\n return getArgsSchemaIfWrapped(inputSchema) !== null;\n}\n\n/**\n * If inputSchema is { type: \"object\", properties: { args: { type: \"object\", properties: {...} } } },\n * return the inner args schema so the LLM can pass { path: \".\" } instead of { args: { path: \".\" } }.\n */\nfunction schemaForLangChain(inputSchema: object): Record<string, unknown> {\n const wrapped = getArgsSchemaIfWrapped(inputSchema);\n if (wrapped !== null) return wrapped;\n return inputSchema as Record<string, unknown>;\n}\n\nfunction buildIntent(\n toolName: string,\n inputSchema: object,\n args: Record<string, unknown>,\n): ToolIntent {\n return {\n tool: toolName,\n args: hasArgsWrapper(inputSchema) ? { args } : args,\n purpose: LANGCHAIN_KIND,\n };\n}\n\nfunction normalizeArgs(args: Record<string, unknown> | undefined): Record<string, unknown> {\n return stripNullishObjectFields(args ?? {}) as Record<string, unknown>;\n}\n\nfunction serializeToolResult(result: ToolResult): string {\n if (result.ok) {\n return typeof result.result === \"string\"\n ? result.result\n : JSON.stringify(result.result);\n }\n\n const err = result.error;\n const message = err?.message ?? \"Tool failed\";\n const details = err?.details;\n return JSON.stringify(\n details != null ? { error: message, details } : { error: message },\n );\n}\n\nexport type ExecContextFactory = () => ExecContext;\n\nconst DEFAULT_CTX_FACTORY: ExecContextFactory = () => ({\n requestId: `lc-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,\n taskId: `task-${Date.now()}`,\n permissions: [\n \"read:web\",\n \"read:fs\",\n \"write:fs\",\n \"read:db\",\n \"write:db\",\n \"network\",\n \"workflow\",\n \"danger:destructive\",\n ],\n});\n\n/**\n * Hub that wraps PTCRuntime and exposes every registered tool as a LangChain\n * StructuredTool (DynamicStructuredTool), so local agents (LangChain AgentExecutor,\n * createReactAgent, etc.) can use the same tools as MCP and OpenAPI.\n */\nexport class LangChainToolsHub {\n constructor(\n private readonly runtime: PTCRuntime,\n private readonly ctxFactory: ExecContextFactory = DEFAULT_CTX_FACTORY,\n ) {}\n\n /**\n * Returns all registered tools as LangChain StructuredTool[].\n * Each tool invokes the runtime through the full pipeline (policy, HITL, etc.).\n */\n getLangChainTools(): StructuredToolInterface[] {\n const registry = this.runtime.getRegistry();\n const specs = registry.snapshot();\n\n return specs.map((spec) => this.specToLangChainTool(spec));\n }\n\n /**\n * Returns LangChain tools for a subset of tools (by name or query).\n */\n getLangChainToolsForNames(toolNames: string[]): StructuredToolInterface[] {\n const registry = this.runtime.getRegistry();\n const set = new Set(toolNames);\n const specs = registry.snapshot().filter((s) => set.has(s.name));\n return specs.map((spec) => this.specToLangChainTool(spec));\n }\n\n private specToLangChainTool(spec: ToolSpec): DynamicStructuredTool {\n const runtime = this.runtime;\n const ctxFactory = this.ctxFactory;\n const enriched = enrichSpecWithCanonicalSchema(spec);\n\n const schema = schemaForLangChain(enriched.inputSchema);\n return new DynamicStructuredTool({\n name: spec.name,\n description: spec.description ?? `Tool: ${spec.name}`,\n schema,\n func: async (args: Record<string, unknown>): Promise<string> => {\n const normalizedArgs = normalizeArgs(args);\n const intent = buildIntent(spec.name, enriched.inputSchema, normalizedArgs);\n const ctx = ctxFactory();\n const result = await runtime.invoke(intent, ctx);\n return serializeToolResult(result);\n },\n });\n }\n}\n","/**\n * Create LangChain tools from config (sync or async). Uses PTCRuntime + registry\n * and exposes tools via LangChainToolsHub. All invokes go through PTC Intent.\n */\n\nimport { loadToolConfig, resolveSandboxedPath } from \"../tools/util/toolConfig.js\";\nimport type { ToolYamlShape } from \"../tools/util/toolConfig.js\";\nimport {\n expandToolDescriptorsToRegistryNames,\n isBarePackageDescriptor,\n npmDescriptorToPackagePrefixWithVersion,\n fileDescriptorToPackagePrefix,\n} from \"../tools/util/toolDescriptor.js\";\nimport { deepMerge } from \"@easynet/agent-common\";\nimport { createRuntimeFromConfigSync, createRuntimeFromConfig } from \"./runtimeFromConfig.js\";\nimport type { CreateRuntimeOptions } from \"./runtimeFromConfig.js\";\nimport { LangChainToolsHub } from \"./adapters/LangChainToolsHub.js\";\nimport { createMCPServer, type MCPServerOptions, type McpServer } from \"./expose/mcpServer.js\";\nimport {\n createOpenAPIHttpServer,\n type OpenAPIExpressApp,\n type OpenAPIHttpServerOptions,\n} from \"./expose/openapiHttp.js\";\nimport type { StructuredToolInterface } from \"@langchain/core/tools\";\nimport { fileURLToPath } from \"node:url\";\nimport { dirname, resolve } from \"node:path\";\nimport { existsSync } from \"node:fs\";\n\nexport interface CreateAgentToolsOptions extends CreateRuntimeOptions {\n /** Path to override tool.yaml; values override embedded config/tool.yaml */\n configFilePath?: string;\n /** Project path for async loading (use createLangChainToolsAsync) */\n projectPath?: string;\n}\n\nexport interface AgentToolRegistry {\n getLangChainAgentTools(id?: string): StructuredToolInterface[];\n getMcpServer(options?: MCPServerOptions): Promise<McpServer>;\n getOpenAPIServer(options?: OpenAPIHttpServerOptions): Promise<OpenAPIExpressApp>;\n}\n\n/** Merge host lists from multiple sources (e.g. tool.yaml + programmatic). Union, dedup, preserves order. */\nfunction mergeHostLists(a?: string[], b?: string[]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const list of [a ?? [], b ?? []]) {\n for (const h of list) {\n if (!seen.has(h)) {\n seen.add(h);\n out.push(h);\n }\n }\n }\n return out;\n}\n\nfunction resolveEmbeddedToolConfigPath(): string {\n const moduleDir = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n resolve(moduleDir, \"../../config/tool.yaml\"), // src/api -> config\n resolve(moduleDir, \"../config/tool.yaml\"), // dist/* -> config\n resolve(process.cwd(), \"config/tool.yaml\"), // fallback for local app runtime\n ];\n for (const candidate of candidates) {\n if (existsSync(candidate)) return candidate;\n }\n return candidates[0]!;\n}\n\nconst EMBEDDED_TOOL_CONFIG_PATH = resolveEmbeddedToolConfigPath();\n\nfunction loadMergedToolConfig(overridePath?: string): ToolYamlShape {\n const baseConfig = loadToolConfig(EMBEDDED_TOOL_CONFIG_PATH);\n if (!overridePath) return baseConfig;\n const overrideConfig = loadToolConfig(overridePath);\n return deepMerge({} as ToolYamlShape, baseConfig, overrideConfig);\n}\n\nfunction runtimeOptionsFromConfig(\n opts: CreateAgentToolsOptions,\n toolConfig: ToolYamlShape,\n configPathForResolve: string,\n): CreateRuntimeOptions {\n const coreTools = opts.coreTools ?? { sandboxRoot: process.cwd(), allowedHosts: [], enableSandboxValidation: false };\n {\n const updates: {\n sandboxRoot?: string;\n enableSandboxValidation?: boolean;\n allowedHosts?: string[];\n blockedHosts?: string[];\n blockedCidrs?: string[];\n toolOverrides?: Record<string, Record<string, unknown>>;\n packageDefaults?: Record<string, Record<string, unknown>>;\n } = {};\n if (toolConfig.sandboxedPath && typeof toolConfig.sandboxedPath === \"string\") {\n updates.sandboxRoot = resolveSandboxedPath(configPathForResolve, toolConfig.sandboxedPath);\n }\n if (typeof toolConfig.enableSandboxValidation === \"boolean\") {\n updates.enableSandboxValidation = toolConfig.enableSandboxValidation;\n } else if (coreTools.enableSandboxValidation == null) {\n updates.enableSandboxValidation = false;\n }\n // Smart merge: union of allowedHosts and blockedHosts from yaml + programmatic (both lists always applied)\n updates.allowedHosts = mergeHostLists(coreTools.allowedHosts, toolConfig.allowedHosts);\n updates.blockedHosts = mergeHostLists(coreTools.blockedHosts, toolConfig.blockedHosts);\n if (Array.isArray(toolConfig.blockedCidrs) && toolConfig.blockedCidrs.length > 0) {\n updates.blockedCidrs = toolConfig.blockedCidrs;\n } else if (coreTools.blockedCidrs?.length) {\n updates.blockedCidrs = coreTools.blockedCidrs;\n }\n let hasToolDefaults = false;\n const flatOverrides: Record<string, Record<string, unknown>> = { ...coreTools.toolOverrides };\n if (toolConfig.toolDefaults != null && Object.keys(toolConfig.toolDefaults).length > 0) {\n Object.assign(flatOverrides, toolConfig.toolDefaults);\n hasToolDefaults = true;\n }\n const packageDefaults: Record<string, Record<string, unknown>> = { ...coreTools.packageDefaults };\n if (toolConfig.packageToolDefaults != null && Object.keys(toolConfig.packageToolDefaults).length > 0) {\n for (const [descriptor, pkgConfig] of Object.entries(toolConfig.packageToolDefaults)) {\n const prefix = descriptor.startsWith(\"file:\")\n ? fileDescriptorToPackagePrefix(descriptor)\n : npmDescriptorToPackagePrefixWithVersion(descriptor);\n if (!prefix) continue;\n const pkgDefaults =\n pkgConfig?.defaults != null && typeof pkgConfig.defaults === \"object\" && !Array.isArray(pkgConfig.defaults)\n ? (pkgConfig.defaults as Record<string, unknown>)\n : {};\n if (Object.keys(pkgDefaults).length > 0) {\n packageDefaults[prefix] = pkgDefaults;\n }\n const toolConfigs = pkgConfig?.tools != null && typeof pkgConfig.tools === \"object\" && !Array.isArray(pkgConfig.tools) ? pkgConfig.tools : {};\n for (const [toolName, config] of Object.entries(toolConfigs)) {\n if (config != null && typeof config === \"object\") {\n hasToolDefaults = true;\n flatOverrides[`${prefix}::${toolName}`] = { ...pkgDefaults, ...(config as Record<string, unknown>) };\n }\n }\n }\n if (Object.keys(packageDefaults).length > 0) {\n updates.packageDefaults = packageDefaults;\n }\n }\n if (hasToolDefaults) {\n updates.toolOverrides = flatOverrides;\n }\n if (Object.keys(updates).length > 0) return { ...opts, coreTools: { ...coreTools, ...updates } };\n }\n return { ...opts, coreTools };\n}\n\nexport function createAgentToolRegistry(\n options?: CreateAgentToolsOptions | string\n): AgentToolRegistry {\n const opts: CreateAgentToolsOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const configPathForResolve = opts.configFilePath ?? EMBEDDED_TOOL_CONFIG_PATH;\n const mergedToolConfig = loadMergedToolConfig(opts.configFilePath);\n const runtimeOpts = runtimeOptionsFromConfig(opts, mergedToolConfig, configPathForResolve);\n const { runtime } = createRuntimeFromConfigSync(runtimeOpts);\n const hub = new LangChainToolsHub(runtime);\n let cachedTools: StructuredToolInterface[] | undefined;\n\n const getAllOrFilteredTools = (): StructuredToolInterface[] => {\n if (cachedTools) return cachedTools;\n const names = Array.isArray(mergedToolConfig.tools) ? mergedToolConfig.tools : [];\n if (names.length > 0) {\n const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);\n const allBarePackages = names.every((n) => isBarePackageDescriptor(String(n)));\n cachedTools = allBarePackages\n ? hub.getLangChainTools()\n : hub.getLangChainToolsForNames(expandToolDescriptorsToRegistryNames(names, registryNames));\n return cachedTools;\n }\n cachedTools = hub.getLangChainTools();\n return cachedTools;\n };\n\n const pickToolsById = (id?: string): StructuredToolInterface[] => {\n const tools = getAllOrFilteredTools();\n if (!id) return tools;\n const picked = tools.filter((tool) => tool.name === id);\n if (picked.length === 0) throw new Error(`agent-tool cannot find tool id: ${id}`);\n return picked;\n };\n\n return {\n getLangChainAgentTools(id?: string): StructuredToolInterface[] {\n return pickToolsById(id);\n },\n async getMcpServer(options?: MCPServerOptions): Promise<McpServer> {\n const yamlDefaults: MCPServerOptions = {\n name: mergedToolConfig.mcp?.name,\n version: mergedToolConfig.mcp?.version,\n };\n const { server } = await createMCPServer(runtime, { ...yamlDefaults, ...(options ?? {}) });\n return server;\n },\n async getOpenAPIServer(options?: OpenAPIHttpServerOptions): Promise<OpenAPIExpressApp> {\n const yamlDefaults: OpenAPIHttpServerOptions = {\n host: mergedToolConfig.openapi?.host,\n port: mergedToolConfig.openapi?.port,\n basePath: mergedToolConfig.openapi?.basePath,\n };\n return createOpenAPIHttpServer(runtime, { ...yamlDefaults, ...(options ?? {}) });\n },\n };\n}\n\n/**\n * Create LangChain tools asynchronously. Use when projectPath is set to load\n * tools from the project before building the tool list.\n */\nexport async function createLangChainToolsAsync(\n options: CreateAgentToolsOptions = {}\n): Promise<StructuredToolInterface[]> {\n const configPathForResolve = options.configFilePath ?? EMBEDDED_TOOL_CONFIG_PATH;\n const mergedToolConfig = loadMergedToolConfig(options.configFilePath);\n const runtimeOpts = runtimeOptionsFromConfig(options, mergedToolConfig, configPathForResolve);\n const { runtime } = await createRuntimeFromConfig(runtimeOpts);\n const hub = new LangChainToolsHub(runtime);\n\n const names = Array.isArray(mergedToolConfig.tools) ? mergedToolConfig.tools : [];\n if (names.length > 0) {\n const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);\n const allBarePackages = names.every((n) => isBarePackageDescriptor(String(n)));\n if (allBarePackages) {\n return hub.getLangChainTools();\n }\n const expanded = expandToolDescriptorsToRegistryNames(names, registryNames);\n return hub.getLangChainToolsForNames(expanded);\n }\n\n return hub.getLangChainTools();\n}\n","/**\n * Public API: three create functions (config-driven) + runtime.\n *\n * 1. createLangChainTools(config?) → LangChain tools (createReactAgent / AgentExecutor)\n * 2. createMCPServer(runtime | config, options?) → MCP server (stdio, Cursor / Claude)\n * 3. createOpenAPIServer(runtime | config, options?) → HTTP + OpenAPI/Swagger (GET /tools, POST /invoke)\n *\n * All tool invokes go through PTC Intent (runtime.invoke(intent, ctx)) for policy, budget, observability.\n * Use createRuntimeFromConfig(config) when you need the runtime for multiple servers.\n */\n\nexport {\n createAgentToolRegistry,\n createLangChainToolsAsync,\n} from \"./createAgentTools.js\";\nexport type { AgentToolRegistry, CreateAgentToolsOptions } from \"./createAgentTools.js\";\n\nexport { createHttpService } from \"./expose/openapiHttp.js\";\nexport type {\n CreateHttpServiceOptions,\n HttpServiceResult,\n OpenAPIExpressApp,\n OpenAPIHttpServerOptions,\n} from \"./expose/openapiHttp.js\";\n/** Alias: OpenAPI server with Swagger support */\nexport { createHttpService as createOpenAPIServer } from \"./expose/openapiHttp.js\";\n\nexport {\n createMCPServer,\n runMCPServerOverStdio,\n createMCPStreamableHttpHandler,\n createMCPServerStreamableHttp,\n} from \"./expose/mcpServer.js\";\nexport type {\n MCPServerOptions,\n MCPServerResult,\n McpServer,\n MCPStreamableHttpHandler,\n MCPServerStreamableHttpResult,\n CreateMCPServerStreamableHttpOptions,\n} from \"./expose/mcpServer.js\";\n\nexport { createRuntimeFromConfig, createRuntimeFromConfigSync } from \"./runtimeFromConfig.js\";\nexport type { CreateRuntimeOptions, CreateRuntimeResult } from \"./runtimeFromConfig.js\";\n\nexport { PTCRuntime } from \"../core/runtime/PTCRuntime.js\";\nexport type { PTCRuntimeConfig } from \"../core/runtime/PTCRuntime.js\";\n\nimport {\n createAgentToolRegistry,\n createLangChainToolsAsync,\n} from \"./createAgentTools.js\";\nimport { createHttpService } from \"./expose/openapiHttp.js\";\nimport {\n createMCPServer,\n runMCPServerOverStdio,\n createMCPStreamableHttpHandler,\n createMCPServerStreamableHttp,\n} from \"./expose/mcpServer.js\";\nimport { createRuntimeFromConfig, createRuntimeFromConfigSync } from \"./runtimeFromConfig.js\";\n\n/**\n * Facade: grouped API for lower import complexity in callers.\n */\nexport const langchainApi = {\n createAgentToolRegistry,\n createLangChainToolsAsync,\n} as const;\n\n/**\n * Facade: grouped runtime creation helpers.\n */\nexport const runtimeApi = {\n createRuntimeFromConfig,\n createRuntimeFromConfigSync,\n} as const;\n\n/**\n * Facade: grouped MCP server helpers.\n */\nexport const mcpApi = {\n createMCPServer,\n runMCPServerOverStdio,\n createMCPStreamableHttpHandler,\n createMCPServerStreamableHttp,\n} as const;\n\n/**\n * Facade: grouped OpenAPI/HTTP helpers.\n */\nexport const openApi = {\n createOpenAPIServer: createHttpService,\n createHttpService,\n} as const;\n"]}
@@ -1,8 +1,11 @@
1
- import { createMCPServerStreamableHttp, createMCPStreamableHttpHandler, runMCPServerOverStdio, createMCPServer, createHttpService, createRuntimeFromConfigSync, createRuntimeFromConfig, loadToolConfig, isBarePackageDescriptor, expandToolDescriptorsToRegistryNames, resolveSandboxedPath, fileDescriptorToPackagePrefix, npmDescriptorToPackagePrefixWithVersion } from './chunk-JYADGZQP.js';
1
+ import { createMCPServerStreamableHttp, createMCPStreamableHttpHandler, runMCPServerOverStdio, createMCPServer, createHttpService, createRuntimeFromConfigSync, createRuntimeFromConfig, createOpenAPIHttpServer, isBarePackageDescriptor, expandToolDescriptorsToRegistryNames, loadToolConfig, resolveSandboxedPath, fileDescriptorToPackagePrefix, npmDescriptorToPackagePrefixWithVersion } from './chunk-MBCFJBZY.js';
2
2
  import { enrichSpecWithCanonicalSchema } from './chunk-NTWOVFEY.js';
3
3
  import { LANGCHAIN_KIND } from './chunk-Q6W32HAP.js';
4
+ import { deepMerge, stripNullishObjectFields } from '@easynet/agent-common';
4
5
  import { DynamicStructuredTool } from '@langchain/core/tools';
5
- import { stripNullishObjectFields } from '@easynet/agent-common';
6
+ import { fileURLToPath } from 'url';
7
+ import { dirname, resolve } from 'path';
8
+ import { existsSync } from 'fs';
6
9
 
7
10
  function getArgsSchemaIfWrapped(inputSchema) {
8
11
  const s = inputSchema;
@@ -98,8 +101,6 @@ var LangChainToolsHub = class {
98
101
  });
99
102
  }
100
103
  };
101
-
102
- // src/api/createAgentTools.ts
103
104
  function mergeHostLists(a, b) {
104
105
  const seen = /* @__PURE__ */ new Set();
105
106
  const out = [];
@@ -113,13 +114,34 @@ function mergeHostLists(a, b) {
113
114
  }
114
115
  return out;
115
116
  }
116
- function runtimeOptionsFromConfig(opts) {
117
+ function resolveEmbeddedToolConfigPath() {
118
+ const moduleDir = dirname(fileURLToPath(import.meta.url));
119
+ const candidates = [
120
+ resolve(moduleDir, "../../config/tool.yaml"),
121
+ // src/api -> config
122
+ resolve(moduleDir, "../config/tool.yaml"),
123
+ // dist/* -> config
124
+ resolve(process.cwd(), "config/tool.yaml")
125
+ // fallback for local app runtime
126
+ ];
127
+ for (const candidate of candidates) {
128
+ if (existsSync(candidate)) return candidate;
129
+ }
130
+ return candidates[0];
131
+ }
132
+ var EMBEDDED_TOOL_CONFIG_PATH = resolveEmbeddedToolConfigPath();
133
+ function loadMergedToolConfig(overridePath) {
134
+ const baseConfig = loadToolConfig(EMBEDDED_TOOL_CONFIG_PATH);
135
+ if (!overridePath) return baseConfig;
136
+ const overrideConfig = loadToolConfig(overridePath);
137
+ return deepMerge({}, baseConfig, overrideConfig);
138
+ }
139
+ function runtimeOptionsFromConfig(opts, toolConfig, configPathForResolve) {
117
140
  const coreTools = opts.coreTools ?? { sandboxRoot: process.cwd(), allowedHosts: [], enableSandboxValidation: false };
118
- if (opts.configFilePath) {
119
- const toolConfig = loadToolConfig(opts.configFilePath);
141
+ {
120
142
  const updates = {};
121
143
  if (toolConfig.sandboxedPath && typeof toolConfig.sandboxedPath === "string") {
122
- updates.sandboxRoot = resolveSandboxedPath(opts.configFilePath, toolConfig.sandboxedPath);
144
+ updates.sandboxRoot = resolveSandboxedPath(configPathForResolve, toolConfig.sandboxedPath);
123
145
  }
124
146
  if (typeof toolConfig.enableSandboxValidation === "boolean") {
125
147
  updates.enableSandboxValidation = toolConfig.enableSandboxValidation;
@@ -163,84 +185,81 @@ function runtimeOptionsFromConfig(opts) {
163
185
  if (hasToolDefaults) {
164
186
  updates.toolOverrides = flatOverrides;
165
187
  }
166
- if (Object.keys(updates).length > 0) {
167
- return { ...opts, coreTools: { ...coreTools, ...updates } };
168
- }
188
+ if (Object.keys(updates).length > 0) return { ...opts, coreTools: { ...coreTools, ...updates } };
169
189
  }
170
190
  return { ...opts, coreTools };
171
191
  }
172
- function createAgentTools(options) {
173
- const registry = createAgentToolsRegistry(options);
174
- return registry.getAgentTools();
175
- }
176
- function createAgentToolsRegistry(options) {
192
+ function createAgentToolRegistry(options) {
177
193
  const opts = typeof options === "string" ? { configFilePath: options } : options ?? {};
178
- const runtimeOpts = runtimeOptionsFromConfig(opts);
194
+ const configPathForResolve = opts.configFilePath ?? EMBEDDED_TOOL_CONFIG_PATH;
195
+ const mergedToolConfig = loadMergedToolConfig(opts.configFilePath);
196
+ const runtimeOpts = runtimeOptionsFromConfig(opts, mergedToolConfig, configPathForResolve);
179
197
  const { runtime } = createRuntimeFromConfigSync(runtimeOpts);
180
198
  const hub = new LangChainToolsHub(runtime);
181
- if (opts.configFilePath) {
182
- const toolConfig = loadToolConfig(opts.configFilePath);
183
- const names = Array.isArray(toolConfig.tools) ? toolConfig.tools : [];
199
+ let cachedTools;
200
+ const getAllOrFilteredTools = () => {
201
+ if (cachedTools) return cachedTools;
202
+ const names = Array.isArray(mergedToolConfig.tools) ? mergedToolConfig.tools : [];
184
203
  if (names.length > 0) {
185
204
  const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);
186
205
  const allBarePackages = names.every((n) => isBarePackageDescriptor(String(n)));
187
- if (allBarePackages) {
188
- const allTools = hub.getLangChainTools();
189
- return {
190
- getAgentTools(id) {
191
- if (!id) return allTools;
192
- const picked = allTools.filter((tool) => tool.name === id);
193
- if (picked.length === 0) throw new Error(`agent-tool cannot find tool id: ${id}`);
194
- return picked;
195
- }
196
- };
197
- }
198
- const expanded = expandToolDescriptorsToRegistryNames(names, registryNames);
199
- const tools2 = hub.getLangChainToolsForNames(expanded);
200
- return {
201
- getAgentTools(id) {
202
- if (!id) return tools2;
203
- const picked = tools2.filter((tool) => tool.name === id);
204
- if (picked.length === 0) throw new Error(`agent-tool cannot find tool id: ${id}`);
205
- return picked;
206
- }
207
- };
206
+ cachedTools = allBarePackages ? hub.getLangChainTools() : hub.getLangChainToolsForNames(expandToolDescriptorsToRegistryNames(names, registryNames));
207
+ return cachedTools;
208
208
  }
209
- }
210
- const tools = hub.getLangChainTools();
209
+ cachedTools = hub.getLangChainTools();
210
+ return cachedTools;
211
+ };
212
+ const pickToolsById = (id) => {
213
+ const tools = getAllOrFilteredTools();
214
+ if (!id) return tools;
215
+ const picked = tools.filter((tool) => tool.name === id);
216
+ if (picked.length === 0) throw new Error(`agent-tool cannot find tool id: ${id}`);
217
+ return picked;
218
+ };
211
219
  return {
212
- getAgentTools(id) {
213
- if (!id) return tools;
214
- const picked = tools.filter((tool) => tool.name === id);
215
- if (picked.length === 0) throw new Error(`agent-tool cannot find tool id: ${id}`);
216
- return picked;
220
+ getLangChainAgentTools(id) {
221
+ return pickToolsById(id);
222
+ },
223
+ async getMcpServer(options2) {
224
+ const yamlDefaults = {
225
+ name: mergedToolConfig.mcp?.name,
226
+ version: mergedToolConfig.mcp?.version
227
+ };
228
+ const { server } = await createMCPServer(runtime, { ...yamlDefaults, ...options2 ?? {} });
229
+ return server;
230
+ },
231
+ async getOpenAPIServer(options2) {
232
+ const yamlDefaults = {
233
+ host: mergedToolConfig.openapi?.host,
234
+ port: mergedToolConfig.openapi?.port,
235
+ basePath: mergedToolConfig.openapi?.basePath
236
+ };
237
+ return createOpenAPIHttpServer(runtime, { ...yamlDefaults, ...options2 ?? {} });
217
238
  }
218
239
  };
219
240
  }
220
241
  async function createLangChainToolsAsync(options = {}) {
221
- const runtimeOpts = runtimeOptionsFromConfig(options);
242
+ const configPathForResolve = options.configFilePath ?? EMBEDDED_TOOL_CONFIG_PATH;
243
+ const mergedToolConfig = loadMergedToolConfig(options.configFilePath);
244
+ const runtimeOpts = runtimeOptionsFromConfig(options, mergedToolConfig, configPathForResolve);
222
245
  const { runtime } = await createRuntimeFromConfig(runtimeOpts);
223
246
  const hub = new LangChainToolsHub(runtime);
224
- if (options.configFilePath) {
225
- const toolConfig = loadToolConfig(options.configFilePath);
226
- const names = Array.isArray(toolConfig.tools) ? toolConfig.tools : [];
227
- if (names.length > 0) {
228
- const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);
229
- const allBarePackages = names.every((n) => isBarePackageDescriptor(String(n)));
230
- if (allBarePackages) {
231
- return hub.getLangChainTools();
232
- }
233
- const expanded = expandToolDescriptorsToRegistryNames(names, registryNames);
234
- return hub.getLangChainToolsForNames(expanded);
247
+ const names = Array.isArray(mergedToolConfig.tools) ? mergedToolConfig.tools : [];
248
+ if (names.length > 0) {
249
+ const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);
250
+ const allBarePackages = names.every((n) => isBarePackageDescriptor(String(n)));
251
+ if (allBarePackages) {
252
+ return hub.getLangChainTools();
235
253
  }
254
+ const expanded = expandToolDescriptorsToRegistryNames(names, registryNames);
255
+ return hub.getLangChainToolsForNames(expanded);
236
256
  }
237
257
  return hub.getLangChainTools();
238
258
  }
239
259
 
240
260
  // src/api/main.ts
241
261
  var langchainApi = {
242
- createAgentTools,
243
- createAgentToolsRegistry,
262
+ createAgentToolRegistry,
244
263
  createLangChainToolsAsync
245
264
  };
246
265
  var runtimeApi = {
@@ -258,6 +277,6 @@ var openApi = {
258
277
  createHttpService
259
278
  };
260
279
 
261
- export { createAgentTools, createAgentToolsRegistry, createLangChainToolsAsync, langchainApi, mcpApi, openApi, runtimeApi };
262
- //# sourceMappingURL=chunk-ECHW6AWF.js.map
263
- //# sourceMappingURL=chunk-ECHW6AWF.js.map
280
+ export { createAgentToolRegistry, createLangChainToolsAsync, langchainApi, mcpApi, openApi, runtimeApi };
281
+ //# sourceMappingURL=chunk-XS26ZNYC.js.map
282
+ //# sourceMappingURL=chunk-XS26ZNYC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api/adapters/LangChainToolsHub.ts","../src/api/createAgentTools.ts","../src/api/main.ts"],"names":["options"],"mappings":"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","file":"chunk-XS26ZNYC.js","sourcesContent":["/**\n * Exposes all tools from a ToolRegistry + PTCRuntime as LangChain tools\n * for local agent use (e.g. with createReactAgent, AgentExecutor).\n *\n * For most users, use createAgentToolRegistry().getLangChainAgentTools() which loads from tools.yaml and returns\n * StructuredTool[]. Use LangChainToolsHub when you need a custom runtime or ctxFactory.\n *\n * Use: new LangChainToolsHub(runtime, ctxFactory).getLangChainTools()\n */\n\nimport { DynamicStructuredTool, type StructuredToolInterface } from \"@langchain/core/tools\";\nimport { stripNullishObjectFields } from \"@easynet/agent-common\";\nimport type { PTCRuntime } from \"../../core/runtime/PTCRuntime.js\";\nimport type { ToolSpec } from \"../../core/types/ToolSpec.js\";\nimport type { ToolResult } from \"../../core/types/ToolResult.js\";\nimport type { ExecContext } from \"../../core/types/ToolIntent.js\";\nimport type { ToolIntent } from \"../../core/types/ToolIntent.js\";\nimport { enrichSpecWithCanonicalSchema } from \"../../tools/util/canonicalCoreSchemas.js\";\nimport { LANGCHAIN_KIND } from \"../../tools/langchain/types.js\";\n\n/**\n * If inputSchema wraps all params in a single \"args\" object (manifest convention),\n * returns that inner args schema; otherwise returns null.\n */\nfunction getArgsSchemaIfWrapped(inputSchema: object): Record<string, unknown> | null {\n const s = inputSchema as Record<string, unknown>;\n if (s?.type !== \"object\" || !s.properties || typeof s.properties !== \"object\") return null;\n const args = (s.properties as Record<string, unknown>).args;\n if (\n args != null &&\n typeof args === \"object\" &&\n (args as Record<string, unknown>).type === \"object\" &&\n (args as Record<string, unknown>).properties != null\n ) {\n return args as Record<string, unknown>;\n }\n return null;\n}\n\n/**\n * True when inputSchema wraps all params in a single \"args\" object (manifest convention).\n */\nfunction hasArgsWrapper(inputSchema: object): boolean {\n return getArgsSchemaIfWrapped(inputSchema) !== null;\n}\n\n/**\n * If inputSchema is { type: \"object\", properties: { args: { type: \"object\", properties: {...} } } },\n * return the inner args schema so the LLM can pass { path: \".\" } instead of { args: { path: \".\" } }.\n */\nfunction schemaForLangChain(inputSchema: object): Record<string, unknown> {\n const wrapped = getArgsSchemaIfWrapped(inputSchema);\n if (wrapped !== null) return wrapped;\n return inputSchema as Record<string, unknown>;\n}\n\nfunction buildIntent(\n toolName: string,\n inputSchema: object,\n args: Record<string, unknown>,\n): ToolIntent {\n return {\n tool: toolName,\n args: hasArgsWrapper(inputSchema) ? { args } : args,\n purpose: LANGCHAIN_KIND,\n };\n}\n\nfunction normalizeArgs(args: Record<string, unknown> | undefined): Record<string, unknown> {\n return stripNullishObjectFields(args ?? {}) as Record<string, unknown>;\n}\n\nfunction serializeToolResult(result: ToolResult): string {\n if (result.ok) {\n return typeof result.result === \"string\"\n ? result.result\n : JSON.stringify(result.result);\n }\n\n const err = result.error;\n const message = err?.message ?? \"Tool failed\";\n const details = err?.details;\n return JSON.stringify(\n details != null ? { error: message, details } : { error: message },\n );\n}\n\nexport type ExecContextFactory = () => ExecContext;\n\nconst DEFAULT_CTX_FACTORY: ExecContextFactory = () => ({\n requestId: `lc-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,\n taskId: `task-${Date.now()}`,\n permissions: [\n \"read:web\",\n \"read:fs\",\n \"write:fs\",\n \"read:db\",\n \"write:db\",\n \"network\",\n \"workflow\",\n \"danger:destructive\",\n ],\n});\n\n/**\n * Hub that wraps PTCRuntime and exposes every registered tool as a LangChain\n * StructuredTool (DynamicStructuredTool), so local agents (LangChain AgentExecutor,\n * createReactAgent, etc.) can use the same tools as MCP and OpenAPI.\n */\nexport class LangChainToolsHub {\n constructor(\n private readonly runtime: PTCRuntime,\n private readonly ctxFactory: ExecContextFactory = DEFAULT_CTX_FACTORY,\n ) {}\n\n /**\n * Returns all registered tools as LangChain StructuredTool[].\n * Each tool invokes the runtime through the full pipeline (policy, HITL, etc.).\n */\n getLangChainTools(): StructuredToolInterface[] {\n const registry = this.runtime.getRegistry();\n const specs = registry.snapshot();\n\n return specs.map((spec) => this.specToLangChainTool(spec));\n }\n\n /**\n * Returns LangChain tools for a subset of tools (by name or query).\n */\n getLangChainToolsForNames(toolNames: string[]): StructuredToolInterface[] {\n const registry = this.runtime.getRegistry();\n const set = new Set(toolNames);\n const specs = registry.snapshot().filter((s) => set.has(s.name));\n return specs.map((spec) => this.specToLangChainTool(spec));\n }\n\n private specToLangChainTool(spec: ToolSpec): DynamicStructuredTool {\n const runtime = this.runtime;\n const ctxFactory = this.ctxFactory;\n const enriched = enrichSpecWithCanonicalSchema(spec);\n\n const schema = schemaForLangChain(enriched.inputSchema);\n return new DynamicStructuredTool({\n name: spec.name,\n description: spec.description ?? `Tool: ${spec.name}`,\n schema,\n func: async (args: Record<string, unknown>): Promise<string> => {\n const normalizedArgs = normalizeArgs(args);\n const intent = buildIntent(spec.name, enriched.inputSchema, normalizedArgs);\n const ctx = ctxFactory();\n const result = await runtime.invoke(intent, ctx);\n return serializeToolResult(result);\n },\n });\n }\n}\n","/**\n * Create LangChain tools from config (sync or async). Uses PTCRuntime + registry\n * and exposes tools via LangChainToolsHub. All invokes go through PTC Intent.\n */\n\nimport { loadToolConfig, resolveSandboxedPath } from \"../tools/util/toolConfig.js\";\nimport type { ToolYamlShape } from \"../tools/util/toolConfig.js\";\nimport {\n expandToolDescriptorsToRegistryNames,\n isBarePackageDescriptor,\n npmDescriptorToPackagePrefixWithVersion,\n fileDescriptorToPackagePrefix,\n} from \"../tools/util/toolDescriptor.js\";\nimport { deepMerge } from \"@easynet/agent-common\";\nimport { createRuntimeFromConfigSync, createRuntimeFromConfig } from \"./runtimeFromConfig.js\";\nimport type { CreateRuntimeOptions } from \"./runtimeFromConfig.js\";\nimport { LangChainToolsHub } from \"./adapters/LangChainToolsHub.js\";\nimport { createMCPServer, type MCPServerOptions, type McpServer } from \"./expose/mcpServer.js\";\nimport {\n createOpenAPIHttpServer,\n type OpenAPIExpressApp,\n type OpenAPIHttpServerOptions,\n} from \"./expose/openapiHttp.js\";\nimport type { StructuredToolInterface } from \"@langchain/core/tools\";\nimport { fileURLToPath } from \"node:url\";\nimport { dirname, resolve } from \"node:path\";\nimport { existsSync } from \"node:fs\";\n\nexport interface CreateAgentToolsOptions extends CreateRuntimeOptions {\n /** Path to override tool.yaml; values override embedded config/tool.yaml */\n configFilePath?: string;\n /** Project path for async loading (use createLangChainToolsAsync) */\n projectPath?: string;\n}\n\nexport interface AgentToolRegistry {\n getLangChainAgentTools(id?: string): StructuredToolInterface[];\n getMcpServer(options?: MCPServerOptions): Promise<McpServer>;\n getOpenAPIServer(options?: OpenAPIHttpServerOptions): Promise<OpenAPIExpressApp>;\n}\n\n/** Merge host lists from multiple sources (e.g. tool.yaml + programmatic). Union, dedup, preserves order. */\nfunction mergeHostLists(a?: string[], b?: string[]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const list of [a ?? [], b ?? []]) {\n for (const h of list) {\n if (!seen.has(h)) {\n seen.add(h);\n out.push(h);\n }\n }\n }\n return out;\n}\n\nfunction resolveEmbeddedToolConfigPath(): string {\n const moduleDir = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n resolve(moduleDir, \"../../config/tool.yaml\"), // src/api -> config\n resolve(moduleDir, \"../config/tool.yaml\"), // dist/* -> config\n resolve(process.cwd(), \"config/tool.yaml\"), // fallback for local app runtime\n ];\n for (const candidate of candidates) {\n if (existsSync(candidate)) return candidate;\n }\n return candidates[0]!;\n}\n\nconst EMBEDDED_TOOL_CONFIG_PATH = resolveEmbeddedToolConfigPath();\n\nfunction loadMergedToolConfig(overridePath?: string): ToolYamlShape {\n const baseConfig = loadToolConfig(EMBEDDED_TOOL_CONFIG_PATH);\n if (!overridePath) return baseConfig;\n const overrideConfig = loadToolConfig(overridePath);\n return deepMerge({} as ToolYamlShape, baseConfig, overrideConfig);\n}\n\nfunction runtimeOptionsFromConfig(\n opts: CreateAgentToolsOptions,\n toolConfig: ToolYamlShape,\n configPathForResolve: string,\n): CreateRuntimeOptions {\n const coreTools = opts.coreTools ?? { sandboxRoot: process.cwd(), allowedHosts: [], enableSandboxValidation: false };\n {\n const updates: {\n sandboxRoot?: string;\n enableSandboxValidation?: boolean;\n allowedHosts?: string[];\n blockedHosts?: string[];\n blockedCidrs?: string[];\n toolOverrides?: Record<string, Record<string, unknown>>;\n packageDefaults?: Record<string, Record<string, unknown>>;\n } = {};\n if (toolConfig.sandboxedPath && typeof toolConfig.sandboxedPath === \"string\") {\n updates.sandboxRoot = resolveSandboxedPath(configPathForResolve, toolConfig.sandboxedPath);\n }\n if (typeof toolConfig.enableSandboxValidation === \"boolean\") {\n updates.enableSandboxValidation = toolConfig.enableSandboxValidation;\n } else if (coreTools.enableSandboxValidation == null) {\n updates.enableSandboxValidation = false;\n }\n // Smart merge: union of allowedHosts and blockedHosts from yaml + programmatic (both lists always applied)\n updates.allowedHosts = mergeHostLists(coreTools.allowedHosts, toolConfig.allowedHosts);\n updates.blockedHosts = mergeHostLists(coreTools.blockedHosts, toolConfig.blockedHosts);\n if (Array.isArray(toolConfig.blockedCidrs) && toolConfig.blockedCidrs.length > 0) {\n updates.blockedCidrs = toolConfig.blockedCidrs;\n } else if (coreTools.blockedCidrs?.length) {\n updates.blockedCidrs = coreTools.blockedCidrs;\n }\n let hasToolDefaults = false;\n const flatOverrides: Record<string, Record<string, unknown>> = { ...coreTools.toolOverrides };\n if (toolConfig.toolDefaults != null && Object.keys(toolConfig.toolDefaults).length > 0) {\n Object.assign(flatOverrides, toolConfig.toolDefaults);\n hasToolDefaults = true;\n }\n const packageDefaults: Record<string, Record<string, unknown>> = { ...coreTools.packageDefaults };\n if (toolConfig.packageToolDefaults != null && Object.keys(toolConfig.packageToolDefaults).length > 0) {\n for (const [descriptor, pkgConfig] of Object.entries(toolConfig.packageToolDefaults)) {\n const prefix = descriptor.startsWith(\"file:\")\n ? fileDescriptorToPackagePrefix(descriptor)\n : npmDescriptorToPackagePrefixWithVersion(descriptor);\n if (!prefix) continue;\n const pkgDefaults =\n pkgConfig?.defaults != null && typeof pkgConfig.defaults === \"object\" && !Array.isArray(pkgConfig.defaults)\n ? (pkgConfig.defaults as Record<string, unknown>)\n : {};\n if (Object.keys(pkgDefaults).length > 0) {\n packageDefaults[prefix] = pkgDefaults;\n }\n const toolConfigs = pkgConfig?.tools != null && typeof pkgConfig.tools === \"object\" && !Array.isArray(pkgConfig.tools) ? pkgConfig.tools : {};\n for (const [toolName, config] of Object.entries(toolConfigs)) {\n if (config != null && typeof config === \"object\") {\n hasToolDefaults = true;\n flatOverrides[`${prefix}::${toolName}`] = { ...pkgDefaults, ...(config as Record<string, unknown>) };\n }\n }\n }\n if (Object.keys(packageDefaults).length > 0) {\n updates.packageDefaults = packageDefaults;\n }\n }\n if (hasToolDefaults) {\n updates.toolOverrides = flatOverrides;\n }\n if (Object.keys(updates).length > 0) return { ...opts, coreTools: { ...coreTools, ...updates } };\n }\n return { ...opts, coreTools };\n}\n\nexport function createAgentToolRegistry(\n options?: CreateAgentToolsOptions | string\n): AgentToolRegistry {\n const opts: CreateAgentToolsOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const configPathForResolve = opts.configFilePath ?? EMBEDDED_TOOL_CONFIG_PATH;\n const mergedToolConfig = loadMergedToolConfig(opts.configFilePath);\n const runtimeOpts = runtimeOptionsFromConfig(opts, mergedToolConfig, configPathForResolve);\n const { runtime } = createRuntimeFromConfigSync(runtimeOpts);\n const hub = new LangChainToolsHub(runtime);\n let cachedTools: StructuredToolInterface[] | undefined;\n\n const getAllOrFilteredTools = (): StructuredToolInterface[] => {\n if (cachedTools) return cachedTools;\n const names = Array.isArray(mergedToolConfig.tools) ? mergedToolConfig.tools : [];\n if (names.length > 0) {\n const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);\n const allBarePackages = names.every((n) => isBarePackageDescriptor(String(n)));\n cachedTools = allBarePackages\n ? hub.getLangChainTools()\n : hub.getLangChainToolsForNames(expandToolDescriptorsToRegistryNames(names, registryNames));\n return cachedTools;\n }\n cachedTools = hub.getLangChainTools();\n return cachedTools;\n };\n\n const pickToolsById = (id?: string): StructuredToolInterface[] => {\n const tools = getAllOrFilteredTools();\n if (!id) return tools;\n const picked = tools.filter((tool) => tool.name === id);\n if (picked.length === 0) throw new Error(`agent-tool cannot find tool id: ${id}`);\n return picked;\n };\n\n return {\n getLangChainAgentTools(id?: string): StructuredToolInterface[] {\n return pickToolsById(id);\n },\n async getMcpServer(options?: MCPServerOptions): Promise<McpServer> {\n const yamlDefaults: MCPServerOptions = {\n name: mergedToolConfig.mcp?.name,\n version: mergedToolConfig.mcp?.version,\n };\n const { server } = await createMCPServer(runtime, { ...yamlDefaults, ...(options ?? {}) });\n return server;\n },\n async getOpenAPIServer(options?: OpenAPIHttpServerOptions): Promise<OpenAPIExpressApp> {\n const yamlDefaults: OpenAPIHttpServerOptions = {\n host: mergedToolConfig.openapi?.host,\n port: mergedToolConfig.openapi?.port,\n basePath: mergedToolConfig.openapi?.basePath,\n };\n return createOpenAPIHttpServer(runtime, { ...yamlDefaults, ...(options ?? {}) });\n },\n };\n}\n\n/**\n * Create LangChain tools asynchronously. Use when projectPath is set to load\n * tools from the project before building the tool list.\n */\nexport async function createLangChainToolsAsync(\n options: CreateAgentToolsOptions = {}\n): Promise<StructuredToolInterface[]> {\n const configPathForResolve = options.configFilePath ?? EMBEDDED_TOOL_CONFIG_PATH;\n const mergedToolConfig = loadMergedToolConfig(options.configFilePath);\n const runtimeOpts = runtimeOptionsFromConfig(options, mergedToolConfig, configPathForResolve);\n const { runtime } = await createRuntimeFromConfig(runtimeOpts);\n const hub = new LangChainToolsHub(runtime);\n\n const names = Array.isArray(mergedToolConfig.tools) ? mergedToolConfig.tools : [];\n if (names.length > 0) {\n const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);\n const allBarePackages = names.every((n) => isBarePackageDescriptor(String(n)));\n if (allBarePackages) {\n return hub.getLangChainTools();\n }\n const expanded = expandToolDescriptorsToRegistryNames(names, registryNames);\n return hub.getLangChainToolsForNames(expanded);\n }\n\n return hub.getLangChainTools();\n}\n","/**\n * Public API: three create functions (config-driven) + runtime.\n *\n * 1. createLangChainTools(config?) → LangChain tools (createReactAgent / AgentExecutor)\n * 2. createMCPServer(runtime | config, options?) → MCP server (stdio, Cursor / Claude)\n * 3. createOpenAPIServer(runtime | config, options?) → HTTP + OpenAPI/Swagger (GET /tools, POST /invoke)\n *\n * All tool invokes go through PTC Intent (runtime.invoke(intent, ctx)) for policy, budget, observability.\n * Use createRuntimeFromConfig(config) when you need the runtime for multiple servers.\n */\n\nexport {\n createAgentToolRegistry,\n createLangChainToolsAsync,\n} from \"./createAgentTools.js\";\nexport type { AgentToolRegistry, CreateAgentToolsOptions } from \"./createAgentTools.js\";\n\nexport { createHttpService } from \"./expose/openapiHttp.js\";\nexport type {\n CreateHttpServiceOptions,\n HttpServiceResult,\n OpenAPIExpressApp,\n OpenAPIHttpServerOptions,\n} from \"./expose/openapiHttp.js\";\n/** Alias: OpenAPI server with Swagger support */\nexport { createHttpService as createOpenAPIServer } from \"./expose/openapiHttp.js\";\n\nexport {\n createMCPServer,\n runMCPServerOverStdio,\n createMCPStreamableHttpHandler,\n createMCPServerStreamableHttp,\n} from \"./expose/mcpServer.js\";\nexport type {\n MCPServerOptions,\n MCPServerResult,\n McpServer,\n MCPStreamableHttpHandler,\n MCPServerStreamableHttpResult,\n CreateMCPServerStreamableHttpOptions,\n} from \"./expose/mcpServer.js\";\n\nexport { createRuntimeFromConfig, createRuntimeFromConfigSync } from \"./runtimeFromConfig.js\";\nexport type { CreateRuntimeOptions, CreateRuntimeResult } from \"./runtimeFromConfig.js\";\n\nexport { PTCRuntime } from \"../core/runtime/PTCRuntime.js\";\nexport type { PTCRuntimeConfig } from \"../core/runtime/PTCRuntime.js\";\n\nimport {\n createAgentToolRegistry,\n createLangChainToolsAsync,\n} from \"./createAgentTools.js\";\nimport { createHttpService } from \"./expose/openapiHttp.js\";\nimport {\n createMCPServer,\n runMCPServerOverStdio,\n createMCPStreamableHttpHandler,\n createMCPServerStreamableHttp,\n} from \"./expose/mcpServer.js\";\nimport { createRuntimeFromConfig, createRuntimeFromConfigSync } from \"./runtimeFromConfig.js\";\n\n/**\n * Facade: grouped API for lower import complexity in callers.\n */\nexport const langchainApi = {\n createAgentToolRegistry,\n createLangChainToolsAsync,\n} as const;\n\n/**\n * Facade: grouped runtime creation helpers.\n */\nexport const runtimeApi = {\n createRuntimeFromConfig,\n createRuntimeFromConfigSync,\n} as const;\n\n/**\n * Facade: grouped MCP server helpers.\n */\nexport const mcpApi = {\n createMCPServer,\n runMCPServerOverStdio,\n createMCPStreamableHttpHandler,\n createMCPServerStreamableHttp,\n} as const;\n\n/**\n * Facade: grouped OpenAPI/HTTP helpers.\n */\nexport const openApi = {\n createOpenAPIServer: createHttpService,\n createHttpService,\n} as const;\n"]}