@easynet/agent-tool 1.0.17 → 1.0.18

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 (37) hide show
  1. package/README.md +11 -4
  2. package/dist/api/createAgentTools.d.ts.map +1 -1
  3. package/dist/api/main.cjs +14 -14
  4. package/dist/api/main.js +3 -3
  5. package/dist/api/runtimeFromConfig.d.ts +5 -0
  6. package/dist/api/runtimeFromConfig.d.ts.map +1 -1
  7. package/dist/{chunk-LIERSUS5.js → chunk-7MRBWT2T.js} +3 -3
  8. package/dist/{chunk-LIERSUS5.js.map → chunk-7MRBWT2T.js.map} +1 -1
  9. package/dist/{chunk-M2VNTQHS.js → chunk-7WI5VK5G.js} +28 -5
  10. package/dist/{chunk-M2VNTQHS.js.map → chunk-7WI5VK5G.js.map} +1 -1
  11. package/dist/{chunk-CDTLERB6.cjs → chunk-EMI67SPN.cjs} +11 -5
  12. package/dist/chunk-EMI67SPN.cjs.map +1 -0
  13. package/dist/{chunk-SIN5JHMP.js → chunk-ETWGKCOP.js} +3 -3
  14. package/dist/{chunk-SIN5JHMP.js.map → chunk-ETWGKCOP.js.map} +1 -1
  15. package/dist/{chunk-PVVUTEZP.cjs → chunk-OXTQULXH.cjs} +7 -7
  16. package/dist/{chunk-PVVUTEZP.cjs.map → chunk-OXTQULXH.cjs.map} +1 -1
  17. package/dist/{chunk-BNHLMLDH.js → chunk-RKN4PT7P.js} +10 -4
  18. package/dist/chunk-RKN4PT7P.js.map +1 -0
  19. package/dist/{chunk-RSDA7IAQ.cjs → chunk-YK2MQDNJ.cjs} +9 -9
  20. package/dist/{chunk-RSDA7IAQ.cjs.map → chunk-YK2MQDNJ.cjs.map} +1 -1
  21. package/dist/{chunk-UDGQSHEO.cjs → chunk-ZIFQWIN3.cjs} +42 -19
  22. package/dist/{chunk-UDGQSHEO.cjs.map → chunk-ZIFQWIN3.cjs.map} +1 -1
  23. package/dist/index.cjs +74 -51
  24. package/dist/index.cjs.map +1 -1
  25. package/dist/index.d.ts +1 -1
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +32 -9
  28. package/dist/index.js.map +1 -1
  29. package/dist/security/ssrf.d.ts +15 -3
  30. package/dist/security/ssrf.d.ts.map +1 -1
  31. package/dist/tools/util/toolConfig.d.ts +7 -1
  32. package/dist/tools/util/toolConfig.d.ts.map +1 -1
  33. package/dist/utils/cli/index.cjs +17 -17
  34. package/dist/utils/cli/index.js +3 -3
  35. package/package.json +1 -1
  36. package/dist/chunk-BNHLMLDH.js.map +0 -1
  37. package/dist/chunk-CDTLERB6.cjs.map +0 -1
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkCDTLERB6_cjs = require('./chunk-CDTLERB6.cjs');
3
+ var chunkEMI67SPN_cjs = require('./chunk-EMI67SPN.cjs');
4
4
  var tools = require('@langchain/core/tools');
5
5
 
