safehands-pharos 1.5.0 → 2.8.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 (566) hide show
  1. package/.agents/policies/default.json +15 -0
  2. package/.env.example +81 -64
  3. package/README.md +301 -444
  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 +1 -1
  105. package/dist/cli.d.ts.map +1 -1
  106. package/dist/cli.js +29 -1
  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 +0 -0
  113. package/dist/demo.d.ts.map +1 -1
  114. package/dist/demo.js +43 -8
  115. package/dist/demo.js.map +1 -1
  116. package/dist/handsafe.zip +0 -0
  117. package/dist/index.d.ts +0 -0
  118. package/dist/index.d.ts.map +0 -0
  119. package/dist/index.js +212 -135
  120. package/dist/index.js.map +1 -1
  121. package/dist/init.d.ts +0 -0
  122. package/dist/init.d.ts.map +1 -1
  123. package/dist/init.js +72 -10
  124. package/dist/init.js.map +1 -1
  125. package/dist/lib/analysis/abiWords.d.ts +17 -0
  126. package/dist/lib/analysis/abiWords.d.ts.map +1 -0
  127. package/dist/lib/analysis/abiWords.js +48 -0
  128. package/dist/lib/analysis/abiWords.js.map +1 -0
  129. package/dist/lib/analysis/approval.d.ts +29 -0
  130. package/dist/lib/analysis/approval.d.ts.map +1 -0
  131. package/dist/lib/analysis/approval.js +189 -0
  132. package/dist/lib/analysis/approval.js.map +1 -0
  133. package/dist/lib/analysis/calldata.d.ts +60 -0
  134. package/dist/lib/analysis/calldata.d.ts.map +1 -0
  135. package/dist/lib/analysis/calldata.js +464 -0
  136. package/dist/lib/analysis/calldata.js.map +1 -0
  137. package/dist/lib/analysis/contractIntel.d.ts +65 -0
  138. package/dist/lib/analysis/contractIntel.d.ts.map +1 -0
  139. package/dist/lib/analysis/contractIntel.js +320 -0
  140. package/dist/lib/analysis/contractIntel.js.map +1 -0
  141. package/dist/lib/analysis/evm.d.ts +42 -0
  142. package/dist/lib/analysis/evm.d.ts.map +1 -0
  143. package/dist/lib/analysis/evm.js +185 -0
  144. package/dist/lib/analysis/evm.js.map +1 -0
  145. package/dist/lib/analysis/gas.d.ts +4 -0
  146. package/dist/lib/analysis/gas.d.ts.map +1 -0
  147. package/dist/lib/analysis/gas.js +13 -0
  148. package/dist/lib/analysis/gas.js.map +1 -0
  149. package/dist/lib/analysis/index.d.ts +11 -0
  150. package/dist/lib/analysis/index.d.ts.map +1 -0
  151. package/dist/lib/analysis/index.js +16 -0
  152. package/dist/lib/analysis/index.js.map +1 -0
  153. package/dist/lib/analysis/pharosTokens.d.ts +31 -0
  154. package/dist/lib/analysis/pharosTokens.d.ts.map +1 -0
  155. package/dist/lib/analysis/pharosTokens.js +78 -0
  156. package/dist/lib/analysis/pharosTokens.js.map +1 -0
  157. package/dist/lib/analysis/safeTx.d.ts +27 -0
  158. package/dist/lib/analysis/safeTx.d.ts.map +1 -0
  159. package/dist/lib/analysis/safeTx.js +118 -0
  160. package/dist/lib/analysis/safeTx.js.map +1 -0
  161. package/dist/lib/analysis/token.d.ts +21 -0
  162. package/dist/lib/analysis/token.d.ts.map +1 -0
  163. package/dist/lib/analysis/token.js +151 -0
  164. package/dist/lib/analysis/token.js.map +1 -0
  165. package/dist/lib/analysis/types.d.ts +49 -0
  166. package/dist/lib/analysis/types.d.ts.map +1 -0
  167. package/dist/lib/analysis/types.js +10 -0
  168. package/dist/lib/analysis/types.js.map +1 -0
  169. package/dist/lib/analysis/x402.d.ts +24 -0
  170. package/dist/lib/analysis/x402.d.ts.map +1 -0
  171. package/dist/lib/analysis/x402.js +60 -0
  172. package/dist/lib/analysis/x402.js.map +1 -0
  173. package/dist/lib/auditLog.d.ts +1 -0
  174. package/dist/lib/auditLog.d.ts.map +1 -1
  175. package/dist/lib/auditLog.js +0 -0
  176. package/dist/lib/auditLog.js.map +1 -1
  177. package/dist/lib/config.d.ts +77 -0
  178. package/dist/lib/config.d.ts.map +1 -0
  179. package/dist/lib/config.js +120 -0
  180. package/dist/lib/config.js.map +1 -0
  181. package/dist/lib/constants.d.ts +246 -97
  182. package/dist/lib/constants.d.ts.map +1 -1
  183. package/dist/lib/constants.js +334 -127
  184. package/dist/lib/constants.js.map +1 -1
  185. package/dist/lib/dodoApi.d.ts +26 -3
  186. package/dist/lib/dodoApi.d.ts.map +1 -1
  187. package/dist/lib/dodoApi.js +80 -17
  188. package/dist/lib/dodoApi.js.map +1 -1
  189. package/dist/lib/ecosystemRegistry.d.ts +126 -0
  190. package/dist/lib/ecosystemRegistry.d.ts.map +1 -0
  191. package/dist/lib/ecosystemRegistry.js +178 -0
  192. package/dist/lib/ecosystemRegistry.js.map +1 -0
  193. package/dist/lib/envLoader.d.ts +0 -0
  194. package/dist/lib/envLoader.d.ts.map +0 -0
  195. package/dist/lib/envLoader.js +39 -18
  196. package/dist/lib/envLoader.js.map +1 -1
  197. package/dist/lib/goldsky.d.ts +58 -0
  198. package/dist/lib/goldsky.d.ts.map +1 -0
  199. package/dist/lib/goldsky.js +275 -0
  200. package/dist/lib/goldsky.js.map +1 -0
  201. package/dist/lib/guardian/decision.d.ts +23 -0
  202. package/dist/lib/guardian/decision.d.ts.map +1 -0
  203. package/dist/lib/guardian/decision.js +40 -0
  204. package/dist/lib/guardian/decision.js.map +1 -0
  205. package/dist/lib/http.d.ts +0 -1
  206. package/dist/lib/http.d.ts.map +1 -1
  207. package/dist/lib/http.js +297 -32
  208. package/dist/lib/http.js.map +1 -1
  209. package/dist/lib/managedExecution.d.ts +19 -0
  210. package/dist/lib/managedExecution.d.ts.map +1 -0
  211. package/dist/lib/managedExecution.js +64 -0
  212. package/dist/lib/managedExecution.js.map +1 -0
  213. package/dist/lib/merkleBatcher.d.ts +23 -0
  214. package/dist/lib/merkleBatcher.d.ts.map +1 -0
  215. package/dist/lib/merkleBatcher.js +62 -0
  216. package/dist/lib/merkleBatcher.js.map +1 -0
  217. package/dist/lib/networks.d.ts +48 -0
  218. package/dist/lib/networks.d.ts.map +1 -0
  219. package/dist/lib/networks.js +103 -0
  220. package/dist/lib/networks.js.map +1 -0
  221. package/dist/lib/observability/accessContext.d.ts +29 -0
  222. package/dist/lib/observability/accessContext.d.ts.map +1 -0
  223. package/dist/lib/observability/accessContext.js +50 -0
  224. package/dist/lib/observability/accessContext.js.map +1 -0
  225. package/dist/lib/observability/activityStore.d.ts +70 -0
  226. package/dist/lib/observability/activityStore.d.ts.map +1 -0
  227. package/dist/lib/observability/activityStore.js +149 -0
  228. package/dist/lib/observability/activityStore.js.map +1 -0
  229. package/dist/lib/observability/apiKey.d.ts +55 -0
  230. package/dist/lib/observability/apiKey.d.ts.map +1 -0
  231. package/dist/lib/observability/apiKey.js +141 -0
  232. package/dist/lib/observability/apiKey.js.map +1 -0
  233. package/dist/lib/observability/logger.d.ts +30 -0
  234. package/dist/lib/observability/logger.d.ts.map +1 -0
  235. package/dist/lib/observability/logger.js +30 -0
  236. package/dist/lib/observability/logger.js.map +1 -0
  237. package/dist/lib/observability/quota.d.ts +33 -0
  238. package/dist/lib/observability/quota.d.ts.map +1 -0
  239. package/dist/lib/observability/quota.js +49 -0
  240. package/dist/lib/observability/quota.js.map +1 -0
  241. package/dist/lib/observability/requestId.d.ts +8 -0
  242. package/dist/lib/observability/requestId.d.ts.map +1 -0
  243. package/dist/lib/observability/requestId.js +24 -0
  244. package/dist/lib/observability/requestId.js.map +1 -0
  245. package/dist/lib/observability/sanitize.d.ts +77 -0
  246. package/dist/lib/observability/sanitize.d.ts.map +1 -0
  247. package/dist/lib/observability/sanitize.js +228 -0
  248. package/dist/lib/observability/sanitize.js.map +1 -0
  249. package/dist/lib/observability/scopes.d.ts +20 -0
  250. package/dist/lib/observability/scopes.d.ts.map +1 -0
  251. package/dist/lib/observability/scopes.js +77 -0
  252. package/dist/lib/observability/scopes.js.map +1 -0
  253. package/dist/lib/okxDexApi.d.ts +106 -0
  254. package/dist/lib/okxDexApi.d.ts.map +1 -0
  255. package/dist/lib/okxDexApi.js +221 -0
  256. package/dist/lib/okxDexApi.js.map +1 -0
  257. package/dist/lib/persistentJsonStore.d.ts +5 -0
  258. package/dist/lib/persistentJsonStore.d.ts.map +1 -0
  259. package/dist/lib/persistentJsonStore.js +39 -0
  260. package/dist/lib/persistentJsonStore.js.map +1 -0
  261. package/dist/lib/pharos/attestationPublisher.d.ts +50 -0
  262. package/dist/lib/pharos/attestationPublisher.d.ts.map +1 -0
  263. package/dist/lib/pharos/attestationPublisher.js +262 -0
  264. package/dist/lib/pharos/attestationPublisher.js.map +1 -0
  265. package/dist/lib/pharos/ecosystem.d.ts +52 -0
  266. package/dist/lib/pharos/ecosystem.d.ts.map +1 -0
  267. package/dist/lib/pharos/ecosystem.js +431 -0
  268. package/dist/lib/pharos/ecosystem.js.map +1 -0
  269. package/dist/lib/pharos/ecosystemEvidence.d.ts +53 -0
  270. package/dist/lib/pharos/ecosystemEvidence.d.ts.map +1 -0
  271. package/dist/lib/pharos/ecosystemEvidence.js +133 -0
  272. package/dist/lib/pharos/ecosystemEvidence.js.map +1 -0
  273. package/dist/lib/pharos/rpc.d.ts +44 -0
  274. package/dist/lib/pharos/rpc.d.ts.map +1 -0
  275. package/dist/lib/pharos/rpc.js +90 -0
  276. package/dist/lib/pharos/rpc.js.map +1 -0
  277. package/dist/lib/pharos/rpcEvidence.d.ts +49 -0
  278. package/dist/lib/pharos/rpcEvidence.d.ts.map +1 -0
  279. package/dist/lib/pharos/rpcEvidence.js +46 -0
  280. package/dist/lib/pharos/rpcEvidence.js.map +1 -0
  281. package/dist/lib/pharos/rpcMethods.d.ts +46 -0
  282. package/dist/lib/pharos/rpcMethods.d.ts.map +1 -0
  283. package/dist/lib/pharos/rpcMethods.js +176 -0
  284. package/dist/lib/pharos/rpcMethods.js.map +1 -0
  285. package/dist/lib/pharos/spvVerifier.d.ts +47 -0
  286. package/dist/lib/pharos/spvVerifier.d.ts.map +1 -0
  287. package/dist/lib/pharos/spvVerifier.js +105 -0
  288. package/dist/lib/pharos/spvVerifier.js.map +1 -0
  289. package/dist/lib/pharos/userSignedBroadcaster.d.ts +10 -0
  290. package/dist/lib/pharos/userSignedBroadcaster.d.ts.map +1 -0
  291. package/dist/lib/pharos/userSignedBroadcaster.js +50 -0
  292. package/dist/lib/pharos/userSignedBroadcaster.js.map +1 -0
  293. package/dist/lib/pharosClient.d.ts +5 -10
  294. package/dist/lib/pharosClient.d.ts.map +1 -1
  295. package/dist/lib/pharosClient.js +9 -16
  296. package/dist/lib/pharosClient.js.map +1 -1
  297. package/dist/lib/policy/actionPolicyEngine.d.ts +37 -1
  298. package/dist/lib/policy/actionPolicyEngine.d.ts.map +1 -1
  299. package/dist/lib/policy/actionPolicyEngine.js +213 -52
  300. package/dist/lib/policy/actionPolicyEngine.js.map +1 -1
  301. package/dist/lib/policy/agentPolicy.d.ts +29 -0
  302. package/dist/lib/policy/agentPolicy.d.ts.map +1 -0
  303. package/dist/lib/policy/agentPolicy.js +154 -0
  304. package/dist/lib/policy/agentPolicy.js.map +1 -0
  305. package/dist/lib/policy/policyPresets.d.ts +30 -0
  306. package/dist/lib/policy/policyPresets.d.ts.map +1 -0
  307. package/dist/lib/policy/policyPresets.js +124 -0
  308. package/dist/lib/policy/policyPresets.js.map +1 -0
  309. package/dist/lib/policy/writeExecutionGate.d.ts +23 -0
  310. package/dist/lib/policy/writeExecutionGate.d.ts.map +1 -0
  311. package/dist/lib/policy/writeExecutionGate.js +65 -0
  312. package/dist/lib/policy/writeExecutionGate.js.map +1 -0
  313. package/dist/lib/preparedTxStore.d.ts +21 -0
  314. package/dist/lib/preparedTxStore.d.ts.map +1 -0
  315. package/dist/lib/preparedTxStore.js +90 -0
  316. package/dist/lib/preparedTxStore.js.map +1 -0
  317. package/dist/lib/price/chainlinkPushProvider.d.ts +34 -0
  318. package/dist/lib/price/chainlinkPushProvider.d.ts.map +1 -0
  319. package/dist/lib/price/chainlinkPushProvider.js +36 -0
  320. package/dist/lib/price/chainlinkPushProvider.js.map +1 -0
  321. package/dist/lib/price/feedRegistry.d.ts +26 -0
  322. package/dist/lib/price/feedRegistry.d.ts.map +1 -0
  323. package/dist/lib/price/feedRegistry.js +67 -0
  324. package/dist/lib/price/feedRegistry.js.map +1 -0
  325. package/dist/lib/price/priceResolver.d.ts +35 -0
  326. package/dist/lib/price/priceResolver.d.ts.map +1 -0
  327. package/dist/lib/price/priceResolver.js +246 -0
  328. package/dist/lib/price/priceResolver.js.map +1 -0
  329. package/dist/lib/price/supraProvider.d.ts +9 -0
  330. package/dist/lib/price/supraProvider.d.ts.map +1 -0
  331. package/dist/lib/price/supraProvider.js +17 -0
  332. package/dist/lib/price/supraProvider.js.map +1 -0
  333. package/dist/lib/price/types.d.ts +67 -0
  334. package/dist/lib/price/types.d.ts.map +1 -0
  335. package/dist/lib/price/types.js +7 -0
  336. package/dist/lib/price/types.js.map +1 -0
  337. package/dist/lib/productionGuards.d.ts +16 -0
  338. package/dist/lib/productionGuards.d.ts.map +1 -0
  339. package/dist/lib/productionGuards.js +93 -0
  340. package/dist/lib/productionGuards.js.map +1 -0
  341. package/dist/lib/recipientSafety.d.ts +5 -0
  342. package/dist/lib/recipientSafety.d.ts.map +1 -0
  343. package/dist/lib/recipientSafety.js +28 -0
  344. package/dist/lib/recipientSafety.js.map +1 -0
  345. package/dist/lib/riskEngine.d.ts +19 -0
  346. package/dist/lib/riskEngine.d.ts.map +1 -1
  347. package/dist/lib/riskEngine.js +107 -38
  348. package/dist/lib/riskEngine.js.map +1 -1
  349. package/dist/lib/riskInclusion.d.ts +72 -0
  350. package/dist/lib/riskInclusion.d.ts.map +1 -0
  351. package/dist/lib/riskInclusion.js +252 -0
  352. package/dist/lib/riskInclusion.js.map +1 -0
  353. package/dist/lib/safeHandsRegistry.d.ts +32 -0
  354. package/dist/lib/safeHandsRegistry.d.ts.map +1 -0
  355. package/dist/lib/safeHandsRegistry.js +151 -0
  356. package/dist/lib/safeHandsRegistry.js.map +1 -0
  357. package/dist/lib/signer/index.d.ts +3 -3
  358. package/dist/lib/signer/index.d.ts.map +1 -1
  359. package/dist/lib/signer/index.js +33 -11
  360. package/dist/lib/signer/index.js.map +1 -1
  361. package/dist/lib/spendAccumulator.d.ts +24 -1
  362. package/dist/lib/spendAccumulator.d.ts.map +1 -1
  363. package/dist/lib/spendAccumulator.js +76 -6
  364. package/dist/lib/spendAccumulator.js.map +1 -1
  365. package/dist/lib/toolResponse.d.ts +6 -1
  366. package/dist/lib/toolResponse.d.ts.map +1 -1
  367. package/dist/lib/toolResponse.js +13 -9
  368. package/dist/lib/toolResponse.js.map +1 -1
  369. package/dist/lib/validation.d.ts +7 -0
  370. package/dist/lib/validation.d.ts.map +1 -0
  371. package/dist/lib/validation.js +62 -0
  372. package/dist/lib/validation.js.map +1 -0
  373. package/dist/lib/wallet/index.d.ts +8 -12
  374. package/dist/lib/wallet/index.d.ts.map +1 -1
  375. package/dist/lib/wallet/index.js +48 -35
  376. package/dist/lib/wallet/index.js.map +1 -1
  377. package/dist/lib/x402ReplayStore.d.ts +6 -0
  378. package/dist/lib/x402ReplayStore.d.ts.map +1 -0
  379. package/dist/lib/x402ReplayStore.js +79 -0
  380. package/dist/lib/x402ReplayStore.js.map +1 -0
  381. package/dist/safehands.zip +0 -0
  382. package/dist/sdk.d.ts +14 -0
  383. package/dist/sdk.d.ts.map +1 -0
  384. package/dist/sdk.js +25 -0
  385. package/dist/sdk.js.map +1 -0
  386. package/dist/tools/approveToken.d.ts +31 -10
  387. package/dist/tools/approveToken.d.ts.map +1 -1
  388. package/dist/tools/approveToken.js +91 -24
  389. package/dist/tools/approveToken.js.map +1 -1
  390. package/dist/tools/assessRisk.d.ts +13 -26
  391. package/dist/tools/assessRisk.d.ts.map +1 -1
  392. package/dist/tools/assessRisk.js +34 -75
  393. package/dist/tools/assessRisk.js.map +1 -1
  394. package/dist/tools/checkAllowance.d.ts +9 -3
  395. package/dist/tools/checkAllowance.d.ts.map +1 -1
  396. package/dist/tools/checkAllowance.js +27 -5
  397. package/dist/tools/checkAllowance.js.map +1 -1
  398. package/dist/tools/checkTokenSecurity.d.ts +62 -5
  399. package/dist/tools/checkTokenSecurity.d.ts.map +1 -1
  400. package/dist/tools/checkTokenSecurity.js +166 -21
  401. package/dist/tools/checkTokenSecurity.js.map +1 -1
  402. package/dist/tools/createAgentWallet.d.ts +4 -2
  403. package/dist/tools/createAgentWallet.d.ts.map +1 -1
  404. package/dist/tools/createAgentWallet.js +36 -31
  405. package/dist/tools/createAgentWallet.js.map +1 -1
  406. package/dist/tools/estimateGas.d.ts +7 -2
  407. package/dist/tools/estimateGas.d.ts.map +1 -1
  408. package/dist/tools/estimateGas.js +16 -10
  409. package/dist/tools/estimateGas.js.map +1 -1
  410. package/dist/tools/executeSwap.d.ts +56 -8
  411. package/dist/tools/executeSwap.d.ts.map +1 -1
  412. package/dist/tools/executeSwap.js +194 -46
  413. package/dist/tools/executeSwap.js.map +1 -1
  414. package/dist/tools/explainRisk.d.ts +9 -9
  415. package/dist/tools/explainRisk.d.ts.map +1 -1
  416. package/dist/tools/explainRisk.js +5 -4
  417. package/dist/tools/explainRisk.js.map +1 -1
  418. package/dist/tools/getAgentPolicy.d.ts +15 -0
  419. package/dist/tools/getAgentPolicy.d.ts.map +1 -0
  420. package/dist/tools/getAgentPolicy.js +16 -0
  421. package/dist/tools/getAgentPolicy.js.map +1 -0
  422. package/dist/tools/getAgentReputation.d.ts +31 -0
  423. package/dist/tools/getAgentReputation.d.ts.map +1 -0
  424. package/dist/tools/getAgentReputation.js +44 -0
  425. package/dist/tools/getAgentReputation.js.map +1 -0
  426. package/dist/tools/getAgentWallet.d.ts +1 -1
  427. package/dist/tools/getAgentWallet.d.ts.map +1 -1
  428. package/dist/tools/getAgentWallet.js +11 -1
  429. package/dist/tools/getAgentWallet.js.map +1 -1
  430. package/dist/tools/getAgentWalletBalance.d.ts +1 -1
  431. package/dist/tools/getAgentWalletBalance.d.ts.map +1 -1
  432. package/dist/tools/getAgentWalletBalance.js +58 -26
  433. package/dist/tools/getAgentWalletBalance.js.map +1 -1
  434. package/dist/tools/getExecutionHistory.d.ts +1 -1
  435. package/dist/tools/getExecutionHistory.d.ts.map +1 -1
  436. package/dist/tools/getExecutionHistory.js +13 -19
  437. package/dist/tools/getExecutionHistory.js.map +1 -1
  438. package/dist/tools/getGasPrice.d.ts +3 -3
  439. package/dist/tools/getGasPrice.d.ts.map +0 -0
  440. package/dist/tools/getGasPrice.js +7 -7
  441. package/dist/tools/getGasPrice.js.map +1 -1
  442. package/dist/tools/getPoolInfo.d.ts +17 -17
  443. package/dist/tools/getPoolInfo.d.ts.map +1 -1
  444. package/dist/tools/getPoolInfo.js +14 -9
  445. package/dist/tools/getPoolInfo.js.map +1 -1
  446. package/dist/tools/getSpvProof.d.ts +24 -0
  447. package/dist/tools/getSpvProof.d.ts.map +1 -0
  448. package/dist/tools/getSpvProof.js +64 -0
  449. package/dist/tools/getSpvProof.js.map +1 -0
  450. package/dist/tools/getTokenPrice.d.ts +28 -85
  451. package/dist/tools/getTokenPrice.d.ts.map +1 -1
  452. package/dist/tools/getTokenPrice.js +87 -94
  453. package/dist/tools/getTokenPrice.js.map +1 -1
  454. package/dist/tools/getTransactionStatus.d.ts +2 -2
  455. package/dist/tools/getTransactionStatus.d.ts.map +0 -0
  456. package/dist/tools/getTransactionStatus.js +0 -0
  457. package/dist/tools/getTransactionStatus.js.map +0 -0
  458. package/dist/tools/getWalletBalance.d.ts +38 -3
  459. package/dist/tools/getWalletBalance.d.ts.map +1 -1
  460. package/dist/tools/getWalletBalance.js +92 -52
  461. package/dist/tools/getWalletBalance.js.map +1 -1
  462. package/dist/tools/publishRiskScore.d.ts +36 -14
  463. package/dist/tools/publishRiskScore.d.ts.map +1 -1
  464. package/dist/tools/publishRiskScore.js +80 -32
  465. package/dist/tools/publishRiskScore.js.map +1 -1
  466. package/dist/tools/queryGoldsky.d.ts +20 -0
  467. package/dist/tools/queryGoldsky.d.ts.map +1 -0
  468. package/dist/tools/queryGoldsky.js +29 -0
  469. package/dist/tools/queryGoldsky.js.map +1 -0
  470. package/dist/tools/queryRiskRegistry.d.ts +14 -14
  471. package/dist/tools/queryRiskRegistry.d.ts.map +1 -1
  472. package/dist/tools/queryRiskRegistry.js +34 -30
  473. package/dist/tools/queryRiskRegistry.js.map +1 -1
  474. package/dist/tools/safehandsPreflightCheck.d.ts +29 -14
  475. package/dist/tools/safehandsPreflightCheck.d.ts.map +1 -1
  476. package/dist/tools/safehandsPreflightCheck.js +133 -6
  477. package/dist/tools/safehandsPreflightCheck.js.map +1 -1
  478. package/dist/tools/safehandsRiskReport.d.ts +29 -14
  479. package/dist/tools/safehandsRiskReport.d.ts.map +1 -1
  480. package/dist/tools/safehandsRiskReport.js +23 -3
  481. package/dist/tools/safehandsRiskReport.js.map +1 -1
  482. package/dist/tools/safehandsSafeExecute.d.ts +1 -1
  483. package/dist/tools/safehandsSafeExecute.d.ts.map +1 -1
  484. package/dist/tools/safehandsSafeExecute.js +100 -17
  485. package/dist/tools/safehandsSafeExecute.js.map +1 -1
  486. package/dist/tools/safehandsWalletHealth.d.ts +15 -1
  487. package/dist/tools/safehandsWalletHealth.d.ts.map +1 -1
  488. package/dist/tools/safehandsWalletHealth.js +67 -25
  489. package/dist/tools/safehandsWalletHealth.js.map +1 -1
  490. package/dist/tools/safehandsX402Preflight.d.ts +3 -3
  491. package/dist/tools/safehandsX402Preflight.d.ts.map +1 -1
  492. package/dist/tools/safehandsX402Preflight.js +24 -3
  493. package/dist/tools/safehandsX402Preflight.js.map +1 -1
  494. package/dist/tools/sendPayment.d.ts +10 -4
  495. package/dist/tools/sendPayment.d.ts.map +1 -1
  496. package/dist/tools/sendPayment.js +63 -36
  497. package/dist/tools/sendPayment.js.map +1 -1
  498. package/dist/tools/setAgentPolicy.d.ts +75 -0
  499. package/dist/tools/setAgentPolicy.d.ts.map +1 -0
  500. package/dist/tools/setAgentPolicy.js +80 -0
  501. package/dist/tools/setAgentPolicy.js.map +1 -0
  502. package/dist/tools/simulateTransaction.d.ts +7 -3
  503. package/dist/tools/simulateTransaction.d.ts.map +1 -1
  504. package/dist/tools/simulateTransaction.js +42 -9
  505. package/dist/tools/simulateTransaction.js.map +1 -1
  506. package/dist/tools/tokenRegistryStatus.d.ts +25 -5
  507. package/dist/tools/tokenRegistryStatus.d.ts.map +1 -1
  508. package/dist/tools/tokenRegistryStatus.js +61 -31
  509. package/dist/tools/tokenRegistryStatus.js.map +1 -1
  510. package/dist/tools/verifyRiskInclusion.d.ts +59 -0
  511. package/dist/tools/verifyRiskInclusion.d.ts.map +1 -0
  512. package/dist/tools/verifyRiskInclusion.js +40 -0
  513. package/dist/tools/verifyRiskInclusion.js.map +1 -0
  514. package/dist/tools/x402PayAndFetch.d.ts +15 -9
  515. package/dist/tools/x402PayAndFetch.d.ts.map +1 -1
  516. package/dist/tools/x402PayAndFetch.js +163 -20
  517. package/dist/tools/x402PayAndFetch.js.map +1 -1
  518. package/dist/worker.d.ts +3 -0
  519. package/dist/worker.d.ts.map +1 -0
  520. package/dist/worker.js +39 -0
  521. package/dist/worker.js.map +1 -0
  522. package/dist/x402Server.d.ts +1 -1
  523. package/dist/x402Server.d.ts.map +1 -1
  524. package/dist/x402Server.js +144 -35
  525. package/dist/x402Server.js.map +1 -1
  526. package/docs/REVIEWER_QUICKSTART.md +113 -0
  527. package/docs/SAFEHANDS_REVIEWER_DEMO_SCRIPT.md +228 -0
  528. package/package.json +131 -73
  529. package/contracts/RiskRegistry.json +0 -223
  530. package/contracts/RiskRegistry.sol +0 -58
  531. package/dist/lib/testDodoLive.d.ts +0 -2
  532. package/dist/lib/testDodoLive.d.ts.map +0 -1
  533. package/dist/lib/testDodoLive.js +0 -105
  534. package/dist/lib/testDodoLive.js.map +0 -1
  535. package/dist/lib/testLiveSafehands.d.ts +0 -2
  536. package/dist/lib/testLiveSafehands.d.ts.map +0 -1
  537. package/dist/lib/testLiveSafehands.js +0 -93
  538. package/dist/lib/testLiveSafehands.js.map +0 -1
  539. package/dist/lib/testRpc.d.ts +0 -2
  540. package/dist/lib/testRpc.d.ts.map +0 -1
  541. package/dist/lib/testRpc.js +0 -30
  542. package/dist/lib/testRpc.js.map +0 -1
  543. package/dist/lib/testRpcLive.d.ts +0 -2
  544. package/dist/lib/testRpcLive.d.ts.map +0 -1
  545. package/dist/lib/testRpcLive.js +0 -89
  546. package/dist/lib/testRpcLive.js.map +0 -1
  547. package/dist/lib/testTools.d.ts +0 -2
  548. package/dist/lib/testTools.d.ts.map +0 -1
  549. package/dist/lib/testTools.js +0 -397
  550. package/dist/lib/testTools.js.map +0 -1
  551. package/dist/lib/testX402Live.d.ts +0 -2
  552. package/dist/lib/testX402Live.d.ts.map +0 -1
  553. package/dist/lib/testX402Live.js +0 -160
  554. package/dist/lib/testX402Live.js.map +0 -1
  555. package/dist/scripts/checkDeploy.d.ts +0 -2
  556. package/dist/scripts/checkDeploy.d.ts.map +0 -1
  557. package/dist/scripts/checkDeploy.js +0 -25
  558. package/dist/scripts/checkDeploy.js.map +0 -1
  559. package/dist/scripts/deployRegistry.d.ts +0 -2
  560. package/dist/scripts/deployRegistry.d.ts.map +0 -1
  561. package/dist/scripts/deployRegistry.js +0 -101
  562. package/dist/scripts/deployRegistry.js.map +0 -1
  563. package/dist/scripts/testRegistry.d.ts +0 -2
  564. package/dist/scripts/testRegistry.d.ts.map +0 -1
  565. package/dist/scripts/testRegistry.js +0 -44
  566. package/dist/scripts/testRegistry.js.map +0 -1
