sliccy 6.166.0 → 6.168.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/README.md +2 -0
  2. package/dist/node-server/_shared/base64.d.ts.map +1 -1
  3. package/dist/node-server/_shared/base64.js +7 -3
  4. package/dist/node-server/_shared/base64.js.map +1 -1
  5. package/dist/node-server/_shared/computer-protocol.d.ts +4 -0
  6. package/dist/node-server/_shared/computer-protocol.d.ts.map +1 -1
  7. package/dist/node-server/_shared/tray-sync-protocol.d.ts +66 -2
  8. package/dist/node-server/_shared/tray-sync-protocol.d.ts.map +1 -1
  9. package/dist/node-server/_shared/tray-sync-protocol.js +75 -2
  10. package/dist/node-server/_shared/tray-sync-protocol.js.map +1 -1
  11. package/dist/node-server/computer-demo.d.ts +36 -0
  12. package/dist/node-server/computer-demo.js +126 -0
  13. package/dist/node-server/index.js +13 -3
  14. package/dist/node-server/runtime-flags.d.ts +2 -0
  15. package/dist/node-server/runtime-flags.js +5 -0
  16. package/dist/ui/.vite/manifest.json +288 -265
  17. package/dist/ui/assets/SKILL-CQxpe2fi.js +1 -0
  18. package/dist/ui/assets/{account-store-BEqmysw9.js → account-store-jjUZwcjI.js} +1 -1
  19. package/dist/ui/assets/{account-store-C35GYvum.js → account-store-pXgYgQVx.js} +2 -2
  20. package/dist/ui/assets/{adobe-BcTGFCnQ.js → adobe-C42_geSB.js} +1 -1
  21. package/dist/ui/assets/{adobe-BDH5oLAN.js → adobe-CKCos4Yf.js} +2 -2
  22. package/dist/ui/assets/{agent-panels-DvqNnkLk.js → agent-panels-C34MxFav.js} +1 -1
  23. package/dist/ui/assets/{almost-bash-shell-headless-DqTtE9CM.js → almost-bash-shell-headless-B5YFQ1wh.js} +521 -548
  24. package/dist/ui/assets/{apply-layout-CjYRGs37.js → apply-layout-D2V9rxZu.js} +1 -1
  25. package/dist/ui/assets/approval-timeout-BQ29Z0gf.js +1 -0
  26. package/dist/ui/assets/{apps-dzoLZ_5W.js → apps-CVkFAyGJ.js} +1 -1
  27. package/dist/ui/assets/{azure-openai-DKGdcr4S.js → azure-openai-DucxGbzT.js} +1 -1
  28. package/dist/ui/assets/{azure-openai-BffwoCtp.js → azure-openai-yAg-vpgC.js} +1 -1
  29. package/dist/ui/assets/{backend-hostfs-CWIlIhve.js → backend-hostfs-Ls-A2H2N.js} +1 -1
  30. package/dist/ui/assets/{base64-DzRgusa4.js → base64-BPBW1Gzr.js} +1 -1
  31. package/dist/ui/assets/{base64-DJRlyqZu.js → base64-ELzoYfwP.js} +1 -1
  32. package/dist/ui/assets/browser-DuyhpHbR.js +1 -0
  33. package/dist/ui/assets/{capability-Ci9JmpEG.js → capability-SIitRcq_.js} +2 -2
  34. package/dist/ui/assets/{cdp-DXT6yEL1.js → cdp-DDYzhKE6.js} +1 -1
  35. package/dist/ui/assets/{cerebras-BF5efkRL.js → cerebras-CNR3k849.js} +1 -1
  36. package/dist/ui/assets/{cerebras-By0l7t0i.js → cerebras-_--8Umtj.js} +1 -1
  37. package/dist/ui/assets/{client-B6iKb_ye.js → client-_vVqanZy.js} +1 -1
  38. package/dist/ui/assets/{composer-speech-DIEePbQC.js → composer-speech-D8IeaPdq.js} +1 -1
  39. package/dist/ui/assets/{connect-surface-DBqs7oHf.js → connect-surface-Bnfiw-HT.js} +1 -1
  40. package/dist/ui/assets/{core-BMcS6rur.js → core-eZ1aR21T.js} +1 -1
  41. package/dist/ui/assets/core-vzw5Cr8B.js +36 -0
  42. package/dist/ui/assets/{directed-approval-D1lGElvD.js → directed-approval-CtbQZigA.js} +1 -1
  43. package/dist/ui/assets/{discovery-preference-Bw3Fi0jd.js → discovery-preference-G3mw_EUO.js} +1 -1
  44. package/dist/ui/assets/encode-frame-B8GkHc2t.js +1 -0
  45. package/dist/ui/assets/engine-D531XNHE.js +1 -0
  46. package/dist/ui/assets/{ensure-speech-assets-BJXemBO4.js → ensure-speech-assets-BGvEg25e.js} +1 -1
  47. package/dist/ui/assets/es-DJTRBqjm.js +52 -0
  48. package/dist/ui/assets/{extension-media-capture-BvLVZFQ0.js → extension-media-capture-DMB4r9UQ.js} +1 -1
  49. package/dist/ui/assets/{extension-ops-B0oi7ypc.js → extension-ops-B2RMipFn.js} +1 -1
  50. package/dist/ui/assets/fake-computer-Jawax3MO.js +352 -0
  51. package/dist/ui/assets/{float-topology-YtctpJaG.js → float-topology-CyZCUfkj.js} +1 -1
  52. package/dist/ui/assets/{follower-navigate-watcher-DnnHgZbM.js → follower-navigate-watcher-BAstHBQ5.js} +1 -1
  53. package/dist/ui/assets/frames-FHlUaNCs.js +1 -0
  54. package/dist/ui/assets/{frozen-archive-writer-DYPhPMg7.js → frozen-archive-writer-DFE4MYD-.js} +1 -1
  55. package/dist/ui/assets/{fs-CBH-hQcI.js → fs-BLqkdQnU.js} +1 -1
  56. package/dist/ui/assets/{fs-BapOupIM.js → fs-DRouAGaW.js} +2 -2
  57. package/dist/ui/assets/{gelatiere-store-C2u47uk0.js → gelatiere-store-D_JKXdpV.js} +1 -1
  58. package/dist/ui/assets/{gelatiere-unit-wvDEO7gH.js → gelatiere-unit-Q-gB5yVf.js} +1 -1
  59. package/dist/ui/assets/{github-Db015Tee.js → github-Cfpmwf1n.js} +1 -1
  60. package/dist/ui/assets/{github-Bx7_6LBm.js → github-DLAFwQdm.js} +2 -2
  61. package/dist/ui/assets/{github-auth-DtKS6UIX.js → github-auth-DnIBV6_3.js} +1 -1
  62. package/dist/ui/assets/{github-copilot-CtOjxhqK.js → github-copilot-BFfPdiKK.js} +1 -1
  63. package/dist/ui/assets/{github-copilot-eCfmryv6.js → github-copilot-EtGePnlq.js} +1 -1
  64. package/dist/ui/assets/{github-install-B6W4-xcc.js → github-install-1nDy7YKR.js} +1 -1
  65. package/dist/ui/assets/{github-zip-Bv1smNmy.js → github-zip-B-FKgUOX.js} +1 -1
  66. package/dist/ui/assets/{guest-tool-gate-Mu-876Hm.js → guest-tool-gate-GANtsowg.js} +1 -1
  67. package/dist/ui/assets/{hear-BZHckZJM.js → hear-BMEHlsdb.js} +1 -1
  68. package/dist/ui/assets/{help-BU2Hjl0P.js → help-DWGffc9y.js} +1 -1
  69. package/dist/ui/assets/host-AggLcUuh.js +1 -0
  70. package/dist/ui/assets/host-command-XUdketMY.js +28 -0
  71. package/dist/ui/assets/{image-markers-DuyWsic3.js → image-markers-CwM1dvoI.js} +1 -1
  72. package/dist/ui/assets/{image-markers-BFDmhPy4.js → image-markers-q8JQTtid.js} +1 -1
  73. package/dist/ui/assets/{installer-BbtH3u7z.js → installer-BHkUBh6r.js} +1 -1
  74. package/dist/ui/assets/{isomorphic-git-D2fV6xS-.js → isomorphic-git-B8-ayEVu.js} +7 -7
  75. package/dist/ui/assets/{isomorphic-git-B7et_8Xe.js → isomorphic-git-DuHitnAl.js} +10 -10
  76. package/dist/ui/assets/{js-realm-worker-BT3mfq3w.js → js-realm-worker-Zk_Jd1kr.js} +2 -2
  77. package/dist/ui/assets/jsh-CmIpo35m.js +1 -0
  78. package/dist/ui/assets/{jsh-executor-BWlgcE2N.js → jsh-executor-K5sbbmbA.js} +3 -3
  79. package/dist/ui/assets/{jsh-runtime-extensions-BnLXkzqP.js → jsh-runtime-extensions-ddeGEOUw.js} +1 -1
  80. package/dist/ui/assets/{kernel-worker-Dseu067f.js → kernel-worker-Bq9IjFw5.js} +34 -34
  81. package/dist/ui/assets/lick-urls-CgPiVwD-.js +1 -0
  82. package/dist/ui/assets/lick-ws-bridge-8HhoCHq8.js +1 -0
  83. package/dist/ui/assets/{lick-ws-bridge-Cc9sToY7.js → lick-ws-bridge-Ra_w6naR.js} +1 -1
  84. package/dist/ui/assets/{live-session-snapshot-B70raB09.js → live-session-snapshot-lUnl-mYx.js} +1 -1
  85. package/dist/ui/assets/{local-llm-Dcp5IIP-.js → local-llm-B80bjN-D.js} +1 -1
  86. package/dist/ui/assets/{local-llm-DpSg-Oe3.js → local-llm-OcOXhJKt.js} +1 -1
  87. package/dist/ui/assets/{main-CfF8CFBr.js → main-BRoNZPBl.js} +3 -3
  88. package/dist/ui/assets/{main-cherry-VckJPHm5.js → main-cherry-DD2gWq8O.js} +1 -1
  89. package/dist/ui/assets/{memory-curation-seam-DUaZFZG9.js → memory-curation-seam-CcNJCyMJ.js} +1 -1
  90. package/dist/ui/assets/{memory-health-D7uEvfAx.js → memory-health-DZmKH-IW.js} +1 -1
  91. package/dist/ui/assets/memory-v2-flag-DK0lPu0X.js +1 -0
  92. package/dist/ui/assets/{memory-write-execute-rXtR1z76.js → memory-write-execute-6yK_MOdy.js} +1 -1
  93. package/dist/ui/assets/{mount-8lU2iH4k.js → mount-CQBa9QoF.js} +3 -3
  94. package/dist/ui/assets/{mount-DoM0CLGG.js → mount-Dz-lPlKf.js} +1 -1
  95. package/dist/ui/assets/{mount-bridge-client-3a86Q6J0.js → mount-bridge-client-BOZDQLbT.js} +1 -1
  96. package/dist/ui/assets/{mount-bridge-client-CO2HxXrT.js → mount-bridge-client-BRywSH1d.js} +1 -1
  97. package/dist/ui/assets/{mv-DRuZuDHt.js → mv-C7mk2zT1.js} +1 -1
  98. package/dist/ui/assets/{new-session-DEhAjxP1.js → new-session-CXbgg4am.js} +2 -2
  99. package/dist/ui/assets/{oauth-bootstrap-DNTgbEZF.js → oauth-bootstrap-1lsyWJGc.js} +2 -2
  100. package/dist/ui/assets/{oauth-service-IlBYPvwr.js → oauth-service-CRmx6zI1.js} +1 -1
  101. package/dist/ui/assets/{oauth-service-BsW9nY_u.js → oauth-service-WTeDvR5m.js} +1 -1
  102. package/dist/ui/assets/{onboarding-orchestrator-DzPQ0pVG.js → onboarding-orchestrator-SsjiVLB2.js} +1 -1
  103. package/dist/ui/assets/{openai-codex-DYRKYWTe.js → openai-codex-BJzpp5yt.js} +1 -1
  104. package/dist/ui/assets/{openai-codex-CsAhfz0D.js → openai-codex-DDer9WGr.js} +1 -1
  105. package/dist/ui/assets/{openrouter-D9T6tXUF.js → openrouter-CdsU1YkP.js} +1 -1
  106. package/dist/ui/assets/{openrouter-free-CPshAgQD.js → openrouter-free-D1H2Ji7e.js} +1 -1
  107. package/dist/ui/assets/{openrouter-free-DfbYsnmf.js → openrouter-free-zplQAXSX.js} +1 -1
  108. package/dist/ui/assets/{openrouter-oauth-xKlWi_wI.js → openrouter-oauth-Bu3uuWMP.js} +1 -1
  109. package/dist/ui/assets/{openrouter-oauth-hZg6oH0A.js → openrouter-oauth-CrvWvUZV.js} +1 -1
  110. package/dist/ui/assets/{openrouter-IyZlRHg4.js → openrouter-xGsvfFPH.js} +1 -1
  111. package/dist/ui/assets/{opfs-mount-C9Iamj6N.js → opfs-mount-BqBx391V.js} +1 -1
  112. package/dist/ui/assets/{page-approval-service-B8t-buCi.js → page-approval-service-BkqDCbBQ.js} +1 -1
  113. package/dist/ui/assets/panel-rpc-handlers-CXr7dAtk.js +2 -0
  114. package/dist/ui/assets/panelize-shell-DjnrzeLU.js +4 -0
  115. package/dist/ui/assets/{pi-edit-execution-D6vx5LyF.js → pi-edit-execution-Dn7wc7f8.js} +1 -1
  116. package/dist/ui/assets/{port-bridge-client-Dn8JtUyP.js → port-bridge-client-CZFX4fUT.js} +1 -1
  117. package/dist/ui/assets/{port-bridge-client-Ds3xwapn.js → port-bridge-client-CkkC3v5w.js} +1 -1
  118. package/dist/ui/assets/{provider-Z5aj7SzG.js → provider-BCNJf9_1.js} +2 -2
  119. package/dist/ui/assets/{provider-3--cEcAF.js → provider-DiIrGlmw.js} +1 -1
  120. package/dist/ui/assets/{provider-settings-D9sjEfYE.js → provider-settings-DSf8xD9N.js} +1 -1
  121. package/dist/ui/assets/provider-store-access-CsczvZfg.js +1 -0
  122. package/dist/ui/assets/provider-store-access-et-xszx-.js +1 -0
  123. package/dist/ui/assets/{providers-CnoKdyLc.js → providers-CFveri5U.js} +2 -2
  124. package/dist/ui/assets/{providers-DVvrXbtx.js → providers-CfE8Z8rn.js} +1 -1
  125. package/dist/ui/assets/{proxied-fetch-DEK8DT-z.js → proxied-fetch-CPL8wJM2.js} +1 -1
  126. package/dist/ui/assets/{proxied-fetch-DyBveeCl.js → proxied-fetch-CnCvBaGV.js} +1 -1
  127. package/dist/ui/assets/{quick-llm-DjWE-wQw.js → quick-llm-t6CBwwSm.js} +1 -1
  128. package/dist/ui/assets/{realm-inprocess-D0iWBQzz.js → realm-inprocess-CmaGqRYS.js} +2 -2
  129. package/dist/ui/assets/{recovery-screen-Y1CSyfR-.js → recovery-screen-DdKutJyi.js} +1 -1
  130. package/dist/ui/assets/{redirect-uri-CgKdq7-K.js → redirect-uri-D2aDPCyB.js} +1 -1
  131. package/dist/ui/assets/{remote-terminal-view-D4Ah4AQY.js → remote-terminal-view-CA-SfvvZ.js} +2 -2
  132. package/dist/ui/assets/{request-body-DkfS6k_a.js → request-body-BF4moGct.js} +1 -1
  133. package/dist/ui/assets/{rest-ops-C8YK53pT.js → rest-ops-Yu_dXm4T.js} +1 -1
  134. package/dist/ui/assets/{rest-ops-DNanZY2-.js → rest-ops-aP40ni1y.js} +1 -1
  135. package/dist/ui/assets/{restore-DOkDX8BI.js → restore-Dk9r9feA.js} +1 -1
  136. package/dist/ui/assets/{run-BOkp5G58.js → run-1aYSFTwj.js} +2 -2
  137. package/dist/ui/assets/{run-B-t7kWH3.js → run-BEs473Sp.js} +1 -1
  138. package/dist/ui/assets/run-CHjRjdbt.js +75 -0
  139. package/dist/ui/assets/{run-DgNh1E56.js → run-CNldrNje.js} +3 -3
  140. package/dist/ui/assets/{run-Bld9B0W0.js → run-CreCrLyX.js} +1 -1
  141. package/dist/ui/assets/{run-a67LpkRp.js → run-CyYVrNXy.js} +2 -2
  142. package/dist/ui/assets/{run-B-fA26ea.js → run-D5s_jfOL.js} +1 -1
  143. package/dist/ui/assets/{run-D0C4PgZM.js → run-DuW-7oJj.js} +2 -2
  144. package/dist/ui/assets/{run-BOc9XLhg.js → run-QfYlwe2c.js} +1 -1
  145. package/dist/ui/assets/{run-vEDh-Me-.js → run-V-RPlN7V.js} +2 -2
  146. package/dist/ui/assets/{run-BWJSDhS7.js → run-wxYu-gUG.js} +2 -2
  147. package/dist/ui/assets/screen-s6LdF1JP.js +1 -0
  148. package/dist/ui/assets/screen-share-approval-live-D388fVD9.js +1 -0
  149. package/dist/ui/assets/screencapture-media-BjmoKpyn.js +1 -0
  150. package/dist/ui/assets/screencapture-media-CM5E2g6c.js +1 -0
  151. package/dist/ui/assets/screencapture-media-shared-DlK1Wqh8.js +1 -0
  152. package/dist/ui/assets/{screencapture-run-XrgS6hEd.js → screencapture-run-zmx5QKf_.js} +2 -2
  153. package/dist/ui/assets/{secret-env-CDLWFhsq.js → secret-env-DgrZZVFU.js} +1 -1
  154. package/dist/ui/assets/secret-topology-BrobAGSV.js +1 -0
  155. package/dist/ui/assets/{secrets-bridge-client--VZ3E0yk.js → secrets-bridge-client-BJqZCK6Q.js} +1 -1
  156. package/dist/ui/assets/{secrets-bridge-client-ZpBL1Zhl.js → secrets-bridge-client-CeK7HpDf.js} +1 -1
  157. package/dist/ui/assets/{session-command-memory-DB2GmPSU.js → session-command-memory-x5HxxZtb.js} +2 -2
  158. package/dist/ui/assets/{session-jsonl-D_pTYppB.js → session-jsonl-3Y2sXuNG.js} +1 -1
  159. package/dist/ui/assets/{session-jsonl-DFC-2T76.js → session-jsonl-DI8wVUpH.js} +1 -1
  160. package/dist/ui/assets/{session-search-index-CN1zDLlx.js → session-search-index-DRFKeHXl.js} +1 -1
  161. package/dist/ui/assets/{setup-feature-flags-remote-BVd31Z12.js → setup-feature-flags-remote-CEtNYgED.js} +1 -1
  162. package/dist/ui/assets/{signed-fetch-BY2Mdjqe.js → signed-fetch-E-2q08XL.js} +1 -1
  163. package/dist/ui/assets/{silent-renew-backoff-CKAAh6GN.js → silent-renew-backoff-Ddlf2gAw.js} +1 -1
  164. package/dist/ui/assets/slicc-version-bYxfYms3.js +1 -0
  165. package/dist/ui/assets/{snapshot-gi8tDzvN.js → snapshot-Dv7-7kFE.js} +1 -1
  166. package/dist/ui/assets/{snapshot-features-DjMJkCGq.js → snapshot-features-rlYmVQ8i.js} +1 -1
  167. package/dist/ui/assets/{soundscape-Bl3LhUk9.js → soundscape-CyBhtUGQ.js} +1 -1
  168. package/dist/ui/assets/{speak-BY_fDou2.js → speak-qRc1po5e.js} +1 -1
  169. package/dist/ui/assets/{sprinkle-manager-C-NUJqPy.js → sprinkle-manager-DT2AYalc.js} +1 -1
  170. package/dist/ui/assets/{sprinkle-renderer-CcA6ie5u.js → sprinkle-renderer-DF4JYgsw.js} +1 -1
  171. package/dist/ui/assets/ssh-BQqlQVXQ.js +6 -0
  172. package/dist/ui/assets/{state-z3wOHLww.js → state-RVr0GidF.js} +1 -1
  173. package/dist/ui/assets/{store-ByUcAFUa.js → store-BlFQl8dG.js} +1 -1
  174. package/dist/ui/assets/{store-ChWzn_H8.js → store-CYwEydJ4.js} +1 -1
  175. package/dist/ui/assets/{sudo-DNZFIZ-H.js → sudo-BqpeZUOO.js} +1 -1
  176. package/dist/ui/assets/sudo-fs-C6r_MIIY.js +3 -0
  177. package/dist/ui/assets/{supervisor-BtH2-9sE.js → supervisor-C1sPrIbH.js} +1 -1
  178. package/dist/ui/assets/{sync-dialog-Jqz74VkZ.js → sync-dialog-sC277gbg.js} +1 -1
  179. package/dist/ui/assets/tool-ui-DRnUkp2g.js +1 -0
  180. package/dist/ui/assets/{transformers-env-pq1E2H6B.js → transformers-env-BzsQpYgD.js} +1 -1
  181. package/dist/ui/assets/{tray-leader-Bas0lH9O.js → tray-leader-Gx_yzXFX.js} +1 -1
  182. package/dist/ui/assets/{lick-urls-DdKPDlgq.js → tray-leader-status-CpkFr6n7.js} +1 -1
  183. package/dist/ui/assets/{tray-leave-runtime-B9aV_guA.js → tray-leave-runtime-Cuj-CStD.js} +1 -1
  184. package/dist/ui/assets/{tray-runtime-config-BZoJXfW0.js → tray-runtime-config-dyxCfUex.js} +1 -1
  185. package/dist/ui/assets/{tray-sidecar-DA8NfCV6.js → tray-sidecar-BCAds1ts.js} +1 -1
  186. package/dist/ui/assets/{upgrade-detection-B5ym__Gu.js → upgrade-detection-CXNgKpwK.js} +1 -1
  187. package/dist/ui/assets/{upskill-lick-skip-CZGM2OFA.js → upskill-lick-skip-wDM3Vdyq.js} +1 -1
  188. package/dist/ui/assets/url-Dq7PTmNp.js +1 -0
  189. package/dist/ui/assets/v86-Cv7l0TeZ.js +1 -0
  190. package/dist/ui/assets/voice-reply-DPbxkmsy.js +1 -0
  191. package/dist/ui/assets/{wc-attach-C5yXIQNU.js → wc-attach-C-7ZwxKV.js} +3 -3
  192. package/dist/ui/assets/wc-browser-D-03DBqa.js +1 -0
  193. package/dist/ui/assets/wc-computers-m_Qiklfg.js +3 -0
  194. package/dist/ui/assets/{wc-detached-f_qit-5b.js → wc-detached-D5_bAfyn.js} +1 -1
  195. package/dist/ui/assets/{wc-extension-DRx21-cq.js → wc-extension-DSvNnUY6.js} +2 -2
  196. package/dist/ui/assets/{wc-follower-DcKt92kM.js → wc-follower-1feBQ0f-.js} +3 -3
  197. package/dist/ui/assets/wc-follower-oauth-JZo8mi8y.js +5 -0
  198. package/dist/ui/assets/{wc-gelatiere-qAW7lWGW.js → wc-gelatiere-Wr8PEKDG.js} +1 -1
  199. package/dist/ui/assets/wc-live-DT1WB50h.js +427 -0
  200. package/dist/ui/assets/{wc-nav-DzPuXq_n.js → wc-nav-BCq8EXtI.js} +2 -2
  201. package/dist/ui/assets/{wc-onboarding-CXM-z-7_.js → wc-onboarding-1l4fZpDo.js} +2 -2
  202. package/dist/ui/assets/{wc-permissions-BsGMi4OQ.js → wc-permissions-CCA-0PP4.js} +2 -2
  203. package/dist/ui/assets/{wc-placeholder-BBqbsuml.js → wc-placeholder-ODIHzW-8.js} +3 -3
  204. package/dist/ui/assets/{wc-secret-request-BSUlxVVi.js → wc-secret-request-CWyoYT_T.js} +1 -1
  205. package/dist/ui/assets/{wc-settings-55mC-jVS.js → wc-settings-Df49ivPm.js} +3 -3
  206. package/dist/ui/assets/{wc-shell-C71iKreG.js → wc-shell-CZ95TYrc.js} +242 -187
  207. package/dist/ui/assets/{wc-shortcut-config-Crjq_rF1.js → wc-shortcut-config-CmRCkDN0.js} +1 -1
  208. package/dist/ui/assets/{wc-sprinkles-Caji5y7n.js → wc-sprinkles-Cm0F47mC.js} +2 -2
  209. package/dist/ui/assets/{wc-transcript-export-Dqe3SH1t.js → wc-transcript-export-CMdPvQk4.js} +2 -2
  210. package/dist/ui/assets/wc-tray-2XQPor_4.js +5 -0
  211. package/dist/ui/assets/welcome-detection-CouG8kRR.js +1 -0
  212. package/dist/ui/assets/{whisper-session-DfILe4Yb.js → whisper-session-z9qnQTAM.js} +2 -2
  213. package/dist/ui/assets/{xai-grok-CVLBrxdD.js → xai-grok-BmuhN83h.js} +1 -1
  214. package/dist/ui/assets/{xai-grok-Dp8n52fO.js → xai-grok-CaNUqqnT.js} +1 -1
  215. package/dist/ui/index.html +11 -11
  216. package/dist/ui/packages/webapp/index.html +11 -11
  217. package/package.json +1 -1
  218. package/dist/ui/assets/SKILL-DB5CVwyu.js +0 -1
  219. package/dist/ui/assets/browser-2rCVqcqy.js +0 -1
  220. package/dist/ui/assets/core-DP-MJcag.js +0 -36
  221. package/dist/ui/assets/engine-B-OPe78i.js +0 -1
  222. package/dist/ui/assets/es-DwGGEZle.js +0 -51
  223. package/dist/ui/assets/fake-computer-1f2_4vxY.js +0 -65
  224. package/dist/ui/assets/host-BQ2qKD-D.js +0 -1
  225. package/dist/ui/assets/jsh-CrSWPG4t.js +0 -1
  226. package/dist/ui/assets/keys-n5_C9sHW.js +0 -1
  227. package/dist/ui/assets/lick-ws-bridge-ChigxI36.js +0 -1
  228. package/dist/ui/assets/memory-v2-flag-BHVbti6Z.js +0 -1
  229. package/dist/ui/assets/panel-rpc-handlers-Nu-wOrG9.js +0 -2
  230. package/dist/ui/assets/panelize-shell-tFElgHWF.js +0 -4
  231. package/dist/ui/assets/provider-store-access-M0PvJ08M.js +0 -1
  232. package/dist/ui/assets/provider-store-access-RxIHhH6d.js +0 -1
  233. package/dist/ui/assets/run-BEt0RS3J.js +0 -52
  234. package/dist/ui/assets/screencapture-media-B1iFS6Qy.js +0 -1
  235. package/dist/ui/assets/screencapture-media-YBE2VnLF.js +0 -1
  236. package/dist/ui/assets/secret-topology-DLJBhHOi.js +0 -1
  237. package/dist/ui/assets/slicc-version-BZyTvfoc.js +0 -1
  238. package/dist/ui/assets/sudo-fs-D620mZry.js +0 -3
  239. package/dist/ui/assets/v86-DseFx8Yp.js +0 -1
  240. package/dist/ui/assets/voice-reply-CL5tDo0l.js +0 -1
  241. package/dist/ui/assets/wc-browser-DO1Pnegi.js +0 -1
  242. package/dist/ui/assets/wc-follower-oauth-BF3qXDTt.js +0 -5
  243. package/dist/ui/assets/wc-live-DOMCfDT6.js +0 -427
  244. package/dist/ui/assets/wc-tray-B7ayzT1W.js +0 -5
  245. package/dist/ui/assets/welcome-detection-CEARSpAq.js +0 -1
