@dev.sail.money/sailor 0.0.2-27 → 0.0.2-28

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 (115) hide show
  1. package/AGENTS.md +2 -1
  2. package/README.md +11 -62
  3. package/package.json +3 -9
  4. package/packages/cli/dist/index.cjs +97 -174
  5. package/packages/cli/dist/server.cjs +1399 -584
  6. package/packages/sdk/dist/index.d.ts +0 -1
  7. package/packages/sdk/dist/index.d.ts.map +1 -1
  8. package/packages/sdk/dist/index.js +0 -1
  9. package/packages/sdk/dist/index.js.map +1 -1
  10. package/packages/sdk/dist/intelligence.d.ts +1 -1
  11. package/packages/sdk/dist/intelligence.js +1 -1
  12. package/packages/sdk/package.json +0 -28
  13. package/packages/ui/dist/assets/{add-qTuQMFTK.js → add-Cj0EIUcG.js} +1 -1
  14. package/packages/ui/dist/assets/{all-wallets-C-2_6Yfv.js → all-wallets-DlyRsWoN.js} +1 -1
  15. package/packages/ui/dist/assets/{app-store-DIz363Ij.js → app-store-CXP08sks.js} +1 -1
  16. package/packages/ui/dist/assets/{apple-Bm2XNMO1.js → apple-B62K6dJr.js} +1 -1
  17. package/packages/ui/dist/assets/{arrow-bottom-D7B-UpVg.js → arrow-bottom-BTuC5-tQ.js} +1 -1
  18. package/packages/ui/dist/assets/{arrow-bottom-circle-XB0ks3C3.js → arrow-bottom-circle-dlgFXE0q.js} +1 -1
  19. package/packages/ui/dist/assets/{arrow-left-_d9tAksG.js → arrow-left-Uohbz9c6.js} +1 -1
  20. package/packages/ui/dist/assets/{arrow-right-By10t6nk.js → arrow-right-CH0vSHgl.js} +1 -1
  21. package/packages/ui/dist/assets/{arrow-top-CrLIWHvo.js → arrow-top-CxY6BKDT.js} +1 -1
  22. package/packages/ui/dist/assets/{bank-DZC26LyI.js → bank-Dz6PlF79.js} +1 -1
  23. package/packages/ui/dist/assets/{basic-C2XYdmOJ.js → basic-CTV3Ph_S.js} +1 -1
  24. package/packages/ui/dist/assets/{browser-URMwBp02.js → browser-DBRTpG2H.js} +1 -1
  25. package/packages/ui/dist/assets/{card-DI1X7fa2.js → card-DWA4Ne8q.js} +1 -1
  26. package/packages/ui/dist/assets/{ccip-CkI0EKXG.js → ccip-CJCerfkJ.js} +1 -1
  27. package/packages/ui/dist/assets/{checkmark-DRPP3O33.js → checkmark-Cx-ePFrg.js} +1 -1
  28. package/packages/ui/dist/assets/{checkmark-bold-BXlTXuID.js → checkmark-bold-BhDIlGHD.js} +1 -1
  29. package/packages/ui/dist/assets/{chevron-bottom-BtIA5-Zw.js → chevron-bottom-2uFzesS3.js} +1 -1
  30. package/packages/ui/dist/assets/{chevron-left-CR6HwOU6.js → chevron-left-BoKXXZ4E.js} +1 -1
  31. package/packages/ui/dist/assets/{chevron-right-DubfEKW-.js → chevron-right-EUp-RhYw.js} +1 -1
  32. package/packages/ui/dist/assets/{chevron-top-BrZ5ZZx1.js → chevron-top-D51M78MN.js} +1 -1
  33. package/packages/ui/dist/assets/{chrome-store-DdtEbnZQ.js → chrome-store-DrRbU0Rc.js} +1 -1
  34. package/packages/ui/dist/assets/{clock-CbGzJbXx.js → clock-9mIuX-1G.js} +1 -1
  35. package/packages/ui/dist/assets/{close-BdZW5KIv.js → close-BvuXlx8s.js} +1 -1
  36. package/packages/ui/dist/assets/{coinPlaceholder-BXu1Nsdu.js → coinPlaceholder-Bi7hJj5a.js} +1 -1
  37. package/packages/ui/dist/assets/{compass-CZQzEYcb.js → compass-C623d6DE.js} +1 -1
  38. package/packages/ui/dist/assets/{copy-fCcrYd5O.js → copy-CFhZQkfE.js} +1 -1
  39. package/packages/ui/dist/assets/{core-B_rlQlCa.js → core-BGl4d2YS.js} +3 -3
  40. package/packages/ui/dist/assets/cursor-CUSm3LCL.js +3 -0
  41. package/packages/ui/dist/assets/{cursor-transparent-BvuhytdN.js → cursor-transparent-FBFMyBY2.js} +1 -1
  42. package/packages/ui/dist/assets/{desktop-AwX0UzWw.js → desktop-Cco6Py8z.js} +1 -1
  43. package/packages/ui/dist/assets/{disconnect-B2DnHNge.js → disconnect-GkX8GhOW.js} +1 -1
  44. package/packages/ui/dist/assets/{discord-CcFyxhBQ.js → discord-BNJe-HNX.js} +1 -1
  45. package/packages/ui/dist/assets/{etherscan-D5kNPWk4.js → etherscan-CoY2RMWw.js} +1 -1
  46. package/packages/ui/dist/assets/{events-C8ePWdzE.js → events-DlxPGhin.js} +1 -1
  47. package/packages/ui/dist/assets/{exclamation-triangle-DyQ_1Efw.js → exclamation-triangle-9thkvaBf.js} +1 -1
  48. package/packages/ui/dist/assets/{extension-jz2s06tW.js → extension-BshOJ_bn.js} +1 -1
  49. package/packages/ui/dist/assets/{external-link-2ybQxumz.js → external-link-97rok_V_.js} +1 -1
  50. package/packages/ui/dist/assets/{facebook-DS8jxA10.js → facebook-BsiLEVlU.js} +1 -1
  51. package/packages/ui/dist/assets/{fallback-B9fs84IX.js → fallback-DlWsoHyh.js} +1 -1
  52. package/packages/ui/dist/assets/{farcaster-BBJafyOu.js → farcaster-CmRL47La.js} +1 -1
  53. package/packages/ui/dist/assets/{filters-CNeaqp_S.js → filters-DXAWgNLO.js} +1 -1
  54. package/packages/ui/dist/assets/{github-Bc07zhCy.js → github-bCBJUbbe.js} +1 -1
  55. package/packages/ui/dist/assets/{google-v8uzPHNZ.js → google-CYTI0KrI.js} +1 -1
  56. package/packages/ui/dist/assets/{help-circle-DxtX1OZF.js → help-circle-LNgEbcGY.js} +1 -1
  57. package/packages/ui/dist/assets/{id-Br98ANoH.js → id-ChJn0Ugg.js} +1 -1
  58. package/packages/ui/dist/assets/{image-Bmk8NyWu.js → image--Y7maC5b.js} +1 -1
  59. package/packages/ui/dist/assets/{index-DK4KEqZ6.js → index-5MkegeeB.js} +3 -3
  60. package/packages/ui/dist/assets/{index-tz2OP5vg.js → index-BN0O-ZFZ.js} +39 -39
  61. package/packages/ui/dist/assets/{index-C8u3uWA-.js → index-BONuaN6W.js} +1 -1
  62. package/packages/ui/dist/assets/{index-D8e304bv.js → index-BlU0aZ21.js} +1 -1
  63. package/packages/ui/dist/assets/{index-C3xXe8Pu.js → index-CZMzzRJU.js} +1 -1
  64. package/packages/ui/dist/assets/{index-noDAXths.js → index-O4l6CrZ0.js} +1 -1
  65. package/packages/ui/dist/assets/index-n8bp1ZEc.css +1 -0
  66. package/packages/ui/dist/assets/{index.es-DO70eR0a.js → index.es-CXlLR_xG.js} +4 -4
  67. package/packages/ui/dist/assets/{info-Dm75IcvR.js → info-DUq1c6sJ.js} +1 -1
  68. package/packages/ui/dist/assets/{info-circle-COqN3U18.js → info-circle-UobJ0GGG.js} +1 -1
  69. package/packages/ui/dist/assets/{lightbulb-oXBKSpqT.js → lightbulb-BI4WR-IB.js} +1 -1
  70. package/packages/ui/dist/assets/{mail-CzH77S-9.js → mail-BSN2fVMe.js} +1 -1
  71. package/packages/ui/dist/assets/{metamask-sdk-kTTPRXnX.js → metamask-sdk-B7CK8pn-.js} +1 -1
  72. package/packages/ui/dist/assets/{mobile-DC8p7uWG.js → mobile-BfuUs9p7.js} +1 -1
  73. package/packages/ui/dist/assets/{more-CW76Ufwh.js → more-C1zkGuE3.js} +1 -1
  74. package/packages/ui/dist/assets/{network-placeholder-C-jgFto6.js → network-placeholder-CtiEl1UM.js} +1 -1
  75. package/packages/ui/dist/assets/{nftPlaceholder-CMNOse1o.js → nftPlaceholder-C_B9PGkr.js} +1 -1
  76. package/packages/ui/dist/assets/{off-BXAtst7s.js → off-B93fIkKw.js} +1 -1
  77. package/packages/ui/dist/assets/{parseSignature-huIOIOFv.js → parseSignature-BKzLunwo.js} +1 -1
  78. package/packages/ui/dist/assets/{play-store-CAA_V4_P.js → play-store-DfDTySLA.js} +1 -1
  79. package/packages/ui/dist/assets/{plus-o-2XxIRf.js → plus-_EYE7Soi.js} +1 -1
  80. package/packages/ui/dist/assets/{qr-code-BucbLbnn.js → qr-code-CSklhafe.js} +1 -1
  81. package/packages/ui/dist/assets/{recycle-horizontal-CzM8G600.js → recycle-horizontal-CoH2EBIZ.js} +1 -1
  82. package/packages/ui/dist/assets/{refresh-UBxc9Ujg.js → refresh-COGV5RR9.js} +1 -1
  83. package/packages/ui/dist/assets/{reown-logo-DouNSg_O.js → reown-logo-YYxIj6hm.js} +1 -1
  84. package/packages/ui/dist/assets/{search-B9_0X948.js → search-CpoWhaNF.js} +1 -1
  85. package/packages/ui/dist/assets/{secp256k1-CnLx1wuv.js → secp256k1-ZWo-L7nJ.js} +1 -1
  86. package/packages/ui/dist/assets/{send-D2ETNZ0F.js → send-CjEG2p8N.js} +1 -1
  87. package/packages/ui/dist/assets/{swapHorizontal-6R0tJDBj.js → swapHorizontal-3V6lypqD.js} +1 -1
  88. package/packages/ui/dist/assets/{swapHorizontalBold-YzWWnx8n.js → swapHorizontalBold-7swnGG5R.js} +1 -1
  89. package/packages/ui/dist/assets/{swapHorizontalMedium-DD4yeAY1.js → swapHorizontalMedium-zPdpOjAy.js} +1 -1
  90. package/packages/ui/dist/assets/{swapHorizontalRoundedBold-DmL4h2Mk.js → swapHorizontalRoundedBold-2Mxr5XPm.js} +1 -1
  91. package/packages/ui/dist/assets/{swapVertical-DWUQf-aB.js → swapVertical-D9KAlnz7.js} +1 -1
  92. package/packages/ui/dist/assets/{telegram-BWYqex9D.js → telegram-DztV38YW.js} +1 -1
  93. package/packages/ui/dist/assets/{three-dots-kuxAOnjJ.js → three-dots-DWOvYMr0.js} +1 -1
  94. package/packages/ui/dist/assets/{twitch-Cqjm9Lmi.js → twitch-B3UH6j0S.js} +1 -1
  95. package/packages/ui/dist/assets/{twitterIcon-qeJ4RH6T.js → twitterIcon-C2lA-xQv.js} +1 -1
  96. package/packages/ui/dist/assets/{verify-C2pfbtI7.js → verify-BP_uBvwh.js} +1 -1
  97. package/packages/ui/dist/assets/{verify-filled-DxEdt6vx.js → verify-filled-DLByZnlA.js} +1 -1
  98. package/packages/ui/dist/assets/{w3m-modal-Dm1gaw9i.js → w3m-modal-C2-cKwor.js} +1 -1
  99. package/packages/ui/dist/assets/{wallet-B7p1_8EB.js → wallet-Bc7LMFHM.js} +1 -1
  100. package/packages/ui/dist/assets/{wallet-placeholder-BY8k3n1-.js → wallet-placeholder-DsjujZQW.js} +1 -1
  101. package/packages/ui/dist/assets/{walletconnect-Bg6lRwqy.js → walletconnect-i_fC7jz3.js} +1 -1
  102. package/packages/ui/dist/assets/{warning-circle-DqLCpUJ0.js → warning-circle-DIxNhxFp.js} +1 -1
  103. package/packages/ui/dist/assets/{x-WtAqjAcW.js → x-BamJJInV.js} +1 -1
  104. package/packages/ui/dist/index.html +2 -2
  105. package/templates/default/examples/dca/agent.ts +1 -1
  106. package/templates/default/examples/dca/mandate.ts +1 -1
  107. package/templates/default/src/agent.ts +1 -1
  108. package/templates/default/tsconfig.json +2 -5
  109. package/templates/lifi-permissions/README.md +1 -1
  110. package/packages/sdk/dist/chains.d.ts +0 -12
  111. package/packages/sdk/dist/chains.d.ts.map +0 -1
  112. package/packages/sdk/dist/chains.js +0 -88
  113. package/packages/sdk/dist/chains.js.map +0 -1
  114. package/packages/ui/dist/assets/cursor-CNWux1oe.js +0 -3
  115. package/packages/ui/dist/assets/index-DCnJ64lX.css +0 -1
