safehands-pharos 1.4.0 → 2.6.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 (571) hide show
  1. package/.agents/policies/default.json +15 -0
  2. package/.env.example +81 -64
  3. package/README.md +301 -333
  4. package/SECURITY.md +112 -0
  5. package/SKILL.md +59 -0
  6. package/contracts/SafeHandsAttestation.sol +182 -0
  7. package/contracts/SafeHandsRegistry.sol +149 -0
  8. package/dist/agent/SafeHandsGuardianAgent.d.ts +39 -0
  9. package/dist/agent/SafeHandsGuardianAgent.d.ts.map +1 -0
  10. package/dist/agent/SafeHandsGuardianAgent.js +98 -0
  11. package/dist/agent/SafeHandsGuardianAgent.js.map +1 -0
  12. package/dist/agent/agentDecisionFormatter.d.ts +43 -0
  13. package/dist/agent/agentDecisionFormatter.d.ts.map +1 -0
  14. package/dist/agent/agentDecisionFormatter.js +96 -0
  15. package/dist/agent/agentDecisionFormatter.js.map +1 -0
  16. package/dist/agent/agentEnrich.d.ts +28 -0
  17. package/dist/agent/agentEnrich.d.ts.map +1 -0
  18. package/dist/agent/agentEnrich.js +99 -0
  19. package/dist/agent/agentEnrich.js.map +1 -0
  20. package/dist/agent/agentIntentClassifier.d.ts +44 -0
  21. package/dist/agent/agentIntentClassifier.d.ts.map +1 -0
  22. package/dist/agent/agentIntentClassifier.js +77 -0
  23. package/dist/agent/agentIntentClassifier.js.map +1 -0
  24. package/dist/agent/agentPolicyResolver.d.ts +44 -0
  25. package/dist/agent/agentPolicyResolver.d.ts.map +1 -0
  26. package/dist/agent/agentPolicyResolver.js +94 -0
  27. package/dist/agent/agentPolicyResolver.js.map +1 -0
  28. package/dist/agent/agentRuntime.d.ts +12 -0
  29. package/dist/agent/agentRuntime.d.ts.map +1 -0
  30. package/dist/agent/agentRuntime.js +31 -0
  31. package/dist/agent/agentRuntime.js.map +1 -0
  32. package/dist/agent/agentToolRouter.d.ts +24 -0
  33. package/dist/agent/agentToolRouter.d.ts.map +1 -0
  34. package/dist/agent/agentToolRouter.js +89 -0
  35. package/dist/agent/agentToolRouter.js.map +1 -0
  36. package/dist/agent/guardianOperator.d.ts +35 -0
  37. package/dist/agent/guardianOperator.d.ts.map +1 -0
  38. package/dist/agent/guardianOperator.js +65 -0
  39. package/dist/agent/guardianOperator.js.map +1 -0
  40. package/dist/agent/index.d.ts +8 -0
  41. package/dist/agent/index.d.ts.map +1 -0
  42. package/dist/agent/index.js +14 -0
  43. package/dist/agent/index.js.map +1 -0
  44. package/dist/api/activityRoutes.d.ts +70 -0
  45. package/dist/api/activityRoutes.d.ts.map +1 -0
  46. package/dist/api/activityRoutes.js +100 -0
  47. package/dist/api/activityRoutes.js.map +1 -0
  48. package/dist/api/agentRoutes.d.ts +16 -0
  49. package/dist/api/agentRoutes.d.ts.map +1 -0
  50. package/dist/api/agentRoutes.js +37 -0
  51. package/dist/api/agentRoutes.js.map +1 -0
  52. package/dist/api/broadcastRoutes.d.ts +34 -0
  53. package/dist/api/broadcastRoutes.d.ts.map +1 -0
  54. package/dist/api/broadcastRoutes.js +147 -0
  55. package/dist/api/broadcastRoutes.js.map +1 -0
  56. package/dist/api/consolePage.d.ts +2 -0
  57. package/dist/api/consolePage.d.ts.map +1 -0
  58. package/dist/api/consolePage.js +206 -0
  59. package/dist/api/consolePage.js.map +1 -0
  60. package/dist/api/httpHardening.d.ts +75 -0
  61. package/dist/api/httpHardening.d.ts.map +1 -0
  62. package/dist/api/httpHardening.js +122 -0
  63. package/dist/api/httpHardening.js.map +1 -0
  64. package/dist/api/indexerRoutes.d.ts +46 -0
  65. package/dist/api/indexerRoutes.d.ts.map +1 -0
  66. package/dist/api/indexerRoutes.js +75 -0
  67. package/dist/api/indexerRoutes.js.map +1 -0
  68. package/dist/api/paidRoutes.d.ts +8 -0
  69. package/dist/api/paidRoutes.d.ts.map +1 -0
  70. package/dist/api/paidRoutes.js +175 -0
  71. package/dist/api/paidRoutes.js.map +1 -0
  72. package/dist/api/prepareRoutes.d.ts +58 -0
  73. package/dist/api/prepareRoutes.d.ts.map +1 -0
  74. package/dist/api/prepareRoutes.js +90 -0
  75. package/dist/api/prepareRoutes.js.map +1 -0
  76. package/dist/api/response.d.ts +39 -0
  77. package/dist/api/response.d.ts.map +1 -0
  78. package/dist/api/response.js +53 -0
  79. package/dist/api/response.js.map +1 -0
  80. package/dist/api/routes.d.ts +175 -0
  81. package/dist/api/routes.d.ts.map +1 -0
  82. package/dist/api/routes.js +276 -0
  83. package/dist/api/routes.js.map +1 -0
  84. package/dist/api/schemas.d.ts +147 -0
  85. package/dist/api/schemas.d.ts.map +1 -0
  86. package/dist/api/schemas.js +81 -0
  87. package/dist/api/schemas.js.map +1 -0
  88. package/dist/api/server.d.ts +11 -0
  89. package/dist/api/server.d.ts.map +1 -0
  90. package/dist/api/server.js +505 -0
  91. package/dist/api/server.js.map +1 -0
  92. package/dist/api/toolRoutes.d.ts +14 -0
  93. package/dist/api/toolRoutes.d.ts.map +1 -0
  94. package/dist/api/toolRoutes.js +138 -0
  95. package/dist/api/toolRoutes.js.map +1 -0
  96. package/dist/api/walletPrepareRoutes.d.ts +74 -0
  97. package/dist/api/walletPrepareRoutes.d.ts.map +1 -0
  98. package/dist/api/walletPrepareRoutes.js +127 -0
  99. package/dist/api/walletPrepareRoutes.js.map +1 -0
  100. package/dist/api/x402Gate.d.ts +51 -0
  101. package/dist/api/x402Gate.d.ts.map +1 -0
  102. package/dist/api/x402Gate.js +184 -0
  103. package/dist/api/x402Gate.js.map +1 -0
  104. package/dist/cli.d.ts +5 -5
  105. package/dist/cli.d.ts.map +1 -1
  106. package/dist/cli.js +154 -124
  107. package/dist/cli.js.map +1 -1
  108. package/dist/data/ecosystemRegistry.data.d.ts +3 -0
  109. package/dist/data/ecosystemRegistry.data.d.ts.map +1 -0
  110. package/dist/data/ecosystemRegistry.data.js +582 -0
  111. package/dist/data/ecosystemRegistry.data.js.map +1 -0
  112. package/dist/demo.d.ts +1 -1
  113. package/dist/demo.d.ts.map +1 -1
  114. package/dist/demo.js +206 -171
  115. package/dist/demo.js.map +1 -1
  116. package/dist/index.d.ts +2 -2
  117. package/dist/index.d.ts.map +1 -1
  118. package/dist/index.js +249 -164
  119. package/dist/index.js.map +1 -1
  120. package/dist/init.d.ts +1 -1
  121. package/dist/init.d.ts.map +1 -1
  122. package/dist/init.js +127 -65
  123. package/dist/init.js.map +1 -1
  124. package/dist/lib/analysis/approval.d.ts +29 -0
  125. package/dist/lib/analysis/approval.d.ts.map +1 -0
  126. package/dist/lib/analysis/approval.js +162 -0
  127. package/dist/lib/analysis/approval.js.map +1 -0
  128. package/dist/lib/analysis/calldata.d.ts +60 -0
  129. package/dist/lib/analysis/calldata.d.ts.map +1 -0
  130. package/dist/lib/analysis/calldata.js +349 -0
  131. package/dist/lib/analysis/calldata.js.map +1 -0
  132. package/dist/lib/analysis/contractIntel.d.ts +65 -0
  133. package/dist/lib/analysis/contractIntel.d.ts.map +1 -0
  134. package/dist/lib/analysis/contractIntel.js +320 -0
  135. package/dist/lib/analysis/contractIntel.js.map +1 -0
  136. package/dist/lib/analysis/evm.d.ts +42 -0
  137. package/dist/lib/analysis/evm.d.ts.map +1 -0
  138. package/dist/lib/analysis/evm.js +185 -0
  139. package/dist/lib/analysis/evm.js.map +1 -0
  140. package/dist/lib/analysis/gas.d.ts +4 -0
  141. package/dist/lib/analysis/gas.d.ts.map +1 -0
  142. package/dist/lib/analysis/gas.js +13 -0
  143. package/dist/lib/analysis/gas.js.map +1 -0
  144. package/dist/lib/analysis/index.d.ts +11 -0
  145. package/dist/lib/analysis/index.d.ts.map +1 -0
  146. package/dist/lib/analysis/index.js +16 -0
  147. package/dist/lib/analysis/index.js.map +1 -0
  148. package/dist/lib/analysis/pharosTokens.d.ts +31 -0
  149. package/dist/lib/analysis/pharosTokens.d.ts.map +1 -0
  150. package/dist/lib/analysis/pharosTokens.js +78 -0
  151. package/dist/lib/analysis/pharosTokens.js.map +1 -0
  152. package/dist/lib/analysis/safeTx.d.ts +27 -0
  153. package/dist/lib/analysis/safeTx.d.ts.map +1 -0
  154. package/dist/lib/analysis/safeTx.js +118 -0
  155. package/dist/lib/analysis/safeTx.js.map +1 -0
  156. package/dist/lib/analysis/token.d.ts +21 -0
  157. package/dist/lib/analysis/token.d.ts.map +1 -0
  158. package/dist/lib/analysis/token.js +151 -0
  159. package/dist/lib/analysis/token.js.map +1 -0
  160. package/dist/lib/analysis/types.d.ts +49 -0
  161. package/dist/lib/analysis/types.d.ts.map +1 -0
  162. package/dist/lib/analysis/types.js +10 -0
  163. package/dist/lib/analysis/types.js.map +1 -0
  164. package/dist/lib/analysis/x402.d.ts +24 -0
  165. package/dist/lib/analysis/x402.d.ts.map +1 -0
  166. package/dist/lib/analysis/x402.js +60 -0
  167. package/dist/lib/analysis/x402.js.map +1 -0
  168. package/dist/lib/auditLog.d.ts +1 -0
  169. package/dist/lib/auditLog.d.ts.map +1 -1
  170. package/dist/lib/auditLog.js +0 -0
  171. package/dist/lib/auditLog.js.map +1 -1
  172. package/dist/lib/config.d.ts +77 -0
  173. package/dist/lib/config.d.ts.map +1 -0
  174. package/dist/lib/config.js +120 -0
  175. package/dist/lib/config.js.map +1 -0
  176. package/dist/lib/constants.d.ts +452 -291
  177. package/dist/lib/constants.d.ts.map +1 -1
  178. package/dist/lib/constants.js +509 -292
  179. package/dist/lib/constants.js.map +1 -1
  180. package/dist/lib/dodoApi.d.ts +101 -78
  181. package/dist/lib/dodoApi.d.ts.map +1 -1
  182. package/dist/lib/dodoApi.js +259 -196
  183. package/dist/lib/dodoApi.js.map +1 -1
  184. package/dist/lib/ecosystemRegistry.d.ts +116 -0
  185. package/dist/lib/ecosystemRegistry.d.ts.map +1 -0
  186. package/dist/lib/ecosystemRegistry.js +178 -0
  187. package/dist/lib/ecosystemRegistry.js.map +1 -0
  188. package/dist/lib/envLoader.d.ts +2 -0
  189. package/dist/lib/envLoader.d.ts.map +1 -0
  190. package/dist/lib/envLoader.js +65 -0
  191. package/dist/lib/envLoader.js.map +1 -0
  192. package/dist/lib/goldsky.d.ts +58 -0
  193. package/dist/lib/goldsky.d.ts.map +1 -0
  194. package/dist/lib/goldsky.js +275 -0
  195. package/dist/lib/goldsky.js.map +1 -0
  196. package/dist/lib/guardian/decision.d.ts +23 -0
  197. package/dist/lib/guardian/decision.d.ts.map +1 -0
  198. package/dist/lib/guardian/decision.js +40 -0
  199. package/dist/lib/guardian/decision.js.map +1 -0
  200. package/dist/lib/http.d.ts +13 -14
  201. package/dist/lib/http.d.ts.map +1 -1
  202. package/dist/lib/http.js +383 -118
  203. package/dist/lib/http.js.map +1 -1
  204. package/dist/lib/managedExecution.d.ts +19 -0
  205. package/dist/lib/managedExecution.d.ts.map +1 -0
  206. package/dist/lib/managedExecution.js +64 -0
  207. package/dist/lib/managedExecution.js.map +1 -0
  208. package/dist/lib/merkleBatcher.d.ts +23 -0
  209. package/dist/lib/merkleBatcher.d.ts.map +1 -0
  210. package/dist/lib/merkleBatcher.js +62 -0
  211. package/dist/lib/merkleBatcher.js.map +1 -0
  212. package/dist/lib/networks.d.ts +48 -0
  213. package/dist/lib/networks.d.ts.map +1 -0
  214. package/dist/lib/networks.js +103 -0
  215. package/dist/lib/networks.js.map +1 -0
  216. package/dist/lib/observability/accessContext.d.ts +29 -0
  217. package/dist/lib/observability/accessContext.d.ts.map +1 -0
  218. package/dist/lib/observability/accessContext.js +50 -0
  219. package/dist/lib/observability/accessContext.js.map +1 -0
  220. package/dist/lib/observability/activityStore.d.ts +70 -0
  221. package/dist/lib/observability/activityStore.d.ts.map +1 -0
  222. package/dist/lib/observability/activityStore.js +149 -0
  223. package/dist/lib/observability/activityStore.js.map +1 -0
  224. package/dist/lib/observability/apiKey.d.ts +55 -0
  225. package/dist/lib/observability/apiKey.d.ts.map +1 -0
  226. package/dist/lib/observability/apiKey.js +141 -0
  227. package/dist/lib/observability/apiKey.js.map +1 -0
  228. package/dist/lib/observability/logger.d.ts +30 -0
  229. package/dist/lib/observability/logger.d.ts.map +1 -0
  230. package/dist/lib/observability/logger.js +30 -0
  231. package/dist/lib/observability/logger.js.map +1 -0
  232. package/dist/lib/observability/quota.d.ts +33 -0
  233. package/dist/lib/observability/quota.d.ts.map +1 -0
  234. package/dist/lib/observability/quota.js +49 -0
  235. package/dist/lib/observability/quota.js.map +1 -0
  236. package/dist/lib/observability/requestId.d.ts +8 -0
  237. package/dist/lib/observability/requestId.d.ts.map +1 -0
  238. package/dist/lib/observability/requestId.js +24 -0
  239. package/dist/lib/observability/requestId.js.map +1 -0
  240. package/dist/lib/observability/sanitize.d.ts +77 -0
  241. package/dist/lib/observability/sanitize.d.ts.map +1 -0
  242. package/dist/lib/observability/sanitize.js +228 -0
  243. package/dist/lib/observability/sanitize.js.map +1 -0
  244. package/dist/lib/observability/scopes.d.ts +20 -0
  245. package/dist/lib/observability/scopes.d.ts.map +1 -0
  246. package/dist/lib/observability/scopes.js +77 -0
  247. package/dist/lib/observability/scopes.js.map +1 -0
  248. package/dist/lib/okxDexApi.d.ts +106 -0
  249. package/dist/lib/okxDexApi.d.ts.map +1 -0
  250. package/dist/lib/okxDexApi.js +221 -0
  251. package/dist/lib/okxDexApi.js.map +1 -0
  252. package/dist/lib/persistentJsonStore.d.ts +5 -0
  253. package/dist/lib/persistentJsonStore.d.ts.map +1 -0
  254. package/dist/lib/persistentJsonStore.js +39 -0
  255. package/dist/lib/persistentJsonStore.js.map +1 -0
  256. package/dist/lib/pharos/attestationPublisher.d.ts +50 -0
  257. package/dist/lib/pharos/attestationPublisher.d.ts.map +1 -0
  258. package/dist/lib/pharos/attestationPublisher.js +262 -0
  259. package/dist/lib/pharos/attestationPublisher.js.map +1 -0
  260. package/dist/lib/pharos/ecosystem.d.ts +52 -0
  261. package/dist/lib/pharos/ecosystem.d.ts.map +1 -0
  262. package/dist/lib/pharos/ecosystem.js +431 -0
  263. package/dist/lib/pharos/ecosystem.js.map +1 -0
  264. package/dist/lib/pharos/ecosystemEvidence.d.ts +53 -0
  265. package/dist/lib/pharos/ecosystemEvidence.d.ts.map +1 -0
  266. package/dist/lib/pharos/ecosystemEvidence.js +133 -0
  267. package/dist/lib/pharos/ecosystemEvidence.js.map +1 -0
  268. package/dist/lib/pharos/rpc.d.ts +44 -0
  269. package/dist/lib/pharos/rpc.d.ts.map +1 -0
  270. package/dist/lib/pharos/rpc.js +90 -0
  271. package/dist/lib/pharos/rpc.js.map +1 -0
  272. package/dist/lib/pharos/rpcEvidence.d.ts +49 -0
  273. package/dist/lib/pharos/rpcEvidence.d.ts.map +1 -0
  274. package/dist/lib/pharos/rpcEvidence.js +46 -0
  275. package/dist/lib/pharos/rpcEvidence.js.map +1 -0
  276. package/dist/lib/pharos/rpcMethods.d.ts +46 -0
  277. package/dist/lib/pharos/rpcMethods.d.ts.map +1 -0
  278. package/dist/lib/pharos/rpcMethods.js +176 -0
  279. package/dist/lib/pharos/rpcMethods.js.map +1 -0
  280. package/dist/lib/pharos/spvVerifier.d.ts +47 -0
  281. package/dist/lib/pharos/spvVerifier.d.ts.map +1 -0
  282. package/dist/lib/pharos/spvVerifier.js +105 -0
  283. package/dist/lib/pharos/spvVerifier.js.map +1 -0
  284. package/dist/lib/pharos/userSignedBroadcaster.d.ts +10 -0
  285. package/dist/lib/pharos/userSignedBroadcaster.d.ts.map +1 -0
  286. package/dist/lib/pharos/userSignedBroadcaster.js +50 -0
  287. package/dist/lib/pharos/userSignedBroadcaster.js.map +1 -0
  288. package/dist/lib/pharosClient.d.ts +53 -58
  289. package/dist/lib/pharosClient.d.ts.map +1 -1
  290. package/dist/lib/pharosClient.js +56 -63
  291. package/dist/lib/pharosClient.js.map +1 -1
  292. package/dist/lib/policy/actionPolicyEngine.d.ts +89 -53
  293. package/dist/lib/policy/actionPolicyEngine.d.ts.map +1 -1
  294. package/dist/lib/policy/actionPolicyEngine.js +373 -212
  295. package/dist/lib/policy/actionPolicyEngine.js.map +1 -1
  296. package/dist/lib/policy/agentPolicy.d.ts +29 -0
  297. package/dist/lib/policy/agentPolicy.d.ts.map +1 -0
  298. package/dist/lib/policy/agentPolicy.js +154 -0
  299. package/dist/lib/policy/agentPolicy.js.map +1 -0
  300. package/dist/lib/policy/policyPresets.d.ts +30 -0
  301. package/dist/lib/policy/policyPresets.d.ts.map +1 -0
  302. package/dist/lib/policy/policyPresets.js +124 -0
  303. package/dist/lib/policy/policyPresets.js.map +1 -0
  304. package/dist/lib/policy/writeExecutionGate.d.ts +23 -0
  305. package/dist/lib/policy/writeExecutionGate.d.ts.map +1 -0
  306. package/dist/lib/policy/writeExecutionGate.js +65 -0
  307. package/dist/lib/policy/writeExecutionGate.js.map +1 -0
  308. package/dist/lib/preparedTxStore.d.ts +21 -0
  309. package/dist/lib/preparedTxStore.d.ts.map +1 -0
  310. package/dist/lib/preparedTxStore.js +90 -0
  311. package/dist/lib/preparedTxStore.js.map +1 -0
  312. package/dist/lib/price/chainlinkPushProvider.d.ts +34 -0
  313. package/dist/lib/price/chainlinkPushProvider.d.ts.map +1 -0
  314. package/dist/lib/price/chainlinkPushProvider.js +36 -0
  315. package/dist/lib/price/chainlinkPushProvider.js.map +1 -0
  316. package/dist/lib/price/feedRegistry.d.ts +26 -0
  317. package/dist/lib/price/feedRegistry.d.ts.map +1 -0
  318. package/dist/lib/price/feedRegistry.js +67 -0
  319. package/dist/lib/price/feedRegistry.js.map +1 -0
  320. package/dist/lib/price/priceResolver.d.ts +35 -0
  321. package/dist/lib/price/priceResolver.d.ts.map +1 -0
  322. package/dist/lib/price/priceResolver.js +246 -0
  323. package/dist/lib/price/priceResolver.js.map +1 -0
  324. package/dist/lib/price/supraProvider.d.ts +9 -0
  325. package/dist/lib/price/supraProvider.d.ts.map +1 -0
  326. package/dist/lib/price/supraProvider.js +17 -0
  327. package/dist/lib/price/supraProvider.js.map +1 -0
  328. package/dist/lib/price/types.d.ts +67 -0
  329. package/dist/lib/price/types.d.ts.map +1 -0
  330. package/dist/lib/price/types.js +7 -0
  331. package/dist/lib/price/types.js.map +1 -0
  332. package/dist/lib/productionGuards.d.ts +16 -0
  333. package/dist/lib/productionGuards.d.ts.map +1 -0
  334. package/dist/lib/productionGuards.js +93 -0
  335. package/dist/lib/productionGuards.js.map +1 -0
  336. package/dist/lib/recipientSafety.d.ts +5 -0
  337. package/dist/lib/recipientSafety.d.ts.map +1 -0
  338. package/dist/lib/recipientSafety.js +28 -0
  339. package/dist/lib/recipientSafety.js.map +1 -0
  340. package/dist/lib/riskEngine.d.ts +45 -26
  341. package/dist/lib/riskEngine.d.ts.map +1 -1
  342. package/dist/lib/riskEngine.js +346 -283
  343. package/dist/lib/riskEngine.js.map +1 -1
  344. package/dist/lib/riskInclusion.d.ts +72 -0
  345. package/dist/lib/riskInclusion.d.ts.map +1 -0
  346. package/dist/lib/riskInclusion.js +252 -0
  347. package/dist/lib/riskInclusion.js.map +1 -0
  348. package/dist/lib/safeHandsRegistry.d.ts +32 -0
  349. package/dist/lib/safeHandsRegistry.d.ts.map +1 -0
  350. package/dist/lib/safeHandsRegistry.js +151 -0
  351. package/dist/lib/safeHandsRegistry.js.map +1 -0
  352. package/dist/lib/signer/index.d.ts +24 -24
  353. package/dist/lib/signer/index.d.ts.map +1 -1
  354. package/dist/lib/signer/index.js +110 -88
  355. package/dist/lib/signer/index.js.map +1 -1
  356. package/dist/lib/spendAccumulator.d.ts +24 -1
  357. package/dist/lib/spendAccumulator.d.ts.map +1 -1
  358. package/dist/lib/spendAccumulator.js +76 -6
  359. package/dist/lib/spendAccumulator.js.map +1 -1
  360. package/dist/lib/toolResponse.d.ts +30 -25
  361. package/dist/lib/toolResponse.d.ts.map +1 -1
  362. package/dist/lib/toolResponse.js +57 -53
  363. package/dist/lib/toolResponse.js.map +1 -1
  364. package/dist/lib/validation.d.ts +7 -0
  365. package/dist/lib/validation.d.ts.map +1 -0
  366. package/dist/lib/validation.js +62 -0
  367. package/dist/lib/validation.js.map +1 -0
  368. package/dist/lib/wallet/index.d.ts +33 -37
  369. package/dist/lib/wallet/index.d.ts.map +1 -1
  370. package/dist/lib/wallet/index.js +141 -128
  371. package/dist/lib/wallet/index.js.map +1 -1
  372. package/dist/lib/x402ReplayStore.d.ts +6 -0
  373. package/dist/lib/x402ReplayStore.d.ts.map +1 -0
  374. package/dist/lib/x402ReplayStore.js +79 -0
  375. package/dist/lib/x402ReplayStore.js.map +1 -0
  376. package/dist/safehands.zip +0 -0
  377. package/dist/sdk.d.ts +14 -0
  378. package/dist/sdk.d.ts.map +1 -0
  379. package/dist/sdk.js +25 -0
  380. package/dist/sdk.js.map +1 -0
  381. package/dist/tools/approveToken.d.ts +66 -45
  382. package/dist/tools/approveToken.d.ts.map +1 -1
  383. package/dist/tools/approveToken.js +152 -85
  384. package/dist/tools/approveToken.js.map +1 -1
  385. package/dist/tools/assessRisk.d.ts +66 -79
  386. package/dist/tools/assessRisk.d.ts.map +1 -1
  387. package/dist/tools/assessRisk.js +63 -104
  388. package/dist/tools/assessRisk.js.map +1 -1
  389. package/dist/tools/checkAllowance.d.ts +49 -43
  390. package/dist/tools/checkAllowance.d.ts.map +1 -1
  391. package/dist/tools/checkAllowance.js +78 -56
  392. package/dist/tools/checkAllowance.js.map +1 -1
  393. package/dist/tools/checkTokenSecurity.d.ts +103 -46
  394. package/dist/tools/checkTokenSecurity.d.ts.map +1 -1
  395. package/dist/tools/checkTokenSecurity.js +240 -95
  396. package/dist/tools/checkTokenSecurity.js.map +1 -1
  397. package/dist/tools/createAgentWallet.d.ts +30 -26
  398. package/dist/tools/createAgentWallet.d.ts.map +1 -1
  399. package/dist/tools/createAgentWallet.js +87 -58
  400. package/dist/tools/createAgentWallet.js.map +1 -1
  401. package/dist/tools/estimateGas.d.ts +84 -79
  402. package/dist/tools/estimateGas.d.ts.map +1 -1
  403. package/dist/tools/estimateGas.js +130 -124
  404. package/dist/tools/estimateGas.js.map +1 -1
  405. package/dist/tools/executeSwap.d.ts +109 -61
  406. package/dist/tools/executeSwap.d.ts.map +1 -1
  407. package/dist/tools/executeSwap.js +289 -141
  408. package/dist/tools/executeSwap.js.map +1 -1
  409. package/dist/tools/explainRisk.d.ts +29 -29
  410. package/dist/tools/explainRisk.d.ts.map +1 -1
  411. package/dist/tools/explainRisk.js +33 -32
  412. package/dist/tools/explainRisk.js.map +1 -1
  413. package/dist/tools/getAgentPolicy.d.ts +15 -0
  414. package/dist/tools/getAgentPolicy.d.ts.map +1 -0
  415. package/dist/tools/getAgentPolicy.js +16 -0
  416. package/dist/tools/getAgentPolicy.js.map +1 -0
  417. package/dist/tools/getAgentReputation.d.ts +31 -0
  418. package/dist/tools/getAgentReputation.d.ts.map +1 -0
  419. package/dist/tools/getAgentReputation.js +44 -0
  420. package/dist/tools/getAgentReputation.js.map +1 -0
  421. package/dist/tools/getAgentWallet.d.ts +21 -21
  422. package/dist/tools/getAgentWallet.d.ts.map +1 -1
  423. package/dist/tools/getAgentWallet.js +37 -27
  424. package/dist/tools/getAgentWallet.js.map +1 -1
  425. package/dist/tools/getAgentWalletBalance.d.ts +11 -11
  426. package/dist/tools/getAgentWalletBalance.d.ts.map +1 -1
  427. package/dist/tools/getAgentWalletBalance.js +102 -70
  428. package/dist/tools/getAgentWalletBalance.js.map +1 -1
  429. package/dist/tools/getExecutionHistory.d.ts +49 -49
  430. package/dist/tools/getExecutionHistory.d.ts.map +1 -1
  431. package/dist/tools/getExecutionHistory.js +148 -154
  432. package/dist/tools/getExecutionHistory.js.map +1 -1
  433. package/dist/tools/getGasPrice.d.ts +43 -43
  434. package/dist/tools/getGasPrice.d.ts.map +0 -0
  435. package/dist/tools/getGasPrice.js +59 -59
  436. package/dist/tools/getGasPrice.js.map +1 -1
  437. package/dist/tools/getPoolInfo.d.ts +75 -75
  438. package/dist/tools/getPoolInfo.d.ts.map +1 -1
  439. package/dist/tools/getPoolInfo.js +142 -137
  440. package/dist/tools/getPoolInfo.js.map +1 -1
  441. package/dist/tools/getSpvProof.d.ts +24 -0
  442. package/dist/tools/getSpvProof.d.ts.map +1 -0
  443. package/dist/tools/getSpvProof.js +64 -0
  444. package/dist/tools/getSpvProof.js.map +1 -0
  445. package/dist/tools/getTokenPrice.d.ts +56 -113
  446. package/dist/tools/getTokenPrice.d.ts.map +1 -1
  447. package/dist/tools/getTokenPrice.js +110 -117
  448. package/dist/tools/getTokenPrice.js.map +1 -1
  449. package/dist/tools/getTransactionStatus.d.ts +43 -43
  450. package/dist/tools/getTransactionStatus.d.ts.map +0 -0
  451. package/dist/tools/getTransactionStatus.js +59 -59
  452. package/dist/tools/getTransactionStatus.js.map +0 -0
  453. package/dist/tools/getWalletBalance.d.ts +103 -68
  454. package/dist/tools/getWalletBalance.d.ts.map +1 -1
  455. package/dist/tools/getWalletBalance.js +127 -87
  456. package/dist/tools/getWalletBalance.js.map +1 -1
  457. package/dist/tools/publishRiskScore.d.ts +85 -63
  458. package/dist/tools/publishRiskScore.d.ts.map +1 -1
  459. package/dist/tools/publishRiskScore.js +136 -88
  460. package/dist/tools/publishRiskScore.js.map +1 -1
  461. package/dist/tools/queryGoldsky.d.ts +20 -0
  462. package/dist/tools/queryGoldsky.d.ts.map +1 -0
  463. package/dist/tools/queryGoldsky.js +29 -0
  464. package/dist/tools/queryGoldsky.js.map +1 -0
  465. package/dist/tools/queryRiskRegistry.d.ts +38 -38
  466. package/dist/tools/queryRiskRegistry.d.ts.map +1 -1
  467. package/dist/tools/queryRiskRegistry.js +59 -55
  468. package/dist/tools/queryRiskRegistry.js.map +1 -1
  469. package/dist/tools/safehandsPreflightCheck.d.ts +92 -77
  470. package/dist/tools/safehandsPreflightCheck.d.ts.map +1 -1
  471. package/dist/tools/safehandsPreflightCheck.js +174 -47
  472. package/dist/tools/safehandsPreflightCheck.js.map +1 -1
  473. package/dist/tools/safehandsRiskReport.d.ts +96 -81
  474. package/dist/tools/safehandsRiskReport.d.ts.map +1 -1
  475. package/dist/tools/safehandsRiskReport.js +48 -28
  476. package/dist/tools/safehandsRiskReport.js.map +1 -1
  477. package/dist/tools/safehandsSafeExecute.d.ts +20 -20
  478. package/dist/tools/safehandsSafeExecute.d.ts.map +1 -1
  479. package/dist/tools/safehandsSafeExecute.js +164 -81
  480. package/dist/tools/safehandsSafeExecute.js.map +1 -1
  481. package/dist/tools/safehandsWalletHealth.d.ts +28 -14
  482. package/dist/tools/safehandsWalletHealth.d.ts.map +1 -1
  483. package/dist/tools/safehandsWalletHealth.js +145 -103
  484. package/dist/tools/safehandsWalletHealth.js.map +1 -1
  485. package/dist/tools/safehandsX402Preflight.d.ts +26 -26
  486. package/dist/tools/safehandsX402Preflight.d.ts.map +1 -1
  487. package/dist/tools/safehandsX402Preflight.js +86 -65
  488. package/dist/tools/safehandsX402Preflight.js.map +1 -1
  489. package/dist/tools/sendPayment.d.ts +63 -57
  490. package/dist/tools/sendPayment.d.ts.map +1 -1
  491. package/dist/tools/sendPayment.js +144 -117
  492. package/dist/tools/sendPayment.js.map +1 -1
  493. package/dist/tools/setAgentPolicy.d.ts +75 -0
  494. package/dist/tools/setAgentPolicy.d.ts.map +1 -0
  495. package/dist/tools/setAgentPolicy.js +80 -0
  496. package/dist/tools/setAgentPolicy.js.map +1 -0
  497. package/dist/tools/simulateTransaction.d.ts +64 -60
  498. package/dist/tools/simulateTransaction.d.ts.map +1 -1
  499. package/dist/tools/simulateTransaction.js +116 -83
  500. package/dist/tools/simulateTransaction.js.map +1 -1
  501. package/dist/tools/tokenRegistryStatus.d.ts +46 -26
  502. package/dist/tools/tokenRegistryStatus.d.ts.map +1 -1
  503. package/dist/tools/tokenRegistryStatus.js +126 -96
  504. package/dist/tools/tokenRegistryStatus.js.map +1 -1
  505. package/dist/tools/verifyRiskInclusion.d.ts +59 -0
  506. package/dist/tools/verifyRiskInclusion.d.ts.map +1 -0
  507. package/dist/tools/verifyRiskInclusion.js +40 -0
  508. package/dist/tools/verifyRiskInclusion.js.map +1 -0
  509. package/dist/tools/x402PayAndFetch.d.ts +87 -81
  510. package/dist/tools/x402PayAndFetch.d.ts.map +1 -1
  511. package/dist/tools/x402PayAndFetch.js +295 -152
  512. package/dist/tools/x402PayAndFetch.js.map +1 -1
  513. package/dist/worker.d.ts +3 -0
  514. package/dist/worker.d.ts.map +1 -0
  515. package/dist/worker.js +39 -0
  516. package/dist/worker.js.map +1 -0
  517. package/dist/x402Server.d.ts +1 -1
  518. package/dist/x402Server.d.ts.map +1 -1
  519. package/dist/x402Server.js +409 -252
  520. package/dist/x402Server.js.map +1 -1
  521. package/docs/REVIEWER_QUICKSTART.md +113 -0
  522. package/docs/SAFEHANDS_REVIEWER_DEMO_SCRIPT.md +228 -0
  523. package/package.json +130 -83
  524. package/contracts/RiskRegistry.json +0 -223
  525. package/contracts/RiskRegistry.sol +0 -58
  526. package/dist/lib/testDodoLive.d.ts +0 -2
  527. package/dist/lib/testDodoLive.d.ts.map +0 -1
  528. package/dist/lib/testDodoLive.js +0 -105
  529. package/dist/lib/testDodoLive.js.map +0 -1
  530. package/dist/lib/testLiveSafehands.d.ts +0 -2
  531. package/dist/lib/testLiveSafehands.d.ts.map +0 -1
  532. package/dist/lib/testLiveSafehands.js +0 -93
  533. package/dist/lib/testLiveSafehands.js.map +0 -1
  534. package/dist/lib/testRpc.d.ts +0 -2
  535. package/dist/lib/testRpc.d.ts.map +0 -1
  536. package/dist/lib/testRpc.js +0 -30
  537. package/dist/lib/testRpc.js.map +0 -1
  538. package/dist/lib/testRpcLive.d.ts +0 -2
  539. package/dist/lib/testRpcLive.d.ts.map +0 -1
  540. package/dist/lib/testRpcLive.js +0 -89
  541. package/dist/lib/testRpcLive.js.map +0 -1
  542. package/dist/lib/testTools.d.ts +0 -2
  543. package/dist/lib/testTools.d.ts.map +0 -1
  544. package/dist/lib/testTools.js +0 -398
  545. package/dist/lib/testTools.js.map +0 -1
  546. package/dist/lib/testX402Live.d.ts +0 -2
  547. package/dist/lib/testX402Live.d.ts.map +0 -1
  548. package/dist/lib/testX402Live.js +0 -160
  549. package/dist/lib/testX402Live.js.map +0 -1
  550. package/dist/scripts/checkDeploy.d.ts +0 -2
  551. package/dist/scripts/checkDeploy.d.ts.map +0 -1
  552. package/dist/scripts/checkDeploy.js +0 -25
  553. package/dist/scripts/checkDeploy.js.map +0 -1
  554. package/dist/scripts/deployRegistry.d.ts +0 -2
  555. package/dist/scripts/deployRegistry.d.ts.map +0 -1
  556. package/dist/scripts/deployRegistry.js +0 -101
  557. package/dist/scripts/deployRegistry.js.map +0 -1
  558. package/dist/scripts/testRegistry.d.ts +0 -2
  559. package/dist/scripts/testRegistry.d.ts.map +0 -1
  560. package/dist/scripts/testRegistry.js +0 -44
  561. package/dist/scripts/testRegistry.js.map +0 -1
  562. package/examples/dashboard/index.html +0 -337
  563. package/examples/pharos-skill-engine/SKILL.safehands.md +0 -85
  564. package/examples/pharos-skill-engine/assets/safehands/example-actions.json +0 -49
  565. package/examples/pharos-skill-engine/assets/safehands/policy-defaults.json +0 -11
  566. package/examples/pharos-skill-engine/references/safehands.md +0 -345
  567. package/examples/scenario-hack.ts +0 -38
  568. package/skill/SKILL.md +0 -133
  569. package/skill/assets/safehands/example-actions.json +0 -49
  570. package/skill/assets/safehands/policy-defaults.json +0 -11
  571. package/skill/references/safehands.md +0 -345
