safehands-pharos 1.2.0 → 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 -354
  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 -20
  70. package/dist/tools/approveToken.d.ts.map +1 -1
  71. package/dist/tools/approveToken.js +44 -21
  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 -29
  91. package/dist/tools/executeSwap.d.ts.map +1 -1
  92. package/dist/tools/executeSwap.js +68 -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 -10
  124. package/dist/tools/publishRiskScore.d.ts.map +1 -1
  125. package/dist/tools/publishRiskScore.js +33 -19
  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 -35
  149. package/dist/tools/sendPayment.d.ts.map +1 -1
  150. package/dist/tools/sendPayment.js +53 -47
  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 -16
  158. package/dist/tools/x402PayAndFetch.d.ts.map +1 -1
  159. package/dist/tools/x402PayAndFetch.js +115 -47
  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
@@ -4,8 +4,9 @@
4
4
  import { z } from "zod";
5
5
  import { publicClient } from "../lib/pharosClient.js";
6
6
  import { getDodoRoute } from "../lib/dodoApi.js";
7
- import { USDC_ADDRESS, USDT_ADDRESS, ERC20_ABI } from "../lib/constants.js";
8
- import { formatEther, formatUnits } from "viem";
7
+ import { USDC_ADDRESS, USDT_ADDRESS, ERC20_ABI, CHAIN_ID, PHAROS_ENVIRONMENT } from "../lib/constants.js";
8
+ import { formatEther, formatUnits, isAddress } from "viem";
9
+ import { classifyExternalError, fail, ok } from "../lib/toolResponse.js";
9
10
  export const getWalletBalanceSchema = z.object({
10
11
  walletAddress: z.string().describe("Wallet address to check balances for"),
11
12
  });
