@easynet/agent-tool 1.0.73 → 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 +9 -4
  2. package/dist/api/adapters/LangChainToolsHub.d.ts +1 -1
  3. package/dist/api/createAgentTools.d.ts +9 -7
  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 -18
  12. package/dist/api/main.d.ts +6 -6
  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-EHXA64OA.js → chunk-MBCFJBZY.js} +300 -270
  18. package/dist/chunk-MBCFJBZY.js.map +1 -0
  19. package/dist/{chunk-QVXWW657.cjs → chunk-PYTHEY6A.cjs} +303 -271
  20. package/dist/chunk-PYTHEY6A.cjs.map +1 -0
  21. package/dist/{chunk-ZZHS55OM.cjs → chunk-SR53PQTG.cjs} +100 -51
  22. package/dist/chunk-SR53PQTG.cjs.map +1 -0
  23. package/dist/{chunk-4YLATI7J.js → chunk-XS26ZNYC.js} +87 -39
  24. package/dist/chunk-XS26ZNYC.js.map +1 -0
  25. package/dist/index.cjs +17 -17
  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-4YLATI7J.js.map +0 -1
  37. package/dist/chunk-EHXA64OA.js.map +0 -1
  38. package/dist/chunk-QVXWW657.cjs.map +0 -1
  39. package/dist/chunk-ZZHS55OM.cjs.map +0 -1
@@ -1,11 +1,15 @@
1
1
  'use strict';
2
2
 
3
- var chunkQVXWW657_cjs = require('./chunk-QVXWW657.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 = chunkQVXWW657_cjs.loadToolConfig(opts.configFilePath);
144
+ {
122
145
  const updates = {};
123
146
  if (toolConfig.sandboxedPath && typeof toolConfig.sandboxedPath === "string") {
124
- updates.sandboxRoot = chunkQVXWW657_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:") ? chunkQVXWW657_cjs.fileDescriptorToPackagePrefix(descriptor) : chunkQVXWW657_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,77 +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) {
195
+ function createAgentToolRegistry(options) {
175
196
  const opts = typeof options === "string" ? { configFilePath: options } : options ?? {};
176
- const runtimeOpts = runtimeOptionsFromConfig(opts);
177
- const { runtime } = chunkQVXWW657_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);
178
201
  const hub = new LangChainToolsHub(runtime);
179
- if (opts.configFilePath) {
180
- const toolConfig = chunkQVXWW657_cjs.loadToolConfig(opts.configFilePath);
181
- 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 : [];
182
206
  if (names.length > 0) {
183
207
  const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);
184
- const allBarePackages = names.every((n) => chunkQVXWW657_cjs.isBarePackageDescriptor(String(n)));
185
- if (allBarePackages) {
186
- return hub.getLangChainTools();
187
- }
188
- const expanded = chunkQVXWW657_cjs.expandToolDescriptorsToRegistryNames(names, registryNames);
189
- return hub.getLangChainToolsForNames(expanded);
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;
190
211
  }
191
- }
192
- return 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
+ };
222
+ return {
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 ?? {} });
241
+ }
242
+ };
193
243
  }
194
244
  async function createLangChainToolsAsync(options = {}) {
195
- const runtimeOpts = runtimeOptionsFromConfig(options);
196
- const { runtime } = await chunkQVXWW657_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);
197
249
  const hub = new LangChainToolsHub(runtime);
198
- if (options.configFilePath) {
199
- const toolConfig = chunkQVXWW657_cjs.loadToolConfig(options.configFilePath);
200
- const names = Array.isArray(toolConfig.tools) ? toolConfig.tools : [];
201
- if (names.length > 0) {
202
- const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);
203
- const allBarePackages = names.every((n) => chunkQVXWW657_cjs.isBarePackageDescriptor(String(n)));
204
- if (allBarePackages) {
205
- return hub.getLangChainTools();
206
- }
207
- const expanded = chunkQVXWW657_cjs.expandToolDescriptorsToRegistryNames(names, registryNames);
208
- 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();
209
256
  }
257
+ const expanded = chunkPYTHEY6A_cjs.expandToolDescriptorsToRegistryNames(names, registryNames);
258
+ return hub.getLangChainToolsForNames(expanded);
210
259
  }
211
260
  return hub.getLangChainTools();
212
261
  }
213
262
 
