sliccy 6.166.0 → 6.168.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 (245) hide show
  1. package/README.md +2 -0
  2. package/dist/node-server/_shared/base64.d.ts.map +1 -1
  3. package/dist/node-server/_shared/base64.js +7 -3
  4. package/dist/node-server/_shared/base64.js.map +1 -1
  5. package/dist/node-server/_shared/computer-protocol.d.ts +4 -0
  6. package/dist/node-server/_shared/computer-protocol.d.ts.map +1 -1
  7. package/dist/node-server/_shared/tray-sync-protocol.d.ts +66 -2
  8. package/dist/node-server/_shared/tray-sync-protocol.d.ts.map +1 -1
  9. package/dist/node-server/_shared/tray-sync-protocol.js +75 -2
  10. package/dist/node-server/_shared/tray-sync-protocol.js.map +1 -1
  11. package/dist/node-server/computer-demo.d.ts +36 -0
  12. package/dist/node-server/computer-demo.js +126 -0
  13. package/dist/node-server/index.js +13 -3
  14. package/dist/node-server/runtime-flags.d.ts +2 -0
  15. package/dist/node-server/runtime-flags.js +5 -0
  16. package/dist/ui/.vite/manifest.json +288 -265
  17. package/dist/ui/assets/SKILL-CQxpe2fi.js +1 -0
  18. package/dist/ui/assets/{account-store-BEqmysw9.js → account-store-jjUZwcjI.js} +1 -1
  19. package/dist/ui/assets/{account-store-C35GYvum.js → account-store-pXgYgQVx.js} +2 -2
  20. package/dist/ui/assets/{adobe-BcTGFCnQ.js → adobe-C42_geSB.js} +1 -1
  21. package/dist/ui/assets/{adobe-BDH5oLAN.js → adobe-CKCos4Yf.js} +2 -2
  22. package/dist/ui/assets/{agent-panels-DvqNnkLk.js → agent-panels-C34MxFav.js} +1 -1
  23. package/dist/ui/assets/{almost-bash-shell-headless-DqTtE9CM.js → almost-bash-shell-headless-B5YFQ1wh.js} +521 -548
  24. package/dist/ui/assets/{apply-layout-CjYRGs37.js → apply-layout-D2V9rxZu.js} +1 -1
  25. package/dist/ui/assets/approval-timeout-BQ29Z0gf.js +1 -0
  26. package/dist/ui/assets/{apps-dzoLZ_5W.js → apps-CVkFAyGJ.js} +1 -1
  27. package/dist/ui/assets/{azure-openai-DKGdcr4S.js → azure-openai-DucxGbzT.js} +1 -1
  28. package/dist/ui/assets/{azure-openai-BffwoCtp.js → azure-openai-yAg-vpgC.js} +1 -1
  29. package/dist/ui/assets/{backend-hostfs-CWIlIhve.js → backend-hostfs-Ls-A2H2N.js} +1 -1
  30. package/dist/ui/assets/{base64-DzRgusa4.js → base64-BPBW1Gzr.js} +1 -1
  31. package/dist/ui/assets/{base64-DJRlyqZu.js → base64-ELzoYfwP.js} +1 -1
  32. package/dist/ui/assets/browser-DuyhpHbR.js +1 -0
  33. package/dist/ui/assets/{capability-Ci9JmpEG.js → capability-SIitRcq_.js} +2 -2
  34. package/dist/ui/assets/{cdp-DXT6yEL1.js → cdp-DDYzhKE6.js} +1 -1
  35. package/dist/ui/assets/{cerebras-BF5efkRL.js → cerebras-CNR3k849.js} +1 -1
  36. package/dist/ui/assets/{cerebras-By0l7t0i.js → cerebras-_--8Umtj.js} +1 -1
  37. package/dist/ui/assets/{client-B6iKb_ye.js → client-_vVqanZy.js} +1 -1
  38. package/dist/ui/assets/{composer-speech-DIEePbQC.js → composer-speech-D8IeaPdq.js} +1 -1
  39. package/dist/ui/assets/{connect-surface-DBqs7oHf.js → connect-surface-Bnfiw-HT.js} +1 -1
  40. package/dist/ui/assets/{core-BMcS6rur.js → core-eZ1aR21T.js} +1 -1
  41. package/dist/ui/assets/core-vzw5Cr8B.js +36 -0
  42. package/dist/ui/assets/{directed-approval-D1lGElvD.js → directed-approval-CtbQZigA.js} +1 -1
  43. package/dist/ui/assets/{discovery-preference-Bw3Fi0jd.js → discovery-preference-G3mw_EUO.js} +1 -1
  44. package/dist/ui/assets/encode-frame-B8GkHc2t.js +1 -0
  45. package/dist/ui/assets/engine-D531XNHE.js +1 -0
  46. package/dist/ui/assets/{ensure-speech-assets-BJXemBO4.js → ensure-speech-assets-BGvEg25e.js} +1 -1
  47. package/dist/ui/assets/es-DJTRBqjm.js +52 -0
  48. package/dist/ui/assets/{extension-media-capture-BvLVZFQ0.js → extension-media-capture-DMB4r9UQ.js} +1 -1
  49. package/dist/ui/assets/{extension-ops-B0oi7ypc.js → extension-ops-B2RMipFn.js} +1 -1
  50. package/dist/ui/assets/fake-computer-Jawax3MO.js +352 -0
  51. package/dist/ui/assets/{float-topology-YtctpJaG.js → float-topology-CyZCUfkj.js} +1 -1
  52. package/dist/ui/assets/{follower-navigate-watcher-DnnHgZbM.js → follower-navigate-watcher-BAstHBQ5.js} +1 -1
  53. package/dist/ui/assets/frames-FHlUaNCs.js +1 -0
  54. package/dist/ui/assets/{frozen-archive-writer-DYPhPMg7.js → frozen-archive-writer-DFE4MYD-.js} +1 -1
  55. package/dist/ui/assets/{fs-CBH-hQcI.js → fs-BLqkdQnU.js} +1 -1
  56. package/dist/ui/assets/{fs-BapOupIM.js → fs-DRouAGaW.js} +2 -2
  57. package/dist/ui/assets/{gelatiere-store-C2u47uk0.js → gelatiere-store-D_JKXdpV.js} +1 -1
  58. package/dist/ui/assets/{gelatiere-unit-wvDEO7gH.js → gelatiere-unit-Q-gB5yVf.js} +1 -1
  59. package/dist/ui/assets/{github-Db015Tee.js → github-Cfpmwf1n.js} +1 -1
  60. package/dist/ui/assets/{github-Bx7_6LBm.js → github-DLAFwQdm.js} +2 -2
  61. package/dist/ui/assets/{github-auth-DtKS6UIX.js → github-auth-DnIBV6_3.js} +1 -1
  62. package/dist/ui/assets/{github-copilot-CtOjxhqK.js → github-copilot-BFfPdiKK.js} +1 -1
  63. package/dist/ui/assets/{github-copilot-eCfmryv6.js → github-copilot-EtGePnlq.js} +1 -1
  64. package/dist/ui/assets/{github-install-B6W4-xcc.js → github-install-1nDy7YKR.js} +1 -1
  65. package/dist/ui/assets/{github-zip-Bv1smNmy.js → github-zip-B-FKgUOX.js} +1 -1
  66. package/dist/ui/assets/{guest-tool-gate-Mu-876Hm.js → guest-tool-gate-GANtsowg.js} +1 -1
  67. package/dist/ui/assets/{hear-BZHckZJM.js → hear-BMEHlsdb.js} +1 -1
  68. package/dist/ui/assets/{help-BU2Hjl0P.js → help-DWGffc9y.js} +1 -1
  69. package/dist/ui/assets/host-AggLcUuh.js +1 -0
  70. package/dist/ui/assets/host-command-XUdketMY.js +28 -0
  71. package/dist/ui/assets/{image-markers-DuyWsic3.js → image-markers-CwM1dvoI.js} +1 -1
  72. package/dist/ui/assets/{image-markers-BFDmhPy4.js → image-markers-q8JQTtid.js} +1 -1
  73. package/dist/ui/assets/{installer-BbtH3u7z.js → installer-BHkUBh6r.js} +1 -1
  74. package/dist/ui/assets/{isomorphic-git-D2fV6xS-.js → isomorphic-git-B8-ayEVu.js} +7 -7
  75. package/dist/ui/assets/{isomorphic-git-B7et_8Xe.js → isomorphic-git-DuHitnAl.js} +10 -10
  76. package/dist/ui/assets/{js-realm-worker-BT3mfq3w.js → js-realm-worker-Zk_Jd1kr.js} +2 -2
  77. package/dist/ui/assets/jsh-CmIpo35m.js +1 -0
  78. package/dist/ui/assets/{jsh-executor-BWlgcE2N.js → jsh-executor-K5sbbmbA.js} +3 -3
  79. package/dist/ui/assets/{jsh-runtime-extensions-BnLXkzqP.js → jsh-runtime-extensions-ddeGEOUw.js} +1 -1
  80. package/dist/ui/assets/{kernel-worker-Dseu067f.js → kernel-worker-Bq9IjFw5.js} +34 -34
  81. package/dist/ui/assets/lick-urls-CgPiVwD-.js +1 -0
  82. package/dist/ui/assets/lick-ws-bridge-8HhoCHq8.js +1 -0
  83. package/dist/ui/assets/{lick-ws-bridge-Cc9sToY7.js → lick-ws-bridge-Ra_w6naR.js} +1 -1
  84. package/dist/ui/assets/{live-session-snapshot-B70raB09.js → live-session-snapshot-lUnl-mYx.js} +1 -1
  85. package/dist/ui/assets/{local-llm-Dcp5IIP-.js → local-llm-B80bjN-D.js} +1 -1
  86. package/dist/ui/assets/{local-llm-DpSg-Oe3.js → local-llm-OcOXhJKt.js} +1 -1
  87. package/dist/ui/assets/{main-CfF8CFBr.js → main-BRoNZPBl.js} +3 -3
  88. package/dist/ui/assets/{main-cherry-VckJPHm5.js → main-cherry-DD2gWq8O.js} +1 -1
  89. package/dist/ui/assets/{memory-curation-seam-DUaZFZG9.js → memory-curation-seam-CcNJCyMJ.js} +1 -1
  90. package/dist/ui/assets/{memory-health-D7uEvfAx.js → memory-health-DZmKH-IW.js} +1 -1
  91. package/dist/ui/assets/memory-v2-flag-DK0lPu0X.js +1 -0
  92. package/dist/ui/assets/{memory-write-execute-rXtR1z76.js → memory-write-execute-6yK_MOdy.js} +1 -1
  93. package/dist/ui/assets/{mount-8lU2iH4k.js → mount-CQBa9QoF.js} +3 -3
  94. package/dist/ui/assets/{mount-DoM0CLGG.js → mount-Dz-lPlKf.js} +1 -1
  95. package/dist/ui/assets/{mount-bridge-client-3a86Q6J0.js → mount-bridge-client-BOZDQLbT.js} +1 -1
  96. package/dist/ui/assets/{mount-bridge-client-CO2HxXrT.js → mount-bridge-client-BRywSH1d.js} +1 -1
  97. package/dist/ui/assets/{mv-DRuZuDHt.js → mv-C7mk2zT1.js} +1 -1
  98. package/dist/ui/assets/{new-session-DEhAjxP1.js → new-session-CXbgg4am.js} +2 -2
  99. package/dist/ui/assets/{oauth-bootstrap-DNTgbEZF.js → oauth-bootstrap-1lsyWJGc.js} +2 -2
  100. package/dist/ui/assets/{oauth-service-IlBYPvwr.js → oauth-service-CRmx6zI1.js} +1 -1
  101. package/dist/ui/assets/{oauth-service-BsW9nY_u.js → oauth-service-WTeDvR5m.js} +1 -1
  102. package/dist/ui/assets/{onboarding-orchestrator-DzPQ0pVG.js → onboarding-orchestrator-SsjiVLB2.js} +1 -1
  103. package/dist/ui/assets/{openai-codex-DYRKYWTe.js → openai-codex-BJzpp5yt.js} +1 -1
  104. package/dist/ui/assets/{openai-codex-CsAhfz0D.js → openai-codex-DDer9WGr.js} +1 -1
  105. package/dist/ui/assets/{openrouter-D9T6tXUF.js → openrouter-CdsU1YkP.js} +1 -1
  106. package/dist/ui/assets/{openrouter-free-CPshAgQD.js → openrouter-free-D1H2Ji7e.js} +1 -1
  107. package/dist/ui/assets/{openrouter-free-DfbYsnmf.js → openrouter-free-zplQAXSX.js} +1 -1
  108. package/dist/ui/assets/{openrouter-oauth-xKlWi_wI.js → openrouter-oauth-Bu3uuWMP.js} +1 -1
  109. package/dist/ui/assets/{openrouter-oauth-hZg6oH0A.js → openrouter-oauth-CrvWvUZV.js} +1 -1
  110. package/dist/ui/assets/{openrouter-IyZlRHg4.js → openrouter-xGsvfFPH.js} +1 -1
  111. package/dist/ui/assets/{opfs-mount-C9Iamj6N.js → opfs-mount-BqBx391V.js} +1 -1
  112. package/dist/ui/assets/{page-approval-service-B8t-buCi.js → page-approval-service-BkqDCbBQ.js} +1 -1
  113. package/dist/ui/assets/panel-rpc-handlers-CXr7dAtk.js +2 -0
  114. package/dist/ui/assets/panelize-shell-DjnrzeLU.js +4 -0
  115. package/dist/ui/assets/{pi-edit-execution-D6vx5LyF.js → pi-edit-execution-Dn7wc7f8.js} +1 -1
  116. package/dist/ui/assets/{port-bridge-client-Dn8JtUyP.js → port-bridge-client-CZFX4fUT.js} +1 -1
  117. package/dist/ui/assets/{port-bridge-client-Ds3xwapn.js → port-bridge-client-CkkC3v5w.js} +1 -1
  118. package/dist/ui/assets/{provider-Z5aj7SzG.js → provider-BCNJf9_1.js} +2 -2
  119. package/dist/ui/assets/{provider-3--cEcAF.js → provider-DiIrGlmw.js} +1 -1
  120. package/dist/ui/assets/{provider-settings-D9sjEfYE.js → provider-settings-DSf8xD9N.js} +1 -1
  121. package/dist/ui/assets/provider-store-access-CsczvZfg.js +1 -0
  122. package/dist/ui/assets/provider-store-access-et-xszx-.js +1 -0
  123. package/dist/ui/assets/{providers-CnoKdyLc.js → providers-CFveri5U.js} +2 -2
  124. package/dist/ui/assets/{providers-DVvrXbtx.js → providers-CfE8Z8rn.js} +1 -1
  125. package/dist/ui/assets/{proxied-fetch-DEK8DT-z.js → proxied-fetch-CPL8wJM2.js} +1 -1
  126. package/dist/ui/assets/{proxied-fetch-DyBveeCl.js → proxied-fetch-CnCvBaGV.js} +1 -1
  127. package/dist/ui/assets/{quick-llm-DjWE-wQw.js → quick-llm-t6CBwwSm.js} +1 -1
  128. package/dist/ui/assets/{realm-inprocess-D0iWBQzz.js → realm-inprocess-CmaGqRYS.js} +2 -2
  129. package/dist/ui/assets/{recovery-screen-Y1CSyfR-.js → recovery-screen-DdKutJyi.js} +1 -1
  130. package/dist/ui/assets/{redirect-uri-CgKdq7-K.js → redirect-uri-D2aDPCyB.js} +1 -1
  131. package/dist/ui/assets/{remote-terminal-view-D4Ah4AQY.js → remote-terminal-view-CA-SfvvZ.js} +2 -2
  132. package/dist/ui/assets/{request-body-DkfS6k_a.js → request-body-BF4moGct.js} +1 -1
  133. package/dist/ui/assets/{rest-ops-C8YK53pT.js → rest-ops-Yu_dXm4T.js} +1 -1
  134. package/dist/ui/assets/{rest-ops-DNanZY2-.js → rest-ops-aP40ni1y.js} +1 -1
  135. package/dist/ui/assets/{restore-DOkDX8BI.js → restore-Dk9r9feA.js} +1 -1
  136. package/dist/ui/assets/{run-BOkp5G58.js → run-1aYSFTwj.js} +2 -2
  137. package/dist/ui/assets/{run-B-t7kWH3.js → run-BEs473Sp.js} +1 -1
  138. package/dist/ui/assets/run-CHjRjdbt.js +75 -0
  139. package/dist/ui/assets/{run-DgNh1E56.js → run-CNldrNje.js} +3 -3
  140. package/dist/ui/assets/{run-Bld9B0W0.js → run-CreCrLyX.js} +1 -1
  141. package/dist/ui/assets/{run-a67LpkRp.js → run-CyYVrNXy.js} +2 -2
  142. package/dist/ui/assets/{run-B-fA26ea.js → run-D5s_jfOL.js} +1 -1
  143. package/dist/ui/assets/{run-D0C4PgZM.js → run-DuW-7oJj.js} +2 -2
  144. package/dist/ui/assets/{run-BOc9XLhg.js → run-QfYlwe2c.js} +1 -1
  145. package/dist/ui/assets/{run-vEDh-Me-.js → run-V-RPlN7V.js} +2 -2
  146. package/dist/ui/assets/{run-BWJSDhS7.js → run-wxYu-gUG.js} +2 -2
  147. package/dist/ui/assets/screen-s6LdF1JP.js +1 -0
  148. package/dist/ui/assets/screen-share-approval-live-D388fVD9.js +1 -0
  149. package/dist/ui/assets/screencapture-media-BjmoKpyn.js +1 -0
  150. package/dist/ui/assets/screencapture-media-CM5E2g6c.js +1 -0
  151. package/dist/ui/assets/screencapture-media-shared-DlK1Wqh8.js +1 -0
  152. package/dist/ui/assets/{screencapture-run-XrgS6hEd.js → screencapture-run-zmx5QKf_.js} +2 -2
  153. package/dist/ui/assets/{secret-env-CDLWFhsq.js → secret-env-DgrZZVFU.js} +1 -1
  154. package/dist/ui/assets/secret-topology-BrobAGSV.js +1 -0
  155. package/dist/ui/assets/{secrets-bridge-client--VZ3E0yk.js → secrets-bridge-client-BJqZCK6Q.js} +1 -1
  156. package/dist/ui/assets/{secrets-bridge-client-ZpBL1Zhl.js → secrets-bridge-client-CeK7HpDf.js} +1 -1
  157. package/dist/ui/assets/{session-command-memory-DB2GmPSU.js → session-command-memory-x5HxxZtb.js} +2 -2
  158. package/dist/ui/assets/{session-jsonl-D_pTYppB.js → session-jsonl-3Y2sXuNG.js} +1 -1
  159. package/dist/ui/assets/{session-jsonl-DFC-2T76.js → session-jsonl-DI8wVUpH.js} +1 -1
  160. package/dist/ui/assets/{session-search-index-CN1zDLlx.js → session-search-index-DRFKeHXl.js} +1 -1
  161. package/dist/ui/assets/{setup-feature-flags-remote-BVd31Z12.js → setup-feature-flags-remote-CEtNYgED.js} +1 -1
  162. package/dist/ui/assets/{signed-fetch-BY2Mdjqe.js → signed-fetch-E-2q08XL.js} +1 -1
  163. package/dist/ui/assets/{silent-renew-backoff-CKAAh6GN.js → silent-renew-backoff-Ddlf2gAw.js} +1 -1
  164. package/dist/ui/assets/slicc-version-bYxfYms3.js +1 -0
  165. package/dist/ui/assets/{snapshot-gi8tDzvN.js → snapshot-Dv7-7kFE.js} +1 -1
  166. package/dist/ui/assets/{snapshot-features-DjMJkCGq.js → snapshot-features-rlYmVQ8i.js} +1 -1
  167. package/dist/ui/assets/{soundscape-Bl3LhUk9.js → soundscape-CyBhtUGQ.js} +1 -1
  168. package/dist/ui/assets/{speak-BY_fDou2.js → speak-qRc1po5e.js} +1 -1
  169. package/dist/ui/assets/{sprinkle-manager-C-NUJqPy.js → sprinkle-manager-DT2AYalc.js} +1 -1
  170. package/dist/ui/assets/{sprinkle-renderer-CcA6ie5u.js → sprinkle-renderer-DF4JYgsw.js} +1 -1
  171. package/dist/ui/assets/ssh-BQqlQVXQ.js +6 -0
  172. package/dist/ui/assets/{state-z3wOHLww.js → state-RVr0GidF.js} +1 -1
  173. package/dist/ui/assets/{store-ByUcAFUa.js → store-BlFQl8dG.js} +1 -1
  174. package/dist/ui/assets/{store-ChWzn_H8.js → store-CYwEydJ4.js} +1 -1
  175. package/dist/ui/assets/{sudo-DNZFIZ-H.js → sudo-BqpeZUOO.js} +1 -1
  176. package/dist/ui/assets/sudo-fs-C6r_MIIY.js +3 -0
  177. package/dist/ui/assets/{supervisor-BtH2-9sE.js → supervisor-C1sPrIbH.js} +1 -1
  178. package/dist/ui/assets/{sync-dialog-Jqz74VkZ.js → sync-dialog-sC277gbg.js} +1 -1
  179. package/dist/ui/assets/tool-ui-DRnUkp2g.js +1 -0
  180. package/dist/ui/assets/{transformers-env-pq1E2H6B.js → transformers-env-BzsQpYgD.js} +1 -1
  181. package/dist/ui/assets/{tray-leader-Bas0lH9O.js → tray-leader-Gx_yzXFX.js} +1 -1
  182. package/dist/ui/assets/{lick-urls-DdKPDlgq.js → tray-leader-status-CpkFr6n7.js} +1 -1
  183. package/dist/ui/assets/{tray-leave-runtime-B9aV_guA.js → tray-leave-runtime-Cuj-CStD.js} +1 -1
  184. package/dist/ui/assets/{tray-runtime-config-BZoJXfW0.js → tray-runtime-config-dyxCfUex.js} +1 -1
  185. package/dist/ui/assets/{tray-sidecar-DA8NfCV6.js → tray-sidecar-BCAds1ts.js} +1 -1
  186. package/dist/ui/assets/{upgrade-detection-B5ym__Gu.js → upgrade-detection-CXNgKpwK.js} +1 -1
  187. package/dist/ui/assets/{upskill-lick-skip-CZGM2OFA.js → upskill-lick-skip-wDM3Vdyq.js} +1 -1
  188. package/dist/ui/assets/url-Dq7PTmNp.js +1 -0
  189. package/dist/ui/assets/v86-Cv7l0TeZ.js +1 -0
  190. package/dist/ui/assets/voice-reply-DPbxkmsy.js +1 -0
  191. package/dist/ui/assets/{wc-attach-C5yXIQNU.js → wc-attach-C-7ZwxKV.js} +3 -3
  192. package/dist/ui/assets/wc-browser-D-03DBqa.js +1 -0
  193. package/dist/ui/assets/wc-computers-m_Qiklfg.js +3 -0
  194. package/dist/ui/assets/{wc-detached-f_qit-5b.js → wc-detached-D5_bAfyn.js} +1 -1
  195. package/dist/ui/assets/{wc-extension-DRx21-cq.js → wc-extension-DSvNnUY6.js} +2 -2
  196. package/dist/ui/assets/{wc-follower-DcKt92kM.js → wc-follower-1feBQ0f-.js} +3 -3
  197. package/dist/ui/assets/wc-follower-oauth-JZo8mi8y.js +5 -0
  198. package/dist/ui/assets/{wc-gelatiere-qAW7lWGW.js → wc-gelatiere-Wr8PEKDG.js} +1 -1
  199. package/dist/ui/assets/wc-live-DT1WB50h.js +427 -0
  200. package/dist/ui/assets/{wc-nav-DzPuXq_n.js → wc-nav-BCq8EXtI.js} +2 -2
  201. package/dist/ui/assets/{wc-onboarding-CXM-z-7_.js → wc-onboarding-1l4fZpDo.js} +2 -2
  202. package/dist/ui/assets/{wc-permissions-BsGMi4OQ.js → wc-permissions-CCA-0PP4.js} +2 -2
  203. package/dist/ui/assets/{wc-placeholder-BBqbsuml.js → wc-placeholder-ODIHzW-8.js} +3 -3
  204. package/dist/ui/assets/{wc-secret-request-BSUlxVVi.js → wc-secret-request-CWyoYT_T.js} +1 -1
  205. package/dist/ui/assets/{wc-settings-55mC-jVS.js → wc-settings-Df49ivPm.js} +3 -3
  206. package/dist/ui/assets/{wc-shell-C71iKreG.js → wc-shell-CZ95TYrc.js} +242 -187
  207. package/dist/ui/assets/{wc-shortcut-config-Crjq_rF1.js → wc-shortcut-config-CmRCkDN0.js} +1 -1
  208. package/dist/ui/assets/{wc-sprinkles-Caji5y7n.js → wc-sprinkles-Cm0F47mC.js} +2 -2
  209. package/dist/ui/assets/{wc-transcript-export-Dqe3SH1t.js → wc-transcript-export-CMdPvQk4.js} +2 -2
  210. package/dist/ui/assets/wc-tray-2XQPor_4.js +5 -0
  211. package/dist/ui/assets/welcome-detection-CouG8kRR.js +1 -0
  212. package/dist/ui/assets/{whisper-session-DfILe4Yb.js → whisper-session-z9qnQTAM.js} +2 -2
  213. package/dist/ui/assets/{xai-grok-CVLBrxdD.js → xai-grok-BmuhN83h.js} +1 -1
  214. package/dist/ui/assets/{xai-grok-Dp8n52fO.js → xai-grok-CaNUqqnT.js} +1 -1
  215. package/dist/ui/index.html +11 -11
  216. package/dist/ui/packages/webapp/index.html +11 -11
  217. package/package.json +1 -1
  218. package/dist/ui/assets/SKILL-DB5CVwyu.js +0 -1
  219. package/dist/ui/assets/browser-2rCVqcqy.js +0 -1
  220. package/dist/ui/assets/core-DP-MJcag.js +0 -36
  221. package/dist/ui/assets/engine-B-OPe78i.js +0 -1
  222. package/dist/ui/assets/es-DwGGEZle.js +0 -51
  223. package/dist/ui/assets/fake-computer-1f2_4vxY.js +0 -65
  224. package/dist/ui/assets/host-BQ2qKD-D.js +0 -1
  225. package/dist/ui/assets/jsh-CrSWPG4t.js +0 -1
  226. package/dist/ui/assets/keys-n5_C9sHW.js +0 -1
  227. package/dist/ui/assets/lick-ws-bridge-ChigxI36.js +0 -1
  228. package/dist/ui/assets/memory-v2-flag-BHVbti6Z.js +0 -1
  229. package/dist/ui/assets/panel-rpc-handlers-Nu-wOrG9.js +0 -2
  230. package/dist/ui/assets/panelize-shell-tFElgHWF.js +0 -4
  231. package/dist/ui/assets/provider-store-access-M0PvJ08M.js +0 -1
  232. package/dist/ui/assets/provider-store-access-RxIHhH6d.js +0 -1
  233. package/dist/ui/assets/run-BEt0RS3J.js +0 -52
  234. package/dist/ui/assets/screencapture-media-B1iFS6Qy.js +0 -1
  235. package/dist/ui/assets/screencapture-media-YBE2VnLF.js +0 -1
  236. package/dist/ui/assets/secret-topology-DLJBhHOi.js +0 -1
  237. package/dist/ui/assets/slicc-version-BZyTvfoc.js +0 -1
  238. package/dist/ui/assets/sudo-fs-D620mZry.js +0 -3
  239. package/dist/ui/assets/v86-DseFx8Yp.js +0 -1
  240. package/dist/ui/assets/voice-reply-CL5tDo0l.js +0 -1
  241. package/dist/ui/assets/wc-browser-DO1Pnegi.js +0 -1
  242. package/dist/ui/assets/wc-follower-oauth-BF3qXDTt.js +0 -5
  243. package/dist/ui/assets/wc-live-DOMCfDT6.js +0 -427
  244. package/dist/ui/assets/wc-tray-B7ayzT1W.js +0 -5
  245. package/dist/ui/assets/welcome-detection-CEARSpAq.js +0 -1