6
6
  var DEFAULT_CTX_FACTORY = () => ({
@@ -51,7 +51,7 @@ var LangChainToolsHub = class {
51
51
  const intent = {
52
52
  tool: spec.name,
53
53
  args: args ?? {},
54
- purpose: chunkCDTLERB6_cjs.LANGCHAIN_KIND
54
+ purpose: chunkEMI67SPN_cjs.LANGCHAIN_KIND
55
55
  };
56
56
  const ctx = ctxFactory();
57
57
  const result = await runtime.invoke(intent, ctx);
@@ -70,13 +70,36 @@ var LangChainToolsHub = class {
70
70
  };
71
71
 
72
72
  // src/api/createAgentTools.ts
73
+ function mergeHostLists(a, b) {
74
+ const seen = /* @__PURE__ */ new Set();
75
+ const out = [];
76
+ for (const list of [a ?? [], b ?? []]) {
77
+ for (const h of list) {
78
+ if (!seen.has(h)) {
79
+ seen.add(h);
80
+ out.push(h);
81
+ }
82
+ }
83
+ }
84
+ return out;
85
+ }
73
86
  function runtimeOptionsFromConfig(opts) {
74
87
  const coreTools = opts.coreTools ?? { sandboxRoot: process.cwd(), allowedHosts: [] };
75
88
  if (opts.configFilePath) {
76
- const toolConfig = chunkCDTLERB6_cjs.loadToolConfig(opts.configFilePath);
89
+ const toolConfig = chunkEMI67SPN_cjs.loadToolConfig(opts.configFilePath);
90
+ const updates = {};
77
91
  if (toolConfig.sandboxedPath && typeof toolConfig.sandboxedPath === "string") {
78
- const sandboxRoot = chunkCDTLERB6_cjs.resolveSandboxedPath(opts.configFilePath, toolConfig.sandboxedPath);
79
- return { ...opts, coreTools: { ...coreTools, sandboxRoot } };
92
+ updates.sandboxRoot = chunkEMI67SPN_cjs.resolveSandboxedPath(opts.configFilePath, toolConfig.sandboxedPath);
93
+ }
94
+ updates.allowedHosts = mergeHostLists(coreTools.allowedHosts, toolConfig.allowedHosts);
95
+ updates.blockedHosts = mergeHostLists(coreTools.blockedHosts, toolConfig.blockedHosts);
96
+ if (Array.isArray(toolConfig.blockedCidrs) && toolConfig.blockedCidrs.length > 0) {
97
+ updates.blockedCidrs = toolConfig.blockedCidrs;
98
+ } else if (coreTools.blockedCidrs?.length) {
99
+ updates.blockedCidrs = coreTools.blockedCidrs;
100
+ }
101
+ if (Object.keys(updates).length > 0) {
102
+ return { ...opts, coreTools: { ...coreTools, ...updates } };
80
103
  }
81
104
  }
82
105
  return { ...opts, coreTools };
@@ -84,21 +107,21 @@ function runtimeOptionsFromConfig(opts) {
84
107
  function createAgentTools(options) {
85
108
  const opts = typeof options === "string" ? { configFilePath: options } : options ?? {};
86
109
  const runtimeOpts = runtimeOptionsFromConfig(opts);
87
- const { runtime } = chunkCDTLERB6_cjs.createRuntimeFromConfigSync(runtimeOpts);
110
+ const { runtime } = chunkEMI67SPN_cjs.createRuntimeFromConfigSync(runtimeOpts);
88
111
  const hub = new LangChainToolsHub(runtime);
89
112
  if (opts.configFilePath) {
90
- const toolConfig = chunkCDTLERB6_cjs.loadToolConfig(opts.configFilePath);
113
+ const toolConfig = chunkEMI67SPN_cjs.loadToolConfig(opts.configFilePath);
91
114
  const names = Array.isArray(toolConfig.tools) ? toolConfig.tools : [];
92
115
  if (names.length > 0) {
93
116
  const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);
94
- const allBareBuiltin = names.every((n) => chunkCDTLERB6_cjs.isBarePackageDescriptor(String(n))) && names.some((n) => {
95
- const p = chunkCDTLERB6_cjs.parseNpmDescriptor(String(n));
96
- return p !== null && chunkCDTLERB6_cjs.BUILTIN_PKG_NAMES.includes(p.packageName);
117
+ const allBareBuiltin = names.every((n) => chunkEMI67SPN_cjs.isBarePackageDescriptor(String(n))) && names.some((n) => {
118
+ const p = chunkEMI67SPN_cjs.parseNpmDescriptor(String(n));
119
+ return p !== null && chunkEMI67SPN_cjs.BUILTIN_PKG_NAMES.includes(p.packageName);
97
120
  });
98
121
  if (allBareBuiltin) {
99
122
  return hub.getLangChainTools();
100
123
  }
101
- const expanded = chunkCDTLERB6_cjs.expandToolDescriptorsToRegistryNames(names, registryNames);
124
+ const expanded = chunkEMI67SPN_cjs.expandToolDescriptorsToRegistryNames(names, registryNames);
102
125
  return hub.getLangChainToolsForNames(expanded);
103
126
  }
104
127
  }
@@ -106,21 +129,21 @@ function createAgentTools(options) {
106
129
  }
107
130
  async function createLangChainToolsAsync(options = {}) {
108
131
  const runtimeOpts = runtimeOptionsFromConfig(options);
109
- const { runtime } = await chunkCDTLERB6_cjs.createRuntimeFromConfig(runtimeOpts);
132
+ const { runtime } = await chunkEMI67SPN_cjs.createRuntimeFromConfig(runtimeOpts);
110
133
  const hub = new LangChainToolsHub(runtime);
111
134
  if (options.configFilePath) {
112
- const toolConfig = chunkCDTLERB6_cjs.loadToolConfig(options.configFilePath);
135
+ const toolConfig = chunkEMI67SPN_cjs.loadToolConfig(options.configFilePath);
113
136
  const names = Array.isArray(toolConfig.tools) ? toolConfig.tools : [];
114
137
  if (names.length > 0) {
115
138
  const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);
116
- const allBareBuiltin = names.every((n) => chunkCDTLERB6_cjs.isBarePackageDescriptor(String(n))) && names.some((n) => {
117
- const p = chunkCDTLERB6_cjs.parseNpmDescriptor(String(n));
118
- return p !== null && chunkCDTLERB6_cjs.BUILTIN_PKG_NAMES.includes(p.packageName);
139
+ const allBareBuiltin = names.every((n) => chunkEMI67SPN_cjs.isBarePackageDescriptor(String(n))) && names.some((n) => {
140
+ const p = chunkEMI67SPN_cjs.parseNpmDescriptor(String(n));
141
+ return p !== null && chunkEMI67SPN_cjs.BUILTIN_PKG_NAMES.includes(p.packageName);
119
142
  });
120
143
  if (allBareBuiltin) {
121
144
  return hub.getLangChainTools();
122
145
  }
123
- const expanded = chunkCDTLERB6_cjs.expandToolDescriptorsToRegistryNames(names, registryNames);
146
+ const expanded = chunkEMI67SPN_cjs.expandToolDescriptorsToRegistryNames(names, registryNames);
124
147
  return hub.getLangChainToolsForNames(expanded);
125
148
  }
126
149
  }
@@ -130,5 +153,5 @@ async function createLangChainToolsAsync(options = {}) {
130
153
  exports.LangChainToolsHub = LangChainToolsHub;
131
154
  exports.createAgentTools = createAgentTools;
132
155
  exports.createLangChainToolsAsync = createLangChainToolsAsync;
133
- //# sourceMappingURL=chunk-UDGQSHEO.cjs.map
134
- //# sourceMappingURL=chunk-UDGQSHEO.cjs.map
156
+ //# sourceMappingURL=chunk-ZIFQWIN3.cjs.map
157
+ //# sourceMappingURL=chunk-ZIFQWIN3.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/adapters/LangChainToolsHub.ts","../src/api/createAgentTools.ts"],"names":["DynamicStructuredTool","LANGCHAIN_KIND","loadToolConfig","resolveSandboxedPath","createRuntimeFromConfigSync","isBarePackageDescriptor","parseNpmDescriptor","BUILTIN_PKG_NAMES","expandToolDescriptorsToRegistryNames","createRuntimeFromConfig"],"mappings":"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","file":"chunk-UDGQSHEO.cjs","sourcesContent":["/**\n * Exposes all tools from a ToolRegistry + PTCRuntime as LangChain tools\n * for local agent use (e.g. with createReactAgent, AgentExecutor).\n *\n * For most users, use createAgentTools() 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 type { PTCRuntime } from \"../../core/runtime/PTCRuntime.js\";\nimport type { ToolSpec } from \"../../core/types/ToolSpec.js\";\nimport type { ExecContext } from \"../../core/types/ToolIntent.js\";\nimport type { ToolIntent } from \"../../core/types/ToolIntent.js\";\nimport { LANGCHAIN_KIND } from \"../../tools/langchain/types.js\";\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\n return new DynamicStructuredTool({\n name: spec.name,\n description: spec.description ?? `Tool: ${spec.name}`,\n schema: spec.inputSchema as Record<string, unknown>,\n func: async (args: Record<string, unknown>): Promise<string> => {\n const intent: ToolIntent = {\n tool: spec.name,\n args: args ?? {},\n purpose: LANGCHAIN_KIND,\n };\n const ctx = ctxFactory();\n const result = await runtime.invoke(intent, ctx);\n\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 });\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 {\n expandToolDescriptorsToRegistryNames,\n isBarePackageDescriptor,\n} from \"../tools/util/toolDescriptor.js\";\nimport {\n createRuntimeFromConfigSync,\n createRuntimeFromConfig,\n BUILTIN_PKG_NAMES,\n parseNpmDescriptor,\n} from \"./runtimeFromConfig.js\";\nimport type { CreateRuntimeOptions } from \"./runtimeFromConfig.js\";\nimport { LangChainToolsHub } from \"./adapters/LangChainToolsHub.js\";\nimport type { StructuredToolInterface } from \"@langchain/core/tools\";\n\nexport interface CreateAgentToolsOptions extends CreateRuntimeOptions {\n /** Path to tool.yaml; when set, only tools listed there are returned; sandboxedPath from it is used as sandboxRoot */\n configFilePath?: string;\n /** Project path for async loading (use createLangChainToolsAsync) */\n projectPath?: string;\n}\n\nfunction runtimeOptionsFromConfig(opts: CreateAgentToolsOptions): CreateRuntimeOptions {\n const coreTools = opts.coreTools ?? { sandboxRoot: process.cwd(), allowedHosts: [] };\n if (opts.configFilePath) {\n const toolConfig = loadToolConfig(opts.configFilePath);\n if (toolConfig.sandboxedPath && typeof toolConfig.sandboxedPath === \"string\") {\n const sandboxRoot = resolveSandboxedPath(opts.configFilePath, toolConfig.sandboxedPath);\n return { ...opts, coreTools: { ...coreTools, sandboxRoot } };\n }\n }\n return { ...opts, coreTools };\n}\n\n/**\n * Create LangChain tools synchronously. When configFilePath is set, returns only\n * tools listed in that file (and that exist in the registry). If tool.yaml has\n * sandboxedPath, fs tools can only access that directory.\n */\nexport function createAgentTools(\n options?: CreateAgentToolsOptions | string\n): StructuredToolInterface[] {\n const opts: CreateAgentToolsOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const runtimeOpts = runtimeOptionsFromConfig(opts);\n const { runtime } = createRuntimeFromConfigSync(runtimeOpts);\n const hub = new LangChainToolsHub(runtime);\n\n if (opts.configFilePath) {\n const toolConfig = loadToolConfig(opts.configFilePath);\n const names = Array.isArray(toolConfig.tools) ? toolConfig.tools : [];\n if (names.length > 0) {\n const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);\n const allBareBuiltin =\n names.every((n) => isBarePackageDescriptor(String(n))) &&\n names.some((n) => {\n const p = parseNpmDescriptor(String(n));\n return p !== null && BUILTIN_PKG_NAMES.includes(p.packageName);\n });\n if (allBareBuiltin) {\n return hub.getLangChainTools();\n }\n const expanded = expandToolDescriptorsToRegistryNames(names, registryNames);\n return hub.getLangChainToolsForNames(expanded);\n }\n }\n\n return hub.getLangChainTools();\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 runtimeOpts = runtimeOptionsFromConfig(options);\n const { runtime } = await createRuntimeFromConfig(runtimeOpts);\n const hub = new LangChainToolsHub(runtime);\n\n if (options.configFilePath) {\n const toolConfig = loadToolConfig(options.configFilePath);\n const names = Array.isArray(toolConfig.tools) ? toolConfig.tools : [];\n if (names.length > 0) {\n const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);\n const allBareBuiltin =\n names.every((n) => isBarePackageDescriptor(String(n))) &&\n names.some((n) => {\n const p = parseNpmDescriptor(String(n));\n return p !== null && BUILTIN_PKG_NAMES.includes(p.packageName);\n });\n if (allBareBuiltin) {\n return hub.getLangChainTools();\n }\n const expanded = expandToolDescriptorsToRegistryNames(names, registryNames);\n return hub.getLangChainToolsForNames(expanded);\n }\n }\n\n return hub.getLangChainTools();\n}\n"]}
1
+ {"version":3,"sources":["../src/api/adapters/LangChainToolsHub.ts","../src/api/createAgentTools.ts"],"names":["DynamicStructuredTool","LANGCHAIN_KIND","loadToolConfig","resolveSandboxedPath","createRuntimeFromConfigSync","isBarePackageDescriptor","parseNpmDescriptor","BUILTIN_PKG_NAMES","expandToolDescriptorsToRegistryNames","createRuntimeFromConfig"],"mappings":"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","file":"chunk-ZIFQWIN3.cjs","sourcesContent":["/**\n * Exposes all tools from a ToolRegistry + PTCRuntime as LangChain tools\n * for local agent use (e.g. with createReactAgent, AgentExecutor).\n *\n * For most users, use createAgentTools() 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 type { PTCRuntime } from \"../../core/runtime/PTCRuntime.js\";\nimport type { ToolSpec } from \"../../core/types/ToolSpec.js\";\nimport type { ExecContext } from \"../../core/types/ToolIntent.js\";\nimport type { ToolIntent } from \"../../core/types/ToolIntent.js\";\nimport { LANGCHAIN_KIND } from \"../../tools/langchain/types.js\";\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\n return new DynamicStructuredTool({\n name: spec.name,\n description: spec.description ?? `Tool: ${spec.name}`,\n schema: spec.inputSchema as Record<string, unknown>,\n func: async (args: Record<string, unknown>): Promise<string> => {\n const intent: ToolIntent = {\n tool: spec.name,\n args: args ?? {},\n purpose: LANGCHAIN_KIND,\n };\n const ctx = ctxFactory();\n const result = await runtime.invoke(intent, ctx);\n\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 });\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 {\n expandToolDescriptorsToRegistryNames,\n isBarePackageDescriptor,\n} from \"../tools/util/toolDescriptor.js\";\nimport {\n createRuntimeFromConfigSync,\n createRuntimeFromConfig,\n BUILTIN_PKG_NAMES,\n parseNpmDescriptor,\n} from \"./runtimeFromConfig.js\";\nimport type { CreateRuntimeOptions } from \"./runtimeFromConfig.js\";\nimport { LangChainToolsHub } from \"./adapters/LangChainToolsHub.js\";\nimport type { StructuredToolInterface } from \"@langchain/core/tools\";\n\nexport interface CreateAgentToolsOptions extends CreateRuntimeOptions {\n /** Path to tool.yaml; when set, only tools listed there are returned; sandboxedPath from it is used as sandboxRoot */\n configFilePath?: string;\n /** Project path for async loading (use createLangChainToolsAsync) */\n projectPath?: string;\n}\n\n/** Merge host lists from multiple sources (e.g. tool.yaml + programmatic). Union, dedup, preserves order. */\nfunction mergeHostLists(a?: string[], b?: string[]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const list of [a ?? [], b ?? []]) {\n for (const h of list) {\n if (!seen.has(h)) {\n seen.add(h);\n out.push(h);\n }\n }\n }\n return out;\n}\n\nfunction runtimeOptionsFromConfig(opts: CreateAgentToolsOptions): CreateRuntimeOptions {\n const coreTools = opts.coreTools ?? { sandboxRoot: process.cwd(), allowedHosts: [] };\n if (opts.configFilePath) {\n const toolConfig = loadToolConfig(opts.configFilePath);\n const updates: {\n sandboxRoot?: string;\n allowedHosts?: string[];\n blockedHosts?: string[];\n blockedCidrs?: string[];\n } = {};\n if (toolConfig.sandboxedPath && typeof toolConfig.sandboxedPath === \"string\") {\n updates.sandboxRoot = resolveSandboxedPath(opts.configFilePath, toolConfig.sandboxedPath);\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 if (Object.keys(updates).length > 0) {\n return { ...opts, coreTools: { ...coreTools, ...updates } };\n }\n }\n return { ...opts, coreTools };\n}\n\n/**\n * Create LangChain tools synchronously. When configFilePath is set, returns only\n * tools listed in that file (and that exist in the registry). If tool.yaml has\n * sandboxedPath, fs tools can only access that directory.\n */\nexport function createAgentTools(\n options?: CreateAgentToolsOptions | string\n): StructuredToolInterface[] {\n const opts: CreateAgentToolsOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const runtimeOpts = runtimeOptionsFromConfig(opts);\n const { runtime } = createRuntimeFromConfigSync(runtimeOpts);\n const hub = new LangChainToolsHub(runtime);\n\n if (opts.configFilePath) {\n const toolConfig = loadToolConfig(opts.configFilePath);\n const names = Array.isArray(toolConfig.tools) ? toolConfig.tools : [];\n if (names.length > 0) {\n const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);\n const allBareBuiltin =\n names.every((n) => isBarePackageDescriptor(String(n))) &&\n names.some((n) => {\n const p = parseNpmDescriptor(String(n));\n return p !== null && BUILTIN_PKG_NAMES.includes(p.packageName);\n });\n if (allBareBuiltin) {\n return hub.getLangChainTools();\n }\n const expanded = expandToolDescriptorsToRegistryNames(names, registryNames);\n return hub.getLangChainToolsForNames(expanded);\n }\n }\n\n return hub.getLangChainTools();\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 runtimeOpts = runtimeOptionsFromConfig(options);\n const { runtime } = await createRuntimeFromConfig(runtimeOpts);\n const hub = new LangChainToolsHub(runtime);\n\n if (options.configFilePath) {\n const toolConfig = loadToolConfig(options.configFilePath);\n const names = Array.isArray(toolConfig.tools) ? toolConfig.tools : [];\n if (names.length > 0) {\n const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);\n const allBareBuiltin =\n names.every((n) => isBarePackageDescriptor(String(n))) &&\n names.some((n) => {\n const p = parseNpmDescriptor(String(n));\n return p !== null && BUILTIN_PKG_NAMES.includes(p.packageName);\n });\n if (allBareBuiltin) {\n return hub.getLangChainTools();\n }\n const expanded = expandToolDescriptorsToRegistryNames(names, registryNames);\n return hub.getLangChainToolsForNames(expanded);\n }\n }\n\n return hub.getLangChainTools();\n}\n"]}
package/dist/index.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunkUDGQSHEO_cjs = require('./chunk-UDGQSHEO.cjs');
4
- var chunkRSDA7IAQ_cjs = require('./chunk-RSDA7IAQ.cjs');
5
- var chunkCDTLERB6_cjs = require('./chunk-CDTLERB6.cjs');
3
+ var chunkZIFQWIN3_cjs = require('./chunk-ZIFQWIN3.cjs');
4
+ var chunkYK2MQDNJ_cjs = require('./chunk-YK2MQDNJ.cjs');
5
+ var chunkEMI67SPN_cjs = require('./chunk-EMI67SPN.cjs');
6
6
  var chunkSOFUWEZ6_cjs = require('./chunk-SOFUWEZ6.cjs');
7
7
  var chunkZNJBRLKN_cjs = require('./chunk-ZNJBRLKN.cjs');
8
8
  require('./chunk-6F5JHLZ7.cjs');
@@ -10,7 +10,7 @@ var promises = require('dns/promises');
10
10
  var path = require('path');
11
11
  var promises$1 = require('fs/promises');
12
12
 
13
- async function validateUrl(url, allowedHosts, blockedCidrs) {
13
+ async function validateUrl(url, options) {
14
14
  let parsed;
15
15
  try {
16
16
  parsed = new URL(url);
@@ -29,16 +29,23 @@ async function validateUrl(url, allowedHosts, blockedCidrs) {
29
29
  );
30
30
  }
31
31
  const hostname = parsed.hostname;
32
- if (!isHostAllowed(hostname, allowedHosts)) {
32
+ if (!isHostAllowed(hostname, options.allowedHosts)) {
33
33
  throw chunkZNJBRLKN_cjs.createTaggedError(
34
34
  "HTTP_DISALLOWED_HOST",
35
35
  `Host "${hostname}" is not in the allowed hosts list`,
36
- { url, hostname, allowedHosts }
36
+ { url, hostname, allowedHosts: options.allowedHosts }
37
+ );
38
+ }
39
+ if (isHostBlocked(hostname, options.blockedHosts)) {
40
+ throw chunkZNJBRLKN_cjs.createTaggedError(
41
+ "HTTP_DISALLOWED_HOST",
42
+ `Host "${hostname}" is in the blocked hosts list`,
43
+ { url, hostname, blockedHosts: options.blockedHosts }
37
44
  );
38
45
  }
39
46
  try {
40
47
  const { address } = await promises.lookup(hostname);
41
- if (isIpInBlockedCidrs(address, blockedCidrs)) {
48
+ if (isIpInBlockedCidrs(address, options.blockedCidrs)) {
42
49
  throw chunkZNJBRLKN_cjs.createTaggedError(
43
50
  "HTTP_DISALLOWED_HOST",
44
51
  `Host "${hostname}" resolves to blocked IP: ${address}`,
@@ -73,6 +80,22 @@ function isHostAllowed(hostname, allowedHosts) {
73
80
  }
74
81
  return false;
75
82
  }
83
+ function isHostBlocked(hostname, blockedHosts) {
84
+ for (const pattern of blockedHosts) {
85
+ if (pattern === "*") {
86
+ return true;
87
+ }
88
+ if (pattern.startsWith("*.")) {
89
+ const suffix = pattern.slice(1);
90
+ if (hostname.endsWith(suffix) || hostname === pattern.slice(2)) {
91
+ return true;
92
+ }
93
+ } else if (hostname === pattern) {
94
+ return true;
95
+ }
96
+ }
97
+ return false;
98
+ }
76
99
  function isIpInBlockedCidrs(ip, cidrs) {
77
100
  const normalizedIp = normalizeIp(ip);
78
101
  if (!normalizedIp) return false;
@@ -212,7 +235,7 @@ var MCPClientAdapter = class {
212
235
  constructor(client) {
213
236
  this.client = client;
214
237
  }
215
- kind = chunkCDTLERB6_cjs.MCP_KIND;
238
+ kind = chunkEMI67SPN_cjs.MCP_KIND;
216
239
  async invoke(spec, args, _ctx) {
217
240
  const params = args != null && typeof args === "object" && !Array.isArray(args) ? args : {};
218
241
  const result = await this.client.callTool({ name: spec.name, arguments: params });
@@ -253,7 +276,7 @@ function mcpToolsToSpecs(tools) {
253
276
  return tools.map((t) => ({
254
277
  name: t.name,
255
278
  version: "1.0.0",
256
- kind: chunkCDTLERB6_cjs.MCP_KIND,
279
+ kind: chunkEMI67SPN_cjs.MCP_KIND,
257
280
  description: t.description ?? `MCP tool: ${t.name}`,
258
281
  inputSchema: t.inputSchema ?? chunkSOFUWEZ6_cjs.DEFAULT_INPUT_SCHEMA,
259
282
  outputSchema: chunkSOFUWEZ6_cjs.DEFAULT_OUTPUT_SCHEMA,
@@ -293,8 +316,8 @@ async function registerMCPToolsFromConfig(runtime, registry, options = {}) {
293
316
  const configPath = options.configPath ?? process.env.MCP_CONFIG_PATH ?? path.join(process.cwd(), "mcp.json");
294
317
  const dirPath = path.dirname(configPath);
295
318
  const entryPoint = path.basename(configPath);
296
- const toolName = options.toolName ?? chunkCDTLERB6_cjs.MCP_KIND;
297
- const loaded = await chunkRSDA7IAQ_cjs.loadMCPTool(dirPath, { kind: chunkCDTLERB6_cjs.MCP_KIND, name: toolName, entryPoint });
319
+ const toolName = options.toolName ?? chunkEMI67SPN_cjs.MCP_KIND;
320
+ const loaded = await chunkYK2MQDNJ_cjs.loadMCPTool(dirPath, { kind: chunkEMI67SPN_cjs.MCP_KIND, name: toolName, entryPoint });
298
321
  if (!loaded.mcpConfig) {
299
322
  throw new Error("mcp.json must have command or url");
300
323
  }
@@ -310,163 +333,163 @@ async function registerMCPToolsFromConfig(runtime, registry, options = {}) {
310
333
 
311
334
  Object.defineProperty(exports, "LangChainToolsHub", {
312
335
  enumerable: true,
313
- get: function () { return chunkUDGQSHEO_cjs.LangChainToolsHub; }
336
+ get: function () { return chunkZIFQWIN3_cjs.LangChainToolsHub; }
314
337
  });
315
338
  Object.defineProperty(exports, "createAgentTools", {
316
339
  enumerable: true,
317
- get: function () { return chunkUDGQSHEO_cjs.createAgentTools; }
340
+ get: function () { return chunkZIFQWIN3_cjs.createAgentTools; }
318
341
  });
319
342
  Object.defineProperty(exports, "DirectoryScanner", {
320
343
  enumerable: true,
321
- get: function () { return chunkRSDA7IAQ_cjs.DirectoryScanner; }
344
+ get: function () { return chunkYK2MQDNJ_cjs.DirectoryScanner; }
322
345
  });
323
346
  Object.defineProperty(exports, "DiscoveryError", {
324
347
  enumerable: true,
325
- get: function () { return chunkRSDA7IAQ_cjs.DiscoveryError; }
348
+ get: function () { return chunkYK2MQDNJ_cjs.DiscoveryError; }
326
349
  });
327
350
  Object.defineProperty(exports, "SkillManifestError", {
328
351
  enumerable: true,
329
- get: function () { return chunkRSDA7IAQ_cjs.SkillManifestError; }
352
+ get: function () { return chunkYK2MQDNJ_cjs.SkillManifestError; }
330
353
  });
331
354
  Object.defineProperty(exports, "buildFunctionToTool", {
332
355
  enumerable: true,
333
- get: function () { return chunkRSDA7IAQ_cjs.buildFunctionToTool; }
356
+ get: function () { return chunkYK2MQDNJ_cjs.buildFunctionToTool; }
334
357
  });
335
358
  Object.defineProperty(exports, "buildMcpPackage", {
336
359
  enumerable: true,
337
- get: function () { return chunkRSDA7IAQ_cjs.buildMcpPackage; }
360
+ get: function () { return chunkYK2MQDNJ_cjs.buildMcpPackage; }
338
361
  });
339
362
  Object.defineProperty(exports, "initProject", {
340
363
  enumerable: true,
341
- get: function () { return chunkRSDA7IAQ_cjs.initProject; }
364
+ get: function () { return chunkYK2MQDNJ_cjs.initProject; }
342
365
  });
343
366
  Object.defineProperty(exports, "loadMCPTool", {
344
367
  enumerable: true,
345
- get: function () { return chunkRSDA7IAQ_cjs.loadMCPTool; }
368
+ get: function () { return chunkYK2MQDNJ_cjs.loadMCPTool; }
346
369
  });
347
370
  Object.defineProperty(exports, "loadSkillDefinition", {
348
371
  enumerable: true,
349
- get: function () { return chunkRSDA7IAQ_cjs.loadSkillDefinition; }
372
+ get: function () { return chunkYK2MQDNJ_cjs.loadSkillDefinition; }
350
373
  });
351
374
  Object.defineProperty(exports, "parseSkillMd", {
352
375
  enumerable: true,
353
- get: function () { return chunkRSDA7IAQ_cjs.parseSkillMd; }
376
+ get: function () { return chunkYK2MQDNJ_cjs.parseSkillMd; }
354
377
  });
355
378
  Object.defineProperty(exports, "runGeneratedMCP", {
356
379
  enumerable: true,
357
- get: function () { return chunkRSDA7IAQ_cjs.runGeneratedMCP; }
380
+ get: function () { return chunkYK2MQDNJ_cjs.runGeneratedMCP; }
358
381
  });
359
382
  Object.defineProperty(exports, "runMcpServer", {
360
383
  enumerable: true,
361
- get: function () { return chunkRSDA7IAQ_cjs.runMcpServer; }
384
+ get: function () { return chunkYK2MQDNJ_cjs.runMcpServer; }
362
385
  });
363
386
  Object.defineProperty(exports, "scan", {
364
387
  enumerable: true,
365
- get: function () { return chunkRSDA7IAQ_cjs.scan; }
388
+ get: function () { return chunkYK2MQDNJ_cjs.scan; }
366
389
  });
367
390
  Object.defineProperty(exports, "scanForTools", {
368
391
  enumerable: true,
369
- get: function () { return chunkRSDA7IAQ_cjs.scanForTools; }
392
+ get: function () { return chunkYK2MQDNJ_cjs.scanForTools; }
370
393
  });
371
394
  Object.defineProperty(exports, "scanSkillResources", {
372
395
  enumerable: true,
373
- get: function () { return chunkRSDA7IAQ_cjs.scanSkillResources; }
396
+ get: function () { return chunkYK2MQDNJ_cjs.scanSkillResources; }
374
397
  });
375
398
  Object.defineProperty(exports, "validateFrontmatter", {
376
399
  enumerable: true,
377
- get: function () { return chunkRSDA7IAQ_cjs.validateFrontmatter; }
400
+ get: function () { return chunkYK2MQDNJ_cjs.validateFrontmatter; }
378
401
  });
379
402
  Object.defineProperty(exports, "BudgetManager", {
380
403
  enumerable: true,
381
- get: function () { return chunkCDTLERB6_cjs.BudgetManager; }
404
+ get: function () { return chunkEMI67SPN_cjs.BudgetManager; }
382
405
  });
383
406
  Object.defineProperty(exports, "EventLog", {
384
407
  enumerable: true,
385
- get: function () { return chunkCDTLERB6_cjs.EventLog; }
408
+ get: function () { return chunkEMI67SPN_cjs.EventLog; }
386
409
  });
387
410
  Object.defineProperty(exports, "Metrics", {
388
411
  enumerable: true,
389
- get: function () { return chunkCDTLERB6_cjs.Metrics; }
412
+ get: function () { return chunkEMI67SPN_cjs.Metrics; }
390
413
  });
391
414
  Object.defineProperty(exports, "PTCRuntime", {
392
415
  enumerable: true,
393
- get: function () { return chunkCDTLERB6_cjs.PTCRuntime; }
416
+ get: function () { return chunkEMI67SPN_cjs.PTCRuntime; }
394
417
  });
395
418
  Object.defineProperty(exports, "PolicyDeniedError", {
396
419
  enumerable: true,
397
- get: function () { return chunkCDTLERB6_cjs.PolicyDeniedError; }
420
+ get: function () { return chunkEMI67SPN_cjs.PolicyDeniedError; }
398
421
  });
399
422
  Object.defineProperty(exports, "PolicyEngine", {
400
423
  enumerable: true,
401
- get: function () { return chunkCDTLERB6_cjs.PolicyEngine; }
424
+ get: function () { return chunkEMI67SPN_cjs.PolicyEngine; }
402
425
  });
403
426
  Object.defineProperty(exports, "SchemaValidationError", {
404
427
  enumerable: true,
405
- get: function () { return chunkCDTLERB6_cjs.SchemaValidationError; }
428
+ get: function () { return chunkEMI67SPN_cjs.SchemaValidationError; }
406
429
  });
407
430
  Object.defineProperty(exports, "SchemaValidator", {
408
431
  enumerable: true,
409
- get: function () { return chunkCDTLERB6_cjs.SchemaValidator; }
432
+ get: function () { return chunkEMI67SPN_cjs.SchemaValidator; }
410
433
  });
411
434
  Object.defineProperty(exports, "Tracing", {
412
435
  enumerable: true,
413
- get: function () { return chunkCDTLERB6_cjs.Tracing; }
436
+ get: function () { return chunkEMI67SPN_cjs.Tracing; }
414
437
  });
415
438
  Object.defineProperty(exports, "buildEvidence", {
416
439
  enumerable: true,
417
- get: function () { return chunkCDTLERB6_cjs.buildEvidence; }
440
+ get: function () { return chunkEMI67SPN_cjs.buildEvidence; }
418
441
  });
419
442
  Object.defineProperty(exports, "createLogger", {
420
443
  enumerable: true,
421
- get: function () { return chunkCDTLERB6_cjs.createLogger; }
444
+ get: function () { return chunkEMI67SPN_cjs.createLogger; }
422
445
  });
423
446
  Object.defineProperty(exports, "ensurePackageInCache", {
424
447
  enumerable: true,
425
- get: function () { return chunkCDTLERB6_cjs.ensurePackageInCache; }
448
+ get: function () { return chunkEMI67SPN_cjs.ensurePackageInCache; }
426
449
  });
427
450
  Object.defineProperty(exports, "expandToolDescriptorsToRegistryNames", {
428
451
  enumerable: true,
429
- get: function () { return chunkCDTLERB6_cjs.expandToolDescriptorsToRegistryNames; }
452
+ get: function () { return chunkEMI67SPN_cjs.expandToolDescriptorsToRegistryNames; }
430
453
  });
431
454
  Object.defineProperty(exports, "getPackageEntryPath", {
432
455
  enumerable: true,
433
- get: function () { return chunkCDTLERB6_cjs.getPackageEntryPath; }
456
+ get: function () { return chunkEMI67SPN_cjs.getPackageEntryPath; }
434
457
  });
435
458
  Object.defineProperty(exports, "importFromCache", {
436
459
  enumerable: true,
437
- get: function () { return chunkCDTLERB6_cjs.importFromCache; }
460
+ get: function () { return chunkEMI67SPN_cjs.importFromCache; }
438
461
  });
439
462
  Object.defineProperty(exports, "isNpmToolDescriptor", {
440
463
  enumerable: true,
441
- get: function () { return chunkCDTLERB6_cjs.isNpmToolDescriptor; }
464
+ get: function () { return chunkEMI67SPN_cjs.isNpmToolDescriptor; }
442
465
  });
443
466
  Object.defineProperty(exports, "loadToolConfig", {
444
467
  enumerable: true,
445
- get: function () { return chunkCDTLERB6_cjs.loadToolConfig; }
468
+ get: function () { return chunkEMI67SPN_cjs.loadToolConfig; }
446
469
  });
447
470
  Object.defineProperty(exports, "normalizeToolList", {
448
471
  enumerable: true,
449
- get: function () { return chunkCDTLERB6_cjs.normalizeToolList; }
472
+ get: function () { return chunkEMI67SPN_cjs.normalizeToolList; }
450
473
  });
451
474
  Object.defineProperty(exports, "parseNpmToolDescriptor", {
452
475
  enumerable: true,
453
- get: function () { return chunkCDTLERB6_cjs.parseNpmToolDescriptor; }
476
+ get: function () { return chunkEMI67SPN_cjs.parseNpmToolDescriptor; }
454
477
  });
455
478
  Object.defineProperty(exports, "resolveNpmToolDescriptor", {
456
479
  enumerable: true,
457
- get: function () { return chunkCDTLERB6_cjs.resolveNpmToolDescriptor; }
480
+ get: function () { return chunkEMI67SPN_cjs.resolveNpmToolDescriptor; }
458
481
  });
459
482
  Object.defineProperty(exports, "resolveToolDescriptor", {
460
483
  enumerable: true,
461
- get: function () { return chunkCDTLERB6_cjs.resolveToolDescriptor; }
484
+ get: function () { return chunkEMI67SPN_cjs.resolveToolDescriptor; }
462
485
  });
463
486
  Object.defineProperty(exports, "sanitizeForLog", {
464
487
  enumerable: true,
465
- get: function () { return chunkCDTLERB6_cjs.sanitizeForLog; }
488
+ get: function () { return chunkEMI67SPN_cjs.sanitizeForLog; }
466
489
  });
467
490
  Object.defineProperty(exports, "summarizeForLog", {
468
491
  enumerable: true,
469
- get: function () { return chunkCDTLERB6_cjs.summarizeForLog; }
492
+ get: function () { return chunkEMI67SPN_cjs.summarizeForLog; }
470
493
  });
471
494
  Object.defineProperty(exports, "DEFAULT_INPUT_SCHEMA", {
472
495
  enumerable: true,