@dev.sail.money/sailor 1.3.0-218 → 1.3.0-220

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/AGENTS.md +3 -0
  2. package/package.json +1 -1
  3. package/packages/cli/dist/index.cjs +168 -76
  4. package/packages/cli/dist/server.cjs +57 -63
  5. package/packages/sdk/dist/abis/SailGovernance.d.ts +6 -5
  6. package/packages/sdk/dist/abis/SailGovernance.d.ts.map +1 -1
  7. package/packages/sdk/dist/abis/SailGovernance.js +6 -5
  8. package/packages/sdk/dist/abis/SailGovernance.js.map +1 -1
  9. package/packages/sdk/dist/fees.d.ts +58 -10
  10. package/packages/sdk/dist/fees.d.ts.map +1 -1
  11. package/packages/sdk/dist/fees.js +73 -41
  12. package/packages/sdk/dist/fees.js.map +1 -1
  13. package/packages/sdk/dist/index.d.ts +2 -1
  14. package/packages/sdk/dist/index.d.ts.map +1 -1
  15. package/packages/sdk/dist/index.js +1 -1
  16. package/packages/sdk/dist/index.js.map +1 -1
  17. package/packages/sdk/dist/intelligence.d.ts +7 -2
  18. package/packages/sdk/dist/intelligence.d.ts.map +1 -1
  19. package/packages/sdk/dist/intelligence.js +2 -2
  20. package/packages/sdk/dist/intelligence.js.map +1 -1
  21. package/packages/sdk/dist/signing.d.ts +14 -0
  22. package/packages/sdk/dist/signing.d.ts.map +1 -1
  23. package/packages/ui/dist/assets/{add-DJjAPrBg.js → add-BX5reKtK.js} +1 -1
  24. package/packages/ui/dist/assets/{all-wallets-Drs0T9oK.js → all-wallets-IZ3PlVF-.js} +1 -1
  25. package/packages/ui/dist/assets/{app-store-DyeC8AHL.js → app-store-ARgRdMdF.js} +1 -1
  26. package/packages/ui/dist/assets/{apple-HIg_c1iA.js → apple-VCaqsI9w.js} +1 -1
  27. package/packages/ui/dist/assets/{arrow-bottom-DtgmHaSZ.js → arrow-bottom-Cwptw8fW.js} +1 -1
  28. package/packages/ui/dist/assets/{arrow-bottom-circle-CTLcFsn4.js → arrow-bottom-circle-h5vFiZ2I.js} +1 -1
  29. package/packages/ui/dist/assets/{arrow-left-CuNmTB1o.js → arrow-left-bM1TRcV9.js} +1 -1
  30. package/packages/ui/dist/assets/{arrow-right-FobP6UHJ.js → arrow-right-BYd_N4Jr.js} +1 -1
  31. package/packages/ui/dist/assets/{arrow-top-DHP1p-pT.js → arrow-top-CLUnwVE2.js} +1 -1
  32. package/packages/ui/dist/assets/{bank-toi-Q_Oj.js → bank-6c28yOM9.js} +1 -1
  33. package/packages/ui/dist/assets/{basic-DzWI9Vfe.js → basic-CJnbTfSd.js} +1 -1
  34. package/packages/ui/dist/assets/{browser-COPWe9NX.js → browser-CDKlxM3D.js} +1 -1
  35. package/packages/ui/dist/assets/{card--9zk2OLW.js → card-DQdED02q.js} +1 -1
  36. package/packages/ui/dist/assets/{ccip-Cj85PpbL.js → ccip-BL7RIPfY.js} +1 -1
  37. package/packages/ui/dist/assets/{checkmark-C_szyJ8W.js → checkmark-JoRNVoFV.js} +1 -1
  38. package/packages/ui/dist/assets/{checkmark-bold-DIH9SQJl.js → checkmark-bold-B6bGHVIs.js} +1 -1
  39. package/packages/ui/dist/assets/{chevron-bottom-OeowgNgU.js → chevron-bottom-BMCelIEu.js} +1 -1
  40. package/packages/ui/dist/assets/{chevron-left-qDAhAvoU.js → chevron-left-ryPLhHCc.js} +1 -1
  41. package/packages/ui/dist/assets/{chevron-right-B9GPX37d.js → chevron-right-CdDNRv7f.js} +1 -1
  42. package/packages/ui/dist/assets/{chevron-top-kKzmmVSf.js → chevron-top-BxWIjjGk.js} +1 -1
  43. package/packages/ui/dist/assets/{chrome-store-wLlhsnbW.js → chrome-store-D-fiJ9qJ.js} +1 -1
  44. package/packages/ui/dist/assets/{clock-BNGsyvtJ.js → clock-xCPkzwjj.js} +1 -1
  45. package/packages/ui/dist/assets/{close-1aknsCNm.js → close-BkqmPpWG.js} +1 -1
  46. package/packages/ui/dist/assets/{coinPlaceholder-By0PtVsf.js → coinPlaceholder-PIvN9oq_.js} +1 -1
  47. package/packages/ui/dist/assets/{compass-DG4TLiMj.js → compass-CW5kWcxW.js} +1 -1
  48. package/packages/ui/dist/assets/{copy-BABFWB1m.js → copy-DUZlAQJJ.js} +1 -1
  49. package/packages/ui/dist/assets/{core-DuAIm6Xv.js → core-von2c1sc.js} +3 -3
  50. package/packages/ui/dist/assets/cursor-BzRVY7BD.js +3 -0
  51. package/packages/ui/dist/assets/{cursor-transparent-gf5lT6qI.js → cursor-transparent-BUAMB0G1.js} +1 -1
  52. package/packages/ui/dist/assets/{desktop-B44_VjZB.js → desktop-BxdlwV8P.js} +1 -1
  53. package/packages/ui/dist/assets/{disconnect-L65dw6Bx.js → disconnect-GelNh3mn.js} +1 -1
  54. package/packages/ui/dist/assets/{discord-C1xMuNsC.js → discord-N0jnxkzC.js} +1 -1
  55. package/packages/ui/dist/assets/{etherscan-6VA7_I9A.js → etherscan-B41u7wF4.js} +1 -1
  56. package/packages/ui/dist/assets/{events-DBlbqBry.js → events-C9icG2YB.js} +1 -1
  57. package/packages/ui/dist/assets/{exclamation-triangle-Gs8XW8RO.js → exclamation-triangle-BWJC56FC.js} +1 -1
  58. package/packages/ui/dist/assets/{extension-D_YB41G_.js → extension-G6I6oogw.js} +1 -1
  59. package/packages/ui/dist/assets/{external-link-rBG5a7MZ.js → external-link-BPaGQf4a.js} +1 -1
  60. package/packages/ui/dist/assets/{facebook-Hn_b-JCP.js → facebook-47twy32b.js} +1 -1
  61. package/packages/ui/dist/assets/{fallback-BSNjxjhh.js → fallback-BTfJeGjh.js} +1 -1
  62. package/packages/ui/dist/assets/{farcaster-BvD_feGw.js → farcaster-DYqnqCqs.js} +1 -1
  63. package/packages/ui/dist/assets/{filters-B6b694Xy.js → filters-dF6xeJnE.js} +1 -1
  64. package/packages/ui/dist/assets/{github-B5zqgRW6.js → github-DbW4Ihz2.js} +1 -1
  65. package/packages/ui/dist/assets/{google-BSGxxnTQ.js → google-TKm7G8LF.js} +1 -1
  66. package/packages/ui/dist/assets/{help-circle-Ce1u0tMv.js → help-circle-CY3qTmsG.js} +1 -1
  67. package/packages/ui/dist/assets/{id-sk5zuKn_.js → id-JpHW4q14.js} +1 -1
  68. package/packages/ui/dist/assets/{image-BEcIv0W7.js → image-Dip2fG98.js} +1 -1
  69. package/packages/ui/dist/assets/{index-BXYreG94.js → index-BGJ_8fMk.js} +1 -1
  70. package/packages/ui/dist/assets/{index-C-9jC0nT.js → index-Bq3PAopp.js} +1 -1
  71. package/packages/ui/dist/assets/{index-iaA95CrO.js → index-C4_cA5XW.js} +1 -1
  72. package/packages/ui/dist/assets/{index-BV_O39t0.js → index-CaDN0gL4.js} +1 -1
  73. package/packages/ui/dist/assets/{index-BFuZ3vJV.js → index-DLElIcBr.js} +40 -40
  74. package/packages/ui/dist/assets/{index-BWJIDuJ2.js → index-q0mGElxZ.js} +3 -3
  75. package/packages/ui/dist/assets/{index.es-DSTQLxbd.js → index.es-BaCKS_tW.js} +4 -4
  76. package/packages/ui/dist/assets/{info-CKyiPci5.js → info-B1enFsqh.js} +1 -1
  77. package/packages/ui/dist/assets/{info-circle-CW0kDaAs.js → info-circle-D4j3FISs.js} +1 -1
  78. package/packages/ui/dist/assets/{lightbulb-bnSgd_F-.js → lightbulb-DZbKr-vS.js} +1 -1
  79. package/packages/ui/dist/assets/{mail-BGmbZV9J.js → mail-D-TO_uVQ.js} +1 -1
  80. package/packages/ui/dist/assets/{metamask-sdk-CzBEUGpm.js → metamask-sdk-DljW3QD1.js} +1 -1
  81. package/packages/ui/dist/assets/{mobile-Cbh9WnoA.js → mobile-Bkmwzav2.js} +1 -1
  82. package/packages/ui/dist/assets/{more-BBoDLkz_.js → more-D1_I_jiB.js} +1 -1
  83. package/packages/ui/dist/assets/{network-placeholder-BaWfPSVc.js → network-placeholder-DUaFjoXh.js} +1 -1
  84. package/packages/ui/dist/assets/{nftPlaceholder-C-o5NTld.js → nftPlaceholder-Cc0iUryh.js} +1 -1
  85. package/packages/ui/dist/assets/{off-DvAzX5ic.js → off-BvX71sse.js} +1 -1
  86. package/packages/ui/dist/assets/{parseSignature-DJKQlxwH.js → parseSignature-BAS-wKoj.js} +1 -1
  87. package/packages/ui/dist/assets/{play-store-BuHRHQMo.js → play-store-XzLbtbTd.js} +1 -1
  88. package/packages/ui/dist/assets/{plus-DP7LMX2W.js → plus-B77_RmYR.js} +1 -1
  89. package/packages/ui/dist/assets/{qr-code-DaotBaRn.js → qr-code-BNeIhB1d.js} +1 -1
  90. package/packages/ui/dist/assets/{recycle-horizontal-BOBLBM5F.js → recycle-horizontal-B9sX-yty.js} +1 -1
  91. package/packages/ui/dist/assets/{refresh-B9Uah1lr.js → refresh-BWRygnjm.js} +1 -1
  92. package/packages/ui/dist/assets/{reown-logo-D-A6gikk.js → reown-logo-DCAEsGFm.js} +1 -1
  93. package/packages/ui/dist/assets/{search-CLf0oNq0.js → search-ZXIqrawS.js} +1 -1
  94. package/packages/ui/dist/assets/{secp256k1-o2-PEMaD.js → secp256k1-Doz05h4g.js} +1 -1
  95. package/packages/ui/dist/assets/{send-zibdNMYZ.js → send-BQcO0jNC.js} +1 -1
  96. package/packages/ui/dist/assets/{swapHorizontal-BKyVtQb4.js → swapHorizontal-4yZEzz2K.js} +1 -1
  97. package/packages/ui/dist/assets/{swapHorizontalBold-D_yV6FhX.js → swapHorizontalBold-DxBKu3sl.js} +1 -1
  98. package/packages/ui/dist/assets/{swapHorizontalMedium-CSG0LNdP.js → swapHorizontalMedium-DAQYJ2JK.js} +1 -1
  99. package/packages/ui/dist/assets/{swapHorizontalRoundedBold-DlYMEubo.js → swapHorizontalRoundedBold-CUlZzFJ6.js} +1 -1
  100. package/packages/ui/dist/assets/{swapVertical-CB0WGXhs.js → swapVertical-CjWHAaDM.js} +1 -1
  101. package/packages/ui/dist/assets/{telegram-B4eWMDad.js → telegram-JBeabiJP.js} +1 -1
  102. package/packages/ui/dist/assets/{three-dots-CSqXQX0E.js → three-dots-D3R8OjSx.js} +1 -1
  103. package/packages/ui/dist/assets/{twitch-Dfpk5rqx.js → twitch-1f9z7xVO.js} +1 -1
  104. package/packages/ui/dist/assets/{twitterIcon-Bngk-UC7.js → twitterIcon-BW7n2xnp.js} +1 -1
  105. package/packages/ui/dist/assets/{verify-CkV7ea2T.js → verify-Cs5owI38.js} +1 -1
  106. package/packages/ui/dist/assets/{verify-filled-CAtmQoCe.js → verify-filled-Ci5sx5qS.js} +1 -1
  107. package/packages/ui/dist/assets/{w3m-modal-CRVkWGCV.js → w3m-modal-DnWtss8u.js} +1 -1
  108. package/packages/ui/dist/assets/{wallet-bjwMa6sZ.js → wallet-MaGNqaW-.js} +1 -1
  109. package/packages/ui/dist/assets/{wallet-placeholder-EXnYyVfX.js → wallet-placeholder-kTOy12_L.js} +1 -1
  110. package/packages/ui/dist/assets/{walletconnect-B8lXOjAB.js → walletconnect-CyuP92jg.js} +1 -1
  111. package/packages/ui/dist/assets/{warning-circle-CmPwRjL_.js → warning-circle-BImUCdpG.js} +1 -1
  112. package/packages/ui/dist/assets/{x-CCLsfIR6.js → x-II45JHpV.js} +1 -1
  113. package/packages/ui/dist/index.html +1 -1
  114. package/templates/default/.agents/skills/sail-mandates/SKILL.md +12 -0
  115. package/templates/default/.agents/skills/sail-onboarding/SKILL.md +1 -1
  116. package/templates/default/.agents/skills/sail-project-info/SKILL.md +2 -0
  117. package/packages/ui/dist/assets/cursor-9u-UhLUH.js +0 -3
