sliccy 6.248.2 → 6.248.4

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 (146) hide show
  1. package/dist/ui/.vite/manifest.json +233 -208
  2. package/dist/ui/assets/{account-store-ns4WYcMU.js → account-store-CoiNHIE9.js} +1 -1
  3. package/dist/ui/assets/{account-store-D6Y7UkDR.js → account-store-EUAU8ivx.js} +1 -1
  4. package/dist/ui/assets/{adobe-X7Inkd3y.js → adobe-Cnyzs0z9.js} +1 -1
  5. package/dist/ui/assets/{adobe-DUTM1MYN.js → adobe-bJrGAM6E.js} +1 -1
  6. package/dist/ui/assets/{agent-panels-CKJsRdkX.js → agent-panels-DxCO1Hct.js} +1 -1
  7. package/dist/ui/assets/{almost-bash-shell-headless-ClalXJjr.js → almost-bash-shell-headless-BMKZNLwu.js} +15 -15
  8. package/dist/ui/assets/{apply-layout-CchSfN26.js → apply-layout-BjLmZ8CX.js} +1 -1
  9. package/dist/ui/assets/{azure-openai-DyFYxvm3.js → azure-openai-C5kzBBrl.js} +1 -1
  10. package/dist/ui/assets/{azure-openai-CKbMQD0r.js → azure-openai-CgL7nikU.js} +1 -1
  11. package/dist/ui/assets/{bunny-probe-C4NWuNUc.js → bunny-probe-AeE-5oRk.js} +1 -1
  12. package/dist/ui/assets/{bunny-run-i0aWgiSm.js → bunny-run-Dqkr4mRC.js} +1 -1
  13. package/dist/ui/assets/{cdp-DQxci1TE.js → cdp-DU50qKlQ.js} +1 -1
  14. package/dist/ui/assets/{cerebras-DIP7_DDR.js → cerebras-C4IlgrId.js} +1 -1
  15. package/dist/ui/assets/{cerebras-CxUX42e1.js → cerebras-Exx59PmI.js} +1 -1
  16. package/dist/ui/assets/{composer-speech-BG6t0naa.js → composer-speech-CtvE78Rx.js} +1 -1
  17. package/dist/ui/assets/{connect-surface-D2XK41nE.js → connect-surface-Bvi30iYd.js} +1 -1
  18. package/dist/ui/assets/{directed-approval-B12urAW4.js → directed-approval-CQVXF9kD.js} +1 -1
  19. package/dist/ui/assets/dist-CegW-G1M.js +1 -0
  20. package/dist/ui/assets/dist-kcvXs5tL.js +5 -0
  21. package/dist/ui/assets/{emscripten-vfs-hook-CWvY9WeB.js → emscripten-vfs-hook-G9JRg26r.js} +1 -1
  22. package/dist/ui/assets/{fast-path-R8Tr2lTS.js → fast-path-Bwq0oDa5.js} +1 -1
  23. package/dist/ui/assets/{frozen-archive-writer-CbV_CMOh.js → frozen-archive-writer-DV7A8nNw.js} +1 -1
  24. package/dist/ui/assets/{frozen-archive-writer-Ceh2la4q.js → frozen-archive-writer-DV8CfTGq.js} +1 -1
  25. package/dist/ui/assets/{frozen-session-delete-D5D_Ne2e.js → frozen-session-delete-KNFPPuJe.js} +1 -1
  26. package/dist/ui/assets/{frozen-session-identity-gJ9_AdhB.js → frozen-session-identity-B46HFhaz.js} +1 -1
  27. package/dist/ui/assets/{frozen-session-identity-BaOmOPkW.js → frozen-session-identity-CF594WMJ.js} +1 -1
  28. package/dist/ui/assets/{gelatiere-unit-C7ZNZUSc.js → gelatiere-unit-BnExmaTM.js} +1 -1
  29. package/dist/ui/assets/{ghostty-vt-BeUP0ymd.wasm → ghostty-vt--DTGF19l.wasm} +0 -0
  30. package/dist/ui/assets/{github-6DwMsMnA.js → github-BrjjZAsX.js} +1 -1
  31. package/dist/ui/assets/{github-1mLybvS_.js → github-C6Rd03wJ.js} +1 -1
  32. package/dist/ui/assets/{github-copilot-BfIxbhi4.js → github-copilot-DqpGzQw_.js} +1 -1
  33. package/dist/ui/assets/{github-copilot-N-tzbR5P.js → github-copilot-_OyzohK5.js} +1 -1
  34. package/dist/ui/assets/{hear-Ct45sfIf.js → hear-BN5luL3S.js} +1 -1
  35. package/dist/ui/assets/{js-realm-worker-Cu7m3Um0.js → js-realm-worker-DUoX2h5j.js} +2 -2
  36. package/dist/ui/assets/{jsh-executor-Dl-C6Zsf.js → jsh-executor-B_ddQzto.js} +2 -2
  37. package/dist/ui/assets/{kernel-worker-C8b5lZTP.js → kernel-worker-MybuXyBd.js} +8 -8
  38. package/dist/ui/assets/{lick-ws-bridge-D-E79_1_.js → lick-ws-bridge-CPjy5dPn.js} +1 -1
  39. package/dist/ui/assets/{lick-ws-bridge-h5gzMRSW.js → lick-ws-bridge-DEmDlxVR.js} +1 -1
  40. package/dist/ui/assets/{live-session-curation-Cyo4-AT4.js → live-session-curation-C9AY4psl.js} +1 -1
  41. package/dist/ui/assets/{live-session-curation-SLge-cX1.js → live-session-curation-ChkffqSA.js} +1 -1
  42. package/dist/ui/assets/{live-session-snapshot-pRBKYrJ8.js → live-session-snapshot-DwWIWtG9.js} +1 -1
  43. package/dist/ui/assets/{local-llm-BlHvV5yP.js → local-llm-B-KVBQuy.js} +1 -1
  44. package/dist/ui/assets/{local-llm-ENpj_eMH.js → local-llm-BI7bYfoc.js} +1 -1
  45. package/dist/ui/assets/{main-cherry-C7-exyW-.js → main-cherry-CQgQpSib.js} +1 -1
  46. package/dist/ui/assets/{main-DfG-7olk.js → main-pp1LzVcX.js} +3 -3
  47. package/dist/ui/assets/{mcp-command-17_LRqwb.js → mcp-command-B779bOTK.js} +10 -10
  48. package/dist/ui/assets/{memory-curation-seam-CCSYlceq.js → memory-curation-seam-ByPo8cGi.js} +1 -1
  49. package/dist/ui/assets/{memory-health-BvHYn77g.js → memory-health-DcxlUrXc.js} +1 -1
  50. package/dist/ui/assets/{memory-write-execute-DgQbDA3A.js → memory-write-execute-CKI-9ZAP.js} +1 -1
  51. package/dist/ui/assets/{merge-folded-cost-into-frozen-JhDEaEfs.js → merge-folded-cost-into-frozen-DIYTak4p.js} +1 -1
  52. package/dist/ui/assets/{new-session-CnoNDTuz.js → new-session-g_r_qcmc.js} +2 -2
  53. package/dist/ui/assets/{oauth-bootstrap-ChsezcFC.js → oauth-bootstrap-DreVl6g7.js} +2 -2
  54. package/dist/ui/assets/{onboarding-orchestrator-DVgfzjFI.js → onboarding-orchestrator-C2EOhp34.js} +1 -1
  55. package/dist/ui/assets/{openai-codex-C-kcHoOI.js → openai-codex-B8pw-NWl.js} +1 -1
  56. package/dist/ui/assets/{openai-codex-Dv0f6Zky.js → openai-codex-C4Tm1S2D.js} +1 -1
  57. package/dist/ui/assets/{openrouter-43Pclqtc.js → openrouter-B0EqwIn3.js} +1 -1
  58. package/dist/ui/assets/{openrouter-Cpv4zDcO.js → openrouter-CzQ8Mfh0.js} +1 -1
  59. package/dist/ui/assets/{openrouter-free-FKyXQM6S.js → openrouter-free-Cl4RHvyD.js} +1 -1
  60. package/dist/ui/assets/{openrouter-free-ChP9MxdX.js → openrouter-free-CpKJupv_.js} +1 -1
  61. package/dist/ui/assets/{openrouter-oauth-BG3--aWC.js → openrouter-oauth-0yFjXvrc.js} +1 -1
  62. package/dist/ui/assets/{openrouter-oauth-CNF2eLlh.js → openrouter-oauth-BRahdbZ4.js} +1 -1
  63. package/dist/ui/assets/{panel-rpc-handlers-bwwGloEJ.js → panel-rpc-handlers-GkEWjrsh.js} +2 -2
  64. package/dist/ui/assets/{panelize-shell-CHcICs0K.js → panelize-shell-CtMH6CGD.js} +1 -1
  65. package/dist/ui/assets/{pi-edit-execution-De18yFud.js → pi-edit-execution-ru_RSE31.js} +1 -1
  66. package/dist/ui/assets/{provider-CkRuiBXe.js → provider-Dm5ZNpu9.js} +1 -1
  67. package/dist/ui/assets/{provider-BXpJxeAj.js → provider-qOOj0Bx4.js} +1 -1
  68. package/dist/ui/assets/{provider-settings-BiHtUcJy.js → provider-settings-Dts8qnq0.js} +1 -1
  69. package/dist/ui/assets/provider-store-access-C_mdEz_o.js +1 -0
  70. package/dist/ui/assets/provider-store-access-TfpqgcQb.js +1 -0
  71. package/dist/ui/assets/{providers-4SFNzKj4.js → providers-CEBpTOtO.js} +2 -2
  72. package/dist/ui/assets/{providers-CNMsS7p4.js → providers-IksVbHjy.js} +1 -1
  73. package/dist/ui/assets/{quick-llm-D46cR1qL.js → quick-llm-BKYqGAke.js} +1 -1
  74. package/dist/ui/assets/{realm-inprocess-BM3rzakW.js → realm-inprocess-ZgBNrBFy.js} +2 -2
  75. package/dist/ui/assets/{realm-unhandled-rejections-CtQi1yQa.js → realm-unhandled-rejections-Dlau5E21.js} +1 -1
  76. package/dist/ui/assets/{realm-unhandled-rejections-OEjbIKa3.js → realm-unhandled-rejections-VXmx0XIB.js} +1 -1
  77. package/dist/ui/assets/{recovery-screen-f0eMynNT.js → recovery-screen-NNWQWNqn.js} +1 -1
  78. package/dist/ui/assets/{remote-terminal-view-BvBX-VtU.js → remote-terminal-view-oOTCkn_X.js} +2 -2
  79. package/dist/ui/assets/{restore-DB68Gs49.js → restore-zlhvIM6j.js} +1 -1
  80. package/dist/ui/assets/{run-Ddy8I2eX.js → run-BGO-UaQS.js} +1 -1
  81. package/dist/ui/assets/{run-lA9Glhv6.js → run-BY-WnPWq.js} +2 -2
  82. package/dist/ui/assets/{run-QCY2mHg_.js → run-Cei5Q63u.js} +2 -2
  83. package/dist/ui/assets/{run-DbiSqYHp.js → run-DD-Zc-AI.js} +2 -2
  84. package/dist/ui/assets/{run-DxAKJMli.js → run-DW2M8USl.js} +2 -2
  85. package/dist/ui/assets/{run-Cb9nH_3a.js → run-DfaMtqBW.js} +1 -1
  86. package/dist/ui/assets/{run-DwJ5gSg3.js → run-rfYH3Q6m.js} +1 -1
  87. package/dist/ui/assets/{serve-command-CrjFrMtN.js → serve-command-Bkb8RYZg.js} +2 -2
  88. package/dist/ui/assets/{serve-runtime-Df_C7Bwg.js → serve-runtime-BWUwkiqv.js} +1 -1
  89. package/dist/ui/assets/{session-command-memory-CsOEa_ms.js → session-command-memory-nKG4sb28.js} +2 -2
  90. package/dist/ui/assets/{session-jsonl-CMk3OfCb.js → session-jsonl-B5phOLgv.js} +1 -1
  91. package/dist/ui/assets/{session-jsonl-By2cMFbj.js → session-jsonl-Ca8gi9Dg.js} +1 -1
  92. package/dist/ui/assets/{session-search-index-CQZ4zHoN.js → session-search-index-tweAFlvW.js} +1 -1
  93. package/dist/ui/assets/{setup-feature-flags-remote-B5Zj6DG2.js → setup-feature-flags-remote-Bnrz-kqW.js} +1 -1
  94. package/dist/ui/assets/{setup-model-catalog-DF_b-L0I.js → setup-model-catalog-DPoX_vRY.js} +1 -1
  95. package/dist/ui/assets/{silent-renew-backoff-DdGLoVuv.js → silent-renew-backoff-CMGVLIXZ.js} +1 -1
  96. package/dist/ui/assets/slicc-version-D9VMviCR.js +1 -0
  97. package/dist/ui/assets/{soundscape-DEhbJ-ug.js → soundscape-DtFo8gPx.js} +1 -1
  98. package/dist/ui/assets/{speak-BoErE_TJ.js → speak-BNqo53H8.js} +1 -1
  99. package/dist/ui/assets/{sprinkle-manager-Bl1h68AL.js → sprinkle-manager-KZBan5ot.js} +1 -1
  100. package/dist/ui/assets/{sprinkle-renderer-B9Kv4iHS.js → sprinkle-renderer-GOx0t_KB.js} +1 -1
  101. package/dist/ui/assets/{src-BQf5Kp1T.js → src-C5tBXKh_.js} +2 -2
  102. package/dist/ui/assets/{ssh-CMLjKc-C.js → ssh-CgmHQfC4.js} +1 -1
  103. package/dist/ui/assets/{sudo-CXCObhqu.js → sudo-CfhS3XDc.js} +1 -1
  104. package/dist/ui/assets/{supervisor-D09OiqeU.js → supervisor-DXke_KPH.js} +1 -1
  105. package/dist/ui/assets/{sync-dialog-D-i17d_q.js → sync-dialog-B4XIyWlR.js} +1 -1
  106. package/dist/ui/assets/{transformers-env-C6K6s36u.js → transformers-env-C6_kFf6e.js} +1 -1
  107. package/dist/ui/assets/{tray-leader-0GIP6SM2.js → tray-leader-CrSh1Fel.js} +1 -1
  108. package/dist/ui/assets/{tray-leave-runtime-TPEwLpwn.js → tray-leave-runtime-wJkN1AA0.js} +1 -1
  109. package/dist/ui/assets/{tray-sidecar-Cjoy27SR.js → tray-sidecar-DlOOGPQH.js} +1 -1
  110. package/dist/ui/assets/{upgrade-detection-Du2ZH4V4.js → upgrade-detection-Ct24ndl7.js} +1 -1
  111. package/dist/ui/assets/{voice-reply-Bcxvx3tf.js → voice-reply-CxXL_kEA.js} +1 -1
  112. package/dist/ui/assets/warm-wterm-DQwmz7G4.js +1 -0
  113. package/dist/ui/assets/wasm-inline-DSUyFn1L.js +1 -0
  114. package/dist/ui/assets/{wc-attach-x14l9M_B.js → wc-attach-Cmjdm23i.js} +2 -2
  115. package/dist/ui/assets/{wc-browser-C2zfIRBm.js → wc-browser-SUzkjJTA.js} +1 -1
  116. package/dist/ui/assets/{wc-computers-D3xFwdpr.js → wc-computers-BrBtwbOb.js} +1 -1
  117. package/dist/ui/assets/{wc-detached-CAFjtMoz.js → wc-detached-cVeDn3rP.js} +1 -1
  118. package/dist/ui/assets/{wc-extension-BR312mr2.js → wc-extension-VohpgpQG.js} +2 -2
  119. package/dist/ui/assets/{wc-follower-DE7WQb_h.js → wc-follower-BfOmPsV0.js} +3 -3
  120. package/dist/ui/assets/{wc-follower-oauth-DFiPwVPW.js → wc-follower-oauth-Br9RPRQJ.js} +1 -1
  121. package/dist/ui/assets/{wc-gelatiere-DjxUMudk.js → wc-gelatiere-WQR5AxZ9.js} +1 -1
  122. package/dist/ui/assets/{wc-live-aEmb1wYY.js → wc-live-Bj38qUgj.js} +5 -5
  123. package/dist/ui/assets/{wc-nav-DaPUjCh_.js → wc-nav-BHy21Jl4.js} +2 -2
  124. package/dist/ui/assets/{wc-onboarding-CuZD2L7O.js → wc-onboarding-DooXTaWX.js} +2 -2
  125. package/dist/ui/assets/{wc-permissions-dmftxiz6.js → wc-permissions-CUtqnNV2.js} +2 -2
  126. package/dist/ui/assets/{wc-placeholder-Dsw3z2er.js → wc-placeholder-Ca_dzZDr.js} +3 -3
  127. package/dist/ui/assets/{wc-secret-request-B4EOYPwa.js → wc-secret-request-CxHPy2MF.js} +1 -1
  128. package/dist/ui/assets/{wc-settings-BnIaH8l3.js → wc-settings-Bf68mx0s.js} +3 -3
  129. package/dist/ui/assets/{wc-shell-fIEX0Fr7.js → wc-shell-C0Y0f1tt.js} +234 -20
  130. package/dist/ui/assets/{wc-shortcut-config-BDxnaOQ1.js → wc-shortcut-config-CkCG_Ehd.js} +1 -1
  131. package/dist/ui/assets/{wc-sprinkles-DUpa4cWM.js → wc-sprinkles-BlFVp_Zu.js} +2 -2
  132. package/dist/ui/assets/{wc-transcript-export-r0Cw8Qpa.js → wc-transcript-export-DWFK7w_9.js} +2 -2
  133. package/dist/ui/assets/{wc-tray-BY31Fswm.js → wc-tray-BU_mkrQK.js} +4 -4
  134. package/dist/ui/assets/welcome-detection-3uAUZPVw.js +1 -0
  135. package/dist/ui/assets/{whisper-session-DoB1nala.js → whisper-session-7VWAVhAF.js} +2 -2
  136. package/dist/ui/assets/{xai-grok-GgyXbIKx.js → xai-grok-6WPJsfyI.js} +1 -1
  137. package/dist/ui/assets/{xai-grok-DUH1s394.js → xai-grok-Cl-8KspF.js} +1 -1
  138. package/dist/ui/index.html +3 -3
  139. package/dist/ui/packages/webapp/index.html +3 -3
  140. package/package.json +1 -1
  141. package/dist/ui/assets/dist-CaUJj_g5.js +0 -1
  142. package/dist/ui/assets/dist-DBSQLDw2.js +0 -1
  143. package/dist/ui/assets/provider-store-access-BGpLWm69.js +0 -1
  144. package/dist/ui/assets/provider-store-access-BWuEjd9t.js +0 -1
  145. package/dist/ui/assets/slicc-version-BHbvdY0F.js +0 -1
  146. package/dist/ui/assets/welcome-detection-Cf37YU0q.js +0 -1
