@dev.sail.money/sailor 0.0.2-12

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 +51201 -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,255 @@
1
+ import { keccak256 } from "viem";
2
+ import { detectKernelCapabilities } from "./capabilities.js";
3
+ /** EIP-712 domain for the SailKernel on a given chain. */
4
+ export function sailKernelDomain(args) {
5
+ return {
6
+ name: "SailKernel",
7
+ version: "1",
8
+ chainId: args.chainId,
9
+ verifyingContract: args.kernel,
10
+ };
11
+ }
12
+ // ── Dispatch signing ─────────────────────────────────────────────────────────
13
+ /**
14
+ * EIP-712 Dispatch struct field lists, keyed by dispatch model.
15
+ *
16
+ * This is the canonical definition used by BOTH `buildDispatchSignature` (the
17
+ * public helper) and `SailorClient.dispatch.single()` (the internal path) — a
18
+ * single source of truth that makes it impossible for the two paths to diverge.
19
+ * Selective kernels include the `permission` field; conjunctive kernels do not.
20
+ */
21
+ export const DISPATCH_EIP712_FIELDS = {
22
+ selective: [
23
+ { name: "account", type: "address" },
24
+ { name: "permission", type: "address" },
25
+ { name: "target", type: "address" },
26
+ { name: "value", type: "uint256" },
27
+ { name: "dataHash", type: "bytes32" },
28
+ { name: "nonce", type: "uint256" },
29
+ { name: "deadline", type: "uint256" },
30
+ ],
31
+ conjunctive: [
32
+ { name: "account", type: "address" },
33
+ { name: "target", type: "address" },
34
+ { name: "value", type: "uint256" },
35
+ { name: "dataHash", type: "bytes32" },
36
+ { name: "nonce", type: "uint256" },
37
+ { name: "deadline", type: "uint256" },
38
+ ],
39
+ };
40
+ /** Default dispatch deadline: 10 minutes from now (unix seconds). */
41
+ const DEFAULT_DISPATCH_DEADLINE_SECS = 600;
42
+ /** Minimal ABI for reading the on-chain manager nonce. */
43
+ const MANAGER_NONCES_ABI = [
44
+ {
45
+ type: "function",
46
+ name: "managerNonces",
47
+ stateMutability: "view",
48
+ inputs: [{ name: "account", type: "address" }],
49
+ outputs: [{ type: "uint256" }],
50
+ },
51
+ ];
52
+ /**
53
+ * Build a signed EIP-712 Dispatch payload for a SailKernel manager dispatch.
54
+ *
55
+ * ### Why there is no `model` / `dispatchModel` parameter
56
+ *
57
+ * The Phase 1 incident established that the single most dangerous mistake an
58
+ * operator can make is using the wrong dispatch model. The conjunctive struct
59
+ * (6 fields, no `permission`) and the selective struct (7 fields, with
60
+ * `permission`) produce different EIP-712 digests; signing the wrong one
61
+ * recovers a random address and reverts with `InvalidManagerSignature()`.
62
+ *
63
+ * This function reads the on-chain `DISPATCH_TYPEHASH` from the kernel before
64
+ * signing — the correct struct is selected automatically regardless of what the
65
+ * caller believes the model to be. Callers cannot supply a model override; if
66
+ * the on-chain read fails (bad RPC, wrong kernel address), the function throws
67
+ * a clear error rather than signing blindly against an assumed model.
68
+ *
69
+ * @example
70
+ * ```ts
71
+ * const { signature, nonce, deadline } = await buildDispatchSignature({
72
+ * publicClient,
73
+ * kernel: "0x6319d3df...",
74
+ * chainId: 8453,
75
+ * account: mySafe,
76
+ * permission: myPermission,
77
+ * call: { target: router, value: 0n, data: swapCalldata },
78
+ * manager: myKeyring,
79
+ * });
80
+ * // Then submit: kernel.dispatch(account, permission, target, value, data, signature, deadline)
81
+ * ```
82
+ */
83
+ export async function buildDispatchSignature(params) {
84
+ const { publicClient, kernel, chainId, account, permission, call, manager } = params;
85
+ // 1. Detect model — reads DISPATCH_TYPEHASH from the live kernel; cached
86
+ // per (chainId, kernel) so repeated calls within a session are cheap.
87
+ const caps = await detectKernelCapabilities(publicClient, kernel, {
88
+ chainId,
89
+ });
90
+ // 2. Resolve nonce — use caller-supplied value or read from chain.
91
+ const nonce = params.nonce ??
92
+ (await publicClient.readContract({
93
+ address: kernel,
94
+ abi: MANAGER_NONCES_ABI,
95
+ functionName: "managerNonces",
96
+ args: [account],
97
+ }));
98
+ // 3. Set deadline.
99
+ const deadline = params.deadline ?? BigInt(Math.floor(Date.now() / 1000) + DEFAULT_DISPATCH_DEADLINE_SECS);
100
+ // 4. Build EIP-712 typed-data message. Selective kernels include `permission`
101
+ // in the signed struct; conjunctive kernels do not.
102
+ const dataHash = keccak256(call.data);
103
+ const selective = caps.dispatchModel === "selective";
104
+ const message = selective
105
+ ? { account, permission, target: call.target, value: call.value, dataHash, nonce, deadline }
106
+ : { account, target: call.target, value: call.value, dataHash, nonce, deadline };
107
+ // 5. Sign.
108
+ const signature = await manager.signTyped(sailKernelDomain({ chainId, kernel }), {
109
+ primaryType: "Dispatch",
110
+ types: {
111
+ Dispatch: DISPATCH_EIP712_FIELDS[caps.dispatchModel],
112
+ },
113
+ }, message);
114
+ return { signature, nonce, deadline, dispatchModel: caps.dispatchModel };
115
+ }
116
+ /**
117
+ * EIP-712 types for RegisterPermission — selective kernel (withDeadline variant).
118
+ * Used when detectKernelCapabilities reports registerPermissionHasDeadline = true.
119
+ */
120
+ export const REGISTER_PERMISSION_TYPES = {
121
+ RegisterPermission: [
122
+ { name: "account", type: "address" },
123
+ { name: "permission", type: "address" },
124
+ { name: "nonce", type: "uint256" },
125
+ { name: "deadline", type: "uint256" },
126
+ ],
127
+ };
128
+ /**
129
+ * EIP-712 types for RegisterPermission — conjunctive kernel (noDeadline variant).
130
+ * Used when detectKernelCapabilities reports registerPermissionHasDeadline = false.
131
+ */
132
+ export const REGISTER_PERMISSION_TYPES_NO_DEADLINE = {
133
+ RegisterPermission: [
134
+ { name: "account", type: "address" },
135
+ { name: "permission", type: "address" },
136
+ { name: "nonce", type: "uint256" },
137
+ ],
138
+ };
139
+ /**
140
+ * Build a JSON-serializable RegisterPermission typed-data payload for the
141
+ * browser signing station. Bigints are stringified so it survives transport;
142
+ * the UI re-parses decimal-string fields before signing.
143
+ *
144
+ * Pass `hasDeadline` from KernelCapabilities.registerPermissionHasDeadline.
145
+ * All bundled kernels (Base, Base Sepolia, Arbitrum) are now selective and include
146
+ * the deadline field. This flag exists for older or custom kernels that predate the
147
+ * selective model. detectKernelCapabilities resolves this from the on-chain REGISTER_PERMISSION_TYPEHASH.
148
+ */
149
+ export function buildRegisterPermissionTypedData(args) {
150
+ const hasDeadline = args.hasDeadline ?? false;
151
+ const domain = {
152
+ name: "SailKernel",
153
+ version: "1",
154
+ chainId: args.chainId,
155
+ verifyingContract: args.kernel,
156
+ };
157
+ if (hasDeadline) {
158
+ const deadline = args.deadline ?? BigInt(Math.floor(Date.now() / 1000) + 300);
159
+ return {
160
+ domain,
161
+ types: REGISTER_PERMISSION_TYPES,
162
+ primaryType: "RegisterPermission",
163
+ message: {
164
+ account: args.account,
165
+ permission: args.permission,
166
+ nonce: args.nonce.toString(),
167
+ deadline: deadline.toString(),
168
+ },
169
+ };
170
+ }
171
+ return {
172
+ domain,
173
+ types: REGISTER_PERMISSION_TYPES_NO_DEADLINE,
174
+ primaryType: "RegisterPermission",
175
+ message: {
176
+ account: args.account,
177
+ permission: args.permission,
178
+ nonce: args.nonce.toString(),
179
+ },
180
+ };
181
+ }
182
+ /**
183
+ * EIP-712 types for RegisterPermissions (batch) — selective kernel. Mirrors the
184
+ * shape SailorClient.mandate.attachBatch signs and the on-chain
185
+ * registerPermissions(account, permissions[], deadline, sig) entry point.
186
+ */
187
+ export const REGISTER_PERMISSIONS_BATCH_TYPES = {
188
+ RegisterPermissions: [
189
+ { name: "account", type: "address" },
190
+ { name: "permissions", type: "address[]" },
191
+ { name: "nonce", type: "uint256" },
192
+ { name: "deadline", type: "uint256" },
193
+ ],
194
+ };
195
+ /**
196
+ * Build a JSON-serializable RegisterPermissions (batch) typed-data payload for
197
+ * the browser signing station — the re-approval step after a manager rotation,
198
+ * which rebinds every previously-attached mandate to the new delegated signer in
199
+ * a single owner signature + tx. Bigints are stringified for transport.
200
+ */
201
+ export function buildRegisterPermissionsBatchTypedData(args) {
202
+ const deadline = args.deadline ?? BigInt(Math.floor(Date.now() / 1000) + 600);
203
+ return {
204
+ domain: {
205
+ name: "SailKernel",
206
+ version: "1",
207
+ chainId: args.chainId,
208
+ verifyingContract: args.kernel,
209
+ },
210
+ types: REGISTER_PERMISSIONS_BATCH_TYPES,
211
+ primaryType: "RegisterPermissions",
212
+ message: {
213
+ account: args.account,
214
+ permissions: args.permissions,
215
+ nonce: args.nonce.toString(),
216
+ deadline: deadline.toString(),
217
+ },
218
+ };
219
+ }
220
+ /**
221
+ * Sign a RegisterPermission message directly with a wallet client. Used by
222
+ * headless flows (tests / scripts) where the owner's key is local rather than
223
+ * in a browser. The browser path uses buildRegisterPermissionTypedData instead.
224
+ *
225
+ * Pass `hasDeadline` from KernelCapabilities.registerPermissionHasDeadline.
226
+ */
227
+ export async function signRegisterPermission(args) {
228
+ const hasDeadline = args.hasDeadline ?? false;
229
+ const domain = sailKernelDomain({ chainId: args.chainId, kernel: args.kernel });
230
+ if (hasDeadline) {
231
+ const deadline = args.deadline ?? BigInt(Math.floor(Date.now() / 1000) + 300);
232
+ return args.walletClient.signTypedData({
233
+ domain,
234
+ types: REGISTER_PERMISSION_TYPES,
235
+ primaryType: "RegisterPermission",
236
+ message: {
237
+ account: args.account,
238
+ permission: args.permission,
239
+ nonce: args.nonce,
240
+ deadline,
241
+ },
242
+ });
243
+ }
244
+ return args.walletClient.signTypedData({
245
+ domain,
246
+ types: REGISTER_PERMISSION_TYPES_NO_DEADLINE,
247
+ primaryType: "RegisterPermission",
248
+ message: {
249
+ account: args.account,
250
+ permission: args.permission,
251
+ nonce: args.nonce,
252
+ },
253
+ });
254
+ }
255
+ //# sourceMappingURL=eip712.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eip712.js","sourceRoot":"","sources":["../src/eip712.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Kernel revert decoding.
3
+ *
4
+ * The deployed SailKernel reverts with custom errors (4-byte selectors). viem
5
+ * cannot name them unless the error fragments are present in the ABI it was
6
+ * given, so by default a dispatch failure surfaces as an opaque selector like
7
+ * `0xeb6942f1`. This module ships the full set of kernel error fragments (the
8
+ * UNION of the currently-deployed and latest-source versions) plus a decoder
9
+ * that turns a raw revert into a named, human-readable diagnosis with a hint at
10
+ * the likely cause and fix.
11
+ */
12
+ import { type Abi, type Hex } from "viem";
13
+ /**
14
+ * Human-readable signatures for every custom error the SailKernel can revert
15
+ * with, across deployed and latest-source versions. Used purely for decoding —
16
+ * unknown selectors simply fail to match and fall through to `null`.
17
+ */
18
+ export declare const KERNEL_ERROR_SIGNATURES: readonly ["error AccountAlreadyRegistered(address account)", "error AccountNotRegistered(address account)", "error AccountSelfTarget()", "error ArrayLengthMismatch()", "error BatchPermissionDenied()", "error BatchSubcallFailed(uint256 index, address target)", "error BatchTooLong(uint256 length)", "error BatchZeroTarget(uint256 index)", "error DeadlineExpired(uint256 deadline, uint256 current)", "error DistributorBpsTooLarge(uint256 bps)", "error EmptyBatch()", "error FeePolicyNotSet()", "error FeeTokenMismatch(address provided, address expected)", "error FeeTooLarge(uint256 requested, uint256 maxAllowed)", "error FeeTransferFailed()", "error InsufficientFee(uint256 required, uint256 provided)", "error InvalidInitializer()", "error InvalidManagerSignature()", "error InvalidSignerSignature()", "error KernelSelfTarget(uint256 index)", "error ManagerUnchanged()", "error ModuleNotEnabled()", "error NoPermissionsRegistered(address account)", "error NotAContract(address addr)", "error NotGovernance()", "error NotManager(address caller, address expected)", "error NotPermissionSigner()", "error NotTimelock()", "error PermissionAlreadyRegistered(address permission)", "error PermissionDenied(address permission)", "error PermissionNotBatchAware(address permission)", "error PermissionNotRegistered(address permission)", "error ProtocolPaused()", "error SafeExecutionFailed()", "error SessionInactive(address account)", "error TooManyPermissions(address account, uint256 limit)", "error UntrustedFactory(address factory)", "error UntrustedFeePolicy(address policy)", "error UntrustedModuleSetup(address setup)", "error UntrustedProxyCodehash(bytes32 codehash)", "error UntrustedSingleton(address singleton)", "error ZeroAddress()", "error ZeroFee()"];
19
+ /** The kernel error fragments as a viem ABI, ready for `decodeErrorResult`. */
20
+ export declare const KERNEL_ERROR_ABI: Abi;
21
+ /** A decoded kernel custom error. */
22
+ export type KernelError = {
23
+ /** Solidity error name, e.g. "InvalidManagerSignature". */
24
+ name: string;
25
+ /** Decoded arguments, in declaration order (empty for zero-arg errors). */
26
+ args: readonly unknown[];
27
+ /** The 4-byte selector that was matched, e.g. "0xeb6942f1". */
28
+ selector: Hex;
29
+ /** Operator-facing hint at the likely cause and fix, when one is known. */
30
+ hint?: string;
31
+ /** A one-line, log-friendly summary combining name, args, and hint. */
32
+ message: string;
33
+ };
34
+ /**
35
+ * Decode a raw revert data hex string (`0x` + selector + abi-encoded args) into
36
+ * a named kernel error. Returns null if the data does not match any known kernel
37
+ * error fragment.
38
+ */
39
+ export declare function decodeKernelError(data: Hex): Promise<KernelError | null>;
40
+ /**
41
+ * Walk a thrown viem error to find embedded revert data, then decode it as a
42
+ * kernel error. Handles ContractFunctionExecutionError / ContractFunctionReverted
43
+ * / RawContractError shapes by scanning `.cause` chains and common data fields.
44
+ * Returns null when no kernel error can be recovered.
45
+ */
46
+ export declare function explainKernelRevert(err: unknown): Promise<KernelError | null>;
47
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,GAAG,EAAY,MAAM,MAAM,CAAC;AAEpD;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,+tDA8C1B,CAAC;AAEX,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,EAAE,GAAuC,CAAC;AA2CvE,qCAAqC;AACrC,MAAM,MAAM,WAAW,GAAG;IACxB,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,IAAI,EAAE,SAAS,OAAO,EAAE,CAAC;IACzB,+DAA+D;IAC/D,QAAQ,EAAE,GAAG,CAAC;IACd,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAqBF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAGxE;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAInF"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Kernel revert decoding.
3
+ *
4
+ * The deployed SailKernel reverts with custom errors (4-byte selectors). viem
5
+ * cannot name them unless the error fragments are present in the ABI it was
6
+ * given, so by default a dispatch failure surfaces as an opaque selector like
7
+ * `0xeb6942f1`. This module ships the full set of kernel error fragments (the
8
+ * UNION of the currently-deployed and latest-source versions) plus a decoder
9
+ * that turns a raw revert into a named, human-readable diagnosis with a hint at
10
+ * the likely cause and fix.
11
+ */
12
+ import { parseAbi } from "viem";
13
+ /**
14
+ * Human-readable signatures for every custom error the SailKernel can revert
15
+ * with, across deployed and latest-source versions. Used purely for decoding —
16
+ * unknown selectors simply fail to match and fall through to `null`.
17
+ */
18
+ export const KERNEL_ERROR_SIGNATURES = [
19
+ "error AccountAlreadyRegistered(address account)",
20
+ "error AccountNotRegistered(address account)",
21
+ "error AccountSelfTarget()",
22
+ "error ArrayLengthMismatch()",
23
+ "error BatchPermissionDenied()",
24
+ "error BatchSubcallFailed(uint256 index, address target)",
25
+ "error BatchTooLong(uint256 length)",
26
+ "error BatchZeroTarget(uint256 index)",
27
+ "error DeadlineExpired(uint256 deadline, uint256 current)",
28
+ "error DistributorBpsTooLarge(uint256 bps)",
29
+ "error EmptyBatch()",
30
+ "error FeePolicyNotSet()",
31
+ "error FeeTokenMismatch(address provided, address expected)",
32
+ "error FeeTooLarge(uint256 requested, uint256 maxAllowed)",
33
+ "error FeeTransferFailed()",
34
+ "error InsufficientFee(uint256 required, uint256 provided)",
35
+ "error InvalidInitializer()",
36
+ "error InvalidManagerSignature()",
37
+ "error InvalidSignerSignature()",
38
+ "error KernelSelfTarget(uint256 index)",
39
+ // SAIL-405: setManager rejects a no-op rotation (newManager == current).
40
+ "error ManagerUnchanged()",
41
+ "error ModuleNotEnabled()",
42
+ // Present in the deployed conjunctive kernel; dropped in the latest source.
43
+ "error NoPermissionsRegistered(address account)",
44
+ "error NotAContract(address addr)",
45
+ "error NotGovernance()",
46
+ "error NotManager(address caller, address expected)",
47
+ "error NotPermissionSigner()",
48
+ "error NotTimelock()",
49
+ "error PermissionAlreadyRegistered(address permission)",
50
+ "error PermissionDenied(address permission)",
51
+ "error PermissionNotBatchAware(address permission)",
52
+ "error PermissionNotRegistered(address permission)",
53
+ "error ProtocolPaused()",
54
+ "error SafeExecutionFailed()",
55
+ "error SessionInactive(address account)",
56
+ "error TooManyPermissions(address account, uint256 limit)",
57
+ "error UntrustedFactory(address factory)",
58
+ "error UntrustedFeePolicy(address policy)",
59
+ "error UntrustedModuleSetup(address setup)",
60
+ "error UntrustedProxyCodehash(bytes32 codehash)",
61
+ "error UntrustedSingleton(address singleton)",
62
+ "error ZeroAddress()",
63
+ "error ZeroFee()",
64
+ ];
65
+ /** The kernel error fragments as a viem ABI, ready for `decodeErrorResult`. */
66
+ export const KERNEL_ERROR_ABI = parseAbi(KERNEL_ERROR_SIGNATURES);
67
+ /**
68
+ * Operator-facing hints for the errors most likely to be hit at dispatch time.
69
+ * Keyed by error name. These translate a raw revert into "what went wrong and
70
+ * what to do about it" — the bulk of the value of this module.
71
+ */
72
+ const ERROR_HINTS = {
73
+ InvalidManagerSignature: "The manager's EIP-712 Dispatch signature did not recover to the registered manager. " +
74
+ "Most common cause: a stale manager nonce (the kernel's managerNonces advanced between " +
75
+ "signing and submission — e.g. a load-balanced RPC returned a lagging value, or two " +
76
+ "dispatches were signed against the same nonce). Re-read managerNonces and re-sign, or " +
77
+ "track the nonce locally and increment it across sequential dispatches. Can also mean the " +
78
+ "wrong EIP-712 Dispatch type was used for this kernel version — see detectKernelCapabilities.",
79
+ PermissionDenied: "A registered permission's evaluate() returned false (or reverted / ran out of gas) for this call. " +
80
+ "In a conjunctive kernel EVERY registered permission must approve EVERY call, so a permission " +
81
+ "that does not pass through calls outside its own domain will block unrelated dispatches. " +
82
+ "Check that each permission either matches this call or returns true for calls it doesn't govern.",
83
+ NoPermissionsRegistered: "The account has zero registered permissions, so the kernel denies by default. Register at least " +
84
+ "one permission (kernel.registerPermission / registerPermissions) before dispatching.",
85
+ PermissionNotRegistered: "The named permission is not registered for this account. Register it first, or (on a conjunctive " +
86
+ "kernel) drop the permission argument — that kernel checks all registered permissions automatically.",
87
+ SessionInactive: "The manager's session is revoked. Re-activate it (session.activate) before dispatching.",
88
+ DeadlineExpired: "The signature deadline is in the past. Use a deadline comfortably ahead of block.timestamp.",
89
+ SafeExecutionFailed: "The underlying Safe module call reverted. The permission passed, but the target call itself failed " +
90
+ "(e.g. slippage too tight, insufficient allowance/balance, or a failing swap route).",
91
+ ModuleNotEnabled: "The Sail module is not enabled on the Safe. Complete account onboarding (enable the module) first.",
92
+ ProtocolPaused: "The protocol is paused by governance. Dispatches are blocked until it is unpaused.",
93
+ NotManager: "The submitting address is not the registered manager for this account.",
94
+ TooManyPermissions: "Registering this permission would exceed the kernel's per-account permission cap. Revoke an unused " +
95
+ "permission first.",
96
+ };
97
+ /** Lazily decode an error selector against the kernel error ABI. */
98
+ async function decode(data) {
99
+ // decodeErrorResult is imported lazily so this module has no eager viem cost
100
+ // beyond parseAbi; it also keeps the import surface obvious.
101
+ const { decodeErrorResult } = await import("viem");
102
+ try {
103
+ const decoded = decodeErrorResult({ abi: KERNEL_ERROR_ABI, data });
104
+ const name = decoded.errorName;
105
+ const args = (decoded.args ?? []);
106
+ const selector = data.slice(0, 10);
107
+ const hint = ERROR_HINTS[name];
108
+ const argStr = args.length ? `(${args.map(String).join(", ")})` : "()";
109
+ const message = hint ? `${name}${argStr} — ${hint}` : `${name}${argStr}`;
110
+ return { name, args, selector, hint, message };
111
+ }
112
+ catch {
113
+ return null;
114
+ }
115
+ }
116
+ /**
117
+ * Decode a raw revert data hex string (`0x` + selector + abi-encoded args) into
118
+ * a named kernel error. Returns null if the data does not match any known kernel
119
+ * error fragment.
120
+ */
121
+ export function decodeKernelError(data) {
122
+ if (!data || data === "0x")
123
+ return Promise.resolve(null);
124
+ return decode(data);
125
+ }
126
+ /**
127
+ * Walk a thrown viem error to find embedded revert data, then decode it as a
128
+ * kernel error. Handles ContractFunctionExecutionError / ContractFunctionReverted
129
+ * / RawContractError shapes by scanning `.cause` chains and common data fields.
130
+ * Returns null when no kernel error can be recovered.
131
+ */
132
+ export async function explainKernelRevert(err) {
133
+ const data = extractRevertData(err);
134
+ if (!data)
135
+ return null;
136
+ return decodeKernelError(data);
137
+ }
138
+ /** Best-effort extraction of `0x…`-encoded revert data from an unknown thrown value. */
139
+ function extractRevertData(err) {
140
+ const seen = new Set();
141
+ let cursor = err;
142
+ let depth = 0;
143
+ while (cursor && typeof cursor === "object" && !seen.has(cursor) && depth < 12) {
144
+ seen.add(cursor);
145
+ depth++;
146
+ const obj = cursor;
147
+ // viem ContractFunctionRevertedError carries `.data` as a decoded object OR
148
+ // the raw error may carry a `.data` hex string; RawContractError uses `.data`.
149
+ const data = obj["data"];
150
+ if (typeof data === "string" && data.startsWith("0x") && data.length >= 10) {
151
+ return data;
152
+ }
153
+ if (data && typeof data === "object") {
154
+ const inner = data["data"];
155
+ if (typeof inner === "string" && inner.startsWith("0x") && inner.length >= 10) {
156
+ return inner;
157
+ }
158
+ }
159
+ // Some shapes stash it on `.raw` or `.signature`.
160
+ const raw = obj["raw"];
161
+ if (typeof raw === "string" && raw.startsWith("0x") && raw.length >= 10) {
162
+ return raw;
163
+ }
164
+ cursor = obj["cause"];
165
+ }
166
+ return null;
167
+ }
168
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { Address, PublicClient } from "viem";
2
+ /**
3
+ * Estimate the exact fee (in wei) the kernel charges to register a permission.
4
+ *
5
+ * The deployed Base / Base-Sepolia governance uses the LEGACY model:
6
+ *
7
+ * fee = min(baseFee, cap) + min(byteLength * complexityRate, cap), capped at cap
8
+ *
9
+ * where byteLength is the deployed permission's runtime bytecode length and
10
+ * cap = MAX_PERMISSION_FEE_WEI. Newer governance may instead expose a flat
11
+ * permissionRegistrationFee(); if the legacy views are missing we fall back to
12
+ * that. The fee must be sent exactly: underpaying reverts with InsufficientFee,
13
+ * and overpaying (e.g. sending the cap) needlessly ties up the agent's balance.
14
+ */
15
+ export declare function estimatePermissionFee(publicClient: PublicClient, governance: Address, permission: Address): Promise<bigint>;
16
+ //# sourceMappingURL=fees.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fees.d.ts","sourceRoot":"","sources":["../src/fees.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAOlD;;;;;;;;;;;;GAYG;AACH,wBAAsB,qBAAqB,CACzC,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,OAAO,EACnB,UAAU,EAAE,OAAO,GAClB,OAAO,CAAC,MAAM,CAAC,CA+BjB"}
@@ -0,0 +1,51 @@
1
+ import { SailGovernanceAbi } from "./abis/SailGovernance.js";
2
+ function min(a, b) {
3
+ return a < b ? a : b;
4
+ }
5
+ /**
6
+ * Estimate the exact fee (in wei) the kernel charges to register a permission.
7
+ *
8
+ * The deployed Base / Base-Sepolia governance uses the LEGACY model:
9
+ *
10
+ * fee = min(baseFee, cap) + min(byteLength * complexityRate, cap), capped at cap
11
+ *
12
+ * where byteLength is the deployed permission's runtime bytecode length and
13
+ * cap = MAX_PERMISSION_FEE_WEI. Newer governance may instead expose a flat
14
+ * permissionRegistrationFee(); if the legacy views are missing we fall back to
15
+ * that. The fee must be sent exactly: underpaying reverts with InsufficientFee,
16
+ * and overpaying (e.g. sending the cap) needlessly ties up the agent's balance.
17
+ */
18
+ export async function estimatePermissionFee(publicClient, governance, permission) {
19
+ try {
20
+ const [baseFee, complexityRate, cap, code] = await Promise.all([
21
+ publicClient.readContract({
22
+ address: governance,
23
+ abi: SailGovernanceAbi,
24
+ functionName: "baseFee",
25
+ }),
26
+ publicClient.readContract({
27
+ address: governance,
28
+ abi: SailGovernanceAbi,
29
+ functionName: "complexityRate",
30
+ }),
31
+ publicClient.readContract({
32
+ address: governance,
33
+ abi: SailGovernanceAbi,
34
+ functionName: "MAX_PERMISSION_FEE_WEI",
35
+ }),
36
+ publicClient.getBytecode({ address: permission }),
37
+ ]);
38
+ const byteLength = code ? BigInt((code.length - 2) / 2) : 0n;
39
+ const fee = min(baseFee, cap) + min(byteLength * complexityRate, cap);
40
+ return min(fee, cap);
41
+ }
42
+ catch {
43
+ // Newer governance: flat fee.
44
+ return publicClient.readContract({
45
+ address: governance,
46
+ abi: SailGovernanceAbi,
47
+ functionName: "permissionRegistrationFee",
48
+ });
49
+ }
50
+ }
51
+ //# sourceMappingURL=fees.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fees.js","sourceRoot":"","sources":["../src/fees.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,SAAS,GAAG,CAAC,CAAS,EAAE,CAAS;IAC/B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,YAA0B,EAC1B,UAAmB,EACnB,UAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC7D,YAAY,CAAC,YAAY,CAAC;gBACxB,OAAO,EAAE,UAAU;gBACnB,GAAG,EAAE,iBAAiB;gBACtB,YAAY,EAAE,SAAS;aACxB,CAAoB;YACrB,YAAY,CAAC,YAAY,CAAC;gBACxB,OAAO,EAAE,UAAU;gBACnB,GAAG,EAAE,iBAAiB;gBACtB,YAAY,EAAE,gBAAgB;aAC/B,CAAoB;YACrB,YAAY,CAAC,YAAY,CAAC;gBACxB,OAAO,EAAE,UAAU;gBACnB,GAAG,EAAE,iBAAiB;gBACtB,YAAY,EAAE,wBAAwB;aACvC,CAAoB;YACrB,YAAY,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;SAClD,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,UAAU,GAAG,cAAc,EAAE,GAAG,CAAC,CAAC;QACtE,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;QAC9B,OAAO,YAAY,CAAC,YAAY,CAAC;YAC/B,OAAO,EAAE,UAAU;YACnB,GAAG,EAAE,iBAAiB;YACtB,YAAY,EAAE,2BAA2B;SAC1C,CAAoB,CAAC;IACxB,CAAC;AACH,CAAC"}
@@ -0,0 +1,23 @@
1
+ export * from "./types.js";
2
+ export { SailorClient } from "./client.js";
3
+ export { LocalKeyring } from "./keyring.js";
4
+ export type { EncryptedKeystore, LocalKeyringOptions } from "./keyring.js";
5
+ export { SailKernelAbi } from "./abis/SailKernel.js";
6
+ export { MandateFactoryAbi } from "./abis/MandateFactory.js";
7
+ export { SailGovernanceAbi } from "./abis/SailGovernance.js";
8
+ export type { ClientMessage, ServerMessage, SerializedTypedData, SigningRequest, SigningRequestBase, SigningRequestKind, SigningResponse, SigningTxRequest, SigningTypedDataRequest, } from "./signing.js";
9
+ export { SAFE_V141, buildApprovedHashSignature, buildSafeSetupInitializer, buildSetManagerExecTransaction, encodeSetManager, gnosisSafeAbi, gnosisSafeExecAbi, safeModuleEnablerAbi, } from "./safe.js";
10
+ export { discoverSafesForOwner, getSafeTransactionServiceUrl } from "./discovery.js";
11
+ export type { CloneTemplateInfo, CloneTemplateParam, KnownTemplate, SailChainId, SailDeployment, } from "./deployments.js";
12
+ export { getSailDeployment, normalizeDeployment, sailDeployments, } from "./deployments.js";
13
+ export type { DispatchModel, KernelCapabilities } from "./capabilities.js";
14
+ export { DISPATCH_TYPE_STRINGS, DISPATCH_TYPEHASHES, REGISTER_PERMISSION_TYPE_STRINGS, REGISTER_PERMISSION_TYPEHASHES, clearCapabilityCache, detectKernelCapabilities, } from "./capabilities.js";
15
+ export type { KernelError } from "./errors.js";
16
+ export { KERNEL_ERROR_ABI, KERNEL_ERROR_SIGNATURES, decodeKernelError, explainKernelRevert, } from "./errors.js";
17
+ export { DISPATCH_EIP712_FIELDS, REGISTER_PERMISSION_TYPES, REGISTER_PERMISSION_TYPES_NO_DEADLINE, REGISTER_PERMISSIONS_BATCH_TYPES, buildDispatchSignature, buildRegisterPermissionTypedData, buildRegisterPermissionsBatchTypedData, sailKernelDomain, signRegisterPermission, } from "./eip712.js";
18
+ export { estimatePermissionFee } from "./fees.js";
19
+ export type { FetchLifiQuoteParams, LifiSwapQuote } from "./lifi.js";
20
+ export { DEFAULT_SLIPPAGE, LIFI_QUOTE_URL, LIFI_ROUTERS, encodeApprove, fetchLifiQuote, } from "./lifi.js";
21
+ export type { AllocationItem, AllocationRequest, AllocationResponse, BenchmarkResponse, ComparePosition, CompareRequest, CompareResponse, ExplainRequest, ExplainResponse, InstitutionalRequest, InstitutionalResponse, OpportunitiesResponse, PortfolioCheckResponse, RebalanceRequest, RebalanceResponse, RisksSummaryResponse, SafeCheckResponse, SailIntelligenceOptions, ScreenRequest, ScreenResponse, ValidateRequest, ValidateResponse, VaultRiskResponse, VaultScreenResult, YieldOpportunity, YieldSourceItem, YieldSourcesResponse, } from "./intelligence.js";
22
+ export { SAIL_INTELLIGENCE_BASE_URL, SAIL_INTELLIGENCE_DOCS_URL, SailIntelligence, } from "./intelligence.js";
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,YAAY,EACV,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,SAAS,EACT,0BAA0B,EAC1B,yBAAyB,EACzB,8BAA8B,EAC9B,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AACrF,YAAY,EACV,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,gCAAgC,EAChC,8BAA8B,EAC9B,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,qCAAqC,EACrC,gCAAgC,EAChC,sBAAsB,EACtB,gCAAgC,EAChC,sCAAsC,EACtC,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,YAAY,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,cAAc,GACf,MAAM,WAAW,CAAC;AAGnB,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,eAAe,EACf,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,aAAa,EACb,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,16 @@
1
+ export * from "./types.js";
2
+ export { SailorClient } from "./client.js";
3
+ export { LocalKeyring } from "./keyring.js";
4
+ export { SailKernelAbi } from "./abis/SailKernel.js";
5
+ export { MandateFactoryAbi } from "./abis/MandateFactory.js";
6
+ export { SailGovernanceAbi } from "./abis/SailGovernance.js";
7
+ export { SAFE_V141, buildApprovedHashSignature, buildSafeSetupInitializer, buildSetManagerExecTransaction, encodeSetManager, gnosisSafeAbi, gnosisSafeExecAbi, safeModuleEnablerAbi, } from "./safe.js";
8
+ export { discoverSafesForOwner, getSafeTransactionServiceUrl } from "./discovery.js";
9
+ export { getSailDeployment, normalizeDeployment, sailDeployments, } from "./deployments.js";
10
+ export { DISPATCH_TYPE_STRINGS, DISPATCH_TYPEHASHES, REGISTER_PERMISSION_TYPE_STRINGS, REGISTER_PERMISSION_TYPEHASHES, clearCapabilityCache, detectKernelCapabilities, } from "./capabilities.js";
11
+ export { KERNEL_ERROR_ABI, KERNEL_ERROR_SIGNATURES, decodeKernelError, explainKernelRevert, } from "./errors.js";
12
+ export { DISPATCH_EIP712_FIELDS, REGISTER_PERMISSION_TYPES, REGISTER_PERMISSION_TYPES_NO_DEADLINE, REGISTER_PERMISSIONS_BATCH_TYPES, buildDispatchSignature, buildRegisterPermissionTypedData, buildRegisterPermissionsBatchTypedData, sailKernelDomain, signRegisterPermission, } from "./eip712.js";
13
+ export { estimatePermissionFee } from "./fees.js";
14
+ export { DEFAULT_SLIPPAGE, LIFI_QUOTE_URL, LIFI_ROUTERS, encodeApprove, fetchLifiQuote, } from "./lifi.js";
15
+ export { SAIL_INTELLIGENCE_BASE_URL, SAIL_INTELLIGENCE_DOCS_URL, SailIntelligence, } from "./intelligence.js";
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAc7D,OAAO,EACL,SAAS,EACT,0BAA0B,EAC1B,yBAAyB,EACzB,8BAA8B,EAC9B,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAQrF,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,gCAAgC,EAChC,8BAA8B,EAC9B,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,qCAAqC,EACrC,gCAAgC,EAChC,sBAAsB,EACtB,gCAAgC,EAChC,sCAAsC,EACtC,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAElD,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,cAAc,GACf,MAAM,WAAW,CAAC;AAgCnB,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,mBAAmB,CAAC"}