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 +1 @@
1
- import{r as e}from"./base64-DzRgusa4.js";import{t}from"./runtime-env-DadgceZk.js";function n(){return t()}function r(e){return{bytes:s(e.bytesBase64),mimeType:e.mimeType??`application/octet-stream`,width:e.width??0,height:e.height??0,...typeof e.durationMs==`number`?{durationMs:e.durationMs}:{}}}async function i(e,n={}){if(!t())throw Error(`media capture popup requires the extension runtime`);let i=n.timeoutMs??3e5,s=a(),c=o(JSON.stringify({...e,requestId:s})),l=chrome.runtime.getURL(`capture-popup.html?req=${c}`);return await new Promise((e,t)=>{let n=!1,a=()=>{if(!n){n=!0,clearTimeout(c);try{chrome.runtime.onMessage.removeListener(o)}catch{}}},o=n=>{let i=n;if(i?.source===`capture-popup`&&i.requestId===s){if(a(),i.ok&&i.bytesBase64!==void 0)try{e(r(i))}catch(e){t(e instanceof Error?e:Error(String(e)))}else t(Error(i.error||`media capture failed`))}},c=setTimeout(()=>{try{chrome.runtime.sendMessage({target:`capture-popup`,type:`capture-abort`,requestId:s})}catch{}a(),t(Error(`media capture timed out waiting for the capture window`))},i);chrome.runtime.onMessage.addListener(o);try{chrome.runtime.sendMessage({type:`capture-open-window`,url:l,requestId:s})}catch(e){a(),t(e instanceof Error?e:Error(String(e)))}})}function a(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?`cap-${crypto.randomUUID()}`:`cap-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,12)}`}function o(t){return e(new TextEncoder().encode(t)).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)}function s(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}export{n,i as t};
1
+ import{r as e}from"./base64-BPBW1Gzr.js";import{t}from"./runtime-env-DadgceZk.js";function n(){return t()}function r(e){return{bytes:s(e.bytesBase64),mimeType:e.mimeType??`application/octet-stream`,width:e.width??0,height:e.height??0,...typeof e.durationMs==`number`?{durationMs:e.durationMs}:{}}}async function i(e,n={}){if(!t())throw Error(`media capture popup requires the extension runtime`);let i=n.timeoutMs??3e5,s=a(),c=o(JSON.stringify({...e,requestId:s})),l=chrome.runtime.getURL(`capture-popup.html?req=${c}`);return await new Promise((e,t)=>{let n=!1,a=()=>{if(!n){n=!0,clearTimeout(c);try{chrome.runtime.onMessage.removeListener(o)}catch{}}},o=n=>{let i=n;if(i?.source===`capture-popup`&&i.requestId===s){if(a(),i.ok&&i.bytesBase64!==void 0)try{e(r(i))}catch(e){t(e instanceof Error?e:Error(String(e)))}else t(Error(i.error||`media capture failed`))}},c=setTimeout(()=>{try{chrome.runtime.sendMessage({target:`capture-popup`,type:`capture-abort`,requestId:s})}catch{}a(),t(Error(`media capture timed out waiting for the capture window`))},i);chrome.runtime.onMessage.addListener(o);try{chrome.runtime.sendMessage({type:`capture-open-window`,url:l,requestId:s})}catch(e){a(),t(e instanceof Error?e:Error(String(e)))}})}function a(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?`cap-${crypto.randomUUID()}`:`cap-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,12)}`}function o(t){return e(new TextEncoder().encode(t)).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)}function s(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}export{n,i as t};
@@ -1 +1 @@
1
- import{r as e}from"./base64-DzRgusa4.js";import{t}from"./content-type-_QKWY0B2.js";import{l as n,s as r}from"./types-BfwydWt7.js";import{r as i}from"./boundary-Cp9c_bPu.js";import{t as a}from"./request-body-DkfS6k_a.js";function o(n){let i=n.adapter===`extension-direct`,a={callSecrets:n.callSecrets??(e=>c(i,e)),callMount:n.callMount??((e,t)=>l(i,e,t)),crossOriginFetch:n.crossOriginFetch??(e=>u(i,e)),requestApproval:n.requestApproval??(e=>f(i,e))};async function o(e,t,n){try{return{ok:!0,value:await n()}}catch(n){return r(e,t,n instanceof Error?n.message:String(n))}}async function s(e){let t=await o(`secrets`,e,()=>a.callSecrets({type:`secrets.list-masked-entries`}));if(!t.ok)return t;let n=t.value;return n?.error?r(`secrets`,e,n.error):Array.isArray(n?.entries)?{ok:!0,value:n.entries}:r(`secrets`,e,`secrets bridge returned no entries`)}async function d(e){let t=await o(`secrets`,`set`,()=>a.callSecrets({type:e.scope===`persisted`?`secrets.set`:`secrets.session.set`,name:e.name,value:e.value,domains:[...e.domains??[]]}));if(!t.ok)return t;let n=t.value;return n?.ok?{ok:!0,value:void 0}:r(`secrets`,`set`,n?.error??`secrets.set failed`)}async function p(e){let t=await o(`secrets`,`delete`,()=>a.callSecrets({type:`secrets.delete`,name:e.name}));if(!t.ok)return t;let n=t.value;return n?.ok?{ok:!0,value:{removed:n.removed??!0,fromSession:n.fromSession===!0}}:r(`secrets`,`delete`,n?.error??`secrets.delete failed`)}async function m(n){let r=await o(`network`,`crossOriginFetch`,()=>a.crossOriginFetch(n));if(!r.ok)return r;let i=r.value,s=t(i.headers[`content-type`]??``);return{ok:!0,value:{status:i.status,ok:i.status>=200&&i.status<300,statusText:i.statusText,headers:i.headers,body:s?new TextDecoder().decode(i.bytes):e(i.bytes),bodyEncoding:s?`text`:`base64`,url:n.url}}}async function h(e){let t=await o(`mounts`,`signRequest`,()=>a.callMount(e.backend===`s3`?`mount.s3-sign-and-forward`:`mount.da-sign-and-forward`,e.envelope));return t.ok?t.value&&typeof t.value.ok==`boolean`?{ok:!0,value:t.value}:r(`mounts`,`signRequest`,`mount bridge returned no envelope`):t}return{crossOriginFetch:m,secrets:{async listMaskedEnv(){let e=await s(`listMaskedEnv`);return e.ok?{ok:!0,value:{entries:e.value}}:e},async getMasked(e){let t=await s(`getMasked`);if(!t.ok)return t;let n=t.value.find(t=>t.name===e.name);return n?{ok:!0,value:n}:r(`secrets`,`getMasked`,`no secret named "${e.name}"`)},set:d,delete:p},signRequest:h,requestApproval:e=>o(`approvals`,`request`,()=>a.requestApproval(e))}}function s(e){return new Promise((t,n)=>{chrome.runtime.sendMessage(e,e=>{let r=chrome.runtime.lastError;r?n(Error(r.message??`chrome.runtime.lastError`)):t(e)})})}async function c(e,t){if(e)return s(t);let{callSecretsBridge:n}=await import(`./secrets-bridge-client-ZpBL1Zhl.js`).then(e=>e.n),{type:r,...i}=t;return n(r,i)}async function l(e,t,n){if(e)return await i(s({type:t,envelope:n}),12e4);let{callMountBridge:r}=await import(`./mount-bridge-client-3a86Q6J0.js`);return r(t,n)}async function u(e,t){let{collectViaExtensionDelegate:n,collectViaExtensionPort:r,REQUEST_BODY_CAP:i}=await import(`./proxied-fetch-DEK8DT-z.js`).then(e=>e.i),o=a(t);if(o!==void 0&&o.byteLength>i)throw Error(`request body is ${o.byteLength} bytes, over the ${i}-byte proxy limit`);let{head:s,body:c}=await(e?r:n)(t.url,{method:t.method??`GET`,headers:t.headers,...o===void 0?{}:{body:o}});return{status:s.status,statusText:s.statusText,headers:s.headers,bytes:new Uint8Array(c)}}function d(e,t){return t?new Promise((n,r)=>{if(t.aborted){r(Error(`approval relay cancelled before it was sent`));return}let i=()=>r(Error(`approval relay did not answer`));t.addEventListener(`abort`,i,{once:!0}),e.then(n,r).finally(()=>t.removeEventListener(`abort`,i))}):e}async function f(e,t){let r=t.suggestedPattern??t.detail,i={kind:t.kind,detail:t.detail,suggestedPattern:r,...t.requester?{requester:t.requester}:{},...t.reason?{reason:t.reason}:{},...t.approver?{approver:t.approver}:{}};if(e){let e=await d(s({source:`offscreen`,payload:{type:`sudo-request`,request:i}}),t.signal);if(!e?.ok||e.decision===void 0)throw Error(e?.error??`sudo relay returned no decision`);return n(e.decision,r)}let{getPanelRpcClient:a}=await import(`./panel-rpc-BPwAqRch.js`).then(e=>e.i),o=a();if(!o)throw Error(`panel-RPC client unavailable in this realm`);let{decision:c}=await d(o.call(`sudo-request`,{request:i},{timeoutMs:6e5}),t.signal);return n(c,r)}export{o as createExtensionOps};
1
+ import{r as e}from"./base64-BPBW1Gzr.js";import{t}from"./content-type-_QKWY0B2.js";import{l as n,s as r}from"./types-BfwydWt7.js";import{r as i}from"./boundary-Cp9c_bPu.js";import{t as a}from"./request-body-BF4moGct.js";function o(n){let i=n.adapter===`extension-direct`,a={callSecrets:n.callSecrets??(e=>c(i,e)),callMount:n.callMount??((e,t)=>l(i,e,t)),crossOriginFetch:n.crossOriginFetch??(e=>u(i,e)),requestApproval:n.requestApproval??(e=>f(i,e))};async function o(e,t,n){try{return{ok:!0,value:await n()}}catch(n){return r(e,t,n instanceof Error?n.message:String(n))}}async function s(e){let t=await o(`secrets`,e,()=>a.callSecrets({type:`secrets.list-masked-entries`}));if(!t.ok)return t;let n=t.value;return n?.error?r(`secrets`,e,n.error):Array.isArray(n?.entries)?{ok:!0,value:n.entries}:r(`secrets`,e,`secrets bridge returned no entries`)}async function d(e){let t=await o(`secrets`,`set`,()=>a.callSecrets({type:e.scope===`persisted`?`secrets.set`:`secrets.session.set`,name:e.name,value:e.value,domains:[...e.domains??[]]}));if(!t.ok)return t;let n=t.value;return n?.ok?{ok:!0,value:void 0}:r(`secrets`,`set`,n?.error??`secrets.set failed`)}async function p(e){let t=await o(`secrets`,`delete`,()=>a.callSecrets({type:`secrets.delete`,name:e.name}));if(!t.ok)return t;let n=t.value;return n?.ok?{ok:!0,value:{removed:n.removed??!0,fromSession:n.fromSession===!0}}:r(`secrets`,`delete`,n?.error??`secrets.delete failed`)}async function m(n){let r=await o(`network`,`crossOriginFetch`,()=>a.crossOriginFetch(n));if(!r.ok)return r;let i=r.value,s=t(i.headers[`content-type`]??``);return{ok:!0,value:{status:i.status,ok:i.status>=200&&i.status<300,statusText:i.statusText,headers:i.headers,body:s?new TextDecoder().decode(i.bytes):e(i.bytes),bodyEncoding:s?`text`:`base64`,url:n.url}}}async function h(e){let t=await o(`mounts`,`signRequest`,()=>a.callMount(e.backend===`s3`?`mount.s3-sign-and-forward`:`mount.da-sign-and-forward`,e.envelope));return t.ok?t.value&&typeof t.value.ok==`boolean`?{ok:!0,value:t.value}:r(`mounts`,`signRequest`,`mount bridge returned no envelope`):t}return{crossOriginFetch:m,secrets:{async listMaskedEnv(){let e=await s(`listMaskedEnv`);return e.ok?{ok:!0,value:{entries:e.value}}:e},async getMasked(e){let t=await s(`getMasked`);if(!t.ok)return t;let n=t.value.find(t=>t.name===e.name);return n?{ok:!0,value:n}:r(`secrets`,`getMasked`,`no secret named "${e.name}"`)},set:d,delete:p},signRequest:h,requestApproval:e=>o(`approvals`,`request`,()=>a.requestApproval(e))}}function s(e){return new Promise((t,n)=>{chrome.runtime.sendMessage(e,e=>{let r=chrome.runtime.lastError;r?n(Error(r.message??`chrome.runtime.lastError`)):t(e)})})}async function c(e,t){if(e)return s(t);let{callSecretsBridge:n}=await import(`./secrets-bridge-client-CeK7HpDf.js`).then(e=>e.n),{type:r,...i}=t;return n(r,i)}async function l(e,t,n){if(e)return await i(s({type:t,envelope:n}),12e4);let{callMountBridge:r}=await import(`./mount-bridge-client-BOZDQLbT.js`);return r(t,n)}async function u(e,t){let{collectViaExtensionDelegate:n,collectViaExtensionPort:r,REQUEST_BODY_CAP:i}=await import(`./proxied-fetch-CPL8wJM2.js`).then(e=>e.i),o=a(t);if(o!==void 0&&o.byteLength>i)throw Error(`request body is ${o.byteLength} bytes, over the ${i}-byte proxy limit`);let{head:s,body:c}=await(e?r:n)(t.url,{method:t.method??`GET`,headers:t.headers,...o===void 0?{}:{body:o}});return{status:s.status,statusText:s.statusText,headers:s.headers,bytes:new Uint8Array(c)}}function d(e,t){return t?new Promise((n,r)=>{if(t.aborted){r(Error(`approval relay cancelled before it was sent`));return}let i=()=>r(Error(`approval relay did not answer`));t.addEventListener(`abort`,i,{once:!0}),e.then(n,r).finally(()=>t.removeEventListener(`abort`,i))}):e}async function f(e,t){let r=t.suggestedPattern??t.detail,i={kind:t.kind,detail:t.detail,suggestedPattern:r,...t.requester?{requester:t.requester}:{},...t.reason?{reason:t.reason}:{},...t.approver?{approver:t.approver}:{}};if(e){let e=await d(s({source:`offscreen`,payload:{type:`sudo-request`,request:i}}),t.signal);if(!e?.ok||e.decision===void 0)throw Error(e?.error??`sudo relay returned no decision`);return n(e.decision,r)}let{getPanelRpcClient:a}=await import(`./panel-rpc-BPwAqRch.js`).then(e=>e.i),o=a();if(!o)throw Error(`panel-RPC client unavailable in this realm`);let{decision:c}=await d(o.call(`sudo-request`,{request:i},{timeoutMs:6e5}),t.signal);return n(c,r)}export{o as createExtensionOps};
@@ -0,0 +1,352 @@
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
+ * Frames are 640×400: background, clock, frame counter, and a marker
10
+ * at the last pointer so clicks are visible. Overlay soft keys Home /
11
+ * Back / Menu move the marker or cycle the background. OffscreenCanvas
12
+ * JPEG when the realm has it; otherwise a stored-deflate PNG.
13
+ *
14
+ * jshd start -n fake-computer --enable --restart always \\
15
+ * /workspace/skills/jshd/examples/fake-computer.jsh
16
+ * computer ls
17
+ * computer screenshot -c jsh:fake
18
+ * computer watch -c jsh:fake
19
+ * computer click 1 --at 100,100 -c jsh:fake
20
+ * computer type -c jsh:fake hello
21
+ */
22
+ const computer = require('sliccy:computer');
23
+
24
+ const WIDTH = 640;
25
+ const HEIGHT = 400;
26
+ const MARKER_R = 12;
27
+ const MARKER_R2 = MARKER_R * MARKER_R;
28
+
29
+ const FONT = {
30
+ 0: ['01110', '10001', '10011', '10101', '11001', '10001', '01110'],
31
+ 1: ['00100', '01100', '00100', '00100', '00100', '00100', '01110'],
32
+ 2: ['01110', '10001', '00001', '00110', '01000', '10000', '11111'],
33
+ 3: ['11110', '00001', '00001', '01110', '00001', '00001', '11110'],
34
+ 4: ['00010', '00110', '01010', '10010', '11111', '00010', '00010'],
35
+ 5: ['11111', '10000', '11110', '00001', '00001', '10001', '01110'],
36
+ 6: ['00110', '01000', '10000', '11110', '10001', '10001', '01110'],
37
+ 7: ['11111', '00001', '00010', '00100', '01000', '01000', '01000'],
38
+ 8: ['01110', '10001', '10001', '01110', '10001', '10001', '01110'],
39
+ 9: ['01110', '10001', '10001', '01111', '00001', '00010', '01100'],
40
+ ':': ['00000', '00100', '00100', '00000', '00100', '00100', '00000'],
41
+ '#': ['01010', '11111', '01010', '11111', '01010', '01010', '00000'],
42
+ ' ': ['00000', '00000', '00000', '00000', '00000', '00000', '00000'],
43
+ };
44
+
45
+ const THEMES = [
46
+ { bg: [26, 31, 46], bar: [18, 21, 31] },
47
+ { bg: [72, 24, 48], bar: [48, 16, 32] },
48
+ { bg: [16, 48, 40], bar: [10, 32, 28] },
49
+ ];
50
+ const HOME_X = 320;
51
+ const HOME_Y = 200;
52
+ const BACK_X = 48;
53
+ const BACK_Y = 352;
54
+
55
+ let seq = 0;
56
+ let last = '';
57
+ let lastX = 0;
58
+ let lastY = 0;
59
+ let hasPointer = false;
60
+ let themeIndex = 0;
61
+ let busy = false;
62
+
63
+ function rgbCss(rgb) {
64
+ return 'rgb(' + rgb[0] + ',' + rgb[1] + ',' + rgb[2] + ')';
65
+ }
66
+
67
+ function applySoftKey(keysym) {
68
+ if (keysym === 'Home') {
69
+ lastX = HOME_X;
70
+ lastY = HOME_Y;
71
+ hasPointer = true;
72
+ themeIndex = 0;
73
+ return;
74
+ }
75
+ if (keysym === 'Escape' || keysym === 'Back') {
76
+ lastX = BACK_X;
77
+ lastY = BACK_Y;
78
+ hasPointer = true;
79
+ return;
80
+ }
81
+ if (keysym === 'Menu') {
82
+ themeIndex = (themeIndex + 1) % THEMES.length;
83
+ }
84
+ }
85
+
86
+ function clamp(n, lo, hi) {
87
+ return Math.max(lo, Math.min(hi, n | 0));
88
+ }
89
+
90
+ function clockString() {
91
+ return new Date().toISOString().slice(11, 19);
92
+ }
93
+
94
+ function paintCanvas(ctx) {
95
+ const theme = THEMES[themeIndex];
96
+ ctx.fillStyle = rgbCss(theme.bg);
97
+ ctx.fillRect(0, 0, WIDTH, HEIGHT);
98
+ ctx.fillStyle = rgbCss(theme.bar);
99
+ ctx.fillRect(0, 0, WIDTH, 40);
100
+ ctx.fillStyle = '#c8d0e0';
101
+ ctx.font = '16px ui-monospace, monospace';
102
+ ctx.fillText(clockString(), 12, 26);
103
+ ctx.fillStyle = '#9ad17e';
104
+ ctx.fillText('#' + seq, 12, 64);
105
+ if (!hasPointer) return;
106
+ ctx.strokeStyle = '#f5c518';
107
+ ctx.fillStyle = 'rgba(245, 197, 24, 0.85)';
108
+ ctx.lineWidth = 2;
109
+ ctx.beginPath();
110
+ ctx.arc(lastX, lastY, MARKER_R, 0, Math.PI * 2);
111
+ ctx.fill();
112
+ ctx.beginPath();
113
+ ctx.moveTo(lastX - 18, lastY);
114
+ ctx.lineTo(lastX + 18, lastY);
115
+ ctx.moveTo(lastX, lastY - 18);
116
+ ctx.lineTo(lastX, lastY + 18);
117
+ ctx.stroke();
118
+ }
119
+
120
+ function plot(rgb, x, y, r, g, b) {
121
+ if (x < 0 || y < 0 || x >= WIDTH || y >= HEIGHT) return;
122
+ const i = (y * WIDTH + x) * 3;
123
+ rgb[i] = r;
124
+ rgb[i + 1] = g;
125
+ rgb[i + 2] = b;
126
+ }
127
+
128
+ function fillRect(rgb, x, y, w, h, r, g, b) {
129
+ const x0 = clamp(x, 0, WIDTH);
130
+ const y0 = clamp(y, 0, HEIGHT);
131
+ const x1 = clamp(x + w, 0, WIDTH);
132
+ const y1 = clamp(y + h, 0, HEIGHT);
133
+ for (let yy = y0; yy < y1; yy++) {
134
+ let i = (yy * WIDTH + x0) * 3;
135
+ for (let xx = x0; xx < x1; xx++) {
136
+ rgb[i] = r;
137
+ rgb[i + 1] = g;
138
+ rgb[i + 2] = b;
139
+ i += 3;
140
+ }
141
+ }
142
+ }
143
+
144
+ function drawGlyph(rgb, originX, originY, ch, scale, r, g, b) {
145
+ const rows = FONT[ch];
146
+ if (!rows) return 5 * scale + 2;
147
+ for (let row = 0; row < rows.length; row++) {
148
+ const bits = rows[row];
149
+ for (let col = 0; col < bits.length; col++) {
150
+ if (bits[col] !== '1') continue;
151
+ fillRect(rgb, originX + col * scale, originY + row * scale, scale, scale, r, g, b);
152
+ }
153
+ }
154
+ return 5 * scale + 2;
155
+ }
156
+
157
+ function drawString(rgb, x, y, text, scale, r, g, b) {
158
+ let cx = x;
159
+ for (const ch of text) cx += drawGlyph(rgb, cx, y, ch, scale, r, g, b);
160
+ }
161
+
162
+ function paintRgb(rgb) {
163
+ const theme = THEMES[themeIndex];
164
+ fillRect(rgb, 0, 0, WIDTH, HEIGHT, theme.bg[0], theme.bg[1], theme.bg[2]);
165
+ fillRect(rgb, 0, 0, WIDTH, 40, theme.bar[0], theme.bar[1], theme.bar[2]);
166
+ drawString(rgb, 12, 12, clockString(), 2, 200, 208, 224);
167
+ drawString(rgb, 12, 52, '#' + String(seq), 3, 154, 209, 126);
168
+ if (!hasPointer) return;
169
+ for (let dy = -MARKER_R; dy <= MARKER_R; dy++) {
170
+ for (let dx = -MARKER_R; dx <= MARKER_R; dx++) {
171
+ if (dx * dx + dy * dy <= MARKER_R2) plot(rgb, lastX + dx, lastY + dy, 245, 197, 24);
172
+ }
173
+ }
174
+ fillRect(rgb, lastX - 18, lastY - 1, 37, 3, 245, 197, 24);
175
+ fillRect(rgb, lastX - 1, lastY - 18, 3, 37, 245, 197, 24);
176
+ }
177
+
178
+ const CRC_TABLE = (() => {
179
+ const t = new Uint32Array(256);
180
+ for (let i = 0; i < 256; i++) {
181
+ let c = i;
182
+ for (let j = 0; j < 8; j++) c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
183
+ t[i] = c;
184
+ }
185
+ return t;
186
+ })();
187
+
188
+ function crc32(data) {
189
+ let crc = ~0 >>> 0;
190
+ for (let i = 0; i < data.length; i++) crc = (crc >>> 8) ^ CRC_TABLE[(crc ^ data[i]) & 0xff];
191
+ return ~crc >>> 0;
192
+ }
193
+
194
+ function adler32(data) {
195
+ let a = 1;
196
+ let b = 0;
197
+ for (let i = 0; i < data.length; i++) {
198
+ a += data[i];
199
+ if (a >= 65521) a -= 65521;
200
+ b += a;
201
+ if (b >= 65521) b -= 65521;
202
+ }
203
+ return ((b << 16) | a) >>> 0;
204
+ }
205
+
206
+ function be32(n) {
207
+ return Uint8Array.of((n >>> 24) & 0xff, (n >>> 16) & 0xff, (n >>> 8) & 0xff, n & 0xff);
208
+ }
209
+
210
+ function concat(parts) {
211
+ let len = 0;
212
+ for (const p of parts) len += p.length;
213
+ const out = new Uint8Array(len);
214
+ let o = 0;
215
+ for (const p of parts) {
216
+ out.set(p, o);
217
+ o += p.length;
218
+ }
219
+ return out;
220
+ }
221
+
222
+ function chunk(type, data) {
223
+ const typeBytes = new TextEncoder().encode(type);
224
+ const payload = concat([typeBytes, data]);
225
+ return concat([be32(data.length), payload, be32(crc32(payload))]);
226
+ }
227
+
228
+ function zlibStore(raw) {
229
+ const pieces = [Uint8Array.of(0x78, 0x01)];
230
+ for (let i = 0; i < raw.length; i += 65535) {
231
+ const slice = raw.subarray(i, Math.min(i + 65535, raw.length));
232
+ const last = i + slice.length >= raw.length ? 0x01 : 0x00;
233
+ const len = slice.length;
234
+ const nlen = len ^ 0xffff;
235
+ pieces.push(
236
+ Uint8Array.of(last, len & 0xff, (len >>> 8) & 0xff, nlen & 0xff, (nlen >>> 8) & 0xff),
237
+ slice
238
+ );
239
+ }
240
+ pieces.push(be32(adler32(raw)));
241
+ return concat(pieces);
242
+ }
243
+
244
+ function encodePngRgb(rgb) {
245
+ const raw = new Uint8Array(HEIGHT * (1 + WIDTH * 3));
246
+ for (let y = 0; y < HEIGHT; y++) {
247
+ const dest = y * (1 + WIDTH * 3);
248
+ raw[dest] = 0;
249
+ raw.set(rgb.subarray(y * WIDTH * 3, (y + 1) * WIDTH * 3), dest + 1);
250
+ }
251
+ const ihdr = concat([
252
+ be32(WIDTH),
253
+ be32(HEIGHT),
254
+ Uint8Array.of(8, 2, 0, 0, 0),
255
+ ]);
256
+ return concat([
257
+ Uint8Array.of(0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a),
258
+ chunk('IHDR', ihdr),
259
+ chunk('IDAT', zlibStore(raw)),
260
+ chunk('IEND', new Uint8Array(0)),
261
+ ]);
262
+ }
263
+
264
+ async function encodeJpeg() {
265
+ if (typeof OffscreenCanvas !== 'function') return null;
266
+ try {
267
+ const canvas = new OffscreenCanvas(WIDTH, HEIGHT);
268
+ const ctx = canvas.getContext('2d');
269
+ if (!ctx) return null;
270
+ paintCanvas(ctx);
271
+ const blob = await canvas.convertToBlob({ type: 'image/jpeg', quality: 0.75 });
272
+ if (!blob || blob.size < 32) return null;
273
+ return new Uint8Array(await blob.arrayBuffer());
274
+ } catch {
275
+ return null;
276
+ }
277
+ }
278
+
279
+ async function nextFrame() {
280
+ seq += 1;
281
+ const jpeg = await encodeJpeg();
282
+ if (jpeg) return { seq, mime: 'image/jpeg', width: WIDTH, height: HEIGHT, bytes: jpeg };
283
+ const rgb = new Uint8Array(WIDTH * HEIGHT * 3);
284
+ paintRgb(rgb);
285
+ return { seq, mime: 'image/png', width: WIDTH, height: HEIGHT, bytes: encodePngRgb(rgb) };
286
+ }
287
+
288
+ function rememberPointer(event) {
289
+ if (typeof event.x !== 'number' || typeof event.y !== 'number') return;
290
+ lastX = clamp(event.x, 0, WIDTH - 1);
291
+ lastY = clamp(event.y, 0, HEIGHT - 1);
292
+ hasPointer = true;
293
+ }
294
+
295
+ computer.register({
296
+ id: 'jsh:fake',
297
+ title: 'fake',
298
+ size: { width: WIDTH, height: HEIGHT },
299
+ capabilities: {
300
+ screenshot: true,
301
+ text: true,
302
+ frames: 'push',
303
+ keyboard: true,
304
+ mouse: 'absolute',
305
+ scroll: false,
306
+ exec: false,
307
+ inputAllowed: true,
308
+ },
309
+ softKeys: [
310
+ { label: 'Home', keysym: 'Home' },
311
+ { label: 'Back', keysym: 'Escape' },
312
+ { label: 'Menu', keysym: 'Menu' },
313
+ ],
314
+ async screenshot() {
315
+ return nextFrame();
316
+ },
317
+ subscribe(fps, onFrame) {
318
+ const push = () => {
319
+ if (busy) return;
320
+ busy = true;
321
+ nextFrame()
322
+ .then((frame) => onFrame(frame))
323
+ .finally(() => {
324
+ busy = false;
325
+ });
326
+ };
327
+ push();
328
+ const ms = Math.max(50, Math.round(1000 / Math.max(1, fps)));
329
+ const timer = setInterval(push, ms);
330
+ return () => clearInterval(timer);
331
+ },
332
+ async text() {
333
+ const pointer = hasPointer ? \`pointer \${lastX},\${lastY}\` : 'pointer none';
334
+ return last ? \`\${last}\\n\${pointer}\` : pointer;
335
+ },
336
+ async input(events) {
337
+ for (const event of events) {
338
+ if (event.type === 'text') last += event.text;
339
+ if (event.type === 'key') {
340
+ last += \`[\${event.keysym}]\`;
341
+ applySoftKey(event.keysym);
342
+ }
343
+ if (event.type === 'click') {
344
+ rememberPointer(event);
345
+ last += \`[click \${event.x},\${event.y}]\`;
346
+ }
347
+ if (event.type === 'mousemove' || event.type === 'button') rememberPointer(event);
348
+ if (event.type === 'drag' && event.to) rememberPointer(event.to);
349
+ }
350
+ },
351
+ });
352
+ `;export{e as default};
@@ -1 +1 @@
1
- import"./proxied-fetch-DyBveeCl.js";import{n as e}from"./runtime-env-Dlaokqg1.js";import{r as t}from"./api-endpoint-DGxXvrur.js";function n(){return e()?`extension-direct`:t()?`extension-delegate`:globalThis.__slicc_connect_mode?`connect`:`node-rest`}function r(){return n()===`node-rest`}export{n,r as t};
1
+ import"./proxied-fetch-CnCvBaGV.js";import{n as e}from"./runtime-env-Dlaokqg1.js";import{r as t}from"./api-endpoint-DGxXvrur.js";function n(){return e()?`extension-direct`:t()?`extension-delegate`:globalThis.__slicc_connect_mode?`connect`:`node-rest`}function r(){return n()===`node-rest`}export{n,r as t};
@@ -1 +1 @@
1
- import{t as e}from"./logger-DDBAeTLF.js";import{n as t}from"./proxied-fetch-DyBveeCl.js";import{n,t as r}from"./navigation-watcher-BpA1OwJw.js";import{t as i}from"./discovery-preference-Bw3Fi0jd.js";var a=e(`follower-navigate-watcher`);function o(e){let n=t();return{onDiscovery:t=>{let n=e();if(!n){a.warn(`discovery lick dropped — no follower sync connected`,{url:t.url});return}n.forwardLick({type:`discovery`,targetScoop:void 0,timestamp:new Date().toISOString(),discoveryOrigin:t.origin,discoveryKind:t.kind,discoveryUrl:t.url,discoverySource:`live-navigation`,body:{origin:t.origin,kind:t.kind,url:t.url,targetId:t.targetId}})},probeFetch:async(e,t)=>{let r=n(e,{method:t?.method??`GET`}),i=t?.signal,a=i?await Promise.race([r,new Promise((e,t)=>{if(i.aborted){t(Error(`aborted`));return}i.addEventListener(`abort`,()=>t(Error(`aborted`)),{once:!0})})]):await r,o=a.headers;return{ok:a.status>=200&&a.status<300,status:a.status,headers:{get(e){return o?o[e.toLowerCase()]??o[e]??null:null}}}},isDiscoveryEnabled:()=>i()}}function s(e,t){let i=new r(e,e=>{let n={url:e.url,verb:e.verb,target:e.target};e.instruction!=null&&(n.instruction=e.instruction),e.branch!=null&&(n.branch=e.branch),e.path!=null&&(n.path=e.path),e.title!=null&&(n.title=e.title);let r=t();if(!r){a.warn(`navigate lick dropped — no follower sync connected`,{url:e.url});return}r.forwardLick({type:`navigate`,navigateUrl:e.url,targetScoop:void 0,timestamp:new Date().toISOString(),body:n})},{...o(t),isOwnTab:n(()=>globalThis.location?.href??null)});return i.start(),()=>void i.stop()}export{s as startFollowerNavigateWatcher};
1
+ import{t as e}from"./logger-DDBAeTLF.js";import{n as t}from"./proxied-fetch-CnCvBaGV.js";import{n,t as r}from"./navigation-watcher-BpA1OwJw.js";import{t as i}from"./discovery-preference-G3mw_EUO.js";var a=e(`follower-navigate-watcher`);function o(e){let n=t();return{onDiscovery:t=>{let n=e();if(!n){a.warn(`discovery lick dropped — no follower sync connected`,{url:t.url});return}n.forwardLick({type:`discovery`,targetScoop:void 0,timestamp:new Date().toISOString(),discoveryOrigin:t.origin,discoveryKind:t.kind,discoveryUrl:t.url,discoverySource:`live-navigation`,body:{origin:t.origin,kind:t.kind,url:t.url,targetId:t.targetId}})},probeFetch:async(e,t)=>{let r=n(e,{method:t?.method??`GET`}),i=t?.signal,a=i?await Promise.race([r,new Promise((e,t)=>{if(i.aborted){t(Error(`aborted`));return}i.addEventListener(`abort`,()=>t(Error(`aborted`)),{once:!0})})]):await r,o=a.headers;return{ok:a.status>=200&&a.status<300,status:a.status,headers:{get(e){return o?o[e.toLowerCase()]??o[e]??null:null}}}},isDiscoveryEnabled:()=>i()}}function s(e,t){let i=new r(e,e=>{let n={url:e.url,verb:e.verb,target:e.target};e.instruction!=null&&(n.instruction=e.instruction),e.branch!=null&&(n.branch=e.branch),e.path!=null&&(n.path=e.path),e.title!=null&&(n.title=e.title);let r=t();if(!r){a.warn(`navigate lick dropped — no follower sync connected`,{url:e.url});return}r.forwardLick({type:`navigate`,navigateUrl:e.url,targetScoop:void 0,timestamp:new Date().toISOString(),body:n})},{...o(t),isOwnTab:n(()=>globalThis.location?.href??null)});return i.start(),()=>void i.stop()}export{s as startFollowerNavigateWatcher};
@@ -0,0 +1 @@
1
+ import{t as e}from"./tmpdir-env-ate4iNcK.js";import{n as t}from"./encode-frame-B8GkHc2t.js";const n={ctrl:!1,alt:!1,shift:!1,meta:!1},r={ctrl:`ctrl`,control:`ctrl`,alt:`alt`,shift:`shift`,meta:`meta`,super:`meta`,win:`meta`,cmd:`meta`,command:`meta`},i={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++)i[`f${e}`]={key:`F${e}`,code:`F${e}`};const a={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]},o={ctrl:[29],alt:[56],shift:[42],meta:[224,91]},s={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++)s[`f${e}`]=`KEYCODE_F${e}`;const c={return:`return`,enter:`return`,tab:`tab`,escape:`esc`,esc:`esc`,space:`space`,backspace:`delete`,delete:`fwd-delete`,del:`fwd-delete`,home:`home`,end:`end`,pageup:`page-up`,pagedown:`page-down`,up:`arrow-up`,down:`arrow-down`,left:`arrow-left`,right:`arrow-right`};function l(e){return/^[A-Z][A-Z0-9_]+$/u.test(e)}function u(e){return e.split(/[-+]/u).filter(Boolean)}function d(e){let t=e.toLowerCase();if(i[t])return i[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 f(e){let t=e.trim();if(!t)return null;if(l(t))return{key:t,code:t,modifiers:{...n},keysym:t,native:t};let i=u(t);if(i.length===0)return null;let a={...n},o=null;for(let e=0;e<i.length;e++){let t=i[e],n=e===i.length-1,s=r[t.toLowerCase()];if(s&&!n){a[s]=!0;continue}s&&n&&i.length,o=t}if(!o)return null;if(l(o))return{key:o,code:o,modifiers:a,keysym:o,native:o};let s=d(o);return s?(o.length===1&&/[A-Z]/u.test(o)&&(a.shift=!0),{key:s.key,code:s.code,modifiers:a,keysym:o}):null}function p(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 m(e){return e.length===2?[e[0],e[1]|128]:[e[0]|128]}function h(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&&o[i]){n.push(o[i]);continue}let s=a[i]??o[i]??(i.length===1?p(i):null);if(!s)return null;r.push(s)}if(r.length===0)return null;let i=[];for(let e of n)i.push(...e);for(let e of r)i.push(...e,...m(e));for(let e of[...n].reverse())i.push(...m(e));return i}function g(e){return+!!e.alt+(e.ctrl?2:0)+(e.meta?4:0)+(e.shift?8:0)}function _(e,t){let n=g(e.modifiers),r=e.key.length===1&&!e.modifiers.ctrl&&!e.modifiers.alt&&!e.modifiers.meta?e.key:void 0,i=t=>({type:t,key:e.key,code:e.code,modifiers:n,...t===`keyDown`&&r?{text:r}:{}});return t===!0?[i(`keyDown`)]:t===!1?[i(`keyUp`)]:[i(`keyDown`),i(`keyUp`)]}function v(e,t=`press`){let n=t===`down`?`kd`:t===`up`?`ku`:`kp`;if(e.native)return`${n}:${e.native}`;let r=c[e.keysym.toLowerCase()]??(e.key.length===1?e.key:e.keysym.toLowerCase()),i=[];return e.modifiers.ctrl&&i.push(`ctrl`),e.modifiers.alt&&i.push(`alt`),e.modifiers.shift&&i.push(`shift`),e.modifiers.meta&&i.push(`cmd`),`${n}:${i.length>0?`${i.join(`,`)},${r}`:r}`}const y={Enter:`Return`,Escape:`Escape`," ":`space`,Backspace:`BackSpace`,Delete:`Delete`,Tab:`Tab`,ArrowUp:`Up`,ArrowDown:`Down`,ArrowLeft:`Left`,ArrowRight:`Right`,Home:`Home`,End:`End`,PageUp:`Page_Up`,PageDown:`Page_Down`,Insert:`Insert`};function b(e){let t=e.native??(e.key.length===1?e.key:y[e.key]??e.keysym),n=D(e.modifiers);return n?`${n}+${t}`:t}const x={Escape:1,Digit1:2,Digit2:3,Digit3:4,Digit4:5,Digit5:6,Digit6:7,Digit7:8,Digit8:9,Digit9:10,Digit0:11,Backspace:14,Tab:15,Enter:28,Control:29,Shift:42,Space:57,Alt:56,F1:59,F2:60,F3:61,F4:62,F5:63,F6:64,F7:65,F8:66,F9:67,F10:68,F11:87,F12:88,Home:102,ArrowUp:103,PageUp:104,ArrowLeft:105,ArrowRight:106,End:107,ArrowDown:108,PageDown:109,Insert:110,Delete:111,Meta:125},S=[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];function C(e){if(e.key.length===1){let t=`qwertyuiopasdfghjklzxcvbnm`.indexOf(e.key.toLowerCase());if(t!==-1)return S[t];if(e.key>=`1`&&e.key<=`9`)return 2+(e.key.charCodeAt(0)-49);if(e.key===`0`)return 11}return x[e.code]??x[e.key]??null}function w(e,t){return`${e}:${+!!t}`}function T(e,t=`press`){let n=C(e);if(n==null)return``;let r=[];if(e.modifiers.ctrl&&r.push(29),e.modifiers.shift&&r.push(42),e.modifiers.alt&&r.push(56),e.modifiers.meta&&r.push(125),t===`down`)return[...r.map(e=>w(e,!0)),w(n,!0)].join(` `);if(t===`up`)return[w(n,!1),...[...r].reverse().map(e=>w(e,!1))].join(` `);let i=[...r.map(e=>w(e,!0)),w(n,!0)],a=[w(n,!1),...[...r].reverse().map(e=>w(e,!1))];return[...i,...a].join(` `)}function E(e){if(e.type===`mousemove`||e.type===`wait`||e.type===`key`||e.type===`text`)return{kind:`noop`};if(e.type===`click`){let t=e.x??0,n=e.y??0;return e.holdMs&&e.holdMs>0?{kind:`long-press`,x:t,y:n,holdMs:e.holdMs}:{kind:`tap`,x:t,y:n}}if(e.type===`drag`)return{kind:`swipe`,x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2};if(e.type===`button`){let t=e.x??0,n=e.y??0;return e.down?{kind:`tap`,x:t,y:n}:{kind:`noop`}}let t=e.x??0,n=e.y??0;return{kind:`swipe`,x1:t,y1:n,x2:t+e.dx,y2:n+e.dy}}function D(e){let t=[];return e.ctrl&&t.push(`ctrl`),e.alt&&t.push(`alt`),e.shift&&t.push(`shift`),e.meta&&t.push(`super`),t.join(`+`)}function O(e){return`screen: ${e}`}function k(e){return`target: ${e}`}async function A(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 j(e){return t(e,`image/jpeg`,.55)}export{h as a,v as c,T as d,A as i,E as l,O as n,f as o,j as r,_ as s,k as t,b as u};
@@ -1,4 +1,4 @@
1
- import{t as e}from"./slugify-BYJ6QVAt.js";import{n as t,r as n,t as r}from"./archive-redaction-ByV7X5fs.js";import{t as i}from"./types-D8gIX-W-.js";import{c as a,l as o,y as s}from"./kernel-worker-Dseu067f.js";const c=/\uD83C\uDF99\uFE0F?/g,l=/\u25C1[\s\S]*?\u25B7/g;function u(e){return e.replace(l,``).replace(c,``).replace(/[ \t]+$/g,``).trimEnd()}function d(e){let t=``;for(let n of e){let e=n.role===`user`?`User`:`Assistant`,r=n.role===`user`?u(n.content):n.content;if(t+=`## ${e}\n${r}\n\n`,n.attachments?.length&&(t+=`Attachments:\n${n.attachments.map(e=>`- ${s(e)}`).join(`
1
+ import{t as e}from"./slugify-BYJ6QVAt.js";import{n as t,r as n,t as r}from"./archive-redaction-ByV7X5fs.js";import{t as i}from"./types-D8gIX-W-.js";import{c as a,l as o,y as s}from"./kernel-worker-Bq9IjFw5.js";const c=/\uD83C\uDF99\uFE0F?/g,l=/\u25C1[\s\S]*?\u25B7/g;function u(e){return e.replace(l,``).replace(c,``).replace(/[ \t]+$/g,``).trimEnd()}function d(e){let t=``;for(let n of e){let e=n.role===`user`?`User`:`Assistant`,r=n.role===`user`?u(n.content):n.content;if(t+=`## ${e}\n${r}\n\n`,n.attachments?.length&&(t+=`Attachments:\n${n.attachments.map(e=>`- ${s(e)}`).join(`
2
2
  `)}\n\n`),n.toolCalls)for(let e of n.toolCalls)t+=`### Tool: ${e.name}\nInput: ${JSON.stringify(e.input,null,2)}\nResult: ${e.result??``}\n\n`}return t}function f(e){return`live-${h(e)}-${m()}.md`}function p(e,t){return e.find(e=>e.live===!0&&(e.cone??`cone`)===t)}function m(){return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`}function h(t){return e(t,{maxLen:48,fallback:`session`})}function g(e){let t=e.find(e=>e.role===`user`);if(!t?.content)return`untitled-session`;let n=t.content.trim().replace(/\s+/g,` `);return n.length>60?`${n.slice(0,60)}…`:n||`untitled-session`}function _(e){return e.map(e=>{let t={id:e.id,role:e.role,content:e.content,timestamp:e.timestamp};return e.attachments?.length&&(t.attachments=e.attachments),e.toolCalls?.length&&(t.toolCalls=e.toolCalls.map(e=>({id:e.id,name:e.name,input:e.input,...e.result===void 0?{}:{result:e.result},...e.isError?{isError:e.isError}:{}}))),e.source&&(t.source=e.source),e.channel&&(t.channel=e.channel),e.compaction&&(t.compaction=e.compaction),t})}function v(e){let i=r(),a={...e,title:t(e.title,i),messages:n(e.messages,i)},o=(a.cost?`cost: ${JSON.stringify(a.cost)}\n`:``)+(a.models?`models: ${JSON.stringify(a.models)}\n`:``),s=(a.cone?`cone: ${a.cone}\n`:``)+(a.coneLabel?`coneLabel: ${JSON.stringify(a.coneLabel)}\n`:``)+(a.memorySkipped?`memorySkipped: true
3
3
  `:``)+(a.live?`live: true
4
4
  `:``)+(a.live&&a.liveThrough?`liveThrough: ${a.liveThrough}\n`:``)+(a.live&&a.compactions?`compactions: ${a.compactions}\n`:``),c=`---\nid: ${a.id}\ntitle: ${JSON.stringify(a.title)}\nfrozenAt: ${a.frozenAt}\ncreatedAt: ${a.createdAt}\nupdatedAt: ${a.updatedAt}\nmessageCount: ${a.messageCount}\n`+o+s+`---