@dev.sail.money/sailor 0.0.2-20 → 0.0.2-21

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 (117) hide show
  1. package/examples/permissions/BoundedApproveAndCallBatch.sol +179 -0
  2. package/examples/permissions/BoundedBet_Limitless_Base.sol +8 -7
  3. package/examples/permissions/BoundedBorrow_AaveV3_Arbitrum.sol +13 -13
  4. package/examples/permissions/BoundedPerp_GMXv2_Arbitrum.sol +50 -39
  5. package/examples/permissions/BoundedStake_Venice_Base.sol +85 -0
  6. package/examples/permissions/BoundedSupply_AaveV3_Arbitrum.sol +84 -0
  7. package/examples/permissions/BoundedSwap_UniswapV3_Base.sol +11 -9
  8. package/examples/permissions/BoundedSwap_UniswapV4_Unichain.sol +10 -8
  9. package/examples/permissions/BoundedTransfer_ERC20_Ethereum.sol +6 -6
  10. package/examples/permissions/BoundedVault_ERC4626_Base.sol +97 -0
  11. package/examples/permissions/README.md +29 -2
  12. package/examples/permissions/interfaces/IBatchPermission.sol +38 -0
  13. package/package.json +1 -1
  14. package/packages/cli/dist/index.cjs +1158 -574
  15. package/packages/sdk/dist/index.d.ts +1 -1
  16. package/packages/sdk/dist/index.d.ts.map +1 -1
  17. package/packages/sdk/dist/index.js +1 -1
  18. package/packages/sdk/dist/index.js.map +1 -1
  19. package/packages/sdk/dist/intelligence.d.ts +1 -1
  20. package/packages/sdk/dist/intelligence.js +1 -1
  21. package/packages/sdk/dist/safe.d.ts +83 -0
  22. package/packages/sdk/dist/safe.d.ts.map +1 -1
  23. package/packages/sdk/dist/safe.js +92 -1
  24. package/packages/sdk/dist/safe.js.map +1 -1
  25. package/packages/ui/dist/assets/{add-BrylwREe.js → add-BzRDG6go.js} +1 -1
  26. package/packages/ui/dist/assets/{all-wallets-DGR35dSU.js → all-wallets-C6juL2cm.js} +1 -1
  27. package/packages/ui/dist/assets/{app-store-BpM1x6bI.js → app-store-DSJ1ow5G.js} +1 -1
  28. package/packages/ui/dist/assets/{apple-xvs7JX23.js → apple-CUEgIX9k.js} +1 -1
  29. package/packages/ui/dist/assets/{arrow-bottom-CF6xPQbH.js → arrow-bottom-BOhBj1Je.js} +1 -1
  30. package/packages/ui/dist/assets/{arrow-bottom-circle-r0A6jlRF.js → arrow-bottom-circle-C4CzuHiR.js} +1 -1
  31. package/packages/ui/dist/assets/{arrow-left-Ce6MJKC0.js → arrow-left-BTD8zZ12.js} +1 -1
  32. package/packages/ui/dist/assets/{arrow-right-CiCNIsI0.js → arrow-right-qcOukPwm.js} +1 -1
  33. package/packages/ui/dist/assets/{arrow-top-TI5RQSIc.js → arrow-top-C0f2945G.js} +1 -1
  34. package/packages/ui/dist/assets/{bank-CmrK2TRa.js → bank-BSWzLP3R.js} +1 -1
  35. package/packages/ui/dist/assets/{basic-BhoXad_6.js → basic-DGTBsmnG.js} +1 -1
  36. package/packages/ui/dist/assets/{browser-BWCT-XSy.js → browser-DJNepafc.js} +1 -1
  37. package/packages/ui/dist/assets/{card-v1fl0QNj.js → card-u08LJx43.js} +1 -1
  38. package/packages/ui/dist/assets/{ccip-BkGqsEgG.js → ccip-DcWZjG37.js} +1 -1
  39. package/packages/ui/dist/assets/{checkmark-CiQnNFee.js → checkmark-DVD-obDl.js} +1 -1
  40. package/packages/ui/dist/assets/{checkmark-bold-B63f9SW6.js → checkmark-bold-CSXDqIAx.js} +1 -1
  41. package/packages/ui/dist/assets/{chevron-bottom-DpBpDiYb.js → chevron-bottom-Be7f0gi2.js} +1 -1
  42. package/packages/ui/dist/assets/{chevron-left-o_G-ctyg.js → chevron-left-v8cgKRhQ.js} +1 -1
  43. package/packages/ui/dist/assets/{chevron-right-I9LAJ9De.js → chevron-right-B0ux2X-3.js} +1 -1
  44. package/packages/ui/dist/assets/{chevron-top-JRwGHMKH.js → chevron-top-De-a8tmA.js} +1 -1
  45. package/packages/ui/dist/assets/{chrome-store-Cw9skzSt.js → chrome-store-BIIIRGPA.js} +1 -1
  46. package/packages/ui/dist/assets/{clock-BK_Lu0EB.js → clock-8d5kvRPQ.js} +1 -1
  47. package/packages/ui/dist/assets/{close-DWFjOyu7.js → close-BSSJkFv0.js} +1 -1
  48. package/packages/ui/dist/assets/{coinPlaceholder-gi3wDlPb.js → coinPlaceholder-CLJaQiUO.js} +1 -1
  49. package/packages/ui/dist/assets/{compass-Dlpsn_k-.js → compass-CR1zP0b-.js} +1 -1
  50. package/packages/ui/dist/assets/{copy-BzNKdXeG.js → copy-CGkuIFo6.js} +1 -1
  51. package/packages/ui/dist/assets/{core-BN9UnMip.js → core-ea860JM2.js} +3 -3
  52. package/packages/ui/dist/assets/cursor-DCRoxgSY.js +3 -0
  53. package/packages/ui/dist/assets/{cursor-transparent-B3RZ6Udt.js → cursor-transparent-C8s5LY_P.js} +1 -1
  54. package/packages/ui/dist/assets/{desktop-rngwE1T9.js → desktop-CQyixryE.js} +1 -1
  55. package/packages/ui/dist/assets/{disconnect-_DzDsvsZ.js → disconnect-Ct0234l0.js} +1 -1
  56. package/packages/ui/dist/assets/{discord-B9qQB66m.js → discord-haYPGMDl.js} +1 -1
  57. package/packages/ui/dist/assets/{etherscan-D7hlQ8Z3.js → etherscan-BTLrS1KK.js} +1 -1
  58. package/packages/ui/dist/assets/{events-DrkgavVp.js → events-wdo_D3Zy.js} +1 -1
  59. package/packages/ui/dist/assets/{exclamation-triangle-iCvLVoM-.js → exclamation-triangle-CMlYpOat.js} +1 -1
  60. package/packages/ui/dist/assets/{extension-CjGcOeuB.js → extension-CNGBCbo8.js} +1 -1
  61. package/packages/ui/dist/assets/{external-link-DTkyjOr4.js → external-link-DmYJSKcL.js} +1 -1
  62. package/packages/ui/dist/assets/{facebook-DoO2uCiE.js → facebook-F0iMVTem.js} +1 -1
  63. package/packages/ui/dist/assets/{fallback-Y8-BiCNG.js → fallback-BqeFDEuW.js} +1 -1
  64. package/packages/ui/dist/assets/{farcaster-Dyz6wiZi.js → farcaster-CYr9I6UA.js} +1 -1
  65. package/packages/ui/dist/assets/{filters-Bd5PxMiz.js → filters-CxE97nqU.js} +1 -1
  66. package/packages/ui/dist/assets/{github-CmqSJCq6.js → github-CjRht-Wv.js} +1 -1
  67. package/packages/ui/dist/assets/{google-i_MKKqQP.js → google-3G0o4pR9.js} +1 -1
  68. package/packages/ui/dist/assets/{help-circle-_ER8-V35.js → help-circle-C5gNChqZ.js} +1 -1
  69. package/packages/ui/dist/assets/{id-D2adRwvh.js → id-C6_zK0Tb.js} +1 -1
  70. package/packages/ui/dist/assets/{image-q_rpi7cn.js → image-DsU8Irlu.js} +1 -1
  71. package/packages/ui/dist/assets/{index-DJQDBPts.js → index-BCb0Nju4.js} +39 -39
  72. package/packages/ui/dist/assets/{index-BwoSt5mL.js → index-CjvcQefO.js} +1 -1
  73. package/packages/ui/dist/assets/{index-CzevBC-K.js → index-D1lgDFZV.js} +1 -1
  74. package/packages/ui/dist/assets/{index-Bdl623mb.js → index-DQ44LBvq.js} +3 -3
  75. package/packages/ui/dist/assets/{index-BLD08Nrb.js → index-Drc17uEc.js} +1 -1
  76. package/packages/ui/dist/assets/{index-B6Wb3mjQ.js → index-c8ZmMTds.js} +1 -1
  77. package/packages/ui/dist/assets/{index.es-D6UPoR2j.js → index.es-BhDQmlR4.js} +4 -4
  78. package/packages/ui/dist/assets/{info-Ck7GYYmo.js → info-CAKKH6T2.js} +1 -1
  79. package/packages/ui/dist/assets/{info-circle-DtA5FQXd.js → info-circle-CHV1idfy.js} +1 -1
  80. package/packages/ui/dist/assets/{lightbulb-DR3jyzkK.js → lightbulb-ew10LUMl.js} +1 -1
  81. package/packages/ui/dist/assets/{mail-BK_pW_tL.js → mail-CACYeWXj.js} +1 -1
  82. package/packages/ui/dist/assets/{metamask-sdk-IZbe4GJ_.js → metamask-sdk-BUYu4RDE.js} +1 -1
  83. package/packages/ui/dist/assets/{mobile-CLG-4Yut.js → mobile-DX601q1y.js} +1 -1
  84. package/packages/ui/dist/assets/{more-BBqkkVbe.js → more-CQGeX45N.js} +1 -1
  85. package/packages/ui/dist/assets/{network-placeholder-kf7EWfmj.js → network-placeholder-BQw8E4X-.js} +1 -1
  86. package/packages/ui/dist/assets/{nftPlaceholder-BEFwtFPl.js → nftPlaceholder-CifJ2CzA.js} +1 -1
  87. package/packages/ui/dist/assets/{off-DKjJt-l0.js → off-B6oUArCZ.js} +1 -1
  88. package/packages/ui/dist/assets/{parseSignature-KWl5TpQf.js → parseSignature-DjWIdHkx.js} +1 -1
  89. package/packages/ui/dist/assets/{play-store-DBVkWbwG.js → play-store-Kq51oh3r.js} +1 -1
  90. package/packages/ui/dist/assets/{plus-BQzagKUL.js → plus-BxZxVpff.js} +1 -1
  91. package/packages/ui/dist/assets/{qr-code-DVwEgFEM.js → qr-code-CSBFpyhP.js} +1 -1
  92. package/packages/ui/dist/assets/{recycle-horizontal-D2E6B1Kh.js → recycle-horizontal-D0HyLkot.js} +1 -1
  93. package/packages/ui/dist/assets/{refresh-CUavEsqn.js → refresh-BAQo228i.js} +1 -1
  94. package/packages/ui/dist/assets/{reown-logo-mAAAaf4E.js → reown-logo-DeUbwRp6.js} +1 -1
  95. package/packages/ui/dist/assets/{search-BAnb6iT_.js → search-C8Sd0Mpz.js} +1 -1
  96. package/packages/ui/dist/assets/{secp256k1-CBUZgsE-.js → secp256k1-BujG3JoP.js} +1 -1
  97. package/packages/ui/dist/assets/{send-BYjfitxS.js → send-B0JwUp6Q.js} +1 -1
  98. package/packages/ui/dist/assets/{swapHorizontal-C-4qjxwd.js → swapHorizontal-B2k5yDqc.js} +1 -1
  99. package/packages/ui/dist/assets/{swapHorizontalBold-zA-cWlfT.js → swapHorizontalBold-yQqq0yPi.js} +1 -1
  100. package/packages/ui/dist/assets/{swapHorizontalMedium-gIIVXh3I.js → swapHorizontalMedium-NafYmdDj.js} +1 -1
  101. package/packages/ui/dist/assets/{swapHorizontalRoundedBold-CwtQpc9E.js → swapHorizontalRoundedBold-BUn0GwEK.js} +1 -1
  102. package/packages/ui/dist/assets/{swapVertical-wrdYsAkk.js → swapVertical-Be1m6suD.js} +1 -1
  103. package/packages/ui/dist/assets/{telegram-3aqbBSMX.js → telegram-D-u7QHT5.js} +1 -1
  104. package/packages/ui/dist/assets/{three-dots-BNRpZX3L.js → three-dots-B6Y4DFOR.js} +1 -1
  105. package/packages/ui/dist/assets/{twitch-Bya9c1W1.js → twitch-DSy1rhWQ.js} +1 -1
  106. package/packages/ui/dist/assets/{twitterIcon-1thOj_Z5.js → twitterIcon-tac1plSa.js} +1 -1
  107. package/packages/ui/dist/assets/{verify-D8ggGSfI.js → verify-6MylluBY.js} +1 -1
  108. package/packages/ui/dist/assets/{verify-filled-CeZM7920.js → verify-filled-CZc0otb8.js} +1 -1
  109. package/packages/ui/dist/assets/{w3m-modal-CUwD6iiA.js → w3m-modal-DbT03Pyz.js} +1 -1
  110. package/packages/ui/dist/assets/{wallet-Baz0DeMJ.js → wallet-473-ObZE.js} +1 -1
  111. package/packages/ui/dist/assets/{wallet-placeholder-3yAnyuC4.js → wallet-placeholder-B9h3WvTk.js} +1 -1
  112. package/packages/ui/dist/assets/{walletconnect-CfkgbqAq.js → walletconnect-5GHIf5FR.js} +1 -1
  113. package/packages/ui/dist/assets/{warning-circle-BfOqu3HN.js → warning-circle-8A009Dx3.js} +1 -1
  114. package/packages/ui/dist/assets/{x-CxAcJv-O.js → x-B4jK8e8X.js} +1 -1
  115. package/packages/ui/dist/index.html +1 -1
  116. package/templates/default/AGENTS.md +18 -1
  117. package/packages/ui/dist/assets/cursor-BWdjWDLC.js +0 -3