@@ -0,0 +1,228 @@
1
+ # SafeHands Reviewer Demo Script
2
+
3
+ Current as of v2.8.0: Pharos Pacific Mainnet (chain `1672`), Anvita Flow hosted agent, live contracts.
4
+
5
+ ## 1. Project one-liner
6
+
7
+ SafeHands is the transaction firewall for AI agent finance on Pharos Pacific Mainnet: a deterministic policy engine that evaluates every agent action (payments, approvals, swaps, x402 calls, tokenized-asset moves) *before* the signature and returns `ALLOW` / `BLOCK` / `REQUIRE_CONFIRMATION` / `PREPARE_ONLY` with a plain-English reason. The hosted deployment is **read-only and zero-custody**: it holds no keys, signs nothing, and broadcasts nothing on its own.
8
+
9
+ For the Real-Fi & RWA angle (how the attestation ledger, risk registry, token verification, and USDC settlement rails serve tokenized real-world assets), see [REALFI_RWA_ALIGNMENT.md](./REALFI_RWA_ALIGNMENT.md).
10
+
11
+ ## 2. Fastest paths for a reviewer
12
+
13
+ ### No-install path: Anvita Flow hosted agent
14
+
15
+ The fully-hosted, zero-custody agent is live on [Anvita Flow](https://flow.anvita.xyz/home) as `safehands` (Agent Carnival Phase 2). Any Steward Agent on the marketplace can discover and call it: no server, no keys, no custody. To try the engine on your own machine without cloning:
16
+
17
+ ```bash
18
+ npx -y safehands-pharos --demo
19
+ ```
20
+
21
+ ### Self-host the HTTP API (read-only; no keys, no tx)
22
+
23
+ Run the read-only reference backend locally, then hit it over HTTP:
24
+
25
+ ```bash
26
+ npm ci && npm run build
27
+ node dist/api/server.js # read-only API on http://localhost:4022
28
+
29
+ # Service health
30
+ curl -s http://localhost:4022/health
31
+
32
+ # Public network config (chain 1672)
33
+ curl -s http://localhost:4022/public-config
34
+
35
+ # A real preflight decision: unlimited approval → BLOCK
36
+ curl -s -X POST http://localhost:4022/tools/safehands_preflight_check \
37
+ -H "content-type: application/json" \
38
+ -d '{"actionType":"approve_token","chainId":1672,"approvalToken":"USDC","spender":"0x000000000000000000000000000000000000dEaD","approvalAmount":"max"}'
39
+
40
+ # On-chain reputation of the deployer (live attestation contract)
41
+ curl -s -X POST http://localhost:4022/tools/get_agent_reputation \
42
+ -H "content-type: application/json" \
43
+ -d '{"address":"0x6730d3a2A217108AB53CCFe60ffdAd05D3C124e5"}'
44
+
45
+ # x402 paid endpoint. Fail-closed by default: without x402 config this returns 503.
46
+ # With X402_PAY_TO and a reachable external X402_FACILITATOR_URL set, it returns a
47
+ # real HTTP 402 challenge (mainnet USDC, eip155:1672).
48
+ curl -s -i http://localhost:4022/paid/risk-report
49
+ ```
50
+
51
+ Interactive browser demo (while the local API runs): **http://localhost:4022/demo**.
52
+
53
+ ## 3. Why SafeHands matters
54
+
55
+ AI agents making on-chain transactions need guardrails. Without safety checks, an agent could:
56
+
57
+ - Send funds to the wrong address or chain
58
+ - Approve unlimited token spending
59
+ - Sign drainer-crafted calldata it never actually decoded
60
+ - Execute swaps above policy limits
61
+ - Pay x402 invoices to SSRF targets
62
+ - Move a tokenized asset to an unvetted counterparty with no audit trail
63
+
64
+ SafeHands sits between the agent and the blockchain. Every action goes through preflight, risk scoring, policy checks, and authorization gates before execution is allowed; and, on the opt-in relayed-broadcast path (off by default), the broadcasts it relays are attested on-chain.
65
+
66
+ ## 4. Execution modes
67
+
68
+ | Mode | Wallet | Where | Use case |
69
+ |------|--------|-------|----------|
70
+ | Read-only preflight *(default)* | none | hosted or local | Safety checks, risk analysis, demos |
71
+ | User-signed | user's own | anywhere | SafeHands validates; user signs externally; verified broadcast + attestation |
72
+ | Managed execution | local encrypted wallet | self-hosted only | Full agent autonomy, opt-in; refused on public hosts by a boot guard |
73
+ | Env wallet (advanced) | `PRIVATE_KEY` in env | local dev | Local mainnet development |
74
+
75
+ ## 5. Live contracts: Pharos Pacific Mainnet
76
+
77
+ ```
78
+ Network: Pharos Pacific Mainnet
79
+ Chain ID: 1672
80
+ Registry: 0x428e02bf85412e7242d991cd6725ec59e8b06c8d
81
+ Attestation: 0x71a7a87b3b1ab6d86204cad691bb32fd75b4588c
82
+ Owner: 0x6730d3a2a217108ab53ccfe60ffdad05d3c124e5
83
+ Explorer: https://www.pharosscan.xyz
84
+ ```
85
+
86
+ - **SafeHandsRegistry**: authorized operators, Merkle risk roots, `verifyRiskRecord` on-chain view.
87
+ - **SafeHandsAttestation**: immutable, privacy-preserving verified-safe records plus `reputationOf()` per-address reputation. Only hashed context is published (`preparedTransactionHash`, `policyHash`, `metadataHash`, `txHash`); never raw calldata, amounts, recipients, or keys.
88
+
89
+ Both are verifiable on the explorer; the reputation oracle has live attestations recorded by a dedicated attester key (`0xe9F1d28C7136BbB1a57DA9852F216b8Cb39Eb888`) that never signs user transactions.
90
+
91
+ ## 6. Demo commands
92
+
93
+ ### Quick demo (no setup required)
94
+
95
+ ```bash
96
+ npm ci && npm run build
97
+ npm run demo # or: npx -y safehands-pharos --demo
98
+ ```
99
+
100
+ ### The firewall reading raw calldata (v2.4.0, 60-second demonstration)
101
+
102
+ The hosted engine decodes approval/transfer/admin calldata **offline**: no simulation service, no third-party API. Feed it a drainer-style transaction and watch it block from the raw bytes:
103
+
104
+ ```bash
105
+ # Unlimited approve to an unknown spender, hidden inside a "vault deposit": BLOCK
106
+ node anvita/safehands/scripts/safehands-engine.js analyze '{
107
+ "subjectType":"intent","action":"vault_deposit",
108
+ "walletAddress":"0x1111111111111111111111111111111111111111",
109
+ "vault":"0xcA11bde05977b3631167028862bE2a173976CA11",
110
+ "to":"0xc879C018Db60520f4355C26eD1a6D572CDAC1815",
111
+ "data":"0x095ea7b3000000000000000000000000000000000000000000000000000000000000deadffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}'
112
+ # -> recommendation: block, riskScore >= 90
113
+ # -> "UNLIMITED approve to an UNKNOWN spender (0x…dead); the spender could move the entire … balance"
114
+ ```
115
+
116
+ Contrast with a **registry-verified** protocol: trust comes only from first-party evidence (the project's own docs + on-chain checks, cited in the registry):
117
+
118
+ ```bash
119
+ # Morpho Blue on Pharos, verified 2026-07-11 from Morpho's own addresses page
120
+ node anvita/safehands/scripts/safehands-engine.js analyze '{"subjectType":"contract","address":"0x18573fA18fd17dDfD790B4a5B5b2977aad3b4Efb"}'
121
+ # -> recommendation: allow, riskScore 5
122
+ # -> "Canonical registry contract: Morpho Blue (verified via official-docs citation + on-chain check)"
123
+ ```
124
+
125
+ Ecosystem names the registry recognizes but whose addresses are **not** yet published in their own docs (FaroSwap, Stargate, …) stay fail-closed: an unlimited approval to them blocks. That is policy, not a bug: recognition is never proof.
126
+
127
+ ### Test suites
128
+
129
+ ```bash
130
+ npm test # hermetic deterministic suite (no wallet, no RPC, no network needed)
131
+ npm run demo # 12 non-destructive demo scenarios
132
+ npm run test:contracts # 25 Hardhat Solidity tests (offline smoke fallback without a compiler)
133
+ npm run test:all # all combined
134
+ ```
135
+
136
+ Focused suites also exist: `test/x402-gate.test.ts` (x402 payment gate with a mock facilitator) and `test/risk-inclusion.test.ts` (Merkle inclusion proof path), runnable via `tsx --test <file>`.
137
+
138
+ ## 7. Expected outputs
139
+
140
+ ### Safe small payment → ALLOW
141
+
142
+ ```
143
+ Action: send_payment
144
+ Chain ID: 1672 (Pharos Pacific Mainnet)
145
+ Amount: 0.001 PROS
146
+ -> Decision: ALLOW
147
+ ```
148
+
149
+ ### Non-Pharos chain → BLOCK
150
+
151
+ ```
152
+ Action: send_payment
153
+ Chain ID: 1 (Ethereum Mainnet)
154
+ -> Decision: BLOCK
155
+ -> Reason: chain 1 is not the configured Pharos target
156
+ ```
157
+
158
+ ### Unlimited approval → BLOCK
159
+
160
+ ```
161
+ Action: approve_token
162
+ Amount: unlimited / max
163
+ -> Decision: BLOCK
164
+ -> Reason: Unlimited approvals are blocked by default
165
+ ```
166
+
167
+ ### Unknown / unregistered token → REQUIRE_CONFIRMATION
168
+
169
+ ```
170
+ Action: approve_token (finite amount, token not in the active registry)
171
+ -> Decision: REQUIRE_CONFIRMATION
172
+ -> tokenRegistry.status: unknown; human confirmation required
173
+ ```
174
+
175
+ ### x402 SSRF / invalid amount → BLOCK
176
+
177
+ ```
178
+ Action: x402_pay_and_fetch
179
+ URL: http://169.254.169.254/metadata (internal IP)
180
+ -> SSRF_BLOCKED
181
+
182
+ Action: x402_pay_and_fetch
183
+ Amount: -1 USDC
184
+ -> VALIDATION_ERROR
185
+ ```
186
+
187
+ ### Policy: advanced allows a large swap, conservative does not
188
+
189
+ ```
190
+ Policy: advanced
191
+ Action: swap 1000 PROS
192
+ -> within advanced maxSwapPROS: 1000
193
+
194
+ Policy: conservative
195
+ Action: swap 1000 PROS
196
+ -> exceeds conservative maxSwapPROS: 1
197
+ ```
198
+
199
+ ### Hard safety rules override any policy
200
+
201
+ ```
202
+ Policy: advanced · Action: payment on chainId 1 -> BLOCK (non-Pharos chain, regardless of policy)
203
+ Policy: advanced · Action: unlimited approval -> BLOCK (regardless of policy)
204
+ Policy: advanced · Action: x402 to internal IP -> BLOCK (SSRF, regardless of policy)
205
+ ```
206
+
207
+ ## 8. The 33 tools (grouped)
208
+
209
+ | Category | Tools |
210
+ |----------|-------|
211
+ | Safety preflight | `safehands_preflight_check`, `safehands_x402_preflight`, `safehands_risk_report`, `safehands_wallet_health`, `explain_risk`, `token_registry_status` |
212
+ | Risk registry (on-chain) | `publish_risk_score`, `query_risk_registry`, `verify_risk_inclusion`, `get_agent_reputation` |
213
+ | Risk + analysis | `assess_risk`, `check_token_security`, `simulate_transaction`, `estimate_gas`, `check_allowance` |
214
+ | Market + chain data | `get_token_price`, `get_wallet_balance`, `get_gas_price`, `get_pool_info`, `get_transaction_status`, `get_execution_history`, `query_goldsky_subgraph`, `get_spv_proof` |
215
+ | Execution (gated) | `safehands_safe_execute`, `execute_swap`, `send_payment`, `approve_token`, `x402_pay_and_fetch` |
216
+ | Agent policy | `get_agent_policy`, `set_agent_policy` |
217
+ | Managed wallet | `create_agent_wallet`, `get_agent_wallet`, `get_agent_wallet_balance` |
218
+
219
+ All 33 are exposed identically across MCP, HTTP, and CLI.
220
+
221
+ ## 9. Limitations (honest)
222
+
223
+ - Hosted mode (Anvita Flow) and the self-hosted read-only backend are zero-custody; execution, signing, managed wallets, and on-chain publishing are gated and disabled by default. A boot guard refuses managed/write execution on a public host.
224
+ - Managed-wallet encryption is AES-256-GCM, not KMS/Vault-grade; not intended for custody of large amounts, and not audited for production custody.
225
+ - GoPlus token security does not cover Pharos Atlantic Testnet (`688689`).
226
+ - DODO reverse routes can occasionally lack liquidity for exotic pairs.
227
+ - L1 risk-root committer automation and the DA-serving endpoint are roadmap; the on-chain read/verify path (`verify_risk_inclusion`) is live.
228
+ - The risk-root pipeline (queue, batch flush, `commitRiskRoot`, inclusion verify) is functional end to end and the first production batch is committed on-chain: a registry `query` reports `hasCommittedRoot:true` and returns a risk record sourced from the committed data-availability pointer. The attestation contract also has live on-chain usage.
package/package.json CHANGED
@@ -1,73 +1,131 @@
1
- {
2
- "name": "safehands-pharos",
3
- "version": "1.5.0",
4
- "description": "Pharos Skill Engine-compatible transaction safety firewall for AI agents.",
5
- "type": "module",
6
- "main": "dist/index.js",
7
- "types": "dist/index.d.ts",
8
- "exports": {
9
- ".": "./dist/index.js"
10
- },
11
- "bin": {
12
- "safehands-pharos": "dist/index.js"
13
- },
14
- "files": [
15
- "dist",
16
- "contracts",
17
- "README.md",
18
- ".env.example",
19
- "LICENSE"
20
- ],
21
- "scripts": {
22
- "build": "tsc",
23
- "start": "node dist/index.js",
24
- "dev": "tsx src/index.ts",
25
- "x402-server": "tsx src/x402Server.ts",
26
- "demo": "tsx src/demo.ts"
27
- },
28
- "keywords": [
29
- "pharos",
30
- "mcp",
31
- "mcp-skill",
32
- "defi",
33
- "risk-engine",
34
- "ai-agent",
35
- "farodex",
36
- "viem",
37
- "atlantic-testnet",
38
- "web3",
39
- "pharos-skill-engine",
40
- "guardrail",
41
- "transaction-safety",
42
- "transaction-firewall",
43
- "x402",
44
- "agent-safety",
45
- "safehands"
46
- ],
47
- "author": "SZtch",
48
- "license": "MIT",
49
- "repository": {
50
- "type": "git",
51
- "url": "https://github.com/SZtch/safehands-pharos.git"
52
- },
53
- "homepage": "https://github.com/SZtch/safehands-pharos#readme",
54
- "engines": {
55
- "node": ">=18.0.0"
56
- },
57
- "dependencies": {
58
- "@modelcontextprotocol/sdk": "^1.12.1",
59
- "@x402/core": "^2.15.0",
60
- "@x402/evm": "^2.15.0",
61
- "@x402/express": "^2.15.0",
62
- "@x402/fetch": "^2.15.0",
63
- "express": "^5.2.1",
64
- "viem": "^2.31.3",
65
- "zod": "^3.25.67"
66
- },
67
- "devDependencies": {
68
- "@types/express": "^5.0.6",
69
- "@types/node": "^22.15.0",
70
- "tsx": "^4.20.3",
71
- "typescript": "^5.8.3"
72
- }
73
- }
1
+ {
2
+ "name": "safehands-pharos",
3
+ "version": "2.8.0",
4
+ "description": "Open-source reusable Pharos Skill, the transaction firewall for AI agent finance on Pharos Pacific Mainnet: deterministic safety verdicts before any wallet signs. Read-only by default; write tools optional, gated, off by default.",
5
+ "type": "module",
6
+ "main": "dist/sdk.js",
7
+ "types": "dist/sdk.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/sdk.d.ts",
11
+ "import": "./dist/sdk.js"
12
+ }
13
+ },
14
+ "bin": {
15
+ "safehands-pharos": "dist/index.js",
16
+ "safehands": "dist/index.js"
17
+ },
18
+ "files": [
19
+ "dist",
20
+ "contracts",
21
+ "README.md",
22
+ "SECURITY.md",
23
+ ".env.example",
24
+ "LICENSE",
25
+ "SKILL.md",
26
+ ".agents/policies/default.json",
27
+ "docs/REVIEWER_QUICKSTART.md",
28
+ "docs/SAFEHANDS_REVIEWER_DEMO_SCRIPT.md"
29
+ ],
30
+ "scripts": {
31
+ "build": "tsc",
32
+ "prepack": "npm run build",
33
+ "prepublishOnly": "npm run build && npm test",
34
+ "start": "node dist/api/server.js",
35
+ "start:api": "node dist/api/server.js",
36
+ "start:mcp": "node dist/index.js",
37
+ "dev": "tsx src/index.ts",
38
+ "x402-server": "node dist/x402Server.js",
39
+ "guardian-api": "tsx src/api/server.ts",
40
+ "agent:demo": "tsx examples/agent-arena/guardian-agent-demo.ts",
41
+ "agent:x402": "tsx examples/agent-arena/payment-agent-x402.ts",
42
+ "agent:defi": "tsx examples/agent-arena/defi-agent-approval.ts",
43
+ "agent:starter": "tsx examples/agent-starter/safe-agent.ts",
44
+ "demo": "tsx src/index.ts --demo",
45
+ "test": "tsx --test test/policy-suite.test.ts test/action-policy.test.ts test/calldata-decoder.test.ts test/risk-inclusion.test.ts test/risk-engine.test.ts test/http-ssrf.test.ts test/x402-gate.test.ts test/x402-daily-cap.test.ts test/write-auth.test.ts test/write-path-gates.test.ts test/write-tools-risk-gate.test.ts test/attestation-publisher.test.ts test/spv-verifier.test.ts test/agent-policy-guard.test.ts test/sdk-exports.test.ts test/wallet-crypto.test.ts test/execution-hardening.test.ts test/input-hardening.test.ts test/token-security-failclosed.test.ts test/token-registry-metadata.test.ts test/price-resolver.test.ts test/price-tools.test.ts test/ecosystem-registry.test.ts test/registry-defaults.test.ts test/truth-model.test.ts test/ecosystem-registry-schema.test.ts test/anvita-asset-sync.test.ts test/registry-failclosed.test.ts test/okx-dex-api.test.ts test/anvita-engine.test.mjs test/anvita-engine-calldata.test.mjs test/anvita-engine-composition.test.mjs test/anvita-engine-alias.test.mjs test/anvita-engine-keccak.test.mjs test/engine-differential.test.mjs test/engine-invariants.test.mjs test/engine-merkle-inclusion.test.mjs",
46
+ "test:live": "tsx --test test/live-smoke.test.ts",
47
+ "typecheck:test": "tsc -p tsconfig.test.json",
48
+ "lint": "eslint .",
49
+ "test:contracts": "node scripts/run-contract-tests.mjs",
50
+ "test:live-broadcast": "node scripts/live-broadcast-test.mjs",
51
+ "test:all": "npm run build && npm run typecheck:test && npm run lint && npm test && npm run demo && npm run test:contracts",
52
+ "package:anvita": "node scripts/package-anvita-safehands.mjs",
53
+ "sync:anvita": "tsx scripts/sync-anvita-assets.ts",
54
+ "sync:anvita:check": "tsx scripts/sync-anvita-assets.ts --check",
55
+ "test:contracts:hardhat": "npx hardhat test test/contracts/SafeHandsRegistry.ts test/contracts/SafeHandsAttestation.ts",
56
+ "x402-server:dev": "tsx src/x402Server.ts",
57
+ "start:x402": "node dist/x402Server.js",
58
+ "start:worker": "node dist/worker.js",
59
+ "worker": "tsx src/worker.ts",
60
+ "start:full-local": "node scripts/start-full-local.mjs",
61
+ "prepare": "npm run build"
62
+ },
63
+ "keywords": [
64
+ "pharos",
65
+ "mcp",
66
+ "mcp-skill",
67
+ "defi",
68
+ "risk-engine",
69
+ "ai-agent",
70
+ "faroswap",
71
+ "viem",
72
+ "pharos-pacific",
73
+ "mainnet",
74
+ "web3",
75
+ "pharos-skill-engine",
76
+ "guardrail",
77
+ "transaction-safety",
78
+ "transaction-firewall",
79
+ "x402",
80
+ "agent-safety",
81
+ "safehands",
82
+ "rwa",
83
+ "real-fi",
84
+ "realfi",
85
+ "real-world-assets",
86
+ "attestation"
87
+ ],
88
+ "author": "SZtch",
89
+ "license": "MIT",
90
+ "repository": {
91
+ "type": "git",
92
+ "url": "https://github.com/SZtch/safehands-pharos.git"
93
+ },
94
+ "homepage": "https://github.com/SZtch/safehands-pharos#readme",
95
+ "engines": {
96
+ "node": ">=20.0.0"
97
+ },
98
+ "dependencies": {
99
+ "@modelcontextprotocol/sdk": "^1.29.0",
100
+ "@x402/core": "^2.15.0",
101
+ "@x402/evm": "^2.15.0",
102
+ "@x402/express": "^2.15.0",
103
+ "@x402/fetch": "^2.15.0",
104
+ "express": "^5.2.1",
105
+ "merkletreejs": "^0.6.0",
106
+ "viem": "^2.31.3",
107
+ "zod": "^3.25.67"
108
+ },
109
+ "devDependencies": {
110
+ "@eslint/js": "^10.0.1",
111
+ "@nomicfoundation/hardhat-toolbox": "^7.0.0",
112
+ "@nomicfoundation/hardhat-toolbox-viem": "^5.0.7",
113
+ "@openzeppelin/contracts": "^5.6.1",
114
+ "@types/chai": "^5.2.3",
115
+ "@types/express": "^5.0.6",
116
+ "@types/mocha": "^10.0.10",
117
+ "@types/node": "^22.15.0",
118
+ "chai": "^6.2.2",
119
+ "dotenv": "^17.4.2",
120
+ "eslint": "^10.7.0",
121
+ "hardhat": "^3.9.0",
122
+ "mocha": "^11.7.6",
123
+ "tsx": "^4.20.3",
124
+ "typescript": "^5.9.3",
125
+ "typescript-eslint": "^8.63.0"
126
+ },
127
+ "overrides": {
128
+ "ws": "^8.21.0",
129
+ "undici": "^6.24.0"
130
+ }
131
+ }
@@ -1,223 +0,0 @@
1
- {
2
- "abi": [
3
- {
4
- "inputs": [],
5
- "stateMutability": "nonpayable",
6
- "type": "constructor"
7
- },
8
- {
9
- "anonymous": false,
10
- "inputs": [
11
- {
12
- "indexed": true,
13
- "internalType": "address",
14
- "name": "agent",
15
- "type": "address"
16
- },
17
- {
18
- "indexed": false,
19
- "internalType": "bool",
20
- "name": "status",
21
- "type": "bool"
22
- }
23
- ],
24
- "name": "AgentAuthorized",
25
- "type": "event"
26
- },
27
- {
28
- "anonymous": false,
29
- "inputs": [
30
- {
31
- "indexed": true,
32
- "internalType": "address",
33
- "name": "wallet",
34
- "type": "address"
35
- },
36
- {
37
- "indexed": false,
38
- "internalType": "uint256",
39
- "name": "score",
40
- "type": "uint256"
41
- },
42
- {
43
- "indexed": false,
44
- "internalType": "string",
45
- "name": "riskLevel",
46
- "type": "string"
47
- },
48
- {
49
- "indexed": false,
50
- "internalType": "address",
51
- "name": "assessedBy",
52
- "type": "address"
53
- }
54
- ],
55
- "name": "RiskPublished",
56
- "type": "event"
57
- },
58
- {
59
- "inputs": [
60
- {
61
- "internalType": "address",
62
- "name": "",
63
- "type": "address"
64
- }
65
- ],
66
- "name": "authorizedAgents",
67
- "outputs": [
68
- {
69
- "internalType": "bool",
70
- "name": "",
71
- "type": "bool"
72
- }
73
- ],
74
- "stateMutability": "view",
75
- "type": "function"
76
- },
77
- {
78
- "inputs": [],
79
- "name": "owner",
80
- "outputs": [
81
- {
82
- "internalType": "address",
83
- "name": "",
84
- "type": "address"
85
- }
86
- ],
87
- "stateMutability": "view",
88
- "type": "function"
89
- },
90
- {
91
- "inputs": [
92
- {
93
- "internalType": "address",
94
- "name": "wallet",
95
- "type": "address"
96
- },
97
- {
98
- "internalType": "uint256",
99
- "name": "score",
100
- "type": "uint256"
101
- },
102
- {
103
- "internalType": "string",
104
- "name": "riskLevel",
105
- "type": "string"
106
- },
107
- {
108
- "internalType": "string",
109
- "name": "recommendation",
110
- "type": "string"
111
- }
112
- ],
113
- "name": "publish",
114
- "outputs": [],
115
- "stateMutability": "nonpayable",
116
- "type": "function"
117
- },
118
- {
119
- "inputs": [
120
- {
121
- "internalType": "address",
122
- "name": "wallet",
123
- "type": "address"
124
- }
125
- ],
126
- "name": "query",
127
- "outputs": [
128
- {
129
- "components": [
130
- {
131
- "internalType": "uint256",
132
- "name": "score",
133
- "type": "uint256"
134
- },
135
- {
136
- "internalType": "string",
137
- "name": "riskLevel",
138
- "type": "string"
139
- },
140
- {
141
- "internalType": "string",
142
- "name": "recommendation",
143
- "type": "string"
144
- },
145
- {
146
- "internalType": "uint256",
147
- "name": "timestamp",
148
- "type": "uint256"
149
- },
150
- {
151
- "internalType": "address",
152
- "name": "assessedBy",
153
- "type": "address"
154
- }
155
- ],
156
- "internalType": "struct RiskRegistry.RiskRecord",
157
- "name": "",
158
- "type": "tuple"
159
- }
160
- ],
161
- "stateMutability": "view",
162
- "type": "function"
163
- },
164
- {
165
- "inputs": [
166
- {
167
- "internalType": "address",
168
- "name": "",
169
- "type": "address"
170
- }
171
- ],
172
- "name": "registry",
173
- "outputs": [
174
- {
175
- "internalType": "uint256",
176
- "name": "score",
177
- "type": "uint256"
178
- },
179
- {
180
- "internalType": "string",
181
- "name": "riskLevel",
182
- "type": "string"
183
- },
184
- {
185
- "internalType": "string",
186
- "name": "recommendation",
187
- "type": "string"
188
- },
189
- {
190
- "internalType": "uint256",
191
- "name": "timestamp",
192
- "type": "uint256"
193
- },
194
- {
195
- "internalType": "address",
196
- "name": "assessedBy",
197
- "type": "address"
198
- }
199
- ],
200
- "stateMutability": "view",
201
- "type": "function"
202
- },
203
- {
204
- "inputs": [
205
- {
206
- "internalType": "address",
207
- "name": "agent",
208
- "type": "address"
209
- },
210
- {
211
- "internalType": "bool",
212
- "name": "status",
213
- "type": "bool"
214
- }
215
- ],
216
- "name": "setAuthorizedAgent",
217
- "outputs": [],
218
- "stateMutability": "nonpayable",
219
- "type": "function"
220
- }
221
- ],
222
- "bytecode": "0x6080604052348015600e575f5ffd5b505f80546001600160a01b0319163390811782558152600160208190526040909120805460ff19169091179055610acd806100485f395ff3fe608060405234801561000f575f5ffd5b5060043610610060575f3560e01c8063038defd7146100645780630e273811146100915780638da5cb5b146100a6578063cf78537f146100d0578063d4fc9fc6146100e3578063efd7606514610103575b5f5ffd5b6100776100723660046106dd565b610135565b60405161008895949392919061072b565b60405180910390f35b6100a461009f366004610778565b610279565b005b5f546100b8906001600160a01b031681565b6040516001600160a01b039091168152602001610088565b6100a46100de3660046107f6565b610343565b6100f66100f13660046106dd565b61051a565b604051610088919061087f565b6101256101113660046106dd565b60016020525f908152604090205460ff1681565b6040519015158152602001610088565b60026020525f908152604090208054600182018054919291610156906108ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610182906108ed565b80156101cd5780601f106101a4576101008083540402835291602001916101cd565b820191905f5260205f20905b8154815290600101906020018083116101b057829003601f168201915b5050505050908060020180546101e2906108ed565b80601f016020809104026020016040519081016040528092919081815260200182805461020e906108ed565b80156102595780601f1061023057610100808354040283529160200191610259565b820191905f5260205f20905b81548152906001019060200180831161023c57829003601f168201915b5050505060038301546004909301549192916001600160a01b0316905085565b5f546001600160a01b031633146102e55760405162461bcd60e51b815260206004820152602560248201527f5269736b52656769737472793a2063616c6c6572206973206e6f74207468652060448201526437bbb732b960d91b60648201526084015b60405180910390fd5b6001600160a01b0382165f81815260016020908152604091829020805460ff191685151590811790915591519182527f1b06338d0edf2ba8ccee31e466ab37b376418209af6a85c55c51e89a51e33bde910160405180910390a25050565b335f9081526001602052604090205460ff168061036957505f546001600160a01b031633145b6103cd5760405162461bcd60e51b815260206004820152602f60248201527f5269736b52656769737472793a2063616c6c6572206973206e6f7420616e206160448201526e1d5d1a1bdc9a5e9959081859d95b9d608a1b60648201526084016102dc565b6040518060a0016040528086815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250604080516020601f8601819004810282018101909252848152918101919085908590819084018382808284375f920182905250938552505042602080850191909152336040948501526001600160a01b038b1683526002815292909120835181559183015160018301915061048b9082610990565b50604082015160028201906104a09082610990565b5060608201516003820155608090910151600490910180546001600160a01b0319166001600160a01b03928316179055604051908716907ff1540e034908b7aedb3f7cc639f04615bf51f301d55b49f7b786fbfc97ba144e9061050a908890889088903390610a4f565b60405180910390a2505050505050565b6105526040518060a001604052805f815260200160608152602001606081526020015f81526020015f6001600160a01b031681525090565b6001600160a01b0382165f90815260026020908152604091829020825160a0810190935280548352600181018054919284019161058e906108ed565b80601f01602080910402602001604051908101604052809291908181526020018280546105ba906108ed565b80156106055780601f106105dc57610100808354040283529160200191610605565b820191905f5260205f20905b8154815290600101906020018083116105e857829003601f168201915b5050505050815260200160028201805461061e906108ed565b80601f016020809104026020016040519081016040528092919081815260200182805461064a906108ed565b80156106955780601f1061066c57610100808354040283529160200191610695565b820191905f5260205f20905b81548152906001019060200180831161067857829003601f168201915b5050509183525050600382015460208201526004909101546001600160a01b031660409091015292915050565b80356001600160a01b03811681146106d8575f5ffd5b919050565b5f602082840312156106ed575f5ffd5b6106f6826106c2565b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b85815260a060208201525f61074360a08301876106fd565b828103604084015261075581876106fd565b606084019590955250506001600160a01b03919091166080909101529392505050565b5f5f60408385031215610789575f5ffd5b610792836106c2565b9150602083013580151581146107a6575f5ffd5b809150509250929050565b5f5f83601f8401126107c1575f5ffd5b50813567ffffffffffffffff8111156107d8575f5ffd5b6020830191508360208285010111156107ef575f5ffd5b9250929050565b5f5f5f5f5f5f6080878903121561080b575f5ffd5b610814876106c2565b955060208701359450604087013567ffffffffffffffff811115610836575f5ffd5b61084289828a016107b1565b909550935050606087013567ffffffffffffffff811115610861575f5ffd5b61086d89828a016107b1565b979a9699509497509295939492505050565b60208152815160208201525f602083015160a060408401526108a460c08401826106fd565b90506040840151601f198483030160608501526108c182826106fd565b6060860151608086810191909152909501516001600160a01b031660a090940193909352509192915050565b600181811c9082168061090157607f821691505b60208210810361091f57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52604160045260245ffd5b601f82111561098b578282111561098b57805f5260205f20601f840160051c602085101561096457505f5b90810190601f840160051c035f5b81811015610987575f83820155600101610972565b5050505b505050565b815167ffffffffffffffff8111156109aa576109aa610925565b6109be816109b884546108ed565b84610939565b6020601f8211600181146109f0575f83156109d95750848201515b5f19600385901b1c1916600184901b178455610a48565b5f84815260208120601f198516915b82811015610a1f57878501518255602094850194600190920191016109ff565b5084821015610a3c57868401515f19600387901b60f8161c191681555b505060018360011b0184555b5050505050565b84815260606020820152826060820152828460808301375f8184016080908101919091526001600160a01b03929092166040820152601f909201601f1916909101019291505056fea264697066735822122080db3ef6d92b3c79716ffa2db8ddca83c100456ec5cabfa8261d6c4e5c8dac9464736f6c63430008230033"
223
- }