@easynet/agent-tool 1.0.59 → 1.0.61

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 (81) hide show
  1. package/dist/api/expose/index.d.ts +1 -1
  2. package/dist/api/expose/index.d.ts.map +1 -1
  3. package/dist/api/expose/mcp-build/build.d.ts +1 -3
  4. package/dist/api/expose/mcp-build/build.d.ts.map +1 -1
  5. package/dist/api/expose/mcp-build/index.d.ts +2 -2
  6. package/dist/api/expose/mcp-build/index.d.ts.map +1 -1
  7. package/dist/api/expose/mcp-build/run.d.ts +1 -3
  8. package/dist/api/expose/mcp-build/run.d.ts.map +1 -1
  9. package/dist/api/main.cjs +19 -15
  10. package/dist/api/main.js +8 -4
  11. package/dist/build.cjs +31 -0
  12. package/dist/build.cjs.map +1 -0
  13. package/dist/build.d.ts +13 -0
  14. package/dist/build.d.ts.map +1 -0
  15. package/dist/build.js +6 -0
  16. package/dist/build.js.map +1 -0
  17. package/dist/chunk-45S2HPVU.js +463 -0
  18. package/dist/chunk-45S2HPVU.js.map +1 -0
  19. package/dist/{chunk-Y75CRPVF.js → chunk-5J27MF7S.js} +11 -12
  20. package/dist/chunk-5J27MF7S.js.map +1 -0
  21. package/dist/{chunk-JXYANBTH.cjs → chunk-HK4GTFTQ.cjs} +57 -1645
  22. package/dist/chunk-HK4GTFTQ.cjs.map +1 -0
  23. package/dist/chunk-JNIWNSCQ.cjs +494 -0
  24. package/dist/chunk-JNIWNSCQ.cjs.map +1 -0
  25. package/dist/{chunk-DPOLJN7F.cjs → chunk-NMZ4IMEW.cjs} +22 -25
  26. package/dist/chunk-NMZ4IMEW.cjs.map +1 -0
  27. package/dist/{chunk-A5C2MUNA.js → chunk-NVT4X4CB.js} +41 -1600
  28. package/dist/chunk-NVT4X4CB.js.map +1 -0
  29. package/dist/chunk-OG5ZSXQ5.cjs +1099 -0
  30. package/dist/chunk-OG5ZSXQ5.cjs.map +1 -0
  31. package/dist/{chunk-WQMHMPNC.cjs → chunk-PYCCJF7C.cjs} +2 -68
  32. package/dist/chunk-PYCCJF7C.cjs.map +1 -0
  33. package/dist/{chunk-IWM5B5DU.js → chunk-QPKBEU64.js} +4 -3
  34. package/dist/chunk-QPKBEU64.js.map +1 -0
  35. package/dist/chunk-QXQ4477T.js +49 -0
  36. package/dist/chunk-QXQ4477T.js.map +1 -0
  37. package/dist/chunk-RZTTO5MQ.js +65 -0
  38. package/dist/chunk-RZTTO5MQ.js.map +1 -0
  39. package/dist/{chunk-FCYBA7PR.js → chunk-WUMLZERG.js} +3 -62
  40. package/dist/chunk-WUMLZERG.js.map +1 -0
  41. package/dist/chunk-XPGHS4W7.cjs +73 -0
  42. package/dist/chunk-XPGHS4W7.cjs.map +1 -0
  43. package/dist/chunk-YRFUGA3C.js +1072 -0
  44. package/dist/chunk-YRFUGA3C.js.map +1 -0
  45. package/dist/chunk-ZDSZHEQU.cjs +52 -0
  46. package/dist/chunk-ZDSZHEQU.cjs.map +1 -0
  47. package/dist/{chunk-MUBZV65R.cjs → chunk-ZH5MH3AK.cjs} +16 -15
  48. package/dist/chunk-ZH5MH3AK.cjs.map +1 -0
  49. package/dist/core/runtime.cjs +6 -5
  50. package/dist/core/runtime.js +2 -1
  51. package/dist/extension.cjs +359 -0
  52. package/dist/extension.cjs.map +1 -0
  53. package/dist/extension.d.ts +6 -0
  54. package/dist/extension.d.ts.map +1 -0
  55. package/dist/extension.js +341 -0
  56. package/dist/extension.js.map +1 -0
  57. package/dist/index.cjs +17 -609
  58. package/dist/index.cjs.map +1 -1
  59. package/dist/index.d.ts +1 -25
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +8 -520
  62. package/dist/index.js.map +1 -1
  63. package/dist/security.cjs +193 -0
  64. package/dist/security.cjs.map +1 -0
  65. package/dist/security.d.ts +6 -0
  66. package/dist/security.d.ts.map +1 -0
  67. package/dist/security.js +182 -0
  68. package/dist/security.js.map +1 -0
  69. package/dist/utils/cli/index.cjs +25 -21
  70. package/dist/utils/cli/index.cjs.map +1 -1
  71. package/dist/utils/cli/index.js +13 -9
  72. package/dist/utils/cli/index.js.map +1 -1
  73. package/package.json +16 -2
  74. package/dist/chunk-A5C2MUNA.js.map +0 -1
  75. package/dist/chunk-DPOLJN7F.cjs.map +0 -1
  76. package/dist/chunk-FCYBA7PR.js.map +0 -1
  77. package/dist/chunk-IWM5B5DU.js.map +0 -1
  78. package/dist/chunk-JXYANBTH.cjs.map +0 -1
  79. package/dist/chunk-MUBZV65R.cjs.map +0 -1
  80. package/dist/chunk-WQMHMPNC.cjs.map +0 -1
  81. package/dist/chunk-Y75CRPVF.js.map +0 -1
