safehands-pharos 1.1.1 → 1.2.3

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 (175) hide show
  1. package/.env.example +26 -0
  2. package/README.md +311 -350
  3. package/contracts/RiskRegistry.json +75 -1
  4. package/contracts/RiskRegistry.sol +29 -1
  5. package/dist/cli.d.ts +6 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +91 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/demo.d.ts +2 -0
  10. package/dist/demo.d.ts.map +1 -0
  11. package/dist/demo.js +172 -0
  12. package/dist/demo.js.map +1 -0
  13. package/dist/index.js +181 -169
  14. package/dist/index.js.map +1 -1
  15. package/dist/init.d.ts +2 -0
  16. package/dist/init.d.ts.map +1 -0
  17. package/dist/init.js +66 -0
  18. package/dist/init.js.map +1 -0
  19. package/dist/lib/constants.d.ts +122 -7
  20. package/dist/lib/constants.d.ts.map +1 -1
  21. package/dist/lib/constants.js +139 -13
  22. package/dist/lib/constants.js.map +1 -1
  23. package/dist/lib/dodoApi.d.ts +14 -0
  24. package/dist/lib/dodoApi.d.ts.map +1 -1
  25. package/dist/lib/dodoApi.js +78 -22
  26. package/dist/lib/dodoApi.js.map +1 -1
  27. package/dist/lib/http.d.ts +15 -0
  28. package/dist/lib/http.d.ts.map +1 -0
  29. package/dist/lib/http.js +119 -0
  30. package/dist/lib/http.js.map +1 -0
  31. package/dist/lib/pharosClient.d.ts +4 -3
  32. package/dist/lib/pharosClient.d.ts.map +1 -1
  33. package/dist/lib/pharosClient.js +8 -5
  34. package/dist/lib/pharosClient.js.map +1 -1
  35. package/dist/lib/policy/actionPolicyEngine.d.ts +54 -0
  36. package/dist/lib/policy/actionPolicyEngine.d.ts.map +1 -0
  37. package/dist/lib/policy/actionPolicyEngine.js +213 -0
  38. package/dist/lib/policy/actionPolicyEngine.js.map +1 -0
  39. package/dist/lib/signer/index.d.ts +25 -0
  40. package/dist/lib/signer/index.d.ts.map +1 -0
  41. package/dist/lib/signer/index.js +90 -0
  42. package/dist/lib/signer/index.js.map +1 -0
  43. package/dist/lib/testDodoLive.d.ts +2 -0
  44. package/dist/lib/testDodoLive.d.ts.map +1 -0
  45. package/dist/lib/testDodoLive.js +105 -0
  46. package/dist/lib/testDodoLive.js.map +1 -0
  47. package/dist/lib/testLiveSafehands.d.ts +2 -0
  48. package/dist/lib/testLiveSafehands.d.ts.map +1 -0
  49. package/dist/lib/testLiveSafehands.js +93 -0
  50. package/dist/lib/testLiveSafehands.js.map +1 -0
  51. package/dist/lib/testRpcLive.d.ts +2 -0
  52. package/dist/lib/testRpcLive.d.ts.map +1 -0
  53. package/dist/lib/testRpcLive.js +89 -0
  54. package/dist/lib/testRpcLive.js.map +1 -0
  55. package/dist/lib/testTools.js +363 -355
  56. package/dist/lib/testTools.js.map +1 -1
  57. package/dist/lib/testX402Live.d.ts +2 -0
  58. package/dist/lib/testX402Live.d.ts.map +1 -0
  59. package/dist/lib/testX402Live.js +160 -0
  60. package/dist/lib/testX402Live.js.map +1 -0
  61. package/dist/lib/toolResponse.d.ts +26 -0
  62. package/dist/lib/toolResponse.d.ts.map +1 -0
  63. package/dist/lib/toolResponse.js +54 -0
  64. package/dist/lib/toolResponse.js.map +1 -0
  65. package/dist/lib/wallet/index.d.ts +19 -0
  66. package/dist/lib/wallet/index.d.ts.map +1 -0
  67. package/dist/lib/wallet/index.js +71 -0
  68. package/dist/lib/wallet/index.js.map +1 -0
  69. package/dist/tools/approveToken.d.ts +19 -32
  70. package/dist/tools/approveToken.d.ts.map +1 -1
  71. package/dist/tools/approveToken.js +44 -19
  72. package/dist/tools/approveToken.js.map +1 -1
  73. package/dist/tools/assessRisk.d.ts +22 -9
  74. package/dist/tools/assessRisk.d.ts.map +1 -1
  75. package/dist/tools/assessRisk.js +32 -9
  76. package/dist/tools/assessRisk.js.map +1 -1
  77. package/dist/tools/checkAllowance.d.ts +6 -6
  78. package/dist/tools/checkTokenSecurity.d.ts +9 -16
  79. package/dist/tools/checkTokenSecurity.d.ts.map +1 -1
  80. package/dist/tools/checkTokenSecurity.js +17 -22
  81. package/dist/tools/checkTokenSecurity.js.map +1 -1
  82. package/dist/tools/createAgentWallet.d.ts +27 -0
  83. package/dist/tools/createAgentWallet.d.ts.map +1 -0
  84. package/dist/tools/createAgentWallet.js +60 -0
  85. package/dist/tools/createAgentWallet.js.map +1 -0
  86. package/dist/tools/estimateGas.d.ts +31 -21
  87. package/dist/tools/estimateGas.d.ts.map +1 -1
  88. package/dist/tools/estimateGas.js +91 -95
  89. package/dist/tools/estimateGas.js.map +1 -1
  90. package/dist/tools/executeSwap.d.ts +13 -47
  91. package/dist/tools/executeSwap.d.ts.map +1 -1
  92. package/dist/tools/executeSwap.js +69 -46
  93. package/dist/tools/executeSwap.js.map +1 -1
  94. package/dist/tools/explainRisk.d.ts +30 -0
  95. package/dist/tools/explainRisk.d.ts.map +1 -0
  96. package/dist/tools/explainRisk.js +33 -0
  97. package/dist/tools/explainRisk.js.map +1 -0
  98. package/dist/tools/getAgentWallet.d.ts +22 -0
  99. package/dist/tools/getAgentWallet.d.ts.map +1 -0
  100. package/dist/tools/getAgentWallet.js +28 -0
  101. package/dist/tools/getAgentWallet.js.map +1 -0
  102. package/dist/tools/getAgentWalletBalance.d.ts +12 -0
  103. package/dist/tools/getAgentWalletBalance.d.ts.map +1 -0
  104. package/dist/tools/getAgentWalletBalance.js +71 -0
  105. package/dist/tools/getAgentWalletBalance.js.map +1 -0
  106. package/dist/tools/getExecutionHistory.d.ts +4 -4
  107. package/dist/tools/getGasPrice.d.ts +26 -8
  108. package/dist/tools/getGasPrice.d.ts.map +1 -1
  109. package/dist/tools/getGasPrice.js +43 -35
  110. package/dist/tools/getGasPrice.js.map +1 -1
  111. package/dist/tools/getPoolInfo.d.ts +47 -59
  112. package/dist/tools/getPoolInfo.d.ts.map +1 -1
  113. package/dist/tools/getPoolInfo.js +96 -57
  114. package/dist/tools/getPoolInfo.js.map +1 -1
  115. package/dist/tools/getTokenPrice.d.ts +95 -9
  116. package/dist/tools/getTokenPrice.d.ts.map +1 -1
  117. package/dist/tools/getTokenPrice.js +95 -56
  118. package/dist/tools/getTokenPrice.js.map +1 -1
  119. package/dist/tools/getWalletBalance.d.ts +40 -11
  120. package/dist/tools/getWalletBalance.d.ts.map +1 -1
  121. package/dist/tools/getWalletBalance.js +64 -47
  122. package/dist/tools/getWalletBalance.js.map +1 -1
  123. package/dist/tools/publishRiskScore.d.ts +12 -22
  124. package/dist/tools/publishRiskScore.d.ts.map +1 -1
  125. package/dist/tools/publishRiskScore.js +34 -18
  126. package/dist/tools/publishRiskScore.js.map +1 -1
  127. package/dist/tools/queryRiskRegistry.d.ts +3 -3
  128. package/dist/tools/safehandsPreflightCheck.d.ts +78 -0
  129. package/dist/tools/safehandsPreflightCheck.d.ts.map +1 -0
  130. package/dist/tools/safehandsPreflightCheck.js +48 -0
  131. package/dist/tools/safehandsPreflightCheck.js.map +1 -0
  132. package/dist/tools/safehandsRiskReport.d.ts +82 -0
  133. package/dist/tools/safehandsRiskReport.d.ts.map +1 -0
  134. package/dist/tools/safehandsRiskReport.js +29 -0
  135. package/dist/tools/safehandsRiskReport.js.map +1 -0
  136. package/dist/tools/safehandsSafeExecute.d.ts +21 -0
  137. package/dist/tools/safehandsSafeExecute.d.ts.map +1 -0
  138. package/dist/tools/safehandsSafeExecute.js +76 -0
  139. package/dist/tools/safehandsSafeExecute.js.map +1 -0
  140. package/dist/tools/safehandsWalletHealth.d.ts +15 -0
  141. package/dist/tools/safehandsWalletHealth.d.ts.map +1 -0
  142. package/dist/tools/safehandsWalletHealth.js +104 -0
  143. package/dist/tools/safehandsWalletHealth.js.map +1 -0
  144. package/dist/tools/safehandsX402Preflight.d.ts +27 -0
  145. package/dist/tools/safehandsX402Preflight.d.ts.map +1 -0
  146. package/dist/tools/safehandsX402Preflight.js +66 -0
  147. package/dist/tools/safehandsX402Preflight.js.map +1 -0
  148. package/dist/tools/sendPayment.d.ts +13 -53
  149. package/dist/tools/sendPayment.d.ts.map +1 -1
  150. package/dist/tools/sendPayment.js +55 -48
  151. package/dist/tools/sendPayment.js.map +1 -1
  152. package/dist/tools/simulateTransaction.d.ts +4 -4
  153. package/dist/tools/tokenRegistryStatus.d.ts +27 -0
  154. package/dist/tools/tokenRegistryStatus.d.ts.map +1 -0
  155. package/dist/tools/tokenRegistryStatus.js +97 -0
  156. package/dist/tools/tokenRegistryStatus.js.map +1 -0
  157. package/dist/tools/x402PayAndFetch.d.ts +40 -22
  158. package/dist/tools/x402PayAndFetch.d.ts.map +1 -1
  159. package/dist/tools/x402PayAndFetch.js +115 -45
  160. package/dist/tools/x402PayAndFetch.js.map +1 -1
  161. package/dist/x402Server.js +149 -115
  162. package/dist/x402Server.js.map +1 -1
  163. package/examples/pharos-skill-engine/SKILL.safehands.md +85 -0
  164. package/examples/pharos-skill-engine/assets/safehands/example-actions.json +49 -0
  165. package/examples/pharos-skill-engine/assets/safehands/policy-defaults.json +11 -0
  166. package/examples/pharos-skill-engine/references/safehands.md +345 -0
  167. package/examples/scenario-hack.ts +38 -0
  168. package/package.json +19 -5
  169. package/skill/SKILL.md +127 -0
  170. package/skill/assets/safehands/example-actions.json +49 -0
  171. package/skill/assets/safehands/policy-defaults.json +11 -0
  172. package/skill/references/safehands.md +345 -0
  173. package/.agents/skill/safehands/SKILL.md +0 -200
  174. package/.agents/skill/safehands/assets/networks.json +0 -24
  175. package/.agents/skill/safehands/assets/tokens.json +0 -60
