@easynet/agent-tool 1.0.80 → 1.0.82
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/README.md +5 -15
- package/dist/api/adapters/LangChainToolsHub.d.ts +1 -1
- package/dist/api/createAgentTools.d.ts +8 -24
- package/dist/api/createAgentTools.d.ts.map +1 -1
- package/dist/api/expose/index.d.ts +1 -1
- package/dist/api/main.cjs +11 -65
- package/dist/api/main.cjs.map +1 -1
- package/dist/api/main.d.ts +3 -56
- package/dist/api/main.d.ts.map +1 -1
- package/dist/api/main.js +13 -4
- package/dist/api/main.js.map +1 -1
- package/dist/api/runtimeFromConfig.d.ts +1 -1
- package/dist/api/runtimeFromConfig.d.ts.map +1 -1
- package/dist/build.cjs +5 -6
- package/dist/build.js +2 -3
- package/dist/{chunk-Q6W32HAP.js → chunk-3D7XYAZO.js} +7 -30
- package/dist/chunk-3D7XYAZO.js.map +1 -0
- package/dist/{chunk-GXFDYM3O.cjs → chunk-6NBQAFVB.cjs} +19 -43
- package/dist/chunk-6NBQAFVB.cjs.map +1 -0
- package/dist/{chunk-VYULM6NC.js → chunk-6ORA3MNX.js} +3 -3
- package/dist/{chunk-VYULM6NC.js.map → chunk-6ORA3MNX.js.map} +1 -1
- package/dist/{chunk-42UNSIZJ.js → chunk-EHFXS4WP.js} +7 -28
- package/dist/chunk-EHFXS4WP.js.map +1 -0
- package/dist/{chunk-5QH7YY4Z.cjs → chunk-F4HS7H7K.cjs} +4 -5
- package/dist/chunk-F4HS7H7K.cjs.map +1 -0
- package/dist/{chunk-DVYM6VRD.js → chunk-GYN3JAMK.js} +6 -26
- package/dist/chunk-GYN3JAMK.js.map +1 -0
- package/dist/{chunk-JZ6LKSAS.js → chunk-NEMGE573.js} +4 -4
- package/dist/chunk-NEMGE573.js.map +1 -0
- package/dist/{chunk-TBDSFXNG.cjs → chunk-QCHMXVWZ.cjs} +7 -7
- package/dist/{chunk-TBDSFXNG.cjs.map → chunk-QCHMXVWZ.cjs.map} +1 -1
- package/dist/{chunk-33N4Y6IS.cjs → chunk-V2RD4BHT.cjs} +7 -33
- package/dist/chunk-V2RD4BHT.cjs.map +1 -0
- package/dist/{chunk-EIIHED57.cjs → chunk-XPQZLO4A.cjs} +12 -35
- package/dist/chunk-XPQZLO4A.cjs.map +1 -0
- package/dist/config/ref.d.ts.map +1 -1
- package/dist/core/index.cjs +0 -1
- package/dist/core/index.js +0 -1
- package/dist/core/runtime.cjs +0 -1
- package/dist/core/runtime.js +0 -1
- package/dist/extension.cjs +257 -42
- package/dist/extension.cjs.map +1 -1
- package/dist/extension.js +243 -3
- package/dist/extension.js.map +1 -1
- package/dist/index.cjs +11 -149
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -55
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -90
- package/dist/index.js.map +1 -1
- package/dist/observability/Logger.d.ts +1 -1
- package/dist/observability/Logger.d.ts.map +1 -1
- package/dist/security.cjs +178 -11
- package/dist/security.cjs.map +1 -1
- package/dist/security.js +179 -2
- package/dist/security.js.map +1 -1
- package/dist/tools/skill/SkillMdParser.d.ts.map +1 -1
- package/dist/utils/cli/index.cjs +17 -17
- package/dist/utils/cli/index.js +3 -3
- package/package.json +2 -34
- package/dist/chunk-33N4Y6IS.cjs.map +0 -1
- package/dist/chunk-42UNSIZJ.js.map +0 -1
- package/dist/chunk-5QH7YY4Z.cjs.map +0 -1
- package/dist/chunk-DEDDPMBU.js +0 -3
- package/dist/chunk-DEDDPMBU.js.map +0 -1
- package/dist/chunk-DGE2AHYT.cjs +0 -261
- package/dist/chunk-DGE2AHYT.cjs.map +0 -1
- package/dist/chunk-DVYM6VRD.js.map +0 -1
- package/dist/chunk-EIIHED57.cjs.map +0 -1
- package/dist/chunk-FWWN4D2F.js +0 -3
- package/dist/chunk-FWWN4D2F.js.map +0 -1
- package/dist/chunk-GXFDYM3O.cjs.map +0 -1
- package/dist/chunk-ICHSEIZN.cjs +0 -4
- package/dist/chunk-ICHSEIZN.cjs.map +0 -1
- package/dist/chunk-JZ6LKSAS.js.map +0 -1
- package/dist/chunk-NKYFYALQ.js +0 -181
- package/dist/chunk-NKYFYALQ.js.map +0 -1
- package/dist/chunk-NOGGIM7B.cjs +0 -4
- package/dist/chunk-NOGGIM7B.cjs.map +0 -1
- package/dist/chunk-Q6W32HAP.js.map +0 -1
- package/dist/chunk-R55NXJIH.cjs +0 -184
- package/dist/chunk-R55NXJIH.cjs.map +0 -1
- package/dist/chunk-S4X4NJIP.js +0 -244
- package/dist/chunk-S4X4NJIP.js.map +0 -1
- package/dist/chunk-YL6RC7HQ.cjs +0 -4
- package/dist/chunk-YL6RC7HQ.cjs.map +0 -1
- package/dist/chunk-YLWTSNTT.js +0 -3
- package/dist/chunk-YLWTSNTT.js.map +0 -1
package/dist/extension.js
CHANGED
|
@@ -1,6 +1,246 @@
|
|
|
1
|
-
|
|
2
|
-
export { loadExtensionManifest, loadToolYaml, registerToolsFromManifest } from './chunk-
|
|
3
|
-
import './chunk-HEVWKBBQ.js';
|
|
1
|
+
import { loadExtensionManifest, registerToolsFromManifest } from './chunk-NEMGE573.js';
|
|
2
|
+
export { loadExtensionManifest, loadToolYaml, registerToolsFromManifest } from './chunk-NEMGE573.js';
|
|
3
|
+
import { scanForTools } from './chunk-HEVWKBBQ.js';
|
|
4
4
|
import './chunk-ODEHUAR4.js';
|
|
5
|
+
import { AsyncLocalStorage } from 'async_hooks';
|
|
6
|
+
import path4 from 'path';
|
|
7
|
+
import { pathToFileURL, fileURLToPath } from 'url';
|
|
8
|
+
import { existsSync, mkdirSync, writeFileSync, readdirSync, copyFileSync } from 'fs';
|
|
9
|
+
export { overrideWithConfig } from '@easynet/agent-common';
|
|
10
|
+
|
|
11
|
+
function createContextRunner() {
|
|
12
|
+
const storage = new AsyncLocalStorage();
|
|
13
|
+
return {
|
|
14
|
+
runWith(ctx, fn) {
|
|
15
|
+
return storage.run(ctx, fn);
|
|
16
|
+
},
|
|
17
|
+
getContext() {
|
|
18
|
+
const ctx = storage.getStore();
|
|
19
|
+
if (ctx === void 0) {
|
|
20
|
+
throw new Error("Extension context not set; invoke only through the extension adapter.");
|
|
21
|
+
}
|
|
22
|
+
return ctx;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function unwrapArgsForHandler(spec, args) {
|
|
27
|
+
if (args == null || typeof args !== "object" || Array.isArray(args)) return args;
|
|
28
|
+
const s = spec.inputSchema;
|
|
29
|
+
if (s?.type !== "object" || !s.properties || typeof s.properties !== "object") return args;
|
|
30
|
+
const props = s.properties;
|
|
31
|
+
const argsProp = props.args;
|
|
32
|
+
if (argsProp != null && typeof argsProp === "object" && argsProp.type === "object" && argsProp.properties != null) {
|
|
33
|
+
const obj = args;
|
|
34
|
+
if (Object.keys(obj).length === 1 && "args" in obj && typeof obj.args === "object" && obj.args !== null) {
|
|
35
|
+
return obj.args;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return args;
|
|
39
|
+
}
|
|
40
|
+
function createDynamicImportAdapter(options) {
|
|
41
|
+
const { kind, packageRoot, getExtensionContext, contextRunner } = options;
|
|
42
|
+
return {
|
|
43
|
+
kind,
|
|
44
|
+
async invoke(spec, args, execCtx) {
|
|
45
|
+
const meta = spec._meta;
|
|
46
|
+
const sourcePath = meta?.sourcePath;
|
|
47
|
+
const exportName = meta?.exportName;
|
|
48
|
+
if (!sourcePath || !exportName) {
|
|
49
|
+
throw new Error(`Extension tool ${spec.name} missing _meta.sourcePath or _meta.exportName`);
|
|
50
|
+
}
|
|
51
|
+
const defaultArgs = meta?.defaultArgs ?? {};
|
|
52
|
+
const mergedArgs = Object.keys(defaultArgs).length === 0 ? args : { ...defaultArgs, ...args };
|
|
53
|
+
const handlerArgs = unwrapArgsForHandler(spec, mergedArgs);
|
|
54
|
+
const resolvedPackageRoot = meta?.packageRoot ?? packageRoot;
|
|
55
|
+
const modulePath = path4.join(resolvedPackageRoot, `${sourcePath}.js`);
|
|
56
|
+
const mod = await import(pathToFileURL(modulePath).href);
|
|
57
|
+
const handler = mod[exportName];
|
|
58
|
+
if (typeof handler !== "function") {
|
|
59
|
+
throw new Error(
|
|
60
|
+
`Extension tool ${spec.name}: export "${exportName}" from ${sourcePath} is not a function`
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
const ctx = getExtensionContext(execCtx, spec, mergedArgs);
|
|
64
|
+
const output = await contextRunner.runWith(ctx, () => handler(handlerArgs));
|
|
65
|
+
return {
|
|
66
|
+
result: { result: output.result, evidence: output.evidence },
|
|
67
|
+
raw: { evidence: output.evidence }
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function resolveExtensionPackageRoot(metaUrlOrPath) {
|
|
73
|
+
const dir = metaUrlOrPath.startsWith("file:") ? path4.dirname(fileURLToPath(metaUrlOrPath)) : path4.resolve(metaUrlOrPath);
|
|
74
|
+
const dist = path4.join(dir, "dist");
|
|
75
|
+
return existsSync(dist) ? dist : dir;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// src/api/extension/registerExtension.ts
|
|
79
|
+
function registerExtension(registry, options) {
|
|
80
|
+
const { packagePath, kind: kindOpt, config, getContextRunner, only, namePrefixes } = options;
|
|
81
|
+
const packageRoot = resolveExtensionPackageRoot(packagePath);
|
|
82
|
+
const contextRunner = getContextRunner();
|
|
83
|
+
const loaded = loadExtensionManifest(packagePath);
|
|
84
|
+
const kind = kindOpt ?? loaded.kind ?? "extension";
|
|
85
|
+
registerToolsFromManifest(registry, {
|
|
86
|
+
manifestPathOrDir: packagePath,
|
|
87
|
+
kind,
|
|
88
|
+
only,
|
|
89
|
+
namePrefixes,
|
|
90
|
+
packageRoot
|
|
91
|
+
});
|
|
92
|
+
const adapter = createDynamicImportAdapter({
|
|
93
|
+
kind,
|
|
94
|
+
packageRoot,
|
|
95
|
+
getExtensionContext: (execCtx, spec, mergedArgs) => {
|
|
96
|
+
const defaultArgs = spec._meta?.defaultArgs ?? {};
|
|
97
|
+
const baseConfig = config !== void 0 ? config : {};
|
|
98
|
+
const toolOverrides = baseConfig?.toolOverrides;
|
|
99
|
+
const shortName = spec._meta?.shortName ?? spec.name;
|
|
100
|
+
const prefixWithVersion = shortName && spec.name.endsWith(shortName) && spec.name.length > shortName.length ? spec.name.slice(0, spec.name.length - shortName.length - 1) : "";
|
|
101
|
+
const parts = prefixWithVersion ? prefixWithVersion.split(".") : [];
|
|
102
|
+
const packageScopedKey = parts.length > 1 ? `${parts.slice(0, -1).join(".")}::${shortName}` : "";
|
|
103
|
+
const perTool = toolOverrides?.[spec.name] ?? (packageScopedKey ? toolOverrides?.[packageScopedKey] : void 0) ?? toolOverrides?.[shortName] ?? {};
|
|
104
|
+
const packagePrefix = parts.length > 1 ? parts.slice(0, -1).join(".") : "";
|
|
105
|
+
const packageDefaults = baseConfig?.packageDefaults;
|
|
106
|
+
const packageDefaultsForPkg = (packagePrefix && packageDefaults?.[packagePrefix]) ?? (prefixWithVersion && packageDefaults?.[prefixWithVersion]) ?? {};
|
|
107
|
+
const baseWithoutOverrides = { ...baseConfig };
|
|
108
|
+
delete baseWithoutOverrides.toolOverrides;
|
|
109
|
+
delete baseWithoutOverrides.packageDefaults;
|
|
110
|
+
const resolvedConfig = {
|
|
111
|
+
...defaultArgs,
|
|
112
|
+
...baseWithoutOverrides,
|
|
113
|
+
...packageDefaultsForPkg,
|
|
114
|
+
...perTool,
|
|
115
|
+
...mergedArgs ?? {}
|
|
116
|
+
};
|
|
117
|
+
return { execCtx, config: resolvedConfig };
|
|
118
|
+
},
|
|
119
|
+
contextRunner: {
|
|
120
|
+
runWith(ctx, fn) {
|
|
121
|
+
return contextRunner.runWith(ctx, fn);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
return adapter;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// src/api/extension/createExtension.ts
|
|
129
|
+
function resolvePackagePath(options) {
|
|
130
|
+
if (options.packagePath != null && options.packagePath !== "") return options.packagePath;
|
|
131
|
+
if (options.importMeta?.url) return path4.dirname(fileURLToPath(options.importMeta.url));
|
|
132
|
+
throw new Error("createExtension: provide packagePath or importMeta");
|
|
133
|
+
}
|
|
134
|
+
function createExtension(options) {
|
|
135
|
+
const packagePath = resolvePackagePath(options);
|
|
136
|
+
const kind = options.kind;
|
|
137
|
+
const buildConfig = "buildConfig" in options ? options.buildConfig : void 0;
|
|
138
|
+
const contextRunner = createContextRunner();
|
|
139
|
+
return {
|
|
140
|
+
register(registry, userConfigOrOpts, opts) {
|
|
141
|
+
const config = buildConfig ? buildConfig(userConfigOrOpts) : userConfigOrOpts;
|
|
142
|
+
return registerExtension(registry, {
|
|
143
|
+
packagePath,
|
|
144
|
+
kind,
|
|
145
|
+
config,
|
|
146
|
+
getContextRunner: () => contextRunner,
|
|
147
|
+
only: opts?.only ?? userConfigOrOpts?.only,
|
|
148
|
+
namePrefixes: opts?.namePrefixes ?? userConfigOrOpts?.namePrefixes
|
|
149
|
+
});
|
|
150
|
+
},
|
|
151
|
+
getContext() {
|
|
152
|
+
return contextRunner.getContext();
|
|
153
|
+
},
|
|
154
|
+
runWith(ctx, fn) {
|
|
155
|
+
return contextRunner.runWith(ctx, fn);
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
function copyToolYamlRecursive(srcDir, destDir) {
|
|
160
|
+
if (!existsSync(srcDir)) return 0;
|
|
161
|
+
let copied = 0;
|
|
162
|
+
for (const e of readdirSync(srcDir, { withFileTypes: true })) {
|
|
163
|
+
const srcPath = path4.join(srcDir, e.name);
|
|
164
|
+
const destPath = path4.join(destDir, e.name);
|
|
165
|
+
if (e.isFile() && (e.name.endsWith(".tool.yaml") || e.name.endsWith(".example.yaml"))) {
|
|
166
|
+
if (!existsSync(destDir)) mkdirSync(destDir, { recursive: true });
|
|
167
|
+
copyFileSync(srcPath, destPath);
|
|
168
|
+
copied++;
|
|
169
|
+
} else if (e.isDirectory()) {
|
|
170
|
+
copied += copyToolYamlRecursive(srcPath, destPath);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return copied;
|
|
174
|
+
}
|
|
175
|
+
function generateExtensionManifest(projectRoot = process.cwd(), options = {}) {
|
|
176
|
+
const root = path4.resolve(projectRoot);
|
|
177
|
+
const outDir = path4.resolve(options.outDir ?? path4.join(root, "dist"));
|
|
178
|
+
const kind = options.kind ?? "core";
|
|
179
|
+
const { specs, errors } = scanForTools({
|
|
180
|
+
projectPath: root,
|
|
181
|
+
include: options.include ?? ["**/*.ts"],
|
|
182
|
+
tsconfigPath: options.tsconfigPath
|
|
183
|
+
});
|
|
184
|
+
if (errors.length > 0) {
|
|
185
|
+
console.warn("generateExtensionManifest: scan errors", errors);
|
|
186
|
+
}
|
|
187
|
+
const entries = specs.map((spec) => {
|
|
188
|
+
const sourcePathNoExt = (spec.sourcePath ?? "").replace(/\.(ts|tsx)$/i, "");
|
|
189
|
+
const pathBasedName = sourcePathNoExt.replace(/^src\//, "").replace(/\//g, ".");
|
|
190
|
+
const name = spec.exportName ?? pathBasedName;
|
|
191
|
+
const sideEffect = spec._meta?.hitl?.sideEffect ?? "none";
|
|
192
|
+
return {
|
|
193
|
+
name,
|
|
194
|
+
description: spec.description ?? sourcePathNoExt,
|
|
195
|
+
inputSchema: spec.inputSchema ?? { type: "object", additionalProperties: true },
|
|
196
|
+
outputSchema: spec.outputSchema ?? { type: "object", additionalProperties: true },
|
|
197
|
+
sourcePath: sourcePathNoExt,
|
|
198
|
+
exportName: spec.exportName ?? "",
|
|
199
|
+
sideEffect
|
|
200
|
+
};
|
|
201
|
+
});
|
|
202
|
+
if (!existsSync(outDir)) mkdirSync(outDir, { recursive: true });
|
|
203
|
+
const manifestPath = path4.join(outDir, "core-tools-manifest.json");
|
|
204
|
+
writeFileSync(
|
|
205
|
+
manifestPath,
|
|
206
|
+
JSON.stringify({ kind, tools: entries }, null, 2),
|
|
207
|
+
"utf-8"
|
|
208
|
+
);
|
|
209
|
+
let toolYamlCopied = 0;
|
|
210
|
+
const copyDirs = options.copyToolYamlDirs;
|
|
211
|
+
if (copyDirs?.length) {
|
|
212
|
+
for (const d of copyDirs) {
|
|
213
|
+
const srcDir = path4.join(root, d);
|
|
214
|
+
const destDir = path4.join(outDir, d);
|
|
215
|
+
try {
|
|
216
|
+
toolYamlCopied += copyToolYamlRecursive(srcDir, destDir);
|
|
217
|
+
} catch {
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return { manifestPath, toolsCount: entries.length, toolYamlCopied };
|
|
222
|
+
}
|
|
223
|
+
function generateManifest(projectRoot = process.cwd(), options = {}) {
|
|
224
|
+
const { manifestPath, toolsCount, toolYamlCopied } = generateExtensionManifest(projectRoot, {
|
|
225
|
+
include: ["src/**/*.ts"],
|
|
226
|
+
copyToolYamlDirs: ["src"],
|
|
227
|
+
...options
|
|
228
|
+
});
|
|
229
|
+
console.log(`Wrote ${toolsCount} tools to ${path4.relative(projectRoot, manifestPath)}`);
|
|
230
|
+
if (toolYamlCopied > 0) console.log(`Copied ${toolYamlCopied} .tool.yaml/.example.yaml file(s) to dist`);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// src/api/extension/groupPrefix.ts
|
|
234
|
+
function getGroupNamePrefixes(options) {
|
|
235
|
+
const { groups, only, groupPrefixMap } = options;
|
|
236
|
+
const onlySet = only?.length ? new Set(only) : null;
|
|
237
|
+
const namePrefixes = !onlySet && groups?.length ? groups.map((g) => groupPrefixMap[g]).filter((x) => x != null) : void 0;
|
|
238
|
+
return {
|
|
239
|
+
...onlySet ? { only: Array.from(onlySet) } : {},
|
|
240
|
+
...namePrefixes?.length ? { namePrefixes } : {}
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
export { createContextRunner, createDynamicImportAdapter, createExtension, generateExtensionManifest, generateManifest, getGroupNamePrefixes, registerExtension, resolveExtensionPackageRoot };
|
|
5
245
|
//# sourceMappingURL=extension.js.map
|
|
6
246
|
//# sourceMappingURL=extension.js.map
|
package/dist/extension.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"extension.js"}
|
|
1
|
+
{"version":3,"sources":["../src/api/extension/contextRunner.ts","../src/api/extension/dynamicImportAdapter.ts","../src/api/extension/resolvePackageRoot.ts","../src/api/extension/registerExtension.ts","../src/api/extension/createExtension.ts","../src/api/extension/generateExtensionManifest.ts","../src/api/extension/groupPrefix.ts"],"names":["path","fileURLToPath","existsSync"],"mappings":"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","file":"extension.js","sourcesContent":["/**\n * Generic context injection for extension tools (e.g. builtin).\n * Any extension that needs to inject config (sandbox, allowedHosts, etc.) into handlers uses this.\n */\nimport { AsyncLocalStorage } from \"node:async_hooks\";\n\nexport interface ContextRunner<T> {\n runWith(ctx: T, fn: () => Promise<unknown>): Promise<unknown>;\n getContext(): T;\n}\n\n/**\n * Create a context runner for an extension. Handlers call getContext() to read config.\n * Adapter calls runWith(ctx, () => handler(args)) so getContext() returns ctx.\n */\nexport function createContextRunner<T>(): ContextRunner<T> {\n const storage = new AsyncLocalStorage<T>();\n return {\n runWith(ctx: T, fn: () => Promise<unknown>): Promise<unknown> {\n return storage.run(ctx, fn);\n },\n getContext(): T {\n const ctx = storage.getStore();\n if (ctx === undefined) {\n throw new Error(\"Extension context not set; invoke only through the extension adapter.\");\n }\n return ctx;\n },\n };\n}\n","/**\n * Generic adapter for extensions that discover tools via manifest and load handlers by dynamic import.\n * Any extension (builtin, etc.) that uses @tool scan → manifest and runs handlers with injected context uses this.\n */\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport type { ToolAdapter, ToolSpec } from \"../../core/types/ToolSpec.js\";\nimport type { ExecContext } from \"../../core/types/ToolIntent.js\";\nimport type { Evidence } from \"../../core/types/ToolResult.js\";\n\n/** If spec.inputSchema wraps params in \"args\", return args.args for the handler; else return args. */\nfunction unwrapArgsForHandler(spec: ToolSpec, args: unknown): unknown {\n if (args == null || typeof args !== \"object\" || Array.isArray(args)) return args;\n const s = spec.inputSchema as Record<string, unknown>;\n if (s?.type !== \"object\" || !s.properties || typeof s.properties !== \"object\") return args;\n const props = s.properties as Record<string, unknown>;\n const argsProp = props.args;\n if (\n argsProp != null &&\n typeof argsProp === \"object\" &&\n (argsProp as Record<string, unknown>).type === \"object\" &&\n (argsProp as Record<string, unknown>).properties != null\n ) {\n const obj = args as Record<string, unknown>;\n if (Object.keys(obj).length === 1 && \"args\" in obj && typeof obj.args === \"object\" && obj.args !== null) {\n return obj.args;\n }\n }\n return args;\n}\n\nexport interface ExtensionToolResult {\n result: unknown;\n evidence: Evidence[];\n}\n\nexport interface DynamicImportAdapterOptions<TContext> {\n kind: string;\n packageRoot: string;\n /**\n * Build context from execCtx, spec, and merged request args.\n * Framework merges defaultArgs (tool.yaml) with request args; implementor can merge into ctx.config\n * so handlers read resolved config from context instead of re-resolving in each handler.\n */\n getExtensionContext: (execCtx: ExecContext, spec: ToolSpec, mergedArgs?: Record<string, unknown>) => TContext;\n contextRunner: { runWith(ctx: TContext, fn: () => Promise<ExtensionToolResult>): Promise<ExtensionToolResult> };\n}\n\n/**\n * Create an adapter that loads handlers by spec._meta.sourcePath and exportName, then runs with extension context.\n */\nexport function createDynamicImportAdapter<TContext>(\n options: DynamicImportAdapterOptions<TContext>,\n): ToolAdapter {\n const { kind, packageRoot, getExtensionContext, contextRunner } = options;\n return {\n kind: kind as ToolAdapter[\"kind\"],\n async invoke(\n spec: ToolSpec,\n args: unknown,\n execCtx: ExecContext,\n ): Promise<{ result: unknown; raw?: unknown }> {\n const meta = spec._meta as {\n sourcePath?: string;\n exportName?: string;\n defaultArgs?: Record<string, unknown>;\n packageRoot?: string;\n } | undefined;\n const sourcePath = meta?.sourcePath;\n const exportName = meta?.exportName;\n if (!sourcePath || !exportName) {\n throw new Error(`Extension tool ${spec.name} missing _meta.sourcePath or _meta.exportName`);\n }\n const defaultArgs = meta?.defaultArgs ?? {};\n const mergedArgs =\n Object.keys(defaultArgs).length === 0\n ? (args as Record<string, unknown>)\n : { ...defaultArgs, ...(args as Record<string, unknown>) };\n const handlerArgs = unwrapArgsForHandler(spec, mergedArgs);\n const resolvedPackageRoot = meta?.packageRoot ?? packageRoot;\n const modulePath = path.join(resolvedPackageRoot, `${sourcePath}.js`);\n const mod = await import(pathToFileURL(modulePath).href);\n const handler = mod[exportName];\n if (typeof handler !== \"function\") {\n throw new Error(\n `Extension tool ${spec.name}: export \"${exportName}\" from ${sourcePath} is not a function`,\n );\n }\n const ctx = getExtensionContext(execCtx, spec, mergedArgs as Record<string, unknown>);\n const output = await contextRunner.runWith(ctx, () => handler(handlerArgs));\n // Return full envelope so pipeline output validation (outputSchema: { result, evidence }) passes.\n return {\n result: { result: output.result, evidence: output.evidence },\n raw: { evidence: output.evidence },\n };\n },\n };\n}\n","/**\n * Resolve extension package root for dynamic import (dist when built, else dir).\n * Accepts import.meta.url (file:) or a directory path (e.g. __dirname).\n */\nimport path from \"node:path\";\nimport { existsSync } from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\n\nexport function resolveExtensionPackageRoot(metaUrlOrPath: string): string {\n const dir = metaUrlOrPath.startsWith(\"file:\")\n ? path.dirname(fileURLToPath(metaUrlOrPath))\n : path.resolve(metaUrlOrPath);\n const dist = path.join(dir, \"dist\");\n return existsSync(dist) ? dist : dir;\n}\n","/**\n * One-shot: load pre-built manifest from package, register all specs, create adapter.\n * Framework does NOT scan source for @tool; it reads manifest (e.g. core-tools-manifest.json)\n * produced by the extension's build. Extension passes packagePath, config, getContextRunner.\n */\nimport type { ToolAdapter } from \"../../core/types/ToolSpec.js\";\nimport type { ToolRegistry } from \"../../core/registry/ToolRegistry.js\";\nimport type { ExecContext } from \"../../core/types/ToolIntent.js\";\nimport type { ContextRunner } from \"./contextRunner.js\";\nimport { createDynamicImportAdapter } from \"./dynamicImportAdapter.js\";\nimport type { ExtensionToolResult } from \"./dynamicImportAdapter.js\";\nimport { registerToolsFromManifest, loadExtensionManifest } from \"./registerFromManifest.js\";\nimport { resolveExtensionPackageRoot } from \"./resolvePackageRoot.js\";\n\nexport interface RegisterExtensionOptions<TContext> {\n /** Package root (e.g. __dirname of extension's entry). Manifest is read from here. */\n packagePath: string;\n /** Tool kind; if omitted, uses manifest.kind or \"extension\". */\n kind?: string;\n /** Optional default config; merged with each tool's tool.yaml (spec._meta.defaultArgs). Context config = { ...config, ...toolDefaultArgs }. */\n config?: unknown;\n /** Returns the context runner (extension's createContextRunner()). */\n getContextRunner: () => ContextRunner<TContext>;\n /** Filter: only register these tool names. */\n only?: string[];\n /** Filter: only register tools whose name starts with one of these prefixes. */\n namePrefixes?: string[];\n}\n\n/**\n * Load manifest from package (pre-built JSON; no @tool scanning). Register all specs, create and return adapter.\n */\nexport function registerExtension<TContext extends { execCtx: ExecContext; config: unknown }>(\n registry: ToolRegistry,\n options: RegisterExtensionOptions<TContext>,\n): ToolAdapter {\n const { packagePath, kind: kindOpt, config, getContextRunner, only, namePrefixes } = options;\n const packageRoot = resolveExtensionPackageRoot(packagePath);\n const contextRunner = getContextRunner();\n const loaded = loadExtensionManifest(packagePath);\n const kind = kindOpt ?? loaded.kind ?? \"extension\";\n\n registerToolsFromManifest(registry, {\n manifestPathOrDir: packagePath,\n kind,\n only,\n namePrefixes,\n packageRoot,\n });\n\n const adapter = createDynamicImportAdapter<TContext>({\n kind,\n packageRoot,\n getExtensionContext: (\n execCtx: ExecContext,\n spec: import(\"../../core/types/ToolSpec.js\").ToolSpec,\n mergedArgs?: Record<string, unknown>,\n ) => {\n const defaultArgs = (spec._meta as { defaultArgs?: Record<string, unknown> } | undefined)?.defaultArgs ?? {};\n const baseConfig = (config !== undefined ? (config as Record<string, unknown>) : {}) as Record<string, unknown>;\n const toolOverrides = baseConfig?.toolOverrides as Record<string, Record<string, unknown>> | undefined;\n const shortName = (spec._meta as { shortName?: string } | undefined)?.shortName ?? spec.name;\n // Derive package-scoped key (no version): e.g. \"npm.easynet.agent.tool.buildin::fs.listDir\" so config survives package version bumps\n const prefixWithVersion =\n shortName && spec.name.endsWith(shortName) && spec.name.length > shortName.length\n ? spec.name.slice(0, spec.name.length - shortName.length - 1)\n : \"\";\n const parts = prefixWithVersion ? prefixWithVersion.split(\".\") : [];\n const packageScopedKey =\n parts.length > 1 ? `${parts.slice(0, -1).join(\".\")}::${shortName}` : \"\";\n const perTool = (toolOverrides?.[spec.name] ??\n (packageScopedKey ? toolOverrides?.[packageScopedKey] : undefined) ??\n toolOverrides?.[shortName] ??\n {}) as Record<string, unknown>;\n const packagePrefix = parts.length > 1 ? parts.slice(0, -1).join(\".\") : \"\";\n const packageDefaults = baseConfig?.packageDefaults as Record<string, Record<string, unknown>> | undefined;\n const packageDefaultsForPkg =\n (packagePrefix && packageDefaults?.[packagePrefix]) ??\n (prefixWithVersion && packageDefaults?.[prefixWithVersion]) ??\n {};\n const baseWithoutOverrides = { ...baseConfig };\n delete (baseWithoutOverrides as Record<string, unknown>).toolOverrides;\n delete (baseWithoutOverrides as Record<string, unknown>).packageDefaults;\n const resolvedConfig = {\n ...defaultArgs,\n ...baseWithoutOverrides,\n ...packageDefaultsForPkg,\n ...perTool,\n ...(mergedArgs ?? {}),\n } as TContext[\"config\"];\n return { execCtx, config: resolvedConfig } as TContext;\n },\n contextRunner: {\n runWith(ctx: TContext, fn: () => Promise<ExtensionToolResult>) {\n return contextRunner.runWith(ctx, fn) as Promise<ExtensionToolResult>;\n },\n },\n });\n return adapter;\n}\n","/**\n * One-shot extension bootstrap: context runner + register + getContext/runWith.\n * Config can be extension-level (buildConfig) or per-tool only (defaultConfig in opts, merged with tool.yaml).\n */\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { ToolAdapter } from \"../../core/types/ToolSpec.js\";\nimport type { ToolRegistry } from \"../../core/registry/ToolRegistry.js\";\nimport { createContextRunner } from \"./contextRunner.js\";\nimport { registerExtension } from \"./registerExtension.js\";\nimport type { ExtensionToolContext } from \"./types.js\";\n\n/** Pass import.meta so the framework derives packagePath (extension entry does not need path/fileURLToPath). */\nexport interface ImportMetaLike {\n url: string;\n}\n\n/** Options when config is built from userConfig (buildConfig). */\nexport interface CreateExtensionOptionsWithBuild<TConfig, TUserConfig> {\n packagePath?: string;\n importMeta?: ImportMetaLike;\n kind?: string;\n buildConfig: (userConfig: TUserConfig) => TConfig;\n}\n\n/** Options when config is per-tool only (each tool's tool.yaml). */\nexport interface CreateExtensionOptionsDefaultOnly {\n packagePath?: string;\n importMeta?: ImportMetaLike;\n kind?: string;\n}\n\n/** Register opts when using per-tool config only: filter tools by name. */\nexport interface RegisterOptionsDefaultOnly {\n only?: string[];\n namePrefixes?: string[];\n}\n\nexport type CreateExtensionOptions<TConfig, TUserConfig> =\n | CreateExtensionOptionsWithBuild<TConfig, TUserConfig>\n | (CreateExtensionOptionsDefaultOnly & { buildConfig?: never });\n\nexport interface CreateExtensionResult<TConfig, TUserConfig> {\n register(\n registry: ToolRegistry,\n userConfigOrOpts: TUserConfig,\n options?: { only?: string[]; namePrefixes?: string[] },\n ): ToolAdapter;\n getContext(): ExtensionToolContext<TConfig>;\n runWith<T>(ctx: ExtensionToolContext<TConfig>, fn: () => Promise<T>): Promise<T>;\n}\n\n/**\n * Create an extension. With buildConfig: register(registry, userConfig, opts?).\n * Without buildConfig: register(registry, opts?) where opts = { only?, namePrefixes? }; config comes only from each tool's tool.yaml.\n */\nfunction resolvePackagePath(options: { packagePath?: string; importMeta?: ImportMetaLike }): string {\n if (options.packagePath != null && options.packagePath !== \"\") return options.packagePath;\n if (options.importMeta?.url) return path.dirname(fileURLToPath(options.importMeta.url));\n throw new Error(\"createExtension: provide packagePath or importMeta\");\n}\n\nexport function createExtension<TConfig = Record<string, unknown>, TUserConfig = RegisterOptionsDefaultOnly>(\n options: CreateExtensionOptions<TConfig, TUserConfig>,\n): CreateExtensionResult<TConfig, TUserConfig> {\n const packagePath = resolvePackagePath(options);\n const kind = options.kind;\n const buildConfig = \"buildConfig\" in options ? options.buildConfig : undefined;\n type Ctx = ExtensionToolContext<TConfig>;\n const contextRunner = createContextRunner<Ctx>();\n\n return {\n register(registry, userConfigOrOpts, opts) {\n const config = buildConfig\n ? (buildConfig as (u: TUserConfig) => TConfig)(userConfigOrOpts as TUserConfig)\n : (userConfigOrOpts as Record<string, unknown> | undefined);\n return registerExtension(registry, {\n packagePath,\n kind,\n config,\n getContextRunner: () => contextRunner,\n only: opts?.only ?? (userConfigOrOpts as RegisterOptionsDefaultOnly | undefined)?.only,\n namePrefixes: opts?.namePrefixes ?? (userConfigOrOpts as RegisterOptionsDefaultOnly | undefined)?.namePrefixes,\n });\n },\n getContext(): ExtensionToolContext<TConfig> {\n return contextRunner.getContext() as ExtensionToolContext<TConfig>;\n },\n runWith<T>(ctx: ExtensionToolContext<TConfig>, fn: () => Promise<T>): Promise<T> {\n return contextRunner.runWith(ctx, fn) as Promise<T>;\n },\n };\n}\n","/**\n * Build step: scan project for @tool, emit extension manifest (core-tools-manifest.json) and copy *.tool.yaml / *.example.yaml.\n * Extensions run this at build time; agent-tool reads the manifest when the extension's register is called.\n */\nimport { writeFileSync, mkdirSync, existsSync, readdirSync, copyFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { scanForTools } from \"../../tools/function/scanner.js\";\nimport type { ExtensionManifestEntry } from \"./registerFromManifest.js\";\nimport type { HitlSideEffect } from \"../../core/types/ToolSpec.js\";\n\nexport interface GenerateExtensionManifestOptions {\n /** Project root (default: process.cwd()). */\n projectRoot?: string;\n /** Output directory for manifest and copied tool.yaml (default: projectRoot/dist). */\n outDir?: string;\n /** Manifest kind (default: \"core\"). */\n kind?: string;\n /** Include globs for TS files (default: all .ts). */\n include?: string[];\n /** Path to tsconfig (default: projectRoot/tsconfig.json). */\n tsconfigPath?: string;\n /** Subdirs to recursively copy *.tool.yaml and *.example.yaml from (e.g. [\"src\"]). */\n copyToolYamlDirs?: string[];\n}\n\nfunction copyToolYamlRecursive(srcDir: string, destDir: string): number {\n if (!existsSync(srcDir)) return 0;\n let copied = 0;\n for (const e of readdirSync(srcDir, { withFileTypes: true })) {\n const srcPath = path.join(srcDir, e.name);\n const destPath = path.join(destDir, e.name);\n if (e.isFile() && (e.name.endsWith(\".tool.yaml\") || e.name.endsWith(\".example.yaml\"))) {\n if (!existsSync(destDir)) mkdirSync(destDir, { recursive: true });\n copyFileSync(srcPath, destPath);\n copied++;\n } else if (e.isDirectory()) {\n copied += copyToolYamlRecursive(srcPath, destPath);\n }\n }\n return copied;\n}\n\n/**\n * Scan project for @tool, write core-tools-manifest.json and recursively copy *.tool.yaml and *.example.yaml to outDir.\n * Returns the written manifest path and number of tools.\n */\nexport function generateExtensionManifest(\n projectRoot: string = process.cwd(),\n options: GenerateExtensionManifestOptions = {},\n): { manifestPath: string; toolsCount: number; toolYamlCopied: number } {\n const root = path.resolve(projectRoot);\n const outDir = path.resolve(options.outDir ?? path.join(root, \"dist\"));\n const kind = options.kind ?? \"core\";\n\n const { specs, errors } = scanForTools({\n projectPath: root,\n include: options.include ?? [\"**/*.ts\"],\n tsconfigPath: options.tsconfigPath,\n });\n\n if (errors.length > 0) {\n console.warn(\"generateExtensionManifest: scan errors\", errors);\n }\n\n const entries: ExtensionManifestEntry[] = specs.map((spec) => {\n const sourcePathNoExt = (spec.sourcePath ?? \"\").replace(/\\.(ts|tsx)$/i, \"\");\n const pathBasedName = sourcePathNoExt.replace(/^src\\//, \"\").replace(/\\//g, \".\");\n const name = spec.exportName ?? pathBasedName;\n const sideEffect: HitlSideEffect =\n (spec._meta?.hitl?.sideEffect as HitlSideEffect) ?? \"none\";\n return {\n name,\n description: spec.description ?? sourcePathNoExt,\n inputSchema: spec.inputSchema ?? { type: \"object\", additionalProperties: true },\n outputSchema: spec.outputSchema ?? { type: \"object\", additionalProperties: true },\n sourcePath: sourcePathNoExt,\n exportName: spec.exportName ?? \"\",\n sideEffect,\n };\n });\n\n if (!existsSync(outDir)) mkdirSync(outDir, { recursive: true });\n const manifestPath = path.join(outDir, \"core-tools-manifest.json\");\n writeFileSync(\n manifestPath,\n JSON.stringify({ kind, tools: entries }, null, 2),\n \"utf-8\",\n );\n\n let toolYamlCopied = 0;\n const copyDirs = options.copyToolYamlDirs;\n if (copyDirs?.length) {\n for (const d of copyDirs) {\n const srcDir = path.join(root, d);\n const destDir = path.join(outDir, d);\n try {\n toolYamlCopied += copyToolYamlRecursive(srcDir, destDir);\n } catch {\n // ignore\n }\n }\n }\n\n return { manifestPath, toolsCount: entries.length, toolYamlCopied };\n}\n\n/**\n * Build step for extensions: scan src folder and subfolders, emit manifest, copy tool.yaml.\n * Call from extension's build script (e.g. tsx generate-manifest.ts).\n */\nexport function generateManifest(\n projectRoot: string = process.cwd(),\n options: Omit<GenerateExtensionManifestOptions, \"projectRoot\"> = {},\n): void {\n const { manifestPath, toolsCount, toolYamlCopied } = generateExtensionManifest(projectRoot, {\n include: [\"src/**/*.ts\"],\n copyToolYamlDirs: [\"src\"],\n ...options,\n });\n console.log(`Wrote ${toolsCount} tools to ${path.relative(projectRoot, manifestPath)}`);\n if (toolYamlCopied > 0) console.log(`Copied ${toolYamlCopied} .tool.yaml/.example.yaml file(s) to dist`);\n}\n","/**\n * Convert \"groups\" + \"only\" options and a group→prefix map into only/namePrefixes for registerToolsFromManifest.\n * Extensions define their own group names and prefixes (e.g. fs -> \"core/fs.\").\n */\nexport interface GroupPrefixOptions {\n /** Only register tools in these groups (e.g. [\"fs\", \"http\"]). */\n groups?: string[];\n /** Only register these tool names. Takes precedence over groups. */\n only?: string[];\n /** Map group name -> name prefix (e.g. { fs: \"core/fs.\", http: \"core/http.\" }). */\n groupPrefixMap: Record<string, string>;\n}\n\nexport interface ResolvedOnlyNamePrefixes {\n only?: string[];\n namePrefixes?: string[];\n}\n\n/**\n * Resolve groups/only + groupPrefixMap to only and namePrefixes for registerToolsFromManifest.\n */\nexport function getGroupNamePrefixes(options: GroupPrefixOptions): ResolvedOnlyNamePrefixes {\n const { groups, only, groupPrefixMap } = options;\n const onlySet = only?.length ? new Set(only) : null;\n const namePrefixes =\n !onlySet && groups?.length\n ? (groups.map((g) => groupPrefixMap[g]).filter((x): x is string => x != null) as string[])\n : undefined;\n return {\n ...(onlySet ? { only: Array.from(onlySet) } : {}),\n ...(namePrefixes?.length ? { namePrefixes } : {}),\n };\n}\n"]}
|
package/dist/index.cjs
CHANGED
|
@@ -1,163 +1,25 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
require('./chunk-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
require('./chunk-ICHSEIZN.cjs');
|
|
7
|
-
require('./chunk-NOGGIM7B.cjs');
|
|
8
|
-
var chunkGXFDYM3O_cjs = require('./chunk-GXFDYM3O.cjs');
|
|
9
|
-
var chunk5QH7YY4Z_cjs = require('./chunk-5QH7YY4Z.cjs');
|
|
10
|
-
var chunkTBDSFXNG_cjs = require('./chunk-TBDSFXNG.cjs');
|
|
11
|
-
var chunkEIIHED57_cjs = require('./chunk-EIIHED57.cjs');
|
|
3
|
+
var chunk6NBQAFVB_cjs = require('./chunk-6NBQAFVB.cjs');
|
|
4
|
+
require('./chunk-F4HS7H7K.cjs');
|
|
5
|
+
require('./chunk-XPQZLO4A.cjs');
|
|
12
6
|
require('./chunk-UUNG3GL3.cjs');
|
|
13
|
-
require('./chunk-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
var path = require('path');
|
|
20
|
-
var agentCommon = require('@easynet/agent-common');
|
|
7
|
+
require('./chunk-V2RD4BHT.cjs');
|
|
8
|
+
require('./chunk-LHKEJNKL.cjs');
|
|
9
|
+
require('./chunk-ZDSZHEQU.cjs');
|
|
10
|
+
require('./chunk-PYCCJF7C.cjs');
|
|
11
|
+
require('./chunk-XPGHS4W7.cjs');
|
|
12
|
+
require('./chunk-QEJF3KDV.cjs');
|
|
21
13
|
|
|
22
|
-
// src/config/ref.ts
|
|
23
|
-
function asObject(input) {
|
|
24
|
-
return typeof input === "object" && input !== null ? input : void 0;
|
|
25
|
-
}
|
|
26
|
-
function normalizeAgentToolConfigRef(raw) {
|
|
27
|
-
if (typeof raw === "string" && raw.trim().length > 0) return { ref: raw.trim() };
|
|
28
|
-
const obj = asObject(raw);
|
|
29
|
-
if (!obj) return {};
|
|
30
|
-
const out = {};
|
|
31
|
-
if (typeof obj.ref === "string" && obj.ref.trim().length > 0) out.ref = obj.ref.trim();
|
|
32
|
-
if (typeof obj.development === "string" && obj.development.trim().length > 0) out.development = obj.development.trim();
|
|
33
|
-
if (typeof obj.production === "string" && obj.production.trim().length > 0) out.production = obj.production.trim();
|
|
34
|
-
return out;
|
|
35
|
-
}
|
|
36
14
|
|
|
37
|
-
// src/config/index.ts
|
|
38
|
-
function loadToolRuntimeConfig(options = {}) {
|
|
39
|
-
const configPath = path.resolve(options.configPath ?? "config/tool.yaml");
|
|
40
|
-
return chunkEIIHED57_cjs.loadToolConfig(configPath);
|
|
41
|
-
}
|
|
42
|
-
function createToolConfig(options = {}) {
|
|
43
|
-
const base = loadToolRuntimeConfig(options);
|
|
44
|
-
if (!options.overrides) return base;
|
|
45
|
-
return agentCommon.deepMerge({}, base, options.overrides);
|
|
46
|
-
}
|
|
47
15
|
|
|
48
|
-
// src/index.ts
|
|
49
|
-
var platformApi = {
|
|
50
|
-
build: {
|
|
51
|
-
initProject: chunkTBDSFXNG_cjs.initProject,
|
|
52
|
-
buildMCPPackage: chunkTBDSFXNG_cjs.buildMCPPackage,
|
|
53
|
-
runMCPServer: chunkTBDSFXNG_cjs.runMCPServer,
|
|
54
|
-
scanForTools: chunkLHKEJNKL_cjs.scanForTools,
|
|
55
|
-
scan: chunkLHKEJNKL_cjs.scan
|
|
56
|
-
},
|
|
57
|
-
extension: {
|
|
58
|
-
createExtension: chunkDGE2AHYT_cjs.createExtension,
|
|
59
|
-
generateManifest: chunkDGE2AHYT_cjs.generateManifest,
|
|
60
|
-
generateExtensionManifest: chunkDGE2AHYT_cjs.generateExtensionManifest,
|
|
61
|
-
registerExtension: chunkDGE2AHYT_cjs.registerExtension,
|
|
62
|
-
registerToolsFromManifest: chunk5QH7YY4Z_cjs.registerToolsFromManifest,
|
|
63
|
-
loadExtensionManifest: chunk5QH7YY4Z_cjs.loadExtensionManifest,
|
|
64
|
-
loadToolYaml: chunk5QH7YY4Z_cjs.loadToolYaml,
|
|
65
|
-
resolveExtensionPackageRoot: chunkDGE2AHYT_cjs.resolveExtensionPackageRoot,
|
|
66
|
-
overrideWithConfig: chunkDGE2AHYT_cjs.overrideWithConfig,
|
|
67
|
-
getGroupNamePrefixes: chunkDGE2AHYT_cjs.getGroupNamePrefixes,
|
|
68
|
-
createDynamicImportAdapter: chunkDGE2AHYT_cjs.createDynamicImportAdapter,
|
|
69
|
-
createContextRunner: chunkDGE2AHYT_cjs.createContextRunner
|
|
70
|
-
},
|
|
71
|
-
security: {
|
|
72
|
-
resolveSandboxedPath: chunkZDSZHEQU_cjs.resolveSandboxedPath,
|
|
73
|
-
setSandboxValidationEnabled: chunkZDSZHEQU_cjs.setSandboxValidationEnabled,
|
|
74
|
-
validateUrl: chunkR55NXJIH_cjs.validateUrl,
|
|
75
|
-
isIpInBlockedCidrs: chunkR55NXJIH_cjs.isIpInBlockedCidrs
|
|
76
|
-
},
|
|
77
|
-
core: {
|
|
78
|
-
createToolSpec: chunkQEJF3KDV_cjs.createToolSpec,
|
|
79
|
-
DEFAULT_INPUT_SCHEMA: chunkQEJF3KDV_cjs.DEFAULT_INPUT_SCHEMA,
|
|
80
|
-
DEFAULT_OUTPUT_SCHEMA: chunkQEJF3KDV_cjs.DEFAULT_OUTPUT_SCHEMA
|
|
81
|
-
},
|
|
82
|
-
runtime: {
|
|
83
|
-
createTaggedError: chunkXPGHS4W7_cjs.createTaggedError,
|
|
84
|
-
withRetry: chunkXPGHS4W7_cjs.withRetry,
|
|
85
|
-
isRetryable: chunkXPGHS4W7_cjs.isRetryable,
|
|
86
|
-
ToolRegistry: chunkPYCCJF7C_cjs.ToolRegistry
|
|
87
|
-
}
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
Object.defineProperty(exports, "createLangChainAgentTools", {
|
|
91
|
-
enumerable: true,
|
|
92
|
-
get: function () { return chunkGXFDYM3O_cjs.createLangChainAgentTools; }
|
|
93
|
-
});
|
|
94
16
|
Object.defineProperty(exports, "createMcpServer", {
|
|
95
17
|
enumerable: true,
|
|
96
|
-
get: function () { return
|
|
18
|
+
get: function () { return chunk6NBQAFVB_cjs.createMcpServer; }
|
|
97
19
|
});
|
|
98
20
|
Object.defineProperty(exports, "createOpenAPIServer", {
|
|
99
21
|
enumerable: true,
|
|
100
|
-
get: function () { return
|
|
101
|
-
});
|
|
102
|
-
Object.defineProperty(exports, "langchainApi", {
|
|
103
|
-
enumerable: true,
|
|
104
|
-
get: function () { return chunkGXFDYM3O_cjs.langchainApi; }
|
|
105
|
-
});
|
|
106
|
-
Object.defineProperty(exports, "mcpApi", {
|
|
107
|
-
enumerable: true,
|
|
108
|
-
get: function () { return chunkGXFDYM3O_cjs.mcpApi; }
|
|
109
|
-
});
|
|
110
|
-
Object.defineProperty(exports, "openApi", {
|
|
111
|
-
enumerable: true,
|
|
112
|
-
get: function () { return chunkGXFDYM3O_cjs.openApi; }
|
|
113
|
-
});
|
|
114
|
-
Object.defineProperty(exports, "runtimeApi", {
|
|
115
|
-
enumerable: true,
|
|
116
|
-
get: function () { return chunkGXFDYM3O_cjs.runtimeApi; }
|
|
117
|
-
});
|
|
118
|
-
Object.defineProperty(exports, "createMCPServer", {
|
|
119
|
-
enumerable: true,
|
|
120
|
-
get: function () { return chunkEIIHED57_cjs.createMCPServer; }
|
|
121
|
-
});
|
|
122
|
-
Object.defineProperty(exports, "createMCPServerStreamableHttp", {
|
|
123
|
-
enumerable: true,
|
|
124
|
-
get: function () { return chunkEIIHED57_cjs.createMCPServerStreamableHttp; }
|
|
125
|
-
});
|
|
126
|
-
Object.defineProperty(exports, "createMCPStreamableHttpHandler", {
|
|
127
|
-
enumerable: true,
|
|
128
|
-
get: function () { return chunkEIIHED57_cjs.createMCPStreamableHttpHandler; }
|
|
129
|
-
});
|
|
130
|
-
Object.defineProperty(exports, "createRuntimeFromConfig", {
|
|
131
|
-
enumerable: true,
|
|
132
|
-
get: function () { return chunkEIIHED57_cjs.createRuntimeFromConfig; }
|
|
133
|
-
});
|
|
134
|
-
Object.defineProperty(exports, "createRuntimeFromConfigSync", {
|
|
135
|
-
enumerable: true,
|
|
136
|
-
get: function () { return chunkEIIHED57_cjs.createRuntimeFromConfigSync; }
|
|
137
|
-
});
|
|
138
|
-
Object.defineProperty(exports, "runMCPServerOverStdio", {
|
|
139
|
-
enumerable: true,
|
|
140
|
-
get: function () { return chunkEIIHED57_cjs.runMCPServerOverStdio; }
|
|
141
|
-
});
|
|
142
|
-
Object.defineProperty(exports, "ToolRegistry", {
|
|
143
|
-
enumerable: true,
|
|
144
|
-
get: function () { return chunkPYCCJF7C_cjs.ToolRegistry; }
|
|
145
|
-
});
|
|
146
|
-
Object.defineProperty(exports, "createTaggedError", {
|
|
147
|
-
enumerable: true,
|
|
148
|
-
get: function () { return chunkXPGHS4W7_cjs.createTaggedError; }
|
|
149
|
-
});
|
|
150
|
-
Object.defineProperty(exports, "isRetryable", {
|
|
151
|
-
enumerable: true,
|
|
152
|
-
get: function () { return chunkXPGHS4W7_cjs.isRetryable; }
|
|
153
|
-
});
|
|
154
|
-
Object.defineProperty(exports, "withRetry", {
|
|
155
|
-
enumerable: true,
|
|
156
|
-
get: function () { return chunkXPGHS4W7_cjs.withRetry; }
|
|
22
|
+
get: function () { return chunk6NBQAFVB_cjs.createOpenAPIServer; }
|
|
157
23
|
});
|
|
158
|
-
exports.createToolConfig = createToolConfig;
|
|
159
|
-
exports.loadToolRuntimeConfig = loadToolRuntimeConfig;
|
|
160
|
-
exports.normalizeAgentToolConfigRef = normalizeAgentToolConfigRef;
|
|
161
|
-
exports.platformApi = platformApi;
|
|
162
24
|
//# sourceMappingURL=index.cjs.map
|
|
163
25
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,59 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Minimal public API for @easynet/agent-tool.
|
|
3
|
-
*
|
|
3
|
+
* Only expose standalone server factories.
|
|
4
4
|
*/
|
|
5
|
-
export {
|
|
6
|
-
export type { CreateAgentToolsOptions, CreateRuntimeOptions, CreateRuntimeResult, MCPServerOptions, MCPServerResult, McpServer, CreateMCPServerStreamableHttpOptions, MCPServerStreamableHttpResult, CreateHttpServiceOptions, HttpServiceResult, OpenAPIExpressApp, OpenAPIHttpServerOptions, } from "./api/main.js";
|
|
7
|
-
export type { AgentToolConfigRef } from "./config/index.js";
|
|
8
|
-
export { normalizeAgentToolConfigRef, loadToolRuntimeConfig, createToolConfig, } from "./config/index.js";
|
|
9
|
-
export type { LoadToolConfigOptions, CreateToolConfigOptions } from "./config/index.js";
|
|
10
|
-
export { createTaggedError, withRetry, isRetryable, ToolRegistry } from "./core/runtime.js";
|
|
11
|
-
import { initProject, buildMCPPackage, runMCPServer, scanForTools, scan } from "./build.js";
|
|
12
|
-
import { createExtension, generateManifest, generateExtensionManifest, registerExtension, registerToolsFromManifest, loadExtensionManifest, loadToolYaml, resolveExtensionPackageRoot, overrideWithConfig, getGroupNamePrefixes, createDynamicImportAdapter, createContextRunner } from "./extension.js";
|
|
13
|
-
import { resolveSandboxedPath, setSandboxValidationEnabled, validateUrl, isIpInBlockedCidrs } from "./security.js";
|
|
14
|
-
import { createToolSpec } from "./core/index.js";
|
|
15
|
-
import { createTaggedError, withRetry, isRetryable, ToolRegistry } from "./core/runtime.js";
|
|
16
|
-
/**
|
|
17
|
-
* Facade: grouped utilities beyond runtime/server creation.
|
|
18
|
-
*/
|
|
19
|
-
export declare const platformApi: {
|
|
20
|
-
readonly build: {
|
|
21
|
-
readonly initProject: typeof initProject;
|
|
22
|
-
readonly buildMCPPackage: typeof buildMCPPackage;
|
|
23
|
-
readonly runMCPServer: typeof runMCPServer;
|
|
24
|
-
readonly scanForTools: typeof scanForTools;
|
|
25
|
-
readonly scan: typeof scan;
|
|
26
|
-
};
|
|
27
|
-
readonly extension: {
|
|
28
|
-
readonly createExtension: typeof createExtension;
|
|
29
|
-
readonly generateManifest: typeof generateManifest;
|
|
30
|
-
readonly generateExtensionManifest: typeof generateExtensionManifest;
|
|
31
|
-
readonly registerExtension: typeof registerExtension;
|
|
32
|
-
readonly registerToolsFromManifest: typeof registerToolsFromManifest;
|
|
33
|
-
readonly loadExtensionManifest: typeof loadExtensionManifest;
|
|
34
|
-
readonly loadToolYaml: typeof loadToolYaml;
|
|
35
|
-
readonly resolveExtensionPackageRoot: typeof resolveExtensionPackageRoot;
|
|
36
|
-
readonly overrideWithConfig: typeof overrideWithConfig;
|
|
37
|
-
readonly getGroupNamePrefixes: typeof getGroupNamePrefixes;
|
|
38
|
-
readonly createDynamicImportAdapter: typeof createDynamicImportAdapter;
|
|
39
|
-
readonly createContextRunner: typeof createContextRunner;
|
|
40
|
-
};
|
|
41
|
-
readonly security: {
|
|
42
|
-
readonly resolveSandboxedPath: typeof resolveSandboxedPath;
|
|
43
|
-
readonly setSandboxValidationEnabled: typeof setSandboxValidationEnabled;
|
|
44
|
-
readonly validateUrl: typeof validateUrl;
|
|
45
|
-
readonly isIpInBlockedCidrs: typeof isIpInBlockedCidrs;
|
|
46
|
-
};
|
|
47
|
-
readonly core: {
|
|
48
|
-
readonly createToolSpec: typeof createToolSpec;
|
|
49
|
-
readonly DEFAULT_INPUT_SCHEMA: object;
|
|
50
|
-
readonly DEFAULT_OUTPUT_SCHEMA: object;
|
|
51
|
-
};
|
|
52
|
-
readonly runtime: {
|
|
53
|
-
readonly createTaggedError: typeof createTaggedError;
|
|
54
|
-
readonly withRetry: typeof withRetry;
|
|
55
|
-
readonly isRetryable: typeof isRetryable;
|
|
56
|
-
readonly ToolRegistry: typeof ToolRegistry;
|
|
57
|
-
};
|
|
58
|
-
};
|
|
5
|
+
export { createMcpServer, createOpenAPIServer } from "./api/createAgentTools.js";
|
|
59
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC"}
|