@@ -1,4 +1,4 @@
1
- import{F as l}from"./core-BN9UnMip.js";import"./index-DJQDBPts.js";import"./events-DrkgavVp.js";import"./index.es-D6UPoR2j.js";import"./fallback-Y8-BiCNG.js";const o=l`<svg fill="none" viewBox="0 0 96 67">
1
+ import{F as l}from"./core-ea860JM2.js";import"./index-BCb0Nju4.js";import"./events-wdo_D3Zy.js";import"./index.es-BhDQmlR4.js";import"./fallback-BqeFDEuW.js";const o=l`<svg fill="none" viewBox="0 0 96 67">
2
2
  <path
3
3
  fill="currentColor"
4
4
  d="M25.32 18.8a32.56 32.56 0 0 1 45.36 0l1.5 1.47c.63.62.63 1.61 0 2.22l-5.15 5.05c-.31.3-.82.3-1.14 0l-2.07-2.03a22.71 22.71 0 0 0-31.64 0l-2.22 2.18c-.31.3-.82.3-1.14 0l-5.15-5.05a1.55 1.55 0 0 1 0-2.22l1.65-1.62Zm56.02 10.44 4.59 4.5c.63.6.63 1.6 0 2.21l-20.7 20.26c-.62.61-1.63.61-2.26 0L48.28 41.83a.4.4 0 0 0-.56 0L33.03 56.21c-.63.61-1.64.61-2.27 0L10.07 35.95a1.55 1.55 0 0 1 0-2.22l4.59-4.5a1.63 1.63 0 0 1 2.27 0L31.6 43.63a.4.4 0 0 0 .57 0l14.69-14.38a1.63 1.63 0 0 1 2.26 0l14.69 14.38a.4.4 0 0 0 .57 0l14.68-14.38a1.63 1.63 0 0 1 2.27 0Z"