@@ -1,5 +1,29 @@
1
1
  {
2
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
+ },
3
27
  {
4
28
  "anonymous": false,
5
29
  "inputs": [
@@ -31,6 +55,38 @@
31
55
  "name": "RiskPublished",
32
56
  "type": "event"
33
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
+ },
34
90
  {
35
91
  "inputs": [
36
92
  {
@@ -143,7 +199,25 @@
143
199
  ],
144
200
  "stateMutability": "view",
145
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"
146
220
  }
147
221
  ],
148
- "bytecode": "0x6080604052348015600e575f5ffd5b5061089e8061001c5f395ff3fe608060405234801561000f575f5ffd5b506004361061003f575f3560e01c8063038defd714610043578063cf78537f14610070578063d4fc9fc614610085575b5f5ffd5b6100566100513660046104f6565b6100a5565b604051610067959493929190610544565b60405180910390f35b61008361007e3660046105d6565b6101e9565b005b6100986100933660046104f6565b610335565b604051610067919061065f565b5f60208190529081526040902080546001820180549192916100c6906106cd565b80601f01602080910402602001604051908101604052809291908181526020018280546100f2906106cd565b801561013d5780601f106101145761010080835404028352916020019161013d565b820191905f5260205f20905b81548152906001019060200180831161012057829003601f168201915b505050505090806002018054610152906106cd565b80601f016020809104026020016040519081016040528092919081815260200182805461017e906106cd565b80156101c95780601f106101a0576101008083540402835291602001916101c9565b820191905f5260205f20905b8154815290600101906020018083116101ac57829003601f168201915b5050505060038301546004909301549192916001600160a01b0316905085565b6040518060a0016040528086815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250604080516020601f8601819004810282018101909252848152918101919085908590819084018382808284375f920182905250938552505042602080850191909152336040948501526001600160a01b038b1683528281529290912083518155918301516001830191506102a69082610765565b50604082015160028201906102bb9082610765565b5060608201516003820155608090910151600490910180546001600160a01b0319166001600160a01b03928316179055604051908716907ff1540e034908b7aedb3f7cc639f04615bf51f301d55b49f7b786fbfc97ba144e90610325908890889088903390610820565b60405180910390a2505050505050565b61036d6040518060a001604052805f815260200160608152602001606081526020015f81526020015f6001600160a01b031681525090565b6001600160a01b0382165f9081526020818152604091829020825160a081019093528054835260018101805491928401916103a7906106cd565b80601f01602080910402602001604051908101604052809291908181526020018280546103d3906106cd565b801561041e5780601f106103f55761010080835404028352916020019161041e565b820191905f5260205f20905b81548152906001019060200180831161040157829003601f168201915b50505050508152602001600282018054610437906106cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610463906106cd565b80156104ae5780601f10610485576101008083540402835291602001916104ae565b820191905f5260205f20905b81548152906001019060200180831161049157829003601f168201915b5050509183525050600382015460208201526004909101546001600160a01b031660409091015292915050565b80356001600160a01b03811681146104f1575f5ffd5b919050565b5f60208284031215610506575f5ffd5b61050f826104db565b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b85815260a060208201525f61055c60a0830187610516565b828103604084015261056e8187610516565b606084019590955250506001600160a01b03919091166080909101529392505050565b5f5f83601f8401126105a1575f5ffd5b50813567ffffffffffffffff8111156105b8575f5ffd5b6020830191508360208285010111156105cf575f5ffd5b9250929050565b5f5f5f5f5f5f608087890312156105eb575f5ffd5b6105f4876104db565b955060208701359450604087013567ffffffffffffffff811115610616575f5ffd5b61062289828a01610591565b909550935050606087013567ffffffffffffffff811115610641575f5ffd5b61064d89828a01610591565b979a9699509497509295939492505050565b60208152815160208201525f602083015160a0604084015261068460c0840182610516565b90506040840151601f198483030160608501526106a18282610516565b6060860151608086810191909152909501516001600160a01b031660a090940193909352509192915050565b600181811c908216806106e157607f821691505b6020821081036106ff57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52604160045260245ffd5b601f82111561076057805f5260205f20601f840160051c8101602085101561073e5750805b601f840160051c820191505b8181101561075d575f815560010161074a565b50505b505050565b815167ffffffffffffffff81111561077f5761077f610705565b6107938161078d84546106cd565b84610719565b6020601f8211600181146107c5575f83156107ae5750848201515b5f19600385901b1c1916600184901b17845561075d565b5f84815260208120601f198516915b828110156107f457878501518255602094850194600190920191016107d4565b508482101561081157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b84815260606020820152826060820152828460808301375f8184016080908101919091526001600160a01b03929092166040820152601f909201601f1916909101019291505056fea2646970667358221220ac15ca5780878f13b652a2641e23f1af863babde9f1a34b0b732780d086d0d5a64736f6c634300081c0033"
222
+ "bytecode": "0x6080604052348015600e575f5ffd5b505f80546001600160a01b0319163390811782558152600160208190526040909120805460ff19169091179055610acd806100485f395ff3fe608060405234801561000f575f5ffd5b5060043610610060575f3560e01c8063038defd7146100645780630e273811146100915780638da5cb5b146100a6578063cf78537f146100d0578063d4fc9fc6146100e3578063efd7606514610103575b5f5ffd5b6100776100723660046106dd565b610135565b60405161008895949392919061072b565b60405180910390f35b6100a461009f366004610778565b610279565b005b5f546100b8906001600160a01b031681565b6040516001600160a01b039091168152602001610088565b6100a46100de3660046107f6565b610343565b6100f66100f13660046106dd565b61051a565b604051610088919061087f565b6101256101113660046106dd565b60016020525f908152604090205460ff1681565b6040519015158152602001610088565b60026020525f908152604090208054600182018054919291610156906108ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610182906108ed565b80156101cd5780601f106101a4576101008083540402835291602001916101cd565b820191905f5260205f20905b8154815290600101906020018083116101b057829003601f168201915b5050505050908060020180546101e2906108ed565b80601f016020809104026020016040519081016040528092919081815260200182805461020e906108ed565b80156102595780601f1061023057610100808354040283529160200191610259565b820191905f5260205f20905b81548152906001019060200180831161023c57829003601f168201915b5050505060038301546004909301549192916001600160a01b0316905085565b5f546001600160a01b031633146102e55760405162461bcd60e51b815260206004820152602560248201527f5269736b52656769737472793a2063616c6c6572206973206e6f74207468652060448201526437bbb732b960d91b60648201526084015b60405180910390fd5b6001600160a01b0382165f81815260016020908152604091829020805460ff191685151590811790915591519182527f1b06338d0edf2ba8ccee31e466ab37b376418209af6a85c55c51e89a51e33bde910160405180910390a25050565b335f9081526001602052604090205460ff168061036957505f546001600160a01b031633145b6103cd5760405162461bcd60e51b815260206004820152602f60248201527f5269736b52656769737472793a2063616c6c6572206973206e6f7420616e206160448201526e1d5d1a1bdc9a5e9959081859d95b9d608a1b60648201526084016102dc565b6040518060a0016040528086815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250604080516020601f8601819004810282018101909252848152918101919085908590819084018382808284375f920182905250938552505042602080850191909152336040948501526001600160a01b038b1683526002815292909120835181559183015160018301915061048b9082610990565b50604082015160028201906104a09082610990565b5060608201516003820155608090910151600490910180546001600160a01b0319166001600160a01b03928316179055604051908716907ff1540e034908b7aedb3f7cc639f04615bf51f301d55b49f7b786fbfc97ba144e9061050a908890889088903390610a4f565b60405180910390a2505050505050565b6105526040518060a001604052805f815260200160608152602001606081526020015f81526020015f6001600160a01b031681525090565b6001600160a01b0382165f90815260026020908152604091829020825160a0810190935280548352600181018054919284019161058e906108ed565b80601f01602080910402602001604051908101604052809291908181526020018280546105ba906108ed565b80156106055780601f106105dc57610100808354040283529160200191610605565b820191905f5260205f20905b8154815290600101906020018083116105e857829003601f168201915b5050505050815260200160028201805461061e906108ed565b80601f016020809104026020016040519081016040528092919081815260200182805461064a906108ed565b80156106955780601f1061066c57610100808354040283529160200191610695565b820191905f5260205f20905b81548152906001019060200180831161067857829003601f168201915b5050509183525050600382015460208201526004909101546001600160a01b031660409091015292915050565b80356001600160a01b03811681146106d8575f5ffd5b919050565b5f602082840312156106ed575f5ffd5b6106f6826106c2565b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b85815260a060208201525f61074360a08301876106fd565b828103604084015261075581876106fd565b606084019590955250506001600160a01b03919091166080909101529392505050565b5f5f60408385031215610789575f5ffd5b610792836106c2565b9150602083013580151581146107a6575f5ffd5b809150509250929050565b5f5f83601f8401126107c1575f5ffd5b50813567ffffffffffffffff8111156107d8575f5ffd5b6020830191508360208285010111156107ef575f5ffd5b9250929050565b5f5f5f5f5f5f6080878903121561080b575f5ffd5b610814876106c2565b955060208701359450604087013567ffffffffffffffff811115610836575f5ffd5b61084289828a016107b1565b909550935050606087013567ffffffffffffffff811115610861575f5ffd5b61086d89828a016107b1565b979a9699509497509295939492505050565b60208152815160208201525f602083015160a060408401526108a460c08401826106fd565b90506040840151601f198483030160608501526108c182826106fd565b6060860151608086810191909152909501516001600160a01b031660a090940193909352509192915050565b600181811c9082168061090157607f821691505b60208210810361091f57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52604160045260245ffd5b601f82111561098b578282111561098b57805f5260205f20601f840160051c602085101561096457505f5b90810190601f840160051c035f5b81811015610987575f83820155600101610972565b5050505b505050565b815167ffffffffffffffff8111156109aa576109aa610925565b6109be816109b884546108ed565b84610939565b6020601f8211600181146109f0575f83156109d95750848201515b5f19600385901b1c1916600184901b178455610a48565b5f84815260208120601f198516915b82811015610a1f57878501518255602094850194600190920191016109ff565b5084821015610a3c57868401515f19600387901b60f8161c191681555b505060018360011b0184555b5050505050565b84815260606020820152826060820152828460808301375f8184016080908101919091526001600160a01b03929092166040820152601f909201601f1916909101019291505056fea264697066735822122080db3ef6d92b3c79716ffa2db8ddca83c100456ec5cabfa8261d6c4e5c8dac9464736f6c63430008230033"
149
223
  }
