@easynet/agent-tool 1.0.0
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 +103 -0
- package/dist/chunk-3YLVPZRJ.cjs +32 -0
- package/dist/chunk-3YLVPZRJ.cjs.map +1 -0
- package/dist/chunk-AXUNV4MK.js +28 -0
- package/dist/chunk-AXUNV4MK.js.map +1 -0
- package/dist/chunk-BM4EVYI5.js +1069 -0
- package/dist/chunk-BM4EVYI5.js.map +1 -0
- package/dist/chunk-P3UEAZHK.cjs +171 -0
- package/dist/chunk-P3UEAZHK.cjs.map +1 -0
- package/dist/chunk-RPAMQCFH.js +167 -0
- package/dist/chunk-RPAMQCFH.js.map +1 -0
- package/dist/chunk-Z7TGIG77.cjs +1108 -0
- package/dist/chunk-Z7TGIG77.cjs.map +1 -0
- package/dist/cli.cjs +154 -0
- package/dist/cli.cjs.map +1 -0
- package/dist/cli.d.ts +10 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +147 -0
- package/dist/cli.js.map +1 -0
- package/dist/codegen/build.d.ts +23 -0
- package/dist/codegen/build.d.ts.map +1 -0
- package/dist/codegen/generator.d.ts +15 -0
- package/dist/codegen/generator.d.ts.map +1 -0
- package/dist/codegen/index.d.ts +21 -0
- package/dist/codegen/index.d.ts.map +1 -0
- package/dist/codegen/init.d.ts +17 -0
- package/dist/codegen/init.d.ts.map +1 -0
- package/dist/codegen/run.d.ts +19 -0
- package/dist/codegen/run.d.ts.map +1 -0
- package/dist/codegen/scan/scanN8n.d.ts +17 -0
- package/dist/codegen/scan/scanN8n.d.ts.map +1 -0
- package/dist/codegen/scan/scanSkill.d.ts +17 -0
- package/dist/codegen/scan/scanSkill.d.ts.map +1 -0
- package/dist/codegen/scan/scanTools.d.ts +31 -0
- package/dist/codegen/scan/scanTools.d.ts.map +1 -0
- package/dist/codegen/scan/scanner.d.ts +26 -0
- package/dist/codegen/scan/scanner.d.ts.map +1 -0
- package/dist/codegen/scan/schemaFromTs.d.ts +16 -0
- package/dist/codegen/scan/schemaFromTs.d.ts.map +1 -0
- package/dist/codegen/types.d.ts +81 -0
- package/dist/codegen/types.d.ts.map +1 -0
- package/dist/core.cjs +20 -0
- package/dist/core.cjs.map +1 -0
- package/dist/core.d.ts +8 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +3 -0
- package/dist/core.js.map +1 -0
- package/dist/discovery/MCPProcessManager.d.ts +57 -0
- package/dist/discovery/MCPProcessManager.d.ts.map +1 -0
- package/dist/discovery/errors.d.ts +13 -0
- package/dist/discovery/errors.d.ts.map +1 -0
- package/dist/discovery/load/LangChainLoader.d.ts +7 -0
- package/dist/discovery/load/LangChainLoader.d.ts.map +1 -0
- package/dist/discovery/load/MCPLoader.d.ts +8 -0
- package/dist/discovery/load/MCPLoader.d.ts.map +1 -0
- package/dist/discovery/load/N8nLoader.d.ts +25 -0
- package/dist/discovery/load/N8nLoader.d.ts.map +1 -0
- package/dist/discovery/load/SkillLoader.d.ts +20 -0
- package/dist/discovery/load/SkillLoader.d.ts.map +1 -0
- package/dist/discovery/load/SkillManifest.d.ts +79 -0
- package/dist/discovery/load/SkillManifest.d.ts.map +1 -0
- package/dist/discovery/load/SkillMdParser.d.ts +31 -0
- package/dist/discovery/load/SkillMdParser.d.ts.map +1 -0
- package/dist/discovery/load/index.d.ts +6 -0
- package/dist/discovery/load/index.d.ts.map +1 -0
- package/dist/discovery/load/resolveEntry.d.ts +7 -0
- package/dist/discovery/load/resolveEntry.d.ts.map +1 -0
- package/dist/discovery/scan/DirectoryScanner.d.ts +37 -0
- package/dist/discovery/scan/DirectoryScanner.d.ts.map +1 -0
- package/dist/discovery/scan/scanUtil.d.ts +16 -0
- package/dist/discovery/scan/scanUtil.d.ts.map +1 -0
- package/dist/discovery/types.d.ts +99 -0
- package/dist/discovery/types.d.ts.map +1 -0
- package/dist/index.cjs +3014 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +68 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2778 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/AgentLLMAdapter.d.ts +27 -0
- package/dist/llm/AgentLLMAdapter.d.ts.map +1 -0
- package/dist/llm/LangChainToolsHub.d.ts +31 -0
- package/dist/llm/LangChainToolsHub.d.ts.map +1 -0
- package/dist/llm/OpenAICompatibleClient.d.ts +64 -0
- package/dist/llm/OpenAICompatibleClient.d.ts.map +1 -0
- package/dist/llm/ReActAgent.d.ts +35 -0
- package/dist/llm/ReActAgent.d.ts.map +1 -0
- package/dist/llm-export.cjs +20 -0
- package/dist/llm-export.cjs.map +1 -0
- package/dist/llm-export.d.ts +9 -0
- package/dist/llm-export.d.ts.map +1 -0
- package/dist/llm-export.js +3 -0
- package/dist/llm-export.js.map +1 -0
- package/dist/mcp/MCPClientAdapter.d.ts +34 -0
- package/dist/mcp/MCPClientAdapter.d.ts.map +1 -0
- package/dist/mcp/connectMCP.d.ts +47 -0
- package/dist/mcp/connectMCP.d.ts.map +1 -0
- package/dist/mcp/index.d.ts +10 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/registerMCPTools.d.ts +24 -0
- package/dist/mcp/registerMCPTools.d.ts.map +1 -0
- package/dist/observability/EventLog.d.ts +60 -0
- package/dist/observability/EventLog.d.ts.map +1 -0
- package/dist/observability/Logger.d.ts +33 -0
- package/dist/observability/Logger.d.ts.map +1 -0
- package/dist/observability/Metrics.d.ts +70 -0
- package/dist/observability/Metrics.d.ts.map +1 -0
- package/dist/observability/Tracing.d.ts +69 -0
- package/dist/observability/Tracing.d.ts.map +1 -0
- package/dist/registry/ToolRegistry.d.ts +68 -0
- package/dist/registry/ToolRegistry.d.ts.map +1 -0
- package/dist/report/AgentReportGenerator.d.ts +53 -0
- package/dist/report/AgentReportGenerator.d.ts.map +1 -0
- package/dist/report/agent-report-template.html +362 -0
- package/dist/report/index.d.ts +3 -0
- package/dist/report/index.d.ts.map +1 -0
- package/dist/report/types.d.ts +101 -0
- package/dist/report/types.d.ts.map +1 -0
- package/dist/runAgent.d.ts +37 -0
- package/dist/runAgent.d.ts.map +1 -0
- package/dist/runtime/Budget.d.ts +63 -0
- package/dist/runtime/Budget.d.ts.map +1 -0
- package/dist/runtime/Evidence.d.ts +19 -0
- package/dist/runtime/Evidence.d.ts.map +1 -0
- package/dist/runtime/PTCRuntime.d.ts +115 -0
- package/dist/runtime/PTCRuntime.d.ts.map +1 -0
- package/dist/runtime/PTCRuntimeObservability.d.ts +26 -0
- package/dist/runtime/PTCRuntimeObservability.d.ts.map +1 -0
- package/dist/runtime/PTCRuntimePipeline.d.ts +62 -0
- package/dist/runtime/PTCRuntimePipeline.d.ts.map +1 -0
- package/dist/runtime/PolicyEngine.d.ts +67 -0
- package/dist/runtime/PolicyEngine.d.ts.map +1 -0
- package/dist/runtime/Retry.d.ts +33 -0
- package/dist/runtime/Retry.d.ts.map +1 -0
- package/dist/runtime/SchemaValidator.d.ts +42 -0
- package/dist/runtime/SchemaValidator.d.ts.map +1 -0
- package/dist/templates/mcp-server.js +48 -0
- package/dist/templates/n8n-invoker.js +11 -0
- package/dist/templates/skill-invoker.js +11 -0
- package/dist/templates/tool-index.js +9 -0
- package/dist/toolDescriptor.d.ts +38 -0
- package/dist/toolDescriptor.d.ts.map +1 -0
- package/dist/types/Events.d.ts +99 -0
- package/dist/types/Events.d.ts.map +1 -0
- package/dist/types/ToolIntent.d.ts +40 -0
- package/dist/types/ToolIntent.d.ts.map +1 -0
- package/dist/types/ToolResult.d.ts +30 -0
- package/dist/types/ToolResult.d.ts.map +1 -0
- package/dist/types/ToolSpec.d.ts +99 -0
- package/dist/types/ToolSpec.d.ts.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/extensions/examples/README.md +40 -0
- package/extensions/examples/scripts/agent-tool-react-stock.mjs +30 -0
- package/extensions/examples/tools/instruction-only/skill/SKILL.md +26 -0
- package/extensions/examples/tools/web-search/mcp/mcp.json +8 -0
- package/package.json +122 -0
package/README.md
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Agent Tool
|
|
2
|
+
|
|
3
|
+
**自动把你任意的 function 和 SKILL,转换为 tool,链接到任何 LLM model 和 agent。**
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 支持什么
|
|
8
|
+
|
|
9
|
+
| 来源 | 写法 |
|
|
10
|
+
|------|------|
|
|
11
|
+
| **任意函数** | 添加 `@tool` annotation 秒变 MCP tool |
|
|
12
|
+
| **SKILL** | 全面支持 [SKILL](docs/AGENT_SKILLS_SPEC.md),不再依赖 Claude,支持任意 LLM |
|
|
13
|
+
| **mcp.json** | 桥接其他 MCP |
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 快速启动
|
|
18
|
+
|
|
19
|
+
1. **安装**(Node 18+)
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm install @easynet/agent-tool
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
2. **编译**:在项目目录执行,输出到 `dist/`
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
agent-tool build
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
3. **发布**(可选):进 `dist/` 发布为自己的 npm 包
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
cd dist && npm publish
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
4. **运行**:进 `dist/` 后按正常 `npm start` 启动 MCP
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
cd dist && npm install && npm start
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
5. **安装自己的包**:发布后可在任意项目 `npm install <你的包名>` 安装使用。
|
|
44
|
+
|
|
45
|
+
用 Cursor / Claude 等 MCP 客户端连 `mcp.json` 即可。
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## 代码示例
|
|
50
|
+
|
|
51
|
+
**@tool(TypeScript)**
|
|
52
|
+
|
|
53
|
+
```ts
|
|
54
|
+
/**
|
|
55
|
+
* 两数相加。
|
|
56
|
+
* @tool
|
|
57
|
+
*/
|
|
58
|
+
export async function add(a: number, b: number): Promise<number> {
|
|
59
|
+
return a + b;
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
→ 生成的 MCP 工具:
|
|
64
|
+
- 名:`example.add`(文件 `src/tools/example.ts` 时为 `src.tools.example.add`)
|
|
65
|
+
- 描述:两数相加
|
|
66
|
+
- 入参:`a` (number)、`b` (number)
|
|
67
|
+
|
|
68
|
+
工具名由路径+函数名决定,如 `src/tools/math.ts` 的 `add` → `src.tools.math.add`。
|
|
69
|
+
|
|
70
|
+
**SKILL**
|
|
71
|
+
|
|
72
|
+
目录内放 `SKILL.md`(YAML 头:name、description)和可选的 `handler.js`。详见 [AGENT_SKILLS_SPEC](docs/AGENT_SKILLS_SPEC.md)。
|
|
73
|
+
|
|
74
|
+
**示例与扩展**
|
|
75
|
+
|
|
76
|
+
- 示例脚本与参考内容:`extensions/examples/`(ReAct 股票报告脚本、instruction-only skill、MCP 配置)。
|
|
77
|
+
- 示例工具扩展(core 风格):`extensions/example-tools/`(Yahoo Finance quote + chart;FS/HTTP 用 builtin-tools)。
|
|
78
|
+
|
|
79
|
+
**运行 Agent(CLI 一条命令)**
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
# 需配置 OPENAI_API_KEY;MCP 模式需项目根或 MCP_CONFIG_PATH 下有 mcp.json
|
|
83
|
+
agent-tool run "你的任务" # 默认 local(builtin + example 工具)
|
|
84
|
+
agent-tool run "你的任务" --mode mcp # MCP 模式(mcp.json 里的工具)
|
|
85
|
+
agent-tool run "任务" -c agent.yaml # 用 YAML 指定要加载的 tool 名字
|
|
86
|
+
agent-tool run "任务" --mode mcp --report out.html
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
- `run`:执行 ReAct agent,第一个参数为任务,`--mode local|mcp` 选工具来源,`--config` / `-c` 指定 agent YAML,`--report` 指定报告路径。
|
|
90
|
+
- **Agent YAML**:在 `agent.yaml` 里写 `mode` 和要加载的 **tool 名字**,framework 自动按名加载。示例见 `agent.yaml.example`:
|
|
91
|
+
- `tools: [core/fs.readText, core/fs.listDir, example/finance.yahoo.quote]` 只加载列出的工具;
|
|
92
|
+
- 支持 npm 描述符:`npm:@scope/package#toolPath`,如 `npm:@easynet/agent-tool-builtin-tools#fs.readText` → `core/fs.readText`;
|
|
93
|
+
- 或 `tools: { builtin: [fs, http], example: true }` 按组加载。
|
|
94
|
+
- `serve`:启动生成的 MCP 服务(stdio,用于测试):`agent-tool serve` 或 `agent-tool serve -p ./dist`。
|
|
95
|
+
- 股票示例:`npm run agent:stock AAPL`(需先 `npm run build`)。
|
|
96
|
+
|
|
97
|
+
**MCP 模式**:`agent-tool run "任务" --mode mcp`。Framework 读取当前目录或 `MCP_CONFIG_PATH` 下的 `mcp.json`,按配置用 stdio 启动 MCP server 并连接,将 MCP 工具转为 LangChain 工具供 agent 使用。
|
|
98
|
+
|
|
99
|
+
- **用法**:`npm run agent -- --mode mcp "任务" [report.html]`。mcp.json 由用户配置(command、args、cwd),指向你要用的 MCP server。
|
|
100
|
+
- **mcp.json**:`scripts/mcp.json` 为 Cursor 格式示例;裸配置见 `scripts/mcp-agent-tool.json`。将 `command`/`args` 改为你的 MCP 启动命令即可。
|
|
101
|
+
- 环境变量:`AGENT_MODE`、`MCP_CONFIG_PATH`、`AGENT_TASK`、`AGENT_SYSTEM`、`OPENAI_API_KEY` 等。
|
|
102
|
+
|
|
103
|
+
**Release (npmjs.org)**:Publish runs when you **push to branch `master`**, or manually: open **Actions** → select **Release** → **Run workflow**. Add **NPM_TOKEN** (npm Automation or Publish token for @easynet) in repo **Settings → Secrets and variables → Actions**.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/types/ToolSpec.ts
|
|
4
|
+
var DEFAULT_INPUT_SCHEMA = {
|
|
5
|
+
type: "object",
|
|
6
|
+
additionalProperties: true
|
|
7
|
+
};
|
|
8
|
+
var DEFAULT_OUTPUT_SCHEMA = {
|
|
9
|
+
type: "object",
|
|
10
|
+
additionalProperties: true
|
|
11
|
+
};
|
|
12
|
+
function createToolSpec(opts) {
|
|
13
|
+
const sideEffect = opts.sideEffect ?? "none";
|
|
14
|
+
return {
|
|
15
|
+
name: opts.name,
|
|
16
|
+
version: opts.version ?? "1.0.0",
|
|
17
|
+
kind: opts.kind,
|
|
18
|
+
description: opts.description,
|
|
19
|
+
tags: opts.tags,
|
|
20
|
+
inputSchema: opts.inputSchema ?? DEFAULT_INPUT_SCHEMA,
|
|
21
|
+
outputSchema: opts.outputSchema ?? DEFAULT_OUTPUT_SCHEMA,
|
|
22
|
+
capabilities: opts.capabilities,
|
|
23
|
+
costHints: opts.costHints,
|
|
24
|
+
_meta: { hitl: { sideEffect } }
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
exports.DEFAULT_INPUT_SCHEMA = DEFAULT_INPUT_SCHEMA;
|
|
29
|
+
exports.DEFAULT_OUTPUT_SCHEMA = DEFAULT_OUTPUT_SCHEMA;
|
|
30
|
+
exports.createToolSpec = createToolSpec;
|
|
31
|
+
//# sourceMappingURL=chunk-3YLVPZRJ.cjs.map
|
|
32
|
+
//# sourceMappingURL=chunk-3YLVPZRJ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types/ToolSpec.ts"],"names":[],"mappings":";;;AAwEO,IAAM,oBAAA,GAA+B;AAAA,EAC1C,IAAA,EAAM,QAAA;AAAA,EACN,oBAAA,EAAsB;AACxB;AAGO,IAAM,qBAAA,GAAgC;AAAA,EAC3C,IAAA,EAAM,QAAA;AAAA,EACN,oBAAA,EAAsB;AACxB;AA2BO,SAAS,eAAe,IAAA,EAAuC;AACpE,EAAA,MAAM,UAAA,GAAa,KAAK,UAAA,IAAc,MAAA;AACtC,EAAA,OAAO;AAAA,IACL,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,OAAA,EAAS,KAAK,OAAA,IAAW,OAAA;AAAA,IACzB,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,aAAa,IAAA,CAAK,WAAA;AAAA,IAClB,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,WAAA,EAAa,KAAK,WAAA,IAAe,oBAAA;AAAA,IACjC,YAAA,EAAc,KAAK,YAAA,IAAgB,qBAAA;AAAA,IACnC,cAAc,IAAA,CAAK,YAAA;AAAA,IACnB,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,KAAA,EAAO,EAAE,IAAA,EAAM,EAAE,YAAW;AAAE,GAChC;AACF","file":"chunk-3YLVPZRJ.cjs","sourcesContent":["/**\n * Unified tool kinds supported by the tools package.\n */\nexport type ToolKind = \"mcp\" | \"langchain\" | \"n8n\" | \"comfyui\" | \"skill\" | \"core\" | \"example\";\n\n/**\n * Capability declarations for tools.\n * Used by PolicyEngine for permission gating.\n */\nexport type Capability =\n | \"read:web\"\n | \"read:fs\"\n | \"write:fs\"\n | \"read:db\"\n | \"write:db\"\n | \"network\"\n | \"gpu\"\n | \"workflow\"\n | \"danger:destructive\"\n | \"exec\";\n\n/**\n * HITL (Human-in-the-Loop) side-effect classification.\n * Used to gate execution: external_write / destructive require human approval when onApprovalRequired is set.\n */\nexport type HitlSideEffect = \"none\" | \"local_write\" | \"external_write\" | \"destructive\";\n\n/**\n * Cost hints for tools, used by Budget and routing.\n */\nexport interface CostHints {\n latencyMsP50?: number;\n latencyMsP95?: number;\n isAsync?: boolean;\n}\n\n/**\n * Unified tool specification.\n * All tool types (MCP, LangChain, n8n, SKILL) are described by this interface.\n */\nexport interface ToolSpec {\n /** Globally unique name, recommended format: namespace/name */\n name: string;\n /** Semver version */\n version: string;\n /** Tool kind determines which adapter handles execution */\n kind: ToolKind;\n\n description?: string;\n tags?: string[];\n\n /** JSON Schema for input validation */\n inputSchema: object;\n /** JSON Schema for output validation */\n outputSchema: object;\n\n /** Required capabilities for this tool */\n capabilities: Capability[];\n costHints?: CostHints;\n\n /** HITL: side-effect level; when external_write/destructive, runtime may require human approval before execute */\n _meta?: { hitl?: { sideEffect?: HitlSideEffect } };\n\n /** Adapter-specific: endpoint URL (MCP/n8n) */\n endpoint?: string;\n /** Adapter-specific: resource identifier (workflowId, promptId, etc.) */\n resourceId?: string;\n /** Adapter-specific: implementation reference (LangChain Tool instance, skill handler) */\n impl?: unknown;\n}\n\n/** Default permissive input schema when not provided (framework supports auto-derived schema). */\nexport const DEFAULT_INPUT_SCHEMA: object = {\n type: \"object\",\n additionalProperties: true,\n};\n\n/** Default permissive output schema when not provided (framework supports auto-derived schema). */\nexport const DEFAULT_OUTPUT_SCHEMA: object = {\n type: \"object\",\n additionalProperties: true,\n};\n\n/**\n * Minimal options to build a ToolSpec. Use with @effect in JSDoc for HITL sideEffect.\n * Framework fills _meta.hitl.sideEffect from the sideEffect parameter (matches @effect annotation).\n * inputSchema/outputSchema are optional: when omitted, permissive defaults are used (framework supports auto-derived schema at build time in codegen).\n */\nexport interface CreateToolSpecOptions {\n name: string;\n version?: string;\n kind: ToolKind;\n description?: string;\n tags?: string[];\n /** Optional: when omitted, DEFAULT_INPUT_SCHEMA is used. Codegen can derive from handler params. */\n inputSchema?: object;\n /** Optional: when omitted, DEFAULT_OUTPUT_SCHEMA is used. Codegen can derive from handler return type. */\n outputSchema?: object;\n capabilities: Capability[];\n costHints?: CostHints;\n /** HITL: from @effect annotation (none | local_write | external_write | destructive). Default \"none\". */\n sideEffect?: HitlSideEffect;\n}\n\n/**\n * Build a ToolSpec from minimal options. Use @effect in handler JSDoc as annotation; pass same value as sideEffect.\n * When inputSchema/outputSchema are omitted, permissive defaults are used (schema can be auto-derived at build time).\n */\nexport function createToolSpec(opts: CreateToolSpecOptions): ToolSpec {\n const sideEffect = opts.sideEffect ?? \"none\";\n return {\n name: opts.name,\n version: opts.version ?? \"1.0.0\",\n kind: opts.kind,\n description: opts.description,\n tags: opts.tags,\n inputSchema: opts.inputSchema ?? DEFAULT_INPUT_SCHEMA,\n outputSchema: opts.outputSchema ?? DEFAULT_OUTPUT_SCHEMA,\n capabilities: opts.capabilities,\n costHints: opts.costHints,\n _meta: { hitl: { sideEffect } },\n };\n}\n\n/**\n * Unified adapter interface.\n * Each protocol adapter (MCP, LangChain, n8n, SKILL) implements this.\n */\nexport interface ToolAdapter {\n kind: ToolKind;\n /** Optional: supports dynamic tool discovery */\n listTools?(): Promise<ToolSpec[]>;\n /** Execute the tool with validated args */\n invoke(\n spec: ToolSpec,\n args: unknown,\n ctx: import(\"./ToolIntent.js\").ExecContext,\n ): Promise<{ result: unknown; raw?: unknown }>;\n}\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// src/types/ToolSpec.ts
|
|
2
|
+
var DEFAULT_INPUT_SCHEMA = {
|
|
3
|
+
type: "object",
|
|
4
|
+
additionalProperties: true
|
|
5
|
+
};
|
|
6
|
+
var DEFAULT_OUTPUT_SCHEMA = {
|
|
7
|
+
type: "object",
|
|
8
|
+
additionalProperties: true
|
|
9
|
+
};
|
|
10
|
+
function createToolSpec(opts) {
|
|
11
|
+
const sideEffect = opts.sideEffect ?? "none";
|
|
12
|
+
return {
|
|
13
|
+
name: opts.name,
|
|
14
|
+
version: opts.version ?? "1.0.0",
|
|
15
|
+
kind: opts.kind,
|
|
16
|
+
description: opts.description,
|
|
17
|
+
tags: opts.tags,
|
|
18
|
+
inputSchema: opts.inputSchema ?? DEFAULT_INPUT_SCHEMA,
|
|
19
|
+
outputSchema: opts.outputSchema ?? DEFAULT_OUTPUT_SCHEMA,
|
|
20
|
+
capabilities: opts.capabilities,
|
|
21
|
+
costHints: opts.costHints,
|
|
22
|
+
_meta: { hitl: { sideEffect } }
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { DEFAULT_INPUT_SCHEMA, DEFAULT_OUTPUT_SCHEMA, createToolSpec };
|
|
27
|
+
//# sourceMappingURL=chunk-AXUNV4MK.js.map
|
|
28
|
+
//# sourceMappingURL=chunk-AXUNV4MK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types/ToolSpec.ts"],"names":[],"mappings":";AAwEO,IAAM,oBAAA,GAA+B;AAAA,EAC1C,IAAA,EAAM,QAAA;AAAA,EACN,oBAAA,EAAsB;AACxB;AAGO,IAAM,qBAAA,GAAgC;AAAA,EAC3C,IAAA,EAAM,QAAA;AAAA,EACN,oBAAA,EAAsB;AACxB;AA2BO,SAAS,eAAe,IAAA,EAAuC;AACpE,EAAA,MAAM,UAAA,GAAa,KAAK,UAAA,IAAc,MAAA;AACtC,EAAA,OAAO;AAAA,IACL,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,OAAA,EAAS,KAAK,OAAA,IAAW,OAAA;AAAA,IACzB,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,aAAa,IAAA,CAAK,WAAA;AAAA,IAClB,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,WAAA,EAAa,KAAK,WAAA,IAAe,oBAAA;AAAA,IACjC,YAAA,EAAc,KAAK,YAAA,IAAgB,qBAAA;AAAA,IACnC,cAAc,IAAA,CAAK,YAAA;AAAA,IACnB,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,KAAA,EAAO,EAAE,IAAA,EAAM,EAAE,YAAW;AAAE,GAChC;AACF","file":"chunk-AXUNV4MK.js","sourcesContent":["/**\n * Unified tool kinds supported by the tools package.\n */\nexport type ToolKind = \"mcp\" | \"langchain\" | \"n8n\" | \"comfyui\" | \"skill\" | \"core\" | \"example\";\n\n/**\n * Capability declarations for tools.\n * Used by PolicyEngine for permission gating.\n */\nexport type Capability =\n | \"read:web\"\n | \"read:fs\"\n | \"write:fs\"\n | \"read:db\"\n | \"write:db\"\n | \"network\"\n | \"gpu\"\n | \"workflow\"\n | \"danger:destructive\"\n | \"exec\";\n\n/**\n * HITL (Human-in-the-Loop) side-effect classification.\n * Used to gate execution: external_write / destructive require human approval when onApprovalRequired is set.\n */\nexport type HitlSideEffect = \"none\" | \"local_write\" | \"external_write\" | \"destructive\";\n\n/**\n * Cost hints for tools, used by Budget and routing.\n */\nexport interface CostHints {\n latencyMsP50?: number;\n latencyMsP95?: number;\n isAsync?: boolean;\n}\n\n/**\n * Unified tool specification.\n * All tool types (MCP, LangChain, n8n, SKILL) are described by this interface.\n */\nexport interface ToolSpec {\n /** Globally unique name, recommended format: namespace/name */\n name: string;\n /** Semver version */\n version: string;\n /** Tool kind determines which adapter handles execution */\n kind: ToolKind;\n\n description?: string;\n tags?: string[];\n\n /** JSON Schema for input validation */\n inputSchema: object;\n /** JSON Schema for output validation */\n outputSchema: object;\n\n /** Required capabilities for this tool */\n capabilities: Capability[];\n costHints?: CostHints;\n\n /** HITL: side-effect level; when external_write/destructive, runtime may require human approval before execute */\n _meta?: { hitl?: { sideEffect?: HitlSideEffect } };\n\n /** Adapter-specific: endpoint URL (MCP/n8n) */\n endpoint?: string;\n /** Adapter-specific: resource identifier (workflowId, promptId, etc.) */\n resourceId?: string;\n /** Adapter-specific: implementation reference (LangChain Tool instance, skill handler) */\n impl?: unknown;\n}\n\n/** Default permissive input schema when not provided (framework supports auto-derived schema). */\nexport const DEFAULT_INPUT_SCHEMA: object = {\n type: \"object\",\n additionalProperties: true,\n};\n\n/** Default permissive output schema when not provided (framework supports auto-derived schema). */\nexport const DEFAULT_OUTPUT_SCHEMA: object = {\n type: \"object\",\n additionalProperties: true,\n};\n\n/**\n * Minimal options to build a ToolSpec. Use with @effect in JSDoc for HITL sideEffect.\n * Framework fills _meta.hitl.sideEffect from the sideEffect parameter (matches @effect annotation).\n * inputSchema/outputSchema are optional: when omitted, permissive defaults are used (framework supports auto-derived schema at build time in codegen).\n */\nexport interface CreateToolSpecOptions {\n name: string;\n version?: string;\n kind: ToolKind;\n description?: string;\n tags?: string[];\n /** Optional: when omitted, DEFAULT_INPUT_SCHEMA is used. Codegen can derive from handler params. */\n inputSchema?: object;\n /** Optional: when omitted, DEFAULT_OUTPUT_SCHEMA is used. Codegen can derive from handler return type. */\n outputSchema?: object;\n capabilities: Capability[];\n costHints?: CostHints;\n /** HITL: from @effect annotation (none | local_write | external_write | destructive). Default \"none\". */\n sideEffect?: HitlSideEffect;\n}\n\n/**\n * Build a ToolSpec from minimal options. Use @effect in handler JSDoc as annotation; pass same value as sideEffect.\n * When inputSchema/outputSchema are omitted, permissive defaults are used (schema can be auto-derived at build time).\n */\nexport function createToolSpec(opts: CreateToolSpecOptions): ToolSpec {\n const sideEffect = opts.sideEffect ?? \"none\";\n return {\n name: opts.name,\n version: opts.version ?? \"1.0.0\",\n kind: opts.kind,\n description: opts.description,\n tags: opts.tags,\n inputSchema: opts.inputSchema ?? DEFAULT_INPUT_SCHEMA,\n outputSchema: opts.outputSchema ?? DEFAULT_OUTPUT_SCHEMA,\n capabilities: opts.capabilities,\n costHints: opts.costHints,\n _meta: { hitl: { sideEffect } },\n };\n}\n\n/**\n * Unified adapter interface.\n * Each protocol adapter (MCP, LangChain, n8n, SKILL) implements this.\n */\nexport interface ToolAdapter {\n kind: ToolKind;\n /** Optional: supports dynamic tool discovery */\n listTools?(): Promise<ToolSpec[]>;\n /** Execute the tool with validated args */\n invoke(\n spec: ToolSpec,\n args: unknown,\n ctx: import(\"./ToolIntent.js\").ExecContext,\n ): Promise<{ result: unknown; raw?: unknown }>;\n}\n"]}
|