214
263
  // src/api/main.ts
215
264
  var langchainApi = {
216
- createAgentTools,
265
+ createAgentToolRegistry,
217
266
  createLangChainToolsAsync
218
267
  };
219
268
  var runtimeApi = {
220
- createRuntimeFromConfig: chunkQVXWW657_cjs.createRuntimeFromConfig,
221
- createRuntimeFromConfigSync: chunkQVXWW657_cjs.createRuntimeFromConfigSync
269
+ createRuntimeFromConfig: chunkPYTHEY6A_cjs.createRuntimeFromConfig,
270
+ createRuntimeFromConfigSync: chunkPYTHEY6A_cjs.createRuntimeFromConfigSync
222
271
  };
223
272
  var mcpApi = {
224
- createMCPServer: chunkQVXWW657_cjs.createMCPServer,
225
- runMCPServerOverStdio: chunkQVXWW657_cjs.runMCPServerOverStdio,
226
- createMCPStreamableHttpHandler: chunkQVXWW657_cjs.createMCPStreamableHttpHandler,
227
- createMCPServerStreamableHttp: chunkQVXWW657_cjs.createMCPServerStreamableHttp
273
+ createMCPServer: chunkPYTHEY6A_cjs.createMCPServer,
274
+ runMCPServerOverStdio: chunkPYTHEY6A_cjs.runMCPServerOverStdio,
275
+ createMCPStreamableHttpHandler: chunkPYTHEY6A_cjs.createMCPStreamableHttpHandler,
276
+ createMCPServerStreamableHttp: chunkPYTHEY6A_cjs.createMCPServerStreamableHttp
228
277
  };
229
278
  var openApi = {
230
- createOpenAPIServer: chunkQVXWW657_cjs.createHttpService,
231
- createHttpService: chunkQVXWW657_cjs.createHttpService
279
+ createOpenAPIServer: chunkPYTHEY6A_cjs.createHttpService,
280
+ createHttpService: chunkPYTHEY6A_cjs.createHttpService
232
281
  };
233
282
 
234
- exports.createAgentTools = createAgentTools;
283
+ exports.createAgentToolRegistry = createAgentToolRegistry;
235
284
  exports.createLangChainToolsAsync = createLangChainToolsAsync;
236
285
  exports.langchainApi = langchainApi;
237
286
  exports.mcpApi = mcpApi;
238
287
  exports.openApi = openApi;
239
288
  exports.runtimeApi = runtimeApi;
