@easynet/agent-tool 1.0.85 → 1.0.87

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 (102) hide show
  1. package/README.md +1 -0
  2. package/dist/api/register-tools.d.ts +2 -1
  3. package/dist/api/register-tools.d.ts.map +1 -1
  4. package/dist/build.cjs +8 -9
  5. package/dist/build.js +3 -4
  6. package/dist/{chunk-6ORA3MNX.js → chunk-2YP4Q4BW.js} +4 -4
  7. package/dist/{chunk-6ORA3MNX.js.map → chunk-2YP4Q4BW.js.map} +1 -1
  8. package/dist/{chunk-PYCCJF7C.cjs → chunk-AGLGFQUW.cjs} +118 -7
  9. package/dist/chunk-AGLGFQUW.cjs.map +1 -0
  10. package/dist/{chunk-W2WJOS5Z.js → chunk-BBNQ6AWK.js} +6 -8
  11. package/dist/chunk-BBNQ6AWK.js.map +1 -0
  12. package/dist/{chunk-HEVWKBBQ.js → chunk-BDUSB6GT.js} +36 -6
  13. package/dist/chunk-BDUSB6GT.js.map +1 -0
  14. package/dist/{chunk-NEMGE573.js → chunk-IJVVH4JN.js} +3 -3
  15. package/dist/{chunk-NEMGE573.js.map → chunk-IJVVH4JN.js.map} +1 -1
  16. package/dist/{chunk-WUMLZERG.js → chunk-IVL4TBFB.js} +106 -4
  17. package/dist/chunk-IVL4TBFB.js.map +1 -0
  18. package/dist/{chunk-LHKEJNKL.cjs → chunk-JW4EMVTE.cjs} +38 -6
  19. package/dist/chunk-JW4EMVTE.cjs.map +1 -0
  20. package/dist/{chunk-V2RD4BHT.cjs → chunk-LKE7PMRB.cjs} +13 -13
  21. package/dist/{chunk-V2RD4BHT.cjs.map → chunk-LKE7PMRB.cjs.map} +1 -1
  22. package/dist/{chunk-5HSGVA6S.cjs → chunk-PJDINB7G.cjs} +35 -37
  23. package/dist/chunk-PJDINB7G.cjs.map +1 -0
  24. package/dist/{chunk-F4HS7H7K.cjs → chunk-QYY6PNIB.cjs} +4 -4
  25. package/dist/{chunk-F4HS7H7K.cjs.map → chunk-QYY6PNIB.cjs.map} +1 -1
  26. package/dist/{chunk-3D7XYAZO.js → chunk-SNN4QJ5Z.js} +3 -3
  27. package/dist/{chunk-3D7XYAZO.js.map → chunk-SNN4QJ5Z.js.map} +1 -1
  28. package/dist/{chunk-QCHMXVWZ.cjs → chunk-ZDEQREVL.cjs} +14 -14
  29. package/dist/{chunk-QCHMXVWZ.cjs.map → chunk-ZDEQREVL.cjs.map} +1 -1
  30. package/dist/index.cjs +256 -14
  31. package/dist/index.cjs.map +1 -1
  32. package/dist/index.js +258 -10
  33. package/dist/index.js.map +1 -1
  34. package/dist/{extension.cjs → sdk.cjs} +212 -11
  35. package/dist/sdk.cjs.map +1 -0
  36. package/dist/sdk.d.ts +17 -0
  37. package/dist/sdk.d.ts.map +1 -0
  38. package/dist/{extension.js → sdk.js} +183 -7
  39. package/dist/sdk.js.map +1 -0
  40. package/dist/tools/discoveryFactory.d.ts.map +1 -1
  41. package/dist/tools/function/scanner.d.ts.map +1 -1
  42. package/dist/tools/util/toolDescriptor.d.ts +1 -1
  43. package/dist/tools/util/toolDescriptor.d.ts.map +1 -1
  44. package/dist/utils/cli/index.cjs +23 -26
  45. package/dist/utils/cli/index.cjs.map +1 -1
  46. package/dist/utils/cli/index.js +9 -12
  47. package/dist/utils/cli/index.js.map +1 -1
  48. package/package.json +6 -20
  49. package/dist/api/main.cjs +0 -21
  50. package/dist/api/main.cjs.map +0 -1
  51. package/dist/api/main.d.ts +0 -6
  52. package/dist/api/main.d.ts.map +0 -1
  53. package/dist/api/main.js +0 -12
  54. package/dist/api/main.js.map +0 -1
  55. package/dist/chunk-5HSGVA6S.cjs.map +0 -1
  56. package/dist/chunk-ACSGEQAY.js +0 -258
  57. package/dist/chunk-ACSGEQAY.js.map +0 -1
  58. package/dist/chunk-HEVWKBBQ.js.map +0 -1
  59. package/dist/chunk-LHKEJNKL.cjs.map +0 -1
  60. package/dist/chunk-ODEHUAR4.js +0 -33
  61. package/dist/chunk-ODEHUAR4.js.map +0 -1
  62. package/dist/chunk-PYCCJF7C.cjs.map +0 -1
  63. package/dist/chunk-QEJF3KDV.cjs +0 -38
  64. package/dist/chunk-QEJF3KDV.cjs.map +0 -1
  65. package/dist/chunk-QXQ4477T.js +0 -49
  66. package/dist/chunk-QXQ4477T.js.map +0 -1
  67. package/dist/chunk-RZTTO5MQ.js +0 -65
  68. package/dist/chunk-RZTTO5MQ.js.map +0 -1
  69. package/dist/chunk-W2WJOS5Z.js.map +0 -1
  70. package/dist/chunk-WUMLZERG.js.map +0 -1
  71. package/dist/chunk-XPGHS4W7.cjs +0 -73
  72. package/dist/chunk-XPGHS4W7.cjs.map +0 -1
  73. package/dist/chunk-XW52LOLP.cjs +0 -261
  74. package/dist/chunk-XW52LOLP.cjs.map +0 -1
  75. package/dist/chunk-ZDSZHEQU.cjs +0 -52
  76. package/dist/chunk-ZDSZHEQU.cjs.map +0 -1
  77. package/dist/config/index.d.ts +0 -12
  78. package/dist/config/index.d.ts.map +0 -1
  79. package/dist/config/ref.d.ts +0 -9
  80. package/dist/config/ref.d.ts.map +0 -1
  81. package/dist/core/index.cjs +0 -20
  82. package/dist/core/index.cjs.map +0 -1
  83. package/dist/core/index.d.ts +0 -7
  84. package/dist/core/index.d.ts.map +0 -1
  85. package/dist/core/index.js +0 -3
  86. package/dist/core/index.js.map +0 -1
  87. package/dist/core/runtime.cjs +0 -26
  88. package/dist/core/runtime.cjs.map +0 -1
  89. package/dist/core/runtime.d.ts +0 -12
  90. package/dist/core/runtime.d.ts.map +0 -1
  91. package/dist/core/runtime.js +0 -5
  92. package/dist/core/runtime.js.map +0 -1
  93. package/dist/extension.cjs.map +0 -1
  94. package/dist/extension.d.ts +0 -6
  95. package/dist/extension.d.ts.map +0 -1
  96. package/dist/extension.js.map +0 -1
  97. package/dist/security.cjs +0 -193
  98. package/dist/security.cjs.map +0 -1
  99. package/dist/security.d.ts +0 -6
  100. package/dist/security.d.ts.map +0 -1
  101. package/dist/security.js +0 -182
  102. package/dist/security.js.map +0 -1
