@dev.sail.money/sailor 0.0.2-20 → 0.0.2-22
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.
- package/examples/permissions/BoundedApproveAndCallBatch.sol +179 -0
- package/examples/permissions/BoundedBet_Limitless_Base.sol +8 -7
- package/examples/permissions/BoundedBorrow_AaveV3_Arbitrum.sol +13 -13
- package/examples/permissions/BoundedPerp_GMXv2_Arbitrum.sol +50 -39
- package/examples/permissions/BoundedStake_Venice_Base.sol +85 -0
- package/examples/permissions/BoundedSupply_AaveV3_Arbitrum.sol +84 -0
- package/examples/permissions/BoundedSwap_UniswapV3_Base.sol +11 -9
- package/examples/permissions/BoundedSwap_UniswapV4_Unichain.sol +10 -8
- package/examples/permissions/BoundedTransfer_ERC20_Ethereum.sol +6 -6
- package/examples/permissions/BoundedVault_ERC4626_Base.sol +97 -0
- package/examples/permissions/README.md +29 -2
- package/examples/permissions/interfaces/IBatchPermission.sol +38 -0
- package/package.json +1 -1
- package/packages/cli/dist/index.cjs +3288 -2394
- package/packages/cli/dist/server.cjs +110 -140
- package/packages/sdk/dist/deployments.d.ts +14 -7
- package/packages/sdk/dist/deployments.d.ts.map +1 -1
- package/packages/sdk/dist/deployments.js +132 -141
- package/packages/sdk/dist/deployments.js.map +1 -1
- package/packages/sdk/dist/index.d.ts +1 -1
- package/packages/sdk/dist/index.d.ts.map +1 -1
- package/packages/sdk/dist/index.js +1 -1
- package/packages/sdk/dist/index.js.map +1 -1
- package/packages/sdk/dist/intelligence.d.ts +1 -1
- package/packages/sdk/dist/intelligence.js +1 -1
- package/packages/sdk/dist/safe.d.ts +83 -0
- package/packages/sdk/dist/safe.d.ts.map +1 -1
- package/packages/sdk/dist/safe.js +92 -1
- package/packages/sdk/dist/safe.js.map +1 -1
- package/packages/ui/dist/assets/{add-BrylwREe.js → add-C--RBwJe.js} +1 -1
- package/packages/ui/dist/assets/{all-wallets-DGR35dSU.js → all-wallets-_xwd_eso.js} +1 -1
- package/packages/ui/dist/assets/{app-store-BpM1x6bI.js → app-store-CIQsK1zU.js} +1 -1
- package/packages/ui/dist/assets/{apple-xvs7JX23.js → apple-BdlAnnmO.js} +1 -1
- package/packages/ui/dist/assets/{arrow-bottom-CF6xPQbH.js → arrow-bottom-B5p_6Dat.js} +1 -1
- package/packages/ui/dist/assets/{arrow-bottom-circle-r0A6jlRF.js → arrow-bottom-circle-D7c6JPTF.js} +1 -1
- package/packages/ui/dist/assets/{arrow-left-Ce6MJKC0.js → arrow-left-SA4NpEnP.js} +1 -1
- package/packages/ui/dist/assets/{arrow-right-CiCNIsI0.js → arrow-right-mOJNWujS.js} +1 -1
- package/packages/ui/dist/assets/{arrow-top-TI5RQSIc.js → arrow-top-CvPVVpHl.js} +1 -1
- package/packages/ui/dist/assets/{bank-CmrK2TRa.js → bank-B2j2rPm9.js} +1 -1
- package/packages/ui/dist/assets/{basic-BhoXad_6.js → basic-Bw6cXOlk.js} +1 -1
- package/packages/ui/dist/assets/{browser-BWCT-XSy.js → browser-CUSNF__N.js} +1 -1
- package/packages/ui/dist/assets/{card-v1fl0QNj.js → card-CpKLox49.js} +1 -1
- package/packages/ui/dist/assets/{ccip-BkGqsEgG.js → ccip-XB9iQjXB.js} +1 -1
- package/packages/ui/dist/assets/{checkmark-CiQnNFee.js → checkmark-BRpXeSCK.js} +1 -1
- package/packages/ui/dist/assets/{checkmark-bold-B63f9SW6.js → checkmark-bold-BkPvoqxo.js} +1 -1
- package/packages/ui/dist/assets/{chevron-bottom-DpBpDiYb.js → chevron-bottom-CtK0W2av.js} +1 -1
- package/packages/ui/dist/assets/{chevron-left-o_G-ctyg.js → chevron-left-NayfPMDy.js} +1 -1
- package/packages/ui/dist/assets/{chevron-right-I9LAJ9De.js → chevron-right-BPU2hCfA.js} +1 -1
- package/packages/ui/dist/assets/{chevron-top-JRwGHMKH.js → chevron-top-CTXwC4nM.js} +1 -1
- package/packages/ui/dist/assets/{chrome-store-Cw9skzSt.js → chrome-store-eWIk0-YZ.js} +1 -1
- package/packages/ui/dist/assets/{clock-BK_Lu0EB.js → clock-VmYiq5jB.js} +1 -1
- package/packages/ui/dist/assets/{close-DWFjOyu7.js → close-NfBukMzW.js} +1 -1
- package/packages/ui/dist/assets/{coinPlaceholder-gi3wDlPb.js → coinPlaceholder-BWOeJc6j.js} +1 -1
- package/packages/ui/dist/assets/{compass-Dlpsn_k-.js → compass-oRk8W3iM.js} +1 -1
- package/packages/ui/dist/assets/{copy-BzNKdXeG.js → copy-GcYQZOsF.js} +1 -1
- package/packages/ui/dist/assets/{core-BN9UnMip.js → core-B_rvnvkC.js} +3 -3
- package/packages/ui/dist/assets/cursor-BAViuJWh.js +3 -0
- package/packages/ui/dist/assets/{cursor-transparent-B3RZ6Udt.js → cursor-transparent-CGox3wZ-.js} +1 -1
- package/packages/ui/dist/assets/{desktop-rngwE1T9.js → desktop-DU4yyiV4.js} +1 -1
- package/packages/ui/dist/assets/{disconnect-_DzDsvsZ.js → disconnect-CJm9NnxK.js} +1 -1
- package/packages/ui/dist/assets/{discord-B9qQB66m.js → discord-MxDL8Eq6.js} +1 -1
- package/packages/ui/dist/assets/{etherscan-D7hlQ8Z3.js → etherscan-CkCvlZiA.js} +1 -1
- package/packages/ui/dist/assets/{events-DrkgavVp.js → events-CkyJn32_.js} +1 -1
- package/packages/ui/dist/assets/{exclamation-triangle-iCvLVoM-.js → exclamation-triangle-hH1JdYAZ.js} +1 -1
- package/packages/ui/dist/assets/{extension-CjGcOeuB.js → extension-DTMrXG5m.js} +1 -1
- package/packages/ui/dist/assets/{external-link-DTkyjOr4.js → external-link-GSwn5MzD.js} +1 -1
- package/packages/ui/dist/assets/{facebook-DoO2uCiE.js → facebook-Vw_uyzaE.js} +1 -1
- package/packages/ui/dist/assets/{fallback-Y8-BiCNG.js → fallback-BL3U4ZRT.js} +1 -1
- package/packages/ui/dist/assets/{farcaster-Dyz6wiZi.js → farcaster-F-_di36M.js} +1 -1
- package/packages/ui/dist/assets/{filters-Bd5PxMiz.js → filters-DQzcstDl.js} +1 -1
- package/packages/ui/dist/assets/{github-CmqSJCq6.js → github-BSq3_rEd.js} +1 -1
- package/packages/ui/dist/assets/{google-i_MKKqQP.js → google-BU4QXiDS.js} +1 -1
- package/packages/ui/dist/assets/{help-circle-_ER8-V35.js → help-circle-CuF4iPyF.js} +1 -1
- package/packages/ui/dist/assets/{id-D2adRwvh.js → id-BQWlv0a_.js} +1 -1
- package/packages/ui/dist/assets/{image-q_rpi7cn.js → image-BPNySDPo.js} +1 -1
- package/packages/ui/dist/assets/{index-CzevBC-K.js → index-BMPQOOgv.js} +1 -1
- package/packages/ui/dist/assets/{index-Bdl623mb.js → index-CMyY4FOR.js} +3 -3
- package/packages/ui/dist/assets/{index-BLD08Nrb.js → index-CsbiKM3b.js} +1 -1
- package/packages/ui/dist/assets/{index-BwoSt5mL.js → index-D0SPxlSM.js} +1 -1
- package/packages/ui/dist/assets/{index-B6Wb3mjQ.js → index-D2wgBslE.js} +1 -1
- package/packages/ui/dist/assets/{index-DJQDBPts.js → index-Dc9_WV0G.js} +76 -76
- package/packages/ui/dist/assets/{index.es-D6UPoR2j.js → index.es-CvyDIsY4.js} +4 -4
- package/packages/ui/dist/assets/{info-Ck7GYYmo.js → info-D20yslek.js} +1 -1
- package/packages/ui/dist/assets/{info-circle-DtA5FQXd.js → info-circle-BEjvYTHa.js} +1 -1
- package/packages/ui/dist/assets/{lightbulb-DR3jyzkK.js → lightbulb-DfvLi5mQ.js} +1 -1
- package/packages/ui/dist/assets/{mail-BK_pW_tL.js → mail-CkgaIJAd.js} +1 -1
- package/packages/ui/dist/assets/{metamask-sdk-IZbe4GJ_.js → metamask-sdk-O-IBvvGq.js} +1 -1
- package/packages/ui/dist/assets/{mobile-CLG-4Yut.js → mobile-CGc88WfG.js} +1 -1
- package/packages/ui/dist/assets/{more-BBqkkVbe.js → more-DnX8wlTn.js} +1 -1
- package/packages/ui/dist/assets/{network-placeholder-kf7EWfmj.js → network-placeholder-DDrgA4a3.js} +1 -1
- package/packages/ui/dist/assets/{nftPlaceholder-BEFwtFPl.js → nftPlaceholder-DhHWPuD3.js} +1 -1
- package/packages/ui/dist/assets/{off-DKjJt-l0.js → off-D1CsYvPQ.js} +1 -1
- package/packages/ui/dist/assets/{parseSignature-KWl5TpQf.js → parseSignature-BlZUbtEc.js} +1 -1
- package/packages/ui/dist/assets/{play-store-DBVkWbwG.js → play-store-Dbkk8PTZ.js} +1 -1
- package/packages/ui/dist/assets/{plus-BQzagKUL.js → plus-B8jXpls3.js} +1 -1
- package/packages/ui/dist/assets/{qr-code-DVwEgFEM.js → qr-code-CDuJ3ftj.js} +1 -1
- package/packages/ui/dist/assets/{recycle-horizontal-D2E6B1Kh.js → recycle-horizontal-ZFGjaHsZ.js} +1 -1
- package/packages/ui/dist/assets/{refresh-CUavEsqn.js → refresh-D0rMEDtF.js} +1 -1
- package/packages/ui/dist/assets/{reown-logo-mAAAaf4E.js → reown-logo-NlCNVmgd.js} +1 -1
- package/packages/ui/dist/assets/{search-BAnb6iT_.js → search-CrJAA2qW.js} +1 -1
- package/packages/ui/dist/assets/{secp256k1-CBUZgsE-.js → secp256k1-mJj6W2AI.js} +1 -1
- package/packages/ui/dist/assets/{send-BYjfitxS.js → send-C7CoRziM.js} +1 -1
- package/packages/ui/dist/assets/{swapHorizontal-C-4qjxwd.js → swapHorizontal-fD3wbCGJ.js} +1 -1
- package/packages/ui/dist/assets/{swapHorizontalBold-zA-cWlfT.js → swapHorizontalBold-Cc-jQ6as.js} +1 -1
- package/packages/ui/dist/assets/{swapHorizontalMedium-gIIVXh3I.js → swapHorizontalMedium-DlJW6uX1.js} +1 -1
- package/packages/ui/dist/assets/{swapHorizontalRoundedBold-CwtQpc9E.js → swapHorizontalRoundedBold-1VHOerLO.js} +1 -1
- package/packages/ui/dist/assets/{swapVertical-wrdYsAkk.js → swapVertical-CKaRlkZK.js} +1 -1
- package/packages/ui/dist/assets/{telegram-3aqbBSMX.js → telegram-DnCYed4D.js} +1 -1
- package/packages/ui/dist/assets/{three-dots-BNRpZX3L.js → three-dots-BFluoxma.js} +1 -1
- package/packages/ui/dist/assets/{twitch-Bya9c1W1.js → twitch-BXGv98S9.js} +1 -1
- package/packages/ui/dist/assets/{twitterIcon-1thOj_Z5.js → twitterIcon-C6IdXEe5.js} +1 -1
- package/packages/ui/dist/assets/{verify-D8ggGSfI.js → verify-D_QGyiLQ.js} +1 -1
- package/packages/ui/dist/assets/{verify-filled-CeZM7920.js → verify-filled-DIW8QKL9.js} +1 -1
- package/packages/ui/dist/assets/{w3m-modal-CUwD6iiA.js → w3m-modal-Do9U160p.js} +1 -1
- package/packages/ui/dist/assets/{wallet-Baz0DeMJ.js → wallet-CcARZnOx.js} +1 -1
- package/packages/ui/dist/assets/{wallet-placeholder-3yAnyuC4.js → wallet-placeholder-X1coFzQa.js} +1 -1
- package/packages/ui/dist/assets/{walletconnect-CfkgbqAq.js → walletconnect-Glte9ia7.js} +1 -1
- package/packages/ui/dist/assets/{warning-circle-BfOqu3HN.js → warning-circle-j-3V4KTo.js} +1 -1
- package/packages/ui/dist/assets/{x-CxAcJv-O.js → x-Bcc52c_T.js} +1 -1
- package/packages/ui/dist/index.html +1 -1
- package/templates/default/AGENTS.md +20 -1
- package/packages/ui/dist/assets/cursor-BWdjWDLC.js +0 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{F as l}from"./core-
|
|
1
|
+
import{F as l}from"./core-B_rvnvkC.js";import"./index-Dc9_WV0G.js";import"./events-CkyJn32_.js";import"./index.es-CvyDIsY4.js";import"./fallback-BL3U4ZRT.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-
|
|
1
|
+
import{F as r}from"./core-B_rvnvkC.js";import"./index-Dc9_WV0G.js";import"./events-CkyJn32_.js";import"./index.es-CvyDIsY4.js";import"./fallback-BL3U4ZRT.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-
|
|
1
|
+
import{F as l}from"./core-B_rvnvkC.js";import"./index-Dc9_WV0G.js";import"./events-CkyJn32_.js";import"./index.es-CvyDIsY4.js";import"./fallback-BL3U4ZRT.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-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-Dc9_WV0G.js"></script>
|
|
9
9
|
<link rel="stylesheet" crossorigin href="/assets/index-DDKDa0s2.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
@@ -40,6 +40,10 @@ 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 — create your agent wallet first, then predict. The salt is saved in `.sail/account.json` automatically. All supported chains (Ethereum, Base, Arbitrum, Unichain, plus testnets) share the same protocol addresses via CREATE2, so the same owner, manager, and salt produce the **same SMA address on every chain**.
|
|
44
|
+
|
|
45
|
+
**Multi-chain deployment:** once your SMA is live on one chain, deploy it at the same address on any other supported chain with `sailor account deploy-chain --chain <id>` (e.g. `--chain 42161` for Arbitrum). The owner approves the deployment in the browser; no new salt or agent wallet needed. Run `sailor account predict` first to confirm the address matches.
|
|
46
|
+
|
|
43
47
|
## Stage 2 — Define your strategy
|
|
44
48
|
|
|
45
49
|
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 +58,22 @@ Permission contracts live in `mandates/`. The user authors, reviews, and owns th
|
|
|
54
58
|
|
|
55
59
|
```bash
|
|
56
60
|
forge build
|
|
57
|
-
sailor mandate deploy --contract <Name> --
|
|
61
|
+
sailor mandate deploy --contract <Name> --sma <SMA> # deploy only — do NOT --attach yet
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
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):
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
# one call inline, or a batch via JSON
|
|
68
|
+
sailor mandate simulate --address <PermissionOrName> --sma <SMA> \
|
|
69
|
+
--target <addr> --calldata <hex> --expect pass
|
|
70
|
+
sailor mandate simulate --address <PermissionOrName> --sma <SMA> --calls calls.json
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
`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.
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
sailor mandate attach --address <PermissionOrName> --sma <SMA> # authorize, once simulate is clean
|
|
58
77
|
```
|
|
59
78
|
|
|
60
79
|
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};
|