@opensesame-labs/web-pwa 0.0.0-alpha.0

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 (323) hide show
  1. package/README.md +5 -0
  2. package/bin/serve.mjs +60 -0
  3. package/dist/404.html +35 -0
  4. package/dist/about.html +37 -0
  5. package/dist/assets/AmbientAuthPanel-CwFZygJY.js +1 -0
  6. package/dist/assets/AppShell-OiN-7dB4.css +1 -0
  7. package/dist/assets/AppShell-xqEu_Cfz.js +1 -0
  8. package/dist/assets/ApproveScreen-Dj995x0T.js +1 -0
  9. package/dist/assets/BackupEnableSwitch-DwKTWzBG.js +1 -0
  10. package/dist/assets/CoachHud-9Bqu4Gtl.css +1 -0
  11. package/dist/assets/CoachHud-DHqFf7ez.js +1 -0
  12. package/dist/assets/Crumbs-BQsauYj_.js +1 -0
  13. package/dist/assets/DraftSuggestions-DT51r14S.js +2 -0
  14. package/dist/assets/DraftSuggestions-DuLxCyqM.css +1 -0
  15. package/dist/assets/EmptyTip-DnxQjLsP.js +1 -0
  16. package/dist/assets/FeatureSections-BG-JsWID.js +1 -0
  17. package/dist/assets/FormatHintMatch-QX0JkGnd.js +1 -0
  18. package/dist/assets/HealthPanel-DXnPgdo5.js +1 -0
  19. package/dist/assets/IdentityConnectionSignIn-Bg53RjtJ.js +2 -0
  20. package/dist/assets/InteractionScreen-BCh2d-a4.js +1 -0
  21. package/dist/assets/InvokeScreen-C-kFFYVF.js +1 -0
  22. package/dist/assets/InvokeScreen-CsvSkues.css +1 -0
  23. package/dist/assets/ItemDetail-DCzWiS4b.js +1 -0
  24. package/dist/assets/ItemEditor-BQp0D0PB.js +1 -0
  25. package/dist/assets/KeybindingsPanels-Buh32SBq.css +1 -0
  26. package/dist/assets/KeybindingsPanels-CAhCFduu.js +1 -0
  27. package/dist/assets/MethodPicker-CqQTyAaT.js +1 -0
  28. package/dist/assets/MfaStep-DvSV4q5P.js +1 -0
  29. package/dist/assets/OpenFileKey-DKFq5mOf.js +1 -0
  30. package/dist/assets/PageTreeBranch-OgsaK684.js +1 -0
  31. package/dist/assets/SaveRequestScreen-exu7HwhA.js +1 -0
  32. package/dist/assets/SettingsSection-BHTAhGaz.css +1 -0
  33. package/dist/assets/SettingsSection-BfxiCHWn.js +2 -0
  34. package/dist/assets/SiopAuthorize-D_OIu8gb.js +1 -0
  35. package/dist/assets/SupportLauncher-DgUajogl.css +1 -0
  36. package/dist/assets/SupportLauncher-DlkkaWxf.js +2 -0
  37. package/dist/assets/SupportPanel-W7lTTCHo.js +1 -0
  38. package/dist/assets/VaultSection-BUcbIjl5.css +1 -0
  39. package/dist/assets/VaultSection-DuzGVD_1.js +1 -0
  40. package/dist/assets/WalletSection-C4CTvIi9.js +1 -0
  41. package/dist/assets/agent-ag-ui-DRbKYcn6.js +2 -0
  42. package/dist/assets/agent-boundary-D0s3Xear.js +2 -0
  43. package/dist/assets/agent-prompt-api-BiYrmT5D.js +1 -0
  44. package/dist/assets/agent-provider-BiJcKH7o.js +1 -0
  45. package/dist/assets/binary-encoding-D9rJ9tvs.js +1 -0
  46. package/dist/assets/bitwarden-native.worker-CFoAF-yw.js +1 -0
  47. package/dist/assets/bitwarden-secrets.worker-BfAQLREw.js +1 -0
  48. package/dist/assets/bitwarden_wasm_bg.wasm-B2_HqYUA.gz +0 -0
  49. package/dist/assets/browser-pslP6-1t.js +1 -0
  50. package/dist/assets/bucket-boot-4cPKWVva.js +1 -0
  51. package/dist/assets/bucket-saved-vQCiVvN_.js +1 -0
  52. package/dist/assets/byo-B-SNpHiS.js +1 -0
  53. package/dist/assets/byo-CDLRauwG.css +1 -0
  54. package/dist/assets/canary-owner-effects-CY2GR4d-.js +1 -0
  55. package/dist/assets/cap-access.authority-D-B2rtcO.js +1 -0
  56. package/dist/assets/cap-agents.surrogate-credentials-7eqyWZfT.js +1 -0
  57. package/dist/assets/cap-agents.webmcp-Bve0G9t3.js +2 -0
  58. package/dist/assets/cap-ai.password-reset-rh9CIhu-.js +1 -0
  59. package/dist/assets/cap-connectors.external-dKuiKE5J.js +1 -0
  60. package/dist/assets/cap-enterprise.ca-administration-CirJdAWC.js +1 -0
  61. package/dist/assets/cap-enterprise.directory-provisioning-ixTSdLjk.js +1 -0
  62. package/dist/assets/cap-identity.ambient-sso-Bfz5okEX.js +1 -0
  63. package/dist/assets/cap-identity.claim-different-link-C0NXeZQE.js +1 -0
  64. package/dist/assets/cap-identity.federation-Di6GjTkh.js +1 -0
  65. package/dist/assets/cap-identity.local-iam-DdhiDQdb.js +2 -0
  66. package/dist/assets/cap-identity.siop-C80liHvH.js +1 -0
  67. package/dist/assets/cap-networking.tailnet-c5h7F7pL.js +1 -0
  68. package/dist/assets/cap-networking.tailnet-devices-BeZz-plo.js +1 -0
  69. package/dist/assets/cap-notifications.local-QwuLGxJM.js +1 -0
  70. package/dist/assets/cap-notifications.routing-CF-Wp35c.js +1 -0
  71. package/dist/assets/cap-notifications.web-push-DAddcIp-.js +1 -0
  72. package/dist/assets/cap-sharing.household-BeYPmwj5.js +1 -0
  73. package/dist/assets/cap-sharing.live-BkP10O4Q.js +2 -0
  74. package/dist/assets/cap-sharing.relay-Clx_tuEX.js +1 -0
  75. package/dist/assets/cap-sharing.trusted-contacts-D7bWujCh.js +1 -0
  76. package/dist/assets/cap-storage.encrypted-search-PLxhoql0.js +1 -0
  77. package/dist/assets/cap-support.local-ai-3PHedffw.js +1 -0
  78. package/dist/assets/cap-support.remote-ai-CmtCh9L6.js +1 -0
  79. package/dist/assets/cap-telemetry.external-BF6Csk9L.js +1 -0
  80. package/dist/assets/cap-vault.browser-autofill-CdS4F8Xw.js +1 -0
  81. package/dist/assets/cap-vault.certificate-records-Br6SdLtm.js +1 -0
  82. package/dist/assets/cap-vault.derived-records-CJXFAVNG.js +1 -0
  83. package/dist/assets/cap-vault.environments-CfpmRCF-.js +1 -0
  84. package/dist/assets/cap-vault.passkey-records-kB9UoKJ4.js +1 -0
  85. package/dist/assets/cap-vault.security-checks-BXzOBUjO.js +1 -0
  86. package/dist/assets/cap-wallet.spending-BGifVwmx.js +1 -0
  87. package/dist/assets/catalog-Y21H0gVA.js +1 -0
  88. package/dist/assets/certification_request-yoK4-cIl.js +1 -0
  89. package/dist/assets/certs-CDCfMuEi.js +1 -0
  90. package/dist/assets/cli-app-integration-crypto-TwyER0q4.js +2 -0
  91. package/dist/assets/commonjs-runtime-R6OqCcd0.js +1 -0
  92. package/dist/assets/compartment-guard-D3FuKM8N.js +1 -0
  93. package/dist/assets/configured-runtime-qg0cjMOO.js +1 -0
  94. package/dist/assets/connect-plan-ClXbb_FT.js +1 -0
  95. package/dist/assets/connections-CNmhCNAV.js +1 -0
  96. package/dist/assets/connectivity-monitor-B0ueE5HQ.js +1 -0
  97. package/dist/assets/connector-directory-D47kqlDJ.css +1 -0
  98. package/dist/assets/connector-directory-gjDOqgWh.js +1 -0
  99. package/dist/assets/connector-marks-BsMcGRbV.js +1 -0
  100. package/dist/assets/connector-settings-CBJ6GX5X.js +1 -0
  101. package/dist/assets/consent-CcqmRPoB.js +1 -0
  102. package/dist/assets/context-CL4-cwvA.js +1 -0
  103. package/dist/assets/context-DQQZvpeW.js +1 -0
  104. package/dist/assets/device-identity-carry-XMZRU4oW.js +1 -0
  105. package/dist/assets/device-identity-host-Bc5g7ie-.js +1 -0
  106. package/dist/assets/device-inbox-BoaNI30L.js +1 -0
  107. package/dist/assets/directory-panels-DNhzC0ld.js +1 -0
  108. package/dist/assets/directory-panels-DiZjkKtX.css +1 -0
  109. package/dist/assets/directory-signin-model-BfxENbC3.js +1 -0
  110. package/dist/assets/drop-open-BjgdLxWM.js +2 -0
  111. package/dist/assets/entra-instances-NyEKYI5c.js +1 -0
  112. package/dist/assets/features-9FeW22VH.js +1 -0
  113. package/dist/assets/federation-configured-restoration-DWAXgzcz.js +1 -0
  114. package/dist/assets/files-Bc2ZE3YH.js +1 -0
  115. package/dist/assets/gate-seat-D6oRkKUH.css +1 -0
  116. package/dist/assets/gate-seat-DHBrLaMG.js +2 -0
  117. package/dist/assets/github-app-local-B-4pPsY4.js +1 -0
  118. package/dist/assets/hosted-identity-rail-CUw0rn2T.css +1 -0
  119. package/dist/assets/hosted-identity-rail-Dv05NPNo.js +1 -0
  120. package/dist/assets/hosted-model-authority-CcNPE44H.js +1 -0
  121. package/dist/assets/hosted-model-protocol-B8j_voAG.js +1 -0
  122. package/dist/assets/iam-0IMZ11b6.css +1 -0
  123. package/dist/assets/iam-zBfzStfy.js +1 -0
  124. package/dist/assets/identity-BVf8yWa4.js +1 -0
  125. package/dist/assets/identity-DrfyABP-.css +1 -0
  126. package/dist/assets/identity-view-paths-Bi1yigZk.js +1 -0
  127. package/dist/assets/idp-presets-B1M-P0Ek.js +1 -0
  128. package/dist/assets/index-B6LVfIPY.js +1 -0
  129. package/dist/assets/index-BDSP-mCB.js +1 -0
  130. package/dist/assets/index-DGpAAq0f.js +1 -0
  131. package/dist/assets/index-browser-Cl3nb4Uk.js +1 -0
  132. package/dist/assets/install-DvNMSThj.js +1 -0
  133. package/dist/assets/item-contributions-BNmtlrGT.js +2 -0
  134. package/dist/assets/item-contributions-DNpnHRuL.css +1 -0
  135. package/dist/assets/item-secret-update-BGxSkyWF.js +1 -0
  136. package/dist/assets/item-type-pack-account-CoqotdBn.js +1 -0
  137. package/dist/assets/item-type-pack-address-CuEhIEN8.js +1 -0
  138. package/dist/assets/item-type-pack-api-credential-2taJJvyo.js +1 -0
  139. package/dist/assets/item-type-pack-api-key-BtsbWNqK.js +1 -0
  140. package/dist/assets/item-type-pack-authenticator-C10FbI_v.js +1 -0
  141. package/dist/assets/item-type-pack-bank-account-C7tahN_l.js +1 -0
  142. package/dist/assets/item-type-pack-card-DI2dXCYa.js +1 -0
  143. package/dist/assets/item-type-pack-contact-C8PeT6f9.js +1 -0
  144. package/dist/assets/item-type-pack-crypto-wallet-Sfg8ziqc.js +1 -0
  145. package/dist/assets/item-type-pack-database-Dy7ScLs9.js +1 -0
  146. package/dist/assets/item-type-pack-drivers-license-vMew977g.js +1 -0
  147. package/dist/assets/item-type-pack-health-insurance-DUixDMZj.js +1 -0
  148. package/dist/assets/item-type-pack-identity-document-FU9zx609.js +1 -0
  149. package/dist/assets/item-type-pack-membership-D_NYNr9q.js +1 -0
  150. package/dist/assets/item-type-pack-note-B3DY9bUR.js +1 -0
  151. package/dist/assets/item-type-pack-oauth-client-DMhUuM7e.js +1 -0
  152. package/dist/assets/item-type-pack-passport-B8VaXkBH.js +1 -0
  153. package/dist/assets/item-type-pack-password-D--bKPPZ.js +1 -0
  154. package/dist/assets/item-type-pack-server-BwQMhxjI.js +1 -0
  155. package/dist/assets/item-type-pack-software-license-CG2Bi2-4.js +1 -0
  156. package/dist/assets/item-type-pack-ssh-key-Cf4KqR5v.js +1 -0
  157. package/dist/assets/item-type-pack-token-Cfp58zHW.js +1 -0
  158. package/dist/assets/item-type-pack-wifi-DlJBEYLH.js +1 -0
  159. package/dist/assets/kdbxweb-Deb8D9Lv.js +1 -0
  160. package/dist/assets/linearRedirect-Cac5chv5.js +1 -0
  161. package/dist/assets/listing-page-B-c8QQVp.js +1 -0
  162. package/dist/assets/live-mqtt-BaSKU8QX.js +1 -0
  163. package/dist/assets/live-nats-CsIvuPj3.js +1 -0
  164. package/dist/assets/live-nostr-BfmabjiE.js +1 -0
  165. package/dist/assets/live-transport-files-DQCGPnPz.js +1 -0
  166. package/dist/assets/live-transport-files-Zxaw-sAI.css +1 -0
  167. package/dist/assets/local-ai-sdk-entry-Dq4Sm2_e.js +1 -0
  168. package/dist/assets/local-applications-rigvedS6.js +2 -0
  169. package/dist/assets/local-directory-bootstrap-NwIMPDrD.js +1 -0
  170. package/dist/assets/local-notifications-files-CWGvPHb8.js +1 -0
  171. package/dist/assets/local-share-grants-approvals-C89RIn08.js +1 -0
  172. package/dist/assets/local-vault-sessions-CGv9AsFj.js +1 -0
  173. package/dist/assets/main-BKK5N8Uh.css +1 -0
  174. package/dist/assets/main-BrkS-iow.js +2 -0
  175. package/dist/assets/merge-C8VYouYu.js +1 -0
  176. package/dist/assets/model-key-state-NiiWojtT.js +1 -0
  177. package/dist/assets/model-provider-B6oAnQX9.js +1 -0
  178. package/dist/assets/msalRedirect-CsZOSL-b.js +1 -0
  179. package/dist/assets/native-auth-return-BTXjvSvx.js +1 -0
  180. package/dist/assets/native-catalog-status-INsDvLpU.js +1 -0
  181. package/dist/assets/native-google-capability-BVj1mBPb.js +1 -0
  182. package/dist/assets/native-identity-admission-C4ZFillF.js +1 -0
  183. package/dist/assets/native-implicit-session-B9CuYTBA.js +1 -0
  184. package/dist/assets/native-oauth-http-BDqv664F.js +1 -0
  185. package/dist/assets/native-oauth-resource-runtime-D9u6_l-d.js +1 -0
  186. package/dist/assets/native-saml-DgVO7f2_.js +1 -0
  187. package/dist/assets/native-worker-bitwarden-native-contract-4175b124-DCuX5Y-I.js +1 -0
  188. package/dist/assets/native-worker-bitwarden-native-network-protocol-2ec12c2c-DdlqONg5.js +1 -0
  189. package/dist/assets/native-worker-bitwarden-native-worker-protocol-f491b626-C1Dz2Mxy.js +1 -0
  190. package/dist/assets/native-worker-bitwarden-worker-protocol-c9bedea4-CgZDhS6p.js +1 -0
  191. package/dist/assets/native-worker-bytes-a0e18d71-DFmKzL3P.js +1 -0
  192. package/dist/assets/native-worker-hash-wasm-9cbb16de-Bp4uJJy_.js +1 -0
  193. package/dist/assets/native-worker-levischuck-tiny-cbor-d8381e8f-BEl3rArG.js +1 -0
  194. package/dist/assets/native-worker-noble-ciphers-708367a7-BPuD3lXB.js +1 -0
  195. package/dist/assets/native-worker-noble-hashes-b1a58353-IgGIMWEC.js +1 -0
  196. package/dist/assets/native-worker-wasm-gzip-asset-47456844-DSWTIKdX.js +1 -0
  197. package/dist/assets/native-worker-zod-5c0ed887-B342B6ko.js +1 -0
  198. package/dist/assets/native-worker-zod-jitless-ba55e4a3-DZHC6DC7.js +1 -0
  199. package/dist/assets/nativeConnectorRedirect-Cac5chv5.js +1 -0
  200. package/dist/assets/nativeGoogleConsent-By04fGU0.js +1 -0
  201. package/dist/assets/nativeImplicitRedirect-CSQMi-YW.js +1 -0
  202. package/dist/assets/noble-crypto-Mv8l2A7D.js +1 -0
  203. package/dist/assets/notifications-CJoypYjy.css +1 -0
  204. package/dist/assets/notifications-DlWvurGh.js +1 -0
  205. package/dist/assets/onepassword-artifacts-DnlvryeZ.js +1 -0
  206. package/dist/assets/onepassword-sdk.worker-CcSZlR8e.js +1 -0
  207. package/dist/assets/os-logo-Dhy2KbxY.ttf +0 -0
  208. package/dist/assets/pane-trail-dW-2RSUm.js +1 -0
  209. package/dist/assets/password-workflows-Cmir8qky.js +1 -0
  210. package/dist/assets/payload-CVz3G9cA.js +1 -0
  211. package/dist/assets/peer-trust-CZzPSQ-X.js +1 -0
  212. package/dist/assets/plugin-activation-BLVTpDLX.css +1 -0
  213. package/dist/assets/plugin-activation-B_0fIk_I.js +1 -0
  214. package/dist/assets/portable-drop-CD_3kpqo.js +1 -0
  215. package/dist/assets/post-wire-DZbVz-_e.js +1 -0
  216. package/dist/assets/projection-read-9xClzF-E.js +1 -0
  217. package/dist/assets/react-dom-BwC4eQlG.js +1 -0
  218. package/dist/assets/react-router-XsJY84ug.js +1 -0
  219. package/dist/assets/reflect-metadata-DF0mcVP2.js +1 -0
  220. package/dist/assets/retired-owner-authentication-work-J-86Ved1.js +1 -0
  221. package/dist/assets/rotation-relay-DCS7Aa59.js +1 -0
  222. package/dist/assets/runtime-2tzejM54.js +1 -0
  223. package/dist/assets/runtime-BFa23LKn.css +1 -0
  224. package/dist/assets/runtime-BUihkTjL.js +1 -0
  225. package/dist/assets/runtime-BzHz3H7U.css +1 -0
  226. package/dist/assets/runtime-CXh-BOHA.js +1 -0
  227. package/dist/assets/runtime-CtH6kdhA.js +1 -0
  228. package/dist/assets/runtime-Dfzb5fxj.js +2 -0
  229. package/dist/assets/runtime-_4MyTTJ2.js +1 -0
  230. package/dist/assets/s3-CXe7JlAr.js +1 -0
  231. package/dist/assets/saved-model-agent-Cdn954wf.js +2 -0
  232. package/dist/assets/scroll-renderer-CPup0pR-.css +1 -0
  233. package/dist/assets/scroll-renderer-CPxIcBzQ.js +1 -0
  234. package/dist/assets/seams-DJ_lslby.js +1 -0
  235. package/dist/assets/secret-backend-onepassword-sdk-hhTb3tZb.js +1 -0
  236. package/dist/assets/secret-backends-_-CBukTJ.js +1 -0
  237. package/dist/assets/section-nav-goals-B_N-ZW2I.js +1 -0
  238. package/dist/assets/session-connections-WQ2L1zGG.js +2 -0
  239. package/dist/assets/session-connections-oSO_RMA1.css +1 -0
  240. package/dist/assets/settings-CHnpwTwf.css +1 -0
  241. package/dist/assets/settings-files-NL7VAn-D.css +1 -0
  242. package/dist/assets/settings-files-OnHfWPp_.js +1 -0
  243. package/dist/assets/sha3-Bm70HrE3.js +1 -0
  244. package/dist/assets/shared-Ck7e2FJN.js +1 -0
  245. package/dist/assets/signaling-BgALI1Na.js +1 -0
  246. package/dist/assets/signals-DdOHdr--.js +1 -0
  247. package/dist/assets/support-context-DrcseTKK.js +1 -0
  248. package/dist/assets/tailnet-devices-B4-KR7Lk.css +1 -0
  249. package/dist/assets/tailnet-devices-CRKI2IIc.js +1 -0
  250. package/dist/assets/tailnet-plugin-pairing-DTK4jAlP.js +1 -0
  251. package/dist/assets/tailscale-artifacts-FyY85j_Y.js +1 -0
  252. package/dist/assets/tailscale-node-Bxh73eIz.js +1 -0
  253. package/dist/assets/trusted-contacts-BUPioBSb.css +1 -0
  254. package/dist/assets/trusted-contacts-QkvTYGDn.js +1 -0
  255. package/dist/assets/types-Ctz6L20B.js +1 -0
  256. package/dist/assets/use-access-book-1e-Lb3_j.css +1 -0
  257. package/dist/assets/use-access-book-BusjdJX8.js +2 -0
  258. package/dist/assets/use-integrations-drawn-DYzpglrK.js +1 -0
  259. package/dist/assets/use-password-reset-generate-B11XaeM6.js +2 -0
  260. package/dist/assets/use-password-reset-generate-D7yK7QdU.css +1 -0
  261. package/dist/assets/use-settings-category-Ci1J38pa.css +1 -0
  262. package/dist/assets/use-settings-category-Dy0gsCtF.js +1 -0
  263. package/dist/assets/use-vault-search-C7u00nrc.js +1 -0
  264. package/dist/assets/use-vault-search-Cy48_tAA.css +1 -0
  265. package/dist/assets/useLocalConsent-LY9hCn8F.js +2 -0
  266. package/dist/assets/vault-credential-custody-DpnBb4qo.js +1 -0
  267. package/dist/assets/vault-list-path-Bh2_KZkq.js +1 -0
  268. package/dist/assets/vault-menu-CqO_AStq.js +1 -0
  269. package/dist/assets/vault-ui-seam-BQGS7RR6.js +1 -0
  270. package/dist/assets/vaults-B043odav.js +1 -0
  271. package/dist/assets/vendor-1password-save-bVqbF-cI.js +1 -0
  272. package/dist/assets/vendor-ag-ui-DapcFk1d.js +1 -0
  273. package/dist/assets/vendor-ai-sdk-D8TnA_ou.js +1 -0
  274. package/dist/assets/vendor-msal-D-SCQ_ve.js +1 -0
  275. package/dist/assets/wake-lock-C_y0fQco.js +1 -0
  276. package/dist/assets/webmcp-sdk-Brp7pH5M.js +1 -0
  277. package/dist/assets/website-pattern.worker-CHLdQLlR.js +1 -0
  278. package/dist/auth/linear.html +17 -0
  279. package/dist/auth/native-client.json +17 -0
  280. package/dist/auth/native-connector.html +17 -0
  281. package/dist/auth/native-google.html +29 -0
  282. package/dist/auth/native-implicit.html +18 -0
  283. package/dist/auth/redirect.html +15 -0
  284. package/dist/auth.js +1 -0
  285. package/dist/auth.js.sha384 +1 -0
  286. package/dist/browser-schema-config.js +5 -0
  287. package/dist/capability-distribution.json +108 -0
  288. package/dist/capability-graph.json +1 -0
  289. package/dist/contact.html +37 -0
  290. package/dist/icon-192.png +0 -0
  291. package/dist/icon-512.png +0 -0
  292. package/dist/icon.svg +1 -0
  293. package/dist/index.html +150 -0
  294. package/dist/index.md +22 -0
  295. package/dist/licenses/saml-xml.txt +315 -0
  296. package/dist/llms.txt +35 -0
  297. package/dist/manifest.webmanifest +1 -0
  298. package/dist/onepassword/LICENSE-0.5.0.txt +21 -0
  299. package/dist/onepassword/core-0.5.0-764c359d.mjs +822 -0
  300. package/dist/onepassword/core-0.5.0-7cc0e700.wasm.gz +0 -0
  301. package/dist/os-runtime-config.json +1 -0
  302. package/dist/privacy.html +39 -0
  303. package/dist/release.json +9 -0
  304. package/dist/robots.txt +4 -0
  305. package/dist/save-button.js +220 -0
  306. package/dist/security-profile.json +6 -0
  307. package/dist/siop-metadata.json +39 -0
  308. package/dist/sitemap.xml +9 -0
  309. package/dist/static-auth/1.0.3/opensesame-auth.min.js +1 -0
  310. package/dist/static-auth/1.0.3/opensesame-auth.min.js.sha384 +1 -0
  311. package/dist/static-auth/1.0.4/opensesame-auth.min.js +1 -0
  312. package/dist/static-auth/1.0.4/opensesame-auth.min.js.sha384 +1 -0
  313. package/dist/static-auth/1.0.5/opensesame-auth.min.js +1 -0
  314. package/dist/static-auth/1.0.5/opensesame-auth.min.js.sha384 +1 -0
  315. package/dist/static-auth/manifest.json +24 -0
  316. package/dist/sw-push.js +1 -0
  317. package/dist/sw.js +1 -0
  318. package/dist/tailscale/LICENSE.txt +86 -0
  319. package/dist/tailscale/OPEN-SOURCE-LICENSES.md +109 -0
  320. package/dist/tailscale/go-runtime-3e61b3267aa67a55.js +3 -0
  321. package/dist/tailscale/main-7b2a0868bcb7f638.wasm.gz +0 -0
  322. package/dist/tailscale/native-http-1992487ea59d7d17.js +1 -0
  323. package/package.json +26 -0