@@ -1,4 +1,4 @@
1
- import{F as l}from"./core-DuAIm6Xv.js";import"./index-BFuZ3vJV.js";import"./events-DBlbqBry.js";import"./index.es-DSTQLxbd.js";import"./fallback-BSNjxjhh.js";const o=l`<svg fill="none" viewBox="0 0 96 67">
1
+ import{F as l}from"./core-von2c1sc.js";import"./index-DLElIcBr.js";import"./events-C9icG2YB.js";import"./index.es-BaCKS_tW.js";import"./fallback-BTfJeGjh.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-DuAIm6Xv.js";import"./index-BFuZ3vJV.js";import"./events-DBlbqBry.js";import"./index.es-DSTQLxbd.js";import"./fallback-BSNjxjhh.js";const a=r`<svg fill="none" viewBox="0 0 20 20">
1
+ import{F as r}from"./core-von2c1sc.js";import"./index-DLElIcBr.js";import"./events-C9icG2YB.js";import"./index.es-BaCKS_tW.js";import"./fallback-BTfJeGjh.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-DuAIm6Xv.js";import"./index-BFuZ3vJV.js";import"./events-DBlbqBry.js";import"./index.es-DSTQLxbd.js";import"./fallback-BSNjxjhh.js";const a=l`<svg fill="none" viewBox="0 0 41 40">
1
+ import{F as l}from"./core-von2c1sc.js";import"./index-DLElIcBr.js";import"./events-C9icG2YB.js";import"./index.es-BaCKS_tW.js";import"./fallback-BTfJeGjh.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-BFuZ3vJV.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-DLElIcBr.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-lhNfD4jA.css">
10
10
  </head>
11
11
  <body>
@@ -94,6 +94,18 @@ Only now is the permission live. The owner (mandate signer) signs in the browser
94
94
 
95
95
  When a strategy needs several permissions (e.g. a bounded-approve alongside the protocol permission), attach them all at once by passing a comma-separated list of addresses — the registration approvals collapse to a **single** browser signature via the kernel's `registerPermissions`. The earlier per-contract deploy approvals (Gate 5) are separate and unavoidable. A single permission attaches exactly as before with `--address <one>`.
96
96
 
97
+ ## Registration fee
98
+
99
+ Registering a permission charges a **per-permission fee**, paid on-chain by the agent wallet at the moment of registration. It is a public protocol parameter — `permissionRegistrationFee()` on `SailGovernance` — read **live from the chain**, never hardcoded: it is `0` on the current deploy and higher in production, and the same flow surfaces whichever value the connected chain returns.
100
+
101
+ - **A mandate is a SET of permissions, so a mandate of N permissions costs `N × fee`.** Three permissions at `0.00001 ETH` each cost `0.00003 ETH` total.
102
+ - **When it's charged:** once per permission, on registration (the `attach` / `deploy-clone` step). Already-registered permissions are not re-charged when you re-run `sailor mandate sign`. Revoking does not refund.
103
+ - **Disclosure before signing:** `sailor mandate prepare` reads the live fee and records it in the draft, and `sailor mandate sign` prints `Registration fee: <total> ETH (<N> permissions × <fee> ETH)` before you confirm. The browser sign-time screen shows the same total.
104
+ - **Preflight:** before requesting the owner's signature, the agent wallet's ETH balance is checked against the total fee; an underfunded wallet fails early with `Insufficient ETH for the <X> ETH registration fee` instead of an on-chain revert. **Fund the agent wallet before attaching.**
105
+ - **Recorded:** each `permission_registered` activity entry carries the fee actually paid (`fee` in wei, `feeEth` formatted), so Recent Activity shows the real cost.
106
+
107
+ The fee is read via `readPermissionRegistrationFee()` in `packages/sdk/src/fees.ts` and applied as `fee × N` — the same number used for disclosure, the preflight, the tx `value`, and the activity record.
108
+
97
109
  ## Maintenance
98
110
 
99
111
  - `sailor mandate revoke --address <P> --sma <SMA> --json` (or `--all`) — owner signs `RevokePermissions` in the browser (BLOCKS); agent submits. Revocations are recorded to the activity log; `state/mandates.json` keeps the historical record.
@@ -104,7 +104,7 @@ If `deploy-chain` refuses with an address mismatch, the SMA was deployed against
104
104
  ## Gas requirements
105
105
 
106
106
  - Owner wallet: SMA deployment, mandate signing (EIP-712), any additional-chain deployment.
107
- - Agent wallet: `mandate deploy`, `mandate attach`, `mandate revoke`, and every dispatch submission once the agent runs, plus permission registration fees on fee-charging chains.
107
+ - Agent wallet: `mandate deploy`, `mandate attach`, `mandate revoke`, and every dispatch submission once the agent runs, plus permission registration fees on fee-charging chains. The registration fee is a **per-permission flat charge** (`permissionRegistrationFee()` on `SailGovernance`, read live — currently `0` on this deploy). A mandate of N permissions costs `N × fee` on top of gas; fund the agent wallet for the full amount before attaching. The fee is disclosed at sign time (`Registration fee: X ETH`) and recorded in the activity log. An underfunded agent wallet fails early with `Insufficient ETH for the X ETH registration fee` rather than reverting on-chain.
108
108
 
109
109
  `sailor doctor` — read-only preflight: kernel dispatch model, permission health, RPC reachability, gas balances in both wallets. Do not proceed to Stage 3 with a failing doctor.
110
110
 
@@ -28,3 +28,5 @@ Every command here is read-only and supports `--json` for machine reading. Prefe
28
28
  - "Is anything running?" — `.sail/runtime/ui.json` (dashboard), `.sail/runtime/server.json` (signing station), agent pid via `sailor status`.
29
29
 
30
30
  Run `sailor doctor` before any operation that spends gas — it is the cheapest way to catch a dead RPC, an unfunded wallet, or a kernel mismatch first.
31
+
32
+ - "What is the permission registration fee?" — `permissionRegistrationFee()` on `SailGovernance` (read live; currently `0` on this deploy). `sailor mandate sign` and `sailor mandate prepare` print the fee before signing. Each `permission_registered` entry in the activity log includes `fee` (wei) and `feeEth` (formatted), so Recent Activity shows the real cost paid per registration.
@@ -1,3 +0,0 @@
1
- import{F as o}from"./core-DuAIm6Xv.js";import"./index-BFuZ3vJV.js";import"./events-DBlbqBry.js";import"./index.es-DSTQLxbd.js";import"./fallback-BSNjxjhh.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};