package/dist/index.js CHANGED
@@ -1,12 +1,260 @@
1
- export { createAgentTools } from './chunk-ACSGEQAY.js';
2
- import './chunk-NEMGE573.js';
3
- import './chunk-W2WJOS5Z.js';
4
- import './chunk-NTWOVFEY.js';
5
- import './chunk-3D7XYAZO.js';
6
- import './chunk-HEVWKBBQ.js';
7
- import './chunk-QXQ4477T.js';
8
- import './chunk-WUMLZERG.js';
9
- import './chunk-RZTTO5MQ.js';
10
- import './chunk-ODEHUAR4.js';
1
+ import { loadExtensionManifest } from './chunk-IJVVH4JN.js';
2
+ import { isBarePackageDescriptor, expandToolDescriptorsToRegistryNames, loadAllExtensionsFromToolYamlSync, createRuntimeFromConfigSync, loadToolConfig, resolveSandboxedPath, fileDescriptorToPackagePrefix, npmDescriptorToPackagePrefixWithVersion } from './chunk-BBNQ6AWK.js';
3
+ import { LANGCHAIN_KIND } from './chunk-SNN4QJ5Z.js';
4
+ import './chunk-IVL4TBFB.js';
5
+ import './chunk-BDUSB6GT.js';
6
+ import { enrichSpecWithCanonicalSchema } from './chunk-NTWOVFEY.js';
7
+ import { getDefaultAgentContext, AgentContextTokens, deepMerge, stripNullishObjectFields } from '@easynet/agent-common';
8
+ import { DynamicStructuredTool } from '@langchain/core/tools';
9
+ import { fileURLToPath } from 'url';
10
+ import { dirname, resolve } from 'path';
11
+ import { existsSync } from 'fs';
12
+
13
+ function getArgsSchemaIfWrapped(inputSchema) {
14
+ const s = inputSchema;
15
+ if (s?.type !== "object" || !s.properties || typeof s.properties !== "object") return null;
16
+ const args = s.properties.args;
17
+ if (args != null && typeof args === "object" && args.type === "object" && args.properties != null) {
18
+ return args;
19
+ }
20
+ return null;
21
+ }
22
+ function hasArgsWrapper(inputSchema) {
23
+ return getArgsSchemaIfWrapped(inputSchema) !== null;
24
+ }
25
+ function schemaForLangChain(inputSchema) {
26
+ const wrapped = getArgsSchemaIfWrapped(inputSchema);
27
+ if (wrapped !== null) return wrapped;
28
+ return inputSchema;
29
+ }
30
+ function buildIntent(toolName, inputSchema, args) {
31
+ return {
32
+ tool: toolName,
33
+ args: hasArgsWrapper(inputSchema) ? { args } : args,
34
+ purpose: LANGCHAIN_KIND
35
+ };
36
+ }
37
+ function normalizeArgs(args) {
38
+ return stripNullishObjectFields(args ?? {});
39
+ }
40
+ function serializeToolResult(result) {
41
+ if (result.ok) {
42
+ return typeof result.result === "string" ? result.result : JSON.stringify(result.result);
43
+ }
44
+ const err = result.error;
45
+ const message = err?.message ?? "Tool failed";
46
+ const details = err?.details;
47
+ return JSON.stringify(
48
+ details != null ? { error: message, details } : { error: message }
49
+ );
50
+ }
51
+ var DEFAULT_CTX_FACTORY = () => ({
52
+ requestId: `lc-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,
53
+ taskId: `task-${Date.now()}`,
54
+ permissions: [
55
+ "read:web",
56
+ "read:fs",
57
+ "write:fs",
58
+ "read:db",
59
+ "write:db",
60
+ "network",
61
+ "workflow",
62
+ "danger:destructive"
63
+ ]
64
+ });
65
+ var LangChainToolsHub = class {
66
+ constructor(runtime, ctxFactory = DEFAULT_CTX_FACTORY) {
67
+ this.runtime = runtime;
68
+ this.ctxFactory = ctxFactory;
69
+ }
70
+ /**
71
+ * Returns all registered tools as LangChain StructuredTool[].
72
+ * Each tool invokes the runtime through the full pipeline (policy, HITL, etc.).
73
+ */
74
+ getLangChainTools() {
75
+ const registry = this.runtime.getRegistry();
76
+ const specs = registry.snapshot();
77
+ return specs.map((spec) => this.specToLangChainTool(spec));
78
+ }
79
+ /**
80
+ * Returns LangChain tools for a subset of tools (by name or query).
81
+ */
82
+ getLangChainToolsForNames(toolNames) {
83
+ const registry = this.runtime.getRegistry();
84
+ const set = new Set(toolNames);
85
+ const specs = registry.snapshot().filter((s) => set.has(s.name));
86
+ return specs.map((spec) => this.specToLangChainTool(spec));
87
+ }
88
+ specToLangChainTool(spec) {
89
+ const runtime = this.runtime;
90
+ const ctxFactory = this.ctxFactory;
91
+ const enriched = enrichSpecWithCanonicalSchema(spec);
92
+ const schema = schemaForLangChain(enriched.inputSchema);
93
+ return new DynamicStructuredTool({
94
+ name: spec.name,
95
+ description: spec.description ?? `Tool: ${spec.name}`,
96
+ schema,
97
+ func: async (args) => {
98
+ const normalizedArgs = normalizeArgs(args);
99
+ const intent = buildIntent(spec.name, enriched.inputSchema, normalizedArgs);
100
+ const ctx = ctxFactory();
101
+ const result = await runtime.invoke(intent, ctx);
102
+ return serializeToolResult(result);
103
+ }
104
+ });
105
+ }
106
+ };
107
+ function mergeHostLists(a, b) {
108
+ const seen = /* @__PURE__ */ new Set();
109
+ const out = [];
110
+ for (const list of [a ?? [], b ?? []]) {
111
+ for (const h of list) {
112
+ if (!seen.has(h)) {
113
+ seen.add(h);
114
+ out.push(h);
115
+ }
116
+ }
117
+ }
118
+ return out;
119
+ }
120
+ function resolveEmbeddedToolConfigPath() {
121
+ const moduleDir = dirname(fileURLToPath(import.meta.url));
122
+ const candidates = [
123
+ resolve(moduleDir, "../../config/tool.yaml"),
124
+ // src/api -> config
125
+ resolve(moduleDir, "../config/tool.yaml"),
126
+ // dist/* -> config
127
+ resolve(process.cwd(), "config/tool.yaml")
128
+ // fallback for local app runtime
129
+ ];
130
+ for (const candidate of candidates) {
131
+ if (existsSync(candidate)) return candidate;
132
+ }
133
+ return candidates[0];
134
+ }
135
+ var EMBEDDED_TOOL_CONFIG_PATH = resolveEmbeddedToolConfigPath();
136
+ function collectExtensionEmbeddedDefaults(exts) {
137
+ const merged = {};
138
+ for (const ext of exts) {
139
+ const configPath = [resolve(ext.packageRoot, "dist/config/tool.yaml"), resolve(ext.packageRoot, "config/tool.yaml")].find(
140
+ existsSync
141
+ ) ?? "";
142
+ if (!configPath) continue;
143
+ try {
144
+ const toolDefaults = loadToolConfig(configPath).toolDefaults ?? {};
145
+ if (Object.keys(toolDefaults).length === 0) continue;
146
+ const manifest = loadExtensionManifest(ext.packageRoot);
147
+ const ownToolNames = /* @__PURE__ */ new Set();
148
+ for (const e of manifest.entries) {
149
+ if (e.name) ownToolNames.add(e.name);
150
+ if (e.sourcePath) {
151
+ ownToolNames.add(e.sourcePath.replace(/^src\//, "").replace(/\//g, "."));
152
+ }
153
+ }
154
+ for (const [k, v] of Object.entries(toolDefaults)) {
155
+ if (ownToolNames.has(k)) {
156
+ merged[k] = v;
157
+ }
158
+ }
159
+ } catch {
160
+ }
161
+ }
162
+ return merged;
163
+ }
164
+ function loadMergedToolConfig(overridePath) {
165
+ const baseConfig = loadToolConfig(EMBEDDED_TOOL_CONFIG_PATH);
166
+ if (!overridePath) return baseConfig;
167
+ const overrideConfig = loadToolConfig(overridePath);
168
+ return deepMerge({}, baseConfig, overrideConfig);
169
+ }
170
+ function runtimeOptionsFromConfig(opts, toolConfig, configPathForResolve, extensionEmbeddedDefaults) {
171
+ const coreTools = opts.coreTools ?? { sandboxRoot: process.cwd(), allowedHosts: [], enableSandboxValidation: false };
172
+ {
173
+ const updates = {};
174
+ if (toolConfig.sandboxedPath && typeof toolConfig.sandboxedPath === "string") {
175
+ updates.sandboxRoot = resolveSandboxedPath(configPathForResolve, toolConfig.sandboxedPath);
176
+ }
177
+ if (typeof toolConfig.enableSandboxValidation === "boolean") {
178
+ updates.enableSandboxValidation = toolConfig.enableSandboxValidation;
179
+ } else if (coreTools.enableSandboxValidation == null) {
180
+ updates.enableSandboxValidation = false;
181
+ }
182
+ updates.allowedHosts = mergeHostLists(coreTools.allowedHosts, toolConfig.allowedHosts);
183
+ updates.blockedHosts = mergeHostLists(coreTools.blockedHosts, toolConfig.blockedHosts);
184
+ if (Array.isArray(toolConfig.blockedCidrs) && toolConfig.blockedCidrs.length > 0) {
185
+ updates.blockedCidrs = toolConfig.blockedCidrs;
186
+ } else if (coreTools.blockedCidrs?.length) {
187
+ updates.blockedCidrs = coreTools.blockedCidrs;
188
+ }
189
+ let hasToolDefaults = false;
190
+ const flatOverrides = {
191
+ ...extensionEmbeddedDefaults,
192
+ ...coreTools.toolOverrides
193
+ };
194
+ if (Object.keys(extensionEmbeddedDefaults).length > 0) hasToolDefaults = true;
195
+ if (toolConfig.toolDefaults != null && Object.keys(toolConfig.toolDefaults).length > 0) {
196
+ Object.assign(flatOverrides, toolConfig.toolDefaults);
197
+ hasToolDefaults = true;
198
+ }
199
+ const packageDefaults = { ...coreTools.packageDefaults };
200
+ if (toolConfig.packageToolDefaults != null && Object.keys(toolConfig.packageToolDefaults).length > 0) {
201
+ for (const [descriptor, pkgConfig] of Object.entries(toolConfig.packageToolDefaults)) {
202
+ const prefix = descriptor.startsWith("file:") ? fileDescriptorToPackagePrefix(descriptor) : npmDescriptorToPackagePrefixWithVersion(descriptor);
203
+ if (!prefix) continue;
204
+ const pkgDefaults = pkgConfig?.defaults != null && typeof pkgConfig.defaults === "object" && !Array.isArray(pkgConfig.defaults) ? pkgConfig.defaults : {};
205
+ if (Object.keys(pkgDefaults).length > 0) {
206
+ packageDefaults[prefix] = pkgDefaults;
207
+ }
208
+ const toolConfigs = pkgConfig?.tools != null && typeof pkgConfig.tools === "object" && !Array.isArray(pkgConfig.tools) ? pkgConfig.tools : {};
209
+ for (const [toolName, config] of Object.entries(toolConfigs)) {
210
+ if (config != null && typeof config === "object") {
211
+ hasToolDefaults = true;
212
+ flatOverrides[`${prefix}::${toolName}`] = { ...pkgDefaults, ...config };
213
+ }
214
+ }
215
+ }
216
+ if (Object.keys(packageDefaults).length > 0) {
217
+ updates.packageDefaults = packageDefaults;
218
+ }
219
+ }
220
+ if (hasToolDefaults) {
221
+ updates.toolOverrides = flatOverrides;
222
+ }
223
+ if (Object.keys(updates).length > 0) return { ...opts, coreTools: { ...coreTools, ...updates } };
224
+ }
225
+ return { ...opts, coreTools };
226
+ }
227
+ function buildRuntimeAndHub(options = {}) {
228
+ const configPathForResolve = options.configFilePath ?? EMBEDDED_TOOL_CONFIG_PATH;
229
+ const mergedToolConfig = loadMergedToolConfig(options.configFilePath);
230
+ const extensionEmbeddedDefaults = collectExtensionEmbeddedDefaults(
231
+ loadAllExtensionsFromToolYamlSync(configPathForResolve)
232
+ );
233
+ const runtimeOpts = runtimeOptionsFromConfig(options, mergedToolConfig, configPathForResolve, extensionEmbeddedDefaults);
234
+ const { runtime } = createRuntimeFromConfigSync(runtimeOpts);
235
+ const hub = new LangChainToolsHub(runtime);
236
+ return { runtime, hub, mergedToolConfig };
237
+ }
238
+ function createLangChainAgentTools(options) {
239
+ const opts = typeof options === "string" ? { configFilePath: options } : options ?? {};
240
+ const { runtime, hub, mergedToolConfig } = buildRuntimeAndHub(opts);
241
+ const names = Array.isArray(mergedToolConfig.tools) ? mergedToolConfig.tools : [];
242
+ if (names.length > 0) {
243
+ const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);
244
+ const allBarePackages = names.every((n) => isBarePackageDescriptor(String(n)));
245
+ if (allBarePackages) return hub.getLangChainTools();
246
+ return hub.getLangChainToolsForNames(expandToolDescriptorsToRegistryNames(names, registryNames));
247
+ }
248
+ return hub.getLangChainTools();
249
+ }
250
+
251
+ // src/api/register-tools.ts
252
+ function createAgentTools(options) {
253
+ const tools = createLangChainAgentTools(options);
254
+ getDefaultAgentContext().set(AgentContextTokens.Tools, tools);
255
+ return tools;
256
+ }
257
+
258
+ export { createAgentTools };
11
259
  //# sourceMappingURL=index.js.map
12
260
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
1
+ {"version":3,"sources":["../src/api/adapters/LangChainToolsHub.ts","../src/api/createAgentTools.ts","../src/api/register-tools.ts"],"names":[],"mappings":"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","file":"index.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 createAgentTools() from @easynet/agent-tool, which loads from tool.yaml and returns\n * StructuredTool[]. Use LangChainToolsHub when you need a custom runtime or ctxFactory.\n *\n * Use: new LangChainToolsHub(runtime, ctxFactory).getLangChainTools()\n */\n\nimport { DynamicStructuredTool, type StructuredToolInterface } from \"@langchain/core/tools\";\nimport { stripNullishObjectFields } from \"@easynet/agent-common\";\nimport type { PTCRuntime } from \"../../core/runtime/PTCRuntime.js\";\nimport type { ToolSpec } from \"../../core/types/ToolSpec.js\";\nimport type { 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 * Standalone tool creation functions. Each function:\n * - Uses the embedded config/tool.yaml as the default base.\n * - If a configFilePath is provided, merges it on top of the default.\n * - If no options are provided at all, behaves as if only the embedded default is used.\n *\n * Public module API uses createAgentTools() in register-tools.ts.\n * This file keeps internal builders for LangChain / MCP / OpenAPI outputs.\n */\n\nimport { loadToolConfig, resolveSandboxedPath } from \"../tools/util/toolConfig.js\";\nimport type { ToolYamlShape } from \"../tools/util/toolConfig.js\";\nimport { loadExtensionManifest } from \"./extension/registerFromManifest.js\";\nimport {\n expandToolDescriptorsToRegistryNames,\n isBarePackageDescriptor,\n npmDescriptorToPackagePrefixWithVersion,\n fileDescriptorToPackagePrefix,\n} from \"../tools/util/toolDescriptor.js\";\nimport { deepMerge } from \"@easynet/agent-common\";\nimport { createRuntimeFromConfigSync, loadAllExtensionsFromToolYamlSync } from \"./runtimeFromConfig.js\";\nimport type { CreateRuntimeOptions, LoadedExtension } from \"./runtimeFromConfig.js\";\nimport { LangChainToolsHub } from \"./adapters/LangChainToolsHub.js\";\nimport { createMCPServer, type MCPServerOptions, type McpServer } from \"./expose/mcpServer.js\";\nimport {\n createOpenAPIHttpServer,\n type OpenAPIExpressApp,\n type OpenAPIHttpServerOptions,\n} from \"./expose/openapiHttp.js\";\nimport type { StructuredToolInterface } from \"@langchain/core/tools\";\nimport { fileURLToPath } from \"node:url\";\nimport { dirname, resolve } from \"node:path\";\nimport { existsSync } from \"node:fs\";\n\nexport interface CreateAgentToolsOptions extends CreateRuntimeOptions {\n /** Path to an override tool.yaml; its values are merged on top of the embedded default config/tool.yaml */\n configFilePath?: string;\n}\n\n/** Merge host lists from multiple sources (e.g. tool.yaml + programmatic). Union, dedup, preserves order. */\nfunction mergeHostLists(a?: string[], b?: string[]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const list of [a ?? [], b ?? []]) {\n for (const h of list) {\n if (!seen.has(h)) {\n seen.add(h);\n out.push(h);\n }\n }\n }\n return out;\n}\n\nfunction resolveEmbeddedToolConfigPath(): string {\n const moduleDir = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n resolve(moduleDir, \"../../config/tool.yaml\"), // src/api -> config\n resolve(moduleDir, \"../config/tool.yaml\"), // dist/* -> config\n resolve(process.cwd(), \"config/tool.yaml\"), // fallback for local app runtime\n ];\n for (const candidate of candidates) {\n if (existsSync(candidate)) return candidate;\n }\n return candidates[0]!;\n}\n\nconst EMBEDDED_TOOL_CONFIG_PATH = resolveEmbeddedToolConfigPath();\n\n/**\n * For each loaded extension, load its embedded config/tool.yaml (layer 2) and collect\n * the toolDefaults into a flat map. Later entries in the list win over earlier ones.\n *\n * Security constraint: each extension's embedded config may only set defaults for tools\n * that belong to that extension (verified against its own manifest). Keys that reference\n * tools from other extensions or global config fields are silently ignored.\n */\nfunction collectExtensionEmbeddedDefaults(\n exts: LoadedExtension[],\n): Record<string, Record<string, unknown>> {\n const merged: Record<string, Record<string, unknown>> = {};\n for (const ext of exts) {\n // Prefer dist/config/tool.yaml (published package); fall back to config/tool.yaml (local dev).\n const configPath =\n [resolve(ext.packageRoot, \"dist/config/tool.yaml\"), resolve(ext.packageRoot, \"config/tool.yaml\")].find(\n existsSync,\n ) ?? \"\";\n if (!configPath) continue;\n try {\n const toolDefaults = loadToolConfig(configPath).toolDefaults ?? {};\n if (Object.keys(toolDefaults).length === 0) continue;\n\n // Build the set of short names this extension owns from its manifest.\n // Include both the explicit name field and the dot-path derived from sourcePath\n // (e.g. \"listDir\" and \"fs.listDir\" for src/fs/listDir) so that config keys in\n // either format are accepted.\n const manifest = loadExtensionManifest(ext.packageRoot);\n const ownToolNames = new Set<string>();\n for (const e of manifest.entries) {\n if (e.name) ownToolNames.add(e.name);\n if (e.sourcePath) {\n ownToolNames.add(e.sourcePath.replace(/^src\\//, \"\").replace(/\\//g, \".\"));\n }\n }\n\n for (const [k, v] of Object.entries(toolDefaults)) {\n // Only allow keys that are short names of tools this extension registers.\n if (ownToolNames.has(k)) {\n merged[k] = v;\n }\n }\n } catch {\n // skip malformed extension config or missing manifest\n }\n }\n return merged;\n}\n\nfunction loadMergedToolConfig(overridePath?: string): ToolYamlShape {\n const baseConfig = loadToolConfig(EMBEDDED_TOOL_CONFIG_PATH);\n if (!overridePath) return baseConfig;\n const overrideConfig = loadToolConfig(overridePath);\n return deepMerge({} as ToolYamlShape, baseConfig, overrideConfig);\n}\n\nfunction runtimeOptionsFromConfig(\n opts: CreateAgentToolsOptions,\n toolConfig: ToolYamlShape,\n configPathForResolve: string,\n extensionEmbeddedDefaults: Record<string, Record<string, unknown>>,\n): CreateRuntimeOptions {\n const coreTools = opts.coreTools ?? { sandboxRoot: process.cwd(), allowedHosts: [], enableSandboxValidation: false };\n {\n const updates: {\n sandboxRoot?: string;\n enableSandboxValidation?: boolean;\n allowedHosts?: string[];\n blockedHosts?: string[];\n blockedCidrs?: string[];\n toolOverrides?: Record<string, Record<string, unknown>>;\n packageDefaults?: Record<string, Record<string, unknown>>;\n } = {};\n if (toolConfig.sandboxedPath && typeof toolConfig.sandboxedPath === \"string\") {\n updates.sandboxRoot = resolveSandboxedPath(configPathForResolve, toolConfig.sandboxedPath);\n }\n if (typeof toolConfig.enableSandboxValidation === \"boolean\") {\n updates.enableSandboxValidation = toolConfig.enableSandboxValidation;\n } else if (coreTools.enableSandboxValidation == null) {\n updates.enableSandboxValidation = false;\n }\n // Smart merge: union of allowedHosts and blockedHosts from yaml + programmatic (both lists always applied)\n updates.allowedHosts = mergeHostLists(coreTools.allowedHosts, toolConfig.allowedHosts);\n updates.blockedHosts = mergeHostLists(coreTools.blockedHosts, toolConfig.blockedHosts);\n if (Array.isArray(toolConfig.blockedCidrs) && toolConfig.blockedCidrs.length > 0) {\n updates.blockedCidrs = toolConfig.blockedCidrs;\n } else if (coreTools.blockedCidrs?.length) {\n updates.blockedCidrs = coreTools.blockedCidrs;\n }\n let hasToolDefaults = false;\n // Priority (low → high): extension embedded (layer 2) < programmatic coreTools < layer 1+3 toolDefaults\n const flatOverrides: Record<string, Record<string, unknown>> = {\n ...extensionEmbeddedDefaults,\n ...coreTools.toolOverrides,\n };\n if (Object.keys(extensionEmbeddedDefaults).length > 0) hasToolDefaults = true;\n if (toolConfig.toolDefaults != null && Object.keys(toolConfig.toolDefaults).length > 0) {\n Object.assign(flatOverrides, toolConfig.toolDefaults);\n hasToolDefaults = true;\n }\n const packageDefaults: Record<string, Record<string, unknown>> = { ...coreTools.packageDefaults };\n if (toolConfig.packageToolDefaults != null && Object.keys(toolConfig.packageToolDefaults).length > 0) {\n for (const [descriptor, pkgConfig] of Object.entries(toolConfig.packageToolDefaults)) {\n const prefix = descriptor.startsWith(\"file:\")\n ? fileDescriptorToPackagePrefix(descriptor)\n : npmDescriptorToPackagePrefixWithVersion(descriptor);\n if (!prefix) continue;\n const pkgDefaults =\n pkgConfig?.defaults != null && typeof pkgConfig.defaults === \"object\" && !Array.isArray(pkgConfig.defaults)\n ? (pkgConfig.defaults as Record<string, unknown>)\n : {};\n if (Object.keys(pkgDefaults).length > 0) {\n packageDefaults[prefix] = pkgDefaults;\n }\n const toolConfigs = pkgConfig?.tools != null && typeof pkgConfig.tools === \"object\" && !Array.isArray(pkgConfig.tools) ? pkgConfig.tools : {};\n for (const [toolName, config] of Object.entries(toolConfigs)) {\n if (config != null && typeof config === \"object\") {\n hasToolDefaults = true;\n flatOverrides[`${prefix}::${toolName}`] = { ...pkgDefaults, ...(config as Record<string, unknown>) };\n }\n }\n }\n if (Object.keys(packageDefaults).length > 0) {\n updates.packageDefaults = packageDefaults;\n }\n }\n if (hasToolDefaults) {\n updates.toolOverrides = flatOverrides;\n }\n if (Object.keys(updates).length > 0) return { ...opts, coreTools: { ...coreTools, ...updates } };\n }\n return { ...opts, coreTools };\n}\n\n/**\n * Build a ready-to-use runtime + hub from options.\n * - No options → embedded default config/tool.yaml only.\n * - options.configFilePath → override merged on top of embedded default.\n */\nfunction buildRuntimeAndHub(options: CreateAgentToolsOptions = {}): {\n runtime: ReturnType<typeof createRuntimeFromConfigSync>[\"runtime\"];\n hub: LangChainToolsHub;\n mergedToolConfig: ToolYamlShape;\n} {\n const configPathForResolve = options.configFilePath ?? EMBEDDED_TOOL_CONFIG_PATH;\n const mergedToolConfig = loadMergedToolConfig(options.configFilePath);\n // Collect layer-2 defaults from each extension's embedded config/tool.yaml.\n // loadAllExtensionsFromToolYamlSync is cheap here (require() is cached by Node.js).\n const extensionEmbeddedDefaults = collectExtensionEmbeddedDefaults(\n loadAllExtensionsFromToolYamlSync(configPathForResolve),\n );\n const runtimeOpts = runtimeOptionsFromConfig(options, mergedToolConfig, configPathForResolve, extensionEmbeddedDefaults);\n const { runtime } = createRuntimeFromConfigSync(runtimeOpts);\n const hub = new LangChainToolsHub(runtime);\n return { runtime, hub, mergedToolConfig };\n}\n\n/**\n * Internal: create LangChain tools from config/runtime.\n *\n * - No argument → uses embedded default config/tool.yaml.\n * - options.configFilePath → merged on top of embedded default.\n * - All other CreateAgentToolsOptions (coreTools, etc.) are applied as programmatic overrides.\n *\n * @example\n * Internal helper consumed by createAgentTools().\n */\nexport function createLangChainAgentTools(\n options?: CreateAgentToolsOptions | string,\n): StructuredToolInterface[] {\n const opts: CreateAgentToolsOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const { runtime, hub, mergedToolConfig } = buildRuntimeAndHub(opts);\n\n const names = Array.isArray(mergedToolConfig.tools) ? mergedToolConfig.tools : [];\n if (names.length > 0) {\n const registryNames = runtime.getRegistry().snapshot().map((s) => s.name);\n const allBarePackages = names.every((n) => isBarePackageDescriptor(String(n)));\n if (allBarePackages) return hub.getLangChainTools();\n return hub.getLangChainToolsForNames(expandToolDescriptorsToRegistryNames(names, registryNames));\n }\n return hub.getLangChainTools();\n}\n\n/**\n * Internal: create an MCP server from tool config.\n *\n * - No argument → uses embedded default config/tool.yaml.\n * - options.configFilePath → merged on top of embedded default.\n * - options.mcp → passed to the MCP server (name, version, execContextFactory).\n *\n * @example\n * Internal helper consumed by createAgentTools() expose flows.\n */\nexport async function createMcpServer(\n options?: (CreateAgentToolsOptions & MCPServerOptions) | string,\n): Promise<McpServer> {\n const opts: CreateAgentToolsOptions & MCPServerOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const { runtime, mergedToolConfig } = buildRuntimeAndHub(opts);\n const serverOpts: MCPServerOptions = {\n name: opts.name ?? mergedToolConfig.mcp?.name,\n version: opts.version ?? mergedToolConfig.mcp?.version,\n execContextFactory: opts.execContextFactory,\n };\n const { server } = await createMCPServer(runtime, serverOpts);\n return server;\n}\n\n/**\n * Internal: create an OpenAPI / Swagger HTTP server from tool config.\n *\n * - No argument → uses embedded default config/tool.yaml.\n * - options.configFilePath → merged on top of embedded default.\n * - options.port, host, basePath → passed to the HTTP server; tool.yaml openapi: section provides defaults.\n *\n * @example\n * Internal helper consumed by createAgentTools() expose flows.\n */\nexport async function createOpenAPIServer(\n options?: (CreateAgentToolsOptions & OpenAPIHttpServerOptions) | string,\n): Promise<OpenAPIExpressApp> {\n const opts: CreateAgentToolsOptions & OpenAPIHttpServerOptions =\n typeof options === \"string\" ? { configFilePath: options } : options ?? {};\n const { runtime, mergedToolConfig } = buildRuntimeAndHub(opts);\n const serverOpts: OpenAPIHttpServerOptions = {\n host: opts.host ?? mergedToolConfig.openapi?.host,\n port: opts.port ?? mergedToolConfig.openapi?.port,\n basePath: opts.basePath ?? mergedToolConfig.openapi?.basePath,\n execContextFactory: opts.execContextFactory,\n };\n return createOpenAPIHttpServer(runtime, serverOpts);\n}\n","import { AgentContextTokens, getDefaultAgentContext } from \"@easynet/agent-common\";\nimport { createLangChainAgentTools, type CreateAgentToolsOptions } from \"./createAgentTools.js\";\nimport type { StructuredToolInterface } from \"@langchain/core/tools\";\n\nexport interface CreateAgentToolsModuleOptions extends CreateAgentToolsOptions {}\n\n/**\n * Initialize LangChain agent tools and register them into the process-level singleton AgentContext.\n *\n * Sets:\n * - AgentContextTokens.Tools → StructuredToolInterface[]\n *\n * @example\n * ```ts\n * createAgentTools({ configFilePath: \"config/tool.yaml\" });\n * ```\n */\nexport function createAgentTools(options?: CreateAgentToolsModuleOptions): StructuredToolInterface[] {\n const tools = createLangChainAgentTools(options);\n getDefaultAgentContext().set(AgentContextTokens.Tools, tools);\n return tools;\n}\n"]}
@@ -1,8 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkF4HS7H7K_cjs = require('./chunk-F4HS7H7K.cjs');
4
- var chunkLHKEJNKL_cjs = require('./chunk-LHKEJNKL.cjs');
5
- require('./chunk-QEJF3KDV.cjs');
3
+ var chunkQYY6PNIB_cjs = require('./chunk-QYY6PNIB.cjs');
4
+ var chunkAGLGFQUW_cjs = require('./chunk-AGLGFQUW.cjs');
5
+ var chunkJW4EMVTE_cjs = require('./chunk-JW4EMVTE.cjs');
6
+ var promises = require('dns/promises');
6
7
  var async_hooks = require('async_hooks');
7
8
  var path4 = require('path');
8
9
  var url = require('url');
@@ -13,6 +14,180 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
13
14
 
14
15
  var path4__default = /*#__PURE__*/_interopDefault(path4);
15
16
 
17
+ async function validateUrl(url, options) {
18
+ let parsed;
19
+ try {
20
+ parsed = new URL(url);
21
+ } catch {
22
+ throw chunkAGLGFQUW_cjs.createTaggedError(
23
+ "HTTP_DISALLOWED_HOST",
24
+ `Invalid URL: ${url}`,
25
+ { url }
26
+ );
27
+ }
28
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
29
+ throw chunkAGLGFQUW_cjs.createTaggedError(
30
+ "HTTP_DISALLOWED_HOST",
31
+ `Protocol not allowed: ${parsed.protocol}. Only http: and https: are supported.`,
32
+ { url, protocol: parsed.protocol }
33
+ );
34
+ }
35
+ const hostname = parsed.hostname;
36
+ if (!isHostAllowed(hostname, options.allowedHosts)) {
37
+ throw chunkAGLGFQUW_cjs.createTaggedError(
38
+ "HTTP_DISALLOWED_HOST",
39
+ `Host "${hostname}" is not in the allowed hosts list`,
40
+ { url, hostname, allowedHosts: options.allowedHosts }
41
+ );
42
+ }
43
+ if (isHostBlocked(hostname, options.blockedHosts)) {
44
+ throw chunkAGLGFQUW_cjs.createTaggedError(
45
+ "HTTP_DISALLOWED_HOST",
46
+ `Host "${hostname}" is in the blocked hosts list`,
47
+ { url, hostname, blockedHosts: options.blockedHosts }
48
+ );
49
+ }
50
+ try {
51
+ const { address } = await promises.lookup(hostname);
52
+ if (isIpInBlockedCidrs(address, options.blockedCidrs)) {
53
+ throw chunkAGLGFQUW_cjs.createTaggedError(
54
+ "HTTP_DISALLOWED_HOST",
55
+ `Host "${hostname}" resolves to blocked IP: ${address}`,
56
+ { url, hostname, resolvedIp: address }
57
+ );
58
+ }
59
+ } catch (err) {
60
+ if (err instanceof Error && err.kind === "HTTP_DISALLOWED_HOST") {
61
+ throw err;
62
+ }
63
+ throw chunkAGLGFQUW_cjs.createTaggedError(
64
+ "HTTP_DISALLOWED_HOST",
65
+ `DNS resolution failed for host "${hostname}": ${err instanceof Error ? err.message : String(err)}`,
66
+ { url, hostname }
67
+ );
68
+ }
69
+ return parsed;
70
+ }
71
+ function isHostAllowed(hostname, allowedHosts) {
72
+ for (const pattern of allowedHosts) {
73
+ if (pattern === "*") {
74
+ return true;
75
+ }
76
+ if (pattern.startsWith("*.")) {
77
+ const suffix = pattern.slice(1);
78
+ if (hostname.endsWith(suffix) || hostname === pattern.slice(2)) {
79
+ return true;
80
+ }
81
+ } else if (hostname === pattern) {
82
+ return true;
83
+ }
84
+ }
85
+ return false;
86
+ }
87
+ function isHostBlocked(hostname, blockedHosts) {
88
+ for (const pattern of blockedHosts) {
89
+ if (pattern === "*") {
90
+ return true;
91
+ }
92
+ if (pattern.startsWith("*.")) {
93
+ const suffix = pattern.slice(1);
94
+ if (hostname.endsWith(suffix) || hostname === pattern.slice(2)) {
95
+ return true;
96
+ }
97
+ } else if (hostname === pattern) {
98
+ return true;
99
+ }
100
+ }
101
+ return false;
102
+ }
103
+ function isIpInBlockedCidrs(ip, cidrs) {
104
+ const normalizedIp = normalizeIp(ip);
105
+ if (!normalizedIp) return false;
106
+ for (const cidr of cidrs) {
107
+ if (cidr.includes(":")) {
108
+ if (!ip.includes(":")) continue;
109
+ if (isIpv6InCidr(ip, cidr)) return true;
110
+ } else {
111
+ if (isIpv4InCidr(normalizedIp, cidr)) return true;
112
+ }
113
+ }
114
+ return false;
115
+ }
116
+ function normalizeIp(ip) {
117
+ if (ip.startsWith("::ffff:")) {
118
+ return ip.slice(7);
119
+ }
120
+ if (/^\d+\.\d+\.\d+\.\d+$/.test(ip)) {
121
+ return ip;
122
+ }
123
+ return null;
124
+ }
125
+ function isIpv4InCidr(ip, cidr) {
126
+ const [cidrIp, prefixStr] = cidr.split("/");
127
+ if (!cidrIp || !prefixStr) return false;
128
+ const prefix = parseInt(prefixStr, 10);
129
+ if (isNaN(prefix) || prefix < 0 || prefix > 32) return false;
130
+ const ipNum = ipv4ToNum(ip);
131
+ const cidrNum = ipv4ToNum(cidrIp);
132
+ if (ipNum === null || cidrNum === null) return false;
133
+ const mask = prefix === 0 ? 0 : -1 << 32 - prefix >>> 0;
134
+ return (ipNum & mask) === (cidrNum & mask);
135
+ }
136
+ function ipv4ToNum(ip) {
137
+ const parts = ip.split(".");
138
+ if (parts.length !== 4) return null;
139
+ let num = 0;
140
+ for (const part of parts) {
141
+ const n = parseInt(part, 10);
142
+ if (isNaN(n) || n < 0 || n > 255) return null;
143
+ num = num << 8 | n;
144
+ }
145
+ return num >>> 0;
146
+ }
147
+ function isIpv6InCidr(ip, cidr) {
148
+ const [cidrIp, prefixStr] = cidr.split("/");
149
+ if (!cidrIp || !prefixStr) return false;
150
+ const prefix = parseInt(prefixStr, 10);
151
+ if (isNaN(prefix)) return false;
152
+ const ipBytes = expandIpv6(ip);
153
+ const cidrBytes = expandIpv6(cidrIp);
154
+ if (!ipBytes || !cidrBytes) return false;
155
+ const fullBytes = Math.floor(prefix / 8);
156
+ for (let i = 0; i < fullBytes && i < 16; i++) {
157
+ if (ipBytes[i] !== cidrBytes[i]) return false;
158
+ }
159
+ const remainingBits = prefix % 8;
160
+ if (remainingBits > 0 && fullBytes < 16) {
161
+ const mask = -1 << 8 - remainingBits & 255;
162
+ if ((ipBytes[fullBytes] & mask) !== (cidrBytes[fullBytes] & mask)) return false;
163
+ }
164
+ return true;
165
+ }
166
+ function expandIpv6(ip) {
167
+ const zoneIdx = ip.indexOf("%");
168
+ if (zoneIdx !== -1) ip = ip.slice(0, zoneIdx);
169
+ const parts = ip.split("::");
170
+ if (parts.length > 2) return null;
171
+ const bytes = new Array(16).fill(0);
172
+ const expandGroup = (group) => {
173
+ if (!group) return [];
174
+ return group.split(":").flatMap((hex) => {
175
+ const val = parseInt(hex || "0", 16);
176
+ return [val >> 8 & 255, val & 255];
177
+ });
178
+ };
179
+ if (parts.length === 1) {
180
+ const expanded = expandGroup(parts[0]);
181
+ if (expanded.length !== 16) return null;
182
+ return expanded;
183
+ }
184
+ const left = expandGroup(parts[0]);
185
+ const right = expandGroup(parts[1]);
186
+ if (left.length + right.length > 16) return null;
187
+ for (let i = 0; i < left.length; i++) bytes[i] = left[i];
188
+ for (let i = 0; i < right.length; i++) bytes[16 - right.length + i] = right[i];
189
+ return bytes;
190
+ }
16
191
  function createContextRunner() {
17
192
  const storage = new async_hooks.AsyncLocalStorage();
18
193
  return {
@@ -85,9 +260,9 @@ function registerExtension(registry, options) {
85
260
  const { packagePath, kind: kindOpt, config, getContextRunner, only, namePrefixes } = options;
86
261
  const packageRoot = resolveExtensionPackageRoot(packagePath);
87
262
  const contextRunner = getContextRunner();
88
- const loaded = chunkF4HS7H7K_cjs.loadExtensionManifest(packagePath);
263
+ const loaded = chunkQYY6PNIB_cjs.loadExtensionManifest(packagePath);
89
264
  const kind = kindOpt ?? loaded.kind ?? "extension";
90
- chunkF4HS7H7K_cjs.registerToolsFromManifest(registry, {
265
+ chunkQYY6PNIB_cjs.registerToolsFromManifest(registry, {
91
266
  manifestPathOrDir: packagePath,
92
267
  kind,
93
268
  only,
@@ -181,7 +356,7 @@ function generateExtensionManifest(projectRoot = process.cwd(), options = {}) {
181
356
  const root = path4__default.default.resolve(projectRoot);
182
357
  const outDir = path4__default.default.resolve(options.outDir ?? path4__default.default.join(root, "dist"));
183
358
  const kind = options.kind ?? "core";
184
- const { specs, errors } = chunkLHKEJNKL_cjs.scanForTools({
359
+ const { specs, errors } = chunkJW4EMVTE_cjs.scanForTools({
185
360
  projectPath: root,
186
361
  include: options.include ?? ["**/*.ts"],
187
362
  tsconfigPath: options.tsconfigPath
@@ -248,15 +423,39 @@ function getGroupNamePrefixes(options) {
248
423
 
249
424
  Object.defineProperty(exports, "loadExtensionManifest", {
250
425
  enumerable: true,
251
- get: function () { return chunkF4HS7H7K_cjs.loadExtensionManifest; }
426
+ get: function () { return chunkQYY6PNIB_cjs.loadExtensionManifest; }
252
427
  });
253
428
  Object.defineProperty(exports, "loadToolYaml", {
254
429
  enumerable: true,
255
- get: function () { return chunkF4HS7H7K_cjs.loadToolYaml; }
430
+ get: function () { return chunkQYY6PNIB_cjs.loadToolYaml; }
256
431
  });
257
432
  Object.defineProperty(exports, "registerToolsFromManifest", {
258
433
  enumerable: true,
259
- get: function () { return chunkF4HS7H7K_cjs.registerToolsFromManifest; }
434
+ get: function () { return chunkQYY6PNIB_cjs.registerToolsFromManifest; }
435
+ });
436
+ Object.defineProperty(exports, "ToolRegistry", {
437
+ enumerable: true,
438
+ get: function () { return chunkAGLGFQUW_cjs.ToolRegistry; }
439
+ });
440
+ Object.defineProperty(exports, "createTaggedError", {
441
+ enumerable: true,
442
+ get: function () { return chunkAGLGFQUW_cjs.createTaggedError; }
443
+ });
444
+ Object.defineProperty(exports, "isRetryable", {
445
+ enumerable: true,
446
+ get: function () { return chunkAGLGFQUW_cjs.isRetryable; }
447
+ });
448
+ Object.defineProperty(exports, "resolveSandboxedPath", {
449
+ enumerable: true,
450
+ get: function () { return chunkAGLGFQUW_cjs.resolveSandboxedPath; }
451
+ });
452
+ Object.defineProperty(exports, "setSandboxValidationEnabled", {
453
+ enumerable: true,
454
+ get: function () { return chunkAGLGFQUW_cjs.setSandboxValidationEnabled; }
455
+ });
456
+ Object.defineProperty(exports, "withRetry", {
457
+ enumerable: true,
458
+ get: function () { return chunkAGLGFQUW_cjs.withRetry; }
260
459
  });
261
460
  Object.defineProperty(exports, "overrideWithConfig", {
262
461
  enumerable: true,
@@ -268,7 +467,9 @@ exports.createExtension = createExtension;
268
467
  exports.generateExtensionManifest = generateExtensionManifest;
269
468
  exports.generateManifest = generateManifest;
270
469
  exports.getGroupNamePrefixes = getGroupNamePrefixes;
470
+ exports.isIpInBlockedCidrs = isIpInBlockedCidrs;
271
471
  exports.registerExtension = registerExtension;
272
472
  exports.resolveExtensionPackageRoot = resolveExtensionPackageRoot;
273
- //# sourceMappingURL=extension.cjs.map
274
- //# sourceMappingURL=extension.cjs.map
473
+ exports.validateUrl = validateUrl;
474
+ //# sourceMappingURL=sdk.cjs.map
475
+ //# sourceMappingURL=sdk.cjs.map