@fased/fased 0.1.68 → 0.1.69

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 (103) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +20 -22
  3. package/config/sat-runtime.env +6 -2
  4. package/config/signer-protocol-v2.json +6 -0
  5. package/dist/agents/tools/wallet-action-tool.js +2 -0
  6. package/dist/agents/tools/wallet-tool.js +5 -3
  7. package/dist/brand.js +1 -1
  8. package/dist/build-info.json +3 -3
  9. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  10. package/dist/cli/program/register.wallet.js +88 -5
  11. package/dist/commands/wallet.js +842 -57
  12. package/dist/config/sat-runtime-ids.js +6 -1
  13. package/dist/control-ui/assets/{app-DyPTS0oM.js → app-BLFLoFPk.js} +8 -8
  14. package/dist/control-ui/assets/{federation-DgA9e-Pn.js → federation-SGMAnM_8.js} +2 -2
  15. package/dist/control-ui/assets/{index-Cu13yYHr.js → index-S88kp5ZQ.js} +3 -3
  16. package/dist/control-ui/assets/{mining-Dg-3ll0F.js → mining-ClI8RW4u.js} +2 -2
  17. package/dist/control-ui/assets/{wallet-ByKBcYhm.js → wallet-CRIhDQbW.js} +201 -116
  18. package/dist/control-ui/index.html +1 -1
  19. package/dist/control-ui/version.json +1 -1
  20. package/dist/gateway/server-http.js +46 -9
  21. package/dist/mining/mainnet-sync.js +67 -5
  22. package/dist/operator/operator-readiness.js +1 -1
  23. package/dist/plugin-sdk/{audio-preflight-_FVQjR1r.js → audio-preflight-CS7Q_7-R.js} +2 -2
  24. package/dist/plugin-sdk/channel-plugin-common.d.ts +2 -2
  25. package/dist/plugin-sdk/{chunk-items-LH4uKSnh.js → chunk-items-BLBZNORg.js} +1 -1
  26. package/dist/plugin-sdk/command-status.js +2 -2
  27. package/dist/plugin-sdk/{config-schema-DjU_uD-6.js → config-schema-BiBOUW89.js} +255 -47
  28. package/dist/plugin-sdk/device-pair.d.ts +1 -1
  29. package/dist/plugin-sdk/discord.d.ts +4 -4
  30. package/dist/plugin-sdk/index.d.ts +16 -16
  31. package/dist/plugin-sdk/index.js +2 -2
  32. package/dist/plugin-sdk/{monitor-DUMMbG4h.js → monitor-WXdn4mR-.js} +4 -4
  33. package/dist/plugin-sdk/{monitor-DXIM16Hj.js → monitor-xzVAPbg2.js} +6 -6
  34. package/dist/plugin-sdk/{openresponses-http-C8lKwta1.js → openresponses-http-DnI1LFgq.js} +2 -2
  35. package/dist/plugin-sdk/{pairing-message-mKO92L-M.d.ts → pairing-message-CiTcdD6m.d.ts} +1 -1
  36. package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +1 -1
  37. package/dist/plugin-sdk/{pw-ai-DJ_gTc4M.js → pw-ai-DZYLDC-S.js} +1 -1
  38. package/dist/plugin-sdk/{runtime-dependency-nup8niQL.js → runtime-dependency-DczkvPxn.js} +9 -9
  39. package/dist/plugin-sdk/sat-runtime.d.ts +89 -10
  40. package/dist/plugin-sdk/sat-runtime.js +2 -2
  41. package/dist/plugin-sdk/{slack-B-nOOLM0.js → slack-CkIRVDUK.js} +4 -4
  42. package/dist/plugin-sdk/slack.d.ts +4 -4
  43. package/dist/plugin-sdk/{sticker-cache-BLiId8Em.js → sticker-cache-Dpap5ce_.js} +2 -2
  44. package/dist/plugin-sdk/{telegram-actions-1X9A32Dn.js → telegram-actions-Cewdga8H.js} +3 -3
  45. package/dist/plugin-sdk/telegram.d.ts +4 -4
  46. package/dist/plugin-sdk/{tmp-fased-dir-BkpWlGUe.d.ts → tmp-fased-dir-BSEHc8MQ.d.ts} +2 -2
  47. package/dist/plugin-sdk/{types-DtCOO_hW.d.ts → types-BakzIzGN.d.ts} +1 -1
  48. package/dist/plugin-sdk/{types-B-zL9gSv.d.ts → types-CzF0YQqK.d.ts} +2 -2
  49. package/dist/plugin-sdk/{web-BvjNyYBz.js → web-DGWi7i3B.js} +2 -2
  50. package/dist/plugin-sdk/whatsapp.d.ts +9 -9
  51. package/dist/plugin-sdk/{zod-schema.providers-core-BCDlgtls.d.ts → zod-schema.providers-core-CIzCjXH9.d.ts} +63 -63
  52. package/dist/wallet/local-socket-signer-lifecycle.js +79 -3
  53. package/dist/wallet/local-socket-signer-protocol.js +70 -10
  54. package/dist/wallet/mining-wallet-retirement.js +256 -0
  55. package/dist/wallet/providers/local-socket-signer-adapter.js +2 -0
  56. package/dist/wallet/signer-protocol-v2.generated.js +6 -0
  57. package/dist/wallet/wallet-agent-selection.js +6 -10
  58. package/dist/wallet/wallet-provider-registry.js +70 -29
  59. package/dist/wallet/wallet-send-approvals.js +6 -2
  60. package/dist/wallet/wallet-status.js +56 -1
  61. package/dist/wizard/onboarding.js +32 -30
  62. package/dist/wizard/onboarding.wallet.js +10 -1
  63. package/extensions/acpx/package.json +1 -1
  64. package/extensions/bluebubbles/package.json +1 -1
  65. package/extensions/copilot-proxy/package.json +1 -1
  66. package/extensions/diagnostics-otel/package.json +1 -1
  67. package/extensions/fased-federation/package.json +1 -1
  68. package/extensions/google-gemini-cli-auth/package.json +1 -1
  69. package/extensions/imessage/package.json +1 -1
  70. package/extensions/irc/package.json +1 -1
  71. package/extensions/line/package.json +1 -1
  72. package/extensions/llm-task/package.json +1 -1
  73. package/extensions/lobster/package.json +1 -1
  74. package/extensions/matrix/CHANGELOG.md +6 -0
  75. package/extensions/matrix/package.json +1 -1
  76. package/extensions/mattermost/package.json +1 -1
  77. package/extensions/memory-core/package.json +2 -2
  78. package/extensions/memory-lancedb/package.json +1 -1
  79. package/extensions/minimax-portal-auth/package.json +1 -1
  80. package/extensions/msteams/CHANGELOG.md +6 -0
  81. package/extensions/msteams/package.json +1 -1
  82. package/extensions/nextcloud-talk/package.json +1 -1
  83. package/extensions/nostr/CHANGELOG.md +6 -0
  84. package/extensions/nostr/package.json +1 -1
  85. package/extensions/open-prose/package.json +1 -1
  86. package/extensions/sat-mining/package.json +1 -1
  87. package/extensions/signal/package.json +1 -1
  88. package/extensions/synology-chat/package.json +1 -1
  89. package/extensions/tlon/package.json +1 -1
  90. package/extensions/twitch/CHANGELOG.md +6 -0
  91. package/extensions/twitch/package.json +1 -1
  92. package/extensions/voice-call/CHANGELOG.md +6 -0
  93. package/extensions/voice-call/package.json +1 -1
  94. package/extensions/zalo/CHANGELOG.md +6 -0
  95. package/extensions/zalo/package.json +1 -1
  96. package/extensions/zalouser/CHANGELOG.md +6 -0
  97. package/extensions/zalouser/package.json +1 -1
  98. package/install.sh +276 -103
  99. package/package.json +4 -3
  100. package/scripts/install-fased-signerd.sh +4 -8
  101. package/scripts/install-runtime-profile.sh +27 -0
  102. package/scripts/start-managed.sh +13 -1
  103. package/scripts/fased-signer-wallet-import-hosting.sh +0 -78
@@ -6,7 +6,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
6
6
  <path d="M12 17h.01" />
7
7
  </svg>
8
8
  </span>
9
- `}function m(e){return e?.policy?.directSigning?{label:`Automation on`,detail:`This selected wallet can execute approved typed background actions when signer policy and caps allow it.`,operatorDetail:`These caps belong to the selected wallet. They are not SAT mining cycle limits, and they do not override signer or role restrictions.`}:{label:`Automation off`,detail:`This selected wallet is manual-first. Reviewed Wallet UI sends can still be approved, but background actions cannot execute.`,operatorDetail:`These caps belong to the selected wallet. They are not SAT mining cycle limits, and they do not override signer or role restrictions.`}}function h(e){return String(e.miningProfile?.walletId||e.miningStatus?.walletId||e.miningReadiness?.selectedWalletId||``).trim()||null}function g(e){return typeof e==`string`&&e.trim().length>0}function _(e){return e.id.startsWith(`solana-`)||e.name.toLowerCase().startsWith(`solana `)||e.addresses?.solana?`solana`:null}function ee(e){return!e||_(e),[`solana`]}function v(e,t){let n=String(t??``).trim();if(n)return e.find(e=>e.id===n)}function y(e){if(!e)return`No grant`;let t=Array.isArray(e.actions)?e.actions.map(e=>String(e)).filter(Boolean):[],n=Array.isArray(e.chains)?e.chains.map(e=>String(e)).filter(Boolean):[],r=Array.isArray(e.walletIds)?e.walletIds.map(e=>String(e)).filter(Boolean):[],i=[e.autonomous===!0?`autonomous`:null,e.cron===!0?`cron`:null].filter(Boolean).join(`, `);return[t.length>0?t.join(`, `):`actions unspecified`,r.length>0?`wallets ${r.join(`, `)}`:`wallet unspecified`,n.length>0?n.join(`, `):`chain unspecified`,i].filter(Boolean).join(` · `)}function b(e){return e?[e.actions?.length?e.actions.join(`, `):`actions unspecified`,e.chains?.length?e.chains.join(`, `):`chain unspecified`,[e.autonomous?`autonomous requested`:null,e.cron?`cron requested`:null].filter(Boolean).join(`, `)].filter(Boolean).join(` · `):`No marketplace wallet request recorded`}function x(e){let t=(typeof e?.metadata?.purpose==`string`?e.metadata.purpose:typeof e?.metadata?.role==`string`?e.metadata.role:``).toLowerCase();if(t===`agent`)return`agent`;if(t===`vault`)return`vault`;if(t===`mining`)return`mining`}function S(e,t){if(!e)return!1;let n=x(e);return n&&n!==`agent`?!1:e.id===String(t??``).trim()||n===`agent`}function C(e){let t=e.status?.approvalAuth?.mode??`none`,n=e.status?.approvalAuth?.ready??!1,r=String(e.defaultWalletId??``).trim()||null,i=v(e.namedWallets,r),a=e.namedWallets.filter(e=>S(e,r)),o=i&&S(i,r)?i:void 0,s=String(e.miningProfile?.walletId||e.miningStatus?.walletId||e.miningReadiness?.selectedWalletId||``).trim()||null,c=v(e.namedWallets,s),l=String(e.federationBond?.walletId??``).trim()||null,u=v(e.namedWallets,l);return{admin:e.status?t===`webauthn`&&n?{title:`Control UI account passkey`,summary:`Optional · enabled`,detail:`Adds account-level approval without changing Agent or Mining readiness.`,tone:`success`}:t===`webauthn`?{title:`Control UI account passkey`,summary:`Optional · setup incomplete`,detail:`Finish or disable account passkey mode. Wallet role readiness is separate.`,tone:`warn`}:{title:`Control UI account passkey`,summary:`Optional · off`,detail:`The signed-in Control UI session is active. Add an account passkey only if you want the extra approval step.`,tone:`neutral`}:{title:`Control UI account passkey`,summary:`Optional status unavailable`,detail:`Refresh Account Security before changing account-level approval.`,tone:`neutral`},agent:o?{title:`Agent wallets`,summary:a.length>1?`${o.name} + ${a.length-1}`:o.name,detail:a.length>1?`Multiple Agent wallets can be selected by explicit @wallet:<id> handles. If no @wallet:<id> is specified, approved wallet actions use the primary Agent wallet fallback.`:`If no @wallet:<id> is specified, approved wallet actions use this default Agent wallet.`,tone:`success`,walletId:o.id}:a.length>0?{title:`Agent wallets`,summary:`${a.length} set · no primary`,detail:`Agent wallets can be selected by explicit @wallet:<id> handles. Set one default Agent wallet if approved actions should have a fallback.`,tone:`warn`,walletId:a[0]?.id}:r?{title:`Agent wallets`,summary:r,detail:`An Agent wallet is configured but not present in this wallet list right now. Refresh or repair the registry before paid Fased Network or skill wallet work.`,tone:`warn`,walletId:r}:{title:`Agent wallets`,summary:`Not set`,detail:`Mark at least one Agent wallet before paid Fased Network tasks, payment evidence, or skill wallet actions use a clear operator wallet.`,tone:`warn`},mining:c?{title:`SAT Mining`,summary:c.name,detail:`SAT mining uses the singleton @wallet:mining wallet for capital, cycle history, and restart recovery. Keep it separate from Agent wallets.`,tone:`success`,walletId:c.id}:s?{title:`SAT Mining`,summary:s,detail:`SAT runtime points at @wallet:mining, but that wallet is not visible in the current wallet list. Refresh mining and wallet state before SAT mining.`,tone:`warn`,walletId:s}:{title:`SAT Mining`,summary:`Not configured`,detail:`Create or import @wallet:mining in onboarding or CLI if you want SAT participation. Mining is optional and should not be assumed by Fased Network join.`,tone:`neutral`},bond:u?{title:`Fased Network Bond`,summary:u.name,detail:e.federationBond?.status===`active`?`This wallet currently holds the active SAT bond for Fased Network. Tier ${e.federationBond?.tier??`none`} · quota ${e.federationBond?.quotaBand??`standard`}.`:`This wallet is configured for Fased Network bond. Use the Fased Network page to open, increase, unlock, or re-prove the SAT bond.`,tone:e.federationBond?.status===`active`?`success`:e.federationBond?.status===`unlocking`?`warn`:`neutral`,walletId:u.id}:l?{title:`Fased Network Bond`,summary:l,detail:`A Fased Network bond Vault is configured but not visible in the current wallet list. Refresh wallet state or repair the local wallet registry before changing bond posture.`,tone:`warn`,walletId:l}:{title:`Fased Network Bond`,summary:`Not set`,detail:`Select a Vault wallet on Fased Network before longer-lived bond capital if you want bonded network access.`,tone:`neutral`},sharedWalletWarning:c&&a.some(e=>e.id===c.id)?`Agent and Mining wallets must stay separate. This singleton mining wallet is also marked Agent; use a dedicated Agent wallet and clear the Agent default before wallet work.`:null,miningWalletId:s,bondWalletId:l}}function w(e,t){return[]}function te(r,i,a){if(r!==String(i?.walletId??``).trim())return t;let o=i?.status??`none`,s=o===`active`?`bond-active`:o===`unlocking`?`bond-unlocking`:`bond`,c=o===`active`?`Fased Network bond active`:o===`unlocking`?`Fased Network bond unlocking`:`Fased Network bond wallet`;return e`
9
+ `}function m(e){return e?.policy?.directSigning?{label:`Automation on`,detail:`This selected wallet can execute approved typed background actions when signer policy and caps allow it.`,operatorDetail:`These caps belong to the selected wallet. They are not SAT mining cycle limits, and they do not override signer or role restrictions.`}:{label:`Automation off`,detail:`This selected wallet is manual-first. Reviewed Wallet UI sends can still be approved, but background actions cannot execute.`,operatorDetail:`These caps belong to the selected wallet. They are not SAT mining cycle limits, and they do not override signer or role restrictions.`}}function h(e){return String(e.miningProfile?.walletId||e.miningStatus?.walletId||e.miningReadiness?.selectedWalletId||``).trim()||null}function g(e){return typeof e==`string`&&e.trim().length>0}function _(e){return e.id.startsWith(`solana-`)||e.name.toLowerCase().startsWith(`solana `)||e.addresses?.solana?`solana`:null}function ee(e){return!e||_(e),[`solana`]}function v(e,t){let n=String(t??``).trim();if(n)return e.find(e=>e.id===n)}function y(e){if(!e)return`No grant`;let t=Array.isArray(e.actions)?e.actions.map(e=>String(e)).filter(Boolean):[],n=Array.isArray(e.chains)?e.chains.map(e=>String(e)).filter(Boolean):[],r=Array.isArray(e.walletIds)?e.walletIds.map(e=>String(e)).filter(Boolean):[],i=[e.autonomous===!0?`autonomous`:null,e.cron===!0?`cron`:null].filter(Boolean).join(`, `);return[t.length>0?t.join(`, `):`actions unspecified`,r.length===1?`skill override ${r[0]}`:r.length>1?`wallet allowlist ${r.join(`, `)}`:`wallet unspecified`,n.length>0?n.join(`, `):`chain unspecified`,i].filter(Boolean).join(` · `)}function b(e){return e?[e.actions?.length?e.actions.join(`, `):`actions unspecified`,e.chains?.length?e.chains.join(`, `):`chain unspecified`,[e.autonomous?`autonomous requested`:null,e.cron?`cron requested`:null].filter(Boolean).join(`, `)].filter(Boolean).join(` · `):`No marketplace wallet request recorded`}function x(e){let t=(typeof e?.metadata?.purpose==`string`?e.metadata.purpose:typeof e?.metadata?.role==`string`?e.metadata.role:``).toLowerCase();if(t===`agent`)return`agent`;if(t===`vault`)return`vault`;if(t===`mining`)return`mining`}function S(e,t){if(!e)return!1;let n=x(e);return n&&n!==`agent`?!1:e.id===String(t??``).trim()||n===`agent`}function C(e){let t=e.status?.approvalAuth?.mode??`none`,n=e.status?.approvalAuth?.ready??!1,r=String(e.defaultWalletId??``).trim()||null,i=v(e.namedWallets,r),a=e.namedWallets.filter(e=>S(e,r)),o=i&&S(i,r)?i:void 0,s=String(e.miningProfile?.walletId||e.miningStatus?.walletId||e.miningReadiness?.selectedWalletId||``).trim()||null,c=v(e.namedWallets,s),l=String(e.federationBond?.walletId??``).trim()||null,u=v(e.namedWallets,l);return{admin:e.status?t===`webauthn`&&n?{title:`Control UI account passkey`,summary:`Optional · enabled`,detail:`Adds account-level approval without changing Agent or Mining readiness.`,tone:`success`}:t===`webauthn`?{title:`Control UI account passkey`,summary:`Optional · setup incomplete`,detail:`Finish or disable account passkey mode. Wallet role readiness is separate.`,tone:`warn`}:{title:`Control UI account passkey`,summary:`Optional · off`,detail:`The signed-in Control UI session is active. Add an account passkey only if you want the extra approval step.`,tone:`neutral`}:{title:`Control UI account passkey`,summary:`Optional status unavailable`,detail:`Refresh Account Security before changing account-level approval.`,tone:`neutral`},agent:o?{title:`Agent wallets`,summary:a.length>1?`${o.name} + ${a.length-1}`:o.name,detail:a.length>1?`Multiple Agent wallets can be selected explicitly. Otherwise routing checks a skill override, then the Agent assignment, then this optional Default Agent wallet fallback.`:`If no explicit, skill, or Agent assignment exists, approved wallet actions use this optional fallback.`,tone:`success`,walletId:o.id}:a.length>0?{title:`Agent wallets`,summary:`${a.length} set · no fallback`,detail:`Agent wallets can be selected by explicit @wallet:<id> handles. Set one default Agent wallet if approved actions should have a fallback.`,tone:`warn`,walletId:a[0]?.id}:r?{title:`Agent wallets`,summary:r,detail:`An Agent wallet is configured but not present in this wallet list right now. Refresh or repair the registry before paid Fased Network or skill wallet work.`,tone:`warn`,walletId:r}:{title:`Agent wallets`,summary:`Not set`,detail:`Mark at least one Agent wallet before paid Fased Network tasks, payment evidence, or skill wallet actions use a clear operator wallet.`,tone:`warn`},mining:c?{title:`SAT Mining`,summary:c.name,detail:`SAT mining uses the singleton @wallet:mining wallet for capital, cycle history, and restart recovery. Keep it separate from Agent wallets.`,tone:`success`,walletId:c.id}:s?{title:`SAT Mining`,summary:s,detail:`SAT runtime points at @wallet:mining, but that wallet is not visible in the current wallet list. Refresh mining and wallet state before SAT mining.`,tone:`warn`,walletId:s}:{title:`SAT Mining`,summary:`Not configured`,detail:`Create or import @wallet:mining in onboarding or CLI if you want SAT participation. Mining is optional and should not be assumed by Fased Network join.`,tone:`neutral`},bond:u?{title:`Fased Network Bond`,summary:u.name,detail:e.federationBond?.status===`active`?`This wallet currently holds the active SAT bond for Fased Network. Tier ${e.federationBond?.tier??`none`} · quota ${e.federationBond?.quotaBand??`standard`}.`:`This wallet is configured for Fased Network bond. Use the Fased Network page to open, increase, unlock, or re-prove the SAT bond.`,tone:e.federationBond?.status===`active`?`success`:e.federationBond?.status===`unlocking`?`warn`:`neutral`,walletId:u.id}:l?{title:`Fased Network Bond`,summary:l,detail:`A Fased Network bond Vault is configured but not visible in the current wallet list. Refresh wallet state or repair the local wallet registry before changing bond posture.`,tone:`warn`,walletId:l}:{title:`Fased Network Bond`,summary:`Not set`,detail:`Select a Vault wallet on Fased Network before longer-lived bond capital if you want bonded network access.`,tone:`neutral`},sharedWalletWarning:c&&a.some(e=>e.id===c.id)?`Agent and Mining wallets must stay separate. This singleton mining wallet is also marked Agent; use a dedicated Agent wallet and clear the Agent default before wallet work.`:null,miningWalletId:s,bondWalletId:l}}function te(e,t){return[]}function ne(r,i,a){if(r!==String(i?.walletId??``).trim())return t;let o=i?.status??`none`,s=o===`active`?`bond-active`:o===`unlocking`?`bond-unlocking`:`bond`,c=o===`active`?`Fased Network bond active`:o===`unlocking`?`Fased Network bond unlocking`:`Fased Network bond wallet`;return e`
10
10
  <button