240
- //# sourceMappingURL=chunk-ZZHS55OM.cjs.map
241
- //# sourceMappingURL=chunk-ZZHS55OM.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":";;;;;;;;;;;;AAwBA,SAAS,uBAAuB,WAAA,EAAqD;AACnF,EAAA,MAAM,CAAA,GAAI,WAAA;AACV,EAAA,IAAI,CAAA,EAAG,IAAA,KAAS,QAAA,IAAY,CAAC,CAAA,CAAE,cAAc,OAAO,CAAA,CAAE,UAAA,KAAe,QAAA,EAAU,OAAO,IAAA;AACtF,EAAA,MAAM,IAAA,GAAQ,EAAE,UAAA,CAAuC,IAAA;AACvD,EAAA,IACE,IAAA,IAAQ,IAAA,IACR,OAAO,IAAA,KAAS,QAAA,IACf,KAAiC,IAAA,KAAS,QAAA,IAC1C,IAAA,CAAiC,UAAA,IAAc,IAAA,EAChD;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AAKA,SAAS,eAAe,WAAA,EAA8B;AACpD,EAAA,OAAO,sBAAA,CAAuB,WAAW,CAAA,KAAM,IAAA;AACjD;AAMA,SAAS,mBAAmB,WAAA,EAA8C;AACxE,EAAA,MAAM,OAAA,GAAU,uBAAuB,WAAW,CAAA;AAClD,EAAA,IAAI,OAAA,KAAY,MAAM,OAAO,OAAA;AAC7B,EAAA,OAAO,WAAA;AACT;AAEA,SAAS,WAAA,CACP,QAAA,EACA,WAAA,EACA,IAAA,EACY;AACZ,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,MAAM,cAAA,CAAe,WAAW,CAAA,GAAI,EAAE,MAAK,GAAI,IAAA;AAAA,IAC/C,OAAA,EAASA;AAAA,GACX;AACF;AAEA,SAAS,cAAc,IAAA,EAAoE;AACzF,EAAA,OAAOC,oCAAA,CAAyB,IAAA,IAAQ,EAAE,CAAA;AAC5C;AAEA,SAAS,oBAAoB,MAAA,EAA4B;AACvD,EAAA,IAAI,OAAO,EAAA,EAAI;AACb,IAAA,OAAO,OAAO,OAAO,MAAA,KAAW,QAAA,GAC5B,OAAO,MAAA,GACP,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,MAAM,CAAA;AAAA,EAClC;AAEA,EAAA,MAAM,MAAM,MAAA,CAAO,KAAA;AACnB,EAAA,MAAM,OAAA,GAAU,KAAK,OAAA,IAAW,aAAA;AAChC,EAAA,MAAM,UAAU,GAAA,EAAK,OAAA;AACrB,EAAA,OAAO,IAAA,CAAK,SAAA;AAAA,IACV,OAAA,IAAW,OAAO,EAAE,KAAA,EAAO,SAAS,OAAA,EAAQ,GAAI,EAAE,KAAA,EAAO,OAAA;AAAQ,GACnE;AACF;AAIA,IAAM,sBAA0C,OAAO;AAAA,EACrD,SAAA,EAAW,CAAA,GAAA,EAAM,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAAA,EACrE,MAAA,EAAQ,CAAA,KAAA,EAAQ,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AAAA,EAC1B,WAAA,EAAa;AAAA,IACX,UAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA;AAEJ,CAAA,CAAA;AAOO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,WAAA,CACmB,OAAA,EACA,UAAA,GAAiC,mBAAA,EAClD;AAFiB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMH,iBAAA,GAA+C;AAC7C,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAY;AAC1C,IAAA,MAAM,KAAA,GAAQ,SAAS,QAAA,EAAS;AAEhC,IAAA,OAAO,MAAM,GAAA,CAAI,CAAC,SAAS,IAAA,CAAK,mBAAA,CAAoB,IAAI,CAAC,CAAA;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA,EAKA,0BAA0B,SAAA,EAAgD;AACxE,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAY;AAC1C,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,SAAS,CAAA;AAC7B,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,QAAA,EAAS,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,GAAA,CAAI,GAAA,CAAI,CAAA,CAAE,IAAI,CAAC,CAAA;AAC/D,IAAA,OAAO,MAAM,GAAA,CAAI,CAAC,SAAS,IAAA,CAAK,mBAAA,CAAoB,IAAI,CAAC,CAAA;AAAA,EAC3D;AAAA,EAEQ,oBAAoB,IAAA,EAAuC;AACjE,IAAA,MAAM,UAAU,IAAA,CAAK,OAAA;AACrB,IAAA,MAAM,aAAa,IAAA,CAAK,UAAA;AACxB,IAAA,MAAM,QAAA,GAAWC,gDAA8B,IAAI,CAAA;AAEnD,IAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,QAAA,CAAS,WAAW,CAAA;AACtD,IAAA,OAAO,IAAIC,2BAAA,CAAsB;AAAA,MAC/B,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,WAAA,EAAa,IAAA,CAAK,WAAA,IAAe,CAAA,MAAA,EAAS,KAAK,IAAI,CAAA,CAAA;AAAA,MACnD,MAAA;AAAA,MACA,IAAA,EAAM,OAAO,IAAA,KAAmD;AAC9D,QAAA,MAAM,cAAA,GAAiB,cAAc,IAAI,CAAA;AACzC,QAAA,MAAM,SAAS,WAAA,CAAY,IAAA,CAAK,IAAA,EAAM,QAAA,CAAS,aAAa,cAAc,CAAA;AAC1E,QAAA,MAAM,MAAM,UAAA,EAAW;AACvB,QAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,MAAA,CAAO,QAAQ,GAAG,CAAA;AAC/C,QAAA,OAAO,oBAAoB,MAAM,CAAA;AAAA,MACnC;AAAA,KACD,CAAA;AAAA,EACH;AACF,CAAA;ACjHA,SAAS,cAAA,CAAe,GAAc,CAAA,EAAwB;AAC5D,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,KAAA,MAAW,IAAA,IAAQ,CAAC,CAAA,IAAK,IAAI,CAAA,IAAK,EAAE,CAAA,EAAG;AACrC,IAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,MAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,EAAG;AAChB,QAAA,IAAA,CAAK,IAAI,CAAC,CAAA;AACV,QAAA,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,6BAAA,GAAwC;AAC/C,EAAA,MAAM,SAAA,GAAYC,YAAA,CAAQC,iBAAA,CAAc,oQAAe,CAAC,CAAA;AACxD,EAAA,MAAM,UAAA,GAAa;AAAA,IACjBC,YAAA,CAAQ,WAAW,wBAAwB,CAAA;AAAA;AAAA,IAC3CA,YAAA,CAAQ,WAAW,qBAAqB,CAAA;AAAA;AAAA,IACxCA,YAAA,CAAQ,OAAA,CAAQ,GAAA,EAAI,EAAG,kBAAkB;AAAA;AAAA,GAC3C;AACA,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,IAAA,IAAIC,aAAA,CAAW,SAAS,CAAA,EAAG,OAAO,SAAA;AAAA,EACpC;AACA,EAAA,OAAO,WAAW,CAAC,CAAA;AACrB;AAEA,IAAM,4BAA4B,6BAAA,EAA8B;AAEhE,SAAS,qBAAqB,YAAA,EAAsC;AAClE,EAAA,MAAM,UAAA,GAAaC,iCAAe,yBAAyB,CAAA;AAC3D,EAAA,IAAI,CAAC,cAAc,OAAO,UAAA;AAC1B,EAAA,MAAM,cAAA,GAAiBA,iCAAe,YAAY,CAAA;AAClD,EAAA,OAAOC,qBAAA,CAAU,EAAC,EAAoB,UAAA,EAAY,cAAc,CAAA;AAClE;AAEA,SAAS,wBAAA,CACP,IAAA,EACA,UAAA,EACA,oBAAA,EACsB;AACtB,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,IAAa,EAAE,WAAA,EAAa,OAAA,CAAQ,GAAA,EAAI,EAAG,YAAA,EAAc,EAAC,EAAG,uBAAA,EAAyB,KAAA,EAAM;AACnH,EAAA;AACE,IAAA,MAAM,UAQF,EAAC;AACL,IAAA,IAAI,UAAA,CAAW,aAAA,IAAiB,OAAO,UAAA,CAAW,kBAAkB,QAAA,EAAU;AAC5E,MAAA,OAAA,CAAQ,WAAA,GAAcC,sCAAA,CAAqB,oBAAA,EAAsB,UAAA,CAAW,aAAa,CAAA;AAAA,IAC3F;AACA,IAAA,IAAI,OAAO,UAAA,CAAW,uBAAA,KAA4B,SAAA,EAAW;AAC3D,MAAA,OAAA,CAAQ,0BAA0B,UAAA,CAAW,uBAAA;AAAA,IAC/C,CAAA,MAAA,IAAW,SAAA,CAAU,uBAAA,IAA2B,IAAA,EAAM;AACpD,MAAA,OAAA,CAAQ,uBAAA,GAA0B,KAAA;AAAA,IACpC;AAEA,IAAA,OAAA,CAAQ,YAAA,GAAe,cAAA,CAAe,SAAA,CAAU,YAAA,EAAc,WAAW,YAAY,CAAA;AACrF,IAAA,OAAA,CAAQ,YAAA,GAAe,cAAA,CAAe,SAAA,CAAU,YAAA,EAAc,WAAW,YAAY,CAAA;AACrF,IAAA,IAAI,KAAA,CAAM,QAAQ,UAAA,CAAW,YAAY,KAAK,UAAA,CAAW,YAAA,CAAa,SAAS,CAAA,EAAG;AAChF,MAAA,OAAA,CAAQ,eAAe,UAAA,CAAW,YAAA;AAAA,IACpC,CAAA,MAAA,IAAW,SAAA,CAAU,YAAA,EAAc,MAAA,EAAQ;AACzC,MAAA,OAAA,CAAQ,eAAe,SAAA,CAAU,YAAA;AAAA,IACnC;AACA,IAAA,IAAI,eAAA,GAAkB,KAAA;AACtB,IAAA,MAAM,aAAA,GAAyD,EAAE,GAAG,SAAA,CAAU,aAAA,EAAc;AAC5F,IAAA,IAAI,UAAA,CAAW,gBAAgB,IAAA,IAAQ,MAAA,CAAO,KAAK,UAAA,CAAW,YAAY,CAAA,CAAE,MAAA,GAAS,CAAA,EAAG;AACtF,MAAA,MAAA,CAAO,MAAA,CAAO,aAAA,EAAe,UAAA,CAAW,YAAY,CAAA;AACpD,MAAA,eAAA,GAAkB,IAAA;AAAA,IACpB;AACA,IAAA,MAAM,eAAA,GAA2D,EAAE,GAAG,SAAA,CAAU,eAAA,EAAgB;AAChG,IAAA,IAAI,UAAA,CAAW,uBAAuB,IAAA,IAAQ,MAAA,CAAO,KAAK,UAAA,CAAW,mBAAmB,CAAA,CAAE,MAAA,GAAS,CAAA,EAAG;AACpG,MAAA,KAAA,MAAW,CAAC,YAAY,SAAS,CAAA,IAAK,OAAO,OAAA,CAAQ,UAAA,CAAW,mBAAmB,CAAA,EAAG;AACpF,QAAA,MAAM,MAAA,GAAS,WAAW,UAAA,CAAW,OAAO,IACxCC,+CAAA,CAA8B,UAAU,CAAA,GACxCC,yDAAA,CAAwC,UAAU,CAAA;AACtD,QAAA,IAAI,CAAC,MAAA,EAAQ;AACb,QAAA,MAAM,cACJ,SAAA,EAAW,QAAA,IAAY,IAAA,IAAQ,OAAO,UAAU,QAAA,KAAa,QAAA,IAAY,CAAC,KAAA,CAAM,QAAQ,SAAA,CAAU,QAAQ,CAAA,GACrG,SAAA,CAAU,WACX,EAAC;AACP,QAAA,IAAI,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA,CAAE,SAAS,CAAA,EAAG;AACvC,UAAA,eAAA,CAAgB,MAAM,CAAA,GAAI,WAAA;AAAA,QAC5B;AACA,QAAA,MAAM,cAAc,SAAA,EAAW,KAAA,IAAS,IAAA,IAAQ,OAAO,UAAU,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,QAAQ,SAAA,CAAU,KAAK,CAAA,GAAI,SAAA,CAAU,QAAQ,EAAC;AAC5I,QAAA,KAAA,MAAW,CAAC,QAAA,EAAU,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC5D,UAAA,IAAI,MAAA,IAAU,IAAA,IAAQ,OAAO,MAAA,KAAW,QAAA,EAAU;AAChD,YAAA,eAAA,GAAkB,IAAA;AAClB,YAAA,aAAA,CAAc,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAE,IAAI,EAAE,GAAG,WAAA,EAAa,GAAI,MAAA,EAAmC;AAAA,UACrG;AAAA,QACF;AAAA,MACF;AACA,MAAA,IAAI,MAAA,CAAO,IAAA,CAAK,eAAe,CAAA,CAAE,SAAS,CAAA,EAAG;AAC3C,QAAA,OAAA,CAAQ,eAAA,GAAkB,eAAA;AAAA,MAC5B;AAAA,IACF;AACA,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,OAAA,CAAQ,aAAA,GAAgB,aAAA;AAAA,IAC1B;AACA,IAAA,IAAI,OAAO,IAAA,CAAK,OAAO,CAAA,CAAE,MAAA,GAAS,GAAG,OAAO,EAAE,GAAG,IAAA,EAAM,WAAW,EAAE,GAAG,SAAA,EAAW,GAAG,SAAQ,EAAE;AAAA,EACjG;AACA,EAAA,OAAO,EAAE,GAAG,IAAA,EAAM,SAAA,EAAU;AAC9B;AAEO,SAAS,wBACd,OAAA,EACmB;AACnB,EAAA,MAAM,IAAA,GACJ,OAAO,OAAA,KAAY,QAAA,GAAW,EAAE,cAAA,EAAgB,OAAA,EAAQ,GAAI,OAAA,IAAW,EAAC;AAC1E,EAAA,MAAM,oBAAA,GAAuB,KAAK,cAAA,IAAkB,yBAAA;AACpD,EAAA,MAAM,gBAAA,GAAmB,oBAAA,CAAqB,IAAA,CAAK,cAAc,CAAA;AACjE,EAAA,MAAM,WAAA,GAAc,wBAAA,CAAyB,IAAA,EAAM,gBAAA,EAAkB,oBAAoB,CAAA;AACzF,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAIC,6CAAA,CAA4B,WAAW,CAAA;AAC3D,EAAA,MAAM,GAAA,GAAM,IAAI,iBAAA,CAAkB,OAAO,CAAA;AACzC,EAAA,IAAI,WAAA;AAEJ,EAAA,MAAM,wBAAwB,MAAiC;AAC7D,IAAA,IAAI,aAAa,OAAO,WAAA;AACxB,IAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,gBAAA,CAAiB,KAAK,CAAA,GAAI,gBAAA,CAAiB,QAAQ,EAAC;AAChF,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,WAAA,EAAY,CAAE,QAAA,GAAW,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAA;AACxE,MAAA,MAAM,eAAA,GAAkB,MAAM,KAAA,CAAM,CAAC,MAAMC,yCAAA,CAAwB,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA;AAC7E,MAAA,WAAA,GAAc,eAAA,GACV,IAAI,iBAAA,EAAkB,GACtB,IAAI,yBAAA,CAA0BC,sDAAA,CAAqC,KAAA,EAAO,aAAa,CAAC,CAAA;AAC5F,MAAA,OAAO,WAAA;AAAA,IACT;AACA,IAAA,WAAA,GAAc,IAAI,iBAAA,EAAkB;AACpC,IAAA,OAAO,WAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,EAAA,KAA2C;AAChE,IAAA,MAAM,QAAQ,qBAAA,EAAsB;AACpC,IAAA,IAAI,CAAC,IAAI,OAAO,KAAA;AAChB,IAAA,MAAM,SAAS,KAAA,CAAM,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,EAAE,CAAA;AACtD,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,CAAA,gCAAA,EAAmC,EAAE,CAAA,CAAE,CAAA;AAChF,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,uBAAuB,EAAA,EAAwC;AAC7D,MAAA,OAAO,cAAc,EAAE,CAAA;AAAA,IACzB,CAAA;AAAA,IACA,MAAM,aAAaC,QAAAA,EAAgD;AACjE,MAAA,MAAM,YAAA,GAAiC;AAAA,QACrC,IAAA,EAAM,iBAAiB,GAAA,EAAK,IAAA;AAAA,QAC5B,OAAA,EAAS,iBAAiB,GAAA,EAAK;AAAA,OACjC;AACA,MAAA,MAAM,EAAE,MAAA,EAAO,GAAI,MAAMC,iCAAA,CAAgB,OAAA,EAAS,EAAE,GAAG,YAAA,EAAc,GAAID,QAAAA,IAAW,IAAK,CAAA;AACzF,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAAA,IACA,MAAM,iBAAiBA,QAAAA,EAAgE;AACrF,MAAA,MAAM,YAAA,GAAyC;AAAA,QAC7C,IAAA,EAAM,iBAAiB,OAAA,EAAS,IAAA;AAAA,QAChC,IAAA,EAAM,iBAAiB,OAAA,EAAS,IAAA;AAAA,QAChC,QAAA,EAAU,iBAAiB,OAAA,EAAS;AAAA,OACtC;AACA,MAAA,OAAOE,yCAAA,CAAwB,SAAS,EAAE,GAAG,cAAc,GAAIF,QAAAA,IAAW,EAAC,EAAI,CAAA;AAAA,IACjF;AAAA,GACF;AACF;AAMA,eAAsB,yBAAA,CACpB,OAAA,GAAmC,EAAC,EACA;AACpC,EAAA,MAAM,oBAAA,GAAuB,QAAQ,cAAA,IAAkB,yBAAA;AACvD,EAAA,MAAM,gBAAA,GAAmB,oBAAA,CAAqB,OAAA,CAAQ,cAAc,CAAA;AACpE,EAAA,MAAM,WAAA,GAAc,wBAAA,CAAyB,OAAA,EAAS,gBAAA,EAAkB,oBAAoB,CAAA;AAC5F,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,MAAMG,0CAAwB,WAAW,CAAA;AAC7D,EAAA,MAAM,GAAA,GAAM,IAAI,iBAAA,CAAkB,OAAO,CAAA;AAEzC,EAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,gBAAA,CAAiB,KAAK,CAAA,GAAI,gBAAA,CAAiB,QAAQ,EAAC;AAChF,EAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,IAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,WAAA,EAAY,CAAE,QAAA,GAAW,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAA;AACxE,IAAA,MAAM,eAAA,GAAkB,MAAM,KAAA,CAAM,CAAC,MAAML,yCAAA,CAAwB,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA;AAC7E,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,OAAO,IAAI,iBAAA,EAAkB;AAAA,IAC/B;AACA,IAAA,MAAM,QAAA,GAAWC,sDAAA,CAAqC,KAAA,EAAO,aAAa,CAAA;AAC1E,IAAA,OAAO,GAAA,CAAI,0BAA0B,QAAQ,CAAA;AAAA,EAC/C;AAEA,EAAA,OAAO,IAAI,iBAAA,EAAkB;AAC/B;;;ACzKO,IAAM,YAAA,GAAe;AAAA,EAC1B,uBAAA;AAAA,EACA;AACF;AAKO,IAAM,UAAA,GAAa;AAAA,2BACxBI,yCAAA;AAAA,+BACAN;AACF;AAKO,IAAM,MAAA,GAAS;AAAA,mBACpBI,iCAAA;AAAA,yBACAG,uCAAA;AAAA,kCACAC,gDAAA;AAAA,iCACAC;AACF;AAKO,IAAM,OAAA,GAAU;AAAA,EACrB,mBAAA,EAAqBC,mCAAA;AAAA,qBACrBA;AACF","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-EHXA64OA.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,55 +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) {
192
+ function createAgentToolRegistry(options) {
173
193
  const opts = typeof options === "string" ? { configFilePath: options } : options ?? {};
174
- 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);
175
197
  const { runtime } = createRuntimeFromConfigSync(runtimeOpts);