@@ -0,0 +1,75 @@
1
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{n as t,t as n}from"./panel-rpc-BPwAqRch.js";import{r}from"./base64-BPBW1Gzr.js";import"./bridge-protocol-31SWTdS5.js";import{n as i}from"./host-command-XUdketMY.js";import{a,i as o,n as s}from"./tool-ui-DRnUkp2g.js";import{r as c,t as l}from"./subcommand-help-CgO7wRS5.js";import{t as u}from"./approval-timeout-BQ29Z0gf.js";import{n as d}from"./screencapture-media-shared-DlK1Wqh8.js";import{a as f,o as p,s as m,t as h}from"./encode-frame-B8GkHc2t.js";import{i as g,n as _,o as ee,s as te,t as ne}from"./frames-FHlUaNCs.js";import{getComputerRegistry as re,installComputerRegistry as ie}from"./registry-Bq_j-EXx.js";import{getComputersHost as ae}from"./host-AggLcUuh.js";const oe=[`bridgeToken`,`bridge`,`tray`],se=[`cherry`,`connect`],ce=[`/join/`,`/tray/`],le=[``,`/`,`/cloud`,`/connect`];function ue(e){let t=e.replace(/\/index\.html$/,`/`);return t.length>1?t.replace(/\/$/,``):t}function de(e,t={}){let n;try{n=new URL(e)}catch{return!1}for(let e of oe)if(n.searchParams.has(e))return!0;for(let e of se)if(n.searchParams.get(e)===`1`)return!0;if(!new Set([`https://www.sliccy.ai`,`https://slicc-tray-hub-staging.minivelos.workers.dev`,...t.selfOrigins??[]]).has(n.origin))return!1;let r=ue(n.pathname);return le.includes(r)?!0:ce.some(e=>`${r}/`.startsWith(e))}function v(e={x:0,y:0}){return{x:e.x,y:e.y}}function fe(e,t){return t.x!==void 0&&t.y!==void 0&&(e.x=t.x,e.y=t.y),e}function y(e,t){return t.x!==void 0&&t.y!==void 0?(e.x=t.x,e.y=t.y,{x:t.x,y:t.y}):{x:e.x,y:e.y}}function pe(e,t){return t.map(t=>{if(t.type===`mousemove`||t.type===`click`||t.type===`button`||t.type===`scroll`){let n=y(e,t);return{...t,x:n.x,y:n.y}}return t.type===`drag`&&fe(e,{x:t.x2,y:t.y2}),t})}function me(e){return`tab:${e}`}const he={screenshot:!0,text:!1,frames:`poll`,keyboard:!0,mouse:`absolute`,scroll:!0,exec:!1,inputAllowed:!0},b={1:`left`,2:`middle`,3:`right`};function x(e){if(de(e.url))throw Error(`refusing SLICC app tab '${e.title??e.url}'`)}var ge=class{browser;targetId;seq=0;title;url;size=null;pointer=v();constructor(e,t,n={title:t,url:``}){this.browser=e,this.targetId=t,this.title=n.title,this.url=n.url}describe(){return{id:me(this.targetId),kind:`tab`,title:this.title,size:this.size,state:`live`,capabilities:he,pid:null}}async screenshot(e){return await this.refreshInfo(),x({url:this.url,title:this.title}),this.browser.withTab(this.targetId,async t=>{let n=await _e(t,e);return n.native&&(this.size=n.native),this.seq+=1,{seq:this.seq,mime:n.mime,width:n.width,height:n.height,bytes:n.bytes}})}async input(e){await this.refreshInfo(),x({url:this.url,title:this.title}),await this.browser.withTab(this.targetId,async t=>{for(let n of e)await S(t,n,this.pointer)})}async close(){}async refreshInfo(){let e=await we(this.browser,this.targetId);e&&(this.title=e.title||this.title,this.url=e.url||this.url)}};async function _e(e,t){let n=await e.screenshot({format:`png`}),r=h(n),i=m(r)??f(r),a=r;t.maxWidth&&i&&i.width>t.maxWidth?a=h(await e.screenshot({format:`png`,maxWidth:t.maxWidth})):t.format!==`png`&&(a=h(await e.screenshot({format:`jpeg`,quality:70})));let o=m(a)??f(a)??i??{width:0,height:0};return t.format!==`png`&&!f(a)&&(a=await p(a)),{mime:f(a)?`image/jpeg`:`image/png`,bytes:a,width:o.width,height:o.height,native:i}}var ve=class{rpc;targetId;seq=0;title;url;size=null;pointer=v();constructor(e,t,n={title:t,url:``}){this.rpc=e,this.targetId=t,this.title=n.title,this.url=n.url}describe(){return{id:me(this.targetId),kind:`tab`,title:this.title,size:this.size,state:`live`,capabilities:he,pid:null}}async screenshot(e){let t=await this.rpc.call(`computer-tab-screenshot`,{targetId:this.targetId,maxWidth:e.maxWidth,format:e.format});return this.title=t.title,this.url=t.url,this.size=t.nativeWidth&&t.nativeHeight?{width:t.nativeWidth,height:t.nativeHeight}:{width:t.width,height:t.height},this.seq+=1,{seq:this.seq,mime:t.mime,width:t.width,height:t.height,bytes:h(t.base64)}}async input(e){let t=pe(this.pointer,e);await this.rpc.call(`computer-tab-input`,{targetId:this.targetId,events:t})}async close(){}};async function S(e,t,n=v()){switch(t.type){case`mousemove`:{let r=y(n,t);await e.send(`Input.dispatchMouseEvent`,{type:`mouseMoved`,x:r.x,y:r.y});return}case`button`:await ye(e,t,n);return;case`click`:await be(e,t,n);return;case`drag`:await xe(e,t,n);return;case`scroll`:{let r=y(n,t);await e.send(`Input.dispatchMouseEvent`,{type:`mouseWheel`,x:r.x,y:r.y,deltaX:t.dx,deltaY:t.dy});return}case`key`:await Se(e,t);return;case`text`:await e.send(`Input.insertText`,{text:t.text});return;case`wait`:await C(Math.max(0,t.ms));return}}async function ye(e,t,n){let r=y(n,t);await e.send(`Input.dispatchMouseEvent`,{type:t.down?`mousePressed`:`mouseReleased`,x:r.x,y:r.y,button:b[t.button],clickCount:1})}async function be(e,t,n){let r=y(n,t),i=Math.max(1,t.count);for(let n=1;n<=i;n++)await e.send(`Input.dispatchMouseEvent`,{type:`mousePressed`,x:r.x,y:r.y,button:b[t.button],clickCount:n}),t.holdMs&&t.holdMs>0&&await C(t.holdMs),await e.send(`Input.dispatchMouseEvent`,{type:`mouseReleased`,x:r.x,y:r.y,button:b[t.button],clickCount:n})}async function xe(e,t,n){await S(e,{type:`mousemove`,x:t.x1,y:t.y1},n),await S(e,{type:`button`,button:1,down:!0,x:t.x1,y:t.y1},n),await S(e,{type:`mousemove`,x:t.x2,y:t.y2},n),await S(e,{type:`button`,button:1,down:!1,x:t.x2,y:t.y2},n)}async function Se(e,t){let n=ee(t.keysym);if(!n)throw Error(`unknown keysym '${t.keysym}'`);for(let r of te(n,t.down))await e.send(`Input.dispatchKeyEvent`,{type:r.type,key:r.key,code:r.code,modifiers:r.modifiers,...r.text===void 0?{}:{text:r.text}})}function Ce(e,t){let n=e.find(e=>e.targetId===t);if(n)return n;let r=e.filter(e=>e.url===t||e.url.startsWith(t));if(r.length===1)return r[0];if(r.length>1)return{error:`ambiguous url '${t}' matches ${r.length} tabs`};let i=e.filter(e=>e.title===t);return i.length===1?i[0]:{error:`no tab matching '${t}'`}}async function we(e,t){let n=(await e.listAllTargets()).find(e=>e.targetId===t);return n?{title:n.title,url:n.url}:null}function C(e){return new Promise(t=>setTimeout(t,e))}function Te(e,t){for(let n of t){let t=Ee(e,n);if(t)return t}return null}function Ee(e,t){return t.type===`wait`?null:e.inputAllowed?t.type===`key`||t.type===`text`?e.keyboard?null:`keyboard input is not supported`:t.type===`scroll`?e.scroll?null:`scroll is not supported`:(t.type===`mousemove`||t.type===`button`||t.type===`click`||t.type===`drag`)&&e.mouse===`none`?`mouse input is not supported`:null:`input is not allowed`}const w={low:256,medium:768,high:1536};function T(e){if(!e)return w.medium;if(e in w)return w[e];let t=/^(\d+)(?:x\d+)?$/u.exec(e);if(t){let e=Number.parseInt(t[1],10);if(e>0)return e}return w.medium}function E(e,t){let n=e.width>0?e.width:t.width,r=e.height>0?e.height:t.height,i=t.width,a=t.height,o=n>0?i/n:1;return{nativeWidth:n,nativeHeight:r,shotWidth:i,shotHeight:a,scale:o>0?o:1}}function De(e){let t=e.scale===1?`1`:e.scale.toFixed(2).replace(/0+$/u,``).replace(/\.$/u,``);return`${e.nativeWidth}x${e.nativeHeight} → ${e.shotWidth}x${e.shotHeight} (scale ${t})`}function D(e,t){return{width:e.shotWidth,height:e.shotHeight,scale:e.scale,at:t}}function Oe(e,t,n,r){return r||!n||n.scale===0?{x:e,y:t}:{x:Math.round(e/n.scale),y:Math.round(t/n.scale)}}const O=`computer — look at and poke a screen (xdotool grammar)
2
+
3
+ Usage:
4
+ computer [-c <id>] [--json] [--native] <verb> [args] [verb ...]
5
+
6
+ Target: -c / --computer, else $COMPUTER, else last \`computer use\`, else
7
+ the only registered computer. \`computer ls\` lists ids.
8
+
9
+ Lifecycle:
10
+ ls list registered computers
11
+ add tab <targetId|url> [-n name]
12
+ register a browser tab (refuses SLICC app tabs)
13
+ add screen [-n name] share this display (needs a user gesture)
14
+ add ssh <follower> [--sim <udid>] [--allow-input] [-n name]
15
+ follower desktop (or iOS Simulator on a Mac).
16
+ --allow-input needs sudo (phone can Face ID).
17
+ The iOS follower itself is never a computer.
18
+ add url <http(s)://base> [-n name]
19
+ HTTP remote computer (GET /computer). Trailing
20
+ /computer is stripped. node-server --computer-demo
21
+ is the in-tree reference.
22
+ rm [id] unregister (stops a live screen share)
23
+ use <id> set the default computer
24
+ info descriptor for the current target
25
+
26
+ Look:
27
+ screenshot [--size low|medium|high|<N>] [--view] [file]
28
+ JPEG; prints WxH → wxh (scale s) and a frozen frame
29
+ text text-mode dump when the backend supports it
30
+ watch [--fps N] [--stop] live frames to the page (phase 2 UI)
31
+ record [-V|--duration SEC] [file]
32
+ timed clip from a live screen session (other kinds: phase 4)
33
+
34
+ Poke (xdotool; every verb ends with a frozen-frame line):
35
+ mousemove <x> <y> [--relative]
36
+ click [1|2|3] [--at x,y] [--hold MS] [--repeat N]
37
+ mousedown [1|2|3] [--at x,y]
38
+ mouseup [1|2|3] [--at x,y]
39
+ drag <x1> <y1> <x2> <y2>
40
+ scroll <dx> <dy> [--at x,y]
41
+ key <keysym> [keysym...] ctrl+alt+Delete, Return, F5, super+space
42
+ keydown <keysym>
43
+ keyup <keysym>
44
+ type <text...>
45
+ wait <ms>
46
+ exec <command...> when the backend supports it
47
+
48
+ Anthropic aliases (same verbs):
49
+ left_click right_click middle_click double_click triple_click
50
+ left_click_drag mouse_move scroll key type screenshot wait
51
+
52
+ Coordinates are screenshot-space of the last shot unless --native.
53
+ Buttons: 1 left, 2 middle, 3 right. Chain verbs: computer click 1 type hello
54
+
55
+ v86 guests register as v86:<name> on \`v86 start\`. Prefer this command;
56
+ \`v86 type|key|mouse|screenshot|text\` remain as thin aliases.
57
+ `,ke=[`-c`,`--computer`,`--size`,`--at`,`--hold`,`--repeat`,`--fps`,`-n`,`--name`,`--__resolved`,`-V`,`--duration`,`--sim`],k=new Set([`ls`,`add`,`rm`,`use`,`info`,`screenshot`,`text`,`watch`,`record`,`mousemove`,`click`,`mousedown`,`mouseup`,`drag`,`scroll`,`key`,`keydown`,`keyup`,`type`,`wait`,`exec`]),A={left_click:`click`,right_click:`click`,middle_click:`click`,double_click:`click`,triple_click:`click`,left_click_drag:`drag`,mouse_move:`mousemove`,screenshot:`screenshot`,wait:`wait`,key:`key`,type:`type`,scroll:`scroll`},Ae=new Set([`type`,`key`,`exec`,`add`]),j=new Set([`--size`,`--at`,`--hold`,`--repeat`,`--fps`,`-n`,`--name`,`-c`,`--computer`,`--__resolved`,`-V`,`--duration`,`--sim`]);function M(e){return k.has(e)||e in A}function je(e){return k.has(e)?e:A[e]??null}function Me(e){let t=[],n,r=!1,i=!1;for(let a=0;a<e.length;a++){let o=e[a];if(o===`--`){t.push(...e.slice(a));break}if(o===`--json`){r=!0;continue}if(o===`--native`){i=!0;continue}if(o===`-c`||o===`--computer`){n=e[++a];continue}t.push(o)}return{computer:n,json:r,native:i,rest:t}}function Ne(e){let t=[],n=0;for(;n<e.length;){let r=e[n];if(r===`--`){n+=1;continue}let i=je(r);if(!i)throw Error(`unknown verb '${r}' — see \`computer --help\``);n+=1;let{args:a,next:o}=Fe(i,e,n);t.push({verb:i,alias:r,args:Pe(r,i,a)}),n=o}return t}function Pe(e,t,n){return t===`click`?e===`left_click`?N(n,`1`):e===`middle_click`?N(n,`2`):e===`right_click`?N(n,`3`):e===`double_click`?[...N(n,`1`),`--repeat`,`2`]:e===`triple_click`?[...N(n,`1`),`--repeat`,`3`]:n:n}function N(e,t){return e[0]===`1`||e[0]===`2`||e[0]===`3`?e:[t,...e]}function Fe(e,t,n){return Ae.has(e)?Ie(t,n):Le(ze(e),t,n)}function Ie(e,t){let n=[],r=t,i=!1;for(;r<e.length;){let t=e[r];if(!i&&t===`--`){i=!0,r+=1;continue}if(!i&&M(t))break;n.push(t),r+=1}return{args:n,next:r}}function P(e){return e.startsWith(`--`)||e===`-n`||e===`-c`||e===`-V`}function F(e,t,n){let r=e[t];return n.push(r),t+=1,j.has(r)&&t<e.length&&(n.push(e[t]),t+=1),t}function Le(e,t,n){let r=[],i=n,a=0;for(;i<t.length;){let n=t[i];if(n===`--`){i+=1;continue}if(P(n)){i=F(t,i,r);continue}if(M(n))break;if(r.push(n),a+=1,i+=1,a>=e&&e>0){i=Re(t,i,r);break}}return{args:r,next:i}}function Re(e,t,n){let r=t;for(;r<e.length&&P(e[r]);)r=F(e,r,n);return r}function ze(e){switch(e){case`mousemove`:return 2;case`drag`:return 4;case`scroll`:return 2;case`click`:case`mousedown`:case`mouseup`:return 3;case`wait`:case`keydown`:case`keyup`:case`rm`:case`use`:return 1;case`screenshot`:return 1;case`record`:return 1;default:return 0}}function I(e){let t=e.indexOf(`--at`);if(t===-1)return;let n=e[t+1],r=n?/^(-?\d+),(-?\d+)$/u.exec(n):null;if(!r)throw Error(`--at requires x,y`);return{x:Number(r[1]),y:Number(r[2])}}function L(e,t){let n=e.indexOf(t);if(n===-1)return;let r=Number.parseInt(e[n+1]??``,10);if(!Number.isFinite(r))throw Error(`${t} requires a number`);return r}function R(e,t){return e.includes(t)}function z(e,t){for(let n of t){let t=e.indexOf(n);if(t!==-1)return e[t+1]}}function B(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n];if(r===`--`){t.push(...e.slice(n+1));break}if(r.startsWith(`--`)||r===`-n`||r===`-c`||r===`-V`){j.has(r)&&(n+=1);continue}t.push(r)}return t}const V=new Set;let H;function Be(e){if(typeof e!=`object`||!e)return!1;let t=Object.getOwnPropertyDescriptor(e,`type`)?.value,n=Object.getOwnPropertyDescriptor(e,`id`)?.value;return(t===`begin`||t===`end`)&&typeof n==`string`}function U(e){e.type===`begin`?V.add(e.id):V.delete(e.id)}function Ve(){if(H===void 0){if(typeof BroadcastChannel!=`function`){H=null;return}try{H=new BroadcastChannel(`slicc-screen-share-approval`)}catch{H=null;return}H.onmessage=e=>{Be(e.data)&&U(e.data)}}}function W(e){Ve(),U(e);try{H?.postMessage(e)}catch{}}function He(e){W({type:`begin`,id:e})}function Ue(e){W({type:`end`,id:e})}const G=Symbol(`screen-share-approval-timeout`);function We(){return`
58
+ <div class="sprinkle-action-card">
59
+ <div class="sprinkle-action-card__header">
60
+ <div class="sprinkle-action-card__title-group">Share this display</div>
61
+ <span class="sprinkle-badge sprinkle-badge--notice">approval</span>
62
+ </div>
63
+ <div class="sprinkle-action-card__actions">
64
+ <button class="sprinkle-btn sprinkle-btn--secondary" data-action="deny">Deny</button>
65
+ <button class="sprinkle-btn sprinkle-btn--primary" data-action="approve" data-picker="screenshare">Share screen</button>
66
+ </div>
67
+ </div>
68
+ `}async function Ge(){let e=a();if(!e)throw Error("add screen: needs a user gesture — type `computer add screen` in the panel terminal, or run it from a cone tool call so an approval card can open the picker");let t=o.generateId(),n=!1;He(t);try{let r=s({id:t,html:We(),onAction:async(e,t)=>{if(e!==`approve`)return{denied:!0};let n=t;return n?.cancelled?{cancelled:!0}:n?.error?{error:String(n.error)}:n?.granted&&typeof n.handle==`string`?{approved:!0,handle:n.handle}:{error:`screen share returned an unexpected response`}}},e.onUpdate).catch(e=>{if(n)return G;throw e}),i,a=new Promise(e=>{i=setTimeout(()=>{n=!0,o.cancel(t,`screen share: timed out`),e(G)},12e4)}),c=await Promise.race([r,a]);if(i&&clearTimeout(i),c===G)throw Error(`add screen: timed out after 120s waiting for user approval`);let l=c;if(l.denied)throw Error(`add screen: denied by user`);if(l.cancelled)throw Error(`add screen: cancelled`);if(l.error)throw Error(`add screen: ${l.error}`);if(!l.approved||!l.handle)throw Error(`add screen: no display selected`);return{handle:l.handle}}finally{Ue(t)}}function K(e,t,n){let r=e.list();if(t)return Ke(r,t);let i=n.get(`COMPUTER`);if(i)return Ke(r,i);let a=e.lastUsedId();return a&&e.get(a)?{id:a}:r.length===1?{id:r[0].id}:r.length===0?{error:"no computers registered — `computer add tab <id>`, `computer add screen`, `computer add ssh <follower>`, `computer add url <http(s)://base>`, or `v86 start`"}:{error:`which computer? pass -c <id> or \`computer use\`. registered: ${r.map(e=>e.id).join(`, `)}`}}function Ke(e,t){let n=e.find(e=>e.id===t);if(n)return{id:n.id};let r=e.filter(e=>e.id.endsWith(`:${t}`)||e.title===t||e.id===`v86:${t}`||e.id===`tab:${t}`||e.id===`screen:${t}`||e.id===`ssh:${t}`||e.id===`url:${t}`);if(r.length===1)return{id:r[0].id};if(r.length>1)return{error:`ambiguous computer '${t}' matches ${r.map(e=>e.id).join(`, `)}`};let i=e.map(e=>e.id).join(`, `);return{error:`unknown computer '${t}'${i?` — registered: ${i}`:` — none registered`}`}}var qe=e({runComputer:()=>nt});function q(e){return{stdout:``,stderr:`computer: ${e}\n`,exitCode:1}}function J(e=``){return{stdout:e,stderr:``,exitCode:0}}function Je(){return globalThis.__slicc_pm??null}function Ye(e){return e.browser??globalThis.__slicc_browser??null}function Y(e){return e.panelRpc??globalThis.__slicc_panelRpc??t()}function Xe(e){return e.sudoBroker?e.sudoBroker:globalThis.__slicc_sudo??null}function Ze(e){return e.listFollowers?.()??i()}async function Qe(e,t,r,i){if(e.sshExec)return e.sshExec(t,r,i);let a=Y(e);if(!a)throw Error(`no panel RPC in this float`);let o=i??3e4,s=await a.call(`tray-exec`,{runtimeId:t,command:r,execToken:`computer-ssh-${Date.now().toString(36)}`,timeoutMs:o},{timeoutMs:o+n});if(s.error)throw Error(s.error);return{stdout:s.stdout,stderr:s.stderr,exitCode:s.exitCode}}function $e(e,t){let n=t.filter(e=>e.exec),r=n.find(t=>t.runtimeId===e);if(r)return r;let i=n.filter(t=>t.runtimeId.endsWith(e)||t.runtimeId.includes(e));return i.length===1?i[0]:i.length>1?{error:`add ssh: ambiguous follower '${e}'`}:{error:`add ssh: no exec-capable follower '${e}' — try \`ssh --list\``}}function et(e){let t=[];return e.kind===`screen`&&t.push(`display slot`),e.kind===`ssh`&&t.push(e.capabilities.inputAllowed?`input`:`view-only`),t.length>0?` [${t.join(`, `)}]`:``}function tt(e){return e.registry?e.registry:re()??ie(e.processManager??Je())}async function nt(e,t,n={}){if(e.length===0||e[0]===`--help`||e[0]===`-h`||e[0]===`help`)return J(O);let r=Me(e);if(r.rest.length===0)return J(O);let i=r.rest[0];if(l(r.rest.slice(1),{valueFlags:[...ke]}))return J(c(`computer`,i,O,{prefix:`computer`}));let a;try{a=Ne(r.rest)}catch(e){return q(e instanceof Error?e.message:String(e))}let o=tt(n),s=[];for(let e of a)try{let i=await rt(e,r,t,n,o);if(i.exitCode!==0)return i;i.stdout&&s.push(i.stdout.replace(/\n$/u,``))}catch(e){return q(e instanceof Error?e.message:String(e))}let u=Lt(s.filter(Boolean).join(`
69
+ `),a,o,r.computer,t,r.json);return J(u?`${u}\n`:``)}async function rt(e,t,n,r,i){switch(e.verb){case`ls`:return it(i,t.json);case`add`:return at(e.args,n,r,i);case`rm`:return dt(e.args,t.computer,n,i);case`use`:return ft(e.args,i);case`info`:return pt(t,n,i);case`screenshot`:return mt(e.args,t,n,i);case`text`:return ht(t,n,i);case`watch`:return gt(e.args,t,n,i,r);case`record`:return yt(e.args,t,n,i);case`exec`:return xt(e.args,t,n,i);default:return St(e,t,n,i)}}function it(e,t){let n=e.list();if(t)return J(`${JSON.stringify(n)}\n`);if(n.length===0)return J(`no computers registered
70
+ `);let r=[`ID KIND STATE TITLE`];for(let e of n)r.push(`${e.id.padEnd(20)} ${e.kind.padEnd(6)} ${e.state.padEnd(9)} ${e.title}${et(e)}`);return J(`${r.join(`
71
+ `)}\n`)}async function at(e,t,n,r){let i=e[0];return i===`tab`?lt(e,t,n,r):i===`screen`?ut(e,t,n,r):i===`ssh`?ct(e,t,n,r):i===`url`?st(e,t,n,r):q(`add: unknown kind '${i??``}' — phase 3 supports \`computer add tab\`, \`computer add screen\`, \`computer add ssh\`, and \`computer add url\``)}async function ot(e){if(e.urlFetch)return e.urlFetch;let{createProxiedFetch:t}=await import(`./proxied-fetch-CPL8wJM2.js`).then(e=>e.i),{wrapUrlComputerFetch:n}=await import(`./url-Dq7PTmNp.js`),r=t();return n((e,t)=>r(e,t))}async function st(e,t,n,r){let i=z(e,[`-n`,`--name`]),a=B(e).slice(1)[0];if(!a)return q(`add url: requires <http(s)://base>`);let{UrlComputerBackend:o,probeUrlComputer:s,normalizeComputerBase:c}=await import(`./url-Dq7PTmNp.js`),l;try{l=c(a)}catch(e){return q(`add url: ${e instanceof Error?e.message:String(e)}`)}let u=await ot(n),d;try{d=await s(u,l)}catch(e){let t=e instanceof Error?e.message:String(e);return q(t.startsWith(`add url:`)?t:`add url: ${t}`)}i&&(d={...d,title:i});let f=new o(u,l,d),p=r.register(f);return r.use(p.id),J(`registered ${p.id} (${p.title})\n`)}async function ct(e,t,n,r){let i=z(e,[`-n`,`--name`]),a=z(e,[`--sim`]),o=R(e,`--allow-input`),s=B(e).slice(1)[0];if(!s)return q(`add ssh: requires <follower>`);let c=$e(s,Ze(n));if(`error`in c)return q(c.error);if(c.floatType===`ios`)return q(`add ssh: the iOS follower itself is not a driven computer (a real iPhone is out of scope; pass --sim <udid> on a Mac follower)`);let{SshComputerBackend:l,probeSsh:d}=await import(`./ssh-BQqlQVXQ.js`),f=(e,t)=>Qe(n,c.runtimeId,e,t?.timeoutMs),p;try{p=await d(f,a)}catch(e){let t=e instanceof Error?e.message:String(e);return q(t.startsWith(`add ssh:`)?t:`add ssh: ${t}`)}if(o&&p.input===`none`)return q(`add ssh: --allow-input needs cliclick, xdotool, ydotool, or idb on the follower (screenshot-only otherwise)`);if(o){let e=Xe(n);if(!e)return q(`add ssh: --allow-input needs sudo approval (not configured)`);let t=await e.requestApproval({kind:`command`,detail:`computer add ssh ${c.runtimeId}${a?` --sim ${a}`:``} --allow-input`,reason:`grant pointer and keyboard control of the follower desktop`});if(t.decision===`deny`)return q(u(`add ssh`,t))}let m=i??(a?`${c.runtimeId} sim ${a}`:c.runtimeId),h=new l(f,{runtimeId:c.runtimeId,title:m,probe:p,inputAllowed:o,sim:a}),g=r.register(h);return r.use(g.id),J(`registered ${g.id} (${g.title})\n`)}async function lt(e,t,n,r){let i=z(e,[`-n`,`--name`]),a=B(e).slice(1)[0];if(!a)return q(`add tab: requires <targetId|url>`);let o=Ye(n);if(!o)return q(`add tab: no browser API in this float`);let s=Ce(await o.listAllTargets(),a);if(`error`in s)return q(s.error);try{x(s)}catch(e){return q(e instanceof Error?e.message:String(e))}let c={title:i??s.title,url:s.url},l=n.browser&&!n.panelRpc?null:Y(n),u=l?new ve(l,s.targetId,c):new ge(o,s.targetId,c),d=r.register(u);return r.use(d.id),J(`registered ${d.id} (${d.title})\n`)}async function ut(e,t,n,r){let i=z(e,[`-n`,`--name`]),o=z(e,[`--__resolved`]);if(!o){if(!a())return q("add screen: needs a user gesture — type `computer add screen` in the panel terminal, or run it from a cone tool call so an approval card can open the picker");try{o=(await Ge()).handle}catch(e){return q(e instanceof Error?e.message:String(e))}}let s=Y(n);if(!s)return q(`add screen: no panel RPC in this float`);let{BridgedScreenComputerBackend:c,screenComputerId:l}=await import(`./screen-s6LdF1JP.js`),u=new c(s,o,{title:i??`Display`},()=>{r.refresh(l(o))}),d=r.register(u);return r.use(d.id),J(`registered ${d.id} (${d.title})\n`)}async function dt(e,t,n,r){let i=K(r,B(e)[0]??t,Q(n));return`error`in i?q(i.error):await r.unregister(i.id)?J(`unregistered ${i.id}\n`):q(`unknown computer '${i.id}'`)}function ft(e,t){let n=B(e)[0];if(!n)return q(`use: requires <id>`);let r=K(t,n,new Map);return`error`in r?q(r.error):(t.use(r.id),J(`using ${r.id}\n`))}function pt(e,t,n){let r=K(n,e.computer,Q(t));if(`error`in r)return q(r.error);let i=n.getEntry(r.id);if(!i)return q(`unknown computer '${r.id}'`);if(e.json)return J(`${JSON.stringify(i.descriptor)}\n`);let a=i.descriptor,o=a.size?`${a.size.width}x${a.size.height}`:`-`;return J(`id: ${a.id}\nkind: ${a.kind}\ntitle: ${a.title}\nstate: ${a.state}\nsize: ${o}\npid: ${a.pid??`-`}\n`)}async function mt(e,t,n,i){let a=Z(i,t.computer,n);if(`exitCode`in a)return a;let o=T(z(e,[`--size`])),s=await a.backend.screenshot({format:`jpeg`,maxWidth:o}),c=E(a.backend.describe().size??{width:s.width,height:s.height},{width:s.width,height:s.height});i.rememberShot(a.id,D(c,Date.now()),s);let l=s.seq>0?s.seq:i.nextSeq(a.id),u=await g({fs:n.fs,cwd:n.cwd,env:n.env,name:$(a.descriptor),seq:l,frame:s}),d=B(e)[0];if(d){let e=n.fs.resolvePath(n.cwd,d);await n.fs.writeFile(e,s.bytes)}let f=[De(c),_(u)];return(R(e,`--view`)||R(e,`-v`))&&f.push(`<img:data:${s.mime};base64,${r(s.bytes)}>`),t.json?J(`${JSON.stringify({id:a.id,path:u,mapping:c})}\n`):J(`${f.join(`
72
+ `)}\n`)}async function ht(e,t,n){let r=Z(n,e.computer,t);if(`exitCode`in r)return r;if(!r.backend.text)return q(`text: '${r.id}' has no text dump`);let i=await r.backend.text();return i===null?q(`text: unavailable for '${r.id}'`):J(`${i}\n`)}async function gt(e,t,n,r,i){let a=Z(r,t.computer,n);if(`exitCode`in a)return a;let o=bt(i);if(!o)return q(`watch: computers host is not running`);if(R(e,`--stop`))return o.unwatch(a.id),J(`unwatched ${a.id}\n`);let s=L(e,`--fps`)??2,c=T(z(e,[`--size`]));return o.watch(a.id,s,c),J(`watching ${a.id} at ${s} fps\n`)}function _t(e){return`recordClip`in e&&typeof e.recordClip==`function`}function vt(e){let t=z(e,[`-V`,`--duration`]);if(t===void 0)return 5;let n=Number(t);if(!Number.isFinite(n)||n<=0)throw Error(`-V/--duration requires a positive number of seconds`);return n}async function yt(e,t,n,r){let i=Z(r,t.computer,n);if(`exitCode`in i)return i;let a=i.descriptor.kind;if(a!==`screen`||!_t(i.backend))return q(`record: not supported for '${a}' yet (phase 4)`);let o;try{o=vt(e)}catch(e){return q(e instanceof Error?e.message:String(e))}let s=d(o*1e3),c=await i.backend.recordClip(s),l=B(e)[0]??`clip.webm`,u=n.fs.resolvePath(n.cwd,l);await n.fs.writeFile(u,c.bytes);let f=c.durationMs??s;return t.json?J(`${JSON.stringify({id:i.id,path:u,durationMs:f,mime:c.mime})}\n`):J(`recorded ${f}ms ${c.width}x${c.height} → ${u}\n`)}function bt(e){if(e.watch)return{watch:e.watch,unwatch:e.unwatch??(()=>void 0)};let t=ae();return t?{watch:t.watch,unwatch:t.unwatch}:null}async function xt(e,t,n,r){let i=Z(r,t.computer,n);if(`exitCode`in i)return i;if(!i.backend.exec)return q(`exec: '${i.id}' does not support exec`);let a=e.join(` `);if(!a)return q(`exec: requires a command`);let o=await i.backend.exec(a),s=[o.stdout,o.stderr].filter(Boolean).join(`
73
+ `);return{stdout:s?`${s}\n`:``,stderr:``,exitCode:o.exitCode}}async function St(e,t,n,r){let i=Z(r,t.computer,n);if(`exitCode`in i)return i;let a=Tt(e,t.native,i.descriptor),o=Te(i.descriptor.capabilities,a);return o?q(`${e.verb}: ${o}`):(await i.backend.input(a),Ct(i,n,r))}async function Ct(e,t,n){let r=e.descriptor.lastShot?.width??768,i=new AbortController,a;try{a=await wt(e.backend.screenshot({format:`jpeg`,maxWidth:r,signal:i.signal}),5e3)}catch(e){return i.abort(),q(`screenshot failed after input: ${e instanceof Error?e.message:String(e)}`)}let o=E(e.backend.describe().size??{width:a.width,height:a.height},{width:a.width,height:a.height}),s=n.nextSeq(e.id),c={...a,seq:s};n.rememberShot(e.id,D(o,Date.now()),c);let l=await g({fs:t.fs,cwd:t.cwd,env:t.env,name:$(e.descriptor),seq:s,frame:c});return J(`${_(l)}\n`)}function wt(e,t){return new Promise((n,r)=>{let i=setTimeout(()=>r(Error(`timed out`)),t);e.then(e=>{clearTimeout(i),n(e)},e=>{clearTimeout(i),r(e)})})}function Tt(e,t,n){let r=(e,r)=>Oe(e,r,n.lastShot,t);switch(e.verb){case`mousemove`:return Et(e.args,r);case`click`:case`mousedown`:case`mouseup`:return Dt(e.verb,e.args,r);case`drag`:return Ot(e.args,r,n.capabilities.mouse);case`scroll`:return kt(e.args,r);case`key`:case`keydown`:case`keyup`:return At(e.verb,e.args);case`type`:return jt(e.args);case`wait`:return Mt(e.args);default:throw Error(`internal: ${e.verb} is not an input verb`)}}function Et(e,t){let n=B(e),r=Number(n[0]),i=Number(n[1]);if(!Number.isFinite(r)||!Number.isFinite(i))throw Error(`mousemove: requires <x> <y>`);let a=R(e,`--relative`),o=a?{x:r,y:i}:t(r,i);return[{type:`mousemove`,x:o.x,y:o.y,relative:a}]}function Dt(e,t,n){let r=B(t),{button:i,skip:a}=Nt(r),o=I(t)??Ft(r,a),s=o?n(o.x,o.y):void 0;if(e===`mousedown`)return[{type:`button`,button:i,down:!0,...X(s)}];if(e===`mouseup`)return[{type:`button`,button:i,down:!1,...X(s)}];let c=L(t,`--hold`);return[{type:`click`,button:i,count:L(t,`--repeat`)??1,...c===void 0?{}:{holdMs:c},...X(s)}]}function Ot(e,t,n){let r=B(e).map(Number);if(r.length<4||r.some(e=>!Number.isFinite(e)))throw Error(`drag: requires <x1> <y1> <x2> <y2>`);let i=t(r[0],r[1]),a=t(r[2],r[3]);return n===`touch`?[{type:`drag`,x1:i.x,y1:i.y,x2:a.x,y2:a.y}]:[{type:`mousemove`,x:i.x,y:i.y},{type:`button`,button:1,down:!0,x:i.x,y:i.y},{type:`mousemove`,x:a.x,y:a.y},{type:`button`,button:1,down:!1,x:a.x,y:a.y}]}function kt(e,t){let n=B(e),r=Number(n[0]),i=Number(n[1]);if(!Number.isFinite(r)||!Number.isFinite(i))throw Error(`scroll: requires <dx> <dy>`);let a=I(e);return[{type:`scroll`,dx:r,dy:i,...X(a?t(a.x,a.y):void 0)}]}function At(e,t){if(e===`key`){if(t.length===0)throw Error(`key: no keysym supplied`);return t.map(e=>({type:`key`,keysym:e}))}let n=B(t)[0];if(!n)throw Error(`${e}: no keysym supplied`);return[{type:`key`,keysym:n,down:e===`keydown`}]}function jt(e){let t=e.join(` `).replace(/\\n/gu,`
74
+ `).replace(/\\t/gu,` `);if(!t)throw Error(`type: no text supplied`);return[{type:`text`,text:t}]}function Mt(e){let t=Number(B(e)[0]);if(!Number.isFinite(t))throw Error(`wait: requires <ms>`);return[{type:`wait`,ms:t}]}function Nt(e){return e[0]===void 0?{button:1,skip:0}:e[0]===`left`||e[0]===`middle`||e[0]===`right`||e[0]===`1`||e[0]===`2`||e[0]===`3`?{button:Pt(e[0]),skip:1}:{button:1,skip:0}}function Pt(e){if(!e||e===`left`||e===`1`)return 1;if(e===`middle`||e===`2`)return 2;if(e===`right`||e===`3`)return 3;let t=Number.parseInt(e,10);if(t===1||t===2||t===3)return t;throw Error(`unknown button '${e}' (use 1|2|3)`)}function Ft(e,t){let n=Number(e[t]),r=Number(e[t+1]);if(Number.isFinite(n)&&Number.isFinite(r))return{x:n,y:r}}function X(e){return e?{x:e.x,y:e.y}:{}}const It=new Set([`ls`,`add`,`rm`,`use`]);function Lt(e,t,n,r,i,a){if(a||!t.some(e=>!It.has(e.verb)))return e;let o=K(n,r,Q(i));if(`error`in o)return e;let s=ne(o.id);return e.split(`
75
+ `).some(e=>e.trim()===s)?e:e?`${s}\n${e}`:s}function Z(e,t,n){let r=K(e,t,Q(n));if(`error`in r)return q(r.error);let i=e.getEntry(r.id);return i?{id:r.id,backend:i.backend,descriptor:i.descriptor}:q(`unknown computer '${r.id}'`)}function Q(e){let t=e.env;if(t instanceof Map)return t;let n=new Map;if(t&&typeof t==`object`)for(let[e,r]of Object.entries(t))r!==void 0&&n.set(e,r);return n}function $(e){return e.id.replace(/[/:]/gu,`_`)}export{pe as n,v as r,nt as runComputer,qe as t};
@@ -92,7 +92,7 @@ Examples:
92
92
  --authorize-url 'https://auth.x.ai/oauth2/auth?...' \\