@@ -1,142 +1,290 @@
1
- // ─── Tool: execute_swap ────────────────────────────────────────────────
2
- import { z } from "zod";
3
- import { publicClient, createPharosWalletClientFromAccount, getExplorerUrl } from "../lib/pharosClient.js";
4
- import { getDodoRoute, isNativeToken, resolveTokenAddress, resolveTokenDecimals, toWei } from "../lib/dodoApi.js";
5
- import { assessRisk } from "../lib/riskEngine.js";
6
- import { fail, ok, classifyExternalError } from "../lib/toolResponse.js";
7
- import { DODO_APPROVE_ADDRESS, ERC20_ABI, RISK_BLOCK_THRESHOLD, MAX_TX_AMOUNT_PHRS, CHAIN_ID, PHAROS_ENVIRONMENT } from "../lib/constants.js";
8
- import { getSigner, isSignerFailure } from "../lib/signer/index.js";
9
- import { evaluateActionPolicy } from "../lib/policy/actionPolicyEngine.js";
10
- import { checkDailyLimit, recordSpend, estimateUsd } from "../lib/spendAccumulator.js";
11
- export const executeSwapSchema = z.object({
12
- tokenIn: z.string(),
13
- tokenOut: z.string(),
14
- amountIn: z.string(),
15
- slippageTolerance: z.number().optional().default(3.225),
16
- agentId: z.string().optional().describe("Managed testnet wallet agentId when WALLET_MODE=managed-testnet"),
17
- });
18
- export const executeSwapTool = {
19
- name: "execute_swap",
20
- description: "Swap tokens via FaroSwap with built-in risk gate. Runs risk assessment first, blocks if score > 80.",
21
- inputSchema: executeSwapSchema,
22
- };
23
- export async function handleExecuteSwap(raw) {
24
- if (process.env.WRITE_TOOLS_ENABLED !== "true") {
25
- return fail("WRITE_TOOLS_DISABLED", "execute_swap is disabled by default. Set WRITE_TOOLS_ENABLED=true only for trusted testnet execution.", false, "execute_swap");
26
- }
27
- const input = executeSwapSchema.parse(raw);
28
- const signer = await getSigner(input.agentId);
29
- if (isSignerFailure(signer)) {
30
- return fail(signer.error.code, signer.error.message, false, "execute_swap");
31
- }
32
- const walletAddress = signer.address;
33
- const policy = evaluateActionPolicy({
34
- actionType: "execute_swap",
35
- amount: input.amountIn,
36
- amountUnit: "TOKEN",
37
- tokenIn: input.tokenIn,
38
- tokenOut: input.tokenOut,
39
- chainId: CHAIN_ID,
40
- environment: PHAROS_ENVIRONMENT,
41
- isMainnet: false,
42
- signerAvailable: true,
43
- requiresSigner: true,
44
- });
45
- if (policy.decision === "BLOCK") {
46
- return fail("POLICY_BLOCKED", policy.reasons.join(" ") || "Swap blocked by SafeHands policy.", false, "execute_swap");
47
- }
48
- if (Number(input.amountIn) > Number(MAX_TX_AMOUNT_PHRS) && input.tokenIn.toUpperCase() === "PHRS") {
49
- return fail("TX_LIMIT_EXCEEDED", `Swap amount exceeds configured testnet limit (${MAX_TX_AMOUNT_PHRS}).`, false, "execute_swap");
50
- }
51
- const amountUsd = estimateUsd(input.amountIn, input.tokenIn);
52
- const dailyCheck = checkDailyLimit(walletAddress, amountUsd);
53
- if (!dailyCheck.allowed) {
54
- return fail("DAILY_SPEND_LIMIT_EXCEEDED", `Daily spend limit reached. Spent $${dailyCheck.currentUsd.toFixed(2)} of $${dailyCheck.limitUsd.toFixed(2)} USD today. Remaining: $${dailyCheck.remainingUsd.toFixed(2)}. Resets at UTC midnight.`, false, "execute_swap");
55
- }
56
- const risk = await assessRisk({
57
- action: "swap",
58
- tokenIn: input.tokenIn,
59
- tokenOut: input.tokenOut,
60
- amount: input.amountIn,
61
- walletAddress,
62
- });
63
- if (risk.riskScore > RISK_BLOCK_THRESHOLD) {
64
- return fail("POLICY_BLOCKED", `Swap blocked risk score ${risk.riskScore}/100: ${risk.suggestion}`, false, "execute_swap");
65
- }
66
- try {
67
- const quote = await getDodoRoute({
68
- fromToken: input.tokenIn,
69
- toToken: input.tokenOut,
70
- amountHuman: input.amountIn,
71
- walletAddress,
72
- slippage: input.slippageTolerance,
73
- });
74
- if (!quote.routeAvailable) {
75
- return fail("NO_ROUTE_AVAILABLE", "No swap route available — insufficient liquidity", true, "dodo_api");
76
- }
77
- const wallet = createPharosWalletClientFromAccount(signer.account);
78
- if (!isNativeToken(input.tokenIn)) {
79
- const tokenAddr = resolveTokenAddress(input.tokenIn);
80
- const decimals = resolveTokenDecimals(input.tokenIn);
81
- const amountWei = BigInt(toWei(input.amountIn, decimals));
82
- const allowance = (await publicClient.readContract({
83
- address: tokenAddr,
84
- abi: ERC20_ABI,
85
- functionName: "allowance",
86
- args: [walletAddress, DODO_APPROVE_ADDRESS],
87
- }));
88
- if (allowance < amountWei) {
89
- const approvalPolicy = evaluateActionPolicy({
90
- actionType: "approve_token",
91
- approvalAmount: input.amountIn,
92
- spender: DODO_APPROVE_ADDRESS,
93
- spenderVerified: true,
94
- chainId: CHAIN_ID,
95
- environment: PHAROS_ENVIRONMENT,
96
- isMainnet: false,
97
- signerAvailable: true,
98
- requiresSigner: true,
99
- });
100
- if (approvalPolicy.decision === "BLOCK") {
101
- return fail("POLICY_BLOCKED", `Swap approval blocked: ${approvalPolicy.reasons.join(" ")}`, false, "execute_swap");
102
- }
103
- const approveHash = await wallet.writeContract({
104
- address: tokenAddr,
105
- abi: ERC20_ABI,
106
- functionName: "approve",
107
- args: [DODO_APPROVE_ADDRESS, amountWei],
108
- });
109
- await publicClient.waitForTransactionReceipt({ hash: approveHash });
110
- }
111
- }
112
- const txHash = await wallet.sendTransaction({
113
- to: quote.to,
114
- value: BigInt(quote.value),
115
- data: quote.calldata,
116
- gas: BigInt(quote.gasLimit),
117
- });
118
- const receipt = await publicClient.waitForTransactionReceipt({ hash: txHash });
119
- if (receipt.status !== "success") {
120
- return fail("TX_REVERTED", "execute_swap transaction was mined but reverted on-chain.", false, "execute_swap");
121
- }
122
- recordSpend(walletAddress, amountUsd);
123
- return ok({
124
- txHash,
125
- explorerUrl: getExplorerUrl(txHash),
126
- amountOut: quote.amountOut,
127
- usedFromToken: quote.usedFromToken,
128
- usedToToken: quote.usedToToken,
129
- wasSubstituted: quote.wasSubstituted,
130
- signerMode: signer.mode,
131
- walletAddress,
132
- gasUsed: receipt.gasUsed.toString(),
133
- policy,
134
- riskAssessment: { riskScore: risk.riskScore, wasBlocked: false },
135
- source: "execute_swap",
136
- });
137
- }
138
- catch (err) {
139
- return classifyExternalError("pharos_rpc", err);
140
- }
141
- }
1
+ // ─── Tool: execute_swap ────────────────────────────────────────────────
2
+ import { z } from "zod";
3
+ import { isAddress } from "viem";
4
+ import { publicClient, createPharosWalletClientFromAccount, getExplorerUrl } from "../lib/pharosClient.js";
5
+ import { getDodoRoute, isNativeToken, resolveTokenAddress, resolveTokenDecimals, toWei, DodoNotConfiguredError } from "../lib/dodoApi.js";
6
+ import { getOkxSwapQuote, OkxNotConfiguredError, OkxCredentialsMissingError } from "../lib/okxDexApi.js";
7
+ import { addressTrustEvidence } from "../lib/ecosystemRegistry.js";
8
+ import { assessRisk } from "../lib/riskEngine.js";
9
+ import { fail, ok, classifyExternalError } from "../lib/toolResponse.js";
10
+ import { ERC20_ABI, MAX_SLIPPAGE_PCT, MAX_TX_AMOUNT_PROS, CHAIN_ID, PHAROS_ENVIRONMENT, IS_MAINNET, isAllowedDodoRouter, isAllowedDodoSpender, activeDodoRouterAllowlist, activeDodoSpenderAllowlist, isAllowedOkxRouter, isAllowedOkxSpender, activeOkxRouterAllowlist, activeOkxSpenderAllowlist } from "../lib/constants.js";
11
+ import { requireManagedExecutionReady, isManagedExecutionFailure } from "../lib/managedExecution.js";
12
+ import { evaluateActionPolicy, riskEvidenceFromAssessment } from "../lib/policy/actionPolicyEngine.js";
13
+ import { enforceWriteDecision } from "../lib/policy/writeExecutionGate.js";
14
+ import { evaluateTokenSecurityGate } from "./checkTokenSecurity.js";
15
+ import { checkDailyLimit, reserveDailyLimit, releaseReservation, estimateUsd } from "../lib/spendAccumulator.js";
16
+ import { validatePositiveAmount } from "../lib/validation.js";
17
+ export const executeSwapSchema = z.object({
18
+ tokenIn: z.string(),
19
+ tokenOut: z.string(),
20
+ amountIn: z.string(),
21
+ slippageTolerance: z.number().optional().describe("Override auto slippage. Default: 3 (Auto mode adjusts to 0.5 for major, 0.1 for stablecoins)"),
22
+ venue: z.enum(["dodo", "okx"]).optional().default("dodo").describe("Swap route venue. dodo (default): FaroSwap/DODO route API. okx: OKX DEX aggregator (registry-verified router/spender; requires OKX_API_KEY, OKX_API_SECRET, and OKX_API_PASSPHRASE, otherwise fails closed)."),
23
+ agentId: z.string().optional().describe("Managed wallet agentId when WALLET_MODE=managed-mainnet"),
24
+ confirm: z.boolean().optional().default(false).describe("Explicit acknowledgement to proceed when SafeHands returns REQUIRE_CONFIRMATION / REQUIRE_TOKEN_REVIEW. Hard BLOCK / honeypot / over-limit / unpriceable input token / missing token-security intel are never overridable."),
25
+ }).strict();
26
+ /**
27
+ * Hard, non-confirmable quote guards. An unfavorable price is embedded in
28
+ * the quote ITSELF — minReturn/slippage only protect against movement AFTER
29
+ * quoting — so a quote whose priceImpact exceeds the ceiling must hard-stop
30
+ * here, before any signing. The ceiling is the caller's slippageTolerance or
31
+ * MAX_SLIPPAGE_PCT, whichever is larger. Pure + exported for offline tests.
32
+ */
33
+ export function evaluateSwapQuoteGuards(quote, slippageTolerance) {
34
+ const ceilingPct = Math.max(slippageTolerance ?? 0, MAX_SLIPPAGE_PCT);
35
+ const impact = Math.abs(quote.priceImpact);
36
+ if (!Number.isFinite(impact) || impact > ceilingPct) {
37
+ return {
38
+ code: "PRICE_IMPACT_TOO_HIGH",
39
+ message: `Swap blocked: quoted price impact ${Number.isFinite(impact) ? impact.toFixed(2) : "unknown"}% exceeds the ${ceilingPct}% ceiling (max of slippageTolerance and MAX_SLIPPAGE_PCT ${MAX_SLIPPAGE_PCT}%). The unfavorable price is in the quote itself, so slippage protection cannot mitigate it; this is a hard stop and is never confirmable. Reduce the trade size or use a deeper route.`,
40
+ };
41
+ }
42
+ const amountOut = Number.parseFloat(quote.amountOut);
43
+ if (!Number.isFinite(amountOut) || amountOut <= 0) {
44
+ return {
45
+ code: "INVALID_QUOTE_AMOUNT_OUT",
46
+ message: `Swap blocked: the venue quote returned a non-positive amountOut (${quote.amountOut}). Broadcasting would spend tokenIn for nothing; this is a hard stop and is never confirmable.`,
47
+ };
48
+ }
49
+ return null;
50
+ }
51
+ /**
52
+ * Simulate the exact swap call via eth_call and return the revert reason,
53
+ * or null when the call succeeds. The final broadcast passes an explicit
54
+ * `gas: quote.gasLimit`, which bypasses viem's implicit estimateGas revert
55
+ * check — without this a reverting route would burn gas on-chain. Takes the
56
+ * client structurally so it is unit-testable offline.
57
+ */
58
+ export async function simulateSwapCalldata(client, args) {
59
+ try {
60
+ await client.call(args);
61
+ return null;
62
+ }
63
+ catch (err) {
64
+ return err instanceof Error ? err.message : String(err);
65
+ }
66
+ }
67
+ export const executeSwapTool = {
68
+ name: "execute_swap",
69
+ description: "Swap tokens via FaroSwap/DODO (default) or the OKX DEX aggregator (venue: okx). Runs a risk assessment first and feeds it as evidence to the SafeHands policy engine, the sole ALLOW/BLOCK/REQUIRE_CONFIRMATION decider (a risk score above the block threshold fails its risk_score check and blocks, never confirmable). Gated by WRITE_TOOLS_ENABLED.",
70
+ inputSchema: executeSwapSchema,
71
+ };
72
+ export async function handleExecuteSwap(raw) {
73
+ let input;
74
+ try {
75
+ input = executeSwapSchema.parse(raw);
76
+ }
77
+ catch (err) {
78
+ const msg = err instanceof z.ZodError
79
+ ? err.issues.map((i) => `${i.path.join(".")}: ${i.message}`).join("; ")
80
+ : String(err);
81
+ return fail("VALIDATION_ERROR", `execute_swap input validation failed: ${msg}`, false, "execute_swap");
82
+ }
83
+ const amtErr = validatePositiveAmount(input.amountIn, "amountIn");
84
+ if (amtErr)
85
+ return fail("VALIDATION_ERROR", amtErr, false, "execute_swap");
86
+ const gate = await requireManagedExecutionReady("execute_swap", input.agentId);
87
+ if (isManagedExecutionFailure(gate))
88
+ return gate;
89
+ const { signer } = gate;
90
+ const walletAddress = signer.address;
91
+ // Consult token-security (GoPlus honeypot/tax) on the token being acquired.
92
+ // Honeypot / extreme-tax → hard block; reviewed-and-flagged → "unknown" →
93
+ // REQUIRE_TOKEN_REVIEW (confirmable after review); intel MISSING (outage /
94
+ // unindexed, non-registry) → "unavailable" → the write gate fails closed.
95
+ let tokenSecurityStatus;
96
+ if (!isNativeToken(input.tokenOut)) {
97
+ let outAddr;
98
+ try {
99
+ outAddr = isAddress(input.tokenOut) ? input.tokenOut : resolveTokenAddress(input.tokenOut);
100
+ }
101
+ catch {
102
+ outAddr = input.tokenOut;
103
+ }
104
+ const sec = await evaluateTokenSecurityGate(outAddr);
105
+ if (sec.verdict === "block") {
106
+ return fail("TOKEN_SECURITY_BLOCKED", `Swap blocked: ${sec.detail ?? "token failed security review"} ${sec.flags.join("; ")}`.trim(), false, "execute_swap");
107
+ }
108
+ tokenSecurityStatus = sec.policyStatus;
109
+ }
110
+ if (Number(input.amountIn) > Number(MAX_TX_AMOUNT_PROS) && input.tokenIn.toUpperCase() === "PROS") {
111
+ return fail("TX_LIMIT_EXCEEDED", `Swap amount exceeds the operator ceiling MAX_TX_AMOUNT_PROS (${MAX_TX_AMOUNT_PROS} PROS), which bounds all agent policies. Raise MAX_TX_AMOUNT_PROS to allow larger mainnet swaps.`, false, "execute_swap");
112
+ }
113
+ const amountUsd = estimateUsd(input.amountIn, input.tokenIn);
114
+ const dailyCheck = checkDailyLimit(walletAddress, amountUsd);
115
+ if (!dailyCheck.allowed) {
116
+ return fail("DAILY_SPEND_LIMIT_EXCEEDED", `Daily spend limit reached. Spent $${dailyCheck.currentUsd.toFixed(2)} of $${dailyCheck.limitUsd.toFixed(2)} USD today. Remaining: $${dailyCheck.remainingUsd.toFixed(2)}. Resets at UTC midnight.`, false, "execute_swap");
117
+ }
118
+ const risk = await assessRisk({
119
+ action: "swap",
120
+ tokenIn: input.tokenIn,
121
+ tokenOut: input.tokenOut,
122
+ amount: input.amountIn,
123
+ walletAddress,
124
+ });
125
+ // Sole decision point: ONE policy evaluation over all collected evidence,
126
+ // including the advisory risk assessment. Never gate on riskEngine output
127
+ // directly — the policy engine's risk_* checks do that (never-weaken parity
128
+ // with the former direct gates; requireRiskEvidence makes a wiring miss fail
129
+ // closed instead of silently losing the risk gates).
130
+ // The unpriceable-input guard lives here too: an unpriceable input token escaped the USD caps read
131
+ // by checkDailyLimit above, and swap_notional_unpriceable → BLOCK (never
132
+ // confirmable) stops it before any quote is fetched or budget is reserved.
133
+ const policy = evaluateActionPolicy({
134
+ actionType: "execute_swap",
135
+ agentId: input.agentId,
136
+ amount: input.amountIn,
137
+ amountUnit: "TOKEN",
138
+ tokenIn: input.tokenIn,
139
+ tokenOut: input.tokenOut,
140
+ tokenSecurityStatus,
141
+ chainId: CHAIN_ID,
142
+ environment: PHAROS_ENVIRONMENT,
143
+ isMainnet: IS_MAINNET,
144
+ signerAvailable: true,
145
+ requiresSigner: true,
146
+ risk: riskEvidenceFromAssessment(risk),
147
+ });
148
+ const swapGate = enforceWriteDecision(policy, { confirmed: input.confirm === true, toolName: "execute_swap", requireRiskEvidence: true });
149
+ if (swapGate)
150
+ return swapGate;
151
+ const venue = input.venue;
152
+ const venueSource = venue === "okx" ? "okx_dex_api" : "dodo_api";
153
+ let reserved = false;
154
+ try {
155
+ const quoteParams = {
156
+ fromToken: input.tokenIn,
157
+ toToken: input.tokenOut,
158
+ amountHuman: input.amountIn,
159
+ walletAddress,
160
+ slippage: input.slippageTolerance,
161
+ };
162
+ const quote = venue === "okx" ? await getOkxSwapQuote(quoteParams) : await getDodoRoute(quoteParams);
163
+ if (!quote.routeAvailable) {
164
+ return fail("NO_ROUTE_AVAILABLE", "No swap route available: insufficient liquidity", true, venueSource);
165
+ }
166
+ const quoteGuard = evaluateSwapQuoteGuards(quote, input.slippageTolerance);
167
+ if (quoteGuard) {
168
+ return fail(quoteGuard.code, quoteGuard.message, false, "execute_swap");
169
+ }
170
+ // Containment, not trust: the quote's router/spender must be inside the
171
+ // venue's allowlist. Trust evidence still comes only from the registry
172
+ // (addressTrustEvidence below).
173
+ const routerAllowed = venue === "okx" ? isAllowedOkxRouter(quote.to) : isAllowedDodoRouter(quote.to);
174
+ if (!isAddress(quote.to) || !routerAllowed) {
175
+ return venue === "okx"
176
+ ? fail("UNTRUSTED_OKX_ROUTER", `OKX quote returned untrusted router/tx target ${quote.to}. Configure OKX_ROUTER_ALLOWLIST/SAFEHANDS_OKX_ROUTER_ALLOWLIST with a verified router before enabling mainnet swap execution. Current allowlist: ${activeOkxRouterAllowlist().join(",") || "empty"}`, false, "execute_swap")
177
+ : fail("UNTRUSTED_DODO_ROUTER", `DODO quote returned untrusted router/tx target ${quote.to}. Configure DODO_ROUTER_ALLOWLIST/SAFEHANDS_DODO_ROUTER_ALLOWLIST with a verified router before enabling mainnet swap execution. Current allowlist: ${activeDodoRouterAllowlist().join(",") || "empty"}`, false, "execute_swap");
178
+ }
179
+ const spenderAllowed = venue === "okx" ? isAllowedOkxSpender(quote.approveAddress) : isAllowedDodoSpender(quote.approveAddress);
180
+ if (!isNativeToken(input.tokenIn) && (!isAddress(quote.approveAddress) || !spenderAllowed)) {
181
+ return venue === "okx"
182
+ ? fail("UNTRUSTED_OKX_SPENDER", `OKX quote returned untrusted approval target ${quote.approveAddress}. Configure OKX_SPENDER_ALLOWLIST/SAFEHANDS_OKX_SPENDER_ALLOWLIST with a verified approve contract before enabling mainnet token swaps. Current allowlist: ${activeOkxSpenderAllowlist().join(",") || "empty"}`, false, "execute_swap")
183
+ : fail("UNTRUSTED_DODO_SPENDER", `DODO quote returned untrusted approval target ${quote.approveAddress}. Configure DODO_SPENDER_ALLOWLIST/SAFEHANDS_DODO_SPENDER_ALLOWLIST with a verified approve proxy before enabling mainnet token swaps. Current allowlist: ${activeDodoSpenderAllowlist().join(",") || "empty"}`, false, "execute_swap");
184
+ }
185
+ const wallet = createPharosWalletClientFromAccount(signer.account);
186
+ if (!isNativeToken(input.tokenIn)) {
187
+ const tokenAddr = resolveTokenAddress(input.tokenIn);
188
+ const decimals = resolveTokenDecimals(input.tokenIn);
189
+ const amountWei = BigInt(toWei(input.amountIn, decimals));
190
+ const approveAddress = quote.approveAddress;
191
+ const allowance = (await publicClient.readContract({
192
+ address: tokenAddr,
193
+ abi: ERC20_ABI,
194
+ functionName: "allowance",
195
+ args: [walletAddress, approveAddress],
196
+ }));
197
+ if (allowance < amountWei) {
198
+ // spenderVerified comes ONLY from registry evidence. Allowlist membership
199
+ // (checked above) is containment, not verification — asserting it as
200
+ // "verified" fabricated a trust claim for a testnet-provenance address.
201
+ const spenderEvidence = addressTrustEvidence(approveAddress, CHAIN_ID);
202
+ const approvalPolicy = evaluateActionPolicy({
203
+ actionType: "approve_token",
204
+ agentId: input.agentId,
205
+ approvalAmount: input.amountIn,
206
+ spender: approveAddress,
207
+ spenderVerified: spenderEvidence.verifiedCanonical ? true : undefined,
208
+ chainId: CHAIN_ID,
209
+ environment: PHAROS_ENVIRONMENT,
210
+ isMainnet: IS_MAINNET,
211
+ signerAvailable: true,
212
+ requiresSigner: true,
213
+ });
214
+ const approvalGate = enforceWriteDecision(approvalPolicy, { confirmed: input.confirm === true, toolName: "execute_swap" });
215
+ if (approvalGate)
216
+ return approvalGate;
217
+ const approveHash = await wallet.writeContract({
218
+ address: tokenAddr,
219
+ abi: ERC20_ABI,
220
+ functionName: "approve",
221
+ args: [approveAddress, amountWei],
222
+ });
223
+ await publicClient.waitForTransactionReceipt({ hash: approveHash });
224
+ }
225
+ }
226
+ // Pre-broadcast simulation of the exact calldata (after the approval
227
+ // above so the allowance is visible to eth_call). A reverting route fails
228
+ // here for free instead of burning gas on-chain.
229
+ const simulationError = await simulateSwapCalldata(publicClient, {
230
+ account: signer.account,
231
+ to: quote.to,
232
+ value: BigInt(quote.value),
233
+ data: quote.calldata,
234
+ });
235
+ if (simulationError !== null) {
236
+ return fail("SWAP_SIMULATION_REVERTED", `Pre-broadcast simulation of the swap calldata reverted; broadcasting would only burn gas. ${simulationError}`, true, "execute_swap");
237
+ }
238
+ // Atomically reserve the daily-spend budget immediately before the swap
239
+ // broadcast (no await between reserve and send). Released below on revert/error.
240
+ const reservation = reserveDailyLimit(walletAddress, amountUsd);
241
+ if (!reservation.allowed) {
242
+ return fail("DAILY_SPEND_LIMIT_EXCEEDED", `Daily spend limit reached. Spent $${reservation.currentUsd.toFixed(2)} of $${reservation.limitUsd.toFixed(2)} USD today. Remaining: $${reservation.remainingUsd.toFixed(2)}. Resets at UTC midnight.`, false, "execute_swap");
243
+ }
244
+ reserved = amountUsd > 0;
245
+ const txHash = await wallet.sendTransaction({
246
+ to: quote.to,
247
+ value: BigInt(quote.value),
248
+ data: quote.calldata,
249
+ gas: BigInt(quote.gasLimit),
250
+ });
251
+ const receipt = await publicClient.waitForTransactionReceipt({ hash: txHash });
252
+ if (receipt.status !== "success") {
253
+ releaseReservation(walletAddress, amountUsd);
254
+ return fail("TX_REVERTED", "execute_swap transaction was mined but reverted on-chain.", false, "execute_swap");
255
+ }
256
+ return ok({
257
+ txHash,
258
+ explorerUrl: getExplorerUrl(txHash),
259
+ venue,
260
+ amountOut: quote.amountOut,
261
+ usedFromToken: quote.usedFromToken,
262
+ usedToToken: quote.usedToToken,
263
+ wasSubstituted: quote.wasSubstituted,
264
+ signerMode: signer.mode,
265
+ walletAddress,
266
+ gasUsed: receipt.gasUsed.toString(),
267
+ policy,
268
+ riskAssessment: { riskScore: risk.riskScore, wasBlocked: false },
269
+ source: "execute_swap",
270
+ });
271
+ }
272
+ catch (err) {
273
+ // Release the daily-spend reservation on a thrown broadcast/receipt error so a
274
+ // swap that never landed does not permanently consume the cap (parity with
275
+ // send_payment; the revert path above already releases).
276
+ if (reserved)
277
+ releaseReservation(walletAddress, amountUsd);
278
+ if (err instanceof DodoNotConfiguredError) {
279
+ return fail("SWAP_LIQUIDITY_NOT_CONFIGURED", err.message, false, "dodo_api");
280
+ }
281
+ if (err instanceof OkxNotConfiguredError) {
282
+ return fail("SWAP_LIQUIDITY_NOT_CONFIGURED", err.message, false, "okx_dex_api");
283
+ }
284
+ if (err instanceof OkxCredentialsMissingError) {
285
+ return fail("OKX_API_CREDENTIALS_MISSING", err.message, false, "okx_dex_api");
286
+ }
287
+ return classifyExternalError("pharos_rpc", err);
288
+ }
289
+ }
142
290
  //# sourceMappingURL=executeSwap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"executeSwap.js","sourceRoot":"","sources":["../../src/tools/executeSwap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"executeSwap.js","sourceRoot":"","sources":["../../src/tools/executeSwap.ts"],"names":[],"mappings":"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"}
