@agenticvault/agentic-vault 0.1.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.
Files changed (201) hide show
  1. package/.claude-plugin/plugin.json +19 -0
  2. package/.env.example +16 -0
  3. package/.mcp.json.example +18 -0
  4. package/LICENSE +21 -0
  5. package/README.ja.md +163 -0
  6. package/README.ko.md +163 -0
  7. package/README.md +161 -0
  8. package/README.zh-CN.md +163 -0
  9. package/README.zh-TW.md +163 -0
  10. package/dist/agentic/audit/logger.d.ts +7 -0
  11. package/dist/agentic/audit/logger.js +19 -0
  12. package/dist/agentic/audit/logger.js.map +1 -0
  13. package/dist/agentic/audit/types.d.ts +11 -0
  14. package/dist/agentic/audit/types.js +2 -0
  15. package/dist/agentic/audit/types.js.map +1 -0
  16. package/dist/agentic/cli.d.ts +8 -0
  17. package/dist/agentic/cli.js +87 -0
  18. package/dist/agentic/cli.js.map +1 -0
  19. package/dist/agentic/index.d.ts +5 -0
  20. package/dist/agentic/index.js +7 -0
  21. package/dist/agentic/index.js.map +1 -0
  22. package/dist/agentic/mcp/server.d.ts +8 -0
  23. package/dist/agentic/mcp/server.js +25 -0
  24. package/dist/agentic/mcp/server.js.map +1 -0
  25. package/dist/agentic/mcp/tools/decoded-call-pipeline.d.ts +14 -0
  26. package/dist/agentic/mcp/tools/decoded-call-pipeline.js +18 -0
  27. package/dist/agentic/mcp/tools/decoded-call-pipeline.js.map +1 -0
  28. package/dist/agentic/mcp/tools/get-address.d.ts +3 -0
  29. package/dist/agentic/mcp/tools/get-address.js +25 -0
  30. package/dist/agentic/mcp/tools/get-address.js.map +1 -0
  31. package/dist/agentic/mcp/tools/health-check.d.ts +3 -0
  32. package/dist/agentic/mcp/tools/health-check.js +25 -0
  33. package/dist/agentic/mcp/tools/health-check.js.map +1 -0
  34. package/dist/agentic/mcp/tools/index.d.ts +7 -0
  35. package/dist/agentic/mcp/tools/index.js +21 -0
  36. package/dist/agentic/mcp/tools/index.js.map +1 -0
  37. package/dist/agentic/mcp/tools/result-adapter.d.ts +10 -0
  38. package/dist/agentic/mcp/tools/result-adapter.js +15 -0
  39. package/dist/agentic/mcp/tools/result-adapter.js.map +1 -0
  40. package/dist/agentic/mcp/tools/shared.d.ts +71 -0
  41. package/dist/agentic/mcp/tools/shared.js +12 -0
  42. package/dist/agentic/mcp/tools/shared.js.map +1 -0
  43. package/dist/agentic/mcp/tools/sign-defi-call.d.ts +3 -0
  44. package/dist/agentic/mcp/tools/sign-defi-call.js +23 -0
  45. package/dist/agentic/mcp/tools/sign-defi-call.js.map +1 -0
  46. package/dist/agentic/mcp/tools/sign-permit.d.ts +3 -0
  47. package/dist/agentic/mcp/tools/sign-permit.js +39 -0
  48. package/dist/agentic/mcp/tools/sign-permit.js.map +1 -0
  49. package/dist/agentic/mcp/tools/sign-swap.d.ts +3 -0
  50. package/dist/agentic/mcp/tools/sign-swap.js +23 -0
  51. package/dist/agentic/mcp/tools/sign-swap.js.map +1 -0
  52. package/dist/agentic/mcp/tools/sign-transaction.d.ts +3 -0
  53. package/dist/agentic/mcp/tools/sign-transaction.js +68 -0
  54. package/dist/agentic/mcp/tools/sign-transaction.js.map +1 -0
  55. package/dist/agentic/mcp/tools/sign-typed-data.d.ts +3 -0
  56. package/dist/agentic/mcp/tools/sign-typed-data.js +50 -0
  57. package/dist/agentic/mcp/tools/sign-typed-data.js.map +1 -0
  58. package/dist/agentic/policy/engine.d.ts +2 -0
  59. package/dist/agentic/policy/engine.js +3 -0
  60. package/dist/agentic/policy/engine.js.map +1 -0
  61. package/dist/agentic/policy/types.d.ts +2 -0
  62. package/dist/agentic/policy/types.js +2 -0
  63. package/dist/agentic/policy/types.js.map +1 -0
  64. package/dist/cli/commands/decode.d.ts +1 -0
  65. package/dist/cli/commands/decode.js +51 -0
  66. package/dist/cli/commands/decode.js.map +1 -0
  67. package/dist/cli/commands/dry-run.d.ts +2 -0
  68. package/dist/cli/commands/dry-run.js +56 -0
  69. package/dist/cli/commands/dry-run.js.map +1 -0
  70. package/dist/cli/commands/encode.d.ts +1 -0
  71. package/dist/cli/commands/encode.js +77 -0
  72. package/dist/cli/commands/encode.js.map +1 -0
  73. package/dist/cli/commands/get-address.d.ts +3 -0
  74. package/dist/cli/commands/get-address.js +26 -0
  75. package/dist/cli/commands/get-address.js.map +1 -0
  76. package/dist/cli/commands/health.d.ts +3 -0
  77. package/dist/cli/commands/health.js +26 -0
  78. package/dist/cli/commands/health.js.map +1 -0
  79. package/dist/cli/commands/mcp.d.ts +6 -0
  80. package/dist/cli/commands/mcp.js +40 -0
  81. package/dist/cli/commands/mcp.js.map +1 -0
  82. package/dist/cli/commands/sign-permit.d.ts +2 -0
  83. package/dist/cli/commands/sign-permit.js +110 -0
  84. package/dist/cli/commands/sign-permit.js.map +1 -0
  85. package/dist/cli/commands/sign.d.ts +2 -0
  86. package/dist/cli/commands/sign.js +82 -0
  87. package/dist/cli/commands/sign.js.map +1 -0
  88. package/dist/cli/context.d.ts +10 -0
  89. package/dist/cli/context.js +84 -0
  90. package/dist/cli/context.js.map +1 -0
  91. package/dist/cli/formatters.d.ts +18 -0
  92. package/dist/cli/formatters.js +74 -0
  93. package/dist/cli/formatters.js.map +1 -0
  94. package/dist/cli/index.d.ts +2 -0
  95. package/dist/cli/index.js +108 -0
  96. package/dist/cli/index.js.map +1 -0
  97. package/dist/core/evm-signer-adapter.d.ts +42 -0
  98. package/dist/core/evm-signer-adapter.js +92 -0
  99. package/dist/core/evm-signer-adapter.js.map +1 -0
  100. package/dist/core/signing-provider.d.ts +14 -0
  101. package/dist/core/signing-provider.js +2 -0
  102. package/dist/core/signing-provider.js.map +1 -0
  103. package/dist/crypto/evm-signer.util.d.ts +43 -0
  104. package/dist/crypto/evm-signer.util.js +151 -0
  105. package/dist/crypto/evm-signer.util.js.map +1 -0
  106. package/dist/evm-signer.util.d.ts +1 -0
  107. package/dist/evm-signer.util.js +4 -0
  108. package/dist/evm-signer.util.js.map +1 -0
  109. package/dist/index.d.ts +11 -0
  110. package/dist/index.js +9 -0
  111. package/dist/index.js.map +1 -0
  112. package/dist/kms-client.d.ts +1 -0
  113. package/dist/kms-client.js +4 -0
  114. package/dist/kms-client.js.map +1 -0
  115. package/dist/kms-signer.d.ts +1 -0
  116. package/dist/kms-signer.js +4 -0
  117. package/dist/kms-signer.js.map +1 -0
  118. package/dist/protocols/catalog.d.ts +310 -0
  119. package/dist/protocols/catalog.js +162 -0
  120. package/dist/protocols/catalog.js.map +1 -0
  121. package/dist/protocols/decoders/aave-v3.d.ts +2 -0
  122. package/dist/protocols/decoders/aave-v3.js +105 -0
  123. package/dist/protocols/decoders/aave-v3.js.map +1 -0
  124. package/dist/protocols/decoders/erc20.d.ts +2 -0
  125. package/dist/protocols/decoders/erc20.js +51 -0
  126. package/dist/protocols/decoders/erc20.js.map +1 -0
  127. package/dist/protocols/decoders/uniswap-v3.d.ts +2 -0
  128. package/dist/protocols/decoders/uniswap-v3.js +57 -0
  129. package/dist/protocols/decoders/uniswap-v3.js.map +1 -0
  130. package/dist/protocols/dispatcher.d.ts +8 -0
  131. package/dist/protocols/dispatcher.js +32 -0
  132. package/dist/protocols/dispatcher.js.map +1 -0
  133. package/dist/protocols/index.d.ts +16 -0
  134. package/dist/protocols/index.js +19 -0
  135. package/dist/protocols/index.js.map +1 -0
  136. package/dist/protocols/policy/engine.d.ts +11 -0
  137. package/dist/protocols/policy/engine.js +67 -0
  138. package/dist/protocols/policy/engine.js.map +1 -0
  139. package/dist/protocols/policy/evaluators/aave-v3.d.ts +2 -0
  140. package/dist/protocols/policy/evaluators/aave-v3.js +118 -0
  141. package/dist/protocols/policy/evaluators/aave-v3.js.map +1 -0
  142. package/dist/protocols/policy/evaluators/erc20.d.ts +2 -0
  143. package/dist/protocols/policy/evaluators/erc20.js +55 -0
  144. package/dist/protocols/policy/evaluators/erc20.js.map +1 -0
  145. package/dist/protocols/policy/evaluators/uniswap-v3.d.ts +2 -0
  146. package/dist/protocols/policy/evaluators/uniswap-v3.js +46 -0
  147. package/dist/protocols/policy/evaluators/uniswap-v3.js.map +1 -0
  148. package/dist/protocols/policy/loader.d.ts +11 -0
  149. package/dist/protocols/policy/loader.js +70 -0
  150. package/dist/protocols/policy/loader.js.map +1 -0
  151. package/dist/protocols/policy/types.d.ts +38 -0
  152. package/dist/protocols/policy/types.js +2 -0
  153. package/dist/protocols/policy/types.js.map +1 -0
  154. package/dist/protocols/registry.d.ts +21 -0
  155. package/dist/protocols/registry.js +52 -0
  156. package/dist/protocols/registry.js.map +1 -0
  157. package/dist/protocols/types.d.ts +90 -0
  158. package/dist/protocols/types.js +2 -0
  159. package/dist/protocols/types.js.map +1 -0
  160. package/dist/protocols/workflows/get-address.d.ts +2 -0
  161. package/dist/protocols/workflows/get-address.js +41 -0
  162. package/dist/protocols/workflows/get-address.js.map +1 -0
  163. package/dist/protocols/workflows/health-check.d.ts +2 -0
  164. package/dist/protocols/workflows/health-check.js +41 -0
  165. package/dist/protocols/workflows/health-check.js.map +1 -0
  166. package/dist/protocols/workflows/index.d.ts +5 -0
  167. package/dist/protocols/workflows/index.js +5 -0
  168. package/dist/protocols/workflows/index.js.map +1 -0
  169. package/dist/protocols/workflows/sign-defi-call.d.ts +14 -0
  170. package/dist/protocols/workflows/sign-defi-call.js +157 -0
  171. package/dist/protocols/workflows/sign-defi-call.js.map +1 -0
  172. package/dist/protocols/workflows/sign-permit.d.ts +21 -0
  173. package/dist/protocols/workflows/sign-permit.js +320 -0
  174. package/dist/protocols/workflows/sign-permit.js.map +1 -0
  175. package/dist/protocols/workflows/types.d.ts +79 -0
  176. package/dist/protocols/workflows/types.js +2 -0
  177. package/dist/protocols/workflows/types.js.map +1 -0
  178. package/dist/provider/factory.d.ts +12 -0
  179. package/dist/provider/factory.js +19 -0
  180. package/dist/provider/factory.js.map +1 -0
  181. package/dist/providers/aws-kms/aws-kms-client.d.ts +19 -0
  182. package/dist/providers/aws-kms/aws-kms-client.js +47 -0
  183. package/dist/providers/aws-kms/aws-kms-client.js.map +1 -0
  184. package/dist/providers/aws-kms/aws-kms-provider.d.ts +17 -0
  185. package/dist/providers/aws-kms/aws-kms-provider.js +40 -0
  186. package/dist/providers/aws-kms/aws-kms-provider.js.map +1 -0
  187. package/dist/providers/aws-kms/index.d.ts +3 -0
  188. package/dist/providers/aws-kms/index.js +4 -0
  189. package/dist/providers/aws-kms/index.js.map +1 -0
  190. package/dist/providers/aws-kms/kms-signer-adapter.d.ts +41 -0
  191. package/dist/providers/aws-kms/kms-signer-adapter.js +101 -0
  192. package/dist/providers/aws-kms/kms-signer-adapter.js.map +1 -0
  193. package/dist/types.d.ts +13 -0
  194. package/dist/types.js +2 -0
  195. package/dist/types.js.map +1 -0
  196. package/package.json +109 -0
  197. package/policy.example.json +43 -0
  198. package/skills/audit-log/SKILL.md +32 -0
  199. package/skills/check-wallet/SKILL.md +23 -0
  200. package/skills/sign-permit/SKILL.md +29 -0
  201. package/skills/sign-swap/SKILL.md +29 -0