@@ -0,0 +1 @@
1
+ import{g as e,l as t}from"./connections-CNmhCNAV.js";import{g as n}from"./local-vault-sessions-CGv9AsFj.js";import{W as i,cg as r,K as s}from"./main-BrkS-iow.js";import{h as a,p as o,u as c}from"./wake-lock-C_y0fQco.js";import{B as u}from"./identity-BVf8yWa4.js";import{c as d,i as l,h as p,o as m,b as f,v as h,y,s as w,A as k}from"./vault-ui-seam-BQGS7RR6.js";import{r as _,j as I}from"./react-dom-BwC4eQlG.js";import{_ as g}from"./hosted-model-authority-CcNPE44H.js";import{S as v}from"./entra-instances-NyEKYI5c.js";import{e as b,n as S,v as x}from"./signals-DdOHdr--.js";import{r as j,w as A,a as q}from"./local-applications-rigvedS6.js";import{p as J,t as P,r as U,V as E,w as L}from"./model-provider-B6oAnQX9.js";import{u as D,L as R}from"./react-router-XsJY84ug.js";import{u as T,a as O,S as $}from"./cap-identity.siop-C80liHvH.js";const N={algorithm_not_allowed:"JOSE header algorithm is not permitted",malformed_request:"authentication request is not well formed",malformed_id_token:"Self-Issued ID Token is not well formed",invalid_sub_jwk:"sub_jwk is not an accepted public P-256 key",subject_mismatch:"sub is not the JWK thumbprint of sub_jwk",audience_mismatch:"ID Token audience does not match client_id",nonce_mismatch:"ID Token nonce does not match the authentication request",issuer_mismatch:"ID Token issuer does not match the Self-Issued profile",signature_invalid:"ID Token signature did not verify against sub_jwk",token_expired:"ID Token has expired",token_not_fresh:"ID Token issued-at is outside the accepted freshness window",limit_exceeded:"input exceeded a size or time limit",malformed_metadata:"Self-Issued OP metadata is not acceptable",not_supported:"feature is not supported by this package"};class z extends Error{code;checkpoint;constructor(e,t){super(N[e]),this.name="SiopV2Error",this.code=e,this.checkpoint=t}}function C(e,t){throw new z(e,t)}const K=8192,M=/^[A-Za-z0-9_-]+$/;function W(e){return M.test(e)}const V="P-256";function B(e){C("invalid_sub_jwk",e)}function H(e,t="sub_jwk"){d(e)||B(t),void 0!==e.d&&B(t),"EC"!==e.kty&&B(t),e.crv!==V&&B(t),l(e.x)&&W(e.x)||B(t),l(e.y)&&W(e.y)||B(t),void 0===e.x5c&&void 0===e.x5u&&void 0===e.x5t&&void 0===e["x5t#S256"]||B(t),void 0!==e.alg&&"ES256"!==e.alg&&B(t),void 0!==e.use&&"sig"!==e.use&&B(t),void 0===e.kid||l(e.kid)||B(t);const n={kty:"EC",crv:V,x:e.x,y:e.y};return l(e.kid)?Z(n,e.kid,e.alg,e.use):Z(n,void 0,e.alg,e.use)}function Z(e,t,n,i){let r=e;return void 0!==t&&(r={...r,kid:t}),"ES256"===n&&(r={...r,alg:"ES256"}),"sig"===i&&(r={...r,use:"sig"}),r}async function F(e){const t=JSON.stringify({crv:e.crv,kty:e.kty,x:e.x,y:e.y}),n=await crypto.subtle.digest("SHA-256",p(function(e){return(new TextEncoder).encode(e)}(t)));return function(e){let t="";for(const n of e)t+=String.fromCharCode(n);return btoa(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}(new Uint8Array(n))}const Q="id_token",G="openid",X="fragment";function Y(e,t){const n=e.getAll(t);1!==n.length&&C("malformed_request","request_normalize");const i=n[0];return void 0!==i&&0!==i.length||C("malformed_request","request_normalize"),i}function ee(e){return l(m(e))}function te(e,t){const n=e.getAll(t);if(0===n.length)return null;1!==n.length&&C("malformed_request","request_normalize");const i=n[0];return void 0!==i&&0!==i.length||C("malformed_request","request_normalize"),i}const ne="https://self-issued.me/v2";function ie(e){const t={kty:e.kty,crv:e.crv,x:e.x,y:e.y};return void 0!==e.kid&&(t.kid=e.kid),void 0!==e.alg&&(t.alg=e.alg),void 0!==e.use&&(t.use=e.use),t}async function re(e){0!==e.audience.length&&0!==e.nonce.length||C("malformed_request","id_token_build");const t=void 0===(n=e.ttlSeconds)?600:!Number.isInteger(n)||n<0||n>3600?-1:n;var n;t<0&&C("limit_exceeded","limits");const i=e.nowSeconds??Math.floor(Date.now()/1e3);(!Number.isInteger(i)||i<0||i>253402300799)&&C("limit_exceeded","limits");const r=H(ie(e.publicJwk),"sub_jwk"),s=await F(r),{iss:a,iAmSiop:o}="static"===(u=e.profile).kind?{iss:ne,iAmSiop:!1}:(function(e){let t;try{t=new URL(e)}catch{C("issuer_mismatch","issuer_profile")}if(""===t.username&&""===t.password||C("issuer_mismatch","issuer_profile"),""===t.hash&&""===t.search||C("issuer_mismatch","issuer_profile"),"https:"!==t.protocol){if("http:"===t.protocol){const e=t.hostname.toLowerCase();if("localhost"===e||"127.0.0.1"===e||"[::1]"===e)return}C("issuer_mismatch","issuer_profile")}else e.startsWith("https://")||C("issuer_mismatch","issuer_profile")}(u.issuer),u.issuer===ne&&C("issuer_mismatch","issuer_profile"),{iss:u.issuer,iAmSiop:!0}),c={iss:a,sub:s,aud:e.audience,nonce:e.nonce,exp:i+t,iat:i,sub_jwk:ie(r)};var u;o&&(c.i_am_siop=!0);const d=await async function(){try{return await(async()=>new v(c).setProtectedHeader({alg:"ES256"}).sign(e.signingKey))()}catch(t){if(t instanceof z)throw t;throw new z("malformed_id_token","id_token_build")}}();return d.length>16384&&C("limit_exceeded","limits"),d}function se(e,t){0===e.length&&C("malformed_request","response_serialize");const n=t.startsWith("#")?t:`#${t}`,i=e.split("#")[0];return void 0!==i&&0!==i.length||C("malformed_request","response_serialize"),`${i}${n}`}const ae="config/siop-keys",oe=1e6,ce=/^local_[0-9a-f-]{36}$/;function ue(e="SIOP key material is unavailable."){throw new b(e)}function de(e){return l(e)&&ce.test(e)}function le(e){if(0===e.length||e.length>4096)return!1;try{const t=JSON.parse(e);return d(t)&&"EC"===t.kty&&"P-256"===t.crv&&l(t.x)&&l(t.y)&&l(t.d)&&t.d.length>=40&&t.d.length<=64}catch{return!1}}function pe(e){if(!d(e))return null;if(!de(e.subjectId)||!de(e.applicationId))return null;if(!l(e.keyId)||!/^[A-Za-z0-9_-]{43}$/.test(e.keyId))return null;const t=l(e.privateJwkJson)?e.privateJwkJson:l(e.encryptedPrivateJwk)?e.encryptedPrivateJwk:null;if(!t||!le(t))return null;if(!f(e.createdAt)||!Number.isSafeInteger(e.createdAt)||e.createdAt<=0)return null;if(null!==e.revokedAt&&!(f(e.revokedAt)&&Number.isSafeInteger(e.revokedAt)&&e.revokedAt>=e.createdAt))return null;const n=function(e){if(!d(e))return null;try{return H(e)}catch{return null}}(e.publicJwk);return n?{subjectId:e.subjectId,applicationId:e.applicationId,keyId:e.keyId,publicJwk:n,privateJwkJson:t,createdAt:e.createdAt,revokedAt:null===e.revokedAt?null:e.revokedAt}:null}function me(e){return{subjectId:e.subjectId,applicationId:e.applicationId,keyId:e.keyId,publicJwk:e.publicJwk,createdAt:e.createdAt}}async function fe(e){await J(P(e,ae),2e6);try{const t=await U(e,ae);t.length>oe&&ue("SIOP key storage exceeds its limit.");const n=JSON.parse((new TextDecoder).decode(t));(!d(n)||1!==n.version||!Array.isArray(n.keys)||n.keys.length>1e3)&&ue("Invalid SIOP key storage. Restore a valid vault backup.");const i=[];for(const e of n.keys){const t=pe(e);t||ue("Invalid SIOP key storage. Restore a valid vault backup."),i.push(t)}return i}catch(t){if(t instanceof E&&"not-found"===t.code)return[];throw t}}function he(e,t,n){return e.find(e=>e.subjectId===t&&e.applicationId===n&&null===e.revokedAt)}async function ye(e,t,n){const i=await async function(e,t,n){if(!de(t)||!de(n))return null;const i=he(await fe(e),t,n);return i?me(i):null}(e,t,n);return i||async function(e,t,n){de(t)&&de(n)||ue();const i=await fe(e),r=he(i,t,n);if(r)return me(r);const s=await async function(){const e=await crypto.subtle.generateKey({name:"ECDSA",namedCurve:"P-256"},!0,["sign","verify"]),t=await crypto.subtle.exportKey("jwk",e.publicKey),n=await crypto.subtle.exportKey("jwk",e.privateKey);l(t.x)&&l(t.y)||ue(),l(n.d)&&l(n.x)&&l(n.y)||ue();const i=H({kty:"EC",crv:"P-256",x:t.x,y:t.y,alg:"ES256"}),r=JSON.stringify({kty:"EC",crv:"P-256",x:n.x,y:n.y,d:n.d,alg:"ES256"});return le(r)||ue(),{publicJwk:i,privateJwkJson:r,keyId:await F(i)}}(),a={subjectId:t,applicationId:n,keyId:s.keyId,publicJwk:s.publicJwk,privateJwkJson:s.privateJwkJson,createdAt:Date.now(),revokedAt:null};return await async function(e,t){const n=(new TextEncoder).encode(JSON.stringify({version:1,keys:t}));(t.length>1e3||n.length>oe)&&ue("SIOP key capacity reached.");try{await L(e,ae,n)}finally{S()}}(e,[...i,a]),me(a)}(e,t,n)}async function we(e,t,n){de(t)&&de(n)||ue();const i=he(await fe(e),t,n);i||ue();const r=JSON.parse(i.privateJwkJson);return d(r)&&l(r.d)&&l(r.x)&&l(r.y)||ue(),crypto.subtle.importKey("jwk",{kty:"EC",crv:"P-256",x:r.x,y:r.y,d:r.d},{name:"ECDSA",namedCurve:"P-256"},!1,["sign"])}function ke(e="This Self-Issued sign-in is unavailable. Start again from the application."){throw new b(e)}async function _e(e,t){const n=(await j(e)).applications.find(e=>e.applicationId===t.clientId&&e.redirectUris.includes(t.redirectUri));return n||ke(),n.scopes.includes("openid")||ke(),{request:t,application:n}}async function Ie(e,t,n,i,r){const s=r.ensureKey??ye,a=r.importSigner??we,o=r.requireAdmission??q,c=r.buildToken??re,u=r.nowSeconds??(()=>Math.floor(Date.now()/1e3)),d=function(e=function(e=h()?.location.origin??"",t=y().BASE_URL||"/"){l(e)&&0!==e.length||ke("Pages origin is unavailable.");try{return new URL("identity/siop",new URL(t,e)).href.replace(/\/$/,"")}catch{ke("Pages origin is unavailable.")}}()){return{kind:"dynamic",issuer:e}}(),p=["openid"];await o(e,t,n.clientId,n.redirectUri,p),await i();const m=await s(e,t,n.clientId);await i();const f=await a(e,t,n.clientId);await i(),await o(e,t,n.clientId,n.redirectUri,p),await i(),m.subjectId===t&&m.applicationId===n.clientId||ke();const w=await c({profile:d,audience:n.clientId,nonce:n.nonce,publicJwk:m.publicJwk,signingKey:f,nowSeconds:u()});await i();const k=function(e){(0===e.idToken.length||e.idToken.length>16384)&&C("limit_exceeded","limits");const t=new URLSearchParams;t.set("id_token",e.idToken),null!==e.state&&t.set("state",e.state);const n=t.toString();return n.length>16384&&C("limit_exceeded","limits"),n}({idToken:w,state:n.state});return{redirectUrl:se(n.redirectUri,k),identity:m}}async function ge(e,t,n,i={}){!function(e){"passkey"!==e.authentication&&ke()}(t);const r=await A(e,t,async(t,r)=>Ie(e,t.principalId,n,r,i));return await x(e,"siop.approved",{applicationId:n.clientId,subject:r.identity.subjectId}),r}async function ve(t,n,r,s={}){const a=()=>async function(t,n,r,s){if(n.personId!==r&&ke(),await async function(e,t){const{currentLocalIdentityActor:n}=await g(async()=>{const{currentLocalIdentityActor:e}=await import("./local-applications-rigvedS6.js").then(e=>e.z);return{currentLocalIdentityActor:e}},[]),i=await n(e);i&&i.principalId===t||ke()}(t,r),(!Number.isFinite(n.at)||n.at>Date.now()||Date.now()-n.at>6e5)&&ke(),"identity"===n.source){const e=(s.socialSession??i)();return void((!e||e.upstreamId!==n.upstreamId||e.expiresAt<=Date.now())&&ke())}n.connectionId||ke();const a=await(s.socialConnection??e)(n.connectionId);a&&"active"===a.status&&a.providerId===n.providerId||ke()}(t,n,n.personId,s);await a();const o=await Ie(t,n.personId,r,a,s);return await x(t,"siop.approved",{applicationId:r.clientId,subject:o.identity.subjectId}),o}function be(e,t){return x(e,"siop.denied",{applicationId:t.clientId})}function Se(e){return se(e.redirectUri,function(e){0===e.error.length&&C("malformed_request","response_serialize");const t=new URLSearchParams;t.set("error",e.error),null!==e.errorDescription&&t.set("error_description",e.errorDescription),null!==e.state&&t.set("state",e.state);const n=t.toString();return n.length>16384&&C("limit_exceeded","limits"),n}({error:"access_denied",errorDescription:"The end-user denied the request",state:e.state}))}const xe="opensesame:siop-social",je=new Set(["auth0","bitbucket","codeberg","discord","dropbox","github","gitlab","google","microsoft","microsoft-teams","okta","openrouter","spotify","twitch","vercel"]);function Ae(){const e=a(),[i,s]=_.useState([]);return _.useEffect(()=>{let e=!0;return t().then(t=>{e&&s(t)}).catch(()=>{e&&s([])}),()=>{e=!1}},[]),_.useMemo(()=>{const t=new Map(n().map(e=>[e.id,e]));return function(e){const t=new Set;return e.filter(e=>{const n=`${e.source}:${e.upstreamId??e.connectionId??e.providerId}`;return!t.has(n)&&(t.add(n),!0)})}([...e.filter(e=>"mock"!==e.id).map(e=>{const t=o(e);return{id:`identity:${e.id}`,label:e.label,source:"identity",providerId:e.id,upstream:t,upstreamId:t.id}}),...u().providers.filter(e=>"saml"!==e.protocol).map(e=>{const t=r(e);return{id:`identity:${t.id}`,label:e.label,source:"identity",providerId:e.providerId||e.issuer,upstream:t,upstreamId:t.id}}),...i.flatMap(e=>{if("active"!==e.status)return[];if(!je.has(e.providerId))return[];const n=t.get(e.providerId);return n?{id:`connection:${e.connectionId}`,label:n.displayName,source:"connection",providerId:n.id,connectionId:e.connectionId,accountLabel:e.accountLabel}:[]})])},[e,i])}function qe(e){w().setItem(xe,JSON.stringify(e))}function Je(e){if(!e)return null;const t=w().getItem(xe);if(!t)return null;try{const n=JSON.parse(t);return!d(n)||n.id!==e||"identity"!==n.source&&"connection"!==n.source||!l(n.providerId)||!l(n.label)||!l(n.personId)||!f(n.at)||Date.now()-n.at>6e5?null:{id:n.id,source:n.source,providerId:n.providerId,label:n.label,personId:n.personId,at:n.at,upstreamId:k(n.upstreamId),connectionId:k(n.connectionId)}}catch{return null}}function Pe(){w().removeItem(xe)}function Ue(e){const t=new URL(window.location.href);return t.searchParams.set("social",e),`${t.pathname}${t.search}`}function Ee(e){const t=_.useRef(!1),n=_.useRef(e);return n.current=e,_.useCallback(async()=>{t.current||(t.current=!0,await n.current())},[])}function Le(){const{search:e}=D(),{tomb:t}=c(),n=_.useMemo(()=>{try{return function(e){const t=function(e){if(e instanceof URLSearchParams)return e.toString().length>K&&C("limit_exceeded","limits"),new URLSearchParams(e);if(function(e){return!(e instanceof URLSearchParams)&&l(m(e))}(e)){e.length>K&&C("limit_exceeded","limits");const t=e.startsWith("?")?e.slice(1):e;if(t.includes("://")||t.startsWith("openid:"))try{const e=new URL(t);return e.search.length>K&&C("limit_exceeded","limits"),new URLSearchParams(e.searchParams)}catch{C("malformed_request","request_parse")}return new URLSearchParams(t)}const t=new URLSearchParams;for(const[n,i]of Object.entries(e))if(void 0!==i)if(ee(i))t.append(n,i);else if(Array.isArray(i))for(const e of i)ee(e)||C("malformed_request","request_parse"),t.append(n,e);else C("malformed_request","request_parse");return t.toString().length>K&&C("limit_exceeded","limits"),t}(e),n=Y(t,"client_id"),i=Y(t,"redirect_uri"),r=Y(t,"nonce"),s=Y(t,"scope"),a=Y(t,"response_type");s!==G&&C("malformed_request","request_normalize"),a!==Q&&C("malformed_request","request_normalize");const o=te(t,"response_mode");return null!==o&&o!==X&&C("not_supported","request_normalize"),(t.has("request")||t.has("request_uri")||t.has("registration")||t.has("registration_uri"))&&C("not_supported","request_normalize"),{clientId:n,redirectUri:i,nonce:r,scope:G,responseType:Q,responseMode:X,state:te(t,"state")}}(e)}catch{return null}},[e]);return n?I.jsx(De,{tomb:t,request:n},`${t}:${e}`):I.jsxs("section",{className:"panel","aria-label":"Self-issued sign-in",children:[I.jsx("div",{className:"panel__head",children:I.jsx("h1",{children:"Invalid Self-Issued request"})}),I.jsxs("div",{className:"panel__body",children:[I.jsx(s,{id:"siop-authorize:request",title:"Invalid Self-Issued request",message:"Start sign-in again from the registered application."}),I.jsx(R,{to:"/identity?view=applications",children:"Manage applications"})]})]})}function De({tomb:e,request:t}){const n=T(e,t),i=O(e,t,n);return I.jsx($,{state:n,actions:i,request:t})}export{Le as S,ve as a,ge as b,Ue as c,Pe as d,Se as e,Ae as f,_e as g,Je as h,be as r,qe as s,Ee as u};
@@ -0,0 +1 @@
1
+ .support-launch{position:fixed;left:calc(.85rem + env(safe-area-inset-left,0px));bottom:calc(.85rem + env(safe-area-inset-bottom,0px));z-index:70;width:2.5rem;height:2.5rem;display:grid;place-items:center;padding:0;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--surface);color:var(--ink);cursor:pointer;box-shadow:var(--shadow)}.support-launch:hover{border-color:var(--ink)}.support-launch--live{color:var(--accent);border-color:var(--accent)}.support-launch--open{z-index:50;pointer-events:none}@media(pointer:coarse),(max-width:900px){.support-launch:not(.support-launch--chrome){width:2.75rem;height:2.75rem}}.support-launch--chrome{position:static;inset:auto;z-index:auto;width:auto;height:auto;box-shadow:none}.support-launch:not(.support-launch--chrome):is(body:has(.statusline) *){display:none}.sheet.support{width:min(30rem,100vw)}.support__body{gap:1.15rem}.support__thread{display:grid;gap:.85rem;padding-bottom:.15rem}.support__line{display:grid;grid-template-columns:4.25rem minmax(0,1fr);gap:.1rem .6rem;align-items:baseline}.support__who{font-family:var(--mono);font-size:.75rem;text-transform:lowercase;color:var(--ink-3);text-align:right}.support__line--question .support__who{color:var(--accent)}.support__text{margin:0;min-width:0;white-space:pre-wrap;overflow-wrap:anywhere;font-size:.875rem;line-height:1.55}.support__line--note .support__text{color:var(--ink-2);font-size:.8125rem}.support__suggestions{grid-column:2;display:flex;flex-wrap:wrap;gap:.35rem;padding-top:.35rem}.support__trace{grid-column:2;margin:.35rem 0 0;border:1px solid var(--line);background:var(--surface-2)}.support__trace>summary{cursor:pointer;font-family:var(--mono);font-size:.75rem;text-transform:lowercase;color:var(--ink-3);padding:.4rem .55rem}.support__trace[open]>summary{border-bottom:1px solid var(--line)}.support__trace-body{margin:0;padding:.5rem .55rem .6rem;font-size:.8125rem;line-height:1.5;color:var(--ink-2);white-space:pre-wrap;overflow-wrap:anywhere}.support__computer{margin:0;padding:.45rem .55rem .6rem 1.35rem;display:grid;gap:.35rem}.support__computer-title{font-family:var(--mono);font-size:.75rem;color:var(--ink)}.support__computer-detail{margin:.15rem 0 0;font-size:.75rem;color:var(--ink-2);white-space:pre-wrap;overflow-wrap:anywhere}.support__pending{display:flex;align-items:center;gap:.6rem;padding:.5rem .6rem;border:1px solid var(--line);background:var(--surface-2)}.support__pending-read{flex:1;min-width:0;font-family:var(--mono);font-size:.75rem;color:var(--ink-2)}.support__pending-read:after{content:"";display:inline-block;width:.45rem;height:.9em;margin-left:.3rem;vertical-align:text-bottom;background:var(--accent);animation:support-caret 1s steps(2,end) infinite}@keyframes support-caret{0%,49%{opacity:1}50%,to{opacity:.15}}@media(prefers-reduced-motion:reduce){.support__pending-read:after{animation:none;opacity:.6}}.support__download{display:grid;gap:.55rem;justify-items:start;padding:.75rem;border:1px solid var(--line);background:var(--surface-2)}.support__download-read{font-family:var(--mono);font-size:.75rem;color:var(--ink-2);font-variant-numeric:tabular-nums}.support__progress{width:100%;height:.4rem;-webkit-appearance:none;appearance:none;border:0;background:var(--surface-3)}.support__progress::-webkit-progress-bar{background:var(--surface-3)}.support__progress::-webkit-progress-value{background:var(--accent)}.support__progress::-moz-progress-bar{background:var(--accent)}.support__tabs{display:flex;gap:1.1rem;border-bottom:1px solid var(--line)}.support__tab{display:inline-flex;align-items:center;min-height:2rem;padding:.3rem 0 .55rem;margin-bottom:-1px;border:0;border-bottom:2px solid transparent;background:transparent;color:var(--ink-2);font-family:var(--mono);font-size:.875rem;cursor:pointer}.support__tab:hover{color:var(--ink)}.support__tab.is-active{border-bottom-color:var(--ink);color:var(--ink);font-weight:600}.support__ask{display:grid;gap:1.15rem}.support__library{display:grid;gap:1.1rem}.support__group{display:grid;gap:.4rem}.support__tutorials{display:grid;gap:.35rem;margin:0;padding:0;list-style:none}.support__tutorial{-webkit-appearance:none;appearance:none;display:flex;align-items:center;gap:.6rem;width:100%;padding:.5rem .6rem;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);color:var(--ink);font:inherit;font-size:.8438rem;text-align:left;cursor:pointer;transition:background .14s var(--ease),border-color .14s var(--ease)}.support__tutorial:hover{background:var(--surface-2);border-color:var(--line-strong)}.support__tutorial-title{flex:1;min-width:0}.support__tutorial-steps{flex:none;font-family:var(--mono);font-size:.75rem;color:var(--ink-3);font-variant-numeric:tabular-nums}.support__tutorial>svg{flex:none;color:var(--accent)}.support__help{display:grid;gap:.45rem}.support__section-label{margin:0;font-family:var(--mono);font-size:.75rem;text-transform:lowercase;letter-spacing:.02em;color:var(--ink-3)}.support__topic{display:flex;align-items:center;gap:.4rem}.support__topic-open{-webkit-appearance:none;appearance:none;display:block;flex:1;min-width:0;padding:.5rem .6rem;border:1px solid var(--line);background:var(--surface);color:var(--ink);font:inherit;font-size:.8438rem;text-align:left;cursor:pointer;transition:background .14s var(--ease),border-color .14s var(--ease)}.support__topic-open:hover{background:var(--surface-2);border-color:var(--line-strong)}.support__composer{display:flex;align-items:center;gap:.5rem}.support__composer .f__shell{flex:1;min-width:0}@media(pointer:coarse),(max-width:900px){.sheet.support{width:100%}.support__line{grid-template-columns:minmax(0,1fr)}.support__who{text-align:left}.support__suggestions,.support__trace{grid-column:1}.support__topic-open,.support__tutorial,.support__tab{min-height:2.75rem;min-width:2.75rem;justify-content:center}.support__composer{padding-bottom:calc(.6rem + env(safe-area-inset-bottom,0px))}}.support__project summary{min-height:44px;align-content:center;cursor:pointer}.support__project-links{display:grid;margin:0;padding:0;list-style:none}.support__project-links a{display:flex;align-items:center;min-width:44px;min-height:44px;color:var(--ink);text-decoration:underline;text-underline-offset:.2em}
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/main-BKK5N8Uh.css","assets/gate-seat-D6oRkKUH.css","assets/CoachHud-9Bqu4Gtl.css"])))=>i.map(i=>d[i]);
2
+ import{_ as e}from"./hosted-model-authority-CcNPE44H.js";import{r as t,j as s,a}from"./react-dom-BwC4eQlG.js";import{d as n,b9 as o,ba as r}from"./main-BrkS-iow.js";import{u as l,b as i}from"./gate-seat-DHBrLaMG.js";import{u}from"./idp-presets-B1M-P0Ek.js";import{a as p}from"./consent-CcqmRPoB.js";const c=t.createContext({slot:null,setSlot:e=>{}});function d({children:e}){const[a,n]=t.useState(null),o=t.useMemo(()=>({slot:a,setSlot:n}),[a]);return s.jsx(c.Provider,{value:o,children:e})}function h(){const{setSlot:e}=t.useContext(c);return s.jsx("span",{ref:e,className:"statusline__support"})}function m({query:e,onQueryChange:a}){const{view:r,support:i}=l(),u=t.useId(),[c,d]=t.useState(""),h="ready"===r.availability?.kind,m=h?"Ask about this screen":"Search the written help",j=h?c:e;return s.jsxs("form",{className:"support__composer keyed-row",onSubmit:e=>{if(e.preventDefault(),!h)return;const t=c.trim();t&&(d(""),i.ask(t))},children:[s.jsx("label",{className:"visually-hidden",htmlFor:u,children:m}),s.jsx("div",{className:"f__shell",children:s.jsx("input",{id:u,className:"f__input",type:h?"text":"search",value:j,maxLength:p.maxQuestionChars,placeholder:m,onChange:e=>{return t=e.target.value,void(h?d(t):a(t));var t}})}),s.jsx("button",{type:"submit",className:"icon-btn",disabled:0===j.trim().length,"aria-label":h?"Ask":"Search",title:h?"Ask":"Search",children:s.jsx(h?n:o,{size:17})})]})}const j=t.lazy(()=>e(()=>import("./SupportPanel-W7lTTCHo.js"),__vite__mapDeps([0,1])).then(e=>({default:e.SupportPanel}))),x=t.lazy(()=>e(()=>import("./CoachHud-DHqFf7ez.js"),__vite__mapDeps([0,1,2])).then(e=>({default:e.CoachHud}))),b=new Set(["running","waiting","paused"]);function f(e,t,s){return["support-launch",e?"support-launch--chrome icon-btn":"",t?"support-launch--live":"",s?"support-launch--open":""].filter(Boolean).join(" ")}function _({gate:e=!1}){const{view:n,support:o}=l(),p=t.useContext(c).slot,d=i(),h=e?d:p,m=u("shell.support"),_=null!==h,S=b.has(n.guide?.status??""),g=null!=n.guide?.tour,v=S?"Support — tutorial in progress":"Support",y=s.jsx("button",{ref:m,type:"button",className:f(_,S,n.open),"aria-label":v,title:v,"aria-haspopup":"dialog","aria-expanded":n.open,tabIndex:n.open?-1:void 0,onClick:()=>n.open?o.close():o.open(),children:s.jsx(r,{size:_&&!e?15:18})});return s.jsxs(s.Fragment,{children:[h?a.createPortal(y,h):e?null:y,g?s.jsx(t.Suspense,{fallback:null,children:s.jsx(x,{})}):null,n.open?s.jsx(t.Suspense,{fallback:s.jsx("div",{className:"sheet-layer",children:s.jsx("button",{type:"button",className:"scrim","aria-label":"Close",onClick:()=>o.close()})}),children:s.jsx(j,{gate:e})}):null]})}export{_ as S,d as a,m as b,h as c};
@@ -0,0 +1 @@
1
+ import{j as e,r as t}from"./react-dom-BwC4eQlG.js";import{m as s,e as a,u as i,f as n,h as r}from"./gate-seat-DHBrLaMG.js";import{b as o,g as l,c,d as u,e as p,f as d,h as m,n as h,s as g}from"./idp-presets-B1M-P0Ek.js";import{u as b,F as j,i as v}from"./features-9FeW22VH.js";import{S as f,e as y,o as x,bd as _,be as k,d as w,u as N,cf as C,l as S,bX as M,z as $}from"./main-BrkS-iow.js";import{a as z}from"./vault-list-path-Bh2_KZkq.js";import{b as A}from"./SupportLauncher-DlkkaWxf.js";import{e as q,f as R,g as E}from"./consent-CcqmRPoB.js";import{r as D}from"./seams-DJ_lslby.js";import{u as I,i as T}from"./use-integrations-drawn-DYzpglrK.js";import"./support-context-DrcseTKK.js";import"./pane-trail-dW-2RSUm.js";import"./identity-view-paths-Bi1yigZk.js";import"./drop-open-BjgdLxWM.js";import"./vault-ui-seam-BQGS7RR6.js";import"./native-worker-noble-ciphers-708367a7-BPuD3lXB.js";import"./native-worker-noble-hashes-b1a58353-IgGIMWEC.js";import"./native-worker-bytes-a0e18d71-DFmKzL3P.js";import"./hosted-model-authority-CcNPE44H.js";import"./model-provider-B6oAnQX9.js";import"./signals-DdOHdr--.js";import"./identity-BVf8yWa4.js";import"./native-worker-zod-5c0ed887-B342B6ko.js";import"./native-worker-zod-jitless-ba55e4a3-DZHC6DC7.js";import"./react-router-XsJY84ug.js";import"./section-nav-goals-B_N-ZW2I.js";import"./wake-lock-C_y0fQco.js";import"./shared-Ck7e2FJN.js";import"./native-catalog-status-INsDvLpU.js";import"./certs-CDCfMuEi.js";import"./bucket-saved-vQCiVvN_.js";import"./local-vault-sessions-CGv9AsFj.js";const G=[{id:"gates",title:"Getting in",goals:["gate.front-door","gate.join","gate.sign-in","gate.unlock","gate.unlock.passkey","gate.unlock.account","gate.setup.choose","gate.setup","gate.setup.ways","gate.setup.connectors","gate.setup.keep","gate.broker.consent","gate.federation.return"]},{id:"start",title:"Getting started",goals:["client.support","client.command-bar","app.install"]},{id:"around",title:"Finding your way around",goals:["shell.sections","shell.sections.phone","shell.sections.access","shell.sections.activity","shell.sections.connections","shell.sections.identity","shell.sections.wallet","shell.statusline","shell.more"]},{id:"settings",title:"Settings, one category at a time",goals:["settings.general.review","settings.auto-lock.set","settings.keybindings.review","settings.features.review","settings.integrations.review","settings.vaults.review","settings.danger.review","vault.recovery.view","settings.trusted-contacts.circle","settings.trusted-contacts.owner"]},{id:"vault",title:"Your vault",goals:["vault.item.create","vault.item.find","vault.item.accounts","vault.item.favorite","vault.item.edit","vault.item.copy","vault.item.trash","vault.item.share","settings.live.host","vault.health.review","vault.item-types.install","vault.environments","vault.import","vault.export","vaults.switch","vaults.manage","vault.lock","host.health.check","feature.item-types","feature.environments","feature.security-checks"]},{id:"keyboard",title:"The keyboard",goals:["vault.keys.move","vault.keys.bar","vault.keys.macros"]},{id:"security",title:"Keys and unlocking",goals:["settings.security.review","vault.second-step.code","vault.recovery-codes","vaults.duress-code","vaults.travel","identity.account-factors","integration.encryption"]},{id:"storage",title:"Backup, sync and storage",goals:["settings.backup","settings.tailnet-sync","integration.networking","feature.encrypted-search","integration.cloud-secret-storage","integration.password-managers"]},{id:"connections",title:"Connections",goals:["connection.create","connection.repair","connection.review","connection.revoke","browser.pair","browser.authenticate","feature.connections","integration.services"]},{id:"access",title:"Access",goals:["access.grant","access.review","access.connectors","access.relay","access.requests.hosted","access.sessions.review","agent.control","agent.observe","authority.portal.templates.manage","authority.portal.templates.read","identity.local.access.manage","identity.local.policy.manage","identity.local.requests.manage","feature.access"]},{id:"identity",title:"Identity",goals:["identity.sign-in","identity.sign-out","identity.switch-account","identity.account.add","identity.agents.manage","identity.applications.manage","identity.organizations.review","identity.users.manage","identity.approval.review","identity.claim.accept","identity.device.approve","identity.drop.open","identity.interaction.approve","identity.local.agent.keys.manage","identity.local.application.authorize","identity.local.directory.manage","identity.local.organizations.member","identity.local.passkeys.manage","identity.local.siop.authorize","identity.tailnet.devices.manage","feature.identity","integration.identity","feature.directory"]},{id:"extras",title:"Agents, models and extras",goals:["settings.model-provider","integration.ai","settings.notifications","feature.notifications","settings.local-notifications","settings.surrogate-credentials","settings.browser-autofill","feature.password-reset","integration.password-reset","feature.sharing","feature.payments","feature.ai","integration.payments","feature.certificates","integration.certificates","feature.telemetry"]}],L=/^(say|focus|hint|annotate|success)\s/;function O(e){const t=e.split("\n").filter(e=>L.test(e.trim())).length,s=/^success\s/m.test(e.split("\n").map(e=>e.trim()).filter(e=>L.test(e)).at(-1)??"");return Math.max(0,t-(s?1:0))}function Q(e,t){return o.has(t)?e.routes.some(e=>l(t,e)):0===e.routes.length||e.routes.some(e=>l(t,e)||!o.has(e))}function F(e,t={}){const s=t.sectionDrawn??(()=>!0),a=t.holds??(()=>!0),i=t.installed??(()=>!0),n=e.capabilities??[];return(r=e.guide,[...r.matchAll(/^focus\s+"((?:feature|integration)\.[a-z-]+)"/gm)].flatMap(e=>void 0===e[1]?[]:[e[1]])).every(s)&&(e.requires??[]).every(a)&&(0===n.length||n.some(i));var r}const B="https://github.com/OpenSesame-Labs/OpenSesame",H=[{label:"What it is",href:`${B}/blob/main/README.md`},{label:"Install / getting started",href:`${B}/blob/main/docs/getting-started/README.md`},{label:"Configure",href:`${B}/blob/main/docs/getting-started/README.md`},{label:"Contribute",href:`${B}/blob/main/CONTRIBUTING.md`},{label:"Report a vulnerability",href:`${B}/blob/main/SECURITY.md`},{label:"Open a private advisory",href:`${B}/security/advisories/new`},{label:"Report a bug",href:`${B}/issues`},{label:"Changelog",href:`${B}/blob/main/docs/CHANGELOG.md`},{label:"License: MIT",href:`${B}/blob/main/LICENSE`},{label:"Source code",href:B}];function K(){return e.jsxs("details",{className:"support__project",children:[e.jsx("summary",{tabIndex:0,children:"About this project"}),e.jsx("ul",{className:"support__project-links",children:H.map(t=>e.jsx("li",{children:e.jsx("a",{href:t.href,target:"_blank",rel:"noopener noreferrer",children:t.label})},t.label))})]})}function Y({warning:s}){const a=t.useSyncExternalStore(q,R,()=>null);return t.useEffect(()=>()=>{a&&E(a.id,!1)},[a]),a?e.jsxs("section",{"aria-label":"Review remote support request",className:"support__help",children:[e.jsx("h3",{children:"Send this request?"}),e.jsxs("p",{className:"hint",children:["To ",a.destination,"."]}),e.jsx("pre",{className:"support__text",title:"Redaction cannot recognize every secret in prose.",children:JSON.stringify(a.payload,null,2)}),e.jsx(f,{label:"Send once",icon:e.jsx(_,{size:18}),onClick:()=>E(a.id,!0),children:e.jsx(y,{label:"Keep on device",onClick:()=>E(a.id,!1),children:e.jsx(x,{size:16})})})]}):s?e.jsx("p",{className:"note note--warn support__egress",children:s}):null}function U({availability:t,onAcquire:s}){if("downloading"===t?.kind){const s=Math.round(100*t.progress);return e.jsxs("div",{className:"support__download",children:[e.jsxs("output",{className:"support__download-read",children:["Downloading the on-device model — ",s,"%"]}),e.jsx("progress",{className:"support__progress",max:100,value:s,"aria-hidden":"true"})]})}return"downloadable"===t?.kind?e.jsx("div",{className:"support__download",children:e.jsx(f,{label:"Download the on-device model",icon:e.jsx(k,{size:18}),onClick:s})}):null}function X({questions:t}){return e.jsxs("section",{className:"support__help","aria-label":"Questions",children:[e.jsx("p",{className:"support__section-label",children:"Questions"}),0===t.length?e.jsx("p",{className:"hint",children:"No matches."}):null,t.map(t=>e.jsxs("article",{className:"support__topic",children:[e.jsx("button",{type:"button",className:"support__topic-open",onClick:t.ask,children:t.title}),t.showMe?e.jsx(y,{label:"Show me",small:!0,onClick:t.showMe,children:e.jsx(w,{size:16})}):null]},t.id))]})}function J(){const{plan:e}=b(),s=I(),a=N();return t.useMemo(()=>{c(),u(()=>T(C())),p(()=>({narrow:h(),keys:m()})),d(()=>!0===e?.capabilities["support.local-ai"]?.approved);const t=new Set([...j.filter(t=>v(t,e,{identityApi:a})).map(e=>`feature.${e.id}`),...s.map(({integration:e})=>`integration.${e.id}`)]);return{sectionDrawn:e=>t.has(e),holds:D,installed:t=>!0===e?.capabilities[t]?.approved}},[e,s,a])}function P({query:a,route:i,support:n}){const r=J(),o=t.useMemo(()=>function(e,t){const s=t.trim().toLowerCase();return""===s?e:e.map(e=>({...e,tutorials:e.tutorials.filter(t=>`${t.goal.title} ${e.title}`.toLowerCase().includes(s))})).filter(e=>e.tutorials.length>0)}(function(e="/vault",t={}){const a=new Map(s().filter(t=>Q(t,e)).filter(e=>F(e,t)).map(e=>[e.id,e])),i=new Set,n=[];for(const s of G){const e=[];for(const t of s.goals){const s=a.get(t);s&&(i.add(t),e.push({goal:s,steps:O(s.guide)}))}e.length>0&&n.push({id:s.id,title:s.title,tutorials:e})}const r=[...a.values()].filter(e=>!i.has(e.id));return r.length>0&&n.push({id:"more",title:"More",tutorials:r.map(e=>({goal:e,steps:O(e.guide)}))}),n}(i,r),a),[a,i,r]);return e.jsxs("section",{className:"support__library","aria-label":"Tutorials",children:[0===o.length?e.jsx("p",{className:"hint",children:"No matches."}):null,o.map(t=>e.jsxs("div",{className:"support__group",children:[e.jsx("h3",{className:"support__section-label",children:t.title}),e.jsx("ul",{className:"support__tutorials",children:t.tutorials.map(({goal:t,steps:s})=>e.jsx("li",{children:e.jsxs("button",{type:"button",className:"support__tutorial","data-tutorial":t.id,onClick:()=>{n.startGuide(t.guide,"authored")},children:[e.jsx("span",{className:"support__tutorial-title",children:t.title}),e.jsxs("span",{className:"support__tutorial-steps",children:[s," ",1===s?"step":"steps"]}),e.jsx(S,{size:14})]})},t.id))})]},t.id))]})}const W={question:"you",answer:"support",note:"·"},Z={question:"you asked",answer:"support answered",note:"note"};function V({gate:o=!1}){const{view:l,support:c}=i(),u=t.useRef(null),p=t.useRef(null),d=t.useCallback(()=>c.close(),[c]);z(!0,u,p,d);const[m,h]=t.useState(""),[j,v]=t.useState("ask"),f=J(),{plan:_}=b(),k=!0===_?.capabilities["support.local-ai"]?.approved||!0===_?.capabilities["support.remote-ai"]?.approved?"Ask":"Search",w=t.useMemo(()=>function(e,t,s){return e.flatMap(e=>{const i=e.goal?a(e.goal):null;return null===i?[e]:F(i,s)?[Q(i,t)?e:{...e,goal:null}]:[]})}(m.trim()?n(m):r(l.route),l.route,f),[m,l.route,f]),N=t.useMemo(()=>function(e,t){return s().filter(s=>!0!==s.libraryOnly&&F(s,t)&&g(s.routes,e))}(l.route,f),[l.route,f]),C=l.availability,S=!l.thinking,q=t.useMemo(()=>{const e=function(e,t,s){const i=[];for(const n of e){const e=n.goal?a(n.goal):null;n.goal&&!e||i.push({id:n.id,title:n.title,ask:()=>{s?t.ask(n.title):t.answerFromAuthoredHelp(n.title,n.answer)},showMe:e?()=>{t.startGuide(e.guide,"authored")}:null})}return i}(w,c,S),t=new Set(w.flatMap(e=>e.goal??[])),s=m.trim()?[]:function(e,t,s,a){const i=[];for(const n of e)t.has(n.id)||i.push({id:`goal.${n.id}`,title:n.title,ask:()=>{a?s.ask(n.title):s.answerFromAuthoredHelp(n.title,`A walkthrough can show you: ${n.title}.`)},showMe:()=>{s.startGuide(n.guide,"authored")}});return i}(N,t,c,S);return[...e,...s]},[w,N,c,S,m]);return e.jsxs("div",{className:"sheet-layer",children:[e.jsx("button",{type:"button",className:"scrim","aria-label":"Close",onClick:d}),e.jsxs("section",{ref:u,className:"sheet support",role:"dialog","aria-modal":"true","aria-label":"Support",children:[e.jsxs("div",{className:"sheet__head",children:[e.jsx("span",{className:"sheet__mark","aria-hidden":"true",children:e.jsx(M,{size:20})}),e.jsx("div",{className:"sheet__grow",children:e.jsx("h2",{children:"Support"})}),e.jsx("button",{ref:p,type:"button",className:"icon-btn","aria-label":"Close",onClick:d,children:e.jsx(x,{size:18})})]}),e.jsxs("div",{className:"sheet__body support__body",children:[o?null:e.jsx(K,{}),e.jsx(Y,{warning:l.warning}),e.jsx(U,{availability:C,onAcquire:()=>{c.acquireModel()}}),e.jsx("div",{className:"support__tabs",role:"tablist","aria-label":"Support",children:["ask","tutorials"].map(t=>e.jsx("button",{type:"button",role:"tab",id:`support-tab-${t}`,"aria-selected":j===t,"aria-controls":`support-panel-${t}`,tabIndex:j===t?0:-1,className:"support__tab"+(j===t?" is-active":""),onClick:()=>v(t),onKeyDown:e=>{if("ArrowLeft"!==e.key&&"ArrowRight"!==e.key)return;e.preventDefault();const s="ask"===t?"tutorials":"ask";v(s),document.getElementById(`support-tab-${s}`)?.focus()},children:"ask"===t?k:"Tutorials"},t))}),"tutorials"===j?e.jsx("div",{role:"tabpanel",id:"support-panel-tutorials","aria-labelledby":"support-tab-tutorials",children:e.jsx(P,{query:m,route:l.route,support:c})}):e.jsxs("div",{className:"support__ask",role:"tabpanel",id:"support-panel-ask","aria-labelledby":"support-tab-ask",children:[e.jsx("section",{className:"support__thread","aria-label":"Conversation","aria-live":"polite",children:l.transcript.map(t=>e.jsxs("article",{className:`support__line support__line--${t.kind}`,"aria-label":Z[t.kind],children:[e.jsx("span",{className:"support__who","aria-hidden":"true",children:W[t.kind]}),e.jsx("p",{className:"support__text",children:t.text}),t.thoughts?e.jsxs("details",{className:"support__trace","aria-live":"off",children:[e.jsx("summary",{children:"Thoughts"}),e.jsx("p",{className:"support__trace-body",children:t.thoughts})]}):null,t.computer.length>0?e.jsxs("details",{className:"support__trace","aria-live":"off",children:[e.jsx("summary",{children:"Computer"}),e.jsx("ol",{className:"support__computer",children:t.computer.map((t,s)=>e.jsxs("li",{children:[e.jsx("span",{className:"support__computer-title",children:t.title}),t.detail?e.jsx("p",{className:"support__computer-detail",children:t.detail}):null]},`${t.title}:${s}`))})]}):null,t.walkthroughs.length>0?e.jsx("div",{className:"support__suggestions",children:t.walkthroughs.map(t=>{const s=a(t.goal);return s?e.jsxs("button",{type:"button",className:"btn btn--sm choice",onClick:()=>{c.startGuide(s.guide,"authored")},children:["Show me: ",t.title]},t.goal):null})}):null,t.suggestions.length>0?e.jsx("div",{className:"support__suggestions",children:t.suggestions.map(t=>e.jsx("button",{type:"button",className:"btn btn--sm btn--ghost choice",disabled:!S,onClick:()=>{c.ask(t)},children:t},t))}):null]},t.id))}),l.transcript.length>0?e.jsx("div",{className:"actions",children:e.jsx(y,{label:"Clear conversation",small:!0,onClick:()=>c.clear(),children:e.jsx($,{size:16})})}):null,l.thinking?e.jsxs("div",{className:"support__pending",children:[e.jsx("output",{className:"support__pending-read",children:"Thinking…"}),e.jsx(y,{label:"Cancel",small:!0,onClick:()=>c.cancel(),children:e.jsx(x,{size:16})})]}):null,e.jsx(X,{questions:q})]})]}),e.jsx("div",{className:"sheet__foot",children:e.jsx(A,{query:m,onQueryChange:h})})]})]})}export{V as SupportPanel};
@@ -0,0 +1 @@
1
+ .vault{position:relative;--fab-size: 3.5rem;--fab-gap: 1rem;--vault-status-h: 2rem}.fab{position:absolute;z-index:3;right:max(var(--fab-gap),env(safe-area-inset-right));bottom:var(--fab-gap);width:var(--fab-size);height:var(--fab-size);border-radius:0;background:var(--ink);color:var(--canvas);box-shadow:0 0 0 1px var(--line),var(--shadow);-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.vault[data-pane=list] .fab{bottom:calc(var(--vault-status-h) + var(--fab-gap))}.fab__add{display:grid;place-items:center;width:100%;height:100%;margin:0;padding:0;border:0;border-radius:0;background:transparent;color:inherit;touch-action:none;-webkit-tap-highlight-color:transparent;transition:background .14s var(--ease)}.fab__add:active{background:color-mix(in srgb,var(--canvas) 16%,transparent)}.fab__add:focus-visible{outline-offset:-4px;outline-color:var(--canvas)}.vault[data-pane=list] .vtree__rows,.vault[data-pane=tree] .vault__tree{scroll-padding-bottom:calc(var(--fab-size) + var(--fab-gap) * 2)}.vault[data-pane=list] .vtree__rows:after,.vault[data-pane=tree] .vault__tree:after{content:"";display:block;height:calc(var(--fab-size) + var(--fab-gap))}@media(prefers-reduced-motion:reduce){.fab__add{transition:none}}
@@ -0,0 +1 @@
1
+ import{j as e,r as t}from"./react-dom-BwC4eQlG.js";import{H as s,K as n,p as r}from"./identity-view-paths-Bi1yigZk.js";import{L as a,b as l,u as i,a as o,c,O as u}from"./react-router-XsJY84ug.js";import{h as d,j as m}from"./listing-page-B-c8QQVp.js";import{h as f,bF as p,d as h,s as v,H as j,bG as x,Q as y,ae as b,bH as g,bI as k,bJ as _,i as w}from"./drop-open-BjgdLxWM.js";import{e as N,cz as C,be as I,bd as R,o as S,v as $,m as A,z as E,at as F,x as P,bO as z,bR as T,a0 as M,b_ as B,cl as O,cA as q,b8 as D,bU as L,M as U,O as V,Q as H,cB as Q,cC as X,cD as Y,cE as J,aA as K,cF as G}from"./main-BrkS-iow.js";import{u as W,b as Z,C as ee,c as te,v as se,p as ne,N as re}from"./Crumbs-BQsauYj_.js";import{o as ae,P as le,v as ie,b as oe,d as ce,e as ue,U as de}from"./vault-menu-CqO_AStq.js";import{s as me,e as fe}from"./section-nav-goals-B_N-ZW2I.js";import{u as pe,A as he}from"./pane-trail-dW-2RSUm.js";import{v as ve,w as je,u as xe,x as ye,y as be,j as ge}from"./idp-presets-B1M-P0Ek.js";import{a as ke,j as _e,d as we,k as Ne,l as Ce,m as Ie,v as Re,n as Se}from"./vault-list-path-Bh2_KZkq.js";import{j as $e,u as Ae,k as Ee,e as Fe,F as Pe,d as ze,l as Te,m as Me,a as Be}from"./wake-lock-C_y0fQco.js";import{u as Oe,A as qe,a as De}from"./use-vault-search-C7u00nrc.js";import{o as Le}from"./vaults-B043odav.js";import{C as Ue,S as Ve}from"./InvokeScreen-C-kFFYVF.js";import{C as He}from"./MethodPicker-CqQTyAaT.js";import{i as Qe,M as Xe}from"./vault-ui-seam-BQGS7RR6.js";import{w as Ye,r as Je}from"./model-provider-B6oAnQX9.js";import{E as Ke}from"./EmptyTip-DnxQjLsP.js";import"./identity-BVf8yWa4.js";import{a as Ge}from"./payload-CVz3G9cA.js";import{a as We,C as Ze}from"./use-password-reset-generate-B11XaeM6.js";import"./native-worker-bytes-a0e18d71-DFmKzL3P.js";import"./hosted-model-authority-CcNPE44H.js";import"./signals-DdOHdr--.js";import"./native-worker-noble-hashes-b1a58353-IgGIMWEC.js";import"./native-worker-zod-5c0ed887-B342B6ko.js";import"./native-worker-zod-jitless-ba55e4a3-DZHC6DC7.js";import"./seams-DJ_lslby.js";import"./support-context-DrcseTKK.js";import"./PageTreeBranch-OgsaK684.js";import"./use-settings-category-Dy0gsCtF.js";import"./features-9FeW22VH.js";import"./use-integrations-drawn-DYzpglrK.js";import"./shared-Ck7e2FJN.js";import"./native-catalog-status-INsDvLpU.js";import"./certs-CDCfMuEi.js";import"./bucket-saved-vQCiVvN_.js";import"./local-vault-sessions-CGv9AsFj.js";import"./FeatureSections-BG-JsWID.js";import"./compartment-guard-D3FuKM8N.js";import"./native-worker-noble-ciphers-708367a7-BPuD3lXB.js";import"./connectivity-monitor-B0ueE5HQ.js";import"./IdentityConnectionSignIn-Bg53RjtJ.js";import"./federation-configured-restoration-DWAXgzcz.js";import"./entra-instances-NyEKYI5c.js";import"./tailscale-artifacts-FyY85j_Y.js";import"./vault-credential-custody-DpnBb4qo.js";import"./native-auth-return-BTXjvSvx.js";import"./gate-seat-DHBrLaMG.js";import"./consent-CcqmRPoB.js";import"./scroll-renderer-CPxIcBzQ.js";import"./rotation-relay-DCS7Aa59.js";import"./native-identity-admission-C4ZFillF.js";import"./byo-B-SNpHiS.js";import"./iam-zBfzStfy.js";import"./directory-signin-model-BfxENbC3.js";function et(e,t){return`${ve(e.name)}${je(e)}`.toLowerCase().includes(t)}function tt(e,t){return{type:"item",key:e.id,path:`${t}${ve(e.name)}${je(e)}`,name:ve(e.name),ext:je(e),child:""!==t,item:e}}function st(){const t=W()?.Banner;return t?e.jsx(t,{}):null}function nt({disabled:t,onDownload:s}){return e.jsx(N,{small:!0,label:"Backup actions",disabled:t,"aria-haspopup":"menu",onClick:t=>{const n=t.currentTarget,r=n.getBoundingClientRect();ae({clientX:r.right,clientY:r.bottom,preventDefault:()=>t.preventDefault()},n,"Backup actions",[[{id:"download-encrypted-backup",label:"Download backup",icon:e.jsx(I,{size:16}),run:s}]])},children:e.jsx(C,{size:16})})}const rt="vault-export";function at(e){return e instanceof Error?e.message:"Export failed."}function lt({onClose:s}){const n=t.useRef(null),r=t.useRef(null);ke(!0,n,r,s);const a=Ae(),l=f(a),i=_e(),{saved:o,folderSaved:c,error:u,save:d,saveToFolder:m,download:y}=function(e){const[s,n]=t.useState(null),[r,a]=t.useState(null),[l,i]=t.useState(null),o=t.useCallback(async()=>{try{const t=p(e);if("cancelled"===await Ee(()=>Promise.resolve(we.save(t.fileName,t.text,"application/json"))))return;n(t.fileName),i(null),h(rt)}catch(t){const e=at(t);i(e),v({id:rt,tone:"err",title:"Export",body:e})}},[e]),c=t.useCallback(()=>{try{const t=p(e);Ne(new Blob([t.text],{type:"application/json"}),t.fileName),n(t.fileName),i(null),h(rt)}catch(t){const e=at(t);i(e),v({id:rt,tone:"err",title:"Export",body:e})}},[e]);return{saved:s,folderSaved:r,error:l,save:o,saveToFolder:t.useCallback(async()=>{try{const t=await Ce();if(null===t)return;const s=p(e);await Ee(()=>Ie(t,s.fileName,s.text,"application/json")),a(t.name),i(null)}catch(t){i(at(t))}},[e]),download:c}}(a),b=u??l,g=function(e){const t=j(e.items).filter(e=>null===e.deletedAt).length;return[{key:"Vault",value:Le()},{key:"Items",value:String(t)},{key:"Opens with",value:x(e.header)??"the master password"},{key:"Holds",value:"ciphertext only"}]}(a);return o&&g.push({key:"File",value:o}),c&&g.push({key:"Folder",value:c}),e.jsxs("div",{className:"sheet-layer",children:[e.jsx("button",{type:"button",className:"scrim","aria-label":"Close",onClick:s}),e.jsxs("div",{ref:n,className:"sheet",role:"dialog","aria-label":"Export encrypted vault","aria-modal":"true",children:[e.jsxs("div",{className:"sheet__head",children:[e.jsx("span",{className:"sheet__mark","aria-hidden":"true",children:e.jsx(R,{size:20})}),e.jsx("div",{className:"sheet__grow",children:e.jsx("h2",{children:"Export"})}),e.jsx(nt,{disabled:null!==l,onDownload:y}),e.jsx("button",{ref:r,type:"button",className:"icon-btn","aria-label":"Close",title:"Close",onClick:s,children:e.jsx(S,{size:18})})]}),e.jsx("div",{className:"sheet__body",children:e.jsx(Ue,{ok:null===b,top:o&&null===b?"Saved":void 0,name:"Encrypted backup",facts:g,primary:null===l?{label:o?"Save again":"Save backup",onClick:d}:void 0,secondary:null===l&&i?{label:"Save to folder",onClick:m}:void 0,children:b?e.jsx("p",{className:"vexport__marks",children:e.jsx(Ve,{tone:"err",label:b})}):null})})]})]})}function it(){const[s,n]=t.useState(!1),r=t.useCallback(()=>n(!0),[]),a=t.useCallback(()=>n(!1),[]);return{open:s,show:r,element:s?e.jsx(lt,{onClose:a}):null}}function ot(){const t=xe("vault.export"),s=it();return e.jsxs(e.Fragment,{children:[e.jsx("button",{ref:t,type:"button",className:"icon-btn icon-btn--sm","aria-label":"Export items",title:"Export encrypted vault","aria-haspopup":"dialog","aria-expanded":s.open,onClick:s.show,children:e.jsx(R,{size:15})}),s.element]})}function ct(){const e=it();return $e({id:"export",label:"Export items",order:20,slide:"down",run:e.show}),e.element}function ut({}){return null}function dt(e){e.run(),"import"===e.id&&ye("vault.import"),"export"===e.id&&ye("vault.export")}function mt({to:t,fabRef:s,shown:n}){return n?e.jsx(ft,{to:t,fabRef:s}):null}function ft({to:s,fabRef:n}){const r=d("vault-command"),l=xe("vault.import",{activation:"manual"}),i=xe("vault.export",{activation:"manual"}),o=Oe(dt),c=t.useCallback(e=>{l(e),i(e),n?.(e)},[l,i,n]);return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"fab","data-own-hold":"",onContextMenu:e=>{e.preventDefault(),o.holding()||function(e,t){const s=Fe().map(e=>({id:e.id,label:e.label,run:()=>dt(e)}));ae(e,t,"Add actions",[s])}(e,e.currentTarget)},children:e.jsx(a,{ref:c,className:"fab__add","aria-label":"New item",title:"New item (n)",to:s,draggable:!1,...o.bind,children:e.jsx($,{size:24})})}),o.state?e.jsx(qe,{slide:o.state}):null,r.map(({id:t,Entry:s})=>s?e.jsx(s,{},t):null),e.jsx(ut,{placement:"add-menu"}),e.jsx(ct,{})]})}function pt(e,t,s){const n=e=>null!==e.deletedAt;return{restore:t=>{n(t)&&(s(null),e.restoreItem(t.id))},purge:r=>{n(r)&&(t===r.id?(s(null),e.purgeItem(r.id)):s(r.id))},commitPurge:t=>{n(t)&&(s(null),e.purgeItem(t.id))}}}function ht({items:s,armedId:n,onRestore:r,onPurge:a}){const[l,i]=t.useState(null),o=xe("trash.restore"),c=xe("trash.purge");t.useLayoutEffect(()=>{const e=document.querySelector(".vtree__rows [aria-selected='true']"),t=e?.dataset.vtreeKey??null;i(e=>e===t?e:t)});const u=function(e,t){return null===t?e[0]??null:e.find(e=>e.id===t)??null}(s,l),d=null===u,m=null!==u&&n===u.id;return e.jsxs(e.Fragment,{children:[e.jsx("button",{ref:o,type:"button",className:"icon-btn icon-btn--sm","aria-label":"Restore",title:"Restore (r)",disabled:d,onClick:()=>{u&&r(u)},children:e.jsx(A,{size:15})}),e.jsx("button",{ref:c,type:"button",className:"icon-btn icon-btn--sm"+(m?" is-armed":""),"aria-label":m?le:"Delete permanently",title:m?le:"Delete permanently (X)",disabled:d,onClick:()=>{u&&a(u)},children:e.jsx(E,{size:15})})]})}function vt({createPath:t,createRef:s,hidden:n=!1}){return n?null:e.jsxs(e.Fragment,{children:[e.jsx(a,{ref:s,className:"icon-btn icon-btn--sm","aria-label":"New item",title:"New item (n)",to:t,children:e.jsx($,{size:15})}),e.jsx(ut,{placement:"path"}),e.jsx(jt,{})]})}function jt(){const t=d("vault-command");return e.jsxs(e.Fragment,{children:[t.map(({id:t,Command:s})=>e.jsx(s,{},t)),e.jsx(ot,{})]})}function xt({items:t,onPick:s,onClose:n}){const r=t.filter(e=>null===e.deletedAt&&"drop"!==e.kind).sort((e,t)=>e.name.localeCompare(t.name));return e.jsx(He,{title:"Temporary drop",mark:e.jsx(F,{size:20}),onClose:n,children:0===r.length?e.jsx(Ve,{tone:"idle",label:"This vault has no item to drop."}):e.jsx("div",{className:"vault-drop__list",children:r.map(t=>e.jsx(Pe,{label:t.name||"Untitled",actions:e.jsx(N,{label:`Drop ${t.name||"this item"}`,small:!0,onClick:()=>s(t),children:e.jsx(F,{size:16})}),children:e.jsx("span",{className:"frow__value",children:y[t.kind]})},t.id))})})}function yt({road:t,guideId:s,onPick:n}){const r=xe(s);return e.jsx(bt,{road:t,onPick:n,anchorRef:r})}function bt({road:t,onPick:s,anchorRef:n}){return e.jsxs(a,{ref:n,to:t.to,className:"vfilter__road"+(t.active?" is-active":""),"aria-current":t.active?"page":void 0,onClick:s,children:[e.jsx("span",{className:"vfilter__name",children:t.label}),e.jsx("span",{className:"vfilter__n",children:t.count})]})}function gt({items:n,folders:r,typeIds:a,filter:l,folderId:i,sharedItems:o}){const[c,u]=t.useState(!1),d=t.useRef(null),m=t.useRef(null),f=xe("vault.filter"),p=t.useCallback(()=>u(!1),[]);ke(c,m,d,p);const h=t.useMemo(()=>function(e,t,n,r,a,l){const i=e.filter(e=>null===e.deletedAt),o=s(r),c=i.filter(e=>(l?.get(e.id)?.incoming.length??0)>0).length,u=[{key:"all",to:"/vault",label:"All items",count:i.length,active:"all"===r&&!a},{key:"favorites",to:"/vault?f=favorites",label:"Favorites",count:i.filter(e=>e.favorite).length,active:"favorites"===r,guideId:"vault.filter.favorites"}];(c>0||"shared"===r||"owned"===r)&&u.push({key:"shared",to:"/vault?f=shared",label:"Shared with me",count:c,active:"shared"===r},{key:"owned",to:"/vault?f=owned",label:"Owned by me",count:i.length-c,active:"owned"===r});for(const s of n)u.push({key:s,to:`/vault?f=${s}`,label:g(s),count:i.filter(e=>b(e)===s).length,active:o===s,guideId:"account"===s?"vault.filter.logins":void 0});for(const s of t)u.push({key:`folder:${s.id}`,to:`/vault?folder=${encodeURIComponent(s.id)}`,label:s.name,count:i.filter(e=>e.folderId===s.id).length,active:a===s.id});return u.push({key:"trash",to:"/vault?f=trash",label:"Trash",count:e.filter(e=>null!==e.deletedAt).length,active:"trash"===r}),u}(n,r,a,l,i,o),[n,r,a,l,i,o]),v=h.find(e=>e.active),j="all"===l&&!i,x=!j,y=`Filter — ${v?.label??(j?"All items":l)}`;return e.jsxs("div",{className:"vfilter",children:[e.jsxs("button",{ref:f,type:"button",className:"choice vfilter__open"+(x?" is-narrowed":""),"aria-label":y,title:y,"aria-haspopup":"dialog","aria-expanded":c,onClick:()=>u(!0),children:[e.jsx("span",{className:"vfilter__label",children:v?.label??(j?"All items":l)}),e.jsx(P,{size:16})]}),c?e.jsx(kt,{roads:h,sheetRef:m,closeRef:d,close:p}):null]})}function kt({roads:t,sheetRef:s,closeRef:n,close:r}){return e.jsxs("div",{className:"sheet-layer",children:[e.jsx("button",{type:"button",className:"scrim","aria-label":"Close",onClick:r}),e.jsxs("div",{ref:s,className:"sheet",role:"dialog","aria-label":"Filter items","aria-modal":"true",children:[e.jsxs("div",{className:"sheet__head",children:[e.jsx("div",{className:"sheet__grow",children:e.jsx("h2",{children:"Filter"})}),e.jsx("button",{type:"button",className:"icon-btn","aria-label":"Close",ref:n,onClick:r,children:e.jsx(S,{size:18})})]}),e.jsx("div",{className:"sheet__body",children:e.jsx("div",{className:"vfilter__roads",children:t.map(t=>t.guideId?e.jsx(yt,{road:t,guideId:t.guideId,onPick:r},t.key):e.jsx(bt,{road:t,onPick:r},t.key))})})]})]})}const _t="config/tree-collapsed",wt=new TextEncoder,Nt=new TextDecoder;function Ct(e){return`vtree-row-${e}`}function It({verbs:t}){const s=Z();return e.jsxs("div",{className:"vtree__pathbar",children:[e.jsx(ee,{crumbs:s,className:"vtree__crumbs",label:"Vault path"}),e.jsxs("fieldset",{className:"vtree__keys","aria-label":"Vault commands",children:[t,e.jsx("button",{type:"button",className:"vtree__key vtree__key--help",title:"Keyboard shortcuts (?)",onClick:Ge,children:"?"})]})]})}function Rt({item:s,shared:n}){const r="secret"===s.kind?s.grantees:[],a=ze().activeTomb?.()??"",l=t.useSyncExternalStore(z,()=>T(a,s.id)?.state??"",()=>""),i=t.useSyncExternalStore(e=>Xe.subscribeRuns(e),()=>Xe.runPhaseFor(a,s.id)??"",()=>""),o=n?.incoming??[],c=n?.outgoing??0,u=[o.length>0?`Shared by ${o.map(e=>e.name).join(", ")}`:null,c>0?`Shared with ${c} ${d=c,1===d?"identity":"identities"}`:null,r.length>0?`Shared with ${r.join(", ")}`:null].filter(e=>null!==e);var d;const m=u.join(" · "),f=0===o.length?null:1===o.length?`Shared by ${o[0]?.name}`:`Shared by ${o[0]?.name} +${o.length-1}`;return e.jsxs("span",{className:"vtree__side",children:["needs-you"===i?e.jsx(M,{size:13,title:"Password reset needs you"}):"in-progress"===i||"queued"===i?e.jsx(M,{size:13,title:"Password reset in progress"}):"out-of-sync"===l?e.jsx(M,{size:13,title:"Rotation queued — no relay configured yet"}):null,"drop"===s.kind?e.jsx(M,{size:13,title:`Expires ${B(s.expiresAt)}`}):null,s.favorite?e.jsx(O,{size:13,filled:!0,title:"Favorite",className:"vtree__fav"}):null,f?e.jsx("span",{className:"vtree__sharer",title:m,children:f}):null,u.length>0?e.jsx(q,{size:13,className:"vtree__shared",title:f?void 0:m}):null]})}function St({actions:t,listRef:s,menuAbove:n,menuFor:r,onClose:a,row:l,setCursor:i,setMenuFor:o}){const c=We();return e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:"vtree__more","data-vtree-more":"","aria-label":`Actions for ${l.name}`,"aria-haspopup":"menu","aria-expanded":r===l.key,onClick:e=>{e.stopPropagation(),i(l.key),o(r===l.key?null:l.key)},children:e.jsx(C,{size:14})}),r===l.key?e.jsx(Ze,{className:`ctxmenu vtree__menu${n?" vtree__menu--above":""}${c?" ctxmenu--drill":""}`,sheet:c,label:`Actions for ${l.name}`,groups:ie(l.item,t),ignoreOutside:"[data-vtree-more]",listRef:s,onClose:a}):null]})}function $t(e){const t=[];let s=0;for(;s<e.length;){const n=e[s];if(!n)break;if("item"!==n.type||!n.child){t.push(n),s+=1;continue}const r=s;for(s+=1;s<e.length;){const t=e[s];if(!t||"item"!==t.type||!t.child)break;s+=1}t.push(e.slice(r,s))}return t}const At={activeTomb:Le,loadCollapsed:async function(e){try{const t=JSON.parse(Nt.decode(await Je(e,_t)));if(!Array.isArray(t))return[];const s=[];for(const e of t)Qe(e)&&s.push(e);return s}catch{return[]}},saveCollapsed:async function(e,t){await Ye(e,_t,wt.encode(JSON.stringify(t)))}};function Et({text:t,query:s}){const n=s?t.toLowerCase().indexOf(s):-1;return n<0?e.jsx(e.Fragment,{children:t}):e.jsxs(e.Fragment,{children:[t.slice(0,n),e.jsx("mark",{children:t.slice(n,n+s.length)}),t.slice(n+s.length)]})}function Ft({items:s,folders:n,activeItemId:r,sharedItems:a,title:l,total:i,actions:o,verbs:c,emptyMessage:u}){const[d,m]=t.useState(new Set),[f,p]=t.useState(null),[h,v]=t.useState(null),j=t.useRef([]),x=t.useRef(null),y=t.useRef(o);y.current=o;const b=t.useRef(null),g=t.useRef(null);te(b);const{listRef:k,menuAbove:_}=function(e,s){const[n,r]=t.useState(!1),a=t.useRef(null),l=t.useCallback(e=>{a.current=e},[]);return t.useLayoutEffect(()=>{const t=s.current,n=a.current;if(!e||!t||!n)return void r(!1);const l=n.closest(".vtree__row");if(!l)return void r(!1);const i=t.getBoundingClientRect(),o=l.getBoundingClientRect(),c=n.getBoundingClientRect();r(c.bottom>i.bottom&&o.top-c.height>=i.top)},[e,s]),{listRef:l,menuAbove:n}}(h,b),w=e=>{v(null),e&&b.current?.focus()},N=t.useRef(!1),C=t.useRef(d);C.current=d;const I=t.useRef(()=>{}),R=t.useRef(e=>{const t=new Set(C.current);t.has(e.path)?t.delete(e.path):t.add(e.path),I.current(t)}),{query:S,close:$}=De(g,b),A=t.useRef($);A.current=$;const E=At.activeTomb(),F=(S??"").trim().toLowerCase(),P=t.useMemo(()=>function(e,t,s,n){const{grouped:r,rootItems:a}=function(e,t){const s=new Map,n=[],r=new Set(t.map(e=>e.id));for(const a of e){if(!a.folderId||!r.has(a.folderId)){n.push(a);continue}const e=s.get(a.folderId);e?e.push(a):s.set(a.folderId,[a])}return{grouped:s,rootItems:n}}(e,t),l=function(e){const t=new Map;return e.map(e=>{const s=ve(e.name),n=(t.get(s)??0)+1;return t.set(s,n),n>1?`${s} (${n})`:s})}(t),i=t.flatMap((e,t)=>function(e,t,s,n,r){const a=""!==r&&t.toLowerCase().includes(r),l=a||!r?s:s.filter(e=>et(e,r));if(r&&0===l.length&&!a)return[];const i=`${t}/`,o=""!==r||!n.has(i),c={type:"dir",key:`dir_${e.id}`,path:i,name:t,count:l.length,expanded:o};return o?[c,...l.map(e=>tt(e,i))]:[c]}(e,l[t]??ve(e.name),r.get(e.id)??[],s,n));for(const o of a)n&&!et(o,n)||i.push(tt(o,""));return i}(s,n,d,F),[s,n,d,F]);j.current=P,x.current=f;const z=P.find(e=>e.key===f)??null,T=P.filter(e=>"item"===e.type).length;t.useEffect(()=>{N.current=!1;let e=!0;return At.loadCollapsed(E).then(t=>{e&&(m(new Set(t)),N.current=!0,b.current?.focus({preventScroll:!0}))}),()=>{e=!1}},[E]),I.current=e=>{m(e),N.current&&At.saveCollapsed(E,[...e]).catch(()=>{})},t.useEffect(()=>{r&&P.some(e=>e.key===r)?p(r):p(e=>null!==e&&P.some(t=>t.key===e)?e:P[0]?.key??null)},[r,P]),t.useEffect(()=>{f&&document.getElementById(Ct(f))?.scrollIntoView?.({block:"nearest"})},[f]),t.useEffect(()=>{const e=e=>j.current.find(t=>t.key===e)??null,t=e=>{const t=j.current;if(0===t.length)return;const s=t.findIndex(e=>e.key===x.current),n=t[s<0?0:Math.min(Math.max(s+e,0),t.length-1)];p(n?.key??null),"item"===n?.type&&y.current.preview(n.item)},s=t=>()=>{const s=(()=>{const t=e(x.current);return"item"===t?.type?t.item:null})();s&&t(s)},n=e=>R.current(e),r=e=>{const s=j.current;if(0===s.length)return;const n=s.findIndex(e=>e.key===x.current);t(e-(n<0?0:n))};return Te({hasRows:()=>j.current.length>0,next:(e=1)=>t(e),previous:(e=1)=>t(-e),first:()=>t(Number.NEGATIVE_INFINITY),last:()=>t(Number.POSITIVE_INFINITY),page:(e,s)=>{t(e*ne(b.current,"half"===s))},edge:e=>{const t=[...b.current?.querySelectorAll("[role='treeitem']")??[]];r(se(b.current,t,e))},focus:()=>{b.current?.focus({preventScroll:!0})},toIndex:e=>r(e),enter:()=>{const s=e(x.current);s&&("item"===s.type?y.current.open(s.item):s.expanded?t(1):n(s))},parent:()=>{const t=e(x.current);if(!t)return;if("dir"===t.type)return void(t.expanded&&n(t));if(!t.child)return void Me();const s=j.current;for(let e=s.findIndex(e=>e.key===t.key);e>=0;e--){const t=s[e];if("dir"===t?.type)return void p(t.key)}},activate:()=>{const t=e(x.current);t&&("item"===t.type?y.current.open(t.item):n(t))},search:me,closeSearch:()=>{A.current(),b.current?.focus()},copySecret:s(e=>y.current.copySecret(e)),copyUsername:s(e=>y.current.copyUsername(e)),edit:s(e=>y.current.edit(e)),trash:s(e=>y.current.trash(e)),restore:s(e=>y.current.restore?.(e)),purge:s(e=>y.current.purge?.(e)),create:()=>y.current.create(),favorite:s(e=>y.current.favorite(e)),share:s(e=>y.current.share?.(e))})},[]);const M=be(E,z?.path??null),B=null!==S&&""!==F?`${T||"-"}/${i||"-"} · /${F}`:`${s.length||"-"}/${i||"-"} · ${l}`;return e.jsxs("div",{className:"vtree",ref:g,children:[e.jsx(It,{verbs:c}),0===s.length?e.jsxs("div",{className:"empty",children:[e.jsx("h2",{children:u}),e.jsx(Ke,{tip:"Trash is empty"===u?"keymap":"vaultEmpty"})]}):null,e.jsx("div",{ref:b,hidden:0===s.length,className:"vtree__rows",role:"tree","aria-label":"Vault items",tabIndex:0,"aria-activedescendant":f?Ct(f):void 0,onContextMenu:e=>{const t=e.target instanceof Element?e.target:null,s=t?.closest("[data-vtree-key]")?.dataset.vtreeKey,n=P.find(e=>e.key===s)??null;n&&p(n.key),v(null),ae(e,t,n?`Actions for ${n.name}`:"Vault items",oe(n,o,e=>{"dir"===e.type&&R.current(e)},me))},children:$t(P).map(t=>{const s=Array.isArray(t)?t:[t],n=s.map(t=>{const s=t.key===f,n={id:Ct(t.key),className:`vtree__row${"item"===t.type&&t.child?" vtree__row--child":""}${s?" is-cursor":""}`,"aria-level":"item"===t.type&&t.child?2:1,"aria-selected":s};let r;return r=e.jsxs(e.Fragment,"dir"===t.type?{children:[e.jsx(D,{size:12,className:"vtree__caret"+(t.expanded?" is-open":"")}),e.jsxs("span",{className:"vtree__name",children:[e.jsx(Et,{text:t.name,query:F}),e.jsx("span",{className:"vtree__dim",children:"/"})]}),e.jsx("span",{className:"vtree__count",children:t.count})]}:{children:[e.jsxs("span",{className:"vtree__name",children:[e.jsx(Et,{text:t.name,query:F}),e.jsx("span",{className:"vtree__dim",children:t.ext})]}),e.jsx(Rt,{item:t.item,shared:a?.get(t.item.id)}),e.jsx(St,{actions:o,listRef:k,menuAbove:_,menuFor:h,onClose:w,row:t,setCursor:p,setMenuFor:v})]}),e.jsx("div",{role:"treeitem","data-vtree-key":t.key,...n,..."dir"===t.type?{"aria-expanded":t.expanded}:{},onClick:()=>{p(t.key),"item"===t.type?o.open(t.item):R.current(t)},children:r},t.key)});return Array.isArray(t)?e.jsx("div",{className:"vtree__kids",children:n},`kids:${s[0]?.key??"items"}`):n[0]??null})}),e.jsxs("output",{className:"vault__status","aria-live":"polite",children:[e.jsx("span",{className:"vault__status-path",children:M}),e.jsx("span",{className:"vault__status-meta",children:B})]})]})}function Pt({inTrash:t,empty:s}){const n=function(e,t){return e?t?"r restore · X delete · ? keys":"enter open · r restore · X delete · / search · ? keys":t?"n new · import · ? keys":"enter open · n new · / search · ? keys"}(t,s),r=function(e,t){return e?t?null:"hold or swipe a row to restore or delete":t?"tap + to add an item, or import":"hold or swipe a row for actions"}(t,s);return null===r?e.jsx("p",{className:"buffer__keys buffer__keys--keys",children:n}):e.jsxs("p",{className:"buffer__keys",children:[e.jsx("span",{className:"buffer__keys-keys",children:n}),e.jsx("span",{className:"buffer__keys-touch",children:r})]})}function zt(){const{items:t}=Ae(),r=ze(),a=L(r.activeTomb?.()??"",t),[i]=l(),o=s(i.get("f")??"all"),c="trash"===o,u=e=>a.get(e)?.incoming.length??0,d=j(t).filter(e=>c?null!==e.deletedAt:null===e.deletedAt&&("favorites"===o?e.favorite:"shared"===o?u(e.id)>0:"owned"===o?0===u(e.id):"all"===o||b(e)===o)),m="all"===o?null:"shared"===o?"shared items":"owned"===o?"owned items":(n(o)??o).toLowerCase();return e.jsxs("div",0===d.length?{className:"buffer",children:[e.jsx("p",{className:"buffer__line",children:c?"trash is empty":m?`no ${m} yet`:"nothing sealed yet"}),e.jsx(Pt,{inTrash:c,empty:!0})]}:{className:"buffer",children:[e.jsxs("p",{className:"buffer__line",children:[d.length," ",1===d.length?"item":"items",m?` · ${m}`:""]}),e.jsx(Ke,{tip:"vaultMove"}),e.jsx(Pt,{inTrash:c,empty:!1})]})}const Tt=e=>"none"===getComputedStyle(e).display;function Mt(e,t){return t?"Folder":("all"===e?void 0:n(e))??"All items"}function Bt(){const[n]=l(),a=i(),{itemId:d}=o(),{items:f,folders:p}=Ae(),h=ze(),v=L(h.activeTomb?.()??"",f),x=Be(),y=c(),g=s(n.get("f")??"all"),N="trash"===g,[C,I]=t.useState(null),[R,S]=t.useState(null),$=n.get("folder"),A=t.useMemo(()=>j(f),[f]),E=t.useMemo(()=>k(A.filter(e=>{if(N?null===e.deletedAt:null!==e.deletedAt)return!1;if($&&e.folderId!==$)return!1;if("favorites"===g&&!e.favorite)return!1;const t=v.get(e.id)?.incoming.length??0;return!("shared"===g&&0===t||"owned"===g&&t>0||"all"!==g&&"favorites"!==g&&"shared"!==g&&"owned"!==g&&"trash"!==g&&b(e)!==g)})),[A,g,$,N,v]),F=ge(),P=Re(a.pathname,n),z=_(w().has(g)&&m(g)?g:void 0,$),T=t.useMemo(()=>{if($)return[];if("all"===g&&E.length===A.filter(e=>null===e.deletedAt).length)return p;const e=new Set(E.map(e=>e.folderId).filter(Boolean));return p.filter(t=>e.has(t.id))},[g,$,p,A,E]),M="/vault"===a.pathname||void 0!==d&&!a.pathname.endsWith("/edit"),B=t.useMemo(()=>({open:e=>{const t=`/vault/${e.id}`;y(`${t}${a.search}`,{replace:a.pathname===t})},preview:e=>{M&&e.id!==d&&y(`/vault/${e.id}${a.search}`,{replace:!0})},copySecret:e=>{if("account"===e.kind){const t=ue(e);return void(t&&x(t))}const t=Y(e);t&&x(t)},copyCredential:(e,t)=>{const s="account"===e.kind?e:"credential"===e.kind?{methods:[e.method]}:null;if(null===s)return;const n=ce(s).find(e=>e.id===t);Promise.resolve(n?.read()).then(e=>{e&&x(e)})},copyUsername:e=>{const t=X(e);t&&x(t)},edit:e=>y(`/vault/${e.id}/edit`),trash:e=>{R===e.id?(S(null),h.trashItem(e.id)):S(e.id)},commitTrash:e=>{S(null),h.trashItem(e.id)},...pt(h,C,I),favorite:e=>{h.toggleFavorite(e.id)},share:e=>{Q(e)&&y(`/vault/${e.id}?share=drop`)},create:()=>{N||y(z)},shareGrant:e=>y(r(e.id)),inTrash:N}),[C,R,x,z,N,d,a.pathname,a.search,y,M,h]);t.useEffect(()=>{N||I(null)},[N]);const O=A.filter(e=>"trash"===g?null!==e.deletedAt:null===e.deletedAt).length,{detailRef:q,listPaneRef:D,treePaneRef:W,newItemRef:Z,listRef:ee,treeListRef:te,recordNewItem:se}=function(){const e=t.useRef(null),s=t.useRef(null),n=t.useRef(null),r=t.useRef(null),a=xe("vault.create"),l=xe("vault.list"),i=xe("vault.list");return{detailRef:e,listPaneRef:s,treePaneRef:n,newItemRef:r,listRef:l,treeListRef:i,recordNewItem:e=>{r.current=e,a(e)}}}(),ne=Se(a.search,F),ae="pick-drop"===n.get("share"),le=t.useRef(P);t.useEffect(()=>{F&&"tree"===P&&"tree"!==le.current&&fe(),le.current=P},[F,P]);const ie=pe(P);return function(e){const{key:s}=i();t.useEffect(()=>{const t=e.list.current,s=e.detail.current;if(!t||!s)return;if(document.activeElement?.closest('[role="dialog"]'))return;const n=e.tree.current,r=n?.querySelector('[role="tree"]');if(r&&n&&!Tt(n))return function(e,t,s){const n=document.activeElement;(s||null!==n&&!e.contains(n))&&V(t)}(n,r,U());if(!Tt(t))return function(e,t,s){const n=function(e,...t){return t.some(t=>t&&null!==e&&Tt(t)&&t.contains(e))}(document.activeElement,s,e.tree.current);(U()||n)&&(V(t.querySelector('[role="tree"]:not([hidden])'))||V(e.newItem.current)||V(H(t)))}(e,t,s);const a=document.activeElement;(U()||null!==a&&t.contains(a))&&V(s)},[s])}({tree:W,list:D,detail:q,newItem:Z}),t.useEffect(()=>{const e="detail"===P?{pane:q.current,to:ne,up:"list"}:"list"===P?{pane:D.current,to:"/vault",up:"tree"}:null;if(!e?.pane)return;const{to:t,up:s}=e;return J(e.pane,()=>ie(s,t))},[P,ne,ie,q,D]),e.jsx(he,{value:F?ie:null,children:e.jsxs("div",{className:"vault","data-pane":P,children:[e.jsx("div",{className:"vault__tree",ref:e=>{W.current=e,te(F?e:null)},children:F?e.jsx(e.Fragment,{children:e.jsx(re,{})}):null}),e.jsxs("div",{className:"vault__list",ref:e=>{D.current=e,ee(e)},children:[e.jsx(st,{}),e.jsx(Ft,{items:E,folders:T,activeItemId:d,sharedItems:v,actions:B,title:Mt(g,$),total:O,emptyMessage:"trash"===g?"Trash is empty":"Nothing here",verbs:e.jsxs(e.Fragment,{children:[e.jsx(de,{pane:"tree",className:"icon-btn icon-btn--sm vault__back","aria-label":"Back to sections",title:"Back to sections",to:"/vault",children:e.jsx(K,{size:15})}),e.jsx(gt,{items:A,folders:p,typeIds:G(A.filter(e=>null===e.deletedAt)),filter:g,folderId:$,sharedItems:v}),N?e.jsx(ht,{items:E,armedId:C,onRestore:e=>B.restore(e),onPurge:e=>B.purge(e)}):e.jsx(vt,{hidden:F,createPath:z,createRef:se})]})})]}),e.jsx("div",{className:"vault__detail",ref:q,tabIndex:-1,children:e.jsx(u,{})}),e.jsx(mt,{shown:F&&"detail"!==P&&!N,to:z,fabRef:se}),ae?e.jsx(xt,{items:f,onClose:()=>{const e=new URLSearchParams(a.search);e.delete("share");const t=e.toString();y({pathname:"/vault",search:t?`?${t}`:""},{replace:!0})},onPick:e=>y(`/vault/${e.id}?share=drop`)}):null]})})}export{Bt as VaultSection,zt as VaultWelcome};
@@ -0,0 +1 @@
1
+ import{al as e,o as t,c as n,i as a}from"./vault-ui-seam-BQGS7RR6.js";import{X as o,Y as r}from"./identity-BVf8yWa4.js";import{z as s}from"./certs-CDCfMuEi.js";import{r as i,j as l}from"./react-dom-BwC4eQlG.js";import{S as d,D as c}from"./identity-view-paths-Bi1yigZk.js";import{u,c as p,L as m}from"./react-router-XsJY84ug.js";import{v as f,ae as h}from"./drop-open-BjgdLxWM.js";import{u as g,F as v,b as I,d as _,C as b,R as y,c as x}from"./wake-lock-C_y0fQco.js";import{S as w,o as j,y as N,z as E,v as A,m as S}from"./main-BrkS-iow.js";import{R as k}from"./hosted-identity-rail-Dv05NPNo.js";import{I as R,a as C,u as T}from"./item-secret-update-BGxSkyWF.js";import{S as $}from"./InvokeScreen-C-kFFYVF.js";class O extends Error{code;constructor(e,t){super(t),this.name="BudgetError",this.code=e}}function P(e){throw new O(e,function(e){switch(e){case"node_not_found":return"No budget node exists for that reference.";case"node_exists":return"A budget node with that reference is already open.";case"invalid_amount":return"AmountUnits must be a non-negative integer.";case"insufficient_available":return"The remaining locally available authority is not enough.";case"parent_required":return"This operation requires a parent budget node.";case"wrong_strategy":return"The parent allocation strategy does not allow this operation.";case"attempt_conflict":return"That payment attempt id already binds a different reservation.";case"attempt_not_reserved":return"That payment attempt is not in the reserved state.";case"cycle_forbidden":return"A budget node cannot be its own ancestor.";case"orphan_parent":return"The named parent budget node does not exist.";case"node_has_children":return"Close child allocations before removing this budget.";case"node_in_use":return"This budget still has posted spend, a reservation, a child carve-out, or unresolved external exposure."}}(e))}function q(e,t){const n=e.getNode(t);return void 0===n&&P("node_not_found"),n}function U(e,t,n,a,o){const r=t[0];void 0===r&&P("node_not_found");const s=q(e,r);if(s.unresolvedExternalExposure<n&&P("attempt_not_reserved"),s.unresolvedExternalExposure-=n,o)return s.postedSpending+=n,void e.putNode(s);if(null===s.parentId||0===a.length)return s.locallyAvailable+=n,void e.putNode(s);s.ceiling<n&&P("attempt_not_reserved"),s.ceiling-=n,e.putNode(s);for(const i of a){const t=q(e,i.nodeId);t.reservedToChildren<i.amount&&P("attempt_not_reserved"),t.reservedToChildren-=i.amount,t.locallyAvailable+=i.amount,e.putNode(t)}}function F(e,t){if(!function(e){return e>=0n}(e))throw new RangeError(`${t} must be a non-negative AmountUnits`);return e}function D(e){return{id:e.id,parentId:e.parentId,strategy:e.strategy,ceiling:e.ceiling,postedSpending:e.postedSpending,unresolvedExternalExposure:e.unresolvedExternalExposure,reservedToChildren:e.reservedToChildren,locallyAvailable:e.locallyAvailable}}function B(e){return{attemptId:e.attemptId,nodeId:e.nodeId,amount:e.amount,state:e.state,path:[...e.path],holds:e.holds.map(e=>({nodeId:e.nodeId,amount:e.amount}))}}function L(e){const t={nodeId:e.id,ceiling:e.ceiling,strategy:e.strategy,parentId:e.parentId,postedSpending:e.postedSpending,unresolvedExternalExposure:e.unresolvedExternalExposure,reservedToChildren:e.reservedToChildren,locallyAvailable:e.locallyAvailable};if(function(e){return e.postedSpending+e.unresolvedExternalExposure+e.reservedToChildren+e.locallyAvailable}(n=t)!==n.ceiling)throw new Error(`Budget projection for ${e.id} broke conservation`);var n;return t}function M(e){return{attemptId:e.attemptId,nodeId:e.nodeId,amount:e.amount,state:e.state,path:e.path,holds:e.holds}}function z(e,t){if(0===e.length)throw new O("invalid_amount",`${t} must be a non-empty reference`);return e}function J(e,t){const n=z(t.nodeId,"nodeId"),a=F(t.ceiling,"ceiling"),o=e.getNode(n);void 0===o&&P("node_not_found"),null!==o.parentId&&P("wrong_strategy");const r=o.postedSpending+o.unresolvedExternalExposure+o.reservedToChildren;return a<r&&P("insufficient_available"),o.ceiling=a,o.locallyAvailable=a-r,e.putNode(o),e.append({kind:"ceiling_set",nodeId:n,ceiling:a}),L(o)}function V(e,t){const n=z(t,"nodeId"),a=e.getNode(n);void 0===a&&P("node_not_found");for(const r of e.listNodes())r.parentId===n&&P("node_has_children");(a.unresolvedExternalExposure>0n||a.reservedToChildren>0n||null===a.parentId&&a.postedSpending>0n)&&P("node_in_use");for(const r of e.listAttempts())"reserved"===r.state&&(r.nodeId===n||r.path.includes(n))&&P("node_in_use");if(null!==a.parentId){const t=e.getNode(a.parentId);void 0===t&&P("orphan_parent"),t.reservedToChildren-=a.ceiling,t.locallyAvailable+=a.locallyAvailable,t.postedSpending+=a.postedSpending,t.unresolvedExternalExposure+=a.unresolvedExternalExposure,e.putNode(t)}const o=L(a);return e.deleteNode(n),e.append({kind:"node_closed",nodeId:n}),o}function W(e,t){if(0===e.length)throw new O("invalid_amount",`${t} must be a non-empty reference`);return e}function K(e,t){const n=W(t.nodeId,"nodeId"),a=F(t.ceiling,"ceiling");void 0!==e.getNode(n)&&P("node_exists");const o=null==t.parentId?null:W(t.parentId,"parentId");if(o===n&&P("cycle_forbidden"),null!==o&&(void 0===e.getNode(o)&&P("orphan_parent"),0n!==a))throw new O("wrong_strategy","Child nodes open with a zero ceiling; authority moves via allocate or shared reserve.");const r={id:n,parentId:o,strategy:t.strategy,ceiling:a,postedSpending:0n,unresolvedExternalExposure:0n,reservedToChildren:0n,locallyAvailable:a};return e.putNode(r),e.append({kind:"node_opened",nodeId:n,parentId:o,ceiling:a,strategy:t.strategy}),L(r)}function Z(e,t){const n=F(t.amount,"amount");0n===n&&P("invalid_amount");const a=e.getNode(W(t.parentId,"parentId")),o=e.getNode(W(t.childId,"childId"));return void 0!==a&&void 0!==o||P("node_not_found"),o.parentId!==a.id&&P("parent_required"),"exclusive_allocation"!==a.strategy&&P("wrong_strategy"),a.locallyAvailable<n&&P("insufficient_available"),a.locallyAvailable-=n,a.reservedToChildren+=n,o.ceiling+=n,o.locallyAvailable+=n,e.putNode(a),e.putNode(o),e.append({kind:"exclusive_allocated",parentId:a.id,childId:o.id,amount:n}),{parent:L(a),child:L(o)}}function G(e,t){const n=W(t.attemptId,"attemptId"),a=W(t.nodeId,"nodeId"),o=F(t.amount,"amount");0n===o&&P("invalid_amount");const r=e.getAttempt(n),s=function(e,t){const n=[];let a=t;const o=new Set;for(;null!==a;){o.has(a)&&P("cycle_forbidden"),o.add(a),n.push(a);const t=e.getNode(a);void 0===t&&P("node_not_found"),a=t.parentId}return n}(e,a);if(void 0!==r)return"reserved"!==r.state&&P("attempt_conflict"),function(e,t,n,a,o){if(e.nodeId!==t)return!1;if(e.amount!==n)return!1;if(e.path.length!==a.length)return!1;for(let r=0;r<a.length;r+=1)if(e.path[r]!==a[r])return!1;if(e.holds.length!==o.length)return!1;for(let r=0;r<o.length;r+=1){const t=e.holds[r],n=o[r];if(void 0===t||void 0===n)return!1;if(t.nodeId!==n.nodeId||t.amount!==n.amount)return!1}return!0}(r,a,o,s,r.holds)||P("attempt_conflict"),M(r);const i=function(e,t,n){const a=t[0];void 0===a&&P("node_not_found");const o=q(e,a);if(null===o.parentId)return o.locallyAvailable<n&&P("insufficient_available"),o.locallyAvailable-=n,o.unresolvedExternalExposure+=n,e.putNode(o),[];if("exclusive_allocation"===q(e,o.parentId).strategy)return o.locallyAvailable<n&&P("insufficient_available"),o.locallyAvailable-=n,o.unresolvedExternalExposure+=n,e.putNode(o),[];let r=n;const s=[];for(let i=1;i<t.length;i+=1){const n=t[i];if(void 0===n)break;const a=q(e,n);if("exclusive_allocation"===a.strategy)continue;const o=a.locallyAvailable<r?a.locallyAvailable:r;if(0n!==o&&(a.locallyAvailable-=o,a.reservedToChildren+=o,e.putNode(a),s.push({nodeId:n,amount:o}),r-=o,0n===r))break}return 0n!==r&&P("insufficient_available"),o.ceiling+=n,o.unresolvedExternalExposure+=n,e.putNode(o),s}(e,s,o),l={attemptId:n,nodeId:a,amount:o,state:"reserved",path:s,holds:i};return e.putAttempt(l),e.append({kind:"reserved",attemptId:n,nodeId:a,amount:o,path:s,holds:i}),M(l)}function H(e,t){const n=W(t,"attemptId"),a=e.getAttempt(n);return void 0===a&&P("attempt_not_reserved"),"committed"===a.state||("reserved"!==a.state&&P("attempt_not_reserved"),U(e,a.path,a.amount,a.holds,!0),a.state="committed",e.putAttempt(a),e.append({kind:"committed",attemptId:n})),M(a)}function Y(e,t){const n=W(t,"attemptId"),a=e.getAttempt(n);return void 0===a&&P("attempt_not_reserved"),"released"===a.state||("reserved"!==a.state&&P("attempt_not_reserved"),U(e,a.path,a.amount,a.holds,!1),a.state="released",e.putAttempt(a),e.append({kind:"released",attemptId:n})),M(a)}class Q{journal;nodes;attempts;constructor(e,t,n){this.journal=[...e],this.nodes=new Map;for(const[a,o]of t)this.nodes.set(a,D(o));this.attempts=new Map;for(const[a,o]of n)this.attempts.set(a,B(o))}getNode(e){return this.nodes.get(e)}getAttempt(e){return this.attempts.get(e)}listNodes(){return[...this.nodes.values()]}listAttempts(){return[...this.attempts.values()]}putNode(e){this.nodes.set(e.id,e)}deleteNode(e){this.nodes.delete(e)}putAttempt(e){this.attempts.set(e.attemptId,e)}append(e){this.journal.push(e)}publish(){return{journal:this.journal,nodes:this.nodes,attempts:this.attempts}}}class X{journal=[];nodes=new Map;attempts=new Map;locked=!1;constructor(e){if(void 0!==e){this.journal=[...e.journal];for(const[t,n]of e.nodes)this.nodes.set(t,D(n));for(const[t,n]of e.attempts)this.attempts.set(t,B(n))}}transact(e){if(this.locked)throw new Error("Budget store transaction is already open");this.locked=!0;const t=new Q(this.journal,this.nodes,this.attempts);try{const n=e(t),a=t.publish();return this.journal=a.journal,this.nodes=a.nodes,this.attempts=a.attempts,n}finally{this.locked=!1}}snapshot(){return{nodes:new Map([...this.nodes.entries()].map(([e,t])=>[e,D(t)])),attempts:new Map([...this.attempts.entries()].map(([e,t])=>[e,B(t)])),journal:[...this.journal]}}}let ee="personal",te=0;const ne=new Set;function ae(e){if(e!==ee){ee=e,te+=1;for(const e of ne)e()}return e}function oe(){return re(),te}function re(){try{const e=f.activeTomb().trim();return ae(""===e?"personal":e)}catch{return ae("personal")}}function se(e){return ne.add(e),()=>{ne.delete(e)}}function ie(e){return`${e}.${re()}`}function le(t){try{const n=ie(t),a=e().getItem(n);if(null!==a&&""!==a)return a;if("personal"!==re())return a;const o=e().getItem(t);if(null===o||""===o)return a;try{e().setItem(n,o),e().removeItem(t)}catch{}return o}catch{return null}}const de="opensesame.wallet.budget.v1";function ce(e){return e.toString(10)}function ue(e,t){if(!a(e)||!/^[0-9]+$/u.test(e))throw new Error(`${t} must be a non-negative decimal integer string`);return BigInt(e)}function pe(e){return{id:e.id,parentId:e.parentId,strategy:e.strategy,ceiling:ce(e.ceiling),postedSpending:ce(e.postedSpending),unresolvedExternalExposure:ce(e.unresolvedExternalExposure),reservedToChildren:ce(e.reservedToChildren),locallyAvailable:ce(e.locallyAvailable)}}function me(e){const t=e.strategy;if("shared_counter"!==t&&"exclusive_allocation"!==t)throw new Error("invalid allocation strategy");if(!a(e.id))throw new Error("node id required");const n=null===e.parentId?null:a(e.parentId)?e.parentId:(()=>{throw new Error("invalid parentId")})();return{id:e.id,parentId:n,strategy:t,ceiling:ue(e.ceiling,"ceiling"),postedSpending:ue(e.postedSpending,"postedSpending"),unresolvedExternalExposure:ue(e.unresolvedExternalExposure,"unresolvedExternalExposure"),reservedToChildren:ue(e.reservedToChildren,"reservedToChildren"),locallyAvailable:ue(e.locallyAvailable,"locallyAvailable")}}function fe(e){return{attemptId:e.attemptId,nodeId:e.nodeId,amount:ce(e.amount),state:e.state,path:[...e.path],holds:e.holds.map(e=>({nodeId:e.nodeId,amount:ce(e.amount)}))}}function he(e){if(!a(e.attemptId)||!a(e.nodeId))throw new Error("attempt ids required");const t=e.state;if("reserved"!==t&&"committed"!==t&&"released"!==t)throw new Error("invalid reservation state");if(!Array.isArray(e.path)||!Array.isArray(e.holds))throw new Error("attempt path/holds required");const o=[];for(const n of e.path){if(!a(n))throw new Error("invalid path entry");o.push(n)}const r=[];for(const s of e.holds){if(!n(s)||!a(s.nodeId))throw new Error("invalid hold");r.push({nodeId:s.nodeId,amount:ue(s.amount,"hold.amount")})}return{attemptId:e.attemptId,nodeId:e.nodeId,amount:ue(e.amount,"amount"),state:t,path:o,holds:r}}function ge(e){switch(e.kind){case"node_opened":return{kind:e.kind,nodeId:e.nodeId,parentId:e.parentId,ceiling:ce(e.ceiling),strategy:e.strategy};case"exclusive_allocated":return{kind:e.kind,parentId:e.parentId,childId:e.childId,amount:ce(e.amount)};case"reserved":return{kind:e.kind,attemptId:e.attemptId,nodeId:e.nodeId,amount:ce(e.amount),path:[...e.path],holds:e.holds.map(e=>({nodeId:e.nodeId,amount:ce(e.amount)}))};case"committed":case"released":return{kind:e.kind,attemptId:e.attemptId};case"ceiling_set":return{kind:e.kind,nodeId:e.nodeId,ceiling:ce(e.ceiling)};case"node_closed":return{kind:e.kind,nodeId:e.nodeId}}}function ve(e){const t=e.kind,n=function(e,t){if("node_closed"===t){if(!a(e.nodeId))throw new Error("nodeId required");return{kind:t,nodeId:e.nodeId}}if("ceiling_set"===t){if(!a(e.nodeId))throw new Error("nodeId required");return{kind:t,nodeId:e.nodeId,ceiling:ue(e.ceiling,"ceiling")}}return null}(e,t);if(n)return n;if("committed"===t||"released"===t){if(!a(e.attemptId))throw new Error("attemptId required");return{kind:t,attemptId:e.attemptId}}if("node_opened"===t){if(!a(e.nodeId))throw new Error("nodeId required");const n=e.strategy;if("shared_counter"!==n&&"exclusive_allocation"!==n)throw new Error("invalid strategy");const o=null===e.parentId?null:a(e.parentId)?e.parentId:(()=>{throw new Error("invalid parentId")})();return{kind:t,nodeId:e.nodeId,parentId:o,ceiling:ue(e.ceiling,"ceiling"),strategy:n}}if("exclusive_allocated"===t){if(!a(e.parentId)||!a(e.childId))throw new Error("allocation ids required");return{kind:t,parentId:e.parentId,childId:e.childId,amount:ue(e.amount,"amount")}}if("reserved"===t)return{kind:t,...he({...e,state:"reserved"})};throw new Error("unknown journal kind")}function Ie(e){if(!Array.isArray(e))return;const t=[];for(const a of e){if(!n(a))return;t.push(a)}return t}let _e=null,be=-1;function ye(){return se(()=>{_e=null,be=-1})}function xe(e){const t=oe();return _e=e,be=t,e}function we(){return ie("opensesame.wallet.instrument-budgets.v1")}function je(){const t=oe();if(null!==_e&&be===t)return _e;try{const t=e().getItem(we());if(null===t||""===t)return xe({});const o=JSON.parse(t);if(!n(o))return xe({});const r={};for(const[e,n]of Object.entries(o))a(n)&&""!==n&&(r[e]=n);return xe(r)}catch{return xe({})}}function Ne(){if(null!==_e)try{e().setItem(we(),JSON.stringify(_e))}catch{}}function Ee(e){return Object.entries(je()).filter(([,t])=>t===e).map(([e])=>e)}function Ae(e,t){const n={...je()};for(const[a,o]of Object.entries(n))o===e&&delete n[a];for(const a of t)n[a]=e;xe(n),Ne()}function Se(e){Ae(e,[])}const ke="opensesame.wallet.budget.labels.v1";class Re{inner;constructor(e){this.inner=function(e){return new X(e)}(e)}transact(t){const n=this.inner.transact(t);return function(t){const n=JSON.stringify(function(e){return{version:1,journal:e.journal.map(ge),nodes:[...e.nodes.values()].map(pe),attempts:[...e.attempts.values()].map(fe)}}(t)),a=le(de);n===a||null===a&&0===t.nodes.size&&0===t.journal.length||o({category:"wallet",type:"wallet.budget.updated",summary:"Wallet budget updated",outcome:"succeeded"});try{e().setItem(ie(de),n)}catch{}}(this.inner.snapshot()),n}snapshot(){return this.inner.snapshot()}}let Ce=null,Te=-1,$e=null,Oe=-1;function Pe(){Ce=null,Te=-1,$e=null,Oe=-1}function qe(){return se(Pe)}function Ue(){const e=oe();return null!==Ce&&Te===e||(Te=e,a=new Re(function(){const e=le(de);if(null!==e&&""!==e)try{const a=t(JSON.parse(e));if(!n(a)||1!==a.version)return;const o=Ie(a.journal),r=Ie(a.nodes),s=Ie(a.attempts);if(void 0===o||void 0===r||void 0===s)return;return function(e){const t=new Map;for(const a of e.nodes){const e=me(a);t.set(e.id,e)}const n=new Map;for(const a of e.attempts){const e=he(a);n.set(e.attemptId,e)}return{nodes:t,attempts:n,journal:e.journal.map(ve)}}({version:1,journal:o,nodes:r,attempts:s})}catch{return}}()),Ce={openNode:e=>a.transact(t=>K(t,e)),setCeiling:e=>a.transact(t=>J(t,e)),closeNode:e=>a.transact(t=>V(t,e)),allocateExclusive:e=>a.transact(t=>Z(t,e)),reserve:e=>a.transact(t=>G(t,e)),commit:e=>a.transact(t=>H(t,e)),release:e=>a.transact(t=>Y(t,e)),listNodes:()=>a.transact(e=>e.listNodes().map(e=>L(e))),snapshot:()=>a.snapshot(),project:e=>a.transact(t=>{const n=t.getNode(e);return void 0===n?void 0:L(n)}),projectAttempt:e=>a.transact(t=>{const n=t.getAttempt(e);return void 0===n?void 0:M(n)}),transact:e=>a.transact(t=>e(function(e){return{openNode:t=>K(e,t),setCeiling:t=>J(e,t),closeNode:t=>V(e,t),allocateExclusive:t=>Z(e,t),reserve:t=>G(e,t),commit:t=>H(e,t),release:t=>Y(e,t),project:t=>{const n=e.getNode(t);return void 0===n?void 0:L(n)},projectAttempt:t=>{const n=e.getAttempt(t);return void 0===n?void 0:M(n)}}}(t)))}),Ce;var a}function Fe(e,t=0){if(0===t)return e.toString(10);const n=e<0n,a=n?-e:e,o=10n**BigInt(t),r=a/o,s=(a%o).toString(10).padStart(t,"0");return`${n?"-":""}${r.toString(10)}.${s}`}function De(){const o=oe();if(null!==$e&&Oe===o)return $e;Oe=o;try{let o=e().getItem(ie(ke));if(null!==o&&""!==o||"personal"!==re()||(o=e().getItem(ke)),null===o||""===o)return $e={},$e;const r=t(JSON.parse(o));if(!n(r))return $e={},$e;const s={};for(const[e,t]of Object.entries(r))a(t)&&""!==t.trim()&&(s[e]=t);return $e=s,$e}catch{return $e={},$e}}function Be(t){$e=t,Oe=oe();try{e().setItem(ie(ke),JSON.stringify(t))}catch{}}function Le(e,t){const n=De();n[e]=t,Be(n)}function Me(e=Ue()){const t=De();return e.listNodes().filter(e=>null===e.parentId).map(e=>({...e,label:t[e.nodeId]??e.nodeId}))}function ze(e){const t=e.trim();if(""===t)throw new Error("Name a budget.");return t}const Je="opensesame.wallet.leases.v1";let Ve=null,We=-1;function Ke(){return se(()=>{Ve=null,We=-1})}function Ze(e){const t=oe();return Ve=e,We=t,e}const Ge=["id","grantRef","allocationRef","policyVersion","beneficiaryRef","proofKeyThumbprint","validFrom","validUntil","requiredEnforcementDigest","effectiveEnforcementDigest","rootAccountingRef","amount","currency","recipient","approvalDigest","reserveAttemptId"];function He(e){if(!n(e))return;const t=function(e){if("active"===e||"stop_requested"===e||"revocation_pending"===e||"revoked"===e||"expired"===e)return e}(e.status);if(void 0===t)return;const o={id:"",grantRef:"",allocationRef:"",policyVersion:"",beneficiaryRef:"",proofKeyThumbprint:"",validFrom:"",validUntil:"",requiredEnforcementDigest:"",effectiveEnforcementDigest:"",rootAccountingRef:"",amount:"",currency:"",recipient:"",approvalDigest:"",reserveAttemptId:""};for(const n of Ge){const t=e[n];if(!a(t))return;o[n]=t}return{...o,status:t}}function Ye(){const e=oe();if(null!==Ve&&We===e)return Ve;try{const e=le(Je);if(null===e||""===e)return Ze([]);const n=t(JSON.parse(e));if(!Array.isArray(n))return Ze([]);const a=[];for(const t of n){const e=He(t);void 0!==e&&a.push(e)}return Ze(a)}catch{return Ze([])}}function Qe(t){const n=Ze([...t]);try{e().setItem(ie(Je),JSON.stringify(n))}catch{}}function Xe(){return Ye()}function et(e=Date.now()){const t=Ye(),n=[];let a=!1;for(const o of t){const t=Date.parse(o.validUntil);if(Number.isFinite(t)&&t<=e)if("active"===o.status){try{Ue().release(o.reserveAttemptId)}catch{}n.push({...o,status:"expired"}),a=!0}else n.push(o);else n.push(o)}return a&&Qe(n),n.filter(e=>"active"===e.status)}const tt=[{id:"nav.wallet",description:"Rail entry that opens Wallet, where spending overview, budgets, passes and payment methods are reviewed.",role:"navigation",routes:[],capabilityId:"app.navigate"}],nt=[{id:"/wallet",title:"Wallet — spending overview, budgets and payment methods"}],at=/CANARY_[A-Za-z0-9_-]+/g,ot=/\b(?:sk|pk|api)[_-][A-Za-z0-9_-]{8,}\b/gi,rt=/[A-Fa-f0-9]{64,}/g,st=new Map,it=new Map;function lt(e){return`${e}-${crypto.randomUUID()}`}function dt(e){if(s(["wallet"]),void 0!==e.claimedPrincipalRef&&e.claimedPrincipalRef!==e.caller.principalRef)return{ok:!1,code:"CALLER_NOT_AUTHORIZED"};if(!/^[0-9]+$/u.test(e.amount)||"0"===e.amount)return{ok:!1,code:"INVALID_AMOUNT"};const t={proposalId:lt("prop"),status:"proposed",nodeId:e.nodeId,amount:e.amount,destination:e.destination,requiresApproval:!0,settles:!1,issued:!1};return st.set(t.proposalId,t),{ok:!0,proposal:{proposalId:t.proposalId,status:t.status,nodeId:t.nodeId,amount:t.amount,destination:t.destination,requiresApproval:!0,settles:!1}}}const ct=["get_secret","get_card_number","export_private_key","unrestricted_sign","unbounded_paid_fetch"];function ut(e){const n=JSON.parse(JSON.stringify(e));return t(n)}function pt(e,t){const n=e[t];return a(n)?n:""}const mt=[{name:"opensesame_wallet_capabilities_read",capabilityIds:["wallet.capabilities.read"],scope:"boot",readOnly:!0,description:"Read the Wallet capability and evidence inventory for this tab. Never returns payment credentials, PANs, or root keys.",inputSchema:{type:"object",properties:{},additionalProperties:!1},execute:()=>({status:"local_inventory",productionEnabled:!1,evidenceStatus:"fixture_verified",agentOperations:{readable:["wallet.capabilities.read","wallet.budgets.read","wallet.allocations.read","wallet.payment.status","wallet.lease.status"],proposeAndStop:["wallet.payment.propose","wallet.lease.request","wallet.lease.request_stop"],executeApprovedOnly:["wallet.payment.execute_approved"]},refusals:[...ct],note:"Spending authority is conserved under ADR 0123. execute_approved spends only an internally issued PreparedExecutionRef."})},{name:"opensesame_wallet_budgets_read",capabilityIds:["wallet.budgets.read"],scope:"session",readOnly:!0,description:"Read conserved local budget projections. Same-origin only — not chain settlement.",inputSchema:{type:"object",properties:{},additionalProperties:!1},execute:()=>({status:"local_ledger",productionEnabled:!1,evidenceStatus:"fixture_verified",enforcementScope:"same_origin_browser_local",settlesOffline:!1,budgets:Me(Ue()).map(e=>({nodeId:e.nodeId,parentId:e.parentId,strategy:e.strategy,ceiling:Fe(e.ceiling),locallyAvailable:Fe(e.locallyAvailable),reservedToChildren:Fe(e.reservedToChildren),unresolvedExternalExposure:Fe(e.unresolvedExternalExposure),postedSpending:Fe(e.postedSpending)}))})},{name:"opensesame_wallet_allocations_read",capabilityIds:["wallet.allocations.read"],scope:"session",readOnly:!0,description:"Read child allocations and reserved payment attempts from the local conserved ledger.",inputSchema:{type:"object",properties:{},additionalProperties:!1},execute:()=>{const e=Ue(),t=e.listNodes().filter(e=>null!==e.parentId),n=[...e.snapshot().attempts.values()];return{status:"local_ledger",productionEnabled:!1,evidenceStatus:"fixture_verified",enforcementScope:"same_origin_browser_local",allocations:t.map(e=>({nodeId:e.nodeId,parentId:e.parentId,strategy:e.strategy,ceiling:Fe(e.ceiling),locallyAvailable:Fe(e.locallyAvailable),unresolvedExternalExposure:Fe(e.unresolvedExternalExposure)})),attempts:n.map(e=>({attemptId:e.attemptId,nodeId:e.nodeId,amount:Fe(e.amount),state:e.state}))}}},{name:"opensesame_wallet_payment_propose",capabilityIds:["wallet.payment.propose"],scope:"session",readOnly:!1,description:"Propose a scoped payment against an existing allocation. Does not settle. Payload identity claims are ignored.",inputSchema:{type:"object",properties:{nodeId:{type:"string"},amount:{type:"string"},destination:{type:"string"},claimedPrincipalRef:{type:"string"}},required:["nodeId","amount","destination"],additionalProperties:!1},execute:e=>{const t=e.claimedPrincipalRef;return dt({caller:{principalRef:"local-session"},nodeId:pt(e,"nodeId"),amount:pt(e,"amount"),destination:pt(e,"destination"),claimedPrincipalRef:a(t)?t:void 0})}},{name:"opensesame_wallet_payment_execute_approved",capabilityIds:["wallet.payment.execute_approved"],scope:"session",readOnly:!1,description:"Execute a digest-bound internally issued PreparedExecutionRef. Caller-constructed refs fail. Never a generic sign tool.",inputSchema:{type:"object",properties:{preparedRef:{type:"string"},singleUseToken:{type:"string"}},required:["preparedRef","singleUseToken"],additionalProperties:!1},execute:e=>function(e){s(["wallet"]);const t=function(e){return e.controllerChanged||"installing"===e.workerState||"activating"===e.workerState?{allowExecute:!1,code:"SERVICE_WORKER_UPDATE_REQUIRES_REAUTHORIZATION"}:{allowExecute:!0}}({workerState:e.workerState??"none",controllerChanged:!0===e.controllerChanged});if(!t.allowExecute)return{ok:!1,code:t.code};const n=it.get(e.preparedRef);if(void 0===n||n.consumed||n.singleUseToken!==e.singleUseToken)return{ok:!1,code:"PREPARED_REF_INVALID"};const a=function(e){return e.transferAmount<0n||e.feeAmount<0n?{ok:!1,code:"INVALID_AMOUNT"}:e.chargeFeeFromTransferBudget&&e.feeAmount>0n?{ok:!1,code:"FEE_FROM_TRANSFER_REFUSED"}:e.transferAmount>e.transferRemaining?{ok:!1,code:"INSUFFICIENT_AVAILABLE"}:e.feeAmount>e.feeRemaining?{ok:!1,code:"INSUFFICIENT_FEE_BUDGET"}:{ok:!0,transferReserved:e.transferAmount,feeReserved:e.feeAmount,transferRemainingAfter:e.transferRemaining-e.transferAmount,feeRemainingAfter:e.feeRemaining-e.feeAmount,allInLossCap:!1}}({transferAmount:0n,feeAmount:void 0!==e.feeAmount&&/^[0-9]+$/u.test(e.feeAmount)?BigInt(e.feeAmount):0n,transferRemaining:0n,feeRemaining:0n,chargeFeeFromTransferBudget:!0===e.chargeFeeFromTransferBudget});if(!a.ok)return{ok:!1,code:a.code};const o=lt("attempt");try{Ue().reserve({attemptId:o,nodeId:n.nodeId,amount:n.amount})}catch{return{ok:!1,code:"INSUFFICIENT_AVAILABLE"}}return n.consumed=!0,{ok:!0,attemptId:o,state:"reserved"}}({preparedRef:pt(e,"preparedRef"),singleUseToken:pt(e,"singleUseToken")})},{name:"opensesame_wallet_payment_status",capabilityIds:["wallet.payment.status"],scope:"session",readOnly:!0,description:"Read local payment attempt status. Does not invent settlement or disclose secrets.",inputSchema:{type:"object",properties:{},additionalProperties:!1},execute:()=>ut(t(function(){const e={status:"local_ledger",productionEnabled:!1,settlesOffline:!1,attempts:[...Ue().snapshot().attempts.values()].map(e=>({attemptId:e.attemptId,nodeId:e.nodeId,amount:Fe(e.amount),state:e.state}))};return JSON.parse(function(e){const t=a(e)?e:JSON.stringify(e);return r(t.replace(at,"[redacted-canary]").replace(ot,"[redacted]").replace(rt,"[redacted-hex]"))}(e))}()))},{name:"opensesame_wallet_lease_request",capabilityIds:["wallet.lease.request"],scope:"session",readOnly:!1,description:"Request a spending lease under an existing allocation. Does not mint budget or settle.",inputSchema:{type:"object",properties:{nodeId:{type:"string"},amount:{type:"string"},destination:{type:"string"}},required:["nodeId","amount","destination"],additionalProperties:!1},execute:e=>dt({caller:{principalRef:"local-session"},nodeId:pt(e,"nodeId"),amount:pt(e,"amount"),destination:pt(e,"destination")})},{name:"opensesame_wallet_lease_status",capabilityIds:["wallet.lease.status"],scope:"session",readOnly:!0,description:"Read spending lease status. Redacted; no secrets.",inputSchema:{type:"object",properties:{},additionalProperties:!1},execute:()=>ut({leases:Xe().map(e=>({id:e.id,status:e.status,amount:e.amount})),active:et().map(e=>({id:e.id,amount:e.amount}))})},{name:"opensesame_wallet_lease_request_stop",capabilityIds:["wallet.lease.request_stop"],scope:"session",readOnly:!1,description:"Request stop of a spending lease. Does not claim on-chain revocation.",inputSchema:{type:"object",properties:{leaseId:{type:"string"}},required:["leaseId"],additionalProperties:!1},execute:e=>function(e){const t=Ye(),n=t.findIndex(t=>t.id===e);if(n<0)return!1;const a=t[n];if(void 0===a||"active"!==a.status)return!1;const o=[...t];return o[n]={...a,status:"stop_requested"},Qe(o),!0}(pt(e,"leaseId"))?{ok:!0,status:"stop_requested"}:{ok:!1,code:"LEASE_MISSING"}}],ft=new Set(["card","bank-account"]);function ht(e){return null===e.deletedAt&&ft.has(h(e))}function gt(e){return e.filter(ht)}function vt(e){return"bank-account"===h(e)?"Account":"Card"}const It="opensesame:wallet-records-changed";function _t(){window.dispatchEvent(new Event(It))}function bt(){const[,e]=i.useState(0);i.useEffect(()=>{const t=()=>e(e=>e+1);return window.addEventListener(It,t),window.addEventListener("storage",t),()=>{window.removeEventListener(It,t),window.removeEventListener("storage",t)}},[])}function yt(e){try{return e?decodeURIComponent(e.slice(1)):null}catch{return null}}function xt(e,t){return`${e}#${encodeURIComponent(t)}`}const wt="/wallet/budgets";function jt(e){return e instanceof O||e instanceof Error?e.message:"Could not update budget"}function Nt({initial:e,onSave:t}){const{items:n}=g(),a=gt(n),[o,r]=i.useState(e),s=e.nodeId?xt(wt,e.nodeId):wt;return l.jsxs("form",{className:"detail editor",onSubmit:e=>{e.preventDefault(),t(o)},children:[l.jsx("div",{className:"detail__head",children:l.jsx("div",{className:"detail__heading",children:l.jsxs("div",{className:"editor__titlerow",children:[l.jsx("input",{className:"editor__name",id:"budget-name","aria-label":"Name",placeholder:"Budget name",required:!0,maxLength:80,value:o.name,onChange:e=>r({...o,name:e.target.value})}),l.jsx("span",{className:"vtree__dim",children:".budget"})]})})}),l.jsxs("section",{className:"detail__group",children:[l.jsx("h2",{className:"detail__grouphead",children:"Budget"}),l.jsxs("div",{className:"field",children:[l.jsx("label",{htmlFor:"budget-ceiling",children:"Ceiling (subunits)"}),l.jsx("input",{id:"budget-ceiling","aria-label":"Ceiling (subunits)",inputMode:"numeric",required:!0,pattern:"[0-9]+",value:o.ceiling,onChange:e=>r({...o,ceiling:e.target.value})})]})]}),a.length>0?l.jsxs("section",{className:"detail__group",children:[l.jsx("h2",{className:"detail__grouphead",children:"Payment methods"}),a.map(e=>{const t=o.itemIds.includes(e.id);return l.jsx(v,{label:e.name,children:l.jsx("label",{className:"check",children:l.jsx("input",{type:"checkbox","aria-label":e.name,checked:t,onChange:()=>r({...o,itemIds:t?o.itemIds.filter(t=>t!==e.id):[...o.itemIds,e.id]})})})},e.id)})]}):null,l.jsx(w,{label:"Save budget",children:l.jsx(m,{className:"icon-btn",to:s,"aria-label":"Cancel",title:"Cancel",children:l.jsx(j,{size:16})})})]})}function Et({selected:e,armed:t,onRemove:n,onCancel:a}){const{items:o}=g(),r=gt(o),s=t?`Confirm remove ${e.label}`:`Remove ${e.label}`;return l.jsxs("div",{className:"detail",children:[l.jsxs("div",{className:"detail__head",children:[l.jsxs("div",{className:"detail__heading",children:[l.jsx("h1",{children:e.label}),l.jsx("div",{className:"detail__meta",children:"Budget"})]}),l.jsxs("fieldset",{className:"vtree__keys actions","aria-label":`${e.label} actions`,children:[l.jsx(m,{className:"icon-btn icon-btn--sm",to:`${wt}?edit#${encodeURIComponent(e.nodeId)}`,"aria-label":`Edit ${e.label}`,title:`Edit ${e.label}`,children:l.jsx(N,{size:15})}),l.jsx("button",{type:"button",className:"icon-btn icon-btn--sm"+(t?" is-armed":""),"aria-label":s,title:s,onClick:n,children:l.jsx(E,{size:15})}),t?l.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-label":"Keep this budget",title:"Keep this budget",onClick:a,children:l.jsx(j,{size:15})}):null]})]}),l.jsxs("section",{className:"detail__group",children:[l.jsx("h2",{className:"detail__grouphead",children:"Budget"}),l.jsx(v,{label:"Ceiling",children:l.jsx("span",{className:"frow__value",children:Fe(e.ceiling)})}),l.jsx(v,{label:"Available",children:l.jsx("span",{className:"frow__value",children:Fe(e.locallyAvailable)})})]}),Ee(e.nodeId).length>0?l.jsxs("section",{className:"detail__group",children:[l.jsx("h2",{className:"detail__grouphead",children:"Payment methods"}),Ee(e.nodeId).map(e=>{const t=r.find(t=>t.id===e);return t?l.jsx(v,{label:"Method",children:l.jsx(m,{to:xt("/wallet/methods",e),children:t.name})},e):null})]}):null]})}function At(){return l.jsxs(l.Fragment,{children:[l.jsx(m,{className:"icon-btn icon-btn--sm",to:`${wt}?new`,"aria-label":"Add budget",title:"Add budget",children:l.jsx(A,{size:15})}),l.jsx("button",{type:"button",className:"icon-btn icon-btn--sm",onClick:_t,"aria-label":"Reload budgets",title:"Reload budgets",children:l.jsx(S,{size:15})})]})}function St(){bt();const e=u(),n=p(),[a,o]=i.useState(null),[r,s]=i.useState(null),c=Me(),m=yt(e.hash),f=c.find(e=>e.nodeId===m),h=new URLSearchParams(e.search),g=h.has("new")?{nodeId:null,name:"",ceiling:"0",itemIds:[]}:h.has("edit")&&f?{nodeId:f.nodeId,name:f.label,ceiling:f.ceiling.toString(10),itemIds:Ee(f.nodeId)}:null;return l.jsx(k,{section:"Wallet",title:"Budgets",rootPath:"/wallet",listPath:wt,rows:c.map(e=>({id:e.nodeId,label:e.label,extension:"budget",to:xt(wt,e.nodeId)})),selectedId:m,detailOpen:null!==g,status:r?l.jsx(d,{message:r}):null,commands:l.jsx(At,{}),children:g?l.jsx(Nt,{initial:g,onSave:e=>{s(null);try{const t=function(e){const t=e.trim();if(!/^[0-9]+$/u.test(t))throw new Error("Ceiling must be a non-negative integer.");return BigInt(t)}(e.ceiling),a=null===e.nodeId?function(e){const t=ze(e.name),n=`b-${crypto.randomUUID()}`,a=Ue().openNode({nodeId:n,ceiling:e.ceiling,strategy:"shared_counter"});return Le(n,t),{...a,label:t}}({name:e.name,ceiling:t}):function(e){const t=ze(e.name),n=Ue(),a=n.project(e.nodeId),o=void 0!==a&&a.ceiling===e.ceiling?a:n.setCeiling({nodeId:e.nodeId,ceiling:e.ceiling});return Le(e.nodeId,t),{...o,label:t}}({nodeId:e.nodeId,name:e.name,ceiling:t});Ae(a.nodeId,e.itemIds),_t(),n(xt(wt,a.nodeId))}catch(a){s({tone:"err",text:jt(t(a))})}}},g.nodeId??"new"):f?l.jsx(Et,{selected:f,armed:a===f.nodeId,onRemove:()=>{if(f)if(a===f.nodeId){o(null),s(null);try{e=f.nodeId,Ue().closeNode(e),function(e){const t=De();delete t[e],Be(t)}(e),Se(e),Se(f.nodeId),_t(),n(wt)}catch(r){s({tone:"err",text:jt(t(r))})}}else o(f.nodeId);var e},onCancel:()=>o(null)}):null})}const kt="/wallet/methods";function Rt({item:e,revealed:t,toggle:n,copied:a,failed:o,copy:r}){return l.jsxs(l.Fragment,{children:[e.fields.length>0?l.jsxs("section",{className:"detail__group",children:[l.jsx("h2",{className:"detail__grouphead",children:"Custom fields"}),e.fields.map(e=>l.jsx(v,{label:e.name||"Field",actions:l.jsxs(l.Fragment,{children:[e.hidden?l.jsx(y,{revealed:t.has(e.id),label:e.name,onToggle:()=>n(e.id)}):null,l.jsx(x,{value:e.value,label:e.name,fieldKey:e.id,copied:a,failed:o,onCopy:r})]}),children:e.hidden?l.jsx(b,{value:e.value,label:e.name,revealed:t.has(e.id)}):l.jsx("span",{className:"frow__value",children:e.value})},e.id))]}):null,e.notes?l.jsxs("section",{className:"detail__group",children:[l.jsx("h2",{className:"detail__grouphead",children:"Notes"}),l.jsx("div",{className:"frow",children:l.jsx("p",{className:"frow__notes",children:e.notes})})]}):null]})}function Ct({item:e}){const t=_(),[n,a]=i.useState(!1),[o,r]=i.useState(new Set),{copied:s,failed:d,copy:c}=I(),u=Me(),p=(f=e.id,je()[f]??null);var f;const h=e=>r(t=>{const n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n});return l.jsxs("div",{className:"detail",children:[l.jsxs("div",{className:"detail__head",children:[l.jsxs("div",{className:"detail__heading",children:[l.jsx("h1",{children:e.name}),l.jsx("div",{className:"detail__meta",children:vt(e)})]}),l.jsx(R,{item:e,listPath:kt,confirmPurge:n,onConfirmPurge:a})]}),l.jsx(C,{item:e,revealed:o,toggle:h,copied:s,failed:d,copy:c,onUpdateSecret:n=>T(e,n,t.saveItem)}),l.jsx(Rt,{item:e,revealed:o,toggle:h,copied:s,failed:d,copy:c}),l.jsxs("section",{className:"detail__group",children:[l.jsx("h2",{className:"detail__grouphead",children:"Budget"}),l.jsx(v,{label:"Budget",children:l.jsxs("select",{"aria-label":`Budget for ${e.name}`,value:p??"",onChange:t=>{!function(e,t){const n={...je()};null===t||""===t?delete n[e]:n[e]=t,xe(n),Ne()}(e.id,t.target.value||null),_t()},children:[l.jsx("option",{value:"",children:"None"}),u.map(e=>l.jsx("option",{value:e.nodeId,children:e.label},e.nodeId))]})})]}),l.jsxs("section",{className:"detail__group",children:[l.jsx("h2",{className:"detail__grouphead",children:"Vault"}),l.jsx(v,{label:"Item",children:l.jsx(m,{to:`/vault/${e.id}`,children:e.name})})]})]})}function Tt(){bt();const{items:e}=g(),{hash:t}=u(),n=gt(e),a=yt(t),o=n.find(e=>e.id===a);return l.jsx(k,{section:"Wallet",title:"Payment methods",rootPath:"/wallet",listPath:kt,rows:n.map(e=>({id:e.id,label:e.name,extension:h(e),to:xt(kt,e.id)})),selectedId:a,commands:l.jsxs(l.Fragment,{children:[l.jsx(m,{className:"icon-btn icon-btn--sm",to:"/vault/new/card","aria-label":"Add card",title:"Add card",children:l.jsx(A,{size:15})}),l.jsx("button",{type:"button",className:"icon-btn icon-btn--sm",onClick:_t,"aria-label":"Reload payment methods",title:"Reload payment methods",children:l.jsx(S,{size:15})})]}),children:o?l.jsx(Ct,{item:o},o.id):null})}const $t=/[<>`]/gu;function Ot(e,t=120){const n=function(e){let t="";for(const n of e){const e=n.codePointAt(0)??0;e<=31||127===e||e>=128&&e<=159||1564===e||8206===e||8207===e||e>=8234&&e<=8238||e>=8294&&e<=8303||(t+=n)}return t}(e).replace($t,""),a=n.replace(/\s+/gu," ").trim();if(0===a.length)return"(unnamed merchant)";const o=Array.from(a);return o.length<=t?a:`${o.slice(0,Math.max(1,t-1)).join("")}…`}const Pt="/wallet/passes";function qt({record:e,armed:t,onRemove:n,onCancel:a}){const o=t?`Confirm ${e.removeLabel}`:e.removeLabel;return l.jsxs("div",{className:"detail",children:[l.jsxs("div",{className:"detail__head",children:[l.jsxs("div",{className:"detail__heading",children:[l.jsx("h1",{children:e.label}),l.jsxs("div",{className:"detail__meta",children:[e.kind,l.jsx($,{tone:e.tone,label:e.status})]})]}),l.jsxs("div",{className:"detail__tools",children:[l.jsx("button",{type:"button",className:"icon-btn icon-btn--sm"+(t?" is-armed":""),"aria-label":o,title:o,onClick:n,children:l.jsx(E,{size:15})}),t?l.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-label":"Keep this pass",title:"Keep this pass",onClick:a,children:l.jsx(j,{size:15})}):null]})]}),l.jsxs("section",{className:"detail__group",children:[l.jsx("h2",{className:"detail__grouphead",children:e.kind}),e.fields.map(e=>l.jsx(v,{label:e.label,children:l.jsx("span",{className:"frow__value",children:e.value})},e.label))]})]})}function Ut(){bt();const{hash:e}=u(),t=p(),[n,a]=i.useState(null),[o,r]=i.useState(null),s=[...Xe().map(e=>({id:`lease:${e.id}`,label:`${e.amount} ${e.currency} → ${Ot(e.recipient)}`,extension:"pass",to:xt(Pt,`lease:${e.id}`),kind:"Spending pass",status:e.status,tone:"active"===e.status?"ok":"idle",fields:[{label:"Amount",value:`${e.amount} ${e.currency}`},{label:"Recipient",value:Ot(e.recipient)},{label:"Valid from",value:e.validFrom},{label:"Valid until",value:e.validUntil},{label:"Allocation",value:e.allocationRef},{label:"Beneficiary",value:e.beneficiaryRef}],remove:()=>function(e){const t=Ye().find(t=>t.id===e);if(void 0!==t&&""!==t.reserveAttemptId)try{Ue().release(t.reserveAttemptId)}catch{}Qe(Ye().filter(t=>t.id!==e))}(e.id),removeLabel:`Remove lease ${e.id}`})),...[...Ue().snapshot().attempts.values()].filter(e=>"reserved"===e.state).map(e=>({id:`attempt:${e.attemptId}`,label:`${Fe(e.amount)} on ${e.nodeId}`,extension:"reservation",to:xt(Pt,`attempt:${e.attemptId}`),kind:"Reservation",status:"Reserved",tone:"idle",fields:[{label:"Amount",value:Fe(e.amount)},{label:"Budget",value:e.nodeId},{label:"Reference",value:e.attemptId}],remove:()=>Ue().release(e.attemptId),removeLabel:`Release ${e.attemptId}`}))],c=yt(e),m=s.find(e=>e.id===c);return l.jsx(k,{section:"Wallet",title:"Spending passes",rootPath:"/wallet",listPath:Pt,rows:s,selectedId:c,status:o?l.jsx(d,{message:o}):null,commands:l.jsx("button",{type:"button",className:"icon-btn icon-btn--sm",onClick:_t,"aria-label":"Reload spending passes",title:"Reload spending passes",children:l.jsx(S,{size:15})}),children:m?l.jsx(qt,{record:m,armed:n===m.id,onRemove:()=>{if(m)if(n===m.id){a(null),r(null);try{m.remove(),_t(),t(Pt)}catch(e){r({tone:"err",text:e instanceof Error?e.message:"Could not release"})}}else a(m.id)},onCancel:()=>a(null)}):null})}function Ft(){const{pathname:e}=u(),t=c(e);return l.jsx("passes"===t?Ut:"methods"===t?Tt:St,{})}export{nt as W,gt as a,Xe as b,tt as c,qe as d,Ke as e,Fe as f,Ue as g,ye as h,mt as i,Ft as j,Me as l,Ot as s,bt as u,xt as w};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/main-BKK5N8Uh.css","assets/InvokeScreen-CsvSkues.css","assets/connector-directory-D47kqlDJ.css","assets/session-connections-oSO_RMA1.css"])))=>i.map(i=>d[i]);
2
+ import{y as t,c as e,i as n,o as r,z as o,A as i}from"./vault-ui-seam-BQGS7RR6.js";import{q as s}from"./model-provider-B6oAnQX9.js";import{r as a,S as l,s as u,c,d,p}from"./consent-CcqmRPoB.js";import{_ as f}from"./hosted-model-authority-CcNPE44H.js";import"./native-worker-noble-ciphers-708367a7-BPuD3lXB.js";import"./native-worker-noble-hashes-b1a58353-IgGIMWEC.js";import"./native-worker-bytes-a0e18d71-DFmKzL3P.js";import"./identity-BVf8yWa4.js";import"./native-worker-zod-5c0ed887-B342B6ko.js";import"./native-worker-zod-jitless-ba55e4a3-DZHC6DC7.js";const h="supportAgentUrl",m=new Map([["content-type","application/json"],["accept","text/event-stream"]]);function g(t){const e=function(t){let e;try{e=new URL(t.trim())}catch{return null}return"http:"!==e.protocol&&"https:"!==e.protocol||e.username||e.password||e.search||e.hash?null:e}(t);if(null===e)return null;const n=`${e.origin}${e.pathname.replace(/\/$/,"")}`;return"https:"===e.protocol&&s(n)?{url:n,headers:m}:null}function E(t){const e=t?.supportAgentUrl;return void 0!==e&&e.trim()?g(e):null}const T={fetchAgUiConfig:async function(){const r=t().BASE_URL||"/",o=new AbortController,i=setTimeout(()=>o.abort(),3e3);try{const t=await fetch(`${r}os-runtime-config.json`,{credentials:"omit",cache:"no-cache",signal:o.signal});if(!t.ok)return null;const i=await t.json();if(!e(i))return null;const s=i[h];return n(s)?{supportAgentUrl:s}:null}catch{return null}finally{clearTimeout(i)}}};let w=null;function b(t){return w=E(t),w}function A(){if(null!==w)return w;const e=t().VITE_SUPPORT_AGENT_URL?.trim();return e?g(e):null}function _(){w=null}async function R(t){if(t?.aborted)return null;const e=await T.fetchAgUiConfig();return t?.aborted?null:b(e)}function O(t){return a(t)}async function v(){const{transformHttpEventStream:t,runHttpRequest:e}=await f(async()=>{const{transformHttpEventStream:t,runHttpRequest:e}=await(import("./vendor-ag-ui-DapcFk1d.js"));return{transformHttpEventStream:t,runHttpRequest:e}},__vite__mapDeps([0,1,2,3]));return{open:n=>{const o=t(e(n));return{subscribe:t=>o.subscribe({next:e=>{t.next(r(e))},error:e=>{t.error(e)},complete:()=>{t.complete()}})}}}}function y(t={}){const e=t.loadClient??v,n=t.fetchImpl??((t,e)=>globalThis.fetch(t,e));return t=>async function*(t,e,n){const r=await e();if(t.signal.aborted)return;const o=r.open(()=>async function(t,e){if(!g(t.endpoint.url))throw new l("AGENT_UNAVAILABLE","Support requires a same-origin HTTPS proxy");const n=await e(t.endpoint.url,{method:"HEAD",credentials:"same-origin",mode:"same-origin",cache:"no-store",redirect:"error",referrerPolicy:"no-referrer",signal:t.signal});if(!n.ok||"active"!==n.headers.get("X-OpenSesame-Support-Session"))throw new l("AGENT_UNAVAILABLE","Sign in to this deployment before using remote support");const r=await e(t.endpoint.url,{method:"POST",headers:Object.fromEntries(t.endpoint.headers),body:JSON.stringify(t.body),signal:t.signal,credentials:"same-origin",mode:"same-origin",cache:"no-store",redirect:"error",referrerPolicy:"no-referrer"});if(!r.ok)throw new l("AGENT_PROTOCOL_ERROR",`the support endpoint answered ${r.status}`);return r}(t,n));yield*async function*(t,e){const n=[],r={done:!1,overflowed:!1,failure:null};let o=null;const i=()=>{const t=o;o=null,t?.()},s=t.subscribe({next:t=>{r.done||(n.length>=512?(r.overflowed=!0,r.done=!0):n.push(t),i())},error:t=>{r.failure=t,r.done=!0,i()},complete:()=>{r.done=!0,i()}}),a=()=>{r.done=!0,i()};e.addEventListener("abort",a,{once:!0});try{for(;;){if(e.aborted)return;const t=n.shift();if(void 0===t){if(null!==r.failure)throw r.failure;if(r.overflowed)throw new l("AGENT_PROTOCOL_ERROR","the support endpoint streamed more events than this client will buffer");if(r.done)return;await new Promise(t=>{o=t})}else yield t}}finally{r.done=!0,e.removeEventListener("abort",a),s.unsubscribe()}}(o,t.signal)}(t,e,n)}function N(){return o()}function S(){return new l("AGENT_ABORTED","the support request was cancelled")}function L(t,e){const n=i(e.role);if(void 0!==n&&"assistant"!==n)return!1;const r=i(e.messageId);return void 0===r||!1!==t.get(r)}function G(t,e){const n=i(e.messageId);if(void 0===n)return;if(!t.has(n)&&t.size>=256)return;const r=i(e.role);t.set(n,void 0===r||"assistant"===r)}function k(t,e){const n=i(e.delta);if(void 0===n||t.remaining<=0)return;const r=n.length>t.remaining?n.slice(0,t.remaining):n;0!==r.length&&(t.chunks.push(r),t.remaining-=r.length,t.produced=!0)}function C(t,e,n){if(t.computer.length>=8)return;const r=function(t){const e=t.trim();return e.length<=80?e:e.slice(0,80)}(e??"");if(0===r.length)return;const o=t.computer.at(-1);o&&o.title===r&&null===o.detail||t.computer.push({title:r,detail:null})}function I(t,e,n,r){switch(i(t.type)){case"TEXT_MESSAGE_START":return G(e,t),!1;case"TEXT_MESSAGE_CHUNK":return G(e,t),L(e,t)&&k(n,t),!1;case"TEXT_MESSAGE_CONTENT":return L(e,t)&&k(n,t),!1;case"REASONING_MESSAGE_START":case"THINKING_START":default:return!1;case"REASONING_MESSAGE_CHUNK":case"REASONING_MESSAGE_CONTENT":case"THINKING_CONTENT":return function(t,e){if(void 0===e||t.thoughtsRemaining<=0)return;const n=e.length>t.thoughtsRemaining?e.slice(0,t.thoughtsRemaining):e;0!==n.length&&(t.thoughts.push(n),t.thoughtsRemaining-=n.length)}(r,i(t.delta)??i(t.content)),!1;case"TOOL_CALL_START":return r.openTool=i(t.toolCallName)??i(t.name)??r.openTool,!1;case"TOOL_CALL_END":case"TOOL_CALL_RESULT":return C(r,r.openTool??void 0),r.openTool=null,!1;case"STEP_STARTED":return C(r,i(t.stepName)??i(t.name)),!1;case"RUN_ERROR":throw new l("AGENT_PROTOCOL_ERROR","the support endpoint reported a failed run");case"RUN_FINISHED":return!0}}function U(t){const n=t.endpoint,o=t.online??N,i=t.transport??y(t.transportOptions??{}),s=new Set;return{availability:async()=>null===n?{kind:"unavailable",reason:"no_remote_endpoint"}:o()?{kind:"ready"}:{kind:"unavailable",reason:"offline"},async run(a,f){if(null===n)throw new l("AGENT_UNAVAILABLE","no remote support endpoint is configured");if(!o())throw new l("AGENT_UNAVAILABLE","this device reports no network connection");const h=O(u(a)),m=r(h);c(m);const g=new AbortController;s.add(g);const E=()=>g.abort();f.signal.aborted?g.abort():f.signal.addEventListener("abort",E,{once:!0});try{if(!(await(t.approve??d)(n.url,h,g.signal))||g.signal.aborted)throw S();const r=setTimeout(()=>g.abort(),3e4);g.signal.addEventListener("abort",()=>clearTimeout(r),{once:!0});const o=await async function(t,n){const r=t[Symbol.asyncIterator](),o=function(t){return new Promise(e=>{t.aborted?e(null):t.addEventListener("abort",()=>e(null),{once:!0})})}(n),i=new Map,s={chunks:[],remaining:65536,produced:!1},a={thoughts:[],thoughtsRemaining:4e3,computer:[],openTool:null};let u=0;try{for(;;){if(n.aborted)throw S();const t=await Promise.race([r.next(),o]);if(null===t||n.aborted)throw S();if(!0===t.done)break;if(u+=1,u>4096)break;const l=t.value;if(e(l)){if(I(l,i,s,a))break;if(s.remaining<=0)break}}}finally{r.return?.().catch(()=>{})}if(!s.produced)throw new l("AGENT_PROTOCOL_ERROR","the support endpoint ended the stream without an assistant message");const c=a.thoughts.join("").trim();return{text:s.chunks.join(""),thoughts:c.length>0?c:null,computer:a.computer}}(i({endpoint:n,body:h,signal:g.signal}),g.signal);if(g.signal.aborted)throw S();return{...p(o.text),guide:null,thoughts:o.thoughts,computer:o.computer}}catch(T){if(g.signal.aborted)throw S();if(T instanceof l)throw T;throw new l("AGENT_PROTOCOL_ERROR","the support endpoint could not be reached")}finally{f.signal.removeEventListener("abort",E),g.abort(),s.delete(g)}},destroy(){for(const t of s)t.abort();s.clear()}}}function j(){const t=A();return null===t?null:U({endpoint:t})}export{h as AG_UI_CONFIG_KEY,T as agUiEndpointSeams,b as applyAgUiEndpoint,O as buildAgUiOutboundBody,j as createAgUiAgent,U as createAgUiSupportAgent,y as createAgUiTransport,A as currentAgUiEndpoint,R as loadAgUiEndpoint,E as readAgUiEndpoint,g as readAgUiEndpointUrl,_ as resetAgUiEndpointForTest};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/main-BKK5N8Uh.css"])))=>i.map(i=>d[i]);
2
+ import{connectivitySnapshot as e}from"./connectivity-monitor-B0ueE5HQ.js";import{d as t,i as r,g as a}from"./identity-BVf8yWa4.js";import{i,aV as n,v as s,b as o,aW as d,aX as c,V as p,ah as l,aY as u,aZ as m,ab as f,ae as h,p as y,a_ as w,a$ as v,b0 as g,b1 as _,b2 as b}from"./drop-open-BjgdLxWM.js";import{_ as I}from"./hosted-model-authority-CcNPE44H.js";import{i as k,c as S,B as E}from"./vault-ui-seam-BQGS7RR6.js";import{v as j,x,y as A,z as P,B as O,e as q}from"./identity-view-paths-Bi1yigZk.js";import{r as R,b as T,c as $,n as C}from"./context-CL4-cwvA.js";import{w as L}from"./seams-DJ_lslby.js";import{c7 as M,bc as U,c8 as z,bb as N,c9 as D,ca as V,cb as W}from"./main-BrkS-iow.js";import{a as Z,b as B,p as F,c as H,r as X}from"./password-workflows-Cmir8qky.js";const Y=j;function G(){return[...new Set([...x(),...P().map(e=>O(e)),"/vault/new","/vault?f=favorites","/vault?f=trash"])]}const J=[{name:"opensesame_status",capabilityIds:["app.status"],scope:"boot",readOnly:!0,description:"Vault and session status for the OpenSesame authority vault: lock state, item and folder counts, storage durability, and whether an identity session is active. Never returns secret material.",inputSchema:{type:"object",properties:{},additionalProperties:!1},execute:()=>{const e=s.getSnapshot(),r=o(e.items);return{vault:e.status,durable:e.durable,items:r.length,trashed:e.items.length-r.length,folders:e.folders.length,identitySignedIn:null!==t(),sections:[...Y],destinations:G()}}},{...{name:"opensesame_navigate",description:"Navigate any registered section or tab, Settings category, favorites, trash, or a new-item ceremony. Use section with an authored path; for a typed new item use /vault/new and itemType. Credential entry and approvals stay with the human.",get inputSchema(){return{type:"object",properties:{section:{type:"string",enum:G()},itemType:{type:"string",description:"Installed item type ID, only with /vault/new."},itemId:{type:"string",description:"Existing item ID, only with /vault. Opens the item without returning its secrets."},edit:{type:"boolean",description:"With itemId, open the human edit ceremony."},prefill:{type:"object",properties:{name:{type:"string",maxLength:120},username:{type:"string",maxLength:120},uri:{type:"string",maxLength:120},folder:{type:"string",maxLength:120},ref:{type:"string",maxLength:120}},patternProperties:{"^field\\.[a-zA-Z][a-zA-Z0-9_-]*$":{type:"string",maxLength:120}},additionalProperties:!1,description:"Public metadata only, with /vault/new. Opens a reviewable draft; never include a password, token or other sensitive value."}},required:["section"],additionalProperties:!1}},async execute(e){if(!k(e.section))throw new Error("missing_argument:section");const t=e.section.startsWith("/")?e.section:`/${e.section}`;if(!G().includes(t))throw new Error("unknown_section");if(x().includes(t)&&!A(t))throw new Error("section_not_authorized");let r=t;if(void 0!==e.itemId)r+=await async function(e,t){const r=t.itemId;if("/vault"!==e||"unlocked"!==s.getSnapshot().status||!k(r))throw new Error("invalid_item_destination");const a=!0===t.edit,{assertShareReach:i}=await I(async()=>{const{assertShareReach:e}=await import("./password-workflows-Cmir8qky.js").then(e=>e.l);return{assertShareReach:e}},__vite__mapDeps([0]));await i(s.activeTomb(),{kind:"item",id:r},a?"write":"read");const{items:n}=s.getSnapshot();if(!n.some(e=>e.id===r&&!e.deletedAt))throw new Error("invalid_item_destination");return`/${encodeURIComponent(r)}${a?"/edit":""}`}(t,e);else if(void 0!==e.edit)throw new Error("edit_requires_item");if(void 0!==e.itemType){if("/vault/new"!==t||!k(e.itemType)||!i().has(e.itemType))throw new Error("invalid_item_type_destination");r+=`/${encodeURIComponent(n(e.itemType))}`}if(void 0!==e.prefill){if("/vault/new"!==t)throw new Error("invalid_prefill");r+=function(e,t){if(!S(e))throw new Error("invalid_prefill");const r=new URLSearchParams;for(const[a,i]of Object.entries(e)){if(!k(i))throw new Error("invalid_prefill");r.set(a,i)}return R(r,t),r.size?`?${r}`:""}(e.prefill,k(e.itemType)?n(e.itemType):"account")}return L.navigate(r),{status:"navigated",location:r}}},capabilityIds:["app.navigate"],scope:"boot"},{name:"opensesame_health",capabilityIds:["host.health.pages"],scope:"boot",readOnly:!0,description:"Connectivity posture of this vault tab: browser online state and last-probed health of the sign-in service.",inputSchema:{type:"object",properties:{},additionalProperties:!1},execute:()=>{const t=e();return{online:a(),offline:t.offline,identityApi:r(),identity:(i=t.identity,{health:i.health,rttMs:i.rttMs,lastCheckedAt:i.lastCheckedAt})};var i}}];async function K(e){if(Object.keys(e).some(e=>!["action","kind","source","url"].includes(e))||!k(e.kind)||void 0!==e.url&&(!k(e.url)||e.url.length>120)||void 0!==e.source&&"random"!==e.source&&"browser"!==e.source)throw new Error("invalid_suggestion_arguments");const t="browser"===e.source?await async function(e,t){const[r]=q("item-draft-assist");if(!r)throw new Error("on_device_model_not_enabled");return r.suggest({typeId:n(e),website:t},AbortSignal.timeout(3e4))}(e.kind,k(e.url)?e.url:void 0):T(e.kind);return{status:"suggested",source:e.source??"random",...t}}function Q(e,t){const r=e[t];return k(r)&&r.length>0?r:null}const ee=[{name:"opensesame_login_draft",capabilityIds:["vault.login_draft"],scope:"session",description:"Read or fill the on-screen account editor. Metadata only: name, username, website, folder, favorite. Never reads or writes a password, pepper, TOTP seed, or other secrets. Write patches the form; the person saves.",inputSchema:{type:"object",properties:{action:{type:"string",enum:["read","suggest","write"]},source:{type:"string",enum:["random","browser"],description:"Only with action=suggest."},name:{type:"string"},username:{type:"string"},url:{type:"string"},folderId:{type:"string"},favorite:{type:"boolean"}},additionalProperties:!1},execute:async e=>{const t=Q(e,"action")??"read";if("suggest"===t)return K({...e,kind:"account",action:"suggest"});const r=$();if("read"===t)return r.read();if("write"!==t)throw new Error(`unknown_action:${t}`);const a=null===e.folderId?null:Q(e,"folderId")??void 0;return r.patch({name:Q(e,"name")??void 0,username:Q(e,"username")??void 0,url:Q(e,"url")??void 0,folderId:a,favorite:E(e.favorite)?e.favorite:void 0})}}],te=[{name:"opensesame_vault_find_references",capabilityIds:["vault.workflow.find_references"],scope:"session",readOnly:!0,description:"Find secret references in this local vault for several title queries. Returns os:// references and metadata only; never secret values. 1Password op:// discovery requires the native CLI.",inputSchema:{type:"object",properties:{queries:{type:"array",items:{type:"string"},minItems:1}},required:["queries"],additionalProperties:!1},execute:async e=>{if(!Array.isArray(e.queries)||e.queries.some(e=>!k(e)))throw new Error("queries must be an array of title queries");const t=e.queries.map(e=>{if(!k(e))throw new Error("Invalid query");return e}),r=await Z(t),a={matches:r.matches.map(e=>({...e}))};return r.suggestions&&(a.suggestions=r.suggestions.map(e=>({...e}))),a}},{name:"opensesame_vault_inventory",capabilityIds:["vault.workflow.inventory"],scope:"session",readOnly:!0,description:"List audit-safe local vault inventory: metadata and references only.",inputSchema:{type:"object",properties:{},additionalProperties:!1},execute:async()=>({items:(await B()).map(e=>({...e}))})},{name:"opensesame_vault_audit_organization",capabilityIds:["vault.workflow.audit_organization"],scope:"session",readOnly:!0,description:"Audit local vault duplicate titles, untagged machine credentials, old logins and URLs to review, without secret values.",inputSchema:{type:"object",properties:{},additionalProperties:!1},execute:()=>F()},{name:"opensesame_vault_env_template",capabilityIds:["vault.workflow.env_template"],scope:"session",readOnly:!0,description:"Build a reference-only env template from newline-separated NAME=os:// or NAME=op:// assignments. Never resolves values or executes a process.",inputSchema:{type:"object",properties:{assignments:{type:"string"}},required:["assignments"],additionalProperties:!1},execute:e=>{M();const t=U(e,"assignments").split(/\n/).map(e=>e.trim()).filter(Boolean).map(H);return{template:X(t)}}},{name:"opensesame_open_password_workflow",capabilityIds:["vault.workflow.create_private","vault.workflow.compare_private","vault.workflow.update_private","password_provider.reveal"],scope:"session",description:"Take the person to where they do a private credential task themselves: a new API credential, or an item's own page for comparing or replacing a password, copying a reference or revealing a value. Takes an action and, optionally, an item id; never accepts or returns a secret.",inputSchema:{type:"object",properties:{action:{type:"string",enum:["create","compare","update","reveal"]},item:{type:"string",pattern:"^[A-Za-z0-9_-]{1,128}$"}},required:["action"],additionalProperties:!1},execute:e=>{M();const t=U(e,"action");if(!["create","compare","update","reveal"].includes(t))throw new Error("Unknown human password workflow");if(Object.keys(e).some(e=>"action"!==e&&"item"!==e))throw new Error("Human password workflows accept an action and an item id only; private input stays in the UI");const r=void 0===e.item?"":U(e,"item");if(r&&!/^[A-Za-z0-9_-]{1,128}$/.test(r))throw new Error("Unknown item");return z("create"===t?"/vault/new/secret":r?`/vault/${r}`:"/vault")}}],re=["account","passkey","card","secret","note","certificate","drop"];function ae(e){const t={id:e.id,kind:e.kind,name:e.name,folderId:e.folderId,favorite:e.favorite,createdAt:e.createdAt,updatedAt:e.updatedAt,deletedAt:e.deletedAt};switch(e.kind){case"account":return{...t,uris:e.uris.map(e=>({uri:e.uri,match:e.match})),passwordChangedAt:y(e)?.changedAt??"",hasTotp:""!==p(e)};case"passkey":return{...t,rpId:e.rpId,custody:e.custody??"external"};case"card":return{...t,brand:e.brand};case"secret":return{...t,connectionRef:e.connectionRef};case"certificate":return{...t,commonName:e.commonName,serial:e.serial,notAfter:e.notAfter};case"drop":return{...t,state:e.state,expiresAt:e.expiresAt};case"note":return t;case"typed":return{...t,typeId:e.typeId};case"credential":return{...t,typeId:h(e),bound:null!==e.accountId}}}function ie(){const e=f(s.getSnapshot().items);return new Map(e.findings.map(e=>[e.item.id,[...e.issues]]))}const ne=new Map,se=[...te,{name:"opensesame_vault_search",capabilityIds:["vault.items.search"],scope:"session",readOnly:!0,description:"Search vault items by text, kind, folder or favorites. Returns metadata only (names, kinds, folders, flags, timestamps, health issues) — never passwords, seeds or other secret fields.",inputSchema:{type:"object",properties:{query:{type:"string",description:"Free-text match."},kind:{type:"string",enum:[...re,"login"]},folderId:{type:"string"},favorites:{type:"boolean"}},additionalProperties:!1},execute:async e=>{M();const t=N(e,"query"),r=N(e,"kind"),a=N(e,"folderId"),i=!0===e.favorites;if(r&&!function(e){const t=n(e);return re.some(e=>e===t)}(r))throw new Error(`unknown_kind:${r}`);const c=ie(),p=o(s.getSnapshot().items).filter(e=>!r||e.kind===n(r)).filter(e=>!a||e.folderId===a).filter(e=>!i||e.favorite).filter(e=>!t||d(e,t)),l=[],u=new Set;for(const n of p){try{await D(n.id,"read")}catch{continue}null!==n.folderId&&u.add(n.folderId),l.push({...ae(n),healthIssues:c.get(n.id)??[]})}return{items:l,folders:s.getSnapshot().folders.filter(e=>u.has(e.id))}}},{name:"opensesame_vault_item_read",capabilityIds:["vault.items.read_meta"],scope:"session",readOnly:!0,description:"Read one vault item's metadata by id: name, kind, folder, flags, timestamps and health issues. Secret fields are never included; use opensesame_open_reveal to hand a reveal to the human.",inputSchema:{type:"object",properties:{itemId:{type:"string"}},required:["itemId"],additionalProperties:!1},execute:async e=>{M();const t=await V(U(e,"itemId"),"read");return{...ae(t),healthIssues:ie().get(t.id)??[]}}},{name:"opensesame_vault_item_write",capabilityIds:["vault.items.write_meta"],scope:"session",description:"Create a vault item with local generated defaults, or edit non-secret metadata. With action=suggest, return only a name and fictional username (source=random or browser for the ready on-device model); nothing is saved. Secret input/output is forbidden.",inputSchema:{type:"object",properties:{action:{type:"string",enum:["suggest"]},source:{type:"string",enum:["random","browser"],description:"Only with action=suggest. No remote model fallback or downloads."},itemId:{type:"string",description:"Existing item to edit; omit to create."},kind:{type:"string",description:"Installed item type ID; required when creating or suggesting."},name:{type:"string"},folderId:{type:"string"},favorite:{type:"boolean"},url:{type:"string",description:"Account items only."}},additionalProperties:!1},execute:async e=>{if(M(),"suggest"===e.action)return K(e);!function(e){const t=["itemId","kind","name","folderId","favorite","url"],r=Object.keys(e).filter(e=>!t.includes(e));if(r.length>0)throw new Error(`non_metadata_fields_rejected:${r.sort().join(",")} — WebMCP writes carry title, folder, favorite and url only; secret fields stay in the vault UI`)}(e);const t=N(e,"itemId"),r=t?await V(t,"write"):null;t||await async function(){const{assertShareReach:e}=await I(async()=>{const{assertShareReach:e}=await import("./password-workflows-Cmir8qky.js").then(e=>e.l);return{assertShareReach:e}},__vite__mapDeps([0]));await e(s.activeTomb(),{kind:"vault"},"write")}();const a=N(e,"name"),i=N(e,"folderId"),n=N(e,"url"),o=E(e.favorite)?e.favorite:null;let d;if(r)d={...r};else{const t=U(e,"kind");d=C(t,a??void 0)}if(a&&(d.name=a),null!==i){if(!s.getSnapshot().folders.some(e=>e.id===i))throw new Error(`unknown_folder:${i}`);d.folderId=i}if(null!==o&&(d.favorite=o),null!==n){if("account"!==d.kind)throw new Error("url_requires_account_item");const[e=c(),...t]=d.uris;d.uris=[{...e,uri:n,match:"domain"},...t]}return await s.saveItem(d),ae(W(d.id))}},{name:"opensesame_totp_code",capabilityIds:["vault.totp.code"],scope:"session",description:"Current TOTP code for an account that has an authenticator secret, with seconds remaining in the period. The seed itself never leaves the vault; per-item rate limited.",inputSchema:{type:"object",properties:{itemId:{type:"string"}},required:["itemId"],additionalProperties:!1},execute:async e=>{M();const t=await V(U(e,"itemId"),"read"),r="account"===t.kind?p(t):"";if("account"!==t.kind||""===r)throw new Error("item_has_no_totp");const a=Date.now();if(a-(ne.get(t.id)??0)<2e3)throw new Error("totp_rate_limited");ne.set(t.id,a);const i=l(r),n=await u(i);return{itemId:t.id,code:n,secondsRemaining:m(i.period),period:i.period}}}],oe={name:"opensesame_open_reveal",capabilityIds:["vault.items.reveal"],scope:"session",description:"Open a vault item's detail view so the human can reveal or copy its secret. The secret is never returned here.",inputSchema:{type:"object",properties:{itemId:{type:"string"}},required:["itemId"],additionalProperties:!1},execute:async e=>{M();const t=await V(U(e,"itemId"),"read");return z(`/vault/${encodeURIComponent(t.id)}`)}},de=[v,g,_,b],ce=["Encrypt","Decrypt","kms:Encrypt","kms:Decrypt","crypto.encrypt","crypto.decrypt","age.encrypt","age.decrypt","unwrap","wrap","opensesame.vault.unwrap_root","opensesame.vault.wrap_root"];function pe(e){if(!function(e){return!(void 0!==e.domain&&function(e){for(const t of de)if(t===e)return!0;return!1}(e.domain)||function(e){const t=function(e){return e.trim()}(e);for(const r of ce)if(r===t)return!0;return!1}(e.alias)&&void 0===e.domain)}(e))throw new w("agent_forbidden","Human-vault root unwrap is not available through ConnectionRef, MCP, or generic crypto aliases.")}export{J as B,ee as L,oe as O,se as V,pe as a};
@@ -0,0 +1 @@
1
+ import{x as n,a as t,o as e,i as a,b as o}from"./vault-ui-seam-BQGS7RR6.js";import{S as r,s as i,b as s,p as l,a as u}from"./consent-CcqmRPoB.js";import"./native-worker-noble-ciphers-708367a7-BPuD3lXB.js";import"./native-worker-noble-hashes-b1a58353-IgGIMWEC.js";import"./native-worker-bytes-a0e18d71-DFmKzL3P.js";import"./identity-BVf8yWa4.js";import"./model-provider-B6oAnQX9.js";import"./hosted-model-authority-CcNPE44H.js";import"./native-worker-zod-5c0ed887-B342B6ko.js";import"./native-worker-zod-jitless-ba55e4a3-DZHC6DC7.js";const c=["en"];function d(){const r=e(globalThis).LanguageModel;if(null==r)return null;if(!(n(r)||t(r)&&!Array.isArray(r)))return null;const i=e(r),s=i.availability,l=i.create;if(!n(s)||!n(l))return null;const u=e(s),d=e(l),w={expectedInputs:[{type:"text",languages:c}],expectedOutputs:[{type:"text",languages:c}]};return{availability:async()=>function(n){if(!a(n))return"unavailable";switch(n){case"available":case"readily":return"available";case"downloading":return"downloading";case"downloadable":case"after-download":return"downloadable";default:return"unavailable"}}(await u.call(i,w)),create:async r=>{const s={expectedInputs:w.expectedInputs,expectedOutputs:w.expectedOutputs};r.initialPrompts.length>0&&(s.initialPrompts=r.initialPrompts),null!==r.signal&&(s.signal=r.signal);const l=r.monitor;null!==l&&(s.monitor=n=>{n.addEventListener("downloadprogress",n=>{var t;l(!o(t=n.loaded)||Number.isNaN(t)||t<=0?0:t>=1?1:t)})});const u=function(o){if(null==o||!t(o)||Array.isArray(o))return null;const r=e(o),i=r.prompt,s=r.destroy;if(!n(i)||!n(s))return null;const l=e(i),u=e(s);return{prompt:async(n,t)=>{const e=await l.call(r,n,{signal:t.signal});if(!a(e))throw new Error("The built-in language model answered with something that is not text.");return e},destroy:()=>{u.call(r)}}}(await d.call(i,s));if(null===u)throw new Error("The built-in language model returned a session without a usable prompt().");return u}}}let w=null,f=Promise.resolve();function p(n,t,e,a){const o=f.then(()=>async function(n,t,e,a){if(null!==w&&w.instructions===t)return w.session;null!==w&&(w.session.destroy(),w=null);const o=await n.create({initialPrompts:t.length>0?[{role:"system",content:t}]:[],monitor:e,signal:a});return w={session:o,instructions:t},o}(n,t,e,a));return f=o.then(()=>{},()=>{}),o}function m(){null!==w&&(w.session.destroy(),w=null)}function h(){m()}const b={latest:0};function g(){return b.latest}function y(){b.latest=0}const v=new Set(["QuotaExceededError","ContextWindowExceededError"]),A=/quota|context (?:window|length)|token limit|too many tokens|session is full/iu;function E(n){return void 0===n.api?d():n.api}function k(){return new r("AGENT_ABORTED","The support request was cancelled.")}function x(n){const t=n instanceof Error?n.message:"the model failed without a reason";return new r("AGENT_PROTOCOL_ERROR",`The on-device model could not answer: ${t}`)}function T(n){if(function(n){return n instanceof r?"AGENT_ABORTED"===n.code:n instanceof Error&&"AbortError"===n.name}(n))throw k()}function _(n){switch(n){case"available":return{kind:"ready"};case"downloading":return{kind:"downloading",progress:b.latest};case"downloadable":return{kind:"downloadable"};default:return{kind:"unavailable",reason:"platform_unsupported"}}}function j(n){const t=n.onDownloadProgress??null;return n=>{b.latest=n,null!==t&&t(n)}}function P(n){try{return l(n)}catch{const t=n.trim().slice(0,u.maxAnswerChars);return{answer:t.length>0?t:"The on-device model returned nothing this time. Ask again, or rephrase.",guide:null,suggestedQuestions:[]}}}function N(n,t,e){return e.aborted?Promise.reject(k()):new Promise((a,o)=>{let r=!1;const i=()=>{r||(r=!0,o(k()))};e.addEventListener("abort",i,{once:!0});const s=()=>(e.removeEventListener("abort",i),!r&&(r=!0,!0));n.prompt(t,{signal:e}).then(n=>{s()&&a(n)},n=>{s()&&o(n)})})}async function L(n={}){const t=E(n);if(null===t)return{kind:"unavailable",reason:"no_local_model"};const e=await t.availability();if("unavailable"===e)return{kind:"unavailable",reason:"platform_unsupported"};if("available"===e)return{kind:"ready"};try{await p(t,"",j(n),null)}catch{return{kind:"unavailable",reason:"model_not_downloaded"}}return _(await t.availability())}function O(n={}){const t=E(n);return null===t?null:I({...n,api:t})}async function G(n,t={}){const e=await L({...t,onDownloadProgress:n});if("ready"!==e.kind)throw new r("AGENT_UNAVAILABLE",`The on-device model could not be acquired: ${"unavailable"===e.kind?e.reason:e.kind}.`)}function I(n={}){async function t(t,e,a){const o=await p(t,e,j(n),null);if(a.aborted)throw k();return o}return{async availability(){const t=E(n);return null===t?{kind:"unavailable",reason:"no_local_model"}:_(await t.availability())},async run(e,a){const o=E(n);if(null===o)throw new r("AGENT_UNAVAILABLE","This browser has no built-in language model.");if(a.signal.aborted)throw k();const l=await o.availability();if("available"!==l)throw new r("AGENT_UNAVAILABLE",`The on-device model is ${l}. Acquiring it downloads gigabytes, so it only starts when a person asks for it.`);const u=i(e),c=s(u.context),d=function(n){const t=[];for(const e of n.history.slice(-12))t.push(`${"user"===e.role?"Person":"Assistant"}: ${e.text}`);return t.push(`Person: ${n.question}`),t.join("\n")}(u),f=await t(o,c,a.signal);try{return P(await N(f,d,a.signal))}catch(p){if(T(p),!function(n){return n instanceof Error&&(v.has(n.name)||A.test(n.message))}(p))throw x(p);!function(n){null!==w&&w.session===n&&m()}(f);try{return await async function(n,e,a,o){const r=await t(n,e,o);return P(await N(r,a,o))}(o,c,d,a.signal)}catch(h){throw T(h),x(h)}}},destroy(){}}}export{L as acquireLocalModel,G as acquirePromptApiModel,O as createPromptApiAgent,I as createPromptApiSupportAgent,d as detectLocalLanguageModel,g as readLocalModelDownloadProgress,m as releaseLocalModelSession,y as resetLocalModelDownloadProgressForTest,h as resetLocalModelSessionForTest};
@@ -0,0 +1 @@
1
+ import{c as e,i as t}from"./vault-ui-seam-BQGS7RR6.js";import{S as n,s as o,b as r,p as s,a as i}from"./consent-CcqmRPoB.js";import{l as a,s as l}from"./model-provider-B6oAnQX9.js";import"./native-worker-noble-ciphers-708367a7-BPuD3lXB.js";import"./native-worker-noble-hashes-b1a58353-IgGIMWEC.js";import"./native-worker-bytes-a0e18d71-DFmKzL3P.js";import"./identity-BVf8yWa4.js";import"./hosted-model-authority-CcNPE44H.js";import"./native-worker-zod-5c0ed887-B342B6ko.js";import"./native-worker-zod-jitless-ba55e4a3-DZHC6DC7.js";function c(e,t,n){const o=e.model.trim()||"llama3.2";return n?JSON.stringify({model:o,temperature:.2,messages:t}):JSON.stringify({model:o,stream:!1,messages:t})}function u(e=a()){return"local"!==e.kind?null:e.endpoint.trim()&&l(e.endpoint)?e:null}function d(l={}){const d=u(l.record??a());if(null===d)return null;const m=l.fetch??fetch.bind(globalThis),h=new Set;return{availability:async()=>({kind:"ready"}),async run(a,l){if(l.signal.aborted)throw new n("AGENT_ABORTED","The support request was cancelled.");const u=o(a),p=r(u.context),f=function(e){const t=[];for(const n of e.history.slice(-12))t.push(`${"user"===n.role?"Person":"Assistant"}: ${n.text}`);return t.push(`Person: ${e.question}`),t.join("\n")}(u),w=function(e){const t=e.endpoint.replace(/\/$/,"");return t.endsWith("/v1")||t.includes("/v1/")?{url:`${(t.endsWith("/v1")?t:t.includes("/chat/completions")?t.slice(0,t.indexOf("/chat/completions")):t).replace(/\/$/,"")}/chat/completions`,usesChatCompletions:!0}:{url:`${t}/api/chat`,usesChatCompletions:!1}}(d),g=[{role:"system",content:p},{role:"user",content:f}],b=new AbortController;h.add(b);const y=()=>b.abort();l.signal.aborted?b.abort():l.signal.addEventListener("abort",y,{once:!0});try{const o=await m(w.url,{method:"POST",headers:{"content-type":"application/json",accept:"application/json"},body:c(d,g,w.usesChatCompletions),signal:b.signal,credentials:"omit",redirect:"error"});if(!o.ok)throw new n("AGENT_PROTOCOL_ERROR",`local model HTTP ${o.status}`);return function(e){try{return s(e)}catch{const t=e.trim().slice(0,i.maxAnswerChars);return{answer:t.length>0?t:"The local model returned nothing this time. Ask again, or rephrase.",guide:null,suggestedQuestions:[]}}}(function(n,o){if(!e(n))return"";if(o){const o=n.choices;if(!Array.isArray(o)||0===o.length)return"";const r=o[0];if(!e(r))return"";const s=r.message;return e(s)&&t(s.content)?s.content:""}const r=n.message;return e(r)&&t(r.content)?r.content:""}(await o.json(),w.usesChatCompletions))}catch(j){if(b.signal.aborted)throw new n("AGENT_ABORTED","The support request was cancelled.");if(j instanceof n)throw j;throw new n("AGENT_UNAVAILABLE","The configured local model did not answer.")}finally{l.signal.removeEventListener("abort",y),h.delete(b)}},destroy(){for(const e of h)e.abort();h.clear()}}}function m(){return d()}export{m as createProviderAgent,d as createProviderSupportAgent,u as readLocalSupportProvider};