sliccy 6.167.0 → 6.169.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 (250) hide show
  1. package/README.md +6 -5
  2. package/dist/node-server/_shared/agent-wire-types.d.ts +9 -1
  3. package/dist/node-server/_shared/agent-wire-types.d.ts.map +1 -1
  4. package/dist/node-server/_shared/computer-protocol.d.ts +2 -0
  5. package/dist/node-server/_shared/computer-protocol.d.ts.map +1 -1
  6. package/dist/node-server/_shared/tray-sync-protocol.d.ts +119 -3
  7. package/dist/node-server/_shared/tray-sync-protocol.d.ts.map +1 -1
  8. package/dist/node-server/_shared/tray-sync-protocol.js +132 -2
  9. package/dist/node-server/_shared/tray-sync-protocol.js.map +1 -1
  10. package/dist/node-server/computer-demo.d.ts +36 -0
  11. package/dist/node-server/computer-demo.js +126 -0
  12. package/dist/node-server/index.js +13 -3
  13. package/dist/node-server/runtime-flags.d.ts +2 -0
  14. package/dist/node-server/runtime-flags.js +5 -0
  15. package/dist/ui/.vite/manifest.json +275 -260
  16. package/dist/ui/assets/{SKILL-BGEZa-y0.js → SKILL-BTHo2BzY.js} +1 -1
  17. package/dist/ui/assets/{SKILL-Bpepfqq0.js → SKILL-BULOq3ys.js} +1 -1
  18. package/dist/ui/assets/{SKILL-DEFDsScb.js → SKILL-CLL4Q13w.js} +1 -1
  19. package/dist/ui/assets/SKILL-maxwOcxi.js +1 -0
  20. package/dist/ui/assets/{account-store-B05_LKnj.js → account-store-C0smCH0b.js} +1 -1
  21. package/dist/ui/assets/{account-store-CNTI4kr_.js → account-store-_oWY-N-g.js} +2 -2
  22. package/dist/ui/assets/{adobe-nu3irXcy.js → adobe-D8bfhWFa.js} +1 -1
  23. package/dist/ui/assets/{adobe-CRRWEbtf.js → adobe-i2veKh2G.js} +2 -2
  24. package/dist/ui/assets/{agent-panels-DvH_qfTh.js → agent-panels-Bt83ejkl.js} +1 -1
  25. package/dist/ui/assets/{almost-bash-shell-headless-BA5r_r61.js → almost-bash-shell-headless-CXYALRet.js} +521 -582
  26. package/dist/ui/assets/{apply-layout-CASSSWEy.js → apply-layout-C4DuaXQ1.js} +1 -1
  27. package/dist/ui/assets/approval-timeout-BQ29Z0gf.js +1 -0
  28. package/dist/ui/assets/{apps-BGe9_zJ7.js → apps-DpExQYs8.js} +1 -1
  29. package/dist/ui/assets/{azure-openai-C-Iw82HZ.js → azure-openai-CGgFuiTh.js} +1 -1
  30. package/dist/ui/assets/{azure-openai-DuJciOKd.js → azure-openai-Cm0dqkf0.js} +1 -1
  31. package/dist/ui/assets/{backend-hostfs-DdAVlPMP.js → backend-hostfs-BZXs8PNk.js} +1 -1
  32. package/dist/ui/assets/browser-DuyhpHbR.js +1 -0
  33. package/dist/ui/assets/{capability-C2eJ1wdx.js → capability-SIitRcq_.js} +2 -2
  34. package/dist/ui/assets/{cdp-DG8TVjf3.js → cdp-UL1FYYjc.js} +2 -2
  35. package/dist/ui/assets/{cerebras-Xadzrxfp.js → cerebras-BEKAS5HH.js} +1 -1
  36. package/dist/ui/assets/{cerebras-BXwtUxTj.js → cerebras-nQZqQsKF.js} +1 -1
  37. package/dist/ui/assets/{client-BDN4zG90.js → client-_vVqanZy.js} +1 -1
  38. package/dist/ui/assets/{composer-speech-_uq5e0Bo.js → composer-speech-BPb0h67H.js} +1 -1
  39. package/dist/ui/assets/{connect-surface-odDz37TJ.js → connect-surface-EJ0FRStY.js} +1 -1
  40. package/dist/ui/assets/context-compaction-Dpr7xgBZ.js +58 -0
  41. package/dist/ui/assets/core-DWdpOAZd.js +62 -0
  42. package/dist/ui/assets/core-w0-0FXns.js +36 -0
  43. package/dist/ui/assets/{directed-approval-D_AXAvuz.js → directed-approval-CPSbebEZ.js} +1 -1
  44. package/dist/ui/assets/{discovery-preference-TziZ7Yxu.js → discovery-preference-G3mw_EUO.js} +1 -1
  45. package/dist/ui/assets/encode-frame-30wbFN-H.js +1 -0
  46. package/dist/ui/assets/engine-CzMNXd8U.js +1 -0
  47. package/dist/ui/assets/{ensure-speech-assets-DTj236n-.js → ensure-speech-assets-DPjgwmlG.js} +1 -1
  48. package/dist/ui/assets/es-DJTRBqjm.js +52 -0
  49. package/dist/ui/assets/{extension-ops-DNPAsYbK.js → extension-ops-B2RMipFn.js} +1 -1
  50. package/dist/ui/assets/{float-topology-CurCyQFy.js → float-topology-CyZCUfkj.js} +1 -1
  51. package/dist/ui/assets/{follower-navigate-watcher-C98XMw_C.js → follower-navigate-watcher-BAstHBQ5.js} +1 -1
  52. package/dist/ui/assets/frames-7E6RloFP.js +1 -0
  53. package/dist/ui/assets/{frozen-archive-writer-BIzZxx8R.js → frozen-archive-writer-rq_r_D3R.js} +2 -2
  54. package/dist/ui/assets/{fs-CJs9n90Q.js → fs-B9TgYyVA.js} +2 -2
  55. package/dist/ui/assets/{fs-Bq8bUwe2.js → fs-KJBUdRz_.js} +1 -1
  56. package/dist/ui/assets/{gelatiere-store-BY0hZvSS.js → gelatiere-store-DIE4b-Va.js} +1 -1
  57. package/dist/ui/assets/gelatiere-unit-wx8F8dnF.js +1 -0
  58. package/dist/ui/assets/{github-D1gd3q6u.js → github-CgEE40ok.js} +2 -2
  59. package/dist/ui/assets/{github-uDwUwz5H.js → github-_GgWC1Vq.js} +1 -1
  60. package/dist/ui/assets/{github-auth-CzzE1eDf.js → github-auth-Ba7C_Kly.js} +1 -1
  61. package/dist/ui/assets/{github-copilot-Bx2lXrwK.js → github-copilot-jobL3_Cf.js} +1 -1
  62. package/dist/ui/assets/{github-copilot-DidNEEe_.js → github-copilot-rsfkYfvK.js} +1 -1
  63. package/dist/ui/assets/{github-install--_xp8s-S.js → github-install-DtlYn56m.js} +1 -1
  64. package/dist/ui/assets/{github-zip-Bs35nBig.js → github-zip-BanSb9qW.js} +1 -1
  65. package/dist/ui/assets/{guest-tool-gate-B-lZT9hl.js → guest-tool-gate-C6sp1l3H.js} +1 -1
  66. package/dist/ui/assets/{hear-BNmJphKg.js → hear-zSghqsv6.js} +1 -1
  67. package/dist/ui/assets/{help-C7Nq107k.js → help-BkjaKwT1.js} +1 -1
  68. package/dist/ui/assets/{host-iTtS0MRF.js → host-BjOvrhMS.js} +1 -1
  69. package/dist/ui/assets/host-command-XUdketMY.js +28 -0
  70. package/dist/ui/assets/icons-BMNa26vG.js +1 -0
  71. package/dist/ui/assets/idle-compaction-CwYw083A.js +1 -0
  72. package/dist/ui/assets/{installer-C0xiAs69.js → installer-CYXMipeW.js} +1 -1
  73. package/dist/ui/assets/interrupted-work-recovery-p8rpTJ6o.js +1 -0
  74. package/dist/ui/assets/{isomorphic-git-B7et_8Xe.js → isomorphic-git-B9eVtfwq.js} +10 -10
  75. package/dist/ui/assets/{isomorphic-git-D2fV6xS-.js → isomorphic-git-DXMEKpHT.js} +7 -7
  76. package/dist/ui/assets/{js-realm-worker-B9Rz0g1p.js → js-realm-worker-B9VuUz7Q.js} +2 -2
  77. package/dist/ui/assets/{jsh-executor-C7QPZ2Qr.js → jsh-executor-BhNH2E0v.js} +4 -4
  78. package/dist/ui/assets/{jsh-runtime-extensions-ddeGEOUw.js → jsh-runtime-extensions-CmdnQhXG.js} +1 -1
  79. package/dist/ui/assets/kernel-worker-CBI5EKGn.js +1186 -0
  80. package/dist/ui/assets/keys-Bluq5eTH.js +1 -0
  81. package/dist/ui/assets/lick-urls-CgPiVwD-.js +1 -0
  82. package/dist/ui/assets/{lick-ws-bridge-BcAhlead.js → lick-ws-bridge-BFrcBnVV.js} +1 -1
  83. package/dist/ui/assets/lick-ws-bridge-DVoxwaqS.js +1 -0
  84. package/dist/ui/assets/{live-session-snapshot-COMr2v0o.js → live-session-snapshot-Cw5xb5EQ.js} +1 -1
  85. package/dist/ui/assets/{local-llm-DdGb9WMG.js → local-llm-BRe_Kttg.js} +1 -1
  86. package/dist/ui/assets/{local-llm-DqeU7kV3.js → local-llm-C7T1M_NI.js} +1 -1
  87. package/dist/ui/assets/{main-jc6OS8lz.js → main-BfonTdzP.js} +3 -3
  88. package/dist/ui/assets/{main-cherry-BGZmJFd_.js → main-cherry-Cty_ShgD.js} +1 -1
  89. package/dist/ui/assets/{memory-curation-seam-B8pprlUo.js → memory-curation-seam-dmTVk3Ov.js} +1 -1
  90. package/dist/ui/assets/{memory-health-CGkpyA7o.js → memory-health-9iNdh0Ac.js} +1 -1
  91. package/dist/ui/assets/memory-v2-flag-D4biUAiV.js +1 -0
  92. package/dist/ui/assets/{memory-write-execute-B-ahXjaO.js → memory-write-execute-C9xS6Q1z.js} +1 -1
  93. package/dist/ui/assets/{mount-FkNAB0be.js → mount-B_VZbcPY.js} +1 -1
  94. package/dist/ui/assets/{mount-BzdPNQoA.js → mount-Bq4ov4Wg.js} +3 -3
  95. package/dist/ui/assets/{mount-bridge-client-BO0N4wwP.js → mount-bridge-client-BOZDQLbT.js} +1 -1
  96. package/dist/ui/assets/{mount-bridge-client-CRnohfom.js → mount-bridge-client-BRywSH1d.js} +1 -1
  97. package/dist/ui/assets/{mv-DRuZuDHt.js → mv-BE_lEtyG.js} +1 -1
  98. package/dist/ui/assets/{new-session-B8iOhaK0.js → new-session-BJqFQPRu.js} +2 -2
  99. package/dist/ui/assets/{oauth-bootstrap-B9PwK4-d.js → oauth-bootstrap-CFXmccC5.js} +2 -2
  100. package/dist/ui/assets/{oauth-service-UTPOqIwj.js → oauth-service-CRmx6zI1.js} +1 -1
  101. package/dist/ui/assets/{oauth-service-Bkaz0Dt4.js → oauth-service-WTeDvR5m.js} +1 -1
  102. package/dist/ui/assets/{onboarding-orchestrator-Cc8Glrem.js → onboarding-orchestrator-M3HJvymL.js} +1 -1
  103. package/dist/ui/assets/{openai-codex-BrQ1tsgu.js → openai-codex-BWGWiycb.js} +1 -1
  104. package/dist/ui/assets/{openai-codex-DmHr_2RR.js → openai-codex-NAo35j43.js} +1 -1
  105. package/dist/ui/assets/{openrouter-BvM36eS5.js → openrouter-Bhxgi8JW.js} +1 -1
  106. package/dist/ui/assets/{openrouter-free-CFBzPY5J.js → openrouter-free-DersFAEc.js} +1 -1
  107. package/dist/ui/assets/{openrouter-free-CUKlyrhq.js → openrouter-free-Dl2pScMt.js} +1 -1
  108. package/dist/ui/assets/{openrouter-oauth-DOdpRMfw.js → openrouter-oauth-C3bVnGt2.js} +1 -1
  109. package/dist/ui/assets/{openrouter-oauth-RC0CxY4X.js → openrouter-oauth-DW4_wGaN.js} +1 -1
  110. package/dist/ui/assets/{openrouter-C6WDBJvB.js → openrouter-sloSkMqY.js} +1 -1
  111. package/dist/ui/assets/{opfs-mount-B78yj9gx.js → opfs-mount-FspqzE40.js} +1 -1
  112. package/dist/ui/assets/{page-approval-service-Dy-UA1aK.js → page-approval-service-BkqDCbBQ.js} +1 -1
  113. package/dist/ui/assets/panel-rpc-handlers-CwCdqXzk.js +2 -0
  114. package/dist/ui/assets/{panelize-shell-CFPiIneK.js → panelize-shell-c-tVlGNY.js} +1 -1
  115. package/dist/ui/assets/{pi-edit-execution-BDl_Xp_M.js → pi-edit-execution-Brw1YFDp.js} +1 -1
  116. package/dist/ui/assets/{port-bridge-client-ff8DctEN.js → port-bridge-client-CZFX4fUT.js} +1 -1
  117. package/dist/ui/assets/{port-bridge-client-H03Pohgj.js → port-bridge-client-CkkC3v5w.js} +1 -1
  118. package/dist/ui/assets/{provider-1ByYSphI.js → provider-C7zRpxoe.js} +2 -2
  119. package/dist/ui/assets/{provider-Df8LFEZ7.js → provider-DsHcYBTa.js} +1 -1
  120. package/dist/ui/assets/{provider-settings-Bk-fk9dp.js → provider-settings-BKCma-Jb.js} +1 -1
  121. package/dist/ui/assets/provider-store-access-BfDZO7Ly.js +1 -0
  122. package/dist/ui/assets/provider-store-access-CYticOn7.js +1 -0
  123. package/dist/ui/assets/{providers-T_FH_8cU.js → providers-DDnH2Ikl.js} +1 -1
  124. package/dist/ui/assets/{providers-Q92pCQ8h.js → providers-DEiO6D-5.js} +2 -2
  125. package/dist/ui/assets/{proxied-fetch-DARKNygr.js → proxied-fetch-CPL8wJM2.js} +1 -1
  126. package/dist/ui/assets/{proxied-fetch-Bl8AeYdt.js → proxied-fetch-CnCvBaGV.js} +1 -1
  127. package/dist/ui/assets/{quick-llm-CbGHjrhX.js → quick-llm-tSDpCXxR.js} +1 -1
  128. package/dist/ui/assets/{realm-inprocess-CWMnXeN3.js → realm-inprocess-BKygqrOz.js} +6 -6
  129. package/dist/ui/assets/{recovery-screen-DhUqOdby.js → recovery-screen-D6-sXNj7.js} +1 -1
  130. package/dist/ui/assets/{redirect-uri-Dd0j1fSp.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/{rest-ops-CQOwDiTR.js → rest-ops-Yu_dXm4T.js} +1 -1
  133. package/dist/ui/assets/{rest-ops-DkUeDpiM.js → rest-ops-aP40ni1y.js} +1 -1
  134. package/dist/ui/assets/{restore-CVkulBmU.js → restore-C-ey_KSq.js} +1 -1
  135. package/dist/ui/assets/{run-B-t7kWH3.js → run-BEs473Sp.js} +1 -1
  136. package/dist/ui/assets/{run-COfTem8j.js → run-BSBxWJ5B.js} +1 -1
  137. package/dist/ui/assets/{run-ZmpHaamT.js → run-C3DRjgOJ.js} +2 -2
  138. package/dist/ui/assets/run-C_dx5nR2.js +91 -0
  139. package/dist/ui/assets/{run-IexPmM2B.js → run-CeJrX6mR.js} +2 -2
  140. package/dist/ui/assets/{run-DuW-7oJj.js → run-CfS1uOdY.js} +4 -4
  141. package/dist/ui/assets/{run-BX9uHbIi.js → run-DZtlriWZ.js} +1 -1
  142. package/dist/ui/assets/{run-CUCg2cJM.js → run-TEAp1X-0.js} +2 -2
  143. package/dist/ui/assets/run-ywBpFa_c.js +77 -0
  144. package/dist/ui/assets/{run-DgVV_DFr.js → run-zO91KPbj.js} +3 -3
  145. package/dist/ui/assets/screen-s6LdF1JP.js +1 -0
  146. package/dist/ui/assets/screen-share-approval-live-D388fVD9.js +1 -0
  147. package/dist/ui/assets/screencapture-media-BjmoKpyn.js +1 -0
  148. package/dist/ui/assets/screencapture-media-CM5E2g6c.js +1 -0
  149. package/dist/ui/assets/screencapture-media-shared-DlK1Wqh8.js +1 -0
  150. package/dist/ui/assets/{screencapture-run-yMA5c_HS.js → screencapture-run-zmx5QKf_.js} +2 -2
  151. package/dist/ui/assets/{secret-env-BhWGz7yx.js → secret-env-DgrZZVFU.js} +1 -1
  152. package/dist/ui/assets/secret-topology-BrobAGSV.js +1 -0
  153. package/dist/ui/assets/{secrets-bridge-client-C0tvQeuX.js → secrets-bridge-client-BJqZCK6Q.js} +1 -1
  154. package/dist/ui/assets/{secrets-bridge-client-BS3V1JBF.js → secrets-bridge-client-CeK7HpDf.js} +1 -1
  155. package/dist/ui/assets/{session-command-memory-DzuRy-nC.js → session-command-memory-B0lDqCR9.js} +2 -2
  156. package/dist/ui/assets/{session-jsonl-iOOR_32X.js → session-jsonl-C8ClVNxB.js} +1 -1
  157. package/dist/ui/assets/{session-jsonl-D01HYAS2.js → session-jsonl-DQNfKRsT.js} +1 -1
  158. package/dist/ui/assets/{session-search-index-CABvtt-r.js → session-search-index-BT4ZJZt7.js} +2 -2
  159. package/dist/ui/assets/{setup-feature-flags-remote-CvstKwBW.js → setup-feature-flags-remote-BGRjwc3Y.js} +1 -1
  160. package/dist/ui/assets/{signed-fetch-7NwdVmf1.js → signed-fetch-CNiA3vB6.js} +1 -1
  161. package/dist/ui/assets/{silent-renew-backoff-CXHqSiPb.js → silent-renew-backoff-DrQ0_tES.js} +1 -1
  162. package/dist/ui/assets/slicc-version-nVz--RAg.js +1 -0
  163. package/dist/ui/assets/{snapshot-BcYaw9Ip.js → snapshot-DXOlM8V_.js} +1 -1
  164. package/dist/ui/assets/{snapshot-features-3xslkGtL.js → snapshot-features-D_DeQAxH.js} +1 -1
  165. package/dist/ui/assets/{soundscape-TygolFwj.js → soundscape-CYcg-DKm.js} +1 -1
  166. package/dist/ui/assets/{speak-BCLm04Z2.js → speak-Br_kDtG8.js} +1 -1
  167. package/dist/ui/assets/{sprinkle-manager-DDzNanda.js → sprinkle-manager-DpsA1UkN.js} +1 -1
  168. package/dist/ui/assets/{sprinkle-renderer-B-CADNjq.js → sprinkle-renderer-q0STe7tk.js} +5 -2
  169. package/dist/ui/assets/ssh-CrZ29b93.js +6 -0
  170. package/dist/ui/assets/{state-BCTAzK_L.js → state-edQbuMHp.js} +1 -1
  171. package/dist/ui/assets/{store-C-AW4ogv.js → store-BJb3HsiM.js} +1 -1
  172. package/dist/ui/assets/{store-CzlK9KIc.js → store-BYzp8NI8.js} +1 -1
  173. package/dist/ui/assets/{sudo-BtkDnUA_.js → sudo-DaUFGZ5z.js} +1 -1
  174. package/dist/ui/assets/sudo-fs-C6r_MIIY.js +3 -0
  175. package/dist/ui/assets/{supervisor-B6-QPxI3.js → supervisor-BGSiMwrr.js} +1 -1
  176. package/dist/ui/assets/{sync-dialog-B4G7kCwj.js → sync-dialog-D72P64lv.js} +1 -1
  177. package/dist/ui/assets/tab-CgwpvlHH.js +1 -0
  178. package/dist/ui/assets/tool-ui-DRnUkp2g.js +1 -0
  179. package/dist/ui/assets/{transformers-env-1TbBNkOp.js → transformers-env-BKCNBfWr.js} +1 -1
  180. package/dist/ui/assets/{tray-leader-_KISvFyF.js → tray-leader-DEBMxUkS.js} +1 -1
  181. package/dist/ui/assets/{lick-urls-DdKPDlgq.js → tray-leader-status-CpkFr6n7.js} +1 -1
  182. package/dist/ui/assets/{tray-leave-runtime-CRsRkPHc.js → tray-leave-runtime-D3LaARDy.js} +1 -1
  183. package/dist/ui/assets/{tray-runtime-config-BVgVR3H2.js → tray-runtime-config-dyxCfUex.js} +1 -1
  184. package/dist/ui/assets/{tray-sidecar-BRvCb-i7.js → tray-sidecar-Bfcy9pO0.js} +1 -1
  185. package/dist/ui/assets/turn-journal-CyInnakf.js +1 -0
  186. package/dist/ui/assets/{upgrade-detection-C5daiUbn.js → upgrade-detection-BZooMFxg.js} +1 -1
  187. package/dist/ui/assets/{upskill-lick-skip-C2ZQ0c2-.js → upskill-lick-skip-H5RyeNIq.js} +1 -1
  188. package/dist/ui/assets/url-SK-_tyJs.js +1 -0
  189. package/dist/ui/assets/v86-BinbB-8j.js +1 -0
  190. package/dist/ui/assets/{voice-reply-Dk4ztuZL.js → voice-reply-ClwwZfjh.js} +1 -1
  191. package/dist/ui/assets/{wc-attach-CFj2ZF5_.js → wc-attach-DpNELhNG.js} +2 -2
  192. package/dist/ui/assets/{wc-browser-BFL2Tl8W.js → wc-browser-6X1_NRym.js} +1 -1
  193. package/dist/ui/assets/wc-computers-2bCwocOU.js +3 -0
  194. package/dist/ui/assets/{wc-detached-ncc8KuL1.js → wc-detached-sDWnNsaX.js} +1 -1
  195. package/dist/ui/assets/{wc-extension-DppNe2VK.js → wc-extension-CF_DQHCJ.js} +2 -2
  196. package/dist/ui/assets/{wc-follower-CcxFCW-y.js → wc-follower-BlgNQHR9.js} +3 -3
  197. package/dist/ui/assets/wc-follower-oauth-BBtoYPP3.js +5 -0
  198. package/dist/ui/assets/{wc-gelatiere-CANPh9TU.js → wc-gelatiere-Pgs78krZ.js} +1 -1
  199. package/dist/ui/assets/wc-live-D3BfBbnn.js +427 -0
  200. package/dist/ui/assets/{wc-nav-BlLpBAJG.js → wc-nav-CDV8ylGr.js} +2 -2
  201. package/dist/ui/assets/{wc-onboarding-OKaUOQ3X.js → wc-onboarding-CpKS7u3d.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-BrX9-mPv.js → wc-placeholder-BwY4p0ld.js} +3 -3
  204. package/dist/ui/assets/{wc-secret-request-QPmTs_eW.js → wc-secret-request-HU2msCsY.js} +1 -1
  205. package/dist/ui/assets/{wc-settings-BFgFDtTk.js → wc-settings-OTZDaEtj.js} +3 -3
  206. package/dist/ui/assets/{wc-shell-CCKjmASt.js → wc-shell-M1btJNO6.js} +9 -5
  207. package/dist/ui/assets/{wc-shortcut-config-CeUoljrV.js → wc-shortcut-config-BgTHSt0X.js} +1 -1
  208. package/dist/ui/assets/{wc-sprinkles-BNp18_jW.js → wc-sprinkles-DoKzhGCE.js} +2 -2
  209. package/dist/ui/assets/{wc-transcript-export-DJnnZ8L-.js → wc-transcript-export-CxB6cd8_.js} +2 -2
  210. package/dist/ui/assets/wc-tray-BTgAee3m.js +5 -0
  211. package/dist/ui/assets/welcome-detection-Bvx3sh1_.js +1 -0
  212. package/dist/ui/assets/{whisper-session-CMiImrJg.js → whisper-session-Bjyp9kUa.js} +2 -2
  213. package/dist/ui/assets/{xai-grok-BMr5udF6.js → xai-grok-BSR4EP1b.js} +1 -1
  214. package/dist/ui/assets/{xai-grok-Dzeo18XM.js → xai-grok-Drl4j3ci.js} +1 -1
  215. package/dist/ui/index.html +9 -9
  216. package/dist/ui/lucide-icons.js +261 -247
  217. package/dist/ui/packages/webapp/index.html +9 -9
  218. package/package.json +8 -1
  219. package/dist/ui/assets/SKILL-CWR-bsvH.js +0 -1
  220. package/dist/ui/assets/browser-2rCVqcqy.js +0 -1
  221. package/dist/ui/assets/context-compaction-DRymamfD.js +0 -58
  222. package/dist/ui/assets/core-BoFWHLIW.js +0 -62
  223. package/dist/ui/assets/core-Bvc89tkf.js +0 -36
  224. package/dist/ui/assets/encode-frame-B8GkHc2t.js +0 -1
  225. package/dist/ui/assets/engine-D531XNHE.js +0 -1
  226. package/dist/ui/assets/es-DwGGEZle.js +0 -51
  227. package/dist/ui/assets/gelatiere-unit-DrQwRL3O.js +0 -1
  228. package/dist/ui/assets/icons-BM2l-_K7.js +0 -1
  229. package/dist/ui/assets/idle-compaction-B9i1duyd.js +0 -1
  230. package/dist/ui/assets/kernel-worker-4aPSVJ1C.js +0 -1185
  231. package/dist/ui/assets/keys-Dexx8cLD.js +0 -1
  232. package/dist/ui/assets/lick-ws-bridge-DZ0vVYNF.js +0 -1
  233. package/dist/ui/assets/memory-v2-flag-DVbOtPFF.js +0 -1
  234. package/dist/ui/assets/panel-rpc-handlers-CQ_iaU6N.js +0 -2
  235. package/dist/ui/assets/provider-store-access-BJPbOUku.js +0 -1
  236. package/dist/ui/assets/provider-store-access-BrjCBzpb.js +0 -1
  237. package/dist/ui/assets/run-1aYSFTwj.js +0 -91
  238. package/dist/ui/assets/run-DvD576xV.js +0 -53
  239. package/dist/ui/assets/screencapture-media-DL5YxrlG.js +0 -1
  240. package/dist/ui/assets/screencapture-media-YBE2VnLF.js +0 -1
  241. package/dist/ui/assets/secret-topology-CVneCnID.js +0 -1
  242. package/dist/ui/assets/slicc-version-CN6V2aMa.js +0 -1
  243. package/dist/ui/assets/sudo-fs-D620mZry.js +0 -3
  244. package/dist/ui/assets/tab-ToMhjbM4.js +0 -1
  245. package/dist/ui/assets/v86-BfdTUFBK.js +0 -1
  246. package/dist/ui/assets/wc-computers-CcJuQUyG.js +0 -3
  247. package/dist/ui/assets/wc-follower-oauth-DQ-JPxl6.js +0 -5
  248. package/dist/ui/assets/wc-live-BLozTZsg.js +0 -427
  249. package/dist/ui/assets/wc-tray-f1LxbB98.js +0 -5
  250. package/dist/ui/assets/welcome-detection-Dg9THpkh.js +0 -1
@@ -1 +0,0 @@
1
- import{t as e}from"./tmpdir-env-ate4iNcK.js";import{n as t}from"./encode-frame-B8GkHc2t.js";function n(e){return`screen: ${e}`}function r(e){return`target: ${e}`}async function i(t){let n=`${e(t.env).replace(/\/$/u,``)}/computer/${t.name}`,r=`${n}/${t.seq}.jpg`,i=t.fs.resolvePath(t.cwd,n),a=t.fs.resolvePath(t.cwd,r);return await t.fs.mkdir(i,{recursive:!0}),await t.fs.writeFile(a,t.frame.bytes),a}async function a(e){return t(e,`image/jpeg`,.55)}const o={ctrl:!1,alt:!1,shift:!1,meta:!1},s={ctrl:`ctrl`,control:`ctrl`,alt:`alt`,shift:`shift`,meta:`meta`,super:`meta`,win:`meta`,cmd:`meta`,command:`meta`},c={return:{key:`Enter`,code:`Enter`},enter:{key:`Enter`,code:`Enter`},kp_enter:{key:`Enter`,code:`NumpadEnter`},tab:{key:`Tab`,code:`Tab`},escape:{key:`Escape`,code:`Escape`},esc:{key:`Escape`,code:`Escape`},space:{key:` `,code:`Space`},backspace:{key:`Backspace`,code:`Backspace`},delete:{key:`Delete`,code:`Delete`},del:{key:`Delete`,code:`Delete`},insert:{key:`Insert`,code:`Insert`},home:{key:`Home`,code:`Home`},end:{key:`End`,code:`End`},pageup:{key:`PageUp`,code:`PageUp`},page_up:{key:`PageUp`,code:`PageUp`},prior:{key:`PageUp`,code:`PageUp`},pagedown:{key:`PageDown`,code:`PageDown`},page_down:{key:`PageDown`,code:`PageDown`},next:{key:`PageDown`,code:`PageDown`},up:{key:`ArrowUp`,code:`ArrowUp`},down:{key:`ArrowDown`,code:`ArrowDown`},left:{key:`ArrowLeft`,code:`ArrowLeft`},right:{key:`ArrowRight`,code:`ArrowRight`},menu:{key:`ContextMenu`,code:`ContextMenu`},caps_lock:{key:`CapsLock`,code:`CapsLock`},num_lock:{key:`NumLock`,code:`NumLock`},scroll_lock:{key:`ScrollLock`,code:`ScrollLock`},print:{key:`PrintScreen`,code:`PrintScreen`},pause:{key:`Pause`,code:`Pause`}};for(let e=1;e<=12;e++)c[`f${e}`]={key:`F${e}`,code:`F${e}`};const l={enter:[28],tab:[15],esc:[1],escape:[1],space:[57],backspace:[14],delete:[224,83],del:[224,83],up:[224,72],down:[224,80],left:[224,75],right:[224,77],home:[224,71],end:[224,79],pageup:[224,73],pagedown:[224,81],insert:[224,82],f1:[59],f2:[60],f3:[61],f4:[62],f5:[63],f6:[64],f7:[65],f8:[66],f9:[67],f10:[68],f11:[87],f12:[88]},u={ctrl:[29],alt:[56],shift:[42],meta:[224,91]},d={return:`KEYCODE_ENTER`,enter:`KEYCODE_ENTER`,tab:`KEYCODE_TAB`,escape:`KEYCODE_ESCAPE`,esc:`KEYCODE_ESCAPE`,space:`KEYCODE_SPACE`,backspace:`KEYCODE_DEL`,delete:`KEYCODE_FORWARD_DEL`,del:`KEYCODE_FORWARD_DEL`,home:`KEYCODE_HOME`,end:`KEYCODE_MOVE_END`,insert:`KEYCODE_INSERT`,pageup:`KEYCODE_PAGE_UP`,pagedown:`KEYCODE_PAGE_DOWN`,up:`KEYCODE_DPAD_UP`,down:`KEYCODE_DPAD_DOWN`,left:`KEYCODE_DPAD_LEFT`,right:`KEYCODE_DPAD_RIGHT`,menu:`KEYCODE_MENU`};for(let e=1;e<=12;e++)d[`f${e}`]=`KEYCODE_F${e}`;function f(e){return/^[A-Z][A-Z0-9_]+$/u.test(e)}function p(e){return e.split(/[-+]/u).filter(Boolean)}function m(e){let t=e.toLowerCase();if(c[t])return c[t];if(e.length===1){let t=e;return/[A-Za-z]/u.test(t)?{key:t,code:`Key${t.toUpperCase()}`}:/[0-9]/u.test(t)?{key:t,code:`Digit${t}`}:{".":{key:`.`,code:`Period`},",":{key:`,`,code:`Comma`},"/":{key:`/`,code:`Slash`},";":{key:`;`,code:`Semicolon`},"'":{key:`'`,code:`Quote`},"[":{key:`[`,code:`BracketLeft`},"]":{key:`]`,code:`BracketRight`},"\\":{key:`\\`,code:`Backslash`},"`":{key:"`",code:`Backquote`},"-":{key:`-`,code:`Minus`},"=":{key:`=`,code:`Equal`}}[t]??{key:t,code:``}}return null}function h(e){let t=e.trim();if(!t)return null;if(f(t))return{key:t,code:t,modifiers:{...o},keysym:t,native:t};let n=p(t);if(n.length===0)return null;let r={...o},i=null;for(let e=0;e<n.length;e++){let t=n[e],a=e===n.length-1,o=s[t.toLowerCase()];if(o&&!a){r[o]=!0;continue}o&&a&&n.length,i=t}if(!i)return null;if(f(i))return{key:i,code:i,modifiers:r,keysym:i,native:i};let a=m(i);return a?(i.length===1&&/[A-Z]/u.test(i)&&(r.shift=!0),{key:a.key,code:a.code,modifiers:r,keysym:i}):null}function g(e){let t=`1234567890`.indexOf(e);if(t!==-1)return[t===9?11:2+t];let n=[16,17,18,19,20,21,22,23,24,25,30,31,32,33,34,35,36,37,38,44,45,46,47,48,49,50],r=`qwertyuiopasdfghjklzxcvbnm`.indexOf(e.toLowerCase());return r===-1?null:[n[r]]}function _(e){return e.length===2?[e[0],e[1]|128]:[e[0]|128]}function v(e){let t=e.toLowerCase().split(/[-+]/u).filter(Boolean);if(t.length===0)return null;let n=[],r=[];for(let e=0;e<t.length;e++){let i=t[e];if(e!==t.length-1&&u[i]){n.push(u[i]);continue}let a=l[i]??u[i]??(i.length===1?g(i):null);if(!a)return null;r.push(a)}if(r.length===0)return null;let i=[];for(let e of n)i.push(...e);for(let e of r)i.push(...e,..._(e));for(let e of[...n].reverse())i.push(..._(e));return i}function y(e){return+!!e.alt+(e.ctrl?2:0)+(e.meta?4:0)+(e.shift?8:0)}function b(e,t){let n=y(e.modifiers),r=e.key.length===1&&!e.modifiers.ctrl&&!e.modifiers.alt&&!e.modifiers.meta?e.key:void 0,i=t=>({type:t,key:e.key,code:e.code,modifiers:n,...t===`keyDown`&&r?{text:r}:{}});return t===!0?[i(`keyDown`)]:t===!1?[i(`keyUp`)]:[i(`keyDown`),i(`keyUp`)]}export{n as a,r as i,h as n,a as o,b as r,i as s,v as t};
@@ -1 +0,0 @@
1
- import{t as e}from"./logger-LESFN7Hj.js";import{a as t,i as n,n as r,r as i,t as a}from"./lick-urls-DdKPDlgq.js";import"./kernel-worker-4aPSVJ1C.js";const o=e(`lick-ws-bridge`);function s(e){if(e.stopped)return;let t;try{t=e.wsFactory(e.wsUrl)}catch(t){o.error(`Failed to construct lick WebSocket`,{url:e.wsUrl,error:t instanceof Error?t.message:String(t)}),c(e,`construct-threw`);return}e.socket=t,t.onopen=()=>{e.consecutiveFailures>0?o.info(`Lick WebSocket recovered`,{attempts:e.consecutiveFailures}):o.info(`Lick WebSocket connected`),e.consecutiveFailures=0,e.unrecoverableSignalled=!1},t.onmessage=n=>{u(e,t,n.data).catch(e=>{let t=typeof n.data==`string`?n.data.slice(0,200):`[non-string payload]`;o.error(`Failed to process lick message`,{error:e instanceof Error?e.message:String(e),preview:t})})},t.onclose=n=>{if(e.socket===t&&(e.socket=null),e.stopped)return;let r=n.reason?` reason=${JSON.stringify(n.reason)}`:``;c(e,`disconnected code=${n.code}${r}`)},t.onerror=t=>{let n=t.target;o.error(`Lick WebSocket error`,{url:e.wsUrl,readyState:n?.readyState,eventType:t.type})}}function c(e,t){if(e.reconnectHandle!=null){o.debug(`Lick WS failure during pending reconnect — keeping existing timer`,{cause:t});return}e.consecutiveFailures++;let n=Math.min(e.baseDelay*2**(e.consecutiveFailures-1),6e4),r={url:e.wsUrl,attempt:e.consecutiveFailures,cause:t,retryInMs:n};if(e.consecutiveFailures>=3?o.error(`Lick WebSocket still down`,r):o.warn(`Lick WebSocket down`,r),e.consecutiveFailures===20&&!e.unrecoverableSignalled){e.unrecoverableSignalled=!0;try{e.lickManager.emitEvent({type:`session-reload`,targetScoop:void 0,timestamp:new Date().toISOString(),body:{reason:`lick-ws-bridge-down`,url:e.wsUrl,attempts:e.consecutiveFailures}})}catch(e){o.error(`Failed to emit lick-ws-bridge-down signal`,{error:e instanceof Error?e.message:String(e)})}}l(e,n)}function l(e,t){e.stopped||e.reconnectHandle!=null||(e.reconnectHandle=e.setTimer(()=>{e.reconnectHandle=null,s(e)},t))}async function u(e,t,n){let r=JSON.parse(typeof n==`string`?n:String(n));if(r.requestId){let n=r.requestId,i=await g(e,r,n);if(e.stopped||e.socket!==t||t.readyState!==1){o.warn(`Lick reply dropped — socket changed/closed mid-request`,{type:r.type,requestId:n});return}try{t.send(JSON.stringify(i))}catch(e){o.error(`ws.send() failed delivering lick reply`,{type:r.type,requestId:n,error:e instanceof Error?e.message:String(e)})}return}if(r.type===`webhook_event`){d(e.lickManager,r);return}if(r.type===`navigate_event`){p(e.lickManager,r);return}r.type===`hostfs_invalidate`&&h(e,r)}function d(e,t){let n=typeof t.webhookId==`string`?t.webhookId:null;if(!n)return o.error(`Malformed webhook_event from lick-ws`,{receivedKeys:Object.keys(t)}),`malformed`;let r=t.headers&&typeof t.headers==`object`?t.headers:{};try{return e.handleWebhookEvent(n,r,t.body)}catch(e){return o.error(`Webhook event dispatch failed`,{webhookId:n,error:e instanceof Error?e.message:String(e)}),`failed`}}function f(e){let t=typeof e.verb==`string`?e.verb:null,n=typeof e.target==`string`?e.target:null,r=typeof e.url==`string`&&e.url.length>0?e.url:null;if(t!==`handoff`&&t!==`upskill`||!n||!r)return null;let i={url:r,verb:t,target:n};return typeof e.instruction==`string`&&(i.instruction=e.instruction),typeof e.branch==`string`&&(i.branch=e.branch),typeof e.path==`string`&&(i.path=e.path),typeof e.title==`string`&&(i.title=e.title),{type:`navigate`,navigateUrl:r,targetScoop:void 0,timestamp:typeof e.timestamp==`string`?e.timestamp:new Date().toISOString(),body:i}}function p(e,t){let n=f(t);if(!n){o.debug(`navigate_event dropped — invalid payload`,{hasVerb:typeof t.verb==`string`,hasTarget:typeof t.target==`string`,hasUrl:typeof t.url==`string`&&t.url.length>0});return}e.emitEvent(n)}function m(e){if(typeof e.mount!=`string`||e.mount.length===0)return null;let t=e.paths,n=[];if(Array.isArray(t))for(let e of t)typeof e==`string`&&n.push(e);return{type:`hostfs_invalidate`,mount:e.mount,paths:n,timestamp:typeof e.timestamp==`string`?e.timestamp:void 0}}function h(e,t){let n=m(t);if(!n){o.debug(`hostfs_invalidate dropped — invalid payload`,{hasMount:typeof t.mount==`string`&&t.mount.length>0,pathsIsArray:Array.isArray(t.paths)});return}try{e.options.onHostfsInvalidate?.(n)}catch(e){o.warn(`hostfs_invalidate handler threw`,{mount:n.mount,error:e instanceof Error?e.message:String(e)})}}async function g(e,t,r){let{lickManager:i}=e;try{switch(t.type){case`list_webhooks`:return{type:`response`,requestId:r,data:i.listWebhooks().map(t=>({...t,url:_(e,t.id)}))};case`create_webhook`:{let n=await i.createWebhook(t.name||`default`,t.scoop,t.filter);return{type:`response`,requestId:r,data:{...n,url:_(e,n.id)}}}case`webhook_event`:return{type:`response`,requestId:r,data:{disposition:d(i,t)}};case`delete_webhook`:return await i.deleteWebhook(t.id)?{type:`response`,requestId:r,data:{ok:!0}}:{type:`response`,requestId:r,data:{error:`Webhook not found`}};case`list_crontasks`:return{type:`response`,requestId:r,data:i.listCronTasks()};case`create_crontask`:if(!t.name)throw Error(`name is required`);if(!t.cron)throw Error(`cron is required`);return{type:`response`,requestId:r,data:await i.createCronTask(t.name,t.cron,t.scoop,t.filter)};case`delete_crontask`:return await i.deleteCronTask(t.id)?{type:`response`,requestId:r,data:{ok:!0}}:{type:`response`,requestId:r,data:{error:`Cron task not found`}};case`tray_status`:{let e=n();return{type:`response`,requestId:r,data:{state:e.state,joinUrl:e.session?.joinUrl??null,workerBaseUrl:e.session?.workerBaseUrl??null,trayId:e.session?.trayId??null}}}default:return{type:`response`,requestId:r,error:`Unknown request type: ${t.type}`}}}catch(e){return{type:`response`,requestId:r,error:e instanceof Error?e.message:String(e)}}}function _(e,n){let a=t().session;return a?.webhookUrl?r(a.webhookUrl,n):e.webhookOriginOverride?`${e.webhookOriginOverride}/webhooks/${n}`:i(e.options.locationHref,n)}function v(e){if(e.stopped)return;e.stopped=!0,e.reconnectHandle!=null&&(e.clearTimer(e.reconnectHandle),e.reconnectHandle=null);let t=e.socket;if(e.socket=null,t)try{t.close()}catch(e){t.readyState!==3&&t.readyState!==2&&o.warn(`Lick socket close() threw before terminal state`,{readyState:t.readyState,error:e instanceof Error?e.message:String(e)})}}function y(e,t){try{new URL(t.locationHref)}catch(e){throw Error(`startLickWsBridge: invalid locationHref ${JSON.stringify(t.locationHref)}: ${e instanceof Error?e.message:String(e)}`)}let n=typeof t.lickWsUrl==`string`&&t.lickWsUrl.length>0?t.lickWsUrl:a(t.locationHref),r=null;if(typeof t.lickWsUrl==`string`&&t.lickWsUrl.length>0)try{let e=new URL(t.lickWsUrl);r=`${e.protocol===`wss:`?`https:`:`http:`}//${e.host}`}catch{r=null}let i={lickManager:e,options:t,wsUrl:n,webhookOriginOverride:r,baseDelay:t.reconnectDelayMs??3e3,wsFactory:t.webSocketFactory??(e=>new WebSocket(e)),setTimer:t.setTimeoutFn??setTimeout.bind(globalThis),clearTimer:t.clearTimeoutFn??clearTimeout.bind(globalThis),stopped:!1,socket:null,reconnectHandle:null,consecutiveFailures:0,unrecoverableSignalled:!1};return s(i),{stop(){v(i)}}}export{y as startLickWsBridge};
@@ -1 +0,0 @@
1
- import{b as e}from"./kernel-worker-4aPSVJ1C.js";function t(){return e(`memory-v2`)}export{t as isMemoryV2Enabled};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/secrets-bridge-client-C0tvQeuX.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/port-bridge-client-ff8DctEN.js","assets/preload-helper-Czpn1I53.js","assets/logger-DDBAeTLF.js","assets/proxied-fetch-Bl8AeYdt.js","assets/base64-ELzoYfwP.js","assets/fetch-body-1l9I58Vk.js","assets/api-endpoint-DGxXvrur.js","assets/runtime-env-Dlaokqg1.js","assets/mount-bridge-client-CRnohfom.js","assets/types-D8gIX-W-.js","assets/page-approval-service-Dy-UA1aK.js","assets/float-topology-CurCyQFy.js","assets/speak-BCLm04Z2.js","assets/speech-assets-bridge-CFYafE89.js","assets/transformers-env-1TbBNkOp.js","assets/wc-shell-CCKjmASt.js","assets/mime-types-D0xZwlMO.js","assets/bridge-protocol-06nbmp2X.js","assets/account-store-CNTI4kr_.js","assets/core-BoFWHLIW.js","assets/compat-qQM4gjF_.js","assets/models-BSkXF4T6.js","assets/diagnostics-DN_idNHx.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-B-zmcypy.js","assets/libesm-BypnjKEL.js","assets/secret-topology-CVneCnID.js","assets/image-markers-q8JQTtid.js","assets/tool-ui-eSQ1g2I1.js","assets/providers-Q92pCQ8h.js","assets/panel-rpc-B3MSVImO.js","assets/bedrock-camp-compat-BeCSBUrZ.js","assets/claude-model-version-aqjj5mtp.js","assets/telemetry-DJyRzh6X.js","assets/same-file-identity-DuEcSmPX.js","assets/icons-BM2l-_K7.js","assets/wc-shell-WkeczD9x.css","assets/shared-mBEktoxE.js","assets/hear-BNmJphKg.js","assets/permissions-surface-registry-CilCRwhh.js","assets/whisper-session-CMiImrJg.js","assets/esptool-operations-CiccBbBW.js","assets/rom-eeWiO07Z.js","assets/mount-picker-popup--ijSfN8u.js","assets/picker-popup-sQtXmfAo.js","assets/usb-claim-broker-Dacw2Z3M.js","assets/usb-device-registry--JwKRTYp.js","assets/theme-engine-B5SkYf3E.js","assets/tab-ToMhjbM4.js","assets/slicc-app-url-B9OxaBDe.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-Czpn1I53.js";import"./proxied-fetch-Bl8AeYdt.js";import{J as t,m as n}from"./account-store-CNTI4kr_.js";import{a as r,t as i}from"./api-endpoint-DGxXvrur.js";import"./main-jc6OS8lz.js";import{n as a,r as o}from"./hid-device-registry-B2R-0rNt.js";import{a as s,i as c}from"./serial-port-registry-CCqklAEr.js";import{_ as l,a as u,c as d,d as ee,f,g as p,h as te,i as ne,l as re,m as ie,n as ae,o as oe,p as se,r as ce,s as le,t as ue,u as de,v as fe}from"./hid-operations-C97SZtrY.js";import{a as m,i as h}from"./usb-device-registry--JwKRTYp.js";import{a as g,c as _,d as v,f as y,g as b,h as x,i as S,l as C,m as w,n as T,o as E,p as D,r as O,s as k,t as A,u as j}from"./usb-operations-v1mGAdRY.js";function M(e={}){let t=new Map;return{...R(),...z(e),...B(),...pe(e),...me(e),...he(e),...ge(e,t),..._e(),...ve(e),...ye(e),...xe(e),...L(),...F(),...I(),...N(),...P(),...ke(),...Ae(),...je()}}function N(){return{"secrets-bridge":async({type:t,payload:n})=>{let{callSecretsBridge:r}=await e(async()=>{let{callSecretsBridge:e}=await import(`./secrets-bridge-client-C0tvQeuX.js`).then(e=>e.t);return{callSecretsBridge:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]));return{response:await r(t,n)}}}}function P(){return{"mount-sign-and-forward":async({type:t,envelope:n})=>{let{callMountBridge:r}=await e(async()=>{let{callMountBridge:e}=await import(`./mount-bridge-client-CRnohfom.js`);return{callMountBridge:e}},__vite__mapDeps([10,2,3,4,5,1,6,7,8,9,11]));return{response:await r(t,n)}}}}function F(){return{"sudo-request":async({request:t,mode:n})=>{let{resolveSudoApprovalInPage:r}=await e(async()=>{let{resolveSudoApprovalInPage:e}=await import(`./page-approval-service-Dy-UA1aK.js`);return{resolveSudoApprovalInPage:e}},__vite__mapDeps([12,4,13,5,1,3,6,7,8,9]));return r(t,n??`resolve`)}}}function I(){return{"secret-request":async t=>{let{getSecretRequestSurface:n}=await e(async()=>{let{getSecretRequestSurface:e}=await import(`./secret-request-registry-DrOMKR1H.js`);return{getSecretRequestSurface:e}},[]),r=n();return r?r(t):{stored:!1,reason:`unavailable`}}}}function L(){return{"proxied-fetch":async({url:t,method:n,headers:r,body:i})=>{let{collectViaExtensionDelegate:a}=await e(async()=>{let{collectViaExtensionDelegate:e}=await import(`./proxied-fetch-Bl8AeYdt.js`).then(e=>e.i);return{collectViaExtensionDelegate:e}},__vite__mapDeps([5,1,3,6,7,8,9])),{head:o,body:s}=await a(t,{method:n,headers:r,body:i});return{head:o,body:s}}}}function R(){return{"page-info":()=>({origin:window.location.origin,href:window.location.href,title:document.title||``}),screencapture:async({mimeType:t,quality:n,mode:r,durationMs:i,audio:a})=>{let{captureDisplayMedia:o}=await e(async()=>{let{captureDisplayMedia:e}=await import(`./screencapture-media-YBE2VnLF.js`);return{captureDisplayMedia:e}},[]),s=await o(r===`video`?{mode:`video`,mimeType:t,durationMs:i??5e3,audio:!!a}:{mode:`image`,mimeType:t,quality:n});return{bytes:s.bytes.buffer.slice(s.bytes.byteOffset,s.bytes.byteOffset+s.bytes.byteLength),width:s.width,height:s.height,mimeType:s.mimeType,...s.durationMs===void 0?{}:{durationMs:s.durationMs}}},"speak-text":async({text:t,lang:n,voice:r,rate:i,pitch:a,volume:o})=>{let{speak:s}=await e(async()=>{let{speak:e}=await import(`./speak-BCLm04Z2.js`);return{speak:e}},__vite__mapDeps([14,3,4,9,15,16,17,1,18,6,19,20,21,22,23,24,25,26,27,28,5,7,8,29,13,0,2,30,31,32,33,34,35,36,37,38,39,40]));return await s({text:t,lang:n,voice:r,rate:i,pitch:a,volume:o}),{done:!0}},"list-voices":async()=>{let{kokoroVoicesIfReady:t}=await e(async()=>{let{kokoroVoicesIfReady:e}=await import(`./speak-BCLm04Z2.js`);return{kokoroVoicesIfReady:e}},__vite__mapDeps([14,3,4,9,15,16,17,1,18,6,19,20,21,22,23,24,25,26,27,28,5,7,8,29,13,0,2,30,31,32,33,34,35,36,37,38,39,40])),n=t().map(e=>({name:e.id,lang:e.lang,default:!1,onDevice:e.onDevice}));if(typeof speechSynthesis>`u`){if(n.length>0)return{voices:n};throw Error(`speechSynthesis is unavailable in this page`)}let r=speechSynthesis.getVoices();if(r.length>0)return{voices:[...n,...r.map(Z)]};let i=await new Promise(e=>{let t=()=>{speechSynthesis.removeEventListener(`voiceschanged`,t),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,t),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,t),e(speechSynthesis.getVoices())},1e3)});return{voices:[...n,...i.map(Z)]}},"speak-status":async()=>{let{kokoroStatus:t}=await e(async()=>{let{kokoroStatus:e}=await import(`./speak-BCLm04Z2.js`);return{kokoroStatus:e}},__vite__mapDeps([14,3,4,9,15,16,17,1,18,6,19,20,21,22,23,24,25,26,27,28,5,7,8,29,13,0,2,30,31,32,33,34,35,36,37,38,39,40]));return t()},"speak-warmup":async()=>{let{kokoroWarmup:t}=await e(async()=>{let{kokoroWarmup:e}=await import(`./speak-BCLm04Z2.js`);return{kokoroWarmup:e}},__vite__mapDeps([14,3,4,9,15,16,17,1,18,6,19,20,21,22,23,24,25,26,27,28,5,7,8,29,13,0,2,30,31,32,33,34,35,36,37,38,39,40]));return t()},"synthesize-to-wav":async({text:t,lang:n,voice:r,rate:i})=>{let{synthesizeToWav:a}=await e(async()=>{let{synthesizeToWav:e}=await import(`./speak-BCLm04Z2.js`);return{synthesizeToWav:e}},__vite__mapDeps([14,3,4,9,15,16,17,1,18,6,19,20,21,22,23,24,25,26,27,28,5,7,8,29,13,0,2,30,31,32,33,34,35,36,37,38,39,40])),o=await a({text:t,...n===void 0?{}:{lang:n},...r===void 0?{}:{voice:r},...i===void 0?{}:{rate:i}});return{bytes:o.buffer.slice(o.byteOffset,o.byteOffset+o.byteLength)}},"play-audio":async({bytes:e,volume:t})=>{if(typeof AudioContext>`u`)throw Error(`Web Audio API is unavailable in this page`);let n=new AudioContext;try{let r=await n.decodeAudioData(e.slice(0)),i=n.createBufferSource();if(i.buffer=r,t!==void 0){let e=n.createGain();e.gain.value=Math.max(0,Math.min(1,t)),i.connect(e),e.connect(n.destination)}else i.connect(n.destination);await new Promise(e=>{i.onended=()=>e(),i.start()})}finally{try{await n.close()}catch{}}return{done:!0}},"play-chime":async({tone:e})=>{let t={success:[880,1320],error:[440,220],notify:[660,660]},[n,r]=t[e??`notify`]??t.notify;if(typeof AudioContext>`u`)throw Error(`Web Audio API is unavailable in this page`);let i=new AudioContext;try{let e=i.currentTime;for(let[t,a]of[n,r].entries()){let n=i.createOscillator();n.type=`sine`,n.frequency.value=a;let r=i.createGain();r.gain.setValueAtTime(1e-4,e+t*.18),r.gain.exponentialRampToValueAtTime(.2,e+t*.18+.02),r.gain.exponentialRampToValueAtTime(1e-4,e+t*.18+.18),n.connect(r),r.connect(i.destination),n.start(e+t*.18),n.stop(e+t*.18+.2)}await new Promise(e=>setTimeout(e,450))}finally{try{await i.close()}catch{}}return{done:!0}}}}function z(e={}){return{"clipboard-read-text":async()=>{if(!navigator.clipboard?.readText)throw Error(`clipboard API unavailable`);return{text:await navigator.clipboard.readText()}},"clipboard-write-text":async({text:e})=>{if(!navigator.clipboard?.writeText)throw Error(`clipboard API unavailable`);return await Q(),await navigator.clipboard.writeText(e),{done:!0}},"clipboard-write-image":async({bytes:e,mimeType:t})=>{if(!navigator.clipboard?.write||typeof ClipboardItem>`u`)throw Error(`clipboard image API unavailable`);let n,r=new Blob([e],{type:t});return n=t===`image/png`?r:await Oe(r),await Q(),await navigator.clipboard.write([new ClipboardItem({"image/png":n})]),{done:!0}},"window-open":async({url:e,target:t,features:n})=>({opened:window.open(e,t??`_blank`,n??`noopener,noreferrer`)!==null}),"oauth-popup":async({url:t})=>{let n=await e.delegateOAuthLogin?.(t);return n?.delegated?{redirectUrl:n.redirectUrl,error:n.error}:{redirectUrl:await Ee(t,e.getPermissionsSurface)}},"oauth-route":async()=>({delegate:await e.shouldDelegateOAuth?.()===!0}),"capture-camera":async e=>await we(e),"enumerate-media-devices":async()=>{if(!navigator.mediaDevices?.enumerateDevices)throw Error(`enumerateDevices is not supported in this browser`);let e=await navigator.mediaDevices.enumerateDevices(),t=e=>({deviceId:e.deviceId,label:e.label||``,...e.groupId?{groupId:e.groupId}:{}});return{videoinputs:e.filter(e=>e.kind===`videoinput`).map(t),audioinputs:e.filter(e=>e.kind===`audioinput`).map(t)}}}}function B(){return{"hear-capture":async t=>{let{hearCapture:n}=await e(async()=>{let{hearCapture:e}=await import(`./hear-BNmJphKg.js`);return{hearCapture:e}},__vite__mapDeps([41,4,42,43,3,16,17,1,18,6,19,20,21,22,23,24,25,26,27,28,5,7,8,9,29,13,0,2,30,31,32,33,34,35,36,37,38,39,40]));return await n(t??{})},"hear-transcribe":async({bytes:t,lang:n})=>{let{hearTranscribe:r}=await e(async()=>{let{hearTranscribe:e}=await import(`./hear-BNmJphKg.js`);return{hearTranscribe:e}},__vite__mapDeps([41,4,42,43,3,16,17,1,18,6,19,20,21,22,23,24,25,26,27,28,5,7,8,9,29,13,0,2,30,31,32,33,34,35,36,37,38,39,40]));return await r(t,n)},"hear-status":async()=>{let{hearStatus:t}=await e(async()=>{let{hearStatus:e}=await import(`./hear-BNmJphKg.js`);return{hearStatus:e}},__vite__mapDeps([41,4,42,43,3,16,17,1,18,6,19,20,21,22,23,24,25,26,27,28,5,7,8,9,29,13,0,2,30,31,32,33,34,35,36,37,38,39,40]));return t()},"hear-warmup":async()=>{let{hearWarmup:t}=await e(async()=>{let{hearWarmup:e}=await import(`./hear-BNmJphKg.js`);return{hearWarmup:e}},__vite__mapDeps([41,4,42,43,3,16,17,1,18,6,19,20,21,22,23,24,25,26,27,28,5,7,8,9,29,13,0,2,30,31,32,33,34,35,36,37,38,39,40]));return t()}}}function pe(r){return{"tray-reset":async()=>{if(!r.resetTray)throw Error(`host reset: no active tray session to reset`);return await r.resetTray()},"tray-webhook-rotate":async()=>{if(!r.rotateWebhook)throw Error(`webhook rotate: no active leader tray`);return await r.rotateWebhook()},"tray-webhook-revoke":async e=>{if(!r.revokeWebhook)throw Error(`webhook delete: no active leader tray`);return await r.revokeWebhook(e.webhookId),{ok:!0}},"tray-open-preview":async e=>{if(!r.mintPreview)throw Error(`serve: no active leader tray; cannot mint preview`);return await r.mintPreview(e)},"tray-revoke-preview":async e=>{if(!r.revokePreview)throw Error(`serve: no active leader tray; cannot revoke preview`);return await r.revokePreview(e)},"tray-list-previews":async()=>{if(!r.listPreviews)throw Error(`serve: no active leader tray; cannot list previews`);return await r.listPreviews()},"tray-mint-biscotto":async e=>{if(!r.mintBiscotto)throw Error(`biscotto: no active leader tray; cannot mint a seat`);return await r.mintBiscotto(e)},"tray-revoke-biscotto":async e=>{if(!r.revokeBiscotto)throw Error(`biscotto revoke: no active leader tray; cannot revoke a seat`);return await r.revokeBiscotto(e)},"tray-list-biscotti":async()=>{if(!r.listBiscotti)throw Error(`biscotti: no active leader tray; cannot list seats`);return await r.listBiscotti()},"tray-preview-logs":async({previewToken:e})=>{if(!r.getPreviewLifecycleRecords)throw Error(`serve --logs: no active leader tray; cannot read preview logs`);return r.getPreviewLifecycleRecords(e)},"tray-preview-truncate":async({previewToken:e})=>{if(!r.truncatePreviewLifecycleRecords)throw Error(`serve --truncate: no active leader tray; cannot truncate preview logs`);return r.truncatePreviewLifecycleRecords(e)},"tray-leave":async({workerBaseUrl:e,requestId:t})=>{if(!r.leaveTray)throw Error(`host leave: tray leave is not available in this environment`);return await r.leaveTray({workerBaseUrl:e,requestId:t})},"tray-join":async({joinUrl:e,requestId:t})=>{if(!r.joinTray)throw Error(`host join: tray join is not available in this environment`);return await r.joinTray({joinUrl:e,requestId:t})},"cherry-emit":async({runtimeId:e,name:t,detail:n})=>{if(!r.emitCherrySliccEvent)throw Error(`cherry-emit: not available in this environment`);return{delivered:r.emitCherrySliccEvent(e,t,n)}},"tray-exec":async e=>{if(!r.execOnRemote)throw Error(`ssh: no active leader tray in this environment`);return await r.execOnRemote(e)},"tray-exec-signal":({execToken:e})=>(r.signalRemoteExec?.({execToken:e}),{ok:!0}),"oauth-extras-set":({providerId:e,domains:r})=>(t(e,r),{storeAfter:n()}),"silent-renew":async({providerId:t})=>{let{getRegisteredProviderConfig:n}=await e(async()=>{let{getRegisteredProviderConfig:e}=await import(`./providers-Q92pCQ8h.js`).then(e=>e.r);return{getRegisteredProviderConfig:e}},__vite__mapDeps([32,1,3])),r=n(t);return r?.onSilentRenew?{accessToken:await r.onSilentRenew()}:{accessToken:null}},"save-oauth-accounts":({accountsJson:e})=>(localStorage.setItem(`slicc_accounts`,e),{storedJson:localStorage.getItem(`slicc_accounts`)??e})}}function me(e){let t=new Map,n=()=>{if(!e.sliccSidecar)throw Error(`slicc: sidecar attachments are not available in this environment`);return e.sliccSidecar},r=async(e,r)=>{let i=n(),a=new AbortController;t.set(e,a);try{return await r(i,a.signal)}finally{t.delete(e)}};return{"slicc-attach":async({joinUrl:e,name:t,connectTimeoutMs:r})=>await n().attach({joinUrl:e,name:t,connectTimeoutMs:r}),"slicc-detach":({name:e})=>({detached:n().detach(e)}),"slicc-list":()=>({attachments:n().list()}),"slicc-prompt":async({name:e,text:t,runToken:n,steer:i,timeoutMs:a})=>await r(n,async(n,r)=>await n.prompt(e,t,{steer:i,timeoutMs:a,signal:r})),"slicc-exec":async({name:e,command:t,runToken:n,cwd:i,env:a,timeoutMs:o,stdin:s})=>await r(n,async(n,r)=>await n.exec(e,t,{cwd:i,env:a,timeoutMs:o,stdin:s,signal:r})),"slicc-watch":async({name:e,runToken:t,durationMs:n,scoopJid:i,untilIdle:a})=>await r(t,async(t,r)=>await t.watch(e,{durationMs:n,scoopJid:i,untilIdle:a,signal:r})),"slicc-cancel":({runToken:e})=>(t.get(e)?.abort(),{ok:!0})}}function he(e){return Se(e.emitEvent),{"usb-list":async()=>({devices:await C(V(),W())}),"usb-request":async({filters:e})=>({device:await y(V(),W(),e)}),"usb-device-info":({handle:e})=>({device:k(V(),e)}),"usb-open":async({handle:e})=>(await j(V(),e),{done:!0}),"usb-close":async({handle:e,owner:t,force:n})=>(await S(V(),e,{owner:t,force:n}),{done:!0}),"usb-select-configuration":async({handle:e,configurationValue:t})=>(await w(V(),e,t),{done:!0}),"usb-claim-interface":async({handle:e,interfaceNumber:t,owner:n,wait:r})=>(await T(V(),e,t,{owner:n,wait:r}),{done:!0}),"usb-release-interface":async({handle:e,interfaceNumber:t,owner:n})=>(await v(V(),e,t,{owner:n}),{done:!0}),"usb-cancel-claim-wait":async({handle:e,interfaceNumber:t,owner:n})=>(await A(V(),e,t,n??`usb`),{done:!0}),"usb-drop-owner":async({owner:e})=>(await _(V(),e),{done:!0}),"usb-control-transfer-in":async({handle:e,setup:t,length:n})=>g(V(),e,t,n),"usb-control-transfer-out":async({handle:e,setup:t,bytes:n})=>E(V(),e,t,n),"usb-transfer-in":async({handle:e,endpointNumber:t,length:n})=>x(V(),e,t,n),"usb-transfer-out":async({handle:e,endpointNumber:t,bytes:n})=>b(V(),e,t,n),"usb-reset":async({handle:e,owner:t,force:n})=>(await D(V(),e,{owner:t,force:n}),{done:!0}),"usb-clear-halt":async({handle:e,direction:t,endpointNumber:n})=>(await O(V(),e,t,n),{done:!0})}}function ge(e,t){return{"hid-list":async()=>({devices:await ce(G(),K())}),"hid-request":async({filters:e})=>({devices:await oe(G(),K(),e)}),"hid-device-info":({handle:e})=>({device:ae(G(),e)}),"hid-open":async({handle:e})=>(await ne(G(),e),{done:!0}),"hid-close":async({handle:e})=>(await ue(G(),e),{done:!0}),"hid-send-report":async({handle:e,reportId:t,bytes:n})=>(await d(G(),e,t,n),{done:!0}),"hid-send-feature-report":async({handle:e,reportId:t,bytes:n})=>(await le(G(),e,t,n),{done:!0}),"hid-receive-feature-report":async({handle:e,reportId:t})=>u(G(),e,t),"hid-subscribe-input-reports":async({handle:n})=>{t.get(n)?.();let r=await re(G(),n,t=>{e.emitEvent?.(`hid-input-report`,{handle:n,reportId:t.reportId,bytes:t.bytes})});return t.set(n,r),{done:!0}},"hid-unsubscribe-input-reports":({handle:e})=>(t.get(e)?.(),t.delete(e),{done:!0})}}function _e(){return{"serial-list":async()=>({devices:await se(q(),J())}),"serial-request":async({filters:e})=>({device:await p(q(),J(),e)}),"serial-device-info":({handle:e})=>({device:ee(q(),e)}),"serial-open":async({handle:e,options:t})=>(await ie(q(),e,t),{done:!0}),"serial-close":async({handle:e})=>(await de(q(),e),{done:!0}),"serial-read":async({handle:e,maxBytes:t,until:n,timeoutMs:r})=>{let i=await te(q(),e,{maxBytes:t,until:n?new Uint8Array(n):void 0,timeoutMs:r});return{bytes:i.buffer.slice(i.byteOffset,i.byteOffset+i.byteLength)}},"serial-write":async({handle:e,bytes:t})=>({bytesWritten:await fe(q(),e,new Uint8Array(t))}),"serial-get-signals":async({handle:e})=>({signals:await f(q(),e)}),"serial-set-signals":async({handle:e,signals:t})=>(await l(q(),e,t),{done:!0})}}function ve(t){return{"esptool-chip-info":async({handle:n,baudRate:r})=>(await e(()=>import(`./esptool-operations-CiccBbBW.js`),__vite__mapDeps([44,1,3,45]))).esptoolChipInfo(q(),n,r,e=>t.emitEvent?.(`esptool-progress`,{handle:n,line:e})),"esptool-read-mac":async({handle:n,baudRate:r})=>(await e(()=>import(`./esptool-operations-CiccBbBW.js`),__vite__mapDeps([44,1,3,45]))).esptoolReadMac(q(),n,r,e=>t.emitEvent?.(`esptool-progress`,{handle:n,line:e})),"esptool-erase-flash":async({handle:n,baudRate:r})=>(await(await e(()=>import(`./esptool-operations-CiccBbBW.js`),__vite__mapDeps([44,1,3,45]))).esptoolEraseFlash(q(),n,r,e=>t.emitEvent?.(`esptool-progress`,{handle:n,line:e})),{done:!0}),"esptool-flash":async({handle:n,baudRate:r,eraseAll:i,segments:a})=>(await(await e(()=>import(`./esptool-operations-CiccBbBW.js`),__vite__mapDeps([44,1,3,45]))).esptoolFlash(q(),n,r,i,a.map(e=>({address:e.address,data:new Uint8Array(e.bytes)})),e=>t.emitEvent?.(`esptool-progress`,{handle:n,line:e})),{done:!0}),"esptool-read-flash":async({handle:n,baudRate:r,address:i,size:a})=>{let o=await(await e(()=>import(`./esptool-operations-CiccBbBW.js`),__vite__mapDeps([44,1,3,45]))).esptoolReadFlash(q(),n,r,i,a,e=>t.emitEvent?.(`esptool-progress`,{handle:n,line:e}));return{bytes:o.buffer.slice(o.byteOffset,o.byteOffset+o.byteLength)}},"esptool-read-reg":async({handle:n,baudRate:r,address:i})=>(await e(()=>import(`./esptool-operations-CiccBbBW.js`),__vite__mapDeps([44,1,3,45]))).esptoolReadReg(q(),n,r,i,e=>t.emitEvent?.(`esptool-progress`,{handle:n,line:e})),"esptool-flash-id":async({handle:n,baudRate:r})=>(await e(()=>import(`./esptool-operations-CiccBbBW.js`),__vite__mapDeps([44,1,3,45]))).esptoolFlashId(q(),n,r,e=>t.emitEvent?.(`esptool-progress`,{handle:n,line:e})),"esptool-erase-region":async({handle:n,baudRate:r,address:i,size:a})=>(await(await e(()=>import(`./esptool-operations-CiccBbBW.js`),__vite__mapDeps([44,1,3,45]))).esptoolEraseRegion(q(),n,r,i,a,e=>t.emitEvent?.(`esptool-progress`,{handle:n,line:e})),{done:!0}),"esptool-run":async({handle:n,baudRate:r})=>(await(await e(()=>import(`./esptool-operations-CiccBbBW.js`),__vite__mapDeps([44,1,3,45]))).esptoolRun(q(),n,r,e=>t.emitEvent?.(`esptool-progress`,{handle:n,line:e})),{done:!0})}}function ye(e){return{"list-remote-targets":async()=>e.listRemoteTargets?{targets:(await e.listRemoteTargets()).filter(e=>e.targetId.includes(`:`)).map(e=>({targetId:e.targetId,title:e.title,url:e.url}))}:{targets:[]},"remote-cdp-send":async({runtimeId:t,localTargetId:n,method:r,params:i,sessionId:a,timeout:o})=>{if(!e.remoteCdp)throw Error(`remote-cdp bridge not available`);return e.remoteCdp.send({runtimeId:t,localTargetId:n,method:r,params:i,sessionId:a,timeout:o})},"remote-cdp-subscribe":async({runtimeId:t,localTargetId:n,event:r})=>{if(!e.remoteCdp)throw Error(`remote-cdp bridge not available`);return e.remoteCdp.subscribe({runtimeId:t,localTargetId:n,event:r})},"remote-cdp-unsubscribe":async({runtimeId:t,localTargetId:n,event:r})=>{if(!e.remoteCdp)throw Error(`remote-cdp bridge not available`);return e.remoteCdp.unsubscribe({runtimeId:t,localTargetId:n,event:r})},"remote-cdp-detach":async({runtimeId:t,localTargetId:n})=>{if(!e.remoteCdp)throw Error(`remote-cdp bridge not available`);return e.remoteCdp.detach({runtimeId:t,localTargetId:n})},"remote-open-tab":async({runtimeId:t,url:n})=>{if(!e.remoteCdp)throw Error(`remote-cdp bridge not available`);return e.remoteCdp.openTab({runtimeId:t,url:n})}}}function be(e,t){return t===void 0?e.length>0&&e.every(e=>e===`camera`||e===`microphone`):t}function xe(t){return{"permission-request":async n=>{let r=t.getPermissionsSurface?.()??null;if(!r)throw Error(`permission-request: permission surface unavailable`);let i=await r.prompt({kinds:n.kinds,description:n.description,heading:n.heading,grantLabel:n.grantLabel,cancelLabel:n.cancelLabel,skipIfGranted:be(n.kinds,n.skipIfGranted)});if(i.status!==`granted`){let e=i.message?`: ${i.message}`:``;throw Error(`permission-request: ${i.reason??i.status}${e}`)}let a=[];for(let t of i.grants)switch(t.kind){case`usb`:{let e=V().register(t.device);a.push({kind:`usb`,handle:e});break}case`hid`:{let e=G().register(t.device);a.push({kind:`hid`,handle:e});break}case`serial`:{let e=q().register(t.port);a.push({kind:`serial`,handle:e});break}case`filesystem`:{let{storePendingHandle:n}=await e(async()=>{let{storePendingHandle:e}=await import(`./mount-picker-popup--ijSfN8u.js`);return{storePendingHandle:e}},__vite__mapDeps([46,4,47,9])),r=`pendingMount:rpc-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`;await n(r,t.handle),a.push({kind:`filesystem`,idbKey:r,dirName:t.handle.name});break}case`camera`:case`microphone`:case`screenshare`:for(let e of t.stream.getTracks())e.stop();a.push({kind:t.kind,ok:!0})}return{grants:a}}}}function V(){return m()}var H=null,U;function Se(t){U=t,!(H||!t)&&e(()=>import(`./usb-claim-broker-Dacw2Z3M.js`).then(e=>{H||=e.addClaimListener(V(),e=>{U?.(`usb-claim-event`,e)})}),__vite__mapDeps([48,49,1]))}function W(){let e=h();if(!e)throw Error(`WebUSB is unavailable in this browser`);return e}function G(){return o()}function K(){let e=a();if(!e)throw Error(`WebHID is unavailable in this browser`);return e}function q(){return s()}function J(){let e=c();if(!e)throw Error(`Web Serial is unavailable in this browser`);return e}var Ce=1500;async function we(e){if(!navigator.mediaDevices?.getUserMedia)throw Error(`getUserMedia is not supported in this browser`);let t=e.mode===`photo`||e.captureVideo!==!1,n=!!e.captureAudio&&e.mode===`video`;if(!t&&!n)throw Error(`camera capture: at least one of video or audio must be requested`);let r=await Te({wantVideo:t,videoDeviceId:t?await Y(e.deviceId,`videoinput`):void 0,audioDeviceId:n?await Y(e.audioDeviceId,`audioinput`):void 0,wantAudio:n,width:e.width,height:e.height,frameRate:e.frameRate,exact:!!e.exactSize});try{let n=null,i=0,a=0;if(t){n=document.createElement(`video`),n.srcObject=r,n.muted=!0,n.playsInline=!0;let e=n;await new Promise((t,n)=>{e.onloadedmetadata=()=>e.play().then(()=>t()).catch(n),e.onerror=()=>n(Error(`Failed to load camera stream`))}),await new Promise(e=>requestAnimationFrame(()=>e())),await new Promise(e=>requestAnimationFrame(()=>e())),i=e.videoWidth,a=e.videoHeight}if(e.mode===`photo`){if(!n)throw Error(`photo capture requires a video track`);let t=e.warmupMs??Ce;t>0&&await new Promise(e=>setTimeout(e,t));let r=document.createElement(`canvas`);r.width=i,r.height=a;let o=r.getContext(`2d`);if(!o)throw Error(`Failed to get canvas context`);o.drawImage(n,0,0,i,a);let s=await new Promise((t,n)=>{r.toBlob(e=>e?t(e):n(Error(`Failed to encode photo`)),e.mimeType,e.quality)});return{bytes:await s.arrayBuffer(),mimeType:s.type||e.mimeType,width:i,height:a}}let o=Math.max(100,Math.min(e.durationMs??5e3,6e4)),s=typeof MediaRecorder<`u`&&MediaRecorder.isTypeSupported(e.mimeType)?e.mimeType:`video/webm`,c=new MediaRecorder(r,{mimeType:s}),l=[];c.ondataavailable=e=>{e.data&&e.data.size>0&&l.push(e.data)};let u=new Promise(e=>{c.onstop=()=>e()});c.start(),await new Promise(e=>setTimeout(e,o)),c.stop(),await u;let d=new Blob(l,{type:s});return{bytes:await d.arrayBuffer(),mimeType:d.type||s,width:i,height:a,durationMs:o}}finally{r.getTracks().forEach(e=>{e.stop()})}}async function Y(e,t){if(e===void 0||e===``)return;if(!/^\d+$/.test(e))return e;if(!navigator.mediaDevices?.enumerateDevices)return;let n=parseInt(e,10);return(await navigator.mediaDevices.enumerateDevices()).filter(e=>e.kind===t)[n]?.deviceId}async function Te(e){let t=t=>{if(!e.wantVideo)return!1;let n={};return e.videoDeviceId&&(n.deviceId={exact:e.videoDeviceId}),e.width&&(n.width=t===`exact`?{exact:e.width}:{ideal:e.width}),e.height&&(n.height=t===`exact`?{exact:e.height}:{ideal:e.height}),e.frameRate&&(n.frameRate=t===`exact`?{exact:e.frameRate}:{ideal:e.frameRate}),Object.keys(n).length>0?n:!0},n=()=>e.wantAudio?!e.audioDeviceId||{deviceId:{exact:e.audioDeviceId}}:!1;try{return await navigator.mediaDevices.getUserMedia({video:t(e.exact?`exact`:`ideal`),audio:n()})}catch(r){let i=r?.name;if(!e.exact||i!==`OverconstrainedError`&&i!==`NotReadableError`)throw r;return console.warn(`panel-rpc:capture-camera: exact ${e.width??`?`}x${e.height??`?`}@${e.frameRate??`?`} unmet, falling back to ideal`),await navigator.mediaDevices.getUserMedia({video:t(`ideal`),audio:n()})}}async function Ee(e,t){if((typeof navigator<`u`?navigator.userActivation:void 0)?.isActive===!0)return X(window.open(e,`_blank`,`width=500,height=700,popup=yes`));let n=t?.()??null;if(n){let t=await De(n,e);return t===void 0?null:X(t)}return X(window.open(e,`_blank`,`width=500,height=700,popup=yes`))}function X(e){return new Promise(t=>{let n=!1,a=null,o=()=>{n||(n=!0,window.removeEventListener(`message`,s),clearTimeout(c),a&&clearInterval(a))},s=n=>{if(n.data?.type!==`oauth-callback`||n.origin!==window.location.origin||e&&n.source!==e)return;if(o(),n.data.error){console.error(`[panel-rpc:oauth-popup] OAuth error:`,n.data.error),t(null);return}let r=n.data.redirectUrl;(typeof r==`string`||r==null)&&t(r??null)};window.addEventListener(`message`,s),a=setInterval(async()=>{if(!n)try{let e=await fetch(r(`/api/oauth-result`),{headers:i()});if(e.status===204||!e.ok)return;let a=await e.json();if(n)return;if(o(),a.error){console.error(`[panel-rpc:oauth-popup] Server relay OAuth error:`,a.error),t(null);return}t(a.redirectUrl??null)}catch(e){console.warn(`[panel-rpc:oauth-popup] Poll failed:`,e instanceof Error?e.message:String(e))}},1e3);let c=setTimeout(()=>{o();try{e?.close()}catch{}t(null)},12e4)})}async function De(e,t){let n=await e.prompt({kinds:[`popup`],description:`Continue to sign in. A new window will open to the provider.`,grantLabel:`Continue`,requestOptions:{popup:{url:t}}});if(n.status!==`granted`)return;let r=n.grants.find(e=>e.kind===`popup`);return r&&r.kind===`popup`?r.window:null}function Z(e){return{name:e.name,lang:e.lang,default:e.default,onDevice:!1}}async function Oe(e){let t=URL.createObjectURL(e);try{let e=new Image;await new Promise((n,r)=>{e.onload=()=>n(),e.onerror=()=>r(Error(`Failed to load image for clipboard conversion`)),e.src=t});let n=document.createElement(`canvas`);n.width=e.naturalWidth,n.height=e.naturalHeight;let r=n.getContext(`2d`);if(!r)throw Error(`Failed to get canvas context`);return r.drawImage(e,0,0),await new Promise((e,t)=>{n.toBlob(n=>n?e(n):t(Error(`PNG re-encode failed`)),`image/png`)})}finally{URL.revokeObjectURL(t)}}async function Q(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)}))}function ke(){return{"theme-apply":async({themeJson:t,action:n})=>{let{importTheme:r,saveCustomTheme:i,setActiveTheme:a,clearActiveTheme:o,applyThemeOverrides:s}=await e(async()=>{let{importTheme:e,saveCustomTheme:t,setActiveTheme:n,clearActiveTheme:r,applyThemeOverrides:i}=await import(`./theme-engine-B5SkYf3E.js`).then(e=>e.m);return{importTheme:e,saveCustomTheme:t,setActiveTheme:n,clearActiveTheme:r,applyThemeOverrides:i}},__vite__mapDeps([50,1,4]));if(n===`reset`)return o(),s(),{applied:null};if(t){let e=r(t);return i(e),a(e.id),s(),{applied:e.id}}return{applied:null}}}}function Ae(){return{"layout-apply":async t=>{let{getLayoutApplier:n}=await e(async()=>{let{getLayoutApplier:e}=await import(`./layout-apply-registry-Cw730jao.js`);return{getLayoutApplier:e}},[]),r=n();return r?await r(t)??{applied:!0}:{applied:!1,error:`no layout is mounted`}}}}function $(){let e=globalThis;if(!e.__slicc_browser)throw Error(`no browser API on this page`);return e.__slicc_browser}function je(){return{"computer-tab-screenshot":async t=>{let{screenshotTab:n}=await e(async()=>{let{screenshotTab:e}=await import(`./tab-ToMhjbM4.js`);return{screenshotTab:e}},__vite__mapDeps([51,52,19]));return n($(),t.targetId,{maxWidth:t.maxWidth,format:t.format})},"computer-tab-input":async t=>{let{inputTab:n}=await e(async()=>{let{inputTab:e}=await import(`./tab-ToMhjbM4.js`);return{inputTab:e}},__vite__mapDeps([51,52,19]));return await n($(),t.targetId,t.events),{ok:!0}}}}export{M as createStandalonePanelRpcHandlers};
@@ -1 +0,0 @@
1
- import{t as e}from"./provider-1ByYSphI.js";export{e as readMcpAuthEntries};
@@ -1 +0,0 @@
1
- import{t as e}from"./store-CzlK9KIc.js";import"./provider-Df8LFEZ7.js";export{e as readMcpAuthEntries};
@@ -1,91 +0,0 @@
1
- import{n as e,r as t}from"./panel-rpc-BPwAqRch.js";import{a as n,c as r,i,l as a,n as o,o as s,r as c,s as l}from"./ffmpeg-wasm-B77gfnB_.js";import{t as u}from"./permissions-surface-registry-BqPdUk9w.js";import{n as d,t as f}from"./extension-media-capture-DMB4r9UQ.js";const p=`FFMPEG_ENGINE`;function m(e){let t=e?.get(p)?.trim().toLowerCase();return t===`wasm`||t===`mediabunny`?t:`auto`}const h=`FFMPEG_CORE`;function g(e){return e?.get(`FFMPEG_CORE`)?.trim().toLowerCase()===`mt`?`mt`:`st`}async function _(e,t,n){let r=e;if(typeof r.getNativeFile==`function`)try{let e=await r.getNativeFile(t);if(e){let i=await ee(e,t,n);if(await v(r,t,i,n))return i}}catch{}return y(await e.readFileBuffer(t))}async function v(e,t,n,r){if(typeof e.readFileRange!=`function`)return!0;let i,a;try{i=await e.readFileRange(t,0,64),a=(await e.stat(t)).size}catch{return!0}let o=new Uint8Array(await n.slice(0,64).arrayBuffer()),s=(a===void 0||a===n.size)&&o.byteLength===i.byteLength&&o.every((e,t)=>e===i[t]);return s||r?.(`ffmpeg: ${t}: native File (${n.size} bytes) does not match the VFS (${a??`?`} bytes, head differs=${o.byteLength!==i.byteLength||o.some((e,t)=>e!==i[t])}); reading it through the VFS instead`),s}async function ee(e,t,n,r=e=>void structuredClone(e)){let i=``,a=e=>{try{return r(e),!0}catch(e){return i=e instanceof Error?`${e.name}: ${e.message}`:String(e),!1}};if(a(e))return e;let o=new Blob([e],{type:e.type});return a(o)?(n?.(`ffmpeg: ${t}: native File is not transferable to the worker (${te(e)}; ${i}); wrapped it in a Blob`),o):(n?.(`ffmpeg: ${t}: native File is not transferable to the worker and neither is a Blob over it; read ${e.size} bytes into memory instead`),new Blob([await e.arrayBuffer()],{type:e.type}))}function y(e){return new Blob([e])}function te(e){return`${e.constructor?.name??`unknown`}, instanceof File=${typeof File<`u`&&e instanceof File}, instanceof Blob=${e instanceof Blob}, size=${e.size}, type=${JSON.stringify(e.type)}`}let b=0;function x(){b=b+1>>>0;let e=`${b}_${Date.now().toString(36)}`;return{id:e,dir:`__in${e}`}}function S(e,t){return`${e.dir}/${t}`}function C(e){return e.slice(e.lastIndexOf(`/`)+1)}function w(e,t){return`__out${e.id}_${t.split(`/`).pop()||`out.bin`}`}async function T(e,t,n){n.length!==0&&(await e.createDir(`/${t.dir}`),await e.mount(`WORKERFS`,{blobs:n},`/${t.dir}`))}async function E(e,t){try{await e.unmount(`/${t.dir}`)}catch(e){if(s(e))throw e}try{await e.deleteDir(`/${t.dir}`)}catch(e){if(s(e))throw e}}async function D(e,t){try{await e.deleteFile(t)}catch(e){if(s(e))throw e}}function O(){return{stdout:`ffmpeg - two engines behind the ffmpeg CLI
2
-
3
- Usage:
4
- ffmpeg [global-opts] -i input [input-opts] ... output [output-opts]
5
-
6
- Common flags pass through to ffmpeg unchanged. Inputs/outputs are
7
- resolved against the current VFS working directory.
8
-
9
- Engines (chosen automatically; stderr names the one that ran):
10
- mediabunny WebCodecs (hardware encoders, streams from disk, nothing
11
- to install). Takes one-input → one-output jobs whose
12
- every option it can express: remux, -c copy, transcode to
13
- h264/hevc/vp8/vp9/av1 + aac/opus/mp3/vorbis/flac/pcm,
14
- -ss/-t/-to, -vf crop,scale,fps (in that order; transpose
15
- only on its own), -s, -r/-g, -ac/-ar, -an/-vn,
16
- -b:v/-b:a/-crf/-q:a, -movflags, -metadata.
17
- Without an explicit -c, streams the container can hold are
18
- copied rather than re-encoded; an explicit encoder always
19
- re-encodes; -c copy never re-encodes (a codec the container
20
- cannot hold falls to the wasm core, which fails like ffmpeg).
21
- wasm @ffmpeg/core (ipk-installed; see -version). Everything
22
- else: lavfi sources, -f concat, filtergraphs, -f null
23
- analysis sinks, image/GIF output, codecs the browser lacks.
24
- FFMPEG_CORE=mt opts into @ffmpeg/core-mt on a cross-origin-
25
- isolated leader: multi-threaded, SINGLE-INPUT jobs only
26
- (multi-input deadlocks and is refused), -threads/-filter_threads
27
- capped unless you pass them.
28
- FFMPEG_ENGINE=wasm ffmpeg ... force byte-identical ffmpeg behaviour
29
- FFMPEG_ENGINE=mediabunny ffmpeg ... fail (and say why) instead of falling back
30
-
31
- Concatenating (concat demuxer):
32
- printf "file 'a.mp4'\\nfile 'b.mp4'\\n" > list.txt
33
- ffmpeg -f concat -safe 0 -i list.txt -c copy joined.mp4
34
-
35
- Files named inside the list are read from the VFS too, resolved
36
- against the LIST FILE's directory. As in ffmpeg, absolute and
37
- parent-traversing members need -safe 0. The \`concat:\` protocol
38
- form (-i "concat:a.ts|b.ts") is not supported — use -f concat.
39
-
40
- Webcam capture (avfoundation-style):
41
- ffmpeg -f avfoundation -video_size 1280x720 -framerate 30 \\
42
- -i "0" -frames:v 1 -update 1 -y photo.jpg
43
- ffmpeg -f avfoundation -i "0" -t 5 clip.webm
44
- ffmpeg -f avfoundation -i "0:0" -t 5 clip.webm # video + audio
45
- ffmpeg -f avfoundation -i ":0" -t 5 audio.webm # audio only
46
- ffmpeg -f avfoundation -list_devices true -i "" # list devices
47
-
48
- Avfoundation-specific options:
49
- -warmup MS Photo mode: ms to wait for auto-exposure to settle
50
- before grabbing the frame. Default 1500. Pass 0 to
51
- capture immediately (will look dark / noisy on most
52
- webcams because the AE algorithm hasn't converged).
53
- -exact_size Use exact:{w,h,frameRate} constraints rather than
54
- ideal:. Falls back to ideal: with a warning if the
55
- camera can't deliver the requested mode.
56
-
57
- Captured streams can be transcoded through the WASM core in the same
58
- invocation. Output options like -c:v, -c:a, -crf, -preset, -pix_fmt,
59
- -vf, -b:v, -b:a, and a mismatched output extension all trigger a
60
- post-capture wasm pass so the produced file matches what the user asked
61
- for (e.g. real H.264 mp4 instead of webm bytes in a .mp4 wrapper).
62
-
63
- Analysis sinks (no output file — results are on stderr):
64
- ffmpeg -i in.mp4 -af silencedetect=noise=-30dB:d=0.5 -f null -
65
- ffmpeg -i in.mp4 -af loudnorm=print_format=json -f null /dev/null
66
- ffmpeg -i in.mp4 -af loudnorm /dev/null
67
- With output \`-\` or \`/dev/null\`, the wrapper skips VFS writeback
68
- and returns the core log (filter measurements) on stderr. \`-\`
69
- requires \`-f null\` (stdout is not emulated). Bare \`/dev/null\`
70
- is accepted and gets \`-f null\` injected (MEMFS has no /dev/null).
71
-
72
- Notes:
73
- - The wasm engine needs an ipk-installed core: \`ipk add -g @ffmpeg/core@<pinned>\`
74
- (\`@ffmpeg/core-mt\` for the FFMPEG_CORE=mt opt-in); \`ffmpeg -version\`
75
- prints which one is loaded. Inputs are mounted lazily (never copied into
76
- the wasm heap); only the output is buffered.
77
- - The browser will prompt for camera/mic permission on first capture.
78
- - Numeric -i values index into the per-kind enumerateDevices() list,
79
- matching ffmpeg's native avfoundation device numbering on macOS.
80
- `,stderr:``,exitCode:0}}async function k(e){let t=g(e.env)===`mt`,n=await a(q(e),void 0,t);return n?{stdout:`ffmpeg (wasm via @ffmpeg/ffmpeg)\ncore: ${c(n)}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`ffmpeg: ${i(t)}\n`,exitCode:1}}function A(e){if(!e.includes(`:`))return{video:e};let t=e.indexOf(`:`),n=e.slice(0,t),r=e.slice(t+1);return{...n?{video:n}:{},...r?{audio:r}:{}}}const j=new Set(`-f.-safe.-i.-c.-c:v.-c:a.-vf.-af.-filter:v.-filter:a.-filter_complex.-r.-b:v.-b:a.-s.-t.-ss.-to.-pix_fmt.-vcodec.-acodec.-ar.-ac.-frames:v.-frames:a.-q:v.-q:a.-crf.-preset.-tune.-movflags.-map.-metadata.-loglevel.-threads.-video_size.-framerate.-pixel_format.-update.-list_devices.-warmup.-bsf.-bsf:v.-bsf:a.-profile:v.-level.-g.-keyint_min.-sc_threshold.-max_muxing_queue_size.-fflags.-avoid_negative_ts.-start_number.-strict.-vsync.-fps_mode.-async.-disposition.-map_metadata.-c:s.-scodec.-ab.-aspect`.split(`.`)),ne=new Set(`-y.-n.-vn.-an.-sn.-dn.-re.-stats.-nostats.-nostdin.-shortest.-copyts.-hide_banner.-autorotate.-noautorotate.-ignore_unknown.-exact_size.-bitexact.-xerror.-benchmark.-benchmark_all.-dump.-hex.-stdin.-noautoscale.-accurate_seek.-noaccurate_seek.-fix_sub_duration.-recast_media`.split(`.`));function re(){return{inputs:[],outputOpts:[],outputPath:null,listDevices:!1,exactSize:!1,pendingOpts:[]}}function M(e,t,n){let r=e[t+1];if(typeof r!=`string`)throw Error(`ffmpeg: ${n} requires a value`);return r}function ie(e,t,n){let r=M(t,n,`-i`);return e.inputs.push({path:r,format:e.pendingFormat,videoSize:e.pendingVideoSize,frameRate:e.pendingFrameRate,raw:[...e.pendingOpts,`-i`,r]}),e.pendingFormat=void 0,e.pendingVideoSize=void 0,e.pendingFrameRate=void 0,e.pendingOpts=[],n+2}function N(e,t,n){let r=M(t,n,`-video_size`),i=/^(\d+)x(\d+)$/.exec(r);return i&&(e.pendingVideoSize={width:parseInt(i[1],10),height:parseInt(i[2],10)}),e.pendingOpts.push(`-video_size`,r),n+2}function P(e,t,n){let r=M(t,n,`-framerate`),i=parseFloat(r);return Number.isNaN(i)||(e.pendingFrameRate=i),e.pendingOpts.push(`-framerate`,r),n+2}function F(e,t,n){let r=M(t,n,`-list_devices`);return/^(true|1|yes)$/i.test(r)&&(e.listDevices=!0),e.pendingOpts.push(`-list_devices`,r),n+2}function I(e,t,n){let r=M(t,n,`-warmup`),i=parseInt(r,10);return!Number.isNaN(i)&&i>=0&&(e.warmupMs=i),n+2}function L(e,t){for(let n=t;n<e.length;n++){let t=e[n];if(!t.startsWith(`-`)||t===`-`)return!0;j.has(t)&&(n+=1)}return!1}function R(e,t){let n=e[t+1];return typeof n!=`string`||n.startsWith(`-`)?!1:L(e,t+2)}function z(e,t,n,r){if(j.has(r)){let i=M(t,n,r);return e.pendingOpts.push(r,i),n+2}return!ne.has(r)&&R(t,n)?(e.pendingOpts.push(r,t[n+1]),n+2):(e.pendingOpts.push(r),n+1)}function B(e,t,n){return e.outputPath=t,e.outputOpts=e.pendingOpts,e.pendingOpts=[],n+1}function V(e){let t=re(),n=0;for(;n<e.length;){let r=e[n];if(r===`-i`){n=ie(t,e,n);continue}if(r===`-f`){let r=M(e,n,`-f`);t.pendingFormat=r,t.pendingOpts.push(`-f`,r),n+=2;continue}if(r===`-video_size`){n=N(t,e,n);continue}if(r===`-framerate`){n=P(t,e,n);continue}if(r===`-list_devices`){n=F(t,e,n);continue}if(r===`-warmup`){n=I(t,e,n);continue}if(r===`-exact_size`){t.exactSize=!0,n+=1;continue}if(r===`-`&&W(t.pendingOpts)){n=B(t,r,n);continue}if(r.startsWith(`-`)){n=z(t,e,n,r);continue}n=B(t,r,n)}return{inputs:t.inputs,outputOpts:t.outputOpts,outputPath:t.outputPath,listDevices:t.listDevices,...t.warmupMs===void 0?{}:{warmupMs:t.warmupMs},exactSize:t.exactSize}}function H(e){return e.inputs.some(e=>e.format===`avfoundation`)}const U=new Set([`-`,`/dev/null`]);function W(e){for(let t=0;t<e.length-1;t++)if(e[t]===`-f`&&e[t+1]===`null`)return!0;return!1}function G(e){let t=e.outputPath;return t===null||!U.has(t)?!1:t===`/dev/null`||W(e.outputOpts)}function K(e){return W(e)?e:[...e,`-f`,`null`]}function q(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},readBytes:t=>e.fs.readFileBuffer(t),fromDir:e.cwd}}function J(e){let t=[];return(e.mode===`photo`||e.captureVideo!==!1)&&t.push(`camera`),e.mode===`video`&&e.captureAudio&&t.push(`microphone`),t}function Y(e){return e.length===0?`media devices`:e.length===1?e[0]:`${e.slice(0,-1).join(`, `)} and ${e[e.length-1]}`}function ae(e){for(let t of e){let e=t.stream;if(e)for(let t of e.getTracks())t.stop()}}async function oe(e,t){let n=u();if(!n)return null;try{let r=await n.prompt({kinds:e,description:t,skipIfGranted:!0});if(ae(r.grants),r.status===`granted`)return{ok:!0};let i=r.message?`: ${r.message}`:``;return{ok:!1,message:`${r.reason??r.status}${i}`}}catch{return null}}async function se(t){if(t.length===0)return{ok:!0};let n=`ffmpeg is requesting access to your ${Y(t)}.`,r=await oe(t,n);if(r)return r;let i=e();if(i)try{return await i.call(`permission-request`,{kinds:t,description:n,skipIfGranted:!0},{timeoutMs:3e5}),{ok:!0}}catch(e){let t=e instanceof Error?e.message:String(e);return/permission surface unavailable/i.test(t)?{ok:!0}:{ok:!1,message:t}}return{ok:!0}}function ce(e){let t=e.inputs.find(e=>e.format===`avfoundation`);if(!t)throw Error(`ffmpeg: no avfoundation input found`);if(!e.outputPath)throw Error(`ffmpeg: output path is required`);let n=e.outputOpts.indexOf(`-frames:v`),r=n>=0&&e.outputOpts[n+1]===`1`,i=e.outputOpts.indexOf(`-update`),a=i>=0&&e.outputOpts[i+1]===`1`,o=e.outputOpts.indexOf(`-t`),s=o>=0?parseFloat(e.outputOpts[o+1]):NaN,c=A(t.path),l=le(e.outputPath),u=/^image\//.test(l),d=!c.video&&!!c.audio;if(!d&&(r||a||u)){let n=u&&/^image\/(jpeg|png|webp)$/.test(l)?l:`image/jpeg`;return{outputPath:e.outputPath,captureMime:n,needsTranscode:X(e.outputOpts,`photo`)||n!==l,request:{mode:`photo`,deviceId:c.video,width:t.videoSize?.width,height:t.videoSize?.height,frameRate:t.frameRate,exactSize:e.exactSize,mimeType:n,quality:.92,...e.warmupMs===void 0?{}:{warmupMs:e.warmupMs}}}}let f=d||!!c.audio,p=`video/webm`;return{outputPath:e.outputPath,captureMime:p,needsTranscode:X(e.outputOpts,`video`)||p!==l,request:{mode:`video`,deviceId:c.video,captureVideo:!d,...f?{captureAudio:!0}:{},...c.audio?{audioDeviceId:c.audio}:{},width:t.videoSize?.width,height:t.videoSize?.height,frameRate:t.frameRate,exactSize:e.exactSize,mimeType:p,durationMs:Number.isFinite(s)?s*1e3:void 0}}}function X(e,t){let n=t===`photo`?new Set([`-vf`,`-filter:v`,`-filter_complex`,`-pix_fmt`,`-q:v`,`-vcodec`,`-c:v`]):new Set([`-c`,`-c:v`,`-c:a`,`-vcodec`,`-acodec`,`-vf`,`-af`,`-filter:v`,`-filter:a`,`-filter_complex`,`-pix_fmt`,`-pixel_format`,`-crf`,`-preset`,`-tune`,`-b:v`,`-b:a`,`-ar`,`-ac`,`-q:v`,`-q:a`,`-movflags`,`-r`]);return e.some(e=>n.has(e))}function le(e){let t=e.toLowerCase();return t.endsWith(`.jpg`)||t.endsWith(`.jpeg`)?`image/jpeg`:t.endsWith(`.png`)?`image/png`:t.endsWith(`.webp`)?`image/webp`:t.endsWith(`.gif`)?`image/gif`:t.endsWith(`.webm`)?`video/webm`:t.endsWith(`.mp4`)?`video/mp4`:t.endsWith(`.mov`)?`video/quicktime`:t.endsWith(`.mkv`)?`video/x-matroska`:t.endsWith(`.m4a`)?`audio/mp4`:t.endsWith(`.mp3`)?`audio/mpeg`:t.endsWith(`.wav`)?`audio/wav`:t.endsWith(`.ogg`)?`audio/ogg`:`application/octet-stream`}function ue(e){return e===`image/jpeg`?`jpg`:e===`image/png`?`png`:e===`image/webp`?`webp`:e===`video/webm`?`webm`:e===`video/mp4`?`mp4`:e===`audio/webm`?`webm`:`bin`}function de(e,t){let n=e.path.lastIndexOf(`/`),r=n>=0?e.path.slice(n+1):e.path;return r?`__in${t}_${r}`:`__in${t}.bin`}async function fe(e,t){if(e.length===0||e.includes(`--help`))return O();if(e.includes(`-version`)||e.includes(`--version`))return k(t);let n;try{n=V(e)}catch(e){return{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return n.listDevices&&H(n)?pe():n.outputPath?n.inputs.length===0?{stdout:``,stderr:`ffmpeg: at least one input file must be specified
81
- `,exitCode:1}:H(n)?ye(n,t):Ve(n,t):{stdout:``,stderr:`ffmpeg: at least one output file must be specified
82
- `,exitCode:1}}async function pe(){let e;try{e=await me()}catch(e){return{stdout:``,stderr:`ffmpeg: failed to enumerate devices: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let t=[];return t.push(`[AVFoundation indev @ 0x0] AVFoundation video devices:`),e.videoinputs.length===0?t.push(`[AVFoundation indev @ 0x0] (none)`):e.videoinputs.forEach((e,n)=>{t.push(`[AVFoundation indev @ 0x0] [${n}] ${e.label||`Camera ${n}`}`)}),t.push(`[AVFoundation indev @ 0x0] AVFoundation audio devices:`),e.audioinputs.length===0?t.push(`[AVFoundation indev @ 0x0] (none)`):e.audioinputs.forEach((e,n)=>{t.push(`[AVFoundation indev @ 0x0] [${n}] ${e.label||`Microphone ${n}`}`)}),{stdout:``,stderr:`${t.join(`
83
- `)}\n`,exitCode:0}}async function me(){if(t()&&typeof navigator<`u`&&navigator.mediaDevices?.enumerateDevices){let e=await navigator.mediaDevices.enumerateDevices(),t=e=>({deviceId:e.deviceId,label:e.label||``,...e.groupId?{groupId:e.groupId}:{}});return{videoinputs:e.filter(e=>e.kind===`videoinput`).map(t),audioinputs:e.filter(e=>e.kind===`audioinput`).map(t)}}let n=e();if(!n)throw Error(`device enumeration requires a browser context`);return n.call(`enumerate-media-devices`,void 0,{timeoutMs:1e4})}async function he(e){let t=await f({kind:`camera`,...e.request}),n=new ArrayBuffer(t.bytes.byteLength);return new Uint8Array(n).set(t.bytes),{bytes:n,mimeType:t.mimeType,width:t.width,height:t.height,...t.durationMs===void 0?{}:{durationMs:t.durationMs}}}async function ge(t){let n=e();if(!n)return null;let r=await n.call(`capture-camera`,t.request,{timeoutMs:3e5});return{bytes:r.bytes,mimeType:r.mimeType,width:r.width,height:r.height,durationMs:r.durationMs}}async function _e(e){try{if(d())return{result:await he(e)};let t=await ge(e);return t?{result:t}:{error:{stdout:``,stderr:`ffmpeg: camera capture requires a browser context — not available in this runtime
84
- `,exitCode:1}}}catch(e){return{error:{stdout:``,stderr:ve(e),exitCode:1}}}}function ve(e){let t=e instanceof Error?e.message:String(e);return/NotAllowedError|Permission denied/i.test(t)?`ffmpeg: camera permission denied
85
- `:/NotFoundError/i.test(t)?`ffmpeg: no camera device found
86
- `:`ffmpeg: ${t}\n`}async function ye(e,t){let n;try{n=ce(e)}catch(e){return{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let r=await se(J(n.request));if(!r.ok)return{stdout:``,stderr:`ffmpeg: camera permission denied (${r.message})\n`,exitCode:1};let i=await _e(n);if(`error`in i)return i.error;let a=i.result,o=Math.round(a.bytes.byteLength/1024),s=`${a.width}x${a.height}`,c=n.request.mode===`video`&&a.durationMs?`${s}, ${Math.round(a.durationMs)}ms`:s,l=new Uint8Array(a.bytes),u=``;if(n.needsTranscode)try{let r=await be({bytes:l,captureMime:n.captureMime,outputName:n.outputPath,outputOpts:e.outputOpts,ipk:q(t),onLog:e=>{u+=`${e}\n`}});l=new Uint8Array(r.byteLength),l.set(r)}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`${u}ffmpeg: captured ${c} (${o} KB) but transcode failed: ${t}\n`,exitCode:1}}let d=t.fs.resolvePath(t.cwd,n.outputPath);try{await t.fs.writeFile(d,l)}catch(e){return{stdout:``,stderr:`ffmpeg: failed to write ${n.outputPath}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let f=Math.round(l.byteLength/1024),p=n.needsTranscode?`${o} KB → ${f} KB`:`${o} KB`;return{stdout:``,stderr:`${u}ffmpeg: captured ${c} (${p}) to ${n.outputPath}\n`,exitCode:0}}async function be(e){let t=x(),i=`capture.${ue(e.captureMime)}`,a=S(t,i),o=w(t,e.outputName);e.onLog(`transcoding captured stream...`);let c=await n({onProgress:e.onLog,ipk:e.ipk}),l=t=>{e.onLog(t.message)};c.on(`log`,l);let u=!1;try{await T(c,t,[{name:i,data:y(e.bytes)}]);let n=[`-i`,a,...e.outputOpts,o],r=await c.exec(n);if(r!==0)throw Error(`ffmpeg-core exited with code ${r}`);let s=await c.readFile(o);if(s instanceof Uint8Array)return s;if(typeof s==`string`)return new TextEncoder().encode(s);throw Error(`ffmpeg-core returned an unknown payload type`)}catch(e){throw s(e)&&(u=!0,r(c)),e}finally{try{c.off(`log`,l)}catch{}if(!u)try{await E(c,t),await D(c,o)}catch{}}}function xe(e){return e.format===`concat`}function Se(e){return e.split(`
87
- `).map(e=>{let t=e.trim();if(!t.startsWith(`file `))return{raw:e};let n=Ce(t.slice(4).trim());return n?{raw:e,file:n}:{raw:e}})}function Ce(e){let t=e[0];if(t!==`'`&&t!==`"`)return e.replace(/\\(.)/g,`$1`);let n=``;for(let r=1;r<e.length;r++){let i=e[r];if(i===`\\`&&t===`"`&&r+1<e.length){n+=e[r+1],r+=1;continue}if(i!==t){n+=i;continue}if(t===`'`&&e.slice(r,r+4)===`'\\''`){n+=`'`,r+=3;continue}return n}return n}function we(e,t,n){return`__cat${t}_${n}_${e.slice(e.lastIndexOf(`/`)+1).replace(/[^A-Za-z0-9._-]/g,`_`)||`part.bin`}`}function Te(e){return e.startsWith(`/`)||/^[A-Za-z]:/.test(e)?!1:!e.split(`/`).includes(`..`)}function Ee(e){let t=e.raw.lastIndexOf(`-safe`);if(t<0)return!0;let n=e.raw[t+1];return!(n===`0`||n?.startsWith(`-`))}async function De(e,t,n,r,i,a,o){let s=Se(new TextDecoder().decode(t)),c=e.slice(0,e.lastIndexOf(`/`))||`/`,l=[],u=[];for(let e of s){if(e.file===void 0){u.push(e.raw);continue}if(r&&!Te(e.file))return{error:{kind:`unsafe`,file:e.file}};let t=a.fs.resolvePath(c,e.file);if(!await a.fs.exists(t))return{error:{kind:`missing`,file:e.file}};let s=S(i,we(e.file,n,l.length));l.push({ffmpegName:s,data:await _(a.fs,t,o)}),u.push(`file '${s}'`)}return{listBytes:new TextEncoder().encode(u.join(`
88
- `)),extraFiles:l}}function Oe(e){return e.format===`lavfi`}async function ke(e,t,n,r=()=>{}){let i=[];for(let[a,o]of e.inputs.entries()){if(Oe(o)){i.push({ffmpegName:o.path,data:null,virtual:!0});continue}let e=n.fs.resolvePath(n.cwd,o.path);if(!await n.fs.exists(e))return{error:{stdout:``,stderr:`ffmpeg: input file not found: ${o.path}\n`,exitCode:1}};let s=S(t,de(o,a));if(xe(o)){let c=await De(e,await n.fs.readFileBuffer(e),a,Ee(o),t,n,r);if(`error`in c){let{kind:e,file:t}=c.error,n=e===`unsafe`?`unsafe file name: ${t} (pass -safe 0 to allow it)`:`file not found: ${t}`;return{error:{stdout:``,stderr:`ffmpeg: concat list ${o.path}: ${n}\n`,exitCode:1}}}i.push({ffmpegName:s,data:y(c.listBytes),virtual:!1,extraFiles:c.extraFiles});continue}i.push({ffmpegName:s,data:await _(n.fs,e,r),virtual:!1})}return{inputs:i}}const Ae={threads:8,filterThreads:2};function Z(e){return e.some(e=>e===`-threads`||e.startsWith(`-threads:`))}function je(e,t=Ae,n=typeof navigator<`u`?navigator.hardwareConcurrency:void 0){let r=String(Math.max(1,Math.min(t.threads,n??t.threads))),i=[...e.inputs.flatMap(e=>e.raw),...e.outputOpts],a=[];i.includes(`-filter_threads`)||a.push(`-filter_threads`,String(t.filterThreads)),i.includes(`-filter_complex_threads`)||a.push(`-filter_complex_threads`,String(t.filterThreads));let o=e.inputs.map((e,t)=>{let n=[...t===0?a:[],...Z(e.raw)?[]:[`-threads`,r]];return n.length>0?{...e,raw:[...n,...e.raw]}:e}),s=Z(e.outputOpts)?e.outputOpts:[`-threads`,r,...e.outputOpts];return{...e,inputs:o,outputOpts:s}}function Me(e){return{stdout:``,stderr:`${e}ffmpeg: the multi-threaded core deadlocks with more than one input (ffmpeg starts a demux thread per input; emscripten proxies their pthread_create to a main thread blocked in exec; see #2810). Run without FFMPEG_CORE=mt so the single-threaded @ffmpeg/core handles this job.
89
- `,exitCode:1}}function Ne(e,t,n){let r=[];for(let[n,i]of e.inputs.entries()){let e=t[n],a=i.raw;for(let t=0;t<a.length;t++){if(a[t]===`-i`){r.push(`-i`,e.virtual?a[t+1]:e.ffmpegName),t+=1;continue}r.push(a[t])}}return r.push(...e.outputOpts),r.push(n),r}function Pe(e){let t=[];for(let n of e)if(n.data!==null){for(let e of n.extraFiles??[])t.push({name:C(e.ffmpegName),data:e.data});t.push({name:C(n.ffmpegName),data:n.data})}return t}async function Fe(e){let t=`__health_probe`;try{await e.writeFile(t,new Uint8Array([0])),await e.deleteFile(t)}catch(e){if(s(e))throw e}}async function Q(e,t,n){await E(e,t),await D(e,n)}async function Ie(e,t,n,r){let i;try{i=await e.readFile(t)}catch(e){if(s(e))throw e;return{error:{stdout:``,stderr:r()||`ffmpeg: produced no output file for ${n}\n`,exitCode:1}}}let a=i instanceof Uint8Array?i:new TextEncoder().encode(typeof i==`string`?i:``);return a.byteLength===0?{error:{stdout:``,stderr:r()||`ffmpeg: produced an empty output file for ${n}\n`,exitCode:1}}:{bytes:a}}function Le(e,t,n){return n?`__null_sink${e.id}`:w(e,t)}function $(e,t){return{stdout:``,stderr:`${e}ffmpeg: ${t instanceof Error?t.message:String(t)}\nffmpeg: the wasm core faulted and was recycled; retry the command (a large input may need to be split into smaller passes)
90
- `,exitCode:1}}async function Re(e){let{ffmpeg:t,parsed:n,resolvedInputs:r,stage:i,outputName:a,outputPath:s,analysisSink:c,readStderr:u}=e,d=l()===o;if(d&&n.inputs.length>1)return{early:Me(u()),outputBytes:null};await T(t,i,Pe(r));let f=c?{...n,outputOpts:K(n.outputOpts)}:n,p=Ne(d?je(f):f,r,a),m=await t.exec(p);if(m!==0)return{early:{stdout:``,stderr:u()||`ffmpeg: exited with code ${m}\n`,exitCode:m||1},outputBytes:null};if(c)return await Fe(t),{early:{stdout:``,stderr:u(),exitCode:0},outputBytes:null};let h=await Ie(t,a,s,u);return`error`in h?{early:h.error,outputBytes:null}:{early:null,outputBytes:h.bytes}}async function ze(e){let{ffmpeg:t,logHandler:n,stage:i,outputName:a,readStderr:o,faulted:c}=e;try{t.off(`log`,n)}catch{}if(c)return null;try{return await Q(t,i,a),null}catch(e){return s(e)?(r(t),$(o(),e)):null}}async function Be(e,t,n,r,i){let{ffmpegEngineFromEnv:a}=await import(`./engine-D531XNHE.js`),o=a(i.env),s=t.length===1?t[0].data:null;if(o===`wasm`||r||s===null)return o===`mediabunny`?{result:{stdout:``,stderr:`ffmpeg: FFMPEG_ENGINE=mediabunny cannot run this: analysis sinks, lavfi and concat inputs are wasm-only
91
- `,exitCode:1}}:{fallback:!0,note:null};let{runFfmpegFastPath:c}=await import(`./fast-path-CYxpDuii.js`);return c({parsed:e,input:s,outputPath:i.fs.resolvePath(i.cwd,n),fs:i.fs,engine:o})}async function Ve(e,t){let n=x(),r=[],i=await ke(e,n,t,e=>r.push(e));if(`error`in i)return i.error;let a=i.inputs,o=e.outputPath,s=G(e),c=await Be(e,a,o,s,t);if(`result`in c)return c.result;let l=await He({parsed:e,ctx:t,stage:n,resolvedInputs:a,outputPath:o,analysisSink:s}),u=[...c.note?[`ffmpeg: ${c.note}`]:[],...r].map(e=>`${e}\n`).join(``);return u?{...l,stderr:`${u}${l.stderr}`}:l}async function He(e){let{parsed:t,ctx:i,stage:a,resolvedInputs:o,outputPath:s,analysisSink:c}=e,l=Le(a,s,c),u=``,d;try{d=await n({onProgress:e=>{u+=`${e}\n`},ipk:q(i),preferMt:g(i.env)===`mt`})}catch(e){return{stdout:``,stderr:`${u}ffmpeg: failed to load wasm: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let f=e=>{u+=`${e.message}\n`};d.on(`log`,f);let p=!1,m=null,h=null;try{let e=await Re({ffmpeg:d,parsed:t,resolvedInputs:o,stage:a,outputName:l,outputPath:s,analysisSink:c,readStderr:()=>u});m=e.early,h=e.outputBytes}catch(e){p=!0,r(d),m=$(u,e)}finally{let e=await ze({ffmpeg:d,logHandler:f,stage:a,outputName:l,readStderr:()=>u,faulted:p});e&&(m=e)}if(m)return m;try{await i.fs.writeFile(i.fs.resolvePath(i.cwd,s),h??new Uint8Array)}catch(e){return{stdout:``,stderr:`${u}ffmpeg: cannot write ${s}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return{stdout:``,stderr:u,exitCode:0}}export{_ as a,g as c,q as createIpkContextFromCtx,E as i,m as l,x as n,h as o,S as r,fe as runFfmpeg,p as s,T as t};
@@ -1,53 +0,0 @@
1
- import{n as e}from"./panel-rpc-BPwAqRch.js";import{r as t}from"./base64-BPBW1Gzr.js";import"./bridge-protocol-31SWTdS5.js";import{r as n,t as r}from"./subcommand-help-CgO7wRS5.js";import{a as i,o as a,s as o,t as s}from"./encode-frame-B8GkHc2t.js";import{a as c,i as l,n as u,r as d,s as f}from"./keys-Dexx8cLD.js";import{getComputerRegistry as p,installComputerRegistry as m}from"./registry-Bq_j-EXx.js";import{getComputersHost as ee}from"./host-iTtS0MRF.js";const te=[`bridgeToken`,`bridge`,`tray`],ne=[`cherry`,`connect`],re=[`/join/`,`/tray/`],ie=[``,`/`,`/cloud`,`/connect`];function ae(e){let t=e.replace(/\/index\.html$/,`/`);return t.length>1?t.replace(/\/$/,``):t}function oe(e,t={}){let n;try{n=new URL(e)}catch{return!1}for(let e of te)if(n.searchParams.has(e))return!0;for(let e of ne)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=ae(n.pathname);return ie.includes(r)?!0:re.some(e=>`${r}/`.startsWith(e))}function h(e={x:0,y:0}){return{x:e.x,y:e.y}}function se(e,t){return t.x!==void 0&&t.y!==void 0&&(e.x=t.x,e.y=t.y),e}function g(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 ce(e,t){return t.map(t=>{if(t.type===`mousemove`||t.type===`click`||t.type===`button`||t.type===`scroll`){let n=g(e,t);return{...t,x:n.x,y:n.y}}return t.type===`drag`&&se(e,{x:t.x2,y:t.y2}),t})}function _(e){return`tab:${e}`}const v={screenshot:!0,text:!1,frames:`poll`,keyboard:!0,mouse:`absolute`,scroll:!0,exec:!1,inputAllowed:!0},y={1:`left`,2:`middle`,3:`right`};function b(e){if(oe(e.url))throw Error(`refusing SLICC app tab '${e.title??e.url}'`)}var le=class{browser;targetId;seq=0;title;url;size=null;pointer=h();constructor(e,t,n={title:t,url:``}){this.browser=e,this.targetId=t,this.title=n.title,this.url=n.url}describe(){return{id:_(this.targetId),kind:`tab`,title:this.title,size:this.size,state:`live`,capabilities:v,pid:null}}async screenshot(e){return await this.refreshInfo(),b({url:this.url,title:this.title}),this.browser.withTab(this.targetId,async t=>{let n=await ue(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(),b({url:this.url,title:this.title}),await this.browser.withTab(this.targetId,async t=>{for(let n of e)await x(t,n,this.pointer)})}async close(){}async refreshInfo(){let e=await ge(this.browser,this.targetId);e&&(this.title=e.title||this.title,this.url=e.url||this.url)}};async function ue(e,t){let n=await e.screenshot({format:`png`}),r=s(n),c=o(r)??i(r),l=r;t.maxWidth&&c&&c.width>t.maxWidth?l=s(await e.screenshot({format:`png`,maxWidth:t.maxWidth})):t.format!==`png`&&(l=s(await e.screenshot({format:`jpeg`,quality:70})));let u=o(l)??i(l)??c??{width:0,height:0};return t.format!==`png`&&!i(l)&&(l=await a(l)),{mime:i(l)?`image/jpeg`:`image/png`,bytes:l,width:u.width,height:u.height,native:c}}var de=class{rpc;targetId;seq=0;title;url;size=null;pointer=h();constructor(e,t,n={title:t,url:``}){this.rpc=e,this.targetId=t,this.title=n.title,this.url=n.url}describe(){return{id:_(this.targetId),kind:`tab`,title:this.title,size:this.size,state:`live`,capabilities:v,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:s(t.base64)}}async input(e){let t=ce(this.pointer,e);await this.rpc.call(`computer-tab-input`,{targetId:this.targetId,events:t})}async close(){}};async function x(e,t,n=h()){switch(t.type){case`mousemove`:{let r=g(n,t);await e.send(`Input.dispatchMouseEvent`,{type:`mouseMoved`,x:r.x,y:r.y});return}case`button`:await fe(e,t,n);return;case`click`:await pe(e,t,n);return;case`drag`:await S(e,t,n);return;case`scroll`:{let r=g(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 me(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 fe(e,t,n){let r=g(n,t);await e.send(`Input.dispatchMouseEvent`,{type:t.down?`mousePressed`:`mouseReleased`,x:r.x,y:r.y,button:y[t.button],clickCount:1})}async function pe(e,t,n){let r=g(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:y[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:y[t.button],clickCount:n})}async function S(e,t,n){await x(e,{type:`mousemove`,x:t.x1,y:t.y1},n),await x(e,{type:`button`,button:1,down:!0,x:t.x1,y:t.y1},n),await x(e,{type:`mousemove`,x:t.x2,y:t.y2},n),await x(e,{type:`button`,button:1,down:!1,x:t.x2,y:t.y2},n)}async function me(e,t){let n=u(t.keysym);if(!n)throw Error(`unknown keysym '${t.keysym}'`);for(let r of d(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 he(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 ge(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 w(e,t){for(let n of t){let t=T(e,n);if(t)return t}return null}function T(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 E={low:256,medium:768,high:1536};function D(e){if(!e)return E.medium;if(e in E)return E[e];let t=/^(\d+)(?:x\d+)?$/u.exec(e);if(t){let e=Number.parseInt(t[1],10);if(e>0)return e}return E.medium}function O(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 _e(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 k(e,t){return{width:e.shotWidth,height:e.shotHeight,scale:e.scale,at:t}}function ve(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 A=`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
- rm [id] unregister (does not stop a v86 guest)
14
- use <id> set the default computer
15
- info descriptor for the current target
16
-
17
- Look:
18
- screenshot [--size low|medium|high|<N>] [--view] [file]
19
- JPEG; prints WxH → wxh (scale s) and a frozen frame
20
- text text-mode dump when the backend supports it
21
- watch [--fps N] [--stop] live frames to the page (phase 2 UI)
22
-
23
- Poke (xdotool; every verb ends with a frozen-frame line):
24
- mousemove <x> <y> [--relative]
25
- click [1|2|3] [--at x,y] [--hold MS] [--repeat N]
26
- mousedown [1|2|3] [--at x,y]
27
- mouseup [1|2|3] [--at x,y]
28
- drag <x1> <y1> <x2> <y2>
29
- scroll <dx> <dy> [--at x,y]
30
- key <keysym> [keysym...] ctrl+alt+Delete, Return, F5, super+space
31
- keydown <keysym>
32
- keyup <keysym>
33
- type <text...>
34
- wait <ms>
35
- exec <command...> when the backend supports it
36
-
37
- Anthropic aliases (same verbs):
38
- left_click right_click middle_click double_click triple_click
39
- left_click_drag mouse_move scroll key type screenshot wait
40
-
41
- Coordinates are screenshot-space of the last shot unless --native.
42
- Buttons: 1 left, 2 middle, 3 right. Chain verbs: computer click 1 type hello
43
-
44
- v86 guests register as v86:<name> on \`v86 start\`. Prefer this command;
45
- \`v86 type|key|mouse|screenshot|text\` remain as thin aliases.
46
- `,j=[`-c`,`--computer`,`--size`,`--at`,`--hold`,`--repeat`,`--fps`,`-n`,`--name`],M=new Set([`ls`,`add`,`rm`,`use`,`info`,`screenshot`,`text`,`watch`,`mousemove`,`click`,`mousedown`,`mouseup`,`drag`,`scroll`,`key`,`keydown`,`keyup`,`type`,`wait`,`exec`]),N={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`},P=new Set([`type`,`key`,`exec`,`add`]),F=new Set([`--size`,`--at`,`--hold`,`--repeat`,`--fps`,`-n`,`--name`,`-c`,`--computer`]);function I(e){return M.has(e)||e in N}function ye(e){return M.has(e)?e:N[e]??null}function be(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 xe(e){let t=[],n=0;for(;n<e.length;){let r=e[n];if(r===`--`){n+=1;continue}let i=ye(r);if(!i)throw Error(`unknown verb '${r}' — see \`computer --help\``);n+=1;let{args:a,next:o}=Ce(i,e,n);t.push({verb:i,alias:r,args:Se(r,i,a)}),n=o}return t}function Se(e,t,n){return t===`click`?e===`left_click`?L(n,`1`):e===`middle_click`?L(n,`2`):e===`right_click`?L(n,`3`):e===`double_click`?[...L(n,`1`),`--repeat`,`2`]:e===`triple_click`?[...L(n,`1`),`--repeat`,`3`]:n:n}function L(e,t){return e[0]===`1`||e[0]===`2`||e[0]===`3`?e:[t,...e]}function Ce(e,t,n){return P.has(e)?we(t,n):Te(De(e),t,n)}function we(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&&I(t))break;n.push(t),r+=1}return{args:n,next:r}}function R(e){return e.startsWith(`--`)||e===`-n`||e===`-c`}function z(e,t,n){let r=e[t];return n.push(r),t+=1,F.has(r)&&t<e.length&&(n.push(e[t]),t+=1),t}function Te(e,t,n){let r=[],i=n,a=0;for(;i<t.length;){let n=t[i];if(n===`--`){i+=1;continue}if(R(n)){i=z(t,i,r);continue}if(I(n))break;if(r.push(n),a+=1,i+=1,a>=e&&e>0){i=Ee(t,i,r);break}}return{args:r,next:i}}function Ee(e,t,n){let r=t;for(;r<e.length&&R(e[r]);)r=z(e,r,n);return r}function De(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;default:return 0}}function B(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 V(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 H(e,t){return e.includes(t)}function U(e,t){for(let n of t){let t=e.indexOf(n);if(t!==-1)return e[t+1]}}function W(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`){F.has(r)&&(n+=1);continue}t.push(r)}return t}function G(e,t,n){let r=e.list();if(t)return K(r,t);let i=n.get(`COMPUTER`);if(i)return K(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>` or `v86 start`"}:{error:`which computer? pass -c <id> or \`computer use\`. registered: ${r.map(e=>e.id).join(`, `)}`}}function K(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}`);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`}`}}function q(e){return{stdout:``,stderr:`computer: ${e}\n`,exitCode:1}}function J(e=``){return{stdout:e,stderr:``,exitCode:0}}function Y(){return globalThis.__slicc_pm??null}function Oe(e){return e.browser??globalThis.__slicc_browser??null}function ke(t){return t.panelRpc??globalThis.__slicc_panelRpc??e()}function Ae(e){return e.registry?e.registry:p()??m(e.processManager??Y())}async function je(e,t,i={}){if(e.length===0||e[0]===`--help`||e[0]===`-h`||e[0]===`help`)return J(A);let a=be(e);if(a.rest.length===0)return J(A);let o=a.rest[0];if(r(a.rest.slice(1),{valueFlags:[...j]}))return J(n(`computer`,o,A,{prefix:`computer`}));let s;try{s=xe(a.rest)}catch(e){return q(e instanceof Error?e.message:String(e))}let c=Ae(i),l=[];for(let e of s)try{let n=await Me(e,a,t,i,c);if(n.exitCode!==0)return n;n.stdout&&l.push(n.stdout.replace(/\n$/u,``))}catch(e){return q(e instanceof Error?e.message:String(e))}let u=it(l.filter(Boolean).join(`
47
- `),s,c,a.computer,t,a.json);return J(u?`${u}\n`:``)}async function Me(e,t,n,r,i){switch(e.verb){case`ls`:return Ne(i,t.json);case`add`:return Pe(e.args,n,r,i);case`rm`:return Fe(e.args,t.computer,n,i);case`use`:return Ie(e.args,i);case`info`:return Le(t,n,i);case`screenshot`:return Re(e.args,t,n,i);case`text`:return ze(t,n,i);case`watch`:return Be(e.args,t,n,i,r);case`exec`:return He(e.args,t,n,i);default:return Ue(e,t,n,i)}}function Ne(e,t){let n=e.list();if(t)return J(`${JSON.stringify(n)}\n`);if(n.length===0)return J(`no computers registered
48
- `);let r=[`ID KIND STATE TITLE`];for(let e of n)r.push(`${e.id.padEnd(20)} ${e.kind.padEnd(5)} ${e.state.padEnd(9)} ${e.title}`);return J(`${r.join(`
49
- `)}\n`)}async function Pe(e,t,n,r){let i=e[0];if(i!==`tab`)return q(`add: unknown kind '${i??``}' — phase 1 supports \`computer add tab\``);let a=U(e,[`-n`,`--name`]),o=W(e).slice(1)[0];if(!o)return q(`add tab: requires <targetId|url>`);let s=Oe(n);if(!s)return q(`add tab: no browser API in this float`);let c=he(await s.listAllTargets(),o);if(`error`in c)return q(c.error);try{b(c)}catch(e){return q(e instanceof Error?e.message:String(e))}let l={title:a??c.title,url:c.url},u=n.browser&&!n.panelRpc?null:ke(n),d=u?new de(u,c.targetId,l):new le(s,c.targetId,l),f=r.register(d);return r.use(f.id),J(`registered ${f.id} (${f.title})\n`)}async function Fe(e,t,n,r){let i=G(r,W(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 Ie(e,t){let n=W(e)[0];if(!n)return q(`use: requires <id>`);let r=G(t,n,new Map);return`error`in r?q(r.error):(t.use(r.id),J(`using ${r.id}\n`))}function Le(e,t,n){let r=G(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 Re(e,n,r,i){let a=Z(i,n.computer,r);if(`exitCode`in a)return a;let o=D(U(e,[`--size`])),s=await a.backend.screenshot({format:`jpeg`,maxWidth:o}),l=O(a.backend.describe().size??{width:s.width,height:s.height},{width:s.width,height:s.height});i.rememberShot(a.id,k(l,Date.now()),s);let u=s.seq>0?s.seq:i.nextSeq(a.id),d=await f({fs:r.fs,cwd:r.cwd,env:r.env,name:$(a.descriptor),seq:u,frame:s}),p=W(e)[0];if(p){let e=r.fs.resolvePath(r.cwd,p);await r.fs.writeFile(e,s.bytes)}let m=[_e(l),c(d)];return(H(e,`--view`)||H(e,`-v`))&&m.push(`<img:data:${s.mime};base64,${t(s.bytes)}>`),n.json?J(`${JSON.stringify({id:a.id,path:d,mapping:l})}\n`):J(`${m.join(`
50
- `)}\n`)}async function ze(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 Be(e,t,n,r,i){let a=Z(r,t.computer,n);if(`exitCode`in a)return a;let o=Ve(i);if(!o)return q(`watch: computers host is not running`);if(H(e,`--stop`))return o.unwatch(a.id),J(`unwatched ${a.id}\n`);let s=V(e,`--fps`)??2,c=D(U(e,[`--size`]));return o.watch(a.id,s,c),J(`watching ${a.id} at ${s} fps\n`)}function Ve(e){if(e.watch)return{watch:e.watch,unwatch:e.unwatch??(()=>void 0)};let t=ee();return t?{watch:t.watch,unwatch:t.unwatch}:null}async function He(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(`
51
- `);return{stdout:s?`${s}\n`:``,stderr:``,exitCode:o.exitCode}}async function Ue(e,t,n,r){let i=Z(r,t.computer,n);if(`exitCode`in i)return i;let a=Ke(e,t.native,i.descriptor),o=w(i.descriptor.capabilities,a);return o?q(`${e.verb}: ${o}`):(await i.backend.input(a),We(i,n,r))}async function We(e,t,n){let r=e.descriptor.lastShot?.width??768,i;try{i=await Ge(e.backend.screenshot({format:`jpeg`,maxWidth:r}),5e3)}catch(e){return q(`screenshot failed after input: ${e instanceof Error?e.message:String(e)}`)}let a=O(e.backend.describe().size??{width:i.width,height:i.height},{width:i.width,height:i.height}),o=n.nextSeq(e.id),s={...i,seq:o};n.rememberShot(e.id,k(a,Date.now()),s);let l=await f({fs:t.fs,cwd:t.cwd,env:t.env,name:$(e.descriptor),seq:o,frame:s});return J(`${c(l)}\n`)}function Ge(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 Ke(e,t,n){let r=(e,r)=>ve(e,r,n.lastShot,t);switch(e.verb){case`mousemove`:return qe(e.args,r);case`click`:case`mousedown`:case`mouseup`:return Je(e.verb,e.args,r);case`drag`:return Ye(e.args,r,n.capabilities.mouse);case`scroll`:return Xe(e.args,r);case`key`:case`keydown`:case`keyup`:return Ze(e.verb,e.args);case`type`:return Qe(e.args);case`wait`:return $e(e.args);default:throw Error(`internal: ${e.verb} is not an input verb`)}}function qe(e,t){let n=W(e),r=Number(n[0]),i=Number(n[1]);if(!Number.isFinite(r)||!Number.isFinite(i))throw Error(`mousemove: requires <x> <y>`);let a=H(e,`--relative`),o=a?{x:r,y:i}:t(r,i);return[{type:`mousemove`,x:o.x,y:o.y,relative:a}]}function Je(e,t,n){let r=W(t),{button:i,skip:a}=et(r),o=B(t)??nt(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=V(t,`--hold`);return[{type:`click`,button:i,count:V(t,`--repeat`)??1,...c===void 0?{}:{holdMs:c},...X(s)}]}function Ye(e,t,n){let r=W(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 Xe(e,t){let n=W(e),r=Number(n[0]),i=Number(n[1]);if(!Number.isFinite(r)||!Number.isFinite(i))throw Error(`scroll: requires <dx> <dy>`);let a=B(e);return[{type:`scroll`,dx:r,dy:i,...X(a?t(a.x,a.y):void 0)}]}function Ze(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=W(t)[0];if(!n)throw Error(`${e}: no keysym supplied`);return[{type:`key`,keysym:n,down:e===`keydown`}]}function Qe(e){let t=e.join(` `).replace(/\\n/gu,`
52
- `).replace(/\\t/gu,` `);if(!t)throw Error(`type: no text supplied`);return[{type:`text`,text:t}]}function $e(e){let t=Number(W(e)[0]);if(!Number.isFinite(t))throw Error(`wait: requires <ms>`);return[{type:`wait`,ms:t}]}function et(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:tt(e[0]),skip:1}:{button:1,skip:0}}function tt(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 nt(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 rt=new Set([`ls`,`add`,`rm`,`use`]);function it(e,t,n,r,i,a){if(a||!t.some(e=>!rt.has(e.verb)))return e;let o=G(n,r,Q(i));if(`error`in o)return e;let s=l(o.id);return e.split(`
53
- `).some(e=>e.trim()===s)?e:e?`${s}\n${e}`:s}function Z(e,t,n){let r=G(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{je as runComputer};
@@ -1 +0,0 @@
1
- import{n as e,t}from"./screencapture-run-yMA5c_HS.js";async function n(t){if(!navigator.mediaDevices?.getDisplayMedia)throw Error(`screen capture is not supported in this browser`);await s();let n=t.mode===`video`&&!!t.audio,a;try{a=await navigator.mediaDevices.getDisplayMedia({video:!0,audio:n})}catch(t){throw Error(e(t))}try{return t.mode===`video`?await i(a,t):await r(a,t)}finally{for(let e of a.getTracks())try{e.stop()}catch{}}}async function r(e,t){let n=await o(e);try{await new Promise(e=>setTimeout(e,100));let e=n.videoWidth,r=n.videoHeight,i=document.createElement(`canvas`);i.width=e,i.height=r;let a=i.getContext(`2d`);if(!a)throw Error(`Failed to get canvas context`);a.drawImage(n,0,0,e,r);let o=await new Promise((e,n)=>{i.toBlob(t=>t?e(t):n(Error(`Failed to create image blob`)),t.mimeType,t.quality)});return{bytes:new Uint8Array(await o.arrayBuffer()),mimeType:o.type||t.mimeType,width:e,height:r}}finally{n.srcObject=null}}async function i(e,n){if(typeof MediaRecorder>`u`)throw Error(`MediaRecorder is not supported in this browser`);let r=await o(e),i=r.videoWidth,s=r.videoHeight,c=t(n.durationMs),l=a(n.mimeType),u=new MediaRecorder(e,{mimeType:l}),d=[];u.ondataavailable=e=>{e.data&&e.data.size>0&&d.push(e.data)};let f=new Promise(e=>{u.onstop=()=>e()}),p=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})}),m=Date.now();u.start(),await Promise.race([new Promise(e=>setTimeout(e,c)),p]),u.state!==`inactive`&&u.stop(),await f;let h=Math.max(100,Date.now()-m);r.srcObject=null;let g=new Blob(d,{type:l});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||l,width:i,height:s,durationMs:Math.min(h,c)}}function a(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 o(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 s(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{n as captureDisplayMedia};
@@ -1 +0,0 @@
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. 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}async function n(e){if(!navigator.mediaDevices?.getDisplayMedia)throw Error(`screen capture is not supported in this browser`);await s();let n=e.mode===`video`&&!!e.audio,a;try{a=await navigator.mediaDevices.getDisplayMedia({video:!0,audio:n})}catch(e){throw Error(t(e))}try{return e.mode===`video`?await i(a,e):await r(a,e)}finally{for(let e of a.getTracks())try{e.stop()}catch{}}}async function r(e,t){let n=await o(e);try{await new Promise(e=>setTimeout(e,100));let e=n.videoWidth,r=n.videoHeight,i=document.createElement(`canvas`);i.width=e,i.height=r;let a=i.getContext(`2d`);if(!a)throw Error(`Failed to get canvas context`);a.drawImage(n,0,0,e,r);let o=await new Promise((e,n)=>{i.toBlob(t=>t?e(t):n(Error(`Failed to create image blob`)),t.mimeType,t.quality)});return{bytes:new Uint8Array(await o.arrayBuffer()),mimeType:o.type||t.mimeType,width:e,height:r}}finally{n.srcObject=null}}async function i(t,n){if(typeof MediaRecorder>`u`)throw Error(`MediaRecorder is not supported in this browser`);let r=await o(t),i=r.videoWidth,s=r.videoHeight,c=e(n.durationMs),l=a(n.mimeType),u=new MediaRecorder(t,{mimeType:l}),d=[];u.ondataavailable=e=>{e.data&&e.data.size>0&&d.push(e.data)};let f=new Promise(e=>{u.onstop=()=>e()}),p=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})}),m=Date.now();u.start(),await Promise.race([new Promise(e=>setTimeout(e,c)),p]),u.state!==`inactive`&&u.stop(),await f;let h=Math.max(100,Date.now()-m);r.srcObject=null;let g=new Blob(d,{type:l});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||l,width:i,height:s,durationMs:Math.min(h,c)}}function a(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 o(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 s(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{n as captureDisplayMedia};
@@ -1 +0,0 @@
1
- import"./float-topology-CurCyQFy.js";
@@ -1 +0,0 @@
1
- function e(){return{version:`6.167.0`,releasedAt:`2026-09-18T07:44:21Z`,buildId:`6.167.0-mu6nkhrl`}}let t=null;function n(e){t=e}function r(){return t}export{e as n,n as r,r as t};
@@ -1,3 +0,0 @@
1
- import{t as e}from"./logger-LESFN7Hj.js";import{n as t,r as n}from"./path-utils-DNJG-zQf.js";import{t as r}from"./types-D8gIX-W-.js";import{g as i,i as a,n as o,p as s}from"./sudoers-BdBYQPUn.js";const c=e(`sudo:timeout`),l={"user-timeout":`no response from the user within 5 minutes. This is a TIMEOUT, not a denial — the user was not there to answer. Do not retry this action; report that the approval request went unanswered and wait for the user before trying again.`,"cone-timeout":`no response from the cone agent within 5 minutes. This is a TIMEOUT, not a denial — no human was ever prompted, the cone simply never resolved the request. Do not retry this action; report that the escalation went unanswered and continue with work that does not need it.`};function u(e){return l[e]}function d(e=`user-timeout`){return{decision:`deny`,reason:e}}function f(e,t){let n=t.decision===`deny`?t.reason:void 0,r=n?`${e}: approval request timed out — ${u(n)}`:`${e}: approval denied`,i=t.note?.trim();return i?`${r} — approver's reason: ${i}`:r}function p(e,t={}){let n=t.timeoutMs??3e5;if(!Number.isFinite(n)||n<=0)return e;let r=t.setTimer??((e,t)=>setTimeout(e,t)),i=t.clearTimer??(e=>clearTimeout(e));return{requestApproval(t,a){return new Promise(o=>{let s=new AbortController,l=()=>s.abort();a?.signal?.addEventListener(`abort`,l,{once:!0});let u=!1,f=e=>{u=!0,a?.signal?.removeEventListener(`abort`,l),o(e)},p=r(()=>{u||(c.warn(`sudo approval timed out — failing closed`,{kind:t.kind,detail:t.detail,timeoutMs:n}),s.abort(),f(d(`user-timeout`)))},n),m=e=>{if(u){c.warn(`sudo decision arrived after timeout — discarded`,{kind:t.kind,detail:t.detail,decision:e.decision});return}i(p),f(e)};e.requestApproval(t,{signal:s.signal}).then(m,e=>{c.warn(`sudo broker threw — denying`,{error:e instanceof Error?e.message:String(e)}),m({decision:`deny`})})})}}}const m=e(`sudo:fs`),h=Symbol.for(`slicc.fs.monkeypatchUnsafe`),g=`${o}/granted`;function _(e){return f(`sudo`,e)}const v=[`readFile`,`readFileRange`,`getNativeFile`,`readTextFile`,`readDir`,`exists`,`stat`],y=[`writeFile`,`appendFile`],b=[`mkdir`,`rm`,`chmod`,`utimes`];async function x(e,t,a,s){let c=i(s);if(!c)return;let l=t(),u={pattern:c,nopasswd:!0,regex:n(c)};(a===`read`?l.read:l.write).push(u);let d=`NOPASSWD ${a===`read`?`Read`:`Write`} ${c}\n`;try{await e.mkdir(o,{recursive:!0});let t=``;try{t=await e.readFile(g,{encoding:`utf-8`})}catch(e){if(!(e instanceof r&&e.code===`ENOENT`))throw e}let n=t.length>0&&!t.endsWith(`
2
- `)?`
3
- `:``;await e.writeFile(g,t+n+d)}catch(e){m.warn(`Failed to persist NOPASSWD grant; effective in-session only`,{error:e instanceof Error?e.message:String(e)})}}function S(e,n){let{broker:i,getPolicy:o}=n,c=n.defaultDisposition??`allow`,l=n.onGrant?n.onGrant:(t,n)=>x(e,o,t,n);async function u(e,n,u=!1){let d=t(n),f=s(o(),e,d,{isContentWrite:u}),p=e===`write`?a(f,c):f;if(p===`deny`)throw m.warn(`Refusing write to an unhonoured sudoers path`,{path:d}),new r(`EACCES`,`sudo: refusing to write a sudoers file outside /etc — policy is read only from /etc/sudoers and /etc/sudoers.d/, so this file would never take effect`,d);if(p!==`require-approval`)return;let h=e,g=await i.requestApproval({kind:h,detail:d});if(g.decision===`deny`)throw new r(`EACCES`,_(g),d);g.decision===`always`&&await l(e,g.pattern?.trim()||d)}function d(e){return s(o(),`read`,t(e))!==`require-approval`}let f=t=>typeof e[t]==`function`,p={};for(let t of v)f(t)&&(p[t]=async(n,...r)=>(await u(`read`,n),e[t](n,...r)));for(let t of y)f(t)&&(p[t]=async(n,...r)=>(await u(`write`,n,!0),e[t](n,...r)));for(let t of b)f(t)&&(p[t]=async(n,...r)=>(await u(`write`,n),e[t](n,...r)));return f(`walk`)&&(p.walk=async function*(t,...n){await u(`read`,t),yield*e.walk(t,...n)}),f(`symlink`)&&(p.symlink=async(t,n)=>(await u(`write`,n),e.symlink(t,n))),f(`rename`)&&(p.rename=async(t,n)=>(await u(`read`,t),await u(`write`,t),await u(`write`,n),e.rename(t,n))),f(`copyFile`)&&(p.copyFile=async(t,n)=>(await u(`read`,t),await u(`write`,n),e.copyFile(t,n))),f(`mount`)&&(p.mount=async(t,...n)=>(await u(`write`,t),e.mount(t,...n))),f(`unmount`)&&(p.unmount=async t=>(await u(`write`,t),e.unmount(t))),f(`refreshMount`)&&(p.refreshMount=async(t,...n)=>(await u(`write`,t),e.refreshMount(t,...n))),f(`statSync`)&&(p.statSync=t=>d(t)?e.statSync(t):null),f(`readDirSync`)&&(p.readDirSync=t=>d(t)?e.readDirSync(t):null),new Proxy(e,{get(e,t,n){if(t===h)return!0;if(typeof t==`string`&&t in p)return p[t];let r=Reflect.get(e,t,n);return typeof r==`function`?r.bind(e):r}})}export{d as a,f as i,h as n,p as o,S as r,g as t};
@@ -1 +0,0 @@
1
- import{t as e}from"./slicc-app-url-B9OxaBDe.js";var t=Uint8Array.of(255,216,255,192,0,11,8,0,1,0,1,1,1,17,0,255,217);function n(e){for(let t=0;t<e.length-8;t++){if(e[t]!==255)continue;let n=e[t+1];if(n===192||n===194){let n=e[t+5]<<8|e[t+6],r=e[t+7]<<8|e[t+8];if(r>0&&n>0)return{width:r,height:n}}}return null}function r(e){if(e.length<24||e[0]!==137||e[1]!==80||e[2]!==78||e[3]!==71)return null;let t=e[16]<<24|e[17]<<16|e[18]<<8|e[19],n=e[20]<<24|e[21]<<16|e[22]<<8|e[23];return t>0&&n>0?{width:t,height:n}:null}async function i(e,r=.7){if(n(e))return e;if(typeof OffscreenCanvas>`u`||typeof createImageBitmap>`u`)return t.slice();let i=new Blob([new Uint8Array(e)],{type:`image/png`}),a=await createImageBitmap(i),o=new OffscreenCanvas(a.width,a.height),s=o.getContext(`2d`);if(!s)throw Error(`could not acquire 2d canvas context`);s.drawImage(a,0,0),a.close();let c=await o.convertToBlob({type:`image/jpeg`,quality:r});return new Uint8Array(await c.arrayBuffer())}function a(e){let t=e.indexOf(`,`),n=t>=0?e.slice(t+1):e,r=atob(n),i=new Uint8Array(r.length);for(let e=0;e<r.length;e++)i[e]=r.charCodeAt(e);return i}function o(e){let t=``,n=32768;for(let r=0;r<e.length;r+=n)t+=String.fromCharCode(...e.subarray(r,r+n));return btoa(t)}var s={ctrl:!1,alt:!1,shift:!1,meta:!1},c={ctrl:`ctrl`,control:`ctrl`,alt:`alt`,shift:`shift`,meta:`meta`,super:`meta`,win:`meta`,cmd:`meta`,command:`meta`},l={return:{key:`Enter`,code:`Enter`},enter:{key:`Enter`,code:`Enter`},kp_enter:{key:`Enter`,code:`NumpadEnter`},tab:{key:`Tab`,code:`Tab`},escape:{key:`Escape`,code:`Escape`},esc:{key:`Escape`,code:`Escape`},space:{key:` `,code:`Space`},backspace:{key:`Backspace`,code:`Backspace`},delete:{key:`Delete`,code:`Delete`},del:{key:`Delete`,code:`Delete`},insert:{key:`Insert`,code:`Insert`},home:{key:`Home`,code:`Home`},end:{key:`End`,code:`End`},pageup:{key:`PageUp`,code:`PageUp`},page_up:{key:`PageUp`,code:`PageUp`},prior:{key:`PageUp`,code:`PageUp`},pagedown:{key:`PageDown`,code:`PageDown`},page_down:{key:`PageDown`,code:`PageDown`},next:{key:`PageDown`,code:`PageDown`},up:{key:`ArrowUp`,code:`ArrowUp`},down:{key:`ArrowDown`,code:`ArrowDown`},left:{key:`ArrowLeft`,code:`ArrowLeft`},right:{key:`ArrowRight`,code:`ArrowRight`},menu:{key:`ContextMenu`,code:`ContextMenu`},caps_lock:{key:`CapsLock`,code:`CapsLock`},num_lock:{key:`NumLock`,code:`NumLock`},scroll_lock:{key:`ScrollLock`,code:`ScrollLock`},print:{key:`PrintScreen`,code:`PrintScreen`},pause:{key:`Pause`,code:`Pause`}};for(let e=1;e<=12;e++)l[`f${e}`]={key:`F${e}`,code:`F${e}`};var u={return:`KEYCODE_ENTER`,enter:`KEYCODE_ENTER`,tab:`KEYCODE_TAB`,escape:`KEYCODE_ESCAPE`,esc:`KEYCODE_ESCAPE`,space:`KEYCODE_SPACE`,backspace:`KEYCODE_DEL`,delete:`KEYCODE_FORWARD_DEL`,del:`KEYCODE_FORWARD_DEL`,home:`KEYCODE_HOME`,end:`KEYCODE_MOVE_END`,insert:`KEYCODE_INSERT`,pageup:`KEYCODE_PAGE_UP`,pagedown:`KEYCODE_PAGE_DOWN`,up:`KEYCODE_DPAD_UP`,down:`KEYCODE_DPAD_DOWN`,left:`KEYCODE_DPAD_LEFT`,right:`KEYCODE_DPAD_RIGHT`,menu:`KEYCODE_MENU`};for(let e=1;e<=12;e++)u[`f${e}`]=`KEYCODE_F${e}`;function d(e){return/^[A-Z][A-Z0-9_]+$/u.test(e)}function f(e){return e.split(/[-+]/u).filter(Boolean)}function p(e){let t=e.toLowerCase();if(l[t])return l[t];if(e.length===1){let t=e;return/[A-Za-z]/u.test(t)?{key:t,code:`Key${t.toUpperCase()}`}:/[0-9]/u.test(t)?{key:t,code:`Digit${t}`}:{".":{key:`.`,code:`Period`},",":{key:`,`,code:`Comma`},"/":{key:`/`,code:`Slash`},";":{key:`;`,code:`Semicolon`},"'":{key:`'`,code:`Quote`},"[":{key:`[`,code:`BracketLeft`},"]":{key:`]`,code:`BracketRight`},"\\":{key:`\\`,code:`Backslash`},"`":{key:"`",code:`Backquote`},"-":{key:`-`,code:`Minus`},"=":{key:`=`,code:`Equal`}}[t]??{key:t,code:``}}return null}function m(e){let t=e.trim();if(!t)return null;if(d(t))return{key:t,code:t,modifiers:{...s},keysym:t,native:t};let n=f(t);if(n.length===0)return null;let r={...s},i=null;for(let e=0;e<n.length;e++){let t=n[e],a=e===n.length-1,o=c[t.toLowerCase()];if(o&&!a){r[o]=!0;continue}o&&a&&n.length,i=t}if(!i)return null;if(d(i))return{key:i,code:i,modifiers:r,keysym:i,native:i};let a=p(i);return a?(i.length===1&&/[A-Z]/u.test(i)&&(r.shift=!0),{key:a.key,code:a.code,modifiers:r,keysym:i}):null}function h(e){return+!!e.alt+(e.ctrl?2:0)+(e.meta?4:0)+(e.shift?8:0)}function g(e,t){let n=h(e.modifiers),r=e.key.length===1&&!e.modifiers.ctrl&&!e.modifiers.alt&&!e.modifiers.meta?e.key:void 0,i=t=>({type:t,key:e.key,code:e.code,modifiers:n,...t===`keyDown`&&r?{text:r}:{}});return t===!0?[i(`keyDown`)]:t===!1?[i(`keyUp`)]:[i(`keyDown`),i(`keyUp`)]}function _(e={x:0,y:0}){return{x:e.x,y:e.y}}function v(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}}var y={1:`left`,2:`middle`,3:`right`};function b(t){if(e(t.url))throw Error(`refusing SLICC app tab '${t.title??t.url}'`)}async function x(e,t){let o=a(await e.screenshot({format:`png`})),s=r(o)??n(o),c=o;t.maxWidth&&s&&s.width>t.maxWidth?c=a(await e.screenshot({format:`png`,maxWidth:t.maxWidth})):t.format!==`png`&&(c=a(await e.screenshot({format:`jpeg`,quality:70})));let l=r(c)??n(c)??s??{width:0,height:0};return t.format!==`png`&&!n(c)&&(c=await i(c)),{mime:n(c)?`image/jpeg`:`image/png`,bytes:c,width:l.width,height:l.height,native:s}}async function S(e,t,n=_()){switch(t.type){case`mousemove`:{let r=v(n,t);await e.send(`Input.dispatchMouseEvent`,{type:`mouseMoved`,x:r.x,y:r.y});return}case`button`:await C(e,t,n);return;case`click`:await w(e,t,n);return;case`drag`:await T(e,t,n);return;case`scroll`:{let r=v(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 E(e,t);return;case`text`:await e.send(`Input.insertText`,{text:t.text});return;case`wait`:await A(Math.max(0,t.ms));return}}async function C(e,t,n){let r=v(n,t);await e.send(`Input.dispatchMouseEvent`,{type:t.down?`mousePressed`:`mouseReleased`,x:r.x,y:r.y,button:y[t.button],clickCount:1})}async function w(e,t,n){let r=v(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:y[t.button],clickCount:n}),t.holdMs&&t.holdMs>0&&await A(t.holdMs),await e.send(`Input.dispatchMouseEvent`,{type:`mouseReleased`,x:r.x,y:r.y,button:y[t.button],clickCount:n})}async function T(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 E(e,t){let n=m(t.keysym);if(!n)throw Error(`unknown keysym '${t.keysym}'`);for(let r of g(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}})}async function D(e,t,n){let r=await k(e,t)??{title:t,url:``};return b(r),e.withTab(t,async e=>{let t=await x(e,{format:n.format===`png`?`png`:`jpeg`,maxWidth:n.maxWidth});return{mime:t.mime,base64:o(t.bytes),width:t.width,height:t.height,...t.native?{nativeWidth:t.native.width,nativeHeight:t.native.height}:{},title:r.title,url:r.url}})}async function O(e,t,n){b(await k(e,t)??{title:t,url:``});let r=_();await e.withTab(t,async e=>{for(let t of n)await S(e,t,r)})}async function k(e,t){let n=(await e.listAllTargets()).find(e=>e.targetId===t);return n?{title:n.title,url:n.url}:null}function A(e){return new Promise(t=>setTimeout(t,e))}export{O as inputTab,D as screenshotTab};
@@ -1 +0,0 @@
1
- import{n as e,t}from"./v86-vm-DCm7zA2r.js";import{i as n}from"./encode-frame-B8GkHc2t.js";import{o as r,t as i}from"./keys-Dexx8cLD.js";import{getComputerRegistry as a}from"./registry-Bq_j-EXx.js";function o(e){return`v86:${e}`}const s={screenshot:!0,text:!0,frames:`poll`,keyboard:!0,mouse:`relative`,scroll:!0,exec:!1,inputAllowed:!0},c={1:0,2:1,3:2};var l=class{record;lastX=0;lastY=0;seq=0;constructor(e){this.record=e}describe(){let e=this.record.screen,t=e.width>0&&e.height>0?{width:e.width,height:e.height}:null;return{id:o(this.record.name),kind:`v86`,title:this.record.name,size:t,state:this.record.emulator.is_running()?`live`:`paused`,capabilities:s,pid:this.record.pid}}async screenshot(e){let i=t(this.record);if(!i)throw Error(`no graphical frame for '${this.record.name}' — the guest is in text mode; use \`computer text\``);let a=n(i,e.maxWidth),o=await r(a);return this.seq+=1,{seq:this.seq,mime:`image/jpeg`,width:a.width,height:a.height,bytes:o}}async text(){return e(this.record)}async input(e){for(let t of e)await this.apply(t)}async close(){}async apply(e){switch(e.type){case`mousemove`:this.applyMousemove(e);return;case`button`:await this.applyButton(e);return;case`click`:await this.applyClick(e);return;case`scroll`:await this.applyScroll(e);return;case`drag`:await this.applyDrag(e);return;case`key`:this.applyKey(e);return;case`text`:this.record.emulator.keyboard_send_text(e.text);return;case`wait`:await u(Math.max(0,e.ms));return}}applyMousemove(e){let t=this.record.emulator;if(e.relative){t.bus.send(`mouse-delta`,[e.x,-e.y]),this.lastX+=e.x,this.lastY+=e.y;return}this.rehomePointer(),t.bus.send(`mouse-delta`,[e.x,-e.y]),this.lastX=e.x,this.lastY=e.y}rehomePointer(){this.record.emulator.bus.send(`mouse-delta`,[-16384,16384]),this.lastX=0,this.lastY=0}async maybeMoveTo(e,t){e!==void 0&&t!==void 0&&this.applyMousemove({type:`mousemove`,x:e,y:t})}async applyButton(e){await this.maybeMoveTo(e.x,e.y),this.sendButtons(e.button,e.down)}async applyClick(e){await this.maybeMoveTo(e.x,e.y);let t=Math.max(1,e.count);for(let n=0;n<t;n++)this.sendButtons(e.button,!0),e.holdMs&&e.holdMs>0&&await u(e.holdMs),this.sendButtons(e.button,!1)}async applyScroll(e){await this.maybeMoveTo(e.x,e.y),this.record.emulator.bus.send(`mouse-wheel`,[e.dx,-e.dy])}async applyDrag(e){this.applyMousemove({type:`mousemove`,x:e.x1,y:e.y1}),this.sendButtons(1,!0),this.applyMousemove({type:`mousemove`,x:e.x2,y:e.y2}),this.sendButtons(1,!1)}applyKey(e){let t=i(e.keysym);if(!t)throw Error(`unknown keysym '${e.keysym}'`);if(e.down===!1){this.record.emulator.keyboard_send_scancodes(t.filter((e,n)=>n>=t.length/2));return}if(e.down===!0){this.record.emulator.keyboard_send_scancodes(t.slice(0,Math.ceil(t.length/2)));return}this.record.emulator.keyboard_send_scancodes(t)}sendButtons(e,t){let n=[!1,!1,!1];t&&(n[c[e]]=!0),this.record.emulator.bus.send(`mouse-click`,n)}};function u(e){return new Promise(t=>setTimeout(t,e))}function d(e,t=a()){return t?t.register(new l(e),{pid:e.pid}):null}function f(e,t=a()){t&&t.unregister(o(e))}export{l as V86ComputerBackend,d as registerV86Computer,f as unregisterV86Computer,o as v86ComputerId};
@@ -1,3 +0,0 @@
1
- import{F as e,I as t,k as n}from"./wc-shell-CCKjmASt.js";import{r}from"./base64-ELzoYfwP.js";import{t as i}from"./image-markers-q8JQTtid.js";import{E as a,T as o,w as s}from"./wc-live-BLozTZsg.js";function c(e){let t=o(e.bytes);return`data:${a(t)??e.mime};base64,${r(t)}`}var l=`computer:`,u=4,d=768,f=2,p=480,m={debug(){},info(){},warn(){},error(){}},h=null;function g(e){return`${l}${e}`}function _(e){return e.startsWith(`computer:`)?e.slice(9):null}function v(e){let t=e.trim().split(/\s+/);for(let e=0;e<t.length;e++)if(t[e]===`-c`||t[e]===`--computer`)return t[e+1]??null;return null}function y(e){for(let t of e.split(`
2
- `)){let e=t.trim();if(!e.startsWith(`target: `))continue;let n=e.slice(8).trim();if(n)return n}return null}function b(e,t,n){return n||(v(e)??y(t))}function x(e){for(let t of e.split(`
3
- `)){let e=t.trim();if(!e.startsWith(`screen: `))continue;let n=e.slice(8).trim();if(n)return n}return null}function S(e){return i(e).find(e=>e.kind===`image`&&e.parsed)?.parsed?.dataUrl??null}function C(e){let t=x(e);if(t)return{kind:`path`,path:t};let n=S(e);return n?{kind:`data`,src:n}:null}function w(e,t){return{id:g(e.id),title:e.title,url:e.kind,screenshot:t?c(t):void 0,kind:`computer`,live:e.state===`live`,softKeys:e.softKeys?.map(e=>({label:e.label,keysym:e.keysym}))}}function T(e,t=s().list()){let n=s(),r=e.filter(e=>e.kind!==`computer`),i=t.map(e=>w(e,n.lastFrame(e.id)));return[...r,...i]}function E(e){return h?(e?.log&&(h.deps.log=e.log),e?.openFs&&(h.deps.openFs=e.openFs),h):(h={deps:{log:e?.log??m,openFs:e?.openFs},bound:new Map,overlayUnsubs:[],overlayWatchIds:new Map,lightboxId:null,lightboxWatchToken:null,lightboxOrigin:null,preview:null,installed:!1},h)}function D(e,t){e.append(n(t))}function O(e){let t=e.target,n=e.detail,r=b(n.command??t.command??``,n.output??t.output??``,n.computerId??t.computerId),i=n.toolCallId||t.toolCallId,a={el:t,toolCallId:i,computerId:r,watchToken:null,loadGen:0,frozenKey:null};E().bound.set(t,a),t.addEventListener(`computer-row-unbind`,A),r&&(t.computerId=r),r&&i&&s().recordInvocation(r,i),M()}function k(e){if(e.computerId)return;let t=b(e.el.command??``,e.el.output??``,e.el.computerId);t&&(e.computerId=t,e.el.computerId=t,e.toolCallId&&s().recordInvocation(t,e.toolCallId))}function A(e){let t=e.target,n=h;if(!n)return;let r=n.bound.get(t);if(r){if(n.bound.delete(t),t.removeEventListener(`computer-row-unbind`,A),r.watchToken!==null&&r.computerId)try{s().unwatch(r.computerId,r.watchToken)}catch(e){n.deps.log.warn(`WC computers: unwatch on row unbind failed`,e)}M()}}function j(e){let t=e.target,n=h?.bound.get(t),r=e.detail?.src;r&&V(n?.computerId??null,r,t)}function M(){let e=h;if(e)for(let t of e.bound.values())N(t)}function N(t){k(t);let n=s(),r=t.computerId?n.get(t.computerId):null,i=C(t.el.output??``),a=t.computerId?n.lastFrame(t.computerId):null,o=t.computerId?n.newestInvocation(t.computerId):null,l=!!t.computerId&&r?.state===`live`&&o===t.toolCallId,u=e({computerLive:r?.state===`live`,newestToolCallId:o,toolCallId:t.toolCallId,hasFrame:!!i,hasPushedFrame:!!a});t.el.frameMode=u,P(t,l);let d=t.el.output??``;if(u===`live`&&a){t.loadGen+=1,t.frozenKey=null,t.el.frameSrc=c(a);return}if(u===`frozen`){let e=F(d);if(t.frozenKey===e)return;t.frozenKey=e,t.loadGen+=1,L(t,d,t.loadGen);return}t.loadGen+=1,t.frozenKey=null,t.el.frameSrc=null}function P(e,t){if(!e.computerId)return;let n=s();t&&e.watchToken===null?e.watchToken=n.watch(e.computerId,f,p):!t&&e.watchToken!==null&&(n.unwatch(e.computerId,e.watchToken),e.watchToken=null)}function F(e){return`${x(e)??``}\n${S(e)??``}`}function I(e,t,n){return h?.bound.get(e.el)!==e||e.loadGen!==t||e.el.frameMode!==`frozen`?!1:F(e.el.output??``)===F(n)}async function L(e,t,n){let r=x(t),i=null;r&&(i=await R(r)),i||=S(t),I(e,n,t)&&(e.el.frameSrc=i)}async function R(e){let t=h?.deps.openFs;if(!t)return null;try{let n=await(await t()).readFile(e,{encoding:`binary`}),i=o(n);return`data:${a(i)??`image/jpeg`};base64,${r(i)}`}catch(t){return h?.deps.log.warn(`WC computers: frozen frame read failed`,{path:e,err:t}),null}}function z(e,t){let n=c(t),r=E();if(r.lightboxId===e){let e=B();e.isOpen?e.setSrc(n):e.open(n,r.lightboxOrigin??e)}M()}function B(){let e=E();if(e.preview?.isConnected)return e.preview;let t=document.createElement(`slicc-image-preview`);return t.setAttribute(`data-computer-live`,``),document.body.append(t),t.addEventListener(`slicc-image-preview-close`,()=>H()),e.preview=t,t}function V(e,t,n){let r=E(),i=s();e?(r.lightboxId&&r.lightboxId!==e&&r.lightboxWatchToken!==null&&(i.unwatch(r.lightboxId,r.lightboxWatchToken),r.lightboxWatchToken=null),(r.lightboxId!==e||r.lightboxWatchToken===null)&&(r.lightboxWatchToken=i.watch(e,u,d),r.lightboxId=e)):r.lightboxWatchToken!==null&&r.lightboxId&&(i.unwatch(r.lightboxId,r.lightboxWatchToken),r.lightboxWatchToken=null,r.lightboxId=null),r.lightboxOrigin=n;let a=B(),o=e?i.lastFrame(e):null,l=o?c(o):t;l&&(a.isOpen?a.setSrc(l):a.open(l,n))}function H(){let e=h;if(e?.lightboxId){if(e.lightboxWatchToken!==null){try{s().unwatch(e.lightboxId,e.lightboxWatchToken)}catch(t){e.deps.log.warn(`WC computers: lightbox unwatch failed`,t)}e.lightboxWatchToken=null}e.lightboxId=null,e.lightboxOrigin=null}}function U(e,t){return e.shadowRoot?.querySelector(`[data-tab-id="${CSS.escape(t)}"]`)??e}function W(){let e=h;if(!e)return;let t=s();for(let[n,r]of[...e.overlayWatchIds]){try{t.unwatch(n,r)}catch{}e.overlayWatchIds.delete(n)}}function G(e){q(e),e.hasAttribute(`open`)&&(e.tabs=T(e.tabs))}function K(e,t,n){if(q(e),!e.hasAttribute(`open`))return;let r=c(n);r&&e.patchTabScreenshot?.(g(t),r)||(e.tabs=T(e.tabs))}function q(e){let t=E(),n=s(),r=e.hasAttribute(`open`)?n.list().map(e=>e.id):[],i=new Set(r);for(let[e,r]of[...t.overlayWatchIds])if(!i.has(e)){try{n.unwatch(e,r)}catch(e){t.deps.log.warn(`WC computers: overlay unwatch failed`,e)}t.overlayWatchIds.delete(e)}for(let e of r)if(!t.overlayWatchIds.has(e))try{t.overlayWatchIds.set(e,n.watch(e,f,p))}catch(e){t.deps.log.warn(`WC computers: overlay watch failed`,e)}}function J(e){let n=E(e);if(t(D),n.installed)return X;n.installed=!0,document.addEventListener(`computer-row-bind`,O),document.addEventListener(`computer-row-unbind`,A),document.addEventListener(`computer-frame-click`,j);let r=s();return n.overlayUnsubs.push(r.onList(()=>M())),n.overlayUnsubs.push(r.onInvocations(()=>M())),n.overlayUnsubs.push(r.onFrame(z)),X}function Y(e,t){let n=E(t?{log:t}:void 0),r=s(),i=t=>{let i=t.detail?.id,a=i?_(i):null;if(!a)return;let o=r.lastFrame(a),s=o?c(o):``;s||n.deps.log.warn(`WC computers: no frame yet for lightbox`,{id:a}),V(a,s,U(e,i))},a=e=>{let t=e.detail,i=t?.id?_(t.id):null;if(!(!i||!t.keysym))try{r.input(i,[{type:`key`,keysym:t.keysym}])}catch(e){n.deps.log.warn(`WC computers: softkey input failed`,e)}};e.addEventListener(`tab-activate`,i),e.addEventListener(`tab-peek`,i),e.addEventListener(`computer-softkey`,a);let o=()=>G(e);e.addEventListener(`overlay-close`,o);let l=new MutationObserver(()=>G(e));l.observe(e,{attributes:!0,attributeFilter:[`open`]});let u=r.onList(()=>G(e)),d=r.onFrame((t,n)=>K(e,t,n));return G(e),()=>{e.removeEventListener(`tab-activate`,i),e.removeEventListener(`tab-peek`,i),e.removeEventListener(`computer-softkey`,a),e.removeEventListener(`overlay-close`,o),l.disconnect(),u(),d(),W()}}function X(){let e=h;if(e){document.removeEventListener(`computer-row-bind`,O),document.removeEventListener(`computer-row-unbind`,A),document.removeEventListener(`computer-frame-click`,j);for(let t of e.overlayUnsubs)t();W();for(let t of e.bound.values())if(t.watchToken!==null&&t.computerId)try{s().unwatch(t.computerId,t.watchToken)}catch{}if(e.lightboxWatchToken!==null&&e.lightboxId)try{s().unwatch(e.lightboxId,e.lightboxWatchToken)}catch{}e.preview?.remove(),h=null}}export{Y as bindComputerOverlay,J as installWcComputers,T as mergeOverlayTabs,_ as parseComputerOverlayId};