sliccy 6.122.0 → 6.124.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/README.md +15 -3
  2. package/dist/node-server/_shared/tray-sync-protocol.d.ts +20 -3
  3. package/dist/node-server/_shared/tray-sync-protocol.d.ts.map +1 -1
  4. package/dist/node-server/_shared/tray-sync-protocol.js +9 -1
  5. package/dist/node-server/_shared/tray-sync-protocol.js.map +1 -1
  6. package/dist/ui/.vite/manifest.json +154 -154
  7. package/dist/ui/assets/{CLAUDE-CgpX4Q5m.js → CLAUDE-BG8Wfdn_.js} +1 -1
  8. package/dist/ui/assets/SKILL-C6co9TnL.js +1 -0
  9. package/dist/ui/assets/SKILL-DA3Jh760.js +1 -0
  10. package/dist/ui/assets/{account-store-BeWWaisz.js → account-store-BRlVG3UL.js} +1 -1
  11. package/dist/ui/assets/{account-store-CrzQRVmk.js → account-store-C209lUzH.js} +1 -1
  12. package/dist/ui/assets/{adobe-CU3EGPi1.js → adobe-CMK4xkCW.js} +1 -1
  13. package/dist/ui/assets/{adobe-CmJQOCEG.js → adobe-Dk8OecoO.js} +1 -1
  14. package/dist/ui/assets/{agent-bridge-CxtEwZsO.js → agent-bridge-BcZ3aGA4.js} +1 -1
  15. package/dist/ui/assets/{agent-panels-D2g8j4Sb.js → agent-panels-ZPsCQbMA.js} +1 -1
  16. package/dist/ui/assets/{apply-layout-M6igfUeQ.js → apply-layout-DNyrVRDt.js} +1 -1
  17. package/dist/ui/assets/{apps-Dcr6dP3A.js → apps-jBBgm8_4.js} +1 -1
  18. package/dist/ui/assets/{azure-openai-B2ax_lID.js → azure-openai-BLxcD-7a.js} +1 -1
  19. package/dist/ui/assets/{azure-openai-BtyN3IoK.js → azure-openai-C8vGZXPU.js} +1 -1
  20. package/dist/ui/assets/bunny-probe-Bgz20a1s.js +1 -0
  21. package/dist/ui/assets/bunny-run-BsOugqIU.js +1 -0
  22. package/dist/ui/assets/{cerebras-DUaxfafs.js → cerebras-Db8_4GyD.js} +1 -1
  23. package/dist/ui/assets/{cerebras-BsKWOUNG.js → cerebras-wdXrxFyb.js} +1 -1
  24. package/dist/ui/assets/{connect-surface-DVIB7kxf.js → connect-surface-cgxkTjpV.js} +1 -1
  25. package/dist/ui/assets/{directed-approval-Dm0LtHV8.js → directed-approval-xC1V3zAu.js} +1 -1
  26. package/dist/ui/assets/engine-BnH9pfmR.js +1 -0
  27. package/dist/ui/assets/extension-media-capture-BBMLU8BH.js +1 -0
  28. package/dist/ui/assets/fast-path-DAj2lYgU.js +2 -0
  29. package/dist/ui/assets/fs-C7jYaof5.js +1 -0
  30. package/dist/ui/assets/fs-CsZ7MYNO.js +2 -0
  31. package/dist/ui/assets/{github-BcG9_uX5.js → github-BvJIYopa.js} +2 -2
  32. package/dist/ui/assets/{github-copilot-OGxtOON4.js → github-copilot-Bj-20g_v.js} +1 -1
  33. package/dist/ui/assets/{github-copilot-DNYQa3vN.js → github-copilot-Ciuo95cM.js} +1 -1
  34. package/dist/ui/assets/{github-C-8X0lJB.js → github-dtnxTwqR.js} +1 -1
  35. package/dist/ui/assets/{github-install-ByCG7pmU.js → github-install-CximMnm8.js} +1 -1
  36. package/dist/ui/assets/{github-zip-Dy4vkVfQ.js → github-zip-q4uFjpYq.js} +1 -1
  37. package/dist/ui/assets/{help-xL2fSGd3.js → help-ZIOFUhJ1.js} +1 -1
  38. package/dist/ui/assets/idle-compaction-settings-wK6JTbJh.js +1 -0
  39. package/dist/ui/assets/{js-realm-worker-prMqenKt.js → js-realm-worker-BJzPI8aP.js} +1 -1
  40. package/dist/ui/assets/{kernel-worker-DdroKmZo.js → kernel-worker-BhD51TLL.js} +374 -374
  41. package/dist/ui/assets/{keys-D83Hgky0.js → keys-BMebW-sj.js} +18 -8
  42. package/dist/ui/assets/{lick-ws-bridge-BUAhV4Ba.js → lick-ws-bridge-CBhfAWcP.js} +1 -1
  43. package/dist/ui/assets/{local-llm-D0mTvY7N.js → local-llm-Bij_qoT6.js} +1 -1
  44. package/dist/ui/assets/{local-llm-Drh6gTi0.js → local-llm-rga3xbUM.js} +1 -1
  45. package/dist/ui/assets/{main-DSsincSj.js → main-Bpl4dJEr.js} +3 -3
  46. package/dist/ui/assets/{mount-DnkQM4H_.js → mount-8Huy3epY.js} +3 -3
  47. package/dist/ui/assets/{mount-CxIOoyoX.js → mount-DHQXC9Xw.js} +1 -1
  48. package/dist/ui/assets/mount-index-D9w_zMSm.js +1 -0
  49. package/dist/ui/assets/{mount-recovery-pP0t0B5R.js → mount-recovery-BPMhSg0P.js} +1 -1
  50. package/dist/ui/assets/{new-session-TJkrfdmM.js → new-session-BEspVRtG.js} +2 -2
  51. package/dist/ui/assets/{oauth-bootstrap-Cflkal2z.js → oauth-bootstrap-BnDmRwFR.js} +2 -2
  52. package/dist/ui/assets/{openai-codex-WrMiquZ6.js → openai-codex-CBT0YEJe.js} +1 -1
  53. package/dist/ui/assets/{openai-codex-LMiNXBpR.js → openai-codex-CGTymTwB.js} +1 -1
  54. package/dist/ui/assets/{openrouter-CF6GBIsh.js → openrouter-BHVD0eo2.js} +1 -1
  55. package/dist/ui/assets/{openrouter-Y72OhjGZ.js → openrouter-C-SgoqG6.js} +1 -1
  56. package/dist/ui/assets/{openrouter-oauth-pLAIH3V3.js → openrouter-oauth-BlRAjEY7.js} +1 -1
  57. package/dist/ui/assets/{openrouter-oauth-iH7sVKzz.js → openrouter-oauth-DjaBUhhf.js} +1 -1
  58. package/dist/ui/assets/{panel-rpc-handlers-E0Tvr752.js → panel-rpc-handlers-2NN2S3Am.js} +2 -2
  59. package/dist/ui/assets/{panelize-shell-Hn2-TJc6.js → panelize-shell-DTDMhbf1.js} +4 -4
  60. package/dist/ui/assets/{provider-BxxPfI5S.js → provider-CiL_QWYN.js} +1 -1
  61. package/dist/ui/assets/{provider-DZDGqjz1.js → provider-D09664Ko.js} +2 -2
  62. package/dist/ui/assets/{provider-settings-BFUPdbhi.js → provider-settings-1lsoYpNh.js} +1 -1
  63. package/dist/ui/assets/{provider-settings-Cr_y3ZO3.js → provider-settings-BQqRKwG3.js} +1 -1
  64. package/dist/ui/assets/{provider-store-access-BgIb6-X8.js → provider-store-access-117y9N_1.js} +2 -2
  65. package/dist/ui/assets/provider-store-access-CDCik5Nq.js +1 -0
  66. package/dist/ui/assets/{providers-Rty0Ovfq.js → providers-Cg-S0rLK.js} +1 -1
  67. package/dist/ui/assets/{providers-Dz3RSRQx.js → providers-G9XcYrxe.js} +2 -2
  68. package/dist/ui/assets/{quick-llm-CvqNttpI.js → quick-llm-CLyaja5O.js} +1 -1
  69. package/dist/ui/assets/{recovery-screen-DX5Owqre.js → recovery-screen-CtX9bOfH.js} +1 -1
  70. package/dist/ui/assets/run-BjsANk42.js +46 -0
  71. package/dist/ui/assets/{run-5X_LUY3w.js → run-DUGHJZQF.js} +2 -2
  72. package/dist/ui/assets/{run-BcjWAfpv.js → run-DrjoHDwC.js} +1 -1
  73. package/dist/ui/assets/run-DuzDBKj0.js +91 -0
  74. package/dist/ui/assets/{session-freezer-DK9G_IkB.js → session-freezer-BDQV7q_1.js} +3 -3
  75. package/dist/ui/assets/{setup-feature-flags-remote-BcUIm2b6.js → setup-feature-flags-remote-BSFcT1UK.js} +1 -1
  76. package/dist/ui/assets/{setup-standalone-prelude-l7nnbPF5.js → setup-standalone-prelude-dOyp9mG7.js} +2 -2
  77. package/dist/ui/assets/{setup-sudo-BSQT2Dh-.js → setup-sudo-B5ZH0Kx5.js} +2 -2
  78. package/dist/ui/assets/{skills-CnWQfgYe.js → skills-D13FXiOZ.js} +1 -1
  79. package/dist/ui/assets/slicc-version-DxnagBBZ.js +1 -0
  80. package/dist/ui/assets/{snapshot-DWBFaMd4.js → snapshot-Dl64sTfT.js} +1 -1
  81. package/dist/ui/assets/{snapshot-features-c8X_wCzy.js → snapshot-features-DjHbV5hw.js} +1 -1
  82. package/dist/ui/assets/src-CM1l0mgT.js +575 -0
  83. package/dist/ui/assets/{state-UQWwnZ8X.js → state-C2jLMw6E.js} +1 -1
  84. package/dist/ui/assets/{store-B-BowqJY.js → store-CL5DnZMF.js} +1 -1
  85. package/dist/ui/assets/{store-D426O4iV.js → store-DVGzP_2X.js} +1 -1
  86. package/dist/ui/assets/{sudo-B8CRodhJ.js → sudo-Bh43BxYg.js} +1 -1
  87. package/dist/ui/assets/{tray-leader-BfzB60pu.js → tray-leader-DqvI6bbT.js} +1 -1
  88. package/dist/ui/assets/{tray-sidecar-au4iFVvJ.js → tray-sidecar-qdu5dxlJ.js} +1 -1
  89. package/dist/ui/assets/{tray-sync-protocol-BlwQKL0e.js → tray-sync-protocol-CGp1cRWg.js} +1 -1
  90. package/dist/ui/assets/{upgrade-detection-WvRCLHXP.js → upgrade-detection-BMEwG2xa.js} +1 -1
  91. package/dist/ui/assets/{wc-attach-CQIHVqTH.js → wc-attach-B-ZvIPA_.js} +2 -2
  92. package/dist/ui/assets/{wc-extension-DDlPWYwq.js → wc-extension-BS4yITQI.js} +2 -2
  93. package/dist/ui/assets/{wc-float-label-CE5oCxJ4.js → wc-float-label-C6LaROga.js} +1 -1
  94. package/dist/ui/assets/{wc-floatbar-online-BBRpuOSH.js → wc-floatbar-online-CD6-Sh48.js} +1 -1
  95. package/dist/ui/assets/{wc-follower-TkW182aB.js → wc-follower-DFGFCDEX.js} +3 -3
  96. package/dist/ui/assets/{wc-follower-oauth-BPhDEzGv.js → wc-follower-oauth-CXDzdz3J.js} +2 -2
  97. package/dist/ui/assets/wc-live-IKLl5Ipp.js +8 -0
  98. package/dist/ui/assets/wc-nav-CMskySEX.js +2 -0
  99. package/dist/ui/assets/{wc-onboarding-xIF0sbif.js → wc-onboarding-CgOSx-31.js} +2 -2
  100. package/dist/ui/assets/{wc-placeholder-v2B6i349.js → wc-placeholder-Cd9dJPCz.js} +2 -2
  101. package/dist/ui/assets/wc-settings-DMpMbGfM.js +59 -0
  102. package/dist/ui/assets/{wc-shell-CxUba4CU.js → wc-shell-BIfK3lAT.js} +7 -7
  103. package/dist/ui/assets/wc-shortcut-config-C36sw_tK.js +59 -0
  104. package/dist/ui/assets/{wc-sprinkles-IRaAZH5E.js → wc-sprinkles-Bd7HmrQl.js} +2 -2
  105. package/dist/ui/assets/wc-tray-CwN-XT9_.js +5 -0
  106. package/dist/ui/assets/{xai-grok-BnPIwUZr.js → xai-grok-Bd4-jPZx.js} +1 -1
  107. package/dist/ui/assets/{xai-grok-Dgkd5vUZ.js → xai-grok-Bf7yeQJK.js} +1 -1
  108. package/dist/ui/index.html +6 -6
  109. package/dist/ui/packages/webapp/index.html +6 -6
  110. package/package.json +1 -1
  111. package/dist/ui/assets/SKILL-Boj7N1xe.js +0 -1
  112. package/dist/ui/assets/SKILL-CxxQT4Lx.js +0 -75
  113. package/dist/ui/assets/ffmpeg-command-eHNhx1yC.js +0 -66
  114. package/dist/ui/assets/fs-BkxAKjex.js +0 -2
  115. package/dist/ui/assets/fs-C3q6Q4sP.js +0 -1
  116. package/dist/ui/assets/idle-compaction-settings-C0aQ4CrR.js +0 -1
  117. package/dist/ui/assets/mount-index-BiTaSCAQ.js +0 -1
  118. package/dist/ui/assets/provider-store-access-CJG-qJev.js +0 -1
  119. package/dist/ui/assets/run-B0Qw82nE.js +0 -42
  120. package/dist/ui/assets/slicc-version-B8zEDiZF.js +0 -1
  121. package/dist/ui/assets/wc-live-8nXQgC09.js +0 -8
  122. package/dist/ui/assets/wc-nav-DjyjVmrX.js +0 -2
  123. package/dist/ui/assets/wc-settings-DvrfTqdG.js +0 -51
  124. package/dist/ui/assets/wc-shortcut-config-BLk3x477.js +0 -49
  125. package/dist/ui/assets/wc-tray-DCHo1uuz.js +0 -5
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/azure-openai-B2ax_lID.js","assets/account-store-CrzQRVmk.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/preload-helper-Czpn1I53.js","assets/claude-model-version-BJLrDjmH.js","assets/models-BSkXF4T6.js","assets/diagnostics-DN_idNHx.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-B-zmcypy.js","assets/libesm-BypnjKEL.js","assets/logger-DDBAeTLF.js","assets/src-CAWTvdAa.js","assets/proxied-fetch-CFWkfPNA.js","assets/base64-DJRlyqZu.js","assets/runtime-env-Dlaokqg1.js","assets/fetch-body-D2PwksUW.js","assets/api-endpoint-GRCyib6X.js","assets/float-topology-BYb7rxY5.js","assets/runtime-env-E-i2SW1s.js","assets/secret-topology-BE7Eyd3P.js","assets/secrets-bridge-client-H8-Z1RVR.js","assets/port-bridge-client-Cti-DmEY.js","assets/image-markers-CxJ9ZBgw.js","assets/tool-ui-eSQ1g2I1.js","assets/panel-rpc-B3MSVImO.js","assets/bedrock-camp-compat-CgBMwna8.js","assets/transform-messages-BsQjTIEJ.js","assets/bedrock-camp-Djf-aXdl.js","assets/temperature-support-C046iRqM.js","assets/local-llm-Drh6gTi0.js","assets/legacy-api-aliases-45zvHmpJ.js","assets/adobe-CU3EGPi1.js","assets/silent-renew-backoff-t_Cd4Zw7.js","assets/provider-settings-Cr_y3ZO3.js","assets/telemetry-BVzuNdvW.js","assets/runtime-env-CgsZ7LTp.js","assets/tray-runtime-config-CI5NvXNM.js","assets/messages-BD4p8GuF.js","assets/tray-follower-status-BAjnN7Ar.js","assets/clipboard-eqmn97SP.js","assets/tray-join-url-BIvzbiFR.js","assets/oauth-service-NaEg6KHx.js","assets/permissions-surface-registry-CilCRwhh.js","assets/llm-session-id-bZQs6gBN.js","assets/cerebras-DUaxfafs.js","assets/github-copilot-DNYQa3vN.js","assets/github-BcG9_uX5.js","assets/global-db-CbuLl-zx.js","assets/openai-codex-WrMiquZ6.js","assets/pkce-hGf_TEnP.js","assets/openrouter-models-D210d5Hg.js","assets/openrouter-oauth-pLAIH3V3.js","assets/openrouter-CF6GBIsh.js","assets/xai-grok-BnPIwUZr.js","assets/xai-grok-errors-bnlIBeu-.js"])))=>i.map(i=>d[i]);
2
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./preload-helper-Czpn1I53.js";var n={include:[`*`],exclude:[`amazon-bedrock`,`xai`]},r=e({getRegisteredProviderConfig:()=>d,getRegisteredProviderIds:()=>f,registerProviderConfig:()=>p,registerProviders:()=>u,shouldIncludeProvider:()=>a}),i=Object.assign({"/packages/dev-tools/providers.build.json":n})[`/packages/dev-tools/providers.build.json`]??{include:[`*`],exclude:[]};function a(e){let{include:t,exclude:n}=i;return n.includes(`*`)||n.includes(e)?!1:!!(t.includes(`*`)||t.includes(e))}var o=Object.assign({"./built-in/azure-ai-foundry.ts":()=>t(()=>import(`./azure-ai-foundry-Bo0FAJyX.js`),[]),"./built-in/azure-openai.ts":()=>t(()=>import(`./azure-openai-B2ax_lID.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27])),"./built-in/bedrock-camp-compat.ts":()=>t(()=>import(`./bedrock-camp-compat-CgBMwna8.js`).then(e=>e.n),__vite__mapDeps([26,2])),"./built-in/bedrock-camp.ts":()=>t(()=>import(`./bedrock-camp-Djf-aXdl.js`),__vite__mapDeps([28,6,5,3,4,7,8,2,9,27,29])),"./built-in/local-llm.ts":()=>t(()=>import(`./local-llm-Drh6gTi0.js`),__vite__mapDeps([30,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,31]))}),s=Object.assign({"/packages/webapp/providers/adobe.ts":()=>t(()=>import(`./adobe-CU3EGPi1.js`),__vite__mapDeps([32,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,31,33,34,35,36,37,38,39,40,41,42,43,29,44])),"/packages/webapp/providers/cerebras.ts":()=>t(()=>import(`./cerebras-DUaxfafs.js`),__vite__mapDeps([45,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,31])),"/packages/webapp/providers/github-copilot.ts":()=>t(()=>import(`./github-copilot-DNYQa3vN.js`),__vite__mapDeps([46,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,31,34,35,36,37,38,39,40,41])),"/packages/webapp/providers/github.ts":()=>t(()=>import(`./github-BcG9_uX5.js`),__vite__mapDeps([47,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,33,37,38,34,35,36,39,40,41,42,43,48])),"/packages/webapp/providers/openai-codex.ts":()=>t(()=>import(`./openai-codex-WrMiquZ6.js`),__vite__mapDeps([49,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,31,34,35,36,37,38,39,40,41,50])),"/packages/webapp/providers/openrouter-models.ts":()=>t(()=>import(`./openrouter-models-D210d5Hg.js`),__vite__mapDeps([51,9])),"/packages/webapp/providers/openrouter-oauth.ts":()=>t(()=>import(`./openrouter-oauth-pLAIH3V3.js`),__vite__mapDeps([52,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,34,35,36,37,38,39,40,41,50])),"/packages/webapp/providers/openrouter.ts":()=>t(()=>import(`./openrouter-CF6GBIsh.js`),__vite__mapDeps([53,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,31,34,35,36,37,38,39,40,41,51,52,50])),"/packages/webapp/providers/xai-grok-errors.ts":()=>t(()=>import(`./xai-grok-errors-bnlIBeu-.js`),[]),"/packages/webapp/providers/xai-grok.ts":()=>t(()=>import(`./xai-grok-BnPIwUZr.js`),__vite__mapDeps([54,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,31,34,35,36,37,38,39,40,41,50,55]))}),c=new Map,l=null;function u(){return l===null&&(l=(async()=>{let e=await Promise.all(Object.values(o).map(e=>e()));for(let t of e)t.config&&a(t.config.id)&&(c.set(t.config.id,t.config),t.register?.());let t=await Promise.all(Object.values(s).map(e=>e()));for(let e of t)e.config&&(c.set(e.config.id,e.config),e.register?.())})()),l}function d(e){return c.get(e)}function f(){return[...c.keys()]}function p(e){c.set(e.id,e)}export{u as a,p as i,f as n,a as o,r,d as t};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/azure-openai-BLxcD-7a.js","assets/account-store-C209lUzH.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/preload-helper-Czpn1I53.js","assets/claude-model-version-BJLrDjmH.js","assets/models-BSkXF4T6.js","assets/diagnostics-DN_idNHx.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-B-zmcypy.js","assets/libesm-BypnjKEL.js","assets/logger-DDBAeTLF.js","assets/src-CAWTvdAa.js","assets/proxied-fetch-CFWkfPNA.js","assets/base64-DJRlyqZu.js","assets/runtime-env-Dlaokqg1.js","assets/fetch-body-D2PwksUW.js","assets/api-endpoint-GRCyib6X.js","assets/float-topology-BYb7rxY5.js","assets/runtime-env-E-i2SW1s.js","assets/secret-topology-BE7Eyd3P.js","assets/secrets-bridge-client-H8-Z1RVR.js","assets/port-bridge-client-Cti-DmEY.js","assets/image-markers-CxJ9ZBgw.js","assets/tool-ui-eSQ1g2I1.js","assets/panel-rpc-B3MSVImO.js","assets/bedrock-camp-compat-CgBMwna8.js","assets/transform-messages-BsQjTIEJ.js","assets/bedrock-camp-Djf-aXdl.js","assets/temperature-support-C046iRqM.js","assets/local-llm-rga3xbUM.js","assets/legacy-api-aliases-45zvHmpJ.js","assets/adobe-CMK4xkCW.js","assets/silent-renew-backoff-t_Cd4Zw7.js","assets/provider-settings-BQqRKwG3.js","assets/telemetry-BVzuNdvW.js","assets/runtime-env-CgsZ7LTp.js","assets/tray-runtime-config-CI5NvXNM.js","assets/messages-BD4p8GuF.js","assets/tray-follower-status-BAjnN7Ar.js","assets/clipboard-eqmn97SP.js","assets/tray-join-url-BIvzbiFR.js","assets/oauth-service-NaEg6KHx.js","assets/permissions-surface-registry-CilCRwhh.js","assets/llm-session-id-bZQs6gBN.js","assets/cerebras-Db8_4GyD.js","assets/github-copilot-Ciuo95cM.js","assets/github-BvJIYopa.js","assets/global-db-CbuLl-zx.js","assets/openai-codex-CBT0YEJe.js","assets/pkce-hGf_TEnP.js","assets/openrouter-models-D210d5Hg.js","assets/openrouter-oauth-BlRAjEY7.js","assets/openrouter-BHVD0eo2.js","assets/xai-grok-Bd4-jPZx.js","assets/xai-grok-errors-bnlIBeu-.js"])))=>i.map(i=>d[i]);
2
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./preload-helper-Czpn1I53.js";var n={include:[`*`],exclude:[`amazon-bedrock`,`xai`]},r=e({getRegisteredProviderConfig:()=>d,getRegisteredProviderIds:()=>f,registerProviderConfig:()=>p,registerProviders:()=>u,shouldIncludeProvider:()=>a}),i=Object.assign({"/packages/dev-tools/providers.build.json":n})[`/packages/dev-tools/providers.build.json`]??{include:[`*`],exclude:[]};function a(e){let{include:t,exclude:n}=i;return n.includes(`*`)||n.includes(e)?!1:!!(t.includes(`*`)||t.includes(e))}var o=Object.assign({"./built-in/azure-ai-foundry.ts":()=>t(()=>import(`./azure-ai-foundry-Bo0FAJyX.js`),[]),"./built-in/azure-openai.ts":()=>t(()=>import(`./azure-openai-BLxcD-7a.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27])),"./built-in/bedrock-camp-compat.ts":()=>t(()=>import(`./bedrock-camp-compat-CgBMwna8.js`).then(e=>e.n),__vite__mapDeps([26,2])),"./built-in/bedrock-camp.ts":()=>t(()=>import(`./bedrock-camp-Djf-aXdl.js`),__vite__mapDeps([28,6,5,3,4,7,8,2,9,27,29])),"./built-in/local-llm.ts":()=>t(()=>import(`./local-llm-rga3xbUM.js`),__vite__mapDeps([30,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,31]))}),s=Object.assign({"/packages/webapp/providers/adobe.ts":()=>t(()=>import(`./adobe-CMK4xkCW.js`),__vite__mapDeps([32,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,31,33,34,35,36,37,38,39,40,41,42,43,29,44])),"/packages/webapp/providers/cerebras.ts":()=>t(()=>import(`./cerebras-Db8_4GyD.js`),__vite__mapDeps([45,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,31])),"/packages/webapp/providers/github-copilot.ts":()=>t(()=>import(`./github-copilot-Ciuo95cM.js`),__vite__mapDeps([46,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,31,34,35,36,37,38,39,40,41])),"/packages/webapp/providers/github.ts":()=>t(()=>import(`./github-BvJIYopa.js`),__vite__mapDeps([47,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,33,37,38,34,35,36,39,40,41,42,43,48])),"/packages/webapp/providers/openai-codex.ts":()=>t(()=>import(`./openai-codex-CBT0YEJe.js`),__vite__mapDeps([49,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,31,34,35,36,37,38,39,40,41,50])),"/packages/webapp/providers/openrouter-models.ts":()=>t(()=>import(`./openrouter-models-D210d5Hg.js`),__vite__mapDeps([51,9])),"/packages/webapp/providers/openrouter-oauth.ts":()=>t(()=>import(`./openrouter-oauth-BlRAjEY7.js`),__vite__mapDeps([52,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,34,35,36,37,38,39,40,41,50])),"/packages/webapp/providers/openrouter.ts":()=>t(()=>import(`./openrouter-BHVD0eo2.js`),__vite__mapDeps([53,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,31,34,35,36,37,38,39,40,41,51,52,50])),"/packages/webapp/providers/xai-grok-errors.ts":()=>t(()=>import(`./xai-grok-errors-bnlIBeu-.js`),[]),"/packages/webapp/providers/xai-grok.ts":()=>t(()=>import(`./xai-grok-Bd4-jPZx.js`),__vite__mapDeps([54,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,31,34,35,36,37,38,39,40,41,50,55]))}),c=new Map,l=null;function u(){return l===null&&(l=(async()=>{let e=await Promise.all(Object.values(o).map(e=>e()));for(let t of e)t.config&&a(t.config.id)&&(c.set(t.config.id,t.config),t.register?.());let t=await Promise.all(Object.values(s).map(e=>e()));for(let e of t)e.config&&(c.set(e.config.id,e.config),e.register?.())})()),l}function d(e){return c.get(e)}function f(){return[...c.keys()]}function p(e){c.set(e.id,e)}export{u as a,p as i,f as n,a as o,r,d as t};
@@ -1 +1 @@
1
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{D as t,E as n,m as r,w as i}from"./account-store-CrzQRVmk.js";import{o as a}from"./claude-model-version-BJLrDjmH.js";import{t as o}from"./logger-DDBAeTLF.js";import{t as s}from"./llm-session-id-bZQs6gBN.js";import{i as c,t as l}from"./icons-BJsliYCh.js";var u=e({lucideIconNames:()=>h,pickLucideIcon:()=>g,quickLabel:()=>f}),d=o(`quick-llm`);async function f(e){let i=r();if(!i)return d.debug(`No API key for active provider — skipping`),null;let o=t(),s=n(),c;if(c=e.modelId?b(o,e.modelId)??b(o,s):_(o,s),!c)return d.debug(`No model available for provider`,{providerId:o}),null;let l={role:`user`,content:e.prompt,timestamp:Date.now()},u={};c.provider===`adobe`&&(u[`X-Session-Id`]=S());try{let t=(await a(c,{systemPrompt:e.system,messages:[l]},{apiKey:i,maxTokens:e.maxTokens??60,temperature:e.temperature??.3,signal:e.signal,headers:Object.keys(u).length>0?u:void 0})).content.filter(e=>e.type===`text`).map(e=>e.text).join(``).trim();return t.length>0?t:null}catch(e){return d.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}var p=null;function m(e){return e.replace(/([A-Z]+)([A-Z][a-z])/g,`$1-$2`).replace(/([a-z0-9])([A-Z])/g,`$1-$2`).replace(/([A-Za-z])(\d)/g,`$1-$2`).toLowerCase()}function h(){return p||=Object.keys(c).map(m).sort(),p}async function g(e){let t=h(),n=await(e.labelFn??f)({system:`You pick ONE icon for a UI element. Respond with exactly one icon name from the provided list — lowercase, no quotes, no punctuation, nothing else.`,prompt:`Pick the single most fitting icon for: ${e.subject}\n\nValid icon names:\n${t.join(` `)}`,maxTokens:16,temperature:.2,signal:e.signal});if(!n)return null;let r=n.trim().toLowerCase().replace(/[^a-z0-9-]/g,``);return l(r)?r:null}function _(e,t){let n=i(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],a=y(r.id),o=n.filter(e=>v(e,r,a));return o.length===0?r:(o.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),o[0])}function v(e,t,n){if(e.id===t.id)return!1;let r=t.cost?.input??1/0;if((e.cost?.input??1/0)>=r)return!1;let i=e.id.toLowerCase();switch(n){case`claude`:return i.includes(`haiku`);case`gpt`:return/(^|-)mini(-|$)|(^|-)nano(-|$)/.test(i);case`gemini`:return i.includes(`flash`);case`grok`:return/(^|-)mini(-|$)|(^|-)fast(-|$)/.test(i);case`unknown`:return!0}}function y(e){let t=e.toLowerCase();return t.includes(`claude`)?`claude`:t.includes(`gemini`)?`gemini`:t.includes(`grok`)?`grok`:/^(gpt|o\d)/.test(t)?`gpt`:`unknown`}function b(e,t){return i(e).find(e=>e.id===t)}var x=`ui-quick-llm`;function S(){return s(x)}export{u as n,f as t};
1
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{D as t,E as n,m as r,w as i}from"./account-store-C209lUzH.js";import{o as a}from"./claude-model-version-BJLrDjmH.js";import{t as o}from"./logger-DDBAeTLF.js";import{t as s}from"./llm-session-id-bZQs6gBN.js";import{i as c,t as l}from"./icons-BJsliYCh.js";var u=e({lucideIconNames:()=>h,pickLucideIcon:()=>g,quickLabel:()=>f}),d=o(`quick-llm`);async function f(e){let i=r();if(!i)return d.debug(`No API key for active provider — skipping`),null;let o=t(),s=n(),c;if(c=e.modelId?b(o,e.modelId)??b(o,s):_(o,s),!c)return d.debug(`No model available for provider`,{providerId:o}),null;let l={role:`user`,content:e.prompt,timestamp:Date.now()},u={};c.provider===`adobe`&&(u[`X-Session-Id`]=S());try{let t=(await a(c,{systemPrompt:e.system,messages:[l]},{apiKey:i,maxTokens:e.maxTokens??60,temperature:e.temperature??.3,signal:e.signal,headers:Object.keys(u).length>0?u:void 0})).content.filter(e=>e.type===`text`).map(e=>e.text).join(``).trim();return t.length>0?t:null}catch(e){return d.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}var p=null;function m(e){return e.replace(/([A-Z]+)([A-Z][a-z])/g,`$1-$2`).replace(/([a-z0-9])([A-Z])/g,`$1-$2`).replace(/([A-Za-z])(\d)/g,`$1-$2`).toLowerCase()}function h(){return p||=Object.keys(c).map(m).sort(),p}async function g(e){let t=h(),n=await(e.labelFn??f)({system:`You pick ONE icon for a UI element. Respond with exactly one icon name from the provided list — lowercase, no quotes, no punctuation, nothing else.`,prompt:`Pick the single most fitting icon for: ${e.subject}\n\nValid icon names:\n${t.join(` `)}`,maxTokens:16,temperature:.2,signal:e.signal});if(!n)return null;let r=n.trim().toLowerCase().replace(/[^a-z0-9-]/g,``);return l(r)?r:null}function _(e,t){let n=i(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],a=y(r.id),o=n.filter(e=>v(e,r,a));return o.length===0?r:(o.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),o[0])}function v(e,t,n){if(e.id===t.id)return!1;let r=t.cost?.input??1/0;if((e.cost?.input??1/0)>=r)return!1;let i=e.id.toLowerCase();switch(n){case`claude`:return i.includes(`haiku`);case`gpt`:return/(^|-)mini(-|$)|(^|-)nano(-|$)/.test(i);case`gemini`:return i.includes(`flash`);case`grok`:return/(^|-)mini(-|$)|(^|-)fast(-|$)/.test(i);case`unknown`:return!0}}function y(e){let t=e.toLowerCase();return t.includes(`claude`)?`claude`:t.includes(`gemini`)?`gemini`:t.includes(`grok`)?`grok`:/^(gpt|o\d)/.test(t)?`gpt`:`unknown`}function b(e,t){return i(e).find(e=>e.id===t)}var x=`ui-quick-llm`;function S(){return s(x)}export{u as n,f as t};
@@ -1 +1 @@
1
- import{t as e}from"./main-DSsincSj.js";async function t(){try{let e=await navigator.serviceWorker?.getRegistrations?.();e&&await Promise.all(e.map(e=>e.unregister().catch(()=>!1)))}catch{}try{let e=await indexedDB.databases();await Promise.all(e.filter(e=>!!e.name).map(e=>new Promise(t=>{let n=indexedDB.deleteDatabase(e.name);n.onsuccess=()=>t(),n.onerror=()=>t(),n.onblocked=()=>t()})))}catch{}try{let e=navigator.storage;if(typeof e?.getDirectory==`function`){let t=await e.getDirectory(),n=[];for await(let e of t.keys())n.push(e);await Promise.all(n.map(e=>t.removeEntry(e,{recursive:!0}).catch(()=>{})))}}catch{}}function n(n,r,i={}){if(n.dataset.recoveryBusy===`1`)return;let a=i.wipe??t,o=i.reload??(()=>location.reload()),s=r instanceof Error?r.message:String(r),c=i.verdict===`browser-wedged`,l=document.createElement(`div`);l.style.cssText=`padding:2rem;text-align:center;font-family:system-ui;`;let u=document.createElement(`h1`);u.style.color=`var(--s2-negative, #e34850)`,u.textContent=c?`Your browser needs a restart`:`Failed to start`;let d=document.createElement(`p`);d.style.color=`var(--s2-content-tertiary, #717171)`,d.textContent=s;let f=document.createElement(`div`);f.style.cssText=`display:flex;gap:0.75rem;justify-content:center;flex-wrap:wrap;margin-top:1.5rem;`;let p=document.createElement(`button`);p.type=`button`,p.textContent=`Reset local data & reload`,p.dataset.variant=c?`demoted`:`destructive`,p.style.cssText=c?`padding:0.5rem 1rem;cursor:pointer;border:1px solid var(--s2-content-tertiary, #717171);background:transparent;color:inherit;border-radius:4px;`:`padding:0.5rem 1rem;cursor:pointer;border:1px solid var(--s2-negative, #e34850);background:var(--s2-negative, #e34850);color:#fff;border-radius:4px;`;let m=document.createElement(`button`);if(m.type=`button`,m.textContent=`Reload`,m.style.cssText=c?`padding:0.5rem 1rem;cursor:pointer;border:1px solid var(--s2-accent, #0265dc);background:var(--s2-accent, #0265dc);color:#fff;border-radius:4px;`:`padding:0.5rem 1rem;cursor:pointer;border:1px solid var(--s2-content-tertiary, #717171);background:transparent;color:inherit;border-radius:4px;`,p.addEventListener(`click`,()=>{p.disabled=!0,m.disabled=!0,p.textContent=`Resetting…`,n.dataset.recoveryBusy=`1`,(async()=>{try{await a()}catch{}for(let t of e)try{localStorage.removeItem(t)}catch{}o()})()}),m.addEventListener(`click`,()=>{o()}),c){let e=document.createElement(`p`);e.style.cssText=`max-width:34rem;margin:1rem auto 0;`,e.textContent=`This browser has stopped starting web workers — a browser process issue, not a problem with your data. Quit the browser completely, reopen it, and come back. Your local data is intact; resetting it will not fix this.`,l.append(u,d,e),f.append(m,p)}else l.append(u,d),f.append(p,m);for(l.append(f);n.firstChild;)n.removeChild(n.firstChild);n.appendChild(l)}export{n as renderBootRecoveryScreen};
1
+ import{t as e}from"./main-Bpl4dJEr.js";async function t(){try{let e=await navigator.serviceWorker?.getRegistrations?.();e&&await Promise.all(e.map(e=>e.unregister().catch(()=>!1)))}catch{}try{let e=await indexedDB.databases();await Promise.all(e.filter(e=>!!e.name).map(e=>new Promise(t=>{let n=indexedDB.deleteDatabase(e.name);n.onsuccess=()=>t(),n.onerror=()=>t(),n.onblocked=()=>t()})))}catch{}try{let e=navigator.storage;if(typeof e?.getDirectory==`function`){let t=await e.getDirectory(),n=[];for await(let e of t.keys())n.push(e);await Promise.all(n.map(e=>t.removeEntry(e,{recursive:!0}).catch(()=>{})))}}catch{}}function n(n,r,i={}){if(n.dataset.recoveryBusy===`1`)return;let a=i.wipe??t,o=i.reload??(()=>location.reload()),s=r instanceof Error?r.message:String(r),c=i.verdict===`browser-wedged`,l=document.createElement(`div`);l.style.cssText=`padding:2rem;text-align:center;font-family:system-ui;`;let u=document.createElement(`h1`);u.style.color=`var(--s2-negative, #e34850)`,u.textContent=c?`Your browser needs a restart`:`Failed to start`;let d=document.createElement(`p`);d.style.color=`var(--s2-content-tertiary, #717171)`,d.textContent=s;let f=document.createElement(`div`);f.style.cssText=`display:flex;gap:0.75rem;justify-content:center;flex-wrap:wrap;margin-top:1.5rem;`;let p=document.createElement(`button`);p.type=`button`,p.textContent=`Reset local data & reload`,p.dataset.variant=c?`demoted`:`destructive`,p.style.cssText=c?`padding:0.5rem 1rem;cursor:pointer;border:1px solid var(--s2-content-tertiary, #717171);background:transparent;color:inherit;border-radius:4px;`:`padding:0.5rem 1rem;cursor:pointer;border:1px solid var(--s2-negative, #e34850);background:var(--s2-negative, #e34850);color:#fff;border-radius:4px;`;let m=document.createElement(`button`);if(m.type=`button`,m.textContent=`Reload`,m.style.cssText=c?`padding:0.5rem 1rem;cursor:pointer;border:1px solid var(--s2-accent, #0265dc);background:var(--s2-accent, #0265dc);color:#fff;border-radius:4px;`:`padding:0.5rem 1rem;cursor:pointer;border:1px solid var(--s2-content-tertiary, #717171);background:transparent;color:inherit;border-radius:4px;`,p.addEventListener(`click`,()=>{p.disabled=!0,m.disabled=!0,p.textContent=`Resetting…`,n.dataset.recoveryBusy=`1`,(async()=>{try{await a()}catch{}for(let t of e)try{localStorage.removeItem(t)}catch{}o()})()}),m.addEventListener(`click`,()=>{o()}),c){let e=document.createElement(`p`);e.style.cssText=`max-width:34rem;margin:1rem auto 0;`,e.textContent=`This browser has stopped starting web workers — a browser process issue, not a problem with your data. Quit the browser completely, reopen it, and come back. Your local data is intact; resetting it will not fix this.`,l.append(u,d,e),f.append(m,p)}else l.append(u,d),f.append(p,m);for(l.append(f);n.firstChild;)n.removeChild(n.firstChild);n.appendChild(l)}export{n as renderBootRecoveryScreen};
@@ -0,0 +1,46 @@
1
+ import"./browser-q8slJ96R.js";import{a as e,c as t,d as n,o as r,s as i,u as a}from"./extension-media-capture-BBMLU8BH.js";import{ffmpegCoreFromEnv as o}from"./engine-BnH9pfmR.js";import{a as s,createIpkContextFromCtx as c,i as l,n as u,r as ee,t as d}from"./run-DuzDBKj0.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
+
3
+ Usage:
4
+ ffprobe [options] -i <input>
5
+ ffprobe [options] <input>
6
+
7
+ SLICC does not ship a real ffprobe binary. Containers mediabunny reads
8
+ (mp4/mov, webm/mkv, mp3, wav, ogg, flac, aac, mpegts) are probed from
9
+ their index — typed fields, no wasm boot, nothing to install. Anything
10
+ else falls back to the shared @ffmpeg/core wasm, run with \`-i <input>\`
11
+ (no output) and its Input #N banner parsed. Either way the fields are:
12
+
13
+ format: filename, format_name, duration, start_time, bit_rate
14
+ streams: index, codec_type, codec_name, profile, width/height,
15
+ pix_fmt, sample_rate, channels, channel_layout,
16
+ r_frame_rate / avg_frame_rate, bit_rate, duration
17
+
18
+ Supported options:
19
+ -i FILE Input file (VFS path)
20
+ -show_format Include format section
21
+ -show_streams Include streams section
22
+ -show_entries SPEC format=a,b:stream=c,d (subset of real ffprobe)
23
+ -select_streams SPEC v / a / v:N / a:N (first matching stream index N)
24
+ -of / -print_format FMT json | csv[=p=0] | default[=nw=1:nk=1]
25
+ csv: p=1 (default) prefixes each row with the
26
+ section name (format|stream); p=0 prints values only.
27
+ Fields containing commas/quotes are CSV-quoted.
28
+ -v / -loglevel LEVEL quiet|panic|fatal|error|warning|info|verbose|debug
29
+ -version Report the wasm core that would back the fallback
30
+
31
+ Unsupported options are rejected with a non-zero exit (never silently
32
+ ignored). FFMPEG_ENGINE=wasm forces the emulation; FFMPEG_ENGINE=mediabunny
33
+ refuses containers it cannot read instead of falling back. The fallback
34
+ needs the same core pin as \`ffmpeg\` (\`@ffmpeg/core\`, or
35
+ \`@ffmpeg/core-mt\` with FFMPEG_CORE=mt on a cross-origin-isolated leader):
36
+ ipk add -g @ffmpeg/core@<pinned>
37
+
38
+ Examples:
39
+ ffprobe -v error -show_entries stream=channels -select_streams a:0 -of default=nw=1:nk=1 clip.mp4
40
+ ffprobe -v error -show_format -show_streams -of json clip.mp4
41
+ `,stderr:``,exitCode:0}}async function D(t){let i=o(t.env)===`mt`,a=await n(c(t),void 0,i);return a?{stdout:`ffprobe (emulated via @ffmpeg/ffmpeg — not a real ffprobe binary)\ncore: ${e(a)}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`ffprobe: ${r(i)}\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
+ `)}\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
+ `)}\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(e){let t=``;try{return{ffmpeg:await i({onProgress:e=>{t+=`${e}\n`},ipk:c(e),preferMt:o(e.env)===`mt`}),loadLog:t}}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(t(n))return a(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-BnH9pfmR.js`),i=r(n.env);if(i===`wasm`)return null;let{probeViaMediabunny:a}=await import(`./bunny-probe-Bgz20a1s.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
+ `,exitCode:1}:null}async function $(e,t){if(!e.inputPath)return{stdout:``,stderr:`ffprobe: at least one input file must be specified
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 i=u(),o=J(e.inputPath??``),s=ee(i,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,i,[{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 t(e)&&(g=!0,a(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,i)}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};
@@ -91,7 +91,7 @@ Examples:
91
91
  --authorize-url 'https://auth.x.ai/oauth2/auth?...' \\
92
92
  --redirect-pattern 'http://127.0.0.1:56121/*'
93
93
  curl -H "Authorization: Bearer $(oauth-token github)" https://api.github.com/user
94
- `}async function d(n,r){let i=await import(`./account-store-BeWWaisz.js`).then(e=>e.t),a=await import(`./providers-Rty0Ovfq.js`).then(e=>e.r);if(t(n,{valueFlags:c}))return{stdout:u(),stderr:``,exitCode:0};let o=e(n,{value:c,bool:l});if(`error`in o)return V(`oauth-token: ${o.error}`);if(o.bools.has(`--list`))return H(i.getAccounts,a.getRegisteredProviderIds,a.getRegisteredProviderConfig,i.getOAuthAccountInfo);if(o.bools.has(`--check`))return w(o.positionals);if(o.bools.has(`--expire`))return D(o.positionals);if(o.bools.has(`--renew`))return O(o.positionals);if(o.values.has(`--from-file`)||o.bools.has(`--intercept`))return I(o,n,r);let s=f(o);if(!s.ok)return s.result;let d=o.bools.has(`--force-login`),m=p(o,i,a);if(!m.ok)return m.result;let _=h(m.value,a.getRegisteredProviderConfig);if(!_.ok)return _.result;if(!d){let e=await g(m.value,_.value,i.getOAuthAccountInfo,s.value);if(e)return e}return y(m.value,_.value,s.value,i.getOAuthAccountInfo)}function f(e){if(!e.values.has(`--scope`))return{ok:!0,value:void 0};let t=e.values.get(`--scope`)?.trim();return!t||t.startsWith(`-`)?{ok:!1,result:V(`oauth-token: --scope requires a value`)}:{ok:!0,value:t}}function p(e,t,n){if(e.values.has(`--provider`)){let t=e.values.get(`--provider`);return t?{ok:!0,value:t}:{ok:!1,result:V(`oauth-token: --provider requires a value`)}}if(e.positionals.length>0)return{ok:!0,value:e.positionals[0]};let r=t.getSelectedProvider();if(m(n.getRegisteredProviderConfig(r)))return{ok:!0,value:r};let i=n.getRegisteredProviderIds().find(e=>m(n.getRegisteredProviderConfig(e)));return i?{ok:!0,value:i}:{ok:!1,result:V(`oauth-token: no OAuth providers configured`)}}function m(e){return!!(e?.isOAuth&&(e.onOAuthLogin||e.onOAuthLoginIntercepted))}function h(e,t){let n=t(e);return n?m(n)?{ok:!0,value:n}:{ok:!1,result:V(`oauth-token: provider "${e}" is not an OAuth provider`)}:{ok:!1,result:V(`oauth-token: unknown provider "${e}"`)}}async function g(e,t,n,r){let i=n(e);return i&&!i.expired?_(e,i,r):!i?.expired||!t.onSilentRenew||!await S(t.onSilentRenew)?null:_(e,n(e),r)}function _(e,t,n){return n&&!s(t?.scopes,n)?null:v(e,t?.maskedValue)}function v(e,t){return t?{stdout:`${t}\n`,stderr:``,exitCode:0}:V(`oauth-token: no usable token for ${e}; run: oauth-token ${e} --force-login`)}async function y(e,t,n,r){try{let i=await b(e,t,n);return i.error?i.error:x(e,r,i.succeeded)}catch(t){let n=t instanceof Error?t.message:String(t);return t instanceof Error&&t.name===`OAuthLaunchError`?(console.error(`[oauth-token] Provider ${e}: login could not be shown:`,n),V(`oauth-token: ${n}`)):(console.error(`[oauth-token] Provider ${e}: login failed:`,n),V(`oauth-token: login failed: ${n}`))}}async function b(e,t,n){let r=n?{scopes:n}:void 0,i=!1,a=()=>{i=!0};if(t.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:n}=await import(`./oauth-service-TDESX_tk.js`),o=await n();return o?(await t.onOAuthLoginIntercepted(o,a,r),{error:null,succeeded:i}):{error:V(`oauth-token: provider "${e}" needs the controlled-browser interceptor, but no CDP transport is available in this runtime.`),succeeded:!1}}if(t.onOAuthLogin){let{createOAuthLauncher:e}=await import(`./oauth-service-TDESX_tk.js`);return await t.onOAuthLogin(e(),a,r),{error:null,succeeded:i}}return{error:V(`oauth-token: provider "${e}" has no OAuth login hook`),succeeded:!1}}function x(e,t,n){if(!n)return console.error(`[oauth-token] Provider ${e}: interactive login was not completed`),V(`oauth-token: interactive login was not completed (cancelled, timed out, or no one could approve it)`);let r=t(e);return r?.token&&!r.expired?v(e,r.maskedValue):r?.token?V(`oauth-token: login completed but the saved token is already expired`):(console.error(`[oauth-token] Provider ${e}: login completed but no token was saved`),V(`oauth-token: login completed but no token was saved`))}async function S(e){try{return await e()!==null}catch{return!1}}function C(e,t,n,r,i){let a=e[0];if(a)return a;let o=n();return r(o)?.[t]?o:i().find(e=>r(e)?.[t])}async function w(e){let{getSelectedProvider:t,getOAuthAccountInfo:n}=await import(`./account-store-BeWWaisz.js`).then(e=>e.t),{getRegisteredProviderConfig:r,getRegisteredProviderIds:i}=await import(`./providers-Rty0Ovfq.js`).then(e=>e.r),a=C(e,`onValidateToken`,t,r,i);if(!a)return V(`oauth-token --check: no provider supports an upstream token check`);let o=r(a);if(!o)return V(`oauth-token --check: unknown provider "${a}"`);if(!o.onValidateToken)return V(`oauth-token --check: provider "${a}" cannot be checked upstream (no onValidateToken hook); only locally stored state is known.`);let s=n(a),c=[`oauth-token --check ${a}`,` stored token: ${P(s)}`];if(!s)return c.push(` upstream check: skipped — nothing to check`,...j(a)),{stdout:c.join(`
94
+ `}async function d(n,r){let i=await import(`./account-store-BRlVG3UL.js`).then(e=>e.t),a=await import(`./providers-Cg-S0rLK.js`).then(e=>e.r);if(t(n,{valueFlags:c}))return{stdout:u(),stderr:``,exitCode:0};let o=e(n,{value:c,bool:l});if(`error`in o)return V(`oauth-token: ${o.error}`);if(o.bools.has(`--list`))return H(i.getAccounts,a.getRegisteredProviderIds,a.getRegisteredProviderConfig,i.getOAuthAccountInfo);if(o.bools.has(`--check`))return w(o.positionals);if(o.bools.has(`--expire`))return D(o.positionals);if(o.bools.has(`--renew`))return O(o.positionals);if(o.values.has(`--from-file`)||o.bools.has(`--intercept`))return I(o,n,r);let s=f(o);if(!s.ok)return s.result;let d=o.bools.has(`--force-login`),m=p(o,i,a);if(!m.ok)return m.result;let _=h(m.value,a.getRegisteredProviderConfig);if(!_.ok)return _.result;if(!d){let e=await g(m.value,_.value,i.getOAuthAccountInfo,s.value);if(e)return e}return y(m.value,_.value,s.value,i.getOAuthAccountInfo)}function f(e){if(!e.values.has(`--scope`))return{ok:!0,value:void 0};let t=e.values.get(`--scope`)?.trim();return!t||t.startsWith(`-`)?{ok:!1,result:V(`oauth-token: --scope requires a value`)}:{ok:!0,value:t}}function p(e,t,n){if(e.values.has(`--provider`)){let t=e.values.get(`--provider`);return t?{ok:!0,value:t}:{ok:!1,result:V(`oauth-token: --provider requires a value`)}}if(e.positionals.length>0)return{ok:!0,value:e.positionals[0]};let r=t.getSelectedProvider();if(m(n.getRegisteredProviderConfig(r)))return{ok:!0,value:r};let i=n.getRegisteredProviderIds().find(e=>m(n.getRegisteredProviderConfig(e)));return i?{ok:!0,value:i}:{ok:!1,result:V(`oauth-token: no OAuth providers configured`)}}function m(e){return!!(e?.isOAuth&&(e.onOAuthLogin||e.onOAuthLoginIntercepted))}function h(e,t){let n=t(e);return n?m(n)?{ok:!0,value:n}:{ok:!1,result:V(`oauth-token: provider "${e}" is not an OAuth provider`)}:{ok:!1,result:V(`oauth-token: unknown provider "${e}"`)}}async function g(e,t,n,r){let i=n(e);return i&&!i.expired?_(e,i,r):!i?.expired||!t.onSilentRenew||!await S(t.onSilentRenew)?null:_(e,n(e),r)}function _(e,t,n){return n&&!s(t?.scopes,n)?null:v(e,t?.maskedValue)}function v(e,t){return t?{stdout:`${t}\n`,stderr:``,exitCode:0}:V(`oauth-token: no usable token for ${e}; run: oauth-token ${e} --force-login`)}async function y(e,t,n,r){try{let i=await b(e,t,n);return i.error?i.error:x(e,r,i.succeeded)}catch(t){let n=t instanceof Error?t.message:String(t);return t instanceof Error&&t.name===`OAuthLaunchError`?(console.error(`[oauth-token] Provider ${e}: login could not be shown:`,n),V(`oauth-token: ${n}`)):(console.error(`[oauth-token] Provider ${e}: login failed:`,n),V(`oauth-token: login failed: ${n}`))}}async function b(e,t,n){let r=n?{scopes:n}:void 0,i=!1,a=()=>{i=!0};if(t.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:n}=await import(`./oauth-service-TDESX_tk.js`),o=await n();return o?(await t.onOAuthLoginIntercepted(o,a,r),{error:null,succeeded:i}):{error:V(`oauth-token: provider "${e}" needs the controlled-browser interceptor, but no CDP transport is available in this runtime.`),succeeded:!1}}if(t.onOAuthLogin){let{createOAuthLauncher:e}=await import(`./oauth-service-TDESX_tk.js`);return await t.onOAuthLogin(e(),a,r),{error:null,succeeded:i}}return{error:V(`oauth-token: provider "${e}" has no OAuth login hook`),succeeded:!1}}function x(e,t,n){if(!n)return console.error(`[oauth-token] Provider ${e}: interactive login was not completed`),V(`oauth-token: interactive login was not completed (cancelled, timed out, or no one could approve it)`);let r=t(e);return r?.token&&!r.expired?v(e,r.maskedValue):r?.token?V(`oauth-token: login completed but the saved token is already expired`):(console.error(`[oauth-token] Provider ${e}: login completed but no token was saved`),V(`oauth-token: login completed but no token was saved`))}async function S(e){try{return await e()!==null}catch{return!1}}function C(e,t,n,r,i){let a=e[0];if(a)return a;let o=n();return r(o)?.[t]?o:i().find(e=>r(e)?.[t])}async function w(e){let{getSelectedProvider:t,getOAuthAccountInfo:n}=await import(`./account-store-BRlVG3UL.js`).then(e=>e.t),{getRegisteredProviderConfig:r,getRegisteredProviderIds:i}=await import(`./providers-Cg-S0rLK.js`).then(e=>e.r),a=C(e,`onValidateToken`,t,r,i);if(!a)return V(`oauth-token --check: no provider supports an upstream token check`);let o=r(a);if(!o)return V(`oauth-token --check: unknown provider "${a}"`);if(!o.onValidateToken)return V(`oauth-token --check: provider "${a}" cannot be checked upstream (no onValidateToken hook); only locally stored state is known.`);let s=n(a),c=[`oauth-token --check ${a}`,` stored token: ${P(s)}`];if(!s)return c.push(` upstream check: skipped — nothing to check`,...j(a)),{stdout:c.join(`
95
95
  `)+`
96
96
  `,stderr:``,exitCode:3};let l=await A(o);if(l?.status===`accepted`){let e=l.userName?` (as ${l.userName})`:``;return c.push(` upstream check: ACCEPTED${e} — the provider honoured the token`),{stdout:c.join(`
97
97
  `)+`
@@ -99,7 +99,7 @@ Examples:
99
99
  `)+`
100
100
  `,stderr:``,exitCode:e}}return c.push(` upstream check: UNKNOWN — the check itself could not run${E(l?.detail)}`,` This says nothing about the token. Retry when the provider is reachable.`),{stdout:c.join(`
101
101
  `)+`
102
- `,stderr:``,exitCode:1}}function T(e,t,n){let r=` upstream check: REJECTED — the provider refused the token${E(n)}`;return t?[r,` A stored refresh token may still be able to replace it — silent renewal`,` has not been tried yet.`,``,` → Next: oauth-token ${e} --renew`,` If that is declined too: oauth-token ${e} --force-login (needs a human).`]:[r,` This provider has no silent renewal, so nothing automated is left.`,...j(e)]}function E(e){return e?` (${e})`:``}async function D(e){let{getAccounts:t,getSelectedProvider:n,saveOAuthAccount:r}=await import(`./account-store-BeWWaisz.js`).then(e=>e.t),{getRegisteredProviderConfig:i,getRegisteredProviderIds:a}=await import(`./providers-Rty0Ovfq.js`).then(e=>e.r),o=C(e,`onSilentRenew`,n,i,a);if(!o)return V(`oauth-token --expire: no provider supports silent renewal`);let s=i(o);if(!s)return V(`oauth-token --expire: unknown provider "${o}"`);if(!s.onSilentRenew)return V(`oauth-token --expire: provider "${o}" has no onSilentRenew hook`);let c=t().find(e=>e.providerId===o);if(!c?.accessToken)return V(`oauth-token --expire: no stored OAuth account for "${o}"`);try{await r({...c,accessToken:c.accessToken,tokenExpiresAt:Date.now()-1e3})}catch(e){return V(`oauth-token --expire: failed to update "${o}": ${e instanceof Error?e.message:String(e)}`)}return{stdout:`oauth-token ${o}: stored token marked expired; next network op will trigger silent renewal.\n`,stderr:``,exitCode:0}}async function O(e){let{getSelectedProvider:t,getOAuthAccountInfo:n}=await import(`./account-store-BeWWaisz.js`).then(e=>e.t),{getRegisteredProviderConfig:r,getRegisteredProviderIds:i}=await import(`./providers-Rty0Ovfq.js`).then(e=>e.r),a=C(e,`onSilentRenew`,t,r,i);if(!a)return V(`oauth-token --renew: no provider supports silent renewal`);let o=r(a);if(!o)return V(`oauth-token --renew: unknown provider "${a}"`);if(!o.onSilentRenew)return V(`oauth-token --renew: provider "${a}" has no onSilentRenew hook`);let s=n(a),c=s?.token,l=[`oauth-token --renew ${a}`];l.push(` stored token: ${P(s)}`);let u=null,d=null;try{u=await o.onSilentRenew()}catch(e){d=e instanceof Error?e.message:String(e)}if(u){let e=n(a),t=!!(c&&e?.token&&c!==e.token);return l.push(` silent renewal: SUCCESS${t?` — token refreshed`:` (token unchanged)`}`),l.push(` renewed token: ${P(e)}`),{stdout:l.join(`
102
+ `,stderr:``,exitCode:1}}function T(e,t,n){let r=` upstream check: REJECTED — the provider refused the token${E(n)}`;return t?[r,` A stored refresh token may still be able to replace it — silent renewal`,` has not been tried yet.`,``,` → Next: oauth-token ${e} --renew`,` If that is declined too: oauth-token ${e} --force-login (needs a human).`]:[r,` This provider has no silent renewal, so nothing automated is left.`,...j(e)]}function E(e){return e?` (${e})`:``}async function D(e){let{getAccounts:t,getSelectedProvider:n,saveOAuthAccount:r}=await import(`./account-store-BRlVG3UL.js`).then(e=>e.t),{getRegisteredProviderConfig:i,getRegisteredProviderIds:a}=await import(`./providers-Cg-S0rLK.js`).then(e=>e.r),o=C(e,`onSilentRenew`,n,i,a);if(!o)return V(`oauth-token --expire: no provider supports silent renewal`);let s=i(o);if(!s)return V(`oauth-token --expire: unknown provider "${o}"`);if(!s.onSilentRenew)return V(`oauth-token --expire: provider "${o}" has no onSilentRenew hook`);let c=t().find(e=>e.providerId===o);if(!c?.accessToken)return V(`oauth-token --expire: no stored OAuth account for "${o}"`);try{await r({...c,accessToken:c.accessToken,tokenExpiresAt:Date.now()-1e3})}catch(e){return V(`oauth-token --expire: failed to update "${o}": ${e instanceof Error?e.message:String(e)}`)}return{stdout:`oauth-token ${o}: stored token marked expired; next network op will trigger silent renewal.\n`,stderr:``,exitCode:0}}async function O(e){let{getSelectedProvider:t,getOAuthAccountInfo:n}=await import(`./account-store-BRlVG3UL.js`).then(e=>e.t),{getRegisteredProviderConfig:r,getRegisteredProviderIds:i}=await import(`./providers-Cg-S0rLK.js`).then(e=>e.r),a=C(e,`onSilentRenew`,t,r,i);if(!a)return V(`oauth-token --renew: no provider supports silent renewal`);let o=r(a);if(!o)return V(`oauth-token --renew: unknown provider "${a}"`);if(!o.onSilentRenew)return V(`oauth-token --renew: provider "${a}" has no onSilentRenew hook`);let s=n(a),c=s?.token,l=[`oauth-token --renew ${a}`];l.push(` stored token: ${P(s)}`);let u=null,d=null;try{u=await o.onSilentRenew()}catch(e){d=e instanceof Error?e.message:String(e)}if(u){let e=n(a),t=!!(c&&e?.token&&c!==e.token);return l.push(` silent renewal: SUCCESS${t?` — token refreshed`:` (token unchanged)`}`),l.push(` renewed token: ${P(e)}`),{stdout:l.join(`
103
103
  `)+`
104
104
  `,stderr:``,exitCode:0}}if(d)return l.push(` silent renewal: ERROR — ${d}`,...N(a)),{stdout:l.join(`
105
105
  `)+`
@@ -1,4 +1,4 @@
1
- import{t as e}from"./base64-DzRgusa4.js";import"./src-CcFD5QfS.js";import{p as t}from"./state-UQWwnZ8X.js";import{t as n}from"./realm-browser-fetch-V3uggGbM.js";const r=new TextEncoder;function i(e){return typeof e==`object`&&!!e&&`exitCode`in e}async function a(e,t){try{return await e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t))}catch{return{message:`curlwright: cannot read ${t}`,exitCode:26}}}function o(e){let t=new Uint8Array(e.length),n=0;for(let r of e)r!==10&&r!==13&&(t[n++]=r);return t.subarray(0,n)}async function s(e,t){let n=t.indexOf(`=`),o=t.indexOf(`@`),s=o!==-1&&(n===-1||o<n),c=s?o:n,l=c===-1?``:t.slice(0,c),u=c===-1?t:t.slice(c+1),d=u;if(s){let t=await a(e,u);if(i(t))return t;d=new TextDecoder().decode(t)}let f=encodeURIComponent(d);return r.encode(l===``?f:`${l}=${f}`)}async function c(e,t){if(t.kind===`urlencode`)return s(e,t.value);if(t.kind===`raw`||!t.value.startsWith(`@`))return r.encode(t.value);let n=await a(e,t.value.slice(1));return i(n)||t.kind===`binary`?n:o(n)}function l(e){let t=Math.max(0,e.length-1),n=e.reduce((e,t)=>e+t.length,0)+t,r=new Uint8Array(n),i=0;return e.forEach((e,t)=>{t>0&&(r[i++]=38),r.set(e,i),i+=e.length}),r}function u(e){let t=e.split(`;`);return{value:t[0],options:t.slice(1)}}function d(e,t){for(let n of e){let e=n.trim();if(e.startsWith(`${t}=`))return e.slice(t.length+1)}return null}function f(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n===-1?t:t.slice(n+1)}async function p(e,t,n){let r=n.value.indexOf(`=`);if(r===-1)return{message:`curlwright: -F requires name=content (got "${n.value}")`,exitCode:2};let o=n.value.slice(0,r),s=n.value.slice(r+1);if(n.literal||s[0]!==`@`&&s[0]!==`<`)return t.append(o,s),null;let{value:c,options:l}=u(s.slice(1)),p=await a(e,c);if(i(p))return p;if(s[0]===`<`)return t.append(o,new TextDecoder().decode(p)),null;let m=d(l,`type`)??`application/octet-stream`,h=d(l,`filename`)??f(c);return t.append(o,new Blob([p],{type:m}),h),null}async function m(e,t,n){if(t.length>0&&n.length>0)return{message:`curlwright: -F cannot be combined with -d`,exitCode:2};if(n.length>0){let t=new FormData;for(let r of n){let n=await p(e,t,r);if(n)return n}return{bytes:null,form:t,contentType:null,accept:null}}if(t.length===0)return{bytes:null,form:null,contentType:null,accept:null};let r=[];for(let n of t){let t=await c(e,n);if(i(t))return t;r.push(t)}let a=t.some(e=>e.kind===`json`);return{bytes:l(r),form:null,contentType:a?`application/json`:`application/x-www-form-urlencoded`,accept:a?`application/json`:null}}const h=new Set([`request`,`header`,`data`,`data-raw`,`data-binary`,`data-ascii`,`data-urlencode`,`json`,`form`,`form-string`,`output`,`dump-header`,`write-out`,`max-time`,`user`,`referer`,`range`,`url`,`tab`,`frame`]),g=new Set([`silent`,`show-error`,`include`,`head`,`verbose`,`fail`,`location`,`remote-name`,`get`,`no-credentials`,`help`]),_={X:`request`,H:`header`,d:`data`,F:`form`,o:`output`,D:`dump-header`,w:`write-out`,m:`max-time`,u:`user`,e:`referer`,r:`range`},v={s:`silent`,S:`show-error`,i:`include`,I:`head`,v:`verbose`,f:`fail`,L:`location`,O:`remote-name`,G:`get`,h:`help`},y={cert:`client certificates are the browser profile's to present, not the shell's`,"cert-type":`client certificates are the browser profile's to present, not the shell's`,key:`client certificates are the browser profile's to present, not the shell's`,cacert:`the browser decides which roots to trust`,capath:`the browser decides which roots to trust`,insecure:`the browser enforces TLS verification; a page cannot opt out`,proxy:`proxying is configured on the browser, not per request`,"proxy-user":`proxying is configured on the browser, not per request`,interface:`a page cannot choose an outgoing interface`,"unix-socket":`a page cannot dial a unix socket`,resolve:`a page cannot override DNS resolution`,compressed:`always on — the browser negotiates encoding itself`,cookie:"the tab's own cookies are already sent; set one with `playwright-cli cookie-set`","cookie-jar":"cookies live in the browser profile; read them with `playwright-cli cookies`","limit-rate":`a page cannot throttle a fetch`,"continue-at":"a page fetch cannot resume; use `-H 'Range: bytes=N-'`","connect-timeout":"a page fetch cannot time the connect phase alone; use `--max-time`","http1.1":`the browser negotiates the HTTP version`,http2:`the browser negotiates the HTTP version`,http3:`the browser negotiates the HTTP version`,"no-buffer":`responses are read whole, never streamed to stdout`,"trace-ascii":"no wire trace exists; use `playwright-cli network-requests`",trace:"no wire trace exists; use `playwright-cli network-requests`","user-agent":`User-Agent is a forbidden header name for fetch(); the tab sets it`},b={k:`insecure`,x:`proxy`,b:`cookie`,c:`cookie-jar`,E:`cert`,C:`continue-at`,N:`no-buffer`,A:`user-agent`};function x(){return{url:null,requestMethod:null,headers:[],data:[],form:[],get:!1,output:null,remoteName:!1,include:!1,head:!1,dumpHeader:null,writeOut:null,silent:!1,showError:!1,verbose:!1,failOnError:!1,maxTimeSeconds:null,credentials:`include`,tab:null,frame:null,user:null,referer:null,range:null,help:!1}}function S(e,t){return{message:`curlwright: option ${e} is not supported in a page context — ${y[t]}`,exitCode:2}}function C(e){return{message:`curlwright: unknown option ${e}\nRun 'curlwright --help' for the supported flags.`,exitCode:2}}function ee(e){let t=e.indexOf(`:`);if(t===-1)return e.endsWith(`;`)?{name:e.slice(0,-1).trim(),value:``,unset:!1}:{name:e.trim(),value:``,unset:!1};let n=e.slice(0,t).trim(),r=e.slice(t+1).trim();return{name:n,value:r,unset:r===``}}function w(e,t,n,r){switch(t){case`request`:return e.requestMethod=n,null;case`header`:return e.headers.push(ee(n??``)),null;case`data`:case`data-ascii`:return e.data.push({kind:`ascii`,value:n??``}),null;case`data-raw`:return e.data.push({kind:`raw`,value:n??``}),null;case`data-binary`:return e.data.push({kind:`binary`,value:n??``}),null;case`data-urlencode`:return e.data.push({kind:`urlencode`,value:n??``}),null;case`json`:return e.data.push({kind:`json`,value:n??``}),null;case`form`:return e.form.push({value:n??``,literal:!1}),null;case`form-string`:return e.form.push({value:n??``,literal:!0}),null;case`output`:return e.output=n,null;case`dump-header`:return e.dumpHeader=n,null;case`write-out`:return e.writeOut=n,null;case`max-time`:return T(e,n,r);case`user`:return e.user=n,null;case`referer`:return e.referer=n,null;case`range`:return e.range=n,null;case`url`:return e.url=n,null;case`tab`:return e.tab=n,null;case`frame`:return e.frame=n,null;default:return E(e,t,r)}}function T(e,t,n){let r=Number(t);return!Number.isFinite(r)||r<=0?{message:`curlwright: ${n} expects a positive number of seconds`,exitCode:2}:(e.maxTimeSeconds=r,null)}function E(e,t,n){switch(t){case`silent`:return e.silent=!0,null;case`show-error`:return e.showError=!0,null;case`include`:return e.include=!0,null;case`head`:return e.head=!0,null;case`verbose`:return e.verbose=!0,null;case`fail`:return e.failOnError=!0,null;case`location`:return null;case`remote-name`:return e.remoteName=!0,null;case`get`:return e.get=!0,null;case`no-credentials`:return e.credentials=`omit`,null;case`help`:return e.help=!0,null;default:return C(n)}}function te(e,t,n){let r=t[n],i=r.indexOf(`=`),a=(i===-1?r.slice(2):r.slice(2,i)).trim(),o=i===-1?null:r.slice(i+1);if(a in y)return S(`--${a}`,a);if(h.has(a)){let r=o??t[n+1];return r===void 0?{message:`curlwright: option --${a} requires a value`,exitCode:2}:w(e,a,r,`--${a}`)??{next:o===null?n+2:n+1}}return g.has(a)?w(e,a,null,`--${a}`)??{next:n+1}:C(`--${a}`)}function ne(e,t,n){let r=t[n];for(let i=1;i<r.length;i++){let a=r[i];if(a in b)return S(`-${a}`,b[a]);if(a in _){let o=r.slice(i+1),s=o===``?t[n+1]:o;return s===void 0?{message:`curlwright: option -${a} requires a value`,exitCode:2}:w(e,_[a],s,`-${a}`)??{next:o===``?n+2:n+1}}if(!(a in v))return C(`-${a}`);let o=w(e,v[a],null,`-${a}`);if(o)return o}return{next:n+1}}function re(e,t){return e.url!==null&&e.url!==t?{message:`curlwright: only one URL is supported (got "${e.url}" and "${t}")`,exitCode:2}:(e.url=t,null)}function ie(e){let t=x(),n=0,r=!1;for(;n<e.length;){let i=e[n];if(!r&&i===`--`){r=!0,n++;continue}if(!r&&i.startsWith(`--`)){let r=te(t,e,n);if(`message`in r)return r;n=r.next;continue}if(!r&&i.startsWith(`-`)&&i.length>1){let r=ne(t,e,n);if(`message`in r)return r;n=r.next;continue}let a=re(t,i);if(a)return a;n++}return t}function ae(e){return`message`in e}const D={"accept-charset":`the browser sets it`,"accept-encoding":`the browser negotiates encoding`,connection:`the browser owns the connection`,"content-length":`derived from the body`,cookie:"the tab's cookies are sent already; set one with `playwright-cli cookie-set`",cookie2:`the tab's cookies are sent already`,date:`the browser sets it`,dnt:`the browser sets it`,expect:`a page fetch cannot send it`,host:`derived from the URL`,"keep-alive":`the browser owns the connection`,origin:`the tab's own origin is sent automatically`,referer:`use -e/--referer, which sets the fetch referrer`,te:`the browser owns transfer encoding`,trailer:`the browser owns transfer encoding`,"transfer-encoding":`the browser owns transfer encoding`,upgrade:`the browser owns the connection`,via:`the browser sets it`};function oe(e){let t=e.toLowerCase();return t in D?D[t]:t.startsWith(`proxy-`)?`proxying is configured on the browser`:t.startsWith(`sec-`)?`Sec- headers are reserved for the browser`:null}function O(e){for(let t of e){let e=oe(t.name);if(e)return{message:`curlwright: header "${t.name}" cannot be set from a page — ${e}`,exitCode:2}}return null}function k(e,t){let n=t.toLowerCase();return Object.keys(e).some(e=>e.toLowerCase()===n)}function A(e){let t={},n=new Set;for(let r of e.headers)if(r.name!==``){if(r.unset){n.add(r.name.toLowerCase());continue}t[r.name]=r.value}return{headers:t,suppressed:n}}function j(e,t,n){return!k(e,n)&&!t.has(n)}function M(e){return/^[a-zA-Z]+=/.test(e)?e:`bytes=${e}`}function N(e,t,n,r){n.user!==null&&j(e,t,`authorization`)&&(e.Authorization=`Basic ${btoa(n.user)}`),n.range!==null&&j(e,t,`range`)&&(e.Range=M(n.range)),r.contentType&&j(e,t,`content-type`)&&(e[`Content-Type`]=r.contentType),r.accept&&j(e,t,`accept`)&&(e.Accept=r.accept)}function P(e,t){if(t===``)return e;let[n,r]=F(e);return`${n}${n.includes(`?`)?`&`:`?`}${t}${r}`}function F(e){let t=e.indexOf(`#`);return t===-1?[e,``]:[e.slice(0,t),e.slice(t)]}function I(e,t){return e.requestMethod?e.requestMethod:e.head?`HEAD`:t?`POST`:`GET`}function L(e,t,n){let r=e.toUpperCase();return!t||r!==`GET`&&r!==`HEAD`?null:{message:`curlwright: ${n.requestMethod?`-X ${n.requestMethod}`:`-I`} cannot carry a request body — a page fetch rejects a ${r} with one. Drop the data, or use -G to send it as a query string.`,exitCode:2}}function R(e,t){if(e.url===null)return{message:`curlwright: no URL specified`,exitCode:2};let{headers:n,suppressed:r}=A(e),i=e.get&&t.bytes!==null,a=i?{...t,bytes:null,contentType:null}:t;N(n,r,e,a);let o=i?P(e.url,new TextDecoder().decode(t.bytes??new Uint8Array)):e.url,s=a.bytes!==null||a.form!==null,c=I(e,s),l=L(c,s,e);if(l)return l;let u={method:c,headers:n,credentials:e.credentials,responseType:`binary`};return a.form?u.body=a.form:a.bytes&&(u.body=a.bytes),e.referer!==null&&(u.referrer=e.referer),e.maxTimeSeconds!==null&&(u.timeoutMs=e.maxTimeSeconds*1e3),{url:o,method:c,fetchOptions:u,uploadSize:a.bytes?.length??0}}function z(e){let t=e.fetchOptions.headers??{},n=[`> ${e.method} ${e.url}`];for(let[e,r]of Object.entries(t))n.push(`> ${e}: ${r}`);return n.push(`> `),`${n.join(`
1
+ import{t as e}from"./base64-DzRgusa4.js";import"./src-CcFD5QfS.js";import{p as t}from"./state-C2jLMw6E.js";import{t as n}from"./realm-browser-fetch-V3uggGbM.js";const r=new TextEncoder;function i(e){return typeof e==`object`&&!!e&&`exitCode`in e}async function a(e,t){try{return await e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t))}catch{return{message:`curlwright: cannot read ${t}`,exitCode:26}}}function o(e){let t=new Uint8Array(e.length),n=0;for(let r of e)r!==10&&r!==13&&(t[n++]=r);return t.subarray(0,n)}async function s(e,t){let n=t.indexOf(`=`),o=t.indexOf(`@`),s=o!==-1&&(n===-1||o<n),c=s?o:n,l=c===-1?``:t.slice(0,c),u=c===-1?t:t.slice(c+1),d=u;if(s){let t=await a(e,u);if(i(t))return t;d=new TextDecoder().decode(t)}let f=encodeURIComponent(d);return r.encode(l===``?f:`${l}=${f}`)}async function c(e,t){if(t.kind===`urlencode`)return s(e,t.value);if(t.kind===`raw`||!t.value.startsWith(`@`))return r.encode(t.value);let n=await a(e,t.value.slice(1));return i(n)||t.kind===`binary`?n:o(n)}function l(e){let t=Math.max(0,e.length-1),n=e.reduce((e,t)=>e+t.length,0)+t,r=new Uint8Array(n),i=0;return e.forEach((e,t)=>{t>0&&(r[i++]=38),r.set(e,i),i+=e.length}),r}function u(e){let t=e.split(`;`);return{value:t[0],options:t.slice(1)}}function d(e,t){for(let n of e){let e=n.trim();if(e.startsWith(`${t}=`))return e.slice(t.length+1)}return null}function f(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n===-1?t:t.slice(n+1)}async function p(e,t,n){let r=n.value.indexOf(`=`);if(r===-1)return{message:`curlwright: -F requires name=content (got "${n.value}")`,exitCode:2};let o=n.value.slice(0,r),s=n.value.slice(r+1);if(n.literal||s[0]!==`@`&&s[0]!==`<`)return t.append(o,s),null;let{value:c,options:l}=u(s.slice(1)),p=await a(e,c);if(i(p))return p;if(s[0]===`<`)return t.append(o,new TextDecoder().decode(p)),null;let m=d(l,`type`)??`application/octet-stream`,h=d(l,`filename`)??f(c);return t.append(o,new Blob([p],{type:m}),h),null}async function m(e,t,n){if(t.length>0&&n.length>0)return{message:`curlwright: -F cannot be combined with -d`,exitCode:2};if(n.length>0){let t=new FormData;for(let r of n){let n=await p(e,t,r);if(n)return n}return{bytes:null,form:t,contentType:null,accept:null}}if(t.length===0)return{bytes:null,form:null,contentType:null,accept:null};let r=[];for(let n of t){let t=await c(e,n);if(i(t))return t;r.push(t)}let a=t.some(e=>e.kind===`json`);return{bytes:l(r),form:null,contentType:a?`application/json`:`application/x-www-form-urlencoded`,accept:a?`application/json`:null}}const h=new Set([`request`,`header`,`data`,`data-raw`,`data-binary`,`data-ascii`,`data-urlencode`,`json`,`form`,`form-string`,`output`,`dump-header`,`write-out`,`max-time`,`user`,`referer`,`range`,`url`,`tab`,`frame`]),g=new Set([`silent`,`show-error`,`include`,`head`,`verbose`,`fail`,`location`,`remote-name`,`get`,`no-credentials`,`help`]),_={X:`request`,H:`header`,d:`data`,F:`form`,o:`output`,D:`dump-header`,w:`write-out`,m:`max-time`,u:`user`,e:`referer`,r:`range`},v={s:`silent`,S:`show-error`,i:`include`,I:`head`,v:`verbose`,f:`fail`,L:`location`,O:`remote-name`,G:`get`,h:`help`},y={cert:`client certificates are the browser profile's to present, not the shell's`,"cert-type":`client certificates are the browser profile's to present, not the shell's`,key:`client certificates are the browser profile's to present, not the shell's`,cacert:`the browser decides which roots to trust`,capath:`the browser decides which roots to trust`,insecure:`the browser enforces TLS verification; a page cannot opt out`,proxy:`proxying is configured on the browser, not per request`,"proxy-user":`proxying is configured on the browser, not per request`,interface:`a page cannot choose an outgoing interface`,"unix-socket":`a page cannot dial a unix socket`,resolve:`a page cannot override DNS resolution`,compressed:`always on — the browser negotiates encoding itself`,cookie:"the tab's own cookies are already sent; set one with `playwright-cli cookie-set`","cookie-jar":"cookies live in the browser profile; read them with `playwright-cli cookies`","limit-rate":`a page cannot throttle a fetch`,"continue-at":"a page fetch cannot resume; use `-H 'Range: bytes=N-'`","connect-timeout":"a page fetch cannot time the connect phase alone; use `--max-time`","http1.1":`the browser negotiates the HTTP version`,http2:`the browser negotiates the HTTP version`,http3:`the browser negotiates the HTTP version`,"no-buffer":`responses are read whole, never streamed to stdout`,"trace-ascii":"no wire trace exists; use `playwright-cli network-requests`",trace:"no wire trace exists; use `playwright-cli network-requests`","user-agent":`User-Agent is a forbidden header name for fetch(); the tab sets it`},b={k:`insecure`,x:`proxy`,b:`cookie`,c:`cookie-jar`,E:`cert`,C:`continue-at`,N:`no-buffer`,A:`user-agent`};function x(){return{url:null,requestMethod:null,headers:[],data:[],form:[],get:!1,output:null,remoteName:!1,include:!1,head:!1,dumpHeader:null,writeOut:null,silent:!1,showError:!1,verbose:!1,failOnError:!1,maxTimeSeconds:null,credentials:`include`,tab:null,frame:null,user:null,referer:null,range:null,help:!1}}function S(e,t){return{message:`curlwright: option ${e} is not supported in a page context — ${y[t]}`,exitCode:2}}function C(e){return{message:`curlwright: unknown option ${e}\nRun 'curlwright --help' for the supported flags.`,exitCode:2}}function ee(e){let t=e.indexOf(`:`);if(t===-1)return e.endsWith(`;`)?{name:e.slice(0,-1).trim(),value:``,unset:!1}:{name:e.trim(),value:``,unset:!1};let n=e.slice(0,t).trim(),r=e.slice(t+1).trim();return{name:n,value:r,unset:r===``}}function w(e,t,n,r){switch(t){case`request`:return e.requestMethod=n,null;case`header`:return e.headers.push(ee(n??``)),null;case`data`:case`data-ascii`:return e.data.push({kind:`ascii`,value:n??``}),null;case`data-raw`:return e.data.push({kind:`raw`,value:n??``}),null;case`data-binary`:return e.data.push({kind:`binary`,value:n??``}),null;case`data-urlencode`:return e.data.push({kind:`urlencode`,value:n??``}),null;case`json`:return e.data.push({kind:`json`,value:n??``}),null;case`form`:return e.form.push({value:n??``,literal:!1}),null;case`form-string`:return e.form.push({value:n??``,literal:!0}),null;case`output`:return e.output=n,null;case`dump-header`:return e.dumpHeader=n,null;case`write-out`:return e.writeOut=n,null;case`max-time`:return T(e,n,r);case`user`:return e.user=n,null;case`referer`:return e.referer=n,null;case`range`:return e.range=n,null;case`url`:return e.url=n,null;case`tab`:return e.tab=n,null;case`frame`:return e.frame=n,null;default:return E(e,t,r)}}function T(e,t,n){let r=Number(t);return!Number.isFinite(r)||r<=0?{message:`curlwright: ${n} expects a positive number of seconds`,exitCode:2}:(e.maxTimeSeconds=r,null)}function E(e,t,n){switch(t){case`silent`:return e.silent=!0,null;case`show-error`:return e.showError=!0,null;case`include`:return e.include=!0,null;case`head`:return e.head=!0,null;case`verbose`:return e.verbose=!0,null;case`fail`:return e.failOnError=!0,null;case`location`:return null;case`remote-name`:return e.remoteName=!0,null;case`get`:return e.get=!0,null;case`no-credentials`:return e.credentials=`omit`,null;case`help`:return e.help=!0,null;default:return C(n)}}function te(e,t,n){let r=t[n],i=r.indexOf(`=`),a=(i===-1?r.slice(2):r.slice(2,i)).trim(),o=i===-1?null:r.slice(i+1);if(a in y)return S(`--${a}`,a);if(h.has(a)){let r=o??t[n+1];return r===void 0?{message:`curlwright: option --${a} requires a value`,exitCode:2}:w(e,a,r,`--${a}`)??{next:o===null?n+2:n+1}}return g.has(a)?w(e,a,null,`--${a}`)??{next:n+1}:C(`--${a}`)}function ne(e,t,n){let r=t[n];for(let i=1;i<r.length;i++){let a=r[i];if(a in b)return S(`-${a}`,b[a]);if(a in _){let o=r.slice(i+1),s=o===``?t[n+1]:o;return s===void 0?{message:`curlwright: option -${a} requires a value`,exitCode:2}:w(e,_[a],s,`-${a}`)??{next:o===``?n+2:n+1}}if(!(a in v))return C(`-${a}`);let o=w(e,v[a],null,`-${a}`);if(o)return o}return{next:n+1}}function re(e,t){return e.url!==null&&e.url!==t?{message:`curlwright: only one URL is supported (got "${e.url}" and "${t}")`,exitCode:2}:(e.url=t,null)}function ie(e){let t=x(),n=0,r=!1;for(;n<e.length;){let i=e[n];if(!r&&i===`--`){r=!0,n++;continue}if(!r&&i.startsWith(`--`)){let r=te(t,e,n);if(`message`in r)return r;n=r.next;continue}if(!r&&i.startsWith(`-`)&&i.length>1){let r=ne(t,e,n);if(`message`in r)return r;n=r.next;continue}let a=re(t,i);if(a)return a;n++}return t}function ae(e){return`message`in e}const D={"accept-charset":`the browser sets it`,"accept-encoding":`the browser negotiates encoding`,connection:`the browser owns the connection`,"content-length":`derived from the body`,cookie:"the tab's cookies are sent already; set one with `playwright-cli cookie-set`",cookie2:`the tab's cookies are sent already`,date:`the browser sets it`,dnt:`the browser sets it`,expect:`a page fetch cannot send it`,host:`derived from the URL`,"keep-alive":`the browser owns the connection`,origin:`the tab's own origin is sent automatically`,referer:`use -e/--referer, which sets the fetch referrer`,te:`the browser owns transfer encoding`,trailer:`the browser owns transfer encoding`,"transfer-encoding":`the browser owns transfer encoding`,upgrade:`the browser owns the connection`,via:`the browser sets it`};function oe(e){let t=e.toLowerCase();return t in D?D[t]:t.startsWith(`proxy-`)?`proxying is configured on the browser`:t.startsWith(`sec-`)?`Sec- headers are reserved for the browser`:null}function O(e){for(let t of e){let e=oe(t.name);if(e)return{message:`curlwright: header "${t.name}" cannot be set from a page — ${e}`,exitCode:2}}return null}function k(e,t){let n=t.toLowerCase();return Object.keys(e).some(e=>e.toLowerCase()===n)}function A(e){let t={},n=new Set;for(let r of e.headers)if(r.name!==``){if(r.unset){n.add(r.name.toLowerCase());continue}t[r.name]=r.value}return{headers:t,suppressed:n}}function j(e,t,n){return!k(e,n)&&!t.has(n)}function M(e){return/^[a-zA-Z]+=/.test(e)?e:`bytes=${e}`}function N(e,t,n,r){n.user!==null&&j(e,t,`authorization`)&&(e.Authorization=`Basic ${btoa(n.user)}`),n.range!==null&&j(e,t,`range`)&&(e.Range=M(n.range)),r.contentType&&j(e,t,`content-type`)&&(e[`Content-Type`]=r.contentType),r.accept&&j(e,t,`accept`)&&(e.Accept=r.accept)}function P(e,t){if(t===``)return e;let[n,r]=F(e);return`${n}${n.includes(`?`)?`&`:`?`}${t}${r}`}function F(e){let t=e.indexOf(`#`);return t===-1?[e,``]:[e.slice(0,t),e.slice(t)]}function I(e,t){return e.requestMethod?e.requestMethod:e.head?`HEAD`:t?`POST`:`GET`}function L(e,t,n){let r=e.toUpperCase();return!t||r!==`GET`&&r!==`HEAD`?null:{message:`curlwright: ${n.requestMethod?`-X ${n.requestMethod}`:`-I`} cannot carry a request body — a page fetch rejects a ${r} with one. Drop the data, or use -G to send it as a query string.`,exitCode:2}}function R(e,t){if(e.url===null)return{message:`curlwright: no URL specified`,exitCode:2};let{headers:n,suppressed:r}=A(e),i=e.get&&t.bytes!==null,a=i?{...t,bytes:null,contentType:null}:t;N(n,r,e,a);let o=i?P(e.url,new TextDecoder().decode(t.bytes??new Uint8Array)):e.url,s=a.bytes!==null||a.form!==null,c=I(e,s),l=L(c,s,e);if(l)return l;let u={method:c,headers:n,credentials:e.credentials,responseType:`binary`};return a.form?u.body=a.form:a.bytes&&(u.body=a.bytes),e.referer!==null&&(u.referrer=e.referer),e.maxTimeSeconds!==null&&(u.timeoutMs=e.maxTimeSeconds*1e3),{url:o,method:c,fetchOptions:u,uploadSize:a.bytes?.length??0}}function z(e){let t=e.fetchOptions.headers??{},n=[`> ${e.method} ${e.url}`];for(let[e,r]of Object.entries(t))n.push(`> ${e}: ${r}`);return n.push(`> `),`${n.join(`
2
2
  `)}\n`}function B(e,t){let n=[`< ${e}`];for(let[e,r]of Object.entries(t))n.push(`< ${e}: ${r}`);return n.push(`< `),`${n.join(`
3
3
  `)}\n`}function V(t,n){return typeof t==`string`?n===`base64`?e(t):new TextEncoder().encode(t):new Uint8Array}function H(e,t){return t?`HTTP/1.1 ${e} ${t}`:`HTTP/1.1 ${e}`}function U(e,t,n){let r=[H(e,t)];for(let[e,t]of Object.entries(n))r.push(`${e}: ${t}`);return`${r.join(`\r
4
4
  `)}\r\n\r\n`}function W(e){if(e.includes(0))return!0;try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e),!1}catch{return!0}}function G(e){let t;try{t=new URL(e).pathname}catch{t=e.split(`?`)[0]}return t.replace(/\/+$/,``).split(`/`).pop()||null}function K(e,t,n){return new TextEncoder().encode(U(e,t,n)).length}function q(e){try{return new URL(e).origin}catch{return null}}function J(e){return e.map(e=>` --tab=${e.targetId} ${e.url}`).join(`
@@ -0,0 +1,91 @@
1
+ import{n as e,r as t}from"./panel-rpc-BPwAqRch.js";import{a as n,c as r,d as i,i as a,l as o,n as s,o as c,s as l,t as u,u as d}from"./extension-media-capture-BBMLU8BH.js";import{t as f}from"./permissions-surface-registry-BqPdUk9w.js";import{ffmpegCoreFromEnv as p}from"./engine-BnH9pfmR.js";async function m(e,t,n){let r=e;if(typeof r.getNativeFile==`function`)try{let e=await r.getNativeFile(t);if(e){let i=await g(e,t,n);if(await h(r,t,i,n))return i}}catch{}return _(await e.readFileBuffer(t))}async function h(e,t,n,r){if(typeof e.readFileRange!=`function`)return!0;let i,a;try{i=await e.readFileRange(t,0,64),a=(await e.stat(t)).size}catch{return!0}let o=new Uint8Array(await n.slice(0,64).arrayBuffer()),s=(a===void 0||a===n.size)&&o.byteLength===i.byteLength&&o.every((e,t)=>e===i[t]);return s||r?.(`ffmpeg: ${t}: native File (${n.size} bytes) does not match the VFS (${a??`?`} bytes, head differs=${o.byteLength!==i.byteLength||o.some((e,t)=>e!==i[t])}); reading it through the VFS instead`),s}async function g(e,t,n,r=e=>void structuredClone(e)){let i=``,a=e=>{try{return r(e),!0}catch(e){return i=e instanceof Error?`${e.name}: ${e.message}`:String(e),!1}};if(a(e))return e;let o=new Blob([e],{type:e.type});return a(o)?(n?.(`ffmpeg: ${t}: native File is not transferable to the worker (${v(e)}; ${i}); wrapped it in a Blob`),o):(n?.(`ffmpeg: ${t}: native File is not transferable to the worker and neither is a Blob over it; read ${e.size} bytes into memory instead`),new Blob([await e.arrayBuffer()],{type:e.type}))}function _(e){return new Blob([e])}function v(e){return`${e.constructor?.name??`unknown`}, instanceof File=${typeof File<`u`&&e instanceof File}, instanceof Blob=${e instanceof Blob}, size=${e.size}, type=${JSON.stringify(e.type)}`}let y=0;function b(){y=y+1>>>0;let e=`${y}_${Date.now().toString(36)}`;return{id:e,dir:`__in${e}`}}function x(e,t){return`${e.dir}/${t}`}function S(e){return e.slice(e.lastIndexOf(`/`)+1)}function C(e,t){return`__out${e.id}_${t.split(`/`).pop()||`out.bin`}`}async function w(e,t,n){n.length!==0&&(await e.createDir(`/${t.dir}`),await e.mount(`WORKERFS`,{blobs:n},`/${t.dir}`))}async function T(e,t){try{await e.unmount(`/${t.dir}`)}catch(e){if(r(e))throw e}try{await e.deleteDir(`/${t.dir}`)}catch(e){if(r(e))throw e}}async function E(e,t){try{await e.deleteFile(t)}catch(e){if(r(e))throw e}}function ee(){return{stdout:`ffmpeg - two engines behind the ffmpeg CLI
2
+
3
+ Usage:
4
+ ffmpeg [global-opts] -i input [input-opts] ... output [output-opts]
5
+
6
+ Common flags pass through to ffmpeg unchanged. Inputs/outputs are
7
+ resolved against the current VFS working directory.
8
+
9
+ Engines (chosen automatically; stderr names the one that ran):
10
+ mediabunny WebCodecs (hardware encoders, streams from disk, nothing
11
+ to install). Takes one-input → one-output jobs whose
12
+ every option it can express: remux, -c copy, transcode to
13
+ h264/hevc/vp8/vp9/av1 + aac/opus/mp3/vorbis/flac/pcm,
14
+ -ss/-t/-to, -vf crop,scale,fps (in that order; transpose
15
+ only on its own), -s, -r/-g, -ac/-ar, -an/-vn,
16
+ -b:v/-b:a/-crf/-q:a, -movflags, -metadata.
17
+ Without an explicit -c, streams the container can hold are
18
+ copied rather than re-encoded; an explicit encoder always
19
+ re-encodes; -c copy never re-encodes (a codec the container
20
+ cannot hold falls to the wasm core, which fails like ffmpeg).
21
+ wasm @ffmpeg/core (ipk-installed; see -version). Everything
22
+ else: lavfi sources, -f concat, filtergraphs, -f null
23
+ analysis sinks, image/GIF output, codecs the browser lacks.
24
+ FFMPEG_CORE=mt opts into @ffmpeg/core-mt on a cross-origin-
25
+ isolated leader: multi-threaded, SINGLE-INPUT jobs only
26
+ (multi-input deadlocks and is refused), -threads/-filter_threads
27
+ capped unless you pass them.
28
+ FFMPEG_ENGINE=wasm ffmpeg ... force byte-identical ffmpeg behaviour
29
+ FFMPEG_ENGINE=mediabunny ffmpeg ... fail (and say why) instead of falling back
30
+
31
+ Concatenating (concat demuxer):
32
+ printf "file 'a.mp4'\\nfile 'b.mp4'\\n" > list.txt
33
+ ffmpeg -f concat -safe 0 -i list.txt -c copy joined.mp4
34
+
35
+ Files named inside the list are read from the VFS too, resolved
36
+ against the LIST FILE's directory. As in ffmpeg, absolute and
37
+ parent-traversing members need -safe 0. The \`concat:\` protocol
38
+ form (-i "concat:a.ts|b.ts") is not supported — use -f concat.
39
+
40
+ Webcam capture (avfoundation-style):
41
+ ffmpeg -f avfoundation -video_size 1280x720 -framerate 30 \\
42
+ -i "0" -frames:v 1 -update 1 -y photo.jpg
43
+ ffmpeg -f avfoundation -i "0" -t 5 clip.webm
44
+ ffmpeg -f avfoundation -i "0:0" -t 5 clip.webm # video + audio
45
+ ffmpeg -f avfoundation -i ":0" -t 5 audio.webm # audio only
46
+ ffmpeg -f avfoundation -list_devices true -i "" # list devices
47
+
48
+ Avfoundation-specific options:
49
+ -warmup MS Photo mode: ms to wait for auto-exposure to settle
50
+ before grabbing the frame. Default 1500. Pass 0 to
51
+ capture immediately (will look dark / noisy on most
52
+ webcams because the AE algorithm hasn't converged).
53
+ -exact_size Use exact:{w,h,frameRate} constraints rather than
54
+ ideal:. Falls back to ideal: with a warning if the
55
+ camera can't deliver the requested mode.
56
+
57
+ Captured streams can be transcoded through the WASM core in the same
58
+ invocation. Output options like -c:v, -c:a, -crf, -preset, -pix_fmt,
59
+ -vf, -b:v, -b:a, and a mismatched output extension all trigger a
60
+ post-capture wasm pass so the produced file matches what the user asked
61
+ for (e.g. real H.264 mp4 instead of webm bytes in a .mp4 wrapper).
62
+
63
+ Analysis sinks (no output file — results are on stderr):
64
+ ffmpeg -i in.mp4 -af silencedetect=noise=-30dB:d=0.5 -f null -
65
+ ffmpeg -i in.mp4 -af loudnorm=print_format=json -f null /dev/null
66
+ ffmpeg -i in.mp4 -af loudnorm /dev/null
67
+ With output \`-\` or \`/dev/null\`, the wrapper skips VFS writeback
68
+ and returns the core log (filter measurements) on stderr. \`-\`
69
+ requires \`-f null\` (stdout is not emulated). Bare \`/dev/null\`
70
+ is accepted and gets \`-f null\` injected (MEMFS has no /dev/null).
71
+
72
+ Notes:
73
+ - The wasm engine needs an ipk-installed core: \`ipk add -g @ffmpeg/core@<pinned>\`
74
+ (\`@ffmpeg/core-mt\` for the FFMPEG_CORE=mt opt-in); \`ffmpeg -version\`
75
+ prints which one is loaded. Inputs are mounted lazily (never copied into
76
+ the wasm heap); only the output is buffered.
77
+ - The browser will prompt for camera/mic permission on first capture.
78
+ - Numeric -i values index into the per-kind enumerateDevices() list,
79
+ matching ffmpeg's native avfoundation device numbering on macOS.
80
+ `,stderr:``,exitCode:0}}async function D(e){let t=p(e.env)===`mt`,r=await i(W(e),void 0,t);return r?{stdout:`ffmpeg (wasm via @ffmpeg/ffmpeg)\ncore: ${n(r)}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`ffmpeg: ${c(t)}\n`,exitCode:1}}function O(e){if(!e.includes(`:`))return{video:e};let t=e.indexOf(`:`),n=e.slice(0,t),r=e.slice(t+1);return{...n?{video:n}:{},...r?{audio:r}:{}}}const k=new Set(`-f.-safe.-i.-c.-c:v.-c:a.-vf.-af.-filter:v.-filter:a.-filter_complex.-r.-b:v.-b:a.-s.-t.-ss.-to.-pix_fmt.-vcodec.-acodec.-ar.-ac.-frames:v.-frames:a.-q:v.-q:a.-crf.-preset.-tune.-movflags.-map.-metadata.-loglevel.-threads.-video_size.-framerate.-pixel_format.-update.-list_devices.-warmup.-bsf.-bsf:v.-bsf:a.-profile:v.-level.-g.-keyint_min.-sc_threshold.-max_muxing_queue_size.-fflags.-avoid_negative_ts.-start_number.-strict.-vsync.-fps_mode.-async.-disposition.-map_metadata.-c:s.-scodec.-ab.-aspect`.split(`.`)),A=new Set(`-y.-n.-vn.-an.-sn.-dn.-re.-stats.-nostats.-nostdin.-shortest.-copyts.-hide_banner.-autorotate.-noautorotate.-ignore_unknown.-exact_size.-bitexact.-xerror.-benchmark.-benchmark_all.-dump.-hex.-stdin.-noautoscale.-accurate_seek.-noaccurate_seek.-fix_sub_duration.-recast_media`.split(`.`));function te(){return{inputs:[],outputOpts:[],outputPath:null,listDevices:!1,exactSize:!1,pendingOpts:[]}}function j(e,t,n){let r=e[t+1];if(typeof r!=`string`)throw Error(`ffmpeg: ${n} requires a value`);return r}function ne(e,t,n){let r=j(t,n,`-i`);return e.inputs.push({path:r,format:e.pendingFormat,videoSize:e.pendingVideoSize,frameRate:e.pendingFrameRate,raw:[...e.pendingOpts,`-i`,r]}),e.pendingFormat=void 0,e.pendingVideoSize=void 0,e.pendingFrameRate=void 0,e.pendingOpts=[],n+2}function re(e,t,n){let r=j(t,n,`-video_size`),i=/^(\d+)x(\d+)$/.exec(r);return i&&(e.pendingVideoSize={width:parseInt(i[1],10),height:parseInt(i[2],10)}),e.pendingOpts.push(`-video_size`,r),n+2}function ie(e,t,n){let r=j(t,n,`-framerate`),i=parseFloat(r);return Number.isNaN(i)||(e.pendingFrameRate=i),e.pendingOpts.push(`-framerate`,r),n+2}function M(e,t,n){let r=j(t,n,`-list_devices`);return/^(true|1|yes)$/i.test(r)&&(e.listDevices=!0),e.pendingOpts.push(`-list_devices`,r),n+2}function N(e,t,n){let r=j(t,n,`-warmup`),i=parseInt(r,10);return!Number.isNaN(i)&&i>=0&&(e.warmupMs=i),n+2}function P(e,t){for(let n=t;n<e.length;n++){let t=e[n];if(!t.startsWith(`-`)||t===`-`)return!0;k.has(t)&&(n+=1)}return!1}function F(e,t){let n=e[t+1];return typeof n!=`string`||n.startsWith(`-`)?!1:P(e,t+2)}function I(e,t,n,r){if(k.has(r)){let i=j(t,n,r);return e.pendingOpts.push(r,i),n+2}return!A.has(r)&&F(t,n)?(e.pendingOpts.push(r,t[n+1]),n+2):(e.pendingOpts.push(r),n+1)}function L(e,t,n){return e.outputPath=t,e.outputOpts=e.pendingOpts,e.pendingOpts=[],n+1}function R(e){let t=te(),n=0;for(;n<e.length;){let r=e[n];if(r===`-i`){n=ne(t,e,n);continue}if(r===`-f`){let r=j(e,n,`-f`);t.pendingFormat=r,t.pendingOpts.push(`-f`,r),n+=2;continue}if(r===`-video_size`){n=re(t,e,n);continue}if(r===`-framerate`){n=ie(t,e,n);continue}if(r===`-list_devices`){n=M(t,e,n);continue}if(r===`-warmup`){n=N(t,e,n);continue}if(r===`-exact_size`){t.exactSize=!0,n+=1;continue}if(r===`-`&&V(t.pendingOpts)){n=L(t,r,n);continue}if(r.startsWith(`-`)){n=I(t,e,n,r);continue}n=L(t,r,n)}return{inputs:t.inputs,outputOpts:t.outputOpts,outputPath:t.outputPath,listDevices:t.listDevices,...t.warmupMs===void 0?{}:{warmupMs:t.warmupMs},exactSize:t.exactSize}}function z(e){return e.inputs.some(e=>e.format===`avfoundation`)}const B=new Set([`-`,`/dev/null`]);function V(e){for(let t=0;t<e.length-1;t++)if(e[t]===`-f`&&e[t+1]===`null`)return!0;return!1}function H(e){let t=e.outputPath;return t===null||!B.has(t)?!1:t===`/dev/null`||V(e.outputOpts)}function U(e){return V(e)?e:[...e,`-f`,`null`]}function W(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},readBytes:t=>e.fs.readFileBuffer(t),fromDir:e.cwd}}function G(e){let t=[];return(e.mode===`photo`||e.captureVideo!==!1)&&t.push(`camera`),e.mode===`video`&&e.captureAudio&&t.push(`microphone`),t}function K(e){return e.length===0?`media devices`:e.length===1?e[0]:`${e.slice(0,-1).join(`, `)} and ${e[e.length-1]}`}function q(e){for(let t of e){let e=t.stream;if(e)for(let t of e.getTracks())t.stop()}}async function J(e,t){let n=f();if(!n)return null;try{let r=await n.prompt({kinds:e,description:t,skipIfGranted:!0});if(q(r.grants),r.status===`granted`)return{ok:!0};let i=r.message?`: ${r.message}`:``;return{ok:!1,message:`${r.reason??r.status}${i}`}}catch{return null}}async function Y(t){if(t.length===0)return{ok:!0};let n=`ffmpeg is requesting access to your ${K(t)}.`,r=await J(t,n);if(r)return r;let i=e();if(i)try{return await i.call(`permission-request`,{kinds:t,description:n,skipIfGranted:!0},{timeoutMs:3e5}),{ok:!0}}catch(e){let t=e instanceof Error?e.message:String(e);return/permission surface unavailable/i.test(t)?{ok:!0}:{ok:!1,message:t}}return{ok:!0}}function ae(e){let t=e.inputs.find(e=>e.format===`avfoundation`);if(!t)throw Error(`ffmpeg: no avfoundation input found`);if(!e.outputPath)throw Error(`ffmpeg: output path is required`);let n=e.outputOpts.indexOf(`-frames:v`),r=n>=0&&e.outputOpts[n+1]===`1`,i=e.outputOpts.indexOf(`-update`),a=i>=0&&e.outputOpts[i+1]===`1`,o=e.outputOpts.indexOf(`-t`),s=o>=0?parseFloat(e.outputOpts[o+1]):NaN,c=O(t.path),l=oe(e.outputPath),u=/^image\//.test(l),d=!c.video&&!!c.audio;if(!d&&(r||a||u)){let n=u&&/^image\/(jpeg|png|webp)$/.test(l)?l:`image/jpeg`;return{outputPath:e.outputPath,captureMime:n,needsTranscode:X(e.outputOpts,`photo`)||n!==l,request:{mode:`photo`,deviceId:c.video,width:t.videoSize?.width,height:t.videoSize?.height,frameRate:t.frameRate,exactSize:e.exactSize,mimeType:n,quality:.92,...e.warmupMs===void 0?{}:{warmupMs:e.warmupMs}}}}let f=d||!!c.audio,p=`video/webm`;return{outputPath:e.outputPath,captureMime:p,needsTranscode:X(e.outputOpts,`video`)||p!==l,request:{mode:`video`,deviceId:c.video,captureVideo:!d,...f?{captureAudio:!0}:{},...c.audio?{audioDeviceId:c.audio}:{},width:t.videoSize?.width,height:t.videoSize?.height,frameRate:t.frameRate,exactSize:e.exactSize,mimeType:p,durationMs:Number.isFinite(s)?s*1e3:void 0}}}function X(e,t){let n=t===`photo`?new Set([`-vf`,`-filter:v`,`-filter_complex`,`-pix_fmt`,`-q:v`,`-vcodec`,`-c:v`]):new Set([`-c`,`-c:v`,`-c:a`,`-vcodec`,`-acodec`,`-vf`,`-af`,`-filter:v`,`-filter:a`,`-filter_complex`,`-pix_fmt`,`-pixel_format`,`-crf`,`-preset`,`-tune`,`-b:v`,`-b:a`,`-ar`,`-ac`,`-q:v`,`-q:a`,`-movflags`,`-r`]);return e.some(e=>n.has(e))}function oe(e){let t=e.toLowerCase();return t.endsWith(`.jpg`)||t.endsWith(`.jpeg`)?`image/jpeg`:t.endsWith(`.png`)?`image/png`:t.endsWith(`.webp`)?`image/webp`:t.endsWith(`.gif`)?`image/gif`:t.endsWith(`.webm`)?`video/webm`:t.endsWith(`.mp4`)?`video/mp4`:t.endsWith(`.mov`)?`video/quicktime`:t.endsWith(`.mkv`)?`video/x-matroska`:t.endsWith(`.m4a`)?`audio/mp4`:t.endsWith(`.mp3`)?`audio/mpeg`:t.endsWith(`.wav`)?`audio/wav`:t.endsWith(`.ogg`)?`audio/ogg`:`application/octet-stream`}function se(e){return e===`image/jpeg`?`jpg`:e===`image/png`?`png`:e===`image/webp`?`webp`:e===`video/webm`?`webm`:e===`video/mp4`?`mp4`:e===`audio/webm`?`webm`:`bin`}function ce(e,t){let n=e.path.lastIndexOf(`/`),r=n>=0?e.path.slice(n+1):e.path;return r?`__in${t}_${r}`:`__in${t}.bin`}async function le(e,t){if(e.length===0||e.includes(`--help`))return ee();if(e.includes(`-version`)||e.includes(`--version`))return D(t);let n;try{n=R(e)}catch(e){return{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return n.listDevices&&z(n)?ue():n.outputPath?n.inputs.length===0?{stdout:``,stderr:`ffmpeg: at least one input file must be specified
81
+ `,exitCode:1}:z(n)?ge(n,t):Re(n,t):{stdout:``,stderr:`ffmpeg: at least one output file must be specified
82
+ `,exitCode:1}}async function ue(){let e;try{e=await de()}catch(e){return{stdout:``,stderr:`ffmpeg: failed to enumerate devices: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let t=[];return t.push(`[AVFoundation indev @ 0x0] AVFoundation video devices:`),e.videoinputs.length===0?t.push(`[AVFoundation indev @ 0x0] (none)`):e.videoinputs.forEach((e,n)=>{t.push(`[AVFoundation indev @ 0x0] [${n}] ${e.label||`Camera ${n}`}`)}),t.push(`[AVFoundation indev @ 0x0] AVFoundation audio devices:`),e.audioinputs.length===0?t.push(`[AVFoundation indev @ 0x0] (none)`):e.audioinputs.forEach((e,n)=>{t.push(`[AVFoundation indev @ 0x0] [${n}] ${e.label||`Microphone ${n}`}`)}),{stdout:``,stderr:`${t.join(`
83
+ `)}\n`,exitCode:0}}async function de(){if(t()&&typeof navigator<`u`&&navigator.mediaDevices?.enumerateDevices){let e=await navigator.mediaDevices.enumerateDevices(),t=e=>({deviceId:e.deviceId,label:e.label||``,...e.groupId?{groupId:e.groupId}:{}});return{videoinputs:e.filter(e=>e.kind===`videoinput`).map(t),audioinputs:e.filter(e=>e.kind===`audioinput`).map(t)}}let n=e();if(!n)throw Error(`device enumeration requires a browser context`);return n.call(`enumerate-media-devices`,void 0,{timeoutMs:1e4})}async function fe(e){let t=await u({kind:`camera`,...e.request}),n=new ArrayBuffer(t.bytes.byteLength);return new Uint8Array(n).set(t.bytes),{bytes:n,mimeType:t.mimeType,width:t.width,height:t.height,...t.durationMs===void 0?{}:{durationMs:t.durationMs}}}async function pe(t){let n=e();if(!n)return null;let r=await n.call(`capture-camera`,t.request,{timeoutMs:3e5});return{bytes:r.bytes,mimeType:r.mimeType,width:r.width,height:r.height,durationMs:r.durationMs}}async function me(e){try{if(s())return{result:await fe(e)};let t=await pe(e);return t?{result:t}:{error:{stdout:``,stderr:`ffmpeg: camera capture requires a browser context — not available in this runtime
84
+ `,exitCode:1}}}catch(e){return{error:{stdout:``,stderr:he(e),exitCode:1}}}}function he(e){let t=e instanceof Error?e.message:String(e);return/NotAllowedError|Permission denied/i.test(t)?`ffmpeg: camera permission denied
85
+ `:/NotFoundError/i.test(t)?`ffmpeg: no camera device found
86
+ `:`ffmpeg: ${t}\n`}async function ge(e,t){let n;try{n=ae(e)}catch(e){return{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let r=await Y(G(n.request));if(!r.ok)return{stdout:``,stderr:`ffmpeg: camera permission denied (${r.message})\n`,exitCode:1};let i=await me(n);if(`error`in i)return i.error;let a=i.result,o=Math.round(a.bytes.byteLength/1024),s=`${a.width}x${a.height}`,c=n.request.mode===`video`&&a.durationMs?`${s}, ${Math.round(a.durationMs)}ms`:s,l=new Uint8Array(a.bytes),u=``;if(n.needsTranscode)try{let r=await _e({bytes:l,captureMime:n.captureMime,outputName:n.outputPath,outputOpts:e.outputOpts,ipk:W(t),onLog:e=>{u+=`${e}\n`}});l=new Uint8Array(r.byteLength),l.set(r)}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`${u}ffmpeg: captured ${c} (${o} KB) but transcode failed: ${t}\n`,exitCode:1}}let d=t.fs.resolvePath(t.cwd,n.outputPath);try{await t.fs.writeFile(d,l)}catch(e){return{stdout:``,stderr:`ffmpeg: failed to write ${n.outputPath}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let f=Math.round(l.byteLength/1024),p=n.needsTranscode?`${o} KB → ${f} KB`:`${o} KB`;return{stdout:``,stderr:`${u}ffmpeg: captured ${c} (${p}) to ${n.outputPath}\n`,exitCode:0}}async function _e(e){let t=b(),n=`capture.${se(e.captureMime)}`,i=x(t,n),a=C(t,e.outputName);e.onLog(`transcoding captured stream...`);let o=await l({onProgress:e.onLog,ipk:e.ipk}),s=t=>{e.onLog(t.message)};o.on(`log`,s);let c=!1;try{await w(o,t,[{name:n,data:_(e.bytes)}]);let r=[`-i`,i,...e.outputOpts,a],s=await o.exec(r);if(s!==0)throw Error(`ffmpeg-core exited with code ${s}`);let c=await o.readFile(a);if(c instanceof Uint8Array)return c;if(typeof c==`string`)return new TextEncoder().encode(c);throw Error(`ffmpeg-core returned an unknown payload type`)}catch(e){throw r(e)&&(c=!0,d(o)),e}finally{try{o.off(`log`,s)}catch{}if(!c)try{await T(o,t),await E(o,a)}catch{}}}function ve(e){return e.format===`concat`}function ye(e){return e.split(`
87
+ `).map(e=>{let t=e.trim();if(!t.startsWith(`file `))return{raw:e};let n=be(t.slice(4).trim());return n?{raw:e,file:n}:{raw:e}})}function be(e){let t=e[0];if(t!==`'`&&t!==`"`)return e.replace(/\\(.)/g,`$1`);let n=``;for(let r=1;r<e.length;r++){let i=e[r];if(i===`\\`&&t===`"`&&r+1<e.length){n+=e[r+1],r+=1;continue}if(i!==t){n+=i;continue}if(t===`'`&&e.slice(r,r+4)===`'\\''`){n+=`'`,r+=3;continue}return n}return n}function xe(e,t,n){return`__cat${t}_${n}_${e.slice(e.lastIndexOf(`/`)+1).replace(/[^A-Za-z0-9._-]/g,`_`)||`part.bin`}`}function Se(e){return e.startsWith(`/`)||/^[A-Za-z]:/.test(e)?!1:!e.split(`/`).includes(`..`)}function Ce(e){let t=e.raw.lastIndexOf(`-safe`);if(t<0)return!0;let n=e.raw[t+1];return!(n===`0`||n?.startsWith(`-`))}async function we(e,t,n,r,i,a,o){let s=ye(new TextDecoder().decode(t)),c=e.slice(0,e.lastIndexOf(`/`))||`/`,l=[],u=[];for(let e of s){if(e.file===void 0){u.push(e.raw);continue}if(r&&!Se(e.file))return{error:{kind:`unsafe`,file:e.file}};let t=a.fs.resolvePath(c,e.file);if(!await a.fs.exists(t))return{error:{kind:`missing`,file:e.file}};let s=x(i,xe(e.file,n,l.length));l.push({ffmpegName:s,data:await m(a.fs,t,o)}),u.push(`file '${s}'`)}return{listBytes:new TextEncoder().encode(u.join(`
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
+ `,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(r(e))throw e}}async function Me(e,t,n){await T(e,t),await E(e,n)}async function Ne(e,t,n,i){let a;try{a=await e.readFile(t)}catch(e){if(r(e))throw e;return{error:{stdout:``,stderr:i()||`ffmpeg: produced no output file for ${n}\n`,exitCode:1}}}let o=a instanceof Uint8Array?a:new TextEncoder().encode(typeof a==`string`?a:``);return o.byteLength===0?{error:{stdout:``,stderr:i()||`ffmpeg: produced an empty output file for ${n}\n`,exitCode:1}}:{bytes:o}}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
+ `,exitCode:1}}async function Fe(e){let{ffmpeg:t,parsed:n,resolvedInputs:r,stage:i,outputName:s,outputPath:c,analysisSink:l,readStderr:u}=e,d=o()===a;if(d&&n.inputs.length>1)return{early:Q(u()),outputBytes:null};await w(t,i,Ae(r));let f=l?{...n,outputOpts:U(n.outputOpts)}:n,p=ke(d?Oe(f):f,r,s),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(l)return await je(t),{early:{stdout:``,stderr:u(),exitCode:0},outputBytes:null};let h=await Ne(t,s,c,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:s}=e;try{t.off(`log`,n)}catch{}if(s)return null;try{return await Me(t,i,a),null}catch(e){return r(e)?(d(t),$(o(),e)):null}}async function Le(e,t,n,r,i){let{ffmpegEngineFromEnv:a}=await import(`./engine-BnH9pfmR.js`),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-DAj2lYgU.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:n,stage:r,resolvedInputs:i,outputPath:a,analysisSink:o}=e,s=Pe(r,a,o),c=``,u;try{u=await l({onProgress:e=>{c+=`${e}\n`},ipk:W(n),preferMt:p(n.env)===`mt`})}catch(e){return{stdout:``,stderr:`${c}ffmpeg: failed to load wasm: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let f=e=>{c+=`${e.message}\n`};u.on(`log`,f);let m=!1,h=null,g=null;try{let e=await Fe({ffmpeg:u,parsed:t,resolvedInputs:i,stage:r,outputName:s,outputPath:a,analysisSink:o,readStderr:()=>c});h=e.early,g=e.outputBytes}catch(e){m=!0,d(u),h=$(c,e)}finally{let e=await Ie({ffmpeg:u,logHandler:f,stage:r,outputName:s,readStderr:()=>c,faulted:m});e&&(h=e)}if(h)return h;try{await n.fs.writeFile(n.fs.resolvePath(n.cwd,a),g??new Uint8Array)}catch(e){return{stdout:``,stderr:`${c}ffmpeg: cannot write ${a}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return{stdout:``,stderr:c,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,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/quick-llm-CvqNttpI.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/account-store-CrzQRVmk.js","assets/preload-helper-Czpn1I53.js","assets/claude-model-version-BJLrDjmH.js","assets/models-BSkXF4T6.js","assets/diagnostics-DN_idNHx.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-B-zmcypy.js","assets/libesm-BypnjKEL.js","assets/logger-DDBAeTLF.js","assets/src-CAWTvdAa.js","assets/proxied-fetch-CFWkfPNA.js","assets/base64-DJRlyqZu.js","assets/runtime-env-Dlaokqg1.js","assets/fetch-body-D2PwksUW.js","assets/api-endpoint-GRCyib6X.js","assets/float-topology-BYb7rxY5.js","assets/runtime-env-E-i2SW1s.js","assets/secret-topology-BE7Eyd3P.js","assets/secrets-bridge-client-H8-Z1RVR.js","assets/port-bridge-client-Cti-DmEY.js","assets/image-markers-CxJ9ZBgw.js","assets/tool-ui-eSQ1g2I1.js","assets/providers-Dz3RSRQx.js","assets/panel-rpc-B3MSVImO.js","assets/bedrock-camp-compat-CgBMwna8.js","assets/llm-session-id-bZQs6gBN.js","assets/icons-BJsliYCh.js"])))=>i.map(i=>d[i]);
2
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{Q as t,X as n,Z as r}from"./account-store-CrzQRVmk.js";import{t as i}from"./preload-helper-Czpn1I53.js";import{o as a}from"./claude-model-version-BJLrDjmH.js";import{t as o}from"./logger-DDBAeTLF.js";import{n as s}from"./attachments-329cIT1j.js";import{t as c}from"./types-Dgm4REV3.js";import{t as l}from"./icons-BJsliYCh.js";import{c as u,l as d,n as f,r as p,t as m,u as h}from"./record-DJeuy9ob.js";import{a as ee}from"./dictation-priming-CNllGgNq.js";import"./agent-message-to-chat-Cc7vTUN1.js";var te=`---
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/quick-llm-CLyaja5O.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/account-store-C209lUzH.js","assets/preload-helper-Czpn1I53.js","assets/claude-model-version-BJLrDjmH.js","assets/models-BSkXF4T6.js","assets/diagnostics-DN_idNHx.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-B-zmcypy.js","assets/libesm-BypnjKEL.js","assets/logger-DDBAeTLF.js","assets/src-CAWTvdAa.js","assets/proxied-fetch-CFWkfPNA.js","assets/base64-DJRlyqZu.js","assets/runtime-env-Dlaokqg1.js","assets/fetch-body-D2PwksUW.js","assets/api-endpoint-GRCyib6X.js","assets/float-topology-BYb7rxY5.js","assets/runtime-env-E-i2SW1s.js","assets/secret-topology-BE7Eyd3P.js","assets/secrets-bridge-client-H8-Z1RVR.js","assets/port-bridge-client-Cti-DmEY.js","assets/image-markers-CxJ9ZBgw.js","assets/tool-ui-eSQ1g2I1.js","assets/providers-G9XcYrxe.js","assets/panel-rpc-B3MSVImO.js","assets/bedrock-camp-compat-CgBMwna8.js","assets/llm-session-id-bZQs6gBN.js","assets/icons-BJsliYCh.js"])))=>i.map(i=>d[i]);
2
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{Q as t,X as n,Z as r}from"./account-store-C209lUzH.js";import{t as i}from"./preload-helper-Czpn1I53.js";import{o as a}from"./claude-model-version-BJLrDjmH.js";import{t as o}from"./logger-DDBAeTLF.js";import{n as s}from"./attachments-329cIT1j.js";import{t as c}from"./types-Dgm4REV3.js";import{t as l}from"./icons-BJsliYCh.js";import{c as u,l as d,n as f,r as p,t as m,u as h}from"./record-DJeuy9ob.js";import{a as ee}from"./dictation-priming-CNllGgNq.js";import"./agent-message-to-chat-Cc7vTUN1.js";var te=`---
3
3
  writablePaths:
4
4
  - /workspace/CLAUDE.md
5
5
  visiblePaths:
@@ -158,6 +158,6 @@ ${n}
158
158
  `:``)+(e.live?`live: true
159
159
  `:``)+(e.live&&e.liveThrough?`liveThrough: ${e.liveThrough}\n`:``)+(e.live&&e.compactions?`compactions: ${e.compactions}\n`:``),r=`---\nid: ${e.id}\ntitle: ${JSON.stringify(e.title)}\nfrozenAt: ${e.frozenAt}\ncreatedAt: ${e.createdAt}\nupdatedAt: ${e.updatedAt}\nmessageCount: ${e.messageCount}\n`+t+n+`---
160
160
 
161
- `,i=`${rt}${JSON.stringify(lt(e.messages)).replace(/-->/g,`-- >`)}${it}\n\n`,a=`# ${e.title}\n\n`;return r+i+a+V(e.messages)}async function U(e){try{let t=await e.readFile(F,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r:[]}catch(e){if(e instanceof c&&e.code!==`ENOENT`)throw e;return[]}}var dt=`slicc:sessions-index`,W=Promise.resolve();function G(e){let t=()=>{let t=globalThis.navigator?.locks;return typeof t?.request==`function`?t.request(dt,()=>e()):e()},n=W.then(t,t);return W=n.then(()=>void 0,()=>void 0),n}function ft(e,t){return e.writeFile(F,JSON.stringify(t,null,2))}async function pt(e,t){await ft(e,[t,...(await U(e)).filter(e=>e.filename!==t.filename)])}function mt(e,t){return G(()=>pt(e,t))}var ht=e({PENDING_SESSION_ATTEMPT_LIMIT:()=>3,SESSIONS_INDEX_PATH:()=>F,curateFrozenSessionMemories:()=>bt,enrichPendingSession:()=>Q,freezeConeSession:()=>yt,listPendingEnrichments:()=>Bt,markSnapshotUnavailable:()=>$,processPendingSessions:()=>Vt,readSessionsIndex:()=>I}),K=o(`session-freezer`),gt=4,q=2048,_t=40,vt=`${P}/attachments`;async function yt(e){let t=await It(e.sessionStore,J(e));if(!t||t.messages.length<gt)return K.info(`Skipping freeze: session below threshold or missing`,{messageCount:t?.messages.length??0}),null;let n=Y(t.messages),r=e.mode??`full`,i=r===`full`&&!!(e.apiKey&&e.model);!e.agenticMemorySpawn&&e.memory!==`skip`&&await Ct(e,n,i);let a=await wt(e,n,i)||ct(t.messages);return await Tt(e,t,a,r,i?await xt(e,a):void 0,!!e.agenticMemorySpawn&&e.memory!==`skip`)}async function bt(e,t){let n=Y(t.archive.messages),r;try{r=await Le({spawn:e.agenticMemorySpawn,vfs:e.vfs,sessionArchivePath:L(t),sessionCount:await xe(e.vfs),...e.cone?{cone:e.cone}:{}})}catch(e){r={ok:!1,reason:e instanceof Error?e.message:String(e),legacyFallbackSafe:!1}}if(r.ok){let n=await $t(e.vfs,t.filename);return await Wt(e.vfs,t.filename),n?(delete t.memoryPending,K.info(`Agentic memory pass completed`,{filename:t.filename}),n):(K.info(`Agentic memory pass completed; index entry already gone`,{filename:t.filename}),null)}return await tn(e.vfs,t.filename,r.reason),r.legacyFallbackSafe?(K.warn(`Agentic memory pass failed after finishing — falling back to legacy extraction`,{filename:t.filename,reason:r.reason}),await Ct(e,n,!0),null):(K.warn(`Agentic memory pass unfinished — entry stays pending for boot catch-up`,{filename:t.filename,reason:r.reason,attemptLimit:3}),null)}async function xt(e,t){try{return St(await(e.pickIcon??(await i(async()=>{let{pickLucideIcon:e}=await import(`./quick-llm-CvqNttpI.js`).then(e=>e.n);return{pickLucideIcon:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29]))).pickLucideIcon)({subject:`"${t}" — an archived chat session`})??void 0)}catch(e){K.warn(`Icon pick failed (freeze still proceeds)`,{error:e instanceof Error?e.message:String(e)});return}}function St(e){if(e)return l(e)?e:void 0}async function Ct(e,r,i){if(!i){K.info(`LLM unavailable — skipping memory extraction; freezing anyway`);return}let a=``;try{a=await t({messages:r,instruction:n,model:e.model,apiKey:e.apiKey,maxTokens:q,headers:e.headers})}catch(e){K.warn(`Memory extraction call failed (freeze still proceeds)`,{error:e instanceof Error?e.message:String(e)});return}if(!a.trim()||a.trim()===`NONE`){K.info(`Memory extraction returned no durable memories`);return}try{await zt(e.vfs,Ft(J(e)),a.trim(),`new-session`,{model:e.model,apiKey:e.apiKey,headers:e.headers}),K.info(`Memory extracted and appended on new-session`)}catch(e){K.warn(`Memory append failed`,{error:e instanceof Error?e.message:String(e)})}}async function wt(e,n,i){if(!i)return``;try{return Rt(await t({messages:n,instruction:r,model:e.model,apiKey:e.apiKey,maxTokens:_t,headers:e.headers}))}catch(e){return K.warn(`Title generation call failed (using heuristic)`,{error:e instanceof Error?e.message:String(e)}),``}}async function Tt(e,t,n,r,i,a=!1){let o=new Date().toISOString(),s=J(e),c=await Lt(e.vfs,s),l=c?.sessionId??crypto.randomUUID(),u=c?.filename??(r===`quick`?`pending-${st()}.md`:`${o.replace(/[:.]/g,`-`)}-${H(n)}.md`),d=Et(t.messages),f={cone:s,...s!==`cone`&&e.cone?.label?{coneLabel:e.cone.label}:{}},p={filename:u,sessionId:l,title:n,frozenAt:o,messageCount:t.messages.length,...d??{},...f,...i?{icon:i}:{},...r===`quick`||c?{pendingEnrichment:!0}:{},...a?{memoryPending:!0}:{},...e.memory===`skip`?{memorySkipped:!0}:{}};try{await X(e.vfs,P);let r=await kt(e.vfs,t.messages,u.replace(/\.md$/,``)),i={id:t.id,title:n,frozenAt:o,createdAt:t.createdAt,updatedAt:t.updatedAt,messageCount:t.messages.length,messages:r,...d??{},...f,...e.memory===`skip`?{memorySkipped:!0}:{}},a=ut(i);return await e.vfs.writeFile(`${P}/${u}`,a),await mt(e.vfs,p),await e.vfs.flush(),K.info(`Cone session frozen`,{filename:u,title:n,cone:s,messageCount:t.messages.length,completedLiveSnapshot:!!c}),{...p,archive:i}}catch(e){return K.warn(`Failed to write frozen session to VFS`,{error:e instanceof Error?e.message:String(e)}),null}}function Et(e){let t={total:0,input:0,output:0,cacheRead:0,cacheWrite:0},n=new Map,r=!1;for(let i of e){if(i.role!==`assistant`)continue;let{model:e,usage:a}=i;if(!e||!a||!Ot(a))return null;let o=a.cost;r=!0,t.total+=o.total,t.input+=o.input,t.output+=o.output,t.cacheRead+=o.cacheRead,t.cacheWrite+=o.cacheWrite;let s=n.get(e)??{model:e,cost:0,turns:0,tokens:0};s.cost+=o.total,s.turns+=1,s.tokens+=a.input+a.output+a.cacheRead+a.cacheWrite,n.set(e,s)}return r?{cost:t,models:[...n.values()].sort((e,t)=>t.cost-e.cost)}:null}function Dt(e){return typeof e==`number`&&Number.isFinite(e)}function Ot(e){let{cost:t}=e;return[e.input,e.output,e.cacheRead,e.cacheWrite].every(Dt)&&[t.input,t.output,t.cacheRead,t.cacheWrite,t.total].every(Dt)}async function kt(e,t,n){let r={vfs:e,archiveDir:`${vt}/${n}`,copiedPaths:new Map,fileIndex:0},i=[];for(let e of t){if(!e.attachments?.some(Mt)){i.push(e);continue}let t=[];for(let n of e.attachments)t.push(await At(r,n));i.push({...e,attachments:t})}return i}async function At(e,t){if(!Mt(t))return t;let n=e.copiedPaths.get(t.path);if(n)return{...t,path:n};let r=await jt(e.vfs,t.path);if(!r)return Pt(t);let i=t.name.replace(/[^A-Za-z0-9._-]+/g,`_`)||`attachment`,a=`${e.archiveDir}/${e.fileIndex++}-${i}`;return await X(e.vfs,e.archiveDir),await e.vfs.writeFile(a,r),e.copiedPaths.set(t.path,a),{...t,path:a}}async function jt(e,t){try{if(!await Nt(e,t))return null;let n=await e.readFile(t,{encoding:`binary`});if(!(n instanceof Uint8Array))throw Error(`Expected binary attachment content at ${t}`);return n}catch{return null}}function Mt(e){return typeof e.path==`string`&&e.path.startsWith(`/tmp/`)&&e.data===void 0&&e.text===void 0}async function Nt(e,t){let n=t.split(`/`).slice(1);if(n.length<2||n[0]!==`tmp`||n.some(e=>!e||e===`.`||e===`..`))return!1;let r=`/`;for(let t=0;t<n.length;t+=1){let i=(await e.readDir(r)).find(e=>e.name===n[t]);if(!i)return!1;if(t===n.length-1)return i.type===`file`;if(i.type!==`directory`)return!1;r=r===`/`?`/${n[t]}`:`${r}/${n[t]}`}return!1}function Pt(e){let{path:t,...n}=e;return{...n,error:e.error??`Archived attachment file is missing or unsafe to preserve.`}}function J(e){return e.cone?.folder||`cone`}function Ft(e){return _({parentJid:null,folder:e}).memoryPath}async function It(e,t){let n=f({folder:t});try{return await e.load(n)}catch(e){return K.warn(`Failed to load cone chat session`,{sessionId:n,error:e instanceof Error?e.message:String(e)}),null}}async function Lt(e,t){try{return ot(await U(e),t)}catch(e){K.warn(`Sessions index unreadable while looking for a live snapshot`,{error:e instanceof Error?e.message:String(e)});return}}function Y(e){return e.map(e=>({role:e.role,content:[{type:`text`,text:e.content}],timestamp:e.timestamp}))}function Rt(e){let t=e.trim();return t=t.replace(/^["'`]+|["'`]+$/g,``).trim(),t=t.replace(/\s+/g,` `),t.length>80&&(t=t.slice(0,80).trimEnd()),t}async function X(e,t){try{await e.mkdir(t,{recursive:!0})}catch{}}async function zt(e,t,n,r,i){let a=t,o=``;try{let t=await e.readFile(a,{encoding:`utf-8`});o=typeof t==`string`?t:new TextDecoder().decode(t)}catch(t){if(!(t instanceof c)||t.code!==`ENOENT`)throw t;await X(e,a.slice(0,a.lastIndexOf(`/`)))}let s=`## Auto-extracted (${new Date().toISOString().slice(0,10)}, ${r})`,l=`${o.length===0||o.endsWith(`
161
+ `,i=`${rt}${JSON.stringify(lt(e.messages)).replace(/-->/g,`-- >`)}${it}\n\n`,a=`# ${e.title}\n\n`;return r+i+a+V(e.messages)}async function U(e){try{let t=await e.readFile(F,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r:[]}catch(e){if(e instanceof c&&e.code!==`ENOENT`)throw e;return[]}}var dt=`slicc:sessions-index`,W=Promise.resolve();function G(e){let t=()=>{let t=globalThis.navigator?.locks;return typeof t?.request==`function`?t.request(dt,()=>e()):e()},n=W.then(t,t);return W=n.then(()=>void 0,()=>void 0),n}function ft(e,t){return e.writeFile(F,JSON.stringify(t,null,2))}async function pt(e,t){await ft(e,[t,...(await U(e)).filter(e=>e.filename!==t.filename)])}function mt(e,t){return G(()=>pt(e,t))}var ht=e({PENDING_SESSION_ATTEMPT_LIMIT:()=>3,SESSIONS_INDEX_PATH:()=>F,curateFrozenSessionMemories:()=>bt,enrichPendingSession:()=>Q,freezeConeSession:()=>yt,listPendingEnrichments:()=>Bt,markSnapshotUnavailable:()=>$,processPendingSessions:()=>Vt,readSessionsIndex:()=>I}),K=o(`session-freezer`),gt=4,q=2048,_t=40,vt=`${P}/attachments`;async function yt(e){let t=await It(e.sessionStore,J(e));if(!t||t.messages.length<gt)return K.info(`Skipping freeze: session below threshold or missing`,{messageCount:t?.messages.length??0}),null;let n=Y(t.messages),r=e.mode??`full`,i=r===`full`&&!!(e.apiKey&&e.model);!e.agenticMemorySpawn&&e.memory!==`skip`&&await Ct(e,n,i);let a=await wt(e,n,i)||ct(t.messages);return await Tt(e,t,a,r,i?await xt(e,a):void 0,!!e.agenticMemorySpawn&&e.memory!==`skip`)}async function bt(e,t){let n=Y(t.archive.messages),r;try{r=await Le({spawn:e.agenticMemorySpawn,vfs:e.vfs,sessionArchivePath:L(t),sessionCount:await xe(e.vfs),...e.cone?{cone:e.cone}:{}})}catch(e){r={ok:!1,reason:e instanceof Error?e.message:String(e),legacyFallbackSafe:!1}}if(r.ok){let n=await $t(e.vfs,t.filename);return await Wt(e.vfs,t.filename),n?(delete t.memoryPending,K.info(`Agentic memory pass completed`,{filename:t.filename}),n):(K.info(`Agentic memory pass completed; index entry already gone`,{filename:t.filename}),null)}return await tn(e.vfs,t.filename,r.reason),r.legacyFallbackSafe?(K.warn(`Agentic memory pass failed after finishing — falling back to legacy extraction`,{filename:t.filename,reason:r.reason}),await Ct(e,n,!0),null):(K.warn(`Agentic memory pass unfinished — entry stays pending for boot catch-up`,{filename:t.filename,reason:r.reason,attemptLimit:3}),null)}async function xt(e,t){try{return St(await(e.pickIcon??(await i(async()=>{let{pickLucideIcon:e}=await import(`./quick-llm-CLyaja5O.js`).then(e=>e.n);return{pickLucideIcon:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29]))).pickLucideIcon)({subject:`"${t}" — an archived chat session`})??void 0)}catch(e){K.warn(`Icon pick failed (freeze still proceeds)`,{error:e instanceof Error?e.message:String(e)});return}}function St(e){if(e)return l(e)?e:void 0}async function Ct(e,r,i){if(!i){K.info(`LLM unavailable — skipping memory extraction; freezing anyway`);return}let a=``;try{a=await t({messages:r,instruction:n,model:e.model,apiKey:e.apiKey,maxTokens:q,headers:e.headers})}catch(e){K.warn(`Memory extraction call failed (freeze still proceeds)`,{error:e instanceof Error?e.message:String(e)});return}if(!a.trim()||a.trim()===`NONE`){K.info(`Memory extraction returned no durable memories`);return}try{await zt(e.vfs,Ft(J(e)),a.trim(),`new-session`,{model:e.model,apiKey:e.apiKey,headers:e.headers}),K.info(`Memory extracted and appended on new-session`)}catch(e){K.warn(`Memory append failed`,{error:e instanceof Error?e.message:String(e)})}}async function wt(e,n,i){if(!i)return``;try{return Rt(await t({messages:n,instruction:r,model:e.model,apiKey:e.apiKey,maxTokens:_t,headers:e.headers}))}catch(e){return K.warn(`Title generation call failed (using heuristic)`,{error:e instanceof Error?e.message:String(e)}),``}}async function Tt(e,t,n,r,i,a=!1){let o=new Date().toISOString(),s=J(e),c=await Lt(e.vfs,s),l=c?.sessionId??crypto.randomUUID(),u=c?.filename??(r===`quick`?`pending-${st()}.md`:`${o.replace(/[:.]/g,`-`)}-${H(n)}.md`),d=Et(t.messages),f={cone:s,...s!==`cone`&&e.cone?.label?{coneLabel:e.cone.label}:{}},p={filename:u,sessionId:l,title:n,frozenAt:o,messageCount:t.messages.length,...d??{},...f,...i?{icon:i}:{},...r===`quick`||c?{pendingEnrichment:!0}:{},...a?{memoryPending:!0}:{},...e.memory===`skip`?{memorySkipped:!0}:{}};try{await X(e.vfs,P);let r=await kt(e.vfs,t.messages,u.replace(/\.md$/,``)),i={id:t.id,title:n,frozenAt:o,createdAt:t.createdAt,updatedAt:t.updatedAt,messageCount:t.messages.length,messages:r,...d??{},...f,...e.memory===`skip`?{memorySkipped:!0}:{}},a=ut(i);return await e.vfs.writeFile(`${P}/${u}`,a),await mt(e.vfs,p),await e.vfs.flush(),K.info(`Cone session frozen`,{filename:u,title:n,cone:s,messageCount:t.messages.length,completedLiveSnapshot:!!c}),{...p,archive:i}}catch(e){return K.warn(`Failed to write frozen session to VFS`,{error:e instanceof Error?e.message:String(e)}),null}}function Et(e){let t={total:0,input:0,output:0,cacheRead:0,cacheWrite:0},n=new Map,r=!1;for(let i of e){if(i.role!==`assistant`)continue;let{model:e,usage:a}=i;if(!e||!a||!Ot(a))return null;let o=a.cost;r=!0,t.total+=o.total,t.input+=o.input,t.output+=o.output,t.cacheRead+=o.cacheRead,t.cacheWrite+=o.cacheWrite;let s=n.get(e)??{model:e,cost:0,turns:0,tokens:0};s.cost+=o.total,s.turns+=1,s.tokens+=a.input+a.output+a.cacheRead+a.cacheWrite,n.set(e,s)}return r?{cost:t,models:[...n.values()].sort((e,t)=>t.cost-e.cost)}:null}function Dt(e){return typeof e==`number`&&Number.isFinite(e)}function Ot(e){let{cost:t}=e;return[e.input,e.output,e.cacheRead,e.cacheWrite].every(Dt)&&[t.input,t.output,t.cacheRead,t.cacheWrite,t.total].every(Dt)}async function kt(e,t,n){let r={vfs:e,archiveDir:`${vt}/${n}`,copiedPaths:new Map,fileIndex:0},i=[];for(let e of t){if(!e.attachments?.some(Mt)){i.push(e);continue}let t=[];for(let n of e.attachments)t.push(await At(r,n));i.push({...e,attachments:t})}return i}async function At(e,t){if(!Mt(t))return t;let n=e.copiedPaths.get(t.path);if(n)return{...t,path:n};let r=await jt(e.vfs,t.path);if(!r)return Pt(t);let i=t.name.replace(/[^A-Za-z0-9._-]+/g,`_`)||`attachment`,a=`${e.archiveDir}/${e.fileIndex++}-${i}`;return await X(e.vfs,e.archiveDir),await e.vfs.writeFile(a,r),e.copiedPaths.set(t.path,a),{...t,path:a}}async function jt(e,t){try{if(!await Nt(e,t))return null;let n=await e.readFile(t,{encoding:`binary`});if(!(n instanceof Uint8Array))throw Error(`Expected binary attachment content at ${t}`);return n}catch{return null}}function Mt(e){return typeof e.path==`string`&&e.path.startsWith(`/tmp/`)&&e.data===void 0&&e.text===void 0}async function Nt(e,t){let n=t.split(`/`).slice(1);if(n.length<2||n[0]!==`tmp`||n.some(e=>!e||e===`.`||e===`..`))return!1;let r=`/`;for(let t=0;t<n.length;t+=1){let i=(await e.readDir(r)).find(e=>e.name===n[t]);if(!i)return!1;if(t===n.length-1)return i.type===`file`;if(i.type!==`directory`)return!1;r=r===`/`?`/${n[t]}`:`${r}/${n[t]}`}return!1}function Pt(e){let{path:t,...n}=e;return{...n,error:e.error??`Archived attachment file is missing or unsafe to preserve.`}}function J(e){return e.cone?.folder||`cone`}function Ft(e){return _({parentJid:null,folder:e}).memoryPath}async function It(e,t){let n=f({folder:t});try{return await e.load(n)}catch(e){return K.warn(`Failed to load cone chat session`,{sessionId:n,error:e instanceof Error?e.message:String(e)}),null}}async function Lt(e,t){try{return ot(await U(e),t)}catch(e){K.warn(`Sessions index unreadable while looking for a live snapshot`,{error:e instanceof Error?e.message:String(e)});return}}function Y(e){return e.map(e=>({role:e.role,content:[{type:`text`,text:e.content}],timestamp:e.timestamp}))}function Rt(e){let t=e.trim();return t=t.replace(/^["'`]+|["'`]+$/g,``).trim(),t=t.replace(/\s+/g,` `),t.length>80&&(t=t.slice(0,80).trimEnd()),t}async function X(e,t){try{await e.mkdir(t,{recursive:!0})}catch{}}async function zt(e,t,n,r,i){let a=t,o=``;try{let t=await e.readFile(a,{encoding:`utf-8`});o=typeof t==`string`?t:new TextDecoder().decode(t)}catch(t){if(!(t instanceof c)||t.code!==`ENOENT`)throw t;await X(e,a.slice(0,a.lastIndexOf(`/`)))}let s=`## Auto-extracted (${new Date().toISOString().slice(0,10)}, ${r})`,l=`${o.length===0||o.endsWith(`
162
162
  `)?``:`
163
163
  `}\n${s}\n\n${n}\n`;await e.writeFile(a,o+l);try{await Ce({vfs:e,memoryPath:a,model:i?.model,apiKey:i?.apiKey,headers:i?.headers,signal:i?.signal})}catch(e){K.warn(`Cone memory budget step threw (append already committed)`,{error:e instanceof Error?e.message:String(e)})}}async function Bt(e){return(await I(e)).filter(e=>(e.pendingEnrichment===!0||e.memoryPending===!0)&&Z(e)<3)}async function Vt(e){let t={attempted:0,completed:0};if(!e.model||!e.apiKey)return t;try{for(let t of await I(e.vfs))t.memoryPending===!0&&t.memoryFailed===void 0&&Z(t)>=3&&await tn(e.vfs,t.filename,`catch-up retries exhausted (3)`);let n=await Bt(e.vfs);for(let r of n)try{let n=await en(e.vfs,r.filename);if(!n)continue;t.attempted+=1,await Q(e.vfs,n,{model:e.model,apiKey:e.apiKey,headers:e.headers})&&(t.completed+=1)}catch(e){K.warn(`Pending session catch-up attempt failed`,{filename:r.filename,error:e instanceof Error?e.message:String(e)})}}catch(e){K.warn(`Pending session catch-up failed`,{error:e instanceof Error?e.message:String(e)})}return t}function Z(e){let t=e.pendingAttemptCount;return typeof t==`number`&&Number.isInteger(t)&&t>0?t:0}async function Q(e,t,n){if(!t.pendingEnrichment&&!t.memoryPending)return null;let r=await Kt(e,t);if(r===null)return null;let i=qt(t,r);if(i===null)return null;let a=t.memoryPending===!0&&n.skipMemory!==!0&&await Ut(e,t),o=a||t.memorySkipped===!0?{...n,skipMemory:!0}:n,s=await Jt(t,i,o);if(s===null)return null;let c=await Gt(o,s.newTitle);await Yt(e,t,s.bullets,o);let l=await Zt(e,t,r,s.newTitle,c,n.skipMemory===!0);return l&&a&&(await Wt(e,t.filename),await nn(e,l.filename),await Ht(e,t.filename)),l}async function Ht(e,t){for(let n of[j(`/sessions/${t}`),M(`/sessions/${t}`)])try{await e.rm(n)}catch{}}async function Ut(e,t){try{return await e.stat(k(`/sessions/${t.filename}`)),!0}catch{return!1}}async function Wt(e,t){try{await e.rm(k(`/sessions/${t}`))}catch{}}async function Gt(e,t){if(e.pickIcon)try{return await St(await e.pickIcon({subject:`"${t}" — an archived chat session`})??void 0)}catch(e){K.warn(`Enrichment icon pick failed (continuing without icon)`,{error:e instanceof Error?e.message:String(e)});return}}async function Kt(e,t){try{let n=await e.readFile(L(t),{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}catch(e){return e?.code===`ENOENT`?K.info(`Pending archive missing — treating as already enriched`,{filename:t.filename}):K.warn(`Failed to read pending archive (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}}function qt(e,t){let n;try{n=R(t).messages}catch(t){return K.warn(`Failed to parse pending archive — leaving entry intact`,{filename:e.filename,error:t instanceof Error?t.message:String(t)}),null}return n.length===0?(K.info(`Pending archive has no messages — skipping enrichment`,{filename:e.filename}),null):Y(n)}async function Jt(e,i,a){let o=``;if(!a.skipMemory)try{o=await t({messages:i,instruction:n,model:a.model,apiKey:a.apiKey,maxTokens:q,headers:a.headers})}catch(t){return K.warn(`Enrichment memory call failed (entry stays pending)`,{filename:e.filename,error:t instanceof Error?t.message:String(t)}),null}let s=``;try{s=Rt(await t({messages:i,instruction:r,model:a.model,apiKey:a.apiKey,maxTokens:_t,headers:a.headers}))}catch(t){return K.warn(`Enrichment title call failed (entry stays pending)`,{filename:e.filename,error:t instanceof Error?t.message:String(t)}),null}return s?{bullets:o,newTitle:s}:(K.info(`Enrichment title call returned empty — entry stays pending`,{filename:e.filename}),null)}async function Yt(e,t,n,r){let i=n.trim();if(!(!i||i===`NONE`))try{await zt(e,Ft(t.cone||`cone`),i,`pending-enrichment`,{model:r.model,apiKey:r.apiKey,headers:r.headers})}catch(e){K.warn(`Enrichment memory append failed (continuing with title rewrite)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)})}}function Xt(e,t,n,r,i){let a=r??e.icon;return{filename:t,title:n,frozenAt:e.frozenAt,messageCount:e.messageCount,...e.cost?{cost:e.cost}:{},...e.models?{models:e.models}:{},...e.cone?{cone:e.cone}:{},...e.coneLabel?{coneLabel:e.coneLabel}:{},...e.sessionId?{sessionId:e.sessionId}:{},...a?{icon:a}:{},...e.completeSnapshotUnavailable?{completeSnapshotUnavailable:!0}:{},...i&&e.memoryPending?{memoryPending:!0}:{},...e.memorySkipped?{memorySkipped:!0}:{}}}async function Zt(e,t,n,r,i,a=!1){let o=L(t),s=at(t.filename),c=s?r:t.title,l=s?`${t.frozenAt.replace(/[:.]/g,`-`)}-${H(r)}.md`:t.filename,u=`${P}/${l}`;if(s)try{await X(e,P),await e.writeFile(u,Qt(n,c))}catch(e){return K.warn(`Enrichment write failed (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}let d=Xt(t,l,c,i,a);try{await rn(e,t.filename,d)}catch(e){return K.warn(`Enrichment index update failed (entry may stay pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}if(u!==o)try{await e.rm(o)}catch(e){K.info(`Stale pending archive cleanup failed (harmless)`,{oldPath:o,error:e instanceof Error?e.message:String(e)})}try{await e.flush()}catch{}return K.info(`Pending session enriched`,{oldFilename:t.filename,newFilename:l,title:c}),d}function Qt(e,t){let n=e.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);if(!n)return e;let r=n[1].replace(/^title:\s*.+$/m,`title: ${JSON.stringify(t)}`),i=n[2];return i=i.replace(/^#\s+[^\n]*$/m,`# ${t}`),`---\n${r}\n---\n${i}`}async function $t(e,t){let n=null,r=G(async()=>{let r=await I(e),i=r.findIndex(e=>e.filename===t);if(i===-1)return;let{memoryPending:a,pendingEnrichment:o,pendingAttemptCount:s,memoryFailed:c,...l}=r[i],u={...l,memoryCuratedAt:new Date().toISOString()},d=r.slice();d[i]=u,await e.writeFile(F,JSON.stringify(d,null,2)),await e.flush(),n=u});try{await r}catch(e){K.warn(`Failed to clear agentic memory pending marker`,{filename:t,error:e instanceof Error?e.message:String(e)})}return n}async function en(e,t){let n=null;return await G(async()=>{let r=await I(e),i=r.findIndex(e=>e.filename===t);if(i===-1)return;let a=r[i];if(!a.pendingEnrichment&&!a.memoryPending)return;let o=Z(a);if(o>=3)return;n={...a,pendingAttemptCount:o+1};let s=r.slice();s[i]=n,await e.writeFile(F,JSON.stringify(s,null,2)),await e.flush()}),n}async function tn(e,t,n){let r=G(async()=>{let r=await I(e),i=r.findIndex(e=>e.filename===t);if(i===-1)return;let a=r.slice();a[i]={...r[i],memoryFailed:n.slice(0,300)},await e.writeFile(F,JSON.stringify(a,null,2)),await e.flush()});try{await r}catch(e){K.warn(`Failed to record curator failure in sessions index`,{filename:t,error:e instanceof Error?e.message:String(e)})}}async function nn(e,t){let n=G(async()=>{let n=await I(e),r=n.findIndex(e=>e.filename===t);if(r===-1)return;let{memoryFailed:i,...a}=n[r],o=n.slice();o[r]={...a,memoryCuratedAt:new Date().toISOString()},await e.writeFile(F,JSON.stringify(o,null,2)),await e.flush()});try{await n}catch(e){K.warn(`Failed to record curator completion in sessions index`,{filename:t,error:e instanceof Error?e.message:String(e)})}}async function rn(e,t,n){return G(async()=>{let r=[];try{let t=await e.readFile(F,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),i=JSON.parse(n);Array.isArray(i)&&(r=i)}catch(e){if(!(e instanceof c)||e.code!==`ENOENT`)throw e}let i=r.findIndex(e=>e.filename===t),a;i===-1?a=[n,...r.filter(e=>e.filename!==n.filename)]:(a=r.slice(),a[i]=n,a=a.filter((e,t)=>t===i||e.filename!==n.filename)),await e.writeFile(F,JSON.stringify(a,null,2))})}async function $(e,t){return G(async()=>{let n=[];try{let t=await e.readFile(F,{encoding:`utf-8`}),r=typeof t==`string`?t:new TextDecoder().decode(t),i=JSON.parse(r);Array.isArray(i)&&(n=i)}catch(e){if(!(e instanceof c)||e.code!==`ENOENT`)throw e;return}if(!n.find(e=>e.filename===t))return;let r=n.map(e=>e.filename===t?{...e,completeSnapshotUnavailable:!0}:e);await e.writeFile(F,JSON.stringify(r,null,2))})}export{Vt as a,F as c,I as d,y as f,re as h,$ as i,L as l,ie as m,Q as n,ht as o,oe as p,yt as r,V as s,bt as t,R as u};
@@ -1 +1 @@
1
- import{n as e}from"./feature-flags-DaSRRz0w.js";import{n as t,p as n,t as r}from"./tray-runtime-config-CI5NvXNM.js";import{n as i,r as a}from"./main-DSsincSj.js";var o=3e3;async function s(t,n){let r=i(n.storage);try{let i=new URL(`/api/flags`,`${n.workerBaseUrl.replace(/\/+$/,``)}/`);i.searchParams.set(`float`,t);let s=await c(i.toString(),n.fetchImpl??fetch,n.timeoutMs??o);if(!s)return;a(r,t,s),e(t,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:f(t),storage:t.storage})}function f(e){let i=p(e.storage),a=n(e.envBaseUrl??null);if(i)return i;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?t:r}function p(e){try{return n(e?.getItem(`slicc.trayWorkerBaseUrl`)??null)}catch{return null}}export{d as refreshFeatureFlagsForPage};
1
+ import{n as e}from"./feature-flags-DaSRRz0w.js";import{n as t,p as n,t as r}from"./tray-runtime-config-CI5NvXNM.js";import{n as i,r as a}from"./main-Bpl4dJEr.js";var o=3e3;async function s(t,n){let r=i(n.storage);try{let i=new URL(`/api/flags`,`${n.workerBaseUrl.replace(/\/+$/,``)}/`);i.searchParams.set(`float`,t);let s=await c(i.toString(),n.fetchImpl??fetch,n.timeoutMs??o);if(!s)return;a(r,t,s),e(t,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:f(t),storage:t.storage})}function f(e){let i=p(e.storage),a=n(e.envBaseUrl??null);if(i)return i;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?t:r}function p(e){try{return n(e?.getItem(`slicc.trayWorkerBaseUrl`)??null)}catch{return null}}export{d as refreshFeatureFlagsForPage};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/extension-bridge-transport-D3PItLFo.js","assets/logger-DDBAeTLF.js","assets/pending-request-table-Dgn6qYdL.js","assets/lick-ws-bridge-BUAhV4Ba.js","assets/logger-BoSvu4mW.js","assets/tray-leader-BfzB60pu.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/proxied-fetch-CFWkfPNA.js","assets/preload-helper-Czpn1I53.js","assets/base64-DJRlyqZu.js","assets/src-CAWTvdAa.js","assets/runtime-env-Dlaokqg1.js","assets/fetch-body-D2PwksUW.js","assets/api-endpoint-GRCyib6X.js","assets/runtime-env-CgsZ7LTp.js","assets/runtime-env-E-i2SW1s.js","assets/tray-runtime-config-CI5NvXNM.js","assets/messages-BD4p8GuF.js","assets/db-cKsBsMMN.js","assets/cdp-CzH791qX.js","assets/navigation-watcher-CUyfUWfd.js","assets/handoff-link-BzmwBKCE.js","assets/remote-cdp-transport-CgOXLjZ8.js","assets/tray-sync-protocol-BZ5yhJH9.js","assets/main-cherry-6y-bnTnc.js","assets/synthetic-cdp-transport-Ds83IPjw.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import{c as n,o as r,s as i}from"./src-CAWTvdAa.js";import"./proxied-fetch-CFWkfPNA.js";import{t as a}from"./runtime-env-Dlaokqg1.js";import{a as o,o as s,s as c}from"./api-endpoint-GRCyib6X.js";import"./runtime-env-CgsZ7LTp.js";import"./messages-BD4p8GuF.js";import{a as l,c as u,s as d,t as f}from"./tray-runtime-config-CI5NvXNM.js";import{t as p}from"./setup-sudo-BSQT2Dh-.js";var m=`role`;function h(e){try{let t=new URL(e);return`${t.protocol===`wss:`?`https:`:`http:`}//${t.host}`}catch{return null}}function g(e){try{let t=new URL(e);return`${t.protocol}//${t.host}/licks-ws`}catch{return null}}function _(e){let t;try{t=new URLSearchParams(e)}catch{return null}let a=t.get(n),o=t.get(i);if(!a||!o||!/^wss?:\/\//.test(a))return null;let s=t.get(m),c=s===`leader`||s===`follower`?s:null;return{url:a,subprotocol:`${r}${o}`,token:o,apiBaseUrl:h(a),lickWsUrl:g(a),role:c}}function v(e,t,n){if(t){try{if(new URL(e).searchParams.has(`detached`))return`extension-detached`}catch{}return`extension`}try{let t=new URL(e);if(t.searchParams.get(`connect`)===`1`)return`connect`;if(t.searchParams.get(`runtime`)===`hosted-leader`)return`hosted-leader`;if(t.searchParams.get(`cherry`)===`1`)return`cherry`;let r=n===void 0?typeof window<`u`?window.localStorage:null:n;return d(e,r)?`follower`:b(t)?`electron-overlay`:`standalone`}catch{return`standalone`}}function y(e,t){return e===`electron-overlay`||e===`hosted-leader`||e===`standalone`&&t}function b(e){return e.pathname===`/electron`||e.pathname===`/electron/`||e.searchParams.get(`runtime`)===`electron-overlay`}t(`stale-asset`);var x=`slicc-stale-asset-reload`;function S(e,t){if(typeof BroadcastChannel!=`function`)return()=>{};let n=new BroadcastChannel(x),r=n=>{let r=n.data;r?.type===`stale-asset-reload`&&r.instanceId===e&&t(r.replayTurn===!0)};return n.addEventListener(`message`,r),()=>{n.removeEventListener(`message`,r),n.close()}}var C=`slicc:stale-asset-reloaded-at`,w=6e4,T=`slicc:stale-asset-replay`;function E(e=window.sessionStorage){try{e.setItem(T,`1`)}catch{}}function D(e=window.sessionStorage){try{return e.getItem(T)===`1`&&(e.removeItem(T),!0)}catch{return!1}}function O(){return{reload:()=>window.location.reload(),storage:window.sessionStorage,now:()=>Date.now(),windowMs:w,storageKey:C}}function k(e,t,n){return e===null||t-e>=n}function A(e=O()){let t;try{t=e.storage.getItem(e.storageKey)}catch{return!1}let n=t===null?null:Number(t),r=n!==null&&Number.isFinite(n)?n:null,i=e.now();if(!k(r,i,e.windowMs))return!1;try{e.storage.setItem(e.storageKey,String(i))}catch{return!1}return e.reload(),!0}var j=null,M=null;function N(e){j||(M={...O(),...e},j=e=>{A(M)&&e.preventDefault()},window.addEventListener(`vite:preloadError`,j))}var P=null;function F(e){return P||(P=S(e,e=>{e&&E(),A(M??void 0)}),P)}var I=`slicc-cdp-superseded-banner`;function L(e){if(e.getElementById(I))return;let t=e.createElement(`div`);t.id=I,t.setAttribute(`role`,`alert`),t.textContent=`Another SLICC tab or window has taken control of this browser instance. Only one tab can drive the browser per instance — close the other tabs, then reload this page to resume.`,t.style.cssText=[`position:fixed`,`top:0`,`left:0`,`right:0`,`z-index:2147483647`,`padding:10px 16px`,`background:#b3261e`,`color:#fff`,`font:13px/1.4 system-ui,sans-serif`,`text-align:center`,`box-shadow:0 1px 4px rgba(0,0,0,0.3)`].join(`;`),e.body.appendChild(t)}function R(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`slicc-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function z(e){let t;try{t=new URLSearchParams(e)}catch{return null}if(t.get(`slicc`)!==`leader`)return null;let n=t.get(`ext`);return n?{extensionId:n}:null}var B=[100,200,400,800,1600];async function V(e,t,n,r=B,i=e=>new Promise(t=>setTimeout(t,e))){let a=r.length+1,o=null;for(let s=0;s<a;s++)try{await e.connect(t),s>0&&n.info(`CDP bridge connect succeeded after retry`,{attempt:s+1});return}catch(e){o=e,s<r.length&&await i(r[s]??0)}n.warn(`Initial CDP connect failed after retries; worker-forwarded commands will retry on demand`,o instanceof Error?o.message:String(o))}async function H(t,n,r){let{ExtensionBridgeTransport:i}=await e(async()=>{let{ExtensionBridgeTransport:e}=await import(`./extension-bridge-transport-D3PItLFo.js`);return{ExtensionBridgeTransport:e}},__vite__mapDeps([0,1,2])),{mapDiscoveryPayloadToLickEvent:a,mapNavigatePayloadToLickEvent:o}=await e(async()=>{let{mapDiscoveryPayloadToLickEvent:e,mapNavigatePayloadToLickEvent:t}=await import(`./lick-ws-bridge-BUAhV4Ba.js`);return{mapDiscoveryPayloadToLickEvent:e,mapNavigatePayloadToLickEvent:t}},__vite__mapDeps([3,1,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18])),s=null,c=[],l=!1,u=e=>{s=e;for(let t of c)e.sendForwardedLick(t);c.length=0},d=e=>{if(e){if(s){s.sendForwardedLick(e);return}c.length>=50&&(c.shift(),l||(l=!0,r.warn(`extension-bridge lick buffer overflow (cap 50); dropping oldest pending licks until the kernel client attaches`))),c.push(e)}},f=new t(new i({extensionId:n,onLick:e=>{d(o(e))},onDiscovery:e=>{d(a(e))},onOpenSettings:()=>{globalThis.dispatchEvent(new CustomEvent(`slicc:open-settings-from-panel`))}}));return await V(f,void 0,r),{browser:f,attachLickForwardingClient:u}}async function U(t){let{runtimeMode:n,envBaseUrl:r,window:i,log:d,sleep:m}=t,h=n===`electron-overlay`;d.info(`setting up standalone page runtime (BrowserAPI + CDP)`,{runtimeMode:n});let{BrowserAPI:g}=await e(async()=>{let{BrowserAPI:e}=await import(`./cdp-CzH791qX.js`);return{BrowserAPI:e}},__vite__mapDeps([19,1,2,20,21,10,22,23]));await p({log:d});let v,b,x,S=null,C=null,w=null,T=null,E,D=n===`cherry`?null:z(i.location.search),O=!!D&&a(),k=n===`cherry`||O?null:_(i.location.search);k?.apiBaseUrl&&(S=k.apiBaseUrl,c(k.apiBaseUrl),C=k.token,o(k.token)),k?.lickWsUrl&&(w=k.lickWsUrl);let A=n===`cherry`||O||k!==null,j=await l(),M=y(n,j!==null)?f:null;if(await u({locationHref:i.location.href,storage:i.localStorage,envBaseUrl:r,defaultWorkerBaseUrl:M,runtimeConfigFetcher:async()=>j}),n===`cherry`){let{setupCherryFollower:t}=await e(async()=>{let{setupCherryFollower:e}=await import(`./main-cherry-6y-bnTnc.js`);return{setupCherryFollower:e}},__vite__mapDeps([24,1,10,2,19,20,21,22,23,25])),n=await t();v=n.browser,b=n.joinUrl,x=n.transport}else if(D&&a()){d.info(`Routing CDP through the extension bridge (leader tab)`);let e=await H(g,D.extensionId,d);v=e.browser,E=e.attachLickForwardingClient,T=D.extensionId,s(D.extensionId)}else{v=new g,k&&d.info(`Routing CDP through local standalone bridge`,{url:k.url,role:k.role??`(unset)`});let e=k?{url:k.url,protocols:k.subprotocol}:void 0;k?.role===`follower`?(d.info(`Skipping CDP connect for follower overlay tab`),v.primeConnectOptions(e)):(await V(v,e,d,void 0,m),v.setCdpSupersededHandler(()=>L(i.document)))}let N=v.getTransport();return globalThis.__slicc_browser=v,{browser:v,realCdpTransport:N,hasLocalCdpSurface:A,cherryJoinUrl:b,cherryTransport:x,instanceId:R(),isElectronOverlay:h,localApiBaseUrl:S,bridgeToken:C,localLickWsUrl:w,extensionDelegateId:T,attachLickForwardingClient:E}}export{F as a,_ as c,A as i,U as n,N as o,D as r,v as s,z as t};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/extension-bridge-transport-D3PItLFo.js","assets/logger-DDBAeTLF.js","assets/pending-request-table-Dgn6qYdL.js","assets/lick-ws-bridge-CBhfAWcP.js","assets/logger-BoSvu4mW.js","assets/tray-leader-DqvI6bbT.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/proxied-fetch-CFWkfPNA.js","assets/preload-helper-Czpn1I53.js","assets/base64-DJRlyqZu.js","assets/src-CAWTvdAa.js","assets/runtime-env-Dlaokqg1.js","assets/fetch-body-D2PwksUW.js","assets/api-endpoint-GRCyib6X.js","assets/runtime-env-CgsZ7LTp.js","assets/runtime-env-E-i2SW1s.js","assets/tray-runtime-config-CI5NvXNM.js","assets/messages-BD4p8GuF.js","assets/db-cKsBsMMN.js","assets/cdp-CzH791qX.js","assets/navigation-watcher-CUyfUWfd.js","assets/handoff-link-BzmwBKCE.js","assets/remote-cdp-transport-CgOXLjZ8.js","assets/tray-sync-protocol-BZ5yhJH9.js","assets/main-cherry-6y-bnTnc.js","assets/synthetic-cdp-transport-Ds83IPjw.js"])))=>i.map(i=>d[i]);
2
+ import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import{c as n,o as r,s as i}from"./src-CAWTvdAa.js";import"./proxied-fetch-CFWkfPNA.js";import{t as a}from"./runtime-env-Dlaokqg1.js";import{a as o,o as s,s as c}from"./api-endpoint-GRCyib6X.js";import"./runtime-env-CgsZ7LTp.js";import"./messages-BD4p8GuF.js";import{a as l,c as u,s as d,t as f}from"./tray-runtime-config-CI5NvXNM.js";import{t as p}from"./setup-sudo-B5ZH0Kx5.js";var m=`role`;function h(e){try{let t=new URL(e);return`${t.protocol===`wss:`?`https:`:`http:`}//${t.host}`}catch{return null}}function g(e){try{let t=new URL(e);return`${t.protocol}//${t.host}/licks-ws`}catch{return null}}function _(e){let t;try{t=new URLSearchParams(e)}catch{return null}let a=t.get(n),o=t.get(i);if(!a||!o||!/^wss?:\/\//.test(a))return null;let s=t.get(m),c=s===`leader`||s===`follower`?s:null;return{url:a,subprotocol:`${r}${o}`,token:o,apiBaseUrl:h(a),lickWsUrl:g(a),role:c}}function v(e,t,n){if(t){try{if(new URL(e).searchParams.has(`detached`))return`extension-detached`}catch{}return`extension`}try{let t=new URL(e);if(t.searchParams.get(`connect`)===`1`)return`connect`;if(t.searchParams.get(`runtime`)===`hosted-leader`)return`hosted-leader`;if(t.searchParams.get(`cherry`)===`1`)return`cherry`;let r=n===void 0?typeof window<`u`?window.localStorage:null:n;return d(e,r)?`follower`:b(t)?`electron-overlay`:`standalone`}catch{return`standalone`}}function y(e,t){return e===`electron-overlay`||e===`hosted-leader`||e===`standalone`&&t}function b(e){return e.pathname===`/electron`||e.pathname===`/electron/`||e.searchParams.get(`runtime`)===`electron-overlay`}t(`stale-asset`);var x=`slicc-stale-asset-reload`;function S(e,t){if(typeof BroadcastChannel!=`function`)return()=>{};let n=new BroadcastChannel(x),r=n=>{let r=n.data;r?.type===`stale-asset-reload`&&r.instanceId===e&&t(r.replayTurn===!0)};return n.addEventListener(`message`,r),()=>{n.removeEventListener(`message`,r),n.close()}}var C=`slicc:stale-asset-reloaded-at`,w=6e4,T=`slicc:stale-asset-replay`;function E(e=window.sessionStorage){try{e.setItem(T,`1`)}catch{}}function D(e=window.sessionStorage){try{return e.getItem(T)===`1`&&(e.removeItem(T),!0)}catch{return!1}}function O(){return{reload:()=>window.location.reload(),storage:window.sessionStorage,now:()=>Date.now(),windowMs:w,storageKey:C}}function k(e,t,n){return e===null||t-e>=n}function A(e=O()){let t;try{t=e.storage.getItem(e.storageKey)}catch{return!1}let n=t===null?null:Number(t),r=n!==null&&Number.isFinite(n)?n:null,i=e.now();if(!k(r,i,e.windowMs))return!1;try{e.storage.setItem(e.storageKey,String(i))}catch{return!1}return e.reload(),!0}var j=null,M=null;function N(e){j||(M={...O(),...e},j=e=>{A(M)&&e.preventDefault()},window.addEventListener(`vite:preloadError`,j))}var P=null;function F(e){return P||(P=S(e,e=>{e&&E(),A(M??void 0)}),P)}var I=`slicc-cdp-superseded-banner`;function L(e){if(e.getElementById(I))return;let t=e.createElement(`div`);t.id=I,t.setAttribute(`role`,`alert`),t.textContent=`Another SLICC tab or window has taken control of this browser instance. Only one tab can drive the browser per instance — close the other tabs, then reload this page to resume.`,t.style.cssText=[`position:fixed`,`top:0`,`left:0`,`right:0`,`z-index:2147483647`,`padding:10px 16px`,`background:#b3261e`,`color:#fff`,`font:13px/1.4 system-ui,sans-serif`,`text-align:center`,`box-shadow:0 1px 4px rgba(0,0,0,0.3)`].join(`;`),e.body.appendChild(t)}function R(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`slicc-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function z(e){let t;try{t=new URLSearchParams(e)}catch{return null}if(t.get(`slicc`)!==`leader`)return null;let n=t.get(`ext`);return n?{extensionId:n}:null}var B=[100,200,400,800,1600];async function V(e,t,n,r=B,i=e=>new Promise(t=>setTimeout(t,e))){let a=r.length+1,o=null;for(let s=0;s<a;s++)try{await e.connect(t),s>0&&n.info(`CDP bridge connect succeeded after retry`,{attempt:s+1});return}catch(e){o=e,s<r.length&&await i(r[s]??0)}n.warn(`Initial CDP connect failed after retries; worker-forwarded commands will retry on demand`,o instanceof Error?o.message:String(o))}async function H(t,n,r){let{ExtensionBridgeTransport:i}=await e(async()=>{let{ExtensionBridgeTransport:e}=await import(`./extension-bridge-transport-D3PItLFo.js`);return{ExtensionBridgeTransport:e}},__vite__mapDeps([0,1,2])),{mapDiscoveryPayloadToLickEvent:a,mapNavigatePayloadToLickEvent:o}=await e(async()=>{let{mapDiscoveryPayloadToLickEvent:e,mapNavigatePayloadToLickEvent:t}=await import(`./lick-ws-bridge-CBhfAWcP.js`);return{mapDiscoveryPayloadToLickEvent:e,mapNavigatePayloadToLickEvent:t}},__vite__mapDeps([3,1,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18])),s=null,c=[],l=!1,u=e=>{s=e;for(let t of c)e.sendForwardedLick(t);c.length=0},d=e=>{if(e){if(s){s.sendForwardedLick(e);return}c.length>=50&&(c.shift(),l||(l=!0,r.warn(`extension-bridge lick buffer overflow (cap 50); dropping oldest pending licks until the kernel client attaches`))),c.push(e)}},f=new t(new i({extensionId:n,onLick:e=>{d(o(e))},onDiscovery:e=>{d(a(e))},onOpenSettings:()=>{globalThis.dispatchEvent(new CustomEvent(`slicc:open-settings-from-panel`))}}));return await V(f,void 0,r),{browser:f,attachLickForwardingClient:u}}async function U(t){let{runtimeMode:n,envBaseUrl:r,window:i,log:d,sleep:m}=t,h=n===`electron-overlay`;d.info(`setting up standalone page runtime (BrowserAPI + CDP)`,{runtimeMode:n});let{BrowserAPI:g}=await e(async()=>{let{BrowserAPI:e}=await import(`./cdp-CzH791qX.js`);return{BrowserAPI:e}},__vite__mapDeps([19,1,2,20,21,10,22,23]));await p({log:d});let v,b,x,S=null,C=null,w=null,T=null,E,D=n===`cherry`?null:z(i.location.search),O=!!D&&a(),k=n===`cherry`||O?null:_(i.location.search);k?.apiBaseUrl&&(S=k.apiBaseUrl,c(k.apiBaseUrl),C=k.token,o(k.token)),k?.lickWsUrl&&(w=k.lickWsUrl);let A=n===`cherry`||O||k!==null,j=await l(),M=y(n,j!==null)?f:null;if(await u({locationHref:i.location.href,storage:i.localStorage,envBaseUrl:r,defaultWorkerBaseUrl:M,runtimeConfigFetcher:async()=>j}),n===`cherry`){let{setupCherryFollower:t}=await e(async()=>{let{setupCherryFollower:e}=await import(`./main-cherry-6y-bnTnc.js`);return{setupCherryFollower:e}},__vite__mapDeps([24,1,10,2,19,20,21,22,23,25])),n=await t();v=n.browser,b=n.joinUrl,x=n.transport}else if(D&&a()){d.info(`Routing CDP through the extension bridge (leader tab)`);let e=await H(g,D.extensionId,d);v=e.browser,E=e.attachLickForwardingClient,T=D.extensionId,s(D.extensionId)}else{v=new g,k&&d.info(`Routing CDP through local standalone bridge`,{url:k.url,role:k.role??`(unset)`});let e=k?{url:k.url,protocols:k.subprotocol}:void 0;k?.role===`follower`?(d.info(`Skipping CDP connect for follower overlay tab`),v.primeConnectOptions(e)):(await V(v,e,d,void 0,m),v.setCdpSupersededHandler(()=>L(i.document)))}let N=v.getTransport();return globalThis.__slicc_browser=v,{browser:v,realCdpTransport:N,hasLocalCdpSurface:A,cherryJoinUrl:b,cherryTransport:x,instanceId:R(),isElectronOverlay:h,localApiBaseUrl:S,bridgeToken:C,localLickWsUrl:w,extensionDelegateId:T,attachLickForwardingClient:E}}export{F as a,_ as c,A as i,U as n,N as o,D as r,v as s,z as t};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/sudo-B8CRodhJ.js","assets/preload-helper-Czpn1I53.js","assets/logger-DDBAeTLF.js","assets/proxied-fetch-CFWkfPNA.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/base64-DJRlyqZu.js","assets/src-CAWTvdAa.js","assets/runtime-env-Dlaokqg1.js","assets/fetch-body-D2PwksUW.js","assets/api-endpoint-GRCyib6X.js","assets/runtime-env-CgsZ7LTp.js","assets/runtime-env-E-i2SW1s.js","assets/quick-llm-CvqNttpI.js","assets/account-store-CrzQRVmk.js","assets/claude-model-version-BJLrDjmH.js","assets/models-BSkXF4T6.js","assets/diagnostics-DN_idNHx.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-B-zmcypy.js","assets/libesm-BypnjKEL.js","assets/float-topology-BYb7rxY5.js","assets/secret-topology-BE7Eyd3P.js","assets/secrets-bridge-client-H8-Z1RVR.js","assets/port-bridge-client-Cti-DmEY.js","assets/image-markers-CxJ9ZBgw.js","assets/tool-ui-eSQ1g2I1.js","assets/providers-Dz3RSRQx.js","assets/panel-rpc-B3MSVImO.js","assets/bedrock-camp-compat-CgBMwna8.js","assets/llm-session-id-bZQs6gBN.js","assets/icons-BJsliYCh.js","assets/page-approval-service-Cy54wL5s.js"])))=>i.map(i=>d[i]);
2
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./preload-helper-Czpn1I53.js";var n=e({setupSudoExtension:()=>i,setupSudoStandalone:()=>r});async function r(e){let{installSudoTestHook:n}=await t(async()=>{let{installSudoTestHook:e}=await import(`./sudo-B8CRodhJ.js`);return{installSudoTestHook:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32]));n()}async function i(e){let{installPanelSudoResponder:n}=await t(async()=>{let{installPanelSudoResponder:e}=await import(`./sudo-B8CRodhJ.js`);return{installPanelSudoResponder:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32]));n()}export{n,r as t};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/sudo-Bh43BxYg.js","assets/preload-helper-Czpn1I53.js","assets/logger-DDBAeTLF.js","assets/proxied-fetch-CFWkfPNA.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/base64-DJRlyqZu.js","assets/src-CAWTvdAa.js","assets/runtime-env-Dlaokqg1.js","assets/fetch-body-D2PwksUW.js","assets/api-endpoint-GRCyib6X.js","assets/runtime-env-CgsZ7LTp.js","assets/runtime-env-E-i2SW1s.js","assets/quick-llm-CLyaja5O.js","assets/account-store-C209lUzH.js","assets/claude-model-version-BJLrDjmH.js","assets/models-BSkXF4T6.js","assets/diagnostics-DN_idNHx.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-B-zmcypy.js","assets/libesm-BypnjKEL.js","assets/float-topology-BYb7rxY5.js","assets/secret-topology-BE7Eyd3P.js","assets/secrets-bridge-client-H8-Z1RVR.js","assets/port-bridge-client-Cti-DmEY.js","assets/image-markers-CxJ9ZBgw.js","assets/tool-ui-eSQ1g2I1.js","assets/providers-G9XcYrxe.js","assets/panel-rpc-B3MSVImO.js","assets/bedrock-camp-compat-CgBMwna8.js","assets/llm-session-id-bZQs6gBN.js","assets/icons-BJsliYCh.js","assets/page-approval-service-Cy54wL5s.js"])))=>i.map(i=>d[i]);
2
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./preload-helper-Czpn1I53.js";var n=e({setupSudoExtension:()=>i,setupSudoStandalone:()=>r});async function r(e){let{installSudoTestHook:n}=await t(async()=>{let{installSudoTestHook:e}=await import(`./sudo-Bh43BxYg.js`);return{installSudoTestHook:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32]));n()}async function i(e){let{installPanelSudoResponder:n}=await t(async()=>{let{installPanelSudoResponder:e}=await import(`./sudo-Bh43BxYg.js`);return{installPanelSudoResponder:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32]));n()}export{n,r as t};
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./logger-LESFN7Hj.js";import{n,r}from"./path-utils-DNJG-zQf.js";import{t as i}from"./types-Dgm4REV3.js";import"./fs-C3q6Q4sP.js";import{d as a,i as o,m as s,n as c}from"./sudoers-KgJRnN4b.js";const l=t(`sudo:timeout`),u={"user-timeout":`no response from the user within 5 minutes. This is a TIMEOUT, not a denial — the user was not there to answer. Do not retry this action; report that the approval request went unanswered and wait for the user before trying again.`,"cone-timeout":`no response from the cone agent within 5 minutes. This is a TIMEOUT, not a denial — no human was ever prompted, the cone simply never resolved the request. Do not retry this action; report that the escalation went unanswered and continue with work that does not need it.`};function d(e){return u[e]}function f(e=`user-timeout`){return{decision:`deny`,reason:e}}function p(e,t){let n=t.decision===`deny`?t.reason:void 0;return n?`${e}: approval request timed out — ${d(n)}`:`${e}: approval denied`}function m(e,t={}){let n=t.timeoutMs??3e5;if(!Number.isFinite(n)||n<=0)return e;let r=t.setTimer??((e,t)=>setTimeout(e,t)),i=t.clearTimer??(e=>clearTimeout(e));return{requestApproval(t,a){return new Promise(o=>{let s=new AbortController,c=()=>s.abort();a?.signal?.addEventListener(`abort`,c,{once:!0});let u=!1,d=e=>{u=!0,a?.signal?.removeEventListener(`abort`,c),o(e)},p=r(()=>{u||(l.warn(`sudo approval timed out — failing closed`,{kind:t.kind,detail:t.detail,timeoutMs:n}),s.abort(),d(f(`user-timeout`)))},n),m=e=>{if(u){l.warn(`sudo decision arrived after timeout — discarded`,{kind:t.kind,detail:t.detail,decision:e.decision});return}i(p),d(e)};e.requestApproval(t,{signal:s.signal}).then(m,e=>{l.warn(`sudo broker threw — denying`,{error:e instanceof Error?e.message:String(e)}),m({decision:`deny`})})})}}}const h=t(`sudo:fs`),g=Symbol.for(`slicc.fs.monkeypatchUnsafe`),_=`${c}/granted`;function v(e){return p(`sudo`,e)}const y=[`readFile`,`readFileRange`,`readTextFile`,`readDir`,`exists`,`stat`],b=[`writeFile`],x=[`mkdir`,`rm`];async function S(e,t,n,a){let o=s(a);if(!o)return;let l=t(),u={pattern:o,nopasswd:!0,regex:r(o)};(n===`read`?l.read:l.write).push(u);let d=`NOPASSWD ${n===`read`?`Read`:`Write`} ${o}\n`;try{await e.mkdir(c,{recursive:!0});let t=``;try{t=await e.readFile(_,{encoding:`utf-8`})}catch(e){if(!(e instanceof i&&e.code===`ENOENT`))throw e}let n=t.length>0&&!t.endsWith(`
1
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./logger-LESFN7Hj.js";import{n,r}from"./path-utils-DNJG-zQf.js";import{t as i}from"./types-Dgm4REV3.js";import"./fs-C7jYaof5.js";import{d as a,i as o,m as s,n as c}from"./sudoers-KgJRnN4b.js";const l=t(`sudo:timeout`),u={"user-timeout":`no response from the user within 5 minutes. This is a TIMEOUT, not a denial — the user was not there to answer. Do not retry this action; report that the approval request went unanswered and wait for the user before trying again.`,"cone-timeout":`no response from the cone agent within 5 minutes. This is a TIMEOUT, not a denial — no human was ever prompted, the cone simply never resolved the request. Do not retry this action; report that the escalation went unanswered and continue with work that does not need it.`};function d(e){return u[e]}function f(e=`user-timeout`){return{decision:`deny`,reason:e}}function p(e,t){let n=t.decision===`deny`?t.reason:void 0;return n?`${e}: approval request timed out — ${d(n)}`:`${e}: approval denied`}function m(e,t={}){let n=t.timeoutMs??3e5;if(!Number.isFinite(n)||n<=0)return e;let r=t.setTimer??((e,t)=>setTimeout(e,t)),i=t.clearTimer??(e=>clearTimeout(e));return{requestApproval(t,a){return new Promise(o=>{let s=new AbortController,c=()=>s.abort();a?.signal?.addEventListener(`abort`,c,{once:!0});let u=!1,d=e=>{u=!0,a?.signal?.removeEventListener(`abort`,c),o(e)},p=r(()=>{u||(l.warn(`sudo approval timed out — failing closed`,{kind:t.kind,detail:t.detail,timeoutMs:n}),s.abort(),d(f(`user-timeout`)))},n),m=e=>{if(u){l.warn(`sudo decision arrived after timeout — discarded`,{kind:t.kind,detail:t.detail,decision:e.decision});return}i(p),d(e)};e.requestApproval(t,{signal:s.signal}).then(m,e=>{l.warn(`sudo broker threw — denying`,{error:e instanceof Error?e.message:String(e)}),m({decision:`deny`})})})}}}const h=t(`sudo:fs`),g=Symbol.for(`slicc.fs.monkeypatchUnsafe`),_=`${c}/granted`;function v(e){return p(`sudo`,e)}const y=[`readFile`,`readFileRange`,`getNativeFile`,`readTextFile`,`readDir`,`exists`,`stat`],b=[`writeFile`],x=[`mkdir`,`rm`];async function S(e,t,n,a){let o=s(a);if(!o)return;let l=t(),u={pattern:o,nopasswd:!0,regex:r(o)};(n===`read`?l.read:l.write).push(u);let d=`NOPASSWD ${n===`read`?`Read`:`Write`} ${o}\n`;try{await e.mkdir(c,{recursive:!0});let t=``;try{t=await e.readFile(_,{encoding:`utf-8`})}catch(e){if(!(e instanceof i&&e.code===`ENOENT`))throw e}let n=t.length>0&&!t.endsWith(`
2
2
  `)?`
3
3
  `:``;await e.writeFile(_,t+n+d)}catch(e){h.warn(`Failed to persist NOPASSWD grant; effective in-session only`,{error:e instanceof Error?e.message:String(e)})}}function C(e,t){let{broker:r,getPolicy:s}=t,c=t.defaultDisposition??`allow`,l=t.onGrant?t.onGrant:(t,n)=>S(e,s,t,n);async function u(e,t,u=!1){let d=n(t),f=a(s(),e,d,{isContentWrite:u});if((e===`write`?o(f,c):f)!==`require-approval`)return;let p=e,m=await r.requestApproval({kind:p,detail:d});if(m.decision===`deny`)throw new i(`EACCES`,v(m),d);m.decision===`always`&&await l(e,m.pattern?.trim()||d)}function d(e){return a(s(),`read`,n(e))!==`require-approval`}let f=t=>typeof e[t]==`function`,p={};for(let t of y)f(t)&&(p[t]=async(n,...r)=>(await u(`read`,n),e[t](n,...r)));for(let t of b)f(t)&&(p[t]=async(n,...r)=>(await u(`write`,n,!0),e[t](n,...r)));for(let t of x)f(t)&&(p[t]=async(n,...r)=>(await u(`write`,n),e[t](n,...r)));return f(`walk`)&&(p.walk=async function*(t,...n){await u(`read`,t),yield*e.walk(t,...n)}),f(`symlink`)&&(p.symlink=async(t,n)=>(await u(`write`,n),e.symlink(t,n))),f(`rename`)&&(p.rename=async(t,n)=>(await u(`read`,t),await u(`write`,t),await u(`write`,n),e.rename(t,n))),f(`copyFile`)&&(p.copyFile=async(t,n)=>(await u(`read`,t),await u(`write`,n),e.copyFile(t,n))),f(`mount`)&&(p.mount=async(t,...n)=>(await u(`write`,t),e.mount(t,...n))),f(`unmount`)&&(p.unmount=async t=>(await u(`write`,t),e.unmount(t))),f(`refreshMount`)&&(p.refreshMount=async(t,...n)=>(await u(`write`,t),e.refreshMount(t,...n))),f(`statSync`)&&(p.statSync=t=>d(t)?e.statSync(t):null),f(`readDirSync`)&&(p.readDirSync=t=>d(t)?e.readDirSync(t):null),new Proxy(e,{get(e,t,n){if(t===g)return!0;if(typeof t==`string`&&t in p)return p[t];let r=Reflect.get(e,t,n);return typeof r==`function`?r.bind(e):r}})}const w=`/workspace/skills`,T=`SKILL.md`,E=t(`skills-discovery`),D=[`native`,`agents`,`claude`,`marketplace`,`plugin`],O=new Map([[`.agents`,`agents`],[`.claude`,`claude`]]),k=new Set([`.git`,`.slicc`,`node_modules`]),A=2e4,j=[`mkdir`,`mount`,`rename`,`rm`,`unmount`,`writeFile`],M=new WeakMap,N=new WeakSet;async function P(e,t=w){let n=await z(e,t),r=await I(e),i=await F(e);return[...D.flatMap(e=>(e===`native`?n:e===`plugin`?i:r.filter(t=>t.source===e)).sort((e,t)=>e.path.localeCompare(t.path)))]}async function F(e){let t;try{let n=await e.readTextFile(`/workspace/.plugins/plugins.json`),r=JSON.parse(n);if(!r||typeof r!=`object`||!r.plugins)return[];t=Object.values(r.plugins).map(e=>e?.root).filter(e=>typeof e==`string`)}catch{return[]}let n=[];for(let r of t){let t=`${r}/skills`,i=await K(e,t);for(let r of i){if(r.type!==`directory`)continue;let i=`${t}/${r.name}`,a=`${i}/${T}`;await G(e,a)&&n.push({source:`plugin`,sourceRoot:t,path:i,skillFilePath:a})}}return n}async function I(e){if(L(e))return(await U(e)).map(e=>({...e}));W(e);let t=e,n=M.get(t);if(n)return n.map(e=>({...e}));let r=await U(e);return M.set(t,r),r.map(e=>({...e}))}function L(e){try{return e[g]===!0}catch{return!1}}function R(e,t){let n=new Map,r=new Map;for(let i of e){let e=t(i);if(!n.has(e)){n.set(e,i);continue}let a=r.get(e)??{name:e,winner:n.get(e),shadowed:[]};a.shadowed.push(i),r.set(e,a)}return{winners:Array.from(n.values()),collisions:Array.from(r.values())}}async function z(e,t){let n=await K(e,t),r=[];for(let i of n){if(i.type!==`directory`)continue;let n=`${t}/${i.name}`,a=`${n}/${T}`;await G(e,a)&&r.push({source:`native`,sourceRoot:t,path:n,skillFilePath:a})}return r}async function B(e,t){let n;try{n=await e.readTextFile(t)}catch{return[]}let r;try{r=JSON.parse(n)}catch{return[]}if(typeof r!=`object`||!r)return[];let i=r.plugins;if(!Array.isArray(i))return[];let a=t.replace(/\/[^/]+$/,``).replace(/\/.claude-plugin$/,``),o=[];for(let e of i){if(typeof e!=`object`||!e)continue;let t=e.source;if(typeof t!=`string`||t.startsWith(`/`)||t.split(`/`).includes(`..`))continue;let n=t.replace(/^\.\//,``).replace(/\/$/,``).replace(/^\.$/,``);o.push(n?`${a}/${n}`:a)}return o}async function V(e,t,n){let r=await B(e,`${t}/marketplace.json`),i=[];for(let t of r){let r=`${t}/skills`,a=await K(e,r);for(let t of a){if(t.type!==`directory`)continue;let a=`${r}/${t.name}`,o=`${a}/${T}`;!await G(e,o)||n.has(a)||(n.add(a),i.push({source:`marketplace`,sourceRoot:r,path:a,skillFilePath:o}))}}return i}async function H(e,t,n,r){let i=`${t}/skills`,a=await K(e,i),o=[];for(let t of a){if(t.type!==`directory`)continue;let a=`${i}/${t.name}`,s=`${a}/${T}`;!await G(e,s)||r.has(a)||(r.add(a),o.push({source:n,sourceRoot:i,path:a,skillFilePath:s}))}return o}async function U(e){let t=[],n=new Set,r=new Set([`/`]),i=[{path:`/`,depth:0}];for(let a=0;a<i.length;a+=1){if(a>=A){E.warn(`skills discovery: directory budget exhausted; walk truncated`,{budget:A});break}let{path:o,depth:s}=i[a],c=await K(e,o);for(let a of c){if(a.type!==`directory`||a.name===`.`||a.name===`..`)continue;let c=o===`/`?`/${a.name}`:`${o}/${a.name}`,l=O.get(a.name);if(l){let r=await H(e,c,l,n);t.push(...r)}if(a.name===`.claude-plugin`){let r=await V(e,c,n);t.push(...r);continue}!k.has(a.name)&&s<24&&!r.has(c)&&(r.add(c),i.push({path:c,depth:s+1}))}}return t}function W(e){if(L(e))return;let t=e;if(N.has(t))return;N.add(t);let n=e;for(let r of j){let i=n[r];if(typeof i==`function`)try{n[r]=async(...n)=>{let r=await i.apply(e,n);return M.delete(t),r}}catch{}}}async function G(e,t){try{return await e.stat(t),!0}catch{return!1}}async function K(e,t){try{return[...await e.readDir(t)].sort((e,t)=>e.name.localeCompare(t.name))}catch{return[]}}async function q(e,t=`/workspace/skills`){let n=await P(e,t),r=[];for(let t of n){let n=t.path.split(`/`).pop()??t.path,i=``;if(t.skillFilePath)try{i=X(await e.readTextFile(t.skillFilePath))??``}catch{}r.push({name:n,source:t.source,sourceRoot:t.sourceRoot,path:t.path,skillFilePath:t.skillFilePath,description:i})}let{winners:i,collisions:a}=R(r,e=>e.name),o=new Map(a.map(e=>[e.winner.path,e.shadowed.map(e=>e.path)]));return i.map(e=>({...e,shadowedPaths:o.get(e.path)}))}async function J(e,t,n=`/workspace/skills`){return(await q(e,n)).find(e=>e.name===t)||null}async function Y(e,t,n=`/workspace/skills`){let r=await J(e,t,n);if(!r?.skillFilePath)return null;try{return await e.readTextFile(r.skillFilePath)}catch{return null}}function X(e){let t=e.replace(/^\uFEFF/,``).replace(/\r\n?/g,`
4
4
  `).trimStart().match(/^---\s*\n([\s\S]*?)\n---/);if(!t)return null;for(let e of t[1].split(`
@@ -0,0 +1 @@
1
+ function e(){return{version:`6.124.0`,releasedAt:`2026-09-03T15:58:39Z`,buildId:`6.124.0-mtlpmefa`}}let t=null;function n(e){t=e}function r(){return t}export{e as n,n as r,r as t};