@@ -17,55 +18,71 @@ export const getWalletBalanceTool = {
17
18
  const QUOTE_WALLET = "0x0000000000000000000000000000000000000001";
18
19
  export async function handleGetWalletBalance(raw) {
19
20
  const input = getWalletBalanceSchema.parse(raw);
21
+ if (!isAddress(input.walletAddress)) {
22
+ return fail("INVALID_WALLET_ADDRESS", `Invalid wallet address: ${input.walletAddress}`, false, "get_wallet_balance");
23
+ }
20
24
  const addr = input.walletAddress;
21
- // Fetch all three balances in parallel
22
- const [phrsBalanceWei, usdcBalanceRaw, usdtBalanceRaw] = await Promise.all([
23
- publicClient.getBalance({ address: addr }),
24
- publicClient.readContract({
25
- address: USDC_ADDRESS,
26
- abi: ERC20_ABI,
27
- functionName: "balanceOf",
28
- args: [addr],
29
- }),
30
- publicClient.readContract({
31
- address: USDT_ADDRESS,
32
- abi: ERC20_ABI,
33
- functionName: "balanceOf",
34
- args: [addr],
35
- }),
36
- ]);
37
- const phrsBalance = formatEther(phrsBalanceWei);
38
- const usdcBalance = formatUnits(usdcBalanceRaw, 6);
39
- const usdtBalance = formatUnits(usdtBalanceRaw, 6);
40
- // Get PHRS price in USD for total calculation
41
- let phrsUsd = 0;
42
25
  try {
43
- const quote = await getDodoRoute({
44
- fromToken: "PHRS",
45
- toToken: "USDC",
46
- amountHuman: "1",
47
- walletAddress: QUOTE_WALLET,
48
- });
49
- if (quote.routeAvailable) {
50
- phrsUsd = parseFloat(quote.amountOut);
26
+ const [phrsBalanceWei, usdcBalanceRaw, usdtBalanceRaw] = await Promise.all([
27
+ publicClient.getBalance({ address: addr }),
28
+ publicClient.readContract({
29
+ address: USDC_ADDRESS,
30
+ abi: ERC20_ABI,
31
+ functionName: "balanceOf",
32
+ args: [addr],
33
+ }),
34
+ publicClient.readContract({
35
+ address: USDT_ADDRESS,
36
+ abi: ERC20_ABI,
37
+ functionName: "balanceOf",
38
+ args: [addr],
39
+ }),
40
+ ]);
41
+ const phrsBalance = formatEther(phrsBalanceWei);
42
+ const usdcBalance = formatUnits(usdcBalanceRaw, 6);
43
+ const usdtBalance = formatUnits(usdtBalanceRaw, 6);
44
+ let phrsUsd = 0;
45
+ let priceSourceStatus = "unavailable";
46
+ try {
47
+ const quote = await getDodoRoute({
48
+ fromToken: "PHRS",
49
+ toToken: "USDC",
50
+ amountHuman: "1",
51
+ walletAddress: QUOTE_WALLET,
52
+ });
53
+ if (quote.routeAvailable) {
54
+ phrsUsd = parseFloat(quote.amountOut);
55
+ priceSourceStatus = "ok";
56
+ }
57
+ else {
58
+ priceSourceStatus = "no_route_available";
59
+ }
51
60
  }
61
+ catch {
62
+ priceSourceStatus = "unavailable";
63
+ }
64
+ const phrsValueUsd = parseFloat(phrsBalance) * phrsUsd;
65
+ const usdcValueUsd = parseFloat(usdcBalance);
66
+ const usdtValueUsd = parseFloat(usdtBalance);
67
+ const totalUsd = (phrsValueUsd + usdcValueUsd + usdtValueUsd).toFixed(4);
68
+ return ok({
69
+ walletAddress: input.walletAddress,
70
+ balances: {
71
+ PHRS: { balance: { value: phrsBalance, unit: "PHRS" }, valueUsd: { value: phrsValueUsd.toFixed(4), unit: "USD" } },
72
+ USDC: { balance: { value: usdcBalance, unit: "USDC" }, valueUsd: { value: usdcValueUsd.toFixed(4), unit: "USD" } },
73
+ USDT: { balance: { value: usdtBalance, unit: "USDT" }, valueUsd: { value: usdtValueUsd.toFixed(4), unit: "USD" } },
74
+ },
75
+ totalUsd: { value: totalUsd, unit: "USD" },
76
+ phrsPrice: phrsUsd > 0 ? { value: phrsUsd.toFixed(4), unit: "USD" } : null,
77
+ priceSourceStatus,
78
+ chainId: CHAIN_ID,
79
+ environment: PHAROS_ENVIRONMENT,
80
+ isMainnet: false,
81
+ source: "pharos_rpc",
82
+ });
52
83
  }
53
- catch {
54
- // Price unavailable, leave at 0
84
+ catch (err) {
85
+ return classifyExternalError("pharos_rpc", err);
55
86
  }
56
- const phrsValueUsd = parseFloat(phrsBalance) * phrsUsd;
57
- const usdcValueUsd = parseFloat(usdcBalance); // 1:1 stablecoin
58
- const usdtValueUsd = parseFloat(usdtBalance); // 1:1 stablecoin
59
- const totalUsd = (phrsValueUsd + usdcValueUsd + usdtValueUsd).toFixed(4);
60
- return {
61
- walletAddress: input.walletAddress,
62
- balances: {
63
- PHRS: { balance: phrsBalance, valueUsd: phrsValueUsd.toFixed(4) },
64
- USDC: { balance: usdcBalance, valueUsd: usdcValueUsd.toFixed(4) },
65
- USDT: { balance: usdtBalance, valueUsd: usdtValueUsd.toFixed(4) },
66
- },
67
- totalUsd,
68
- phrsPrice: phrsUsd > 0 ? phrsUsd.toFixed(4) : "unavailable",
69
- };
70
87
  }
71
88
  //# sourceMappingURL=getWalletBalance.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getWalletBalance.js","sourceRoot":"","sources":["../../src/tools/getWalletBalance.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,mEAAmE;AACnE,2EAA2E;AAE3E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAEhD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;CAC3E,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,iHAAiH;IACnH,WAAW,EAAE,sBAAsB;CACpC,CAAC;AAEF,MAAM,YAAY,GAAG,4CAA4C,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,GAA0B;IACrE,MAAM,KAAK,GAAG,sBAAsB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,KAAK,CAAC,aAA8B,CAAC;IAElD,uCAAuC;IACvC,MAAM,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACzE,YAAY,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC1C,YAAY,CAAC,YAAY,CAAC;YACxB,OAAO,EAAE,YAAY;YACrB,GAAG,EAAE,SAAS;YACd,YAAY,EAAE,WAAW;YACzB,IAAI,EAAE,CAAC,IAAI,CAAC;SACb,CAAoB;QACrB,YAAY,CAAC,YAAY,CAAC;YACxB,OAAO,EAAE,YAAY;YACrB,GAAG,EAAE,SAAS;YACd,YAAY,EAAE,WAAW;YACzB,IAAI,EAAE,CAAC,IAAI,CAAC;SACb,CAAoB;KACtB,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IAEnD,8CAA8C;IAC9C,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC;YAC/B,SAAS,EAAE,MAAM;YACjB,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,GAAG;YAChB,aAAa,EAAE,YAAY;SAC5B,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YACzB,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;IAED,MAAM,YAAY,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC;IACvD,MAAM,YAAY,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB;IAC/D,MAAM,YAAY,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB;IAC/D,MAAM,QAAQ,GAAG,CAAC,YAAY,GAAG,YAAY,GAAG,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAEzE,OAAO;QACL,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,QAAQ,EAAE;YACR,IAAI,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACjE,IAAI,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACjE,IAAI,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;SAClE;QACD,QAAQ;QACR,SAAS,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa;KAC5D,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"getWalletBalance.js","sourceRoot":"","sources":["../../src/tools/getWalletBalance.ts"],"names":[],"mappings":"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"}
@@ -5,17 +5,20 @@ export declare const publishRiskScoreSchema: z.ZodObject<{
5
5
  tokenOut: z.ZodOptional<z.ZodString>;
6
6
  amount: z.ZodString;
7
7
  toAddress: z.ZodOptional<z.ZodString>;
8
+ agentId: z.ZodOptional<z.ZodString>;
8
9
  }, "strip", z.ZodTypeAny, {
9
10
  amount: string;
10
11
  action: "transfer" | "swap";
11
12
  tokenIn?: string | undefined;
12
13
  tokenOut?: string | undefined;
14
+ agentId?: string | undefined;
13
15
  toAddress?: string | undefined;
14
16
  }, {
15
17
  amount: string;
16
18
  action: "transfer" | "swap";
17
19
  tokenIn?: string | undefined;
18
20
  tokenOut?: string | undefined;
21
+ agentId?: string | undefined;
19
22
  toAddress?: string | undefined;
20
23
  }>;
21
24
  export type PublishRiskScoreInput = z.input<typeof publishRiskScoreSchema>;
@@ -28,35 +31,34 @@ export declare const publishRiskScoreTool: {
28
31
  tokenOut: z.ZodOptional<z.ZodString>;
29
32
  amount: z.ZodString;
30
33
  toAddress: z.ZodOptional<z.ZodString>;
34
+ agentId: z.ZodOptional<z.ZodString>;
31
35
  }, "strip", z.ZodTypeAny, {
32
36
  amount: string;
33
37
  action: "transfer" | "swap";
34
38
  tokenIn?: string | undefined;
35
39
  tokenOut?: string | undefined;
40
+ agentId?: string | undefined;
36
41
  toAddress?: string | undefined;
37
42
  }, {
38
43
  amount: string;
39
44
  action: "transfer" | "swap";
40
45
  tokenIn?: string | undefined;
41
46
  tokenOut?: string | undefined;
47
+ agentId?: string | undefined;
42
48
  toAddress?: string | undefined;
43
49
  }>;
44
50
  };
45
- export declare function handlePublishRiskScore(raw: PublishRiskScoreInput): Promise<{
46
- success: boolean;
51
+ export declare function handlePublishRiskScore(raw: PublishRiskScoreInput): Promise<import("../lib/toolResponse.js").ToolFailure | import("../lib/toolResponse.js").ToolSuccess<{
47
52
  assessment: import("../lib/riskEngine.js").RiskAssessment;
53
+ policy: import("../lib/policy/actionPolicyEngine.js").ActionPolicyResult;
54
+ signerMode: import("../lib/signer/index.js").SignerMode;
48
55
  onChain: {
49
56
  txHash: `0x${string}`;
50
57
  explorerUrl: string;
51
- contractAddress: "0x71fc28ed3a31016b42f18764889cd911f22b67b8";
58
+ contractAddress: `0x${string}`;
52
59
  gasUsed: string;
53
60
  blockNumber: string;
54
61
  };
55
- error?: undefined;
56
- } | {
57
- success: boolean;
58
- assessment: import("../lib/riskEngine.js").RiskAssessment;
59
- onChain: null;
60
- error: string;
61
- }>;
62
+ source: string;
63
+ }>>;
62
64
  //# sourceMappingURL=publishRiskScore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"publishRiskScore.d.ts","sourceRoot":"","sources":["../../src/tools/publishRiskScore.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;EAMjC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE3E,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;CAMhC,CAAC;AAEF,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,qBAAqB;;;;;;;;;;;;;;;;GAqDtE"}
1
+ {"version":3,"file":"publishRiskScore.d.ts","sourceRoot":"","sources":["../../src/tools/publishRiskScore.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;EAOjC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE3E,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;CAMhC,CAAC;AAEF,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,qBAAqB;;;;;;;;;;;;IAiEtE"}
@@ -2,15 +2,19 @@
2
2
  // Publishes a risk assessment result to the on-chain RiskRegistry.
3
3
  // ────────────────────────────────────────────────────────────────────────
4
4
  import { z } from "zod";
5
- import { publicClient, createPharosWalletClient, getExplorerUrl } from "../lib/pharosClient.js";
6
- import { RISK_REGISTRY_ADDRESS, RISK_REGISTRY_ABI } from "../lib/constants.js";
5
+ import { publicClient, createPharosWalletClientFromAccount, getExplorerUrl } from "../lib/pharosClient.js";
6
+ import { RISK_REGISTRY_ADDRESS, RISK_REGISTRY_ABI, CHAIN_ID, PHAROS_ENVIRONMENT } from "../lib/constants.js";
7
7
  import { assessRisk } from "../lib/riskEngine.js";
8
+ import { fail, ok, requireWriteToolsEnabled, classifyExternalError } from "../lib/toolResponse.js";
9
+ import { getSigner, isSignerFailure } from "../lib/signer/index.js";
10
+ import { evaluateActionPolicy } from "../lib/policy/actionPolicyEngine.js";
8
11
  export const publishRiskScoreSchema = z.object({
9
12
  action: z.enum(["swap", "transfer"]).describe("Type of on-chain action to assess"),
10
13
  tokenIn: z.string().optional(),
11
14
  tokenOut: z.string().optional(),
12
15
  amount: z.string().describe("Human-readable amount"),
13
16
  toAddress: z.string().optional().describe("Recipient address (for transfers)"),
17
+ agentId: z.string().optional().describe("Managed testnet wallet agentId when WALLET_MODE=managed-testnet"),
14
18
  });
15
19
  export const publishRiskScoreTool = {
16
20
  name: "publish_risk_score",
@@ -19,23 +23,36 @@ export const publishRiskScoreTool = {
19
23
  inputSchema: publishRiskScoreSchema,
20
24
  };
21
25
  export async function handlePublishRiskScore(raw) {
22
- const privateKey = process.env.PRIVATE_KEY;
23
- const walletAddress = process.env.WALLET_ADDRESS;
24
- if (!privateKey || !walletAddress)
25
- throw new Error("Missing PRIVATE_KEY or WALLET_ADDRESS in environment variables.");
26
+ const writeGuard = requireWriteToolsEnabled("publish_risk_score");
27
+ if (writeGuard)
28
+ return writeGuard;
26
29
  const input = publishRiskScoreSchema.parse(raw);
27
- // 1. Run risk assessment
30
+ const signer = await getSigner(input.agentId);
31
+ if (isSignerFailure(signer)) {
32
+ return fail(signer.error.code, signer.error.message, false, "publish_risk_score");
33
+ }
34
+ const policy = evaluateActionPolicy({
35
+ actionType: "publish_risk_score",
36
+ chainId: CHAIN_ID,
37
+ environment: PHAROS_ENVIRONMENT,
38
+ isMainnet: false,
39
+ signerAvailable: true,
40
+ requiresSigner: true,
41
+ });
42
+ if (policy.decision === "BLOCK") {
43
+ return fail("POLICY_BLOCKED", policy.reasons.join(" ") || "Publishing blocked by SafeHands policy.", false, "publish_risk_score");
44
+ }
45
+ const walletAddress = signer.address;
28
46
  const assessment = await assessRisk({
29
47
  action: input.action,
30
48
  tokenIn: input.tokenIn,
31
49
  tokenOut: input.tokenOut,
32
50
  amount: input.amount,
33
51
  toAddress: input.toAddress,
34
- walletAddress: walletAddress,
52
+ walletAddress,
35
53
  });
36
- // 2. Publish to on-chain registry
37
54
  try {
38
- const wallet = createPharosWalletClient(privateKey);
55
+ const wallet = createPharosWalletClientFromAccount(signer.account);
39
56
  const txHash = await wallet.writeContract({
40
57
  address: RISK_REGISTRY_ADDRESS,
41
58
  abi: RISK_REGISTRY_ABI,
@@ -48,9 +65,10 @@ export async function handlePublishRiskScore(raw) {
48
65
  ],
49
66
  });
50
67
  const receipt = await publicClient.waitForTransactionReceipt({ hash: txHash });
51
- return {
52
- success: true,
68
+ return ok({
53
69
  assessment,
70
+ policy,
71
+ signerMode: signer.mode,
54
72
  onChain: {
55
73
  txHash,
56
74
  explorerUrl: getExplorerUrl(txHash),
@@ -58,15 +76,11 @@ export async function handlePublishRiskScore(raw) {
58
76
  gasUsed: receipt.gasUsed.toString(),
59
77
  blockNumber: receipt.blockNumber.toString(),
60
78
  },
61
- };
79
+ source: "publish_risk_score",
80
+ });
62
81
  }
63
82
  catch (err) {
64
- return {
65
- success: false,
66
- assessment,
67
- onChain: null,
68
- error: `Failed to publish to registry: ${err.message}`,
69
- };
83
+ return classifyExternalError("pharos_rpc", err);
70
84
  }
71
85
  }
72
86
  //# sourceMappingURL=publishRiskScore.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"publishRiskScore.js","sourceRoot":"","sources":["../../src/tools/publishRiskScore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publishRiskScore.js","sourceRoot":"","sources":["../../src/tools/publishRiskScore.ts"],"names":[],"mappings":"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"}
@@ -22,7 +22,7 @@ export declare function handleQueryRiskRegistry(raw: QueryRiskRegistryInput): Pr
22
22
  walletAddress: string;
23
23
  found: boolean;
24
24
  record: null;
25
- registryContract: "0x71fc28ed3a31016b42f18764889cd911f22b67b8";
25
+ registryContract: `0x${string}`;
26
26
  message: string;
27
27
  error?: undefined;
28
28
  } | {
@@ -35,14 +35,14 @@ export declare function handleQueryRiskRegistry(raw: QueryRiskRegistryInput): Pr
35
35
  timestamp: string;
36
36
  assessedBy: `0x${string}`;
37
37
  };
38
- registryContract: "0x71fc28ed3a31016b42f18764889cd911f22b67b8";
38
+ registryContract: `0x${string}`;
39
39
  message?: undefined;
40
40
  error?: undefined;
41
41
  } | {
42
42
  walletAddress: string;
43
43
  found: boolean;
44
44
  record: null;
45
- registryContract: "0x71fc28ed3a31016b42f18764889cd911f22b67b8";
45
+ registryContract: `0x${string}`;
46
46
  error: string;
47
47
  message?: undefined;
48
48
  }>;
@@ -0,0 +1,78 @@
1
+ import { z } from "zod";
2
+ import { type ToolResponse } from "../lib/toolResponse.js";
3
+ export declare const safehandsPreflightCheckSchema: z.ZodObject<{
4
+ actionType: z.ZodEnum<["send_payment", "approve_token", "execute_swap", "x402_pay_and_fetch", "publish_risk_score", "custom_contract_call"]>;
5
+ chainId: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
6
+ environment: z.ZodDefault<z.ZodOptional<z.ZodString>>;
7
+ isMainnet: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
8
+ amount: z.ZodOptional<z.ZodString>;
9
+ amountUnit: z.ZodOptional<z.ZodEnum<["PHRS", "USDC", "USD", "TOKEN"]>>;
10
+ token: z.ZodOptional<z.ZodString>;
11
+ tokenAddress: z.ZodOptional<z.ZodString>;
12
+ tokenIn: z.ZodOptional<z.ZodString>;
13
+ tokenOut: z.ZodOptional<z.ZodString>;
14
+ recipient: z.ZodOptional<z.ZodString>;
15
+ spender: z.ZodOptional<z.ZodString>;
16
+ approvalAmount: z.ZodOptional<z.ZodString>;
17
+ approvalToken: z.ZodOptional<z.ZodString>;
18
+ approvalUnlimited: z.ZodOptional<z.ZodBoolean>;
19
+ url: z.ZodOptional<z.ZodString>;
20
+ paymentAmountUsdc: z.ZodOptional<z.ZodString>;
21
+ paymentTokenAddress: z.ZodDefault<z.ZodOptional<z.ZodString>>;
22
+ signerAvailable: z.ZodOptional<z.ZodBoolean>;
23
+ tokenSecurityStatus: z.ZodOptional<z.ZodEnum<["ok", "unavailable", "unknown"]>>;
24
+ recipientVerified: z.ZodOptional<z.ZodBoolean>;
25
+ spenderVerified: z.ZodOptional<z.ZodBoolean>;
26
+ requiresSigner: z.ZodOptional<z.ZodBoolean>;
27
+ }, "strip", z.ZodTypeAny, {
28
+ environment: string;
29
+ actionType: "send_payment" | "approve_token" | "execute_swap" | "x402_pay_and_fetch" | "publish_risk_score" | "custom_contract_call";
30
+ chainId: number;
31
+ isMainnet: boolean;
32
+ paymentTokenAddress: string;
33
+ spender?: string | undefined;
34
+ amount?: string | undefined;
35
+ token?: string | undefined;
36
+ tokenAddress?: string | undefined;
37
+ amountUnit?: "PHRS" | "USDC" | "USD" | "TOKEN" | undefined;
38
+ tokenIn?: string | undefined;
39
+ tokenOut?: string | undefined;
40
+ recipient?: string | undefined;
41
+ approvalAmount?: string | undefined;
42
+ approvalToken?: string | undefined;
43
+ approvalUnlimited?: boolean | undefined;
44
+ url?: string | undefined;
45
+ paymentAmountUsdc?: string | undefined;
46
+ signerAvailable?: boolean | undefined;
47
+ tokenSecurityStatus?: "unknown" | "ok" | "unavailable" | undefined;
48
+ recipientVerified?: boolean | undefined;
49
+ spenderVerified?: boolean | undefined;
50
+ requiresSigner?: boolean | undefined;
51
+ }, {
52
+ actionType: "send_payment" | "approve_token" | "execute_swap" | "x402_pay_and_fetch" | "publish_risk_score" | "custom_contract_call";
53
+ spender?: string | undefined;
54
+ amount?: string | undefined;
55
+ environment?: string | undefined;
56
+ token?: string | undefined;
57
+ tokenAddress?: string | undefined;
58
+ chainId?: number | undefined;
59
+ isMainnet?: boolean | undefined;
60
+ amountUnit?: "PHRS" | "USDC" | "USD" | "TOKEN" | undefined;
61
+ tokenIn?: string | undefined;
62
+ tokenOut?: string | undefined;
63
+ recipient?: string | undefined;
64
+ approvalAmount?: string | undefined;
65
+ approvalToken?: string | undefined;
66
+ approvalUnlimited?: boolean | undefined;
67
+ url?: string | undefined;
68
+ paymentAmountUsdc?: string | undefined;
69
+ paymentTokenAddress?: string | undefined;
70
+ signerAvailable?: boolean | undefined;
71
+ tokenSecurityStatus?: "unknown" | "ok" | "unavailable" | undefined;
72
+ recipientVerified?: boolean | undefined;
73
+ spenderVerified?: boolean | undefined;
74
+ requiresSigner?: boolean | undefined;
75
+ }>;
76
+ export type SafeHandsPreflightCheckInput = z.input<typeof safehandsPreflightCheckSchema>;
77
+ export declare function handleSafeHandsPreflightCheck(raw: SafeHandsPreflightCheckInput): Promise<ToolResponse<unknown>>;
78
+ //# sourceMappingURL=safehandsPreflightCheck.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safehandsPreflightCheck.d.ts","sourceRoot":"","sources":["../../src/tools/safehandsPreflightCheck.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAM,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAK/D,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwBxC,CAAC;AAEH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEzF,wBAAsB,6BAA6B,CAAC,GAAG,EAAE,4BAA4B,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAerH"}
@@ -0,0 +1,48 @@
1
+ // ─── Tool: safehands_preflight_check ───────────────────────────────────
2
+ // Branded SafeHands transaction safety firewall preflight.
3
+ // ───────────────────────────────────────────────────────────────────────
4
+ import { z } from "zod";
5
+ import { ok } from "../lib/toolResponse.js";
6
+ import { CHAIN_ID, PHAROS_ENVIRONMENT, IS_MAINNET, X402_PAYMENT_TOKEN_ADDRESS } from "../lib/constants.js";
7
+ import { evaluateActionPolicy } from "../lib/policy/actionPolicyEngine.js";
8
+ import { classifyTokenRegistryStatus } from "./tokenRegistryStatus.js";
9
+ export const safehandsPreflightCheckSchema = z.object({
10
+ actionType: z.enum(["send_payment", "approve_token", "execute_swap", "x402_pay_and_fetch", "publish_risk_score", "custom_contract_call"]),
11
+ chainId: z.number().optional().default(CHAIN_ID),
12
+ environment: z.string().optional().default(PHAROS_ENVIRONMENT),
13
+ isMainnet: z.boolean().optional().default(IS_MAINNET),
14
+ amount: z.string().optional(),
15
+ amountUnit: z.enum(["PHRS", "USDC", "USD", "TOKEN"]).optional(),
16
+ token: z.string().optional(),
17
+ tokenAddress: z.string().optional(),
18
+ tokenIn: z.string().optional(),
19
+ tokenOut: z.string().optional(),
20
+ recipient: z.string().optional(),
21
+ spender: z.string().optional(),
22
+ approvalAmount: z.string().optional(),
23
+ approvalToken: z.string().optional(),
24
+ approvalUnlimited: z.boolean().optional(),
25
+ url: z.string().optional(),
26
+ paymentAmountUsdc: z.string().optional(),
27
+ paymentTokenAddress: z.string().optional().default(X402_PAYMENT_TOKEN_ADDRESS),
28
+ signerAvailable: z.boolean().optional(),
29
+ tokenSecurityStatus: z.enum(["ok", "unavailable", "unknown"]).optional(),
30
+ recipientVerified: z.boolean().optional(),
31
+ spenderVerified: z.boolean().optional(),
32
+ requiresSigner: z.boolean().optional(),
33
+ });
34
+ export async function handleSafeHandsPreflightCheck(raw) {
35
+ const input = safehandsPreflightCheckSchema.parse(raw);
36
+ const tokenForRegistry = input.tokenAddress || input.token || input.tokenOut || input.tokenIn;
37
+ const registry = tokenForRegistry ? classifyTokenRegistryStatus(tokenForRegistry) : null;
38
+ const policy = evaluateActionPolicy({
39
+ ...input,
40
+ tokenRegistryStatus: registry?.status,
41
+ });
42
+ return ok({
43
+ ...policy,
44
+ tokenRegistry: registry,
45
+ source: "safehands_preflight_check",
46
+ });
47
+ }
48
+ //# sourceMappingURL=safehandsPreflightCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safehandsPreflightCheck.js","sourceRoot":"","sources":["../../src/tools/safehandsPreflightCheck.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import { z } from "zod";
2
+ import { type ToolResponse } from "../lib/toolResponse.js";
3
+ export declare const safehandsRiskReportSchema: z.ZodObject<{
4
+ actionType: z.ZodEnum<["send_payment", "approve_token", "execute_swap", "x402_pay_and_fetch", "publish_risk_score", "custom_contract_call"]>;
5
+ chainId: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
6
+ environment: z.ZodDefault<z.ZodOptional<z.ZodString>>;
7
+ isMainnet: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
8
+ amount: z.ZodOptional<z.ZodString>;
9
+ amountUnit: z.ZodOptional<z.ZodEnum<["PHRS", "USDC", "USD", "TOKEN"]>>;
10
+ token: z.ZodOptional<z.ZodString>;
11
+ tokenAddress: z.ZodOptional<z.ZodString>;
12
+ tokenIn: z.ZodOptional<z.ZodString>;
13
+ tokenOut: z.ZodOptional<z.ZodString>;
14
+ recipient: z.ZodOptional<z.ZodString>;
15
+ spender: z.ZodOptional<z.ZodString>;
16
+ approvalAmount: z.ZodOptional<z.ZodString>;
17
+ approvalToken: z.ZodOptional<z.ZodString>;
18
+ approvalUnlimited: z.ZodOptional<z.ZodBoolean>;
19
+ url: z.ZodOptional<z.ZodString>;
20
+ paymentAmountUsdc: z.ZodOptional<z.ZodString>;
21
+ paymentTokenAddress: z.ZodDefault<z.ZodOptional<z.ZodString>>;
22
+ signerAvailable: z.ZodOptional<z.ZodBoolean>;
23
+ tokenSecurityStatus: z.ZodOptional<z.ZodEnum<["ok", "unavailable", "unknown"]>>;
24
+ recipientVerified: z.ZodOptional<z.ZodBoolean>;
25
+ spenderVerified: z.ZodOptional<z.ZodBoolean>;
26
+ requiresSigner: z.ZodOptional<z.ZodBoolean>;
27
+ } & {
28
+ includeChecks: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
29
+ }, "strip", z.ZodTypeAny, {
30
+ environment: string;
31
+ actionType: "send_payment" | "approve_token" | "execute_swap" | "x402_pay_and_fetch" | "publish_risk_score" | "custom_contract_call";
32
+ chainId: number;
33
+ isMainnet: boolean;
34
+ paymentTokenAddress: string;
35
+ includeChecks: boolean;
36
+ spender?: string | undefined;
37
+ amount?: string | undefined;
38
+ token?: string | undefined;
39
+ tokenAddress?: string | undefined;
40
+ amountUnit?: "PHRS" | "USDC" | "USD" | "TOKEN" | undefined;
41
+ tokenIn?: string | undefined;
42
+ tokenOut?: string | undefined;
43
+ recipient?: string | undefined;
44
+ approvalAmount?: string | undefined;
45
+ approvalToken?: string | undefined;
46
+ approvalUnlimited?: boolean | undefined;
47
+ url?: string | undefined;
48
+ paymentAmountUsdc?: string | undefined;
49
+ signerAvailable?: boolean | undefined;
50
+ tokenSecurityStatus?: "unknown" | "ok" | "unavailable" | undefined;
51
+ recipientVerified?: boolean | undefined;
52
+ spenderVerified?: boolean | undefined;
53
+ requiresSigner?: boolean | undefined;
54
+ }, {
55
+ actionType: "send_payment" | "approve_token" | "execute_swap" | "x402_pay_and_fetch" | "publish_risk_score" | "custom_contract_call";
56
+ spender?: string | undefined;
57
+ amount?: string | undefined;
58
+ environment?: string | undefined;
59
+ token?: string | undefined;
60
+ tokenAddress?: string | undefined;
61
+ chainId?: number | undefined;
62
+ isMainnet?: boolean | undefined;
63
+ amountUnit?: "PHRS" | "USDC" | "USD" | "TOKEN" | undefined;
64
+ tokenIn?: string | undefined;
65
+ tokenOut?: string | undefined;
66
+ recipient?: string | undefined;
67
+ approvalAmount?: string | undefined;
68
+ approvalToken?: string | undefined;
69
+ approvalUnlimited?: boolean | undefined;
70
+ url?: string | undefined;
71
+ paymentAmountUsdc?: string | undefined;
72
+ paymentTokenAddress?: string | undefined;
73
+ signerAvailable?: boolean | undefined;
74
+ tokenSecurityStatus?: "unknown" | "ok" | "unavailable" | undefined;
75
+ recipientVerified?: boolean | undefined;
76
+ spenderVerified?: boolean | undefined;
77
+ requiresSigner?: boolean | undefined;
78
+ includeChecks?: boolean | undefined;
79
+ }>;
80
+ export type SafeHandsRiskReportInput = z.input<typeof safehandsRiskReportSchema>;
81
+ export declare function handleSafeHandsRiskReport(raw: SafeHandsRiskReportInput): Promise<ToolResponse<unknown>>;
82
+ //# sourceMappingURL=safehandsRiskReport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safehandsRiskReport.d.ts","sourceRoot":"","sources":["../../src/tools/safehandsRiskReport.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAM,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAI/D,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEpC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAEjF,wBAAsB,yBAAyB,CAAC,GAAG,EAAE,wBAAwB,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAkB7G"}
@@ -0,0 +1,29 @@
1
+ // ─── Tool: safehands_risk_report ───────────────────────────────────────
2
+ import { z } from "zod";
3
+ import { ok } from "../lib/toolResponse.js";
4
+ import { explainPolicyResult } from "../lib/policy/actionPolicyEngine.js";
5
+ import { handleSafeHandsPreflightCheck, safehandsPreflightCheckSchema } from "./safehandsPreflightCheck.js";
6
+ export const safehandsRiskReportSchema = safehandsPreflightCheckSchema.extend({
7
+ includeChecks: z.boolean().optional().default(true),
8
+ });
9
+ export async function handleSafeHandsRiskReport(raw) {
10
+ const input = safehandsRiskReportSchema.parse(raw);
11
+ const preflight = await handleSafeHandsPreflightCheck(input);
12
+ if (!preflight.success)
13
+ return preflight;
14
+ const data = preflight.data;
15
+ return ok({
16
+ decision: data.decision,
17
+ riskLevel: data.riskLevel,
18
+ safeToExecute: data.safeToExecute,
19
+ summary: explainPolicyResult(data),
20
+ reasons: data.reasons,
21
+ requiredActions: data.requiredActions,
22
+ checks: input.includeChecks ? data.checks : undefined,
23
+ environment: data.environment,
24
+ chainId: data.chainId,
25
+ isMainnet: data.isMainnet,
26
+ source: "safehands_risk_report",
27
+ });
28
+ }
29
+ //# sourceMappingURL=safehandsRiskReport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safehandsRiskReport.js","sourceRoot":"","sources":["../../src/tools/safehandsRiskReport.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,EAAE,EAAqB,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,6BAA6B,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAE5G,MAAM,CAAC,MAAM,yBAAyB,GAAG,6BAA6B,CAAC,MAAM,CAAC;IAC5E,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CACpD,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,GAA6B;IAC3E,MAAM,KAAK,GAAG,yBAAyB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,MAAM,6BAA6B,CAAC,KAAK,CAAC,CAAC;IAC7D,IAAI,CAAC,SAAS,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAW,CAAC;IACnC,OAAO,EAAE,CAAC;QACR,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,OAAO,EAAE,mBAAmB,CAAC,IAAI,CAAC;QAClC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QACrD,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,MAAM,EAAE,uBAAuB;KAChC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { z } from "zod";
2
+ import { type ToolResponse } from "../lib/toolResponse.js";
3
+ export declare const safehandsSafeExecuteSchema: z.ZodObject<{
4
+ path: z.ZodEnum<["safe_execute_send_payment", "safe_execute_approve_token", "safe_execute_swap", "safe_x402_pay_and_fetch"]>;
5
+ execute: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
6
+ confirmExecution: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
7
+ action: z.ZodRecord<z.ZodString, z.ZodAny>;
8
+ }, "strip", z.ZodTypeAny, {
9
+ path: "safe_execute_send_payment" | "safe_execute_approve_token" | "safe_execute_swap" | "safe_x402_pay_and_fetch";
10
+ execute: boolean;
11
+ confirmExecution: boolean;
12
+ action: Record<string, any>;
13
+ }, {
14
+ path: "safe_execute_send_payment" | "safe_execute_approve_token" | "safe_execute_swap" | "safe_x402_pay_and_fetch";
15
+ action: Record<string, any>;
16
+ execute?: boolean | undefined;
17
+ confirmExecution?: boolean | undefined;
18
+ }>;
19
+ export type SafeHandsSafeExecuteInput = z.input<typeof safehandsSafeExecuteSchema>;
20
+ export declare function handleSafeHandsSafeExecute(raw: SafeHandsSafeExecuteInput): Promise<ToolResponse<unknown>>;
21
+ //# sourceMappingURL=safehandsSafeExecute.d.ts.map