93
93
  --redirect-pattern 'http://127.0.0.1:56121/*'
94
94
  curl -H "Authorization: Bearer $(oauth-token github)" https://api.github.com/user
95
- `}async function d(n,r){let i=await import(`./account-store-BEqmysw9.js`).then(e=>e.t),a=await import(`./providers-DVvrXbtx.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 H(`oauth-token: ${o.error}`);if(o.bools.has(`--list`))return U(i.getAccounts,a.getRegisteredProviderIds,a.getRegisteredProviderConfig,i.getOAuthAccountInfo);if(o.bools.has(`--check`))return T(o.positionals);if(o.bools.has(`--expire`))return O(o.positionals);if(o.bools.has(`--renew`))return k(o.positionals);if(o.values.has(`--from-file`)||o.bools.has(`--intercept`))return L(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,i.ensureOAuthMaskReplica,s.value);if(e?.ok)return e.value;if(e)return e.result}return b(m.value,_.value,s.value,i.getOAuthAccountInfo,i.ensureOAuthMaskReplica)}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:H(`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:H(`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:H(`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:H(`oauth-token: provider "${e}" is not an OAuth provider`)}:{ok:!1,result:H(`oauth-token: unknown provider "${e}"`)}}async function g(e,t,n,r,i){let a=n(e);return a&&!a.expired?_(e,a,i,r):!a?.expired||!t.onSilentRenew||!await C(t.onSilentRenew)?null:_(e,n(e),i,r)}async function _(e,t,n,r){if(n&&!s(t?.scopes,n))return null;let i=v(t?.maskedValue,t?.token);if(i)return{ok:!0,value:i};if(!t?.token)return null;let a=await r(e)??{},o=v(a.maskedValue,t.token);return o?{ok:!0,value:o}:{ok:!1,result:y(e,a.error)}}function v(e,t){return!e||t&&e===t?null:{stdout:`${e}\n`,stderr:``,exitCode:0}}function y(e,t){return H(`oauth-token: token held for ${e} but no masked replica${t?` (${t})`:``}`)}async function b(e,t,n,r,i){try{let a=await x(e,t,n);return a.error?a.error:S(e,r,i,a.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),H(`oauth-token: ${n}`)):(console.error(`[oauth-token] Provider ${e}: login failed:`,n),H(`oauth-token: login failed: ${n}`))}}async function x(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-IlBYPvwr.js`),o=await n();return o?(await t.onOAuthLoginIntercepted(o,a,r),{error:null,succeeded:i}):{error:H(`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-IlBYPvwr.js`);return await t.onOAuthLogin(e(),a,r),{error:null,succeeded:i}}return{error:H(`oauth-token: provider "${e}" has no OAuth login hook`),succeeded:!1}}async function S(e,t,n,r){if(!r)return console.error(`[oauth-token] Provider ${e}: interactive login was not completed`),H(`oauth-token: interactive login was not completed (cancelled, timed out, or no one could approve it)`);let i=t(e);if(i?.token&&!i.expired){let t=v(i.maskedValue,i.token);if(t)return t;let r=await n(e)??{};return v(r.maskedValue,i.token)||y(e,r.error)}return i?.token?H(`oauth-token: login completed but the saved token is already expired`):(console.error(`[oauth-token] Provider ${e}: login completed but no token was saved`),H(`oauth-token: login completed but no token was saved`))}async function C(e){try{return await e()!==null}catch{return!1}}function w(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 T(e){let{getSelectedProvider:t,getOAuthAccountInfo:n}=await import(`./account-store-BEqmysw9.js`).then(e=>e.t),{getRegisteredProviderConfig:r,getRegisteredProviderIds:i}=await import(`./providers-DVvrXbtx.js`).then(e=>e.r),a=w(e,`onValidateToken`,t,r,i);if(!a)return H(`oauth-token --check: no provider supports an upstream token check`);let o=r(a);if(!o)return H(`oauth-token --check: unknown provider "${a}"`);if(!o.onValidateToken)return H(`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: ${F(s)}`];if(!s)return c.push(` upstream check: skipped — nothing to check`,...M(a)),{stdout:c.join(`
95
+ `}async function d(n,r){let i=await import(`./account-store-jjUZwcjI.js`).then(e=>e.t),a=await import(`./providers-CfE8Z8rn.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 H(`oauth-token: ${o.error}`);if(o.bools.has(`--list`))return U(i.getAccounts,a.getRegisteredProviderIds,a.getRegisteredProviderConfig,i.getOAuthAccountInfo);if(o.bools.has(`--check`))return T(o.positionals);if(o.bools.has(`--expire`))return O(o.positionals);if(o.bools.has(`--renew`))return k(o.positionals);if(o.values.has(`--from-file`)||o.bools.has(`--intercept`))return L(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,i.ensureOAuthMaskReplica,s.value);if(e?.ok)return e.value;if(e)return e.result}return b(m.value,_.value,s.value,i.getOAuthAccountInfo,i.ensureOAuthMaskReplica)}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:H(`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:H(`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:H(`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:H(`oauth-token: provider "${e}" is not an OAuth provider`)}:{ok:!1,result:H(`oauth-token: unknown provider "${e}"`)}}async function g(e,t,n,r,i){let a=n(e);return a&&!a.expired?_(e,a,i,r):!a?.expired||!t.onSilentRenew||!await C(t.onSilentRenew)?null:_(e,n(e),i,r)}async function _(e,t,n,r){if(n&&!s(t?.scopes,n))return null;let i=v(t?.maskedValue,t?.token);if(i)return{ok:!0,value:i};if(!t?.token)return null;let a=await r(e)??{},o=v(a.maskedValue,t.token);return o?{ok:!0,value:o}:{ok:!1,result:y(e,a.error)}}function v(e,t){return!e||t&&e===t?null:{stdout:`${e}\n`,stderr:``,exitCode:0}}function y(e,t){return H(`oauth-token: token held for ${e} but no masked replica${t?` (${t})`:``}`)}async function b(e,t,n,r,i){try{let a=await x(e,t,n);return a.error?a.error:S(e,r,i,a.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),H(`oauth-token: ${n}`)):(console.error(`[oauth-token] Provider ${e}: login failed:`,n),H(`oauth-token: login failed: ${n}`))}}async function x(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-CRmx6zI1.js`),o=await n();return o?(await t.onOAuthLoginIntercepted(o,a,r),{error:null,succeeded:i}):{error:H(`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-CRmx6zI1.js`);return await t.onOAuthLogin(e(),a,r),{error:null,succeeded:i}}return{error:H(`oauth-token: provider "${e}" has no OAuth login hook`),succeeded:!1}}async function S(e,t,n,r){if(!r)return console.error(`[oauth-token] Provider ${e}: interactive login was not completed`),H(`oauth-token: interactive login was not completed (cancelled, timed out, or no one could approve it)`);let i=t(e);if(i?.token&&!i.expired){let t=v(i.maskedValue,i.token);if(t)return t;let r=await n(e)??{};return v(r.maskedValue,i.token)||y(e,r.error)}return i?.token?H(`oauth-token: login completed but the saved token is already expired`):(console.error(`[oauth-token] Provider ${e}: login completed but no token was saved`),H(`oauth-token: login completed but no token was saved`))}async function C(e){try{return await e()!==null}catch{return!1}}function w(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 T(e){let{getSelectedProvider:t,getOAuthAccountInfo:n}=await import(`./account-store-jjUZwcjI.js`).then(e=>e.t),{getRegisteredProviderConfig:r,getRegisteredProviderIds:i}=await import(`./providers-CfE8Z8rn.js`).then(e=>e.r),a=w(e,`onValidateToken`,t,r,i);if(!a)return H(`oauth-token --check: no provider supports an upstream token check`);let o=r(a);if(!o)return H(`oauth-token --check: unknown provider "${a}"`);if(!o.onValidateToken)return H(`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: ${F(s)}`];if(!s)return c.push(` upstream check: skipped — nothing to check`,...M(a)),{stdout:c.join(`
96
96
  `)+`
97
97
  `,stderr:``,exitCode:3};let l=await j(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(`
98
98
  `)+`
@@ -100,13 +100,13 @@ Examples:
100
100
  `)+`
101
101
  `,stderr:``,exitCode:e}}return c.push(` upstream check: UNKNOWN — the check itself could not run${D(l?.detail)}`,` This says nothing about the token. Retry when the provider is reachable.`),{stdout:c.join(`
102
102
  `)+`
103
- `,stderr:``,exitCode:1}}function E(e,t,n){let r=` upstream check: REJECTED — the provider refused the token${D(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.`,...M(e)]}function D(e){return e?` (${e})`:``}async function O(e){let{getAccounts:t,getSelectedProvider:n,saveOAuthAccount:r}=await import(`./account-store-BEqmysw9.js`).then(e=>e.t),{getRegisteredProviderConfig:i,getRegisteredProviderIds:a}=await import(`./providers-DVvrXbtx.js`).then(e=>e.r),o=w(e,`onSilentRenew`,n,i,a);if(!o)return H(`oauth-token --expire: no provider supports silent renewal`);let s=i(o);if(!s)return H(`oauth-token --expire: unknown provider "${o}"`);if(!s.onSilentRenew)return H(`oauth-token --expire: provider "${o}" has no onSilentRenew hook`);let c=t().find(e=>e.providerId===o);if(!c?.accessToken)return H(`oauth-token --expire: no stored OAuth account for "${o}"`);try{await r({...c,accessToken:c.accessToken,tokenExpiresAt:Date.now()-1e3})}catch(e){return H(`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 k(e){let{getSelectedProvider:t,getOAuthAccountInfo:n}=await import(`./account-store-BEqmysw9.js`).then(e=>e.t),{getRegisteredProviderConfig:r,getRegisteredProviderIds:i}=await import(`./providers-DVvrXbtx.js`).then(e=>e.r),a=w(e,`onSilentRenew`,t,r,i);if(!a)return H(`oauth-token --renew: no provider supports silent renewal`);let o=r(a);if(!o)return H(`oauth-token --renew: unknown provider "${a}"`);if(!o.onSilentRenew)return H(`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: ${F(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: ${F(e)}`),{stdout:l.join(`
103
+ `,stderr:``,exitCode:1}}function E(e,t,n){let r=` upstream check: REJECTED — the provider refused the token${D(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.`,...M(e)]}function D(e){return e?` (${e})`:``}async function O(e){let{getAccounts:t,getSelectedProvider:n,saveOAuthAccount:r}=await import(`./account-store-jjUZwcjI.js`).then(e=>e.t),{getRegisteredProviderConfig:i,getRegisteredProviderIds:a}=await import(`./providers-CfE8Z8rn.js`).then(e=>e.r),o=w(e,`onSilentRenew`,n,i,a);if(!o)return H(`oauth-token --expire: no provider supports silent renewal`);let s=i(o);if(!s)return H(`oauth-token --expire: unknown provider "${o}"`);if(!s.onSilentRenew)return H(`oauth-token --expire: provider "${o}" has no onSilentRenew hook`);let c=t().find(e=>e.providerId===o);if(!c?.accessToken)return H(`oauth-token --expire: no stored OAuth account for "${o}"`);try{await r({...c,accessToken:c.accessToken,tokenExpiresAt:Date.now()-1e3})}catch(e){return H(`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 k(e){let{getSelectedProvider:t,getOAuthAccountInfo:n}=await import(`./account-store-jjUZwcjI.js`).then(e=>e.t),{getRegisteredProviderConfig:r,getRegisteredProviderIds:i}=await import(`./providers-CfE8Z8rn.js`).then(e=>e.r),a=w(e,`onSilentRenew`,t,r,i);if(!a)return H(`oauth-token --renew: no provider supports silent renewal`);let o=r(a);if(!o)return H(`oauth-token --renew: unknown provider "${a}"`);if(!o.onSilentRenew)return H(`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: ${F(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: ${F(e)}`),{stdout:l.join(`
104
104
  `)+`
105
105
  `,stderr:``,exitCode:0}}if(d)return l.push(` silent renewal: ERROR — ${d}`,...P(a)),{stdout:l.join(`
106
106
  `)+`
107
107
  `,stderr:``,exitCode:1};let f=A(a,await j(o));return l.push(...f.lines),{stdout:l.join(`
108
108
  `)+`
109
- `,stderr:``,exitCode:f.exitCode}}function A(e,t){let n=[` silent renewal: DECLINED — the provider returned no token without user`,` interaction (typically login_required: the upstream session has ended).`];if(t?.status===`rejected`)return{lines:[...n,` upstream check: REJECTED — the provider no longer accepts the stored`,` token${D(t.detail)}. Local expiry was never proof of validity.`,...M(e)],exitCode:3};if(t?.status===`accepted`){let e=t.userName?` (as ${t.userName})`:``;return{lines:[...n,` upstream check: ACCEPTED${e} — the stored token still works, so callers`,` are not blocked; only the renewal itself did not happen. No login needed.`],exitCode:1}}let r=[` Unconfirmed: provider renewal hooks also return no token when the renewal`,` call itself fails, so this alone does not prove the session ended.`];return t?.detail&&r.push(` (upstream check: ${t.detail})`),{lines:[...n,...r,...N(e)],exitCode:1}}async function j(e){return e.onValidateToken?e.onValidateToken().catch(e=>({status:`unknown`,detail:e instanceof Error?e.message:String(e)})):null}function M(e){return[``,` → Fix: oauth-token ${e} --force-login`,` Opens a consent window, so a human has to be at the keyboard: an`,` unattended agent should stop and ask the user to re-authorise rather`,` than retrying or probing further.`,` (Diagnostics, if a human is present: browser DevTools console,`,` "[oauth-service] Extension OAuth error".)`]}function N(e){return[``,` → Likely fix: oauth-token ${e} --force-login`,` Opens a consent window, so a human has to be at the keyboard. If the`,` failure was transient instead, a later retry succeeds on its own.`,` (Diagnostics: browser DevTools console, "[oauth-service] Extension`,` OAuth error".)`]}function P(e){return[``,` → The renewal call failed rather than being declined; this is often`,` transient (offline, 5xx, bridge not up). Retry it.`,` If it keeps failing: oauth-token ${e} --force-login (needs a human).`]}function F(e){return e?e.expired?`present, ${I(e.expiresAt)} — renewal needed`:`present, ${I(e.expiresAt)}, not validated upstream`:`none stored`}function I(e){if(!e)return`no local expiry recorded`;let t=e-Date.now();if(t<=0)return`past its local expiry`;if(t<6e4)return`local expiry in under a minute`;let n=Math.floor(t/36e5),r=Math.floor(t%36e5/6e4);return`local expiry in ${n>0?`${n}h ${r}m`:`${r}m`}`}async function L(e,t,n){let{parseInterceptOAuthConfig:r}=await import(`./intercepted-oauth-B0tP4D7f.js`).then(e=>e.n),{createInterceptingOAuthLauncherForCurrentRuntime:i}=await import(`./oauth-service-IlBYPvwr.js`),a=await R(e,t,n);if(!a.ok)return a.result;let o=r(a.value);if(!o.ok)return H(`oauth-token: invalid intercept config: ${o.error}`);let s=await i();if(!s)return H(`oauth-token: no CDP transport available in this runtime; --intercept needs the controlled browser.`);let c=await s(o.config);return c?{stdout:`${c}\n`,stderr:``,exitCode:0}:H(`oauth-token: intercept timed out or was cancelled`)}function R(e,t,n){return e.values.has(`--from-file`)?z(e.values.get(`--from-file`),n):B(e,t)}async function z(e,t){if(!e)return{ok:!1,result:H(`oauth-token: --from-file requires a path`)};try{let n=t.fs.resolvePath(t.cwd,e),r=await t.fs.readFile(n),i=typeof r==`string`?r:new TextDecoder().decode(r);return{ok:!0,value:JSON.parse(i)}}catch(t){return{ok:!1,result:H(`oauth-token: failed to read ${e}: ${t instanceof Error?t.message:String(t)}`)}}}function B(e,t){let n=e.values.get(`--authorize-url`),r=e.values.get(`--redirect-pattern`);if(!n)return{ok:!1,result:H(`oauth-token: --authorize-url is required`)};if(!r)return{ok:!1,result:H(`oauth-token: --redirect-pattern is required`)};let i=V(t);return i.ok?{ok:!0,value:{authorizeUrl:n,redirectUriPattern:r,onCapture:e.bools.has(`--leave-tab`)?`leave`:`close`,...i.value.length>0?{rewrite:i.value}:{}}}:i}function V(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n];if(r===`--`)break;if(r!==`--rewrite`&&!r.startsWith(`--rewrite=`))continue;let i=r===`--rewrite`?e[++n]:r.slice(10);if(!i)return{ok:!1,result:H(`oauth-token: --rewrite requires a value`)};let a=i.split(`=`);if(a.length<3)return{ok:!1,result:H(`oauth-token: --rewrite "${i}" must be "<match>=<key>=<value>"`)};let[o,s,...c]=a;t.push({match:o,appendParams:{[s]:c.join(`=`)}})}return{ok:!0,value:t}}function H(e){return{stdout:``,stderr:`${e}\n`,exitCode:1}}function U(e,t,n,r){let i=t().filter(e=>n(e)?.isOAuth);if(i.length===0)return{stdout:`No OAuth providers configured.
109
+ `,stderr:``,exitCode:f.exitCode}}function A(e,t){let n=[` silent renewal: DECLINED — the provider returned no token without user`,` interaction (typically login_required: the upstream session has ended).`];if(t?.status===`rejected`)return{lines:[...n,` upstream check: REJECTED — the provider no longer accepts the stored`,` token${D(t.detail)}. Local expiry was never proof of validity.`,...M(e)],exitCode:3};if(t?.status===`accepted`){let e=t.userName?` (as ${t.userName})`:``;return{lines:[...n,` upstream check: ACCEPTED${e} — the stored token still works, so callers`,` are not blocked; only the renewal itself did not happen. No login needed.`],exitCode:1}}let r=[` Unconfirmed: provider renewal hooks also return no token when the renewal`,` call itself fails, so this alone does not prove the session ended.`];return t?.detail&&r.push(` (upstream check: ${t.detail})`),{lines:[...n,...r,...N(e)],exitCode:1}}async function j(e){return e.onValidateToken?e.onValidateToken().catch(e=>({status:`unknown`,detail:e instanceof Error?e.message:String(e)})):null}function M(e){return[``,` → Fix: oauth-token ${e} --force-login`,` Opens a consent window, so a human has to be at the keyboard: an`,` unattended agent should stop and ask the user to re-authorise rather`,` than retrying or probing further.`,` (Diagnostics, if a human is present: browser DevTools console,`,` "[oauth-service] Extension OAuth error".)`]}function N(e){return[``,` → Likely fix: oauth-token ${e} --force-login`,` Opens a consent window, so a human has to be at the keyboard. If the`,` failure was transient instead, a later retry succeeds on its own.`,` (Diagnostics: browser DevTools console, "[oauth-service] Extension`,` OAuth error".)`]}function P(e){return[``,` → The renewal call failed rather than being declined; this is often`,` transient (offline, 5xx, bridge not up). Retry it.`,` If it keeps failing: oauth-token ${e} --force-login (needs a human).`]}function F(e){return e?e.expired?`present, ${I(e.expiresAt)} — renewal needed`:`present, ${I(e.expiresAt)}, not validated upstream`:`none stored`}function I(e){if(!e)return`no local expiry recorded`;let t=e-Date.now();if(t<=0)return`past its local expiry`;if(t<6e4)return`local expiry in under a minute`;let n=Math.floor(t/36e5),r=Math.floor(t%36e5/6e4);return`local expiry in ${n>0?`${n}h ${r}m`:`${r}m`}`}async function L(e,t,n){let{parseInterceptOAuthConfig:r}=await import(`./intercepted-oauth-B0tP4D7f.js`).then(e=>e.n),{createInterceptingOAuthLauncherForCurrentRuntime:i}=await import(`./oauth-service-CRmx6zI1.js`),a=await R(e,t,n);if(!a.ok)return a.result;let o=r(a.value);if(!o.ok)return H(`oauth-token: invalid intercept config: ${o.error}`);let s=await i();if(!s)return H(`oauth-token: no CDP transport available in this runtime; --intercept needs the controlled browser.`);let c=await s(o.config);return c?{stdout:`${c}\n`,stderr:``,exitCode:0}:H(`oauth-token: intercept timed out or was cancelled`)}function R(e,t,n){return e.values.has(`--from-file`)?z(e.values.get(`--from-file`),n):B(e,t)}async function z(e,t){if(!e)return{ok:!1,result:H(`oauth-token: --from-file requires a path`)};try{let n=t.fs.resolvePath(t.cwd,e),r=await t.fs.readFile(n),i=typeof r==`string`?r:new TextDecoder().decode(r);return{ok:!0,value:JSON.parse(i)}}catch(t){return{ok:!1,result:H(`oauth-token: failed to read ${e}: ${t instanceof Error?t.message:String(t)}`)}}}function B(e,t){let n=e.values.get(`--authorize-url`),r=e.values.get(`--redirect-pattern`);if(!n)return{ok:!1,result:H(`oauth-token: --authorize-url is required`)};if(!r)return{ok:!1,result:H(`oauth-token: --redirect-pattern is required`)};let i=V(t);return i.ok?{ok:!0,value:{authorizeUrl:n,redirectUriPattern:r,onCapture:e.bools.has(`--leave-tab`)?`leave`:`close`,...i.value.length>0?{rewrite:i.value}:{}}}:i}function V(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n];if(r===`--`)break;if(r!==`--rewrite`&&!r.startsWith(`--rewrite=`))continue;let i=r===`--rewrite`?e[++n]:r.slice(10);if(!i)return{ok:!1,result:H(`oauth-token: --rewrite requires a value`)};let a=i.split(`=`);if(a.length<3)return{ok:!1,result:H(`oauth-token: --rewrite "${i}" must be "<match>=<key>=<value>"`)};let[o,s,...c]=a;t.push({match:o,appendParams:{[s]:c.join(`=`)}})}return{ok:!0,value:t}}function H(e){return{stdout:``,stderr:`${e}\n`,exitCode:1}}function U(e,t,n,r){let i=t().filter(e=>n(e)?.isOAuth);if(i.length===0)return{stdout:`No OAuth providers configured.
110
110
  `,stderr:``,exitCode:0};let a=[],o=!1;for(let e of i){let t=r(e);if(!t){a.push(`${e} (no token)`);continue}o=!0,a.push(`${e} (${W(t).join(`, `)})`)}return o&&a.push(``,`Local state only — a held token can already be rejected upstream.`,`Verify with "oauth-token --check <id>"; re-consent with "oauth-token <id> --force-login".`),{stdout:a.join(`
111
111
  `)+`
112
112
  `,stderr:``,exitCode:0}}function W(e){let t=[e.userName?`token held for ${e.userName}`:`token held`];return t.push(I(e.expiresAt)),e.expired&&t.push(`renewal needed`),e.scopes&&t.push(`scopes: ${e.scopes}`),t}export{d as runOAuthToken};
@@ -1,4 +1,4 @@
1
- import{n as e}from"./panel-rpc-BPwAqRch.js";import{r as t}from"./base64-DzRgusa4.js";import{a as n,i as r}from"./just-bash-compat-B-SPHuh_.js";const i=[`prompt`,`exec`,`watch`];function a(e){return{stdout:``,stderr:e.endsWith(`
1
+ import{n as e}from"./panel-rpc-BPwAqRch.js";import{r as t}from"./base64-BPBW1Gzr.js";import{a as n,i as r}from"./just-bash-compat-B-SPHuh_.js";const i=[`prompt`,`exec`,`watch`];function a(e){return{stdout:``,stderr:e.endsWith(`
2
2
  `)?e:`${e}\n`,exitCode:1}}function o(e){return{stdout:e,stderr:``,exitCode:0}}function s(){return o(`slicc - talk to another SLICC leader as a client
3
3
 
4
4
  Usage: slicc <target> prompt [--steer] [--timeout <s>] <text...>
@@ -1,4 +1,4 @@
1
- import{t as e}from"./subcommand-flags-BZi7j78Q.js";import{r as t,t as n}from"./subcommand-help-CgO7wRS5.js";import{i as r,r as i}from"./jsh-discovery-D3Gk1cKA.js";import{a,i as o,r as s,s as c,t as l}from"./supervisor-BtH2-9sE.js";const u=`usage: jshd <command> [options]
1
+ import{t as e}from"./subcommand-flags-BZi7j78Q.js";import{r as t,t as n}from"./subcommand-help-CgO7wRS5.js";import{i as r,r as i}from"./jsh-discovery-D3Gk1cKA.js";import{a,i as o,r as s,s as c,t as l}from"./supervisor-C1sPrIbH.js";const u=`usage: jshd <command> [options]
2
2
 
3
3
  Durable background jsh units: one realm worker each, restored on reload
4
4
  when --enable is set. Keep-alive follows the realm (pending timers and
@@ -34,7 +34,7 @@ Notes:
34
34
  `)+`
35
35
  `)}async function A(e,t,n,r){let i=t[0];if(!i)return Y(`missing unit name`);let o=L(n);if(o)return o;let s=P(n,r);if(!s)return Y(`kernel host has not booted yet — try again in a moment`);if(e===`stop`)return await s.stop(i)?J(`jshd: stopped '${i}'\n`):await a(n.fs,i)?J(`jshd: unit '${i}' is not running\n`):Y(`unknown unit '${i}'`);if(e===`restart`){let e=await s.restart(i);return e?J(`jshd: restarted '${i}' (pid ${e.pid})\n`):Y(`unknown unit '${i}'`)}return!await a(n.fs,i)&&!s.status(i)?Y(`unknown unit '${i}'`):(await s.rm(i),J(`jshd: removed '${i}'\n`))}async function j(t,n,r){let i=e(t,{value:T,bool:[`-f`,`--follow`]});if(`error`in i)return Y(i.error);let a=i.positionals[0];if(!a)return Y(`missing unit name`);let s=i.bools.has(`-f`)||i.bools.has(`--follow`),c=i.values.get(`-n`)??i.values.get(`--lines`),l=c===void 0?void 0:Number.parseInt(c,10);if(c!==void 0&&(!Number.isFinite(l)||l<0))return Y(`-n must be a non-negative integer`);let u=await o(n.fs,a),d=l===void 0?u:H(u,l);if(!s)return J(d.endsWith(`
36
36
  `)||d.length===0?d:`${d}\n`);let f=W(n),p=G(n);return f?U({ctx:n,name:a,displayed:d,seen:u.length,signal:f,sink:p}):(p?.(d),J(p?``:d.endsWith(`
37
- `)||d.length===0?d:`${d}\n`))}async function M(e,t,n,r){let i=e[0];if(!i)return Y(`missing unit name`);let a=L(t);if(a)return a;let o=P(t,n);return(o?await o.setEnabled(i,r):await N(t,i,r))?J(`jshd: ${r?`enabled`:`disabled`} '${i}'\n`):Y(`unknown unit '${i}'`)}async function N(e,t,n){let r=await a(e.fs,t);if(!r)return null;let i={...r,enabled:n},{writeUnitRecord:o}=await import(`./supervisor-BtH2-9sE.js`).then(e=>e.o);return await o(e.fs,i),i}function P(e,t){let n=l();if(n)return n;let r=t.processManager??K();if(!r)return null;let i=q();return l({fs:e.fs,processManager:r,...i?{lickManager:i}:{},...t.realmFactory?{realmFactory:t.realmFactory}:{},buildContext:t=>F(e,t)})}function F(e,t){let n=new Map(e.env);for(let[e,r]of Object.entries(t.env))n.set(e,r);return{...e,cwd:t.cwd,env:n}}function I(e){if(typeof e!=`object`||!e)return!1;let t=e.canWrite;return typeof t==`function`&&!t.call(e,`/workspace/.jshd`)}function L(e){return I(e.fs)?Y(`not available inside a restricted scoop`):null}function R(e,t,n){let r=new Map(t.map(e=>[e.name,e]));return[...new Set([...e.map(e=>e.name),...r.keys()])].sort().map(t=>r.get(t)||z(e.find(e=>e.name===t),n))}function z(e,t){return{name:e.name,pid:null,state:`stopped`,restarts:0,uptimeMs:null,enabled:e.enabled,restart:e.restart,argv:e.argv,cwd:e.cwd,durable:t,lastExitCode:null}}function B(e){let t=e.pid===null?`-`:String(e.pid),n=V(e.uptimeMs);return[e.name.padEnd(15),t.padEnd(7),e.state.padEnd(9),String(e.restarts).padEnd(9),n.padEnd(6),String(e.enabled).padEnd(8),String(e.durable)].join(` `)}function V(e){if(e===null)return`-`;let t=Math.max(0,Math.round(e/1e3));return t<60?`${t}s`:`${Math.floor(t/60)}m${t%60}s`}function H(e,t){if(t===0)return``;let n=e.split(`
37
+ `)||d.length===0?d:`${d}\n`))}async function M(e,t,n,r){let i=e[0];if(!i)return Y(`missing unit name`);let a=L(t);if(a)return a;let o=P(t,n);return(o?await o.setEnabled(i,r):await N(t,i,r))?J(`jshd: ${r?`enabled`:`disabled`} '${i}'\n`):Y(`unknown unit '${i}'`)}async function N(e,t,n){let r=await a(e.fs,t);if(!r)return null;let i={...r,enabled:n},{writeUnitRecord:o}=await import(`./supervisor-C1sPrIbH.js`).then(e=>e.o);return await o(e.fs,i),i}function P(e,t){let n=l();if(n)return n;let r=t.processManager??K();if(!r)return null;let i=q();return l({fs:e.fs,processManager:r,...i?{lickManager:i}:{},...t.realmFactory?{realmFactory:t.realmFactory}:{},buildContext:t=>F(e,t)})}function F(e,t){let n=new Map(e.env);for(let[e,r]of Object.entries(t.env))n.set(e,r);return{...e,cwd:t.cwd,env:n}}function I(e){if(typeof e!=`object`||!e)return!1;let t=e.canWrite;return typeof t==`function`&&!t.call(e,`/workspace/.jshd`)}function L(e){return I(e.fs)?Y(`not available inside a restricted scoop`):null}function R(e,t,n){let r=new Map(t.map(e=>[e.name,e]));return[...new Set([...e.map(e=>e.name),...r.keys()])].sort().map(t=>r.get(t)||z(e.find(e=>e.name===t),n))}function z(e,t){return{name:e.name,pid:null,state:`stopped`,restarts:0,uptimeMs:null,enabled:e.enabled,restart:e.restart,argv:e.argv,cwd:e.cwd,durable:t,lastExitCode:null}}function B(e){let t=e.pid===null?`-`:String(e.pid),n=V(e.uptimeMs);return[e.name.padEnd(15),t.padEnd(7),e.state.padEnd(9),String(e.restarts).padEnd(9),n.padEnd(6),String(e.enabled).padEnd(8),String(e.durable)].join(` `)}function V(e){if(e===null)return`-`;let t=Math.max(0,Math.round(e/1e3));return t<60?`${t}s`:`${Math.floor(t/60)}m${t%60}s`}function H(e,t){if(t===0)return``;let n=e.split(`
38
38
  `);return n[n.length-1]===``&&n.pop(),`${n.slice(-t).join(`
39
39
  `)}${e.endsWith(`
40
40
  `)?`
@@ -1,4 +1,4 @@
1
- import{t as e}from"./base64-DzRgusa4.js";import{m as t}from"./state-z3wOHLww.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 ee(){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 x(e,t){return{message:`curlwright: option ${e} is not supported in a page context — ${y[t]}`,exitCode:2}}function S(e){return{message:`curlwright: unknown option ${e}\nRun 'curlwright --help' for the supported flags.`,exitCode:2}}function C(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(C(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 S(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 x(`--${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}:S(`--${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 x(`-${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 S(`-${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=ee(),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 se(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 O(e,t){let n=t.toLowerCase();return Object.keys(e).some(e=>e.toLowerCase()===n)}function k(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 A(e,t,n){return!O(e,n)&&!t.has(n)}function j(e){return/^[a-zA-Z]+=/.test(e)?e:`bytes=${e}`}function M(e,t,n,r){n.user!==null&&A(e,t,`authorization`)&&(e.Authorization=`Basic ${btoa(n.user)}`),n.range!==null&&A(e,t,`range`)&&(e.Range=j(n.range)),r.contentType&&A(e,t,`content-type`)&&(e[`Content-Type`]=r.contentType),r.accept&&A(e,t,`accept`)&&(e.Accept=r.accept)}function N(e,t){if(t===``)return e;let[n,r]=P(e);return`${n}${n.includes(`?`)?`&`:`?`}${t}${r}`}function P(e){let t=e.indexOf(`#`);return t===-1?[e,``]:[e.slice(0,t),e.slice(t)]}function F(e,t){return e.requestMethod?e.requestMethod:e.head?`HEAD`:t?`POST`:`GET`}function I(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 L(e,t){if(e.url===null)return{message:`curlwright: no URL specified`,exitCode:2};let{headers:n,suppressed:r}=k(e),i=e.get&&t.bytes!==null,a=i?{...t,bytes:null,contentType:null}:t;M(n,r,e,a);let o=i?N(e.url,new TextDecoder().decode(t.bytes??new Uint8Array)):e.url,s=a.bytes!==null||a.form!==null,c=F(e,s),l=I(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 R(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-BPBW1Gzr.js";import{m as t}from"./state-RVr0GidF.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 ee(){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 x(e,t){return{message:`curlwright: option ${e} is not supported in a page context — ${y[t]}`,exitCode:2}}function S(e){return{message:`curlwright: unknown option ${e}\nRun 'curlwright --help' for the supported flags.`,exitCode:2}}function C(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(C(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 S(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 x(`--${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}:S(`--${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 x(`-${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 S(`-${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=ee(),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 se(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 O(e,t){let n=t.toLowerCase();return Object.keys(e).some(e=>e.toLowerCase()===n)}function k(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 A(e,t,n){return!O(e,n)&&!t.has(n)}function j(e){return/^[a-zA-Z]+=/.test(e)?e:`bytes=${e}`}function M(e,t,n,r){n.user!==null&&A(e,t,`authorization`)&&(e.Authorization=`Basic ${btoa(n.user)}`),n.range!==null&&A(e,t,`range`)&&(e.Range=j(n.range)),r.contentType&&A(e,t,`content-type`)&&(e[`Content-Type`]=r.contentType),r.accept&&A(e,t,`accept`)&&(e.Accept=r.accept)}function N(e,t){if(t===``)return e;let[n,r]=P(e);return`${n}${n.includes(`?`)?`&`:`?`}${t}${r}`}function P(e){let t=e.indexOf(`#`);return t===-1?[e,``]:[e.slice(0,t),e.slice(t)]}function F(e,t){return e.requestMethod?e.requestMethod:e.head?`HEAD`:t?`POST`:`GET`}function I(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 L(e,t){if(e.url===null)return{message:`curlwright: no URL specified`,exitCode:2};let{headers:n,suppressed:r}=k(e),i=e.get&&t.bytes!==null,a=i?{...t,bytes:null,contentType:null}:t;M(n,r,e,a);let o=i?N(e.url,new TextDecoder().decode(t.bytes??new Uint8Array)):e.url,s=a.bytes!==null||a.form!==null,c=F(e,s),l=I(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 R(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 z(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 B(t,n){return typeof t==`string`?n===`base64`?e(t):new TextEncoder().encode(t):new Uint8Array}function V(e,t){return t?`HTTP/1.1 ${e} ${t}`:`HTTP/1.1 ${e}`}function H(e,t,n){let r=[V(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 U(e){if(e.includes(0))return!0;try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e),!1}catch{return!0}}function W(e){let t;try{t=new URL(e).pathname}catch{t=e.split(`?`)[0]}return t.replace(/\/+$/,``).split(`/`).pop()||null}function G(e,t,n){return new TextEncoder().encode(H(e,t,n)).length}function K(e){try{return new URL(e).origin}catch{return null}}function q(e){return e.map(e=>` --tab=${e.targetId} ${e.url}`).join(`
@@ -1,4 +1,4 @@
1
- import"./browser-eoO4vY7w.js";import{a as e,c as t,i as n,l as r,o as i,r as a}from"./ffmpeg-wasm-B77gfnB_.js";import{a as o,c as s,createIpkContextFromCtx as c,i as l,n as u,r as ee,t as d}from"./run-BOkp5G58.js";const f={mono:1,stereo:2,"2.1":3,"3.0":3,"3.1":4,"4.0":4,quad:4,"4.1":5,"5.0":5,"5.1":6,"6.0":6,"6.1":7,"7.0":7,"7.1":8};function p(e){let t=/^(\d+):(\d{2}):(\d{2}(?:\.\d+)?)$/.exec(e.trim());if(!t)return;let n=Number(t[1]),r=Number(t[2]),i=Number(t[3]);if([n,r,i].every(Number.isFinite))return(n*3600+r*60+i).toFixed(6)}function m(e){let t=e.trim().toLowerCase();if(Object.hasOwn(f,t))return f[t];let n=/^([0-9.]+|[a-z0-9_+-]+)\(/.exec(t);if(n&&Object.hasOwn(f,n[1]))return f[n[1]];let r=/^(\d+)\s+channels?$/.exec(t);if(r)return Number(r[1])}function h(e){let t=Number(e);return Number.isFinite(t)?Number.isInteger(t)?`${t}/1`:`${Math.round(t*1e3)}/1000`:e}function g(e){let t=Number(e);if(Number.isFinite(t))return String(Math.round(t*1e3))}function _(e){let t=/^([A-Za-z0-9_]+)(.*)$/.exec(e);if(!t)return{remainder:e};let n=t[2],r,i,a=/^\s*\(([^)/]+)\)/.exec(n);a&&!a[1].includes(`/`)&&(r=a[1].trim(),n=n.slice(a[0].length));let o=/^\s*\(([A-Za-z0-9]+)\s*\/\s*0x[0-9a-fA-F]+\)/.exec(n);return o&&(i=o[1],n=n.slice(o[0].length)),{codec_name:t[1],profile:r,codec_tag_string:i,remainder:n}}function v(e,t){let n=/,\s*([A-Za-z0-9_]+)(?:\([^)]*\))?,\s*(\d+)x(\d+)/.exec(e);n&&(t.pix_fmt=n[1],t.width=Number(n[2]),t.height=Number(n[3]));let r=/\[SAR\s+(\S+)\s+DAR\s+(\S+)\]/.exec(e);r&&(t.sample_aspect_ratio=r[1],t.display_aspect_ratio=r[2]);let i=/,\s*(\d+(?:\.\d+)?)\s*kb\/s/.exec(e);i&&(t.bit_rate=g(i[1]));let a=/,\s*(\d+(?:\.\d+)?)\s*fps/.exec(e);a&&(t.r_frame_rate=h(a[1]),t.avg_frame_rate=t.r_frame_rate)}function y(e,t){let n=/,\s*(\d+)\s*Hz/.exec(e);n&&(t.sample_rate=n[1]);let r=/Hz,\s*([^,]+)/.exec(e);if(r){let e=r[1].trim();t.channel_layout=e,t.channels=m(e)}let i=/,\s*(\d+(?:\.\d+)?)\s*kb\/s/.exec(e);i&&(t.bit_rate=g(i[1]))}function b(e){let t=/^\s*Stream #(\d+):(\d+)(?:\[[^\]]*\])?(?:\([^)]*\))?:\s*(Video|Audio|Subtitle|Data|Attachment):\s*(.+)$/i.exec(e);if(!t)return null;let n=t[3].toLowerCase(),r={index:Number(t[2]),codec_type:n},{codec_name:i,profile:a,codec_tag_string:o,remainder:s}=_(t[4]);return i&&(r.codec_name=i),a&&(r.profile=a),o&&(r.codec_tag_string=o),n===`video`?v(s,r):n===`audio`&&y(s,r),r}function x(e,t){let n=/^\s*Duration:\s*([^,]+),\s*start:\s*([^,]+),\s*bitrate:\s*(\d+(?:\.\d+)?)\s*kb\/s/.exec(t);return n?(e.duration=p(n[1]),e.start_time=Number(n[2]).toFixed(6),e.bit_rate=g(n[3]),!0):!1}function S(e,t,n){let r=/^\s{2,}([A-Za-z0-9_]+)\s*:\s*(.*)$/.exec(n);return r&&!/^(Duration|Stream)\b/.test(r[1])?(t[r[1]]=r[2].trim(),`keep`):(Object.keys(t).length>0&&(e.tags=t),`end`)}function C(e,t){let n=e.split(/\r?\n/),r=null,i=[],a=!1,o;for(let e of n){let n=/^Input #(\d+),\s*(.+?),\s*from\s+'([^']*)':\s*$/.exec(e);if(n){a=!0,r={format_name:n[2].trim(),filename:n[3]||t},o=void 0;continue}if(!a||!r)continue;if(/^\s*Metadata:\s*$/.test(e)){o={};continue}if(o){if(S(r,o,e)===`keep`)continue;o=void 0}if(x(r,e))continue;let s=b(e);s&&(r.duration&&s.duration===void 0&&(s.duration=r.duration),i.push(s))}return r?{format:r,streams:i}:null}const w=new Set([`-i`,`-v`,`-loglevel`,`-of`,`-print_format`,`-show_entries`,`-select_streams`]),T=new Set([`-show_format`,`-show_streams`,`-hide_banner`,`-h`,`--help`,`-version`,`--version`]);function E(){return{stdout:`ffprobe - media probe (mediabunny, with a wasm fallback)
1
+ import"./browser-eoO4vY7w.js";import{a as e,c as t,i as n,l as r,o as i,r as a}from"./ffmpeg-wasm-B77gfnB_.js";import{a as o,c as s,createIpkContextFromCtx as c,i as l,n as u,r as ee,t as d}from"./run-1aYSFTwj.js";const f={mono:1,stereo:2,"2.1":3,"3.0":3,"3.1":4,"4.0":4,quad:4,"4.1":5,"5.0":5,"5.1":6,"6.0":6,"6.1":7,"7.0":7,"7.1":8};function p(e){let t=/^(\d+):(\d{2}):(\d{2}(?:\.\d+)?)$/.exec(e.trim());if(!t)return;let n=Number(t[1]),r=Number(t[2]),i=Number(t[3]);if([n,r,i].every(Number.isFinite))return(n*3600+r*60+i).toFixed(6)}function m(e){let t=e.trim().toLowerCase();if(Object.hasOwn(f,t))return f[t];let n=/^([0-9.]+|[a-z0-9_+-]+)\(/.exec(t);if(n&&Object.hasOwn(f,n[1]))return f[n[1]];let r=/^(\d+)\s+channels?$/.exec(t);if(r)return Number(r[1])}function h(e){let t=Number(e);return Number.isFinite(t)?Number.isInteger(t)?`${t}/1`:`${Math.round(t*1e3)}/1000`:e}function g(e){let t=Number(e);if(Number.isFinite(t))return String(Math.round(t*1e3))}function _(e){let t=/^([A-Za-z0-9_]+)(.*)$/.exec(e);if(!t)return{remainder:e};let n=t[2],r,i,a=/^\s*\(([^)/]+)\)/.exec(n);a&&!a[1].includes(`/`)&&(r=a[1].trim(),n=n.slice(a[0].length));let o=/^\s*\(([A-Za-z0-9]+)\s*\/\s*0x[0-9a-fA-F]+\)/.exec(n);return o&&(i=o[1],n=n.slice(o[0].length)),{codec_name:t[1],profile:r,codec_tag_string:i,remainder:n}}function v(e,t){let n=/,\s*([A-Za-z0-9_]+)(?:\([^)]*\))?,\s*(\d+)x(\d+)/.exec(e);n&&(t.pix_fmt=n[1],t.width=Number(n[2]),t.height=Number(n[3]));let r=/\[SAR\s+(\S+)\s+DAR\s+(\S+)\]/.exec(e);r&&(t.sample_aspect_ratio=r[1],t.display_aspect_ratio=r[2]);let i=/,\s*(\d+(?:\.\d+)?)\s*kb\/s/.exec(e);i&&(t.bit_rate=g(i[1]));let a=/,\s*(\d+(?:\.\d+)?)\s*fps/.exec(e);a&&(t.r_frame_rate=h(a[1]),t.avg_frame_rate=t.r_frame_rate)}function y(e,t){let n=/,\s*(\d+)\s*Hz/.exec(e);n&&(t.sample_rate=n[1]);let r=/Hz,\s*([^,]+)/.exec(e);if(r){let e=r[1].trim();t.channel_layout=e,t.channels=m(e)}let i=/,\s*(\d+(?:\.\d+)?)\s*kb\/s/.exec(e);i&&(t.bit_rate=g(i[1]))}function b(e){let t=/^\s*Stream #(\d+):(\d+)(?:\[[^\]]*\])?(?:\([^)]*\))?:\s*(Video|Audio|Subtitle|Data|Attachment):\s*(.+)$/i.exec(e);if(!t)return null;let n=t[3].toLowerCase(),r={index:Number(t[2]),codec_type:n},{codec_name:i,profile:a,codec_tag_string:o,remainder:s}=_(t[4]);return i&&(r.codec_name=i),a&&(r.profile=a),o&&(r.codec_tag_string=o),n===`video`?v(s,r):n===`audio`&&y(s,r),r}function x(e,t){let n=/^\s*Duration:\s*([^,]+),\s*start:\s*([^,]+),\s*bitrate:\s*(\d+(?:\.\d+)?)\s*kb\/s/.exec(t);return n?(e.duration=p(n[1]),e.start_time=Number(n[2]).toFixed(6),e.bit_rate=g(n[3]),!0):!1}function S(e,t,n){let r=/^\s{2,}([A-Za-z0-9_]+)\s*:\s*(.*)$/.exec(n);return r&&!/^(Duration|Stream)\b/.test(r[1])?(t[r[1]]=r[2].trim(),`keep`):(Object.keys(t).length>0&&(e.tags=t),`end`)}function C(e,t){let n=e.split(/\r?\n/),r=null,i=[],a=!1,o;for(let e of n){let n=/^Input #(\d+),\s*(.+?),\s*from\s+'([^']*)':\s*$/.exec(e);if(n){a=!0,r={format_name:n[2].trim(),filename:n[3]||t},o=void 0;continue}if(!a||!r)continue;if(/^\s*Metadata:\s*$/.test(e)){o={};continue}if(o){if(S(r,o,e)===`keep`)continue;o=void 0}if(x(r,e))continue;let s=b(e);s&&(r.duration&&s.duration===void 0&&(s.duration=r.duration),i.push(s))}return r?{format:r,streams:i}:null}const w=new Set([`-i`,`-v`,`-loglevel`,`-of`,`-print_format`,`-show_entries`,`-select_streams`]),T=new Set([`-show_format`,`-show_streams`,`-hide_banner`,`-h`,`--help`,`-version`,`--version`]);function E(){return{stdout:`ffprobe - media probe (mediabunny, with a wasm fallback)
2
2
 
3
3
  Usage:
4
4
  ffprobe [options] -i <input>
@@ -41,6 +41,6 @@ Examples:
41
41
  `,stderr:``,exitCode:0}}async function D(e){let t=s(e.env)===`mt`,i=await r(c(e),void 0,t);return i?{stdout:`ffprobe (emulated via @ffmpeg/ffmpeg — not a real ffprobe binary)\ncore: ${a(i)}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`ffprobe: ${n(t)}\n`,exitCode:1}}function O(e,t,n){let r=e[t+1];if(typeof r!=`string`||r.startsWith(`-`))throw Error(`ffprobe: ${n} requires a value`);return r}function k(e){let t=e.indexOf(`=`),n=t<0?e:e.slice(0,t),r=t<0?``:e.slice(t+1);if(n===`json`)return{kind:`json`};if(n===`csv`)return{kind:`csv`,printSection:!/(?:^|:)p=0(?::|$)/.test(r)};if(n==="default")return{kind:`default`,noWrappers:/(?:^|:)(?:nw|noprint_wrappers)=1(?::|$)/.test(r),noKey:/(?:^|:)(?:nk|nokey)=1(?::|$)/.test(r)};throw Error(`ffprobe: unsupported -of '${e}' (supported: json, csv[=p=0], default[=nw=1:nk=1])`)}function A(e){let t={};for(let n of e.split(`:`)){if(!n)continue;let e=n.indexOf(`=`);if(e<0)throw Error(`ffprobe: -show_entries section '${n}' needs keys (e.g. format=duration)`);let r=n.slice(0,e),i=n.slice(e+1).split(`,`).map(e=>e.trim()).filter(Boolean);if(r===`format`)t.format=new Set(i);else if(r===`stream`)t.stream=new Set(i);else throw Error(`ffprobe: unsupported -show_entries section '${r}' (supported: format, stream)`)}return t}function j(e,t,n){let r=t[n];if(r===`-i`)return e.inputPath=O(t,n,`-i`),n+1;if(r===`-show_format`)return e.showFormat=!0,e.structured=!0,n;if(r===`-show_streams`)return e.showStreams=!0,e.structured=!0,n;if(r===`-show_entries`)return e.showEntries=A(O(t,n,`-show_entries`)),e.structured=!0,n+1;if(r===`-select_streams`)return e.selectStreams=O(t,n,`-select_streams`),n+1;if(r===`-of`||r===`-print_format`)return e.outputFormat=k(O(t,n,r)),e.structured=!0,n+1;if(r===`-v`||r===`-loglevel`){let i=O(t,n,r).toLowerCase();return e.quiet=[`quiet`,`panic`,`fatal`,`error`,`warning`].includes(i),n+1}if(r===`-hide_banner`)return n;if(T.has(r)||w.has(r))throw Error(`ffprobe: internal parse gap for '${r}'`);if(r.startsWith(`-`))throw Error(`ffprobe: unsupported option '${r}' (this is an emulated probe — see --help)`);if(e.inputPath!==null)throw Error(`ffprobe: unexpected argument '${r}'`);return e.inputPath=r,n}function M(e){let t={inputPath:null,showFormat:!1,showStreams:!1,showEntries:null,selectStreams:null,outputFormat:{kind:`default`,noWrappers:!1,noKey:!1},quiet:!1,structured:!1};for(let n=0;n<e.length;n++)n=j(t,e,n);return!t.showFormat&&!t.showStreams&&!t.showEntries&&(t.showFormat=!0,t.showStreams=!0),t}function N(e,t){if(!t)return e;let n=/^([va])(?::(\d+))?$/i.exec(t.trim());if(!n)throw Error(`ffprobe: unsupported -select_streams '${t}' (supported: v, a, v:N, a:N)`);let r=n[1].toLowerCase()===`v`?`video`:`audio`,i=e.filter(e=>e.codec_type===r);if(n[2]===void 0)return i;let a=i[Number(n[2])];return a?[a]:[]}const P=[`filename`,`format_name`,`duration`,`start_time`,`bit_rate`],F=[`index`,`codec_type`,`codec_name`,`codec_tag_string`,`profile`,`width`,`height`,`pix_fmt`,`sample_aspect_ratio`,`display_aspect_ratio`,`r_frame_rate`,`avg_frame_rate`,`sample_rate`,`channels`,`channel_layout`,`bit_rate`,`duration`];function I(e,t){let n={};for(let r of P){if(t&&!t.has(r))continue;let i=e[r];i!==void 0&&(n[r]=i)}return n}function L(e,t){let n={};for(let r of F){if(t&&!t.has(r))continue;let i=e[r];i!==void 0&&(n[r]=i)}return n}function R(e,t){let n=N(e.streams,t.selectStreams),r={};return t.showEntries?(t.showEntries.format&&(r.format=I(e.format,t.showEntries.format)),t.showEntries.stream&&(r.streams=n.map(e=>L(e,t.showEntries?.stream))),r):(t.showFormat&&(r.format=I(e.format)),t.showStreams&&(r.streams=n.map(e=>L(e))),r)}function z(e,t){let n=[],r=(e,r)=>{t.noWrappers||n.push(`[${e}]`);for(let[e,i]of Object.entries(r))i!==void 0&&n.push(t.noKey?String(i):`${e}=${i}`);t.noWrappers||n.push(`[/${e}]`)};if(e.format&&r(`FORMAT`,e.format),e.streams)for(let t of e.streams)r(`STREAM`,t);return`${n.join(`
42
42
  `)}\n`}function B(e){return/[",\n\r]/.test(e)?`"${e.replace(/"/g,`""`)}"`:e}function V(e,t){let n=[],r=(e,r)=>{let i=Object.values(r).filter(e=>e!==void 0).map(e=>B(String(e)));i.length!==0&&(t.printSection&&i.unshift(e),n.push(i.join(`,`)))};if(e.format&&r(`format`,e.format),e.streams)for(let t of e.streams)r(`stream`,t);return`${n.join(`
43
43
  `)}\n`}function H(e){let t=e.codec_name??`?`;if(e.codec_type===`video`){let n=e.width&&e.height?`, ${e.width}x${e.height}`:``,r=e.r_frame_rate?`, ${e.r_frame_rate} fps`:``;return` Stream #0:${e.index}: Video: ${t}${n}${r}`}if(e.codec_type===`audio`){let n=e.sample_rate?`, ${e.sample_rate} Hz`:``,r=e.channel_layout?`, ${e.channel_layout}`:``,i=e.channels===void 0?``:` (${e.channels} ch)`;return` Stream #0:${e.index}: Audio: ${t}${n}${r}${i}`}return` Stream #0:${e.index}: ${e.codec_type}: ${t}`}function U(e){let t=e.format,n=[`Input #0, ${t.format_name??`unknown`}, from '${t.filename??``}':`];if(t.duration!==void 0||t.bit_rate!==void 0){let e=t.duration??`N/A`,r=t.bit_rate?`${Math.round(Number(t.bit_rate)/1e3)} kb/s`:`N/A`;n.push(` Duration: ${e} s, bitrate: ${r}`)}for(let t of e.streams)n.push(H(t));return`${n.join(`
44
- `)}\n`}function W(e,t){if(!t.structured)return U(e);let n=R(e,t);return t.outputFormat.kind===`json`?`${JSON.stringify(n,null,4)}\n`:t.outputFormat.kind===`csv`?V(n,t.outputFormat):z(n,t.outputFormat)}let G=Promise.resolve();function K(e){let t=G.then(e,e);return G=t.then(()=>void 0,()=>void 0),t}let q=0;function J(e){let t=e.split(`/`).pop()||`input.bin`,n=/\.([A-Za-z0-9]{1,8})$/.exec(t),r=n?`.${n[1].toLowerCase()}`:`.bin`;return q=q+1>>>0,`__probe_${q}_${Date.now()}${r}`}async function Y(t){let n=``;try{return{ffmpeg:await e({onProgress:e=>{n+=`${e}\n`},ipk:c(t),preferMt:s(t.env)===`mt`}),loadLog:n}}catch(e){return{stdout:``,stderr:`ffprobe: failed to load wasm: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function X(e,n,r){try{await e.exec([`-hide_banner`,`-i`,n])}catch(n){if(i(n))return t(e),{stdout:``,stderr:`ffprobe: wasm core faulted (${n instanceof Error?n.message:String(n)}); recycled shared instance\n`,exitCode:1};r.text+=`${n instanceof Error?n.message:String(n)}\n`}return null}function Z(e,t,n){e.format.filename=t.inputPath??e.format.filename;try{return{stdout:W(e,t),stderr:t.quiet?``:n,exitCode:0}}catch(e){return{stdout:``,stderr:`ffprobe: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function Q(e,t,n){let{ffmpegEngineFromEnv:r}=await import(`./engine-B-OPe78i.js`),i=r(n.env);if(i===`wasm`)return null;let{probeViaMediabunny:a}=await import(`./bunny-probe-6xn_IAte.js`),o=await a(t,e.inputPath??``);return o?Z(o,e,``):i===`mediabunny`?{stdout:``,stderr:`ffprobe: FFMPEG_ENGINE=mediabunny: input is not a container mediabunny reads
44
+ `)}\n`}function W(e,t){if(!t.structured)return U(e);let n=R(e,t);return t.outputFormat.kind===`json`?`${JSON.stringify(n,null,4)}\n`:t.outputFormat.kind===`csv`?V(n,t.outputFormat):z(n,t.outputFormat)}let G=Promise.resolve();function K(e){let t=G.then(e,e);return G=t.then(()=>void 0,()=>void 0),t}let q=0;function J(e){let t=e.split(`/`).pop()||`input.bin`,n=/\.([A-Za-z0-9]{1,8})$/.exec(t),r=n?`.${n[1].toLowerCase()}`:`.bin`;return q=q+1>>>0,`__probe_${q}_${Date.now()}${r}`}async function Y(t){let n=``;try{return{ffmpeg:await e({onProgress:e=>{n+=`${e}\n`},ipk:c(t),preferMt:s(t.env)===`mt`}),loadLog:n}}catch(e){return{stdout:``,stderr:`ffprobe: failed to load wasm: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function X(e,n,r){try{await e.exec([`-hide_banner`,`-i`,n])}catch(n){if(i(n))return t(e),{stdout:``,stderr:`ffprobe: wasm core faulted (${n instanceof Error?n.message:String(n)}); recycled shared instance\n`,exitCode:1};r.text+=`${n instanceof Error?n.message:String(n)}\n`}return null}function Z(e,t,n){e.format.filename=t.inputPath??e.format.filename;try{return{stdout:W(e,t),stderr:t.quiet?``:n,exitCode:0}}catch(e){return{stdout:``,stderr:`ffprobe: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function Q(e,t,n){let{ffmpegEngineFromEnv:r}=await import(`./engine-D531XNHE.js`),i=r(n.env);if(i===`wasm`)return null;let{probeViaMediabunny:a}=await import(`./bunny-probe-6xn_IAte.js`),o=await a(t,e.inputPath??``);return o?Z(o,e,``):i===`mediabunny`?{stdout:``,stderr:`ffprobe: FFMPEG_ENGINE=mediabunny: input is not a container mediabunny reads
45
45
  `,exitCode:1}:null}async function $(e,t){if(!e.inputPath)return{stdout:``,stderr:`ffprobe: at least one input file must be specified
46
46
  `,exitCode:1};let n=t.fs.resolvePath(t.cwd,e.inputPath);if(!await t.fs.exists(n))return{stdout:``,stderr:`ffprobe: input file not found: ${e.inputPath}\n`,exitCode:1};let r=await o(t.fs,n);return await Q(e,r,t)||K(()=>te(e,r,t))}async function te(e,n,r){let a=u(),o=J(e.inputPath??``),s=ee(a,o),c=await Y(r);if(`exitCode`in c)return c;let{ffmpeg:f,loadLog:p}=c,m={text:``},h=e=>{m.text+=`${e.message}\n`};f.on(`log`,h);let g=!1;try{await d(f,a,[{name:o,data:n}]);let t=await X(f,s,m);if(t)return g=!0,t;let r=C(m.text,e.inputPath??``);return r?Z(r,e,p):{stdout:``,stderr:`ffprobe: could not parse media info from ffmpeg log\n${e.quiet?``:m.text||p}`,exitCode:1}}catch(e){return i(e)&&(g=!0,t(f)),{stdout:``,stderr:`ffprobe: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}finally{try{f.off(`log`,h)}catch{}if(!g)try{await l(f,a)}catch{}}}async function ne(e,t){if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return E();if(e.includes(`-version`)||e.includes(`--version`))return D(t);let n;try{n=M(e)}catch(e){return{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return $(n,t)}export{ne as runFfprobe};
@@ -1,4 +1,4 @@
1
- import{n as e}from"./slicc-version-BZyTvfoc.js";import{a as t}from"./just-bash-compat-B-SPHuh_.js";const n=`/dev/null`;function r(e){return e.oldName===n}function i(e){return e.newName===n}function a(e){let t=e.indexOf(` `);return(t===-1?e.replace(/\s+\d{4}-\d\d-\d\d[ T].*$/,``):e.slice(0,t)).trimEnd()}const o=/^@@+ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/;function s(e){let t=o.exec(e);return t?{oldStart:Number(t[1]),oldCount:t[2]===void 0?1:Number(t[2]),newStart:Number(t[3]),newCount:t[4]===void 0?1:Number(t[4])}:null}function c(e,t){return{...e,oldLines:[],newLines:[],oldSeen:0,newSeen:0,changeSeen:!1,leadingContext:0,trailingContext:0,lastSide:null,oldNoNewlineAtEof:!1,newNoNewlineAtEof:!1,raw:[t]}}function l(e){return{oldStart:e.oldStart,newStart:e.newStart,oldLines:e.oldLines,newLines:e.newLines,leadingContext:e.leadingContext,trailingContext:e.trailingContext,oldNoNewlineAtEof:e.oldNoNewlineAtEof,newNoNewlineAtEof:e.newNoNewlineAtEof,raw:e.raw}}function u(e){return e.oldSeen>=e.oldCount&&e.newSeen>=e.newCount}function d(e,t){e.oldLines.push(t),e.newLines.push(t),e.oldSeen++,e.newSeen++,e.lastSide=`both`,e.changeSeen?e.trailingContext++:e.leadingContext++}function f(e,t,n){t===`old`?(e.oldLines.push(n),e.oldSeen++):(e.newLines.push(n),e.newSeen++),e.lastSide=t,e.changeSeen=!0,e.trailingContext=0}function p(e,t){if(t.startsWith(`\\`))return(e.lastSide===`old`||e.lastSide===`both`)&&(e.oldNoNewlineAtEof=!0),(e.lastSide===`new`||e.lastSide===`both`)&&(e.newNoNewlineAtEof=!0),e.raw.push(t),!0;if(t===``)return d(e,``),e.raw.push(` `),!0;let n=t.slice(1);switch(t[0]){case` `:d(e,n);break;case`-`:f(e,`old`,n);break;case`+`:f(e,`new`,n);break;default:return!1}return e.raw.push(t),!0}function m(e){e.hunk&&e.current&&e.current.hunks.push(l(e.hunk)),e.hunk=null,e.complete=!1}function h(e,t){let n=e.hunk;if(!n)return!1;if(e.complete){let r=t.startsWith(`\\`);return r&&p(n,t),m(e),r}return p(n,t)?(u(n)&&(e.complete=!0),!0):(m(e),!1)}function g(e){let t={files:[],current:null,hunk:null,complete:!1,pendingOld:null};for(let n of e.split(`
1
+ import{n as e}from"./slicc-version-bYxfYms3.js";import{a as t}from"./just-bash-compat-B-SPHuh_.js";const n=`/dev/null`;function r(e){return e.oldName===n}function i(e){return e.newName===n}function a(e){let t=e.indexOf(` `);return(t===-1?e.replace(/\s+\d{4}-\d\d-\d\d[ T].*$/,``):e.slice(0,t)).trimEnd()}const o=/^@@+ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/;function s(e){let t=o.exec(e);return t?{oldStart:Number(t[1]),oldCount:t[2]===void 0?1:Number(t[2]),newStart:Number(t[3]),newCount:t[4]===void 0?1:Number(t[4])}:null}function c(e,t){return{...e,oldLines:[],newLines:[],oldSeen:0,newSeen:0,changeSeen:!1,leadingContext:0,trailingContext:0,lastSide:null,oldNoNewlineAtEof:!1,newNoNewlineAtEof:!1,raw:[t]}}function l(e){return{oldStart:e.oldStart,newStart:e.newStart,oldLines:e.oldLines,newLines:e.newLines,leadingContext:e.leadingContext,trailingContext:e.trailingContext,oldNoNewlineAtEof:e.oldNoNewlineAtEof,newNoNewlineAtEof:e.newNoNewlineAtEof,raw:e.raw}}function u(e){return e.oldSeen>=e.oldCount&&e.newSeen>=e.newCount}function d(e,t){e.oldLines.push(t),e.newLines.push(t),e.oldSeen++,e.newSeen++,e.lastSide=`both`,e.changeSeen?e.trailingContext++:e.leadingContext++}function f(e,t,n){t===`old`?(e.oldLines.push(n),e.oldSeen++):(e.newLines.push(n),e.newSeen++),e.lastSide=t,e.changeSeen=!0,e.trailingContext=0}function p(e,t){if(t.startsWith(`\\`))return(e.lastSide===`old`||e.lastSide===`both`)&&(e.oldNoNewlineAtEof=!0),(e.lastSide===`new`||e.lastSide===`both`)&&(e.newNoNewlineAtEof=!0),e.raw.push(t),!0;if(t===``)return d(e,``),e.raw.push(` `),!0;let n=t.slice(1);switch(t[0]){case` `:d(e,n);break;case`-`:f(e,`old`,n);break;case`+`:f(e,`new`,n);break;default:return!1}return e.raw.push(t),!0}function m(e){e.hunk&&e.current&&e.current.hunks.push(l(e.hunk)),e.hunk=null,e.complete=!1}function h(e,t){let n=e.hunk;if(!n)return!1;if(e.complete){let r=t.startsWith(`\\`);return r&&p(n,t),m(e),r}return p(n,t)?(u(n)&&(e.complete=!0),!0):(m(e),!1)}function g(e){let t={files:[],current:null,hunk:null,complete:!1,pendingOld:null};for(let n of e.split(`
2
2
  `)){if(h(t,n))continue;if(n.startsWith(`--- `)){t.pendingOld=a(n.slice(4));continue}if(n.startsWith(`+++ `)&&t.pendingOld!==null){t.current={oldName:t.pendingOld,newName:a(n.slice(4)),hunks:[]},t.files.push(t.current),t.pendingOld=null;continue}t.pendingOld=null;let e=s(n);e&&t.current&&(t.hunk=c(e,n))}return m(t),t.files.filter(e=>e.hunks.length>0)}function _(e){return{oldName:e.newName,newName:e.oldName,hunks:e.hunks.map(e=>({oldStart:e.newStart,newStart:e.oldStart,oldLines:e.newLines,newLines:e.oldLines,leadingContext:e.leadingContext,trailingContext:e.trailingContext,oldNoNewlineAtEof:e.newNoNewlineAtEof,newNoNewlineAtEof:e.oldNoNewlineAtEof,raw:v(e)}))}}function v(e){return e.raw.map((t,n)=>n===0?`@@ -${e.newStart},${e.newLines.length} +${e.oldStart},${e.oldLines.length} @@`:t.startsWith(`-`)?`+${t.slice(1)}`:t.startsWith(`+`)?`-${t.slice(1)}`:t)}function y(e){if(e===``)return{lines:[],newlineAtEof:!0};let t=e.endsWith(`
3
3
  `),n=e.split(`
4
4
  `);return t&&n.pop(),{lines:n,newlineAtEof:t}}function b(e){return e.lines.length===0?``:e.lines.join(`
@@ -1,4 +1,4 @@
1
- import{t as e}from"./record-ChU1ND2B.js";import{t,u as n}from"./descriptor-S4Jug1iP.js";import{t as r}from"./subcommand-flags-BZi7j78Q.js";import{t as i}from"./subcommand-help-CgO7wRS5.js";import{a,r as o,t as s}from"./memory-budget-Bcf7Eolo.js";import{d as c}from"./kernel-worker-Dseu067f.js";const l=`usage: memory <command> [options]
1
+ import{t as e}from"./record-ChU1ND2B.js";import{t,u as n}from"./descriptor-S4Jug1iP.js";import{t as r}from"./subcommand-flags-BZi7j78Q.js";import{t as i}from"./subcommand-help-CgO7wRS5.js";import{a,r as o,t as s}from"./memory-budget-Bcf7Eolo.js";import{d as c}from"./kernel-worker-Bq9IjFw5.js";const l=`usage: memory <command> [options]
2
2
 
3
3
  Durable cone memory: one file per cone, rewritten by the memory-curator
4
4
  scoop after a chat freezes. This command inspects that system and pokes it.
@@ -38,7 +38,7 @@ Examples:
38
38
  memory log --limit 5
39
39
  memory curate --archive 2026-09-11T08-30-00Z-fix-build.md
40
40
  memory dream --all
41
- `,u=[`--cone`,`--archive`,`--limit`];function d(e){return{stdout:e,stderr:``,exitCode:0}}function f(e){return{stdout:``,stderr:`memory: ${e}\n`,exitCode:1}}function p(){let e=globalThis.__slicc_memory;return e&&typeof e.curate==`function`&&typeof e.dream==`function`?e:null}async function m(){let{isMemoryV2Enabled:e}=await import(`./memory-v2-flag-BHVbti6Z.js`);return!e()}async function h(e,t){try{let n=await e.readFile(t,{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}catch{return null}}async function g(n){let r=[e];try{let e=await n.readDir(t);for(let t of e)t.type===`directory`&&r.push(t.name)}catch{}return r}function _(e){return n({parentJid:null,folder:e}).memoryPath}async function v(e,t){let n=await g(e);return n.includes(t)?{folder:t}:{error:`unknown cone "${t}" (cones: ${n.join(`, `)})`}}function y(e){return e.memoryFailed===void 0?e.memoryPending?`pending`:e.memoryCuratedAt===void 0?e.memorySkipped?`skipped`:`none`:`curated`:`failed`}async function b(e,t){let n=r(e,{value:[`--cone`]});if(`error`in n)return f(n.error);let i=await v(t,n.values.get(`--cone`)??`cone`);if(`error`in i)return f(i.error);let a=_(i.folder),o=await h(t,a);return o===null?f(`no memory file at ${a}`):d(o.endsWith(`
41
+ `,u=[`--cone`,`--archive`,`--limit`];function d(e){return{stdout:e,stderr:``,exitCode:0}}function f(e){return{stdout:``,stderr:`memory: ${e}\n`,exitCode:1}}function p(){let e=globalThis.__slicc_memory;return e&&typeof e.curate==`function`&&typeof e.dream==`function`?e:null}async function m(){let{isMemoryV2Enabled:e}=await import(`./memory-v2-flag-DK0lPu0X.js`);return!e()}async function h(e,t){try{let n=await e.readFile(t,{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}catch{return null}}async function g(n){let r=[e];try{let e=await n.readDir(t);for(let t of e)t.type===`directory`&&r.push(t.name)}catch{}return r}function _(e){return n({parentJid:null,folder:e}).memoryPath}async function v(e,t){let n=await g(e);return n.includes(t)?{folder:t}:{error:`unknown cone "${t}" (cones: ${n.join(`, `)})`}}function y(e){return e.memoryFailed===void 0?e.memoryPending?`pending`:e.memoryCuratedAt===void 0?e.memorySkipped?`skipped`:`none`:`curated`:`failed`}async function b(e,t){let n=r(e,{value:[`--cone`]});if(`error`in n)return f(n.error);let i=await v(t,n.values.get(`--cone`)??`cone`);if(`error`in i)return f(i.error);let a=_(i.folder),o=await h(t,a);return o===null?f(`no memory file at ${a}`):d(o.endsWith(`
42
42
  `)||o===``?o:`${o}\n`)}const x=`/sessions/.curation/health.json`;async function S(e){let t=await h(e,x);if(t===null)return null;try{let e=JSON.parse(t);return typeof e.at!=`string`||!Array.isArray(e.failures)?null:{at:e.at,failures:e.failures.map(String)}}catch{return null}}async function C(e){let t=await c(e),n=[];for(let t of await g(e)){let r=_(t),i=await h(e,r);n.push({folder:t,path:r,chars:i===null?null:i.length})}let r={curated:0,failed:0,pending:0,skipped:0,none:0},i=new Map;for(let e of t){let t=y(e);if(r[t]++,t===`curated`){let t=e.cone??`cone`;i.set(t,(i.get(t)??0)+1)}}let l=[];r.failed>0&&l.push(`${r.failed} archive(s) whose last curation attempt failed — see \`memory log\``);for(let t of s)await h(e,t)!==null&&l.push(`${t} is no longer read — memory instructions live in ${o}; carry any customization over, then delete it`);for(let e of n){let t=i.get(e.folder)??0;t===0||(e.chars??0)>0||l.push(e.folder===`cone`?`${t} archive(s) report successful curation but the primary memory file is missing or empty`:`${t} archive(s) from cone "${e.folder}" report successful curation but its memory file (${e.path}) is missing or empty`)}return{memoryV2:!await m(),sessions:t.length,budgetChars:a(t.length),cones:n,curation:r,checks:l,scheduledCheck:await S(e)}}async function w(e,t){let n=r(e,{bool:[`--json`,`--check`]});if(`error`in n)return f(n.error);let i=await C(t),a=n.bools.has(`--check`)&&i.checks.length>0;if(n.bools.has(`--json`))return{stdout:`${JSON.stringify(i,null,2)}\n`,stderr:``,exitCode:+!!a};let o=`Memory v2: ${i.memoryV2?`ON`:`OFF — curation surfaces beyond the freezer pass are disabled`}\n`;o+=`Sessions: ${i.sessions} archived (memory budget ${i.budgetChars} chars)\n`,o+=`Memory files:
43
43
  `;for(let e of i.cones){let t=e.chars===null?`missing`:`${e.chars} chars`;o+=` ${e.folder.padEnd(14)}${e.path} (${t})\n`}let{curated:s,failed:c,pending:l,skipped:u,none:d}=i.curation;if(o+=`Curation: ${s} curated, ${c} failed, ${l} pending, ${u} skipped, ${d} unmarked\n`,i.checks.length>0){o+=`Health:
44
44
  `;for(let e of i.checks)o+=` FAIL ${e}\n`}else o+=`Health: ok
@@ -42,7 +42,7 @@ Examples:
42
42
  gelatiere suggest "$TMPDIR/candidates.json" && gelatiere deliver
43
43
  gelatiere dismiss skill-github
44
44
  gelatiere use-cases --limit 3 --json
45
- `,i=[`--scoop`],a=[`--limit`],o=[...i,...a];function s(e){return{stdout:e,stderr:``,exitCode:0}}function c(e){return{stdout:``,stderr:`gelatiere: ${e}\n`,exitCode:1}}const l=`kernel host has not booted yet — try again in a moment`;function u(){let e=globalThis.__slicc_gelatiere;return e&&typeof e.roots==`function`?e:null}function d(){return import(`./gelatiere-store-C2u47uk0.js`)}async function f(t,n){let r=e(t,{bool:[`--reset`]});if(`error`in r)return c(r.error);let i=u();if(!i)return c(l);let a=await(await d()).loadGelatiereConfig(n),o=``;if(r.bools.has(`--reset`)){let e=await i.unregisterOwned();o=e.length?`Dropped ${e.length} gelatiere unit(s): ${e.join(`, `)}\n`:``}let f;try{f=await i.ensureUnit(a.allowedCommands)}catch(e){return c(e instanceof Error?e.message:String(e))}let m=await i.ensureNightly(a.nightly);return s(o+`${f.created?`Created`:`Found`} the gelatiere (${f.jid}, folder ${f.folder})\n`+p(f.allowList)+`${m.created?`Registered`:`Found`} nightly pass: cron "${m.cron}" (${m.id})\nSuggestions render in the suggestions card; \`gelatiere run\` asks for a pass now.
45
+ `,i=[`--scoop`],a=[`--limit`],o=[...i,...a];function s(e){return{stdout:e,stderr:``,exitCode:0}}function c(e){return{stdout:``,stderr:`gelatiere: ${e}\n`,exitCode:1}}const l=`kernel host has not booted yet — try again in a moment`;function u(){let e=globalThis.__slicc_gelatiere;return e&&typeof e.roots==`function`?e:null}function d(){return import(`./gelatiere-store-D_JKXdpV.js`)}async function f(t,n){let r=e(t,{bool:[`--reset`]});if(`error`in r)return c(r.error);let i=u();if(!i)return c(l);let a=await(await d()).loadGelatiereConfig(n),o=``;if(r.bools.has(`--reset`)){let e=await i.unregisterOwned();o=e.length?`Dropped ${e.length} gelatiere unit(s): ${e.join(`, `)}\n`:``}let f;try{f=await i.ensureUnit(a.allowedCommands)}catch(e){return c(e instanceof Error?e.message:String(e))}let m=await i.ensureNightly(a.nightly);return s(o+`${f.created?`Created`:`Found`} the gelatiere (${f.jid}, folder ${f.folder})\n`+p(f.allowList)+`${m.created?`Registered`:`Found`} nightly pass: cron "${m.cron}" (${m.id})\nSuggestions render in the suggestions card; \`gelatiere run\` asks for a pass now.
46
46
  `)}function p(e){return e===`updated`?`Updated its command allow-list from GELATIERE.md
47
47
  `:e===`deferred`?`Left its command allow-list alone: the gelatiere is mid-pass and applying it would
48
48
  cancel the pass — run \`gelatiere init\` again once it is idle
@@ -50,5 +50,5 @@ cancel the pass — run \`gelatiere init\` again once it is idle
50
50
  `),s(l)}async function g(t,n){let r=e(t,{value:i,bool:[`--force`]});if(`error`in r)return c(r.error);let a=u();if(!a)return c(l);let o=await d(),f=await o.readGelatiereSuggestions(n),p=o.openSuggestions(f),m=await o.readGelatiereState(n);if(o.suggestionsSince(f,m.lastDeliveredAt).length===0&&!r.bools.has(`--force`))return s(`Nothing new since the last delivery; no lick sent (use --force to resend).
51
51
  `);let h=a.roots();if(h.length===0)return c(`no cone is running to deliver to`);let g=r.values.get(`--scoop`),v=g?h.find(e=>e.folder===g||e.name===g||e.jid===g):void 0;if(g&&!v)return c(`unknown delivery target "${g}" (cones: ${h.map(e=>e.folder).join(`, `)})`);let y=await _(a,h,v?[v]:h,{since:m.lastDeliveredAt,open:p,force:r.bools.has(`--force`),alias:g});g||await o.writeGelatiereState(n,{...m,lastDeliveredAt:new Date().toISOString()});let b=g?` (targeted; the delivery watermark is unchanged)`:``;return y.length===0?s(`Nothing addressed to ${g??`any running cone`}; no lick sent${b}\n`):s(`Delivered to ${y.length} cone(s): ${y.join(`, `)}${b}\n`)}async function _(e,t,n,r){let i=await d(),a=new Set(t.map(e=>e.folder)),o=t[0].folder,s=[];for(let t of n){let n=i.suggestionsForCone(r.open,t.folder,o,a),c=n.filter(e=>i.isNewSince(e,r.since,t.folder));if(c.length===0&&!(r.force&&n.length>0))continue;let l=r.alias??t.folder;e.lick(l,i.buildGelatiereLickBody(c,n)),s.push(`${l} (${c.length} new, ${n.length} open)`)}return s}async function v(t,n){let r=e(t,{bool:[`--all`,`--json`]});if(`error`in r)return c(r.error);let i=await d(),a=await i.readGelatiereSuggestions(n),o=r.bools.has(`--all`)?a:i.openSuggestions(a);if(r.bools.has(`--json`))return s(`${JSON.stringify(o,null,2)}\n`);if(o.length===0)return s(a.length===0?"No suggestions yet. `gelatiere run` asks for a pass now.\n":"No open suggestions (every one has been taken or dismissed; `--all` lists them).\n");let l=``;for(let e of o){let t=e.dismissedAt?` (dismissed)`:e.takenAt?` (taken)`:``;l+=`${e.id} [${e.kind}]${t}\n ${e.title}\n`,e.install&&(l+=` install: ${e.install}\n`),e.prompt&&(l+=` try: ${e.prompt}\n`)}return s(l)}async function y(e,t){let n=e[0];return n?await(await d()).dismissGelatiereSuggestion(t,n)?s(`Dismissed ${n}.\n`):c(`no open suggestion with id "${n}"`):c("dismiss requires a suggestion id (see `gelatiere list`)")}const b=`https://www.sliccy.com`,x=512e3,S=/^[a-z0-9][a-z0-9-]*$/;async function C(e,t){let n=await fetch(`${b}${e}`,{signal:AbortSignal.timeout(15e3)});if(!n.ok)throw Error(`${e}: HTTP ${n.status}`);let r=await n.text();return r.length>t?r.slice(0,t):r}async function w(){try{let e=await C(`/skills/catalog.json`,x);return s(e.endsWith(`
52
52
  `)?e:`${e}\n`)}catch(e){return c(`catalog fetch failed: ${e instanceof Error?e.message:String(e)}`)}}async function T(){try{let e=[...(await C(`/sitemap.xml`,x)).matchAll(/<loc>[^<]*\/man\/([a-z0-9-]+)(?:\.html)?<\/loc>/g)].map(e=>e[1]).sort();return e.length===0?c(`no man pages found in the sitemap`):s(`${[...new Set(e)].join(` `)}\n`)}catch(e){return c(`sitemap fetch failed: ${e instanceof Error?e.message:String(e)}`)}}async function E(e){let t=e[0];if(!t)return c(`man requires a command name: gelatiere man <command>`);if(!S.test(t))return c(`not a command name: "${t}"`);try{let e=await C(`/man/${t}.plain.html`,16e3);return s(e.endsWith(`
53
- `)?e:`${e}\n`)}catch(e){return c(`man fetch failed: ${e instanceof Error?e.message:String(e)}`)}}function D(e,t,n){let r=e=>{let t=n.match(RegExp(`<meta[^>]+name=["']${e}["'][^>]+content=(["'])((?:(?!\\1).)*)\\1`,`i`));return t?k(t[2]).trim():``},i=n.match(/<title[^>]*>([^<]*)<\/title>/i);return{slug:e,url:t,title:i?k(i[1]).trim():A(e),description:r(`description`),skills:r(`slicc-upskill`).split(`,`).map(e=>e.trim()).filter(Boolean)}}const O={amp:`&`,lt:`<`,gt:`>`,quot:`"`,"#39":`'`,"#x27":`'`};function k(e){return e.replace(/&(#x?[0-9a-fA-F]+|[a-z]+);/g,(e,t)=>{let n=O[t.toLowerCase()];if(n)return n;let r=t.match(/^#(x?)([0-9a-fA-F]+)$/i);if(!r)return e;let i=Number.parseInt(r[2],r[1]?16:10);return Number.isFinite(i)?String.fromCodePoint(i):e})}function A(e){let t=e.replace(/-/g,` `);return t.charAt(0).toUpperCase()+t.slice(1)}function j(e,t){return e<=0?0:Math.floor(t/864e5)%e}function M(e,t,n){if(t>=e.length)return[...e];let r=j(e.length,n);return Array.from({length:t},(t,n)=>e[(r+n)%e.length])}async function N(e,t){let n=Array(e.length),r=0,i=async()=>{for(;r<e.length;){let i=r++;n[i]=await t(e[i])}};return await Promise.all(Array.from({length:Math.min(4,e.length)},()=>i())),n}async function P(t){let n=e(t,{value:a,bool:[`--json`]});if(`error`in n)return c(n.error);let r=n.values.get(`--limit`),i=r===void 0?12:Number(r);if(!Number.isInteger(i)||i<=0)return c(`--limit must be a positive whole number, not "${r}"`);let o;try{let e=await C(`/sitemap.xml`,x);o=[...new Set([...e.matchAll(/<loc>[^<]*\/use-cases\/([a-z0-9-]+)(?:\.html)?<\/loc>/g)].map(e=>e[1]))].sort()}catch(e){return c(`sitemap fetch failed: ${e instanceof Error?e.message:String(e)}`)}if(o.length===0)return c(`no use cases found in the sitemap`);let l=await N(M(o,Math.min(i,12),Date.now()),async e=>{let t=`${b}/use-cases/${e}`;try{return D(e,t,await C(`/use-cases/${e}`,24e3))}catch{return{slug:e,url:t,title:A(e),description:``,skills:[]}}});if(n.bools.has(`--json`))return s(`${JSON.stringify(l,null,2)}\n`);let u=``;for(let e of l)u+=`${e.slug}\t${e.title}\n ${e.url}\n`,e.description&&(u+=` ${e.description}\n`),e.skills.length&&(u+=` skills: ${e.skills.join(` `)}\n`);return s(u)}async function F(e){let t=await d(),n=u(),r=n?.unit(),i=await t.loadGelatiereConfig(e),a=await t.readGelatiereState(e),o=await t.readGelatiereSuggestions(e),c=``,{isMemoryV2Enabled:l}=await import(`./memory-v2-flag-BHVbti6Z.js`);l()||(c+=`Memory v2: OFF — the nightly is unscheduled and session ends do not trigger passes
53
+ `)?e:`${e}\n`)}catch(e){return c(`man fetch failed: ${e instanceof Error?e.message:String(e)}`)}}function D(e,t,n){let r=e=>{let t=n.match(RegExp(`<meta[^>]+name=["']${e}["'][^>]+content=(["'])((?:(?!\\1).)*)\\1`,`i`));return t?k(t[2]).trim():``},i=n.match(/<title[^>]*>([^<]*)<\/title>/i);return{slug:e,url:t,title:i?k(i[1]).trim():A(e),description:r(`description`),skills:r(`slicc-upskill`).split(`,`).map(e=>e.trim()).filter(Boolean)}}const O={amp:`&`,lt:`<`,gt:`>`,quot:`"`,"#39":`'`,"#x27":`'`};function k(e){return e.replace(/&(#x?[0-9a-fA-F]+|[a-z]+);/g,(e,t)=>{let n=O[t.toLowerCase()];if(n)return n;let r=t.match(/^#(x?)([0-9a-fA-F]+)$/i);if(!r)return e;let i=Number.parseInt(r[2],r[1]?16:10);return Number.isFinite(i)?String.fromCodePoint(i):e})}function A(e){let t=e.replace(/-/g,` `);return t.charAt(0).toUpperCase()+t.slice(1)}function j(e,t){return e<=0?0:Math.floor(t/864e5)%e}function M(e,t,n){if(t>=e.length)return[...e];let r=j(e.length,n);return Array.from({length:t},(t,n)=>e[(r+n)%e.length])}async function N(e,t){let n=Array(e.length),r=0,i=async()=>{for(;r<e.length;){let i=r++;n[i]=await t(e[i])}};return await Promise.all(Array.from({length:Math.min(4,e.length)},()=>i())),n}async function P(t){let n=e(t,{value:a,bool:[`--json`]});if(`error`in n)return c(n.error);let r=n.values.get(`--limit`),i=r===void 0?12:Number(r);if(!Number.isInteger(i)||i<=0)return c(`--limit must be a positive whole number, not "${r}"`);let o;try{let e=await C(`/sitemap.xml`,x);o=[...new Set([...e.matchAll(/<loc>[^<]*\/use-cases\/([a-z0-9-]+)(?:\.html)?<\/loc>/g)].map(e=>e[1]))].sort()}catch(e){return c(`sitemap fetch failed: ${e instanceof Error?e.message:String(e)}`)}if(o.length===0)return c(`no use cases found in the sitemap`);let l=await N(M(o,Math.min(i,12),Date.now()),async e=>{let t=`${b}/use-cases/${e}`;try{return D(e,t,await C(`/use-cases/${e}`,24e3))}catch{return{slug:e,url:t,title:A(e),description:``,skills:[]}}});if(n.bools.has(`--json`))return s(`${JSON.stringify(l,null,2)}\n`);let u=``;for(let e of l)u+=`${e.slug}\t${e.title}\n ${e.url}\n`,e.description&&(u+=` ${e.description}\n`),e.skills.length&&(u+=` skills: ${e.skills.join(` `)}\n`);return s(u)}async function F(e){let t=await d(),n=u(),r=n?.unit(),i=await t.loadGelatiereConfig(e),a=await t.readGelatiereState(e),o=await t.readGelatiereSuggestions(e),c=``,{isMemoryV2Enabled:l}=await import(`./memory-v2-flag-DK0lPu0X.js`);l()||(c+=`Memory v2: OFF — the nightly is unscheduled and session ends do not trigger passes
54
54
  `),c+=`Unit: ${r?`${r.jid} (folder ${r.folder})`:"not created — run `gelatiere init`"}\n`;let f=n?.nightly();return c+=`Nightly: ${f?`registered, cron "${f.cron}" (${f.id})`:`not registered — run \`gelatiere init\` (cron "${i.nightly}")`}\n`,c+=`Interval: ${i.intervalHours}h between session-end passes\n`,c+=I(i.allowedCommands,n?.unitAllowedCommands(),t),c+=`Passes: ${a.passes}\n`,c+=`Last pass: ${a.lastPassAt??`never`}\n`,c+=`Last trigger: ${a.lastTriggeredAt??`never`}\n`,c+=`Last delivery: ${a.lastDeliveredAt??`never`}\n`,c+=`Suggestions: ${t.openSuggestions(o).length} open, ${t.takenSuggestions(o).length} taken, ${o.length} total\n`,s(c)}function I(e,t,n){let r=e=>{let t=e.filter(e=>!n.GELATIERE_BASE_ALLOWED_COMMANDS.includes(e));return t.length?` (+${t.join(`, `)} from GELATIERE.md)`:``};return t?t.length===e.length&&t.every((t,n)=>t===e[n])?`Commands: ${t.length} allowed without approval${r(t)}\n`:`Commands: ${t.length} in force${r(t)}; GELATIERE.md asks for ${e.length}${r(e)} — run \`gelatiere init\`\n`:`Commands: ${e.length} configured${r(e)}, pending — run \`gelatiere init\`\n`}async function L(e,n,i){let a=e[0];if(!a||t(e,{valueFlags:o}))return s(r);let l=e.slice(1);switch(a){case`init`:return f(l,i.fs);case`run`:return m(n.env);case`suggest`:return h(l,i.fs);case`deliver`:return g(l,i.fs);case`list`:return v(l,i.fs);case`dismiss`:return y(l,i.fs);case`status`:return F(i.fs);case`catalog`:return w();case`commands`:return T();case`man`:return E(l);case`use-cases`:return P(l);default:return c(`unknown command: ${a}\n${r}`)}}export{L as runGelatiere};
@@ -0,0 +1 @@
1
+ import{t as e}from"./panel-rpc-BPwAqRch.js";import{n as t,t as n}from"./screencapture-media-shared-DlK1Wqh8.js";function r(e){return`screen:${e}`}const i={screenshot:!0,text:!1,frames:`poll`,keyboard:!1,mouse:`none`,scroll:!1,exec:!1,inputAllowed:!1};function a(e){return e.includes(`png`)?`image/png`:`image/jpeg`}function o(e){return new Uint8Array(e)}function s(e){if(typeof e!=`object`||!e)return null;let t=Object.getOwnPropertyDescriptor(e,`handle`)?.value;return typeof t==`string`?t:null}var c=class{rpc;handle;onGone;seq=0;title;size;state=`live`;offEnded;constructor(e,t,r={title:t},i){this.rpc=e,this.handle=t,this.onGone=i,this.title=r.title,this.size=r.width&&r.height&&r.width>0&&r.height>0?{width:r.width,height:r.height}:null,this.offEnded=e.onEvent?e.onEvent(n,e=>{s(e)===this.handle&&this.markGone()}):()=>void 0}describe(){return{id:r(this.handle),kind:`screen`,title:this.title,size:this.size,state:this.state,capabilities:i,pid:null}}async screenshot(e){let t;try{t=await this.rpc.call(`screencapture`,{mimeType:e.format===`png`?`image/png`:`image/jpeg`,quality:.7,mode:`session`,session:`frame`,handle:this.handle,maxWidth:e.maxWidth})}catch(e){throw(e instanceof Error?e.message:String(e)).includes(`no screen-share session`)&&this.markGone(),e}return t.width>0&&t.height>0&&(this.size={width:t.width,height:t.height}),this.seq+=1,{seq:this.seq,mime:a(t.mimeType),width:t.width,height:t.height,bytes:o(t.bytes)}}async input(e){throw Error(`input is not allowed`)}async recordClip(n){let r=t(n),i=await this.rpc.call(`screencapture`,{mimeType:`video/webm`,quality:1,mode:`session`,session:`record`,handle:this.handle,durationMs:r},{timeoutMs:r+e});return{bytes:o(i.bytes),mime:i.mimeType||`video/webm`,width:i.width,height:i.height,...i.durationMs===void 0?{}:{durationMs:i.durationMs}}}async close(){this.offEnded();try{await this.rpc.call(`screencapture`,{mimeType:`application/octet-stream`,quality:1,mode:`session`,session:`stop`,handle:this.handle})}catch{}}markGone(){this.state!==`gone`&&(this.state=`gone`,this.onGone?.())}};export{c as BridgedScreenComputerBackend,r as screenComputerId};
@@ -0,0 +1 @@
1
+ var e=new Set,t=!1,n;function r(e){if(typeof e!=`object`||!e)return!1;let t=Object.getOwnPropertyDescriptor(e,`type`)?.value,n=Object.getOwnPropertyDescriptor(e,`id`)?.value;return(t===`begin`||t===`end`)&&typeof n==`string`}function i(n){t=!0,n.type===`begin`?e.add(n.id):e.delete(n.id)}function a(){if(n===void 0){if(typeof BroadcastChannel!=`function`){n=null;return}try{n=new BroadcastChannel(`slicc-screen-share-approval`)}catch{n=null;return}n.onmessage=e=>{r(e.data)&&i(e.data)}}}function o(){return a(),e.size>0||!t}function s(e,t){return o()?!0:(t(e),!1)}export{s as keepAdoptedScreenShare,a as listenScreenShareApprovalChannel};
@@ -0,0 +1 @@
1
+ import{i as e,n as t,r as n}from"./screencapture-media-shared-DlK1Wqh8.js";const r=new class{sessions=new Map;endedListeners=new Set;nextId=1;unloadHooked=!1;ids(){return[...this.sessions.keys()]}get(e){return this.sessions.get(e)}add(e,t){let n=`screen${this.nextId++}`;this.sessions.set(n,{handle:n,stream:e,video:t}),this.hookUnload();for(let t of e.getTracks())t.addEventListener(`ended`,()=>{this.stop(n)},{once:!0});return n}stop(e){let t=this.sessions.get(e);return t?(this.sessions.delete(e),t.video.srcObject=null,i(t.stream),this.notifyEnded(e),!0):!1}onEnded(e){return this.endedListeners.add(e),()=>{this.endedListeners.delete(e)}}stopAll(){for(let e of[...this.sessions.keys()])this.stop(e)}hookUnload(){this.unloadHooked||typeof window>`u`||(this.unloadHooked=!0,window.addEventListener(`pagehide`,()=>{this.stopAll()}))}notifyEnded(e){for(let t of[...this.endedListeners])try{t(e)}catch{}}};function i(e){for(let t of e.getTracks())try{t.stop()}catch{}}async function a(e){if(e.mode===`session`)return o(e);if(!navigator.mediaDevices?.getDisplayMedia)throw Error(`screen capture is not supported in this browser`);await g();let t=e.mode===`video`&&!!e.audio,r;try{r=await navigator.mediaDevices.getDisplayMedia({video:!0,audio:t})}catch(e){throw Error(n(e))}try{return e.mode===`video`?await p(r,e):await d(r,e)}finally{i(r)}}async function o(e){if(e.action===`start`)return s();if(e.action===`frame`)return l(e);if(e.action===`record`)return u(e);if(!r.stop(e.handle))throw Error(`no screen-share session '${e.handle}'`);return{bytes:new Uint8Array,mimeType:`application/octet-stream`,width:0,height:0,handle:e.handle}}async function s(){if(!navigator.mediaDevices?.getDisplayMedia)throw Error(`screen capture is not supported in this browser`);await g();let e;try{e=await navigator.mediaDevices.getDisplayMedia({video:!0,audio:!1})}catch(e){throw Error(n(e))}return c(e)}async function c(e){let t;try{t=await h(e),await new Promise(e=>setTimeout(e,100))}catch(t){throw i(e),t}let n=r.add(e,t);return{bytes:new Uint8Array,mimeType:`application/octet-stream`,width:t.videoWidth,height:t.videoHeight,handle:n}}async function l(e){let t=r.get(e.handle);if(!t)throw Error(`no screen-share session '${e.handle}'`);return f(t.video,{mimeType:e.mimeType??`image/jpeg`,quality:e.quality??.7,maxWidth:e.maxWidth})}async function u(e){let t=r.get(e.handle);if(!t)throw Error(`no screen-share session '${e.handle}'`);return p(t.stream,{mode:`video`,mimeType:e.mimeType??`video/webm`,durationMs:e.durationMs})}async function d(e,t){let n=await h(e);try{return await new Promise(e=>setTimeout(e,100)),await f(n,{mimeType:t.mimeType,quality:t.quality})}finally{n.srcObject=null}}async function f(t,n){let r=t.videoWidth,i=t.videoHeight,{width:a,height:o}=e(r,i,n.maxWidth),s=document.createElement(`canvas`);s.width=a,s.height=o;let c=s.getContext(`2d`);if(!c)throw Error(`Failed to get canvas context`);c.drawImage(t,0,0,a,o);let l=await new Promise((e,t)=>{s.toBlob(n=>n?e(n):t(Error(`Failed to create image blob`)),n.mimeType,n.quality)});return{bytes:new Uint8Array(await l.arrayBuffer()),mimeType:l.type||n.mimeType,width:a,height:o}}async function p(e,n){if(typeof MediaRecorder>`u`)throw Error(`MediaRecorder is not supported in this browser`);let r=await h(e),i=r.videoWidth,a=r.videoHeight,o=t(n.durationMs),s=m(n.mimeType),c=new MediaRecorder(e,{mimeType:s}),l=[];c.ondataavailable=e=>{e.data&&e.data.size>0&&l.push(e.data)};let u=new Promise(e=>{c.onstop=()=>e()}),d=new Promise(t=>{let n=e.getTracks(),r=n.length;if(r===0){t();return}for(let e of n)e.addEventListener(`ended`,()=>{--r,r<=0&&t()},{once:!0})}),f=Date.now();c.start(),await Promise.race([new Promise(e=>setTimeout(e,o)),d]),c.state!==`inactive`&&c.stop(),await u;let p=Math.max(100,Date.now()-f);r.srcObject=null;let g=new Blob(l,{type:s});if(g.size===0)throw Error(`video capture produced no data (was sharing stopped immediately?)`);return{bytes:new Uint8Array(await g.arrayBuffer()),mimeType:g.type||s,width:i,height:a,durationMs:Math.min(p,o)}}function m(e){if(MediaRecorder.isTypeSupported(e))return e;for(let e of[`video/webm;codecs=vp9,opus`,`video/webm;codecs=vp8,opus`,`video/webm`])if(MediaRecorder.isTypeSupported(e))return e;return`video/webm`}async function h(e){let t=document.createElement(`video`);return t.srcObject=e,t.muted=!0,t.playsInline=!0,await new Promise((e,n)=>{t.onloadedmetadata=()=>t.play().then(()=>e()).catch(n),t.onerror=()=>n(Error(`Failed to load video stream`))}),t}async function g(e=5e3){if(typeof document>`u`)return;let t=()=>typeof document.visibilityState!=`string`||document.visibilityState===`visible`,n=typeof document.hasFocus==`function`?()=>document.hasFocus():()=>!0;t()&&n()||await new Promise(r=>{let i=()=>{window.removeEventListener(`focus`,a),document.removeEventListener(`visibilitychange`,a),clearTimeout(o)},a=()=>{t()&&n()&&(i(),r())},o=setTimeout(()=>{i(),r()},e);window.addEventListener(`focus`,a),document.addEventListener(`visibilitychange`,a),a()})}export{a as captureDisplayMedia};
@@ -0,0 +1 @@
1
+ function e(e){return Math.max(100,Math.min(e??5e3,6e4))}function t(e){let t=e instanceof DOMException?e.name:void 0,n=e instanceof Error?e.message:String(e);return t===`InvalidStateError`||/^Invalid state$/i.test(n.trim())||/InvalidStateError/i.test(n)?"display capture unavailable (Invalid state): another tab or page may still hold a screen-share session, or this page is not focused/visible. `computer ls` lists a live `screen` computer if one holds this page's display slot — `computer rm` it to stop the tracks. Otherwise stop other getDisplayMedia captures, focus the SLICC window, and retry; if it stays wedged, reload the session":t===`NotAllowedError`||/Permission denied|NotAllowedError/i.test(n)?`user cancelled or permission denied`:t===`NotFoundError`?`no screen, window, or tab was available to capture`:t===`NotReadableError`||t===`AbortError`?n||t:n}function n(e,t,n){if(!n||e<=n||e<=0)return{width:e,height:t};let r=n/e;return{width:Math.max(1,Math.round(e*r)),height:Math.max(1,Math.round(t*r))}}function r(e){let t=e.session;if(t===`start`)return{mode:`session`,action:`start`};if(t!==`frame`&&t!==`stop`&&t!==`record`)throw Error(`screencapture session requires action start|frame|stop|record`);if(!e.handle)throw Error(`screencapture session ${t} requires handle`);if(t===`frame`)return{mode:`session`,action:`frame`,handle:e.handle,maxWidth:e.maxWidth,mimeType:e.mimeType,quality:e.quality};if(t===`stop`)return{mode:`session`,action:`stop`,handle:e.handle};if(t===`record`)return{mode:`session`,action:`record`,handle:e.handle,durationMs:e.durationMs??5e3,mimeType:e.mimeType};throw Error(`screencapture session requires action start|frame|stop|record`)}var i=`screencapture-session-ended`,a=new class{sessions=new Map;endedListeners=new Set;nextId=1;unloadHooked=!1;ids(){return[...this.sessions.keys()]}get(e){return this.sessions.get(e)}add(e,t){let n=`screen${this.nextId++}`;this.sessions.set(n,{handle:n,stream:e,video:t}),this.hookUnload();for(let t of e.getTracks())t.addEventListener(`ended`,()=>{this.stop(n)},{once:!0});return n}stop(e){let t=this.sessions.get(e);return t?(this.sessions.delete(e),t.video.srcObject=null,o(t.stream),this.notifyEnded(e),!0):!1}onEnded(e){return this.endedListeners.add(e),()=>{this.endedListeners.delete(e)}}stopAll(){for(let e of[...this.sessions.keys()])this.stop(e)}hookUnload(){this.unloadHooked||typeof window>`u`||(this.unloadHooked=!0,window.addEventListener(`pagehide`,()=>{this.stopAll()}))}notifyEnded(e){for(let t of[...this.endedListeners])try{t(e)}catch{}}};function o(e){for(let t of e.getTracks())try{t.stop()}catch{}}async function s(e){if(e.mode===`session`)return c(e);if(!navigator.mediaDevices?.getDisplayMedia)throw Error(`screen capture is not supported in this browser`);await v();let n=e.mode===`video`&&!!e.audio,r;try{r=await navigator.mediaDevices.getDisplayMedia({video:!0,audio:n})}catch(e){throw Error(t(e))}try{return e.mode===`video`?await h(r,e):await p(r,e)}finally{o(r)}}async function c(e){if(e.action===`start`)return l();if(e.action===`frame`)return d(e);if(e.action===`record`)return f(e);if(!a.stop(e.handle))throw Error(`no screen-share session '${e.handle}'`);return{bytes:new Uint8Array,mimeType:`application/octet-stream`,width:0,height:0,handle:e.handle}}async function l(){if(!navigator.mediaDevices?.getDisplayMedia)throw Error(`screen capture is not supported in this browser`);await v();let e;try{e=await navigator.mediaDevices.getDisplayMedia({video:!0,audio:!1})}catch(e){throw Error(t(e))}return u(e)}async function u(e){let t;try{t=await _(e),await new Promise(e=>setTimeout(e,100))}catch(t){throw o(e),t}let n=a.add(e,t);return{bytes:new Uint8Array,mimeType:`application/octet-stream`,width:t.videoWidth,height:t.videoHeight,handle:n}}async function d(e){let t=a.get(e.handle);if(!t)throw Error(`no screen-share session '${e.handle}'`);return m(t.video,{mimeType:e.mimeType??`image/jpeg`,quality:e.quality??.7,maxWidth:e.maxWidth})}async function f(e){let t=a.get(e.handle);if(!t)throw Error(`no screen-share session '${e.handle}'`);return h(t.stream,{mode:`video`,mimeType:e.mimeType??`video/webm`,durationMs:e.durationMs})}async function p(e,t){let n=await _(e);try{return await new Promise(e=>setTimeout(e,100)),await m(n,{mimeType:t.mimeType,quality:t.quality})}finally{n.srcObject=null}}async function m(e,t){let r=e.videoWidth,i=e.videoHeight,{width:a,height:o}=n(r,i,t.maxWidth),s=document.createElement(`canvas`);s.width=a,s.height=o;let c=s.getContext(`2d`);if(!c)throw Error(`Failed to get canvas context`);c.drawImage(e,0,0,a,o);let l=await new Promise((e,n)=>{s.toBlob(t=>t?e(t):n(Error(`Failed to create image blob`)),t.mimeType,t.quality)});return{bytes:new Uint8Array(await l.arrayBuffer()),mimeType:l.type||t.mimeType,width:a,height:o}}async function h(t,n){if(typeof MediaRecorder>`u`)throw Error(`MediaRecorder is not supported in this browser`);let r=await _(t),i=r.videoWidth,a=r.videoHeight,o=e(n.durationMs),s=g(n.mimeType),c=new MediaRecorder(t,{mimeType:s}),l=[];c.ondataavailable=e=>{e.data&&e.data.size>0&&l.push(e.data)};let u=new Promise(e=>{c.onstop=()=>e()}),d=new Promise(e=>{let n=t.getTracks(),r=n.length;if(r===0){e();return}for(let t of n)t.addEventListener(`ended`,()=>{--r,r<=0&&e()},{once:!0})}),f=Date.now();c.start(),await Promise.race([new Promise(e=>setTimeout(e,o)),d]),c.state!==`inactive`&&c.stop(),await u;let p=Math.max(100,Date.now()-f);r.srcObject=null;let m=new Blob(l,{type:s});if(m.size===0)throw Error(`video capture produced no data (was sharing stopped immediately?)`);return{bytes:new Uint8Array(await m.arrayBuffer()),mimeType:m.type||s,width:i,height:a,durationMs:Math.min(p,o)}}function g(e){if(MediaRecorder.isTypeSupported(e))return e;for(let e of[`video/webm;codecs=vp9,opus`,`video/webm;codecs=vp8,opus`,`video/webm`])if(MediaRecorder.isTypeSupported(e))return e;return`video/webm`}async function _(e){let t=document.createElement(`video`);return t.srcObject=e,t.muted=!0,t.playsInline=!0,await new Promise((e,n)=>{t.onloadedmetadata=()=>t.play().then(()=>e()).catch(n),t.onerror=()=>n(Error(`Failed to load video stream`))}),t}async function v(e=5e3){if(typeof document>`u`)return;let t=()=>typeof document.visibilityState!=`string`||document.visibilityState===`visible`,n=typeof document.hasFocus==`function`?()=>document.hasFocus():()=>!0;t()&&n()||await new Promise(r=>{let i=()=>{window.removeEventListener(`focus`,a),document.removeEventListener(`visibilitychange`,a),clearTimeout(o)},a=()=>{t()&&n()&&(i(),r())},o=setTimeout(()=>{i(),r()},e);window.addEventListener(`focus`,a),document.addEventListener(`visibilitychange`,a),a()})}export{i as SCREENCAPTURE_SESSION_ENDED_CHANNEL,u as adoptDisplayStream,s as captureDisplayMedia,a as displaySessions,r as sessionCaptureRequest};
@@ -0,0 +1 @@
1
+ function e(e){return Math.max(100,Math.min(e??5e3,6e4))}function t(e){let t=e instanceof DOMException?e.name:void 0,n=e instanceof Error?e.message:String(e);return t===`InvalidStateError`||/^Invalid state$/i.test(n.trim())||/InvalidStateError/i.test(n)?"display capture unavailable (Invalid state): another tab or page may still hold a screen-share session, or this page is not focused/visible. `computer ls` lists a live `screen` computer if one holds this page's display slot — `computer rm` it to stop the tracks. Otherwise stop other getDisplayMedia captures, focus the SLICC window, and retry; if it stays wedged, reload the session":t===`NotAllowedError`||/Permission denied|NotAllowedError/i.test(n)?`user cancelled or permission denied`:t===`NotFoundError`?`no screen, window, or tab was available to capture`:t===`NotReadableError`||t===`AbortError`?n||t:n}function n(e,t,n){if(!n||e<=n||e<=0)return{width:e,height:t};let r=n/e;return{width:Math.max(1,Math.round(e*r)),height:Math.max(1,Math.round(t*r))}}const r=`screencapture-session-ended`;export{n as i,e as n,t as r,r as t};
@@ -1,4 +1,4 @@
1
- import{n as e,r as t}from"./panel-rpc-BPwAqRch.js";import{r as n}from"./base64-DzRgusa4.js";import{t as r}from"./subcommand-flags-BZi7j78Q.js";import{t as i}from"./subcommand-help-CgO7wRS5.js";import{i as a}from"./shared-C_68vn79.js";import{n as o,t as s}from"./extension-media-capture-BvLVZFQ0.js";function c(e){return Math.max(100,Math.min(e??5e3,6e4))}function l(e){let t=e instanceof DOMException?e.name:void 0,n=e instanceof Error?e.message:String(e);return t===`InvalidStateError`||/^Invalid state$/i.test(n.trim())||/InvalidStateError/i.test(n)?`display capture unavailable (Invalid state): another tab or page may still hold a screen-share session, or this page is not focused/visible. Stop other getDisplayMedia captures, focus the SLICC window, and retry; if it stays wedged, reload the session`:t===`NotAllowedError`||/Permission denied|NotAllowedError/i.test(n)?`user cancelled or permission denied`:t===`NotFoundError`?`no screen, window, or tab was available to capture`:t===`NotReadableError`||t===`AbortError`?n||t:n}const u=[`--clipboard`,`-c`,`--view`,`-v`,`--video`,`--audio`,`-g`],d=[`-V`,`--duration`];function f(e){let t=[];for(let n of e){let e=/^-V(\d+(?:\.\d+)?)$/.exec(n);if(e){t.push(`-V`,e[1]);continue}t.push(n)}return t}function p(e){return{stdout:``,stderr:`screencapture: ${e}\n`,exitCode:1}}function m(e,t){return!e&&!t?p(`browser APIs are unavailable in this environment`):e&&!o()&&!navigator.mediaDevices?.getDisplayMedia?p(`screen capture is not supported in this browser`):null}function h(e){let t=e.split(`.`).pop()?.toLowerCase();return t===`webm`||t===`mp4`||t===`mkv`}function g(e){switch(e.split(`.`).pop()?.toLowerCase()){case`jpg`:case`jpeg`:return`image/jpeg`;case`webp`:return`image/webp`;default:return`image/png`}}function _(e){return e.split(`.`).pop()?.toLowerCase()===`mp4`&&typeof MediaRecorder<`u`&&MediaRecorder.isTypeSupported(`video/mp4`)?`video/mp4`:`video/webm`}async function v(e,t,n){try{if(o()){let e=await s({kind:`screen`,mimeType:n.mimeType,quality:n.mode===`image`?n.quality:1,mode:n.mode,...n.mode===`video`?{durationMs:n.durationMs,audio:!!n.audio}:{}});return{bytes:e.bytes,mimeType:e.mimeType,...e.durationMs===void 0?{}:{durationMs:e.durationMs}}}if(e){let{captureDisplayMedia:e}=await import(`./screencapture-media-B1iFS6Qy.js`),t=await e(n);return{bytes:t.bytes,mimeType:t.mimeType,...t.durationMs===void 0?{}:{durationMs:t.durationMs}}}let r=await t.call(`screencapture`,{mimeType:n.mimeType,quality:n.mode===`image`?n.quality:1,mode:n.mode,...n.mode===`video`?{durationMs:n.durationMs,audio:!!n.audio}:{}},{timeoutMs:n.mode===`video`?3e5+n.durationMs:3e5});return{bytes:new Uint8Array(r.bytes),mimeType:r.mimeType,...r.durationMs===void 0?{}:{durationMs:r.durationMs}}}catch(e){return{error:p(l(e))}}}async function y(e,t,n,r){try{if(o()&&typeof document<`u`&&typeof document.hasFocus==`function`&&!document.hasFocus())return p(`clipboard capture needs a focused window; save to a file instead`);if(n){let n=await O(e,t),r=new ArrayBuffer(n.byteLength);new Uint8Array(r).set(n);let i=new Blob([r],{type:`image/png`});return await k(),await navigator.clipboard.write([new ClipboardItem({"image/png":i})]),{stdout:`captured ${Math.round(i.size/1024)} KB to clipboard\n`,stderr:``,exitCode:0}}return await r.call(`clipboard-write-image`,{bytes:e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength),mimeType:t},{timeoutMs:3e5}),{stdout:`captured ${Math.round(e.byteLength/1024)} KB to clipboard\n`,stderr:``,exitCode:0}}catch(e){return p(`failed to copy to clipboard: ${e instanceof Error?e.message:String(e)}`)}}async function b(e,t,r,i,o,s,c){let l=c.fs.resolvePath(c.cwd,t);try{await c.fs.writeFile(l,e)}catch(e){return p(`failed to write file: ${e instanceof Error?e.message:String(e)}`)}let u=Math.round(e.length/1024);return i&&!o?{stdout:`${l} (${u} KB)\n<img:data:${r};base64,${n(e)}>`,stderr:``,exitCode:0}:o?{stdout:`captured ${u} KB${s===void 0?``:` (${Math.round(s/100)/10}s)`} video to ${a(l)}\n`,stderr:``,exitCode:0}:{stdout:`captured ${u} KB to ${a(l)}\n`,stderr:``,exitCode:0}}function x(){return{stdout:`screencapture - capture screen, window, or tab using browser screen sharing
1
+ import{n as e,r as t}from"./panel-rpc-BPwAqRch.js";import{r as n}from"./base64-BPBW1Gzr.js";import{t as r}from"./subcommand-flags-BZi7j78Q.js";import{t as i}from"./subcommand-help-CgO7wRS5.js";import{i as a}from"./shared-C_68vn79.js";import{n as o,r as s}from"./screencapture-media-shared-DlK1Wqh8.js";import{n as c,t as l}from"./extension-media-capture-DMB4r9UQ.js";const u=[`--clipboard`,`-c`,`--view`,`-v`,`--video`,`--audio`,`-g`],d=[`-V`,`--duration`];function f(e){let t=[];for(let n of e){let e=/^-V(\d+(?:\.\d+)?)$/.exec(n);if(e){t.push(`-V`,e[1]);continue}t.push(n)}return t}function p(e){return{stdout:``,stderr:`screencapture: ${e}\n`,exitCode:1}}function m(e,t){return!e&&!t?p(`browser APIs are unavailable in this environment`):e&&!c()&&!navigator.mediaDevices?.getDisplayMedia?p(`screen capture is not supported in this browser`):null}function h(e){let t=e.split(`.`).pop()?.toLowerCase();return t===`webm`||t===`mp4`||t===`mkv`}function g(e){switch(e.split(`.`).pop()?.toLowerCase()){case`jpg`:case`jpeg`:return`image/jpeg`;case`webp`:return`image/webp`;default:return`image/png`}}function _(e){return e.split(`.`).pop()?.toLowerCase()===`mp4`&&typeof MediaRecorder<`u`&&MediaRecorder.isTypeSupported(`video/mp4`)?`video/mp4`:`video/webm`}async function v(e,t,n){try{if(c()){let e=await l({kind:`screen`,mimeType:n.mimeType,quality:n.mode===`image`?n.quality:1,mode:n.mode,...n.mode===`video`?{durationMs:n.durationMs,audio:!!n.audio}:{}});return{bytes:e.bytes,mimeType:e.mimeType,...e.durationMs===void 0?{}:{durationMs:e.durationMs}}}if(e){let{captureDisplayMedia:e}=await import(`./screencapture-media-BjmoKpyn.js`),t=await e(n);return{bytes:t.bytes,mimeType:t.mimeType,...t.durationMs===void 0?{}:{durationMs:t.durationMs}}}let r=await t.call(`screencapture`,{mimeType:n.mimeType,quality:n.mode===`image`?n.quality:1,mode:n.mode,...n.mode===`video`?{durationMs:n.durationMs,audio:!!n.audio}:{}},{timeoutMs:n.mode===`video`?3e5+n.durationMs:3e5});return{bytes:new Uint8Array(r.bytes),mimeType:r.mimeType,...r.durationMs===void 0?{}:{durationMs:r.durationMs}}}catch(e){return{error:p(s(e))}}}async function y(e,t,n,r){try{if(c()&&typeof document<`u`&&typeof document.hasFocus==`function`&&!document.hasFocus())return p(`clipboard capture needs a focused window; save to a file instead`);if(n){let n=await O(e,t),r=new ArrayBuffer(n.byteLength);new Uint8Array(r).set(n);let i=new Blob([r],{type:`image/png`});return await k(),await navigator.clipboard.write([new ClipboardItem({"image/png":i})]),{stdout:`captured ${Math.round(i.size/1024)} KB to clipboard\n`,stderr:``,exitCode:0}}return await r.call(`clipboard-write-image`,{bytes:e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength),mimeType:t},{timeoutMs:3e5}),{stdout:`captured ${Math.round(e.byteLength/1024)} KB to clipboard\n`,stderr:``,exitCode:0}}catch(e){return p(`failed to copy to clipboard: ${e instanceof Error?e.message:String(e)}`)}}async function b(e,t,r,i,o,s,c){let l=c.fs.resolvePath(c.cwd,t);try{await c.fs.writeFile(l,e)}catch(e){return p(`failed to write file: ${e instanceof Error?e.message:String(e)}`)}let u=Math.round(e.length/1024);return i&&!o?{stdout:`${l} (${u} KB)\n<img:data:${r};base64,${n(e)}>`,stderr:``,exitCode:0}:o?{stdout:`captured ${u} KB${s===void 0?``:` (${Math.round(s/100)/10}s)`} video to ${a(l)}\n`,stderr:``,exitCode:0}:{stdout:`captured ${u} KB to ${a(l)}\n`,stderr:``,exitCode:0}}function x(){return{stdout:`screencapture - capture screen, window, or tab using browser screen sharing
2
2
 
3
3
  Usage: screencapture [options] <output-file>
4
4
 
@@ -22,4 +22,4 @@ Examples:
22
22
  screencapture -v capture.png # Capture still for agent vision
23
23
  screencapture --video -V 10 clip.webm # 10s screen recording
24
24
  screencapture -V5 clip.webm # .webm implies video; 5s limit
25
- `,stderr:``,exitCode:0}}function S(e,t){return t.has(`-V`)||t.has(`--duration`)?!1:e.some(e=>e===`-V`||e===`--duration`)}function C(e){let t=f(e),n=r(t,{bool:u,value:d});if(`error`in n)return p(n.error);if(S(t,n.values))return p(`-V/--duration requires a value`);let i=n.bools.has(`--clipboard`)||n.bools.has(`-c`),a=n.bools.has(`--view`)||n.bools.has(`-v`),o=n.bools.has(`--audio`)||n.bools.has(`-g`),s=n.positionals[0],c=n.values.get(`-V`)??n.values.get(`--duration`);if(!i&&!s)return p(`output file required (or use -c for clipboard)`);let l=s||`screenshot.png`,m=n.bools.has(`--video`)||c!==void 0||h(l),g=w({wantVideo:m,toClipboard:i,view:a,audio:o,filename:l});if(g)return g;let _=T(m,c);return`error`in _?_.error:{toClipboard:i,view:a,audio:o,wantVideo:m,filename:l,..._.durationMs===void 0?{}:{durationMs:_.durationMs}}}function w(e){return e.wantVideo&&e.toClipboard?p(`video capture cannot go to the clipboard; save to a .webm file`):e.wantVideo&&e.view?p(`video capture cannot use --view; save to a file and open it`):e.audio&&!e.wantVideo?p(`-g/--audio requires video mode (--video or a .webm/.mp4 file)`):e.wantVideo&&!/\.(webm|mp4|mkv)$/i.test(e.filename)?p(`video capture requires a .webm (preferred), .mp4, or .mkv output file`):null}function T(e,t){if(t!==void 0){let e=Number(t);return!Number.isFinite(e)||e<=0?{error:p(`-V/--duration requires a positive number of seconds (got ${t})`)}:{durationMs:c(e*1e3)}}return e?{durationMs:c(void 0)}:{}}function E(e){if(e.wantVideo)return{mode:`video`,mimeType:_(e.filename),durationMs:e.durationMs??c(void 0),audio:e.audio};let t=g(e.filename);return{mode:`image`,mimeType:t,quality:t===`image/png`?1:.92}}async function D(n,r){if(i(n,{valueFlags:[...d]}))return x();let a=C(n);if(`exitCode`in a)return a;let o=t(),s=e(),c=m(o,s);if(c)return c;let l=await v(o,s,E(a));return`error`in l?l.error:a.toClipboard?y(l.bytes,l.mimeType,o,s):b(l.bytes,a.filename,l.mimeType,a.view,a.wantVideo,l.durationMs,r)}async function O(e,t){if(t===`image/png`)return e;let n=new ArrayBuffer(e.byteLength);new Uint8Array(n).set(e);let r=new Blob([n],{type:t}),i=URL.createObjectURL(r);try{let e=new Image;await new Promise((t,n)=>{e.onload=()=>t(),e.onerror=()=>n(Error(`Failed to load image for conversion`)),e.src=i});let t=document.createElement(`canvas`);t.width=e.width,t.height=e.height;let n=t.getContext(`2d`);if(!n)throw Error(`Failed to get canvas context`);n.drawImage(e,0,0);let r=await new Promise((e,n)=>{t.toBlob(t=>t?e(t):n(Error(`Failed to create PNG blob`)),`image/png`)});return new Uint8Array(await r.arrayBuffer())}finally{URL.revokeObjectURL(i)}}async function k(e=3e5){typeof document>`u`||typeof document.hasFocus==`function`&&(document.hasFocus()||await new Promise((t,n)=>{let r=()=>{window.removeEventListener(`focus`,i),document.removeEventListener(`visibilitychange`,a),clearTimeout(o)},i=()=>{document.hasFocus()&&(r(),t())},a=()=>{document.visibilityState===`visible`&&document.hasFocus()&&(r(),t())},o=setTimeout(()=>{r(),n(Error(`timed out waiting for window focus`))},e);window.addEventListener(`focus`,i),document.addEventListener(`visibilitychange`,a)}))}export{l as n,D as runScreencapture,c as t};
25
+ `,stderr:``,exitCode:0}}function S(e,t){return t.has(`-V`)||t.has(`--duration`)?!1:e.some(e=>e===`-V`||e===`--duration`)}function C(e){let t=f(e),n=r(t,{bool:u,value:d});if(`error`in n)return p(n.error);if(S(t,n.values))return p(`-V/--duration requires a value`);let i=n.bools.has(`--clipboard`)||n.bools.has(`-c`),a=n.bools.has(`--view`)||n.bools.has(`-v`),o=n.bools.has(`--audio`)||n.bools.has(`-g`),s=n.positionals[0],c=n.values.get(`-V`)??n.values.get(`--duration`);if(!i&&!s)return p(`output file required (or use -c for clipboard)`);let l=s||`screenshot.png`,m=n.bools.has(`--video`)||c!==void 0||h(l),g=w({wantVideo:m,toClipboard:i,view:a,audio:o,filename:l});if(g)return g;let _=T(m,c);return`error`in _?_.error:{toClipboard:i,view:a,audio:o,wantVideo:m,filename:l,..._.durationMs===void 0?{}:{durationMs:_.durationMs}}}function w(e){return e.wantVideo&&e.toClipboard?p(`video capture cannot go to the clipboard; save to a .webm file`):e.wantVideo&&e.view?p(`video capture cannot use --view; save to a file and open it`):e.audio&&!e.wantVideo?p(`-g/--audio requires video mode (--video or a .webm/.mp4 file)`):e.wantVideo&&!/\.(webm|mp4|mkv)$/i.test(e.filename)?p(`video capture requires a .webm (preferred), .mp4, or .mkv output file`):null}function T(e,t){if(t!==void 0){let e=Number(t);return!Number.isFinite(e)||e<=0?{error:p(`-V/--duration requires a positive number of seconds (got ${t})`)}:{durationMs:o(e*1e3)}}return e?{durationMs:o(void 0)}:{}}function E(e){if(e.wantVideo)return{mode:`video`,mimeType:_(e.filename),durationMs:e.durationMs??o(void 0),audio:e.audio};let t=g(e.filename);return{mode:`image`,mimeType:t,quality:t===`image/png`?1:.92}}async function D(n,r){if(i(n,{valueFlags:[...d]}))return x();let a=C(n);if(`exitCode`in a)return a;let o=t(),s=e(),c=m(o,s);if(c)return c;let l=await v(o,s,E(a));return`error`in l?l.error:a.toClipboard?y(l.bytes,l.mimeType,o,s):b(l.bytes,a.filename,l.mimeType,a.view,a.wantVideo,l.durationMs,r)}async function O(e,t){if(t===`image/png`)return e;let n=new ArrayBuffer(e.byteLength);new Uint8Array(n).set(e);let r=new Blob([n],{type:t}),i=URL.createObjectURL(r);try{let e=new Image;await new Promise((t,n)=>{e.onload=()=>t(),e.onerror=()=>n(Error(`Failed to load image for conversion`)),e.src=i});let t=document.createElement(`canvas`);t.width=e.width,t.height=e.height;let n=t.getContext(`2d`);if(!n)throw Error(`Failed to get canvas context`);n.drawImage(e,0,0);let r=await new Promise((e,n)=>{t.toBlob(t=>t?e(t):n(Error(`Failed to create PNG blob`)),`image/png`)});return new Uint8Array(await r.arrayBuffer())}finally{URL.revokeObjectURL(i)}}async function k(e=3e5){typeof document>`u`||typeof document.hasFocus==`function`&&(document.hasFocus()||await new Promise((t,n)=>{let r=()=>{window.removeEventListener(`focus`,i),document.removeEventListener(`visibilitychange`,a),clearTimeout(o)},i=()=>{document.hasFocus()&&(r(),t())},a=()=>{document.visibilityState===`visible`&&document.hasFocus()&&(r(),t())},o=setTimeout(()=>{r(),n(Error(`timed out waiting for window focus`))},e);window.addEventListener(`focus`,i),document.addEventListener(`visibilitychange`,a)}))}export{D as runScreencapture};
@@ -1 +1 @@
1
- import{t as e}from"./logger-DDBAeTLF.js";import"./proxied-fetch-DyBveeCl.js";import{a as t,t as n}from"./api-endpoint-DGxXvrur.js";import{n as r}from"./float-topology-YtctpJaG.js";import"./secret-topology-DLJBhHOi.js";import{n as i}from"./secrets-bridge-client--VZ3E0yk.js";function a(e){return/^[A-Za-z_][A-Za-z0-9_]*$/.test(e)}var o=e(`secret-env`),s=1e4;function c(e){let t={},n;for(let r of e)!r?.name||!r?.maskedValue||(r.name===`oauth.github.token`&&(n=r.maskedValue),a(r.name)&&(t[r.name]=r.maskedValue));return n&&(t.GITHUB_TOKEN===void 0&&(t.GITHUB_TOKEN=n),t.GH_TOKEN===void 0&&(t.GH_TOKEN=n)),t}async function l(){let e=r();if(e===`extension-direct`)return new Promise(e=>{chrome.runtime.sendMessage({type:`secrets.list-masked-entries`},t=>{let n=c(t?.entries??[]);Object.keys(n).length>0&&o.info(`Loaded masked secrets into shell env from SW`,{count:Object.keys(n).length}),e(n)})});if(e===`extension-delegate`)try{let e=c((await i(`secrets.list-masked-entries`))?.entries??[]);return Object.keys(e).length>0&&o.info(`Loaded masked secrets into shell env from bridge`,{count:Object.keys(e).length}),e}catch(e){return o.debug(`Bridge list-masked-entries failed`,{error:e instanceof Error?e.message:String(e)}),{}}if(e===`connect`)return{};try{let e=await fetch(t(`/api/secrets/masked`),{headers:n(),signal:AbortSignal.timeout(s)});if(!e.ok)return o.warn(`Failed to fetch masked secrets`,{status:e.status}),{};let r=await e.json();if(!Array.isArray(r)||r.length===0)return{};let i=c(r);return Object.keys(i).length>0&&o.info(`Loaded masked secrets into shell env`,{count:Object.keys(i).length}),i}catch(e){return o.debug(`Could not fetch masked secrets (server may be unavailable)`,{error:e instanceof Error?e.message:String(e)}),{}}}export{l as fetchSecretEnvVars};
1
+ import{t as e}from"./logger-DDBAeTLF.js";import"./proxied-fetch-CnCvBaGV.js";import{a as t,t as n}from"./api-endpoint-DGxXvrur.js";import{n as r}from"./float-topology-CyZCUfkj.js";import"./secret-topology-BrobAGSV.js";import{n as i}from"./secrets-bridge-client-BJqZCK6Q.js";function a(e){return/^[A-Za-z_][A-Za-z0-9_]*$/.test(e)}var o=e(`secret-env`),s=1e4;function c(e){let t={},n;for(let r of e)!r?.name||!r?.maskedValue||(r.name===`oauth.github.token`&&(n=r.maskedValue),a(r.name)&&(t[r.name]=r.maskedValue));return n&&(t.GITHUB_TOKEN===void 0&&(t.GITHUB_TOKEN=n),t.GH_TOKEN===void 0&&(t.GH_TOKEN=n)),t}async function l(){let e=r();if(e===`extension-direct`)return new Promise(e=>{chrome.runtime.sendMessage({type:`secrets.list-masked-entries`},t=>{let n=c(t?.entries??[]);Object.keys(n).length>0&&o.info(`Loaded masked secrets into shell env from SW`,{count:Object.keys(n).length}),e(n)})});if(e===`extension-delegate`)try{let e=c((await i(`secrets.list-masked-entries`))?.entries??[]);return Object.keys(e).length>0&&o.info(`Loaded masked secrets into shell env from bridge`,{count:Object.keys(e).length}),e}catch(e){return o.debug(`Bridge list-masked-entries failed`,{error:e instanceof Error?e.message:String(e)}),{}}if(e===`connect`)return{};try{let e=await fetch(t(`/api/secrets/masked`),{headers:n(),signal:AbortSignal.timeout(s)});if(!e.ok)return o.warn(`Failed to fetch masked secrets`,{status:e.status}),{};let r=await e.json();if(!Array.isArray(r)||r.length===0)return{};let i=c(r);return Object.keys(i).length>0&&o.info(`Loaded masked secrets into shell env`,{count:Object.keys(i).length}),i}catch(e){return o.debug(`Could not fetch masked secrets (server may be unavailable)`,{error:e instanceof Error?e.message:String(e)}),{}}}export{l as fetchSecretEnvVars};
@@ -0,0 +1 @@
1
+ import"./float-topology-CyZCUfkj.js";
@@ -1 +1 @@
1
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./port-bridge-client-Dn8JtUyP.js";var n=t({portName:`secrets.crud`,panelRpcOp:`secrets-bridge`,timeoutMs:1e4,onUnavailable:`resolve-undefined`,makeError:e=>Error(e),logNamespace:`secrets-bridge`,toPortMessage:({type:e,payload:t})=>({type:e,...t}),toPanelRpcPayload:({type:e,payload:t})=>({type:e,payload:t})});function r(e,t){return n({type:e,payload:t})}var i=e({callSecretsBridge:()=>r});export{r as n,i as t};
1
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./port-bridge-client-CZFX4fUT.js";var n=t({portName:`secrets.crud`,panelRpcOp:`secrets-bridge`,timeoutMs:1e4,onUnavailable:`resolve-undefined`,makeError:e=>Error(e),logNamespace:`secrets-bridge`,toPortMessage:({type:e,payload:t})=>({type:e,...t}),toPanelRpcPayload:({type:e,payload:t})=>({type:e,payload:t})});function r(e,t){return n({type:e,payload:t})}var i=e({callSecretsBridge:()=>r});export{r as n,i as t};
@@ -1 +1 @@
1
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./port-bridge-client-Ds3xwapn.js";var n=e({callSecretsBridge:()=>i});const r=t({portName:`secrets.crud`,panelRpcOp:`secrets-bridge`,timeoutMs:1e4,onUnavailable:`resolve-undefined`,makeError:e=>Error(e),logNamespace:`secrets-bridge`,toPortMessage:({type:e,payload:t})=>({type:e,...t}),toPanelRpcPayload:({type:e,payload:t})=>({type:e,payload:t})});function i(e,t){return r({type:e,payload:t})}export{n,i as t};
1
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./port-bridge-client-CkkC3v5w.js";var n=e({callSecretsBridge:()=>i});const r=t({portName:`secrets.crud`,panelRpcOp:`secrets-bridge`,timeoutMs:1e4,onUnavailable:`resolve-undefined`,makeError:e=>Error(e),logNamespace:`secrets-bridge`,toPortMessage:({type:e,payload:t})=>({type:e,...t}),toPanelRpcPayload:({type:e,payload:t})=>({type:e,payload:t})});function i(e,t){return r({type:e,payload:t})}export{n,i as t};