@@ -35206,7 +35206,7 @@ var {
35206
35206
  Help
35207
35207
  } = import_index.default;
35208
35208
 
35209
- // ../sdk/src/chains.ts
35209
+ // ../chains/dist/index.js
35210
35210
  var chains = {
35211
35211
  // Ethereum mainnet
35212
35212
  1: {
@@ -35282,17 +35282,15 @@ var chains = {
35282
35282
  function getChain(chainId) {
35283
35283
  const config = chains[chainId];
35284
35284
  if (!config) {
35285
- throw new Error(
35286
- `Chain ${chainId} is not supported. Supported chains: 1 (Ethereum), 8453 (Base), 42161 (Arbitrum), 130 (Unichain), 84532 (Base Sepolia), 11155111 (Eth Sepolia).`
35287
- );
35285
+ throw new Error(`Chain ${chainId} is not yet supported. Add it to @sail/chains once SailKernel is deployed.`);
35288
35286
  }
35289
35287
  return config;
35290
35288
  }
35291
35289
 
35292
- // ../sdk/src/client.ts
35290
+ // ../sdk/dist/client.js
35293
35291
  init_esm2();
35294
35292
 
35295
- // ../sdk/src/abis/SailKernel.ts
35293
+ // ../sdk/dist/abis/SailKernel.js
35296
35294
  var SailKernelAbi = [
35297
35295
  // ── Account instantiation ────────────────────────────────────────────────
35298
35296
  {
@@ -35597,7 +35595,7 @@ var SailKernelAbi = [
35597
35595
  }
35598
35596
  ];
35599
35597
 
35600
- // ../sdk/src/capabilities.ts
35598
+ // ../sdk/dist/capabilities.js
35601
35599
  init_esm2();
35602
35600
  var DISPATCH_TYPE_STRINGS = {
35603
35601
  conjunctive: "Dispatch(address account,address target,uint256 value,bytes32 dataHash,uint256 nonce,uint256 deadline)",
@@ -35642,9 +35640,7 @@ function fromDispatchTypehash(kernel, dispatchTypehash, registerPermissionTypeha
35642
35640
  } else if (dispatchTypehash === DISPATCH_TYPEHASHES.selective) {
35643
35641
  dispatchModel = "selective";
35644
35642
  } else {
35645
- throw new Error(
35646
- `Unrecognized kernel DISPATCH_TYPEHASH ${dispatchTypehash} for ${kernel}. The SDK cannot safely sign dispatches for this kernel version. Known: conjunctive=${DISPATCH_TYPEHASHES.conjunctive}, selective=${DISPATCH_TYPEHASHES.selective}.`
35647
- );
35643
+ throw new Error(`Unrecognized kernel DISPATCH_TYPEHASH ${dispatchTypehash} for ${kernel}. The SDK cannot safely sign dispatches for this kernel version. Known: conjunctive=${DISPATCH_TYPEHASHES.conjunctive}, selective=${DISPATCH_TYPEHASHES.selective}.`);
35648
35644
  }
35649
35645
  let registerPermissionHasDeadline = dispatchModel === "selective";
35650
35646
  if (registerPermissionTypehash === REGISTER_PERMISSION_TYPEHASHES.withDeadline) {
@@ -35669,7 +35665,8 @@ async function detectKernelCapabilities(publicClient, kernel, opts) {
35669
35665
  const key = cacheKey2(chainId, kernel);
35670
35666
  if (!opts?.force) {
35671
35667
  const hit = cache.get(key);
35672
- if (hit) return hit;
35668
+ if (hit)
35669
+ return hit;
35673
35670
  }
35674
35671
  let dispatchTypehash;
35675
35672
  let registerPermissionTypehash;
@@ -35691,29 +35688,17 @@ async function detectKernelCapabilities(publicClient, kernel, opts) {
35691
35688
  }
35692
35689
  let caps;
35693
35690
  if (dispatchTypehash) {
35694
- caps = fromDispatchTypehash(
35695
- kernel,
35696
- dispatchTypehash,
35697
- registerPermissionTypehash,
35698
- "onchain-typehash"
35699
- );
35691
+ caps = fromDispatchTypehash(kernel, dispatchTypehash, registerPermissionTypehash, "onchain-typehash");
35700
35692
  } else if (opts?.staticModel) {
35701
- caps = fromDispatchTypehash(
35702
- kernel,
35703
- DISPATCH_TYPEHASHES[opts.staticModel],
35704
- void 0,
35705
- "static-hint"
35706
- );
35693
+ caps = fromDispatchTypehash(kernel, DISPATCH_TYPEHASHES[opts.staticModel], void 0, "static-hint");
35707
35694
  } else {
35708
- throw new Error(
35709
- `Could not read DISPATCH_TYPEHASH from kernel ${kernel}, and no staticModel hint was given. Pass opts.staticModel ('conjunctive' | 'selective') to proceed without on-chain detection.`
35710
- );
35695
+ throw new Error(`Could not read DISPATCH_TYPEHASH from kernel ${kernel}, and no staticModel hint was given. Pass opts.staticModel ('conjunctive' | 'selective') to proceed without on-chain detection.`);
35711
35696
  }
35712
35697
  cache.set(key, caps);
35713
35698
  return caps;
35714
35699
  }
35715
35700
 
35716
- // ../sdk/src/deployments.ts
35701
+ // ../sdk/dist/deployments.js
35717
35702
  var CREATE2_KERNEL = "0x02ABC18B65A328de2e749F56ba79ACF2718a6659";
35718
35703
  var CREATE2_GOVERNANCE = "0x7A478118715791728BDE3bc7A4D7ECfdEB89C6EC";
35719
35704
  var CREATE2_TIMELOCK = "0xE48Ba8DB6d748adafD13155c3590f62e58a77f56";
@@ -35866,7 +35851,7 @@ function getSailDeployment(chainId) {
35866
35851
  return deployment;
35867
35852
  }
35868
35853
 
35869
- // ../sdk/src/errors.ts
35854
+ // ../sdk/dist/errors.js
35870
35855
  init_esm2();
35871
35856
  var KERNEL_ERROR_SIGNATURES = [
35872
35857
  "error AccountAlreadyRegistered(address account)",
@@ -35945,12 +35930,14 @@ async function decode2(data) {
35945
35930
  }
35946
35931
  }
35947
35932
  function decodeKernelError(data) {
35948
- if (!data || data === "0x") return Promise.resolve(null);
35933
+ if (!data || data === "0x")
35934
+ return Promise.resolve(null);
35949
35935
  return decode2(data);
35950
35936
  }
35951
35937
  async function explainKernelRevert(err) {
35952
35938
  const data = extractRevertData(err);
35953
- if (!data) return null;
35939
+ if (!data)
35940
+ return null;
35954
35941
  return decodeKernelError(data);
35955
35942
  }
35956
35943
  function extractRevertData(err) {
@@ -35980,7 +35967,7 @@ function extractRevertData(err) {
35980
35967
  return null;
35981
35968
  }
35982
35969
 
35983
- // ../sdk/src/eip712.ts
35970
+ // ../sdk/dist/eip712.js
35984
35971
  init_esm2();
35985
35972
  function sailKernelDomain(args) {
35986
35973
  return {
@@ -36034,16 +36021,12 @@ async function buildDispatchSignature(params) {
36034
36021
  const dataHash = keccak256(call2.data);
36035
36022
  const selective = caps.dispatchModel === "selective";
36036
36023
  const message = selective ? { account: account2, permission, target: call2.target, value: call2.value, dataHash, nonce, deadline } : { account: account2, target: call2.target, value: call2.value, dataHash, nonce, deadline };
36037
- const signature = await manager.signTyped(
36038
- sailKernelDomain({ chainId, kernel }),
36039
- {
36040
- primaryType: "Dispatch",
36041
- types: {
36042
- Dispatch: DISPATCH_EIP712_FIELDS[caps.dispatchModel]
36043
- }
36044
- },
36045
- message
36046
- );
36024
+ const signature = await manager.signTyped(sailKernelDomain({ chainId, kernel }), {
36025
+ primaryType: "Dispatch",
36026
+ types: {
36027
+ Dispatch: DISPATCH_EIP712_FIELDS[caps.dispatchModel]
36028
+ }
36029
+ }, message);
36047
36030
  return { signature, nonce, deadline, dispatchModel: caps.dispatchModel };
36048
36031
  }
36049
36032
  var REGISTER_PERMISSION_TYPES = {
@@ -36122,7 +36105,7 @@ function buildRegisterPermissionsBatchTypedData(args) {
36122
36105
  };
36123
36106
  }
36124
36107
 
36125
- // ../sdk/src/lifi.ts
36108
+ // ../sdk/dist/lifi.js
36126
36109
  init_esm2();
36127
36110
  var LIFI_QUOTE_URL = "https://li.quest/v1/quote";
36128
36111
  var LIFI_ROUTERS = {
@@ -36161,9 +36144,7 @@ async function fetchLifiQuote(params) {
36161
36144
  const quote = await res.json();
36162
36145
  const tx = quote.transactionRequest;
36163
36146
  if (!tx?.to || !tx?.data) {
36164
- throw new Error(
36165
- "LiFi quote returned no usable transactionRequest: " + JSON.stringify(quote).slice(0, 400)
36166
- );
36147
+ throw new Error("LiFi quote returned no usable transactionRequest: " + JSON.stringify(quote).slice(0, 400));
36167
36148
  }
36168
36149
  return {
36169
36150
  target: tx.to,
@@ -36174,7 +36155,7 @@ async function fetchLifiQuote(params) {
36174
36155
  };
36175
36156
  }
36176
36157
 
36177
- // ../sdk/src/client.ts
36158
+ // ../sdk/dist/client.js
36178
36159
  function notImplemented() {
36179
36160
  throw new Error("not implemented");
36180
36161
  }
@@ -36218,13 +36199,17 @@ var CONJUNCTIVE_DISPATCH_ABI = [
36218
36199
  async function enrichKernelRevert(err) {
36219
36200
  const decoded = await explainKernelRevert(err);
36220
36201
  const base2 = err instanceof Error ? err : new Error(String(err));
36221
- if (!decoded) return base2;
36202
+ if (!decoded)
36203
+ return base2;
36222
36204
  const wrapped = new Error(`Kernel reverted: ${decoded.message}`);
36223
36205
  wrapped.cause = base2;
36224
36206
  wrapped.kernelError = decoded;
36225
36207
  return wrapped;
36226
36208
  }
36227
36209
  var KernelNamespace = class {
36210
+ publicClient;
36211
+ config;
36212
+ walletClient;
36228
36213
  constructor(publicClient, config, walletClient) {
36229
36214
  this.publicClient = publicClient;
36230
36215
  this.config = config;
@@ -36233,17 +36218,13 @@ var KernelNamespace = class {
36233
36218
  requireKernel() {
36234
36219
  const kernel = this.config.kernel;
36235
36220
  if (!kernel) {
36236
- throw new Error(
36237
- "SailKernel address not configured \u2014 set `kernel` in SailorClientConfig."
36238
- );
36221
+ throw new Error("SailKernel address not configured \u2014 set `kernel` in SailorClientConfig.");
36239
36222
  }
36240
36223
  return kernel;
36241
36224
  }
36242
36225
  requireSigner() {
36243
36226
  if (!this.walletClient) {
36244
- throw new Error(
36245
- "No signer attached \u2014 call client.withSigner(walletClient) before write operations."
36246
- );
36227
+ throw new Error("No signer attached \u2014 call client.withSigner(walletClient) before write operations.");
36247
36228
  }
36248
36229
  return this.walletClient;
36249
36230
  }
@@ -36266,9 +36247,7 @@ var AccountNamespace = class extends KernelNamespace {
36266
36247
  const kernel = this.requireKernel();
36267
36248
  const signer = this.requireSigner();
36268
36249
  if (!params.safeFactory || !params.safeSingleton || !params.safeInitializer) {
36269
- throw new Error(
36270
- "createAccount requires safeFactory, safeSingleton, and safeInitializer."
36271
- );
36250
+ throw new Error("createAccount requires safeFactory, safeSingleton, and safeInitializer.");
36272
36251
  }
36273
36252
  const txHash = await signer.writeContract({
36274
36253
  address: kernel,
@@ -36329,21 +36308,17 @@ var MandateNamespace = class extends KernelNamespace {
36329
36308
  functionName: "signerNonces",
36330
36309
  args: [safe]
36331
36310
  });
36332
- const sig = await signer.signTyped(
36333
- sailKernelDomain({ chainId: this.config.chainId, kernel }),
36334
- {
36335
- primaryType: "RegisterPermissions",
36336
- types: {
36337
- RegisterPermissions: [
36338
- { name: "account", type: "address" },
36339
- { name: "permissions", type: "address[]" },
36340
- { name: "nonce", type: "uint256" },
36341
- { name: "deadline", type: "uint256" }
36342
- ]
36343
- }
36344
- },
36345
- { account: safe, permissions, nonce, deadline }
36346
- );
36311
+ const sig = await signer.signTyped(sailKernelDomain({ chainId: this.config.chainId, kernel }), {
36312
+ primaryType: "RegisterPermissions",
36313
+ types: {
36314
+ RegisterPermissions: [
36315
+ { name: "account", type: "address" },
36316
+ { name: "permissions", type: "address[]" },
36317
+ { name: "nonce", type: "uint256" },
36318
+ { name: "deadline", type: "uint256" }
36319
+ ]
36320
+ }
36321
+ }, { account: safe, permissions, nonce, deadline });
36347
36322
  await wallet.writeContract({
36348
36323
  address: kernel,
36349
36324
  abi: SailKernelAbi,
@@ -36362,9 +36337,7 @@ var MandateNamespace = class extends KernelNamespace {
36362
36337
  return notImplemented();
36363
36338
  }
36364
36339
  deployAndAttachClone(_safe, _impl, _initData, _salt, _signer) {
36365
- throw new Error(
36366
- "deployAndAttachClone is not yet implemented in the SDK.\nUse `sailor mandate attach --address <impl>` to attach a clone template via the factory."
36367
- );
36340
+ throw new Error("deployAndAttachClone is not yet implemented in the SDK.\nUse `sailor mandate attach --address <impl>` to attach a clone template via the factory.");
36368
36341
  }
36369
36342
  async list(safe) {
36370
36343
  const kernel = this.requireKernel();
@@ -36434,12 +36407,11 @@ var DispatchNamespace = class extends KernelNamespace {
36434
36407
  let latest = 0n;
36435
36408
  for (let i = 0; i < tries; i++) {
36436
36409
  latest = await this.readManagerNonce(kernel, safe);
36437
- if (latest >= expected) return latest;
36410
+ if (latest >= expected)
36411
+ return latest;
36438
36412
  await delay(1e3);
36439
36413
  }
36440
- throw new Error(
36441
- `Manager nonce for ${safe} did not reach ${expected} after ${tries}s (last seen ${latest}). The prior dispatch may not have mined, or the RPC endpoint is lagging. Retry, or pass an explicit nonce via options.nonce.`
36442
- );
36414
+ throw new Error(`Manager nonce for ${safe} did not reach ${expected} after ${tries}s (last seen ${latest}). The prior dispatch may not have mined, or the RPC endpoint is lagging. Retry, or pass an explicit nonce via options.nonce.`);
36443
36415
  }
36444
36416
  /**
36445
36417
  * Determine the nonce to sign with. Honors an explicit `options.nonce`
@@ -36448,7 +36420,8 @@ var DispatchNamespace = class extends KernelNamespace {
36448
36420
  * dispatch on this account) before reading the live value.
36449
36421
  */
36450
36422
  async resolveNonce(kernel, safe, options) {
36451
- if (options?.nonce !== void 0) return options.nonce;
36423
+ if (options?.nonce !== void 0)
36424
+ return options.nonce;
36452
36425
  const expected = options?.awaitNonce ?? this.nextNonce.get(this.nonceKey(kernel, safe));
36453
36426
  if (expected !== void 0) {
36454
36427
  return this.waitForManagerNonce(kernel, safe, expected);
@@ -36540,9 +36513,7 @@ var DispatchNamespace = class extends KernelNamespace {
36540
36513
  const deadline = defaultDeadline();
36541
36514
  const caps = await this.capabilities();
36542
36515
  if (caps.dispatchModel === "conjunctive") {
36543
- throw new Error(
36544
- `Batch dispatch is not supported by the conjunctive kernel at ${kernel} (it has no dispatchBatch). Submit calls individually via dispatch.single, ensuring the manager nonce advances between them.`
36545
- );
36516
+ throw new Error(`Batch dispatch is not supported by the conjunctive kernel at ${kernel} (it has no dispatchBatch). Submit calls individually via dispatch.single, ensuring the manager nonce advances between them.`);
36546
36517
  }
36547
36518
  const nonce = await this.publicClient.readContract({
36548
36519
  address: kernel,
@@ -36550,25 +36521,19 @@ var DispatchNamespace = class extends KernelNamespace {
36550
36521
  functionName: "batchNonces",
36551
36522
  args: [safe]
36552
36523
  });
36553
- const callsHash = keccak256(
36554
- encodeAbiParameters([{ type: "tuple[]", components: CALL_COMPONENTS }], [calls])
36555
- );
36556
- const managerSig = await manager.signTyped(
36557
- sailKernelDomain({ chainId: this.config.chainId, kernel }),
36558
- {
36559
- primaryType: "DispatchBatch",
36560
- types: {
36561
- DispatchBatch: [
36562
- { name: "account", type: "address" },
36563
- { name: "permission", type: "address" },
36564
- { name: "callsHash", type: "bytes32" },
36565
- { name: "nonce", type: "uint256" },
36566
- { name: "deadline", type: "uint256" }
36567
- ]
36568
- }
36569
- },
36570
- { account: safe, permission, callsHash, nonce, deadline }
36571
- );
36524
+ const callsHash = keccak256(encodeAbiParameters([{ type: "tuple[]", components: CALL_COMPONENTS }], [calls]));
36525
+ const managerSig = await manager.signTyped(sailKernelDomain({ chainId: this.config.chainId, kernel }), {
36526
+ primaryType: "DispatchBatch",
36527
+ types: {
36528
+ DispatchBatch: [
36529
+ { name: "account", type: "address" },
36530
+ { name: "permission", type: "address" },
36531
+ { name: "callsHash", type: "bytes32" },
36532
+ { name: "nonce", type: "uint256" },
36533
+ { name: "deadline", type: "uint256" }
36534
+ ]
36535
+ }
36536
+ }, { account: safe, permission, callsHash, nonce, deadline });
36572
36537
  let txHash;
36573
36538
  try {
36574
36539
  txHash = await wallet.writeContract({
@@ -36593,9 +36558,7 @@ var DispatchNamespace = class extends KernelNamespace {
36593
36558
  const kernel = this.requireKernel();
36594
36559
  const caps = await this.capabilities();
36595
36560
  if (caps.dispatchModel === "conjunctive") {
36596
- throw new Error(
36597
- `Dry-run preview is not supported by the conjunctive kernel at ${kernel} (it has no previewBatch view). Validate calls off-chain against each registered permission's evaluate() logic, or simulate the dispatch.single tx instead.`
36598
- );
36561
+ throw new Error(`Dry-run preview is not supported by the conjunctive kernel at ${kernel} (it has no previewBatch view). Validate calls off-chain against each registered permission's evaluate() logic, or simulate the dispatch.single tx instead.`);
36599
36562
  }
36600
36563
  const [approved, reason] = await this.publicClient.readContract({
36601
36564
  address: kernel,
@@ -36607,6 +36570,7 @@ var DispatchNamespace = class extends KernelNamespace {
36607
36570
  }
36608
36571
  };
36609
36572
  var StrategyNamespace = class extends KernelNamespace {
36573
+ dispatch;
36610
36574
  constructor(publicClient, config, dispatch, walletClient) {
36611
36575
  super(publicClient, config, walletClient);
36612
36576
  this.dispatch = dispatch;
@@ -36624,17 +36588,13 @@ var StrategyNamespace = class extends KernelNamespace {
36624
36588
  const slippage = params.slippage ?? DEFAULT_SLIPPAGE;
36625
36589
  const router = params.router ?? LIFI_ROUTERS[this.config.chainId];
36626
36590
  if (!router) {
36627
- throw new Error(
36628
- `No LiFi router known for chain ${this.config.chainId}. Pass params.router explicitly.`
36629
- );
36591
+ throw new Error(`No LiFi router known for chain ${this.config.chainId}. Pass params.router explicitly.`);
36630
36592
  }
36631
36593
  const caps = await this.capabilities();
36632
36594
  const swapPermission = params.swapPermission ?? router;
36633
36595
  const approvePermission = params.approvePermission ?? params.swapPermission ?? router;
36634
36596
  if (caps.dispatchModel === "selective" && !params.swapPermission) {
36635
- throw new Error(
36636
- "This kernel uses the selective dispatch model \u2014 params.swapPermission is required (the permission that authorizes the swap)."
36637
- );
36597
+ throw new Error("This kernel uses the selective dispatch model \u2014 params.swapPermission is required (the permission that authorizes the swap).");
36638
36598
  }
36639
36599
  const quote = await fetchLifiQuote({
36640
36600
  chainId: this.config.chainId,
@@ -36654,19 +36614,9 @@ var StrategyNamespace = class extends KernelNamespace {
36654
36614
  let approve;
36655
36615
  if (allowance < params.amount) {
36656
36616
  const approveAmount = params.approveAmount ?? params.amount;
36657
- approve = await this.dispatch.single(
36658
- safe,
36659
- approvePermission,
36660
- { target: params.from, value: 0n, data: encodeApprove(router, approveAmount) },
36661
- manager
36662
- );
36617
+ approve = await this.dispatch.single(safe, approvePermission, { target: params.from, value: 0n, data: encodeApprove(router, approveAmount) }, manager);
36663
36618
  }
36664
- const swap = await this.dispatch.single(
36665
- safe,
36666
- swapPermission,
36667
- { target: quote.target, value: quote.value, data: quote.data },
36668
- manager
36669
- );
36619
+ const swap = await this.dispatch.single(safe, swapPermission, { target: quote.target, value: quote.value, data: quote.data }, manager);
36670
36620
  return {
36671
36621
  swap,
36672
36622
  approve,
@@ -36786,7 +36736,7 @@ var SailorClient = class _SailorClient {
36786
36736
  }
36787
36737
  };
36788
36738
 
36789
- // ../sdk/src/keyring.ts
36739
+ // ../sdk/dist/keyring.js
36790
36740
  var import_node_crypto = require("node:crypto");
36791
36741
  var import_node_fs = require("node:fs");
36792
36742
  init_esm2();
@@ -37468,7 +37418,7 @@ function mnemonicToAccount(mnemonic, { passphrase, ...hdKeyOpts } = {}) {
37468
37418
  return hdKeyToAccount(HDKey.fromMasterSeed(seed), hdKeyOpts);
37469
37419
  }
37470
37420
 
37471
- // ../sdk/src/keyring.ts
37421
+ // ../sdk/dist/keyring.js
37472
37422
  var SCRYPT_N = 1 << 18;
37473
37423
  var SCRYPT_R = 8;
37474
37424
  var SCRYPT_P = 1;
@@ -37486,16 +37436,11 @@ var LocalKeyring = class _LocalKeyring {
37486
37436
  this.address = account2.address;
37487
37437
  this.privateKey = options.privateKey;
37488
37438
  } else if (options.type === "mnemonic") {
37489
- const account2 = mnemonicToAccount(
37490
- options.mnemonic,
37491
- options.derivationPath ? { path: options.derivationPath } : void 0
37492
- );
37439
+ const account2 = mnemonicToAccount(options.mnemonic, options.derivationPath ? { path: options.derivationPath } : void 0);
37493
37440
  this.account = account2;
37494
37441
  this.address = account2.address;
37495
37442
  } else {
37496
- throw new Error(
37497
- "keystore decryption not implemented \u2014 use type: 'privateKey' or type: 'mnemonic' instead"
37498
- );
37443
+ throw new Error("keystore decryption not implemented \u2014 use type: 'privateKey' or type: 'mnemonic' instead");
37499
37444
  }
37500
37445
  }
37501
37446
  /** Returns a lightweight signer stub for read-only contexts where the key is not available. */
@@ -37525,9 +37470,7 @@ var LocalKeyring = class _LocalKeyring {
37525
37470
  }
37526
37471
  const { n, r, p, dklen, salt } = crypto3.kdfparams;
37527
37472
  if (n < 1 << 14) {
37528
- throw new Error(
37529
- `Keystore scrypt N=${n} is below the minimum accepted value (16384). Refusing to decrypt.`
37530
- );
37473
+ throw new Error(`Keystore scrypt N=${n} is below the minimum accepted value (16384). Refusing to decrypt.`);
37531
37474
  }
37532
37475
  if (r < 8) {
37533
37476
  throw new Error(`Keystore scrypt r=${r} is below the minimum accepted value (8).`);
@@ -37545,11 +37488,7 @@ var LocalKeyring = class _LocalKeyring {
37545
37488
  if (computedMac.length !== storedMac.length || !(0, import_node_crypto.timingSafeEqual)(computedMac, storedMac)) {
37546
37489
  throw new Error("Invalid password or corrupt keystore");
37547
37490
  }
37548
- const decipher = (0, import_node_crypto.createDecipheriv)(
37549
- "aes-128-ctr",
37550
- derived.subarray(0, 16),
37551
- Buffer.from(crypto3.cipherparams.iv, "hex")
37552
- );
37491
+ const decipher = (0, import_node_crypto.createDecipheriv)("aes-128-ctr", derived.subarray(0, 16), Buffer.from(crypto3.cipherparams.iv, "hex"));
37553
37492
  const pkBytes = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
37554
37493
  return _LocalKeyring.fromPrivateKey(`0x${pkBytes.toString("hex")}`);
37555
37494
  }
@@ -37587,9 +37526,7 @@ var LocalKeyring = class _LocalKeyring {
37587
37526
  /** Exports the private key as an encrypted keystore JSON (scrypt + aes-128-ctr, geth v3). */
37588
37527
  async exportKeystore(password) {
37589
37528
  if (!this.privateKey) {
37590
- throw new Error(
37591
- "Private key unavailable \u2014 only privateKey/generated keyrings can be exported"
37592
- );
37529
+ throw new Error("Private key unavailable \u2014 only privateKey/generated keyrings can be exported");
37593
37530
  }
37594
37531
  const salt = (0, import_node_crypto.randomBytes)(32);
37595
37532
  const derived = (0, import_node_crypto.scryptSync)(password, salt, SCRYPT_DKLEN, {
@@ -37626,7 +37563,7 @@ var LocalKeyring = class _LocalKeyring {
37626
37563
  }
37627
37564
  };
37628
37565
 
37629
- // ../sdk/src/abis/SailGovernance.ts
37566
+ // ../sdk/dist/abis/SailGovernance.js
37630
37567
  var SailGovernanceAbi = [
37631
37568
  {
37632
37569
  type: "function",
@@ -37672,7 +37609,7 @@ var SailGovernanceAbi = [
37672
37609
  }
37673
37610
  ];
37674
37611
 
37675
- // ../sdk/src/safe.ts
37612
+ // ../sdk/dist/safe.js
37676
37613
  init_esm2();
37677
37614
  var setManagerAbi = [
37678
37615
  {
@@ -37762,10 +37699,7 @@ function buildSafeSetupInitializer(params) {
37762
37699
  });
37763
37700
  }
37764
37701
  function buildApprovedHashSignature(owner2) {
37765
- return encodePacked(
37766
- ["bytes32", "bytes32", "uint8"],
37767
- [pad(owner2, { size: 32 }), pad("0x", { size: 32 }), 1]
37768
- );
37702
+ return encodePacked(["bytes32", "bytes32", "uint8"], [pad(owner2, { size: 32 }), pad("0x", { size: 32 }), 1]);
37769
37703
  }
37770
37704
  var safeProxyFactoryAbi = [
37771
37705
  {
@@ -37778,15 +37712,11 @@ var safeProxyFactoryAbi = [
37778
37712
  ];
37779
37713
  function computeSafeProxyAddress(params) {
37780
37714
  const { initializer, saltNonce, proxyCreationCode } = params;
37781
- const initCodeHash = keccak256(
37782
- concat([
37783
- proxyCreationCode,
37784
- encodeAbiParameters([{ type: "address" }], [SAFE_V141.singletonL2])
37785
- ])
37786
- );
37787
- const salt = keccak256(
37788
- encodePacked(["bytes32", "uint256"], [keccak256(initializer), saltNonce])
37789
- );
37715
+ const initCodeHash = keccak256(concat([
37716
+ proxyCreationCode,
37717
+ encodeAbiParameters([{ type: "address" }], [SAFE_V141.singletonL2])
37718
+ ]));
37719
+ const salt = keccak256(encodePacked(["bytes32", "uint256"], [keccak256(initializer), saltNonce]));
37790
37720
  return getCreate2Address({
37791
37721
  from: SAFE_V141.proxyFactory,
37792
37722
  salt,
@@ -37795,20 +37725,13 @@ function computeSafeProxyAddress(params) {
37795
37725
  }
37796
37726
  function computeKernelBoundSalt(params) {
37797
37727
  const { saltNonce, deployer, permissionSigner, manager, feePolicy } = params;
37798
- return BigInt(
37799
- keccak256(
37800
- encodeAbiParameters(
37801
- [
37802
- { type: "uint256" },
37803
- { type: "address" },
37804
- { type: "address" },
37805
- { type: "address" },
37806
- { type: "address" }
37807
- ],
37808
- [saltNonce, deployer, permissionSigner, manager, feePolicy]
37809
- )
37810
- )
37811
- );
37728
+ return BigInt(keccak256(encodeAbiParameters([
37729
+ { type: "uint256" },
37730
+ { type: "address" },
37731
+ { type: "address" },
37732
+ { type: "address" },
37733
+ { type: "address" }
37734
+ ], [saltNonce, deployer, permissionSigner, manager, feePolicy])));
37812
37735
  }
37813
37736
  function computeSailSmaAddress(params) {
37814
37737
  const boundSalt = computeKernelBoundSalt(params);
@@ -37855,7 +37778,7 @@ function buildSetManagerExecTransaction(params) {
37855
37778
  return { to: params.safe, data };
37856
37779
  }
37857
37780
 
37858
- // ../sdk/src/discovery.ts
37781
+ // ../sdk/dist/discovery.js
37859
37782
  var SAFE_TX_SERVICE_SLUGS = {
37860
37783
  1: "eth",
37861
37784
  100: "gno",
@@ -37883,7 +37806,7 @@ async function discoverSafesForOwner(owner2, chainId) {
37883
37806
  return data.safes ?? [];
37884
37807
  }
37885
37808
 
37886
- // ../sdk/src/fees.ts
37809
+ // ../sdk/dist/fees.js
37887
37810
  function min(a, b) {
37888
37811
  return a < b ? a : b;
37889
37812
  }
@@ -37919,7 +37842,7 @@ async function estimatePermissionFee(publicClient, governance, permission) {
37919
37842
  }
37920
37843
  }
37921
37844
 
37922
- // ../sdk/src/intelligence.ts
37845
+ // ../sdk/dist/intelligence.js
37923
37846
  var SAIL_INTELLIGENCE_BASE_URL = "https://api.sail.money";
37924
37847
  var SAIL_INTELLIGENCE_DOCS_URL = "https://api.sail.money/docs";
37925
37848