@@ -1,4 +1,4 @@
1
- import{F as r}from"./core-BN9UnMip.js";import"./index-DJQDBPts.js";import"./events-DrkgavVp.js";import"./index.es-D6UPoR2j.js";import"./fallback-Y8-BiCNG.js";const a=r`<svg fill="none" viewBox="0 0 20 20">
1
+ import{F as r}from"./core-ea860JM2.js";import"./index-BCb0Nju4.js";import"./events-wdo_D3Zy.js";import"./index.es-BhDQmlR4.js";import"./fallback-BqeFDEuW.js";const a=r`<svg fill="none" viewBox="0 0 20 20">
2
2
  <path
3
3
  fill="currentColor"
4
4
  d="M11 6.67a1 1 0 1 0-2 0v2.66a1 1 0 0 0 2 0V6.67ZM10 14.5a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5Z"
@@ -1,4 +1,4 @@
1
- import{F as l}from"./core-BN9UnMip.js";import"./index-DJQDBPts.js";import"./events-DrkgavVp.js";import"./index.es-D6UPoR2j.js";import"./fallback-Y8-BiCNG.js";const a=l`<svg fill="none" viewBox="0 0 41 40">
1
+ import{F as l}from"./core-ea860JM2.js";import"./index-BCb0Nju4.js";import"./events-wdo_D3Zy.js";import"./index.es-BhDQmlR4.js";import"./fallback-BqeFDEuW.js";const a=l`<svg fill="none" viewBox="0 0 41 40">
2
2
  <g clip-path="url(#a)">