package/dist/index.cjs CHANGED
@@ -1,644 +1,52 @@
1
1
  'use strict';
2
2
 
3
- var chunkMUBZV65R_cjs = require('./chunk-MUBZV65R.cjs');
4
- var chunkDPOLJN7F_cjs = require('./chunk-DPOLJN7F.cjs');
5
- var chunkJXYANBTH_cjs = require('./chunk-JXYANBTH.cjs');
6
- var chunkWQMHMPNC_cjs = require('./chunk-WQMHMPNC.cjs');
7
- var chunkQEJF3KDV_cjs = require('./chunk-QEJF3KDV.cjs');
3
+ var chunkZH5MH3AK_cjs = require('./chunk-ZH5MH3AK.cjs');
4
+ var chunkHK4GTFTQ_cjs = require('./chunk-HK4GTFTQ.cjs');
8
5
  require('./chunk-UUNG3GL3.cjs');
9
- var async_hooks = require('async_hooks');
10
- var path6 = require('path');
11
- var url = require('url');
12
- var fs = require('fs');
13
- var yaml = require('js-yaml');
14
- var promises = require('dns/promises');
6
+ require('./chunk-OG5ZSXQ5.cjs');
7
+ require('./chunk-JNIWNSCQ.cjs');
8
+ require('./chunk-ZDSZHEQU.cjs');
9
+ require('./chunk-PYCCJF7C.cjs');
10
+ require('./chunk-XPGHS4W7.cjs');
11
+ require('./chunk-QEJF3KDV.cjs');
15
12
 
16
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
17
13
 
