@easynet/agent-tool 1.0.99 → 1.0.101
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 +32 -30
- package/dist/api/expose/index.d.ts +1 -1
- package/dist/api/register-tools.d.ts +3 -4
- package/dist/api/register-tools.d.ts.map +1 -1
- package/dist/api/runtimeFromConfig.d.ts.map +1 -1
- package/dist/{chunk-3TT5M7A3.js → chunk-34SBJLFZ.js} +18 -11
- package/dist/chunk-34SBJLFZ.js.map +1 -0
- package/dist/{chunk-TJUWCIYZ.cjs → chunk-YBMF3C6F.cjs} +18 -13
- package/dist/chunk-YBMF3C6F.cjs.map +1 -0
- package/dist/index.cjs +13 -69
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -60
- package/dist/index.js.map +1 -1
- package/dist/utils/cli/index.cjs +14 -14
- package/dist/utils/cli/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-3TT5M7A3.js.map +0 -1
- package/dist/chunk-TJUWCIYZ.cjs.map +0 -1
package/README.md
CHANGED
|
@@ -2,46 +2,47 @@
|
|
|
2
2
|
|
|
3
3
|
## Introduction
|
|
4
4
|
|
|
5
|
-
`@easynet/agent-tool` loads
|
|
5
|
+
`@easynet/agent-tool` loads `tool.yaml`, resolves tool extensions into LangChain-compatible tools, and registers them into the default `AgentContext`.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Exposed SDK
|
|
8
8
|
|
|
9
|
-
|
|
|
9
|
+
| Export | Type | Purpose |
|
|
10
10
|
| --- | --- | --- |
|
|
11
|
-
| `createAgentTools` |
|
|
11
|
+
| `createAgentTools` | root function | Loads tools asynchronously from config. Preferred initializer for application bootstrap. |
|
|
12
|
+
| `@easynet/agent-tool/sdk` | subpath | SDK entry for building custom tool extensions. |
|
|
13
|
+
| `ToolRegistry` | sdk export | Registry used to register tool definitions. |
|
|
14
|
+
| `createExtension` | sdk export | Creates an extension package entry. |
|
|
15
|
+
| `registerExtension` | sdk export | Registers an extension into the runtime. |
|
|
16
|
+
| `registerToolsFromManifest` | sdk export | Registers tools from a generated manifest. |
|
|
17
|
+
| `loadToolYaml` | sdk export | Loads and parses `tool.yaml`. |
|
|
18
|
+
| `resolveSandboxedPath` | sdk export | Resolves paths under sandbox constraints. |
|
|
19
|
+
| `validateUrl` | sdk export | Validates outbound URLs for HTTP tools. |
|
|
12
20
|
|
|
13
21
|
## Usage
|
|
14
22
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
```yaml
|
|
18
|
-
apiVersion: easynet.world/v1
|
|
19
|
-
kind: ToolConfig
|
|
20
|
-
metadata:
|
|
21
|
-
name: agent-tool-default
|
|
22
|
-
spec:
|
|
23
|
-
sandboxedPath: .
|
|
24
|
-
allowedHosts: []
|
|
25
|
-
blockedHosts: []
|
|
26
|
-
tools:
|
|
27
|
-
npm:@easynet/agent-tool-buildin: {}
|
|
23
|
+
```bash
|
|
24
|
+
npm i @easynet/agent-tool
|
|
28
25
|
```
|
|
29
26
|
|
|
30
|
-
Load tools:
|
|
31
|
-
|
|
32
27
|
```ts
|
|
33
28
|
import { createAgentTools } from "@easynet/agent-tool";
|
|
34
29
|
|
|
35
|
-
const tools = createAgentTools(
|
|
36
|
-
configFilePath: "./tool.yaml",
|
|
37
|
-
});
|
|
30
|
+
const tools = await createAgentTools("./config/tool.yaml");
|
|
38
31
|
|
|
39
32
|
console.log(tools.map((tool) => tool.name));
|
|
40
33
|
```
|
|
41
34
|
|
|
42
|
-
|
|
35
|
+
Use `createAgentTools()` as the default application initializer. It matches the other async registration APIs (`createAgentModel`, `createAgentMemory`, `createAgentSkills`) and works cleanly with async extension loading.
|
|
43
36
|
|
|
44
|
-
|
|
37
|
+
If you are building your own tool extension, use the SDK subpath:
|
|
38
|
+
|
|
39
|
+
```ts
|
|
40
|
+
import { createExtension } from "@easynet/agent-tool/sdk";
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Configuration
|
|
44
|
+
|
|
45
|
+
The default config file is `config/tool.yaml`.
|
|
45
46
|
|
|
46
47
|
```yaml
|
|
47
48
|
apiVersion: easynet.world/v1
|
|
@@ -56,10 +57,11 @@ spec:
|
|
|
56
57
|
npm:@easynet/agent-tool-buildin: {}
|
|
57
58
|
```
|
|
58
59
|
|
|
59
|
-
|
|
60
|
+
Key fields:
|
|
61
|
+
|
|
62
|
+
- `spec.sandboxedPath`: filesystem root accessible to tools
|
|
63
|
+
- `spec.allowedHosts`: HTTP allowlist
|
|
64
|
+
- `spec.blockedHosts`: HTTP denylist
|
|
65
|
+
- `spec.tools`: extensions to load
|
|
60
66
|
|
|
61
|
-
- `
|
|
62
|
-
- `spec.allowedHosts`: allowlist for outbound HTTP tools.
|
|
63
|
-
- `spec.blockedHosts`: denylist for outbound HTTP tools.
|
|
64
|
-
- `spec.tools`: keyed by tool source descriptor.
|
|
65
|
-
- `npm:@easynet/agent-tool-buildin: {}`: load the built-in tool extension package with default config.
|
|
67
|
+
`npm:@easynet/agent-tool-buildin: {}` loads the built-in tool extension package.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Expose the same tools in multiple ways: LangChain, HTTP (OpenAPI), MCP server.
|
|
3
3
|
*
|
|
4
|
-
* - LangChain: createAgentTools() / LangChainToolsHub
|
|
4
|
+
* - LangChain: await createAgentTools() / LangChainToolsHub
|
|
5
5
|
* - HTTP: createHttpService(runtime) -> { server, openApiSpec, listen() }
|
|
6
6
|
* - MCP: createMCPServer(runtime) -> { server, connectStdio() }
|
|
7
7
|
*/
|
|
@@ -3,16 +3,15 @@ import type { StructuredToolInterface } from "@langchain/core/tools";
|
|
|
3
3
|
export interface CreateAgentToolsModuleOptions extends CreateAgentToolsOptions {
|
|
4
4
|
}
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Preferred async tool initializer for application bootstrap.
|
|
7
7
|
*
|
|
8
8
|
* Sets:
|
|
9
9
|
* - AgentContextTokens.Tools → StructuredToolInterface[]
|
|
10
10
|
*
|
|
11
11
|
* @example
|
|
12
12
|
* ```ts
|
|
13
|
-
* createAgentTools(
|
|
13
|
+
* await createAgentTools("config/tool.yaml");
|
|
14
14
|
* ```
|
|
15
15
|
*/
|
|
16
|
-
export declare function createAgentTools(
|
|
17
|
-
export declare function createAgentToolsAsync(options?: CreateAgentToolsModuleOptions): Promise<StructuredToolInterface[]>;
|
|
16
|
+
export declare function createAgentTools(configPathOrOptions?: string | CreateAgentToolsModuleOptions): Promise<StructuredToolInterface[]>;
|
|
18
17
|
//# sourceMappingURL=register-tools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-tools.d.ts","sourceRoot":"","sources":["../../src/api/register-tools.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"register-tools.d.ts","sourceRoot":"","sources":["../../src/api/register-tools.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAGrE,MAAM,WAAW,6BAA8B,SAAQ,uBAAuB;CAAG;AAEjF;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,mBAAmB,CAAC,EAAE,MAAM,GAAG,6BAA6B,GAC3D,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAQpC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtimeFromConfig.d.ts","sourceRoot":"","sources":["../../src/api/runtimeFromConfig.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAgB3D,OAAO,EAML,kBAAkB,EACnB,MAAM,gCAAgC,CAAC;AAIxC;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,EAAE,MAAM,EAAO,CAAC;AAEvD,gEAAgE;AAChE,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wFAAwF;IACxF,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,kFAAkF;IAClF,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,8PAA8P;IAC9P,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACxD,qKAAqK;IACrK,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,mFAAmF;IACnF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,uDAAuD;AACvD,MAAM,WAAW,sBAAsB;IACrC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,wFAAwF;IACxF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,oEAAoE;IACpE,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,yEAAyE;IACzE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,UAAU,CAAC;IACpB,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,KAAK,UAAU,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,mBAAmB,KAAK,OAAO,CAAC;AACvE,MAAM,MAAM,eAAe,GAAG;IAAE,QAAQ,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"runtimeFromConfig.d.ts","sourceRoot":"","sources":["../../src/api/runtimeFromConfig.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAgB3D,OAAO,EAML,kBAAkB,EACnB,MAAM,gCAAgC,CAAC;AAIxC;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,EAAE,MAAM,EAAO,CAAC;AAEvD,gEAAgE;AAChE,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wFAAwF;IACxF,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,kFAAkF;IAClF,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,8PAA8P;IAC9P,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACxD,qKAAqK;IACrK,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,mFAAmF;IACnF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,uDAAuD;AACvD,MAAM,WAAW,sBAAsB;IACrC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,wFAAwF;IACxF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,oEAAoE;IACpE,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,yEAAyE;IACzE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,UAAU,CAAC;IACpB,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,KAAK,UAAU,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,mBAAmB,KAAK,OAAO,CAAC;AACvE,MAAM,MAAM,eAAe,GAAG;IAAE,QAAQ,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AA4CzH,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAuH9B,uHAAuH;AACvH,wBAAgB,iCAAiC,CAC/C,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAClC,eAAe,EAAE,CAmBnB;AAsID;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,GAAE,oBAAyB,GAAG,mBAAmB,CAwDnG;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAgD9B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DirectoryScanner, MCP_KIND } from './chunk-POUTZDWB.js';
|
|
2
|
-
import {
|
|
2
|
+
import { setSandboxValidationEnabled, ToolRegistry, createTaggedError, withRetry } from './chunk-IVL4TBFB.js';
|
|
3
3
|
import { normalizeToolName } from './chunk-BDUSB6GT.js';
|
|
4
4
|
import { enrichSpecWithCanonicalSchema } from './chunk-NTWOVFEY.js';
|
|
5
5
|
import { readFileSync, existsSync, statSync, rmSync, mkdirSync, readdirSync, renameSync } from 'fs';
|
|
@@ -2044,6 +2044,11 @@ function parseNpmDescriptor(entry) {
|
|
|
2044
2044
|
// src/api/runtimeFromConfig.ts
|
|
2045
2045
|
var requireFromPackage2 = createRequire(import.meta.url);
|
|
2046
2046
|
var DEFAULT_EXTENSION_PACKAGES = [];
|
|
2047
|
+
function resolveEffectiveCoreTools(options) {
|
|
2048
|
+
if (options.coreTools) return options.coreTools;
|
|
2049
|
+
if (options.configFilePath) return {};
|
|
2050
|
+
return void 0;
|
|
2051
|
+
}
|
|
2047
2052
|
function resolveFileDescriptorPath(descriptor, configFilePath) {
|
|
2048
2053
|
const parsed = parseToolPath(descriptor.trim());
|
|
2049
2054
|
if (!parsed || parsed.protocol !== "file") return null;
|
|
@@ -2299,8 +2304,9 @@ async function loadAllExtensionsFromToolYamlAsync(configFilePath, stepLog) {
|
|
|
2299
2304
|
function createRuntimeFromConfigSync(options = {}) {
|
|
2300
2305
|
const registry = new ToolRegistry();
|
|
2301
2306
|
const stepLog = options.stepLog;
|
|
2302
|
-
|
|
2303
|
-
|
|
2307
|
+
const effectiveCoreTools = resolveEffectiveCoreTools(options);
|
|
2308
|
+
setSandboxValidationEnabled(effectiveCoreTools?.enableSandboxValidation === true);
|
|
2309
|
+
if (effectiveCoreTools !== void 0) {
|
|
2304
2310
|
if (options.configFilePath) {
|
|
2305
2311
|
const all = loadAllExtensionsFromToolYamlSync(options.configFilePath, stepLog);
|
|
2306
2312
|
if (all.length > 0) {
|
|
@@ -2310,7 +2316,7 @@ function createRuntimeFromConfigSync(options = {}) {
|
|
|
2310
2316
|
const before = new Set(registry.snapshot().map((s) => s.name));
|
|
2311
2317
|
const prefix = ext.descriptor.startsWith("file:") ? fileDescriptorToRegistryPrefix(ext.descriptor) : npmDescriptorToRegistryPrefix(ext.descriptor, ext.resolvedVersion);
|
|
2312
2318
|
const reg = createPrefixingRegistry(registry, prefix ?? "");
|
|
2313
|
-
const adapter = ext.register(reg,
|
|
2319
|
+
const adapter = ext.register(reg, effectiveCoreTools);
|
|
2314
2320
|
runtime3.registerAdapter(adapter);
|
|
2315
2321
|
const registeredNow = registry.snapshot().map((s) => s.name).filter((name) => !before.has(name));
|
|
2316
2322
|
runtime3.registerAdapterForTools(registeredNow, adapter);
|
|
@@ -2327,7 +2333,7 @@ function createRuntimeFromConfigSync(options = {}) {
|
|
|
2327
2333
|
const before = new Set(registry.snapshot().map((s) => s.name));
|
|
2328
2334
|
const prefix = npmDescriptorToRegistryPrefix(descriptor, resolvedVersion);
|
|
2329
2335
|
const reg = createPrefixingRegistry(registry, prefix ?? "");
|
|
2330
|
-
const coreAdapter = extensionNode.register(reg,
|
|
2336
|
+
const coreAdapter = extensionNode.register(reg, effectiveCoreTools);
|
|
2331
2337
|
const runtime3 = new PTCRuntime({ registry });
|
|
2332
2338
|
runtime3.registerAdapter(coreAdapter);
|
|
2333
2339
|
const registeredNow = registry.snapshot().map((s) => s.name).filter((name) => !before.has(name));
|
|
@@ -2341,8 +2347,9 @@ function createRuntimeFromConfigSync(options = {}) {
|
|
|
2341
2347
|
return { runtime, registry };
|
|
2342
2348
|
}
|
|
2343
2349
|
async function createRuntimeFromConfig(options = {}) {
|
|
2344
|
-
|
|
2345
|
-
|
|
2350
|
+
const effectiveCoreTools = resolveEffectiveCoreTools(options);
|
|
2351
|
+
setSandboxValidationEnabled(effectiveCoreTools?.enableSandboxValidation === true);
|
|
2352
|
+
if (effectiveCoreTools !== void 0 && options.configFilePath) {
|
|
2346
2353
|
const all = await loadAllExtensionsFromToolYamlAsync(options.configFilePath, options.stepLog);
|
|
2347
2354
|
if (all.length > 0) {
|
|
2348
2355
|
if (options.stepLog) options.stepLog(`Registered ${all.length} extension(s) from tool.yaml`);
|
|
@@ -2353,7 +2360,7 @@ async function createRuntimeFromConfig(options = {}) {
|
|
|
2353
2360
|
const prefix = ext.descriptor.startsWith("file:") ? fileDescriptorToRegistryPrefix(ext.descriptor) : npmDescriptorToRegistryPrefix(ext.descriptor, ext.resolvedVersion);
|
|
2354
2361
|
const reg = createPrefixingRegistry(registry, prefix ?? "");
|
|
2355
2362
|
if ("register" in ext) {
|
|
2356
|
-
const adapter = ext.register(reg,
|
|
2363
|
+
const adapter = ext.register(reg, effectiveCoreTools);
|
|
2357
2364
|
runtime.registerAdapter(adapter);
|
|
2358
2365
|
const registeredNow = registry.snapshot().map((s) => s.name).filter((name) => !before.has(name));
|
|
2359
2366
|
runtime.registerAdapterForTools(registeredNow, adapter);
|
|
@@ -2935,6 +2942,6 @@ async function createHttpService(runtimeOrConfig, options = {}) {
|
|
|
2935
2942
|
};
|
|
2936
2943
|
}
|
|
2937
2944
|
|
|
2938
|
-
export { createHttpService, createMCPServerStreamableHttp, createRuntimeFromConfig,
|
|
2939
|
-
//# sourceMappingURL=chunk-
|
|
2940
|
-
//# sourceMappingURL=chunk-
|
|
2945
|
+
export { createHttpService, createMCPServerStreamableHttp, createRuntimeFromConfig, expandToolDescriptorsToRegistryNames, fileDescriptorToPackagePrefix, findAndLoadToolConfig, getDisplayScope, getToolSourceDescriptors, isBarePackageDescriptor, loadToolConfig, npmDescriptorToPackagePrefix, resolveSandboxedPath, resolveToolDescriptor, runMCPServerOverStdio, toToolObservationText };
|
|
2946
|
+
//# sourceMappingURL=chunk-34SBJLFZ.js.map
|
|
2947
|
+
//# sourceMappingURL=chunk-34SBJLFZ.js.map
|