@@ -1,30 +1,30 @@
1
- import { z } from "zod";
2
- import { type ToolResponse } from "../lib/toolResponse.js";
3
- export declare const explainRiskSchema: z.ZodObject<{
4
- decision: z.ZodEnum<["ALLOW", "WARN", "BLOCK", "REQUIRE_CONFIRMATION", "REQUIRE_FUNDING", "REQUIRE_TOKEN_REVIEW"]>;
5
- riskLevel: z.ZodEnum<["LOW", "MEDIUM", "HIGH", "CRITICAL", "UNKNOWN"]>;
6
- reasons: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
7
- requiredActions: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
8
- environment: z.ZodDefault<z.ZodOptional<z.ZodString>>;
9
- chainId: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
10
- isMainnet: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
11
- }, "strip", z.ZodTypeAny, {
12
- riskLevel: "LOW" | "MEDIUM" | "HIGH" | "CRITICAL" | "UNKNOWN";
13
- environment: string;
14
- chainId: number;
15
- isMainnet: boolean;
16
- decision: "ALLOW" | "WARN" | "BLOCK" | "REQUIRE_CONFIRMATION" | "REQUIRE_FUNDING" | "REQUIRE_TOKEN_REVIEW";
17
- reasons: string[];
18
- requiredActions: string[];
19
- }, {
20
- riskLevel: "LOW" | "MEDIUM" | "HIGH" | "CRITICAL" | "UNKNOWN";
21
- decision: "ALLOW" | "WARN" | "BLOCK" | "REQUIRE_CONFIRMATION" | "REQUIRE_FUNDING" | "REQUIRE_TOKEN_REVIEW";
22
- environment?: string | undefined;
23
- chainId?: number | undefined;
24
- isMainnet?: boolean | undefined;
25
- reasons?: string[] | undefined;
26
- requiredActions?: string[] | undefined;
27
- }>;
28
- export type ExplainRiskInput = z.input<typeof explainRiskSchema>;
29
- export declare function handleExplainRisk(raw: ExplainRiskInput): Promise<ToolResponse<unknown>>;
1
+ import { z } from "zod";
2
+ import { type ToolResponse } from "../lib/toolResponse.js";
3
+ export declare const explainRiskSchema: z.ZodObject<{
4
+ decision: z.ZodEnum<["ALLOW", "WARN", "BLOCK", "REQUIRE_CONFIRMATION", "PREPARE_ONLY", "REQUIRE_FUNDING", "REQUIRE_TOKEN_REVIEW"]>;
5
+ riskLevel: z.ZodEnum<["LOW", "MEDIUM", "HIGH", "CRITICAL", "UNKNOWN"]>;
6
+ reasons: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
7
+ requiredActions: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
8
+ environment: z.ZodDefault<z.ZodOptional<z.ZodString>>;
9
+ chainId: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
10
+ isMainnet: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
11
+ }, "strip", z.ZodTypeAny, {
12
+ chainId: number;
13
+ reasons: string[];
14
+ riskLevel: "UNKNOWN" | "LOW" | "MEDIUM" | "HIGH" | "CRITICAL";
15
+ environment: string;
16
+ isMainnet: boolean;
17
+ decision: "ALLOW" | "WARN" | "BLOCK" | "REQUIRE_CONFIRMATION" | "REQUIRE_FUNDING" | "REQUIRE_TOKEN_REVIEW" | "PREPARE_ONLY";
18
+ requiredActions: string[];
19
+ }, {
20
+ riskLevel: "UNKNOWN" | "LOW" | "MEDIUM" | "HIGH" | "CRITICAL";
21
+ decision: "ALLOW" | "WARN" | "BLOCK" | "REQUIRE_CONFIRMATION" | "REQUIRE_FUNDING" | "REQUIRE_TOKEN_REVIEW" | "PREPARE_ONLY";
22
+ chainId?: number | undefined;
23
+ reasons?: string[] | undefined;
24
+ environment?: string | undefined;
25
+ isMainnet?: boolean | undefined;
26
+ requiredActions?: string[] | undefined;
27
+ }>;
28
+ export type ExplainRiskInput = z.input<typeof explainRiskSchema>;
29
+ export declare function handleExplainRisk(raw: ExplainRiskInput): Promise<ToolResponse<unknown>>;
30
30
  //# sourceMappingURL=explainRisk.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"explainRisk.d.ts","sourceRoot":"","sources":["../../src/tools/explainRisk.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAM,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAG/D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;EAQ5B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEjE,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAkB7F"}