@@ -0,0 +1,163 @@
1
+ <!-- Source: README.md | Commit: 96a8dcc | Last synced: 2026-02-16 -->
2
+
3
+ # Agentic Vault
4
+
5
+ [![npm version](https://img.shields.io/npm/v/@agenticvault/agentic-vault)](https://www.npmjs.com/package/@agenticvault/agentic-vault)
6
+ [![CI](https://github.com/agenticvault/agentic-vault/actions/workflows/ci.yml/badge.svg)](https://github.com/agenticvault/agentic-vault/actions/workflows/ci.yml)
7
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
8
+
9
+ [English](README.md) | [繁體中文](README.zh-TW.md) | 简体中文 | [日本語](README.ja.md) | [한국어](README.ko.md)
10
+
11
+ 基于 AWS KMS 的服务器端 EVM 签名,内建 DeFi 协议解析。通过 MCP、CLI 或 OpenClaw 将钱包暴露给 AI 代理,搭配默认拒绝的策略引擎与完整审计日志。
12
+
13
+ ## 为什么选择 Agentic Vault
14
+
15
+ AI 代理需要签署区块链交易,但直接给予私钥非常危险。Agentic Vault 将密钥保存在 AWS KMS(HSM)中,并提供策略引擎限制代理可签署的操作范围。代理只看到高级工具(`sign_swap`、`sign_permit`),私钥永远不会离开硬件。
16
+
17
+ ## 特性
18
+
19
+ - **HSM 安全签名** -- 私钥永远不离开 AWS KMS,仅传送摘要进行签署
20
+ - **DeFi 协议感知** -- 支持 ERC-20、Uniswap V3、Aave V3 的 calldata 解码与协议专属策略规则
21
+ - **默认拒绝策略引擎** -- 链 ID、合约、选择器、金额、期限及协议层级约束
22
+ - **多种接口** -- 可作为 TypeScript 库、CLI、MCP 服务器或 OpenClaw 插件使用
23
+ - **审计日志** -- 每次签名操作(批准、拒绝、错误)皆有结构化 JSON 审计记录
24
+ - **EVM 原生** -- 基于 [viem](https://viem.sh) 构建,完整支持 EIP-712 类型化数据
25
+
26
+ ## 快速开始
27
+
28
+ ```bash
29
+ npm install @agenticvault/agentic-vault
30
+ ```
31
+
32
+ ```typescript
33
+ import { createSigningProvider, EvmSignerAdapter } from '@agenticvault/agentic-vault';
34
+
35
+ const provider = createSigningProvider({
36
+ provider: 'aws-kms',
37
+ keyId: 'arn:aws:kms:us-east-1:123456789:key/your-key-id',
38
+ region: 'us-east-1',
39
+ });
40
+
41
+ const signer = new EvmSignerAdapter(provider);
42
+ const address = await signer.getAddress();
43
+ ```
44
+
45
+ 无需 AWS 的快速测试,可使用 `dry-run` 模式(仅解码 + 策略检查,不签名):
46
+
47
+ ```bash
48
+ npx agentic-vault dry-run --chain-id 1 --to 0xa0b869... --data 0x095ea7b3...
49
+ ```
50
+
51
+ 密钥创建与 IAM 配置请参阅 [AWS KMS 配置指南](docs/guides/aws-kms-setup.md)。
52
+
53
+ ## 接口
54
+
55
+ | 接口 | 使用场景 | 需要 AWS |
56
+ |------|----------|:---:|
57
+ | TypeScript 库 | 将签名功能嵌入应用程序 | 是 |
58
+ | CLI | 命令行签名 + 模拟执行 | 部分 |
59
+ | MCP 服务器 | 将钱包暴露给 AI 代理(Claude 等) | 是 |
60
+ | OpenClaw 插件 | 作为 OpenClaw 代理工具使用 | 是 |
61
+
62
+ 使用示例与配置请参阅[接口指南](docs/guides/interfaces.md)。
63
+
64
+ ## 支持的协议
65
+
66
+ | 协议 | 操作 | 解码器 | 策略评估器 |
67
+ |------|------|:---:|:---:|
68
+ | ERC-20 | `approve`、`transfer` | 有 | 有(授权上限、spender 白名单) |
69
+ | Uniswap V3 | `exactInputSingle` | 有 | 有(代币对、滑点、接收者) |
70
+ | Aave V3 | `supply`、`borrow`、`repay`、`withdraw` | 有 | 有(资产白名单、利率模式) |
71
+
72
+ 未知 calldata 一律拒绝(失败关闭)。Dispatcher 使用两阶段解析:先依合约地址,再依选择器回退(如 ERC-20)。
73
+
74
+ ## 配置
75
+
76
+ 策略引擎使用 JSON 配置文件。未提供配置文件时,所有受策略管控的签名操作皆被拒绝(默认拒绝)。
77
+
78
+ 完整结构与示例请参阅[策略参考文档](docs/reference/policy.md),或从 [`policy.example.json`](policy.example.json) 开始。
79
+
80
+ ## 安全模型
81
+
82
+ ### 信任边界
83
+
84
+ ```
85
+ AI 代理(Claude / MCP Client / OpenClaw)
86
+ |
87
+ | MCP Protocol / OpenClaw Plugin API
88
+ v
89
+ +------------------------------------+
90
+ | Agentic Vault |
91
+ | +-----------+ +--------+ +-----+ |
92
+ | | Protocol | | Policy | | Audit| |
93
+ | | Dispatcher| | Engine | | Sink | |
94
+ | +-----------+ +--------+ +-----+ |
95
+ | | |
96
+ | +--------------------+ |
97
+ | | EvmSignerAdapter | |
98
+ | +--------------------+ |
99
+ +-----------|------------------------+
100
+ | 仅传送摘要
101
+ v
102
+ +------------------------------------+
103
+ | AWS KMS (HSM) |
104
+ | 私钥永远不离开 |
105
+ +------------------------------------+
106
+ ```
107
+
108
+ ### 核心原则
109
+
110
+ | 原则 | 说明 |
111
+ |------|------|
112
+ | 密钥隔离 | 私钥保留在 HSM 中,仅传送 32 字节摘要进行签名 |
113
+ | 默认拒绝 | 策略引擎拒绝所有未明确允许的请求 |
114
+ | 失败关闭 | 未知 calldata 一律拒绝;已知协议但无评估器也拒绝 |
115
+ | 审计追踪 | 每次操作以结构化 JSON 记录至 stderr,含调用者标记 |
116
+ | 最小暴露面 | 原始签名工具(`sign_transaction`、`sign_typed_data`)默认禁用 |
117
+
118
+ ## Claude Code 插件
119
+
120
+ 4 个技能通过 MCP 工具与钱包交互,绝不直接访问密钥。
121
+
122
+ | 技能 | 说明 |
123
+ |------|------|
124
+ | `sign-swap` | 协调 swap 签名操作 |
125
+ | `sign-permit` | 协调 EIP-2612 permit 签名 |
126
+ | `check-wallet` | 检查钱包地址与健康状态 |
127
+ | `audit-log` | 查询审计日志 |
128
+
129
+ ## 包导出
130
+
131
+ | 子路径 | 内容 | MCP 依赖 |
132
+ |--------|------|:-:|
133
+ | `@agenticvault/agentic-vault` | 核心签名(SigningProvider、EvmSignerAdapter、factory) | 无 |
134
+ | `@agenticvault/agentic-vault/protocols` | 协议解码器、dispatcher、PolicyEngine V2、workflows | 无 |
135
+ | `@agenticvault/agentic-vault/agentic` | MCP 服务器、审计日志记录器 | 有 |
136
+
137
+ ## 文档
138
+
139
+ | 文档 | 说明 |
140
+ |------|------|
141
+ | [接口指南](docs/guides/interfaces.md) | TypeScript、CLI、MCP、OpenClaw 使用方式 |
142
+ | [策略参考](docs/reference/policy.md) | 策略 JSON 结构、字段与示例 |
143
+ | [AWS KMS 配置](docs/guides/aws-kms-setup.md) | 密钥创建、IAM 策略、认证方式 |
144
+ | [OpenClaw 插件](packages/openclaw-plugin/) | OpenClaw 插件包与配置 |
145
+ | [架构决策](docs/project/adrs/ADR-001-architecture-decisions.md) | 关键设计决策的 ADR |
146
+ | [贡献指南](CONTRIBUTING.md) | 开发流程与规范 |
147
+
148
+ ## 路线图
149
+
150
+ - 更多签名提供者(GCP KMS、HashiCorp Vault)
151
+ - 更多协议解码器(Curve、Compound V3)
152
+ - 多重签名支持
153
+ - 远程 MCP 服务器模式(HTTP 传输 + OAuth 2.1)
154
+
155
+ ## 贡献
156
+
157
+ 请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 了解开发流程、分支命名与提交规范。
158
+
159
+ 本项目遵循 [Contributor Covenant 行为准则](CODE_OF_CONDUCT.md)。
160
+
161
+ ## 许可证
162
+
163
+ [MIT](LICENSE)
@@ -0,0 +1,163 @@
1
+ <!-- Source: README.md | Commit: 96a8dcc | Last synced: 2026-02-16 -->
2
+
3
+ # Agentic Vault
4
+
5
+ [![npm version](https://img.shields.io/npm/v/@agenticvault/agentic-vault)](https://www.npmjs.com/package/@agenticvault/agentic-vault)
6
+ [![CI](https://github.com/agenticvault/agentic-vault/actions/workflows/ci.yml/badge.svg)](https://github.com/agenticvault/agentic-vault/actions/workflows/ci.yml)
7
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
8
+
9
+ [English](README.md) | 繁體中文 | [简体中文](README.zh-CN.md) | [日本語](README.ja.md) | [한국어](README.ko.md)
10
+
11
+ 以 AWS KMS 進行伺服器端 EVM 簽章,內建 DeFi 協議解析。透過 MCP、CLI 或 OpenClaw 將錢包暴露給 AI 代理,搭配預設拒絕的策略引擎與完整稽核日誌。
12
+
13
+ ## 為什麼選擇 Agentic Vault
14
+
15
+ AI 代理需要簽署區塊鏈交易,但直接給予私鑰非常危險。Agentic Vault 將金鑰保存在 AWS KMS(HSM)中,並提供策略引擎限制代理可簽署的操作範圍。代理只看到高階工具(`sign_swap`、`sign_permit`),私鑰永遠不會離開硬體。
16
+
17
+ ## 特色
18
+
19
+ - **HSM 安全簽章** -- 私鑰永遠不離開 AWS KMS,僅傳送摘要進行簽署
20
+ - **DeFi 協議感知** -- 支援 ERC-20、Uniswap V3、Aave V3 的 calldata 解碼與協議專屬策略規則
21
+ - **預設拒絕策略引擎** -- 鏈 ID、合約、選擇器、金額、期限及協議層級約束
22
+ - **多種介面** -- 可作為 TypeScript 函式庫、CLI、MCP 伺服器或 OpenClaw 插件使用
23
+ - **稽核日誌** -- 每次簽署操作(核准、拒絕、錯誤)皆有結構化 JSON 稽核紀錄
24
+ - **EVM 原生** -- 基於 [viem](https://viem.sh) 建構,完整支援 EIP-712 型別化資料
25
+
26
+ ## 快速開始
27
+
28
+ ```bash
29
+ npm install @agenticvault/agentic-vault
30
+ ```
31
+
32
+ ```typescript
33
+ import { createSigningProvider, EvmSignerAdapter } from '@agenticvault/agentic-vault';
34
+
35
+ const provider = createSigningProvider({
36
+ provider: 'aws-kms',
37
+ keyId: 'arn:aws:kms:us-east-1:123456789:key/your-key-id',
38
+ region: 'us-east-1',
39
+ });
40
+
41
+ const signer = new EvmSignerAdapter(provider);
42
+ const address = await signer.getAddress();
43
+ ```
44
+
45
+ 無需 AWS 的快速測試,可使用 `dry-run` 模式(僅解碼 + 策略檢查,不簽署):
46
+
47
+ ```bash
48
+ npx agentic-vault dry-run --chain-id 1 --to 0xa0b869... --data 0x095ea7b3...
49
+ ```
50
+
51
+ 金鑰建立與 IAM 設定請參閱 [AWS KMS 設定指南](docs/guides/aws-kms-setup.md)。
52
+
53
+ ## 介面
54
+
55
+ | 介面 | 使用情境 | 需要 AWS |
56
+ |------|----------|:---:|
57
+ | TypeScript 函式庫 | 將簽署功能嵌入應用程式 | 是 |
58
+ | CLI | 命令列簽署 + 模擬執行 | 部分 |
59
+ | MCP 伺服器 | 將錢包暴露給 AI 代理(Claude 等) | 是 |
60
+ | OpenClaw 插件 | 作為 OpenClaw 代理工具使用 | 是 |
61
+
62
+ 使用範例與設定請參閱[介面指南](docs/guides/interfaces.md)。
63
+
64
+ ## 支援的協議
65
+
66
+ | 協議 | 操作 | 解碼器 | 策略評估器 |
67
+ |------|------|:---:|:---:|
68
+ | ERC-20 | `approve`、`transfer` | 有 | 有(授權上限、spender 白名單) |
69
+ | Uniswap V3 | `exactInputSingle` | 有 | 有(代幣對、滑點、接收者) |
70
+ | Aave V3 | `supply`、`borrow`、`repay`、`withdraw` | 有 | 有(資產白名單、利率模式) |
71
+
72
+ 未知 calldata 一律拒絕(失敗關閉)。Dispatcher 使用兩階段解析:先依合約地址,再依選擇器回退(如 ERC-20)。
73
+
74
+ ## 設定
75
+
76
+ 策略引擎使用 JSON 設定檔。未提供設定檔時,所有受策略管控的簽署操作皆被拒絕(預設拒絕)。
77
+
78
+ 完整結構與範例請參閱[策略參考文件](docs/reference/policy.md),或從 [`policy.example.json`](policy.example.json) 開始。
79
+
80
+ ## 安全模型
81
+
82
+ ### 信任邊界
83
+
84
+ ```
85
+ AI 代理(Claude / MCP Client / OpenClaw)
86
+ |
87
+ | MCP Protocol / OpenClaw Plugin API
88
+ v
89
+ +------------------------------------+
90
+ | Agentic Vault |
91
+ | +-----------+ +--------+ +-----+ |
92
+ | | Protocol | | Policy | | Audit| |
93
+ | | Dispatcher| | Engine | | Sink | |
94
+ | +-----------+ +--------+ +-----+ |
95
+ | | |
96
+ | +--------------------+ |
97
+ | | EvmSignerAdapter | |
98
+ | +--------------------+ |
99
+ +-----------|------------------------+
100
+ | 僅傳送摘要
101
+ v
102
+ +------------------------------------+
103
+ | AWS KMS (HSM) |
104
+ | 私鑰永遠不離開 |
105
+ +------------------------------------+
106
+ ```
107
+
108
+ ### 核心原則
109
+
110
+ | 原則 | 說明 |
111
+ |------|------|
112
+ | 金鑰隔離 | 私鑰保留在 HSM 中,僅傳送 32 位元摘要進行簽署 |
113
+ | 預設拒絕 | 策略引擎拒絕所有未明確允許的請求 |
114
+ | 失敗關閉 | 未知 calldata 一律拒絕;已知協議但無評估器也拒絕 |
115
+ | 稽核軌跡 | 每次操作以結構化 JSON 記錄至 stderr,含呼叫者標記 |
116
+ | 最小暴露面 | 原始簽署工具(`sign_transaction`、`sign_typed_data`)預設停用 |
117
+
118
+ ## Claude Code 插件
119
+
120
+ 4 個技能透過 MCP 工具與錢包互動,絕不直接存取金鑰。
121
+
122
+ | 技能 | 說明 |
123
+ |------|------|
124
+ | `sign-swap` | 協調 swap 簽署操作 |
125
+ | `sign-permit` | 協調 EIP-2612 permit 簽署 |
126
+ | `check-wallet` | 檢查錢包地址與健康狀態 |
127
+ | `audit-log` | 查詢稽核日誌 |
128
+
129
+ ## 套件匯出
130
+
131
+ | 子路徑 | 內容 | MCP 依賴 |
132
+ |--------|------|:-:|
133
+ | `@agenticvault/agentic-vault` | 核心簽署(SigningProvider、EvmSignerAdapter、factory) | 無 |
134
+ | `@agenticvault/agentic-vault/protocols` | 協議解碼器、dispatcher、PolicyEngine V2、workflows | 無 |
135
+ | `@agenticvault/agentic-vault/agentic` | MCP 伺服器、稽核日誌記錄器 | 有 |
136
+
137
+ ## 文件
138
+
139
+ | 文件 | 說明 |
140
+ |------|------|
141
+ | [介面指南](docs/guides/interfaces.md) | TypeScript、CLI、MCP、OpenClaw 使用方式 |
142
+ | [策略參考](docs/reference/policy.md) | 策略 JSON 結構、欄位與範例 |
143
+ | [AWS KMS 設定](docs/guides/aws-kms-setup.md) | 金鑰建立、IAM 策略、驗證方式 |
144
+ | [OpenClaw 插件](packages/openclaw-plugin/) | OpenClaw 插件套件與設定 |
145
+ | [架構決策](docs/project/adrs/ADR-001-architecture-decisions.md) | 關鍵設計決策的 ADR |
146
+ | [貢獻指南](CONTRIBUTING.md) | 開發流程與規範 |
147
+
148
+ ## 路線圖
149
+
150
+ - 更多簽署提供者(GCP KMS、HashiCorp Vault)
151
+ - 更多協議解碼器(Curve、Compound V3)
152
+ - 多重簽章支援
153
+ - 遠端 MCP 伺服器模式(HTTP 傳輸 + OAuth 2.1)
154
+
155
+ ## 貢獻
156
+
157
+ 請參閱 [CONTRIBUTING.md](CONTRIBUTING.md) 了解開發流程、分支命名與提交規範。
158
+
159
+ 本專案遵循 [Contributor Covenant 行為準則](CODE_OF_CONDUCT.md)。
160
+
161
+ ## 授權
162
+
163
+ [MIT](LICENSE)
@@ -0,0 +1,7 @@
1
+ import { type AuditEntry } from './types.js';
2
+ export declare class AuditLogger {
3
+ private readonly output;
4
+ constructor(output?: NodeJS.WritableStream);
5
+ log(entry: Omit<AuditEntry, 'timestamp' | 'traceId'>): AuditEntry;
6
+ createTraceId(): string;
7
+ }
@@ -0,0 +1,19 @@
1
+ export class AuditLogger {
2
+ output;
3
+ constructor(output) {
4
+ this.output = output ?? process.stderr;
5
+ }
6
+ log(entry) {
7
+ const full = {
8
+ timestamp: new Date().toISOString(),
9
+ traceId: this.createTraceId(),
10
+ ...entry,
11
+ };
12
+ this.output.write(JSON.stringify(full) + '\n');
13
+ return full;
14
+ }
15
+ createTraceId() {
16
+ return crypto.randomUUID();
17
+ }
18
+ }
19
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/agentic/audit/logger.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,WAAW;IACL,MAAM,CAAwB;IAE/C,YAAY,MAA8B;QACxC,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IACzC,CAAC;IAED,GAAG,CAAC,KAAgD;QAClD,MAAM,IAAI,GAAe;YACvB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE;YAC7B,GAAG,KAAK;SACT,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa;QACX,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;IAC7B,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ export interface AuditEntry {
2
+ timestamp: string;
3
+ traceId: string;
4
+ service: string;
5
+ action: string;
6
+ who: string;
7
+ what: string;
8
+ why: string;
9
+ result: 'approved' | 'denied' | 'error';
10
+ details?: Record<string, unknown>;
11
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/agentic/audit/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ export declare function parseArgs(argv: string[]): {
3
+ keyId: string;
4
+ region: string;
5
+ expectedAddress?: string;
6
+ unsafeRawSign: boolean;
7
+ policyConfig?: string;
8
+ };
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env node
2
+ import { createSigningProvider, EvmSignerAdapter, } from '../index.js';
3
+ import { PolicyEngine, erc20Evaluator, uniswapV3Evaluator, aaveV3Evaluator, loadPolicyConfigFromFile, } from '../protocols/index.js';
4
+ import { AuditLogger } from './audit/logger.js';
5
+ import { startStdioServer } from './mcp/server.js';
6
+ export function parseArgs(argv) {
7
+ let keyId = '';
8
+ let region = '';
9
+ let expectedAddress;
10
+ let unsafeRawSign = false;
11
+ let policyConfig;
12
+ for (let i = 2; i < argv.length; i++) {
13
+ const arg = argv[i];
14
+ switch (arg) {
15
+ case '--key-id':
16
+ keyId = argv[++i];
17
+ break;
18
+ case '--region':
19
+ region = argv[++i];
20
+ break;
21
+ case '--expected-address':
22
+ expectedAddress = argv[++i];
23
+ break;
24
+ case '--unsafe-raw-sign':
25
+ unsafeRawSign = true;
26
+ break;
27
+ case '--policy-config':
28
+ policyConfig = argv[++i];
29
+ break;
30
+ default:
31
+ // Ignore unknown arguments
32
+ break;
33
+ }
34
+ }
35
+ if (!keyId)
36
+ keyId = process.env.VAULT_KEY_ID ?? '';
37
+ if (!region)
38
+ region = process.env.VAULT_REGION ?? '';
39
+ if (!keyId)
40
+ throw new Error('--key-id or VAULT_KEY_ID environment variable is required');
41
+ if (!region)
42
+ throw new Error('--region or VAULT_REGION environment variable is required');
43
+ return { keyId, region, expectedAddress, unsafeRawSign, policyConfig };
44
+ }
45
+ const DEFAULT_POLICY = {
46
+ allowedChainIds: [],
47
+ allowedContracts: [],
48
+ allowedSelectors: [],
49
+ maxAmountWei: 0n,
50
+ maxDeadlineSeconds: 0,
51
+ };
52
+ async function main() {
53
+ const args = parseArgs(process.argv);
54
+ // Create signer via factory
55
+ const provider = createSigningProvider({
56
+ provider: 'aws-kms',
57
+ keyId: args.keyId,
58
+ region: args.region,
59
+ });
60
+ const signer = new EvmSignerAdapter(provider, {
61
+ expectedAddress: args.expectedAddress,
62
+ });
63
+ // Create policy engine
64
+ const policyConfig = args.policyConfig
65
+ ? loadPolicyConfigFromFile(args.policyConfig)
66
+ : DEFAULT_POLICY;
67
+ const policyEngine = new PolicyEngine(policyConfig, [erc20Evaluator, uniswapV3Evaluator, aaveV3Evaluator]);
68
+ // Create audit logger
69
+ const auditLogger = new AuditLogger();
70
+ // Start MCP stdio server
71
+ await startStdioServer({
72
+ signer,
73
+ policyEngine,
74
+ auditLogger,
75
+ unsafeRawSign: args.unsafeRawSign,
76
+ });
77
+ }
78
+ main().catch((error) => {
79
+ process.stderr.write(JSON.stringify({
80
+ timestamp: new Date().toISOString(),
81
+ service: 'agentic-vault-mcp',
82
+ level: 'error',
83
+ message: error instanceof Error ? error.message : String(error),
84
+ }) + '\n');
85
+ process.exit(1);
86
+ });
87
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/agentic/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { PolicyEngine } from '../protocols/index.js';
2
+ export type { PolicyConfig, PolicyRequest, PolicyEvaluation, PolicyConfigV2, PolicyRequestV2, ProtocolPolicyConfig, ProtocolPolicyEvaluator, } from '../protocols/index.js';
3
+ export { AuditLogger } from './audit/logger.js';
4
+ export type { AuditEntry } from './audit/types.js';
5
+ export { createMcpServer, startStdioServer } from './mcp/server.js';
@@ -0,0 +1,7 @@
1
+ // ─── Policy Engine (deprecated — use @agenticvault/agentic-vault/protocols) ───
2
+ export { PolicyEngine } from '../protocols/index.js';
3
+ // ─── Audit Logger ───
4
+ export { AuditLogger } from './audit/logger.js';
5
+ // ─── MCP Server ───
6
+ export { createMcpServer, startStdioServer } from './mcp/server.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agentic/index.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAWrD,uBAAuB;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,qBAAqB;AACrB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { type RegisterToolsOptions, type ToolContext } from './tools/index.js';
3
+ export interface McpServerOptions extends ToolContext, RegisterToolsOptions {
4
+ name?: string;
5
+ version?: string;
6
+ }
7
+ export declare function createMcpServer(options: McpServerOptions): McpServer;
8
+ export declare function startStdioServer(options: McpServerOptions): Promise<McpServer>;
@@ -0,0 +1,25 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { ProtocolDispatcher, createDefaultRegistry } from '../../protocols/index.js';
4
+ import { registerTools } from './tools/index.js';
5
+ export function createMcpServer(options) {
6
+ const server = new McpServer({
7
+ name: options.name ?? 'agentic-vault-mcp',
8
+ version: options.version ?? '0.3.0',
9
+ });
10
+ const ctx = {
11
+ signer: options.signer,
12
+ policyEngine: options.policyEngine,
13
+ auditLogger: options.auditLogger,
14
+ dispatcher: options.dispatcher ?? new ProtocolDispatcher(createDefaultRegistry()),
15
+ };
16
+ registerTools(server, ctx, { unsafeRawSign: options.unsafeRawSign });
17
+ return server;
18
+ }
19
+ export async function startStdioServer(options) {
20
+ const server = createMcpServer(options);
21
+ const transport = new StdioServerTransport();
22
+ await server.connect(transport);
23
+ return server;
24
+ }
25
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/agentic/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACrF,OAAO,EAAE,aAAa,EAA+C,MAAM,kBAAkB,CAAC;AAO9F,MAAM,UAAU,eAAe,CAAC,OAAyB;IACvD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,mBAAmB;QACzC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,OAAO;KACpC,CAAC,CAAC;IAEH,MAAM,GAAG,GAAgB;QACvB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI,kBAAkB,CAAC,qBAAqB,EAAE,CAAC;KAClF,CAAC;IAEF,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAErE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAyB;IAC9D,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { type ToolContext } from './shared.js';
2
+ import { type McpToolResult } from './result-adapter.js';
3
+ interface DecodedCallArgs {
4
+ chainId: number;
5
+ to: string;
6
+ data: string;
7
+ value?: string;
8
+ }
9
+ /**
10
+ * MCP adapter for decoded-call signing workflow.
11
+ * Delegates to signDefiCall() and converts WorkflowResult to MCP format.
12
+ */
13
+ export declare function executeDecodedCallPipeline(ctx: ToolContext, toolName: string, args: DecodedCallArgs): Promise<McpToolResult>;
14
+ export {};
@@ -0,0 +1,18 @@
1
+ import { signDefiCall } from '../../../protocols/index.js';
2
+ import { toMcpResult } from './result-adapter.js';
3
+ /**
4
+ * MCP adapter for decoded-call signing workflow.
5
+ * Delegates to signDefiCall() and converts WorkflowResult to MCP format.
6
+ */
7
+ export async function executeDecodedCallPipeline(ctx, toolName, args) {
8
+ const result = await signDefiCall({
9
+ signer: ctx.signer,
10
+ policyEngine: ctx.policyEngine,
11
+ auditSink: ctx.auditLogger,
12
+ dispatcher: ctx.dispatcher,
13
+ caller: 'mcp-client',
14
+ service: 'agentic-vault-mcp',
15
+ }, toolName, args);
16
+ return toMcpResult(result);
17
+ }
18
+ //# sourceMappingURL=decoded-call-pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decoded-call-pipeline.js","sourceRoot":"","sources":["../../../../src/agentic/mcp/tools/decoded-call-pipeline.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAsB,MAAM,qBAAqB,CAAC;AAStE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,GAAgB,EAChB,QAAgB,EAChB,IAAqB;IAErB,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B;QACE,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,SAAS,EAAE,GAAG,CAAC,WAAW;QAC1B,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,mBAAmB;KAC7B,EACD,QAAQ,EACR,IAAI,CACL,CAAC;IACF,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { type ToolContext } from './shared.js';
3
+ export declare function registerGetAddress(server: McpServer, ctx: ToolContext): void;
@@ -0,0 +1,25 @@
1
+ import { getAddressWorkflow } from '../../../protocols/index.js';
2
+ export function registerGetAddress(server, ctx) {
3
+ server.registerTool('get_address', {
4
+ description: 'Get the wallet address managed by this vault',
5
+ }, async () => {
6
+ const result = await getAddressWorkflow({
7
+ signer: ctx.signer,
8
+ policyEngine: ctx.policyEngine,
9
+ auditSink: ctx.auditLogger,
10
+ caller: 'mcp-client',
11
+ service: 'agentic-vault-mcp',
12
+ });
13
+ switch (result.status) {
14
+ case 'approved':
15
+ return { content: [{ type: 'text', text: result.data }] };
16
+ case 'error':
17
+ return { content: [{ type: 'text', text: `Error: ${result.reason}` }], isError: true };
18
+ case 'denied':
19
+ return { content: [{ type: 'text', text: `Error: ${result.reason}` }], isError: true };
20
+ default:
21
+ return { content: [{ type: 'text', text: 'Unexpected result' }], isError: true };
22
+ }
23
+ });
24
+ }
25
+ //# sourceMappingURL=get-address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-address.js","sourceRoot":"","sources":["../../../../src/agentic/mcp/tools/get-address.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,GAAgB;IACpE,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE;QACjC,WAAW,EAAE,8CAA8C;KAC5D,EAAE,KAAK,IAAI,EAAE;QACZ,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;YACtC,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,SAAS,EAAE,GAAG,CAAC,WAAW;YAC1B,MAAM,EAAE,YAAY;YACpB,OAAO,EAAE,mBAAmB;SAC7B,CAAC,CAAC;QAEH,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,KAAK,UAAU;gBACb,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACrE,KAAK,OAAO;gBACV,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAClG,KAAK,QAAQ;gBACX,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAClG;gBACE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC9F,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { type ToolContext } from './shared.js';
3
+ export declare function registerHealthCheck(server: McpServer, ctx: ToolContext): void;
@@ -0,0 +1,25 @@
1
+ import { healthCheckWorkflow } from '../../../protocols/index.js';
2
+ export function registerHealthCheck(server, ctx) {
3
+ server.registerTool('health_check', {
4
+ description: 'Check the health status of the vault signer',
5
+ }, async () => {
6
+ const result = await healthCheckWorkflow({
7
+ signer: ctx.signer,
8
+ policyEngine: ctx.policyEngine,
9
+ auditSink: ctx.auditLogger,
10
+ caller: 'mcp-client',
11
+ service: 'agentic-vault-mcp',
12
+ });
13
+ switch (result.status) {
14
+ case 'approved':
15
+ return { content: [{ type: 'text', text: result.data }] };
16
+ case 'error':
17
+ return { content: [{ type: 'text', text: JSON.stringify({ status: 'unhealthy', error: result.reason }) }], isError: true };
18
+ case 'denied':
19
+ return { content: [{ type: 'text', text: JSON.stringify({ status: 'unhealthy', error: result.reason }) }], isError: true };
20
+ default:
21
+ return { content: [{ type: 'text', text: JSON.stringify({ status: 'unhealthy', error: 'Unexpected result' }) }], isError: true };
22
+ }
23
+ });
24
+ }
25
+ //# sourceMappingURL=health-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-check.js","sourceRoot":"","sources":["../../../../src/agentic/mcp/tools/health-check.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,GAAgB;IACrE,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE;QAClC,WAAW,EAAE,6CAA6C;KAC3D,EAAE,KAAK,IAAI,EAAE;QACZ,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC;YACvC,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,SAAS,EAAE,GAAG,CAAC,WAAW;YAC1B,MAAM,EAAE,YAAY;YACpB,OAAO,EAAE,mBAAmB;SAC7B,CAAC,CAAC;QAEH,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,KAAK,UAAU;gBACb,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACrE,KAAK,OAAO;gBACV,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACtI,KAAK,QAAQ;gBACX,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACtI;gBACE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC9I,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}