11
11
  type="button"
12
12
  class="wallet-status-icon wallet-status-icon--button"
@@ -17,7 +17,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
17
17
  >
18
18
  ${n.shield}
19
19
  </button>
20
- `}function ne(r){let{role:i}=r;if(i===`mining`)return t;if(i===`vault`)return e`
20
+ `}function re(r){let{role:i}=r;if(i===`mining`)return t;if(i===`vault`)return e`
21
21
  <span
22
22
  class="wallet-status-icon"
23
23
  data-state="vault-manual"
@@ -35,12 +35,12 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
35
35
  >
36
36
  ${a?n.zap:n.hand}
37
37
  </span>
38
- `}function T(t,n){return e`
38
+ `}function w(t,n){return e`
39
39
  <span class="wallet-lock-chip" data-state=${t.toLowerCase()===`enabled`?`unlocked`:`locked`} title=${n}>
40
40
  <span class="wallet-lock-chip__dot"></span>
41
41
  ${t}
42
42
  </span>
43
- `}function re(r){return r?.automation?.satSweep?.enabled?e`
43
+ `}function ie(r){return r?.automation?.satSweep?.enabled?e`
44
44
  <span
45
45
  class="wallet-status-icon"
46
46
  data-role="sweep-on"
@@ -48,18 +48,18 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
48
48
  >
49
49
  ${n.arrowDown}
50
50
  </span>
51
- `:t}function ie(r){return r.walletId===r.props.walletDetailsWalletId?(r.role===`agent`?[r.props.policyCapsEnabled?{dataRole:`policy-on`,title:`Caps active`,icon:n.shield}:null,r.props.recurringTransferEnabled?{dataRole:`policy-on`,title:`Recurring send active`,icon:n.send}:null,r.props.policySkillsEnabled?{dataRole:`policy-on`,title:`Skill wallet access gate is active. Individual skills still need explicit Wallet > Skill Grants.`,icon:n.spark}:null]:r.role===`vault`?[r.props.policyCapsEnabled?{dataRole:`policy-on`,title:`Vault caps active`,icon:n.shield}:null]:[]).filter(e=>e!==null).map(t=>e`
51
+ `:t}function ae(r){return r.walletId===r.props.walletDetailsWalletId?(r.role===`agent`?[r.props.policyCapsEnabled?{dataRole:`policy-on`,title:`Caps active`,icon:n.shield}:null,r.props.recurringTransferEnabled?{dataRole:`policy-on`,title:`Recurring send active`,icon:n.send}:null,r.props.policySkillsEnabled?{dataRole:`policy-on`,title:`Skill wallet access gate is active. Individual skills still need explicit Wallet > Skill Grants.`,icon:n.spark}:null]:r.role===`vault`?[r.props.policyCapsEnabled?{dataRole:`policy-on`,title:`Vault caps active`,icon:n.shield}:null]:[]).filter(e=>e!==null).map(t=>e`
52
52
  <span class="wallet-status-icon" data-role=${t.dataRole} title=${t.title}>
53
53
  ${t.icon}
54
54
  </span>
