@dev.sail.money/sailor 0.0.2

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 (319) hide show
  1. package/AGENTS.md +111 -0
  2. package/LICENSE +21 -0
  3. package/README.md +337 -0
  4. package/docs/PERMISSION_MODEL.md +93 -0
  5. package/examples/permissions/BoundedBet_Limitless_Base.sol +96 -0
  6. package/examples/permissions/BoundedBorrow_AaveV3_Arbitrum.sol +94 -0
  7. package/examples/permissions/BoundedPerp_GMXv2_Arbitrum.sol +143 -0
  8. package/examples/permissions/BoundedSwap_UniswapV3_Base.sol +113 -0
  9. package/examples/permissions/BoundedSwap_UniswapV4_Unichain.sol +144 -0
  10. package/examples/permissions/BoundedTransfer_ERC20_Ethereum.sol +73 -0
  11. package/examples/permissions/README.md +52 -0
  12. package/examples/permissions/foundry.toml +10 -0
  13. package/examples/permissions/interfaces/IPermission.sol +18 -0
  14. package/package.json +39 -0
  15. package/packages/cli/README.md +34 -0
  16. package/packages/cli/dist/index.cjs +42801 -0
  17. package/packages/cli/dist/server.cjs +51202 -0
  18. package/packages/sdk/README.md +65 -0
  19. package/packages/sdk/dist/abis/MandateFactory.d.ts +140 -0
  20. package/packages/sdk/dist/abis/MandateFactory.d.ts.map +1 -0
  21. package/packages/sdk/dist/abis/MandateFactory.js +93 -0
  22. package/packages/sdk/dist/abis/MandateFactory.js.map +1 -0
  23. package/packages/sdk/dist/abis/SailGovernance.d.ts +57 -0
  24. package/packages/sdk/dist/abis/SailGovernance.d.ts.map +1 -0
  25. package/packages/sdk/dist/abis/SailGovernance.js +52 -0
  26. package/packages/sdk/dist/abis/SailGovernance.js.map +1 -0
  27. package/packages/sdk/dist/abis/SailKernel.d.ts +466 -0
  28. package/packages/sdk/dist/abis/SailKernel.d.ts.map +1 -0
  29. package/packages/sdk/dist/abis/SailKernel.js +311 -0
  30. package/packages/sdk/dist/abis/SailKernel.js.map +1 -0
  31. package/packages/sdk/dist/abis/index.d.ts +4 -0
  32. package/packages/sdk/dist/abis/index.d.ts.map +1 -0
  33. package/packages/sdk/dist/abis/index.js +7 -0
  34. package/packages/sdk/dist/abis/index.js.map +1 -0
  35. package/packages/sdk/dist/capabilities.d.ts +77 -0
  36. package/packages/sdk/dist/capabilities.d.ts.map +1 -0
  37. package/packages/sdk/dist/capabilities.js +158 -0
  38. package/packages/sdk/dist/capabilities.js.map +1 -0
  39. package/packages/sdk/dist/client.d.ts +37 -0
  40. package/packages/sdk/dist/client.d.ts.map +1 -0
  41. package/packages/sdk/dist/client.js +646 -0
  42. package/packages/sdk/dist/client.js.map +1 -0
  43. package/packages/sdk/dist/deployments.d.ts +82 -0
  44. package/packages/sdk/dist/deployments.d.ts.map +1 -0
  45. package/packages/sdk/dist/deployments.js +197 -0
  46. package/packages/sdk/dist/deployments.js.map +1 -0
  47. package/packages/sdk/dist/discovery.d.ts +10 -0
  48. package/packages/sdk/dist/discovery.d.ts.map +1 -0
  49. package/packages/sdk/dist/discovery.js +41 -0
  50. package/packages/sdk/dist/discovery.js.map +1 -0
  51. package/packages/sdk/dist/eip712.d.ts +257 -0
  52. package/packages/sdk/dist/eip712.d.ts.map +1 -0
  53. package/packages/sdk/dist/eip712.js +255 -0
  54. package/packages/sdk/dist/eip712.js.map +1 -0
  55. package/packages/sdk/dist/errors.d.ts +47 -0
  56. package/packages/sdk/dist/errors.d.ts.map +1 -0
  57. package/packages/sdk/dist/errors.js +168 -0
  58. package/packages/sdk/dist/errors.js.map +1 -0
  59. package/packages/sdk/dist/fees.d.ts +16 -0
  60. package/packages/sdk/dist/fees.d.ts.map +1 -0
  61. package/packages/sdk/dist/fees.js +51 -0
  62. package/packages/sdk/dist/fees.js.map +1 -0
  63. package/packages/sdk/dist/index.d.ts +23 -0
  64. package/packages/sdk/dist/index.d.ts.map +1 -0
  65. package/packages/sdk/dist/index.js +16 -0
  66. package/packages/sdk/dist/index.js.map +1 -0
  67. package/packages/sdk/dist/intelligence.d.ts +923 -0
  68. package/packages/sdk/dist/intelligence.d.ts.map +1 -0
  69. package/packages/sdk/dist/intelligence.js +357 -0
  70. package/packages/sdk/dist/intelligence.js.map +1 -0
  71. package/packages/sdk/dist/keyring.d.ts +60 -0
  72. package/packages/sdk/dist/keyring.d.ts.map +1 -0
  73. package/packages/sdk/dist/keyring.js +159 -0
  74. package/packages/sdk/dist/keyring.js.map +1 -0
  75. package/packages/sdk/dist/lifi.d.ts +83 -0
  76. package/packages/sdk/dist/lifi.d.ts.map +1 -0
  77. package/packages/sdk/dist/lifi.js +69 -0
  78. package/packages/sdk/dist/lifi.js.map +1 -0
  79. package/packages/sdk/dist/safe.d.ts +158 -0
  80. package/packages/sdk/dist/safe.d.ts.map +1 -0
  81. package/packages/sdk/dist/safe.js +163 -0
  82. package/packages/sdk/dist/safe.js.map +1 -0
  83. package/packages/sdk/dist/signing.d.ts +106 -0
  84. package/packages/sdk/dist/signing.d.ts.map +1 -0
  85. package/packages/sdk/dist/signing.js +2 -0
  86. package/packages/sdk/dist/signing.js.map +1 -0
  87. package/packages/sdk/dist/templates/ammLiquidity.d.ts +16 -0
  88. package/packages/sdk/dist/templates/ammLiquidity.d.ts.map +1 -0
  89. package/packages/sdk/dist/templates/ammLiquidity.js +60 -0
  90. package/packages/sdk/dist/templates/ammLiquidity.js.map +1 -0
  91. package/packages/sdk/dist/templates/approveAndCallBatch.d.ts +14 -0
  92. package/packages/sdk/dist/templates/approveAndCallBatch.d.ts.map +1 -0
  93. package/packages/sdk/dist/templates/approveAndCallBatch.js +53 -0
  94. package/packages/sdk/dist/templates/approveAndCallBatch.js.map +1 -0
  95. package/packages/sdk/dist/templates/boundedBorrow.d.ts +16 -0
  96. package/packages/sdk/dist/templates/boundedBorrow.d.ts.map +1 -0
  97. package/packages/sdk/dist/templates/boundedBorrow.js +56 -0
  98. package/packages/sdk/dist/templates/boundedBorrow.js.map +1 -0
  99. package/packages/sdk/dist/templates/boundedSwap.d.ts +16 -0
  100. package/packages/sdk/dist/templates/boundedSwap.d.ts.map +1 -0
  101. package/packages/sdk/dist/templates/boundedSwap.js +56 -0
  102. package/packages/sdk/dist/templates/boundedSwap.js.map +1 -0
  103. package/packages/sdk/dist/templates/defiBundle.d.ts +14 -0
  104. package/packages/sdk/dist/templates/defiBundle.d.ts.map +1 -0
  105. package/packages/sdk/dist/templates/defiBundle.js +52 -0
  106. package/packages/sdk/dist/templates/defiBundle.js.map +1 -0
  107. package/packages/sdk/dist/templates/index.d.ts +15 -0
  108. package/packages/sdk/dist/templates/index.d.ts.map +1 -0
  109. package/packages/sdk/dist/templates/index.js +8 -0
  110. package/packages/sdk/dist/templates/index.js.map +1 -0
  111. package/packages/sdk/dist/templates/pendle.d.ts +14 -0
  112. package/packages/sdk/dist/templates/pendle.d.ts.map +1 -0
  113. package/packages/sdk/dist/templates/pendle.js +52 -0
  114. package/packages/sdk/dist/templates/pendle.js.map +1 -0
  115. package/packages/sdk/dist/templates/transferTarget.d.ts +10 -0
  116. package/packages/sdk/dist/templates/transferTarget.d.ts.map +1 -0
  117. package/packages/sdk/dist/templates/transferTarget.js +42 -0
  118. package/packages/sdk/dist/templates/transferTarget.js.map +1 -0
  119. package/packages/sdk/dist/types.d.ts +382 -0
  120. package/packages/sdk/dist/types.d.ts.map +1 -0
  121. package/packages/sdk/dist/types.js +2 -0
  122. package/packages/sdk/dist/types.js.map +1 -0
  123. package/packages/sdk/package.json +52 -0
  124. package/packages/ui/dist/assets/Arc-VDBY7LNS-BChRXCXW.js +1 -0
  125. package/packages/ui/dist/assets/Brave-BRAKJXDS-mq-Xo37j.js +1 -0
  126. package/packages/ui/dist/assets/Browser-76IHF3Y2-BMhRaC5Z.js +1 -0
  127. package/packages/ui/dist/assets/Chrome-65Q5P54Y-DR9MQEVr.js +1 -0
  128. package/packages/ui/dist/assets/Edge-XSPUTORV-DEoZslQE.js +1 -0
  129. package/packages/ui/dist/assets/Firefox-AAHGJQIP-Bp_Hm04m.js +1 -0
  130. package/packages/ui/dist/assets/Linux-OO4TNCLJ-B0aw93n9.js +1 -0
  131. package/packages/ui/dist/assets/Macos-MW4AE7LN-Vvm8Drw3.js +1 -0
  132. package/packages/ui/dist/assets/Opera-KQZLSACL-Cwv5MDFy.js +1 -0
  133. package/packages/ui/dist/assets/Safari-ZPL37GXR-C4Ggg6rz.js +1 -0
  134. package/packages/ui/dist/assets/Windows-PPTHQER6-BlyV2p7Y.js +1 -0
  135. package/packages/ui/dist/assets/add-DaJhwIBV.js +15 -0
  136. package/packages/ui/dist/assets/all-wallets-BUxsqWXi.js +6 -0
  137. package/packages/ui/dist/assets/apechain-SX5YFU6N-q5qBv-mp.js +1 -0
  138. package/packages/ui/dist/assets/app-store-DkltwTqE.js +17 -0
  139. package/packages/ui/dist/assets/apple-owVOeaIT.js +18 -0
  140. package/packages/ui/dist/assets/ar_AR-LIPSOZP5-BQrIDibT.js +1519 -0
  141. package/packages/ui/dist/assets/arbitrum-WURIBY6W-CqVkHBr5.js +1 -0
  142. package/packages/ui/dist/assets/arrow-bottom-D2mmNJve.js +8 -0
  143. package/packages/ui/dist/assets/arrow-bottom-circle-CbNYijx-.js +11 -0
  144. package/packages/ui/dist/assets/arrow-left-DJB61s4C.js +8 -0
  145. package/packages/ui/dist/assets/arrow-right-BBrsQ9R4.js +8 -0
  146. package/packages/ui/dist/assets/arrow-top-Cil6bOc8.js +8 -0
  147. package/packages/ui/dist/assets/assets-Q6ZU7ZJ5-P8HioiAD.js +1 -0
  148. package/packages/ui/dist/assets/avalanche-KOMJD3XY-Dsn_JPR4.js +1 -0
  149. package/packages/ui/dist/assets/bank-CbwEmRo3.js +14 -0
  150. package/packages/ui/dist/assets/base-OAXLRA4F-CoYTVIiL.js +1 -0
  151. package/packages/ui/dist/assets/base-QS6CYWIN-CsjdbWCf.js +1 -0
  152. package/packages/ui/dist/assets/basic-CLNfjw3m.js +2128 -0
  153. package/packages/ui/dist/assets/berachain-NJECWIVC-DumxnFvf.js +1 -0
  154. package/packages/ui/dist/assets/blast-V555OVXZ-BbhJh1tj.js +1 -0
  155. package/packages/ui/dist/assets/browser-B5TtF4Pb.js +14 -0
  156. package/packages/ui/dist/assets/bsc-N647EYR2-B2nLKXWV.js +1 -0
  157. package/packages/ui/dist/assets/card-CO7BVB-C.js +14 -0
  158. package/packages/ui/dist/assets/ccip-2W7K3_J3.js +1 -0
  159. package/packages/ui/dist/assets/celo-GEP4TUHG-CenIBYLU.js +1 -0
  160. package/packages/ui/dist/assets/checkmark-BEtSHq9m.js +11 -0
  161. package/packages/ui/dist/assets/checkmark-bold-D9xGHzPE.js +8 -0
  162. package/packages/ui/dist/assets/chevron-bottom-BDztht6i.js +8 -0
  163. package/packages/ui/dist/assets/chevron-left-EV4GFNbc.js +8 -0
  164. package/packages/ui/dist/assets/chevron-right-B4_bB9oR.js +8 -0
  165. package/packages/ui/dist/assets/chevron-top-D54xPNzF.js +8 -0
  166. package/packages/ui/dist/assets/chrome-store-DYUpAJJq.js +61 -0
  167. package/packages/ui/dist/assets/clock-Ca1T1Soz.js +8 -0
  168. package/packages/ui/dist/assets/close-BZqWjurK.js +8 -0
  169. package/packages/ui/dist/assets/coinPlaceholder-e6fl2XDo.js +8 -0
  170. package/packages/ui/dist/assets/compass-DCLC7zIh.js +8 -0
  171. package/packages/ui/dist/assets/connect-UA7M4XW6-IY3X6Bmr.js +1 -0
  172. package/packages/ui/dist/assets/copy-Th2AaD-O.js +15 -0
  173. package/packages/ui/dist/assets/core-Ckx_cyuH.js +907 -0
  174. package/packages/ui/dist/assets/create-FASO7PVG-D_rvSpre.js +1 -0
  175. package/packages/ui/dist/assets/cronos-HJPAQTAE-BEOvlOC4.js +1 -0
  176. package/packages/ui/dist/assets/cursor-DV7rOqbJ.js +3 -0
  177. package/packages/ui/dist/assets/cursor-transparent-BKHeABKB.js +12 -0
  178. package/packages/ui/dist/assets/de_DE-YE3KOFHU-BRt5ztUe.js +1519 -0
  179. package/packages/ui/dist/assets/degen-FQQ4XGHB-CeHTs88l.js +1 -0
  180. package/packages/ui/dist/assets/desktop-CBjY8t6F.js +9 -0
  181. package/packages/ui/dist/assets/disconnect-DbSs2cli.js +8 -0
  182. package/packages/ui/dist/assets/discord-ZlLOAUkM.js +17 -0
  183. package/packages/ui/dist/assets/es_419-7LMPU7G4-DH7rM0yQ.js +1519 -0
  184. package/packages/ui/dist/assets/ethereum-RGGVA4PY-SWGOlkuk.js +1 -0
  185. package/packages/ui/dist/assets/etherscan-CKUrqWYN.js +6 -0
  186. package/packages/ui/dist/assets/events-CiKP71cK.js +1 -0
  187. package/packages/ui/dist/assets/exclamation-triangle-DA1QzFiO.js +4 -0
  188. package/packages/ui/dist/assets/extension-BVJkmvpJ.js +8 -0
  189. package/packages/ui/dist/assets/external-link-D_bsR7B2.js +8 -0
  190. package/packages/ui/dist/assets/facebook-CmFmhojx.js +26 -0
  191. package/packages/ui/dist/assets/fallback-Ofl6uSnB.js +1 -0
  192. package/packages/ui/dist/assets/farcaster-Co-M3Ss8.js +12 -0
  193. package/packages/ui/dist/assets/filters-B1WwNaFU.js +8 -0
  194. package/packages/ui/dist/assets/flow-5FQJFCTK-CUie2reO.js +1 -0
  195. package/packages/ui/dist/assets/fr_FR-VBJP3ZLL-B-_ocunw.js +1519 -0
  196. package/packages/ui/dist/assets/github-CP4fP6gn.js +18 -0
  197. package/packages/ui/dist/assets/gnosis-37ZC4RBL-B137OtHZ.js +1 -0
  198. package/packages/ui/dist/assets/google-CsOIXJ6V.js +18 -0
  199. package/packages/ui/dist/assets/gravity-J5YQHTYH-Bj6B0uod.js +1 -0
  200. package/packages/ui/dist/assets/hardhat-TX56IT5N-CV1FY-wE.js +1 -0
  201. package/packages/ui/dist/assets/help-circle-DiMkomdF.js +12 -0
  202. package/packages/ui/dist/assets/hi_IN-WBVD5XYI-D73g2UFs.js +1519 -0
  203. package/packages/ui/dist/assets/hyperevm-VKPAA4SA-CHwraEsx.js +1 -0
  204. package/packages/ui/dist/assets/id-lmscL5LX.js +12 -0
  205. package/packages/ui/dist/assets/id_ID-SBYANJ7G-Cjpa4ay6.js +1519 -0
  206. package/packages/ui/dist/assets/image-B-ubJrY5.js +4 -0
  207. package/packages/ui/dist/assets/index-BaukYv-x.js +16 -0
  208. package/packages/ui/dist/assets/index-CF0KMmke.js +395 -0
  209. package/packages/ui/dist/assets/index-CKxgNxS9.css +1 -0
  210. package/packages/ui/dist/assets/index-CZR1Qjhs.js +1 -0
  211. package/packages/ui/dist/assets/index-DVgfCzCo.js +1 -0
  212. package/packages/ui/dist/assets/index-Dbh5V1Z0.js +1 -0
  213. package/packages/ui/dist/assets/index-Q2Yai4Fe.js +2103 -0
  214. package/packages/ui/dist/assets/index.es-C78cE5SI.js +26 -0
  215. package/packages/ui/dist/assets/info-Cqg57EVo.js +3 -0
  216. package/packages/ui/dist/assets/info-circle-DkeSWNKV.js +12 -0
  217. package/packages/ui/dist/assets/ink-FZMYZWHG-62p-5IK5.js +1 -0
  218. package/packages/ui/dist/assets/ja_JP-ZRMWJV3I-DXbifiMm.js +1519 -0
  219. package/packages/ui/dist/assets/kaia-65D2U3PU-JmuLQ4gC.js +1 -0
  220. package/packages/ui/dist/assets/ko_KR-FR54RFUG-upinSHjQ.js +1519 -0
  221. package/packages/ui/dist/assets/lightbulb-DNlO4qKh.js +3 -0
  222. package/packages/ui/dist/assets/linea-QRMVQ5DY-DuI3vv0d.js +1 -0
  223. package/packages/ui/dist/assets/login-UP3DZBGS-Db_wM5oQ.js +1 -0
  224. package/packages/ui/dist/assets/mail-kVQ8Jb9Y.js +8 -0
  225. package/packages/ui/dist/assets/manta-SI27YFEJ-CpVOKa06.js +1 -0
  226. package/packages/ui/dist/assets/mantle-CKIUT334-DR2WgqzU.js +1 -0
  227. package/packages/ui/dist/assets/metaMaskWallet-EI6MED72-D5HFOsnz.js +1 -0
  228. package/packages/ui/dist/assets/metamask-sdk-CBalSvz7.js +542 -0
  229. package/packages/ui/dist/assets/mobile-BEteuhF7.js +9 -0
  230. package/packages/ui/dist/assets/monad-4KWC6TSS-DVXSkpiz.js +1 -0
  231. package/packages/ui/dist/assets/more-DBWmXQli.js +11 -0
  232. package/packages/ui/dist/assets/ms_MY-EZSGYYYQ-4cPLK-3L.js +1519 -0
  233. package/packages/ui/dist/assets/native-CJ5et6AR.js +1 -0
  234. package/packages/ui/dist/assets/network-placeholder-Dg1uUHiL.js +14 -0
  235. package/packages/ui/dist/assets/nftPlaceholder-i3AHSiD9.js +8 -0
  236. package/packages/ui/dist/assets/off-BtMm0fi2.js +8 -0
  237. package/packages/ui/dist/assets/optimism-HAF2GUT7-ec6Nqxs9.js +1 -0
  238. package/packages/ui/dist/assets/parseSignature-Cb5FlWWg.js +1 -0
  239. package/packages/ui/dist/assets/play-store-iKKkXa6a.js +32 -0
  240. package/packages/ui/dist/assets/plus-CA5NaRtb.js +13 -0
  241. package/packages/ui/dist/assets/polygon-WW6ZI7PM-DXlmm4L1.js +1 -0
  242. package/packages/ui/dist/assets/pt_BR-JQFQ3P4L-DOHfdcA2.js +1519 -0
  243. package/packages/ui/dist/assets/qr-code-D2kiqR7h.js +6 -0
  244. package/packages/ui/dist/assets/rainbowWallet-O26YNBMX-DUhYus-9.js +1 -0
  245. package/packages/ui/dist/assets/recycle-horizontal-Dcme7R03.js +9 -0
  246. package/packages/ui/dist/assets/refresh-Dega3sDp.js +8 -0
  247. package/packages/ui/dist/assets/refresh-S4T5V5GX-CwqIaaxK.js +1 -0
  248. package/packages/ui/dist/assets/reown-logo-xNkksyWJ.js +12 -0
  249. package/packages/ui/dist/assets/ronin-EMCPYXZT-N-QBHZdV.js +1 -0
  250. package/packages/ui/dist/assets/ru_RU-Z42UEJBP-Cvb2oWxQ.js +1519 -0
  251. package/packages/ui/dist/assets/safeWallet-5MNKTR5Z-D-5imDLD.js +1 -0
  252. package/packages/ui/dist/assets/sanko-RHQYXGM5-OX010CbN.js +1 -0
  253. package/packages/ui/dist/assets/scan-4UYSQ56Q-CjMz6-XC.js +1 -0
  254. package/packages/ui/dist/assets/scroll-5OBGQVOV-DJFECiai.js +1 -0
  255. package/packages/ui/dist/assets/search-HYl7NO8x.js +8 -0
  256. package/packages/ui/dist/assets/secp256k1-Cxd6_SiH.js +1 -0
  257. package/packages/ui/dist/assets/send-CJU8CUAo.js +15 -0
  258. package/packages/ui/dist/assets/sign-A7IJEUT5-CGsRnPrd.js +1 -0
  259. package/packages/ui/dist/assets/superposition-HG6MMR2Y-bRkgatRO.js +1 -0
  260. package/packages/ui/dist/assets/swapHorizontal-IMUKiUre.js +8 -0
  261. package/packages/ui/dist/assets/swapHorizontalBold-CNYnNJ9-.js +8 -0
  262. package/packages/ui/dist/assets/swapHorizontalMedium-B9VxEYsT.js +16 -0
  263. package/packages/ui/dist/assets/swapHorizontalRoundedBold-Dz33l_Jh.js +8 -0
  264. package/packages/ui/dist/assets/swapVertical-CHUmjVJ0.js +8 -0
  265. package/packages/ui/dist/assets/telegram-kl9S2mbU.js +16 -0
  266. package/packages/ui/dist/assets/th_TH-4YB4VSB2-BUipNP-V.js +1519 -0
  267. package/packages/ui/dist/assets/three-dots-U5lhA1Am.js +5 -0
  268. package/packages/ui/dist/assets/tr_TR-5FKHPPIO-D5jTpIm9.js +1519 -0
  269. package/packages/ui/dist/assets/twitch-KTEUWXEp.js +18 -0
  270. package/packages/ui/dist/assets/twitterIcon-BHiq8mRg.js +6 -0
  271. package/packages/ui/dist/assets/uk_UA-ZD4IBC52-DgnQrpzl.js +1519 -0
  272. package/packages/ui/dist/assets/unichain-C5BWO2ZY-BfguYsnu.js +1 -0
  273. package/packages/ui/dist/assets/verify-CfN-BXNd.js +8 -0
  274. package/packages/ui/dist/assets/verify-filled-DwZccetj.js +8 -0
  275. package/packages/ui/dist/assets/vi_VN-5EVRZKLY-x078672g.js +1519 -0
  276. package/packages/ui/dist/assets/w3m-modal-CS-PFqPE.js +642 -0
  277. package/packages/ui/dist/assets/wallet-DVlGkhOY.js +8 -0
  278. package/packages/ui/dist/assets/wallet-placeholder-CvR_iEWX.js +14 -0
  279. package/packages/ui/dist/assets/walletConnectWallet-YHWKVTDY-D3lyiczV.js +1 -0
  280. package/packages/ui/dist/assets/walletconnect-8pZBDvVI.js +30 -0
  281. package/packages/ui/dist/assets/warning-circle-ylLEE0Yp.js +12 -0
  282. package/packages/ui/dist/assets/x-C_TBsTMj.js +12 -0
  283. package/packages/ui/dist/assets/xdc-KJ3TDBYO-DNV6zchh.js +1 -0
  284. package/packages/ui/dist/assets/zetachain-TLDS5IPW-Udhyw16T.js +1 -0
  285. package/packages/ui/dist/assets/zh_CN-4XK5YJPR-Bt6Yz5Ek.js +1519 -0
  286. package/packages/ui/dist/assets/zh_HK-N4YN2WSI-Cvzl1V16.js +1519 -0
  287. package/packages/ui/dist/assets/zh_TW-CNCRXH6Z-BNelatfN.js +1519 -0
  288. package/packages/ui/dist/assets/zksync-DH7HK5U4-Dt4usFw6.js +1 -0
  289. package/packages/ui/dist/assets/zora-FYL5H3IO-iB4wygST.js +1 -0
  290. package/packages/ui/dist/index.html +14 -0
  291. package/scripts/check-docs.mjs +262 -0
  292. package/scripts/check-init.mjs +109 -0
  293. package/scripts/postinstall.js +366 -0
  294. package/templates/custom-mandate/.sail/contracts/interfaces/IPermission.sol +18 -0
  295. package/templates/custom-mandate/README.md +85 -0
  296. package/templates/custom-mandate/foundry.toml +8 -0
  297. package/templates/custom-mandate/mandates/BoundedCallPermission.sol +35 -0
  298. package/templates/custom-mandate/mandates/README.md +16 -0
  299. package/templates/dca-rebalancer/.cursor/rules +25 -0
  300. package/templates/dca-rebalancer/.env.example +6 -0
  301. package/templates/dca-rebalancer/.github/workflows/agent-tick.yml +32 -0
  302. package/templates/dca-rebalancer/.sail/.gitkeep +0 -0
  303. package/templates/dca-rebalancer/.sail/README.md +13 -0
  304. package/templates/dca-rebalancer/.sail/config.json +10 -0
  305. package/templates/dca-rebalancer/AGENTS.md +246 -0
  306. package/templates/dca-rebalancer/AGENT_PLAYBOOK.md +110 -0
  307. package/templates/dca-rebalancer/CLAUDE.md +2 -0
  308. package/templates/dca-rebalancer/README.md +16 -0
  309. package/templates/dca-rebalancer/_gitignore +13 -0
  310. package/templates/dca-rebalancer/docs/PERMISSION_MODEL.md +93 -0
  311. package/templates/dca-rebalancer/package.json +17 -0
  312. package/templates/dca-rebalancer/src/agent.ts +253 -0
  313. package/templates/dca-rebalancer/src/config.ts +27 -0
  314. package/templates/dca-rebalancer/src/mandate.ts +67 -0
  315. package/templates/dca-rebalancer/tsconfig.json +8 -0
  316. package/templates/dca-rebalancer/ui/README.md +3 -0
  317. package/templates/lifi-permissions/LifiBoundedApprovePermissionCloneable.sol +84 -0
  318. package/templates/lifi-permissions/LifiDiamondSwapPermissionCloneable.sol +97 -0
  319. package/templates/lifi-permissions/README.md +53 -0