@@ -1,4 +1,4 @@
1
- import"./browser-L7W6uZ79.js";import{a as e,c as t,i as n,l as r,o as i,r as a}from"./ffmpeg-wasm-sx-3yVAE.js";import{r as o}from"./engine-CzMNXd8U.js";import{a as s,createIpkContextFromCtx as c,i as l,n as u,r as ee,t as d}from"./run-DwJ5gSg3.js";const f={mono:1,stereo:2,"2.1":3,"3.0":3,"3.1":4,"4.0":4,quad:4,"4.1":5,"5.0":5,"5.1":6,"6.0":6,"6.1":7,"7.0":7,"7.1":8};function p(e){let t=/^(\d+):(\d{2}):(\d{2}(?:\.\d+)?)$/.exec(e.trim());if(!t)return;let n=Number(t[1]),r=Number(t[2]),i=Number(t[3]);if([n,r,i].every(Number.isFinite))return(n*3600+r*60+i).toFixed(6)}function m(e){let t=e.trim().toLowerCase();if(Object.hasOwn(f,t))return f[t];let n=/^([0-9.]+|[a-z0-9_+-]+)\(/.exec(t);if(n&&Object.hasOwn(f,n[1]))return f[n[1]];let r=/^(\d+)\s+channels?$/.exec(t);if(r)return Number(r[1])}function h(e){let t=Number(e);return Number.isFinite(t)?Number.isInteger(t)?`${t}/1`:`${Math.round(t*1e3)}/1000`:e}function g(e){let t=Number(e);if(Number.isFinite(t))return String(Math.round(t*1e3))}function _(e){let t=/^([A-Za-z0-9_]+)(.*)$/.exec(e);if(!t)return{remainder:e};let n=t[2],r,i,a=/^\s*\(([^)/]+)\)/.exec(n);a&&!a[1].includes(`/`)&&(r=a[1].trim(),n=n.slice(a[0].length));let o=/^\s*\(([A-Za-z0-9]+)\s*\/\s*0x[0-9a-fA-F]+\)/.exec(n);return o&&(i=o[1],n=n.slice(o[0].length)),{codec_name:t[1],profile:r,codec_tag_string:i,remainder:n}}function v(e,t){let n=/,\s*([A-Za-z0-9_]+)(?:\([^)]*\))?,\s*(\d+)x(\d+)/.exec(e);n&&(t.pix_fmt=n[1],t.width=Number(n[2]),t.height=Number(n[3]));let r=/\[SAR\s+(\S+)\s+DAR\s+(\S+)\]/.exec(e);r&&(t.sample_aspect_ratio=r[1],t.display_aspect_ratio=r[2]);let i=/,\s*(\d+(?:\.\d+)?)\s*kb\/s/.exec(e);i&&(t.bit_rate=g(i[1]));let a=/,\s*(\d+(?:\.\d+)?)\s*fps/.exec(e);a&&(t.r_frame_rate=h(a[1]),t.avg_frame_rate=t.r_frame_rate)}function y(e,t){let n=/,\s*(\d+)\s*Hz/.exec(e);n&&(t.sample_rate=n[1]);let r=/Hz,\s*([^,]+)/.exec(e);if(r){let e=r[1].trim();t.channel_layout=e,t.channels=m(e)}let i=/,\s*(\d+(?:\.\d+)?)\s*kb\/s/.exec(e);i&&(t.bit_rate=g(i[1]))}function b(e){let t=/^\s*Stream #(\d+):(\d+)(?:\[[^\]]*\])?(?:\([^)]*\))?:\s*(Video|Audio|Subtitle|Data|Attachment):\s*(.+)$/i.exec(e);if(!t)return null;let n=t[3].toLowerCase(),r={index:Number(t[2]),codec_type:n},{codec_name:i,profile:a,codec_tag_string:o,remainder:s}=_(t[4]);return i&&(r.codec_name=i),a&&(r.profile=a),o&&(r.codec_tag_string=o),n===`video`?v(s,r):n===`audio`&&y(s,r),r}function x(e,t){let n=/^\s*Duration:\s*([^,]+),\s*start:\s*([^,]+),\s*bitrate:\s*(\d+(?:\.\d+)?)\s*kb\/s/.exec(t);return n?(e.duration=p(n[1]),e.start_time=Number(n[2]).toFixed(6),e.bit_rate=g(n[3]),!0):!1}function S(e,t,n){let r=/^\s{2,}([A-Za-z0-9_]+)\s*:\s*(.*)$/.exec(n);return r&&!/^(Duration|Stream)\b/.test(r[1])?(t[r[1]]=r[2].trim(),`keep`):(Object.keys(t).length>0&&(e.tags=t),`end`)}function C(e,t){let n=e.split(/\r?\n/),r=null,i=[],a=!1,o;for(let e of n){let n=/^Input #(\d+),\s*(.+?),\s*from\s+'([^']*)':\s*$/.exec(e);if(n){a=!0,r={format_name:n[2].trim(),filename:n[3]||t},o=void 0;continue}if(!a||!r)continue;if(/^\s*Metadata:\s*$/.test(e)){o={};continue}if(o){if(S(r,o,e)===`keep`)continue;o=void 0}if(x(r,e))continue;let s=b(e);s&&(r.duration&&s.duration===void 0&&(s.duration=r.duration),i.push(s))}return r?{format:r,streams:i}:null}const w=new Set([`-i`,`-v`,`-loglevel`,`-of`,`-print_format`,`-show_entries`,`-select_streams`]),T=new Set([`-show_format`,`-show_streams`,`-hide_banner`,`-h`,`--help`,`-version`,`--version`]);function E(){return{stdout:`ffprobe - media probe (mediabunny, with a wasm fallback)
1
+ import"./browser-L7W6uZ79.js";import{a as e,c as t,i as n,l as r,o as i,r as a}from"./ffmpeg-wasm-sx-3yVAE.js";import{r as o}from"./engine-CzMNXd8U.js";import{a as s,createIpkContextFromCtx as c,i as l,n as u,r as ee,t as d}from"./run-rfYH3Q6m.js";const f={mono:1,stereo:2,"2.1":3,"3.0":3,"3.1":4,"4.0":4,quad:4,"4.1":5,"5.0":5,"5.1":6,"6.0":6,"6.1":7,"7.0":7,"7.1":8};function p(e){let t=/^(\d+):(\d{2}):(\d{2}(?:\.\d+)?)$/.exec(e.trim());if(!t)return;let n=Number(t[1]),r=Number(t[2]),i=Number(t[3]);if([n,r,i].every(Number.isFinite))return(n*3600+r*60+i).toFixed(6)}function m(e){let t=e.trim().toLowerCase();if(Object.hasOwn(f,t))return f[t];let n=/^([0-9.]+|[a-z0-9_+-]+)\(/.exec(t);if(n&&Object.hasOwn(f,n[1]))return f[n[1]];let r=/^(\d+)\s+channels?$/.exec(t);if(r)return Number(r[1])}function h(e){let t=Number(e);return Number.isFinite(t)?Number.isInteger(t)?`${t}/1`:`${Math.round(t*1e3)}/1000`:e}function g(e){let t=Number(e);if(Number.isFinite(t))return String(Math.round(t*1e3))}function _(e){let t=/^([A-Za-z0-9_]+)(.*)$/.exec(e);if(!t)return{remainder:e};let n=t[2],r,i,a=/^\s*\(([^)/]+)\)/.exec(n);a&&!a[1].includes(`/`)&&(r=a[1].trim(),n=n.slice(a[0].length));let o=/^\s*\(([A-Za-z0-9]+)\s*\/\s*0x[0-9a-fA-F]+\)/.exec(n);return o&&(i=o[1],n=n.slice(o[0].length)),{codec_name:t[1],profile:r,codec_tag_string:i,remainder:n}}function v(e,t){let n=/,\s*([A-Za-z0-9_]+)(?:\([^)]*\))?,\s*(\d+)x(\d+)/.exec(e);n&&(t.pix_fmt=n[1],t.width=Number(n[2]),t.height=Number(n[3]));let r=/\[SAR\s+(\S+)\s+DAR\s+(\S+)\]/.exec(e);r&&(t.sample_aspect_ratio=r[1],t.display_aspect_ratio=r[2]);let i=/,\s*(\d+(?:\.\d+)?)\s*kb\/s/.exec(e);i&&(t.bit_rate=g(i[1]));let a=/,\s*(\d+(?:\.\d+)?)\s*fps/.exec(e);a&&(t.r_frame_rate=h(a[1]),t.avg_frame_rate=t.r_frame_rate)}function y(e,t){let n=/,\s*(\d+)\s*Hz/.exec(e);n&&(t.sample_rate=n[1]);let r=/Hz,\s*([^,]+)/.exec(e);if(r){let e=r[1].trim();t.channel_layout=e,t.channels=m(e)}let i=/,\s*(\d+(?:\.\d+)?)\s*kb\/s/.exec(e);i&&(t.bit_rate=g(i[1]))}function b(e){let t=/^\s*Stream #(\d+):(\d+)(?:\[[^\]]*\])?(?:\([^)]*\))?:\s*(Video|Audio|Subtitle|Data|Attachment):\s*(.+)$/i.exec(e);if(!t)return null;let n=t[3].toLowerCase(),r={index:Number(t[2]),codec_type:n},{codec_name:i,profile:a,codec_tag_string:o,remainder:s}=_(t[4]);return i&&(r.codec_name=i),a&&(r.profile=a),o&&(r.codec_tag_string=o),n===`video`?v(s,r):n===`audio`&&y(s,r),r}function x(e,t){let n=/^\s*Duration:\s*([^,]+),\s*start:\s*([^,]+),\s*bitrate:\s*(\d+(?:\.\d+)?)\s*kb\/s/.exec(t);return n?(e.duration=p(n[1]),e.start_time=Number(n[2]).toFixed(6),e.bit_rate=g(n[3]),!0):!1}function S(e,t,n){let r=/^\s{2,}([A-Za-z0-9_]+)\s*:\s*(.*)$/.exec(n);return r&&!/^(Duration|Stream)\b/.test(r[1])?(t[r[1]]=r[2].trim(),`keep`):(Object.keys(t).length>0&&(e.tags=t),`end`)}function C(e,t){let n=e.split(/\r?\n/),r=null,i=[],a=!1,o;for(let e of n){let n=/^Input #(\d+),\s*(.+?),\s*from\s+'([^']*)':\s*$/.exec(e);if(n){a=!0,r={format_name:n[2].trim(),filename:n[3]||t},o=void 0;continue}if(!a||!r)continue;if(/^\s*Metadata:\s*$/.test(e)){o={};continue}if(o){if(S(r,o,e)===`keep`)continue;o=void 0}if(x(r,e))continue;let s=b(e);s&&(r.duration&&s.duration===void 0&&(s.duration=r.duration),i.push(s))}return r?{format:r,streams:i}:null}const w=new Set([`-i`,`-v`,`-loglevel`,`-of`,`-print_format`,`-show_entries`,`-select_streams`]),T=new Set([`-show_format`,`-show_streams`,`-hide_banner`,`-h`,`--help`,`-version`,`--version`]);function E(){return{stdout:`ffprobe - media probe (mediabunny, with a wasm fallback)
2
2
 
3
3
  Usage:
4
4
  ffprobe [options] -i <input>
@@ -41,6 +41,6 @@ Examples:
41
41
  `,stderr:``,exitCode:0}}async function D(e){let t=o(e.env)===`mt`,i=await r(c(e),void 0,t);return i?{stdout:`ffprobe (emulated via @ffmpeg/ffmpeg — not a real ffprobe binary)\ncore: ${a(i)}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`ffprobe: ${n(t)}\n`,exitCode:1}}function O(e,t,n){let r=e[t+1];if(typeof r!=`string`||r.startsWith(`-`))throw Error(`ffprobe: ${n} requires a value`);return r}function k(e){let t=e.indexOf(`=`),n=t<0?e:e.slice(0,t),r=t<0?``:e.slice(t+1);if(n===`json`)return{kind:`json`};if(n===`csv`)return{kind:`csv`,printSection:!/(?:^|:)p=0(?::|$)/.test(r)};if(n==="default")return{kind:`default`,noWrappers:/(?:^|:)(?:nw|noprint_wrappers)=1(?::|$)/.test(r),noKey:/(?:^|:)(?:nk|nokey)=1(?::|$)/.test(r)};throw Error(`ffprobe: unsupported -of '${e}' (supported: json, csv[=p=0], default[=nw=1:nk=1])`)}function A(e){let t={};for(let n of e.split(`:`)){if(!n)continue;let e=n.indexOf(`=`);if(e<0)throw Error(`ffprobe: -show_entries section '${n}' needs keys (e.g. format=duration)`);let r=n.slice(0,e),i=n.slice(e+1).split(`,`).map(e=>e.trim()).filter(Boolean);if(r===`format`)t.format=new Set(i);else if(r===`stream`)t.stream=new Set(i);else throw Error(`ffprobe: unsupported -show_entries section '${r}' (supported: format, stream)`)}return t}function j(e,t,n){let r=t[n];if(r===`-i`)return e.inputPath=O(t,n,`-i`),n+1;if(r===`-show_format`)return e.showFormat=!0,e.structured=!0,n;if(r===`-show_streams`)return e.showStreams=!0,e.structured=!0,n;if(r===`-show_entries`)return e.showEntries=A(O(t,n,`-show_entries`)),e.structured=!0,n+1;if(r===`-select_streams`)return e.selectStreams=O(t,n,`-select_streams`),n+1;if(r===`-of`||r===`-print_format`)return e.outputFormat=k(O(t,n,r)),e.structured=!0,n+1;if(r===`-v`||r===`-loglevel`){let i=O(t,n,r).toLowerCase();return e.quiet=[`quiet`,`panic`,`fatal`,`error`,`warning`].includes(i),n+1}if(r===`-hide_banner`)return n;if(T.has(r)||w.has(r))throw Error(`ffprobe: internal parse gap for '${r}'`);if(r.startsWith(`-`))throw Error(`ffprobe: unsupported option '${r}' (this is an emulated probe — see --help)`);if(e.inputPath!==null)throw Error(`ffprobe: unexpected argument '${r}'`);return e.inputPath=r,n}function M(e){let t={inputPath:null,showFormat:!1,showStreams:!1,showEntries:null,selectStreams:null,outputFormat:{kind:`default`,noWrappers:!1,noKey:!1},quiet:!1,structured:!1};for(let n=0;n<e.length;n++)n=j(t,e,n);return!t.showFormat&&!t.showStreams&&!t.showEntries&&(t.showFormat=!0,t.showStreams=!0),t}function N(e,t){if(!t)return e;let n=/^([va])(?::(\d+))?$/i.exec(t.trim());if(!n)throw Error(`ffprobe: unsupported -select_streams '${t}' (supported: v, a, v:N, a:N)`);let r=n[1].toLowerCase()===`v`?`video`:`audio`,i=e.filter(e=>e.codec_type===r);if(n[2]===void 0)return i;let a=i[Number(n[2])];return a?[a]:[]}const P=[`filename`,`format_name`,`duration`,`start_time`,`bit_rate`],F=[`index`,`codec_type`,`codec_name`,`codec_tag_string`,`profile`,`width`,`height`,`pix_fmt`,`sample_aspect_ratio`,`display_aspect_ratio`,`r_frame_rate`,`avg_frame_rate`,`sample_rate`,`channels`,`channel_layout`,`bit_rate`,`duration`];function I(e,t){let n={};for(let r of P){if(t&&!t.has(r))continue;let i=e[r];i!==void 0&&(n[r]=i)}return n}function L(e,t){let n={};for(let r of F){if(t&&!t.has(r))continue;let i=e[r];i!==void 0&&(n[r]=i)}return n}function R(e,t){let n=N(e.streams,t.selectStreams),r={};return t.showEntries?(t.showEntries.format&&(r.format=I(e.format,t.showEntries.format)),t.showEntries.stream&&(r.streams=n.map(e=>L(e,t.showEntries?.stream))),r):(t.showFormat&&(r.format=I(e.format)),t.showStreams&&(r.streams=n.map(e=>L(e))),r)}function z(e,t){let n=[],r=(e,r)=>{t.noWrappers||n.push(`[${e}]`);for(let[e,i]of Object.entries(r))i!==void 0&&n.push(t.noKey?String(i):`${e}=${i}`);t.noWrappers||n.push(`[/${e}]`)};if(e.format&&r(`FORMAT`,e.format),e.streams)for(let t of e.streams)r(`STREAM`,t);return`${n.join(`
42
42
  `)}\n`}function B(e){return/[",\n\r]/.test(e)?`"${e.replace(/"/g,`""`)}"`:e}function V(e,t){let n=[],r=(e,r)=>{let i=Object.values(r).filter(e=>e!==void 0).map(e=>B(String(e)));i.length!==0&&(t.printSection&&i.unshift(e),n.push(i.join(`,`)))};if(e.format&&r(`format`,e.format),e.streams)for(let t of e.streams)r(`stream`,t);return`${n.join(`
43
43
  `)}\n`}function H(e){let t=e.codec_name??`?`;if(e.codec_type===`video`){let n=e.width&&e.height?`, ${e.width}x${e.height}`:``,r=e.r_frame_rate?`, ${e.r_frame_rate} fps`:``;return` Stream #0:${e.index}: Video: ${t}${n}${r}`}if(e.codec_type===`audio`){let n=e.sample_rate?`, ${e.sample_rate} Hz`:``,r=e.channel_layout?`, ${e.channel_layout}`:``,i=e.channels===void 0?``:` (${e.channels} ch)`;return` Stream #0:${e.index}: Audio: ${t}${n}${r}${i}`}return` Stream #0:${e.index}: ${e.codec_type}: ${t}`}function U(e){let t=e.format,n=[`Input #0, ${t.format_name??`unknown`}, from '${t.filename??``}':`];if(t.duration!==void 0||t.bit_rate!==void 0){let e=t.duration??`N/A`,r=t.bit_rate?`${Math.round(Number(t.bit_rate)/1e3)} kb/s`:`N/A`;n.push(` Duration: ${e} s, bitrate: ${r}`)}for(let t of e.streams)n.push(H(t));return`${n.join(`
44
- `)}\n`}function W(e,t){if(!t.structured)return U(e);let n=R(e,t);return t.outputFormat.kind===`json`?`${JSON.stringify(n,null,4)}\n`:t.outputFormat.kind===`csv`?V(n,t.outputFormat):z(n,t.outputFormat)}let G=Promise.resolve();function K(e){let t=G.then(e,e);return G=t.then(()=>void 0,()=>void 0),t}let q=0;function J(e){let t=e.split(`/`).pop()||`input.bin`,n=/\.([A-Za-z0-9]{1,8})$/.exec(t),r=n?`.${n[1].toLowerCase()}`:`.bin`;return q=q+1>>>0,`__probe_${q}_${Date.now()}${r}`}async function Y(t){let n=``;try{return{ffmpeg:await e({onProgress:e=>{n+=`${e}\n`},ipk:c(t),preferMt:o(t.env)===`mt`}),loadLog:n}}catch(e){return{stdout:``,stderr:`ffprobe: failed to load wasm: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function X(e,n,r){try{await e.exec([`-hide_banner`,`-i`,n])}catch(n){if(i(n))return t(e),{stdout:``,stderr:`ffprobe: wasm core faulted (${n instanceof Error?n.message:String(n)}); recycled shared instance\n`,exitCode:1};r.text+=`${n instanceof Error?n.message:String(n)}\n`}return null}function Z(e,t,n){e.format.filename=t.inputPath??e.format.filename;try{return{stdout:W(e,t),stderr:t.quiet?``:n,exitCode:0}}catch(e){return{stdout:``,stderr:`ffprobe: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function Q(e,t,n){let{ffmpegEngineFromEnv:r}=await import(`./engine-CzMNXd8U.js`).then(e=>e.n),i=r(n.env);if(i===`wasm`)return null;let{probeViaMediabunny:a}=await import(`./bunny-probe-C4NWuNUc.js`),o=await a(t,e.inputPath??``);return o?Z(o,e,``):i===`mediabunny`?{stdout:``,stderr:`ffprobe: FFMPEG_ENGINE=mediabunny: input is not a container mediabunny reads
44
+ `)}\n`}function W(e,t){if(!t.structured)return U(e);let n=R(e,t);return t.outputFormat.kind===`json`?`${JSON.stringify(n,null,4)}\n`:t.outputFormat.kind===`csv`?V(n,t.outputFormat):z(n,t.outputFormat)}let G=Promise.resolve();function K(e){let t=G.then(e,e);return G=t.then(()=>void 0,()=>void 0),t}let q=0;function J(e){let t=e.split(`/`).pop()||`input.bin`,n=/\.([A-Za-z0-9]{1,8})$/.exec(t),r=n?`.${n[1].toLowerCase()}`:`.bin`;return q=q+1>>>0,`__probe_${q}_${Date.now()}${r}`}async function Y(t){let n=``;try{return{ffmpeg:await e({onProgress:e=>{n+=`${e}\n`},ipk:c(t),preferMt:o(t.env)===`mt`}),loadLog:n}}catch(e){return{stdout:``,stderr:`ffprobe: failed to load wasm: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function X(e,n,r){try{await e.exec([`-hide_banner`,`-i`,n])}catch(n){if(i(n))return t(e),{stdout:``,stderr:`ffprobe: wasm core faulted (${n instanceof Error?n.message:String(n)}); recycled shared instance\n`,exitCode:1};r.text+=`${n instanceof Error?n.message:String(n)}\n`}return null}function Z(e,t,n){e.format.filename=t.inputPath??e.format.filename;try{return{stdout:W(e,t),stderr:t.quiet?``:n,exitCode:0}}catch(e){return{stdout:``,stderr:`ffprobe: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function Q(e,t,n){let{ffmpegEngineFromEnv:r}=await import(`./engine-CzMNXd8U.js`).then(e=>e.n),i=r(n.env);if(i===`wasm`)return null;let{probeViaMediabunny:a}=await import(`./bunny-probe-AeE-5oRk.js`),o=await a(t,e.inputPath??``);return o?Z(o,e,``):i===`mediabunny`?{stdout:``,stderr:`ffprobe: FFMPEG_ENGINE=mediabunny: input is not a container mediabunny reads
45
45
  `,exitCode:1}:null}async function $(e,t){if(!e.inputPath)return{stdout:``,stderr:`ffprobe: at least one input file must be specified
46
46
  `,exitCode:1};let n=t.fs.resolvePath(t.cwd,e.inputPath);if(!await t.fs.exists(n))return{stdout:``,stderr:`ffprobe: input file not found: ${e.inputPath}\n`,exitCode:1};let r=await s(t.fs,n);return await Q(e,r,t)||K(()=>te(e,r,t))}async function te(e,n,r){let a=u(),o=J(e.inputPath??``),s=ee(a,o),c=await Y(r);if(`exitCode`in c)return c;let{ffmpeg:f,loadLog:p}=c,m={text:``},h=e=>{m.text+=`${e.message}\n`};f.on(`log`,h);let g=!1;try{await d(f,a,[{name:o,data:n}]);let t=await X(f,s,m);if(t)return g=!0,t;let r=C(m.text,e.inputPath??``);return r?Z(r,e,p):{stdout:``,stderr:`ffprobe: could not parse media info from ffmpeg log\n${e.quiet?``:m.text||p}`,exitCode:1}}catch(e){return i(e)&&(g=!0,t(f)),{stdout:``,stderr:`ffprobe: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}finally{try{f.off(`log`,h)}catch{}if(!g)try{await l(f,a)}catch{}}}async function ne(e,t){if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return E();if(e.includes(`-version`)||e.includes(`--version`))return D(t);let n;try{n=M(e)}catch(e){return{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return $(n,t)}export{ne as runFfprobe};
@@ -1,4 +1,4 @@
1
- import{t as e}from"./record-Ban9cWMI.js";import{t,u as n}from"./descriptor-xRf4P0gd.js";import{t as r}from"./subcommand-flags-BZi7j78Q.js";import{t as i}from"./subcommand-help-CgO7wRS5.js";import{a,r as o,t as s}from"./memory-budget-CFfevxz_.js";import{s as c}from"./kernel-worker-C8b5lZTP.js";const l=`usage: memory <command> [options]
1
+ import{t as e}from"./record-Ban9cWMI.js";import{t,u as n}from"./descriptor-xRf4P0gd.js";import{t as r}from"./subcommand-flags-BZi7j78Q.js";import{t as i}from"./subcommand-help-CgO7wRS5.js";import{a,r as o,t as s}from"./memory-budget-CFfevxz_.js";import{s as c}from"./kernel-worker-MybuXyBd.js";const l=`usage: memory <command> [options]
2
2
 
3
3
  Durable cone memory: one file per cone, rewritten by the memory-curator
4
4
  scoop after a chat freezes. This command inspects that system and pokes it.
@@ -88,4 +88,4 @@ Notes:
88
88
  `)),extraFiles:l}}function Te(e){return e.format===`lavfi`}async function Ee(e,t,n,r=()=>{}){let i=[];for(let[a,o]of e.inputs.entries()){if(Te(o)){i.push({ffmpegName:o.path,data:null,virtual:!0});continue}let e=n.fs.resolvePath(n.cwd,o.path);if(!await n.fs.exists(e))return{error:{stdout:``,stderr:`ffmpeg: input file not found: ${o.path}\n`,exitCode:1}};let s=x(t,ce(o,a));if(ve(o)){let c=await we(e,await n.fs.readFileBuffer(e),a,Ce(o),t,n,r);if(`error`in c){let{kind:e,file:t}=c.error,n=e===`unsafe`?`unsafe file name: ${t} (pass -safe 0 to allow it)`:`file not found: ${t}`;return{error:{stdout:``,stderr:`ffmpeg: concat list ${o.path}: ${n}\n`,exitCode:1}}}i.push({ffmpegName:s,data:_(c.listBytes),virtual:!1,extraFiles:c.extraFiles});continue}i.push({ffmpegName:s,data:await m(n.fs,e,r),virtual:!1})}return{inputs:i}}const De={threads:8,filterThreads:2};function Z(e){return e.some(e=>e===`-threads`||e.startsWith(`-threads:`))}function Oe(e,t=De,n=typeof navigator<`u`?navigator.hardwareConcurrency:void 0){let r=String(Math.max(1,Math.min(t.threads,n??t.threads))),i=[...e.inputs.flatMap(e=>e.raw),...e.outputOpts],a=[];i.includes(`-filter_threads`)||a.push(`-filter_threads`,String(t.filterThreads)),i.includes(`-filter_complex_threads`)||a.push(`-filter_complex_threads`,String(t.filterThreads));let o=e.inputs.map((e,t)=>{let n=[...t===0?a:[],...Z(e.raw)?[]:[`-threads`,r]];return n.length>0?{...e,raw:[...n,...e.raw]}:e}),s=Z(e.outputOpts)?e.outputOpts:[`-threads`,r,...e.outputOpts];return{...e,inputs:o,outputOpts:s}}function Q(e){return{stdout:``,stderr:`${e}ffmpeg: the multi-threaded core deadlocks with more than one input (ffmpeg starts a demux thread per input; emscripten proxies their pthread_create to a main thread blocked in exec; see #2810). Run without FFMPEG_CORE=mt so the single-threaded @ffmpeg/core handles this job.
89
89
  `,exitCode:1}}function ke(e,t,n){let r=[];for(let[n,i]of e.inputs.entries()){let e=t[n],a=i.raw;for(let t=0;t<a.length;t++){if(a[t]===`-i`){r.push(`-i`,e.virtual?a[t+1]:e.ffmpegName),t+=1;continue}r.push(a[t])}}return r.push(...e.outputOpts),r.push(n),r}function Ae(e){let t=[];for(let n of e)if(n.data!==null){for(let e of n.extraFiles??[])t.push({name:S(e.ffmpegName),data:e.data});t.push({name:S(n.ffmpegName),data:n.data})}return t}async function je(e){let t=`__health_probe`;try{await e.writeFile(t,new Uint8Array([0])),await e.deleteFile(t)}catch(e){if(s(e))throw e}}async function Me(e,t,n){await T(e,t),await E(e,n)}async function Ne(e,t,n,r){let i;try{i=await e.readFile(t)}catch(e){if(s(e))throw e;return{error:{stdout:``,stderr:r()||`ffmpeg: produced no output file for ${n}\n`,exitCode:1}}}let a=i instanceof Uint8Array?i:new TextEncoder().encode(typeof i==`string`?i:``);return a.byteLength===0?{error:{stdout:``,stderr:r()||`ffmpeg: produced an empty output file for ${n}\n`,exitCode:1}}:{bytes:a}}function Pe(e,t,n){return n?`__null_sink${e.id}`:C(e,t)}function $(e,t){return{stdout:``,stderr:`${e}ffmpeg: ${t instanceof Error?t.message:String(t)}\nffmpeg: the wasm core faulted and was recycled; retry the command (a large input may need to be split into smaller passes)
90
90
  `,exitCode:1}}async function Fe(e){let{ffmpeg:t,parsed:n,resolvedInputs:r,stage:i,outputName:a,outputPath:s,analysisSink:c,readStderr:u}=e,d=l()===o;if(d&&n.inputs.length>1)return{early:Q(u()),outputBytes:null};await w(t,i,Ae(r));let f=c?{...n,outputOpts:U(n.outputOpts)}:n,p=ke(d?Oe(f):f,r,a),m=await t.exec(p);if(m!==0)return{early:{stdout:``,stderr:u()||`ffmpeg: exited with code ${m}\n`,exitCode:m||1},outputBytes:null};if(c)return await je(t),{early:{stdout:``,stderr:u(),exitCode:0},outputBytes:null};let h=await Ne(t,a,s,u);return`error`in h?{early:h.error,outputBytes:null}:{early:null,outputBytes:h.bytes}}async function Ie(e){let{ffmpeg:t,logHandler:n,stage:i,outputName:a,readStderr:o,faulted:c}=e;try{t.off(`log`,n)}catch{}if(c)return null;try{return await Me(t,i,a),null}catch(e){return s(e)?(r(t),$(o(),e)):null}}async function Le(e,t,n,r,i){let{ffmpegEngineFromEnv:a}=await import(`./engine-CzMNXd8U.js`).then(e=>e.n),o=a(i.env),s=t.length===1?t[0].data:null;if(o===`wasm`||r||s===null)return o===`mediabunny`?{result:{stdout:``,stderr:`ffmpeg: FFMPEG_ENGINE=mediabunny cannot run this: analysis sinks, lavfi and concat inputs are wasm-only
91
- `,exitCode:1}}:{fallback:!0,note:null};let{runFfmpegFastPath:c}=await import(`./fast-path-R8Tr2lTS.js`);return c({parsed:e,input:s,outputPath:i.fs.resolvePath(i.cwd,n),fs:i.fs,engine:o})}async function Re(e,t){let n=b(),r=[],i=await Ee(e,n,t,e=>r.push(e));if(`error`in i)return i.error;let a=i.inputs,o=e.outputPath,s=H(e),c=await Le(e,a,o,s,t);if(`result`in c)return c.result;let l=await ze({parsed:e,ctx:t,stage:n,resolvedInputs:a,outputPath:o,analysisSink:s}),u=[...c.note?[`ffmpeg: ${c.note}`]:[],...r].map(e=>`${e}\n`).join(``);return u?{...l,stderr:`${u}${l.stderr}`}:l}async function ze(e){let{parsed:t,ctx:i,stage:a,resolvedInputs:o,outputPath:s,analysisSink:c}=e,l=Pe(a,s,c),u=``,f;try{f=await n({onProgress:e=>{u+=`${e}\n`},ipk:W(i),preferMt:d(i.env)===`mt`})}catch(e){return{stdout:``,stderr:`${u}ffmpeg: failed to load wasm: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let p=e=>{u+=`${e.message}\n`};f.on(`log`,p);let m=!1,h=null,g=null;try{let e=await Fe({ffmpeg:f,parsed:t,resolvedInputs:o,stage:a,outputName:l,outputPath:s,analysisSink:c,readStderr:()=>u});h=e.early,g=e.outputBytes}catch(e){m=!0,r(f),h=$(u,e)}finally{let e=await Ie({ffmpeg:f,logHandler:p,stage:a,outputName:l,readStderr:()=>u,faulted:m});e&&(h=e)}if(h)return h;try{await i.fs.writeFile(i.fs.resolvePath(i.cwd,s),g??new Uint8Array)}catch(e){return{stdout:``,stderr:`${u}ffmpeg: cannot write ${s}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return{stdout:``,stderr:u,exitCode:0}}export{m as a,W as createIpkContextFromCtx,T as i,b as n,x as r,le as runFfmpeg,w as t};
91
+ `,exitCode:1}}:{fallback:!0,note:null};let{runFfmpegFastPath:c}=await import(`./fast-path-Bwq0oDa5.js`);return c({parsed:e,input:s,outputPath:i.fs.resolvePath(i.cwd,n),fs:i.fs,engine:o})}async function Re(e,t){let n=b(),r=[],i=await Ee(e,n,t,e=>r.push(e));if(`error`in i)return i.error;let a=i.inputs,o=e.outputPath,s=H(e),c=await Le(e,a,o,s,t);if(`result`in c)return c.result;let l=await ze({parsed:e,ctx:t,stage:n,resolvedInputs:a,outputPath:o,analysisSink:s}),u=[...c.note?[`ffmpeg: ${c.note}`]:[],...r].map(e=>`${e}\n`).join(``);return u?{...l,stderr:`${u}${l.stderr}`}:l}async function ze(e){let{parsed:t,ctx:i,stage:a,resolvedInputs:o,outputPath:s,analysisSink:c}=e,l=Pe(a,s,c),u=``,f;try{f=await n({onProgress:e=>{u+=`${e}\n`},ipk:W(i),preferMt:d(i.env)===`mt`})}catch(e){return{stdout:``,stderr:`${u}ffmpeg: failed to load wasm: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let p=e=>{u+=`${e.message}\n`};f.on(`log`,p);let m=!1,h=null,g=null;try{let e=await Fe({ffmpeg:f,parsed:t,resolvedInputs:o,stage:a,outputName:l,outputPath:s,analysisSink:c,readStderr:()=>u});h=e.early,g=e.outputBytes}catch(e){m=!0,r(f),h=$(u,e)}finally{let e=await Ie({ffmpeg:f,logHandler:p,stage:a,outputName:l,readStderr:()=>u,faulted:m});e&&(h=e)}if(h)return h;try{await i.fs.writeFile(i.fs.resolvePath(i.cwd,s),g??new Uint8Array)}catch(e){return{stdout:``,stderr:`${u}ffmpeg: cannot write ${s}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return{stdout:``,stderr:u,exitCode:0}}export{m as a,W as createIpkContextFromCtx,T as i,b as n,x as r,le as runFfmpeg,w as t};
@@ -1,4 +1,4 @@
1
- import{bindMcpRunner as e,currentPublication as t,discoverCli as n,ensureMcpServeInstalled as r,i,n as a,r as o,setPublication as s,t as c}from"./serve-runtime-Df_C7Bwg.js";async function l(a,l){let d=b(l.fs),f=await v(l);e(f),r();let p=l.cwd||`/`;return u(x(a,p),{discover:(e,t)=>n(C(p,e),t,f),load:async()=>t()??c(d),save:e=>s(d,e),publish:e=>o(e),setGeneration:e=>o(e),stopRemote:()=>i()})}async function u(e,t){let n=a(e);if(n.error)return T(n.error);if(n.help)return w(d());let r=await t.load();return n.list?w(_(r)):n.stop===null?n.targets.length===0?T(`mcp --serve: missing path`):f(n.targets,r,t):h(n.stop,r,t)}function d(){return`usage: mcp --serve <path> [--serve <path>…]
1
+ import{bindMcpRunner as e,currentPublication as t,discoverCli as n,ensureMcpServeInstalled as r,i,n as a,r as o,setPublication as s,t as c}from"./serve-runtime-BWUwkiqv.js";async function l(a,l){let d=b(l.fs),f=await v(l);e(f),r();let p=l.cwd||`/`;return u(x(a,p),{discover:(e,t)=>n(C(p,e),t,f),load:async()=>t()??c(d),save:e=>s(d,e),publish:e=>o(e),setGeneration:e=>o(e),stopRemote:()=>i()})}async function u(e,t){let n=a(e);if(n.error)return T(n.error);if(n.help)return w(d());let r=await t.load();return n.list?w(_(r)):n.stop===null?n.targets.length===0?T(`mcp --serve: missing path`):f(n.targets,r,t):h(n.stop,r,t)}function d(){return`usage: mcp --serve <path> [--serve <path>…]
2
2
  mcp --serve <name>=<path>
3
3
  mcp --serve --list
4
4
  mcp --serve --stop [<name>]
@@ -14,5 +14,5 @@ CLI to the same URL. Tool names are prefixed with the CLI name.
14
14
  `}async function f(e,t,n){let r=t??{url:``,token:``,grantGeneration:0,clis:[]},i=[],a=new Set(r.clis.map(e=>e.name));for(let t of e){if(r.clis.some(e=>e.path===t.path))continue;let e=await m(t,n);if(`error`in e)return T(e.error);if(a.has(e.cli.name))return T(`mcp --serve: ${e.cli.name} is already published; pass name=path to rename one`);a.add(e.cli.name),i.push(e.cli)}if(i.length===0)return t?.url?w(`${t.url}\n`):T(`mcp --serve: missing path`);let o=r.clis.concat(i);try{return await p(t,o,n)}catch(e){return T(e instanceof Error?e.message:`mcp --serve: publish failed`)}}async function p(e,t,n){if(!e){let e=await n.publish(1),r={url:e.url,token:e.token,grantGeneration:1,clis:t};return await n.save(r),w(`${r.url}\n`)}let r=e.grantGeneration+1,i=await n.setGeneration(r),a={...e,url:i.url||e.url,token:i.token||e.token,grantGeneration:r,clis:t};return await n.save(a),w(`${a.url}\n`)}async function m(e,t){try{return{cli:await t.discover(e.path,e.name)}}catch(e){return{error:e instanceof Error?e.message:`mcp --serve: discovery failed`}}}async function h(e,t,n){if(!t)return T(`mcp --serve: nothing is published`);if(typeof e!=`string`)return await g(n);let r=t.clis.filter(t=>t.name!==e);return r.length===t.clis.length?T(`mcp --serve: no CLI named ${e}`):r.length===0?await g(n):(await n.save({...t,clis:r}),w(`${t.url}\n`))}async function g(e){try{await e.stopRemote()}catch(e){return T(e instanceof Error?e.message:`mcp --serve: stop failed`)}return await e.save(null),w(`stopped
15
15
  `)}function _(e){return e?`${[e.url,...e.clis.map(e=>`${e.name}\t${e.path}`)].join(`
16
16
  `)}\n`:`mcp --serve: nothing is published
17
- `}async function v(e){let{executeJshFile:t}=await import(`./jsh-executor-Dl-C6Zsf.js`).then(e=>e.r),{textAsStdin:n}=await import(`./just-bash-compat-BRjWDzIj.js`).then(e=>e.r);return(r,i,a)=>t(r,i,{...e,stdin:n(a??``)}).then(e=>y(e))}function y(e){return{stdout:e.stdout,stderr:e.stderr,exitCode:e.exitCode}}function b(e){return{readFile:t=>e.readFile(t),writeFile:(t,n)=>e.writeFile(t,n),exists:t=>e.exists(t),mkdir:async t=>{await e.exists(t)||await e.mkdir(t)}}}function x(e,t){let n=[];for(let r=0;r<e.length;r++){let i=e[r]??``;if(n.push(i),i!==`--serve`)continue;let a=e[r+1];!a||a.startsWith(`--`)||(n.push(S(a,t)),r++)}return n}function S(e,t){let n=e.indexOf(`=`);return n>0&&!e.slice(0,n).includes(`/`)?`${e.slice(0,n)}=${C(t,e.slice(n+1))}`:C(t,e)}function C(e,t){return t.startsWith(`/`)?t:`${e.endsWith(`/`)?e.slice(0,-1):e}/${t}`}function w(e){return{stdout:e,stderr:``,exitCode:0}}function T(e){return{stdout:``,stderr:e.endsWith(`
17
+ `}async function v(e){let{executeJshFile:t}=await import(`./jsh-executor-B_ddQzto.js`).then(e=>e.r),{textAsStdin:n}=await import(`./just-bash-compat-BRjWDzIj.js`).then(e=>e.r);return(r,i,a)=>t(r,i,{...e,stdin:n(a??``)}).then(e=>y(e))}function y(e){return{stdout:e.stdout,stderr:e.stderr,exitCode:e.exitCode}}function b(e){return{readFile:t=>e.readFile(t),writeFile:(t,n)=>e.writeFile(t,n),exists:t=>e.exists(t),mkdir:async t=>{await e.exists(t)||await e.mkdir(t)}}}function x(e,t){let n=[];for(let r=0;r<e.length;r++){let i=e[r]??``;if(n.push(i),i!==`--serve`)continue;let a=e[r+1];!a||a.startsWith(`--`)||(n.push(S(a,t)),r++)}return n}function S(e,t){let n=e.indexOf(`=`);return n>0&&!e.slice(0,n).includes(`/`)?`${e.slice(0,n)}=${C(t,e.slice(n+1))}`:C(t,e)}function C(e,t){return t.startsWith(`/`)?t:`${e.endsWith(`/`)?e.slice(0,-1):e}/${t}`}function w(e){return{stdout:e,stderr:``,exitCode:0}}function T(e){return{stdout:``,stderr:e.endsWith(`
18
18
  `)?e:`${e}\n`,exitCode:1}}export{l as runMcpServeCommand};
@@ -1,4 +1,4 @@
1
- import{t as e}from"./logger-LESFN7Hj.js";import{g as t}from"./kernel-worker-C8b5lZTP.js";let n=e=>new BroadcastChannel(e),r=null,i=null,a=null;function o(e){return e?`slicc-mcp-serve:${e}`:`slicc-mcp-serve`}function s(e,t){i=e,a=t,u()}function c(e,t=15e3){return d(u(),{kind:`publish`,id:crypto.randomUUID(),grantGeneration:e},t)}function l(e=15e3){let t=crypto.randomUUID();return d(u(),{kind:`stop`,id:t},e).then(()=>void 0)}function u(){return r||(r=n(o(t())),r.addEventListener(`message`,e=>{ee(e.data)}),r.postMessage({kind:`kernel-ready`}),r)}async function ee(e){if(!(!e||typeof e!=`object`)){if(e.kind===`page-ready`){a?.();return}if(!(e.kind!==`call`||!i))try{let t=await i(e.op,e.body);r?.postMessage({kind:`call-result`,id:e.id,...t})}catch(t){r?.postMessage({kind:`call-result`,id:e.id,status:500,contentType:`application/json; charset=utf-8`,body:JSON.stringify({error:t instanceof Error?t.message:`mcp call failed`})})}}}function d(e,t,n){let r=t.id,i=t.kind===`publish`?`publish-result`:`stop-result`;return new Promise((a,o)=>{let s=setTimeout(()=>{e.removeEventListener(`message`,c),o(Error(`mcp ${t.kind} timed out`))},n),c=n=>{let l=n.data;if(!(!l||l.kind!==i||l.id!==r)){if(clearTimeout(s),e.removeEventListener(`message`,c),!l.ok){o(Error(l.error||`mcp ${t.kind} failed`));return}a({url:l.kind===`publish-result`?l.url??``:``,token:l.kind===`publish-result`?l.token??``:``})}};e.addEventListener(`message`,c),e.postMessage(t)})}const f=/^[A-Za-z][\w-]*$/;function te(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`_`).replace(/^_+|_+$/g,``)||`cli`}function ne(e,t,n){return te(n||v(e)||(t.split(`/`).pop()??t).replace(/\.jsh$/i,``))}function p(e){let t=[],n=!1,r=!1,i=null;for(let a=0;a<e.length;a++){let o=e[a]??``;if(o===`--help`||o===`-h`){n=!0;continue}if(o===`--list`){r=!0;continue}if(o===`--stop`){let t=e[a+1];t&&!t.startsWith(`--`)?(i=t,a++):i=!0;continue}if(o===`--serve`){let n=e[a+1];n&&!n.startsWith(`--`)&&(t.push(T(n)),a++);continue}return{help:n,list:r,stop:i,targets:t,error:`mcp --serve: unexpected argument ${o}`}}return{help:n,list:r,stop:i,targets:t}}function m(e){let t=ue(e),n=v(e),r=ye(t.commands,pe(e,n));return{...n?{program:n}:{},commands:be(r,t.scoped),globalFlags:t.globalFlags}}function re(e){return e.path.length===1&&e.positionals.length===0&&e.flags.length===0}function ie(e,t,n,r){let i=h(n.commands,n.globalFlags);if(i.length===0)return null;let a=i.map(e=>e.path[0]??``);if(a.length===r.size&&a.every(e=>r.has(e)))return null;let o=i.map(e=>({...e,path:Se(t,e)}));return e.filter(e=>e.path[0]!==t).concat(o)}function h(e,t){return t.length===0?e:e.map(e=>({...e,flags:S(e.flags,t)}))}function ae(e){let t;try{t=JSON.parse(e)}catch{return null}if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=Object.getOwnPropertyDescriptor(t,`commands`)?.value;if(!Array.isArray(n))return null;let r=[];for(let e of n){let t=Ce(e);t&&r.push(t)}return r.length===0?null:{commands:r,globalFlags:[]}}function g(e,t){let n=[{name:`${e}_help`,description:`Show ${e} help.`,inputSchema:E({}),cli:e,kind:`help`,commandPath:[]},{name:`${e}_invoke`,description:`Run ${e} with an argv array (one element per argument) and optional stdin. A non-zero exit is a tool error.`,inputSchema:D(),cli:e,kind:`invoke`,commandPath:[]}];for(let r of t){let t=r.path.join(`_`);n.push({name:`${e}_${t}`,description:r.description||`Run ${e} ${r.path.join(` `)}`,inputSchema:O(r),cli:e,kind:`command`,commandPath:r.path})}return n}function oe(e){if(e==null)return{fields:[]};if(typeof e!=`object`||Array.isArray(e))return{fields:[],error:`arguments must be an object`};let t=[],n,r,i;for(let a of Object.keys(e)){let o=Object.getOwnPropertyDescriptor(e,a)?.value,s=De(a,o);if(s.error)return{fields:t,error:s.error};s.stdin===void 0?s.passthrough?r=s.passthrough:s.argv?i=s.argv:s.field&&t.push(s.field):n=s.stdin}return{fields:t,...n===void 0?{}:{stdin:n},...r?{passthrough:r}:{},...i?{argv:i}:{}}}function se(e,t){if(t.error)return{error:t.error};let n=[...e.path];for(let r of e.positionals){let e=t.fields.find(e=>e.name===r.name);if(!e){if(r.required)return{error:`missing ${r.name}`};continue}if(typeof e.value!=`string`&&typeof e.value!=`number`)return{error:`${r.name} must be a string`};n.push(String(e.value))}let r=ce(e.flags,t.fields);return`error`in r?r:(n.push(...r.argv),t.passthrough&&n.push(...t.passthrough),{argv:n,...t.stdin===void 0?{}:{stdin:t.stdin}})}function ce(e,t){let n=[];for(let r of e){let e=t.find(e=>e.name===r.name);if(!e||e.value===!1)continue;let i=le(r,e.value);if(`error`in i)return i;n.push(...i.argv)}return{argv:n}}function le(e,t){if(e.type===`boolean`)return t===!0?{argv:[`--${e.name}`]}:{argv:[]};if(e.type===`string[]`){if(!Array.isArray(t))return{error:`${e.name} must be an array of strings`};let n=[];for(let r of t)n.push(`--${e.name}`,r);return{argv:n}}return typeof t!=`string`&&typeof t!=`number`?{error:`${e.name} must be a string`}:{argv:[`--${e.name}`,String(t)]}}function ue(e){let t=`none`,n=[],r=[],i=[];for(let a of e.split(`
1
+ import{t as e}from"./logger-LESFN7Hj.js";import{g as t}from"./kernel-worker-MybuXyBd.js";let n=e=>new BroadcastChannel(e),r=null,i=null,a=null;function o(e){return e?`slicc-mcp-serve:${e}`:`slicc-mcp-serve`}function s(e,t){i=e,a=t,u()}function c(e,t=15e3){return d(u(),{kind:`publish`,id:crypto.randomUUID(),grantGeneration:e},t)}function l(e=15e3){let t=crypto.randomUUID();return d(u(),{kind:`stop`,id:t},e).then(()=>void 0)}function u(){return r||(r=n(o(t())),r.addEventListener(`message`,e=>{ee(e.data)}),r.postMessage({kind:`kernel-ready`}),r)}async function ee(e){if(!(!e||typeof e!=`object`)){if(e.kind===`page-ready`){a?.();return}if(!(e.kind!==`call`||!i))try{let t=await i(e.op,e.body);r?.postMessage({kind:`call-result`,id:e.id,...t})}catch(t){r?.postMessage({kind:`call-result`,id:e.id,status:500,contentType:`application/json; charset=utf-8`,body:JSON.stringify({error:t instanceof Error?t.message:`mcp call failed`})})}}}function d(e,t,n){let r=t.id,i=t.kind===`publish`?`publish-result`:`stop-result`;return new Promise((a,o)=>{let s=setTimeout(()=>{e.removeEventListener(`message`,c),o(Error(`mcp ${t.kind} timed out`))},n),c=n=>{let l=n.data;if(!(!l||l.kind!==i||l.id!==r)){if(clearTimeout(s),e.removeEventListener(`message`,c),!l.ok){o(Error(l.error||`mcp ${t.kind} failed`));return}a({url:l.kind===`publish-result`?l.url??``:``,token:l.kind===`publish-result`?l.token??``:``})}};e.addEventListener(`message`,c),e.postMessage(t)})}const f=/^[A-Za-z][\w-]*$/;function te(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`_`).replace(/^_+|_+$/g,``)||`cli`}function ne(e,t,n){return te(n||v(e)||(t.split(`/`).pop()??t).replace(/\.jsh$/i,``))}function p(e){let t=[],n=!1,r=!1,i=null;for(let a=0;a<e.length;a++){let o=e[a]??``;if(o===`--help`||o===`-h`){n=!0;continue}if(o===`--list`){r=!0;continue}if(o===`--stop`){let t=e[a+1];t&&!t.startsWith(`--`)?(i=t,a++):i=!0;continue}if(o===`--serve`){let n=e[a+1];n&&!n.startsWith(`--`)&&(t.push(T(n)),a++);continue}return{help:n,list:r,stop:i,targets:t,error:`mcp --serve: unexpected argument ${o}`}}return{help:n,list:r,stop:i,targets:t}}function m(e){let t=ue(e),n=v(e),r=ye(t.commands,pe(e,n));return{...n?{program:n}:{},commands:be(r,t.scoped),globalFlags:t.globalFlags}}function re(e){return e.path.length===1&&e.positionals.length===0&&e.flags.length===0}function ie(e,t,n,r){let i=h(n.commands,n.globalFlags);if(i.length===0)return null;let a=i.map(e=>e.path[0]??``);if(a.length===r.size&&a.every(e=>r.has(e)))return null;let o=i.map(e=>({...e,path:Se(t,e)}));return e.filter(e=>e.path[0]!==t).concat(o)}function h(e,t){return t.length===0?e:e.map(e=>({...e,flags:S(e.flags,t)}))}function ae(e){let t;try{t=JSON.parse(e)}catch{return null}if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=Object.getOwnPropertyDescriptor(t,`commands`)?.value;if(!Array.isArray(n))return null;let r=[];for(let e of n){let t=Ce(e);t&&r.push(t)}return r.length===0?null:{commands:r,globalFlags:[]}}function g(e,t){let n=[{name:`${e}_help`,description:`Show ${e} help.`,inputSchema:E({}),cli:e,kind:`help`,commandPath:[]},{name:`${e}_invoke`,description:`Run ${e} with an argv array (one element per argument) and optional stdin. A non-zero exit is a tool error.`,inputSchema:D(),cli:e,kind:`invoke`,commandPath:[]}];for(let r of t){let t=r.path.join(`_`);n.push({name:`${e}_${t}`,description:r.description||`Run ${e} ${r.path.join(` `)}`,inputSchema:O(r),cli:e,kind:`command`,commandPath:r.path})}return n}function oe(e){if(e==null)return{fields:[]};if(typeof e!=`object`||Array.isArray(e))return{fields:[],error:`arguments must be an object`};let t=[],n,r,i;for(let a of Object.keys(e)){let o=Object.getOwnPropertyDescriptor(e,a)?.value,s=De(a,o);if(s.error)return{fields:t,error:s.error};s.stdin===void 0?s.passthrough?r=s.passthrough:s.argv?i=s.argv:s.field&&t.push(s.field):n=s.stdin}return{fields:t,...n===void 0?{}:{stdin:n},...r?{passthrough:r}:{},...i?{argv:i}:{}}}function se(e,t){if(t.error)return{error:t.error};let n=[...e.path];for(let r of e.positionals){let e=t.fields.find(e=>e.name===r.name);if(!e){if(r.required)return{error:`missing ${r.name}`};continue}if(typeof e.value!=`string`&&typeof e.value!=`number`)return{error:`${r.name} must be a string`};n.push(String(e.value))}let r=ce(e.flags,t.fields);return`error`in r?r:(n.push(...r.argv),t.passthrough&&n.push(...t.passthrough),{argv:n,...t.stdin===void 0?{}:{stdin:t.stdin}})}function ce(e,t){let n=[];for(let r of e){let e=t.find(e=>e.name===r.name);if(!e||e.value===!1)continue;let i=le(r,e.value);if(`error`in i)return i;n.push(...i.argv)}return{argv:n}}function le(e,t){if(e.type===`boolean`)return t===!0?{argv:[`--${e.name}`]}:{argv:[]};if(e.type===`string[]`){if(!Array.isArray(t))return{error:`${e.name} must be an array of strings`};let n=[];for(let r of t)n.push(`--${e.name}`,r);return{argv:n}}return typeof t!=`string`&&typeof t!=`number`?{error:`${e.name} must be a string`}:{argv:[`--${e.name}`,String(t)]}}function ue(e){let t=`none`,n=[],r=[],i=[];for(let a of e.split(`
2
2
  `)){let e=a.replace(/\t/g,` `),o=_(e);if(o){t=o.kind===`other`?`none`:o.kind,o.kind===`scoped`&&o.name&&i.push({name:o.name,flags:[]});continue}de(t,e,n,r,i)}return{commands:n,globalFlags:r,scoped:i}}function de(e,t,n,r,i){if(e===`commands`){let e=fe(t);e&&n.push(e);return}let a=_e(t);a&&(e===`options`&&r.push(a),e===`scoped`&&i[i.length-1]?.flags.push(a))}function _(e){let t=e.trim();if(/^commands:?$/i.test(t))return{kind:`commands`};if(/^options:?$/i.test(t))return{kind:`options`};let n=/^([A-Za-z][\w-]*)\s+flags:?$/i.exec(t);return n?.[1]?{kind:`scoped`,name:n[1].toLowerCase()}:/^[A-Z][A-Z0-9 ]+:$/.test(t)?{kind:`other`}:null}function fe(e){if(!/^\s{2,}\S/.test(e))return null;let t=e.trim().split(/\s{2,}/);if(t.length<2)return null;let n=x(t[0]??``),r=n[0]??``;if(!f.test(r)||r.startsWith(`-`))return null;let i=y();for(let e of n.slice(1))b(e,i);return{path:[r],description:t.slice(1).join(` `).trim(),positionals:i.positionals,flags:i.flags}}function v(e){for(let t of e.split(`
3
3
  `)){if(!/^[\s>*]*usage:/i.test(t))continue;let e=x(t)[0];if(e&&f.test(e))return e}}function pe(e,t){let n=[];for(let r of e.split(`
4
4
  `)){let e=he(r,t);e&&n.push(e)}return n}function me(e){let t=e.replace(/^\[|\]$/g,``).replace(/^<|>$/g,``).toLowerCase();return t===`command`||t===`cmd`||t===`subcommand`||t===`verb`}function he(e,t){let n=e.trim(),r=x(n);if(r.length<2||!/^usage:/i.test(n)&&r[0]!==t)return null;let i=[],a=1;for(;a<r.length&&i.length<2&&f.test(r[a]??``);)i.push(r[a]??``),a++;if(i.length===0||me(r[a]??``))return null;let o=y();for(let e of r.slice(a))b(e,o);return{path:i,description:``,positionals:o.positionals,flags:o.flags}}function y(){return{positionals:[],flags:[]}}function b(e,t){let n=e.startsWith(`[`)&&e.endsWith(`]`),r=n?e.slice(1,-1).trim():e;if(r.startsWith(`--`)){let e=ge(r);e&&t.flags.push(e);return}if(r.startsWith(`<`)&&r.endsWith(`>`)){t.positionals.push({name:C(r.slice(1,-1)),required:!n,description:``});return}f.test(r)&&t.positionals.push({name:C(r),required:!n,description:``})}function ge(e){let t=/^--([A-Za-z][\w-]*)(?:(?:=|\s+)(\S+))?$/.exec(e.trim());if(!t?.[1])return null;let n=t[2]??``;return n?{name:t[1],type:n.includes(`...`)?`string[]`:`string`,description:``}:{name:t[1],type:`boolean`,description:``}}function _e(e){let t=e.trim();if(!t.includes(`--`))return null;let n=/--([A-Za-z][\w-]*)(?:=(\S+)|(?:\s+(<[^>]+>|\[[^\]]+\]|[A-Z][A-Z0-9_-]+)))?/.exec(t);if(!n?.[1])return null;let r=n[2]||n[3]||``,i=/\brepeat|\.\.\.|one or more/i.test(t),a=ve(t);return!r&&!i?{name:n[1],type:`boolean`,description:a}:{name:n[1],type:i?`string[]`:`string`,description:a}}function ve(e){let t=e.trim().split(/\s{2,}/);return t.length>1?t.slice(1).join(` `).trim():``}function x(e){let t=e.trim().replace(/^usage:\s*/i,``),n=[],r=0;for(;r<t.length;){if(t[r]===` `){r++;continue}let e=t[r]===`[`?`]`:t[r]===`<`?`>`:``;if(e){let i=t.indexOf(e,r);if(i===-1){n.push(t.slice(r));break}n.push(t.slice(r,i+1)),r=i+1;continue}let i=t.indexOf(` `,r);if(i===-1){n.push(t.slice(r));break}n.push(t.slice(r,i)),r=i}return n}function ye(e,t){let n=e.map(e=>({...e}));for(let e of t){let t=n.find(t=>xe(t.path,e.path));if(!t){n.push(e);continue}t.positionals.length===0&&(t.positionals=e.positionals),t.description||=e.description,t.flags=S(t.flags,e.flags)}return n}function be(e,t){return e.map(e=>{let n=t.find(t=>t.name===(e.path[0]??``).toLowerCase());return n?{...e,flags:S(e.flags,n.flags)}:e})}function S(e,t){let n=[...e];for(let e of t)n.some(t=>t.name===e.name)||n.push(e);return n}function xe(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}function Se(e,t){return t.path[0]===e?t.path.slice(0,2):[e,t.path[0]??``].filter(e=>e.length>0).slice(0,2)}function C(e){return e.replace(/[^A-Za-z0-9_-]+/g,``).replace(/^-+/,``)||`arg`}function Ce(e){if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=w(e,`name`);if(!t)return null;let n=t.split(/\s+/).filter(e=>f.test(e)).slice(0,2);return n.length===0?null:{path:n,description:w(e,`description`)??``,positionals:we(Object.getOwnPropertyDescriptor(e,`positionals`)?.value),flags:Te(Object.getOwnPropertyDescriptor(e,`flags`)?.value)}}function we(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){if(!n||typeof n!=`object`||Array.isArray(n))continue;let e=w(n,`name`);if(!e)continue;let r=Object.getOwnPropertyDescriptor(n,`required`)?.value;t.push({name:e,required:r!==!1,description:``})}return t}function Te(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){if(!n||typeof n!=`object`||Array.isArray(n))continue;let e=w(n,`name`),r=w(n,`type`);!e||r!==`boolean`&&r!==`string`&&r!==`string[]`||t.push({name:e,type:r,description:``})}return t}function w(e,t){let n=Object.getOwnPropertyDescriptor(e,t)?.value;return typeof n==`string`&&n.length>0?n:void 0}function T(e){let t=e.indexOf(`=`);return t>0&&!e.slice(0,t).includes(`/`)?{name:e.slice(0,t),path:e.slice(t+1)}:{path:e}}function E(e,t){return{type:`object`,properties:e,additionalProperties:!1,...t&&t.length>0?{required:t}:{}}}function D(){return E({argv:{type:`array`,items:{type:`string`},description:`Arguments, one element per argument. Never a shell string.`},stdin:{type:`string`,description:`Optional standard input.`}},[`argv`])}function O(e){let t={},n=[];for(let r of e.positionals)t[r.name]={type:`string`,description:r.description||r.name},r.required&&n.push(r.name);for(let n of e.flags)t[n.name]=Ee(n);return t.stdin={type:`string`,description:`Optional standard input.`},t.passthrough={type:`array`,items:{type:`string`},description:`Extra arguments appended as-is.`},E(t,n)}function Ee(e){return e.type===`boolean`?{type:`boolean`,description:e.description||e.name}:e.type===`string[]`?{type:`array`,items:{type:`string`},description:e.description||e.name}:{type:`string`,description:e.description||e.name}}function De(e,t){if(e===`stdin`)return typeof t==`string`?{stdin:t}:{error:`stdin must be a string`};if(e===`passthrough`)return k(t,`passthrough`);if(e===`argv`){let e=k(t,`argv`);return e.passthrough?{argv:e.passthrough}:e}return Oe(t)?{field:{name:e,value:t}}:{error:`${e} has an unsupported type`}}function k(e,t){return!Array.isArray(e)||!e.every(e=>typeof e==`string`)?{error:`${t} must be an array of strings`}:{passthrough:e}}function Oe(e){return typeof e==`string`||typeof e==`boolean`||typeof e==`number`||Array.isArray(e)&&e.every(e=>typeof e==`string`)}function ke(e){let t=Ae(e.tools).map(e=>{let t=e.tools.map(e=>`<li><code>${A(e.name)}</code> ${A(e.description)}</li>`).join(``);return`<h2>${A(e.cli)}</h2><ul>${t}</ul>`}).join(``);return`<!DOCTYPE html>
@@ -18,5 +18,5 @@ import{r as e,t}from"./subcommand-help-CgO7wRS5.js";const n=`session — export
18
18
  usage: session search <query> [--limit N]
19
19
  `}}function i(e,t,n){if(!e||e.startsWith(`-`))return{ok:!1,stderr:`session read: ${t} requires a number\n`};let r=Number(e);return!Number.isFinite(r)||r<n?{ok:!1,stderr:`session read: ${t} must be ${n===0?`a non-negative integer`:`a positive integer`}\n`}:{ok:!0,n:Math.floor(r)}}function a(e){let t=e.slice(1),n,r,a;for(let e=0;e<t.length;e++){let o=t[e];if(o===`--from`||o===`--count`){let n=i(t[e+1],o,o===`--from`?0:1);if(!n.ok)return n;o===`--from`?r=n.n:a=n.n,e++}else if(o.startsWith(`-`))return{ok:!1,stderr:`session read: unknown flag ${o}\n`};else if(n===void 0)n=o;else return{ok:!1,stderr:`session read: unexpected argument ${JSON.stringify(o)}\n`}}return n?{ok:!0,id:n,from:r,count:a}:{ok:!1,stderr:`session read: missing id
20
20
  usage: session read <id> [--from N --count M]
21
- `}}async function o(e,t){let n=r(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};try{let{searchSessions:e}=await import(`./session-search-index-CQZ4zHoN.js`),r=await e(t.fs,n.query,{limit:n.limit});if(r.length===0)return{stdout:`# session search: ${n.query} (0 hits)\nNo matching messages in /sessions.\n`,stderr:``,exitCode:0};let i=[`# session search: ${n.query} (${r.length} hits)`];for(let e of r)i.push(`id=${e.id} score=${e.score.toFixed(2)} kind=${e.echoKind} role=${e.role}`),i.push(` session=${JSON.stringify(e.sessionTitle)} path=${e.path}`),i.push(` ${e.excerpt}`),i.push(``);return i.push(`Use: session read <id> [--from N --count M]`),{stdout:`${i.join(`
22
- `)}\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`session search: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function s(e,t){let n=a(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};try{let{readSessionHit:e,SESSION_READ_BYTE_CAP:r}=await import(`./session-search-index-CQZ4zHoN.js`),i=await e(t.fs,n.id,{from:n.from,count:n.count});return i?{stdout:`# session read: ${n.id}\npath=${i.hit.path} title=${JSON.stringify(i.hit.sessionTitle)}\nmessages ${i.from}–${i.from+i.count-1} of ${i.total} (remaining: ${i.remaining}${i.truncated?`, truncated to byte cap`:``})\nbyteCap=${r}\n\n`+i.text,stderr:``,exitCode:0}:{stdout:``,stderr:`session read: unknown id ${JSON.stringify(n.id)}\n`,exitCode:1}}catch(e){return{stdout:``,stderr:`session read: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function c(r,i,a,c){return r===`help`?{stdout:c?e(`session`,c,n):n,stderr:``,exitCode:0}:t(i.slice(1))?{stdout:e(`session`,r,n),stderr:``,exitCode:0}:r===`search`?o(i,a):s(i,a)}async function l(e,n,r){let{isMemoryV2Enabled:i}=await import(`./memory-v2-flag-Bw4vo1l_.js`),a=i();if(t(e)){if(!a)return{stdout:r,stderr:``,exitCode:0};let t=e[0];return c(`help`,e,n,t&&t!==`--help`&&t!==`-h`?t:void 0)}let o=e[0];return o===`search`||o===`read`?a?c(o,e,n):{stdout:``,stderr:`session export: unknown subcommand ${JSON.stringify(o)} — usage: session export [--id <id>] [--output <path>]\n`,exitCode:1}:a?{stdout:``,stderr:`session: unknown subcommand ${JSON.stringify(o??``)} — usage: session export|search|read (see session --help)\n`,exitCode:1}:{stdout:``,stderr:`session export: unknown subcommand ${JSON.stringify(o??``)} — usage: session export [--id <id>] [--output <path>]\n`,exitCode:1}}export{l as dispatchSessionMemoryAware};
21
+ `}}async function o(e,t){let n=r(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};try{let{searchSessions:e}=await import(`./session-search-index-tweAFlvW.js`),r=await e(t.fs,n.query,{limit:n.limit});if(r.length===0)return{stdout:`# session search: ${n.query} (0 hits)\nNo matching messages in /sessions.\n`,stderr:``,exitCode:0};let i=[`# session search: ${n.query} (${r.length} hits)`];for(let e of r)i.push(`id=${e.id} score=${e.score.toFixed(2)} kind=${e.echoKind} role=${e.role}`),i.push(` session=${JSON.stringify(e.sessionTitle)} path=${e.path}`),i.push(` ${e.excerpt}`),i.push(``);return i.push(`Use: session read <id> [--from N --count M]`),{stdout:`${i.join(`
22
+ `)}\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`session search: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function s(e,t){let n=a(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};try{let{readSessionHit:e,SESSION_READ_BYTE_CAP:r}=await import(`./session-search-index-tweAFlvW.js`),i=await e(t.fs,n.id,{from:n.from,count:n.count});return i?{stdout:`# session read: ${n.id}\npath=${i.hit.path} title=${JSON.stringify(i.hit.sessionTitle)}\nmessages ${i.from}–${i.from+i.count-1} of ${i.total} (remaining: ${i.remaining}${i.truncated?`, truncated to byte cap`:``})\nbyteCap=${r}\n\n`+i.text,stderr:``,exitCode:0}:{stdout:``,stderr:`session read: unknown id ${JSON.stringify(n.id)}\n`,exitCode:1}}catch(e){return{stdout:``,stderr:`session read: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function c(r,i,a,c){return r===`help`?{stdout:c?e(`session`,c,n):n,stderr:``,exitCode:0}:t(i.slice(1))?{stdout:e(`session`,r,n),stderr:``,exitCode:0}:r===`search`?o(i,a):s(i,a)}async function l(e,n,r){let{isMemoryV2Enabled:i}=await import(`./memory-v2-flag-Bw4vo1l_.js`),a=i();if(t(e)){if(!a)return{stdout:r,stderr:``,exitCode:0};let t=e[0];return c(`help`,e,n,t&&t!==`--help`&&t!==`-h`?t:void 0)}let o=e[0];return o===`search`||o===`read`?a?c(o,e,n):{stdout:``,stderr:`session export: unknown subcommand ${JSON.stringify(o)} — usage: session export [--id <id>] [--output <path>]\n`,exitCode:1}:a?{stdout:``,stderr:`session: unknown subcommand ${JSON.stringify(o??``)} — usage: session export|search|read (see session --help)\n`,exitCode:1}:{stdout:``,stderr:`session export: unknown subcommand ${JSON.stringify(o??``)} — usage: session export [--id <id>] [--output <path>]\n`,exitCode:1}}export{l as dispatchSessionMemoryAware};
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{_ as t,b as n,d as r,m as i,n as a}from"./frozen-archive-writer-Ceh2la4q.js";import{t as o}from"./types-D8gIX-W-.js";var s=e({chatMessagesToJsonl:()=>p,copySessionJsonl:()=>S,jsonlToChatMessages:()=>m,loadFrozenArchive:()=>f,readSessionJsonl:()=>b,removeSessionJsonl:()=>x,sidecarFilenameForArchive:()=>l,sidecarPathForArchive:()=>c,writeArchiveBundle:()=>d,writeSessionJsonl:()=>y});function c(e){let t=`${e.endsWith(`.md`)?e.slice(0,-3):e.replace(/\.md$/i,``)}.jsonl`;return t.startsWith(`/`)?t:`${i}/${t}`}function l(e){return e.replace(/\.md$/i,`.jsonl`)}function u(e,t){return a(e).replace(/<!-- slicc:session-data\n[\s\S]*?\n-->\n\n/,``).replace(/^---\n([\s\S]*?)\n---\n\n/,(e,n)=>`---\n${n}\nsidecar: ${t}\n---\n\n`)}async function d(e,t,n){let a=l(t),o=`${i}/${t}`;return await e.writeFile(o,u(n,a)),{markdownPath:o,sidecarPath:await y(e,t,r(n.messages))}}async function f(e,n,r){let i=t(n);if(i.messages.length>0||!i.sidecar)return i;let a=await b(e,r??i.sidecar.replace(/\.jsonl$/i,`.md`));return a?{...i,messages:a}:i}function p(e){let t=[];for(let n of e)for(let e of C(n))t.push(JSON.stringify(e));return t.length===0?``:`${t.join(`
1
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{_ as t,b as n,d as r,m as i,n as a}from"./frozen-archive-writer-DV8CfTGq.js";import{t as o}from"./types-D8gIX-W-.js";var s=e({chatMessagesToJsonl:()=>p,copySessionJsonl:()=>S,jsonlToChatMessages:()=>m,loadFrozenArchive:()=>f,readSessionJsonl:()=>b,removeSessionJsonl:()=>x,sidecarFilenameForArchive:()=>l,sidecarPathForArchive:()=>c,writeArchiveBundle:()=>d,writeSessionJsonl:()=>y});function c(e){let t=`${e.endsWith(`.md`)?e.slice(0,-3):e.replace(/\.md$/i,``)}.jsonl`;return t.startsWith(`/`)?t:`${i}/${t}`}function l(e){return e.replace(/\.md$/i,`.jsonl`)}function u(e,t){return a(e).replace(/<!-- slicc:session-data\n[\s\S]*?\n-->\n\n/,``).replace(/^---\n([\s\S]*?)\n---\n\n/,(e,n)=>`---\n${n}\nsidecar: ${t}\n---\n\n`)}async function d(e,t,n){let a=l(t),o=`${i}/${t}`;return await e.writeFile(o,u(n,a)),{markdownPath:o,sidecarPath:await y(e,t,r(n.messages))}}async function f(e,n,r){let i=t(n);if(i.messages.length>0||!i.sidecar)return i;let a=await b(e,r??i.sidecar.replace(/\.jsonl$/i,`.md`));return a?{...i,messages:a}:i}function p(e){let t=[];for(let n of e)for(let e of C(n))t.push(JSON.stringify(e));return t.length===0?``:`${t.join(`
2
2
  `)}\n`}function m(e){let t=[],n=null;for(let r of e.split(`
3
3
  `)){let e=r.trim();if(!e)continue;let i=h(e);if(i){if(i.role===`user`)t.push(g(i)),n=null;else if(i.role===`assistant`){let e=_(i);t.push(e),n=e}else i.role===`toolResult`&&v(n,i)}}return t}function h(e){try{return JSON.parse(e)}catch{return null}}function g(e){return{id:e.id??E(`u`),role:`user`,content:w(e.content),timestamp:e.timestamp??0,...e.source?{source:e.source}:{},...e.channel?{channel:e.channel}:{},...e.attachments?.length?{attachments:e.attachments}:{}}}function _(e){let t=T(e.content);return{id:e.id??E(`a`),role:`assistant`,content:w(e.content),timestamp:e.timestamp??0,...t.length?{toolCalls:t}:{},...e.source?{source:e.source}:{},...e.compaction?{compaction:e.compaction}:{},...e.attachments?.length?{attachments:e.attachments}:{}}}function v(e,t){if(!t.toolCallId||!e?.toolCalls)return;let n=e.toolCalls.find(e=>e.id===t.toolCallId);n&&(n.result=w(t.content),t.isError&&(n.isError=!0))}async function y(e,t,r){let i=c(t);return await e.writeFile(i,p(n(r))),i}async function b(e,t){let n=c(t);try{let t=await e.readFile(n,{encoding:`utf-8`});return m(typeof t==`string`?t:new TextDecoder().decode(t))}catch(e){if(e instanceof o&&e.code===`ENOENT`)return null;throw e}}async function x(e,t){let n=c(t);try{await e.rm(n)}catch(e){if(e instanceof o&&e.code===`ENOENT`)return;throw e}}async function S(e,t,n){if(t===n)return;let r=c(t),i=c(n);try{let t=await e.readFile(r,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t);await e.writeFile(i,n)}catch(e){if(e instanceof o&&e.code===`ENOENT`)return;throw e}}function C(e){if(e.role===`user`)return[{role:`user`,content:[{type:`text`,text:e.content}],id:e.id,timestamp:e.timestamp,...e.source?{source:e.source}:{},...e.channel?{channel:e.channel}:{},...e.attachments?.length?{attachments:e.attachments}:{}}];let t=[];e.content&&t.push({type:`text`,text:e.content});for(let n of e.toolCalls??[])t.push({type:`toolCall`,id:n.id,name:n.name,arguments:n.input});let n=[{role:`assistant`,content:t.length?t:[{type:`text`,text:``}],id:e.id,timestamp:e.timestamp,...e.source?{source:e.source}:{},...e.compaction?{compaction:e.compaction}:{},...e.attachments?.length?{attachments:e.attachments}:{}}];for(let t of e.toolCalls??[])t.result===void 0&&!t.isError||n.push({role:`toolResult`,toolCallId:t.id,content:[{type:`text`,text:t.result??``}],...t.isError?{isError:!0}:{},timestamp:e.timestamp});return n}function w(e){return typeof e==`string`?e:e.filter(e=>e.type===`text`).map(e=>e.text).join(`
4
4
  `)}function T(e){return typeof e==`string`?[]:e.filter(e=>e.type===`toolCall`).map(e=>({id:e.id,name:e.name,input:e.arguments}))}function E(e){return`${e}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`}export{c as a,s as i,f as n,x as r,S as t};
@@ -1,3 +1,3 @@
1
- import{t as e}from"./types-D8gIX-W-.js";import{i as t,o as n}from"./kernel-worker-C8b5lZTP.js";import"./frozen-archive-writer-CbV_CMOh.js";function r(e){let n=`${e.endsWith(`.md`)?e.slice(0,-3):e.replace(/\.md$/i,``)}.jsonl`;return n.startsWith(`/`)?n:`${t}/${n}`}async function i(e,t,r){let i=n(t);if(i.messages.length>0||!i.sidecar)return i;let a=await u(e,r??i.sidecar.replace(/\.jsonl$/i,`.md`));return a?{...i,messages:a}:i}function a(e){let t=[],n=null;for(let r of e.split(`
1
+ import{t as e}from"./types-D8gIX-W-.js";import{i as t,o as n}from"./kernel-worker-MybuXyBd.js";import"./frozen-archive-writer-DV7A8nNw.js";function r(e){let n=`${e.endsWith(`.md`)?e.slice(0,-3):e.replace(/\.md$/i,``)}.jsonl`;return n.startsWith(`/`)?n:`${t}/${n}`}async function i(e,t,r){let i=n(t);if(i.messages.length>0||!i.sidecar)return i;let a=await u(e,r??i.sidecar.replace(/\.jsonl$/i,`.md`));return a?{...i,messages:a}:i}function a(e){let t=[],n=null;for(let r of e.split(`
2
2
  `)){let e=r.trim();if(!e)continue;let i=o(e);if(i){if(i.role===`user`)t.push(s(i)),n=null;else if(i.role===`assistant`){let e=c(i);t.push(e),n=e}else i.role===`toolResult`&&l(n,i)}}return t}function o(e){try{return JSON.parse(e)}catch{return null}}function s(e){return{id:e.id??m(`u`),role:`user`,content:f(e.content),timestamp:e.timestamp??0,...e.source?{source:e.source}:{},...e.channel?{channel:e.channel}:{},...e.attachments?.length?{attachments:e.attachments}:{}}}function c(e){let t=p(e.content);return{id:e.id??m(`a`),role:`assistant`,content:f(e.content),timestamp:e.timestamp??0,...t.length?{toolCalls:t}:{},...e.source?{source:e.source}:{},...e.compaction?{compaction:e.compaction}:{},...e.attachments?.length?{attachments:e.attachments}:{}}}function l(e,t){if(!t.toolCallId||!e?.toolCalls)return;let n=e.toolCalls.find(e=>e.id===t.toolCallId);n&&(n.result=f(t.content),t.isError&&(n.isError=!0))}async function u(t,n){let i=r(n);try{let e=await t.readFile(i,{encoding:`utf-8`});return a(typeof e==`string`?e:new TextDecoder().decode(e))}catch(t){if(t instanceof e&&t.code===`ENOENT`)return null;throw t}}async function d(t,n){let i=r(n);try{await t.rm(i)}catch(t){if(t instanceof e&&t.code===`ENOENT`)return;throw t}}function f(e){return typeof e==`string`?e:e.filter(e=>e.type===`text`).map(e=>e.text).join(`
3
3
  `)}function p(e){return typeof e==`string`?[]:e.filter(e=>e.type===`toolCall`).map(e=>({id:e.id,name:e.name,input:e.arguments}))}function m(e){return`${e}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`}export{i as loadFrozenArchive,d as removeSessionJsonl};
@@ -1,3 +1,3 @@
1
- import{i as e,s as t}from"./kernel-worker-C8b5lZTP.js";import{loadFrozenArchive as n}from"./session-jsonl-By2cMFbj.js";const r=`/sessions/.search-index.json`,i=12e3,a=4e3;async function o(e,t){return typeof e.readdir==`function`?e.readdir(t):typeof e.readDir==`function`?(await e.readDir(t)).map(e=>e.name):[]}const s={fields:[`title`,`body`],storeFields:[`title`,`body`,`sessionId`,`sessionTitle`,`filename`,`messageId`,`messageIndex`,`role`,`echoKind`,`path`],idField:`id`,processTerm:e=>{let t=e.toLowerCase();return t.length<2?null:M(t)},searchOptions:{boost:{title:4,body:1},prefix:!0}},c={original:1,summary:.35,echo:.15};function l(e){if(e.compaction)return`summary`;let t=e.content??``;return/<context-summary>/i.test(t)||/Earlier conversation messages were compacted/i.test(t)||/full transcript of the conversation before this compaction is saved at/i.test(t)?`summary`:/^# session (search|read):/m.test(t)||/\bid=sess\/[^\s]+/.test(t)||e.role===`assistant`&&e.toolCalls?.some(e=>e.name===`bash`&&typeof e.input==`object`&&e.input!==null&&/session\s+(search|read)\b/.test(String(e.input.command??``)))?`echo`:`original`}function u(e,t){return`sess/${e}/msg/${t}`}function d(e){let t=/^sess\/([^/]+)\/msg\/(.+)$/.exec(e);return t?{sessionId:t[1],messageId:t[2]}:null}function f(e){let t=`${e.sessionsDir??`/sessions`}/${e.filename}`,n=[];return e.messages.forEach((r,i)=>{let o=r.id||`i${i}`,s=[A(r.content??``,a)];for(let e of r.toolCalls??[])s.push(e.name,A(j(e.input),a)),e.result&&s.push(A(e.result,a));let c=A(s.filter(Boolean).join(`
1
+ import{i as e,s as t}from"./kernel-worker-MybuXyBd.js";import{loadFrozenArchive as n}from"./session-jsonl-Ca8gi9Dg.js";const r=`/sessions/.search-index.json`,i=12e3,a=4e3;async function o(e,t){return typeof e.readdir==`function`?e.readdir(t):typeof e.readDir==`function`?(await e.readDir(t)).map(e=>e.name):[]}const s={fields:[`title`,`body`],storeFields:[`title`,`body`,`sessionId`,`sessionTitle`,`filename`,`messageId`,`messageIndex`,`role`,`echoKind`,`path`],idField:`id`,processTerm:e=>{let t=e.toLowerCase();return t.length<2?null:M(t)},searchOptions:{boost:{title:4,body:1},prefix:!0}},c={original:1,summary:.35,echo:.15};function l(e){if(e.compaction)return`summary`;let t=e.content??``;return/<context-summary>/i.test(t)||/Earlier conversation messages were compacted/i.test(t)||/full transcript of the conversation before this compaction is saved at/i.test(t)?`summary`:/^# session (search|read):/m.test(t)||/\bid=sess\/[^\s]+/.test(t)||e.role===`assistant`&&e.toolCalls?.some(e=>e.name===`bash`&&typeof e.input==`object`&&e.input!==null&&/session\s+(search|read)\b/.test(String(e.input.command??``)))?`echo`:`original`}function u(e,t){return`sess/${e}/msg/${t}`}function d(e){let t=/^sess\/([^/]+)\/msg\/(.+)$/.exec(e);return t?{sessionId:t[1],messageId:t[2]}:null}function f(e){let t=`${e.sessionsDir??`/sessions`}/${e.filename}`,n=[];return e.messages.forEach((r,i)=>{let o=r.id||`i${i}`,s=[A(r.content??``,a)];for(let e of r.toolCalls??[])s.push(e.name,A(j(e.input),a)),e.result&&s.push(A(e.result,a));let c=A(s.filter(Boolean).join(`
2
2
  `),a);!c.trim()&&!r.compaction||n.push({id:u(e.sessionId,o),title:e.sessionTitle,body:c,sessionId:e.sessionId,sessionTitle:e.sessionTitle,filename:e.filename,messageId:o,messageIndex:i,role:r.role,echoKind:l(r),path:t})}),n}const p=`/scoops`;async function m(e){let t;try{t=await o(e,p)}catch{return[]}let n=[];for(let r of t)try{let t=await o(e,`${p}/${r}/sessions`);for(let e of t)n.push(`${p}/${r}/sessions/${e}`)}catch{}return n.sort()}async function h(n){let r=(await t(n)).map(t=>({entry:t,sessionsDir:e}));for(let e of await m(n))for(let t of await g(n,e))r.push({entry:t,sessionsDir:e});return r}async function g(e,t){try{let n=await e.readFile(`${t}/index.json`,{encoding:`utf-8`}),r=typeof n==`string`?n:new TextDecoder().decode(n),i=JSON.parse(r);return Array.isArray(i)?i:[]}catch{return[]}}async function _(e){let t=(await import(`./es-BR4l6CGS.js`)).default,n=await h(e),r=[],i=new Set;for(let{entry:t,sessionsDir:a}of n)for(let n of await S(e,t,a))i.has(n.id)||(i.add(n.id),r.push(n));let a=new t(s);return r.length&&a.addAll(r),{mini:a,meta:{version:1,builtAt:Date.now(),archiveCount:n.length,fingerprint:w(n)},docs:r.length,archives:n.length}}async function v(e,t){return w(await h(e))===t.meta.fingerprint&&(await e.writeFile(r,JSON.stringify({meta:t.meta,index:t.mini.toJSON()})),!0)}async function y(e){let t=(await import(`./es-BR4l6CGS.js`)).default,n=w(await h(e));try{let i=await e.readFile(r,{encoding:`utf-8`}),a=typeof i==`string`?i:new TextDecoder().decode(i),o=JSON.parse(a);if(o.meta?.fingerprint===n&&o.index)return t.loadJS(o.index,s)}catch{}let i=await _(e);return await v(e,i),i.mini}async function b(e,t,n={}){let r=Math.min(Math.max(1,n.limit??8),20),i=t.trim();if(!i)return[];let a=await y(e),o=a.search(i,{boost:{title:4,body:1},prefix:!0}),s=[];for(let e of o){let t=a.getStoredFields(e.id);if(!t)continue;let n=t.echoKind??`original`,r=e.score*(c[n]??1);s.push({id:String(e.id),score:r,echoKind:n,sessionId:t.sessionId,sessionTitle:t.sessionTitle,filename:t.filename,messageId:t.messageId,messageIndex:t.messageIndex,role:t.role,path:t.path,excerpt:T(t.body,i)})}return s.sort((e,t)=>t.score-e.score),s.slice(0,r)}async function x(e,t,n={}){let r=d(t);if(!r)return null;let i=await h(e),a=i.find(({entry:e})=>e.sessionId===r.sessionId)??i.find(({entry:e})=>e.filename.replace(/\.md$/i,``)===r.sessionId);if(!a)return null;let{entry:o,sessionsDir:s}=a,c=await C(e,o,s),l=c.findIndex((e,t)=>(e.id||`i${t}`)===r.messageId),u=Math.max(0,n.from??Math.max(0,l)),f=Math.max(1,n.count??3),p=c.slice(u,u+f),m=E(p,u),g=!1;for(;k(m)>12e3&&p.length>1;)p=p.slice(0,-1),m=E(p,u),g=!0;k(m)>12e3&&(m=`${A(m,11980)}\n…[truncated]\n`,g=!0);let _=p.length,v=Math.max(0,c.length-(u+_));return{hit:{sessionId:o.sessionId??r.sessionId,messageId:r.messageId,sessionTitle:o.title,path:`${s}/${o.filename}`},messages:p,from:u,count:_,total:c.length,remaining:v,truncated:g,text:m}}async function S(t,n,r=e){let i=await C(t,n,r);return f({sessionId:n.sessionId??n.filename.replace(/\.md$/i,``),sessionTitle:n.title,filename:n.filename,messages:i,sessionsDir:r})}async function C(t,r,i=e){try{let e=`${i}/${r.filename}`,a=await t.readFile(e,{encoding:`utf-8`}),o=typeof a==`string`?a:new TextDecoder().decode(a);return(await n(t,o,e)).messages}catch{return[]}}function w(e){return e.map(({entry:e,sessionsDir:t})=>`${t}/${e.filename}:${e.messageCount}:${e.frozenAt}:${e.sessionId??``}`).sort().join(`|`)}function T(e,t,n=80){let r=e.replace(/\s+/g,` `).trim();if(!r)return``;let i=t.toLowerCase().split(/\s+/).filter(e=>e.length>1),a=-1;for(let e of i)if(a=r.toLowerCase().indexOf(e),a>=0)break;if(a<0)return r.slice(0,n*2)+(r.length>n*2?`…`:``);let o=Math.max(0,a-n),s=Math.min(r.length,a+n);return`${o>0?`…`:``}${r.slice(o,s)}${s<r.length?`…`:``}`}function E(e,t){let n=[];return e.forEach((e,r)=>{let i=t+r,a=e.id||`i${i}`;n.push(`## [${i}] ${e.role} id=${a}`),e.content&&n.push(e.content);for(let t of e.toolCalls??[])n.push(`### tool ${t.name} (${t.id})${t.isError?` ERROR`:``}`),n.push(j(t.input)),t.result&&n.push(t.result);n.push(``)}),n.join(`
3
3
  `)}async function D(e,t={}){try{await e.rm(r)}catch(e){if(t.strict&&e?.code!==`ENOENT`)throw e}}const O=new TextEncoder;function k(e){return O.encode(e).byteLength}function A(e,t){if(t<=0)return``;let n=O.encode(e);if(n.byteLength<=t)return e;let r=t;for(;r>0&&(n[r]&192)==128;)r--;return new TextDecoder().decode(n.subarray(0,r))}function j(e){try{return JSON.stringify(e)}catch{return String(e)}}function M(e){if(e.length<3)return e;let t=e;if(t.endsWith(`sses`)||t.endsWith(`ies`)?t=`${t.slice(0,-2)}`:t.endsWith(`ss`)||t.endsWith(`s`)&&t.length>3&&(t=t.slice(0,-1)),t.endsWith(`eed`))N(t.slice(0,-3))>0&&(t=t.slice(0,-1));else if(/(ed|ing)$/.test(t)){let e=t.replace(/(ed|ing)$/,``);/[aeiouy]/.test(e)&&(t=e,/(at|bl|iz)$/.test(t)?t=`${t}e`:/(.)\1$/.test(t)&&!/[lsz]$/.test(t)?t=t.slice(0,-1):N(t)===1&&P(t)&&(t=`${t}e`))}return t.endsWith(`y`)&&/[aeiouy]/.test(t.slice(0,-1))&&(t=`${t.slice(0,-1)}i`),t}function N(e){return(e.toLowerCase().replace(/[^aeiouy]+/g,`C`).replace(/[aeiouy]+/g,`V`).replace(/^C/,``).replace(/V$/,``).match(/VC/g)??[]).length}function P(e){if(e.length<3)return!1;let t=e[e.length-3],n=e[e.length-2],r=e[e.length-1],i=e=>/[aeiouy]/.test(e);return!i(t)&&i(n)&&!i(r)&&!/[wxy]/.test(r)}export{i as SESSION_READ_BYTE_CAP,D as invalidateSessionSearchIndex,x as readSessionHit,b as searchSessions};
@@ -1 +1 @@
1
- import{l as e}from"./feature-flags-DvsApnS-.js";import{A as t,_ as n,g as r,j as i,k as a}from"./main-DfG-7olk.js";var o=3e3;async function s(n,r){let i=a(r.storage);try{let a=new URL(`/api/flags`,`${r.workerBaseUrl.replace(/\/+$/,``)}/`);a.searchParams.set(`float`,n);let s=await c(a.toString(),r.fetchImpl??fetch,r.timeoutMs??o);if(!s)return;t(i,n,s),e(n,s)}catch{}}async function c(e,t,n){let r=new AbortController,i;try{let a=new Promise(e=>{i=setTimeout(()=>{r.abort(),e(null)},n)}),o=t(e,{cache:`no-store`,headers:{Accept:`application/json`},signal:r.signal}).then(async e=>e.ok?l(await e.json()):null).catch(()=>null);return await Promise.race([o,a])}catch{return null}finally{i!==void 0&&clearTimeout(i)}}function l(e){if(!u(e))return null;let t=e.flags;return!u(t)||Object.values(t).some(e=>typeof e!=`string`)?null:t}function u(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function d(e,t){return s(e,{workerBaseUrl:g(t),storage:t.storage})}var f=18e5,p=null;function m(e,t,n=f){return h(),p=setInterval(()=>{d(e,t)},n),h}function h(){p!==null&&(clearInterval(p),p=null)}function g(e){let t=_(e.storage),a=i(e.envBaseUrl??null);if(t)return t;if(a)return a;if(!e.isDev)try{let t=new URL(e.locationHref);if(t.protocol===`http:`||t.protocol===`https:`)return t.origin}catch{}return e.isDev?n:r}function _(e){try{return i(e?.getItem(`slicc.trayWorkerBaseUrl`)??null)}catch{return null}}export{d as refreshFeatureFlagsForPage,g as resolveFeatureFlagsWorkerBaseUrl,m as scheduleFeatureFlagsRefresh};
1
+ import{l as e}from"./feature-flags-DvsApnS-.js";import{A as t,_ as n,g as r,j as i,k as a}from"./main-pp1LzVcX.js";var o=3e3;async function s(n,r){let i=a(r.storage);try{let a=new URL(`/api/flags`,`${r.workerBaseUrl.replace(/\/+$/,``)}/`);a.searchParams.set(`float`,n);let s=await c(a.toString(),r.fetchImpl??fetch,r.timeoutMs??o);if(!s)return;t(i,n,s),e(n,s)}catch{}}async function c(e,t,n){let r=new AbortController,i;try{let a=new Promise(e=>{i=setTimeout(()=>{r.abort(),e(null)},n)}),o=t(e,{cache:`no-store`,headers:{Accept:`application/json`},signal:r.signal}).then(async e=>e.ok?l(await e.json()):null).catch(()=>null);return await Promise.race([o,a])}catch{return null}finally{i!==void 0&&clearTimeout(i)}}function l(e){if(!u(e))return null;let t=e.flags;return!u(t)||Object.values(t).some(e=>typeof e!=`string`)?null:t}function u(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function d(e,t){return s(e,{workerBaseUrl:g(t),storage:t.storage})}var f=18e5,p=null;function m(e,t,n=f){return h(),p=setInterval(()=>{d(e,t)},n),h}function h(){p!==null&&(clearInterval(p),p=null)}function g(e){let t=_(e.storage),a=i(e.envBaseUrl??null);if(t)return t;if(a)return a;if(!e.isDev)try{let t=new URL(e.locationHref);if(t.protocol===`http:`||t.protocol===`https:`)return t.origin}catch{}return e.isDev?n:r}function _(e){try{return i(e?.getItem(`slicc.trayWorkerBaseUrl`)??null)}catch{return null}}export{d as refreshFeatureFlagsForPage,g as resolveFeatureFlagsWorkerBaseUrl,m as scheduleFeatureFlagsRefresh};
@@ -1 +1 @@
1
- import{i as e}from"./compat-0YnuwvMn.js";import{t}from"./logger-DDBAeTLF.js";import{c as n,n as r,r as i,s as a,t as o}from"./core-DzRw0pz2.js";import{a as s}from"./feature-flags-DvsApnS-.js";import{S as c}from"./account-store-D6Y7UkDR.js";import{resolveFeatureFlagsWorkerBaseUrl as l}from"./setup-feature-flags-remote-B5Zj6DG2.js";var u=`/api/models/providers/`,d=4e3,f=2e3;function p(e){let t=Array.isArray(e)?e:a(e)&&Array.isArray(i(e,`models`))?i(e,`models`):a(e)?Object.values(e):null;return t?t.filter(e=>a(e)&&typeof i(e,`id`)==`string`).slice(0,f):null}async function m(e,t,n,r){let i=new AbortController,a=setTimeout(()=>i.abort(),r);try{return await e(t,{...n,signal:i.signal})}finally{clearTimeout(a)}}async function h(e,t,n){if(!n.force&&t?.checkedAt!==void 0&&n.now-t.checkedAt<144e5)return{kind:`skip`};let r=new URL(`${u}${encodeURIComponent(e)}`,`${n.workerBaseUrl.replace(/\/+$/,``)}/`).toString(),i=t?.models.length?t.etag:void 0,a;try{a=await m(n.fetchImpl,r,{headers:{Accept:`application/json`,...i?{"If-None-Match":i}:{}}},n.timeoutMs)}catch{return{kind:`failed`,entry:t?{...t,checkedAt:n.now}:void 0}}if(a.status===304&&t)return{kind:`stored`,entry:{...t,checkedAt:n.now},changed:!1};if(a.status===404)return{kind:`stored`,entry:{models:[],checkedAt:n.now,lastModified:0},changed:!0};if(!a.ok)return{kind:`failed`,entry:t?{...t,checkedAt:n.now}:void 0};let o;try{o=p(await a.json())}catch{o=null}if(!o)return{kind:`failed`,entry:t};let s=Date.parse(a.headers.get(`last-modified`)??``),c={models:o,checkedAt:n.now,lastModified:Number.isNaN(s)?0:s},l=a.headers.get(`etag`);return l&&(c.etag=l),{kind:`stored`,entry:c,changed:!0}}async function g(t){let i={updated:[],failed:[]};if(!s(`live-model-catalog`))return i;let a=t.storage===void 0?r():t.storage;if(!a)return i;let c=new Set(e()),l=[...new Set(t.providers)].filter(e=>c.has(e));if(l.length===0)return i;let u=(t.now??Date.now)(),f={workerBaseUrl:t.workerBaseUrl,fetchImpl:t.fetchImpl??fetch,timeoutMs:t.timeoutMs??d,force:t.force===!0,now:u},p=n(a).store,m=await Promise.all(l.map(async e=>[e,await h(e,p[e],f)])),g={...n(a).store},_=!1;for(let[e,t]of m)t.kind!==`skip`&&(t.entry&&(g[e]=t.entry,_=!0),t.kind===`failed`?i.failed.push(e):t.changed&&i.updated.push(e));if(_)try{a.setItem(o,JSON.stringify(g))}catch{}return i}var _=t(`model-catalog`),v=36e5,y=null;async function b(e,t=!1){let n=await g({workerBaseUrl:l(e),providers:c(),storage:e.storage,force:t});return n.updated.length>0&&_.info(`Model catalogue refreshed`,{providers:n.updated}),n.failed.length>0&&_.debug(`Model catalogue refresh failed`,{providers:n.failed}),n}function x(e,t=v){return S(),y=setInterval(()=>{b(e)},t),b(e)}function S(){y!==null&&(clearInterval(y),y=null)}export{x as setupModelCatalog};
1
+ import{i as e}from"./compat-0YnuwvMn.js";import{t}from"./logger-DDBAeTLF.js";import{c as n,n as r,r as i,s as a,t as o}from"./core-DzRw0pz2.js";import{a as s}from"./feature-flags-DvsApnS-.js";import{S as c}from"./account-store-EUAU8ivx.js";import{resolveFeatureFlagsWorkerBaseUrl as l}from"./setup-feature-flags-remote-Bnrz-kqW.js";var u=`/api/models/providers/`,d=4e3,f=2e3;function p(e){let t=Array.isArray(e)?e:a(e)&&Array.isArray(i(e,`models`))?i(e,`models`):a(e)?Object.values(e):null;return t?t.filter(e=>a(e)&&typeof i(e,`id`)==`string`).slice(0,f):null}async function m(e,t,n,r){let i=new AbortController,a=setTimeout(()=>i.abort(),r);try{return await e(t,{...n,signal:i.signal})}finally{clearTimeout(a)}}async function h(e,t,n){if(!n.force&&t?.checkedAt!==void 0&&n.now-t.checkedAt<144e5)return{kind:`skip`};let r=new URL(`${u}${encodeURIComponent(e)}`,`${n.workerBaseUrl.replace(/\/+$/,``)}/`).toString(),i=t?.models.length?t.etag:void 0,a;try{a=await m(n.fetchImpl,r,{headers:{Accept:`application/json`,...i?{"If-None-Match":i}:{}}},n.timeoutMs)}catch{return{kind:`failed`,entry:t?{...t,checkedAt:n.now}:void 0}}if(a.status===304&&t)return{kind:`stored`,entry:{...t,checkedAt:n.now},changed:!1};if(a.status===404)return{kind:`stored`,entry:{models:[],checkedAt:n.now,lastModified:0},changed:!0};if(!a.ok)return{kind:`failed`,entry:t?{...t,checkedAt:n.now}:void 0};let o;try{o=p(await a.json())}catch{o=null}if(!o)return{kind:`failed`,entry:t};let s=Date.parse(a.headers.get(`last-modified`)??``),c={models:o,checkedAt:n.now,lastModified:Number.isNaN(s)?0:s},l=a.headers.get(`etag`);return l&&(c.etag=l),{kind:`stored`,entry:c,changed:!0}}async function g(t){let i={updated:[],failed:[]};if(!s(`live-model-catalog`))return i;let a=t.storage===void 0?r():t.storage;if(!a)return i;let c=new Set(e()),l=[...new Set(t.providers)].filter(e=>c.has(e));if(l.length===0)return i;let u=(t.now??Date.now)(),f={workerBaseUrl:t.workerBaseUrl,fetchImpl:t.fetchImpl??fetch,timeoutMs:t.timeoutMs??d,force:t.force===!0,now:u},p=n(a).store,m=await Promise.all(l.map(async e=>[e,await h(e,p[e],f)])),g={...n(a).store},_=!1;for(let[e,t]of m)t.kind!==`skip`&&(t.entry&&(g[e]=t.entry,_=!0),t.kind===`failed`?i.failed.push(e):t.changed&&i.updated.push(e));if(_)try{a.setItem(o,JSON.stringify(g))}catch{}return i}var _=t(`model-catalog`),v=36e5,y=null;async function b(e,t=!1){let n=await g({workerBaseUrl:l(e),providers:c(),storage:e.storage,force:t});return n.updated.length>0&&_.info(`Model catalogue refreshed`,{providers:n.updated}),n.failed.length>0&&_.debug(`Model catalogue refresh failed`,{providers:n.failed}),n}function x(e,t=v){return S(),y=setInterval(()=>{b(e)},t),b(e)}function S(){y!==null&&(clearInterval(y),y=null)}export{x as setupModelCatalog};
@@ -1 +1 @@
1
- import"./bridge-protocol-C52CnDIj.js";import{M as e}from"./main-DfG-7olk.js";function t(t){try{let n=new URL(t);return n.searchParams.has(`bridge`)?!0:!e(n.hostname)}catch{return!1}}function n(n,r){let i=t(n.pageHref),a=r();if(i){if(n.configuredRedirectUri){let t=``;try{t=new URL(n.configuredRedirectUri).origin}catch{t=``}if(t&&n.pageOrigin===t){let e=btoa(JSON.stringify({source:`opener`,path:`/auth/callback`,nonce:a}));return{redirectUri:n.configuredRedirectUri,oauthState:e,expectedNonce:a,source:`opener`}}let r=null;try{r=new URL(n.pageHref)}catch{r=null}if(r!==null&&r.protocol===`http:`&&e(r.hostname)&&r.port!==``&&r){let e=parseInt(r.port,10),t=btoa(JSON.stringify({source:`local`,port:e,path:`/auth/callback`,nonce:a}));return{redirectUri:n.configuredRedirectUri,oauthState:t,expectedNonce:a,source:`local`}}}return{redirectUri:`${n.pageOrigin}/auth/callback`,oauthState:btoa(JSON.stringify({source:`opener`,path:`/auth/callback`,nonce:a})),expectedNonce:a,source:`opener`}}let o=n.configuredRedirectUri??`${n.pageOrigin}/auth/callback`,s=parseInt(new URL(n.pageHref).port||`5710`,10);return{redirectUri:o,oauthState:btoa(JSON.stringify({port:s,path:`/auth/callback`,nonce:a})),expectedNonce:a,source:`local`}}var r=3e5;function i(e=r){let t=0;return{async run(n,r=Date.now()){if(r<t)return null;let i=null;try{i=await n()}catch(e){console.debug(`[silent-renew-backoff] renew threw:`,e instanceof Error?e.message:String(e)),i=null}return t=i?0:r+e,i},inCooldown(e=Date.now()){return e<t}}}export{n,t as r,i as t};
1
+ import"./bridge-protocol-C52CnDIj.js";import{M as e}from"./main-pp1LzVcX.js";function t(t){try{let n=new URL(t);return n.searchParams.has(`bridge`)?!0:!e(n.hostname)}catch{return!1}}function n(n,r){let i=t(n.pageHref),a=r();if(i){if(n.configuredRedirectUri){let t=``;try{t=new URL(n.configuredRedirectUri).origin}catch{t=``}if(t&&n.pageOrigin===t){let e=btoa(JSON.stringify({source:`opener`,path:`/auth/callback`,nonce:a}));return{redirectUri:n.configuredRedirectUri,oauthState:e,expectedNonce:a,source:`opener`}}let r=null;try{r=new URL(n.pageHref)}catch{r=null}if(r!==null&&r.protocol===`http:`&&e(r.hostname)&&r.port!==``&&r){let e=parseInt(r.port,10),t=btoa(JSON.stringify({source:`local`,port:e,path:`/auth/callback`,nonce:a}));return{redirectUri:n.configuredRedirectUri,oauthState:t,expectedNonce:a,source:`local`}}}return{redirectUri:`${n.pageOrigin}/auth/callback`,oauthState:btoa(JSON.stringify({source:`opener`,path:`/auth/callback`,nonce:a})),expectedNonce:a,source:`opener`}}let o=n.configuredRedirectUri??`${n.pageOrigin}/auth/callback`,s=parseInt(new URL(n.pageHref).port||`5710`,10);return{redirectUri:o,oauthState:btoa(JSON.stringify({port:s,path:`/auth/callback`,nonce:a})),expectedNonce:a,source:`local`}}var r=3e5;function i(e=r){let t=0;return{async run(n,r=Date.now()){if(r<t)return null;let i=null;try{i=await n()}catch(e){console.debug(`[silent-renew-backoff] renew threw:`,e instanceof Error?e.message:String(e)),i=null}return t=i?0:r+e,i},inCooldown(e=Date.now()){return e<t}}}export{n,t as r,i as t};
@@ -0,0 +1 @@
1
+ function e(){return{version:`6.248.4`,releasedAt:`2026-10-12T20:05:15Z`,buildId:`6.248.4-mv5olqux`}}let t=null;function n(e){t=e}function r(){return t}export{e as n,n as r,r as t};
@@ -1 +1 @@
1
- import{t as e}from"./logger-DDBAeTLF.js";import{et as t}from"./wc-shell-fIEX0Fr7.js";var n=e(`speech:soundscape`),r=`soundscape-enabled`;function i(){try{return localStorage.getItem(r)!==`false`}catch{return!0}}var a=0,o=!1;function s(){a++}function c(){a>0&&a--}function l(){return a>0}function u(e){o=e}function d(){return o}var f=null;function p(){return typeof AudioContext>`u`?null:((!f||f.state===`closed`)&&(f=new AudioContext),f)}function m(e){if(!i()||!l()||d())return;let r=p();if(r)try{r.state===`suspended`&&r.resume(),t(r,e)}catch(e){n.debug(`soundscape cue failed`,e)}}export{s as beginVoiceTurn,c as endVoiceTurn,m as playCue,u as setTtsActive};
1
+ import{t as e}from"./logger-DDBAeTLF.js";import{et as t}from"./wc-shell-C0Y0f1tt.js";var n=e(`speech:soundscape`),r=`soundscape-enabled`;function i(){try{return localStorage.getItem(r)!==`false`}catch{return!0}}var a=0,o=!1;function s(){a++}function c(){a>0&&a--}function l(){return a>0}function u(e){o=e}function d(){return o}var f=null;function p(){return typeof AudioContext>`u`?null:((!f||f.state===`closed`)&&(f=new AudioContext),f)}function m(e){if(!i()||!l()||d())return;let r=p();if(r)try{r.state===`suspended`&&r.resume(),t(r,e)}catch(e){n.debug(`soundscape cue failed`,e)}}export{s as beginVoiceTurn,c as endVoiceTurn,m as playCue,u as setTtsActive};
@@ -1,3 +1,3 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/transformers.web-BBJR2ai3.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/preload-helper-Czpn1I53.js","assets/kokoro-GYPr9LPo.js","assets/__vite-browser-external-5eBdwsFd.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import{n}from"./runtime-env-Dlaokqg1.js";import{t as r}from"./speech-assets-bridge-CFYafE89.js";import{i,n as a,o,r as s,t as c}from"./transformers-env-C6K6s36u.js";var l=t(`speech:espeak`),u=`/workspace/node_modules/espeak-ng/dist/`,d=`espeak-ng.js`,f=`espeak-ng.wasm`;async function p(e,t,n,r){let i=`phonemes.txt`;return(await e({arguments:[`-q`,`-b=1`,`--ipa`,`-v`,n,`--phonout`,i,t],...r?{locateFile:r}:{}})).FS.readFile(i,{encoding:`utf8`}).split(`
2
+ import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import{n}from"./runtime-env-Dlaokqg1.js";import{t as r}from"./speech-assets-bridge-CFYafE89.js";import{i,n as a,o,r as s,t as c}from"./transformers-env-C6_kFf6e.js";var l=t(`speech:espeak`),u=`/workspace/node_modules/espeak-ng/dist/`,d=`espeak-ng.js`,f=`espeak-ng.wasm`;async function p(e,t,n,r){let i=`phonemes.txt`;return(await e({arguments:[`-q`,`-b=1`,`--ipa`,`-v`,n,`--phonout`,i,t],...r?{locateFile:r}:{}})).FS.readFile(i,{encoding:`utf8`}).split(`
3
3
  `).map(e=>e.trim()).filter(e=>e.length>0)}function ee(e,t){return async n=>{let r=URL.createObjectURL(new Blob([new Uint8Array(t)],{type:`application/wasm`}));try{let t=e=>e.endsWith(`.wasm`)?r:n.locateFile?.(e)??e;return await e({...n,locateFile:t})}finally{URL.revokeObjectURL(r)}}}function m(e){if(typeof BroadcastChannel>`u`)return Promise.reject(Error(`Cannot read VFS path ${e}: BroadcastChannel unavailable`));let t=new BroadcastChannel(`preview-vfs`),n=`espeak-${Date.now()}-${Math.random().toString(36).slice(2)}`;return new Promise((r,i)=>{let a=e=>{t.removeEventListener(`message`,c),t.close(),e()},o,s=()=>{clearTimeout(o),o=setTimeout(()=>a(()=>i(Error(`ENOENT: ${e} (timed out)`))),3e4)};s();let c=t=>{let c=t.data;if(!(!c||c.id!==n)){if(c.type===`preview-vfs-start`){s();return}if(c.type===`preview-vfs-response`){if(clearTimeout(o),typeof c.error==`string`)a(()=>i(Error(c.error)));else if(c.content instanceof Uint8Array){let e=c.content;a(()=>r(e))}else if(typeof c.content==`string`){let e=c.content;a(()=>r(new TextEncoder().encode(e)))}else a(()=>i(Error(`Empty preview-vfs response for ${e}`)))}}};t.addEventListener(`message`,c),t.postMessage({type:`preview-vfs-read`,id:n,path:e,asText:!1})})}async function te(){let[t,n]=await Promise.all([m(`${u}${d}`),m(`${u}${f}`)]),r=URL.createObjectURL(new Blob([new Uint8Array(t)],{type:`text/javascript`}));try{return{factory:ee((await e(()=>import(r),[])).default,n)}}finally{URL.revokeObjectURL(r)}}var ne=te,h=null;function g(){return h||=ne().then(({factory:e,locateFile:t})=>(l.info(`espeak-ng multilingual phonemizer loaded`),(n,r)=>p(e,n,r,t)),e=>{throw h=null,l.error(`espeak-ng load failed`,e),e}),h}var re=Object.freeze({e:`es`,f:`fr-fr`,i:`it`,h:`hi`,p:`pt-br`});function _(e){return re[e[0]]??null}var ie=Object.freeze({a:`en-us`,b:`en-gb`});function ae(e){return ie[e[0]]??null}function oe(e){let t=e instanceof Error?e.message:String(e);return/Invalid language identifier/i.test(t)&&/Should be one of:\s*\.?\s*$/i.test(t)}var se=RegExp(`(\\s*[${`;:,.!?¡¿—…"«»“”(){}[]`.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}]+\\s*)+`,`g`);function ce(e){let t=[],n=0;for(let r of e.matchAll(se)){let i=r[0],a=r.index??0;n<a&&t.push({punct:!1,text:e.slice(n,a)}),i.length>0&&t.push({punct:!0,text:i}),n=a+i.length}return n<e.length&&t.push({punct:!1,text:e.slice(n)}),t}function le(e){return e.replace(/kəkˈoːɹoʊ/g,`kˈoʊkəɹoʊ`).replace(/kəkˈɔːɹəʊ/g,`kˈəʊkəɹəʊ`).replace(/(?<=[a-zɹrː])(?=hˈʌndɹɪd)/g,` `).replace(/ z(?=[;:,.!?¡¿—…"«»“” ]|$)/g,`z`).trim()}async function ue(e,t,n){let r=ce(e);return le((await Promise.all(r.map(async e=>e.punct?e.text:(await n(e.text,t)).join(` `)))).join(``))}var v=t(`speech:kokoro`),y={a:`en-US`,b:`en-GB`,e:`es-ES`,f:`fr-FR`,i:`it-IT`,h:`hi-IN`,p:`pt-BR`,j:`ja-JP`,z:`zh-CN`},b=new Set([`en-US`,`en-GB`,`es-ES`,`fr-FR`,`it-IT`,`hi-IN`,`pt-BR`]);function x(e){let[t,n]=e.split(`-`);return n?`${t.toLowerCase()}-${n.toUpperCase()}`:t.toLowerCase()}function S(e,t){if(!t)return!1;if(b.has(t))return!0;if(t.includes(`-`))return!1;let n=y[e[0]];return n!==void 0&&b.has(n)&&n.split(`-`)[0].toLowerCase()===t}function de(e){return Object.entries(e).map(([e,t])=>{let n=t.language?x(t.language):y[e[0]];return{id:e,name:t.name||e,lang:n??`en-US`,onDevice:S(e,n),...t.gender?{gender:t.gender}:{}}})}var fe=Object.freeze({ef_dora:{name:`Dora`,gender:`Female`},em_alex:{name:`Alex`,gender:`Male`},em_santa:{name:`Santa`,gender:`Male`},ff_siwis:{name:`Siwis`,gender:`Female`},hf_alpha:{name:`Alpha`,gender:`Female`},hf_beta:{name:`Beta`,gender:`Female`},hm_omega:{name:`Omega`,gender:`Male`},hm_psi:{name:`Psi`,gender:`Male`},if_sara:{name:`Sara`,gender:`Female`},im_nicola:{name:`Nicola`,gender:`Male`},pf_dora:{name:`Dora`,gender:`Female`},pm_alex:{name:`Alex`,gender:`Male`},pm_santa:{name:`Santa`,gender:`Male`},jf_alpha:{name:`Alpha`,gender:`Female`},jf_gongitsune:{name:`Gongitsune`,gender:`Female`},jf_nezumi:{name:`Nezumi`,gender:`Female`},jf_tebukuro:{name:`Tebukuro`,gender:`Female`},jm_kumo:{name:`Kumo`,gender:`Male`},zf_xiaobei:{name:`Xiaobei`,gender:`Female`},zf_xiaoni:{name:`Xiaoni`,gender:`Female`},zf_xiaoxiao:{name:`Xiaoxiao`,gender:`Female`},zf_xiaoyi:{name:`Xiaoyi`,gender:`Female`},zm_yunjian:{name:`Yunjian`,gender:`Male`},zm_yunxi:{name:`Yunxi`,gender:`Male`},zm_yunxia:{name:`Yunxia`,gender:`Male`},zm_yunyang:{name:`Yunyang`,gender:`Male`}});function C(e){let t={...e};for(let[e,n]of Object.entries(fe))e in t||(t[e]=n);return de(t)}var w=`style_text_to_speech_2`,T=`StyleTextToSpeech2Model`;function pe(e){return e?.model_type===w&&(!Array.isArray(e.architectures)||e.architectures.length===0)&&(e.architectures=[T]),e}var E=Symbol.for(`slicc.kokoro.style-tts2-arch-shim`);function me(e){let t=e?.AutoConfig,n=t?.from_pretrained;if(!t||typeof n!=`function`){v.debug(`style_text_to_speech_2 shim skipped: AutoConfig.from_pretrained unavailable`);return}if(n[E])return;let r=async(...e)=>{let r=await n.apply(t,e),i=r?.model_type===w&&(!Array.isArray(r.architectures)||r.architectures.length===0);return pe(r),i&&v.debug(`style_text_to_speech_2 architectures injected for "${String(e[0])}": [${T}]`),r};r[E]=!0,t.from_pretrained=r,v.debug(`style_text_to_speech_2 architecture shim installed on AutoConfig.from_pretrained`)}async function D(e,t,n,r,i,a){let o=await ue(t,n,a),s=e.tokenizer,{input_ids:c}=s(o,{truncation:!0}),l=await e.generate_from_ids(c,{voice:r,...i?{speed:i}:{}});return{audio:l.audio,sampleRate:l.sampling_rate}}var he=/(?<=[.!?。!?…])\s+|\n{2,}/u;function O(e,t){let n=t??he,r=e.split(n).map(e=>e.trim()).filter(e=>e.length>0),i=e.trim();return r.length>0?r:i?[i]:[]}var k=null,A=`idle`,j=null,M=null;function N(){return A}function P(){return j}function F(){return M}function I(e){return k||=(A=`loading`,L(e).then(e=>(A=`ready`,M=e,e),e=>{throw A=`failed`,k=null,v.error(`kokoro load failed`,e),e})),k}async function L(t){let n=await e(()=>import(`./transformers.web-BBJR2ai3.js`),__vite__mapDeps([0,1,2]));a(n.env),me(n),await c(i),await s();let{KokoroTTS:r,TextSplitterStream:l}=await e(async()=>{let{KokoroTTS:e,TextSplitterStream:t}=await import(`./kokoro-GYPr9LPo.js`);return{KokoroTTS:e,TextSplitterStream:t}},__vite__mapDeps([3,1,4,0,2])),u=o(),d=typeof navigator<`u`&&`gpu`in navigator,f=await r.from_pretrained(i,{device:d?`webgpu`:`wasm`,dtype:d?`fp32`:`q8`,progress_callback:e=>{if(e?.file){if(e.status===`progress`)u.update(e.file,e.loaded??0,e.total??0);else if(e.status===`done`)u.complete(e.file);else return;j=u.snapshot(),t?.(j)}}});v.info(`kokoro ready`,{model:i,device:d?`webgpu`:`wasm`});let p=C(f.voices);return{async synthesize(e,t){let r=t?.voice??`af_heart`,i=_(r);if(i){let n=await g();return D(f,e,i,r,t?.speed,n)}try{let r=performance.now(),i=await f.generate(e,{...t?.voice?{voice:t.voice}:{},...t?.speed?{speed:t.speed}:{}}),a=i.audio;return v.info(`kokoro synthesize`,{elapsedMs:Math.round(performance.now()-r),chars:e.length,audioSeconds:Math.round(a.length/i.sampling_rate*100)/100,numThreads:n.env.backends?.onnx?.wasm?.numThreads}),{audio:a,sampleRate:i.sampling_rate}}catch(n){let i=await R(n,r);if(!i)throw n;return D(f,e,i.lang,r,t?.speed,i.phonemize)}},async*synthesizeStream(e,t){let r=t?.voice??`af_heart`,i=_(r);if(i){let n=await g();for(let a of O(e,t?.splitPattern))yield await D(f,a,i,r,t?.speed,n);return}let a={...t?.voice?{voice:t.voice}:{},...t?.speed?{speed:t.speed}:{}},o=new l;if(t?.splitPattern){let n=e.split(t.splitPattern).map(e=>e.trim()).filter(e=>e.length>0);o.push(...n)}else o.push(e);o.close();try{let t=performance.now(),r=0,i=0,s=0;for await(let e of f.stream(o,a)){let t=e.audio.audio;r+=1,i+=t.length,s=e.audio.sampling_rate,yield{audio:t,sampleRate:s}}v.info(`kokoro synthesizeStream`,{elapsedMs:Math.round(performance.now()-t),chunks:r,chars:e.length,audioSeconds:s?Math.round(i/s*100)/100:0,numThreads:n.env.backends?.onnx?.wasm?.numThreads})}catch(n){let i=await R(n,r);if(!i)throw n;for(let n of O(e,t?.splitPattern))yield await D(f,n,i.lang,r,t?.speed,i.phonemize)}},voices:()=>p}}async function R(e,t){if(!oe(e))return null;let n=ae(t);if(!n)return null;try{let e=await g();return v.warn(`kokoro bundled phonemizer reported no languages; phonemizing English with the staged espeak-ng`,{voiceId:t,lang:n}),{lang:n,phonemize:e}}catch(e){return v.warn(`staged espeak-ng unavailable, cannot recover English synthesis`,{error:String(e)}),null}}var z=44,B=16,V=1,H=B/8;function U(e,t,n){for(let r=0;r<n.length;r++)e.setUint8(t+r,n.charCodeAt(r))}function ge(e){let t=Math.max(-1,Math.min(1,e));return Math.round(t<0?t*32768:t*32767)}function _e(e){if(e.length===0)throw Error(`wav-encode: at least one PCM chunk is required`);let t=e[0].sampleRate;if(!Number.isFinite(t)||t<=0)throw Error(`wav-encode: invalid sample rate ${t}`);let n=0;for(let r of e){if(r.sampleRate!==t)throw Error(`wav-encode: mixed sample rates (${r.sampleRate} vs ${t}) — resample upstream`);n+=r.audio.length}let r=n*V*H,i=new ArrayBuffer(z+r),a=new DataView(i);U(a,0,`RIFF`),a.setUint32(4,36+r,!0),U(a,8,`WAVE`),U(a,12,`fmt `),a.setUint32(16,16,!0),a.setUint16(20,1,!0),a.setUint16(22,V,!0),a.setUint32(24,t,!0),a.setUint32(28,t*V*H,!0),a.setUint16(32,2,!0),a.setUint16(34,B,!0),U(a,36,`data`),a.setUint32(40,r,!0);let o=z;for(let t of e)for(let e=0;e<t.audio.length;e++)a.setInt16(o,ge(t.audio[e]),!0),o+=H;return new Uint8Array(i)}var W=t(`speech:speak`),G=2e4;function K(e){return e.toLowerCase().startsWith(`en`)}function ve(e,t){if(!t.ready)return`webspeech`;let n=e=>e.onDevice&&(K(e.lang)||t.nonEnglishOnDevice);if(e.voice){let r=t.voices.find(t=>t.id===e.voice);return r&&n(r)?`kokoro`:`webspeech`}let r=(e.lang?e.lang.split(`-`)[0]:`en`).toLowerCase();return t.voices.some(e=>e.lang.split(`-`)[0].toLowerCase()===r&&n(e))?`kokoro`:`webspeech`}function ye(e,t){if(!e||K(e))return;let n=e.split(`-`)[0].toLowerCase();return t.find(e=>e.onDevice&&e.lang.split(`-`)[0].toLowerCase()===n)?.id}var be=48;function xe(e){let t=e;return t=t.replace(/```[\s\S]*?```/g,` `),t=t.replace(/~~~[\s\S]*?~~~/g,` `),t=t.replace(/(?:```|~~~)[\s\S]*$/,` `),t=t.replace(/!\[([^\]]*)\]\([^)]*\)/g,`$1`),t=t.replace(/\[([^\]]+)\]\([^)]*\)/g,`$1`),t=t.replace(/`([^`]*)`/g,(e,t)=>t.length>be?` `:t),t=t.replace(/<[^>\n]+>/g,` `),t=t.replace(/^[ \t]{0,3}#{1,6}[ \t]+/gm,``),t=t.replace(/^[ \t]*>[ \t]?/gm,``),t=t.replace(/^[ \t]*(?:[-*+]|\d+[.)])[ \t]+/gm,``),t=t.replace(/[*_~]{1,3}([^*_~]+)[*_~]{1,3}/g,`$1`),t=t.replace(/\s+/g,` `).trim(),t.length>G&&(t=`${t.slice(0,G).replace(/\s+\S*$/,``)}…`),t}var q=n;function Se(e){return e.onDevice&&(K(e.lang)||!q())}function J(){return F()?.voices().map(e=>({...e,onDevice:Se(e)}))??[]}async function Y(){if(typeof speechSynthesis>`u`)return[];let e=speechSynthesis.getVoices();return e.length>0||typeof speechSynthesis.addEventListener!=`function`?e:new Promise(e=>{let t=()=>{clearTimeout(r),speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())},n=()=>t(),r=setTimeout(t,2e3);speechSynthesis.addEventListener(`voiceschanged`,n)})}async function Ce(e){let t=e.split(`-`)[0]?.toLowerCase();return t?J().some(e=>e.onDevice&&e.lang.split(`-`)[0].toLowerCase()===t)?!0:(await Y()).some(e=>e.lang.split(`-`)[0].toLowerCase()===t):!1}var X;function we(e){X=e}function Z(){let e=P();return{state:N(),...e?{loaded:e.loaded,total:e.total,etaSeconds:e.etaSeconds}:{}}}async function Te(){try{q()||await r({instanceId:X})}catch(e){W.warn(`kokoro asset staging failed; trying already-present weights`,e)}try{await I()}catch(e){W.warn(`kokoro warmup load failed`,e)}}function Q(){return Te(),Z()}var $=null;function Ee(){return(!$||$.state===`closed`)&&($=new AudioContext),$}async function De(e,t,n=1){let r=Ee();r.state===`suspended`&&await r.resume();let i=r.createBuffer(1,e.length,t);i.copyToChannel(new Float32Array(e),0);let a=r.createBufferSource();a.buffer=i;let o=r.createGain();o.gain.value=n,a.connect(o),o.connect(r.destination),await new Promise(e=>{a.onended=()=>e(),a.start()})}async function Oe(e){if(typeof speechSynthesis>`u`)throw Error(`speechSynthesis is unavailable in this realm`);let t=await Y();return new Promise((n,r)=>{let i=new SpeechSynthesisUtterance(e.text);if(e.lang!==void 0&&(i.lang=e.lang),e.rate!==void 0&&(i.rate=e.rate),e.pitch!==void 0&&(i.pitch=e.pitch),e.volume!==void 0&&(i.volume=e.volume),e.voice){let n=t.find(t=>t.name===e.voice);n&&(i.voice=n)}else if(e.lang){let n=e.lang.split(`-`)[0].toLowerCase(),r=t.find(e=>e.lang.split(`-`)[0].toLowerCase()===n);r&&(i.voice=r)}i.onend=()=>n(),i.onerror=e=>r(Error(`speak: ${e.error||`utterance failed`}`)),speechSynthesis.speak(i)})}async function ke(e){let t=F(),n=t?.voices()??[];if(ve(e,{ready:t!==null,voices:n,nonEnglishOnDevice:!q()})===`kokoro`&&t){let r=e.voice??ye(e.lang,n),i=0;try{let n=t.synthesizeStream(e.text,{...r?{voice:r}:{},...e.rate?{speed:e.rate}:{}});for await(let t of n)await De(t.audio,t.sampleRate,e.volume),i++;return{engine:`kokoro`}}catch(e){if(i>0)return W.warn(`kokoro stream failed mid-playback; stopping`,e),{engine:`kokoro`};W.warn(`kokoro synthesis failed; falling back to webspeech`,e)}}return await Oe(e),{engine:`webspeech`}}async function Ae(e){let t=F();if(!t)throw Error(`on-device voice not ready — run say --warmup and retry once it reports ready`);if(e.lang&&!e.lang.toLowerCase().startsWith(`en`))throw Error(`-o writes WAV via the on-device voice, which is English-only (got ${e.lang})`);if(e.voice&&!t.voices().map(e=>e.id).includes(e.voice))throw Error(`-o writes WAV via the on-device voice; "${e.voice}" is a Web Speech voice. Pick a kokoro voice (e.g. af_heart) or omit -v.`);let n=[],r=t.synthesizeStream(e.text,{...e.voice?{voice:e.voice}:{},...e.rate?{speed:e.rate}:{}});for await(let e of r)n.push({audio:e.audio,sampleRate:e.sampleRate});if(n.length===0)throw Error(`kokoro produced no audio (text is empty after sentence split?)`);return _e(n)}export{Ce as hasVoiceForLang,Z as kokoroStatus,J as kokoroVoicesIfReady,Q as kokoroWarmup,we as setSpeakAssetsInstanceId,ke as speak,xe as speechTextFromMarkdown,Ae as synthesizeToWav};
@@ -1 +1 @@
1
- import{t as e}from"./logger-DDBAeTLF.js";import{a as t}from"./feature-flags-DvsApnS-.js";import{r as n,t as r}from"./sprinkle-renderer-B9Kv4iHS.js";import{n as i,t as a}from"./panel-rpc-accessor-B4BfPLSo.js";import{s as o}from"./telemetry-B0sKnLBU.js";import{t as s}from"./permissions-surface-registry-CilCRwhh.js";import{n as c,t as l}from"./bounded-walk-BjxKWNqp.js";import"./sprinkle-instances-B8n7h-oP.js";var u=[`/workspace`,`/shared`,`/scoops`,`/home`],d=[`/shared/sprinkles`],f=6,p=500,m=new Set([`connect-llm`,`welcome`]);function h(e){return m.has(e)?!0:e===`suggestions`&&!t(`memory-v2`)}async function g(e){let t=new Map;for(let n of[...d,...u])await e.exists(n)&&await _(e,n,t);return t}async function _(e,t,n){let r=c(e,t,{maxDepth:f,maxDirs:p,skip:l});for await(let t of r){if(!t.endsWith(`.shtml`))continue;let r=v(t);if(!h(r)&&!n.has(r)){let i;try{i=await e.readFile(t,{encoding:`utf-8`})??``}catch{i=``}n.set(r,{name:r,path:t,title:y(i,r),autoOpen:b(i),icon:x(i)})}}}function v(e){let t=e.split(`/`).pop()??e;return t.endsWith(`.shtml`)?t.slice(0,-6):t}function y(e,t){let n=e.match(/data-sprinkle-title=["']([^"']+)["']/);if(n)return n[1];let r=e.match(/<title>([^<]+)<\/title>/i);return r?r[1].trim():t}function b(e){return/data-sprinkle-autoopen\b/.test(e)}function x(e){let t=/<link\b/gi,n;for(;(n=t.exec(e))!==null;){let t=n.index+n[0].length,r=S(e,t);if(r<0)continue;let i=e.slice(t,r);if(!/\brel\s*=\s*("|')\s*(?:shortcut\s+)?icon\s*\1/i.test(i))continue;let a=C(i,`href`);if(a!==void 0)return a.trim()}let r=C(e,`data-sprinkle-icon`);if(r!==void 0)return r.trim()}function S(e,t){let n=!1,r=!1;for(let i=t;i<e.length;i++){let t=e.charCodeAt(i);if(n)t===34&&(n=!1);else if(r)t===39&&(r=!1);else if(t===34)n=!0;else if(t===39)r=!0;else if(t===62)return i}return-1}function C(e,t){let n=RegExp(`\\b${t}\\s*=\\s*(?:"([^"]*)"|'([^']*)')`,`i`),r=e.match(n);if(r)return r[1]??r[2]??void 0}var w=e(`sprinkle-manager`);async function T(){let e=s();if(e){let t=await e.prompt({kinds:[`screenshare`],description:`A sprinkle asks to share a screen.`,requestOptions:{screenshare:{constraints:{video:!0,audio:!1}}}}),n=t.status===`granted`?t.grants.find(e=>e.kind===`screenshare`):void 0;if(!n){let e=t.message?`: ${t.message}`:``,n=t.reason??t.status;throw Error(n===`cancelled`||t.status===`cancelled`?`Screen capture cancelled`:`Screen capture ${n}${e}`)}return n.stream}if(!navigator.mediaDevices?.getDisplayMedia)throw Error(`Screen capture not supported in this browser`);return navigator.mediaDevices.getDisplayMedia({video:!0,audio:!1})}var E=`slicc-open-sprinkles`,D=`sprinkles`;function O(){try{if(typeof window>`u`||!window.location)return null;let e=new URLSearchParams(window.location.search).get(D);return e===null?null:e===``?[]:e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0)}catch{return null}}function k(e){try{if(typeof window>`u`||!window.location||typeof history>`u`||typeof history.replaceState!=`function`)return;let t=new URL(window.location.href);e.length===0?t.searchParams.delete(D):t.searchParams.set(D,e.join(`,`));let n=t.pathname+t.search+t.hash;history.replaceState(history.state??null,``,n)}catch{}}var A=`slicc-known-sprinkles`;function j(e){try{let t=new Set(e),n=M().filter(e=>t.has(e));localStorage.setItem(A,JSON.stringify(n))}catch{}}function M(){try{let e=localStorage.getItem(A);if(!e)return[];let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`string`):[]}catch{return[]}}var N=`slicc-autoopened-once`,P=u,F=250,I=class{fs;bridge;callbacks;availableSprinkles=new Map;watcherUnsub;openSprinkles=new Map;attentionOnly=new Set;rendererOperationTails=new Map;inflightRefresh=null;lastRefreshAt=0;autoOpenBehavior;onSendToSprinkle;onSprinkleReloaded;resolveLickOriginUnitId;registeredSprinkles=new Set;inlineSprinkles;changeListeners=new Set;changeNotifyScheduled=!1;urlWriteScheduled=!1;constructor(e,t,r,o,s={}){this.fs=e;let c=async()=>{let e=`image/png`,t=i(),n=a();if(!t&&!n)throw Error(`Screen capture unavailable in this environment`);let r,o,s;if(t){let t=await T();try{let n=document.createElement(`video`);n.srcObject=t,n.muted=!0,n.playsInline=!0,await new Promise((e,t)=>{n.onloadedmetadata=()=>n.play().then(()=>e()).catch(t),n.onerror=()=>t(Error(`Failed to load video stream`))}),await new Promise(e=>setTimeout(e,100)),o=n.videoWidth,s=n.videoHeight;let i=document.createElement(`canvas`);i.width=o,i.height=s;let a=i.getContext(`2d`);if(!a)throw Error(`Failed to get canvas context`);a.drawImage(n,0,0,o,s),r=await(await new Promise((t,n)=>{i.toBlob(e=>e?t(e):n(Error(`Failed to create image blob`)),e,1)})).arrayBuffer()}finally{for(let e of t.getTracks())e.stop()}}else{let t=await n.call(`screencapture`,{mimeType:e,quality:1},{timeoutMs:3e5});r=t.bytes,o=t.width,s=t.height}let c=new Uint8Array(r),l=[],u=8192;for(let e=0;e<c.length;e+=u)l.push(String.fromCharCode(...c.subarray(e,e+u)));return{base64:btoa(l.join(``)),width:o,height:s,mimeType:e}};this.bridge=new n(e,t,e=>this.close(e),e=>this.minimize(e),o,s.onAttachImage??(()=>{}),c,s.execHandler,(e,t,n)=>{this.openSprinkles.get(e)?.renderer.pushDeviceEvent(t,n)},s.selectScoopHandler,s.selectedScoopHandler),this.callbacks=r,this.autoOpenBehavior=s.autoOpenBehavior??`activate`,this.onSendToSprinkle=s.onSendToSprinkle,this.onSprinkleReloaded=s.onSprinkleReloaded,this.resolveLickOriginUnitId=s.resolveLickOriginUnitId,this.inlineSprinkles=s.inlineSprinkles??new Set}setSendToSprinkleHook(e){this.onSendToSprinkle&&!e&&w.error(`SprinkleManager broadcast hook detached`),this.onSendToSprinkle=e}setReloadHook(e){this.onSprinkleReloaded=e}enqueueRendererOperation(e,t){let n=(this.rendererOperationTails.get(e)??Promise.resolve()).then(t,t);return this.rendererOperationTails.set(e,n),n.finally(()=>{this.rendererOperationTails.get(e)===n&&this.rendererOperationTails.delete(e)})}reload(e){return this.enqueueRendererOperation(e,()=>this.reloadNow(e))}async reloadNow(e){let t=this.openSprinkles.get(e);if(!t){w.info(`Cannot reload closed sprinkle`,{name:e});return}let n=this.availableSprinkles.get(e);if(n||=(await this.refresh(),this.availableSprinkles.get(e)),!n){w.warn(`Sprinkle not found during reload`,{name:e});return}let i=await this.fs.readFile(n.path,{encoding:`utf-8`});if(i==null){w.warn(`Failed to read sprinkle content during reload`,{name:e});return}let a=typeof i==`string`?i:new TextDecoder(`utf-8`).decode(i);t.renderer?.dispose(),this.bridge.removeSprinkle(e);let o=this.bridge.createAPI(e,()=>t.lickOriginUnitId),s=new r(t.container,o);if(await s.render(a,e),!this.openSprinkles.has(e)){s.dispose();return}if(t.renderer=s,s.activateBridgeLifecycle(),this.openSprinkles.has(e)&&(w.info(`Sprinkle reloaded`,{name:e}),this.notifyChange(),this.onSprinkleReloaded))try{this.onSprinkleReloaded(e)}catch(t){w.error(`onSprinkleReloaded hook threw`,{name:e,error:t instanceof Error?t.message:String(t)})}}async restoreOpenSprinkles(){try{let e=O();if(e!==null){await this.reopenInBackground(e);return}let t=localStorage.getItem(E);t?await this.restoreFromLegacyStorage(t):await this.autoOpenFirstRun()}catch{}await this.surfaceUnseenSprinkles()}async reopenInBackground(e){for(let t of e)try{await this.open(t,void 0,{background:!0})}catch{w.warn(`Failed to restore sprinkle`,{name:t})}}async restoreFromLegacyStorage(e){try{await this.reopenInBackground(JSON.parse(e))}finally{try{localStorage.removeItem(E)}catch{}}}async autoOpenFirstRun(){let e=this.autoOpenBehavior===`attention`,t=this.loadAutoOpenedOnce(),n=new Set;for(let r of this.availableSprinkles.values())if(!(!r.autoOpen||t.has(r.name)))try{await this.open(r.name,void 0,{attention:e}),n.add(r.name)}catch{w.warn(`Failed to auto-open sprinkle`,{name:r.name})}n.size>0&&this.persistAutoOpenedOnce(n)}async surfaceUnseenSprinkles(){let e=this.loadKnownSprinkles(),t=this.loadAutoOpenedOnce(),n=this.autoOpenBehavior===`attention`,r=new Set;for(let i of this.availableSprinkles.values())if(!e.has(i.name)&&!this.openSprinkles.has(i.name)&&!(i.autoOpen&&t.has(i.name)))try{await this.open(i.name,void 0,{attention:!i.autoOpen||n}),i.autoOpen&&r.add(i.name),w.info(`Surfaced previously-unseen sprinkle`,{name:i.name})}catch{w.warn(`Failed to surface unseen sprinkle`,{name:i.name})}this.persistKnownSprinkles(new Set(this.availableSprinkles.keys())),r.size>0&&this.persistAutoOpenedOnce(r)}loadKnownSprinkles(){return new Set(M())}persistKnownSprinkles(e){try{let t=new Set([...this.loadKnownSprinkles(),...e]);localStorage.setItem(A,JSON.stringify([...t]))}catch{}}loadAutoOpenedOnce(){try{let e=localStorage.getItem(N);if(!e)return new Set;let t=JSON.parse(e);return Array.isArray(t)?new Set(t.filter(e=>typeof e==`string`)):new Set}catch{return new Set}}persistAutoOpenedOnce(e){try{let t=new Set([...this.loadAutoOpenedOnce(),...e]);localStorage.setItem(N,JSON.stringify([...t]))}catch{}}persistOpenSprinkles(){try{let e=[...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e));localStorage.setItem(E,JSON.stringify(e))}catch{}this.schedulePersistOpenSprinklesToUrl()}schedulePersistOpenSprinklesToUrl(){this.urlWriteScheduled||(this.urlWriteScheduled=!0,queueMicrotask(()=>{this.urlWriteScheduled=!1,k([...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e)))}))}async openNewAutoOpenSprinkles(){if(this.inflightRefresh!==null)return this.inflightRefresh;if(!(Date.now()-this.lastRefreshAt<F))return this.inflightRefresh=this.runOpenNewAutoOpenSprinkles().finally(()=>{this.lastRefreshAt=Date.now(),this.inflightRefresh=null}),this.inflightRefresh}async runOpenNewAutoOpenSprinkles(){let e=new Set(this.availableSprinkles.keys());await this.refresh();let t=this.autoOpenBehavior===`attention`,n=this.loadAutoOpenedOnce(),r=new Set,i=!1;for(let a of this.availableSprinkles.values())if(!this.openSprinkles.has(a.name)&&!e.has(a.name)){if(i=!0,a.autoOpen){if(n.has(a.name)){w.info(`Skipped one-shot auto-open for previously-consumed sprinkle`,{name:a.name});continue}try{await this.open(a.name,void 0,{attention:t}),r.add(a.name),w.info(`Auto-opened new sprinkle after install`,{name:a.name,attention:t})}catch{w.warn(`Failed to auto-open new sprinkle`,{name:a.name})}}else try{await this.open(a.name,void 0,{attention:!0}),w.info(`Surfaced newly-installed sprinkle in rail`,{name:a.name})}catch{w.warn(`Failed to surface newly-installed sprinkle`,{name:a.name})}}i&&this.persistKnownSprinkles(new Set(this.availableSprinkles.keys())),r.size>0&&this.persistAutoOpenedOnce(r)}async refresh(){this.availableSprinkles=await g(this.fs),w.info(`Discovered sprinkles`,{count:this.availableSprinkles.size}),this.syncRegisteredIcons(),this.notifyChange()}syncRegisteredIcons(){if(!this.callbacks.registerSprinkle)return;let e=new Set;for(let t of this.availableSprinkles.values())this.inlineSprinkles.has(t.name)||e.add(t.name);for(let t of this.availableSprinkles.values())if(e.has(t.name)&&!this.registeredSprinkles.has(t.name))try{this.callbacks.registerSprinkle(t.name,t.title,{icon:t.icon}),this.registeredSprinkles.add(t.name)}catch(e){w.warn(`registerSprinkle callback threw`,{name:t.name,error:e instanceof Error?e.message:String(e)})}for(let t of[...this.registeredSprinkles])if(!e.has(t)){this.openSprinkles.has(t)&&this.close(t);try{this.callbacks.unregisterSprinkle?.(t)}catch(e){w.warn(`unregisterSprinkle callback threw`,{name:t,error:e instanceof Error?e.message:String(e)})}this.registeredSprinkles.delete(t)}}onChange(e){return this.changeListeners.add(e),()=>{this.changeListeners.delete(e)}}notifyChange(){this.changeNotifyScheduled||(this.changeNotifyScheduled=!0,queueMicrotask(()=>{this.changeNotifyScheduled=!1;for(let e of this.changeListeners)try{e()}catch(e){w.error(`SprinkleManager.onChange handler threw`,{error:e instanceof Error?e.message:String(e)})}}))}open(e,t,n={}){return this.enqueueRendererOperation(e,()=>this.openNow(e,t,n))}async openNow(e,t,n={}){if(this.openSprinkles.has(e)){w.info(`Sprinkle already open`,{name:e});return}let i=this.availableSprinkles.get(e);if(i||=(await this.refresh(),this.availableSprinkles.get(e)),!i)throw Error(`Sprinkle not found: ${e}`);let a=await this.fs.readFile(i.path,{encoding:`utf-8`});if(a==null)throw Error(`Failed to read sprinkle content: ${i.path} (file may be corrupted or missing)`);let s=typeof a==`string`?a:new TextDecoder(`utf-8`).decode(a),c=document.createElement(`div`);c.className=`sprinkle-panel`,c.style.cssText=`width: 100%; height: 100%; display: flex; flex-direction: column; overflow-y: auto;`,c.dataset.sprinkle=e;let l={renderer:null,container:c,lickOriginUnitId:n.lickOriginTarget?this.resolveLickOriginUnitId?.(n.lickOriginTarget):void 0};this.openSprinkles.set(e,l),n.attention?this.attentionOnly.add(e):this.attentionOnly.delete(e),this.callbacks.addSprinkle(e,i.title,c,t,{attention:n.attention,background:n.background,icon:i.icon});let u=this.bridge.createAPI(e,()=>l.lickOriginUnitId),d=new r(c,u);await d.render(s,e);let f=this.openSprinkles.get(e);if(!f){d.dispose();return}f.renderer=d,d.activateBridgeLifecycle(),this.openSprinkles.has(e)&&(this.persistOpenSprinkles(),o(e),w.info(`Sprinkle opened`,{name:e,title:i.title}),this.notifyChange())}markActivated(e){this.attentionOnly.has(e)&&(this.attentionOnly.delete(e),this.persistOpenSprinkles(),w.info(`Sprinkle promoted from attention to user-opened`,{name:e}),this.notifyChange())}async activate(e,t,n={}){let r=this.attentionOnly.has(e),i=this.openSprinkles.get(e);if(r&&i&&n.lickOriginTarget&&(i.lickOriginUnitId=this.resolveLickOriginUnitId?.(n.lickOriginTarget)),r&&this.markActivated(e),!i){try{await this.open(e,t,n)}catch(t){w.warn(`Failed to open sprinkle from rail-icon click`,{name:e,error:t instanceof Error?t.message:String(t)})}return}let a=this.availableSprinkles.get(e);this.callbacks.addSprinkle(e,a?.title??e,i.container,t,{icon:a?.icon})}close(e){let t=this.openSprinkles.get(e);t&&(t.renderer?.dispose(),t.container.remove(),this.bridge.removeSprinkle(e),this.openSprinkles.delete(e),this.attentionOnly.delete(e),this.callbacks.closeSprinkleContent?this.callbacks.closeSprinkleContent(e):this.callbacks.removeSprinkle(e),this.persistOpenSprinkles(),w.info(`Sprinkle closed`,{name:e}),this.notifyChange())}minimize(e){this.openSprinkles.has(e)&&(this.callbacks.minimizeSprinkle(e),w.info(`Sprinkle minimized`,{name:e}))}available(){return Array.from(this.availableSprinkles.values())}opened(){return Array.from(this.openSprinkles.keys())}lickOriginUnitIdOf(e){return this.openSprinkles.get(e)?.lickOriginUnitId}setupWatcher(e){let t=null,n=new Map,r=e=>{let r=!1;for(let t of e){let e=this.findOpenSprinkleByPath(t.path);if(e){let t=n.get(e);t&&clearTimeout(t),n.set(e,setTimeout(()=>{n.delete(e),this.reload(e).catch(t=>{w.warn(`Sprinkle reload on watcher event failed`,{name:e,error:t instanceof Error?t.message:String(t)})})},300))}else r=!0}r&&!t&&(t=setTimeout(()=>{t=null,this.openNewAutoOpenSprinkles().catch(e=>{w.warn(`Sprinkle refresh on watcher event failed`,{error:e instanceof Error?e.message:String(e)})})},150))},i=P.map(t=>e.watch(t,e=>e.endsWith(`.shtml`),r));this.watcherUnsub=()=>{for(let e of i)e();t&&=(clearTimeout(t),null);for(let e of n.values())clearTimeout(e);n.clear()}}findOpenSprinkleByPath(e){for(let[t]of this.openSprinkles){let n=this.availableSprinkles.get(t);if(n&&n.path===e)return t}return null}dispose(){this.watcherUnsub?.()}sendToSprinkle(e,t,n){let r=!n?.runtime||n.runtime===`leader`,i=!n?.runtime||n.runtime!==`leader`,a={leader:!1,followers:[]};if(r){let n=this.openSprinkles.get(e);n?(this.bridge.pushUpdate(e,t),n.renderer.pushUpdate(t),a.leader=!0):w.warn(`Cannot send to closed sprinkle`,{name:e})}if(i&&this.onSendToSprinkle)try{let r=this.onSendToSprinkle(e,t,n);r&&(a.followers=r.followers,r.unknownRuntime&&(a.unknownRuntime=r.unknownRuntime))}catch(t){w.error(`onSendToSprinkle hook threw`,{name:e,error:t instanceof Error?t.message:String(t)})}return a}};export{I as SprinkleManager,j as pruneKnownSprinkleNames,M as readKnownSprinkleNames};
1
+ import{t as e}from"./logger-DDBAeTLF.js";import{a as t}from"./feature-flags-DvsApnS-.js";import{r as n,t as r}from"./sprinkle-renderer-GOx0t_KB.js";import{n as i,t as a}from"./panel-rpc-accessor-B4BfPLSo.js";import{s as o}from"./telemetry-B0sKnLBU.js";import{t as s}from"./permissions-surface-registry-CilCRwhh.js";import{n as c,t as l}from"./bounded-walk-BjxKWNqp.js";import"./sprinkle-instances-B8n7h-oP.js";var u=[`/workspace`,`/shared`,`/scoops`,`/home`],d=[`/shared/sprinkles`],f=6,p=500,m=new Set([`connect-llm`,`welcome`]);function h(e){return m.has(e)?!0:e===`suggestions`&&!t(`memory-v2`)}async function g(e){let t=new Map;for(let n of[...d,...u])await e.exists(n)&&await _(e,n,t);return t}async function _(e,t,n){let r=c(e,t,{maxDepth:f,maxDirs:p,skip:l});for await(let t of r){if(!t.endsWith(`.shtml`))continue;let r=v(t);if(!h(r)&&!n.has(r)){let i;try{i=await e.readFile(t,{encoding:`utf-8`})??``}catch{i=``}n.set(r,{name:r,path:t,title:y(i,r),autoOpen:b(i),icon:x(i)})}}}function v(e){let t=e.split(`/`).pop()??e;return t.endsWith(`.shtml`)?t.slice(0,-6):t}function y(e,t){let n=e.match(/data-sprinkle-title=["']([^"']+)["']/);if(n)return n[1];let r=e.match(/<title>([^<]+)<\/title>/i);return r?r[1].trim():t}function b(e){return/data-sprinkle-autoopen\b/.test(e)}function x(e){let t=/<link\b/gi,n;for(;(n=t.exec(e))!==null;){let t=n.index+n[0].length,r=S(e,t);if(r<0)continue;let i=e.slice(t,r);if(!/\brel\s*=\s*("|')\s*(?:shortcut\s+)?icon\s*\1/i.test(i))continue;let a=C(i,`href`);if(a!==void 0)return a.trim()}let r=C(e,`data-sprinkle-icon`);if(r!==void 0)return r.trim()}function S(e,t){let n=!1,r=!1;for(let i=t;i<e.length;i++){let t=e.charCodeAt(i);if(n)t===34&&(n=!1);else if(r)t===39&&(r=!1);else if(t===34)n=!0;else if(t===39)r=!0;else if(t===62)return i}return-1}function C(e,t){let n=RegExp(`\\b${t}\\s*=\\s*(?:"([^"]*)"|'([^']*)')`,`i`),r=e.match(n);if(r)return r[1]??r[2]??void 0}var w=e(`sprinkle-manager`);async function T(){let e=s();if(e){let t=await e.prompt({kinds:[`screenshare`],description:`A sprinkle asks to share a screen.`,requestOptions:{screenshare:{constraints:{video:!0,audio:!1}}}}),n=t.status===`granted`?t.grants.find(e=>e.kind===`screenshare`):void 0;if(!n){let e=t.message?`: ${t.message}`:``,n=t.reason??t.status;throw Error(n===`cancelled`||t.status===`cancelled`?`Screen capture cancelled`:`Screen capture ${n}${e}`)}return n.stream}if(!navigator.mediaDevices?.getDisplayMedia)throw Error(`Screen capture not supported in this browser`);return navigator.mediaDevices.getDisplayMedia({video:!0,audio:!1})}var E=`slicc-open-sprinkles`,D=`sprinkles`;function O(){try{if(typeof window>`u`||!window.location)return null;let e=new URLSearchParams(window.location.search).get(D);return e===null?null:e===``?[]:e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0)}catch{return null}}function k(e){try{if(typeof window>`u`||!window.location||typeof history>`u`||typeof history.replaceState!=`function`)return;let t=new URL(window.location.href);e.length===0?t.searchParams.delete(D):t.searchParams.set(D,e.join(`,`));let n=t.pathname+t.search+t.hash;history.replaceState(history.state??null,``,n)}catch{}}var A=`slicc-known-sprinkles`;function j(e){try{let t=new Set(e),n=M().filter(e=>t.has(e));localStorage.setItem(A,JSON.stringify(n))}catch{}}function M(){try{let e=localStorage.getItem(A);if(!e)return[];let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`string`):[]}catch{return[]}}var N=`slicc-autoopened-once`,P=u,F=250,I=class{fs;bridge;callbacks;availableSprinkles=new Map;watcherUnsub;openSprinkles=new Map;attentionOnly=new Set;rendererOperationTails=new Map;inflightRefresh=null;lastRefreshAt=0;autoOpenBehavior;onSendToSprinkle;onSprinkleReloaded;resolveLickOriginUnitId;registeredSprinkles=new Set;inlineSprinkles;changeListeners=new Set;changeNotifyScheduled=!1;urlWriteScheduled=!1;constructor(e,t,r,o,s={}){this.fs=e;let c=async()=>{let e=`image/png`,t=i(),n=a();if(!t&&!n)throw Error(`Screen capture unavailable in this environment`);let r,o,s;if(t){let t=await T();try{let n=document.createElement(`video`);n.srcObject=t,n.muted=!0,n.playsInline=!0,await new Promise((e,t)=>{n.onloadedmetadata=()=>n.play().then(()=>e()).catch(t),n.onerror=()=>t(Error(`Failed to load video stream`))}),await new Promise(e=>setTimeout(e,100)),o=n.videoWidth,s=n.videoHeight;let i=document.createElement(`canvas`);i.width=o,i.height=s;let a=i.getContext(`2d`);if(!a)throw Error(`Failed to get canvas context`);a.drawImage(n,0,0,o,s),r=await(await new Promise((t,n)=>{i.toBlob(e=>e?t(e):n(Error(`Failed to create image blob`)),e,1)})).arrayBuffer()}finally{for(let e of t.getTracks())e.stop()}}else{let t=await n.call(`screencapture`,{mimeType:e,quality:1},{timeoutMs:3e5});r=t.bytes,o=t.width,s=t.height}let c=new Uint8Array(r),l=[],u=8192;for(let e=0;e<c.length;e+=u)l.push(String.fromCharCode(...c.subarray(e,e+u)));return{base64:btoa(l.join(``)),width:o,height:s,mimeType:e}};this.bridge=new n(e,t,e=>this.close(e),e=>this.minimize(e),o,s.onAttachImage??(()=>{}),c,s.execHandler,(e,t,n)=>{this.openSprinkles.get(e)?.renderer.pushDeviceEvent(t,n)},s.selectScoopHandler,s.selectedScoopHandler),this.callbacks=r,this.autoOpenBehavior=s.autoOpenBehavior??`activate`,this.onSendToSprinkle=s.onSendToSprinkle,this.onSprinkleReloaded=s.onSprinkleReloaded,this.resolveLickOriginUnitId=s.resolveLickOriginUnitId,this.inlineSprinkles=s.inlineSprinkles??new Set}setSendToSprinkleHook(e){this.onSendToSprinkle&&!e&&w.error(`SprinkleManager broadcast hook detached`),this.onSendToSprinkle=e}setReloadHook(e){this.onSprinkleReloaded=e}enqueueRendererOperation(e,t){let n=(this.rendererOperationTails.get(e)??Promise.resolve()).then(t,t);return this.rendererOperationTails.set(e,n),n.finally(()=>{this.rendererOperationTails.get(e)===n&&this.rendererOperationTails.delete(e)})}reload(e){return this.enqueueRendererOperation(e,()=>this.reloadNow(e))}async reloadNow(e){let t=this.openSprinkles.get(e);if(!t){w.info(`Cannot reload closed sprinkle`,{name:e});return}let n=this.availableSprinkles.get(e);if(n||=(await this.refresh(),this.availableSprinkles.get(e)),!n){w.warn(`Sprinkle not found during reload`,{name:e});return}let i=await this.fs.readFile(n.path,{encoding:`utf-8`});if(i==null){w.warn(`Failed to read sprinkle content during reload`,{name:e});return}let a=typeof i==`string`?i:new TextDecoder(`utf-8`).decode(i);t.renderer?.dispose(),this.bridge.removeSprinkle(e);let o=this.bridge.createAPI(e,()=>t.lickOriginUnitId),s=new r(t.container,o);if(await s.render(a,e),!this.openSprinkles.has(e)){s.dispose();return}if(t.renderer=s,s.activateBridgeLifecycle(),this.openSprinkles.has(e)&&(w.info(`Sprinkle reloaded`,{name:e}),this.notifyChange(),this.onSprinkleReloaded))try{this.onSprinkleReloaded(e)}catch(t){w.error(`onSprinkleReloaded hook threw`,{name:e,error:t instanceof Error?t.message:String(t)})}}async restoreOpenSprinkles(){try{let e=O();if(e!==null){await this.reopenInBackground(e);return}let t=localStorage.getItem(E);t?await this.restoreFromLegacyStorage(t):await this.autoOpenFirstRun()}catch{}await this.surfaceUnseenSprinkles()}async reopenInBackground(e){for(let t of e)try{await this.open(t,void 0,{background:!0})}catch{w.warn(`Failed to restore sprinkle`,{name:t})}}async restoreFromLegacyStorage(e){try{await this.reopenInBackground(JSON.parse(e))}finally{try{localStorage.removeItem(E)}catch{}}}async autoOpenFirstRun(){let e=this.autoOpenBehavior===`attention`,t=this.loadAutoOpenedOnce(),n=new Set;for(let r of this.availableSprinkles.values())if(!(!r.autoOpen||t.has(r.name)))try{await this.open(r.name,void 0,{attention:e}),n.add(r.name)}catch{w.warn(`Failed to auto-open sprinkle`,{name:r.name})}n.size>0&&this.persistAutoOpenedOnce(n)}async surfaceUnseenSprinkles(){let e=this.loadKnownSprinkles(),t=this.loadAutoOpenedOnce(),n=this.autoOpenBehavior===`attention`,r=new Set;for(let i of this.availableSprinkles.values())if(!e.has(i.name)&&!this.openSprinkles.has(i.name)&&!(i.autoOpen&&t.has(i.name)))try{await this.open(i.name,void 0,{attention:!i.autoOpen||n}),i.autoOpen&&r.add(i.name),w.info(`Surfaced previously-unseen sprinkle`,{name:i.name})}catch{w.warn(`Failed to surface unseen sprinkle`,{name:i.name})}this.persistKnownSprinkles(new Set(this.availableSprinkles.keys())),r.size>0&&this.persistAutoOpenedOnce(r)}loadKnownSprinkles(){return new Set(M())}persistKnownSprinkles(e){try{let t=new Set([...this.loadKnownSprinkles(),...e]);localStorage.setItem(A,JSON.stringify([...t]))}catch{}}loadAutoOpenedOnce(){try{let e=localStorage.getItem(N);if(!e)return new Set;let t=JSON.parse(e);return Array.isArray(t)?new Set(t.filter(e=>typeof e==`string`)):new Set}catch{return new Set}}persistAutoOpenedOnce(e){try{let t=new Set([...this.loadAutoOpenedOnce(),...e]);localStorage.setItem(N,JSON.stringify([...t]))}catch{}}persistOpenSprinkles(){try{let e=[...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e));localStorage.setItem(E,JSON.stringify(e))}catch{}this.schedulePersistOpenSprinklesToUrl()}schedulePersistOpenSprinklesToUrl(){this.urlWriteScheduled||(this.urlWriteScheduled=!0,queueMicrotask(()=>{this.urlWriteScheduled=!1,k([...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e)))}))}async openNewAutoOpenSprinkles(){if(this.inflightRefresh!==null)return this.inflightRefresh;if(!(Date.now()-this.lastRefreshAt<F))return this.inflightRefresh=this.runOpenNewAutoOpenSprinkles().finally(()=>{this.lastRefreshAt=Date.now(),this.inflightRefresh=null}),this.inflightRefresh}async runOpenNewAutoOpenSprinkles(){let e=new Set(this.availableSprinkles.keys());await this.refresh();let t=this.autoOpenBehavior===`attention`,n=this.loadAutoOpenedOnce(),r=new Set,i=!1;for(let a of this.availableSprinkles.values())if(!this.openSprinkles.has(a.name)&&!e.has(a.name)){if(i=!0,a.autoOpen){if(n.has(a.name)){w.info(`Skipped one-shot auto-open for previously-consumed sprinkle`,{name:a.name});continue}try{await this.open(a.name,void 0,{attention:t}),r.add(a.name),w.info(`Auto-opened new sprinkle after install`,{name:a.name,attention:t})}catch{w.warn(`Failed to auto-open new sprinkle`,{name:a.name})}}else try{await this.open(a.name,void 0,{attention:!0}),w.info(`Surfaced newly-installed sprinkle in rail`,{name:a.name})}catch{w.warn(`Failed to surface newly-installed sprinkle`,{name:a.name})}}i&&this.persistKnownSprinkles(new Set(this.availableSprinkles.keys())),r.size>0&&this.persistAutoOpenedOnce(r)}async refresh(){this.availableSprinkles=await g(this.fs),w.info(`Discovered sprinkles`,{count:this.availableSprinkles.size}),this.syncRegisteredIcons(),this.notifyChange()}syncRegisteredIcons(){if(!this.callbacks.registerSprinkle)return;let e=new Set;for(let t of this.availableSprinkles.values())this.inlineSprinkles.has(t.name)||e.add(t.name);for(let t of this.availableSprinkles.values())if(e.has(t.name)&&!this.registeredSprinkles.has(t.name))try{this.callbacks.registerSprinkle(t.name,t.title,{icon:t.icon}),this.registeredSprinkles.add(t.name)}catch(e){w.warn(`registerSprinkle callback threw`,{name:t.name,error:e instanceof Error?e.message:String(e)})}for(let t of[...this.registeredSprinkles])if(!e.has(t)){this.openSprinkles.has(t)&&this.close(t);try{this.callbacks.unregisterSprinkle?.(t)}catch(e){w.warn(`unregisterSprinkle callback threw`,{name:t,error:e instanceof Error?e.message:String(e)})}this.registeredSprinkles.delete(t)}}onChange(e){return this.changeListeners.add(e),()=>{this.changeListeners.delete(e)}}notifyChange(){this.changeNotifyScheduled||(this.changeNotifyScheduled=!0,queueMicrotask(()=>{this.changeNotifyScheduled=!1;for(let e of this.changeListeners)try{e()}catch(e){w.error(`SprinkleManager.onChange handler threw`,{error:e instanceof Error?e.message:String(e)})}}))}open(e,t,n={}){return this.enqueueRendererOperation(e,()=>this.openNow(e,t,n))}async openNow(e,t,n={}){if(this.openSprinkles.has(e)){w.info(`Sprinkle already open`,{name:e});return}let i=this.availableSprinkles.get(e);if(i||=(await this.refresh(),this.availableSprinkles.get(e)),!i)throw Error(`Sprinkle not found: ${e}`);let a=await this.fs.readFile(i.path,{encoding:`utf-8`});if(a==null)throw Error(`Failed to read sprinkle content: ${i.path} (file may be corrupted or missing)`);let s=typeof a==`string`?a:new TextDecoder(`utf-8`).decode(a),c=document.createElement(`div`);c.className=`sprinkle-panel`,c.style.cssText=`width: 100%; height: 100%; display: flex; flex-direction: column; overflow-y: auto;`,c.dataset.sprinkle=e;let l={renderer:null,container:c,lickOriginUnitId:n.lickOriginTarget?this.resolveLickOriginUnitId?.(n.lickOriginTarget):void 0};this.openSprinkles.set(e,l),n.attention?this.attentionOnly.add(e):this.attentionOnly.delete(e),this.callbacks.addSprinkle(e,i.title,c,t,{attention:n.attention,background:n.background,icon:i.icon});let u=this.bridge.createAPI(e,()=>l.lickOriginUnitId),d=new r(c,u);await d.render(s,e);let f=this.openSprinkles.get(e);if(!f){d.dispose();return}f.renderer=d,d.activateBridgeLifecycle(),this.openSprinkles.has(e)&&(this.persistOpenSprinkles(),o(e),w.info(`Sprinkle opened`,{name:e,title:i.title}),this.notifyChange())}markActivated(e){this.attentionOnly.has(e)&&(this.attentionOnly.delete(e),this.persistOpenSprinkles(),w.info(`Sprinkle promoted from attention to user-opened`,{name:e}),this.notifyChange())}async activate(e,t,n={}){let r=this.attentionOnly.has(e),i=this.openSprinkles.get(e);if(r&&i&&n.lickOriginTarget&&(i.lickOriginUnitId=this.resolveLickOriginUnitId?.(n.lickOriginTarget)),r&&this.markActivated(e),!i){try{await this.open(e,t,n)}catch(t){w.warn(`Failed to open sprinkle from rail-icon click`,{name:e,error:t instanceof Error?t.message:String(t)})}return}let a=this.availableSprinkles.get(e);this.callbacks.addSprinkle(e,a?.title??e,i.container,t,{icon:a?.icon})}close(e){let t=this.openSprinkles.get(e);t&&(t.renderer?.dispose(),t.container.remove(),this.bridge.removeSprinkle(e),this.openSprinkles.delete(e),this.attentionOnly.delete(e),this.callbacks.closeSprinkleContent?this.callbacks.closeSprinkleContent(e):this.callbacks.removeSprinkle(e),this.persistOpenSprinkles(),w.info(`Sprinkle closed`,{name:e}),this.notifyChange())}minimize(e){this.openSprinkles.has(e)&&(this.callbacks.minimizeSprinkle(e),w.info(`Sprinkle minimized`,{name:e}))}available(){return Array.from(this.availableSprinkles.values())}opened(){return Array.from(this.openSprinkles.keys())}lickOriginUnitIdOf(e){return this.openSprinkles.get(e)?.lickOriginUnitId}setupWatcher(e){let t=null,n=new Map,r=e=>{let r=!1;for(let t of e){let e=this.findOpenSprinkleByPath(t.path);if(e){let t=n.get(e);t&&clearTimeout(t),n.set(e,setTimeout(()=>{n.delete(e),this.reload(e).catch(t=>{w.warn(`Sprinkle reload on watcher event failed`,{name:e,error:t instanceof Error?t.message:String(t)})})},300))}else r=!0}r&&!t&&(t=setTimeout(()=>{t=null,this.openNewAutoOpenSprinkles().catch(e=>{w.warn(`Sprinkle refresh on watcher event failed`,{error:e instanceof Error?e.message:String(e)})})},150))},i=P.map(t=>e.watch(t,e=>e.endsWith(`.shtml`),r));this.watcherUnsub=()=>{for(let e of i)e();t&&=(clearTimeout(t),null);for(let e of n.values())clearTimeout(e);n.clear()}}findOpenSprinkleByPath(e){for(let[t]of this.openSprinkles){let n=this.availableSprinkles.get(t);if(n&&n.path===e)return t}return null}dispose(){this.watcherUnsub?.()}sendToSprinkle(e,t,n){let r=!n?.runtime||n.runtime===`leader`,i=!n?.runtime||n.runtime!==`leader`,a={leader:!1,followers:[]};if(r){let n=this.openSprinkles.get(e);n?(this.bridge.pushUpdate(e,t),n.renderer.pushUpdate(t),a.leader=!0):w.warn(`Cannot send to closed sprinkle`,{name:e})}if(i&&this.onSendToSprinkle)try{let r=this.onSendToSprinkle(e,t,n);r&&(a.followers=r.followers,r.unknownRuntime&&(a.unknownRuntime=r.unknownRuntime))}catch(t){w.error(`onSendToSprinkle hook threw`,{name:e,error:t instanceof Error?t.message:String(t)})}return a}};export{I as SprinkleManager,j as pruneKnownSprinkleNames,M as readKnownSprinkleNames};
@@ -1,5 +1,5 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/usb-claim-broker-Dacw2Z3M.js","assets/usb-device-registry--JwKRTYp.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/slicc-editor-CdEm4LHg.js","assets/preload-helper-Czpn1I53.js","assets/upgrade-own-properties-DI0JKxGt.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-Czpn1I53.js";import{ct as t}from"./wc-shell-fIEX0Fr7.js";import{t as n}from"./permissions-surface-registry-CilCRwhh.js";import{n as r,r as i}from"./hid-device-registry-B2R-0rNt.js";import{a,i as o}from"./serial-port-registry-CCqklAEr.js";import{c as s,d as c,g as l,i as u,l as d,m as f,n as ee,o as te,p,r as ne,t as re,u as ie}from"./hid-operations-C97SZtrY.js";import{a as m,i as h,o as ae,s as oe}from"./usb-device-registry--JwKRTYp.js";import{a as se,d as ce,f as le,g as ue,h as de,i as fe,l as pe,m as g,n as _,o as v,p as me,r as he,s as ge,u as _e}from"./usb-operations-v1mGAdRY.js";import"./shared-DSEuryGJ.js";import{a as y,n as ve,r as ye}from"./theme-CwPIBqJE.js";function b(){try{let e=globalThis.window??globalThis;return e.self!==e.top}catch{return!0}}var x=new WeakSet;function S(e,t){if(x.has(e)){t?.();return}let n=!1;C(e,t,()=>{n=!0}),setTimeout(()=>{n||e.isConnected&&C(e)},500)}function C(e,t,n){if(x.has(e)){t?.();return}x.add(e);let r=e.style.display;e.style.display=`none`;let i=!1,a=a=>{i||(i=!0,e.style.display=r,x.delete(e),a&&n?.(),t?.())},o=globalThis.requestAnimationFrame;typeof o==`function`&&o(()=>{o(()=>a(!0))}),setTimeout(()=>a(!1),100)}var w=`
2
+ import{t as e}from"./preload-helper-Czpn1I53.js";import{ct as t}from"./wc-shell-C0Y0f1tt.js";import{t as n}from"./permissions-surface-registry-CilCRwhh.js";import{n as r,r as i}from"./hid-device-registry-B2R-0rNt.js";import{a,i as o}from"./serial-port-registry-CCqklAEr.js";import{c as s,d as c,g as l,i as u,l as d,m as f,n as ee,o as te,p,r as ne,t as re,u as ie}from"./hid-operations-C97SZtrY.js";import{a as m,i as h,o as ae,s as oe}from"./usb-device-registry--JwKRTYp.js";import{a as se,d as ce,f as le,g as ue,h as de,i as fe,l as pe,m as g,n as _,o as v,p as me,r as he,s as ge,u as _e}from"./usb-operations-v1mGAdRY.js";import"./shared-DSEuryGJ.js";import{a as y,n as ve,r as ye}from"./theme-CwPIBqJE.js";function b(){try{let e=globalThis.window??globalThis;return e.self!==e.top}catch{return!0}}var x=new WeakSet;function S(e,t){if(x.has(e)){t?.();return}let n=!1;C(e,t,()=>{n=!0}),setTimeout(()=>{n||e.isConnected&&C(e)},500)}function C(e,t,n){if(x.has(e)){t?.();return}x.add(e);let r=e.style.display;e.style.display=`none`;let i=!1,a=a=>{i||(i=!0,e.style.display=r,x.delete(e),a&&n?.(),t?.())},o=globalThis.requestAnimationFrame;typeof o==`function`&&o(()=>{o(()=>a(!0))}),setTimeout(()=>a(!1),100)}var w=`
3
3
  (function() {
4
4
  function _focusAllowed() {
5
5
  try { return document.hasFocus(); } catch (e) { return false; }