@@ -1,65 +0,0 @@
1
- var e=`#!/usr/bin/env jsh
2
- /**
3
- * Durable jsh-hosted computer with a push frame stream. \`register()\`
4
- * subscribes to host \`computer-call\` events, which keeps this unit
5
- * alive the same way \`sliccy:hid\` inputreport listeners do.
6
- * \`handlers.subscribe\` is the \`computer watch\` path; \`screenshot\`
7
- * still works as a poll fallback.
8
- *
9
- * jshd start -n fake-computer --enable --restart always \\
10
- * /workspace/skills/jshd/examples/fake-computer.jsh
11
- * computer ls
12
- * computer screenshot -c jsh:fake
13
- * computer watch -c jsh:fake
14
- * computer click 1 --at 0,0 -c jsh:fake
15
- * computer type -c jsh:fake hello
16
- */
17
- const computer = require('sliccy:computer');
18
-
19
- const JPEG = Uint8Array.of(
20
- 0xff, 0xd8, 0xff, 0xc0, 0x00, 0x0b, 0x08, 0x00, 0x01, 0x00, 0x01, 0x01, 0x11, 0x00, 0xff, 0xd9
21
- );
22
-
23
- let seq = 0;
24
- let last = '';
25
-
26
- function nextFrame() {
27
- seq += 1;
28
- return { seq, mime: 'image/jpeg', width: 1, height: 1, bytes: JPEG };
29
- }
30
-
31
- computer.register({
32
- id: 'jsh:fake',
33
- title: 'fake',
34
- size: { width: 1, height: 1 },
35
- capabilities: {
36
- screenshot: true,
37
- text: true,
38
- frames: 'push',
39
- keyboard: true,
40
- mouse: 'absolute',
41
- scroll: false,
42
- exec: false,
43
- inputAllowed: true,
44
- },
45
- async screenshot() {
46
- return nextFrame();
47
- },
48
- subscribe(fps, onFrame) {
49
- onFrame(nextFrame());
50
- const ms = Math.max(50, Math.round(1000 / Math.max(1, fps)));
51
- const timer = setInterval(() => onFrame(nextFrame()), ms);
52
- return () => clearInterval(timer);
53
- },
54
- async text() {
55
- return last || '(empty)';
56
- },
57
- async input(events) {
58
- for (const event of events) {
59
- if (event.type === 'text') last += event.text;
60
- if (event.type === 'key') last += \`[\${event.keysym}]\`;
61
- if (event.type === 'click') last += \`[click \${event.x},\${event.y}]\`;
62
- }
63
- },
64
- });
65
- `;export{e as default};
@@ -1 +0,0 @@
1
- import{installComputerRegistry as e}from"./registry-Bq_j-EXx.js";let t=null;function n(){return t}function r(n){let r=e(n.processManager),a=new Map,o=n.pollTimeoutMs??8e3,s=r.list(),c=(e,t)=>{n.transport.send(e,t)},l=r.onChange(e=>{s=e,c({type:`computers`,computers:e})}),u=(e,t,n)=>{let r=a.get(e);if(!r||r.generation!==n)return;let i=t.bytes.slice();c({type:`computer-frame`,id:e,seq:t.seq,mime:t.mime,width:t.width,height:t.height,bytes:i},[i.buffer])},d=e=>{let t=a.get(e);t&&(t.generation+=1,a.delete(e),t.unsub?.(),t.timer&&clearInterval(t.timer))},f=e=>{d(e.id);let t=r.get(e.id);if(!t)return;let n=Math.max(1,Math.min(10,Math.round(e.fps)||2)),s=e.maxWidth>0?e.maxWidth:768,c={id:e.id,fps:n,maxWidth:s,generation:1,unsub:null,timer:null,inFlight:!1};if(a.set(e.id,c),t.subscribe){c.unsub=t.subscribe(n,t=>u(e.id,t,c.generation));return}let l=Math.round(1e3/n),f=()=>{i(c,t,o,t=>u(e.id,t,c.generation))};c.timer=setInterval(f,l),f()},p=n.transport.onMessage(e=>{if(!e||typeof e!=`object`||!(`source`in e)||e.source!==`panel`)return;let t=e.payload;t.type===`computer-watch`?f(t):t.type===`computer-unwatch`&&d(t.id)});c({type:`computers`,computers:s});let m={watch:(e,t,n)=>f({type:`computer-watch`,id:e,fps:t,maxWidth:n}),unwatch:d,stop:()=>{p(),l();for(let e of[...a.keys()])d(e);t===m&&(t=null)}};return t=m,m}async function i(e,t,n,r){if(e.inFlight)return;e.inFlight=!0;let i=e.generation;try{let o=await a(t.screenshot({format:`jpeg`,maxWidth:e.maxWidth}),n);if(e.generation!==i)return;r(o)}catch{}finally{e.generation===i&&(e.inFlight=!1)}}function a(e,t){return new Promise((n,r)=>{let i=setTimeout(()=>r(Error(`computer poll timed out`)),t);e.then(e=>{clearTimeout(i),n(e)},e=>{clearTimeout(i),r(e)})})}export{n as getComputersHost,r as startComputersHost};
@@ -1 +0,0 @@
1
- const e=5e3;var t=class{descriptor;call;frameTimeoutMs;subscribe;lastFrame=null;sinks=new Set;waiters=new Set;subscribed=!1;constructor(t,n,r=e){this.descriptor=t,this.call=n,this.frameTimeoutMs=r,t.capabilities.frames===`push`&&(this.subscribe=(e,t)=>this.bindSubscribe(e,t))}describe(){return this.descriptor}patch(e){this.descriptor={...this.descriptor,...e}}pushFrame(e){this.lastFrame=e;for(let t of[...this.sinks])t(e);for(let t of[...this.waiters])t(e);this.waiters.clear()}bindSubscribe(e,t){return this.sinks.add(t),this.lastFrame&&t(this.lastFrame),this.subscribed||(this.subscribed=!0,this.call(`subscribe`,[e]).catch(()=>{this.subscribed=!1})),()=>{this.sinks.delete(t),this.sinks.size===0&&this.subscribed&&(this.subscribed=!1,this.call(`unsubscribe`,[]).catch(()=>{}))}}async screenshot(e){return this.subscribed?this.lastFrame?this.lastFrame:this.waitForCachedFrame():await this.call(`screenshot`,[e])}async text(){let e=await this.call(`text`,[]);return typeof e==`string`?e:null}async input(e){await this.call(`input`,[e])}async exec(e){return await this.call(`exec`,[e])}async close(){this.sinks.clear(),this.waiters.clear(),this.subscribed&&(this.subscribed=!1,this.call(`unsubscribe`,[]).catch(()=>{}))}waitForCachedFrame(){return new Promise((e,t)=>{let n=setTimeout(()=>{this.waiters.delete(r),t(Error(`computer frame timed out`))},this.frameTimeoutMs),r=t=>{clearTimeout(n),this.waiters.delete(r),e(t)};this.waiters.add(r)})}};export{e as JSH_FRAME_TIMEOUT_MS,t as JshComputerBackend};
@@ -1 +0,0 @@
1
- import{t as e}from"./tmpdir-env-ate4iNcK.js";const 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}function i(e,t){if(!t||e.width<=t||e.width<=0)return e;let n=t/e.width,r=Math.max(1,Math.round(e.width*n)),i=Math.max(1,Math.round(e.height*n)),a=new Uint8ClampedArray(r*i*4);for(let t=0;t<i;t++){let i=Math.min(e.height-1,Math.round(t/n));for(let o=0;o<r;o++){let s=Math.min(e.width-1,Math.round(o/n)),c=(i*e.width+s)*4,l=(t*r+o)*4;a[l]=e.data[c],a[l+1]=e.data[c+1],a[l+2]=e.data[c+2],a[l+3]=e.data[c+3]}}return{data:a,width:r,height:i}}async function a(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())}async function o(e,n,r=.7){if(typeof OffscreenCanvas>`u`)return t.slice();let i=new OffscreenCanvas(e.width,e.height),a=i.getContext(`2d`);if(!a)throw Error(`could not acquire 2d canvas context`);let o=e.data;a.putImageData(new ImageData(o,e.width,e.height),0,0);let s=await i.convertToBlob({type:n,...n===`image/jpeg`?{quality:r}:{}});return new Uint8Array(await s.arrayBuffer())}function s(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 c(e){return`screen: ${e}`}async function l(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 u(e){return o(e,`image/jpeg`,.55)}const d={ctrl:!1,alt:!1,shift:!1,meta:!1},f={ctrl:`ctrl`,control:`ctrl`,alt:`alt`,shift:`shift`,meta:`meta`,super:`meta`,win:`meta`,cmd:`meta`,command:`meta`},p={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++)p[`f${e}`]={key:`F${e}`,code:`F${e}`};const m={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]},h={ctrl:[29],alt:[56],shift:[42],meta:[224,91]},g={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++)g[`f${e}`]=`KEYCODE_F${e}`;function _(e){return/^[A-Z][A-Z0-9_]+$/u.test(e)}function v(e){return e.split(/[-+]/u).filter(Boolean)}function y(e){let t=e.toLowerCase();if(p[t])return p[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 b(e){let t=e.trim();if(!t)return null;if(_(t))return{key:t,code:t,modifiers:{...d},keysym:t,native:t};let n=v(t);if(n.length===0)return null;let r={...d},i=null;for(let e=0;e<n.length;e++){let t=n[e],a=e===n.length-1,o=f[t.toLowerCase()];if(o&&!a){r[o]=!0;continue}o&&a&&n.length,i=t}if(!i)return null;if(_(i))return{key:i,code:i,modifiers:r,keysym:i,native:i};let a=y(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 x(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 S(e){return e.length===2?[e[0],e[1]|128]:[e[0]|128]}function C(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&&h[i]){n.push(h[i]);continue}let a=m[i]??h[i]??(i.length===1?x(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,...S(e));for(let e of[...n].reverse())i.push(...S(e));return i}function w(e){return+!!e.alt+(e.ctrl?2:0)+(e.meta?4:0)+(e.shift?8:0)}function T(e,t){let n=w(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{u as a,i as c,r as d,c as i,n as l,b as n,l as o,T as r,s,C as t,a as u};
@@ -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-Dseu067f.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-Dseu067f.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--VZ3E0yk.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/port-bridge-client-Dn8JtUyP.js","assets/preload-helper-Czpn1I53.js","assets/logger-DDBAeTLF.js","assets/proxied-fetch-DyBveeCl.js","assets/base64-DJRlyqZu.js","assets/fetch-body-1l9I58Vk.js","assets/api-endpoint-DGxXvrur.js","assets/runtime-env-Dlaokqg1.js","assets/mount-bridge-client-CO2HxXrT.js","assets/types-D8gIX-W-.js","assets/page-approval-service-B8t-buCi.js","assets/float-topology-YtctpJaG.js","assets/speak-BY_fDou2.js","assets/speech-assets-bridge-CFYafE89.js","assets/transformers-env-pq1E2H6B.js","assets/wc-shell-C71iKreG.js","assets/mime-types-D0xZwlMO.js","assets/bridge-protocol-06nbmp2X.js","assets/account-store-C35GYvum.js","assets/core-BMcS6rur.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-DLJBhHOi.js","assets/image-markers-BFDmhPy4.js","assets/tool-ui-eSQ1g2I1.js","assets/providers-CnoKdyLc.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-BZHckZJM.js","assets/permissions-surface-registry-CilCRwhh.js","assets/whisper-session-DfILe4Yb.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-DyBveeCl.js";import{J as t,m as n}from"./account-store-C35GYvum.js";import{a as r,t as i}from"./api-endpoint-DGxXvrur.js";import"./main-CfF8CFBr.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--VZ3E0yk.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-CO2HxXrT.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-B8t-buCi.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-DyBveeCl.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-BY_fDou2.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-BY_fDou2.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-BY_fDou2.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-BY_fDou2.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-BY_fDou2.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-BZHckZJM.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-BZHckZJM.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-BZHckZJM.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-BZHckZJM.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-CnoKdyLc.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,4 +0,0 @@
1
- import{t as e}from"./logger-DDBAeTLF.js";import{H as t,I as n,L as r,M as i,R as a,U as o,V as s,W as c,k as l,z as u}from"./wc-shell-C71iKreG.js";import"./virtual-device-paths-D45tpPP6.js";import{r as d}from"./icons-BM2l-_K7.js";import{setLayoutApplier as f}from"./layout-apply-registry-Cw730jao.js";var p=e(`add-panel-menu`),m=`slicc-add-panel-menu-style`,h=[`.slicc-addpanel{position:relative;}`,`.slicc-addpanel__btn{width:26px;height:26px;display:grid;place-items:center;`,`border:1px solid var(--line);border-radius:7px;background:var(--canvas);`,`color:var(--txt-2);cursor:pointer;padding:0;font-size:15px;line-height:1;}`,`.slicc-addpanel__btn:hover{background:var(--ghost);color:var(--ink);}`,`.slicc-addpanel__menu{position:absolute;top:32px;right:0;min-width:230px;`,`max-height:70vh;overflow:auto;background:var(--canvas);border:1px solid var(--line);`,`border-radius:10px;box-shadow:var(--shadow-pane);padding:6px;display:none;`,`font-family:var(--ui);font-size:12.5px;}`,`.slicc-addpanel__menu[open]{display:block;}`,`.slicc-addpanel__group{padding:6px 8px 2px;color:var(--txt-3);font-size:10.5px;`,`text-transform:uppercase;letter-spacing:.04em;}`,`.slicc-addpanel__item{width:100%;display:flex;align-items:center;gap:8px;`,`padding:6px 8px;border:none;background:none;border-radius:6px;cursor:pointer;`,`color:var(--ink);text-align:left;font:inherit;}`,`.slicc-addpanel__item:hover{background:var(--ghost);}`,`.slicc-addpanel__check{width:12px;flex:0 0 12px;color:var(--accent);}`,`.slicc-addpanel__sep{height:1px;background:var(--line);margin:5px 4px;}`,`.slicc-addpanel__item{position:relative;}`,`.slicc-addpanel__del{margin-left:auto;flex:0 0 auto;display:grid;place-items:center;`,`width:18px;height:18px;padding:0;border:none;border-radius:4px;background:transparent;`,`color:var(--ink);opacity:0;cursor:pointer;}`,`.slicc-addpanel__item:hover .slicc-addpanel__del{opacity:0.65;}`,`.slicc-addpanel__del:hover{opacity:1;background:var(--ghost);}`,`.slicc-addpanel__del:focus-visible{opacity:1;}`].join(``),ee=typeof globalThis.prompt==`function`?globalThis.prompt.bind(globalThis):void 0;function g(e){let t=e.trim().toLowerCase().replace(/[^a-z0-9._-]+/g,`-`).replace(/^[-.]+|[-.]+$/g,``).slice(0,64);return t.length>0?t:null}function _(e){if(e.getElementById(m))return;let t=e.createElement(`style`);t.id=m,t.textContent=h,(e.head??e.documentElement).appendChild(t)}function te(e){_(document);let n=document.createElement(`div`);n.className=`slicc-addpanel`;let r=document.createElement(`button`);r.type=`button`,r.className=`slicc-addpanel__btn`,r.title=`Panels and layouts`,r.setAttribute(`aria-label`,`Panels and layouts`);let i=new DOMParser().parseFromString(d(`layout-dashboard`,{size:14}),`image/svg+xml`).documentElement;r.appendChild(i);let a=document.createElement(`div`);a.className=`slicc-addpanel__menu`,a.setAttribute(`role`,`menu`);let o=(e,t,n)=>{let r=document.createElement(`button`);r.type=`button`,r.className=`slicc-addpanel__item`,r.setAttribute(`role`,`menuitem`);let i=document.createElement(`span`);i.className=`slicc-addpanel__check`,i.textContent=t?`✓`:``;let a=document.createElement(`span`);return a.textContent=e,r.append(i,a),r.addEventListener(`click`,()=>{n(),m()}),r},c=t=>{let n=o(t,!1,()=>e.onLoadLayout(t)),r=document.createElement(`button`);return r.type=`button`,r.className=`slicc-addpanel__del`,r.title=`Delete "${t}"`,r.setAttribute(`aria-label`,`Delete layout ${t}`),r.appendChild(new DOMParser().parseFromString(d(`trash-2`,{size:11}),`image/svg+xml`).documentElement),r.addEventListener(`click`,n=>{n.stopPropagation(),e.onDeleteLayout(t),m()}),n.appendChild(r),n};function l(){let t=e.promptForName??ee;if(!t){p.warn(`cannot save a layout: no prompt available`);return}let n=t(`Save this layout as:`,e.layout.getLayout().id);if(n===null)return;let r=g(n);if(!r){p.warn(`layout not saved: the name reduced to nothing`,{raw:n});return}e.onSaveLayout(r)}let u=e=>{let t=document.createElement(`div`);return t.className=`slicc-addpanel__group`,t.textContent=e,t};async function f(){let t=new Set(e.layout.getPlacedPanelIds()),n=[],r={},i=s();for(let e of i)(r[e.origin]??=[]).push(e);for(let[i,a]of[[`builtin`,`Panels`],[`sprinkle`,`Sprinkles`],[`agent`,`Made by SLICC`]]){let s=r[i];if(s?.length){n.push(u(a));for(let r of s){let i=t.has(r.meta.id);n.push(o(r.meta.title,i,()=>e.onToggle(r.meta.id,!i)))}}}try{let{saved:t,presets:r}=await e.listLayoutNames(),i=document.createElement(`div`);i.className=`slicc-addpanel__sep`,n.push(i,u(`Layouts`));for(let e of t)n.push(c(e));for(let t of r)n.push(o(t,!1,()=>e.onLoadLayout(t)));n.push(o(`Save layout as…`,!1,l))}catch(e){p.warn(`could not list layouts for the menu`,{error:e})}a.replaceChildren(...n)}function m(){a.removeAttribute(`open`),document.removeEventListener(`pointerdown`,h,!0)}let h=e=>{n.contains(e.target)||m()};return r.addEventListener(`click`,()=>{if(a.hasAttribute(`open`)){m();return}f().then(()=>{a.setAttribute(`open`,``),document.addEventListener(`pointerdown`,h,!0)})}),t.addEventListener(`panel-registry-change`,()=>{a.hasAttribute(`open`)&&f()}),n.append(r,a),n}var v={chat:`chat`,sessionsRail:`sessions-rail`,dockRail:`dock-rail`,scoopSwitcher:`scoop-switcher`,floatbar:`floatbar`,files:`files`,term:`term`,memory:`memory`,monitor:`monitor`,browser:`browser`},y={[v.chat]:{id:v.chat,title:`Chat`,icon:`message-circle`,minWidth:320,preferredSize:3},[v.sessionsRail]:{id:v.sessionsRail,title:`Sessions`,icon:`history`,preferredSize:`44px`},[v.dockRail]:{id:v.dockRail,title:`Dock`,icon:`layout-grid`,preferredSize:`48px`},[v.scoopSwitcher]:{id:v.scoopSwitcher,title:`Scoops`,icon:`users`},[v.floatbar]:{id:v.floatbar,title:`Runtime`,icon:`activity`},[v.files]:{id:v.files,title:`Files`,icon:`folder`,minWidth:220},[v.term]:{id:v.term,title:`Terminal`,icon:`square-terminal`},[v.memory]:{id:v.memory,title:`Memory`,icon:`brain`},[v.monitor]:{id:v.monitor,title:`Monitor`,icon:`activity`},[v.browser]:{id:v.browser,title:`Browser`,icon:`globe`}};function b(e,t){let n=document.createElement(`slicc-panel`);n.setAttribute(`panel-id`,e);let r=y[e];return r?.title&&n.setAttribute(`aria-label`,r.title),n.appendChild(t),n}function ne(){for(let e of Object.values(y))o({meta:e,source:{kind:`element`,tag:`slicc-panel`},origin:`builtin`})}function x(e){if(!e?.startsWith(`sprinkle:`))return null;let t=e.slice(9);return t.length>0?t:null}function S(){return{when:{maxWidth:700},docks:[],zones:{center:[v.chat]},floating:[]}}function C(){return[{edge:`top`,size:`36px`,panels:[v.scoopSwitcher,v.floatbar],locked:!0},{edge:`left`,size:`44px`,panels:[v.sessionsRail],locked:!0},{edge:`right`,size:`48px`,panels:[v.dockRail],locked:!0}]}var w={version:1,id:`default`,title:`Default`,base:{docks:C(),zones:{center:[v.chat]}},variants:[S()]},T={default:w};function E(e){return T[e]??null}function D(){return Object.keys(T)}e(`sudo:sudoers`);var O=`/etc/slicc/layouts`;[`NOPASSWD Read /tmp`,`NOPASSWD Read /tmp/**`,`NOPASSWD Write /tmp`,`NOPASSWD Write /tmp/**`].join(`
2
- `);var k=e(`layout-store`),A=`/workspace/layouts`,j=[A,O];function M(e,t){return`${t?.protected?O:A}/${e}.json`}async function N(e,t){try{if(!await e.exists(t))return null;let n=await e.readFile(t),i=r(JSON.parse(typeof n==`string`?n:String(n)));return`error`in i?(k.warn(`invalid layout document — ignoring`,{path:t,error:i.error}),null):i}catch(e){return k.warn(`failed to read layout`,{path:t,error:e instanceof Error?e.message:e}),null}}async function P(e,t,n){let r=n?.name??t.id,i=n?.protected?O:A,a=`${i}/${r}.json`;return await e.exists(i)||await e.mkdir(i,{recursive:!0}),await e.writeFile(a,`${JSON.stringify(t,null,2)}\n`),k.info(`layout saved`,{path:a}),a}async function F(e,t,n){let r=M(t,n);return await e.exists(r)?(await e.rm(r),!0):!1}async function I(e){let t=[],n=new Set;for(let r of j){let i;try{if(!await e.exists(r))continue;i=(await e.readDir(r)).filter(e=>e.type===`file`).map(e=>e.name)}catch(e){k.warn(`failed to list layout dir`,{dir:r,error:e});continue}for(let a of i){if(!a.endsWith(`.json`))continue;let i=a.slice(0,-5);if(n.has(i))continue;let o=`${r}/${a}`,s=await N(e,o);s&&(n.add(i),t.push({name:i,path:o,doc:s,protected:r===O}))}}return t}async function L(e,t){for(let n of j){let r=`${n}/${t}.json`,i=await N(e,r);if(i)return{name:t,path:r,doc:i,protected:n===O}}return null}function R(e,t,r){let o=e.getLayout(),s=i(o,e.environment());if(r){let e=s.zones??u(s.center??null);a(e,t)?s.zones||(s.zones=e,s.center=null):(s.zones=n(e,t,`right`),s.center=null)}o.panels={...o.panels,[t]:{...o.panels?.[t],visible:r}},e.setLayout(o)}var z=e(`apply-layout-doc`);function B(e){return{applied:!1,error:`layout ${e} needs a filesystem (unavailable here)`}}function V(e){return[`load`,`save`,`delete`,`docs`,`panels`,`show`,`hide`].includes(e.kind)}async function H(e,t){let n=e.fs?await L(e.fs,t):null;if(n)return e.layout.setLayout(n.doc),{applied:!0,output:`loaded layout "${t}" from ${n.path}`};let r=E(t);return r?(e.layout.setLayout(r),{applied:!0,output:`loaded preset "${t}"`}):{applied:!1,error:`unknown layout "${t}" — try: ${D().join(`, `)}`}}async function U(e,t,n){if(!e.fs)return B(`save`);let r={...e.layout.getLayout(),id:t};try{return{applied:!0,output:`saved layout to ${await P(e.fs,r,{name:t,protected:n})}`}}catch(e){let r=e instanceof Error?e.message:String(e);return z.warn(`layout save failed`,{name:t,protected:n,error:r}),{applied:!1,error:`could not save "${t}": ${r}`}}}async function W(e){let t=e.fs?await I(e.fs):[],n=[];if(t.length>0){n.push(`saved layouts:`);for(let e of t)n.push(` ${e.name}${e.protected?` (protected)`:``} ${e.path}`)}n.push(`presets: ${D().join(`, `)}`);let r=e.layout.getLayout();return n.push(`current: ${r.id}`),{applied:!0,output:n.join(`
3
- `)}}function G(e){let t=new Set(e.layout.getPlacedPanelIds()),n={builtin:[],sprinkle:[],agent:[]};for(let e of s()){let r=t.has(e.meta.id)?`*`:` `;(n[e.origin]??=[]).push(` ${r} ${e.meta.id} ${e.meta.title}`)}let r=[];for(let[e,t]of Object.entries(n))t.length!==0&&(r.push(`${e}:`),r.push(...t));return r.push(`(* = currently placed)`),{applied:!0,output:r.join(`
4
- `)}}function K(e,t,n){return R(e.layout,t,n),{applied:!0}}async function q(e,t){switch(t.kind){case`load`:return H(e,t.name);case`save`:return U(e,t.name,t.protected);case`delete`:return e.fs?await F(e.fs,t.name)||await F(e.fs,t.name,{protected:!0})?{applied:!0,output:`deleted layout "${t.name}"`}:{applied:!1,error:`no saved layout named "${t.name}"`}:B(`delete`);case`docs`:return W(e);case`panels`:return G(e);case`show`:return K(e,t.panelId,!0);case`hide`:return K(e,t.panelId,!1)}}var J=e(`panelize-shell`),Y=`slicc-panelize-style`,X=[`.wcui-avatar-strip{position:absolute;top:0;right:0;height:var(--barh,36px);`,`display:flex;align-items:center;gap:12px;padding:0 9px 0 14px;box-sizing:border-box;`,`pointer-events:auto;z-index:1;}`,`.wcui-frame slicc-layout{position:relative;z-index:1;}`,`slicc-layout .slicc-layout__dock--left,slicc-layout .slicc-layout__dock--right{flex:0 0 auto;}`,`slicc-layout .slicc-layout__dock--top,slicc-layout .slicc-layout__dock--bottom{flex:0 0 auto;}`,`slicc-layout .slicc-layout__dock--left{flex:0 0 auto!important;width:auto!important;}`,`slicc-layout .slicc-layout__dock--right{flex:0 0 auto!important;width:auto!important;}`,`slicc-panel[panel-id="sessions-rail"],slicc-panel[panel-id="dock-rail"]{`,`flex:0 0 auto;height:100%;align-self:stretch;overflow:hidden;}`,`slicc-panel[panel-id="dock-rail"]{width:48px;}`,`slicc-panel[panel-id="sessions-rail"]{width:auto;}`,`slicc-panel[panel-id="sessions-rail"]>*,slicc-panel[panel-id="dock-rail"]>*{`,`height:100%;flex:1 1 auto;min-height:0;}`,`slicc-panel[panel-id="scoop-switcher"],slicc-panel[panel-id="floatbar"]{`,`height:var(--barh,36px);min-height:var(--barh,36px);max-height:var(--barh,36px);}`,`slicc-panel[panel-id="chat"] slicc-chatpane{flex:1 1 0;width:100%;min-height:0;}`,`slicc-panel[panel-id="chat"] slicc-chat-thread{flex:1 1 0;min-height:0;overflow-y:auto;}`,`slicc-panel[panel-id="chat"] slicc-composer{flex:0 0 auto;}`,`slicc-panel[panel-id="scoop-switcher"]{flex:0 0 auto;justify-content:center;padding-left:14px;}`,`slicc-panel[panel-id="floatbar"]{flex:1 1 auto;align-items:center;justify-content:flex-end;`,`padding-right:var(--avatar-strip-w, 96px);}`,`slicc-panel[panel-id="scoop-switcher"],slicc-panel[panel-id="floatbar"]{flex-direction:row;}`].join(``);function re(e){if(e.getElementById(Y))return;let t=e.createElement(`style`);t.id=Y,t.textContent=X,(e.head??e.documentElement).appendChild(t)}function Z(e){e.setAttribute(`active`,``),e.style.display=`flex`,e.style.flexDirection=`column`,e.style.position=`relative`,e.style.inset=`auto`,e.style.flex=`1 1 auto`,e.style.minHeight=`0`}var ie=new Set([v.files,v.term,v.memory,v.monitor,v.browser]);function ae(e,t,n,r){let i=(e,i)=>{let a=e.detail?.id;!a||!ie.has(a)||n.has(a)||(e.stopImmediatePropagation(),R(t,a,i),i?r?.onToolPanelActivate?.(a):r?.onToolPanelDeactivate?.(a))};e.addEventListener(`slicc-dock-select`,e=>i(e,!0),!0),e.addEventListener(`slicc-dock-collapse`,e=>i(e,!1),!0)}function oe(e,t){return{hostSprinkleSurface:(n,r)=>{let i=b(n,r);Z(r),t.set(n,i),e.appendChild(i),o({meta:{id:n,title:x(n)??n},source:{kind:`element`,tag:`slicc-panel`},origin:`sprinkle`}),R(e,n,!0),J.info(`sprinkle panel hosted`,{surfaceId:n})},removeSprinkleSurface:n=>{t.get(n)?.remove(),t.delete(n),c(n);let r=e.getLayout();r.panels={...r.panels,[n]:{visible:!1}},e.setLayout(r)}}}var Q=`slicc-panel-layout:default`;function se(e,t){e.addEventListener(`slicc-layout-change`,t=>{let n=t.detail?.reason;if(n===`rearrange`||n===`resize`)try{localStorage.setItem(Q,JSON.stringify(e.getLayout()))}catch{}});let n=null;try{let e=localStorage.getItem(Q);if(e){let t=r(JSON.parse(e));`error`in t?J.warn(`stored layout rejected — using the default`,{error:t.error}):n=t}}catch(e){J.warn(`stored layout unreadable — using the default`,e)}e.setLayout(n??t)}var $=null;function ce(){return $}function le(e,t=w,n,r){if(e.frame.dataset.sliccPanelized===`1`)return J.warn(`panelizeShell called twice — ignoring the second call`),null;re(document),ne();let i=n,a=document.createElement(`slicc-layout`),o=new Map,s=(e,t)=>{if(!t)return;let n=b(e,t);o.set(e,n),a.appendChild(n)};e.freezer.setAttribute(`docked`,``),e.frame.querySelector(`.wcui-appcol`)?.style.setProperty(`--rail-w`,`0px`),s(v.scoopSwitcher,e.switcher),s(v.floatbar,e.floatbar),s(v.sessionsRail,e.freezer),s(v.dockRail,e.dock),s(v.chat,e.chatPane);for(let t of[v.files,v.term,v.memory,v.monitor,v.browser]){let n=e.dockTree.querySelector(`slicc-surface[surface-id="${t}"]`);n instanceof HTMLElement&&(Z(n),s(t,n))}let c=document.createElement(`div`);c.className=`wcui-avatar-strip`,c.appendChild(te({layout:a,onToggle:(e,t)=>{q({layout:a,fs:i},{kind:t?`show`:`hide`,panelId:e})},onLoadLayout:e=>{q({layout:a,fs:i},{kind:`load`,name:e})},onSaveLayout:e=>{q({layout:a,fs:i},{kind:`save`,name:e,protected:!1}).then(t=>{t.error?J.warn(`layout save failed`,{name:e,error:t.error}):J.info(`layout saved`,{name:e,output:t.output})})},onDeleteLayout:e=>{q({layout:a,fs:i},{kind:`delete`,name:e})},listLayoutNames:async()=>({saved:i?(await I(i)).map(e=>e.name):[],presets:D()})})),c.appendChild(e.avatarMenu),l(c,document),e.shell.replaceWith(a),e.frame.querySelector(`slicc-nav`)?.remove(),se(a,t),ae(e.dock,a,e.overlaySurfaces,r),f(e=>V(e)?q({layout:a,fs:i},e):{applied:!1,error:`"${e.kind}" targets the old dock-tree; with panels use: load, save, show, hide, docs, panels`}),e.frame.dataset.sliccPanelized=`1`,J.info(`shell panelized`,{panels:o.size,layout:t.id});let u={layout:a,avatarStrip:c,panels:o,attachFs:e=>{i=e,J.info(`layout store attached`)},...oe(a,o)};return $=u,u}export{Q as PANEL_LAYOUT_STORAGE_KEY,ce as getPanelizedShell,le as panelizeShell};
@@ -1 +0,0 @@
1
- import{t as e}from"./provider-Z5aj7SzG.js";export{e as readMcpAuthEntries};
@@ -1 +0,0 @@
1
- import{t as e}from"./store-ChWzn_H8.js";import"./provider-3--cEcAF.js";export{e as readMcpAuthEntries};
@@ -1,52 +0,0 @@
1
- import{n as e}from"./panel-rpc-BPwAqRch.js";import{r as t}from"./base64-DzRgusa4.js";import"./bridge-protocol-31SWTdS5.js";import{r as n,t as r}from"./subcommand-help-CgO7wRS5.js";import{d as i,i as a,l as o,n as s,o as c,r as l,s as u,u as d}from"./keys-n5_C9sHW.js";import{getComputerRegistry as f,installComputerRegistry as p}from"./registry-Bq_j-EXx.js";import{getComputersHost as m}from"./host-BQ2qKD-D.js";const ee=[`bridgeToken`,`bridge`,`tray`],te=[`cherry`,`connect`],ne=[`/join/`,`/tray/`],re=[``,`/`,`/cloud`,`/connect`];function ie(e){let t=e.replace(/\/index\.html$/,`/`);return t.length>1?t.replace(/\/$/,``):t}function h(e,t={}){let n;try{n=new URL(e)}catch{return!1}for(let e of ee)if(n.searchParams.has(e))return!0;for(let e of te)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=ie(n.pathname);return re.includes(r)?!0:ne.some(e=>`${r}/`.startsWith(e))}function g(e={x:0,y:0}){return{x:e.x,y:e.y}}function ae(e,t){return t.x!==void 0&&t.y!==void 0&&(e.x=t.x,e.y=t.y),e}function _(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 oe(e,t){return t.map(t=>{if(t.type===`mousemove`||t.type===`click`||t.type===`button`||t.type===`scroll`){let n=_(e,t);return{...t,x:n.x,y:n.y}}return t.type===`drag`&&ae(e,{x:t.x2,y:t.y2}),t})}function v(e){return`tab:${e}`}const y={screenshot:!0,text:!1,frames:`poll`,keyboard:!0,mouse:`absolute`,scroll:!0,exec:!1,inputAllowed:!0},b={1:`left`,2:`middle`,3:`right`};function x(e){if(h(e.url))throw Error(`refusing SLICC app tab '${e.title??e.url}'`)}var S=class{browser;targetId;seq=0;title;url;size=null;pointer=g();constructor(e,t,n={title:t,url:``}){this.browser=e,this.targetId=t,this.title=n.title,this.url=n.url}describe(){return{id:v(this.targetId),kind:`tab`,title:this.title,size:this.size,state:`live`,capabilities:y,pid:null}}async screenshot(e){return await this.refreshInfo(),x({url:this.url,title:this.title}),this.browser.withTab(this.targetId,async t=>{let n=await C(t,e);return n.native&&(this.size=n.native),this.seq+=1,{seq:this.seq,mime:n.mime,width:n.width,height:n.height,bytes:n.bytes}})}async input(e){await this.refreshInfo(),x({url:this.url,title:this.title}),await this.browser.withTab(this.targetId,async t=>{for(let n of e)await T(t,n,this.pointer)})}async close(){}async refreshInfo(){let e=await fe(this.browser,this.targetId);e&&(this.title=e.title||this.title,this.url=e.url||this.url)}};async function C(e,t){let n=await e.screenshot({format:`png`}),r=u(n),a=i(r)??o(r),s=r;t.maxWidth&&a&&a.width>t.maxWidth?s=u(await e.screenshot({format:`png`,maxWidth:t.maxWidth})):t.format!==`png`&&(s=u(await e.screenshot({format:`jpeg`,quality:70})));let c=i(s)??o(s)??a??{width:0,height:0};return t.format!==`png`&&!o(s)&&(s=await d(s)),{mime:o(s)?`image/jpeg`:`image/png`,bytes:s,width:c.width,height:c.height,native:a}}var w=class{rpc;targetId;seq=0;title;url;size=null;pointer=g();constructor(e,t,n={title:t,url:``}){this.rpc=e,this.targetId=t,this.title=n.title,this.url=n.url}describe(){return{id:v(this.targetId),kind:`tab`,title:this.title,size:this.size,state:`live`,capabilities:y,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:u(t.base64)}}async input(e){let t=oe(this.pointer,e);await this.rpc.call(`computer-tab-input`,{targetId:this.targetId,events:t})}async close(){}};async function T(e,t,n=g()){switch(t.type){case`mousemove`:{let r=_(n,t);await e.send(`Input.dispatchMouseEvent`,{type:`mouseMoved`,x:r.x,y:r.y});return}case`button`:await se(e,t,n);return;case`click`:await ce(e,t,n);return;case`drag`:await le(e,t,n);return;case`scroll`:{let r=_(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 ue(e,t);return;case`text`:await e.send(`Input.insertText`,{text:t.text});return;case`wait`:await E(Math.max(0,t.ms));return}}async function se(e,t,n){let r=_(n,t);await e.send(`Input.dispatchMouseEvent`,{type:t.down?`mousePressed`:`mouseReleased`,x:r.x,y:r.y,button:b[t.button],clickCount:1})}async function ce(e,t,n){let r=_(n,t),i=Math.max(1,t.count);for(let n=1;n<=i;n++)await e.send(`Input.dispatchMouseEvent`,{type:`mousePressed`,x:r.x,y:r.y,button:b[t.button],clickCount:n}),t.holdMs&&t.holdMs>0&&await E(t.holdMs),await e.send(`Input.dispatchMouseEvent`,{type:`mouseReleased`,x:r.x,y:r.y,button:b[t.button],clickCount:n})}async function le(e,t,n){await T(e,{type:`mousemove`,x:t.x1,y:t.y1},n),await T(e,{type:`button`,button:1,down:!0,x:t.x1,y:t.y1},n),await T(e,{type:`mousemove`,x:t.x2,y:t.y2},n),await T(e,{type:`button`,button:1,down:!1,x:t.x2,y:t.y2},n)}async function ue(e,t){let n=s(t.keysym);if(!n)throw Error(`unknown keysym '${t.keysym}'`);for(let r of l(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 de(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 fe(e,t){let n=(await e.listAllTargets()).find(e=>e.targetId===t);return n?{title:n.title,url:n.url}:null}function E(e){return new Promise(t=>setTimeout(t,e))}function pe(e,t){for(let n of t){let t=me(e,n);if(t)return t}return null}function me(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 D={low:256,medium:768,high:1536};function O(e){if(!e)return D.medium;if(e in D)return D[e];let t=/^(\d+)(?:x\d+)?$/u.exec(e);if(t){let e=Number.parseInt(t[1],10);if(e>0)return e}return D.medium}function k(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 he(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 A(e,t){return{width:e.shotWidth,height:e.shotHeight,scale:e.scale,at:t}}function ge(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 j=`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
- `,_e=[`-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 ve(e){return M.has(e)?e:N[e]??null}function ye(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 be(e){let t=[],n=0;for(;n<e.length;){let r=e[n];if(r===`--`){n+=1;continue}let i=ve(r);if(!i)throw Error(`unknown verb '${r}' — see \`computer --help\``);n+=1;let{args:a,next:o}=Se(i,e,n);t.push({verb:i,alias:r,args:xe(r,i,a)}),n=o}return t}function xe(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 Se(e,t,n){return P.has(e)?Ce(t,n):we(Ee(e),t,n)}function Ce(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 we(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=Te(t,i,r);break}}return{args:r,next:i}}function Te(e,t,n){let r=t;for(;r<e.length&&R(e[r]);)r=z(e,r,n);return r}function Ee(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 De(){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:f()??p(e.processManager??De())}async function je(e,t,i={}){if(e.length===0||e[0]===`--help`||e[0]===`-h`||e[0]===`help`)return J(j);let a=ye(e);if(a.rest.length===0)return J(j);let o=a.rest[0];if(r(a.rest.slice(1),{valueFlags:[..._e]}))return J(n(`computer`,o,j,{prefix:`computer`}));let s;try{s=be(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=l.filter(Boolean).join(`
47
- `);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=de(await s.listAllTargets(),o);if(`error`in c)return q(c.error);try{x(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 w(u,c.targetId,l):new S(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 o=Z(i,n.computer,r);if(`exitCode`in o)return o;let s=O(U(e,[`--size`])),l=await o.backend.screenshot({format:`jpeg`,maxWidth:s}),u=k(o.backend.describe().size??{width:l.width,height:l.height},{width:l.width,height:l.height});i.rememberShot(o.id,A(u,Date.now()),l);let d=l.seq>0?l.seq:i.nextSeq(o.id),f=await c({fs:r.fs,cwd:r.cwd,env:r.env,name:$(o.descriptor),seq:d,frame:l}),p=W(e)[0];if(p){let e=r.fs.resolvePath(r.cwd,p);await r.fs.writeFile(e,l.bytes)}let m=[he(u),a(f)];return(H(e,`--view`)||H(e,`-v`))&&m.push(`<img:data:${l.mime};base64,${t(l.bytes)}>`),n.json?J(`${JSON.stringify({id:o.id,path:f,mapping:u})}\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=O(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=m();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=Y(e,t.native,i.descriptor),o=pe(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 o=k(e.backend.describe().size??{width:i.width,height:i.height},{width:i.width,height:i.height}),s=n.nextSeq(e.id),l={...i,seq:s};n.rememberShot(e.id,A(o,Date.now()),l);let u=await c({fs:t.fs,cwd:t.cwd,env:t.env,name:$(e.descriptor),seq:s,frame:l});return J(`${a(u)}\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 Y(e,t,n){let r=(e,r)=>ge(e,r,n.lastShot,t);switch(e.verb){case`mousemove`:return Ke(e.args,r);case`click`:case`mousedown`:case`mouseup`:return qe(e.verb,e.args,r);case`drag`:return Je(e.args,r,n.capabilities.mouse);case`scroll`:return Ye(e.args,r);case`key`:case`keydown`:case`keyup`:return Xe(e.verb,e.args);case`type`:return Ze(e.args);case`wait`:return Qe(e.args);default:throw Error(`internal: ${e.verb} is not an input verb`)}}function Ke(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 qe(e,t,n){let r=W(t),{button:i,skip:a}=$e(r),o=B(t)??tt(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 Je(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 Ye(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 Xe(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 Ze(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 Qe(e){let t=Number(W(e)[0]);if(!Number.isFinite(t))throw Error(`wait: requires <ms>`);return[{type:`wait`,ms:t}]}function $e(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:et(e[0]),skip:1}:{button:1,skip:0}}function et(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 tt(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}:{}}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-XrgS6hEd.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-YtctpJaG.js";
@@ -1 +0,0 @@
1
- function e(){return{version:`6.166.0`,releasedAt:`2026-09-17T23:54:20Z`,buildId:`6.166.0-mu66s1qz`}}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{n as e,t}from"./v86-vm-DCm7zA2r.js";import{a as n,c as r,t as i}from"./keys-n5_C9sHW.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=r(i,e.maxWidth),o=await n(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 +0,0 @@
1
- import{t as e}from"./logger-DDBAeTLF.js";import{$ as t,tt as n}from"./wc-shell-C71iKreG.js";import{hasVoiceForLang as r,speak as i,speechTextFromMarkdown as a}from"./speak-BY_fDou2.js";var o=e(`speech:voice-reply`),s=0;function c(){s++}function l(){return s<=0?!1:(s--,!0)}async function u(e,s=i,c=r){let l=t(e);if(l&&!await c(l))return;let u=a(n(e));if(u)try{await s(l?{text:u,lang:l}:{text:u})}catch(e){o.warn(`spoken reply failed`,e)}}export{l as consumeVoiceSubmission,c as markVoiceSubmission,u as speakReplyMarkdown};
@@ -1 +0,0 @@
1
- import{t as e}from"./slicc-app-url-B9OxaBDe.js";import{teleportTabOneWay as t}from"./tab-teleport-BimzPYfT.js";var n=5e3;function r(t){let{browser:r,log:i}=t,a=async()=>{try{let t=await r.listAllTargets(),n=t.find(e=>e.url===location.href);if(n)return n.targetId;let i=location?.origin?[location.origin]:void 0;return t.find(t=>e(t.url??``,{selfOrigins:i}))?.targetId??null}catch(e){return i.warn(`WC browser overlay: could not resolve the SLICC tab`,e),null}},o=null;return async e=>{let s=t.agentTarget(),c=await a();if(await t.activate(e)){if(!c){i.warn(`WC browser overlay: peek cannot find the SLICC tab; staying put`,{target:e});return}o&&clearTimeout(o),o=setTimeout(()=>{o=null,(async()=>{try{await r.bringTabToFront(c),s&&s!==c&&await r.selectTab(s)}catch(e){i.error(`WC browser overlay: peek return failed`,e)}})()},n)}}}function i(n){let{refs:i,browser:a,log:o}=n,s=document.createElement(`slicc-tab-overlay`);s.setAttribute(`heading`,`Browser · open tabs`),document.body.append(s);let c=0,l=null,u=async()=>{s.hasAttribute(`open`)||(l=a.getAttachedTargetId());let t=++c;s.show();let r;try{r=await a.listAllTargets()}catch(e){o.error(`WC browser overlay: listing tabs failed`,e),s.tabs=[];return}if(t!==c)return;let i=location?.origin?[location.origin]:void 0;r=r.filter(t=>!e(t.url??``,{selfOrigins:i})),s.tabs=r.map(e=>({id:e.targetId,title:e.title||e.url||e.targetId,url:e.url}));for(let e of r){if(t!==c||!s.hasAttribute(`open`))return;try{let r=await a.withTab(e.targetId,e=>e.screenshot({format:`jpeg`,quality:72,maxWidth:n.thumbWidth??Math.round(560*Math.min(devicePixelRatio||1,2)),foregroundFallback:!1}));if(t!==c)return;s.tabs=s.tabs.map(t=>t.id===e.targetId?{...t,screenshot:`data:image/jpeg;base64,${r}`}:t)}catch(t){o.warn(`WC browser overlay: thumbnail failed`,{target:e.targetId,err:t})}}};i.overlaySurfaces.add(`browser`),i.dock.addEventListener(`slicc-dock-select`,e=>{e.detail?.id===`browser`&&(u(),i.dock.collapse?.())});let d=async e=>{try{if(e.includes(`:`)){let n=await t(a,{sourceTargetId:e,destination:{kind:`leader`}});return o.info(`WC browser overlay: pulled remote tab to leader`,{source:e,target:n.targetId,degraded:n.degraded}),s.hide(),!0}return await a.bringTabToFront(e),s.hide(),!0}catch(e){return o.error(`WC browser overlay: tab activate failed`,e),!1}};s.addEventListener(`tab-activate`,e=>{d(e.detail.id)});let f=r({browser:a,log:o,activate:d,agentTarget:()=>l});return s.addEventListener(`tab-peek`,e=>{let t=e.detail.id;if(t.includes(`:`)){d(t);return}f(t).catch(e=>o.error(`WC browser overlay: peek failed`,e))}),s.addEventListener(`tab-close`,e=>{let t=e.detail.id;a.closePage(t).then(()=>u()).catch(e=>o.error(`WC browser overlay: tab close failed`,e))}),{overlay:s,refresh:u}}export{i as wireWcBrowser};