@@ -2,6 +2,11 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  contract RiskRegistry {
5
+ address public owner;
6
+
7
+ // Mapping of authorized AI Agent addresses allowed to publish scores
8
+ mapping(address => bool) public authorizedAgents;
9
+
5
10
  struct RiskRecord {
6
11
  uint256 score;
7
12
  string riskLevel;
@@ -13,13 +18,36 @@ contract RiskRegistry {
13
18
  mapping(address => RiskRecord) public registry;
14
19
 
15
20
  event RiskPublished(address indexed wallet, uint256 score, string riskLevel, address assessedBy);
21
+ event AgentAuthorized(address indexed agent, bool status);
22
+
23
+ modifier onlyOwner() {
24
+ require(msg.sender == owner, "RiskRegistry: caller is not the owner");
25
+ _;
26
+ }
27
+
28
+ modifier onlyAuthorized() {
29
+ require(authorizedAgents[msg.sender] || msg.sender == owner, "RiskRegistry: caller is not an authorized agent");
30
+ _;
31
+ }
32
+
33
+ constructor() {
34
+ owner = msg.sender;
35
+ authorizedAgents[msg.sender] = true; // Deployer is automatically authorized
36
+ }
37
+
38
+ // Owner can authorize other AI Agents to publish to the registry
39
+ function setAuthorizedAgent(address agent, bool status) external onlyOwner {
40
+ authorizedAgents[agent] = status;
41
+ emit AgentAuthorized(agent, status);
42
+ }
16
43
 
44
+ // SECURITY UPDATE: Only authorized agents can publish risk scores now
17
45
  function publish(
18
46
  address wallet,
19
47
  uint256 score,
20
48
  string calldata riskLevel,
21
49
  string calldata recommendation
22
- ) external {
50
+ ) external onlyAuthorized {
23
51
  registry[wallet] = RiskRecord(score, riskLevel, recommendation, block.timestamp, msg.sender);
24
52
  emit RiskPublished(wallet, score, riskLevel, msg.sender);
25
53
  }
package/dist/cli.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ import { type ToolResponse } from "./lib/toolResponse.js";
2
+ export type SkillCliToolName = "safehands_preflight_check" | "safehands_x402_preflight" | "safehands_wallet_health" | "token_registry_status" | "explain_risk" | "safehands_risk_report" | "safehands_safe_execute";
3
+ export declare function getSkillCliToolNames(): string[];
4
+ export declare function invokeSkillCliTool(toolName: string, input: unknown): Promise<ToolResponse<unknown>>;
5
+ export declare function runSkillCli(argv: string[]): Promise<number>;
6
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAMA,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AASpE,MAAM,MAAM,gBAAgB,GACxB,2BAA2B,GAC3B,0BAA0B,GAC1B,yBAAyB,GACzB,uBAAuB,GACvB,cAAc,GACd,uBAAuB,GACvB,wBAAwB,CAAC;AAyC7B,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAE/C;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAuBzG;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BjE"}
package/dist/cli.js ADDED
@@ -0,0 +1,91 @@
1
+ // ─── SafeHands Skill Engine CLI Adapter ────────────────────────────────
2
+ // Terminal entrypoint used by Pharos Skill Engine reference files.
3
+ // It calls the same tool handlers as MCP registration and prints the
4
+ // standard SafeHands response envelope as JSON.
5
+ // ────────────────────────────────────────────────────────────────────────
6
+ import { fail, ok } from "./lib/toolResponse.js";
7
+ import { handleSafeHandsPreflightCheck } from "./tools/safehandsPreflightCheck.js";
8
+ import { handleSafeHandsX402Preflight } from "./tools/safehandsX402Preflight.js";
9
+ import { handleSafeHandsWalletHealth } from "./tools/safehandsWalletHealth.js";
10
+ import { handleTokenRegistryStatus } from "./tools/tokenRegistryStatus.js";
11
+ import { handleExplainRisk } from "./tools/explainRisk.js";
12
+ import { handleSafeHandsRiskReport } from "./tools/safehandsRiskReport.js";
13
+ import { handleSafeHandsSafeExecute } from "./tools/safehandsSafeExecute.js";
14
+ const SKILL_CLI_TOOLS = {
15
+ safehands_preflight_check: handleSafeHandsPreflightCheck,
16
+ safehands_x402_preflight: handleSafeHandsX402Preflight,
17
+ safehands_wallet_health: handleSafeHandsWalletHealth,
18
+ token_registry_status: handleTokenRegistryStatus,
19
+ explain_risk: handleExplainRisk,
20
+ safehands_risk_report: handleSafeHandsRiskReport,
21
+ safehands_safe_execute: handleSafeHandsSafeExecute,
22
+ };
23
+ function isStructuredResponse(value) {
24
+ return !!value && typeof value === "object" && "success" in value && "data" in value && "error" in value && "timestamp" in value;
25
+ }
26
+ function printJson(response) {
27
+ process.stdout.write(`${JSON.stringify(response, null, 2)}\n`);
28
+ }
29
+ function usage() {
30
+ const tools = Object.keys(SKILL_CLI_TOOLS).sort().join(", ");
31
+ return [
32
+ "Usage: npx safehands-pharos skill <tool_name> --input-json '<json>'",
33
+ "",
34
+ `Supported Skill Engine tools: ${tools}`,
35
+ "",
36
+ "Example:",
37
+ " npx safehands-pharos skill safehands_preflight_check --input-json '{\"actionType\":\"approve_token\",\"chainId\":688689,\"amount\":\"1\"}'",
38
+ ].join("\n");
39
+ }
40
+ function readInputJsonArg(argv) {
41
+ const positional = argv.indexOf("--input-json");
42
+ if (positional >= 0)
43
+ return argv[positional + 1] ?? null;
44
+ const prefixed = argv.find((arg) => arg.startsWith("--input-json="));
45
+ return prefixed ? prefixed.slice("--input-json=".length) : null;
46
+ }
47
+ export function getSkillCliToolNames() {
48
+ return Object.keys(SKILL_CLI_TOOLS).sort();
49
+ }
50
+ export async function invokeSkillCliTool(toolName, input) {
51
+ const handler = SKILL_CLI_TOOLS[toolName];
52
+ if (!handler) {
53
+ return fail("UNKNOWN_SKILL_TOOL", `Unknown SafeHands Skill Engine tool: ${toolName}. Supported tools: ${getSkillCliToolNames().join(", ")}`, false, "safehands_cli");
54
+ }
55
+ try {
56
+ const result = await handler(input);
57
+ if (isStructuredResponse(result))
58
+ return result;
59
+ return ok(result);
60
+ }
61
+ catch (err) {
62
+ return fail("TOOL_EXECUTION_FAILED", err instanceof Error ? err.message : String(err), false, toolName);
63
+ }
64
+ }
65
+ export async function runSkillCli(argv) {
66
+ const [toolName] = argv;
67
+ if (!toolName || toolName === "--help" || toolName === "-h") {
68
+ printJson(fail("CLI_USAGE_ERROR", usage(), false, "safehands_cli"));
69
+ return 2;
70
+ }
71
+ if (!SKILL_CLI_TOOLS[toolName]) {
72
+ printJson(await invokeSkillCliTool(toolName, {}));
73
+ return 2;
74
+ }
75
+ const rawJson = readInputJsonArg(argv.slice(1));
76
+ if (rawJson === null) {
77
+ printJson(fail("MISSING_INPUT_JSON", "Missing required --input-json '<json>' argument.", false, "safehands_cli"));
78
+ return 2;
79
+ }
80
+ let input;
81
+ try {
82
+ input = JSON.parse(rawJson);
83
+ }
84
+ catch (err) {
85
+ printJson(fail("INVALID_INPUT_JSON", err instanceof Error ? err.message : String(err), false, "safehands_cli"));
86
+ return 2;
87
+ }
88
+ printJson(await invokeSkillCliTool(toolName, input));
89
+ return 0;
90
+ }
91
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/demo.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare function runDemo(): Promise<void>;
2
+ //# sourceMappingURL=demo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":"AA4EA,wBAAsB,OAAO,kBA4G5B"}
package/dist/demo.js ADDED
@@ -0,0 +1,172 @@
1
+ // ─── SafeHands Deterministic Hackathon Demo ────────────────────────────
2
+ // Non-destructive demo for judges and reviewers. It uses offline/sample-safe
3
+ // paths and a local HTTP server only when explicitly allowed in-process.
4
+ // No real transaction is broadcast.
5
+ // ────────────────────────────────────────────────────────────────────────
6
+ import express from "express";
7
+ import { handleSafeHandsWalletHealth } from "./tools/safehandsWalletHealth.js";
8
+ import { handleSafeHandsPreflightCheck } from "./tools/safehandsPreflightCheck.js";
9
+ import { handleTokenRegistryStatus } from "./tools/tokenRegistryStatus.js";
10
+ import { handleSafeHandsX402Preflight } from "./tools/safehandsX402Preflight.js";
11
+ import { handleX402PayAndFetch } from "./tools/x402PayAndFetch.js";
12
+ import { handleSendPayment } from "./tools/sendPayment.js";
13
+ import { handleExplainRisk } from "./tools/explainRisk.js";
14
+ import { CHAIN_ID, PHAROS_ENVIRONMENT, USDC_ADDRESS } from "./lib/constants.js";
15
+ const RECIPIENT = "0x0000000000000000000000000000000000000001";
16
+ function section(title) {
17
+ console.log(`\n${"═".repeat(78)}`);
18
+ console.log(` ${title}`);
19
+ console.log("═".repeat(78));
20
+ }
21
+ function print(label, value) {
22
+ console.log(`\n${label}`);
23
+ console.log(JSON.stringify(value, null, 2));
24
+ }
25
+ function setEnv(key, value) {
26
+ const previous = process.env[key];
27
+ if (value === undefined)
28
+ delete process.env[key];
29
+ else
30
+ process.env[key] = value;
31
+ return () => {
32
+ if (previous === undefined)
33
+ delete process.env[key];
34
+ else
35
+ process.env[key] = previous;
36
+ };
37
+ }
38
+ async function withLocalX402DemoServer(handler) {
39
+ const app = express();
40
+ app.get("/supported", (_req, res) => {
41
+ res.json({
42
+ ok: true,
43
+ demo: true,
44
+ paymentRequired: false,
45
+ endpoints: ["/supported", "/paid"],
46
+ network: `eip155:${CHAIN_ID}`,
47
+ });
48
+ });
49
+ app.get("/paid", (_req, res) => {
50
+ res.status(402).json({
51
+ error: "Payment Required",
52
+ demo: true,
53
+ price: "0.001",
54
+ asset: USDC_ADDRESS,
55
+ network: `eip155:${CHAIN_ID}`,
56
+ });
57
+ });
58
+ const server = await new Promise((resolve) => {
59
+ const instance = app.listen(0, "127.0.0.1", () => resolve(instance));
60
+ });
61
+ try {
62
+ const address = server.address();
63
+ if (!address || typeof address === "string")
64
+ throw new Error("Failed to open local demo server");
65
+ return await handler(`http://127.0.0.1:${address.port}`);
66
+ }
67
+ finally {
68
+ if ("closeAllConnections" in server)
69
+ server.closeAllConnections();
70
+ await new Promise((resolve, reject) => server.close((err) => (err ? reject(err) : resolve())));
71
+ }
72
+ }
73
+ export async function runDemo() {
74
+ const restoreWalletMode = setEnv("WALLET_MODE", process.env.WALLET_MODE || "none");
75
+ const restoreWrite = setEnv("WRITE_TOOLS_ENABLED", "false");
76
+ const restorePrivateKey = setEnv("PRIVATE_KEY", undefined);
77
+ const restoreX402Signer = setEnv("X402_SIGNER_PRIVATE_KEY", undefined);
78
+ try {
79
+ console.log("\nšŸ›”ļø SafeHands-Pharos Deterministic Demo");
80
+ console.log(` Environment: ${PHAROS_ENVIRONMENT}`);
81
+ console.log(` Chain ID: ${CHAIN_ID}`);
82
+ console.log(" Mode: non-destructive demo, no real transactions broadcast");
83
+ section("1. Wallet Health");
84
+ print("safehands_wallet_health", await handleSafeHandsWalletHealth({}));
85
+ section("2. Safe Payment Preflight: ALLOW");
86
+ print("safehands_preflight_check", await handleSafeHandsPreflightCheck({
87
+ actionType: "send_payment",
88
+ chainId: CHAIN_ID,
89
+ isMainnet: false,
90
+ amount: "0.001",
91
+ amountUnit: "PHRS",
92
+ recipient: RECIPIENT,
93
+ }));
94
+ section("3. Unlimited Approval Preflight: BLOCK");
95
+ const blockedApproval = await handleSafeHandsPreflightCheck({
96
+ actionType: "approve_token",
97
+ chainId: CHAIN_ID,
98
+ isMainnet: false,
99
+ approvalAmount: "max",
100
+ spender: RECIPIENT,
101
+ });
102
+ print("safehands_preflight_check", blockedApproval);
103
+ section("4. Token Registry Status");
104
+ print("token_registry_status", await handleTokenRegistryStatus({ tokenAddress: USDC_ADDRESS }));
105
+ section("5. x402 Preflight Without Private Key");
106
+ await withLocalX402DemoServer(async (baseUrl) => {
107
+ const restoreLocal = setEnv("ALLOW_LOCAL_X402_FETCH", "true");
108
+ try {
109
+ print("safehands_x402_preflight", await handleSafeHandsX402Preflight({
110
+ url: `${baseUrl}/paid`,
111
+ paymentAmountUsdc: "0.001",
112
+ probeEndpoint: false,
113
+ }));
114
+ }
115
+ finally {
116
+ restoreLocal();
117
+ }
118
+ });
119
+ section("6. x402 /supported Free Endpoint Without Private Key");
120
+ await withLocalX402DemoServer(async (baseUrl) => {
121
+ const restoreLocal = setEnv("ALLOW_LOCAL_X402_FETCH", "true");
122
+ try {
123
+ print("x402_pay_and_fetch free endpoint", await handleX402PayAndFetch({ url: `${baseUrl}/supported` }));
124
+ }
125
+ finally {
126
+ restoreLocal();
127
+ }
128
+ });
129
+ section("7. x402 Paid Endpoint Without Signer");
130
+ await withLocalX402DemoServer(async (baseUrl) => {
131
+ const restoreLocal = setEnv("ALLOW_LOCAL_X402_FETCH", "true");
132
+ try {
133
+ print("x402_pay_and_fetch paid endpoint", await handleX402PayAndFetch({ url: `${baseUrl}/paid`, maxPaymentUsdc: "0.001" }));
134
+ }
135
+ finally {
136
+ restoreLocal();
137
+ }
138
+ });
139
+ section("8. SSRF_BLOCKED");
140
+ const restoreLocalBlocked = setEnv("ALLOW_LOCAL_X402_FETCH", undefined);
141
+ try {
142
+ print("safehands_x402_preflight localhost blocked", await handleSafeHandsX402Preflight({ url: "http://127.0.0.1:4021/supported" }));
143
+ }
144
+ finally {
145
+ restoreLocalBlocked();
146
+ }
147
+ section("9. WRITE_TOOLS_DISABLED");
148
+ print("send_payment guarded", await handleSendPayment({ toAddress: RECIPIENT, amount: "0.001" }));
149
+ section("10. Human-Readable Risk Explanation");
150
+ print("explain_risk", await handleExplainRisk({
151
+ decision: "BLOCK",
152
+ riskLevel: "HIGH",
153
+ reasons: ["Unlimited approval requested"],
154
+ requiredActions: ["Use a limited approval amount before approving a spender"],
155
+ }));
156
+ section("Demo Complete");
157
+ console.log("SafeHands demonstrated wallet health, ALLOW/BLOCK policy, token registry, x402 safety, SSRF blocking, write-tool guardrails, and explainable risk output.");
158
+ }
159
+ finally {
160
+ restoreWalletMode();
161
+ restoreWrite();
162
+ restorePrivateKey();
163
+ restoreX402Signer();
164
+ }
165
+ }
166
+ if (import.meta.url === `file://${process.argv[1]}`) {
167
+ runDemo().catch((err) => {
168
+ console.error("Demo error:", err instanceof Error ? err.message : String(err));
169
+ process.exit(1);
170
+ });
171
+ }
172
+ //# sourceMappingURL=demo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo.js","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":"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"}