55
- `):t}function E(e,t){let n=e===String(t.defaultWalletId??``).trim(),r=!n&&e===h(t),i=x(v(t.namedWallets,e)),a=!!(i&&i!==`agent`);return{label:n?`Clear`:`Primary`,disabled:t.settingsBusy||r||a,title:r?`Agent and Mining wallets must stay separate. Create a dedicated Agent wallet instead.`:a?`Wallet purpose is permanent. Create a new Agent wallet instead of changing this wallet.`:n?`Clear this wallet as the primary Agent wallet. Existing Agent roles stay unchanged.`:`Make this wallet the primary Agent fallback. Other Agent wallets can still be selected by @wallet handle.`}}function D(e,t){if(e===h(t))return`mining`;let n=v(t.namedWallets,e);return x(n)===`mining`?`mining`:S(n,t.defaultWalletId)?`agent`:`vault`}function O(e){switch(e){case`mining`:return 0;case`vault`:return 1;case`agent`:return 2}}function k(e,t){let n=String(t.defaultWalletId??``).trim();return e.toSorted((e,r)=>{let i=D(e.id,t),a=D(r.id,t),o=O(i)-O(a);if(o!==0)return o;if(i===`agent`&&a===`agent`){if(e.id===n&&r.id!==n)return-1;if(r.id===n&&e.id!==n)return 1}return e.name.localeCompare(r.name)||e.id.localeCompare(r.id)})}function ae(e){let t=String(e??``).trim();if(!t)return`0`;try{let e=BigInt(t),n=100000000000n,r=e/n,i=(e%n).toString().padStart(11,`0`).replace(/0+$/,``).slice(0,6);return i?`${r}.${i}`:`${r}`}catch{return`0`}}function oe(e){let t=String(e??``).trim();if(!t||!/^\d+(\.\d{0,11})?$/.test(t))return`0`;let[n,r=``]=t.split(`.`);return(BigInt(n||`0`)*100000000000n+BigInt((r+`00000000000`).slice(0,11)||`0`)).toString()}function A(e,t,n={}){try{let t=BigInt(e),r=10n**9n,i=t/r,a=(t%r).toString().padStart(9,`0`).replace(/0+$/,``),o=a?`${i.toString()}.${a}`:i.toString();return n.hideUnit?o:`${o} SOL`}catch{return`—`}}function j(e,t=`n/a`){return typeof e==`string`?e.trim()||t:typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`?String(e):t}function M(e){return j(e,`n/a`).toLowerCase()===`solana`?`SOL`:j(e,`n/a`)}function N(e){if(typeof e!=`string`&&typeof e!=`number`&&typeof e!=`bigint`)return null;let t=String(e).trim().toLowerCase();return t===`solana`||t===`sol`?`solana`:null}function P(e,t){if(typeof e!=`string`&&typeof e!=`number`&&typeof e!=`bigint`)return`n/a`;let n=String(e).trim();if(!n)return`n/a`;let r=N(t);if(!r)return n;try{return A(n,r)}catch{return n}}function F(e,t){let n=String(e??``).trim();if(!n||typeof t!=`number`||!Number.isFinite(t)||t<0)return null;try{let e=10n**BigInt(t),r=BigInt(n),i=r/e,a=(r%e).toString().padStart(t,`0`).replace(/0+$/,``);if(!a)return i.toString();let o=a.slice(0,6).replace(/0+$/,``);return o?`${i.toString()}.${o}`:i.toString()}catch{return null}}function I(e,t){return typeof e[t]==`string`?String(e[t]).trim():``}function L(e,t){let n=e[t];if(typeof n==`number`&&Number.isFinite(n))return n;if(typeof n==`string`&&n.trim()){let e=Number(n);return Number.isFinite(e)?e:null}return null}function R(e){let t=e.trim();if(!/^[0-9]+(\.[0-9]+)?$/.test(t))return t;let n=Number(t);return Number.isFinite(n)?n>0&&n<1e-6?`<0.000001`:new Intl.NumberFormat(`en-US`,{minimumFractionDigits:0,maximumFractionDigits:Math.abs(n)>=1?2:6}).format(n):t}function z(e){let t=N(e.details.chain),n=I(e.details,`program`);if(t===`solana`&&n){let t=Array.isArray(e.balances?.assets?.solana)?e.balances.assets.solana.find(e=>!e.isNative&&e.program===n):void 0,r=I(e.details,`assetSymbol`)||t?.symbol||`SPL`,i=Ee({isNative:!1,program:n,symbol:r,name:I(e.details,`assetName`)||t?.name||``})?`SPL`:r,a=I(e.details,`amountDisplay`);if(a)return`${R(a)} ${i}`;let o=L(e.details,`assetDecimals`)??t?.decimals,s=F(j(e.details.amount,``),o);if(s)return`${R(s)} ${i}`;let c=j(e.details.amount,``);return c?`${c} raw ${i}`:`n/a`}return P(e.details.amount,t)}function B(e){return{name:String(e.payload.assetName??``).trim()||null,symbol:String(e.payload.assetSymbol??``).trim()||null,program:String(e.payload.program??``).trim()||null}}function se(e){if(e.request.payload.actionKind===`solana_swap`){let t=String(e.request.payload.inputSymbol??``).trim()||`SOL`,n=String(e.request.payload.outputSymbol??``).trim()||(e.request.payload.outputMint?Te(e.request.payload.outputMint):`token`),r=typeof e.request.payload.inputDecimals==`number`&&Number.isFinite(e.request.payload.inputDecimals)?e.request.payload.inputDecimals:Number(c),i=String(e.request.payload.amountDisplay??``).trim()||F(e.request.payload.amount,r)||``;return{amountValueText:i?`${q(i)} ${t}`:P(e.request.payload.amount,e.request.payload.chain),assetPrimaryText:`${t} -> ${n}`,assetSecondaryText:e.request.payload.routeLabel?`Jupiter · ${e.request.payload.routeLabel}`:`Jupiter swap`,name:String(e.request.payload.outputName??``).trim()||null,symbol:n,program:e.request.payload.outputMint??null,usesFallbackIdentity:!1}}let t=B(e.request),n=t.program,r=n&&Array.isArray(e.balances?.assets?.solana)?e.balances.assets.solana.find(e=>e.program===n):void 0,i=t.symbol??r?.symbol??null,a=t.name??r?.name??null,o=Ee({isNative:!1,program:n??``,symbol:i??``,name:a??``}),s=String(e.request.payload.amountDisplay??``).trim()||F(e.request.payload.amount,r?.decimals)||``;return s?{amountValueText:q(s),assetPrimaryText:o?i:a??i??n,assetSecondaryText:!o&&i&&a&&i!==a?i:null,name:a,symbol:i,program:n,usesFallbackIdentity:o}:{amountValueText:P(e.request.payload.amount,e.request.payload.chain),assetPrimaryText:o?i:a??i??n,assetSecondaryText:!o&&i&&a&&i!==a?i:null,name:a,symbol:i,program:n,usesFallbackIdentity:o}}function ce(e){let t=String(e.request.payload.walletId??``).trim(),n=String(e.request.payload.walletName??``).trim(),r=e.request.payload.chain,i=v(e.namedWallets,t)??(n?e.namedWallets.find(e=>e.name.trim().toLowerCase()===n.toLowerCase()):void 0),a=i&&K(i,r)||null;return{fromLabel:i?.name?.trim()||n||t||null,fromAddress:a,toAddress:String(e.request.payload.to??``).trim()||null}}function le(n){let r=n.request.approvalDiff??n.request.simulation?.diff;if(!r)return t;let i=r.fromWalletName||n.endpoints.fromLabel||(r.fromWalletId?`@wallet:${r.fromWalletId}`:`wallet`),a=r.amountDisplay||n.display.amountValueText||r.amount||`amount`,o=r.token||n.display.assetPrimaryText||r.mint||r.chain,s=r.to||n.endpoints.toAddress||`destination`,c=[r.source,r.skillId?`skill ${r.skillId}`:``,r.taskId?`task ${r.taskId}`:``].filter(Boolean).join(` · `);return e`
55
+ `):t}function T(e,t){let n=e===String(t.defaultWalletId??``).trim(),r=!n&&e===h(t),i=x(v(t.namedWallets,e)),a=!!(i&&i!==`agent`);return{label:n?`Clear fallback`:`Set fallback`,disabled:t.settingsBusy||r||a,title:r?`Agent and Mining wallets must stay separate. Create a dedicated Agent wallet instead.`:a?`Wallet purpose is permanent. Create a new Agent wallet instead of changing this wallet.`:n?`Clear this optional Default Agent wallet fallback. Existing Agent roles and assignments stay unchanged.`:`Use this as the optional Default Agent wallet fallback after explicit, skill, and Agent assignments.`}}function E(e,t){if(e===h(t))return`mining`;let n=v(t.namedWallets,e);return x(n)===`mining`?`mining`:S(n,t.defaultWalletId)?`agent`:`vault`}function D(e){switch(e){case`mining`:return 0;case`vault`:return 1;case`agent`:return 2}}function O(e,t){let n=String(t.defaultWalletId??``).trim();return e.toSorted((e,r)=>{let i=E(e.id,t),a=E(r.id,t),o=D(i)-D(a);if(o!==0)return o;if(i===`agent`&&a===`agent`){if(e.id===n&&r.id!==n)return-1;if(r.id===n&&e.id!==n)return 1}return e.name.localeCompare(r.name)||e.id.localeCompare(r.id)})}function k(e){let t=String(e??``).trim();if(!t)return`0`;try{let e=BigInt(t),n=100000000000n,r=e/n,i=(e%n).toString().padStart(11,`0`).replace(/0+$/,``).slice(0,6);return i?`${r}.${i}`:`${r}`}catch{return`0`}}function A(e){let t=String(e??``).trim();if(!t||!/^\d+(\.\d{0,11})?$/.test(t))return`0`;let[n,r=``]=t.split(`.`);return(BigInt(n||`0`)*100000000000n+BigInt((r+`00000000000`).slice(0,11)||`0`)).toString()}function j(e,t,n={}){try{let t=BigInt(e),r=10n**9n,i=t/r,a=(t%r).toString().padStart(9,`0`).replace(/0+$/,``),o=a?`${i.toString()}.${a}`:i.toString();return n.hideUnit?o:`${o} SOL`}catch{return`—`}}function M(e,t=`n/a`){return typeof e==`string`?e.trim()||t:typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`?String(e):t}function oe(e){return M(e,`n/a`).toLowerCase()===`solana`?`SOL`:M(e,`n/a`)}function N(e){if(typeof e!=`string`&&typeof e!=`number`&&typeof e!=`bigint`)return null;let t=String(e).trim().toLowerCase();return t===`solana`||t===`sol`?`solana`:null}function P(e,t){if(typeof e!=`string`&&typeof e!=`number`&&typeof e!=`bigint`)return`n/a`;let n=String(e).trim();if(!n)return`n/a`;let r=N(t);if(!r)return n;try{return j(n,r)}catch{return n}}function F(e,t){let n=String(e??``).trim();if(!n||typeof t!=`number`||!Number.isFinite(t)||t<0)return null;try{let e=10n**BigInt(t),r=BigInt(n),i=r/e,a=(r%e).toString().padStart(t,`0`).replace(/0+$/,``);if(!a)return i.toString();let o=a.slice(0,6).replace(/0+$/,``);return o?`${i.toString()}.${o}`:i.toString()}catch{return null}}function I(e,t){return typeof e[t]==`string`?String(e[t]).trim():``}function L(e,t){let n=e[t];if(typeof n==`number`&&Number.isFinite(n))return n;if(typeof n==`string`&&n.trim()){let e=Number(n);return Number.isFinite(e)?e:null}return null}function R(e){let t=e.trim();if(!/^[0-9]+(\.[0-9]+)?$/.test(t))return t;let n=Number(t);return Number.isFinite(n)?n>0&&n<1e-6?`<0.000001`:new Intl.NumberFormat(`en-US`,{minimumFractionDigits:0,maximumFractionDigits:Math.abs(n)>=1?2:6}).format(n):t}function z(e){let t=N(e.details.chain),n=I(e.details,`program`);if(t===`solana`&&n){let t=Array.isArray(e.balances?.assets?.solana)?e.balances.assets.solana.find(e=>!e.isNative&&e.program===n):void 0,r=I(e.details,`assetSymbol`)||t?.symbol||`SPL`,i=Te({isNative:!1,program:n,symbol:r,name:I(e.details,`assetName`)||t?.name||``})?`SPL`:r,a=I(e.details,`amountDisplay`);if(a)return`${R(a)} ${i}`;let o=L(e.details,`assetDecimals`)??t?.decimals,s=F(M(e.details.amount,``),o);if(s)return`${R(s)} ${i}`;let c=M(e.details.amount,``);return c?`${c} raw ${i}`:`n/a`}return P(e.details.amount,t)}function B(e){return{name:String(e.payload.assetName??``).trim()||null,symbol:String(e.payload.assetSymbol??``).trim()||null,program:String(e.payload.program??``).trim()||null}}function V(e){if(e.request.payload.actionKind===`solana_swap`){let t=String(e.request.payload.inputSymbol??``).trim()||`SOL`,n=String(e.request.payload.outputSymbol??``).trim()||(e.request.payload.outputMint?we(e.request.payload.outputMint):`token`),r=typeof e.request.payload.inputDecimals==`number`&&Number.isFinite(e.request.payload.inputDecimals)?e.request.payload.inputDecimals:Number(c),i=String(e.request.payload.amountDisplay??``).trim()||F(e.request.payload.amount,r)||``;return{amountValueText:i?`${J(i)} ${t}`:P(e.request.payload.amount,e.request.payload.chain),assetPrimaryText:`${t} -> ${n}`,assetSecondaryText:e.request.payload.routeLabel?`Jupiter · ${e.request.payload.routeLabel}`:`Jupiter swap`,name:String(e.request.payload.outputName??``).trim()||null,symbol:n,program:e.request.payload.outputMint??null,usesFallbackIdentity:!1}}let t=B(e.request),n=t.program,r=n&&Array.isArray(e.balances?.assets?.solana)?e.balances.assets.solana.find(e=>e.program===n):void 0,i=t.symbol??r?.symbol??null,a=t.name??r?.name??null,o=Te({isNative:!1,program:n??``,symbol:i??``,name:a??``}),s=String(e.request.payload.amountDisplay??``).trim()||F(e.request.payload.amount,r?.decimals)||``;return s?{amountValueText:J(s),assetPrimaryText:o?i:a??i??n,assetSecondaryText:!o&&i&&a&&i!==a?i:null,name:a,symbol:i,program:n,usesFallbackIdentity:o}:{amountValueText:P(e.request.payload.amount,e.request.payload.chain),assetPrimaryText:o?i:a??i??n,assetSecondaryText:!o&&i&&a&&i!==a?i:null,name:a,symbol:i,program:n,usesFallbackIdentity:o}}function se(e){let t=String(e.request.payload.walletId??``).trim(),n=String(e.request.payload.walletName??``).trim(),r=e.request.payload.chain,i=v(e.namedWallets,t)??(n?e.namedWallets.find(e=>e.name.trim().toLowerCase()===n.toLowerCase()):void 0),a=i&&q(i,r)||null;return{fromLabel:i?.name?.trim()||n||t||null,fromAddress:a,toAddress:String(e.request.payload.to??``).trim()||null}}function ce(n){let r=n.request.approvalDiff??n.request.simulation?.diff;if(!r)return t;let i=r.fromWalletName||n.endpoints.fromLabel||(r.fromWalletId?`@wallet:${r.fromWalletId}`:`wallet`),a=r.amountDisplay||n.display.amountValueText||r.amount||`amount`,o=r.token||n.display.assetPrimaryText||r.mint||r.chain,s=r.to||n.endpoints.toAddress||`destination`,c=[r.source,r.skillId?`skill ${r.skillId}`:``,r.taskId?`task ${r.taskId}`:``].filter(Boolean).join(` · `);return e`
56
56
  <div class="wallet-approval-diff">
57
57
  <span>Spend <strong>${a}</strong> ${o?e`<span>${o}</span>`:t}</span>
58
58
  <span>from <strong>${i}</strong> <span class="muted">(${r.fromRole})</span></span>
59
- <span>to <span class="mono">${Y(s,8,6)}</span></span>
59
+ <span>to <span class="mono">${X(s,8,6)}</span></span>
60
60
  ${c?e`<span class="muted">triggered by ${c}</span>`:t}
61
61
  </div>
62
- `}function V(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:null}function H(e){if(typeof e==`string`)return e.trim()||null;if(typeof e==`number`&&Number.isFinite(e))return String(e);if(typeof e==`boolean`)return e?`yes`:`no`;if(Array.isArray(e)){let t=e.map(e=>H(e)).filter(Boolean);return t.length>0?t.join(`, `):null}return null}function ue(n){let r=V(n.payload.signerSemanticIntent),i=H(r?.type);if(!r||!i)return t;let a=[],o=(e,t)=>{let n=H(t);n&&a.push({label:e,value:n})},s=[];if(i.startsWith(`solana.jupiter.`)){let e=V(r.jupiter),t=V(e?.trigger);if(o(`Owner`,e?.owner),o(`Input mint`,e?.inputMint),o(`Output mint`,e?.outputMint),o(`Input amount`,e?.inputAmount),o(`Maximum input`,e?.maxInputAmount),o(`Minimum output`,e?.minimumOutputAmount),o(`Fee ceiling (lamports)`,e?.maxFeeLamports),o(`Source token account`,e?.sourceTokenAccount),o(`Destination token account`,e?.destinationTokenAccount),o(`Programs`,e?.programs),o(`Trigger operation`,t?.operation),o(`Trigger program`,t?.program),o(`Trigger order ID`,t?.order),o(`Trigger mint`,t?.triggerMint),o(`Condition`,t?.condition),o(`Target price (USD)`,t?.targetPriceUsd),o(`Slippage (bps)`,t?.slippageBps),o(`Order expiry`,t?.expiresAt),o(`Expected order state`,t?.expectedOrderState),i.includes(`.trigger.`)){let n=H(t?.operation);s=(n===`create`?[[`input mint`,e?.inputMint],[`output mint`,e?.outputMint],[`exact input amount`,e?.inputAmount],[`trigger mint`,t?.triggerMint],[`condition`,t?.condition],[`target price`,t?.targetPriceUsd],[`slippage`,t?.slippageBps],[`order expiry`,t?.expiresAt],[`expected new state`,t?.expectedOrderState]]:n===`cancel`?[[`order ID`,t?.order],[`refund mint`,e?.outputMint],[`minimum refund`,e?.minimumOutputAmount],[`refund destination`,e?.destinationTokenAccount],[`expected open state`,t?.expectedOrderState]]:[[`operation`,t?.operation]]).filter(e=>H(e[1])===null).map(e=>String(e[0]));let r=[[`vault`,t?.vault],[`external request ID`,t?.requestId],[`source token account`,e?.sourceTokenAccount],...n===`create`?[[`destination token account`,e?.destinationTokenAccount]]:[]].filter(e=>H(e[1])!==null).map(e=>String(e[0]));s.push(...r.map(e=>`remove caller-provided ${e}`))}}else if(i===`solana.nativeTransfer`)o(`Destination`,r.destination),o(`Lamports`,r.lamports);else if(i===`solana.splTransferChecked`)o(`Token program`,r.tokenProgram),o(`Mint`,r.mint),o(`Destination`,r.destination),o(`Amount`,r.amount);else if(i===`solana.vaultBondAction`){let e=V(r.context);o(`Cluster`,r.cluster),o(`Vault action`,r.action),o(`Program`,r.programId),o(`Target authority`,e?.targetAuthority),o(`Dispute authority`,e?.disputeAuthority),o(`Interval start cycle`,e?.intervalStartCycleId),o(`Registry page`,e?.registryPageIndex),o(`Miner authorities`,e?.minerAuthorities),o(`Front cycle IDs`,e?.frontCycleIds),o(`Back cycle IDs`,e?.backCycleIds)}else if(i===`federation.bondChallenge`){let e=V(r.federation);o(`Challenge ID`,e?.challengeId),o(`Bond ID`,e?.bondId),o(`Bond tier`,e?.tier),o(`Bond amount`,e?.amountRaw),o(`Federation handle`,e?.handle),o(`Node ID`,e?.nodeId),o(`Token ID`,e?.tokenId),o(`Federation origin`,e?.federationOrigin),o(`Challenge expiry`,e?.expiresAt)}return e`
62
+ `}function H(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:null}function U(e){if(typeof e==`string`)return e.trim()||null;if(typeof e==`number`&&Number.isFinite(e))return String(e);if(typeof e==`boolean`)return e?`yes`:`no`;if(Array.isArray(e)){let t=e.map(e=>U(e)).filter(Boolean);return t.length>0?t.join(`, `):null}return null}function le(n){let r=H(n.payload.signerSemanticIntent),i=U(r?.type);if(!r||!i)return t;let a=[],o=(e,t)=>{let n=U(t);n&&a.push({label:e,value:n})},s=[];if(i.startsWith(`solana.jupiter.`)){let e=H(r.jupiter),t=H(e?.trigger);if(o(`Owner`,e?.owner),o(`Input mint`,e?.inputMint),o(`Output mint`,e?.outputMint),o(`Input amount`,e?.inputAmount),o(`Maximum input`,e?.maxInputAmount),o(`Minimum output`,e?.minimumOutputAmount),o(`Fee ceiling (lamports)`,e?.maxFeeLamports),o(`Source token account`,e?.sourceTokenAccount),o(`Destination token account`,e?.destinationTokenAccount),o(`Programs`,e?.programs),o(`Trigger operation`,t?.operation),o(`Trigger program`,t?.program),o(`Trigger order ID`,t?.order),o(`Trigger mint`,t?.triggerMint),o(`Condition`,t?.condition),o(`Target price (USD)`,t?.targetPriceUsd),o(`Slippage (bps)`,t?.slippageBps),o(`Order expiry`,t?.expiresAt),o(`Expected order state`,t?.expectedOrderState),i.includes(`.trigger.`)){let n=U(t?.operation);s=(n===`create`?[[`input mint`,e?.inputMint],[`output mint`,e?.outputMint],[`exact input amount`,e?.inputAmount],[`trigger mint`,t?.triggerMint],[`condition`,t?.condition],[`target price`,t?.targetPriceUsd],[`slippage`,t?.slippageBps],[`order expiry`,t?.expiresAt],[`expected new state`,t?.expectedOrderState]]:n===`cancel`?[[`order ID`,t?.order],[`refund mint`,e?.outputMint],[`minimum refund`,e?.minimumOutputAmount],[`refund destination`,e?.destinationTokenAccount],[`expected open state`,t?.expectedOrderState]]:[[`operation`,t?.operation]]).filter(e=>U(e[1])===null).map(e=>String(e[0]));let r=[[`vault`,t?.vault],[`external request ID`,t?.requestId],[`source token account`,e?.sourceTokenAccount],...n===`create`?[[`destination token account`,e?.destinationTokenAccount]]:[]].filter(e=>U(e[1])!==null).map(e=>String(e[0]));s.push(...r.map(e=>`remove caller-provided ${e}`))}}else if(i===`solana.nativeTransfer`)o(`Destination`,r.destination),o(`Lamports`,r.lamports);else if(i===`solana.splTransferChecked`)o(`Token program`,r.tokenProgram),o(`Mint`,r.mint),o(`Destination`,r.destination),o(`Amount`,r.amount);else if(i===`solana.vaultBondAction`){let e=H(r.context);o(`Cluster`,r.cluster),o(`Vault action`,r.action),o(`Program`,r.programId),o(`Target authority`,e?.targetAuthority),o(`Dispute authority`,e?.disputeAuthority),o(`Interval start cycle`,e?.intervalStartCycleId),o(`Registry page`,e?.registryPageIndex),o(`Miner authorities`,e?.minerAuthorities),o(`Front cycle IDs`,e?.frontCycleIds),o(`Back cycle IDs`,e?.backCycleIds)}else if(i===`federation.bondChallenge`){let e=H(r.federation);o(`Challenge ID`,e?.challengeId),o(`Bond ID`,e?.bondId),o(`Bond tier`,e?.tier),o(`Bond amount`,e?.amountRaw),o(`Federation handle`,e?.handle),o(`Node ID`,e?.nodeId),o(`Token ID`,e?.tokenId),o(`Federation origin`,e?.federationOrigin),o(`Challenge expiry`,e?.expiresAt)}return e`
63
63
  <div class="wallet-approval-diff" style="margin-top: 6px;">
64
64
  <span><strong>Signer intent</strong> <span class="mono">${i}</span></span>
65
65
  ${a.map(t=>e`
@@ -75,7 +75,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
75
75
  </span>
76
76
  `:t}
77
77
  </div>
78
- `}function U(e){return e.replace(/\.0+$/,``).replace(/(\.\d*?)0+$/,`$1`)}function W(e,t){let n=String(e??``).trim();if(!n)return`0`;try{let e=t===`SOL`?c:l,r=Number(n)/10**Number(e);if(!Number.isFinite(r))return`0`;let i=Math.abs(r);return t===`SAT`?U(i>=1e3?r.toFixed(1):i>=1?r.toFixed(2):r.toFixed(3)):i>=1||i>=.01?U(r.toFixed(2)):i>0?`<0.01`:`0`}catch{return n}}function G(e,t){let n=String(e??``).trim();if(!n)return`—`;let r=RegExp(`\\s*${t}$`,`i`);return n.replace(r,``).trim()||`0`}function de(e){return String(e.miningProfile?.walletId??e.miningStatus?.walletId??e.miningReadiness?.selectedWalletId??``).trim()}function fe(e,t,n){if(typeof e.balances?.solana==`string`&&e.balances.solana.trim())return q(G(A(e.balances.solana,`solana`),`SOL`));if(n){let e=String(t.miningReadiness?.balances.solBalanceDisplay??``).trim();if(e)return q(G(e,`SOL`));let n=String(t.miningStatus?.currentSolBalanceLamports??``).trim();if(n)return q(W(n,`SOL`))}return e.addresses?.solana?t.balancesLoading?`Loading`:`0`:t.balancesLoading?`Loading`:`—`}function K(e,t){return e&&e.addresses?.solana||``}function pe(e,t){return!e||t?.walletId!==e.id?[]:Array.isArray(t.assets?.solana)?t.assets.solana:[]}function me(e,t){if(!e)return[];let n=[],r=de(t)===e.id,i=pe(e,t.balances);if(i.length>0)for(let e of i)n.push({id:e.id,chain:`solana`,symbol:e.symbol,name:e.name,amountDisplay:e.amountDisplay,amountRaw:e.amountRaw,decimals:e.decimals,isNative:e.isNative,program:e.program,tokenProgramId:e.tokenProgramId,address:e.address,logoUri:e.logoUri,verificationStatus:e.verificationStatus,priceUsd:e.priceUsd,valueUsd:e.valueUsd,tags:e.tags});else n.push({id:`solana:native`,chain:`solana`,symbol:`SOL`,name:`Solana`,amountDisplay:fe(e,t,r),amountRaw:e.balances?.solana,isNative:!0,address:e.addresses?.solana});return n}function q(e){let t=e.trim();if(!t||t===`—`||t.toLowerCase()===`loading`)return e;let n=Number.parseFloat(t.replaceAll(`,`,``));return Number.isFinite(n)?n>0&&n<.01?`<0.01`:new Intl.NumberFormat(`en-US`,{minimumFractionDigits:0,maximumFractionDigits:2}).format(n):e}function J(e){let t=e.mint?.trim();if(!t)return``;let n=e.drafts[t]?.[e.field];if(n!==void 0)return(e.drafts[t]?.decimals??-1)<0?F(n,e.decimals)??n:n;let r=e.settings?.policy.solana.tokenCaps?.[t]?.[e.field];return F(r,e.decimals)??``}function he(e,t,n,r,i){let a=t?.trim();if(!a)return;let o=e.policySolanaTokenCaps[a],s=o&&o.decimals<0?{decimals:n,maxPerTx:F(o.maxPerTx,n)??``,maxDaily:F(o.maxDaily,n)??``}:o??{decimals:n};e.onPolicyDraftChange({solanaTokenCaps:{...e.policySolanaTokenCaps,[a]:{...s,decimals:n,[r]:i}}})}function ge(e){let t=e.policyTokenCapMint.trim();if(!t)return;let n=Number.parseInt(e.policyTokenCapDecimals.trim(),10),r=Number.isFinite(n)?Math.max(0,Math.min(18,n)):0;e.onPolicyDraftChange({solanaTokenCaps:{...e.policySolanaTokenCaps,[t]:{decimals:r,maxPerTx:e.policyTokenCapMaxPerTx.trim(),maxDaily:e.policyTokenCapMaxDaily.trim()}},tokenCapMint:``,tokenCapDecimals:``,tokenCapMaxPerTx:``,tokenCapMaxDaily:``})}function _e(e){let t=[],n=new Set;for(let r of e.selectedWalletTokens){let e=r.program?.trim();if(r.isNative||!e||n.has(e))continue;let i=Y(e,2,2),a=String(r.symbol||``).trim(),o=!a||a===`Token`||a.includes(`...`)||a.includes(`…`)||a.length>8?i:a;n.add(e),t.push({key:e,label:o,detail:i,mint:e,decimals:r.decimals??0,logo:ye(r,20)})}let r=new Set([...Object.keys(e.props.settings?.policy.solana.tokenCaps??{}),...Object.keys(e.props.policySolanaTokenCaps??{})]);for(let i of r){let r=i.trim();!r||n.has(r)||(n.add(r),t.push({key:r,label:Y(r,2,2),detail:Y(r,2,2),mint:r,decimals:e.props.policySolanaTokenCaps[r]?.decimals??-1}))}return t}function ve(n){let{props:r,settings:i,policyDisplay:a,cardRole:o,selectedWalletId:s,cardWalletCanSpendSolana:c,selectedWalletTokens:l,canEditPolicy:u}=n,d=r.policyCapsEnabled===!0,f=_e({props:r,selectedWalletTokens:l});return e`
78
+ `}function W(e){return e.replace(/\.0+$/,``).replace(/(\.\d*?)0+$/,`$1`)}function G(e,t){let n=String(e??``).trim();if(!n)return`0`;try{let e=t===`SOL`?c:l,r=Number(n)/10**Number(e);if(!Number.isFinite(r))return`0`;let i=Math.abs(r);return t===`SAT`?W(i>=1e3?r.toFixed(1):i>=1?r.toFixed(2):r.toFixed(3)):i>=1||i>=.01?W(r.toFixed(2)):i>0?`<0.01`:`0`}catch{return n}}function K(e,t){let n=String(e??``).trim();if(!n)return`—`;let r=RegExp(`\\s*${t}$`,`i`);return n.replace(r,``).trim()||`0`}function ue(e){return String(e.miningProfile?.walletId??e.miningStatus?.walletId??e.miningReadiness?.selectedWalletId??``).trim()}function de(e,t,n){if(typeof e.balances?.solana==`string`&&e.balances.solana.trim())return J(K(j(e.balances.solana,`solana`),`SOL`));if(n){let e=String(t.miningReadiness?.balances.solBalanceDisplay??``).trim();if(e)return J(K(e,`SOL`));let n=String(t.miningStatus?.currentSolBalanceLamports??``).trim();if(n)return J(G(n,`SOL`))}return e.addresses?.solana?t.balancesLoading?`Loading`:`0`:t.balancesLoading?`Loading`:`—`}function q(e,t){return e&&e.addresses?.solana||``}function fe(e,t){return!e||t?.walletId!==e.id?[]:Array.isArray(t.assets?.solana)?t.assets.solana:[]}function pe(e,t){if(!e)return[];let n=[],r=ue(t)===e.id,i=fe(e,t.balances);if(i.length>0)for(let e of i)n.push({id:e.id,chain:`solana`,symbol:e.symbol,name:e.name,amountDisplay:e.amountDisplay,amountRaw:e.amountRaw,decimals:e.decimals,isNative:e.isNative,program:e.program,tokenProgramId:e.tokenProgramId,address:e.address,logoUri:e.logoUri,verificationStatus:e.verificationStatus,priceUsd:e.priceUsd,valueUsd:e.valueUsd,tags:e.tags});else n.push({id:`solana:native`,chain:`solana`,symbol:`SOL`,name:`Solana`,amountDisplay:de(e,t,r),amountRaw:e.balances?.solana,isNative:!0,address:e.addresses?.solana});return n}function J(e){let t=e.trim();if(!t||t===`—`||t.toLowerCase()===`loading`)return e;let n=Number.parseFloat(t.replaceAll(`,`,``));return Number.isFinite(n)?n>0&&n<.01?`<0.01`:new Intl.NumberFormat(`en-US`,{minimumFractionDigits:0,maximumFractionDigits:2}).format(n):e}function Y(e){let t=e.mint?.trim();if(!t)return``;let n=e.drafts[t]?.[e.field];if(n!==void 0)return(e.drafts[t]?.decimals??-1)<0?F(n,e.decimals)??n:n;let r=e.settings?.policy.solana.tokenCaps?.[t]?.[e.field];return F(r,e.decimals)??``}function me(e,t,n,r,i){let a=t?.trim();if(!a)return;let o=e.policySolanaTokenCaps[a],s=o&&o.decimals<0?{decimals:n,maxPerTx:F(o.maxPerTx,n)??``,maxDaily:F(o.maxDaily,n)??``}:o??{decimals:n};e.onPolicyDraftChange({solanaTokenCaps:{...e.policySolanaTokenCaps,[a]:{...s,decimals:n,[r]:i}}})}function he(e){let t=e.policyTokenCapMint.trim();if(!t)return;let n=Number.parseInt(e.policyTokenCapDecimals.trim(),10),r=Number.isFinite(n)?Math.max(0,Math.min(18,n)):0;e.onPolicyDraftChange({solanaTokenCaps:{...e.policySolanaTokenCaps,[t]:{decimals:r,maxPerTx:e.policyTokenCapMaxPerTx.trim(),maxDaily:e.policyTokenCapMaxDaily.trim()}},tokenCapMint:``,tokenCapDecimals:``,tokenCapMaxPerTx:``,tokenCapMaxDaily:``})}function ge(e){let t=[],n=new Set;for(let r of e.selectedWalletTokens){let e=r.program?.trim();if(r.isNative||!e||n.has(e))continue;let i=X(e,2,2),a=String(r.symbol||``).trim(),o=!a||a===`Token`||a.includes(`...`)||a.includes(`…`)||a.length>8?i:a;n.add(e),t.push({key:e,label:o,detail:i,mint:e,decimals:r.decimals??0,logo:ve(r,20)})}let r=new Set([...Object.keys(e.props.settings?.policy.solana.tokenCaps??{}),...Object.keys(e.props.policySolanaTokenCaps??{})]);for(let i of r){let r=i.trim();!r||n.has(r)||(n.add(r),t.push({key:r,label:X(r,2,2),detail:X(r,2,2),mint:r,decimals:e.props.policySolanaTokenCaps[r]?.decimals??-1}))}return t}function _e(n){let{props:r,settings:i,policyDisplay:a,cardRole:o,selectedWalletId:s,cardWalletCanSpendSolana:c,selectedWalletTokens:l,canEditPolicy:u}=n,d=r.policyCapsEnabled===!0,f=ge({props:r,selectedWalletTokens:l});return e`
79
79
  <div class="field">
80
80
  <div class="wallet-spend-limit-row" style="align-items: end;">
81
81
  <label class="field">
@@ -120,7 +120,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
120
120
  <input
121
121
  aria-label="Daily SOL cap"
122
122
  placeholder="5.0"
123
- .value=${r.policySolMaxDaily||a?.solana.maxDaily.human.split(` `)[0]||A(i.policy.solana.maxDaily,`solana`,{hideUnit:!0})}
123
+ .value=${r.policySolMaxDaily||a?.solana.maxDaily.human.split(` `)[0]||j(i.policy.solana.maxDaily,`solana`,{hideUnit:!0})}
124
124
  ?disabled=${r.settingsBusy||!u}
125
125
  @input=${e=>r.onPolicyDraftChange({solMaxDaily:e.target.value})}
126
126
  />
@@ -133,7 +133,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
133
133
  <input
134
134
  aria-label="Per transaction SOL cap"
135
135
  placeholder="1.0"
136
- .value=${r.policySolMaxPerTx||a?.solana.maxPerTx.human.split(` `)[0]||A(i.policy.solana.maxPerTx,`solana`,{hideUnit:!0})}
136
+ .value=${r.policySolMaxPerTx||a?.solana.maxPerTx.human.split(` `)[0]||j(i.policy.solana.maxPerTx,`solana`,{hideUnit:!0})}
137
137
  ?disabled=${r.settingsBusy||!u}
138
138
  @input=${e=>r.onPolicyDraftChange({solMaxPerTx:e.target.value})}
139
139
  />
@@ -150,9 +150,9 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
150
150
  <input
151
151
  aria-label=${`Daily cap for ${t.label}`}
152
152
  placeholder="0"
153
- .value=${J({drafts:r.policySolanaTokenCaps,settings:i,mint:t.mint,field:`maxDaily`,decimals:t.decimals})}
153
+ .value=${Y({drafts:r.policySolanaTokenCaps,settings:i,mint:t.mint,field:`maxDaily`,decimals:t.decimals})}
154
154
  ?disabled=${r.settingsBusy||!u}
155
- @input=${e=>he(r,t.mint,t.decimals,`maxDaily`,e.target.value)}
155
+ @input=${e=>me(r,t.mint,t.decimals,`maxDaily`,e.target.value)}
156
156
  />
157
157
  </label>
158
158
  <label class="field wallet-cap-field">
@@ -163,9 +163,9 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
163
163
  <input
164
164
  aria-label=${`Per transaction cap for ${t.label}`}
165
165
  placeholder="0"
166
- .value=${J({drafts:r.policySolanaTokenCaps,settings:i,mint:t.mint,field:`maxPerTx`,decimals:t.decimals})}
166
+ .value=${Y({drafts:r.policySolanaTokenCaps,settings:i,mint:t.mint,field:`maxPerTx`,decimals:t.decimals})}
167
167
  ?disabled=${r.settingsBusy||!u}
168
- @input=${e=>he(r,t.mint,t.decimals,`maxPerTx`,e.target.value)}
168
+ @input=${e=>me(r,t.mint,t.decimals,`maxPerTx`,e.target.value)}
169
169
  />
170
170
  </label>
171
171
  </div>
@@ -206,7 +206,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
206
206
  </div>
207
207
  </div>
208
208
  <div class="muted mono wallet-token-cap-row__detail" title=${n.mint}>
209
- ${Y(n.mint,2,2)}
209
+ ${X(n.mint,2,2)}
210
210
  </div>
211
211
  <button class="btn" ?disabled=${r.settingsBusy||!u} @click=${()=>r.onTokenSearchSelect(n)}>
212
212
  Use
@@ -262,7 +262,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
262
262
  <button
263
263
  class="btn"
264
264
  ?disabled=${r.settingsBusy||!u||!(r.policyTokenCapMint??``).trim()}
265
- @click=${()=>ge(r)}
265
+ @click=${()=>he(r)}
266
266
  >
267
267
  Add
268
268
  </button>
@@ -285,28 +285,28 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
285
285
  </details>
286
286
  `:t}
287
287
  </div>
288
- `}function ye(t,n=28){let r=t.symbol.trim().slice(0,1).toUpperCase()||`?`,i=`width:${n}px;height:${n}px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;background:rgba(255,255,255,0.08);color:rgba(255,255,255,0.92);font-weight:600;font-size:0.8em;overflow:hidden;flex-shrink:0;`;return t.logoUri?e`<span style=${i}
288
+ `}function ve(t,n=28){let r=t.symbol.trim().slice(0,1).toUpperCase()||`?`,i=`width:${n}px;height:${n}px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;background:rgba(255,255,255,0.08);color:rgba(255,255,255,0.92);font-weight:600;font-size:0.8em;overflow:hidden;flex-shrink:0;`;return t.logoUri?e`<span style=${i}
289
289
  ><img
290
290
  src=${t.logoUri}
291
291
  alt=${`${t.symbol} logo`}
292
292
  style=${`width:${n}px;height:${n}px;object-fit:cover;display:block;`}
293
293
  @error=${e=>{let t=e.currentTarget,n=t?.parentElement;t&&n&&(t.style.display=`none`,n.textContent=r)}}
294
294
  /></span
295
- >`:e`<span style=${i}>${r}</span>`}function be(e,t){let n=me(e,t);if(n.length===0)return{options:n};let r=String(t.sendCreateForm.assetId??``).trim(),i=t.sendCreateForm.chain;return{selected:n.find(e=>e.id===r)??n.find(e=>e.chain===i&&e.isNative)??n.find(e=>e.chain===i)??n[0],options:n}}function xe(e){switch(e){case`send_requested`:return`Request created`;case`send_approved`:return`Approved`;case`send_rejected`:return`Rejected`;case`send_executed`:return`Executed`;case`send_failed`:return`Failed`;default:return e.replace(/_/g,` `)}}function Se(e){let t=I(e.details??{},`actionKind`);return t===`solana_limit_order`?e.action===`send_executed`?`Limit order created`:e.action===`send_failed`?`Limit order failed`:`Limit order request`:t===`solana_limit_cancel`?e.action===`send_executed`?`Limit order cancelled`:e.action===`send_failed`?`Cancel failed`:`Cancel request`:xe(e.action)}function Ce(e){switch(e){case`pending`:return n.loader;case`approved`:return n.check;case`executed`:return n.send;case`failed`:case`rejected`:case`expired`:return n.x;default:return n.fileText}}function we(e){switch(e){case`send_requested`:return n.penLine;case`send_approved`:return n.check;case`send_rejected`:return n.x;case`send_executed`:return n.send;case`send_failed`:return n.bug;default:return n.fileText}}function Y(e,t=8,n=6){let r=e.trim();return r?r.length<=t+n+1?r:`${r.slice(0,t)}...${r.slice(-n)}`:`—`}function Te(e){let t=e.trim();return t?t.length<=12?t:`${t.slice(0,4)}…${t.slice(-4)}`:`TOKEN`}function Ee(e){if(!e||e.isNative||!e.program)return!1;let t=Te(e.program);return String(e.symbol??``).trim().toUpperCase()===t.toUpperCase()&&String(e.name??``).trim()===`Token ${t}`}async function De(e){let t=e.trim();if(!(!t||typeof navigator>`u`||!navigator.clipboard))try{await navigator.clipboard.writeText(t)}catch{}}function Oe(e){return e.replace(/[^a-zA-Z0-9_-]/g,`-`)||`wallet`}function ke(e,t,n){if(typeof document>`u`)return;let r=document.getElementById(e);if(!r)return;let i=r.dataset.revealed===`true`;r.textContent=i?t:n,r.dataset.revealed=i?`false`:`true`}function X(r,i){let a=r.trim();return a?e`<button
295
+ >`:e`<span style=${i}>${r}</span>`}function ye(e,t){let n=pe(e,t);if(n.length===0)return{options:n};let r=String(t.sendCreateForm.assetId??``).trim(),i=t.sendCreateForm.chain;return{selected:n.find(e=>e.id===r)??n.find(e=>e.chain===i&&e.isNative)??n.find(e=>e.chain===i)??n[0],options:n}}function be(e){switch(e){case`send_requested`:return`Request created`;case`send_approved`:return`Approved`;case`send_rejected`:return`Rejected`;case`send_executed`:return`Executed`;case`send_failed`:return`Failed`;default:return e.replace(/_/g,` `)}}function xe(e){let t=I(e.details??{},`actionKind`);return t===`solana_limit_order`?e.action===`send_executed`?`Limit order created`:e.action===`send_failed`?`Limit order failed`:`Limit order request`:t===`solana_limit_cancel`?e.action===`send_executed`?`Limit order cancelled`:e.action===`send_failed`?`Cancel failed`:`Cancel request`:be(e.action)}function Se(e){switch(e){case`pending`:return n.loader;case`approved`:return n.check;case`executed`:return n.send;case`failed`:case`rejected`:case`expired`:return n.x;default:return n.fileText}}function Ce(e){switch(e){case`send_requested`:return n.penLine;case`send_approved`:return n.check;case`send_rejected`:return n.x;case`send_executed`:return n.send;case`send_failed`:return n.bug;default:return n.fileText}}function X(e,t=8,n=6){let r=e.trim();return r?r.length<=t+n+1?r:`${r.slice(0,t)}...${r.slice(-n)}`:`—`}function we(e){let t=e.trim();return t?t.length<=12?t:`${t.slice(0,4)}…${t.slice(-4)}`:`TOKEN`}function Te(e){if(!e||e.isNative||!e.program)return!1;let t=we(e.program);return String(e.symbol??``).trim().toUpperCase()===t.toUpperCase()&&String(e.name??``).trim()===`Token ${t}`}async function Ee(e){let t=e.trim();if(!(!t||typeof navigator>`u`||!navigator.clipboard))try{await navigator.clipboard.writeText(t)}catch{}}function De(e){return e.replace(/[^a-zA-Z0-9_-]/g,`-`)||`wallet`}function Oe(e,t,n){if(typeof document>`u`)return;let r=document.getElementById(e);if(!r)return;let i=r.dataset.revealed===`true`;r.textContent=i?t:n,r.dataset.revealed=i?`false`:`true`}function ke(r,i){let a=r.trim();return a?e`<button
296
296
  type="button"
297
297
  class="wallet-copy-btn"
298
298
  title=${`Copy ${i}`}
299
299
  aria-label=${`Copy ${i}`}
300
- @click=${()=>void De(a)}
300
+ @click=${()=>void Ee(a)}
301
301
  >
302
302
  <span class="wallet-copy-btn__icon">${n.copy}</span>
303
- </button>`:t}function Ae(n){let r=String(n.value??``).trim();if(!r)return t;let i=n.display.trim()||Y(r);return e`<button
303
+ </button>`:t}function Ae(n){let r=String(n.value??``).trim();if(!r)return t;let i=n.display.trim()||X(r);return e`<button
304
304
  type="button"
305
305
  class=${`wallet-copy-text ${n.className??``}`.trim()}
306
306
  data-copied="false"
307
307
  title=${n.title??`Copy ${n.label}`}
308
308
  aria-label=${`Copy ${n.label}`}
309
- @click=${e=>{De(r).then(()=>{let t=e.currentTarget;if(!t)return;let n=t.querySelector(`.wallet-copy-popover`);t.dataset.copied=`true`,n&&(n.textContent=`Copied`),window.setTimeout(()=>{n&&(n.textContent=`Copy`),t.dataset.copied=`false`},1200)})}}
309
+ @click=${e=>{Ee(r).then(()=>{let t=e.currentTarget;if(!t)return;let n=t.querySelector(`.wallet-copy-popover`);t.dataset.copied=`true`,n&&(n.textContent=`Copied`),window.setTimeout(()=>{n&&(n.textContent=`Copy`),t.dataset.copied=`false`},1200)})}}
310
310
  >
311
311
  <span class="wallet-copy-text__label">${i}</span>
312
312
  <span class="wallet-copy-popover" aria-hidden="true">Copy</span>
@@ -339,7 +339,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
339
339
  <span class="wallet-meta-row__label">${n.label}</span>
340
340
  <span class="wallet-meta-row__value mono">${n.value}</span>
341
341
  <span class="wallet-meta-row__actions">
342
- ${n.rawValue&&n.copyLabel?X(n.rawValue,n.copyLabel):t}
342
+ ${n.rawValue&&n.copyLabel?ke(n.rawValue,n.copyLabel):t}
343
343
  ${Z(n.href,`Open ${n.label}`)}
344
344
  </span>
345
345
  </div>`}function Ne(n){let r=n.skillGrantDraft,i=n.skillGrantRows.find(e=>e.skillId===r.skillId)??n.skillGrantRows[0],o=(r.walletIds??``).split(`,`).map(e=>e.trim()).filter(Boolean),s=n.skillGrantBusy||!r.skillId.trim()||r.actions.length===0||o.length===0;return e`
@@ -347,7 +347,10 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
347
347
  <div class="wallet-panel__head">
348
348
  <div>
349
349
  <div class="card-title">Skill Grants</div>
350
- <div class="card-sub">Per-skill caps for Agent wallets that have Skills enabled.</div>
350
+ <div class="card-sub">
351
+ Per-skill caps for Agent wallets. One wallet id is the explicit skill override;
352
+ multiple ids are an allowlist and normal Agent routing continues.
353
+ </div>
351
354
  </div>
352
355
  <button class="btn" ?disabled=${n.skillGrantsLoading} @click=${n.onRefresh}>
353
356
  ${n.skillGrantsLoading?`Refreshing...`:`Refresh`}
@@ -505,7 +508,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
505
508
  </div>
506
509
  `}
507
510
  </div>
508
- `}function Pe(n){let r=n.status,i=u(n);return e`
511
+ `}function Pe(n){let r=n.status,i=u(n),a=n.namedWallets.filter(e=>S(e,n.defaultWalletId)),o=[...new Set([...(n.agents??[]).map(e=>e.id.trim()).filter(Boolean),...Object.keys(n.assignments??{})])].toSorted();return e`
509
512
  <div class="wallet-top-grid">
510
513
  <div id="wallet-admin-control" class="card wallet-top-card">
511
514
  <div class="wallet-top-card__head">
@@ -513,7 +516,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
513
516
  <div class="wallet-top-card__title-row">
514
517
  <div class="card-title">Control UI account passkey</div>
515
518
  ${je(`Optional Control UI account passkey`,`${i.detail} Use a device passkey such as Touch ID, Windows Hello, a phone passkey, or a supported security key.`)}
516
- ${T(i.summary,i.detail)}
519
+ ${w(i.summary,i.detail)}
517
520
  </div>
518
521
  </div>
519
522
  </div>
@@ -558,7 +561,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
558
561
  <div>
559
562
  <div>Label: ${t.label||`Wallet passkey`}</div>
560
563
  <div class="wallet-security-note">
561
- Credential ID <span class="mono">${Y(t.id)}</span>
564
+ Credential ID <span class="mono">${X(t.id)}</span>
562
565
  · added ${new Date(t.createdAt).toLocaleString()}
563
566
  </div>
564
567
  </div>
@@ -577,8 +580,71 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
577
580
  `:t}
578
581
  ${n.passkeyError?e`<div class="callout danger">${n.passkeyError}</div>`:t}
579
582
  </div>
583
+ <div id="wallet-agent-routing" class="card wallet-top-card">
584
+ <div class="wallet-top-card__head">
585
+ <div>
586
+ <div class="card-title">Agent wallet routing</div>
587
+ <div class="card-sub">
588
+ Explicit action → one-wallet skill override → Agent assignment → optional Default
589
+ Agent wallet fallback. If none exists, the action stops with Select an Agent wallet.
590
+ </div>
591
+ </div>
592
+ </div>
593
+ <div class="wallet-security-device-list" style="margin-top: 12px">
594
+ ${o.length>0?o.map(t=>{let r=n.assignments?.[t],i=r||n.defaultWalletId||null;return e`
595
+ <div class="wallet-security-device-row">
596
+ <div>
597
+ <strong>${n.agents?.find(e=>e.id===t)?.name?.trim()||t}</strong>
598
+ <div class="wallet-security-note mono">${t}</div>
599
+ <div class="wallet-security-note">
600
+ Assigned: ${r||`none`} · Effective fallback:
601
+ ${i||`Select an Agent wallet`}
602
+ </div>
603
+ </div>
604
+ <button
605
+ class="btn small"
606
+ ?disabled=${n.settingsBusy||!r}
607
+ @click=${()=>n.onDeleteAgentAssignment?.(t)}
608
+ >
609
+ Clear assignment
610
+ </button>
611
+ </div>
612
+ `}):e`
613
+ <div class="wallet-security-note">No Agents are available yet.</div>
614
+ `}
615
+ </div>
616
+ <div class="wallet-card-security__grid" style="margin-top: 12px">
617
+ <label class="field">
618
+ <span>Agent</span>
619
+ <select
620
+ .value=${n.assignAgentId??``}
621
+ @change=${e=>n.onAssignAgentIdChange?.(e.target.value)}
622
+ >
623
+ <option value="">Select Agent</option>
624
+ ${o.map(t=>e`<option value=${t}>${t}</option>`)}
625
+ </select>
626
+ </label>
627
+ <label class="field">
628
+ <span>Assigned Agent wallet</span>
629
+ <select
630
+ .value=${n.assignWalletId??``}
631
+ @change=${e=>n.onAssignWalletIdChange?.(e.target.value)}
632
+ >
633
+ <option value="">No assignment</option>
634
+ ${a.map(t=>e`<option value=${t.id}>${t.name} (${t.id})</option>`)}
635
+ </select>
636
+ </label>
637
+ <button
638
+ class="btn primary"
639
+ ?disabled=${n.settingsBusy||!n.assignAgentId?.trim()}
640
+ @click=${n.onAssignAgentWallet}
641
+ >
642
+ Save assignment
643
+ </button>
644
+ </div>
645
+ </div>
580
646
  </div>
581
- `}function Fe(e){switch(e){case`send_executed`:case`send_approved`:return`success`;case`send_failed`:case`send_rejected`:return`danger`;case`send_requested`:return`warn`;default:return`neutral`}}function Ie(a){let c=a.status,l=a.settings,u=C(a),f=!!(a.error||a.settingsError||a.actionMessage||a.settingsMessage||u.sharedWalletWarning),m=a.auditEntries.filter(e=>[`send_requested`,`send_approved`,`send_rejected`,`send_executed`,`send_failed`].includes(e.action)).slice(0,48),h=m.length,g=Math.max(1,Math.ceil(h/s)),_=Math.min(Math.max(a.activityPage,1),g),y=(_-1)*s,b=m.slice(y,y+s),x=c?.capabilities?.canEditPolicy??!0,S=c?.capabilities?.canSend??!0,w=c?.policyDisplay,T=v(a.namedWallets,a.walletDetailsWalletId),E=k(a.namedWallets,a),O={enabled:!1,mode:`all`,percentage:100,minRaw:`1`,keepRaw:`0`,...a.miningProfile?.automation?.satSweep},A=a.namedWallets.filter(e=>e.id!==T?.id&&!!e.addresses?.solana),P=O.destinationAddress||!O.destinationWalletId?`external`:`wallet`,F=String(a.expandedWalletId??``).trim(),L=a.expandedPanel??``,R=typeof window<`u`?String(window.location?.hash??``).replace(/^#/,``):``,B=(R===`wallet-skill-grants`?`skill-grants`:[`wallet-access`,`wallet-admin-control`].includes(R)?`access`:null)??a.mainPanel??`wallets`,V=(a.providers??[]).filter(e=>(e.id===`local-socket-signer`||e.id===`turnkey`)&&e.operationsImplemented&&e.capabilities.operations.createWallet),H=a.createProvider??V[0]?.id??`local-socket-signer`,U=V.find(e=>e.id===H),W=!!(U?.enabled&&U.health.ok&&(!U.capabilities.requiresCredentials||U.credentialsConfigured)),G=a.namedWallets.find(e=>D(e.id,a)===`mining`||e.id===`mining`),K=a.createRole===`mining`&&!!G,pe=!!(a.createRole&&a.createName?.trim()&&(H!==`local-socket-signer`||a.createId?.trim()&&a.createRpcUrl?.trim())&&!K),J=e=>{if(a.onMainPanelChange?.(e),typeof window>`u`)return;let t=new URL(window.location.href);t.hash=e===`skill-grants`?`wallet-skill-grants`:e===`access`?`wallet-access`:``,window.history.replaceState({},``,t.toString())};return e`
647
+ `}function Fe(e){switch(e){case`send_executed`:case`send_approved`:return`success`;case`send_failed`:case`send_rejected`:return`danger`;case`send_requested`:return`warn`;default:return`neutral`}}function Ie(a){let c=a.status,l=a.settings,u=C(a),f=!!(a.error||a.settingsError||a.actionMessage||a.settingsMessage||u.sharedWalletWarning),m=a.auditEntries.filter(e=>[`send_requested`,`send_approved`,`send_rejected`,`send_executed`,`send_failed`].includes(e.action)).slice(0,48),h=m.length,g=Math.max(1,Math.ceil(h/s)),_=Math.min(Math.max(a.activityPage,1),g),y=(_-1)*s,b=m.slice(y,y+s),x=c?.capabilities?.canEditPolicy??!0,S=c?.capabilities?.canSend??!0,te=c?.policyDisplay,w=v(a.namedWallets,a.walletDetailsWalletId),T=O(a.namedWallets,a),D={enabled:!1,mode:`all`,percentage:100,minRaw:`1`,keepRaw:`0`,...a.miningProfile?.automation?.satSweep},j=a.namedWallets.filter(e=>e.id!==w?.id&&!!e.addresses?.solana),P=D.destinationAddress||!D.destinationWalletId?`external`:`wallet`,F=String(a.expandedWalletId??``).trim(),L=a.expandedPanel??``,R=typeof window<`u`?String(window.location?.hash??``).replace(/^#/,``):``,B=(R===`wallet-skill-grants`?`skill-grants`:[`wallet-access`,`wallet-admin-control`].includes(R)?`access`:null)??a.mainPanel??`wallets`,H=(a.providers??[]).filter(e=>(e.id===`local-socket-signer`||e.id===`turnkey`)&&e.operationsImplemented&&e.capabilities.operations.createWallet),U=a.createProvider??H[0]?.id??`local-socket-signer`,W=H.find(e=>e.id===U),G=!!(W?.enabled&&W.health.ok&&(!W.capabilities.requiresCredentials||W.credentialsConfigured)),K=a.namedWallets.find(e=>E(e.id,a)===`mining`||e.id===`mining`),q=a.createRole===`mining`&&!!K,fe=!!(a.createRole&&a.createName?.trim()&&(U!==`local-socket-signer`||a.createId?.trim()&&a.createRpcUrl?.trim())&&!q),Y=e=>{if(a.onMainPanelChange?.(e),typeof window>`u`)return;let t=new URL(window.location.href);t.hash=e===`skill-grants`?`wallet-skill-grants`:e===`access`?`wallet-access`:``,window.history.replaceState({},``,t.toString())};return e`
582
648
  ${Le(a)}
583
649
  <style>
584
650
  .wallet-dashboard {
@@ -1735,7 +1801,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
1735
1801
  class="btn"
1736
1802
  role="tab"
1737
1803
  aria-selected=${B===`wallets`?`true`:`false`}
1738
- @click=${()=>J(`wallets`)}
1804
+ @click=${()=>Y(`wallets`)}
1739
1805
  >
1740
1806
  Wallets
1741
1807
  </button>
@@ -1743,7 +1809,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
1743
1809
  class="btn"
1744
1810
  role="tab"
1745
1811
  aria-selected=${B===`access`?`true`:`false`}
1746
- @click=${()=>J(`access`)}
1812
+ @click=${()=>Y(`access`)}
1747
1813
  >
1748
1814
  Account Security
1749
1815
  </button>
@@ -1751,7 +1817,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
1751
1817
  class="btn"
1752
1818
  role="tab"
1753
1819
  aria-selected=${B===`skill-grants`?`true`:`false`}
1754
- @click=${()=>J(`skill-grants`)}
1820
+ @click=${()=>Y(`skill-grants`)}
1755
1821
  >
1756
1822
  Skill Grants
1757
1823
  </button>
@@ -1782,7 +1848,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
1782
1848
  <span>Name</span>
1783
1849
  <input
1784
1850
  .value=${a.createName??``}
1785
- placeholder="Primary Agent wallet"
1851
+ placeholder="Agent wallet"
1786
1852
  autocomplete="off"
1787
1853
  @input=${e=>a.onCreateNameChange?.(e.target.value)}
1788
1854
  />
@@ -1791,7 +1857,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
1791
1857
  <span>Permanent wallet ID</span>
1792
1858
  <input
1793
1859
  .value=${a.createId??``}
1794
- placeholder=${H===`local-socket-signer`?`agent-primary (required)`:`optional local label`}
1860
+ placeholder=${U===`local-socket-signer`?`agent-operations (required)`:`optional local label`}
1795
1861
  autocomplete="off"
1796
1862
  @input=${e=>a.onCreateIdChange?.(e.target.value)}
1797
1863
  />
@@ -1799,10 +1865,10 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
1799
1865
  <label class="field">
1800
1866
  <span>Custody provider</span>
1801
1867
  <select
1802
- .value=${H}
1868
+ .value=${U}
1803
1869
  @change=${e=>a.onCreateProviderChange?.(e.target.value)}
1804
1870
  >
1805
- ${V.map(t=>e`
1871
+ ${H.map(t=>e`
1806
1872
  <option value=${t.id}>
1807
1873
  ${t.label||(t.id===`local-socket-signer`?`Native Go signer`:`Turnkey`)}
1808
1874
  </option>
@@ -1821,7 +1887,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
1821
1887
  <option value="vault">Vault — reviewed operations only</option>
1822
1888
  </select>
1823
1889
  </label>
1824
- ${H===`local-socket-signer`?e`
1890
+ ${U===`local-socket-signer`?e`
1825
1891
  <label class="field">
1826
1892
  <span>Primary Solana RPC</span>
1827
1893
  <input
@@ -1836,29 +1902,29 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
1836
1902
  <div class="wallet-create-actions">
1837
1903
  <button
1838
1904
  class="btn primary"
1839
- ?disabled=${a.settingsBusy||!W||!pe}
1905
+ ?disabled=${a.settingsBusy||!G||!fe}
1840
1906
  @click=${a.onCreateWallet}
1841
1907
  >
1842
1908
  ${a.settingsBusy?`Creating...`:`Create wallet`}
1843
1909
  </button>
1844
1910
  <span class="muted">
1845
- ${K?`Mining already uses ${G?.name??G?.id}. Open, Replace, or Archive that singleton wallet.`:a.createRole?U?U.enabled?U.health.ok?U.capabilities.requiresCredentials&&!U.credentialsConfigured?`Configure restricted provider credentials before creating a wallet.`:H===`local-socket-signer`?`The Go signer generates the key; Node receives only the public address.`:`Turnkey creates the account under the configured restrictive policy.`:U.health.details||`Provider health check failed.`:`Enable this provider in Wallet Access first.`:`No production wallet-creation provider is available.`:`Choose a wallet role; Agent is never selected silently.`}
1911
+ ${q?`Mining already uses ${K?.name??K?.id}. Open, Replace, or Archive that singleton wallet.`:a.createRole?W?W.enabled?W.health.ok?W.capabilities.requiresCredentials&&!W.credentialsConfigured?`Configure restricted provider credentials before creating a wallet.`:U===`local-socket-signer`?`The Go signer generates the key; Node receives only the public address.`:`Turnkey creates the account under the configured restrictive policy.`:W.health.details||`Provider health check failed.`:`Enable this provider in Wallet Access first.`:`No production wallet-creation provider is available.`:`Choose a wallet role; Agent is never selected silently.`}
1846
1912
  </span>
1847
1913
  </div>
1848
1914
  </div>
1849
1915
  </details>
1850
1916
  ${a.balancesError?e`<div class="callout danger">${a.balancesError}</div>`:t}
1851
1917
  <div class="wallet-grid">
1852
- ${E.map(r=>{let s=fe(r,a,de(a)===r.id),u=String(a.balanceWalletId??``).trim(),f=r.id===F&&L===`balance`,p=r.id===F&&L===`security`,m=((f||p)&&r.id===(u||a.balances?.walletId)?me(r,a).filter(e=>e.chain===`solana`):[]).filter(e=>!e.isNative),h=r.addresses?.solana||``,g=`wallet-address-${Oe(r.id)}`,_=s,v=D(r.id,a),y=d(c),b=v===`agent`&&r.id===a.walletDetailsWalletId&&l?l.policy.directSigning:void 0,C=r.id===a.walletDetailsWalletId?l?.signerPolicy:void 0,T=r.providerId!==`local-socket-signer`||r.metadata?.networkReady===!0,E=typeof r.metadata?.networkVersion==`number`?r.metadata.networkVersion:void 0,k=r.providerId!==`local-socket-signer`||C?.state===`acknowledged`,j=ee(r).includes(`solana`),M=v===`mining`?[{id:`sweep`,label:`Sweep`,title:`Mining-only sweep after SAT claims.`}]:v===`agent`?[{id:`caps`,label:`Caps`,title:`Limits used by chat, scheduled sends, swaps, and approved automation.`},{id:`schedule`,label:`Send`,title:`One Agent-wallet recurring send policy shared by chat and Wallet UI.`},{id:`automation`,label:`Auto`,title:`Stop or resume background wallet execution for this Agent wallet.`},{id:`skills`,label:`Skills`,title:`Allow reviewed skills to use this Agent wallet after separate skill grants.`}]:[{id:`caps`,label:`Caps`,title:`Vault guardrails for reviewed Wallet UI sends only.`}],N=a.policyPanel&&M.some(e=>e.id===a.policyPanel)?a.policyPanel:M[0]?.id??`caps`,I=i(a.recurringTransferCron??``),R=String(a.recurringTransferMint??``).trim(),z=R?`token`:`SOL`,B=e=>a.onPolicyDraftChange({recurringTransferCron:o({every:e.every??I.every,unit:e.unit??I.unit,time:e.time??I.time})});return e`
1918
+ ${T.map(r=>{let s=de(r,a,ue(a)===r.id),u=String(a.balanceWalletId??``).trim(),f=r.id===F&&L===`balance`,p=r.id===F&&L===`security`,m=((f||p)&&r.id===(u||a.balances?.walletId)?pe(r,a).filter(e=>e.chain===`solana`):[]).filter(e=>!e.isNative),h=r.addresses?.solana||``,g=`wallet-address-${De(r.id)}`,_=s,v=E(r.id,a),y=d(c),b=v===`agent`&&r.id===a.walletDetailsWalletId&&l?l.policy.directSigning:void 0,C=r.id===a.walletDetailsWalletId?l?.signerPolicy:void 0,w=r.readiness?.signer,T=r.providerId!==`local-socket-signer`||w?.networkReady===!0,O=w?.networkVersion??(typeof r.metadata?.networkVersion==`number`?r.metadata.networkVersion:void 0),M=r.providerId!==`local-socket-signer`||r.readiness?.ready===!0,oe=ee(r).includes(`solana`),N=v===`mining`?[{id:`sweep`,label:`Sweep`,title:`Mining-only sweep after SAT claims.`}]:v===`agent`?[{id:`caps`,label:`Caps`,title:`Limits used by chat, scheduled sends, swaps, and approved automation.`},{id:`schedule`,label:`Send`,title:`One Agent-wallet recurring send policy shared by chat and Wallet UI.`},{id:`automation`,label:`Auto`,title:`Stop or resume background wallet execution for this Agent wallet.`},{id:`skills`,label:`Skills`,title:`Allow reviewed skills to use this Agent wallet after separate skill grants.`}]:[{id:`caps`,label:`Caps`,title:`Vault guardrails for reviewed Wallet UI sends only.`}],I=a.policyPanel&&N.some(e=>e.id===a.policyPanel)?a.policyPanel:N[0]?.id??`caps`,R=i(a.recurringTransferCron??``),z=String(a.recurringTransferMint??``).trim(),B=z?`token`:`SOL`,V=e=>a.onPolicyDraftChange({recurringTransferCron:o({every:e.every??R.every,unit:e.unit??R.unit,time:e.time??R.time})});return e`
1853
1919
  <div class="wallet-card" title=${r.id}>
1854
1920
  <div class="wallet-card__header">
1855
1921
  <div class="wallet-card__identity">
1856
1922
  <div class="wallet-card__title-row">
1857
1923
  <div class="wallet-card__title">${r.name}</div>
1858
- ${te(r.id,a.federationBond,a.onNavigate)}
1859
- ${v===`mining`?re(a.miningProfile):t}
1860
- ${ie({walletId:r.id,role:v,props:a})}
1861
- ${ne({role:v,automationEnabled:b})}
1924
+ ${ne(r.id,a.federationBond,a.onNavigate)}
1925
+ ${v===`mining`?ie(a.miningProfile):t}
1926
+ ${ae({walletId:r.id,role:v,props:a})}
1927
+ ${re({role:v,automationEnabled:b})}
1862
1928
  </div>
1863
1929
  <div class="wallet-card__address-row">
1864
1930
  ${h?e`
@@ -1882,11 +1948,11 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
1882
1948
  class="wallet-icon-btn"
1883
1949
  title="Show wallet address"
1884
1950
  aria-label="Show wallet address"
1885
- @click=${()=>ke(g,`******`,h)}
1951
+ @click=${()=>Oe(g,`******`,h)}
1886
1952
  >
1887
1953
  <span class="wallet-copy-btn__icon">${n.eye}</span>
1888
1954
  </button>
1889
- ${X(h,`wallet address`)}
1955
+ ${ke(h,`wallet address`)}
1890
1956
  ${Z(Q(`solana`,`address`,h),`Open wallet address`)}
1891
1957
  </span>
1892
1958
  `:e`
@@ -1931,8 +1997,8 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
1931
1997
  ${Me(`SOL`,_,`neutral`,{title:`Solana`,onClick:r.addresses?.solana?()=>(a.onWalletBalanceWalletChange??a.onWalletDetailsWalletChange)(r.id):void 0})}
1932
1998
  <button
1933
1999
  class="btn small primary wallet-card__send-btn"
1934
- ?disabled=${!S||!k}
1935
- title=${k?`Send from this wallet`:`Receive-only: the role-safe deny-all baseline is active; install an owner-reviewed spending policy before sending`}
2000
+ ?disabled=${!S||!M}
2001
+ title=${M?`Send from this wallet`:`Setup incomplete: live signer key, role baseline, or network readiness is not confirmed`}
1936
2002
  @click=${()=>a.onSendModalOpen(r.id)}
1937
2003
  >
1938
2004
  Send
@@ -1957,13 +2023,13 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
1957
2023
  <button
1958
2024
  class="btn small"
1959
2025
  style="display: inline-flex; gap: 8px; align-items: center;"
1960
- ?disabled=${!S||!k}
2026
+ ?disabled=${!S||!M}
1961
2027
  @click=${()=>a.onSendModalOpen(r.id,n.id)}
1962
2028
  >
1963
- ${ye(n,20)}
2029
+ ${ve(n,20)}
1964
2030
  <span>${n.symbol}</span>
1965
2031
  <span class="muted"
1966
- >${q(n.amountDisplay)}</span
2032
+ >${J(n.amountDisplay)}</span
1967
2033
  >
1968
2034
  </button>
1969
2035
  ${n.program?Z(Q(`solana`,`address`,n.program),`Open ${n.symbol} mint`):t}
@@ -1980,14 +2046,14 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
1980
2046
  ${p?e`
1981
2047
  <div id="wallet-security-card" class="wallet-card-security">
1982
2048
  <div class="wallet-policy-tabs" role="tablist" aria-label="Wallet policy sections">
1983
- ${M.map(t=>e`
2049
+ ${N.map(t=>e`
1984
2050
  <button
1985
2051
  type="button"
1986
2052
  class="wallet-policy-tab"
1987
- data-active=${N===t.id?`true`:`false`}
2053
+ data-active=${I===t.id?`true`:`false`}
1988
2054
  title=${t.title}
1989
2055
  role="tab"
1990
- aria-selected=${N===t.id?`true`:`false`}
2056
+ aria-selected=${I===t.id?`true`:`false`}
1991
2057
  @click=${()=>a.onPolicyPanelChange?.(t.id)}
1992
2058
  >
1993
2059
  ${t.label}
@@ -2001,7 +2067,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2001
2067
  data-testid="wallet-signer-network-status"
2002
2068
  >
2003
2069
  <strong
2004
- >Signer RPC: ${T?`ready${E?` · version ${E}`:``}`:`not ready`}</strong
2070
+ >Signer RPC: ${T?`ready${O?` · version ${O}`:``}`:`not ready`}</strong
2005
2071
  >
2006
2072
  <div>
2007
2073
  Enter one primary RPC. The Go signer verifies its genesis;
@@ -2038,9 +2104,8 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2038
2104
  <strong>Native signer policy: ${C.state}</strong>
2039
2105
  ${C.state===`locked`?e`
2040
2106
  <div>
2041
- The role-safe deny-all baseline is active, so the wallet can receive but cannot send, swap, mine,
2042
- bond, or execute wallet-capable skills. Spending authority requires a separate owner-reviewed
2043
- policy; the Gateway cannot grant it silently.
2107
+ This pre-role-baseline wallet remains deny-all. Review its immutable role, then select Activate
2108
+ role baseline with the native wallet CLI. No root policy helper is required.
2044
2109
  </div>
2045
2110
  `:t}
2046
2111
  ${C.version&&C.hash?e`
@@ -2054,6 +2119,26 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2054
2119
  ${C.guidance?e`<div>${C.guidance}</div>`:t}
2055
2120
  </div>
2056
2121
  `:t}
2122
+ ${w?e`
2123
+ <div
2124
+ class="callout ${w.ready?`success`:`warn`}"
2125
+ style="margin-top: 10px"
2126
+ data-testid="wallet-live-readiness"
2127
+ >
2128
+ <strong
2129
+ >Role readiness:
2130
+ ${w.ready?`ready`:`setup incomplete`}</strong
2131
+ >
2132
+ <div>
2133
+ ${w.role} baseline v${w.baselineVersion}
2134
+ · ${w.operationLane}
2135
+ </div>
2136
+ <div>
2137
+ Policy v${w.policyVersion} · Network
2138
+ v${w.networkVersion}
2139
+ </div>
2140
+ </div>
2141
+ `:t}
2057
2142
  ${v===`vault`&&r.providerId===`local-socket-signer`?e`
2058
2143
  <div class="callout" style="margin-top: 10px">
2059
2144
  <strong>Vault approval device · ${y.summary}</strong>
@@ -2066,7 +2151,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2066
2151
  </div>
2067
2152
  </div>
2068
2153
  `:t}
2069
- ${v===`mining`?N===`sweep`?e`
2154
+ ${v===`mining`?I===`sweep`?e`
2070
2155
  <div class="field">
2071
2156
  <div class="wallet-card-security__grid">
2072
2157
  <label class="field">
@@ -2077,13 +2162,13 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2077
2162
  >
2078
2163
  <option
2079
2164
  value="disabled"
2080
- ?selected=${!O.enabled}
2165
+ ?selected=${!D.enabled}
2081
2166
  >
2082
2167
  Off
2083
2168
  </option>
2084
2169
  <option
2085
2170
  value="enabled"
2086
- ?selected=${O.enabled}
2171
+ ?selected=${D.enabled}
2087
2172
  >
2088
2173
  On
2089
2174
  </option>
@@ -2092,8 +2177,8 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2092
2177
  <label class="field">
2093
2178
  <span>Destination</span>
2094
2179
  <select
2095
- ?disabled=${a.settingsBusy||!O.enabled||!a.onMiningSatSweepChange}
2096
- @change=${e=>{let t=e.currentTarget.value;a.onMiningSatSweepChange?.(t===`__external__`?{destinationWalletId:void 0,destinationAddress:O.destinationAddress??``}:{destinationWalletId:t||void 0,destinationAddress:void 0})}}
2180
+ ?disabled=${a.settingsBusy||!D.enabled||!a.onMiningSatSweepChange}
2181
+ @change=${e=>{let t=e.currentTarget.value;a.onMiningSatSweepChange?.(t===`__external__`?{destinationWalletId:void 0,destinationAddress:D.destinationAddress??``}:{destinationWalletId:t||void 0,destinationAddress:void 0})}}
2097
2182
  >
2098
2183
  <option
2099
2184
  value="__external__"
@@ -2101,10 +2186,10 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2101
2186
  >
2102
2187
  External
2103
2188
  </option>
2104
- ${A.map(t=>e`
2189
+ ${j.map(t=>e`
2105
2190
  <option
2106
2191
  value=${t.id}
2107
- ?selected=${O.destinationWalletId===t.id}
2192
+ ?selected=${D.destinationWalletId===t.id}
2108
2193
  >
2109
2194
  ${t.name}
2110
2195
  </option>
@@ -2116,14 +2201,14 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2116
2201
  <span>Address</span>
2117
2202
  <input
2118
2203
  type="text"
2119
- .value=${O.destinationAddress??``}
2120
- ?disabled=${a.settingsBusy||!O.enabled||!a.onMiningSatSweepChange}
2204
+ .value=${D.destinationAddress??``}
2205
+ ?disabled=${a.settingsBusy||!D.enabled||!a.onMiningSatSweepChange}
2121
2206
  @change=${e=>a.onMiningSatSweepChange?.({destinationAddress:e.currentTarget.value.trim()||void 0,destinationWalletId:void 0})}
2122
2207
  placeholder="Solana address"
2123
2208
  />
2124
2209
  </label>
2125
2210
  `:t}
2126
- ${O.mode===`percentage`?e`
2211
+ ${D.mode===`percentage`?e`
2127
2212
  <label class="field">
2128
2213
  <span>Percent</span>
2129
2214
  <input
@@ -2131,8 +2216,8 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2131
2216
  min="1"
2132
2217
  max="100"
2133
2218
  step="1"
2134
- .value=${String(O.percentage??100)}
2135
- ?disabled=${a.settingsBusy||!O.enabled||!a.onMiningSatSweepChange}
2219
+ .value=${String(D.percentage??100)}
2220
+ ?disabled=${a.settingsBusy||!D.enabled||!a.onMiningSatSweepChange}
2136
2221
  @change=${e=>a.onMiningSatSweepChange?.({percentage:Math.max(1,Math.min(100,Number(e.currentTarget.value)||100))})}
2137
2222
  />
2138
2223
  </label>
@@ -2140,18 +2225,18 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2140
2225
  <label class="field">
2141
2226
  <span>Amount</span>
2142
2227
  <select
2143
- ?disabled=${a.settingsBusy||!O.enabled||!a.onMiningSatSweepChange}
2228
+ ?disabled=${a.settingsBusy||!D.enabled||!a.onMiningSatSweepChange}
2144
2229
  @change=${e=>a.onMiningSatSweepChange?.({mode:e.currentTarget.value===`percentage`?`percentage`:`all`})}
2145
2230
  >
2146
2231
  <option
2147
2232
  value="all"
2148
- ?selected=${O.mode!==`percentage`}
2233
+ ?selected=${D.mode!==`percentage`}
2149
2234
  >
2150
2235
  All
2151
2236
  </option>
2152
2237
  <option
2153
2238
  value="percentage"
2154
- ?selected=${O.mode===`percentage`}
2239
+ ?selected=${D.mode===`percentage`}
2155
2240
  >
2156
2241
  %
2157
2242
  </option>
@@ -2162,9 +2247,9 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2162
2247
  <input
2163
2248
  type="text"
2164
2249
  inputmode="decimal"
2165
- .value=${ae(O.minRaw??`1`)}
2166
- ?disabled=${a.settingsBusy||!O.enabled||!a.onMiningSatSweepChange}
2167
- @change=${e=>a.onMiningSatSweepChange?.({minRaw:oe(e.currentTarget.value)})}
2250
+ .value=${k(D.minRaw??`1`)}
2251
+ ?disabled=${a.settingsBusy||!D.enabled||!a.onMiningSatSweepChange}
2252
+ @change=${e=>a.onMiningSatSweepChange?.({minRaw:A(e.currentTarget.value)})}
2168
2253
  placeholder="1"
2169
2254
  />
2170
2255
  </label>
@@ -2173,17 +2258,17 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2173
2258
  <input
2174
2259
  type="text"
2175
2260
  inputmode="decimal"
2176
- .value=${ae(O.keepRaw??`0`)}
2177
- ?disabled=${a.settingsBusy||!O.enabled||!a.onMiningSatSweepChange}
2178
- @change=${e=>a.onMiningSatSweepChange?.({keepRaw:oe(e.currentTarget.value)})}
2261
+ .value=${k(D.keepRaw??`0`)}
2262
+ ?disabled=${a.settingsBusy||!D.enabled||!a.onMiningSatSweepChange}
2263
+ @change=${e=>a.onMiningSatSweepChange?.({keepRaw:A(e.currentTarget.value)})}
2179
2264
  placeholder="0"
2180
2265
  />
2181
2266
  </label>
2182
2267
  </div>
2183
2268
  </div>
2184
2269
  `:t:e`
2185
- ${l&&N===`caps`?ve({props:a,settings:l,policyDisplay:w,cardRole:v,selectedWalletId:r.id,cardWalletCanSpendSolana:j,selectedWalletTokens:m,canEditPolicy:x}):t}
2186
- ${v===`agent`&&N===`schedule`?e`
2270
+ ${l&&I===`caps`?_e({props:a,settings:l,policyDisplay:te,cardRole:v,selectedWalletId:r.id,cardWalletCanSpendSolana:oe,selectedWalletTokens:m,canEditPolicy:x}):t}
2271
+ ${v===`agent`&&I===`schedule`?e`
2187
2272
  <div class="field">
2188
2273
  <div class="wallet-card-security__grid">
2189
2274
  <label class="field">
@@ -2215,7 +2300,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2215
2300
  @input=${e=>a.onPolicyDraftChange({recurringTransferMint:e.currentTarget.value})}
2216
2301
  />
2217
2302
  </label>
2218
- ${R?e`
2303
+ ${z?e`
2219
2304
  <label class="field">
2220
2305
  <span>Decimals</span>
2221
2306
  <input
@@ -2252,7 +2337,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2252
2337
  <label class="field">
2253
2338
  <span>Minimum</span>
2254
2339
  <input
2255
- placeholder=${`0.01 ${z}`}
2340
+ placeholder=${`0.01 ${B}`}
2256
2341
  .value=${a.recurringTransferMinAmount}
2257
2342
  ?disabled=${a.settingsBusy||!x}
2258
2343
  @input=${e=>a.onPolicyDraftChange({recurringTransferMinAmount:e.currentTarget.value})}
@@ -2261,7 +2346,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2261
2346
  <label class="field">
2262
2347
  <span>Keep</span>
2263
2348
  <input
2264
- placeholder=${`0 ${z}`}
2349
+ placeholder=${`0 ${B}`}
2265
2350
  .value=${a.recurringTransferKeepAmount}
2266
2351
  ?disabled=${a.settingsBusy||!x}
2267
2352
  @input=${e=>a.onPolicyDraftChange({recurringTransferKeepAmount:e.currentTarget.value})}
@@ -2271,7 +2356,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2271
2356
  <label class="field">
2272
2357
  <span>Amount</span>
2273
2358
  <input
2274
- placeholder=${`0.1 ${z}`}
2359
+ placeholder=${`0.1 ${B}`}
2275
2360
  .value=${a.recurringTransferAmount}
2276
2361
  ?disabled=${a.settingsBusy||!x}
2277
2362
  @input=${e=>a.onPolicyDraftChange({recurringTransferAmount:e.currentTarget.value})}
@@ -2285,17 +2370,17 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2285
2370
  min="1"
2286
2371
  step="1"
2287
2372
  placeholder="1"
2288
- .value=${I.every}
2373
+ .value=${R.every}
2289
2374
  ?disabled=${a.settingsBusy||!x}
2290
- @input=${e=>B({every:e.currentTarget.value})}
2375
+ @input=${e=>V({every:e.currentTarget.value})}
2291
2376
  />
2292
2377
  </label>
2293
2378
  <label class="field">
2294
2379
  <span>Unit</span>
2295
2380
  <select
2296
- .value=${I.unit}
2381
+ .value=${R.unit}
2297
2382
  ?disabled=${a.settingsBusy||!x}
2298
- @change=${e=>B({unit:e.currentTarget.value})}
2383
+ @change=${e=>V({unit:e.currentTarget.value})}
2299
2384
  >
2300
2385
  <option value="minutes">minutes</option>
2301
2386
  <option value="hours">hours</option>
@@ -2303,14 +2388,14 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2303
2388
  <option value="months">months</option>
2304
2389
  </select>
2305
2390
  </label>
2306
- ${I.unit===`days`||I.unit===`months`?e`
2391
+ ${R.unit===`days`||R.unit===`months`?e`
2307
2392
  <label class="field">
2308
2393
  <span>At</span>
2309
2394
  <input
2310
2395
  type="time"
2311
- .value=${I.time}
2396
+ .value=${R.time}
2312
2397
  ?disabled=${a.settingsBusy||!x}
2313
- @input=${e=>B({time:e.currentTarget.value})}
2398
+ @input=${e=>V({time:e.currentTarget.value})}
2314
2399
  />
2315
2400
  </label>
2316
2401
  `:t}
@@ -2340,14 +2425,14 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2340
2425
  ${a.settingsBusy?`Saving...`:`Save`}
2341
2426
  </button>
2342
2427
  </div>
2343
- ${I.custom?e`
2428
+ ${R.custom?e`
2344
2429
  <div class="wallet-security-note" style="margin-top: 8px">
2345
2430
  Existing custom schedule is preserved until you edit Every, Unit, or At.
2346
2431
  </div>
2347
2432
  `:t}
2348
2433
  </div>
2349
2434
  `:t}
2350
- ${v===`agent`&&N===`automation`?e`
2435
+ ${v===`agent`&&I===`automation`?e`
2351
2436
  ${e`
2352
2437
  <div class="field">
2353
2438
  <div class="wallet-spend-limit-row">
@@ -2373,7 +2458,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2373
2458
  </div>
2374
2459
  `}
2375
2460
  `:t}
2376
- ${v===`agent`&&N===`skills`?e`
2461
+ ${v===`agent`&&I===`skills`?e`
2377
2462
  ${e`
2378
2463
  <div class="field">
2379
2464
  <div class="wallet-spend-limit-row">
@@ -2447,7 +2532,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2447
2532
  <div>Created</div>
2448
2533
  <div>Action</div>
2449
2534
  </div>
2450
- ${a.approvals.map(n=>{let i=se({request:n,balances:a.balances}),o=ce({request:n,namedWallets:a.namedWallets}),s=Array.isArray(n.payload.routeProgramIds)?n.payload.routeProgramIds.map(e=>String(e).trim()).filter(Boolean):[];return e`
2535
+ ${a.approvals.map(n=>{let i=V({request:n,balances:a.balances}),o=se({request:n,namedWallets:a.namedWallets}),s=Array.isArray(n.payload.routeProgramIds)?n.payload.routeProgramIds.map(e=>String(e).trim()).filter(Boolean):[];return e`
2451
2536
  <div
2452
2537
  id=${r(`wallet-approval`,n.id)}
2453
2538
  class="table-row"
@@ -2458,15 +2543,15 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2458
2543
  <div class="muted" style="font-size: 0.8em; margin-top: 4px;">
2459
2544
  expires ${new Date(n.expiresAt).toLocaleString()}
2460
2545
  </div>
2461
- ${le({request:n,display:i,endpoints:o})}
2462
- ${ue(n)}
2546
+ ${ce({request:n,display:i,endpoints:o})}
2547
+ ${le(n)}
2463
2548
  </div>
2464
2549
  <div>
2465
2550
  <div class="row" style="gap: 8px; align-items: center;">
2466
2551
  <span
2467
2552
  style="width: 16px; height: 16px; display: inline-flex; color: ${n.status===`failed`||n.status===`rejected`||n.status===`expired`?`rgba(248,113,113,0.95)`:n.status===`executed`||n.status===`approved`?`rgba(104,211,145,0.95)`:`rgba(96,165,250,0.95)`};"
2468
2553
  >
2469
- ${Ce(n.status)}
2554
+ ${Se(n.status)}
2470
2555
  </span>
2471
2556
  <span style="font-size: 0.9em; font-weight: 600; text-transform: lowercase;">
2472
2557
  ${n.status}
@@ -2506,14 +2591,14 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2506
2591
  `:t}
2507
2592
  ${s.length>0?e`
2508
2593
  <div class="muted" style="font-size: 0.76em; margin-top: 4px;">
2509
- route ${s.map(e=>Y(e,4,4)).join(`, `)}
2594
+ route ${s.map(e=>X(e,4,4)).join(`, `)}
2510
2595
  </div>
2511
2596
  `:t}
2512
2597
  </div>
2513
2598
  <div style="min-width: 0;">
2514
2599
  ${o.fromAddress?e`
2515
2600
  <div class="mono" style="font-size: 0.82em;">
2516
- ${Y(o.fromAddress)}
2601
+ ${X(o.fromAddress)}
2517
2602
  </div>
2518
2603
  `:e`
2519
2604
  <div class="muted">—</div>
@@ -2522,7 +2607,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2522
2607
  <div style="min-width: 0;">
2523
2608
  ${o.toAddress?e`
2524
2609
  <div class="mono" style="font-size: 0.82em;">
2525
- ${Y(o.toAddress)}
2610
+ ${X(o.toAddress)}
2526
2611
  </div>
2527
2612
  `:e`
2528
2613
  <div class="muted">—</div>
@@ -2553,7 +2638,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2553
2638
  </span>
2554
2639
  `:n.result?.txHash?e`
2555
2640
  <span class="mono muted" style="font-size: 0.8em;">
2556
- ${Y(n.result.txHash)}
2641
+ ${X(n.result.txHash)}
2557
2642
  </span>
2558
2643
  `:e`
2559
2644
  <span class="muted">—</span>
@@ -2603,12 +2688,12 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2603
2688
  </div>
2604
2689
  </div>
2605
2690
  <div class="wallet-activity-list">
2606
- ${b.map(n=>{let r=n.details??{},i=N(r.chain),o=i===`solana`?I(r,`program`):``,s=z({details:r,balances:a.balances}),c=j(r.to,`n/a`),l=j(r.txHash||r.txId,``),u=j(r.reason,``),d=j(r.orderId,``),f=j(r.vaultPubkey,``),p=j(r.executionProvider,``),m=Fe(n.action);return e`
2691
+ ${b.map(n=>{let r=n.details??{},i=N(r.chain),o=i===`solana`?I(r,`program`):``,s=z({details:r,balances:a.balances}),c=M(r.to,`n/a`),l=M(r.txHash||r.txId,``),u=M(r.reason,``),d=M(r.orderId,``),f=M(r.vaultPubkey,``),p=M(r.executionProvider,``),m=Fe(n.action);return e`
2607
2692
  <div class="wallet-activity-item" data-tone=${m}>
2608
2693
  <div class="wallet-activity-item__head">
2609
2694
  <div class="wallet-activity-item__title">
2610
- <span style="color: ${m===`danger`?`var(--danger)`:m===`success`?`var(--ok)`:m===`warn`?`var(--warn)`:`var(--muted)`};">${we(n.action)}</span>
2611
- <span>${Se(n)}</span>
2695
+ <span style="color: ${m===`danger`?`var(--danger)`:m===`success`?`var(--ok)`:m===`warn`?`var(--warn)`:`var(--muted)`};">${Ce(n.action)}</span>
2696
+ <span>${xe(n)}</span>
2612
2697
  </div>
2613
2698
  <div class="wallet-activity-item__time">
2614
2699
  ${new Date(n.at).toLocaleString()}
@@ -2616,17 +2701,17 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2616
2701
  </div>
2617
2702
  <div class="wallet-activity-item__facts">
2618
2703
  ${o?t:e`<span class="wallet-status-chip"
2619
- >${i?M(i):`n/a`}</span
2704
+ >${i?oe(i):`n/a`}</span
2620
2705
  >`}
2621
2706
  <span class="wallet-status-chip">${s}</span>
2622
2707
  ${p?e`<span class="wallet-status-chip">${p}</span>`:t}
2623
2708
  </div>
2624
2709
  <div class="wallet-activity-item__rows">
2625
- ${c===`n/a`?t:$({label:`To`,value:Y(c,10,8),rawValue:c,copyLabel:`destination address`,href:Q(i,`address`,c)})}
2626
- ${o?$({label:`Mint`,value:Y(o,10,8),rawValue:o,copyLabel:`token mint`,href:Q(`solana`,`address`,o)}):t}
2627
- ${d?$({label:`Order`,value:Y(d,10,8),rawValue:d,copyLabel:`order id`}):t}
2628
- ${f?$({label:`Vault`,value:Y(f,10,8),rawValue:f,copyLabel:`vault address`,href:Q(`solana`,`address`,f)}):t}
2629
- ${l?$({label:`Tx`,value:Y(l,10,8),rawValue:l,copyLabel:`transaction hash`,href:Q(i,`tx`,l)}):u?e`<div class="wallet-meta-row">
2710
+ ${c===`n/a`?t:$({label:`To`,value:X(c,10,8),rawValue:c,copyLabel:`destination address`,href:Q(i,`address`,c)})}
2711
+ ${o?$({label:`Mint`,value:X(o,10,8),rawValue:o,copyLabel:`token mint`,href:Q(`solana`,`address`,o)}):t}
2712
+ ${d?$({label:`Order`,value:X(d,10,8),rawValue:d,copyLabel:`order id`}):t}
2713
+ ${f?$({label:`Vault`,value:X(f,10,8),rawValue:f,copyLabel:`vault address`,href:Q(`solana`,`address`,f)}):t}
2714
+ ${l?$({label:`Tx`,value:X(l,10,8),rawValue:l,copyLabel:`transaction hash`,href:Q(i,`tx`,l)}):u?e`<div class="wallet-meta-row">
2630
2715
  <span class="wallet-meta-row__label">Note</span>
2631
2716
  <span class="wallet-meta-row__value">${u}</span>
2632
2717
  <span class="wallet-meta-row__actions"></span>
@@ -2641,7 +2726,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2641
2726
  </div>
2642
2727
  `:t}
2643
2728
  </section>
2644
- `}function Le(n){if(!n.sendModalVisible)return t;let r=n.status?.capabilities?.canSend??!0,i=n.namedWallets.find(e=>e.id===n.sendCreateForm.walletId),{selected:a,options:o}=be(i,n),s=[...new Set(o.map(e=>e.chain))],c=a?.chain??s[0]??n.sendCreateForm.chain,l=s.includes(n.sendCreateForm.chain)?n.sendCreateForm.chain:c,u=K(i,l),d=a&&a.chain===l?a:void 0,f=d?.symbol||`SOL`,p=i?`${i.name} (@wallet:${i.id})`:`Default wallet`;return e`
2729
+ `}function Le(n){if(!n.sendModalVisible)return t;let r=n.status?.capabilities?.canSend??!0,i=n.namedWallets.find(e=>e.id===n.sendCreateForm.walletId),{selected:a,options:o}=ye(i,n),s=[...new Set(o.map(e=>e.chain))],c=a?.chain??s[0]??n.sendCreateForm.chain,l=s.includes(n.sendCreateForm.chain)?n.sendCreateForm.chain:c,u=q(i,l),d=a&&a.chain===l?a:void 0,f=d?.symbol||`SOL`,p=i?`${i.name} (@wallet:${i.id})`:`Default wallet`;return e`
2645
2730
  <div class="modal-overlay" @click=${n.onSendModalClose}>
2646
2731
  <div class="modal-card card" @click=${e=>e.stopPropagation()}>
2647
2732
  <div class="row" style="justify-content: space-between; align-items: center; margin-bottom: 16px;">
@@ -2650,7 +2735,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2650
2735
  <div class="muted" style="margin-top: 6px;">
2651
2736
  From ${p}
2652
2737
  ${u?e`<span class="mono" style="margin-left: 8px;">
2653
- ${Y(u,4,4)}
2738
+ ${X(u,4,4)}
2654
2739
  </span>`:t}
2655
2740
  </div>
2656
2741
  </div>
@@ -2668,7 +2753,7 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2668
2753
  >
2669
2754
  ${o.map(t=>e`
2670
2755
  <option value=${t.id} ?selected=${t.id===d?.id}>
2671
- ${t.symbol}${t.name&&t.name!==t.symbol?` · ${t.name}`:``} · ${q(t.amountDisplay)}
2756
+ ${t.symbol}${t.name&&t.name!==t.symbol?` · ${t.name}`:``} · ${J(t.amountDisplay)}
2672
2757
  </option>
2673
2758
  `)}
2674
2759
  </select>
@@ -2812,5 +2897,5 @@ import{a as e,r as t,t as n}from"./icons-D3-vEvih.js";import{n as r}from"./task-
2812
2897
  }
2813
2898
  }
2814
2899
  </style>
2815
- `}export{u as describeAdminControlShortcut,E as describeAgentDefaultAction,d as describeVaultSignerApproval,m as describeWalletAutomationPolicySummary,w as describeWalletRoleBadges,f as describeWalletSendFlow,g as hasWalletBalanceValue,k as orderWalletsForDisplay,Ie as renderWallet,h as resolveActiveMiningWalletId,C as resolveOperatorWalletRoles};
2816
- //# sourceMappingURL=wallet-ByKBcYhm.js.map
2900
+ `}export{u as describeAdminControlShortcut,T as describeAgentDefaultAction,d as describeVaultSignerApproval,m as describeWalletAutomationPolicySummary,te as describeWalletRoleBadges,f as describeWalletSendFlow,g as hasWalletBalanceValue,O as orderWalletsForDisplay,Ie as renderWallet,h as resolveActiveMiningWalletId,C as resolveOperatorWalletRoles};
2901
+ //# sourceMappingURL=wallet-CRIhDQbW.js.map