@@ -0,0 +1,83 @@
1
+ /**
2
+ * LiFi aggregator helpers for the swap recipe (`client.strategy.swap`).
3
+ *
4
+ * The protocol's swap permissions (e.g. LifiDiamondSwapPermission) restrict
5
+ * manager swaps to the official LiFi Diamond. We fetch an executable quote from
6
+ * the LiFi API and hand its calldata to the kernel dispatch path.
7
+ */
8
+ import { type Address, type Hex } from "viem";
9
+ /** LiFi quote endpoint. */
10
+ export declare const LIFI_QUOTE_URL = "https://li.quest/v1/quote";
11
+ /**
12
+ * Canonical LiFi Diamond router per chain. LiFi deploys the diamond at the same
13
+ * address across most mainnets; callers can override via `SwapParams.router`.
14
+ */
15
+ export declare const LIFI_ROUTERS: Record<number, Address>;
16
+ /**
17
+ * Default slippage (3%). LiFi's own 0.5% default reverts with
18
+ * CumulativeSlippageTooHigh on small trades against live price moves.
19
+ */
20
+ export declare const DEFAULT_SLIPPAGE = 0.03;
21
+ /** ABI for reading an ERC-20 allowance. */
22
+ export declare const ERC20_ALLOWANCE_ABI: readonly [{
23
+ readonly name: "approve";
24
+ readonly type: "function";
25
+ readonly stateMutability: "nonpayable";
26
+ readonly inputs: readonly [{
27
+ readonly type: "address";
28
+ readonly name: "spender";
29
+ }, {
30
+ readonly type: "uint256";
31
+ readonly name: "amount";
32
+ }];
33
+ readonly outputs: readonly [];
34
+ }, {
35
+ readonly name: "allowance";
36
+ readonly type: "function";
37
+ readonly stateMutability: "view";
38
+ readonly inputs: readonly [{
39
+ readonly type: "address";
40
+ readonly name: "owner";
41
+ }, {
42
+ readonly type: "address";
43
+ readonly name: "spender";
44
+ }];
45
+ readonly outputs: readonly [{
46
+ readonly type: "uint256";
47
+ }];
48
+ }];
49
+ /** Encode an ERC-20 `approve(spender, amount)` calldata. */
50
+ export declare function encodeApprove(spender: Address, amount: bigint): Hex;
51
+ /** The pieces of a LiFi quote the dispatch path needs. */
52
+ export type LifiSwapQuote = {
53
+ /** Call target — the router that executes the swap. */
54
+ target: Address;
55
+ /** Swap calldata. */
56
+ data: Hex;
57
+ /** msg.value for the call (non-zero only for native-token inputs). */
58
+ value: bigint;
59
+ /** Expected output amount in `to`-token base units. */
60
+ toAmount: bigint;
61
+ /** Aggregator sub-route / tool name. */
62
+ tool?: string;
63
+ };
64
+ export type FetchLifiQuoteParams = {
65
+ chainId: number;
66
+ fromToken: Address;
67
+ toToken: Address;
68
+ /** Input amount in `fromToken` base units. */
69
+ fromAmount: bigint;
70
+ /** The account funding and (by default) receiving the swap. */
71
+ fromAddress: Address;
72
+ toAddress: Address;
73
+ /** Slippage as a fraction (0.03 = 3%). */
74
+ slippage: number;
75
+ /** Optional fetch implementation (defaults to global fetch). */
76
+ fetchFn?: typeof fetch;
77
+ };
78
+ /**
79
+ * Fetch an executable LiFi quote for a same-chain swap. Throws with the API's
80
+ * error body when the quote is unavailable or malformed.
81
+ */
82
+ export declare function fetchLifiQuote(params: FetchLifiQuoteParams): Promise<LifiSwapQuote>;
83
+ //# sourceMappingURL=lifi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifi.d.ts","sourceRoot":"","sources":["../src/lifi.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAsB,KAAK,GAAG,EAAY,MAAM,MAAM,CAAC;AAE5E,2BAA2B;AAC3B,eAAO,MAAM,cAAc,8BAA8B,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAIhD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAOrC,2CAA2C;AAC3C,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;EAAY,CAAC;AAE7C,4DAA4D;AAC5D,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAEnE;AAED,0DAA0D;AAC1D,MAAM,MAAM,aAAa,GAAG;IAC1B,uDAAuD;IACvD,MAAM,EAAE,OAAO,CAAC;IAChB,qBAAqB;IACrB,IAAI,EAAE,GAAG,CAAC;IACV,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB,CAAC;AAEF;;;GAGG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC,CAoCzF"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * LiFi aggregator helpers for the swap recipe (`client.strategy.swap`).
3
+ *
4
+ * The protocol's swap permissions (e.g. LifiDiamondSwapPermission) restrict
5
+ * manager swaps to the official LiFi Diamond. We fetch an executable quote from
6
+ * the LiFi API and hand its calldata to the kernel dispatch path.
7
+ */
8
+ import { encodeFunctionData, parseAbi } from "viem";
9
+ /** LiFi quote endpoint. */
10
+ export const LIFI_QUOTE_URL = "https://li.quest/v1/quote";
11
+ /**
12
+ * Canonical LiFi Diamond router per chain. LiFi deploys the diamond at the same
13
+ * address across most mainnets; callers can override via `SwapParams.router`.
14
+ */
15
+ export const LIFI_ROUTERS = {
16
+ 8453: "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE", // Base
17
+ 42161: "0x1231DEB6f5749EF6cE6943a275A1D3E7486F4EaE", // Arbitrum
18
+ 130: "0x864b314D4C5a0399368609581d3E8933a63b9232", // Unichain (non-canonical diamond addr)
19
+ };
20
+ /**
21
+ * Default slippage (3%). LiFi's own 0.5% default reverts with
22
+ * CumulativeSlippageTooHigh on small trades against live price moves.
23
+ */
24
+ export const DEFAULT_SLIPPAGE = 0.03;
25
+ const ERC20_ABI = parseAbi([
26
+ "function approve(address spender, uint256 amount)",
27
+ "function allowance(address owner, address spender) view returns (uint256)",
28
+ ]);
29
+ /** ABI for reading an ERC-20 allowance. */
30
+ export const ERC20_ALLOWANCE_ABI = ERC20_ABI;
31
+ /** Encode an ERC-20 `approve(spender, amount)` calldata. */
32
+ export function encodeApprove(spender, amount) {
33
+ return encodeFunctionData({ abi: ERC20_ABI, functionName: "approve", args: [spender, amount] });
34
+ }
35
+ /**
36
+ * Fetch an executable LiFi quote for a same-chain swap. Throws with the API's
37
+ * error body when the quote is unavailable or malformed.
38
+ */
39
+ export async function fetchLifiQuote(params) {
40
+ const doFetch = params.fetchFn ?? fetch;
41
+ const url = new URL(LIFI_QUOTE_URL);
42
+ url.searchParams.set("fromChain", String(params.chainId));
43
+ url.searchParams.set("toChain", String(params.chainId));
44
+ url.searchParams.set("fromToken", params.fromToken);
45
+ url.searchParams.set("toToken", params.toToken);
46
+ url.searchParams.set("fromAmount", params.fromAmount.toString());
47
+ url.searchParams.set("fromAddress", params.fromAddress);
48
+ url.searchParams.set("toAddress", params.toAddress);
49
+ url.searchParams.set("slippage", String(params.slippage));
50
+ const res = await doFetch(url.toString(), { headers: { Accept: "application/json" } });
51
+ if (!res.ok) {
52
+ const body = await res.text().catch(() => "");
53
+ throw new Error(`LiFi quote failed (${res.status}): ${body.slice(0, 400)}`);
54
+ }
55
+ const quote = (await res.json());
56
+ const tx = quote.transactionRequest;
57
+ if (!tx?.to || !tx?.data) {
58
+ throw new Error("LiFi quote returned no usable transactionRequest: " +
59
+ JSON.stringify(quote).slice(0, 400));
60
+ }
61
+ return {
62
+ target: tx.to,
63
+ data: tx.data,
64
+ value: BigInt(tx.value ?? "0"),
65
+ toAmount: BigInt(quote.estimate?.toAmount ?? "0"),
66
+ tool: quote.tool,
67
+ };
68
+ }
69
+ //# sourceMappingURL=lifi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifi.js","sourceRoot":"","sources":["../src/lifi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,158 @@
1
+ import { type Address, type Hex } from "viem";
2
+ /**
3
+ * Safe v1.4.1 `execTransaction` — the entry point through which the Safe calls
4
+ * another contract *as itself* (msg.sender == Safe). Full ABI:
5
+ * https://github.com/safe-global/safe-deployments/tree/main/src/assets/v1.4.1
6
+ */
7
+ export declare const gnosisSafeExecAbi: readonly [{
8
+ readonly type: "function";
9
+ readonly name: "execTransaction";
10
+ readonly stateMutability: "payable";
11
+ readonly inputs: readonly [{
12
+ readonly name: "to";
13
+ readonly type: "address";
14
+ }, {
15
+ readonly name: "value";
16
+ readonly type: "uint256";
17
+ }, {
18
+ readonly name: "data";
19
+ readonly type: "bytes";
20
+ }, {
21
+ readonly name: "operation";
22
+ readonly type: "uint8";
23
+ }, {
24
+ readonly name: "safeTxGas";
25
+ readonly type: "uint256";
26
+ }, {
27
+ readonly name: "baseGas";
28
+ readonly type: "uint256";
29
+ }, {
30
+ readonly name: "gasPrice";
31
+ readonly type: "uint256";
32
+ }, {
33
+ readonly name: "gasToken";
34
+ readonly type: "address";
35
+ }, {
36
+ readonly name: "refundReceiver";
37
+ readonly type: "address";
38
+ }, {
39
+ readonly name: "signatures";
40
+ readonly type: "bytes";
41
+ }];
42
+ readonly outputs: readonly [{
43
+ readonly name: "success";
44
+ readonly type: "bool";
45
+ }];
46
+ }];
47
+ /**
48
+ * Minimal Safe contract ABI — only what's needed to encode the setup
49
+ * initializer. Full ABI: https://github.com/safe-global/safe-deployments
50
+ */
51
+ export declare const gnosisSafeAbi: readonly [{
52
+ readonly type: "function";
53
+ readonly name: "setup";
54
+ readonly stateMutability: "nonpayable";
55
+ readonly inputs: readonly [{
56
+ readonly name: "_owners";
57
+ readonly type: "address[]";
58
+ }, {
59
+ readonly name: "_threshold";
60
+ readonly type: "uint256";
61
+ }, {
62
+ readonly name: "to";
63
+ readonly type: "address";
64
+ }, {
65
+ readonly name: "data";
66
+ readonly type: "bytes";
67
+ }, {
68
+ readonly name: "fallbackHandler";
69
+ readonly type: "address";
70
+ }, {
71
+ readonly name: "paymentToken";
72
+ readonly type: "address";
73
+ }, {
74
+ readonly name: "payment";
75
+ readonly type: "uint256";
76
+ }, {
77
+ readonly name: "paymentReceiver";
78
+ readonly type: "address";
79
+ }];
80
+ readonly outputs: readonly [];
81
+ }];
82
+ /**
83
+ * SafeModuleEnabler — `enable(module)` is delegatecalled via Safe.setup's
84
+ * `to`/`data` hook to enable a module on a freshly deployed Safe in the same
85
+ * transaction. Deployed once per chain (SailDeployment.safeModuleEnabler).
86
+ */
87
+ export declare const safeModuleEnablerAbi: readonly [{
88
+ readonly type: "function";
89
+ readonly name: "enable";
90
+ readonly stateMutability: "nonpayable";
91
+ readonly inputs: readonly [{
92
+ readonly name: "module";
93
+ readonly type: "address";
94
+ }];
95
+ readonly outputs: readonly [];
96
+ }];
97
+ /**
98
+ * Canonical Safe v1.4.1 deployment addresses (CREATE2 — same on all EVM chains).
99
+ * https://github.com/safe-global/safe-deployments/tree/main/src/assets/v1.4.1
100
+ */
101
+ export declare const SAFE_V141: {
102
+ readonly proxyFactory: "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67";
103
+ readonly singletonL2: "0x29fcB43b46531BcA003ddC8FCB67FFE91900C762";
104
+ readonly fallbackHandler: "0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99";
105
+ };
106
+ /**
107
+ * Build the `Safe.setup()` initializer for a Safe that will be registered with
108
+ * SailKernel via `kernel.createAccount()`.
109
+ *
110
+ * Wires the `to`/`data` delegatecall hook to the SafeModuleEnabler so the
111
+ * kernel is enabled as a Safe module *during* setup. Without this, the kernel's
112
+ * `createAccount` reverts with `ModuleNotEnabled()` after deploying the Safe.
113
+ */
114
+ export declare function buildSafeSetupInitializer(params: {
115
+ owners: Address[];
116
+ threshold: bigint;
117
+ kernel: Address;
118
+ safeModuleEnabler: Address;
119
+ fallbackHandler?: Address;
120
+ }): Hex;
121
+ /**
122
+ * Build a Safe "pre-validated" (approved-hash) signature for `owner`.
123
+ *
124
+ * Safe's `checkNSignatures` treats a signature with `v == 1` as pre-validated:
125
+ * it passes when the recovered owner address (`r`, left-padded to 32 bytes) is
126
+ * either the `msg.sender` or has previously called `approveHash`. So when the
127
+ * sole owner of a 1-of-1 Safe submits `execTransaction` themselves, this 65-byte
128
+ * blob authorises the call with NO off-chain Safe-tx EIP-712 signature and no
129
+ * dependency on the Safe nonce. Layout: r = owner(32) ‖ s = 0(32) ‖ v = 1(1).
130
+ */
131
+ export declare function buildApprovedHashSignature(owner: Address): Hex;
132
+ /** ABI-encode the kernel's `setManager(newManager)` call. */
133
+ export declare function encodeSetManager(newManager: Address): Hex;
134
+ /**
135
+ * Build the `Safe.execTransaction` calldata that rotates an SMA's delegated
136
+ * signer by calling `kernel.setManager(newManager)` *as the Safe*.
137
+ *
138
+ * `setManager` is gated by `msg.sender == account`, so it cannot be sent
139
+ * straight from the owner's EOA (as createAccount/dispatch are) — it must be
140
+ * wrapped in a Safe transaction. For the 1-of-1 Safes Sailor creates, the owner
141
+ * submits this tx from their own wallet and authorises it with a pre-validated
142
+ * signature (see `buildApprovedHashSignature`); no separate Safe-tx signing
143
+ * round-trip is needed. Returns the tx the owner sends: `{ to: safe, data }`.
144
+ */
145
+ export declare function buildSetManagerExecTransaction(params: {
146
+ /** The SMA (Safe) whose manager is being rotated; also the tx `to`. */
147
+ safe: Address;
148
+ /** The SailKernel the Safe will call. */
149
+ kernel: Address;
150
+ /** The new delegated signer (manager) address. */
151
+ newManager: Address;
152
+ /** The sole Safe owner who will submit this tx. */
153
+ owner: Address;
154
+ }): {
155
+ to: Address;
156
+ data: Hex;
157
+ };
158
+ //# sourceMappingURL=safe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe.d.ts","sourceRoot":"","sources":["../src/safe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,GAAG,EAAsD,MAAM,MAAM,CAAC;AAalG;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmBpB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBhB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;EAQvB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,SAAS;;;;CAIZ,CAAC;AAEX;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAChD,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,GAAG,GAAG,CAqBN;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,CAK9D;AAED,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,OAAO,GAAG,GAAG,CAMzD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE;IACrD,uEAAuE;IACvE,IAAI,EAAE,OAAO,CAAC;IACd,yCAAyC;IACzC,MAAM,EAAE,OAAO,CAAC;IAChB,kDAAkD;IAClD,UAAU,EAAE,OAAO,CAAC;IACpB,mDAAmD;IACnD,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,CAmB7B"}
@@ -0,0 +1,163 @@
1
+ import { encodeFunctionData, encodePacked, pad, zeroAddress } from "viem";
2
+ /** Minimal SailKernel ABI fragment for the manager-rotation call. */
3
+ const setManagerAbi = [
4
+ {
5
+ type: "function",
6
+ name: "setManager",
7
+ stateMutability: "nonpayable",
8
+ inputs: [{ name: "newManager", type: "address" }],
9
+ outputs: [],
10
+ },
11
+ ];
12
+ /**
13
+ * Safe v1.4.1 `execTransaction` — the entry point through which the Safe calls
14
+ * another contract *as itself* (msg.sender == Safe). Full ABI:
15
+ * https://github.com/safe-global/safe-deployments/tree/main/src/assets/v1.4.1
16
+ */
17
+ export const gnosisSafeExecAbi = [
18
+ {
19
+ type: "function",
20
+ name: "execTransaction",
21
+ stateMutability: "payable",
22
+ inputs: [
23
+ { name: "to", type: "address" },
24
+ { name: "value", type: "uint256" },
25
+ { name: "data", type: "bytes" },
26
+ { name: "operation", type: "uint8" },
27
+ { name: "safeTxGas", type: "uint256" },
28
+ { name: "baseGas", type: "uint256" },
29
+ { name: "gasPrice", type: "uint256" },
30
+ { name: "gasToken", type: "address" },
31
+ { name: "refundReceiver", type: "address" },
32
+ { name: "signatures", type: "bytes" },
33
+ ],
34
+ outputs: [{ name: "success", type: "bool" }],
35
+ },
36
+ ];
37
+ /**
38
+ * Minimal Safe contract ABI — only what's needed to encode the setup
39
+ * initializer. Full ABI: https://github.com/safe-global/safe-deployments
40
+ */
41
+ export const gnosisSafeAbi = [
42
+ {
43
+ type: "function",
44
+ name: "setup",
45
+ stateMutability: "nonpayable",
46
+ inputs: [
47
+ { name: "_owners", type: "address[]" },
48
+ { name: "_threshold", type: "uint256" },
49
+ { name: "to", type: "address" },
50
+ { name: "data", type: "bytes" },
51
+ { name: "fallbackHandler", type: "address" },
52
+ { name: "paymentToken", type: "address" },
53
+ { name: "payment", type: "uint256" },
54
+ { name: "paymentReceiver", type: "address" },
55
+ ],
56
+ outputs: [],
57
+ },
58
+ ];
59
+ /**
60
+ * SafeModuleEnabler — `enable(module)` is delegatecalled via Safe.setup's
61
+ * `to`/`data` hook to enable a module on a freshly deployed Safe in the same
62
+ * transaction. Deployed once per chain (SailDeployment.safeModuleEnabler).
63
+ */
64
+ export const safeModuleEnablerAbi = [
65
+ {
66
+ type: "function",
67
+ name: "enable",
68
+ stateMutability: "nonpayable",
69
+ inputs: [{ name: "module", type: "address" }],
70
+ outputs: [],
71
+ },
72
+ ];
73
+ /**
74
+ * Canonical Safe v1.4.1 deployment addresses (CREATE2 — same on all EVM chains).
75
+ * https://github.com/safe-global/safe-deployments/tree/main/src/assets/v1.4.1
76
+ */
77
+ export const SAFE_V141 = {
78
+ proxyFactory: "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67",
79
+ singletonL2: "0x29fcB43b46531BcA003ddC8FCB67FFE91900C762",
80
+ fallbackHandler: "0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99",
81
+ };
82
+ /**
83
+ * Build the `Safe.setup()` initializer for a Safe that will be registered with
84
+ * SailKernel via `kernel.createAccount()`.
85
+ *
86
+ * Wires the `to`/`data` delegatecall hook to the SafeModuleEnabler so the
87
+ * kernel is enabled as a Safe module *during* setup. Without this, the kernel's
88
+ * `createAccount` reverts with `ModuleNotEnabled()` after deploying the Safe.
89
+ */
90
+ export function buildSafeSetupInitializer(params) {
91
+ const enableModuleData = encodeFunctionData({
92
+ abi: safeModuleEnablerAbi,
93
+ functionName: "enable",
94
+ args: [params.kernel],
95
+ });
96
+ return encodeFunctionData({
97
+ abi: gnosisSafeAbi,
98
+ functionName: "setup",
99
+ args: [
100
+ params.owners,
101
+ params.threshold,
102
+ params.safeModuleEnabler, // to: delegatecall target
103
+ enableModuleData, // data: enable(kernel)
104
+ (params.fallbackHandler ?? SAFE_V141.fallbackHandler),
105
+ zeroAddress, // paymentToken
106
+ 0n, // payment
107
+ zeroAddress, // paymentReceiver
108
+ ],
109
+ });
110
+ }
111
+ /**
112
+ * Build a Safe "pre-validated" (approved-hash) signature for `owner`.
113
+ *
114
+ * Safe's `checkNSignatures` treats a signature with `v == 1` as pre-validated:
115
+ * it passes when the recovered owner address (`r`, left-padded to 32 bytes) is
116
+ * either the `msg.sender` or has previously called `approveHash`. So when the
117
+ * sole owner of a 1-of-1 Safe submits `execTransaction` themselves, this 65-byte
118
+ * blob authorises the call with NO off-chain Safe-tx EIP-712 signature and no
119
+ * dependency on the Safe nonce. Layout: r = owner(32) ‖ s = 0(32) ‖ v = 1(1).
120
+ */
121
+ export function buildApprovedHashSignature(owner) {
122
+ return encodePacked(["bytes32", "bytes32", "uint8"], [pad(owner, { size: 32 }), pad("0x", { size: 32 }), 1]);
123
+ }
124
+ /** ABI-encode the kernel's `setManager(newManager)` call. */
125
+ export function encodeSetManager(newManager) {
126
+ return encodeFunctionData({
127
+ abi: setManagerAbi,
128
+ functionName: "setManager",
129
+ args: [newManager],
130
+ });
131
+ }
132
+ /**
133
+ * Build the `Safe.execTransaction` calldata that rotates an SMA's delegated
134
+ * signer by calling `kernel.setManager(newManager)` *as the Safe*.
135
+ *
136
+ * `setManager` is gated by `msg.sender == account`, so it cannot be sent
137
+ * straight from the owner's EOA (as createAccount/dispatch are) — it must be
138
+ * wrapped in a Safe transaction. For the 1-of-1 Safes Sailor creates, the owner
139
+ * submits this tx from their own wallet and authorises it with a pre-validated
140
+ * signature (see `buildApprovedHashSignature`); no separate Safe-tx signing
141
+ * round-trip is needed. Returns the tx the owner sends: `{ to: safe, data }`.
142
+ */
143
+ export function buildSetManagerExecTransaction(params) {
144
+ const innerData = encodeSetManager(params.newManager);
145
+ const data = encodeFunctionData({
146
+ abi: gnosisSafeExecAbi,
147
+ functionName: "execTransaction",
148
+ args: [
149
+ params.kernel, // to
150
+ 0n, // value
151
+ innerData, // data: setManager(newManager)
152
+ 0, // operation: Call
153
+ 0n, // safeTxGas
154
+ 0n, // baseGas
155
+ 0n, // gasPrice
156
+ zeroAddress, // gasToken
157
+ zeroAddress, // refundReceiver
158
+ buildApprovedHashSignature(params.owner),
159
+ ],
160
+ });
161
+ return { to: params.safe, data };
162
+ }
163
+ //# sourceMappingURL=safe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe.js","sourceRoot":"","sources":["../src/safe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ import type { Address, Hex } from "viem";
2
+ export type SigningRequestKind = "create-sma" | "deploy-mandate" | "register-permission" | "attach-mandate" | "revoke-permissions" | "set-delegate" | "arbitrary-tx";
3
+ /** Fields shared by all signing request variants. */
4
+ export type SigningRequestBase = {
5
+ id: string;
6
+ kind: SigningRequestKind;
7
+ /** Short title shown in the UI approval card. */
8
+ title: string;
9
+ /** Plain-English description of what will happen. */
10
+ description: string;
11
+ chainId: number;
12
+ /** Human-readable breakdown rendered in the card. */
13
+ details: Array<{
14
+ label: string;
15
+ value: string;
16
+ }>;
17
+ createdAt: number;
18
+ };
19
+ /**
20
+ * The user submits an on-chain transaction from their connected wallet.
21
+ * The UI uses useSendTransaction; the response carries the txHash.
22
+ */
23
+ export type SigningTxRequest = SigningRequestBase & {
24
+ type: "transaction";
25
+ /**
26
+ * Target contract. Omitted for contract-creation transactions (e.g.
27
+ * deploying a new mandate), where `data` is the creation bytecode and the
28
+ * wallet must send the tx with no `to`.
29
+ */
30
+ to?: Address;
31
+ /** ETH value in wei, stringified (JSON-safe bigint). */
32
+ value?: string;
33
+ data: Hex;
34
+ };
35
+ /**
36
+ * JSON-serializable EIP-712 typed data (bigints stringified).
37
+ * The UI uses useSignTypedData; the response carries the signature.
38
+ */
39
+ export type SerializedTypedData = {
40
+ domain: {
41
+ name?: string;
42
+ version?: string;
43
+ chainId?: number;
44
+ verifyingContract?: string;
45
+ };
46
+ types: Record<string, Array<{
47
+ name: string;
48
+ type: string;
49
+ }>>;
50
+ primaryType: string;
51
+ /** All bigint values must be serialized as decimal strings. */
52
+ message: Record<string, string | number | boolean | string[]>;
53
+ };
54
+ /**
55
+ * The user signs an EIP-712 message (off-chain).
56
+ * The agent collects the signature and submits the actual transaction.
57
+ */
58
+ export type SigningTypedDataRequest = SigningRequestBase & {
59
+ type: "typed-data";
60
+ typedData: SerializedTypedData;
61
+ };
62
+ export type SigningRequest = SigningTxRequest | SigningTypedDataRequest;
63
+ export type SigningResponse = {
64
+ status: "signed";
65
+ requestId: string;
66
+ txHash: Hex;
67
+ } | {
68
+ status: "signature";
69
+ requestId: string;
70
+ signature: Hex;
71
+ } | {
72
+ status: "rejected";
73
+ requestId: string;
74
+ reason?: string;
75
+ };
76
+ /** WebSocket messages: server → UI. */
77
+ export type ServerMessage = {
78
+ type: "pending";
79
+ requests: SigningRequest[];
80
+ } | {
81
+ type: "request";
82
+ request: SigningRequest;
83
+ } | {
84
+ type: "request-resolved";
85
+ requestId: string;
86
+ };
87
+ /** WebSocket messages: UI → server. */
88
+ export type ClientMessage = {
89
+ type: "signed";
90
+ requestId: string;
91
+ txHash: Hex;
92
+ } | {
93
+ type: "signature";
94
+ requestId: string;
95
+ signature: Hex;
96
+ } | {
97
+ type: "rejected";
98
+ requestId: string;
99
+ reason?: string;
100
+ } | {
101
+ type: "wallet-connected";
102
+ address: Address;
103
+ } | {
104
+ type: "wallet-disconnected";
105
+ };
106
+ //# sourceMappingURL=signing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signing.d.ts","sourceRoot":"","sources":["../src/signing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=signing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signing.js","sourceRoot":"","sources":["../src/signing.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import type { Address, PermissionTemplate } from "../types.js";
2
+ /** Params for SharedAmmLiquidityPermission. */
3
+ export type AmmLiquidityParams = {
4
+ /** Maximum total liquidity value in USD-equivalent (18-decimal WAD). */
5
+ maxLiquidityValueUsd: number;
6
+ /** Pool addresses the agent may LP into. */
7
+ allowedPools: Address[];
8
+ /** Protocol identifiers allowed (e.g. ["uniswapV3", "curveV2", "balancer"]). */
9
+ allowedProtocols: string[];
10
+ /** Whether single-sided deposits are permitted. */
11
+ allowSingleSided: boolean;
12
+ /** Maximum price range width in basis points (Uni V3 only). */
13
+ maxRangeBps?: number;
14
+ };
15
+ export declare const ammLiquidityTemplate: PermissionTemplate<AmmLiquidityParams>;
16
+ //# sourceMappingURL=ammLiquidity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ammLiquidity.d.ts","sourceRoot":"","sources":["../../src/templates/ammLiquidity.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA2B,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAExF,+CAA+C;AAC/C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,wEAAwE;IACxE,oBAAoB,EAAE,MAAM,CAAC;IAC7B,4CAA4C;IAC5C,YAAY,EAAE,OAAO,EAAE,CAAC;IACxB,gFAAgF;IAChF,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,mDAAmD;IACnD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAUF,eAAO,MAAM,oBAAoB,EAAE,kBAAkB,CAAC,kBAAkB,CAuDvE,CAAC"}