176
198
  const hub = new LangChainToolsHub(runtime);
177
- if (opts.configFilePath) {
178
- const toolConfig = loadToolConfig(opts.configFilePath);
179
- 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 : [];
180
203
  if (names.length > 0) {
181
204
  const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);
182
205
  const allBarePackages = names.every((n) => isBarePackageDescriptor(String(n)));
183
- if (allBarePackages) {
184
- return hub.getLangChainTools();
185
- }
186
- const expanded = expandToolDescriptorsToRegistryNames(names, registryNames);
187
- return hub.getLangChainToolsForNames(expanded);
206
+ cachedTools = allBarePackages ? hub.getLangChainTools() : hub.getLangChainToolsForNames(expandToolDescriptorsToRegistryNames(names, registryNames));
207
+ return cachedTools;
188
208
  }
189
- }
190
- return 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
+ };
219
+ return {
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 ?? {} });
238
+ }
239
+ };
191
240
  }
192
241
  async function createLangChainToolsAsync(options = {}) {
193
- 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);
194
245
  const { runtime } = await createRuntimeFromConfig(runtimeOpts);
195
246
  const hub = new LangChainToolsHub(runtime);
196
- if (options.configFilePath) {
197
- const toolConfig = loadToolConfig(options.configFilePath);
198
- const names = Array.isArray(toolConfig.tools) ? toolConfig.tools : [];
199
- if (names.length > 0) {
200
- const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);
201
- const allBarePackages = names.every((n) => isBarePackageDescriptor(String(n)));
202
- if (allBarePackages) {
203
- return hub.getLangChainTools();
204
- }
205
- const expanded = expandToolDescriptorsToRegistryNames(names, registryNames);
206
- 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();
207
253
  }
254
+ const expanded = expandToolDescriptorsToRegistryNames(names, registryNames);
255
+ return hub.getLangChainToolsForNames(expanded);
208
256
  }
209
257
  return hub.getLangChainTools();
210
258
  }
211
259
 
212
260
  // src/api/main.ts
213
261
  var langchainApi = {
214
- createAgentTools,
262
+ createAgentToolRegistry,
215
263
  createLangChainToolsAsync
216
264
  };
217
265
  var runtimeApi = {
@@ -229,6 +277,6 @@ var openApi = {
229
277
  createHttpService
230
278
  };
231
279
 
232
- export { createAgentTools, createLangChainToolsAsync, langchainApi, mcpApi, openApi, runtimeApi };
233
- //# sourceMappingURL=chunk-4YLATI7J.js.map
234
- //# sourceMappingURL=chunk-4YLATI7J.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"]}