18
- var path6__default = /*#__PURE__*/_interopDefault(path6);
19
- var yaml__default = /*#__PURE__*/_interopDefault(yaml);
20
-
21
- function createContextRunner() {
22
- const storage = new async_hooks.AsyncLocalStorage();
23
- return {
24
- runWith(ctx, fn) {
25
- return storage.run(ctx, fn);
26
- },
27
- getContext() {
28
- const ctx = storage.getStore();
29
- if (ctx === void 0) {
30
- throw new Error("Extension context not set; invoke only through the extension adapter.");
31
- }
32
- return ctx;
33
- }
34
- };
35
- }
36
- function unwrapArgsForHandler(spec, args) {
37
- if (args == null || typeof args !== "object" || Array.isArray(args)) return args;
38
- const s = spec.inputSchema;
39
- if (s?.type !== "object" || !s.properties || typeof s.properties !== "object") return args;
40
- const props = s.properties;
41
- const argsProp = props.args;
42
- if (argsProp != null && typeof argsProp === "object" && argsProp.type === "object" && argsProp.properties != null) {
43
- const obj = args;
44
- if (Object.keys(obj).length === 1 && "args" in obj && typeof obj.args === "object" && obj.args !== null) {
45
- return obj.args;
46
- }
47
- }
48
- return args;
49
- }
50
- function createDynamicImportAdapter(options) {
51
- const { kind, packageRoot, getExtensionContext, contextRunner } = options;
52
- return {
53
- kind,
54
- async invoke(spec, args, execCtx) {
55
- const meta = spec._meta;
56
- const sourcePath = meta?.sourcePath;
57
- const exportName = meta?.exportName;
58
- if (!sourcePath || !exportName) {
59
- throw new Error(`Extension tool ${spec.name} missing _meta.sourcePath or _meta.exportName`);
60
- }
61
- const defaultArgs = meta?.defaultArgs ?? {};
62
- const mergedArgs = Object.keys(defaultArgs).length === 0 ? args : { ...defaultArgs, ...args };
63
- const handlerArgs = unwrapArgsForHandler(spec, mergedArgs);
64
- const resolvedPackageRoot = meta?.packageRoot ?? packageRoot;
65
- const modulePath = path6__default.default.join(resolvedPackageRoot, `${sourcePath}.js`);
66
- const mod = await import(url.pathToFileURL(modulePath).href);
67
- const handler = mod[exportName];
68
- if (typeof handler !== "function") {
69
- throw new Error(
70
- `Extension tool ${spec.name}: export "${exportName}" from ${sourcePath} is not a function`
71
- );
72
- }
73
- const ctx = getExtensionContext(execCtx, spec, mergedArgs);
74
- const output = await contextRunner.runWith(ctx, () => handler(handlerArgs));
75
- return {
76
- result: { result: output.result, evidence: output.evidence },
77
- raw: { evidence: output.evidence }
78
- };
79
- }
80
- };
81
- }
82
- function loadToolYaml(packageRoot, sourcePath) {
83
- const dir = path6__default.default.dirname(sourcePath);
84
- const base = path6__default.default.basename(sourcePath);
85
- const dirPath = path6__default.default.join(packageRoot, dir);
86
- const yamlPath = fs.existsSync(path6__default.default.join(dirPath, `${base}.tool.yaml`)) ? path6__default.default.join(dirPath, `${base}.tool.yaml`) : path6__default.default.join(dirPath, `${base}.example.yaml`);
87
- if (!fs.existsSync(yamlPath)) return void 0;
88
- try {
89
- const raw = fs.readFileSync(yamlPath, "utf-8");
90
- const data = yaml__default.default.load(raw);
91
- if (data == null || typeof data !== "object" || Array.isArray(data)) return void 0;
92
- const obj = data;
93
- const toolBlock = obj?.tool;
94
- const arr = toolBlock?.list;
95
- if (!Array.isArray(arr)) return void 0;
96
- const defaults = toolBlock?.defaults != null && typeof toolBlock.defaults === "object" && !Array.isArray(toolBlock.defaults) ? toolBlock.defaults : {};
97
- const item = arr.find(
98
- (e) => e != null && typeof e === "object" && e.name === base
99
- );
100
- if (!item || typeof item !== "object") return void 0;
101
- const { name: _n, ...rest } = item;
102
- const merged = { ...defaults, ...rest };
103
- if (Object.keys(merged).length === 0) return void 0;
104
- return merged;
105
- } catch {
106
- return void 0;
107
- }
108
- }
109
-
110
- // src/api/extension/registerFromManifest.ts
111
- function loadExtensionManifest(manifestPathOrDir) {
112
- const p = path6__default.default.resolve(manifestPathOrDir);
113
- let manifestPath;
114
- if (fs.existsSync(p) && fs.statSync(p).isFile()) {
115
- manifestPath = p;
116
- } else {
117
- const inDir = path6__default.default.join(p, "core-tools-manifest.json");
118
- const inDist = path6__default.default.join(p, "dist", "core-tools-manifest.json");
119
- manifestPath = fs.existsSync(inDir) ? inDir : inDist;
120
- }
121
- const raw = fs.readFileSync(manifestPath, "utf-8");
122
- const parsed = JSON.parse(raw);
123
- if (Array.isArray(parsed)) {
124
- return { entries: parsed };
125
- }
126
- return { kind: parsed.kind, entries: parsed.tools ?? [] };
127
- }
128
- function registerToolsFromManifest(registry, options) {
129
- const { manifestPathOrDir, kind: kindOpt, only, namePrefixes, packageRoot } = options;
130
- const loaded = loadExtensionManifest(manifestPathOrDir);
131
- const kind = kindOpt ?? loaded.kind ?? "extension";
132
- const entries = loaded.entries;
133
- const onlySet = only?.length ? new Set(only) : null;
134
- const registered = [];
135
- for (const entry of entries) {
136
- const toolName = entry.name ?? (entry.coreName != null ? entry.coreName.replace(/^[^/]+\//, "").replace(/^src\./, "") : entry.sourcePath.replace(/^src\//, "").replace(/\//g, "."));
137
- let spec = chunkQEJF3KDV_cjs.createToolSpec({
138
- name: toolName,
139
- kind,
140
- description: entry.description,
141
- inputSchema: entry.inputSchema,
142
- outputSchema: entry.outputSchema,
143
- capabilities: [],
144
- sideEffect: entry.sideEffect
145
- });
146
- if (onlySet && !onlySet.has(spec.name)) continue;
147
- if (namePrefixes?.length && !namePrefixes.some((prefix) => spec.name.startsWith(prefix))) {
148
- continue;
149
- }
150
- const defaultArgs = packageRoot != null ? loadToolYaml(packageRoot, entry.sourcePath) : void 0;
151
- spec = {
152
- ...spec,
153
- _meta: {
154
- ...spec._meta,
155
- sourcePath: entry.sourcePath,
156
- exportName: entry.exportName,
157
- shortName: toolName,
158
- ...packageRoot != null && { packageRoot },
159
- ...defaultArgs != null && Object.keys(defaultArgs).length > 0 && { defaultArgs }
160
- }
161
- };
162
- registry.register(spec);
163
- registered.push(spec);
164
- }
165
- return registered;
166
- }
167
- function resolveExtensionPackageRoot(metaUrlOrPath) {
168
- const dir = metaUrlOrPath.startsWith("file:") ? path6__default.default.dirname(url.fileURLToPath(metaUrlOrPath)) : path6__default.default.resolve(metaUrlOrPath);
169
- const dist = path6__default.default.join(dir, "dist");
170
- return fs.existsSync(dist) ? dist : dir;
171
- }
172
-
173
- // src/api/extension/registerExtension.ts
174
- function registerExtension(registry, options) {
175
- const { packagePath, kind: kindOpt, config, getContextRunner, only, namePrefixes } = options;
176
- const packageRoot = resolveExtensionPackageRoot(packagePath);
177
- const contextRunner = getContextRunner();
178
- const loaded = loadExtensionManifest(packagePath);
179
- const kind = kindOpt ?? loaded.kind ?? "extension";
180
- registerToolsFromManifest(registry, {
181
- manifestPathOrDir: packagePath,
182
- kind,
183
- only,
184
- namePrefixes,
185
- packageRoot
186
- });
187
- const adapter = createDynamicImportAdapter({
188
- kind,
189
- packageRoot,
190
- getExtensionContext: (execCtx, spec, mergedArgs) => {
191
- const defaultArgs = spec._meta?.defaultArgs ?? {};
192
- const baseConfig = config !== void 0 ? config : {};
193
- const toolOverrides = baseConfig?.toolOverrides;
194
- const shortName = spec._meta?.shortName ?? spec.name;
195
- const prefixWithVersion = shortName && spec.name.endsWith(shortName) && spec.name.length > shortName.length ? spec.name.slice(0, spec.name.length - shortName.length - 1) : "";
196
- const parts = prefixWithVersion ? prefixWithVersion.split(".") : [];
197
- const packageScopedKey = parts.length > 1 ? `${parts.slice(0, -1).join(".")}::${shortName}` : "";
198
- const perTool = toolOverrides?.[spec.name] ?? (packageScopedKey ? toolOverrides?.[packageScopedKey] : void 0) ?? toolOverrides?.[shortName] ?? {};
199
- const packagePrefix = parts.length > 1 ? parts.slice(0, -1).join(".") : "";
200
- const packageDefaults = baseConfig?.packageDefaults;
201
- const packageDefaultsForPkg = (packagePrefix && packageDefaults?.[packagePrefix]) ?? (prefixWithVersion && packageDefaults?.[prefixWithVersion]) ?? {};
202
- const baseWithoutOverrides = { ...baseConfig };
203
- delete baseWithoutOverrides.toolOverrides;
204
- delete baseWithoutOverrides.packageDefaults;
205
- const resolvedConfig = {
206
- ...defaultArgs,
207
- ...baseWithoutOverrides,
208
- ...packageDefaultsForPkg,
209
- ...perTool,
210
- ...mergedArgs ?? {}
211
- };
212
- return { execCtx, config: resolvedConfig };
213
- },
214
- contextRunner: {
215
- runWith(ctx, fn) {
216
- return contextRunner.runWith(ctx, fn);
217
- }
218
- }
219
- });
220
- return adapter;
221
- }
222
-
223
- // src/api/extension/createExtension.ts
224
- function resolvePackagePath(options) {
225
- if (options.packagePath != null && options.packagePath !== "") return options.packagePath;
226
- if (options.importMeta?.url) return path6__default.default.dirname(url.fileURLToPath(options.importMeta.url));
227
- throw new Error("createExtension: provide packagePath or importMeta");
228
- }
229
- function createExtension(options) {
230
- const packagePath = resolvePackagePath(options);
231
- const kind = options.kind;
232
- const buildConfig = "buildConfig" in options ? options.buildConfig : void 0;
233
- const contextRunner = createContextRunner();
234
- return {
235
- register(registry, userConfigOrOpts, opts) {
236
- const config = buildConfig ? buildConfig(userConfigOrOpts) : userConfigOrOpts;
237
- return registerExtension(registry, {
238
- packagePath,
239
- kind,
240
- config,
241
- getContextRunner: () => contextRunner,
242
- only: opts?.only ?? userConfigOrOpts?.only,
243
- namePrefixes: opts?.namePrefixes ?? userConfigOrOpts?.namePrefixes
244
- });
245
- },
246
- getContext() {
247
- return contextRunner.getContext();
248
- },
249
- runWith(ctx, fn) {
250
- return contextRunner.runWith(ctx, fn);
251
- }
252
- };
253
- }
254
- function copyToolYamlRecursive(srcDir, destDir) {
255
- if (!fs.existsSync(srcDir)) return 0;
256
- let copied = 0;
257
- for (const e of fs.readdirSync(srcDir, { withFileTypes: true })) {
258
- const srcPath = path6__default.default.join(srcDir, e.name);
259
- const destPath = path6__default.default.join(destDir, e.name);
260
- if (e.isFile() && (e.name.endsWith(".tool.yaml") || e.name.endsWith(".example.yaml"))) {
261
- if (!fs.existsSync(destDir)) fs.mkdirSync(destDir, { recursive: true });
262
- fs.copyFileSync(srcPath, destPath);
263
- copied++;
264
- } else if (e.isDirectory()) {
265
- copied += copyToolYamlRecursive(srcPath, destPath);
266
- }
267
- }
268
- return copied;
269
- }
270
- function generateExtensionManifest(projectRoot = process.cwd(), options = {}) {
271
- const root = path6__default.default.resolve(projectRoot);
272
- const outDir = path6__default.default.resolve(options.outDir ?? path6__default.default.join(root, "dist"));
273
- const kind = options.kind ?? "core";
274
- const { specs, errors } = chunkJXYANBTH_cjs.scanForTools({
275
- projectPath: root,
276
- include: options.include ?? ["**/*.ts"],
277
- tsconfigPath: options.tsconfigPath
278
- });
279
- if (errors.length > 0) {
280
- console.warn("generateExtensionManifest: scan errors", errors);
281
- }
282
- const entries = specs.map((spec) => {
283
- const sourcePathNoExt = (spec.sourcePath ?? "").replace(/\.(ts|tsx)$/i, "");
284
- const pathBasedName = sourcePathNoExt.replace(/^src\//, "").replace(/\//g, ".");
285
- const name = spec.exportName ?? pathBasedName;
286
- const sideEffect = spec._meta?.hitl?.sideEffect ?? "none";
287
- return {
288
- name,
289
- description: spec.description ?? sourcePathNoExt,
290
- inputSchema: spec.inputSchema ?? { type: "object", additionalProperties: true },
291
- outputSchema: spec.outputSchema ?? { type: "object", additionalProperties: true },
292
- sourcePath: sourcePathNoExt,
293
- exportName: spec.exportName ?? "",
294
- sideEffect
295
- };
296
- });
297
- if (!fs.existsSync(outDir)) fs.mkdirSync(outDir, { recursive: true });
298
- const manifestPath = path6__default.default.join(outDir, "core-tools-manifest.json");
299
- fs.writeFileSync(
300
- manifestPath,
301
- JSON.stringify({ kind, tools: entries }, null, 2),
302
- "utf-8"
303
- );
304
- let toolYamlCopied = 0;
305
- const copyDirs = options.copyToolYamlDirs;
306
- if (copyDirs?.length) {
307
- for (const d of copyDirs) {
308
- const srcDir = path6__default.default.join(root, d);
309
- const destDir = path6__default.default.join(outDir, d);
310
- try {
311
- toolYamlCopied += copyToolYamlRecursive(srcDir, destDir);
312
- } catch {
313
- }
314
- }
315
- }
316
- return { manifestPath, toolsCount: entries.length, toolYamlCopied };
317
- }
318
- function generateManifest(projectRoot = process.cwd(), options = {}) {
319
- const { manifestPath, toolsCount, toolYamlCopied } = generateExtensionManifest(projectRoot, {
320
- include: ["src/**/*.ts"],
321
- copyToolYamlDirs: ["src"],
322
- ...options
323
- });
324
- console.log(`Wrote ${toolsCount} tools to ${path6__default.default.relative(projectRoot, manifestPath)}`);
325
- if (toolYamlCopied > 0) console.log(`Copied ${toolYamlCopied} .tool.yaml/.example.yaml file(s) to dist`);
326
- }
327
-
328
- // src/api/extension/overrideWithConfig.ts
329
- function overrideWithConfig(defaults, config) {
330
- const c = config != null && typeof config === "object" && !Array.isArray(config) ? config : {};
331
- const out = { ...defaults };
332
- for (const key of Object.keys(defaults)) {
333
- if (key in c && c[key] !== void 0) {
334
- out[key] = c[key];
335
- }
336
- }
337
- return out;
338
- }
339
-
340
- // src/api/extension/groupPrefix.ts
341
- function getGroupNamePrefixes(options) {
342
- const { groups, only, groupPrefixMap } = options;
343
- const onlySet = only?.length ? new Set(only) : null;
344
- const namePrefixes = !onlySet && groups?.length ? groups.map((g) => groupPrefixMap[g]).filter((x) => x != null) : void 0;
345
- return {
346
- ...onlySet ? { only: Array.from(onlySet) } : {},
347
- ...namePrefixes?.length ? { namePrefixes } : {}
348
- };
349
- }
350
- async function validateUrl(url, options) {
351
- let parsed;
352
- try {
353
- parsed = new URL(url);
354
- } catch {
355
- throw chunkWQMHMPNC_cjs.createTaggedError(
356
- "HTTP_DISALLOWED_HOST",
357
- `Invalid URL: ${url}`,
358
- { url }
359
- );
360
- }
361
- if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
362
- throw chunkWQMHMPNC_cjs.createTaggedError(
363
- "HTTP_DISALLOWED_HOST",
364
- `Protocol not allowed: ${parsed.protocol}. Only http: and https: are supported.`,
365
- { url, protocol: parsed.protocol }
366
- );
367
- }
368
- const hostname = parsed.hostname;
369
- if (!isHostAllowed(hostname, options.allowedHosts)) {
370
- throw chunkWQMHMPNC_cjs.createTaggedError(
371
- "HTTP_DISALLOWED_HOST",
372
- `Host "${hostname}" is not in the allowed hosts list`,
373
- { url, hostname, allowedHosts: options.allowedHosts }
374
- );
375
- }
376
- if (isHostBlocked(hostname, options.blockedHosts)) {
377
- throw chunkWQMHMPNC_cjs.createTaggedError(
378
- "HTTP_DISALLOWED_HOST",
379
- `Host "${hostname}" is in the blocked hosts list`,
380
- { url, hostname, blockedHosts: options.blockedHosts }
381
- );
382
- }
383
- try {
384
- const { address } = await promises.lookup(hostname);
385
- if (isIpInBlockedCidrs(address, options.blockedCidrs)) {
386
- throw chunkWQMHMPNC_cjs.createTaggedError(
387
- "HTTP_DISALLOWED_HOST",
388
- `Host "${hostname}" resolves to blocked IP: ${address}`,
389
- { url, hostname, resolvedIp: address }
390
- );
391
- }
392
- } catch (err) {
393
- if (err instanceof Error && err.kind === "HTTP_DISALLOWED_HOST") {
394
- throw err;
395
- }
396
- throw chunkWQMHMPNC_cjs.createTaggedError(
397
- "HTTP_DISALLOWED_HOST",
398
- `DNS resolution failed for host "${hostname}": ${err instanceof Error ? err.message : String(err)}`,
399
- { url, hostname }
400
- );
401
- }
402
- return parsed;
403
- }
404
- function isHostAllowed(hostname, allowedHosts) {
405
- for (const pattern of allowedHosts) {
406
- if (pattern === "*") {
407
- return true;
408
- }
409
- if (pattern.startsWith("*.")) {
410
- const suffix = pattern.slice(1);
411
- if (hostname.endsWith(suffix) || hostname === pattern.slice(2)) {
412
- return true;
413
- }
414
- } else if (hostname === pattern) {
415
- return true;
416
- }
417
- }
418
- return false;
419
- }
420
- function isHostBlocked(hostname, blockedHosts) {
421
- for (const pattern of blockedHosts) {
422
- if (pattern === "*") {
423
- return true;
424
- }
425
- if (pattern.startsWith("*.")) {
426
- const suffix = pattern.slice(1);
427
- if (hostname.endsWith(suffix) || hostname === pattern.slice(2)) {
428
- return true;
429
- }
430
- } else if (hostname === pattern) {
431
- return true;
432
- }
433
- }
434
- return false;
435
- }
436
- function isIpInBlockedCidrs(ip, cidrs) {
437
- const normalizedIp = normalizeIp(ip);
438
- if (!normalizedIp) return false;
439
- for (const cidr of cidrs) {
440
- if (cidr.includes(":")) {
441
- if (!ip.includes(":")) continue;
442
- if (isIpv6InCidr(ip, cidr)) return true;
443
- } else {
444
- if (isIpv4InCidr(normalizedIp, cidr)) return true;
445
- }
446
- }
447
- return false;
448
- }
449
- function normalizeIp(ip) {
450
- if (ip.startsWith("::ffff:")) {
451
- return ip.slice(7);
452
- }
453
- if (/^\d+\.\d+\.\d+\.\d+$/.test(ip)) {
454
- return ip;
455
- }
456
- return null;
457
- }
458
- function isIpv4InCidr(ip, cidr) {
459
- const [cidrIp, prefixStr] = cidr.split("/");
460
- if (!cidrIp || !prefixStr) return false;
461
- const prefix = parseInt(prefixStr, 10);
462
- if (isNaN(prefix) || prefix < 0 || prefix > 32) return false;
463
- const ipNum = ipv4ToNum(ip);
464
- const cidrNum = ipv4ToNum(cidrIp);
465
- if (ipNum === null || cidrNum === null) return false;
466
- const mask = prefix === 0 ? 0 : -1 << 32 - prefix >>> 0;
467
- return (ipNum & mask) === (cidrNum & mask);
468
- }
469
- function ipv4ToNum(ip) {
470
- const parts = ip.split(".");
471
- if (parts.length !== 4) return null;
472
- let num = 0;
473
- for (const part of parts) {
474
- const n = parseInt(part, 10);
475
- if (isNaN(n) || n < 0 || n > 255) return null;
476
- num = num << 8 | n;
477
- }
478
- return num >>> 0;
479
- }
480
- function isIpv6InCidr(ip, cidr) {
481
- const [cidrIp, prefixStr] = cidr.split("/");
482
- if (!cidrIp || !prefixStr) return false;
483
- const prefix = parseInt(prefixStr, 10);
484
- if (isNaN(prefix)) return false;
485
- const ipBytes = expandIpv6(ip);
486
- const cidrBytes = expandIpv6(cidrIp);
487
- if (!ipBytes || !cidrBytes) return false;
488
- const fullBytes = Math.floor(prefix / 8);
489
- for (let i = 0; i < fullBytes && i < 16; i++) {
490
- if (ipBytes[i] !== cidrBytes[i]) return false;
491
- }
492
- const remainingBits = prefix % 8;
493
- if (remainingBits > 0 && fullBytes < 16) {
494
- const mask = -1 << 8 - remainingBits & 255;
495
- if ((ipBytes[fullBytes] & mask) !== (cidrBytes[fullBytes] & mask)) return false;
496
- }
497
- return true;
498
- }
499
- function expandIpv6(ip) {
500
- const zoneIdx = ip.indexOf("%");
501
- if (zoneIdx !== -1) ip = ip.slice(0, zoneIdx);
502
- const parts = ip.split("::");
503
- if (parts.length > 2) return null;
504
- const bytes = new Array(16).fill(0);
505
- const expandGroup = (group) => {
506
- if (!group) return [];
507
- return group.split(":").flatMap((hex) => {
508
- const val = parseInt(hex || "0", 16);
509
- return [val >> 8 & 255, val & 255];
510
- });
511
- };
512
- if (parts.length === 1) {
513
- const expanded = expandGroup(parts[0]);
514
- if (expanded.length !== 16) return null;
515
- return expanded;
516
- }
517
- const left = expandGroup(parts[0]);
518
- const right = expandGroup(parts[1]);
519
- if (left.length + right.length > 16) return null;
520
- for (let i = 0; i < left.length; i++) bytes[i] = left[i];
521
- for (let i = 0; i < right.length; i++) bytes[16 - right.length + i] = right[i];
522
- return bytes;
523
- }
524
14
 
525
15
  Object.defineProperty(exports, "createAgentTools", {
526
16
  enumerable: true,
527
- get: function () { return chunkMUBZV65R_cjs.createAgentTools; }
17
+ get: function () { return chunkZH5MH3AK_cjs.createAgentTools; }
528
18
  });
529
19
  Object.defineProperty(exports, "createLangChainToolsAsync", {
530
20
  enumerable: true,
531
- get: function () { return chunkMUBZV65R_cjs.createLangChainToolsAsync; }
532
- });
533
- Object.defineProperty(exports, "buildFunctionToTool", {
534
- enumerable: true,
535
- get: function () { return chunkDPOLJN7F_cjs.buildFunctionToTool; }
536
- });
537
- Object.defineProperty(exports, "buildMcpPackage", {
538
- enumerable: true,
539
- get: function () { return chunkDPOLJN7F_cjs.buildMcpPackage; }
540
- });
541
- Object.defineProperty(exports, "initProject", {
542
- enumerable: true,
543
- get: function () { return chunkDPOLJN7F_cjs.initProject; }
544
- });
545
- Object.defineProperty(exports, "runGeneratedMCP", {
546
- enumerable: true,
547
- get: function () { return chunkDPOLJN7F_cjs.runGeneratedMCP; }
548
- });
549
- Object.defineProperty(exports, "runMcpServer", {
550
- enumerable: true,
551
- get: function () { return chunkDPOLJN7F_cjs.runMcpServer; }
552
- });
553
- Object.defineProperty(exports, "PTCRuntime", {
554
- enumerable: true,
555
- get: function () { return chunkJXYANBTH_cjs.PTCRuntime; }
21
+ get: function () { return chunkZH5MH3AK_cjs.createLangChainToolsAsync; }
556
22
  });
557
23
  Object.defineProperty(exports, "createMCPServer", {
558
24
  enumerable: true,
559
- get: function () { return chunkJXYANBTH_cjs.createMCPServer; }
25
+ get: function () { return chunkHK4GTFTQ_cjs.createMCPServer; }
560
26
  });
561
27
  Object.defineProperty(exports, "createMCPServerStreamableHttp", {
562
28
  enumerable: true,
563
- get: function () { return chunkJXYANBTH_cjs.createMCPServerStreamableHttp; }
29
+ get: function () { return chunkHK4GTFTQ_cjs.createMCPServerStreamableHttp; }
564
30
  });
565
31
  Object.defineProperty(exports, "createMCPStreamableHttpHandler", {
566
32
  enumerable: true,
567
- get: function () { return chunkJXYANBTH_cjs.createMCPStreamableHttpHandler; }
33
+ get: function () { return chunkHK4GTFTQ_cjs.createMCPStreamableHttpHandler; }
568
34
  });
569
35
  Object.defineProperty(exports, "createOpenAPIServer", {
570
36
  enumerable: true,
571
- get: function () { return chunkJXYANBTH_cjs.createHttpService; }
37
+ get: function () { return chunkHK4GTFTQ_cjs.createHttpService; }
572
38
  });
573
39
  Object.defineProperty(exports, "createRuntimeFromConfig", {
574
40
  enumerable: true,
575
- get: function () { return chunkJXYANBTH_cjs.createRuntimeFromConfig; }
41
+ get: function () { return chunkHK4GTFTQ_cjs.createRuntimeFromConfig; }
576
42
  });
577
43
  Object.defineProperty(exports, "createRuntimeFromConfigSync", {
578
44
  enumerable: true,
579
- get: function () { return chunkJXYANBTH_cjs.createRuntimeFromConfigSync; }
580
- });
581
- Object.defineProperty(exports, "loadToolConfig", {
582
- enumerable: true,
583
- get: function () { return chunkJXYANBTH_cjs.loadToolConfig; }
584
- });
585
- Object.defineProperty(exports, "resolveSandboxedPath", {
586
- enumerable: true,
587
- get: function () { return chunkJXYANBTH_cjs.resolveSandboxedPath2; }
45
+ get: function () { return chunkHK4GTFTQ_cjs.createRuntimeFromConfigSync; }
588
46
  });
589
47
  Object.defineProperty(exports, "runMCPServerOverStdio", {
590
48
  enumerable: true,
591
- get: function () { return chunkJXYANBTH_cjs.runMCPServerOverStdio; }
592
- });
593
- Object.defineProperty(exports, "scan", {
594
- enumerable: true,
595
- get: function () { return chunkJXYANBTH_cjs.scan; }
596
- });
597
- Object.defineProperty(exports, "scanForTools", {
598
- enumerable: true,
599
- get: function () { return chunkJXYANBTH_cjs.scanForTools; }
600
- });
601
- Object.defineProperty(exports, "setSandboxValidationEnabled", {
602
- enumerable: true,
603
- get: function () { return chunkJXYANBTH_cjs.setSandboxValidationEnabled; }
604
- });
605
- Object.defineProperty(exports, "ToolRegistry", {
606
- enumerable: true,
607
- get: function () { return chunkWQMHMPNC_cjs.ToolRegistry; }
608
- });
609
- Object.defineProperty(exports, "createTaggedError", {
610
- enumerable: true,
611
- get: function () { return chunkWQMHMPNC_cjs.createTaggedError; }
612
- });
613
- Object.defineProperty(exports, "DEFAULT_INPUT_SCHEMA", {
614
- enumerable: true,
615
- get: function () { return chunkQEJF3KDV_cjs.DEFAULT_INPUT_SCHEMA; }
616
- });
617
- Object.defineProperty(exports, "DEFAULT_OUTPUT_SCHEMA", {
618
- enumerable: true,
619
- get: function () { return chunkQEJF3KDV_cjs.DEFAULT_OUTPUT_SCHEMA; }
620
- });
621
- Object.defineProperty(exports, "createToolSpec", {
622
- enumerable: true,
623
- get: function () { return chunkQEJF3KDV_cjs.createToolSpec; }
624
- });
625
- Object.defineProperty(exports, "normalizeToolName", {
626
- enumerable: true,
627
- get: function () { return chunkQEJF3KDV_cjs.normalizeToolName; }
49
+ get: function () { return chunkHK4GTFTQ_cjs.runMCPServerOverStdio; }
628
50
  });
629
- exports.createContextRunner = createContextRunner;
630
- exports.createDynamicImportAdapter = createDynamicImportAdapter;
631
- exports.createExtension = createExtension;
632
- exports.generateExtensionManifest = generateExtensionManifest;
633
- exports.generateManifest = generateManifest;
634
- exports.getGroupNamePrefixes = getGroupNamePrefixes;
635
- exports.isIpInBlockedCidrs = isIpInBlockedCidrs;
636
- exports.loadExtensionManifest = loadExtensionManifest;
637
- exports.loadToolYaml = loadToolYaml;
638
- exports.overrideWithConfig = overrideWithConfig;
639
- exports.registerExtension = registerExtension;
640
- exports.registerToolsFromManifest = registerToolsFromManifest;
641
- exports.resolveExtensionPackageRoot = resolveExtensionPackageRoot;
642
- exports.validateUrl = validateUrl;
643
51
  //# sourceMappingURL=index.cjs.map
644
52
  //# sourceMappingURL=index.cjs.map