@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.
- package/dist/api/expose/index.d.ts +1 -1
- package/dist/api/expose/index.d.ts.map +1 -1
- package/dist/api/expose/mcp-build/build.d.ts +1 -3
- package/dist/api/expose/mcp-build/build.d.ts.map +1 -1
- package/dist/api/expose/mcp-build/index.d.ts +2 -2
- package/dist/api/expose/mcp-build/index.d.ts.map +1 -1
- package/dist/api/expose/mcp-build/run.d.ts +1 -3
- package/dist/api/expose/mcp-build/run.d.ts.map +1 -1
- package/dist/api/main.cjs +19 -15
- package/dist/api/main.js +8 -4
- package/dist/build.cjs +31 -0
- package/dist/build.cjs.map +1 -0
- package/dist/build.d.ts +13 -0
- package/dist/build.d.ts.map +1 -0
- package/dist/build.js +6 -0
- package/dist/build.js.map +1 -0
- package/dist/chunk-45S2HPVU.js +463 -0
- package/dist/chunk-45S2HPVU.js.map +1 -0
- package/dist/{chunk-Y75CRPVF.js → chunk-5J27MF7S.js} +11 -12
- package/dist/chunk-5J27MF7S.js.map +1 -0
- package/dist/{chunk-JXYANBTH.cjs → chunk-HK4GTFTQ.cjs} +57 -1645
- package/dist/chunk-HK4GTFTQ.cjs.map +1 -0
- package/dist/chunk-JNIWNSCQ.cjs +494 -0
- package/dist/chunk-JNIWNSCQ.cjs.map +1 -0
- package/dist/{chunk-DPOLJN7F.cjs → chunk-NMZ4IMEW.cjs} +22 -25
- package/dist/chunk-NMZ4IMEW.cjs.map +1 -0
- package/dist/{chunk-A5C2MUNA.js → chunk-NVT4X4CB.js} +41 -1600
- package/dist/chunk-NVT4X4CB.js.map +1 -0
- package/dist/chunk-OG5ZSXQ5.cjs +1099 -0
- package/dist/chunk-OG5ZSXQ5.cjs.map +1 -0
- package/dist/{chunk-WQMHMPNC.cjs → chunk-PYCCJF7C.cjs} +2 -68
- package/dist/chunk-PYCCJF7C.cjs.map +1 -0
- package/dist/{chunk-IWM5B5DU.js → chunk-QPKBEU64.js} +4 -3
- package/dist/chunk-QPKBEU64.js.map +1 -0
- package/dist/chunk-QXQ4477T.js +49 -0
- package/dist/chunk-QXQ4477T.js.map +1 -0
- package/dist/chunk-RZTTO5MQ.js +65 -0
- package/dist/chunk-RZTTO5MQ.js.map +1 -0
- package/dist/{chunk-FCYBA7PR.js → chunk-WUMLZERG.js} +3 -62
- package/dist/chunk-WUMLZERG.js.map +1 -0
- package/dist/chunk-XPGHS4W7.cjs +73 -0
- package/dist/chunk-XPGHS4W7.cjs.map +1 -0
- package/dist/chunk-YRFUGA3C.js +1072 -0
- package/dist/chunk-YRFUGA3C.js.map +1 -0
- package/dist/chunk-ZDSZHEQU.cjs +52 -0
- package/dist/chunk-ZDSZHEQU.cjs.map +1 -0
- package/dist/{chunk-MUBZV65R.cjs → chunk-ZH5MH3AK.cjs} +16 -15
- package/dist/chunk-ZH5MH3AK.cjs.map +1 -0
- package/dist/core/runtime.cjs +6 -5
- package/dist/core/runtime.js +2 -1
- package/dist/extension.cjs +359 -0
- package/dist/extension.cjs.map +1 -0
- package/dist/extension.d.ts +6 -0
- package/dist/extension.d.ts.map +1 -0
- package/dist/extension.js +341 -0
- package/dist/extension.js.map +1 -0
- package/dist/index.cjs +17 -609
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -25
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -520
- package/dist/index.js.map +1 -1
- package/dist/security.cjs +193 -0
- package/dist/security.cjs.map +1 -0
- package/dist/security.d.ts +6 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +182 -0
- package/dist/security.js.map +1 -0
- package/dist/utils/cli/index.cjs +25 -21
- package/dist/utils/cli/index.cjs.map +1 -1
- package/dist/utils/cli/index.js +13 -9
- package/dist/utils/cli/index.js.map +1 -1
- package/package.json +16 -2
- package/dist/chunk-A5C2MUNA.js.map +0 -1
- package/dist/chunk-DPOLJN7F.cjs.map +0 -1
- package/dist/chunk-FCYBA7PR.js.map +0 -1
- package/dist/chunk-IWM5B5DU.js.map +0 -1
- package/dist/chunk-JXYANBTH.cjs.map +0 -1
- package/dist/chunk-MUBZV65R.cjs.map +0 -1
- package/dist/chunk-WQMHMPNC.cjs.map +0 -1
- 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
|
|
4
|
-
var
|
|
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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
|
17
|
+
get: function () { return chunkZH5MH3AK_cjs.createAgentTools; }
|
|
528
18
|
});
|
|
529
19
|
Object.defineProperty(exports, "createLangChainToolsAsync", {
|
|
530
20
|
enumerable: true,
|
|
531
|
-
get: function () { return
|
|
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
|
|
25
|
+
get: function () { return chunkHK4GTFTQ_cjs.createMCPServer; }
|
|
560
26
|
});
|
|
561
27
|
Object.defineProperty(exports, "createMCPServerStreamableHttp", {
|
|
562
28
|
enumerable: true,
|
|
563
|
-
get: function () { return
|
|
29
|
+
get: function () { return chunkHK4GTFTQ_cjs.createMCPServerStreamableHttp; }
|
|
564
30
|
});
|
|
565
31
|
Object.defineProperty(exports, "createMCPStreamableHttpHandler", {
|
|
566
32
|
enumerable: true,
|
|
567
|
-
get: function () { return
|
|
33
|
+
get: function () { return chunkHK4GTFTQ_cjs.createMCPStreamableHttpHandler; }
|
|
568
34
|
});
|
|
569
35
|
Object.defineProperty(exports, "createOpenAPIServer", {
|
|
570
36
|
enumerable: true,
|
|
571
|
-
get: function () { return
|
|
37
|
+
get: function () { return chunkHK4GTFTQ_cjs.createHttpService; }
|
|
572
38
|
});
|
|
573
39
|
Object.defineProperty(exports, "createRuntimeFromConfig", {
|
|
574
40
|
enumerable: true,
|
|
575
|
-
get: function () { return
|
|
41
|
+
get: function () { return chunkHK4GTFTQ_cjs.createRuntimeFromConfig; }
|
|
576
42
|
});
|
|
577
43
|
Object.defineProperty(exports, "createRuntimeFromConfigSync", {
|
|
578
44
|
enumerable: true,
|
|
579
|
-
get: function () { return
|
|
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
|
|
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
|