@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 CHANGED
@@ -2,46 +2,47 @@
2
2
 
3
3
  ## Introduction
4
4
 
5
- `@easynet/agent-tool` loads tool definitions from `tool.yaml`, creates LangChain-compatible tools, and registers them into the default `AgentContext`.
5
+ `@easynet/agent-tool` loads `tool.yaml`, resolves tool extensions into LangChain-compatible tools, and registers them into the default `AgentContext`.
6
6
 
7
- ## API Reference
7
+ ## Exposed SDK
8
8
 
9
- | API | What it does | Minimal usage |
9
+ | Export | Type | Purpose |
10
10
  | --- | --- | --- |
11
- | `createAgentTools` | Load tools and register them into `AgentContext`. | `const tools = createAgentTools({ configFilePath: "./tool.yaml" })` |
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
- Create `tool.yaml`:
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
- ### YAML config
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
- Example `tool.yaml`:
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
- Explanation:
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
- - `spec.sandboxedPath`: root directory allowed for filesystem tools.
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
- * Initialize LangChain agent tools and register them into the process-level singleton AgentContext.
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({ configFilePath: "config/tool.yaml" });
13
+ * await createAgentTools("config/tool.yaml");
14
14
  * ```
15
15
  */
16
- export declare function createAgentTools(options?: CreateAgentToolsModuleOptions): StructuredToolInterface[];
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,EAGL,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,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,6BAA6B,GAAG,uBAAuB,EAAE,CAInG;AAED,wBAAsB,qBAAqB,CACzC,OAAO,CAAC,EAAE,6BAA6B,GACtC,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAIpC"}
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;AAsCzH,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,CAuDnG;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CA+C9B"}
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 { ToolRegistry, setSandboxValidationEnabled, createTaggedError, withRetry } from './chunk-IVL4TBFB.js';
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
- setSandboxValidationEnabled(options.coreTools?.enableSandboxValidation === true);
2303
- if (options.coreTools !== void 0) {
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, options.coreTools);
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, options.coreTools);
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
- setSandboxValidationEnabled(options.coreTools?.enableSandboxValidation === true);
2345
- if (options.coreTools !== void 0 && options.configFilePath) {
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, options.coreTools);
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, createRuntimeFromConfigSync, expandToolDescriptorsToRegistryNames, fileDescriptorToPackagePrefix, findAndLoadToolConfig, getDisplayScope, getToolSourceDescriptors, isBarePackageDescriptor, loadAllExtensionsFromToolYamlSync, loadToolConfig, npmDescriptorToPackagePrefix, resolveSandboxedPath, resolveToolDescriptor, runMCPServerOverStdio, toToolObservationText };
2939
- //# sourceMappingURL=chunk-3TT5M7A3.js.map
2940
- //# sourceMappingURL=chunk-3TT5M7A3.js.map
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