3
3
  <path fill="#000" d="M.8 0h40v40H.8z" />
4
4
  <path
@@ -5,7 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <meta name="theme-color" content="#040b16" />
7
7
  <title>Sail - Unlocking Personalized Money</title>
8
- <script type="module" crossorigin src="/assets/index-DJQDBPts.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-BCb0Nju4.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-DDKDa0s2.css">
10
10
  </head>
11
11
  <body>
@@ -40,6 +40,8 @@ If the user's first message is an npm install command, run it, then present the
40
40
 
41
41
  In the browser. Run `sailor ui start`, open the printed URL, connect your owner wallet, choose your network, and deploy your SMA. Then create your agent wallet — a separate signing key I use to submit transactions on your behalf. You need gas in both: the owner wallet to deploy and sign the mandate; the agent wallet to submit transactions once the agent is running. The owner key never leaves the browser.
42
42
 
43
+ **Deterministic address (salt):** every SMA deployment uses a CREATE2 salt. The CLI defaults to salt `0`, giving you a predictable address you can verify before spending gas: `sailor account predict --owner <your-wallet> --manager <agent-wallet>`. The kernel binds the salt to your owner wallet, agent (manager) wallet, and fee policy, so you need the agent wallet created first (the prediction depends on it). The salt is saved in `.sail/account.json` automatically. Note: addresses differ across chains today (Base, Arbitrum, Unichain) because the kernel salt mixes in the chain-specific fee policy and the Safe initializer encodes chain-specific contract addresses; true cross-chain same-address requires a future protocol update (deterministic kernel + safeModuleEnabler + fee policy deployment).
44
+
43
45
  ## Stage 2 — Define your strategy