1
+ {"version":3,"file":"explainRisk.d.ts","sourceRoot":"","sources":["../../src/tools/explainRisk.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAM,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAI/D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;EAQ5B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEjE,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAkB7F"}
@@ -1,33 +1,34 @@
1
- // ─── Tool: explain_risk ────────────────────────────────────────────────
2
- import { z } from "zod";
3
- import { ok } from "../lib/toolResponse.js";
4
- import { explainPolicyResult } from "../lib/policy/actionPolicyEngine.js";
5
- export const explainRiskSchema = z.object({
6
- decision: z.enum(["ALLOW", "WARN", "BLOCK", "REQUIRE_CONFIRMATION", "REQUIRE_FUNDING", "REQUIRE_TOKEN_REVIEW"]),
7
- riskLevel: z.enum(["LOW", "MEDIUM", "HIGH", "CRITICAL", "UNKNOWN"]),
8
- reasons: z.array(z.string()).optional().default([]),
9
- requiredActions: z.array(z.string()).optional().default([]),
10
- environment: z.string().optional().default("atlantic-testnet"),
11
- chainId: z.number().optional().default(688689),
12
- isMainnet: z.boolean().optional().default(false),
13
- });
14
- export async function handleExplainRisk(raw) {
15
- const input = explainRiskSchema.parse(raw);
16
- const result = {
17
- decision: input.decision,
18
- riskLevel: input.riskLevel,
19
- safeToExecute: input.decision === "ALLOW",
20
- reasons: input.reasons,
21
- requiredActions: input.requiredActions,
22
- checks: [],
23
- environment: input.environment,
24
- chainId: input.chainId,
25
- isMainnet: input.isMainnet,
26
- };
27
- return ok({
28
- explanation: explainPolicyResult(result),
29
- ...result,
30
- source: "explain_risk",
31
- });
32
- }
1
+ // ─── Tool: explain_risk ────────────────────────────────────────────────
2
+ import { z } from "zod";
3
+ import { ok } from "../lib/toolResponse.js";
4
+ import { explainPolicyResult } from "../lib/policy/actionPolicyEngine.js";
5
+ import { CHAIN_ID, PHAROS_ENVIRONMENT, IS_MAINNET } from "../lib/constants.js";
6
+ export const explainRiskSchema = z.object({
7
+ decision: z.enum(["ALLOW", "WARN", "BLOCK", "REQUIRE_CONFIRMATION", "PREPARE_ONLY", "REQUIRE_FUNDING", "REQUIRE_TOKEN_REVIEW"]),
8
+ riskLevel: z.enum(["LOW", "MEDIUM", "HIGH", "CRITICAL", "UNKNOWN"]),
9
+ reasons: z.array(z.string()).optional().default([]),
10
+ requiredActions: z.array(z.string()).optional().default([]),
11
+ environment: z.string().optional().default(PHAROS_ENVIRONMENT),
12
+ chainId: z.number().optional().default(CHAIN_ID),
13
+ isMainnet: z.boolean().optional().default(IS_MAINNET),
14
+ });
15
+ export async function handleExplainRisk(raw) {
16
+ const input = explainRiskSchema.parse(raw);
17
+ const result = {
18
+ decision: input.decision,
19
+ riskLevel: input.riskLevel,
20
+ safeToExecute: input.decision === "ALLOW",
21
+ reasons: input.reasons,
22
+ requiredActions: input.requiredActions,
23
+ checks: [],
24
+ environment: input.environment,
25
+ chainId: input.chainId,
26
+ isMainnet: input.isMainnet,
27
+ };
28
+ return ok({
29
+ explanation: explainPolicyResult(result),
30
+ ...result,
31
+ source: "explain_risk",
32
+ });
33
+ }
33
34
  //# sourceMappingURL=explainRisk.js.map