sliccy 6.164.1 → 6.166.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.
- package/dist/node-server/_shared/agent-wire-types.d.ts +7 -1
- package/dist/node-server/_shared/agent-wire-types.d.ts.map +1 -1
- package/dist/node-server/_shared/computer-protocol.d.ts +108 -0
- package/dist/node-server/_shared/computer-protocol.d.ts.map +1 -0
- package/dist/node-server/_shared/computer-protocol.js +10 -0
- package/dist/node-server/_shared/computer-protocol.js.map +1 -0
- package/dist/node-server/_shared/index.d.ts +1 -0
- package/dist/node-server/_shared/index.d.ts.map +1 -1
- package/dist/node-server/_shared/index.js +1 -0
- package/dist/node-server/_shared/index.js.map +1 -1
- package/dist/ui/.vite/manifest.json +184 -174
- package/dist/ui/assets/{SKILL-C8DJkgFD.js → SKILL-BGEZa-y0.js} +1 -1
- package/dist/ui/assets/SKILL-DB5CVwyu.js +1 -0
- package/dist/ui/assets/SKILL-DEFDsScb.js +1 -0
- package/dist/ui/assets/SKILL-DZoCcID_.js +1 -0
- package/dist/ui/assets/{SKILL-BXSAhY0E.js → SKILL-cOU0zXaK.js} +3 -0
- package/dist/ui/assets/__vite-browser-external-C-cVeSv_.js +1 -0
- package/dist/ui/assets/{account-store-CScbFg3i.js → account-store-BEqmysw9.js} +1 -1
- package/dist/ui/assets/{account-store-DEob4Tob.js → account-store-C35GYvum.js} +1 -1
- package/dist/ui/assets/{adobe-CgamcTLU.js → adobe-BDH5oLAN.js} +1 -1
- package/dist/ui/assets/adobe-BcTGFCnQ.js +1 -0
- package/dist/ui/assets/{agent-panels-XcqgFmF4.js → agent-panels-DvqNnkLk.js} +1 -1
- package/dist/ui/assets/almost-bash-shell-headless-DqTtE9CM.js +3500 -0
- package/dist/ui/assets/{apply-layout-BDanZxtJ.js → apply-layout-CjYRGs37.js} +1 -1
- package/dist/ui/assets/{approver-agent-CCkU0PVa.js → approver-agent-CvnFt_s6.js} +1 -1
- package/dist/ui/assets/{apps-CU2dHbHf.js → apps-dzoLZ_5W.js} +1 -1
- package/dist/ui/assets/{azure-openai-kjz9Dci1.js → azure-openai-BffwoCtp.js} +1 -1
- package/dist/ui/assets/{azure-openai-Cl5VKD9d.js → azure-openai-DKGdcr4S.js} +1 -1
- package/dist/ui/assets/{backend-hostfs-DU0NS-tW.js → backend-hostfs-CWIlIhve.js} +1 -1
- package/dist/ui/assets/bridge-protocol-31SWTdS5.js +1 -0
- package/dist/ui/assets/{browser-fOe3v0iv.js → browser-eoO4vY7w.js} +1 -1
- package/dist/ui/assets/buffer-polyfill-BccMjOKj.js +1 -0
- package/dist/ui/assets/{cdp-Cry6h07Z.js → cdp-DXT6yEL1.js} +1 -1
- package/dist/ui/assets/{cerebras-DrMQuNWj.js → cerebras-BF5efkRL.js} +1 -1
- package/dist/ui/assets/{cerebras-CWXTOiZB.js → cerebras-By0l7t0i.js} +1 -1
- package/dist/ui/assets/{composer-speech-HE7hDylv.js → composer-speech-DIEePbQC.js} +1 -1
- package/dist/ui/assets/{connect-surface-DTj_-b2c.js → connect-surface-DBqs7oHf.js} +1 -1
- package/dist/ui/assets/{cost-command-DlIH8zCh.js → cost-command-BULzLcvz.js} +1 -1
- package/dist/ui/assets/descriptor-S4Jug1iP.js +1 -0
- package/dist/ui/assets/directed-approval-D1lGElvD.js +1 -0
- package/dist/ui/assets/engine-B-OPe78i.js +1 -0
- package/dist/ui/assets/{ensure-speech-assets-Bdq2ASEA.js → ensure-speech-assets-BJXemBO4.js} +1 -1
- package/dist/ui/assets/esp8266-l8ELjmQJ.js +1 -0
- package/dist/ui/assets/esptool-operations-h8-8jVn_.js +13 -0
- package/dist/ui/assets/fake-computer-1f2_4vxY.js +65 -0
- package/dist/ui/assets/{frozen-archive-writer-B1ANvJgT.js → frozen-archive-writer-DYPhPMg7.js} +2 -2
- package/dist/ui/assets/{fs-Dlit1SL1.js → fs-BapOupIM.js} +2 -2
- package/dist/ui/assets/{fs-DZGgOIET.js → fs-CBH-hQcI.js} +1 -1
- package/dist/ui/assets/gelatiere-store-C2u47uk0.js +1 -0
- package/dist/ui/assets/gelatiere-unit-wvDEO7gH.js +1 -0
- package/dist/ui/assets/{github-C5AdaH2F.js → github-Bx7_6LBm.js} +2 -2
- package/dist/ui/assets/{github-CGPZBKqk.js → github-Db015Tee.js} +1 -1
- package/dist/ui/assets/{github-auth-BEjdODKn.js → github-auth-DtKS6UIX.js} +1 -1
- package/dist/ui/assets/{github-copilot-D5K0xdpB.js → github-copilot-CtOjxhqK.js} +1 -1
- package/dist/ui/assets/{github-copilot-6b_0-c1B.js → github-copilot-eCfmryv6.js} +1 -1
- package/dist/ui/assets/{github-install-DLv9ZHaT.js → github-install-B6W4-xcc.js} +1 -1
- package/dist/ui/assets/{github-zip-pP3IhiBQ.js → github-zip-Bv1smNmy.js} +1 -1
- package/dist/ui/assets/handoff-link-B3It6xQY.js +1 -0
- package/dist/ui/assets/{hear-CybMJQVi.js → hear-BZHckZJM.js} +1 -1
- package/dist/ui/assets/{help-C1nN0w8V.js → help-BU2Hjl0P.js} +1 -1
- package/dist/ui/assets/host-BQ2qKD-D.js +1 -0
- package/dist/ui/assets/{installer-Chacgw8i.js → installer-BbtH3u7z.js} +1 -1
- package/dist/ui/assets/js-realm-worker-BT3mfq3w.js +50 -0
- package/dist/ui/assets/jsh-CrSWPG4t.js +1 -0
- package/dist/ui/assets/jsh-discovery-D3Gk1cKA.js +1 -0
- package/dist/ui/assets/jsh-executor-BWlgcE2N.js +18 -0
- package/dist/ui/assets/jsh-runtime-extensions-BnLXkzqP.js +1 -0
- package/dist/ui/assets/just-bash-compat-B-SPHuh_.js +1 -0
- package/dist/ui/assets/kernel-worker-Dseu067f.js +1185 -0
- package/dist/ui/assets/{key-GVxFyssW.js → key-6HWbWSGF.js} +1 -1
- package/dist/ui/assets/keys-n5_C9sHW.js +1 -0
- package/dist/ui/assets/lick-urls-DdKPDlgq.js +1 -0
- package/dist/ui/assets/{lick-ws-bridge-BMov8z0m.js → lick-ws-bridge-Cc9sToY7.js} +1 -1
- package/dist/ui/assets/lick-ws-bridge-ChigxI36.js +1 -0
- package/dist/ui/assets/live-session-snapshot-B70raB09.js +1 -0
- package/dist/ui/assets/{local-llm-B7zAVGSm.js → local-llm-Dcp5IIP-.js} +1 -1
- package/dist/ui/assets/{local-llm-ByCXv2P-.js → local-llm-DpSg-Oe3.js} +1 -1
- package/dist/ui/assets/{main-yKaIA_zV.js → main-CfF8CFBr.js} +3 -3
- package/dist/ui/assets/{main-cherry-BNWE5vJO.js → main-cherry-VckJPHm5.js} +1 -1
- package/dist/ui/assets/memory-curation-seam-DUaZFZG9.js +1 -0
- package/dist/ui/assets/memory-health-D7uEvfAx.js +1 -0
- package/dist/ui/assets/memory-v2-flag-BHVbti6Z.js +1 -0
- package/dist/ui/assets/memory-write-execute-rXtR1z76.js +1 -0
- package/dist/ui/assets/merge-file-core-VJlzucJY.js +11 -0
- package/dist/ui/assets/{mount-DvrzOwsL.js → mount-8lU2iH4k.js} +3 -3
- package/dist/ui/assets/mount-DoM0CLGG.js +1 -0
- package/dist/ui/assets/{new-session-C4AXW_7S.js → new-session-DEhAjxP1.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-mNVnQZ_Q.js → oauth-bootstrap-DNTgbEZF.js} +2 -2
- package/dist/ui/assets/{onboarding-orchestrator-BwCfbdlW.js → onboarding-orchestrator-DzPQ0pVG.js} +1 -1
- package/dist/ui/assets/{openai-codex-DRyLvc3I.js → openai-codex-CsAhfz0D.js} +1 -1
- package/dist/ui/assets/{openai-codex-Subg_Vg8.js → openai-codex-DYRKYWTe.js} +1 -1
- package/dist/ui/assets/{openrouter-D5mJU1oF.js → openrouter-D9T6tXUF.js} +1 -1
- package/dist/ui/assets/{openrouter-B52vd-zH.js → openrouter-IyZlRHg4.js} +1 -1
- package/dist/ui/assets/{openrouter-free-CYBINFem.js → openrouter-free-CPshAgQD.js} +1 -1
- package/dist/ui/assets/{openrouter-free-CKmFPQ3y.js → openrouter-free-DfbYsnmf.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-BUFYoKT3.js → openrouter-oauth-hZg6oH0A.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-BML-cBKi.js → openrouter-oauth-xKlWi_wI.js} +1 -1
- package/dist/ui/assets/{opfs-mount-DmOQi3qJ.js → opfs-mount-C9Iamj6N.js} +1 -1
- package/dist/ui/assets/panel-rpc-handlers-Nu-wOrG9.js +2 -0
- package/dist/ui/assets/{panelize-shell-CJS6Q9hY.js → panelize-shell-tFElgHWF.js} +1 -1
- package/dist/ui/assets/pi-edit-execution-D6vx5LyF.js +2 -0
- package/dist/ui/assets/provider-3--cEcAF.js +1 -0
- package/dist/ui/assets/{provider-G-FXP5U3.js → provider-Z5aj7SzG.js} +2 -2
- package/dist/ui/assets/provider-settings-D9sjEfYE.js +1 -0
- package/dist/ui/assets/provider-store-access-M0PvJ08M.js +1 -0
- package/dist/ui/assets/provider-store-access-RxIHhH6d.js +1 -0
- package/dist/ui/assets/{providers-BT71Fchh.js → providers-CnoKdyLc.js} +2 -2
- package/dist/ui/assets/{providers-C1P4Z_in.js → providers-DVvrXbtx.js} +1 -1
- package/dist/ui/assets/{py-realm-worker-BRyQamcA.js → py-realm-worker-DXmzJqJi.js} +2 -2
- package/dist/ui/assets/{pyodide-DwR4k6wB.js → pyodide-b5uAaIjj.js} +2 -2
- package/dist/ui/assets/{quick-llm-BOu12xbc.js → quick-llm-DjWE-wQw.js} +1 -1
- package/dist/ui/assets/realm-inprocess-D0iWBQzz.js +30 -0
- package/dist/ui/assets/record-ChU1ND2B.js +1 -0
- package/dist/ui/assets/{recovery-screen-D_LwQpCA.js → recovery-screen-Y1CSyfR-.js} +1 -1
- package/dist/ui/assets/registry-Bq_j-EXx.js +1 -0
- package/dist/ui/assets/restore-DOkDX8BI.js +1 -0
- package/dist/ui/assets/{run-BFLhWKKw.js → run-B-fA26ea.js} +1 -1
- package/dist/ui/assets/run-BEt0RS3J.js +52 -0
- package/dist/ui/assets/{run-BGSKahNd.js → run-BOc9XLhg.js} +1 -1
- package/dist/ui/assets/run-BOkp5G58.js +91 -0
- package/dist/ui/assets/{run-CS-v8Znz.js → run-BWJSDhS7.js} +2 -2
- package/dist/ui/assets/{run-Dfw_vahy.js → run-Bld9B0W0.js} +1 -1
- package/dist/ui/assets/{run-CrPSdmNd.js → run-CISIYZMm.js} +1 -1
- package/dist/ui/assets/{run-MvSXwrUs.js → run-D0C4PgZM.js} +4 -4
- package/dist/ui/assets/{run-_2GCYBFU.js → run-DgNh1E56.js} +2 -2
- package/dist/ui/assets/{run-DWBPrvVI.js → run-DniTiLYn.js} +1 -1
- package/dist/ui/assets/run-a67LpkRp.js +42 -0
- package/dist/ui/assets/{run-BCXMG6On.js → run-vEDh-Me-.js} +6 -6
- package/dist/ui/assets/screencapture-media-B1iFS6Qy.js +1 -0
- package/dist/ui/assets/{screencapture-run-CfJW-gGP.js → screencapture-run-XrgS6hEd.js} +2 -2
- package/dist/ui/assets/script-catalog-CgT8L-OG.js +2 -0
- package/dist/ui/assets/{session-command-memory-0P878oz2.js → session-command-memory-DB2GmPSU.js} +2 -2
- package/dist/ui/assets/{session-jsonl-MJMdfn6X.js → session-jsonl-DFC-2T76.js} +1 -1
- package/dist/ui/assets/{session-jsonl-f7vG8uaN.js → session-jsonl-D_pTYppB.js} +1 -1
- package/dist/ui/assets/{session-search-index-BQmbRVuk.js → session-search-index-CN1zDLlx.js} +2 -2
- package/dist/ui/assets/{setup-feature-flags-remote-KCi8ndrR.js → setup-feature-flags-remote-BVd31Z12.js} +1 -1
- package/dist/ui/assets/signed-fetch-BY2Mdjqe.js +1 -0
- package/dist/ui/assets/{silent-renew-backoff-B06r5ZL-.js → silent-renew-backoff-CKAAh6GN.js} +1 -1
- package/dist/ui/assets/{silent-renew-backoff-DIMz5UqB.js → silent-renew-backoff-Dmz3DJHb.js} +1 -1
- package/dist/ui/assets/slicc-version-BZyTvfoc.js +1 -0
- package/dist/ui/assets/{snapshot-features-vq3FCiv5.js → snapshot-features-DjMJkCGq.js} +1 -1
- package/dist/ui/assets/{snapshot-BykuJ4wW.js → snapshot-gi8tDzvN.js} +1 -1
- package/dist/ui/assets/{soundscape-DQGEZGwB.js → soundscape-Bl3LhUk9.js} +1 -1
- package/dist/ui/assets/{speak-DivfwK0_.js → speak-BY_fDou2.js} +1 -1
- package/dist/ui/assets/{sprinkle-manager-rSxSSd0J.js → sprinkle-manager-C-NUJqPy.js} +1 -1
- package/dist/ui/assets/{sprinkle-renderer-Ul_GPDpn.js → sprinkle-renderer-CcA6ie5u.js} +1 -1
- package/dist/ui/assets/{state-CGafQVGp.js → state-z3wOHLww.js} +1 -1
- package/dist/ui/assets/{store-qzvn3yV9.js → store-ByUcAFUa.js} +1 -1
- package/dist/ui/assets/{store-BbZGuhdS.js → store-ChWzn_H8.js} +1 -1
- package/dist/ui/assets/{sudo-BLaOJiyv.js → sudo-DNZFIZ-H.js} +1 -1
- package/dist/ui/assets/sudo-fs-D620mZry.js +3 -0
- package/dist/ui/assets/supervisor-BtH2-9sE.js +1 -0
- package/dist/ui/assets/{sync-dialog-CfQLao_i.js → sync-dialog-Jqz74VkZ.js} +1 -1
- package/dist/ui/assets/sync-sab-wire-CC30v4TL.js +252 -0
- package/dist/ui/assets/tab-ToMhjbM4.js +1 -0
- package/dist/ui/assets/{transformers-env-7c5cDYNs.js → transformers-env-pq1E2H6B.js} +1 -1
- package/dist/ui/assets/{tray-leader-DqDL2jwl.js → tray-leader-Bas0lH9O.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-Fs59e1NT.js → tray-leave-runtime-B9aV_guA.js} +1 -1
- package/dist/ui/assets/tray-runtime-config-BZoJXfW0.js +1 -0
- package/dist/ui/assets/{tray-sidecar-DuSizsy1.js → tray-sidecar-DA8NfCV6.js} +1 -1
- package/dist/ui/assets/upgrade-detection-B5ym__Gu.js +1 -0
- package/dist/ui/assets/{upskill-lick-skip-B0aTroa_.js → upskill-lick-skip-CZGM2OFA.js} +1 -1
- package/dist/ui/assets/v86-DseFx8Yp.js +1 -0
- package/dist/ui/assets/v86-vm-DCm7zA2r.js +2 -0
- package/dist/ui/assets/{voice-reply-BDW4paEk.js → voice-reply-CL5tDo0l.js} +1 -1
- package/dist/ui/assets/{wc-attach-C1JExhF6.js → wc-attach-C5yXIQNU.js} +2 -2
- package/dist/ui/assets/{wc-detached-YxBsBh4A.js → wc-detached-f_qit-5b.js} +1 -1
- package/dist/ui/assets/{wc-extension-CVnsFSuW.js → wc-extension-DRx21-cq.js} +2 -2
- package/dist/ui/assets/{wc-follower-CUovZlpa.js → wc-follower-DcKt92kM.js} +3 -3
- package/dist/ui/assets/{wc-follower-oauth-Bxhy8p-W.js → wc-follower-oauth-BF3qXDTt.js} +1 -1
- package/dist/ui/assets/{wc-gelatiere-CxkjwV-m.js → wc-gelatiere-qAW7lWGW.js} +1 -1
- package/dist/ui/assets/{wc-live-br4wUYv7.js → wc-live-DOMCfDT6.js} +6 -6
- package/dist/ui/assets/{wc-nav-ChrnrxPa.js → wc-nav-DzPuXq_n.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-D2v396gn.js → wc-onboarding-CXM-z-7_.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-Bw-g85Ke.js → wc-placeholder-BBqbsuml.js} +3 -3
- package/dist/ui/assets/{wc-secret-request-BK3k0VlW.js → wc-secret-request-BSUlxVVi.js} +1 -1
- package/dist/ui/assets/{wc-settings-D84UzOS6.js → wc-settings-55mC-jVS.js} +3 -3
- package/dist/ui/assets/{wc-shell-CKhQ3qyn.js → wc-shell-C71iKreG.js} +4 -4
- package/dist/ui/assets/{wc-shortcut-config-DFPLI7su.js → wc-shortcut-config-Crjq_rF1.js} +1 -1
- package/dist/ui/assets/{wc-sprinkles-Cf6JnkDK.js → wc-sprinkles-Caji5y7n.js} +2 -2
- package/dist/ui/assets/{wc-transcript-export-BbJ1QcHb.js → wc-transcript-export-Dqe3SH1t.js} +2 -2
- package/dist/ui/assets/{wc-tray-BEzyYj77.js → wc-tray-B7ayzT1W.js} +4 -4
- package/dist/ui/assets/welcome-detection-CEARSpAq.js +1 -0
- package/dist/ui/assets/{whisper-session-Ch3Rub5j.js → whisper-session-DfILe4Yb.js} +2 -2
- package/dist/ui/assets/workspace-mode-D0kUKBVS.js +1 -0
- package/dist/ui/assets/{xai-grok-D4lk5fCR.js → xai-grok-CVLBrxdD.js} +1 -1
- package/dist/ui/assets/{xai-grok-BT_WDAT_.js → xai-grok-Dp8n52fO.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/ui/packages/webapp/index.html +3 -3
- package/package.json +1 -1
- package/dist/ui/assets/SKILL-CtxHowg1.js +0 -96
- package/dist/ui/assets/__vite-browser-external-CCBdZzAl.js +0 -1
- package/dist/ui/assets/adobe-CjAD_QGX.js +0 -1
- package/dist/ui/assets/agent-bridge-D_5Sd3oe.js +0 -12
- package/dist/ui/assets/agent-message-to-chat-w7n13QEN.js +0 -7
- package/dist/ui/assets/attachments-u2K0aIPI.js +0 -6
- package/dist/ui/assets/bridge-protocol-DdqxTTSu.js +0 -1
- package/dist/ui/assets/budget-usage-source-BW8-RCSb.js +0 -1
- package/dist/ui/assets/clipboard-CknViQHB.js +0 -1
- package/dist/ui/assets/cone-memory-budget-Cmi9vXV5.js +0 -15
- package/dist/ui/assets/db-DSIYsBgP.js +0 -1
- package/dist/ui/assets/derive-CZLe75z_.js +0 -1
- package/dist/ui/assets/descriptor-D-6Koktu.js +0 -1
- package/dist/ui/assets/directed-approval-D9smLm9q.js +0 -1
- package/dist/ui/assets/engine-BnH9pfmR.js +0 -1
- package/dist/ui/assets/esp8266-BN3fFVWu.js +0 -1
- package/dist/ui/assets/esptool-operations-lUvXx3gs.js +0 -13
- package/dist/ui/assets/feature-flags-Dl-xb1DG.js +0 -1
- package/dist/ui/assets/frozen-archive-format-B4efpvB9.js +0 -1
- package/dist/ui/assets/gelatiere-constants-BYJlhm8R.js +0 -1
- package/dist/ui/assets/gelatiere-store-CE_Ssheh.js +0 -1
- package/dist/ui/assets/gelatiere-unit-BMHtZLOW.js +0 -1
- package/dist/ui/assets/js-realm-worker-AwpbqZPU.js +0 -50
- package/dist/ui/assets/jsh-runtime-extensions-Bcb8_nba.js +0 -1
- package/dist/ui/assets/just-bash-compat-BwD6SoTi.js +0 -1
- package/dist/ui/assets/kernel-worker-BAcS3WAP.js +0 -4673
- package/dist/ui/assets/lick-manager-ULemXDKa.js +0 -2
- package/dist/ui/assets/lick-urls-BZVq_P3x.js +0 -1
- package/dist/ui/assets/lick-ws-bridge-CDToX4F0.js +0 -1
- package/dist/ui/assets/live-session-snapshot-Dv20JKP2.js +0 -1
- package/dist/ui/assets/manager-Bl9b7X9m.js +0 -1
- package/dist/ui/assets/memory-curation-seam-BAJK5Abp.js +0 -1
- package/dist/ui/assets/memory-health-MhSOmzAf.js +0 -1
- package/dist/ui/assets/memory-v2-flag-D85UWdUr.js +0 -1
- package/dist/ui/assets/memory-write-execute-BOjUkUIG.js +0 -1
- package/dist/ui/assets/mount-CTTWc8xh.js +0 -1
- package/dist/ui/assets/mount-recovery-T6cjQxeX.js +0 -2
- package/dist/ui/assets/panel-rpc-handlers-BG91KHPa.js +0 -2
- package/dist/ui/assets/pi-edit-execution-NnXkvjSi.js +0 -2
- package/dist/ui/assets/provider-CbAKIAon.js +0 -1
- package/dist/ui/assets/provider-settings-BuhBOwFs.js +0 -1
- package/dist/ui/assets/provider-store-access-CrH5offR.js +0 -1
- package/dist/ui/assets/provider-store-access-DgZnuRxY.js +0 -1
- package/dist/ui/assets/realm-inprocess-Bmsz-kPh.js +0 -30
- package/dist/ui/assets/record-YqlVEfh_.js +0 -1
- package/dist/ui/assets/run-33hnsiVQ.js +0 -91
- package/dist/ui/assets/screencapture-media-Dc-3ljgR.js +0 -1
- package/dist/ui/assets/screencapture-media-shared-BDUdmMOP.js +0 -1
- package/dist/ui/assets/script-catalog-Bt94D0RP.js +0 -2
- package/dist/ui/assets/skills-DWkSI8sH.js +0 -5
- package/dist/ui/assets/slicc-version-DAFTorvi.js +0 -1
- package/dist/ui/assets/sync-sab-wire-Cacrunmz.js +0 -252
- package/dist/ui/assets/tray-runtime-config-CRZxBChd.js +0 -1
- package/dist/ui/assets/upgrade-detection-CyCnJlGg.js +0 -1
- package/dist/ui/assets/welcome-detection-DjgSxU4V.js +0 -1
- package/dist/ui/assets/write-verification-BOaZdtyk.js +0 -1
|
@@ -0,0 +1,52 @@
|
|
|
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,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./slicc-version-
|
|
1
|
+
import{n as e}from"./slicc-version-BZyTvfoc.js";import{a as t}from"./just-bash-compat-B-SPHuh_.js";const n=`/dev/null`;function r(e){return e.oldName===n}function i(e){return e.newName===n}function a(e){let t=e.indexOf(` `);return(t===-1?e.replace(/\s+\d{4}-\d\d-\d\d[ T].*$/,``):e.slice(0,t)).trimEnd()}const o=/^@@+ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/;function s(e){let t=o.exec(e);return t?{oldStart:Number(t[1]),oldCount:t[2]===void 0?1:Number(t[2]),newStart:Number(t[3]),newCount:t[4]===void 0?1:Number(t[4])}:null}function c(e,t){return{...e,oldLines:[],newLines:[],oldSeen:0,newSeen:0,changeSeen:!1,leadingContext:0,trailingContext:0,lastSide:null,oldNoNewlineAtEof:!1,newNoNewlineAtEof:!1,raw:[t]}}function l(e){return{oldStart:e.oldStart,newStart:e.newStart,oldLines:e.oldLines,newLines:e.newLines,leadingContext:e.leadingContext,trailingContext:e.trailingContext,oldNoNewlineAtEof:e.oldNoNewlineAtEof,newNoNewlineAtEof:e.newNoNewlineAtEof,raw:e.raw}}function u(e){return e.oldSeen>=e.oldCount&&e.newSeen>=e.newCount}function d(e,t){e.oldLines.push(t),e.newLines.push(t),e.oldSeen++,e.newSeen++,e.lastSide=`both`,e.changeSeen?e.trailingContext++:e.leadingContext++}function f(e,t,n){t===`old`?(e.oldLines.push(n),e.oldSeen++):(e.newLines.push(n),e.newSeen++),e.lastSide=t,e.changeSeen=!0,e.trailingContext=0}function p(e,t){if(t.startsWith(`\\`))return(e.lastSide===`old`||e.lastSide===`both`)&&(e.oldNoNewlineAtEof=!0),(e.lastSide===`new`||e.lastSide===`both`)&&(e.newNoNewlineAtEof=!0),e.raw.push(t),!0;if(t===``)return d(e,``),e.raw.push(` `),!0;let n=t.slice(1);switch(t[0]){case` `:d(e,n);break;case`-`:f(e,`old`,n);break;case`+`:f(e,`new`,n);break;default:return!1}return e.raw.push(t),!0}function m(e){e.hunk&&e.current&&e.current.hunks.push(l(e.hunk)),e.hunk=null,e.complete=!1}function h(e,t){let n=e.hunk;if(!n)return!1;if(e.complete){let r=t.startsWith(`\\`);return r&&p(n,t),m(e),r}return p(n,t)?(u(n)&&(e.complete=!0),!0):(m(e),!1)}function g(e){let t={files:[],current:null,hunk:null,complete:!1,pendingOld:null};for(let n of e.split(`
|
|
2
2
|
`)){if(h(t,n))continue;if(n.startsWith(`--- `)){t.pendingOld=a(n.slice(4));continue}if(n.startsWith(`+++ `)&&t.pendingOld!==null){t.current={oldName:t.pendingOld,newName:a(n.slice(4)),hunks:[]},t.files.push(t.current),t.pendingOld=null;continue}t.pendingOld=null;let e=s(n);e&&t.current&&(t.hunk=c(e,n))}return m(t),t.files.filter(e=>e.hunks.length>0)}function _(e){return{oldName:e.newName,newName:e.oldName,hunks:e.hunks.map(e=>({oldStart:e.newStart,newStart:e.oldStart,oldLines:e.newLines,newLines:e.oldLines,leadingContext:e.leadingContext,trailingContext:e.trailingContext,oldNoNewlineAtEof:e.newNoNewlineAtEof,newNoNewlineAtEof:e.oldNoNewlineAtEof,raw:v(e)}))}}function v(e){return e.raw.map((t,n)=>n===0?`@@ -${e.newStart},${e.newLines.length} +${e.oldStart},${e.oldLines.length} @@`:t.startsWith(`-`)?`+${t.slice(1)}`:t.startsWith(`+`)?`-${t.slice(1)}`:t)}function y(e){if(e===``)return{lines:[],newlineAtEof:!0};let t=e.endsWith(`
|
|
3
3
|
`),n=e.split(`
|
|
4
4
|
`);return t&&n.pop(),{lines:n,newlineAtEof:t}}function b(e){return e.lines.length===0?``:e.lines.join(`
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import{n as e,r as t}from"./panel-rpc-BPwAqRch.js";import{a as n,c as r,i,l as a,n as o,o as s,r as c,s as l}from"./ffmpeg-wasm-B77gfnB_.js";import{t as u}from"./permissions-surface-registry-BqPdUk9w.js";import{n as d,t as f}from"./extension-media-capture-BvLVZFQ0.js";const p=`FFMPEG_ENGINE`;function m(e){let t=e?.get(p)?.trim().toLowerCase();return t===`wasm`||t===`mediabunny`?t:`auto`}const h=`FFMPEG_CORE`;function g(e){return e?.get(`FFMPEG_CORE`)?.trim().toLowerCase()===`mt`?`mt`:`st`}async function _(e,t,n){let r=e;if(typeof r.getNativeFile==`function`)try{let e=await r.getNativeFile(t);if(e){let i=await ee(e,t,n);if(await v(r,t,i,n))return i}}catch{}return y(await e.readFileBuffer(t))}async function v(e,t,n,r){if(typeof e.readFileRange!=`function`)return!0;let i,a;try{i=await e.readFileRange(t,0,64),a=(await e.stat(t)).size}catch{return!0}let o=new Uint8Array(await n.slice(0,64).arrayBuffer()),s=(a===void 0||a===n.size)&&o.byteLength===i.byteLength&&o.every((e,t)=>e===i[t]);return s||r?.(`ffmpeg: ${t}: native File (${n.size} bytes) does not match the VFS (${a??`?`} bytes, head differs=${o.byteLength!==i.byteLength||o.some((e,t)=>e!==i[t])}); reading it through the VFS instead`),s}async function ee(e,t,n,r=e=>void structuredClone(e)){let i=``,a=e=>{try{return r(e),!0}catch(e){return i=e instanceof Error?`${e.name}: ${e.message}`:String(e),!1}};if(a(e))return e;let o=new Blob([e],{type:e.type});return a(o)?(n?.(`ffmpeg: ${t}: native File is not transferable to the worker (${te(e)}; ${i}); wrapped it in a Blob`),o):(n?.(`ffmpeg: ${t}: native File is not transferable to the worker and neither is a Blob over it; read ${e.size} bytes into memory instead`),new Blob([await e.arrayBuffer()],{type:e.type}))}function y(e){return new Blob([e])}function te(e){return`${e.constructor?.name??`unknown`}, instanceof File=${typeof File<`u`&&e instanceof File}, instanceof Blob=${e instanceof Blob}, size=${e.size}, type=${JSON.stringify(e.type)}`}let b=0;function x(){b=b+1>>>0;let e=`${b}_${Date.now().toString(36)}`;return{id:e,dir:`__in${e}`}}function S(e,t){return`${e.dir}/${t}`}function C(e){return e.slice(e.lastIndexOf(`/`)+1)}function w(e,t){return`__out${e.id}_${t.split(`/`).pop()||`out.bin`}`}async function T(e,t,n){n.length!==0&&(await e.createDir(`/${t.dir}`),await e.mount(`WORKERFS`,{blobs:n},`/${t.dir}`))}async function E(e,t){try{await e.unmount(`/${t.dir}`)}catch(e){if(s(e))throw e}try{await e.deleteDir(`/${t.dir}`)}catch(e){if(s(e))throw e}}async function D(e,t){try{await e.deleteFile(t)}catch(e){if(s(e))throw e}}function O(){return{stdout:`ffmpeg - two engines behind the ffmpeg CLI
|
|
2
|
+
|
|
3
|
+
Usage:
|
|
4
|
+
ffmpeg [global-opts] -i input [input-opts] ... output [output-opts]
|
|
5
|
+
|
|
6
|
+
Common flags pass through to ffmpeg unchanged. Inputs/outputs are
|
|
7
|
+
resolved against the current VFS working directory.
|
|
8
|
+
|
|
9
|
+
Engines (chosen automatically; stderr names the one that ran):
|
|
10
|
+
mediabunny WebCodecs (hardware encoders, streams from disk, nothing
|
|
11
|
+
to install). Takes one-input → one-output jobs whose
|
|
12
|
+
every option it can express: remux, -c copy, transcode to
|
|
13
|
+
h264/hevc/vp8/vp9/av1 + aac/opus/mp3/vorbis/flac/pcm,
|
|
14
|
+
-ss/-t/-to, -vf crop,scale,fps (in that order; transpose
|
|
15
|
+
only on its own), -s, -r/-g, -ac/-ar, -an/-vn,
|
|
16
|
+
-b:v/-b:a/-crf/-q:a, -movflags, -metadata.
|
|
17
|
+
Without an explicit -c, streams the container can hold are
|
|
18
|
+
copied rather than re-encoded; an explicit encoder always
|
|
19
|
+
re-encodes; -c copy never re-encodes (a codec the container
|
|
20
|
+
cannot hold falls to the wasm core, which fails like ffmpeg).
|
|
21
|
+
wasm @ffmpeg/core (ipk-installed; see -version). Everything
|
|
22
|
+
else: lavfi sources, -f concat, filtergraphs, -f null
|
|
23
|
+
analysis sinks, image/GIF output, codecs the browser lacks.
|
|
24
|
+
FFMPEG_CORE=mt opts into @ffmpeg/core-mt on a cross-origin-
|
|
25
|
+
isolated leader: multi-threaded, SINGLE-INPUT jobs only
|
|
26
|
+
(multi-input deadlocks and is refused), -threads/-filter_threads
|
|
27
|
+
capped unless you pass them.
|
|
28
|
+
FFMPEG_ENGINE=wasm ffmpeg ... force byte-identical ffmpeg behaviour
|
|
29
|
+
FFMPEG_ENGINE=mediabunny ffmpeg ... fail (and say why) instead of falling back
|
|
30
|
+
|
|
31
|
+
Concatenating (concat demuxer):
|
|
32
|
+
printf "file 'a.mp4'\\nfile 'b.mp4'\\n" > list.txt
|
|
33
|
+
ffmpeg -f concat -safe 0 -i list.txt -c copy joined.mp4
|
|
34
|
+
|
|
35
|
+
Files named inside the list are read from the VFS too, resolved
|
|
36
|
+
against the LIST FILE's directory. As in ffmpeg, absolute and
|
|
37
|
+
parent-traversing members need -safe 0. The \`concat:\` protocol
|
|
38
|
+
form (-i "concat:a.ts|b.ts") is not supported — use -f concat.
|
|
39
|
+
|
|
40
|
+
Webcam capture (avfoundation-style):
|
|
41
|
+
ffmpeg -f avfoundation -video_size 1280x720 -framerate 30 \\
|
|
42
|
+
-i "0" -frames:v 1 -update 1 -y photo.jpg
|
|
43
|
+
ffmpeg -f avfoundation -i "0" -t 5 clip.webm
|
|
44
|
+
ffmpeg -f avfoundation -i "0:0" -t 5 clip.webm # video + audio
|
|
45
|
+
ffmpeg -f avfoundation -i ":0" -t 5 audio.webm # audio only
|
|
46
|
+
ffmpeg -f avfoundation -list_devices true -i "" # list devices
|
|
47
|
+
|
|
48
|
+
Avfoundation-specific options:
|
|
49
|
+
-warmup MS Photo mode: ms to wait for auto-exposure to settle
|
|
50
|
+
before grabbing the frame. Default 1500. Pass 0 to
|
|
51
|
+
capture immediately (will look dark / noisy on most
|
|
52
|
+
webcams because the AE algorithm hasn't converged).
|
|
53
|
+
-exact_size Use exact:{w,h,frameRate} constraints rather than
|
|
54
|
+
ideal:. Falls back to ideal: with a warning if the
|
|
55
|
+
camera can't deliver the requested mode.
|
|
56
|
+
|
|
57
|
+
Captured streams can be transcoded through the WASM core in the same
|
|
58
|
+
invocation. Output options like -c:v, -c:a, -crf, -preset, -pix_fmt,
|
|
59
|
+
-vf, -b:v, -b:a, and a mismatched output extension all trigger a
|
|
60
|
+
post-capture wasm pass so the produced file matches what the user asked
|
|
61
|
+
for (e.g. real H.264 mp4 instead of webm bytes in a .mp4 wrapper).
|
|
62
|
+
|
|
63
|
+
Analysis sinks (no output file — results are on stderr):
|
|
64
|
+
ffmpeg -i in.mp4 -af silencedetect=noise=-30dB:d=0.5 -f null -
|
|
65
|
+
ffmpeg -i in.mp4 -af loudnorm=print_format=json -f null /dev/null
|
|
66
|
+
ffmpeg -i in.mp4 -af loudnorm /dev/null
|
|
67
|
+
With output \`-\` or \`/dev/null\`, the wrapper skips VFS writeback
|
|
68
|
+
and returns the core log (filter measurements) on stderr. \`-\`
|
|
69
|
+
requires \`-f null\` (stdout is not emulated). Bare \`/dev/null\`
|
|
70
|
+
is accepted and gets \`-f null\` injected (MEMFS has no /dev/null).
|
|
71
|
+
|
|
72
|
+
Notes:
|
|
73
|
+
- The wasm engine needs an ipk-installed core: \`ipk add -g @ffmpeg/core@<pinned>\`
|
|
74
|
+
(\`@ffmpeg/core-mt\` for the FFMPEG_CORE=mt opt-in); \`ffmpeg -version\`
|
|
75
|
+
prints which one is loaded. Inputs are mounted lazily (never copied into
|
|
76
|
+
the wasm heap); only the output is buffered.
|
|
77
|
+
- The browser will prompt for camera/mic permission on first capture.
|
|
78
|
+
- Numeric -i values index into the per-kind enumerateDevices() list,
|
|
79
|
+
matching ffmpeg's native avfoundation device numbering on macOS.
|
|
80
|
+
`,stderr:``,exitCode:0}}async function k(e){let t=g(e.env)===`mt`,n=await a(q(e),void 0,t);return n?{stdout:`ffmpeg (wasm via @ffmpeg/ffmpeg)\ncore: ${c(n)}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`ffmpeg: ${i(t)}\n`,exitCode:1}}function A(e){if(!e.includes(`:`))return{video:e};let t=e.indexOf(`:`),n=e.slice(0,t),r=e.slice(t+1);return{...n?{video:n}:{},...r?{audio:r}:{}}}const j=new Set(`-f.-safe.-i.-c.-c:v.-c:a.-vf.-af.-filter:v.-filter:a.-filter_complex.-r.-b:v.-b:a.-s.-t.-ss.-to.-pix_fmt.-vcodec.-acodec.-ar.-ac.-frames:v.-frames:a.-q:v.-q:a.-crf.-preset.-tune.-movflags.-map.-metadata.-loglevel.-threads.-video_size.-framerate.-pixel_format.-update.-list_devices.-warmup.-bsf.-bsf:v.-bsf:a.-profile:v.-level.-g.-keyint_min.-sc_threshold.-max_muxing_queue_size.-fflags.-avoid_negative_ts.-start_number.-strict.-vsync.-fps_mode.-async.-disposition.-map_metadata.-c:s.-scodec.-ab.-aspect`.split(`.`)),ne=new Set(`-y.-n.-vn.-an.-sn.-dn.-re.-stats.-nostats.-nostdin.-shortest.-copyts.-hide_banner.-autorotate.-noautorotate.-ignore_unknown.-exact_size.-bitexact.-xerror.-benchmark.-benchmark_all.-dump.-hex.-stdin.-noautoscale.-accurate_seek.-noaccurate_seek.-fix_sub_duration.-recast_media`.split(`.`));function re(){return{inputs:[],outputOpts:[],outputPath:null,listDevices:!1,exactSize:!1,pendingOpts:[]}}function M(e,t,n){let r=e[t+1];if(typeof r!=`string`)throw Error(`ffmpeg: ${n} requires a value`);return r}function ie(e,t,n){let r=M(t,n,`-i`);return e.inputs.push({path:r,format:e.pendingFormat,videoSize:e.pendingVideoSize,frameRate:e.pendingFrameRate,raw:[...e.pendingOpts,`-i`,r]}),e.pendingFormat=void 0,e.pendingVideoSize=void 0,e.pendingFrameRate=void 0,e.pendingOpts=[],n+2}function N(e,t,n){let r=M(t,n,`-video_size`),i=/^(\d+)x(\d+)$/.exec(r);return i&&(e.pendingVideoSize={width:parseInt(i[1],10),height:parseInt(i[2],10)}),e.pendingOpts.push(`-video_size`,r),n+2}function P(e,t,n){let r=M(t,n,`-framerate`),i=parseFloat(r);return Number.isNaN(i)||(e.pendingFrameRate=i),e.pendingOpts.push(`-framerate`,r),n+2}function F(e,t,n){let r=M(t,n,`-list_devices`);return/^(true|1|yes)$/i.test(r)&&(e.listDevices=!0),e.pendingOpts.push(`-list_devices`,r),n+2}function I(e,t,n){let r=M(t,n,`-warmup`),i=parseInt(r,10);return!Number.isNaN(i)&&i>=0&&(e.warmupMs=i),n+2}function L(e,t){for(let n=t;n<e.length;n++){let t=e[n];if(!t.startsWith(`-`)||t===`-`)return!0;j.has(t)&&(n+=1)}return!1}function R(e,t){let n=e[t+1];return typeof n!=`string`||n.startsWith(`-`)?!1:L(e,t+2)}function z(e,t,n,r){if(j.has(r)){let i=M(t,n,r);return e.pendingOpts.push(r,i),n+2}return!ne.has(r)&&R(t,n)?(e.pendingOpts.push(r,t[n+1]),n+2):(e.pendingOpts.push(r),n+1)}function B(e,t,n){return e.outputPath=t,e.outputOpts=e.pendingOpts,e.pendingOpts=[],n+1}function V(e){let t=re(),n=0;for(;n<e.length;){let r=e[n];if(r===`-i`){n=ie(t,e,n);continue}if(r===`-f`){let r=M(e,n,`-f`);t.pendingFormat=r,t.pendingOpts.push(`-f`,r),n+=2;continue}if(r===`-video_size`){n=N(t,e,n);continue}if(r===`-framerate`){n=P(t,e,n);continue}if(r===`-list_devices`){n=F(t,e,n);continue}if(r===`-warmup`){n=I(t,e,n);continue}if(r===`-exact_size`){t.exactSize=!0,n+=1;continue}if(r===`-`&&W(t.pendingOpts)){n=B(t,r,n);continue}if(r.startsWith(`-`)){n=z(t,e,n,r);continue}n=B(t,r,n)}return{inputs:t.inputs,outputOpts:t.outputOpts,outputPath:t.outputPath,listDevices:t.listDevices,...t.warmupMs===void 0?{}:{warmupMs:t.warmupMs},exactSize:t.exactSize}}function H(e){return e.inputs.some(e=>e.format===`avfoundation`)}const U=new Set([`-`,`/dev/null`]);function W(e){for(let t=0;t<e.length-1;t++)if(e[t]===`-f`&&e[t+1]===`null`)return!0;return!1}function G(e){let t=e.outputPath;return t===null||!U.has(t)?!1:t===`/dev/null`||W(e.outputOpts)}function K(e){return W(e)?e:[...e,`-f`,`null`]}function q(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},readBytes:t=>e.fs.readFileBuffer(t),fromDir:e.cwd}}function J(e){let t=[];return(e.mode===`photo`||e.captureVideo!==!1)&&t.push(`camera`),e.mode===`video`&&e.captureAudio&&t.push(`microphone`),t}function Y(e){return e.length===0?`media devices`:e.length===1?e[0]:`${e.slice(0,-1).join(`, `)} and ${e[e.length-1]}`}function ae(e){for(let t of e){let e=t.stream;if(e)for(let t of e.getTracks())t.stop()}}async function oe(e,t){let n=u();if(!n)return null;try{let r=await n.prompt({kinds:e,description:t,skipIfGranted:!0});if(ae(r.grants),r.status===`granted`)return{ok:!0};let i=r.message?`: ${r.message}`:``;return{ok:!1,message:`${r.reason??r.status}${i}`}}catch{return null}}async function se(t){if(t.length===0)return{ok:!0};let n=`ffmpeg is requesting access to your ${Y(t)}.`,r=await oe(t,n);if(r)return r;let i=e();if(i)try{return await i.call(`permission-request`,{kinds:t,description:n,skipIfGranted:!0},{timeoutMs:3e5}),{ok:!0}}catch(e){let t=e instanceof Error?e.message:String(e);return/permission surface unavailable/i.test(t)?{ok:!0}:{ok:!1,message:t}}return{ok:!0}}function ce(e){let t=e.inputs.find(e=>e.format===`avfoundation`);if(!t)throw Error(`ffmpeg: no avfoundation input found`);if(!e.outputPath)throw Error(`ffmpeg: output path is required`);let n=e.outputOpts.indexOf(`-frames:v`),r=n>=0&&e.outputOpts[n+1]===`1`,i=e.outputOpts.indexOf(`-update`),a=i>=0&&e.outputOpts[i+1]===`1`,o=e.outputOpts.indexOf(`-t`),s=o>=0?parseFloat(e.outputOpts[o+1]):NaN,c=A(t.path),l=le(e.outputPath),u=/^image\//.test(l),d=!c.video&&!!c.audio;if(!d&&(r||a||u)){let n=u&&/^image\/(jpeg|png|webp)$/.test(l)?l:`image/jpeg`;return{outputPath:e.outputPath,captureMime:n,needsTranscode:X(e.outputOpts,`photo`)||n!==l,request:{mode:`photo`,deviceId:c.video,width:t.videoSize?.width,height:t.videoSize?.height,frameRate:t.frameRate,exactSize:e.exactSize,mimeType:n,quality:.92,...e.warmupMs===void 0?{}:{warmupMs:e.warmupMs}}}}let f=d||!!c.audio,p=`video/webm`;return{outputPath:e.outputPath,captureMime:p,needsTranscode:X(e.outputOpts,`video`)||p!==l,request:{mode:`video`,deviceId:c.video,captureVideo:!d,...f?{captureAudio:!0}:{},...c.audio?{audioDeviceId:c.audio}:{},width:t.videoSize?.width,height:t.videoSize?.height,frameRate:t.frameRate,exactSize:e.exactSize,mimeType:p,durationMs:Number.isFinite(s)?s*1e3:void 0}}}function X(e,t){let n=t===`photo`?new Set([`-vf`,`-filter:v`,`-filter_complex`,`-pix_fmt`,`-q:v`,`-vcodec`,`-c:v`]):new Set([`-c`,`-c:v`,`-c:a`,`-vcodec`,`-acodec`,`-vf`,`-af`,`-filter:v`,`-filter:a`,`-filter_complex`,`-pix_fmt`,`-pixel_format`,`-crf`,`-preset`,`-tune`,`-b:v`,`-b:a`,`-ar`,`-ac`,`-q:v`,`-q:a`,`-movflags`,`-r`]);return e.some(e=>n.has(e))}function le(e){let t=e.toLowerCase();return t.endsWith(`.jpg`)||t.endsWith(`.jpeg`)?`image/jpeg`:t.endsWith(`.png`)?`image/png`:t.endsWith(`.webp`)?`image/webp`:t.endsWith(`.gif`)?`image/gif`:t.endsWith(`.webm`)?`video/webm`:t.endsWith(`.mp4`)?`video/mp4`:t.endsWith(`.mov`)?`video/quicktime`:t.endsWith(`.mkv`)?`video/x-matroska`:t.endsWith(`.m4a`)?`audio/mp4`:t.endsWith(`.mp3`)?`audio/mpeg`:t.endsWith(`.wav`)?`audio/wav`:t.endsWith(`.ogg`)?`audio/ogg`:`application/octet-stream`}function ue(e){return e===`image/jpeg`?`jpg`:e===`image/png`?`png`:e===`image/webp`?`webp`:e===`video/webm`?`webm`:e===`video/mp4`?`mp4`:e===`audio/webm`?`webm`:`bin`}function de(e,t){let n=e.path.lastIndexOf(`/`),r=n>=0?e.path.slice(n+1):e.path;return r?`__in${t}_${r}`:`__in${t}.bin`}async function fe(e,t){if(e.length===0||e.includes(`--help`))return O();if(e.includes(`-version`)||e.includes(`--version`))return k(t);let n;try{n=V(e)}catch(e){return{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return n.listDevices&&H(n)?pe():n.outputPath?n.inputs.length===0?{stdout:``,stderr:`ffmpeg: at least one input file must be specified
|
|
81
|
+
`,exitCode:1}:H(n)?ye(n,t):Ve(n,t):{stdout:``,stderr:`ffmpeg: at least one output file must be specified
|
|
82
|
+
`,exitCode:1}}async function pe(){let e;try{e=await me()}catch(e){return{stdout:``,stderr:`ffmpeg: failed to enumerate devices: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let t=[];return t.push(`[AVFoundation indev @ 0x0] AVFoundation video devices:`),e.videoinputs.length===0?t.push(`[AVFoundation indev @ 0x0] (none)`):e.videoinputs.forEach((e,n)=>{t.push(`[AVFoundation indev @ 0x0] [${n}] ${e.label||`Camera ${n}`}`)}),t.push(`[AVFoundation indev @ 0x0] AVFoundation audio devices:`),e.audioinputs.length===0?t.push(`[AVFoundation indev @ 0x0] (none)`):e.audioinputs.forEach((e,n)=>{t.push(`[AVFoundation indev @ 0x0] [${n}] ${e.label||`Microphone ${n}`}`)}),{stdout:``,stderr:`${t.join(`
|
|
83
|
+
`)}\n`,exitCode:0}}async function me(){if(t()&&typeof navigator<`u`&&navigator.mediaDevices?.enumerateDevices){let e=await navigator.mediaDevices.enumerateDevices(),t=e=>({deviceId:e.deviceId,label:e.label||``,...e.groupId?{groupId:e.groupId}:{}});return{videoinputs:e.filter(e=>e.kind===`videoinput`).map(t),audioinputs:e.filter(e=>e.kind===`audioinput`).map(t)}}let n=e();if(!n)throw Error(`device enumeration requires a browser context`);return n.call(`enumerate-media-devices`,void 0,{timeoutMs:1e4})}async function he(e){let t=await f({kind:`camera`,...e.request}),n=new ArrayBuffer(t.bytes.byteLength);return new Uint8Array(n).set(t.bytes),{bytes:n,mimeType:t.mimeType,width:t.width,height:t.height,...t.durationMs===void 0?{}:{durationMs:t.durationMs}}}async function ge(t){let n=e();if(!n)return null;let r=await n.call(`capture-camera`,t.request,{timeoutMs:3e5});return{bytes:r.bytes,mimeType:r.mimeType,width:r.width,height:r.height,durationMs:r.durationMs}}async function _e(e){try{if(d())return{result:await he(e)};let t=await ge(e);return t?{result:t}:{error:{stdout:``,stderr:`ffmpeg: camera capture requires a browser context — not available in this runtime
|
|
84
|
+
`,exitCode:1}}}catch(e){return{error:{stdout:``,stderr:ve(e),exitCode:1}}}}function ve(e){let t=e instanceof Error?e.message:String(e);return/NotAllowedError|Permission denied/i.test(t)?`ffmpeg: camera permission denied
|
|
85
|
+
`:/NotFoundError/i.test(t)?`ffmpeg: no camera device found
|
|
86
|
+
`:`ffmpeg: ${t}\n`}async function ye(e,t){let n;try{n=ce(e)}catch(e){return{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let r=await se(J(n.request));if(!r.ok)return{stdout:``,stderr:`ffmpeg: camera permission denied (${r.message})\n`,exitCode:1};let i=await _e(n);if(`error`in i)return i.error;let a=i.result,o=Math.round(a.bytes.byteLength/1024),s=`${a.width}x${a.height}`,c=n.request.mode===`video`&&a.durationMs?`${s}, ${Math.round(a.durationMs)}ms`:s,l=new Uint8Array(a.bytes),u=``;if(n.needsTranscode)try{let r=await be({bytes:l,captureMime:n.captureMime,outputName:n.outputPath,outputOpts:e.outputOpts,ipk:q(t),onLog:e=>{u+=`${e}\n`}});l=new Uint8Array(r.byteLength),l.set(r)}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`${u}ffmpeg: captured ${c} (${o} KB) but transcode failed: ${t}\n`,exitCode:1}}let d=t.fs.resolvePath(t.cwd,n.outputPath);try{await t.fs.writeFile(d,l)}catch(e){return{stdout:``,stderr:`ffmpeg: failed to write ${n.outputPath}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let f=Math.round(l.byteLength/1024),p=n.needsTranscode?`${o} KB → ${f} KB`:`${o} KB`;return{stdout:``,stderr:`${u}ffmpeg: captured ${c} (${p}) to ${n.outputPath}\n`,exitCode:0}}async function be(e){let t=x(),i=`capture.${ue(e.captureMime)}`,a=S(t,i),o=w(t,e.outputName);e.onLog(`transcoding captured stream...`);let c=await n({onProgress:e.onLog,ipk:e.ipk}),l=t=>{e.onLog(t.message)};c.on(`log`,l);let u=!1;try{await T(c,t,[{name:i,data:y(e.bytes)}]);let n=[`-i`,a,...e.outputOpts,o],r=await c.exec(n);if(r!==0)throw Error(`ffmpeg-core exited with code ${r}`);let s=await c.readFile(o);if(s instanceof Uint8Array)return s;if(typeof s==`string`)return new TextEncoder().encode(s);throw Error(`ffmpeg-core returned an unknown payload type`)}catch(e){throw s(e)&&(u=!0,r(c)),e}finally{try{c.off(`log`,l)}catch{}if(!u)try{await E(c,t),await D(c,o)}catch{}}}function xe(e){return e.format===`concat`}function Se(e){return e.split(`
|
|
87
|
+
`).map(e=>{let t=e.trim();if(!t.startsWith(`file `))return{raw:e};let n=Ce(t.slice(4).trim());return n?{raw:e,file:n}:{raw:e}})}function Ce(e){let t=e[0];if(t!==`'`&&t!==`"`)return e.replace(/\\(.)/g,`$1`);let n=``;for(let r=1;r<e.length;r++){let i=e[r];if(i===`\\`&&t===`"`&&r+1<e.length){n+=e[r+1],r+=1;continue}if(i!==t){n+=i;continue}if(t===`'`&&e.slice(r,r+4)===`'\\''`){n+=`'`,r+=3;continue}return n}return n}function we(e,t,n){return`__cat${t}_${n}_${e.slice(e.lastIndexOf(`/`)+1).replace(/[^A-Za-z0-9._-]/g,`_`)||`part.bin`}`}function Te(e){return e.startsWith(`/`)||/^[A-Za-z]:/.test(e)?!1:!e.split(`/`).includes(`..`)}function Ee(e){let t=e.raw.lastIndexOf(`-safe`);if(t<0)return!0;let n=e.raw[t+1];return!(n===`0`||n?.startsWith(`-`))}async function De(e,t,n,r,i,a,o){let s=Se(new TextDecoder().decode(t)),c=e.slice(0,e.lastIndexOf(`/`))||`/`,l=[],u=[];for(let e of s){if(e.file===void 0){u.push(e.raw);continue}if(r&&!Te(e.file))return{error:{kind:`unsafe`,file:e.file}};let t=a.fs.resolvePath(c,e.file);if(!await a.fs.exists(t))return{error:{kind:`missing`,file:e.file}};let s=S(i,we(e.file,n,l.length));l.push({ffmpegName:s,data:await _(a.fs,t,o)}),u.push(`file '${s}'`)}return{listBytes:new TextEncoder().encode(u.join(`
|
|
88
|
+
`)),extraFiles:l}}function Oe(e){return e.format===`lavfi`}async function ke(e,t,n,r=()=>{}){let i=[];for(let[a,o]of e.inputs.entries()){if(Oe(o)){i.push({ffmpegName:o.path,data:null,virtual:!0});continue}let e=n.fs.resolvePath(n.cwd,o.path);if(!await n.fs.exists(e))return{error:{stdout:``,stderr:`ffmpeg: input file not found: ${o.path}\n`,exitCode:1}};let s=S(t,de(o,a));if(xe(o)){let c=await De(e,await n.fs.readFileBuffer(e),a,Ee(o),t,n,r);if(`error`in c){let{kind:e,file:t}=c.error,n=e===`unsafe`?`unsafe file name: ${t} (pass -safe 0 to allow it)`:`file not found: ${t}`;return{error:{stdout:``,stderr:`ffmpeg: concat list ${o.path}: ${n}\n`,exitCode:1}}}i.push({ffmpegName:s,data:y(c.listBytes),virtual:!1,extraFiles:c.extraFiles});continue}i.push({ffmpegName:s,data:await _(n.fs,e,r),virtual:!1})}return{inputs:i}}const Ae={threads:8,filterThreads:2};function Z(e){return e.some(e=>e===`-threads`||e.startsWith(`-threads:`))}function je(e,t=Ae,n=typeof navigator<`u`?navigator.hardwareConcurrency:void 0){let r=String(Math.max(1,Math.min(t.threads,n??t.threads))),i=[...e.inputs.flatMap(e=>e.raw),...e.outputOpts],a=[];i.includes(`-filter_threads`)||a.push(`-filter_threads`,String(t.filterThreads)),i.includes(`-filter_complex_threads`)||a.push(`-filter_complex_threads`,String(t.filterThreads));let o=e.inputs.map((e,t)=>{let n=[...t===0?a:[],...Z(e.raw)?[]:[`-threads`,r]];return n.length>0?{...e,raw:[...n,...e.raw]}:e}),s=Z(e.outputOpts)?e.outputOpts:[`-threads`,r,...e.outputOpts];return{...e,inputs:o,outputOpts:s}}function Me(e){return{stdout:``,stderr:`${e}ffmpeg: the multi-threaded core deadlocks with more than one input (ffmpeg starts a demux thread per input; emscripten proxies their pthread_create to a main thread blocked in exec; see #2810). Run without FFMPEG_CORE=mt so the single-threaded @ffmpeg/core handles this job.
|
|
89
|
+
`,exitCode:1}}function Ne(e,t,n){let r=[];for(let[n,i]of e.inputs.entries()){let e=t[n],a=i.raw;for(let t=0;t<a.length;t++){if(a[t]===`-i`){r.push(`-i`,e.virtual?a[t+1]:e.ffmpegName),t+=1;continue}r.push(a[t])}}return r.push(...e.outputOpts),r.push(n),r}function Pe(e){let t=[];for(let n of e)if(n.data!==null){for(let e of n.extraFiles??[])t.push({name:C(e.ffmpegName),data:e.data});t.push({name:C(n.ffmpegName),data:n.data})}return t}async function Fe(e){let t=`__health_probe`;try{await e.writeFile(t,new Uint8Array([0])),await e.deleteFile(t)}catch(e){if(s(e))throw e}}async function Q(e,t,n){await E(e,t),await D(e,n)}async function Ie(e,t,n,r){let i;try{i=await e.readFile(t)}catch(e){if(s(e))throw e;return{error:{stdout:``,stderr:r()||`ffmpeg: produced no output file for ${n}\n`,exitCode:1}}}let a=i instanceof Uint8Array?i:new TextEncoder().encode(typeof i==`string`?i:``);return a.byteLength===0?{error:{stdout:``,stderr:r()||`ffmpeg: produced an empty output file for ${n}\n`,exitCode:1}}:{bytes:a}}function Le(e,t,n){return n?`__null_sink${e.id}`:w(e,t)}function $(e,t){return{stdout:``,stderr:`${e}ffmpeg: ${t instanceof Error?t.message:String(t)}\nffmpeg: the wasm core faulted and was recycled; retry the command (a large input may need to be split into smaller passes)
|
|
90
|
+
`,exitCode:1}}async function Re(e){let{ffmpeg:t,parsed:n,resolvedInputs:r,stage:i,outputName:a,outputPath:s,analysisSink:c,readStderr:u}=e,d=l()===o;if(d&&n.inputs.length>1)return{early:Me(u()),outputBytes:null};await T(t,i,Pe(r));let f=c?{...n,outputOpts:K(n.outputOpts)}:n,p=Ne(d?je(f):f,r,a),m=await t.exec(p);if(m!==0)return{early:{stdout:``,stderr:u()||`ffmpeg: exited with code ${m}\n`,exitCode:m||1},outputBytes:null};if(c)return await Fe(t),{early:{stdout:``,stderr:u(),exitCode:0},outputBytes:null};let h=await Ie(t,a,s,u);return`error`in h?{early:h.error,outputBytes:null}:{early:null,outputBytes:h.bytes}}async function ze(e){let{ffmpeg:t,logHandler:n,stage:i,outputName:a,readStderr:o,faulted:c}=e;try{t.off(`log`,n)}catch{}if(c)return null;try{return await Q(t,i,a),null}catch(e){return s(e)?(r(t),$(o(),e)):null}}async function Be(e,t,n,r,i){let{ffmpegEngineFromEnv:a}=await import(`./engine-B-OPe78i.js`),o=a(i.env),s=t.length===1?t[0].data:null;if(o===`wasm`||r||s===null)return o===`mediabunny`?{result:{stdout:``,stderr:`ffmpeg: FFMPEG_ENGINE=mediabunny cannot run this: analysis sinks, lavfi and concat inputs are wasm-only
|
|
91
|
+
`,exitCode:1}}:{fallback:!0,note:null};let{runFfmpegFastPath:c}=await import(`./fast-path-CYxpDuii.js`);return c({parsed:e,input:s,outputPath:i.fs.resolvePath(i.cwd,n),fs:i.fs,engine:o})}async function Ve(e,t){let n=x(),r=[],i=await ke(e,n,t,e=>r.push(e));if(`error`in i)return i.error;let a=i.inputs,o=e.outputPath,s=G(e),c=await Be(e,a,o,s,t);if(`result`in c)return c.result;let l=await He({parsed:e,ctx:t,stage:n,resolvedInputs:a,outputPath:o,analysisSink:s}),u=[...c.note?[`ffmpeg: ${c.note}`]:[],...r].map(e=>`${e}\n`).join(``);return u?{...l,stderr:`${u}${l.stderr}`}:l}async function He(e){let{parsed:t,ctx:i,stage:a,resolvedInputs:o,outputPath:s,analysisSink:c}=e,l=Le(a,s,c),u=``,d;try{d=await n({onProgress:e=>{u+=`${e}\n`},ipk:q(i),preferMt:g(i.env)===`mt`})}catch(e){return{stdout:``,stderr:`${u}ffmpeg: failed to load wasm: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let f=e=>{u+=`${e.message}\n`};d.on(`log`,f);let p=!1,m=null,h=null;try{let e=await Re({ffmpeg:d,parsed:t,resolvedInputs:o,stage:a,outputName:l,outputPath:s,analysisSink:c,readStderr:()=>u});m=e.early,h=e.outputBytes}catch(e){p=!0,r(d),m=$(u,e)}finally{let e=await ze({ffmpeg:d,logHandler:f,stage:a,outputName:l,readStderr:()=>u,faulted:p});e&&(m=e)}if(m)return m;try{await i.fs.writeFile(i.fs.resolvePath(i.cwd,s),h??new Uint8Array)}catch(e){return{stdout:``,stderr:`${u}ffmpeg: cannot write ${s}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return{stdout:``,stderr:u,exitCode:0}}export{_ as a,g as c,q as createIpkContextFromCtx,E as i,m as l,x as n,h as o,S as r,fe as runFfmpeg,p as s,T as t};
|
|
@@ -42,7 +42,7 @@ Examples:
|
|
|
42
42
|
gelatiere suggest "$TMPDIR/candidates.json" && gelatiere deliver
|
|
43
43
|
gelatiere dismiss skill-github
|
|
44
44
|
gelatiere use-cases --limit 3 --json
|
|
45
|
-
`,i=[`--scoop`],a=[`--limit`],o=[...i,...a];function s(e){return{stdout:e,stderr:``,exitCode:0}}function c(e){return{stdout:``,stderr:`gelatiere: ${e}\n`,exitCode:1}}const l=`kernel host has not booted yet — try again in a moment`;function u(){let e=globalThis.__slicc_gelatiere;return e&&typeof e.roots==`function`?e:null}function d(){return import(`./gelatiere-store-
|
|
45
|
+
`,i=[`--scoop`],a=[`--limit`],o=[...i,...a];function s(e){return{stdout:e,stderr:``,exitCode:0}}function c(e){return{stdout:``,stderr:`gelatiere: ${e}\n`,exitCode:1}}const l=`kernel host has not booted yet — try again in a moment`;function u(){let e=globalThis.__slicc_gelatiere;return e&&typeof e.roots==`function`?e:null}function d(){return import(`./gelatiere-store-C2u47uk0.js`)}async function f(t,n){let r=e(t,{bool:[`--reset`]});if(`error`in r)return c(r.error);let i=u();if(!i)return c(l);let a=await(await d()).loadGelatiereConfig(n),o=``;if(r.bools.has(`--reset`)){let e=await i.unregisterOwned();o=e.length?`Dropped ${e.length} gelatiere unit(s): ${e.join(`, `)}\n`:``}let f;try{f=await i.ensureUnit(a.allowedCommands)}catch(e){return c(e instanceof Error?e.message:String(e))}let m=await i.ensureNightly(a.nightly);return s(o+`${f.created?`Created`:`Found`} the gelatiere (${f.jid}, folder ${f.folder})\n`+p(f.allowList)+`${m.created?`Registered`:`Found`} nightly pass: cron "${m.cron}" (${m.id})\nSuggestions render in the suggestions card; \`gelatiere run\` asks for a pass now.
|
|
46
46
|
`)}function p(e){return e===`updated`?`Updated its command allow-list from GELATIERE.md
|
|
47
47
|
`:e===`deferred`?`Left its command allow-list alone: the gelatiere is mid-pass and applying it would
|
|
48
48
|
cancel the pass — run \`gelatiere init\` again once it is idle
|
|
@@ -50,5 +50,5 @@ cancel the pass — run \`gelatiere init\` again once it is idle
|
|
|
50
50
|
`),s(l)}async function g(t,n){let r=e(t,{value:i,bool:[`--force`]});if(`error`in r)return c(r.error);let a=u();if(!a)return c(l);let o=await d(),f=await o.readGelatiereSuggestions(n),p=o.openSuggestions(f),m=await o.readGelatiereState(n);if(o.suggestionsSince(f,m.lastDeliveredAt).length===0&&!r.bools.has(`--force`))return s(`Nothing new since the last delivery; no lick sent (use --force to resend).
|
|
51
51
|
`);let h=a.roots();if(h.length===0)return c(`no cone is running to deliver to`);let g=r.values.get(`--scoop`),v=g?h.find(e=>e.folder===g||e.name===g||e.jid===g):void 0;if(g&&!v)return c(`unknown delivery target "${g}" (cones: ${h.map(e=>e.folder).join(`, `)})`);let y=await _(a,h,v?[v]:h,{since:m.lastDeliveredAt,open:p,force:r.bools.has(`--force`),alias:g});g||await o.writeGelatiereState(n,{...m,lastDeliveredAt:new Date().toISOString()});let b=g?` (targeted; the delivery watermark is unchanged)`:``;return y.length===0?s(`Nothing addressed to ${g??`any running cone`}; no lick sent${b}\n`):s(`Delivered to ${y.length} cone(s): ${y.join(`, `)}${b}\n`)}async function _(e,t,n,r){let i=await d(),a=new Set(t.map(e=>e.folder)),o=t[0].folder,s=[];for(let t of n){let n=i.suggestionsForCone(r.open,t.folder,o,a),c=n.filter(e=>i.isNewSince(e,r.since,t.folder));if(c.length===0&&!(r.force&&n.length>0))continue;let l=r.alias??t.folder;e.lick(l,i.buildGelatiereLickBody(c,n)),s.push(`${l} (${c.length} new, ${n.length} open)`)}return s}async function v(t,n){let r=e(t,{bool:[`--all`,`--json`]});if(`error`in r)return c(r.error);let i=await d(),a=await i.readGelatiereSuggestions(n),o=r.bools.has(`--all`)?a:i.openSuggestions(a);if(r.bools.has(`--json`))return s(`${JSON.stringify(o,null,2)}\n`);if(o.length===0)return s(a.length===0?"No suggestions yet. `gelatiere run` asks for a pass now.\n":"No open suggestions (every one has been taken or dismissed; `--all` lists them).\n");let l=``;for(let e of o){let t=e.dismissedAt?` (dismissed)`:e.takenAt?` (taken)`:``;l+=`${e.id} [${e.kind}]${t}\n ${e.title}\n`,e.install&&(l+=` install: ${e.install}\n`),e.prompt&&(l+=` try: ${e.prompt}\n`)}return s(l)}async function y(e,t){let n=e[0];return n?await(await d()).dismissGelatiereSuggestion(t,n)?s(`Dismissed ${n}.\n`):c(`no open suggestion with id "${n}"`):c("dismiss requires a suggestion id (see `gelatiere list`)")}const b=`https://www.sliccy.com`,x=512e3,S=/^[a-z0-9][a-z0-9-]*$/;async function C(e,t){let n=await fetch(`${b}${e}`,{signal:AbortSignal.timeout(15e3)});if(!n.ok)throw Error(`${e}: HTTP ${n.status}`);let r=await n.text();return r.length>t?r.slice(0,t):r}async function w(){try{let e=await C(`/skills/catalog.json`,x);return s(e.endsWith(`
|
|
52
52
|
`)?e:`${e}\n`)}catch(e){return c(`catalog fetch failed: ${e instanceof Error?e.message:String(e)}`)}}async function T(){try{let e=[...(await C(`/sitemap.xml`,x)).matchAll(/<loc>[^<]*\/man\/([a-z0-9-]+)(?:\.html)?<\/loc>/g)].map(e=>e[1]).sort();return e.length===0?c(`no man pages found in the sitemap`):s(`${[...new Set(e)].join(` `)}\n`)}catch(e){return c(`sitemap fetch failed: ${e instanceof Error?e.message:String(e)}`)}}async function E(e){let t=e[0];if(!t)return c(`man requires a command name: gelatiere man <command>`);if(!S.test(t))return c(`not a command name: "${t}"`);try{let e=await C(`/man/${t}.plain.html`,16e3);return s(e.endsWith(`
|
|
53
|
-
`)?e:`${e}\n`)}catch(e){return c(`man fetch failed: ${e instanceof Error?e.message:String(e)}`)}}function D(e,t,n){let r=e=>{let t=n.match(RegExp(`<meta[^>]+name=["']${e}["'][^>]+content=(["'])((?:(?!\\1).)*)\\1`,`i`));return t?k(t[2]).trim():``},i=n.match(/<title[^>]*>([^<]*)<\/title>/i);return{slug:e,url:t,title:i?k(i[1]).trim():A(e),description:r(`description`),skills:r(`slicc-upskill`).split(`,`).map(e=>e.trim()).filter(Boolean)}}const O={amp:`&`,lt:`<`,gt:`>`,quot:`"`,"#39":`'`,"#x27":`'`};function k(e){return e.replace(/&(#x?[0-9a-fA-F]+|[a-z]+);/g,(e,t)=>{let n=O[t.toLowerCase()];if(n)return n;let r=t.match(/^#(x?)([0-9a-fA-F]+)$/i);if(!r)return e;let i=Number.parseInt(r[2],r[1]?16:10);return Number.isFinite(i)?String.fromCodePoint(i):e})}function A(e){let t=e.replace(/-/g,` `);return t.charAt(0).toUpperCase()+t.slice(1)}function j(e,t){return e<=0?0:Math.floor(t/864e5)%e}function M(e,t,n){if(t>=e.length)return[...e];let r=j(e.length,n);return Array.from({length:t},(t,n)=>e[(r+n)%e.length])}async function N(e,t){let n=Array(e.length),r=0,i=async()=>{for(;r<e.length;){let i=r++;n[i]=await t(e[i])}};return await Promise.all(Array.from({length:Math.min(4,e.length)},()=>i())),n}async function P(t){let n=e(t,{value:a,bool:[`--json`]});if(`error`in n)return c(n.error);let r=n.values.get(`--limit`),i=r===void 0?12:Number(r);if(!Number.isInteger(i)||i<=0)return c(`--limit must be a positive whole number, not "${r}"`);let o;try{let e=await C(`/sitemap.xml`,x);o=[...new Set([...e.matchAll(/<loc>[^<]*\/use-cases\/([a-z0-9-]+)(?:\.html)?<\/loc>/g)].map(e=>e[1]))].sort()}catch(e){return c(`sitemap fetch failed: ${e instanceof Error?e.message:String(e)}`)}if(o.length===0)return c(`no use cases found in the sitemap`);let l=await N(M(o,Math.min(i,12),Date.now()),async e=>{let t=`${b}/use-cases/${e}`;try{return D(e,t,await C(`/use-cases/${e}`,24e3))}catch{return{slug:e,url:t,title:A(e),description:``,skills:[]}}});if(n.bools.has(`--json`))return s(`${JSON.stringify(l,null,2)}\n`);let u=``;for(let e of l)u+=`${e.slug}\t${e.title}\n ${e.url}\n`,e.description&&(u+=` ${e.description}\n`),e.skills.length&&(u+=` skills: ${e.skills.join(` `)}\n`);return s(u)}async function F(e){let t=await d(),n=u(),r=n?.unit(),i=await t.loadGelatiereConfig(e),a=await t.readGelatiereState(e),o=await t.readGelatiereSuggestions(e),c=``,{isMemoryV2Enabled:l}=await import(`./memory-v2-flag-
|
|
53
|
+
`)?e:`${e}\n`)}catch(e){return c(`man fetch failed: ${e instanceof Error?e.message:String(e)}`)}}function D(e,t,n){let r=e=>{let t=n.match(RegExp(`<meta[^>]+name=["']${e}["'][^>]+content=(["'])((?:(?!\\1).)*)\\1`,`i`));return t?k(t[2]).trim():``},i=n.match(/<title[^>]*>([^<]*)<\/title>/i);return{slug:e,url:t,title:i?k(i[1]).trim():A(e),description:r(`description`),skills:r(`slicc-upskill`).split(`,`).map(e=>e.trim()).filter(Boolean)}}const O={amp:`&`,lt:`<`,gt:`>`,quot:`"`,"#39":`'`,"#x27":`'`};function k(e){return e.replace(/&(#x?[0-9a-fA-F]+|[a-z]+);/g,(e,t)=>{let n=O[t.toLowerCase()];if(n)return n;let r=t.match(/^#(x?)([0-9a-fA-F]+)$/i);if(!r)return e;let i=Number.parseInt(r[2],r[1]?16:10);return Number.isFinite(i)?String.fromCodePoint(i):e})}function A(e){let t=e.replace(/-/g,` `);return t.charAt(0).toUpperCase()+t.slice(1)}function j(e,t){return e<=0?0:Math.floor(t/864e5)%e}function M(e,t,n){if(t>=e.length)return[...e];let r=j(e.length,n);return Array.from({length:t},(t,n)=>e[(r+n)%e.length])}async function N(e,t){let n=Array(e.length),r=0,i=async()=>{for(;r<e.length;){let i=r++;n[i]=await t(e[i])}};return await Promise.all(Array.from({length:Math.min(4,e.length)},()=>i())),n}async function P(t){let n=e(t,{value:a,bool:[`--json`]});if(`error`in n)return c(n.error);let r=n.values.get(`--limit`),i=r===void 0?12:Number(r);if(!Number.isInteger(i)||i<=0)return c(`--limit must be a positive whole number, not "${r}"`);let o;try{let e=await C(`/sitemap.xml`,x);o=[...new Set([...e.matchAll(/<loc>[^<]*\/use-cases\/([a-z0-9-]+)(?:\.html)?<\/loc>/g)].map(e=>e[1]))].sort()}catch(e){return c(`sitemap fetch failed: ${e instanceof Error?e.message:String(e)}`)}if(o.length===0)return c(`no use cases found in the sitemap`);let l=await N(M(o,Math.min(i,12),Date.now()),async e=>{let t=`${b}/use-cases/${e}`;try{return D(e,t,await C(`/use-cases/${e}`,24e3))}catch{return{slug:e,url:t,title:A(e),description:``,skills:[]}}});if(n.bools.has(`--json`))return s(`${JSON.stringify(l,null,2)}\n`);let u=``;for(let e of l)u+=`${e.slug}\t${e.title}\n ${e.url}\n`,e.description&&(u+=` ${e.description}\n`),e.skills.length&&(u+=` skills: ${e.skills.join(` `)}\n`);return s(u)}async function F(e){let t=await d(),n=u(),r=n?.unit(),i=await t.loadGelatiereConfig(e),a=await t.readGelatiereState(e),o=await t.readGelatiereSuggestions(e),c=``,{isMemoryV2Enabled:l}=await import(`./memory-v2-flag-BHVbti6Z.js`);l()||(c+=`Memory v2: OFF — the nightly is unscheduled and session ends do not trigger passes
|
|
54
54
|
`),c+=`Unit: ${r?`${r.jid} (folder ${r.folder})`:"not created — run `gelatiere init`"}\n`;let f=n?.nightly();return c+=`Nightly: ${f?`registered, cron "${f.cron}" (${f.id})`:`not registered — run \`gelatiere init\` (cron "${i.nightly}")`}\n`,c+=`Interval: ${i.intervalHours}h between session-end passes\n`,c+=I(i.allowedCommands,n?.unitAllowedCommands(),t),c+=`Passes: ${a.passes}\n`,c+=`Last pass: ${a.lastPassAt??`never`}\n`,c+=`Last trigger: ${a.lastTriggeredAt??`never`}\n`,c+=`Last delivery: ${a.lastDeliveredAt??`never`}\n`,c+=`Suggestions: ${t.openSuggestions(o).length} open, ${t.takenSuggestions(o).length} taken, ${o.length} total\n`,s(c)}function I(e,t,n){let r=e=>{let t=e.filter(e=>!n.GELATIERE_BASE_ALLOWED_COMMANDS.includes(e));return t.length?` (+${t.join(`, `)} from GELATIERE.md)`:``};return t?t.length===e.length&&t.every((t,n)=>t===e[n])?`Commands: ${t.length} allowed without approval${r(t)}\n`:`Commands: ${t.length} in force${r(t)}; GELATIERE.md asks for ${e.length}${r(e)} — run \`gelatiere init\`\n`:`Commands: ${e.length} configured${r(e)}, pending — run \`gelatiere init\`\n`}async function L(e,n,i){let a=e[0];if(!a||t(e,{valueFlags:o}))return s(r);let l=e.slice(1);switch(a){case`init`:return f(l,i.fs);case`run`:return m(n.env);case`suggest`:return h(l,i.fs);case`deliver`:return g(l,i.fs);case`list`:return v(l,i.fs);case`dismiss`:return y(l,i.fs);case`status`:return F(i.fs);case`catalog`:return w();case`commands`:return T();case`man`:return E(l);case`use-cases`:return P(l);default:return c(`unknown command: ${a}\n${r}`)}}export{L as runGelatiere};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./panel-rpc-BPwAqRch.js";import{r as t}from"./base64-DzRgusa4.js";import{a as n,i as r}from"./just-bash-compat-
|
|
1
|
+
import{n as e}from"./panel-rpc-BPwAqRch.js";import{r as t}from"./base64-DzRgusa4.js";import{a as n,i as r}from"./just-bash-compat-B-SPHuh_.js";const i=[`prompt`,`exec`,`watch`];function a(e){return{stdout:``,stderr:e.endsWith(`
|
|
2
2
|
`)?e:`${e}\n`,exitCode:1}}function o(e){return{stdout:e,stderr:``,exitCode:0}}function s(){return o(`slicc - talk to another SLICC leader as a client
|
|
3
3
|
|
|
4
4
|
Usage: slicc <target> prompt [--steer] [--timeout <s>] <text...>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{r as e}from"./browser-eoO4vY7w.js";function t(e){return e.includes(`--help`)}const n=(e=``)=>({stdout:e,stderr:``,exitCode:0}),r=(e,t)=>({stdout:``,stderr:e.endsWith(`
|
|
2
2
|
`)?e:`${e}\n`,exitCode:t}),i=(e,t,n=1)=>r(`bash: ${e}: ${t}`,n),a=(e,t,n)=>r(`bash: ${e}: ${t}${n?`\nbash: ${e}: ${n}`:``}`,2),o=[[2,`SIGINT`],[9,`SIGKILL`],[15,`SIGTERM`],[18,`SIGCONT`],[19,`SIGSTOP`]];function s(){let e=o.map(([e,t])=>`${String(e).padStart(2,` `)}) ${t}`),t=[];for(let n=0;n<e.length;n+=2)t.push(e.slice(n,n+2).join(` `));return`${t.join(`
|
|
3
3
|
`)}\n`}function c(){return e(`jobs`,async e=>{if(t(e))return n(`jobs - display status of jobs
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import"./browser-
|
|
1
|
+
import"./browser-eoO4vY7w.js";import{a as e,c as t,i as n,l as r,o as i,r as a}from"./ffmpeg-wasm-B77gfnB_.js";import{a as o,c as s,createIpkContextFromCtx as c,i as l,n as u,r as ee,t as d}from"./run-BOkp5G58.js";const f={mono:1,stereo:2,"2.1":3,"3.0":3,"3.1":4,"4.0":4,quad:4,"4.1":5,"5.0":5,"5.1":6,"6.0":6,"6.1":7,"7.0":7,"7.1":8};function p(e){let t=/^(\d+):(\d{2}):(\d{2}(?:\.\d+)?)$/.exec(e.trim());if(!t)return;let n=Number(t[1]),r=Number(t[2]),i=Number(t[3]);if([n,r,i].every(Number.isFinite))return(n*3600+r*60+i).toFixed(6)}function m(e){let t=e.trim().toLowerCase();if(Object.hasOwn(f,t))return f[t];let n=/^([0-9.]+|[a-z0-9_+-]+)\(/.exec(t);if(n&&Object.hasOwn(f,n[1]))return f[n[1]];let r=/^(\d+)\s+channels?$/.exec(t);if(r)return Number(r[1])}function h(e){let t=Number(e);return Number.isFinite(t)?Number.isInteger(t)?`${t}/1`:`${Math.round(t*1e3)}/1000`:e}function g(e){let t=Number(e);if(Number.isFinite(t))return String(Math.round(t*1e3))}function _(e){let t=/^([A-Za-z0-9_]+)(.*)$/.exec(e);if(!t)return{remainder:e};let n=t[2],r,i,a=/^\s*\(([^)/]+)\)/.exec(n);a&&!a[1].includes(`/`)&&(r=a[1].trim(),n=n.slice(a[0].length));let o=/^\s*\(([A-Za-z0-9]+)\s*\/\s*0x[0-9a-fA-F]+\)/.exec(n);return o&&(i=o[1],n=n.slice(o[0].length)),{codec_name:t[1],profile:r,codec_tag_string:i,remainder:n}}function v(e,t){let n=/,\s*([A-Za-z0-9_]+)(?:\([^)]*\))?,\s*(\d+)x(\d+)/.exec(e);n&&(t.pix_fmt=n[1],t.width=Number(n[2]),t.height=Number(n[3]));let r=/\[SAR\s+(\S+)\s+DAR\s+(\S+)\]/.exec(e);r&&(t.sample_aspect_ratio=r[1],t.display_aspect_ratio=r[2]);let i=/,\s*(\d+(?:\.\d+)?)\s*kb\/s/.exec(e);i&&(t.bit_rate=g(i[1]));let a=/,\s*(\d+(?:\.\d+)?)\s*fps/.exec(e);a&&(t.r_frame_rate=h(a[1]),t.avg_frame_rate=t.r_frame_rate)}function y(e,t){let n=/,\s*(\d+)\s*Hz/.exec(e);n&&(t.sample_rate=n[1]);let r=/Hz,\s*([^,]+)/.exec(e);if(r){let e=r[1].trim();t.channel_layout=e,t.channels=m(e)}let i=/,\s*(\d+(?:\.\d+)?)\s*kb\/s/.exec(e);i&&(t.bit_rate=g(i[1]))}function b(e){let t=/^\s*Stream #(\d+):(\d+)(?:\[[^\]]*\])?(?:\([^)]*\))?:\s*(Video|Audio|Subtitle|Data|Attachment):\s*(.+)$/i.exec(e);if(!t)return null;let n=t[3].toLowerCase(),r={index:Number(t[2]),codec_type:n},{codec_name:i,profile:a,codec_tag_string:o,remainder:s}=_(t[4]);return i&&(r.codec_name=i),a&&(r.profile=a),o&&(r.codec_tag_string=o),n===`video`?v(s,r):n===`audio`&&y(s,r),r}function x(e,t){let n=/^\s*Duration:\s*([^,]+),\s*start:\s*([^,]+),\s*bitrate:\s*(\d+(?:\.\d+)?)\s*kb\/s/.exec(t);return n?(e.duration=p(n[1]),e.start_time=Number(n[2]).toFixed(6),e.bit_rate=g(n[3]),!0):!1}function S(e,t,n){let r=/^\s{2,}([A-Za-z0-9_]+)\s*:\s*(.*)$/.exec(n);return r&&!/^(Duration|Stream)\b/.test(r[1])?(t[r[1]]=r[2].trim(),`keep`):(Object.keys(t).length>0&&(e.tags=t),`end`)}function C(e,t){let n=e.split(/\r?\n/),r=null,i=[],a=!1,o;for(let e of n){let n=/^Input #(\d+),\s*(.+?),\s*from\s+'([^']*)':\s*$/.exec(e);if(n){a=!0,r={format_name:n[2].trim(),filename:n[3]||t},o=void 0;continue}if(!a||!r)continue;if(/^\s*Metadata:\s*$/.test(e)){o={};continue}if(o){if(S(r,o,e)===`keep`)continue;o=void 0}if(x(r,e))continue;let s=b(e);s&&(r.duration&&s.duration===void 0&&(s.duration=r.duration),i.push(s))}return r?{format:r,streams:i}:null}const w=new Set([`-i`,`-v`,`-loglevel`,`-of`,`-print_format`,`-show_entries`,`-select_streams`]),T=new Set([`-show_format`,`-show_streams`,`-hide_banner`,`-h`,`--help`,`-version`,`--version`]);function E(){return{stdout:`ffprobe - media probe (mediabunny, with a wasm fallback)
|
|
2
2
|
|
|
3
3
|
Usage:
|
|
4
4
|
ffprobe [options] -i <input>
|
|
@@ -38,9 +38,9 @@ needs the same core pin as \`ffmpeg\` (\`@ffmpeg/core\`, or
|
|
|
38
38
|
Examples:
|
|
39
39
|
ffprobe -v error -show_entries stream=channels -select_streams a:0 -of default=nw=1:nk=1 clip.mp4
|
|
40
40
|
ffprobe -v error -show_format -show_streams -of json clip.mp4
|
|
41
|
-
`,stderr:``,exitCode:0}}async function D(e){let t=
|
|
41
|
+
`,stderr:``,exitCode:0}}async function D(e){let t=s(e.env)===`mt`,i=await r(c(e),void 0,t);return i?{stdout:`ffprobe (emulated via @ffmpeg/ffmpeg — not a real ffprobe binary)\ncore: ${a(i)}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`ffprobe: ${n(t)}\n`,exitCode:1}}function O(e,t,n){let r=e[t+1];if(typeof r!=`string`||r.startsWith(`-`))throw Error(`ffprobe: ${n} requires a value`);return r}function k(e){let t=e.indexOf(`=`),n=t<0?e:e.slice(0,t),r=t<0?``:e.slice(t+1);if(n===`json`)return{kind:`json`};if(n===`csv`)return{kind:`csv`,printSection:!/(?:^|:)p=0(?::|$)/.test(r)};if(n==="default")return{kind:`default`,noWrappers:/(?:^|:)(?:nw|noprint_wrappers)=1(?::|$)/.test(r),noKey:/(?:^|:)(?:nk|nokey)=1(?::|$)/.test(r)};throw Error(`ffprobe: unsupported -of '${e}' (supported: json, csv[=p=0], default[=nw=1:nk=1])`)}function A(e){let t={};for(let n of e.split(`:`)){if(!n)continue;let e=n.indexOf(`=`);if(e<0)throw Error(`ffprobe: -show_entries section '${n}' needs keys (e.g. format=duration)`);let r=n.slice(0,e),i=n.slice(e+1).split(`,`).map(e=>e.trim()).filter(Boolean);if(r===`format`)t.format=new Set(i);else if(r===`stream`)t.stream=new Set(i);else throw Error(`ffprobe: unsupported -show_entries section '${r}' (supported: format, stream)`)}return t}function j(e,t,n){let r=t[n];if(r===`-i`)return e.inputPath=O(t,n,`-i`),n+1;if(r===`-show_format`)return e.showFormat=!0,e.structured=!0,n;if(r===`-show_streams`)return e.showStreams=!0,e.structured=!0,n;if(r===`-show_entries`)return e.showEntries=A(O(t,n,`-show_entries`)),e.structured=!0,n+1;if(r===`-select_streams`)return e.selectStreams=O(t,n,`-select_streams`),n+1;if(r===`-of`||r===`-print_format`)return e.outputFormat=k(O(t,n,r)),e.structured=!0,n+1;if(r===`-v`||r===`-loglevel`){let i=O(t,n,r).toLowerCase();return e.quiet=[`quiet`,`panic`,`fatal`,`error`,`warning`].includes(i),n+1}if(r===`-hide_banner`)return n;if(T.has(r)||w.has(r))throw Error(`ffprobe: internal parse gap for '${r}'`);if(r.startsWith(`-`))throw Error(`ffprobe: unsupported option '${r}' (this is an emulated probe — see --help)`);if(e.inputPath!==null)throw Error(`ffprobe: unexpected argument '${r}'`);return e.inputPath=r,n}function M(e){let t={inputPath:null,showFormat:!1,showStreams:!1,showEntries:null,selectStreams:null,outputFormat:{kind:`default`,noWrappers:!1,noKey:!1},quiet:!1,structured:!1};for(let n=0;n<e.length;n++)n=j(t,e,n);return!t.showFormat&&!t.showStreams&&!t.showEntries&&(t.showFormat=!0,t.showStreams=!0),t}function N(e,t){if(!t)return e;let n=/^([va])(?::(\d+))?$/i.exec(t.trim());if(!n)throw Error(`ffprobe: unsupported -select_streams '${t}' (supported: v, a, v:N, a:N)`);let r=n[1].toLowerCase()===`v`?`video`:`audio`,i=e.filter(e=>e.codec_type===r);if(n[2]===void 0)return i;let a=i[Number(n[2])];return a?[a]:[]}const P=[`filename`,`format_name`,`duration`,`start_time`,`bit_rate`],F=[`index`,`codec_type`,`codec_name`,`codec_tag_string`,`profile`,`width`,`height`,`pix_fmt`,`sample_aspect_ratio`,`display_aspect_ratio`,`r_frame_rate`,`avg_frame_rate`,`sample_rate`,`channels`,`channel_layout`,`bit_rate`,`duration`];function I(e,t){let n={};for(let r of P){if(t&&!t.has(r))continue;let i=e[r];i!==void 0&&(n[r]=i)}return n}function L(e,t){let n={};for(let r of F){if(t&&!t.has(r))continue;let i=e[r];i!==void 0&&(n[r]=i)}return n}function R(e,t){let n=N(e.streams,t.selectStreams),r={};return t.showEntries?(t.showEntries.format&&(r.format=I(e.format,t.showEntries.format)),t.showEntries.stream&&(r.streams=n.map(e=>L(e,t.showEntries?.stream))),r):(t.showFormat&&(r.format=I(e.format)),t.showStreams&&(r.streams=n.map(e=>L(e))),r)}function z(e,t){let n=[],r=(e,r)=>{t.noWrappers||n.push(`[${e}]`);for(let[e,i]of Object.entries(r))i!==void 0&&n.push(t.noKey?String(i):`${e}=${i}`);t.noWrappers||n.push(`[/${e}]`)};if(e.format&&r(`FORMAT`,e.format),e.streams)for(let t of e.streams)r(`STREAM`,t);return`${n.join(`
|
|
42
42
|
`)}\n`}function B(e){return/[",\n\r]/.test(e)?`"${e.replace(/"/g,`""`)}"`:e}function V(e,t){let n=[],r=(e,r)=>{let i=Object.values(r).filter(e=>e!==void 0).map(e=>B(String(e)));i.length!==0&&(t.printSection&&i.unshift(e),n.push(i.join(`,`)))};if(e.format&&r(`format`,e.format),e.streams)for(let t of e.streams)r(`stream`,t);return`${n.join(`
|
|
43
43
|
`)}\n`}function H(e){let t=e.codec_name??`?`;if(e.codec_type===`video`){let n=e.width&&e.height?`, ${e.width}x${e.height}`:``,r=e.r_frame_rate?`, ${e.r_frame_rate} fps`:``;return` Stream #0:${e.index}: Video: ${t}${n}${r}`}if(e.codec_type===`audio`){let n=e.sample_rate?`, ${e.sample_rate} Hz`:``,r=e.channel_layout?`, ${e.channel_layout}`:``,i=e.channels===void 0?``:` (${e.channels} ch)`;return` Stream #0:${e.index}: Audio: ${t}${n}${r}${i}`}return` Stream #0:${e.index}: ${e.codec_type}: ${t}`}function U(e){let t=e.format,n=[`Input #0, ${t.format_name??`unknown`}, from '${t.filename??``}':`];if(t.duration!==void 0||t.bit_rate!==void 0){let e=t.duration??`N/A`,r=t.bit_rate?`${Math.round(Number(t.bit_rate)/1e3)} kb/s`:`N/A`;n.push(` Duration: ${e} s, bitrate: ${r}`)}for(let t of e.streams)n.push(H(t));return`${n.join(`
|
|
44
|
-
`)}\n`}function W(e,t){if(!t.structured)return U(e);let n=R(e,t);return t.outputFormat.kind===`json`?`${JSON.stringify(n,null,4)}\n`:t.outputFormat.kind===`csv`?V(n,t.outputFormat):z(n,t.outputFormat)}let G=Promise.resolve();function K(e){let t=G.then(e,e);return G=t.then(()=>void 0,()=>void 0),t}let q=0;function J(e){let t=e.split(`/`).pop()||`input.bin`,n=/\.([A-Za-z0-9]{1,8})$/.exec(t),r=n?`.${n[1].toLowerCase()}`:`.bin`;return q=q+1>>>0,`__probe_${q}_${Date.now()}${r}`}async function Y(t){let n=``;try{return{ffmpeg:await e({onProgress:e=>{n+=`${e}\n`},ipk:c(t),preferMt:
|
|
44
|
+
`)}\n`}function W(e,t){if(!t.structured)return U(e);let n=R(e,t);return t.outputFormat.kind===`json`?`${JSON.stringify(n,null,4)}\n`:t.outputFormat.kind===`csv`?V(n,t.outputFormat):z(n,t.outputFormat)}let G=Promise.resolve();function K(e){let t=G.then(e,e);return G=t.then(()=>void 0,()=>void 0),t}let q=0;function J(e){let t=e.split(`/`).pop()||`input.bin`,n=/\.([A-Za-z0-9]{1,8})$/.exec(t),r=n?`.${n[1].toLowerCase()}`:`.bin`;return q=q+1>>>0,`__probe_${q}_${Date.now()}${r}`}async function Y(t){let n=``;try{return{ffmpeg:await e({onProgress:e=>{n+=`${e}\n`},ipk:c(t),preferMt:s(t.env)===`mt`}),loadLog:n}}catch(e){return{stdout:``,stderr:`ffprobe: failed to load wasm: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function X(e,n,r){try{await e.exec([`-hide_banner`,`-i`,n])}catch(n){if(i(n))return t(e),{stdout:``,stderr:`ffprobe: wasm core faulted (${n instanceof Error?n.message:String(n)}); recycled shared instance\n`,exitCode:1};r.text+=`${n instanceof Error?n.message:String(n)}\n`}return null}function Z(e,t,n){e.format.filename=t.inputPath??e.format.filename;try{return{stdout:W(e,t),stderr:t.quiet?``:n,exitCode:0}}catch(e){return{stdout:``,stderr:`ffprobe: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function Q(e,t,n){let{ffmpegEngineFromEnv:r}=await import(`./engine-B-OPe78i.js`),i=r(n.env);if(i===`wasm`)return null;let{probeViaMediabunny:a}=await import(`./bunny-probe-6xn_IAte.js`),o=await a(t,e.inputPath??``);return o?Z(o,e,``):i===`mediabunny`?{stdout:``,stderr:`ffprobe: FFMPEG_ENGINE=mediabunny: input is not a container mediabunny reads
|
|
45
45
|
`,exitCode:1}:null}async function $(e,t){if(!e.inputPath)return{stdout:``,stderr:`ffprobe: at least one input file must be specified
|
|
46
|
-
`,exitCode:1};let n=t.fs.resolvePath(t.cwd,e.inputPath);if(!await t.fs.exists(n))return{stdout:``,stderr:`ffprobe: input file not found: ${e.inputPath}\n`,exitCode:1};let r=await
|
|
46
|
+
`,exitCode:1};let n=t.fs.resolvePath(t.cwd,e.inputPath);if(!await t.fs.exists(n))return{stdout:``,stderr:`ffprobe: input file not found: ${e.inputPath}\n`,exitCode:1};let r=await o(t.fs,n);return await Q(e,r,t)||K(()=>te(e,r,t))}async function te(e,n,r){let a=u(),o=J(e.inputPath??``),s=ee(a,o),c=await Y(r);if(`exitCode`in c)return c;let{ffmpeg:f,loadLog:p}=c,m={text:``},h=e=>{m.text+=`${e.message}\n`};f.on(`log`,h);let g=!1;try{await d(f,a,[{name:o,data:n}]);let t=await X(f,s,m);if(t)return g=!0,t;let r=C(m.text,e.inputPath??``);return r?Z(r,e,p):{stdout:``,stderr:`ffprobe: could not parse media info from ffmpeg log\n${e.quiet?``:m.text||p}`,exitCode:1}}catch(e){return i(e)&&(g=!0,t(f)),{stdout:``,stderr:`ffprobe: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}finally{try{f.off(`log`,h)}catch{}if(!g)try{await l(f,a)}catch{}}}async function ne(e,t){if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return E();if(e.includes(`-version`)||e.includes(`--version`))return D(t);let n;try{n=M(e)}catch(e){return{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return $(n,t)}export{ne as runFfprobe};
|
|
@@ -92,7 +92,7 @@ Examples:
|
|
|
92
92
|
--authorize-url 'https://auth.x.ai/oauth2/auth?...' \\
|
|
93
93
|
--redirect-pattern 'http://127.0.0.1:56121/*'
|
|
94
94
|
curl -H "Authorization: Bearer $(oauth-token github)" https://api.github.com/user
|
|
95
|
-
`}async function d(n,r){let i=await import(`./account-store-
|
|
95
|
+
`}async function d(n,r){let i=await import(`./account-store-BEqmysw9.js`).then(e=>e.t),a=await import(`./providers-DVvrXbtx.js`).then(e=>e.r);if(t(n,{valueFlags:c}))return{stdout:u(),stderr:``,exitCode:0};let o=e(n,{value:c,bool:l});if(`error`in o)return H(`oauth-token: ${o.error}`);if(o.bools.has(`--list`))return U(i.getAccounts,a.getRegisteredProviderIds,a.getRegisteredProviderConfig,i.getOAuthAccountInfo);if(o.bools.has(`--check`))return T(o.positionals);if(o.bools.has(`--expire`))return O(o.positionals);if(o.bools.has(`--renew`))return k(o.positionals);if(o.values.has(`--from-file`)||o.bools.has(`--intercept`))return L(o,n,r);let s=f(o);if(!s.ok)return s.result;let d=o.bools.has(`--force-login`),m=p(o,i,a);if(!m.ok)return m.result;let _=h(m.value,a.getRegisteredProviderConfig);if(!_.ok)return _.result;if(!d){let e=await g(m.value,_.value,i.getOAuthAccountInfo,i.ensureOAuthMaskReplica,s.value);if(e?.ok)return e.value;if(e)return e.result}return b(m.value,_.value,s.value,i.getOAuthAccountInfo,i.ensureOAuthMaskReplica)}function f(e){if(!e.values.has(`--scope`))return{ok:!0,value:void 0};let t=e.values.get(`--scope`)?.trim();return!t||t.startsWith(`-`)?{ok:!1,result:H(`oauth-token: --scope requires a value`)}:{ok:!0,value:t}}function p(e,t,n){if(e.values.has(`--provider`)){let t=e.values.get(`--provider`);return t?{ok:!0,value:t}:{ok:!1,result:H(`oauth-token: --provider requires a value`)}}if(e.positionals.length>0)return{ok:!0,value:e.positionals[0]};let r=t.getSelectedProvider();if(m(n.getRegisteredProviderConfig(r)))return{ok:!0,value:r};let i=n.getRegisteredProviderIds().find(e=>m(n.getRegisteredProviderConfig(e)));return i?{ok:!0,value:i}:{ok:!1,result:H(`oauth-token: no OAuth providers configured`)}}function m(e){return!!(e?.isOAuth&&(e.onOAuthLogin||e.onOAuthLoginIntercepted))}function h(e,t){let n=t(e);return n?m(n)?{ok:!0,value:n}:{ok:!1,result:H(`oauth-token: provider "${e}" is not an OAuth provider`)}:{ok:!1,result:H(`oauth-token: unknown provider "${e}"`)}}async function g(e,t,n,r,i){let a=n(e);return a&&!a.expired?_(e,a,i,r):!a?.expired||!t.onSilentRenew||!await C(t.onSilentRenew)?null:_(e,n(e),i,r)}async function _(e,t,n,r){if(n&&!s(t?.scopes,n))return null;let i=v(t?.maskedValue,t?.token);if(i)return{ok:!0,value:i};if(!t?.token)return null;let a=await r(e)??{},o=v(a.maskedValue,t.token);return o?{ok:!0,value:o}:{ok:!1,result:y(e,a.error)}}function v(e,t){return!e||t&&e===t?null:{stdout:`${e}\n`,stderr:``,exitCode:0}}function y(e,t){return H(`oauth-token: token held for ${e} but no masked replica${t?` (${t})`:``}`)}async function b(e,t,n,r,i){try{let a=await x(e,t,n);return a.error?a.error:S(e,r,i,a.succeeded)}catch(t){let n=t instanceof Error?t.message:String(t);return t instanceof Error&&t.name===`OAuthLaunchError`?(console.error(`[oauth-token] Provider ${e}: login could not be shown:`,n),H(`oauth-token: ${n}`)):(console.error(`[oauth-token] Provider ${e}: login failed:`,n),H(`oauth-token: login failed: ${n}`))}}async function x(e,t,n){let r=n?{scopes:n}:void 0,i=!1,a=()=>{i=!0};if(t.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:n}=await import(`./oauth-service-IlBYPvwr.js`),o=await n();return o?(await t.onOAuthLoginIntercepted(o,a,r),{error:null,succeeded:i}):{error:H(`oauth-token: provider "${e}" needs the controlled-browser interceptor, but no CDP transport is available in this runtime.`),succeeded:!1}}if(t.onOAuthLogin){let{createOAuthLauncher:e}=await import(`./oauth-service-IlBYPvwr.js`);return await t.onOAuthLogin(e(),a,r),{error:null,succeeded:i}}return{error:H(`oauth-token: provider "${e}" has no OAuth login hook`),succeeded:!1}}async function S(e,t,n,r){if(!r)return console.error(`[oauth-token] Provider ${e}: interactive login was not completed`),H(`oauth-token: interactive login was not completed (cancelled, timed out, or no one could approve it)`);let i=t(e);if(i?.token&&!i.expired){let t=v(i.maskedValue,i.token);if(t)return t;let r=await n(e)??{};return v(r.maskedValue,i.token)||y(e,r.error)}return i?.token?H(`oauth-token: login completed but the saved token is already expired`):(console.error(`[oauth-token] Provider ${e}: login completed but no token was saved`),H(`oauth-token: login completed but no token was saved`))}async function C(e){try{return await e()!==null}catch{return!1}}function w(e,t,n,r,i){let a=e[0];if(a)return a;let o=n();return r(o)?.[t]?o:i().find(e=>r(e)?.[t])}async function T(e){let{getSelectedProvider:t,getOAuthAccountInfo:n}=await import(`./account-store-BEqmysw9.js`).then(e=>e.t),{getRegisteredProviderConfig:r,getRegisteredProviderIds:i}=await import(`./providers-DVvrXbtx.js`).then(e=>e.r),a=w(e,`onValidateToken`,t,r,i);if(!a)return H(`oauth-token --check: no provider supports an upstream token check`);let o=r(a);if(!o)return H(`oauth-token --check: unknown provider "${a}"`);if(!o.onValidateToken)return H(`oauth-token --check: provider "${a}" cannot be checked upstream (no onValidateToken hook); only locally stored state is known.`);let s=n(a),c=[`oauth-token --check ${a}`,` stored token: ${F(s)}`];if(!s)return c.push(` upstream check: skipped — nothing to check`,...M(a)),{stdout:c.join(`
|
|
96
96
|
`)+`
|
|
97
97
|
`,stderr:``,exitCode:3};let l=await j(o);if(l?.status===`accepted`){let e=l.userName?` (as ${l.userName})`:``;return c.push(` upstream check: ACCEPTED${e} — the provider honoured the token`),{stdout:c.join(`
|
|
98
98
|
`)+`
|
|
@@ -100,7 +100,7 @@ Examples:
|
|
|
100
100
|
`)+`
|
|
101
101
|
`,stderr:``,exitCode:e}}return c.push(` upstream check: UNKNOWN — the check itself could not run${D(l?.detail)}`,` This says nothing about the token. Retry when the provider is reachable.`),{stdout:c.join(`
|
|
102
102
|
`)+`
|
|
103
|
-
`,stderr:``,exitCode:1}}function E(e,t,n){let r=` upstream check: REJECTED — the provider refused the token${D(n)}`;return t?[r,` A stored refresh token may still be able to replace it — silent renewal`,` has not been tried yet.`,``,` → Next: oauth-token ${e} --renew`,` If that is declined too: oauth-token ${e} --force-login (needs a human).`]:[r,` This provider has no silent renewal, so nothing automated is left.`,...M(e)]}function D(e){return e?` (${e})`:``}async function O(e){let{getAccounts:t,getSelectedProvider:n,saveOAuthAccount:r}=await import(`./account-store-
|
|
103
|
+
`,stderr:``,exitCode:1}}function E(e,t,n){let r=` upstream check: REJECTED — the provider refused the token${D(n)}`;return t?[r,` A stored refresh token may still be able to replace it — silent renewal`,` has not been tried yet.`,``,` → Next: oauth-token ${e} --renew`,` If that is declined too: oauth-token ${e} --force-login (needs a human).`]:[r,` This provider has no silent renewal, so nothing automated is left.`,...M(e)]}function D(e){return e?` (${e})`:``}async function O(e){let{getAccounts:t,getSelectedProvider:n,saveOAuthAccount:r}=await import(`./account-store-BEqmysw9.js`).then(e=>e.t),{getRegisteredProviderConfig:i,getRegisteredProviderIds:a}=await import(`./providers-DVvrXbtx.js`).then(e=>e.r),o=w(e,`onSilentRenew`,n,i,a);if(!o)return H(`oauth-token --expire: no provider supports silent renewal`);let s=i(o);if(!s)return H(`oauth-token --expire: unknown provider "${o}"`);if(!s.onSilentRenew)return H(`oauth-token --expire: provider "${o}" has no onSilentRenew hook`);let c=t().find(e=>e.providerId===o);if(!c?.accessToken)return H(`oauth-token --expire: no stored OAuth account for "${o}"`);try{await r({...c,accessToken:c.accessToken,tokenExpiresAt:Date.now()-1e3})}catch(e){return H(`oauth-token --expire: failed to update "${o}": ${e instanceof Error?e.message:String(e)}`)}return{stdout:`oauth-token ${o}: stored token marked expired; next network op will trigger silent renewal.\n`,stderr:``,exitCode:0}}async function k(e){let{getSelectedProvider:t,getOAuthAccountInfo:n}=await import(`./account-store-BEqmysw9.js`).then(e=>e.t),{getRegisteredProviderConfig:r,getRegisteredProviderIds:i}=await import(`./providers-DVvrXbtx.js`).then(e=>e.r),a=w(e,`onSilentRenew`,t,r,i);if(!a)return H(`oauth-token --renew: no provider supports silent renewal`);let o=r(a);if(!o)return H(`oauth-token --renew: unknown provider "${a}"`);if(!o.onSilentRenew)return H(`oauth-token --renew: provider "${a}" has no onSilentRenew hook`);let s=n(a),c=s?.token,l=[`oauth-token --renew ${a}`];l.push(` stored token: ${F(s)}`);let u=null,d=null;try{u=await o.onSilentRenew()}catch(e){d=e instanceof Error?e.message:String(e)}if(u){let e=n(a),t=!!(c&&e?.token&&c!==e.token);return l.push(` silent renewal: SUCCESS${t?` — token refreshed`:` (token unchanged)`}`),l.push(` renewed token: ${F(e)}`),{stdout:l.join(`
|
|
104
104
|
`)+`
|
|
105
105
|
`,stderr:``,exitCode:0}}if(d)return l.push(` silent renewal: ERROR — ${d}`,...P(a)),{stdout:l.join(`
|
|
106
106
|
`)+`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{i as e}from"./just-bash-compat-
|
|
1
|
+
import{i as e}from"./just-bash-compat-B-SPHuh_.js";const t=8192;function n(e){return Math.min(e.maxInputBytes,Math.floor(e.maxLiveBytes/2))}const r=new Set([`g`,`t`,`T`,`m`,`e`,`f`,`r`,`d`,`j`,`A`,`B`,`C`]),i=new Set([`glob`,`iglob`,`type`,`type-not`,`type-add`,`type-clear`,`max-count`,`regexp`,`file`,`replace`,`max-depth`,`max-filesize`,`context-separator`,`threads`,`ignore-file`,`pre`,`pre-glob`,`sort`]),a=new Set([`g`,`t`,`T`,`d`,`L`,`u`,`z`]),o=new Set([`glob`,`iglob`,`glob-case-insensitive`,`type`,`type-not`,`type-add`,`type-clear`,`max-depth`,`max-filesize`,`hidden`,`no-ignore`,`no-ignore-dot`,`no-ignore-vcs`,`follow`,`unrestricted`,`ignore-file`,`search-zip`]),s=new Set([`e`,`f`]),c=new Set([`regexp`,`file`]);function l(){return{help:!1,typeList:!1,filesMode:!1,searchBinary:!1,hasPatternOption:!1,unrestricted:0,endOfOptions:!1,nullSeparated:!1,noFilename:!1,withFilename:!1,countMode:!1,includeZero:!1,flagTokens:[],fileSelectArgs:[],positionals:[]}}function u(e){if(!e.startsWith(`--`)||e===`--`)return null;let t=e.indexOf(`=`);return t===-1?e.slice(2):e.slice(2,t)}function d(e,t){return t+1>=e.length?null:{value:e[t+1],next:t+1}}function f(e,t,n){return n.has(e)&&!t.has(e)}function p(e,t){t===`--help`&&(e.help=!0),t===`--type-list`&&(e.typeList=!0),t===`--files`&&(e.filesMode=!0),(t===`--text`||t===`-a`)&&(e.searchBinary=!0),(t===`--null`||t===`-0`)&&(e.nullSeparated=!0),(t===`--no-filename`||t===`-h`)&&(e.noFilename=!0),(t===`--with-filename`||t===`-H`)&&(e.withFilename=!0),(t===`--count`||t===`--count-matches`)&&(e.countMode=!0),t===`--include-zero`&&(e.includeZero=!0)}function m(e,t,n,r){let a=u(t);if(!a)return r;e.flagTokens.push(t),(a===`count`||a===`count-matches`)&&(e.countMode=!0),a===`include-zero`&&(e.includeZero=!0),c.has(a)&&(e.hasPatternOption=!0);let s=t.includes(`=`)?t.slice(t.indexOf(`=`)+1):void 0;if(i.has(a)){if(s!==void 0)return f(a,c,o)&&e.fileSelectArgs.push(t),r;let i=d(n,r);return i?(e.flagTokens.push(i.value),f(a,c,o)&&e.fileSelectArgs.push(`--${a}`,i.value),i.next):r}return o.has(a)&&e.fileSelectArgs.push(t),a===`unrestricted`&&(e.unrestricted+=1),r}function h(e,t){t===`a`&&(e.searchBinary=!0),t===`0`&&(e.nullSeparated=!0),t===`h`&&(e.noFilename=!0),t===`H`&&(e.withFilename=!0),t===`c`&&(e.countMode=!0),t===`u`&&(e.unrestricted+=1,e.fileSelectArgs.push(`-u`)),s.has(t)&&(e.hasPatternOption=!0)}function g(e,t,n,r,i){if(n.length>0)return f(t,s,a)&&e.fileSelectArgs.push(`-${t}`,n),i;let o=d(r,i);return o?(e.flagTokens.push(o.value),f(t,s,a)&&e.fileSelectArgs.push(`-${t}`,o.value),o.next):i}function _(e,t,n,i){let o=t.slice(1);if(o.length===0)return e.positionals.push(t),i;e.flagTokens.push(t);for(let t=0;t<o.length;t++){let s=o[t];if(h(e,s),r.has(s))return g(e,s,o.slice(t+1),n,i);a.has(s)&&s!==`u`&&e.fileSelectArgs.push(`-${s}`)}return i}function v(e){let t=l();for(let n=0;n<e.length;n++){let r=e[n];if(r===`--`){t.endOfOptions=!0,t.positionals.push(...e.slice(n+1));break}if(r===`-`||!r.startsWith(`-`)){t.positionals.push(r);continue}if(p(t,r),u(r)){n=m(t,r,e,n);continue}n=_(t,r,e,n)}return t.unrestricted>=3&&(t.searchBinary=!0),t}function y(e){return e.hasPatternOption?e.positionals:e.positionals.slice(1)}function b(e){return e.some(e=>e.startsWith(`-`)&&e!==`-`)}function x(e){let t=[`--files`];return e.nullSeparated&&t.push(`--null`),t.push(...e.fileSelectArgs,...y(e)),t}function S(e,t,n){let r=[...e.flagTokens];n&&!e.noFilename&&!e.withFilename&&r.push(`-H`);let i=e.hasPatternOption?void 0:e.positionals[0];return i!==void 0&&(e.endOfOptions||b([i]))?(r.push(`-e`,i),[...r,...t]):i===void 0?[...r,...t]:[...r,i,...t]}function C(e,t){return(t?e.split(`\0`):e.split(`
|
|
2
2
|
`)).map(e=>e.trimEnd()).filter(e=>e.length>0)}function w(e,t){let n=Math.min(e.byteLength,t);for(let t=0;t<n;t++)if(e[t]===0)return!0;return!1}async function T(e,t,n,r){for(let i of[e,r]){if(!i||typeof i!=`object`)continue;let e=i.readFileRange;if(typeof e==`function`)return e.call(i,t,0,n)}let i=await e.readFileBuffer(t);return i.byteLength>n?i.subarray(0,n):i}async function E(e,n,r){try{return w(await T(e,n,t,r),t)}catch{return!1}}async function D(e,t){if(t.length===0)return{missing:[],includeDirectory:!0};let n=[],r=!1;for(let i of t)try{(await e.fs.stat(e.fs.resolvePath(e.cwd,i))).isDirectory&&(r=!0)}catch{n.push(i)}return{missing:n,includeDirectory:r}}function O(e){return{stdout:``,stderr:e.map(e=>`rg: ${e}: No such file or directory\n`).join(``),exitCode:2}}function k(e,t){return{stdout:t.stdout,stderr:`${e.stderr}${t.stderr}`,exitCode:t.exitCode===0||t.exitCode===1?Math.max(e.exitCode,2):t.exitCode}}async function A(e,t,n){let r=[],i=0;for(let a of t){let t=e.fs.resolvePath(e.cwd,a),o=0;try{let n=await e.fs.stat(t);if(!n.isFile)continue;o=n.size}catch{continue}!n&&await E(e.fs,t,e.fsIdentity)||(r.push(a),i+=o)}return{files:r,bytes:i}}function j(e){return{stdout:``,stderr:`rg: searchable input size limit exceeded (${e} bytes)\n`,exitCode:2}}function M(e,t){return!e.countMode||e.includeZero||t.exitCode!==1||t.stdout!==`0`&&t.stdout!==`0
|
|
3
3
|
`?t:{...t,stdout:``}}async function N(t,r){if(!r.origCommand)return{stdout:``,stderr:`rg: command not found
|
|
4
4
|
`,exitCode:127};let i=r.origCommand,a=v(t);if(a.help||a.typeList||a.filesMode)return i(t);let o=e(r.stdin).length,s=y(a);if(s.length===0&&o>0)return M(a,await i(t));let{missing:c,includeDirectory:l}=await D(r,s),u=await i(x(a)),d=u.exitCode!==0||c.length>0,f=c.length>0?O(c):u.exitCode===0?null:u;if(d&&u.stdout.length===0)return f??u;let{files:p,bytes:m}=await A(r,C(u.stdout,a.nullSeparated),a.searchBinary);if(p.length===0)return f??{stdout:``,stderr:``,exitCode:1};let h=n(r.limits);if(m>h)return j(h);let g=await i(S(a,p,l));return f?k(f,g):g}export{N as runRg};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import{t as e}from"./subcommand-flags-BZi7j78Q.js";import{r as t,t as n}from"./subcommand-help-CgO7wRS5.js";import{i as r,r as i}from"./jsh-discovery-D3Gk1cKA.js";import{a,i as o,r as s,s as c,t as l}from"./supervisor-BtH2-9sE.js";const u=`usage: jshd <command> [options]
|
|
2
|
+
|
|
3
|
+
Durable background jsh units: one realm worker each, restored on reload
|
|
4
|
+
when --enable is set. Keep-alive follows the realm (pending timers and
|
|
5
|
+
host-event subscriptions keep the unit up; a script that returns with
|
|
6
|
+
nothing pending exits and is subject to the restart policy).
|
|
7
|
+
|
|
8
|
+
Commands:
|
|
9
|
+
start [-n <name>] [--enable] [--restart always|on-failure|no]
|
|
10
|
+
[--cwd <dir>] [--env K=V] <script.jsh | skill-command> [args...]
|
|
11
|
+
Run a unit in the background (prints pid)
|
|
12
|
+
ls [--json] List units (name, pid, state, restarts, uptime, enabled)
|
|
13
|
+
status <name> Show one unit
|
|
14
|
+
stop <name> Stop a unit (does not restart)
|
|
15
|
+
restart <name> Stop then start a unit
|
|
16
|
+
rm <name> Stop and delete the unit record and its log
|
|
17
|
+
logs <name> [-f] [-n <lines>]
|
|
18
|
+
Print the unit log (follow, last N lines)
|
|
19
|
+
enable <name> Start this unit again after a reload
|
|
20
|
+
disable <name> Do not restore this unit on reload (leave it running)
|
|
21
|
+
|
|
22
|
+
Notes:
|
|
23
|
+
- Records live in /workspace/.jshd/<name>.json; logs in /workspace/.jshd/log/<name>.log.
|
|
24
|
+
- ps lists the unit as kind jsh; kill <pid> stops it and does not restart.
|
|
25
|
+
- Only the restart policy restarts. A crash-loop cap marks the unit errored
|
|
26
|
+
and reports through a lick.
|
|
27
|
+
- Where DedicatedWorker is unavailable (thin extension sandbox iframes)
|
|
28
|
+
start still runs as best effort; ls says the unit is not durable there.
|
|
29
|
+
`,d=new Set([`-n`,`--name`,`--restart`,`--cwd`,`--env`]),f=new Set([`--enable`]),p=new Set([`always`,`on-failure`,`no`]);function m(e,t){let n={restart:`always`,enabled:!1,cwd:t.cwd,env:{},positionals:[]},r=h(e,t.cwd,n);if(!r.ok)return r;if(n.positionals.length===0)return{ok:!1,error:`missing script.jsh or skill-command`};let i=n.positionals[0],a=n.name??y(i);return c(a)?{ok:!0,record:{name:a,argv:[i,...n.positionals.slice(1)],cwd:n.cwd,env:n.env,restart:n.restart,enabled:n.enabled}}:{ok:!1,error:`invalid unit name '${a}' (use letters, digits, '.', '_' or '-')`}}function h(e,t,n){for(let r=0;r<e.length;r++){let i=e[r];if(i===`--`)return n.positionals.push(...e.slice(r+1)),{ok:!0};if(n.positionals.length>0||g(i)){n.positionals.push(i);continue}let a=_(i,e,r,t,n);if(!a.ok)return a;r=a.index}return{ok:!0}}function g(e){return e===`-`||!e.startsWith(`-`)||/^-[\d.]+$/.test(e)}function _(e,t,n,r,i){let a=e.indexOf(`=`),o=a===-1?e:e.slice(0,a);if(f.has(o))return a===-1?(i.enabled=!0,{ok:!0,index:n}):{ok:!1,error:`${o} does not take a value`};if(!d.has(o))return{ok:!1,error:`unknown flag: ${o}`};let s=a===-1?t[n+1]:e.slice(a+1);if(s===void 0)return{ok:!1,error:`${o} requires a value`};let c=v(o,s,r,i);return c?{ok:!1,error:c}:{ok:!0,index:a===-1?n+1:n}}function v(e,t,n,r){if(e===`-n`||e===`--name`)return r.name=t,null;if(e===`--restart`)return p.has(t)?(r.restart=t,null):`--restart must be always, on-failure, or no`;if(e===`--cwd`)return r.cwd=t.startsWith(`/`)?t:b(n,t),null;let i=t.indexOf(`=`);return i<=0?`--env requires K=V`:(r.env[t.slice(0,i)]=t.slice(i+1),null)}function y(e){return(e.split(`/`).pop()??e).replace(/\.jsh$/i,``).replace(/^[^A-Za-z0-9]+/,``)||`unit`}function b(e,t){return e===`/`?`/${t}`:`${e.replace(/\/+$/,``)}/${t}`}async function x(e,t,n){let r=t.fs.resolvePath(t.cwd,e);if(C(e)||e.endsWith(`.jsh`))return await t.fs.exists(r)?{path:r}:{error:`cannot find script '${e}'`};let i=await S(e,t,n);return i?{path:i}:await t.fs.exists(r)?{path:r}:{error:`cannot find script or skill-command '${e}'`}}async function S(e,t,n){let a=t.env.get(`PATH`),o=a===void 0?void 0:r(a);if(n)return(await n.getJshCommands(o)).get(e);let s=t.fs;if(typeof s.walk==`function`)return(await i(s,o)).get(e)}function C(e){return e.startsWith(`/`)||e.startsWith(`./`)||e.startsWith(`../`)||e.includes(`/`)}const w=[`-n`,`--name`,`--restart`,`--cwd`,`--env`],T=[`-n`,`--lines`];async function E(e,r,i={}){if(e.length===0||n(e,{valueFlags:w}))return J(u.endsWith(`
|
|
30
|
+
`)?u:`${u}\n`);let a=e[0],o=e.slice(1);if(n(o,{valueFlags:a===`logs`?T:w}))return J(t(`jshd`,a,u));switch(a){case`start`:return D(o,r,i);case`ls`:return O(o,r,i);case`status`:return k(o,r,i);case`stop`:return A(`stop`,o,r,i);case`restart`:return A(`restart`,o,r,i);case`rm`:return A(`rm`,o,r,i);case`logs`:return j(o,r,i);case`enable`:return M(o,r,i,!0);case`disable`:return M(o,r,i,!1);default:return Y(`unknown command: ${a}`)}}async function D(e,t,n){let r=L(t);if(r)return r;let i=m(e,{cwd:t.cwd,env:t.env});if(!i.ok)return Y(i.error);let o=await x(i.record.argv[0],t,n.scriptCatalog);if(`error`in o)return Y(o.error);let s=await a(t.fs,i.record.name),c={...i.record,argv:[o.path,...i.record.argv.slice(1)],createdAt:s?.createdAt??new Date().toISOString(),enabled:i.record.enabled||(s?.enabled??!1)},l=P(t,n);if(!l)return Y(`kernel host has not booted yet — try again in a moment`);try{let{pid:e,durable:t}=await l.start(c),n=t?``:` (not durable in this runtime: no DedicatedWorker)
|
|
31
|
+
`;return J(`jshd: started '${c.name}' (pid ${e})${n}\n`)}catch(e){return Y(e instanceof Error?e.message:String(e))}}async function O(t,n,r){let i=e(t,{bool:[`--json`]});if(`error`in i)return Y(i.error);let a=P(n,r),o=a?.list()??[],c=R(await s(n.fs),o,a?.isDurable()??typeof Worker<`u`);if(i.bools.has(`--json`))return J(`${JSON.stringify(c)}\n`);if(c.length===0)return J(`no jshd units
|
|
32
|
+
`);let l=[`NAME PID STATE RESTARTS UP ENABLED DURABLE`];for(let e of c)l.push(B(e));return c.some(e=>!e.durable)&&l.push(`note: units are not durable here (no DedicatedWorker); ls reports that.`),J(`${l.join(`
|
|
33
|
+
`)}\n`)}async function k(e,t,n){let r=e[0];if(!r)return Y(`missing unit name`);let i=P(t,n),o=i?.status(r),s=o?null:await a(t.fs,r);if(!o&&!s)return Y(`unknown unit '${r}'`);let c=o??z(s,i?.isDurable()??typeof Worker<`u`);return J([`name: ${c.name}`,`pid: ${c.pid??`-`}`,`state: ${c.state}`,`restarts: ${c.restarts}`,`uptime: ${V(c.uptimeMs)}`,`enabled: ${c.enabled}`,`restart: ${c.restart}`,`durable: ${c.durable}`,`cwd: ${c.cwd}`,`argv: ${c.argv.join(` `)}`,c.lastExitCode===null?null:`last-exit: ${c.lastExitCode}`].filter(Boolean).join(`
|
|
34
|
+
`)+`
|
|
35
|
+
`)}async function A(e,t,n,r){let i=t[0];if(!i)return Y(`missing unit name`);let o=L(n);if(o)return o;let s=P(n,r);if(!s)return Y(`kernel host has not booted yet — try again in a moment`);if(e===`stop`)return await s.stop(i)?J(`jshd: stopped '${i}'\n`):await a(n.fs,i)?J(`jshd: unit '${i}' is not running\n`):Y(`unknown unit '${i}'`);if(e===`restart`){let e=await s.restart(i);return e?J(`jshd: restarted '${i}' (pid ${e.pid})\n`):Y(`unknown unit '${i}'`)}return!await a(n.fs,i)&&!s.status(i)?Y(`unknown unit '${i}'`):(await s.rm(i),J(`jshd: removed '${i}'\n`))}async function j(t,n,r){let i=e(t,{value:T,bool:[`-f`,`--follow`]});if(`error`in i)return Y(i.error);let a=i.positionals[0];if(!a)return Y(`missing unit name`);let s=i.bools.has(`-f`)||i.bools.has(`--follow`),c=i.values.get(`-n`)??i.values.get(`--lines`),l=c===void 0?void 0:Number.parseInt(c,10);if(c!==void 0&&(!Number.isFinite(l)||l<0))return Y(`-n must be a non-negative integer`);let u=await o(n.fs,a),d=l===void 0?u:H(u,l);if(!s)return J(d.endsWith(`
|
|
36
|
+
`)||d.length===0?d:`${d}\n`);let f=W(n),p=G(n);return f?U({ctx:n,name:a,displayed:d,seen:u.length,signal:f,sink:p}):(p?.(d),J(p?``:d.endsWith(`
|
|
37
|
+
`)||d.length===0?d:`${d}\n`))}async function M(e,t,n,r){let i=e[0];if(!i)return Y(`missing unit name`);let a=L(t);if(a)return a;let o=P(t,n);return(o?await o.setEnabled(i,r):await N(t,i,r))?J(`jshd: ${r?`enabled`:`disabled`} '${i}'\n`):Y(`unknown unit '${i}'`)}async function N(e,t,n){let r=await a(e.fs,t);if(!r)return null;let i={...r,enabled:n},{writeUnitRecord:o}=await import(`./supervisor-BtH2-9sE.js`).then(e=>e.o);return await o(e.fs,i),i}function P(e,t){let n=l();if(n)return n;let r=t.processManager??K();if(!r)return null;let i=q();return l({fs:e.fs,processManager:r,...i?{lickManager:i}:{},...t.realmFactory?{realmFactory:t.realmFactory}:{},buildContext:t=>F(e,t)})}function F(e,t){let n=new Map(e.env);for(let[e,r]of Object.entries(t.env))n.set(e,r);return{...e,cwd:t.cwd,env:n}}function I(e){if(typeof e!=`object`||!e)return!1;let t=e.canWrite;return typeof t==`function`&&!t.call(e,`/workspace/.jshd`)}function L(e){return I(e.fs)?Y(`not available inside a restricted scoop`):null}function R(e,t,n){let r=new Map(t.map(e=>[e.name,e]));return[...new Set([...e.map(e=>e.name),...r.keys()])].sort().map(t=>r.get(t)||z(e.find(e=>e.name===t),n))}function z(e,t){return{name:e.name,pid:null,state:`stopped`,restarts:0,uptimeMs:null,enabled:e.enabled,restart:e.restart,argv:e.argv,cwd:e.cwd,durable:t,lastExitCode:null}}function B(e){let t=e.pid===null?`-`:String(e.pid),n=V(e.uptimeMs);return[e.name.padEnd(15),t.padEnd(7),e.state.padEnd(9),String(e.restarts).padEnd(9),n.padEnd(6),String(e.enabled).padEnd(8),String(e.durable)].join(` `)}function V(e){if(e===null)return`-`;let t=Math.max(0,Math.round(e/1e3));return t<60?`${t}s`:`${Math.floor(t/60)}m${t%60}s`}function H(e,t){if(t===0)return``;let n=e.split(`
|
|
38
|
+
`);return n[n.length-1]===``&&n.pop(),`${n.slice(-t).join(`
|
|
39
|
+
`)}${e.endsWith(`
|
|
40
|
+
`)?`
|
|
41
|
+
`:``}`}async function U(e){let{ctx:t,name:n,displayed:r,signal:i,sink:a}=e,s=e.seen,c=a?[]:[r];for(a?.(r);!i.aborted&&(await new Promise(e=>{let t=setTimeout(e,200);i.addEventListener(`abort`,()=>{clearTimeout(t),e()},{once:!0})}),!i.aborted);){let e=await o(t.fs,n);if(e.length>s){let t=e.slice(s);s=e.length,a?a(t):c.push(t)}}if(a)return J(``);let l=c.join(``);return J(l.endsWith(`
|
|
42
|
+
`)||l.length===0?l:`${l}\n`)}function W(e){return e.signal}function G(e){let t=e;return typeof t.writeStdout==`function`?t.writeStdout.bind(t):void 0}function K(){let e=globalThis.__slicc_pm;return e&&typeof e==`object`&&typeof e.spawn==`function`?e:null}function q(){let e=globalThis.__slicc_lickManager;if(e&&typeof e.emitEvent==`function`)return e}function J(e){return{stdout:e,stderr:``,exitCode:0}}function Y(e){return{stdout:``,stderr:`jshd: ${e}\n`,exitCode:1}}export{E as runJshd};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{t as e}from"./record-
|
|
1
|
+
import{t as e}from"./record-ChU1ND2B.js";import{t,u as n}from"./descriptor-S4Jug1iP.js";import{t as r}from"./subcommand-flags-BZi7j78Q.js";import{t as i}from"./subcommand-help-CgO7wRS5.js";import{a,r as o,t as s}from"./memory-budget-Bcf7Eolo.js";import{d as c}from"./kernel-worker-Dseu067f.js";const l=`usage: memory <command> [options]
|
|
2
2
|
|
|
3
3
|
Durable cone memory: one file per cone, rewritten by the memory-curator
|
|
4
4
|
scoop after a chat freezes. This command inspects that system and pokes it.
|
|
@@ -38,14 +38,14 @@ Examples:
|
|
|
38
38
|
memory log --limit 5
|
|
39
39
|
memory curate --archive 2026-09-11T08-30-00Z-fix-build.md
|
|
40
40
|
memory dream --all
|
|
41
|
-
`,u=[`--cone`,`--archive`,`--limit`];function d(e){return{stdout:e,stderr:``,exitCode:0}}function f(e){return{stdout:``,stderr:`memory: ${e}\n`,exitCode:1}}function p(){let e=globalThis.__slicc_memory;return e&&typeof e.curate==`function`&&typeof e.dream==`function`?e:null}async function m(){let{isMemoryV2Enabled:e}=await import(`./memory-v2-flag-
|
|
42
|
-
`)||o===``?o:`${o}\n`)}const x=`/sessions/.curation/health.json`;async function S(e){let t=await h(e,x);if(t===null)return null;try{let e=JSON.parse(t);return typeof e.at!=`string`||!Array.isArray(e.failures)?null:{at:e.at,failures:e.failures.map(String)}}catch{return null}}async function C(e){let t=await
|
|
41
|
+
`,u=[`--cone`,`--archive`,`--limit`];function d(e){return{stdout:e,stderr:``,exitCode:0}}function f(e){return{stdout:``,stderr:`memory: ${e}\n`,exitCode:1}}function p(){let e=globalThis.__slicc_memory;return e&&typeof e.curate==`function`&&typeof e.dream==`function`?e:null}async function m(){let{isMemoryV2Enabled:e}=await import(`./memory-v2-flag-BHVbti6Z.js`);return!e()}async function h(e,t){try{let n=await e.readFile(t,{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}catch{return null}}async function g(n){let r=[e];try{let e=await n.readDir(t);for(let t of e)t.type===`directory`&&r.push(t.name)}catch{}return r}function _(e){return n({parentJid:null,folder:e}).memoryPath}async function v(e,t){let n=await g(e);return n.includes(t)?{folder:t}:{error:`unknown cone "${t}" (cones: ${n.join(`, `)})`}}function y(e){return e.memoryFailed===void 0?e.memoryPending?`pending`:e.memoryCuratedAt===void 0?e.memorySkipped?`skipped`:`none`:`curated`:`failed`}async function b(e,t){let n=r(e,{value:[`--cone`]});if(`error`in n)return f(n.error);let i=await v(t,n.values.get(`--cone`)??`cone`);if(`error`in i)return f(i.error);let a=_(i.folder),o=await h(t,a);return o===null?f(`no memory file at ${a}`):d(o.endsWith(`
|
|
42
|
+
`)||o===``?o:`${o}\n`)}const x=`/sessions/.curation/health.json`;async function S(e){let t=await h(e,x);if(t===null)return null;try{let e=JSON.parse(t);return typeof e.at!=`string`||!Array.isArray(e.failures)?null:{at:e.at,failures:e.failures.map(String)}}catch{return null}}async function C(e){let t=await c(e),n=[];for(let t of await g(e)){let r=_(t),i=await h(e,r);n.push({folder:t,path:r,chars:i===null?null:i.length})}let r={curated:0,failed:0,pending:0,skipped:0,none:0},i=new Map;for(let e of t){let t=y(e);if(r[t]++,t===`curated`){let t=e.cone??`cone`;i.set(t,(i.get(t)??0)+1)}}let l=[];r.failed>0&&l.push(`${r.failed} archive(s) whose last curation attempt failed — see \`memory log\``);for(let t of s)await h(e,t)!==null&&l.push(`${t} is no longer read — memory instructions live in ${o}; carry any customization over, then delete it`);for(let e of n){let t=i.get(e.folder)??0;t===0||(e.chars??0)>0||l.push(e.folder===`cone`?`${t} archive(s) report successful curation but the primary memory file is missing or empty`:`${t} archive(s) from cone "${e.folder}" report successful curation but its memory file (${e.path}) is missing or empty`)}return{memoryV2:!await m(),sessions:t.length,budgetChars:a(t.length),cones:n,curation:r,checks:l,scheduledCheck:await S(e)}}async function w(e,t){let n=r(e,{bool:[`--json`,`--check`]});if(`error`in n)return f(n.error);let i=await C(t),a=n.bools.has(`--check`)&&i.checks.length>0;if(n.bools.has(`--json`))return{stdout:`${JSON.stringify(i,null,2)}\n`,stderr:``,exitCode:+!!a};let o=`Memory v2: ${i.memoryV2?`ON`:`OFF — curation surfaces beyond the freezer pass are disabled`}\n`;o+=`Sessions: ${i.sessions} archived (memory budget ${i.budgetChars} chars)\n`,o+=`Memory files:
|
|
43
43
|
`;for(let e of i.cones){let t=e.chars===null?`missing`:`${e.chars} chars`;o+=` ${e.folder.padEnd(14)}${e.path} (${t})\n`}let{curated:s,failed:c,pending:l,skipped:u,none:d}=i.curation;if(o+=`Curation: ${s} curated, ${c} failed, ${l} pending, ${u} skipped, ${d} unmarked\n`,i.checks.length>0){o+=`Health:
|
|
44
44
|
`;for(let e of i.checks)o+=` FAIL ${e}\n`}else o+=`Health: ok
|
|
45
45
|
`;if(i.scheduledCheck){let{at:e,failures:t}=i.scheduledCheck;o+=t.length>0?`Scheduled: ${e} — ${t.length} FAILURE(S), see ${x}\n`:`Scheduled: ${e} — ok\n`}else o+=`Scheduled: never ran (starts ~90s after boot with memory-v2 on)
|
|
46
|
-
`;return{stdout:o,stderr:``,exitCode:+!!a}}async function T(e,t){let n=r(e,{value:[`--limit`]});if(`error`in n)return f(n.error);let i=n.values.get(`--limit`),
|
|
47
|
-
`):d(`${[...
|
|
48
|
-
`)}\n`)}const E=`kernel host has not booted yet — try again in a moment`;async function D(e,t){let n=r(e,{value:[`--archive`,`--cone`]});if(`error`in n)return f(n.error);let i=p();if(!i)return f(E);let
|
|
46
|
+
`;return{stdout:o,stderr:``,exitCode:+!!a}}async function T(e,t){let n=r(e,{value:[`--limit`]});if(`error`in n)return f(n.error);let i=n.values.get(`--limit`),a=i===void 0?20:Number.parseInt(i,10);if(!Number.isFinite(a)||a<=0)return f(`--limit must be a positive number`);let o=await c(t);return o.length===0?d(`no archived sessions yet
|
|
47
|
+
`):d(`${[...o].sort((e,t)=>e.frozenAt<t.frozenAt?1:-1).slice(0,a).map(e=>{let t=y(e),n=t===`failed`?` (${e.memoryFailed})`:t===`curated`?` (at ${e.memoryCuratedAt})`:``;return`${e.frozenAt} ${t.padEnd(8)}${e.filename}${n}`}).join(`
|
|
48
|
+
`)}\n`)}const E=`kernel host has not booted yet — try again in a moment`;async function D(e,t){let n=r(e,{value:[`--archive`,`--cone`]});if(`error`in n)return f(n.error);let i=p();if(!i)return f(E);let a=await c(t),o=n.values.get(`--archive`),s;if(o===void 0){if(s=[...a].sort((e,t)=>e.frozenAt<t.frozenAt?1:-1)[0],!s)return f(`no archived sessions to curate — freeze a chat first`)}else if(s=a.find(e=>e.filename===o),!s)return f(`no archive named "${o}" in /sessions/index.json`);let l=n.values.get(`--cone`),u=l??s.cone??`cone`,m=await v(t,u);if(`error`in m)return f(l?m.error:`archive "${s.filename}" was frozen from cone "${u}", which no longer exists — pass --cone <folder> to curate it into another cone`);let{folder:h}=m,g=await i.curate({sessionArchivePath:`/sessions/${s.filename}`,sessionCount:a.length,...h===`cone`?{}:{cone:{folder:h}}});if(!g.ok)return f(`curation failed: ${g.reason}`);let _=g.report.trim();return d(`Curated ${s.filename}\n${_?`${_}\n`:``}`)}function O(e){return`/sessions/.curation/dream-${new Date().toISOString().slice(0,10)}-${e}.md/status.json`}async function k(e,t,n){if(!t){let t=await v(e,n??`cone`);return`error`in t?t:{folders:[t.folder]}}let r=[];for(let t of await g(e))await h(e,_(t))!==null&&r.push(t);return r.length===0?{error:`no cone has a memory file yet — nothing to dream about`}:{folders:r}}async function A(e,t){let n=r(e,{value:[`--cone`],bool:[`--all`,`--wait`]});if(`error`in n)return f(n.error);let i=n.bools.has(`--all`),a=n.values.get(`--cone`);if(i&&a!==void 0)return f(`--all and --cone are mutually exclusive`);let o=p();if(!o)return f(E);let s=await k(t,i,a);if(`error`in s)return f(s.error);let{folders:c}=s,l=e=>o.dream(e===`cone`?{}:{cone:{folder:e}});if(!n.bools.has(`--wait`)){c.reduce((e,t)=>e.then(()=>l(t)).then(()=>void 0,()=>void 0),Promise.resolve());let e=c.map(e=>` ${e.padEnd(14)}${O(e)}`);return d(`Dreaming started for ${c.length} cone(s); outcomes land in:\n${e.join(`
|
|
49
49
|
`)}\n`)}let u=``,m=0;for(let e of c){let t=await l(e);if(t.ok){let n=t.report.trim();u+=`${e}: dreamed\n${n?`${j(n)}\n`:``}`}else m++,u+=`${e}: FAILED — ${t.reason}\n`}return{stdout:u,stderr:``,exitCode:+(m>0)}}function j(e){return e.split(`
|
|
50
50
|
`).map(e=>` ${e}`).join(`
|
|
51
51
|
`)}async function M(e,t){let n=e[0];if(!n||i(e,{valueFlags:u}))return d(l);let r=e.slice(1);if(n!==`status`&&await m())return f(`Memory v2 is off — enable the "memory-v2" feature flag to use this command`);switch(n){case`show`:return b(r,t.fs);case`status`:return w(r,t.fs);case`log`:return T(r,t.fs);case`curate`:return D(r,t.fs);case`dream`:return A(r,t.fs);default:return f(`unknown command: ${n}\n${l}`)}}export{M as runMemory};
|
|
@@ -0,0 +1 @@
|
|
|
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};
|