44
46
 
45
47
  Tell me what you want your agent to do. I'll ask the right questions, establish the on-chain bounds with you (tokens, amounts, slippage, venues), and set up your RPC endpoint once you've chosen your chain. Blank slate — you define the strategy.
@@ -54,7 +56,22 @@ Permission contracts live in `mandates/`. The user authors, reviews, and owns th
54
56
 
55
57
  ```bash
56
58
  forge build
57
- sailor mandate deploy --contract <Name> --attach --sma <SMA>
59
+ sailor mandate deploy --contract <Name> --sma <SMA> # deploy only — do NOT --attach yet
60
+ ```
61
+
62
+ Before AUTHORIZING (attaching) the permission, BACK the plain-English claims with an actual on-chain probe. `evaluate()` lives on the deployed contract, so deploy first, then — before the irreversible authorization — generate sample calls from the user's stated strategy (ones the permission MUST accept and ones it MUST reject) and run them through `sailor mandate simulate`. This is an off-chain `eth_call` (no gas, no signing) that reports what the permission's `evaluate()` returns for each call, and flags any target with no contract code (a wrong or wrong-chain address):
63
+
64
+ ```bash
65
+ # one call inline, or a batch via JSON
66
+ sailor mandate simulate --address <PermissionOrName> --sma <SMA> \
67
+ --target <addr> --calldata <hex> --expect pass
68
+ sailor mandate simulate --address <PermissionOrName> --sma <SMA> --calls calls.json
69
+ ```
70
+
71
+ `calls.json` is an array of `{ target, calldata, value?, expect: "pass"|"fail", label }`. A mismatch between `expect` and the actual result exits non-zero — do not authorize until every sample matches. Simulate proves what the permission DOES; it does not guarantee it is correct.
72
+
73
+ ```bash
74
+ sailor mandate attach --address <PermissionOrName> --sma <SMA> # authorize, once simulate is clean
58
75
  ```
59
76
 
60
77
  Registration requires the owner to sign in the browser. If the wrong wallet is connected, the CLI rejects it.
@@ -1,3 +0,0 @@
1
- import{F as o}from"./core-BN9UnMip.js";import"./index-DJQDBPts.js";import"./events-DrkgavVp.js";import"./index.es-D6UPoR2j.js";import"./fallback-Y8-BiCNG.js";const l=o` <svg fill="none" viewBox="0 0 13 4">
2
- <path fill="currentColor" d="M.5 0h12L8.9 3.13a3.76 3.76 0 0 1-4.8 0L.5 0Z" />
3
- </svg>`;export{l as cursorSvg};