sliccy 6.178.1 → 6.178.2
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/ui/.vite/manifest.json +182 -182
- package/dist/ui/assets/{SKILL-BflWplWz.js → SKILL-B8Oawe6a.js} +1 -1
- package/dist/ui/assets/SKILL-CJrjPuRt.js +1 -0
- package/dist/ui/assets/{account-store-DoN97hFH.js → account-store-LwLxI7v1.js} +1 -1
- package/dist/ui/assets/{account-store-BBDgfG4U.js → account-store-SI8RQbm0.js} +1 -1
- package/dist/ui/assets/{adobe-C4jW1IJ9.js → adobe-BHZ-TF7E.js} +1 -1
- package/dist/ui/assets/{adobe-P1b-ZaUN.js → adobe-Cqd5wrqM.js} +1 -1
- package/dist/ui/assets/{agent-panels-DQYADvnv.js → agent-panels-DXCdmUkc.js} +1 -1
- package/dist/ui/assets/{almost-bash-shell-headless-BhD2J-Dp.js → almost-bash-shell-headless-B29ulBpN.js} +33 -33
- package/dist/ui/assets/{apply-layout-C_zdZ6xl.js → apply-layout-BiYaZGTe.js} +1 -1
- package/dist/ui/assets/{apps-bLwOJVZd.js → apps-BYK0eeEc.js} +1 -1
- package/dist/ui/assets/{azure-openai-BmcFJoe3.js → azure-openai-BgA0OxNa.js} +1 -1
- package/dist/ui/assets/{azure-openai-D8AzgKK4.js → azure-openai-DwxTKwka.js} +1 -1
- package/dist/ui/assets/{backend-hostfs-BnW9g7HV.js → backend-hostfs-CeXHlroV.js} +1 -1
- package/dist/ui/assets/{cdp-cC30x3hP.js → cdp-wm8vfA8s.js} +1 -1
- package/dist/ui/assets/{cerebras-9Karkto5.js → cerebras-BPlfZv3L.js} +1 -1
- package/dist/ui/assets/{cerebras-Cdeq-wOc.js → cerebras-wuHzITPY.js} +1 -1
- package/dist/ui/assets/{composer-speech-DIQr-H9-.js → composer-speech-DI9SI2lY.js} +1 -1
- package/dist/ui/assets/{connect-surface-DuYbMkUH.js → connect-surface-zTa8OfFh.js} +1 -1
- package/dist/ui/assets/{directed-approval-BeNZtGtW.js → directed-approval-DmDgVpiX.js} +1 -1
- package/dist/ui/assets/{dist-CTNUClOy.js → dist-TdFroLO3.js} +3 -3
- package/dist/ui/assets/{dist-BZsj6rXC.js → dist-b828m-Si.js} +3 -3
- package/dist/ui/assets/{ensure-speech-assets-B0cmVoSi.js → ensure-speech-assets-42E6KJDv.js} +1 -1
- package/dist/ui/assets/frame-bytes-BSmP8I94.js +1 -0
- package/dist/ui/assets/frames-C1gdZfee.js +1 -0
- package/dist/ui/assets/{frozen-archive-writer-Cy3vzyJG.js → frozen-archive-writer-C97kBlYw.js} +1 -1
- package/dist/ui/assets/{fs-Dn-aCLAC.js → fs-BKmepe3Q.js} +2 -2
- package/dist/ui/assets/{fs-DOdWw1HA.js → fs-DmgjBIs9.js} +1 -1
- package/dist/ui/assets/{gelatiere-store-D1RgK_hM.js → gelatiere-store-D1l9WE1j.js} +1 -1
- package/dist/ui/assets/{gelatiere-unit-BneJkqKO.js → gelatiere-unit-jlm5b-JJ.js} +1 -1
- package/dist/ui/assets/{github-xAZnQdoi.js → github-BB3M-XW1.js} +1 -1
- package/dist/ui/assets/{github-DZp51o66.js → github-C8jjATg2.js} +2 -2
- package/dist/ui/assets/{github-auth-HGX5QVxr.js → github-auth-CkC7qTEg.js} +1 -1
- package/dist/ui/assets/{github-copilot-CiV7De-T.js → github-copilot-D7QRCTDD.js} +1 -1
- package/dist/ui/assets/{github-copilot-BV7Bs27F.js → github-copilot-DuwasHAz.js} +1 -1
- package/dist/ui/assets/{github-install-DOUkGa0A.js → github-install-DT3Wys59.js} +1 -1
- package/dist/ui/assets/{github-zip-opx-enHp.js → github-zip-CX3GXBmW.js} +1 -1
- package/dist/ui/assets/{hear-DBOXlUyX.js → hear-pJ--prvx.js} +1 -1
- package/dist/ui/assets/{help-DnE-pjxe.js → help-gOzjZhgS.js} +1 -1
- package/dist/ui/assets/host-DDFasAvt.js +1 -0
- package/dist/ui/assets/{host-command-5ESITqj8.js → host-command-B0EUpLfV.js} +1 -1
- package/dist/ui/assets/{installer-D8xSJFrc.js → installer-DeqzzcvC.js} +1 -1
- package/dist/ui/assets/{js-realm-worker-zAQTsouB.js → js-realm-worker-QT2JnICz.js} +1 -1
- package/dist/ui/assets/{jsh-executor-Cl_ou7Bi.js → jsh-executor-BBZWMBxV.js} +3 -3
- package/dist/ui/assets/{kernel-worker-ObCC3bZ4.js → kernel-worker-B23YxkDH.js} +10 -10
- package/dist/ui/assets/{lick-ws-bridge-CBInAfdq.js → lick-ws-bridge-CpcUjLS6.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-OTeiIxTR.js → lick-ws-bridge-DsoQWD5s.js} +1 -1
- package/dist/ui/assets/{live-session-curation-DqSHVqPm.js → live-session-curation-BWfx-Nu1.js} +1 -1
- package/dist/ui/assets/{live-session-snapshot-xXU1PTVt.js → live-session-snapshot-BSNfthJ2.js} +1 -1
- package/dist/ui/assets/{local-llm-KdRtPevo.js → local-llm-DGFPI_4T.js} +1 -1
- package/dist/ui/assets/{local-llm-9ub3AuvH.js → local-llm-vzP-uq7M.js} +1 -1
- package/dist/ui/assets/{main-DkHBZ-Z8.js → main-DFTTAllP.js} +3 -3
- package/dist/ui/assets/{main-cherry-_amBc8dK.js → main-cherry-Bbjw_90k.js} +1 -1
- package/dist/ui/assets/{memory-curation-seam-DyHEcRFr.js → memory-curation-seam-BufuSUCj.js} +1 -1
- package/dist/ui/assets/{memory-health-w-JqSADI.js → memory-health-DdSqq7yP.js} +1 -1
- package/dist/ui/assets/memory-v2-flag-uChv9nwr.js +1 -0
- package/dist/ui/assets/{memory-write-execute-QL7m81zt.js → memory-write-execute-BygymnF0.js} +1 -1
- package/dist/ui/assets/{mount-ikFUYfuZ.js → mount-DlogHA7u.js} +3 -3
- package/dist/ui/assets/{mount-BTKLdsWe.js → mount-_sTSuvKx.js} +1 -1
- package/dist/ui/assets/{new-session-C-J3C--U.js → new-session-C914zfKa.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-J_0zCMWG.js → oauth-bootstrap-B7cPXMSk.js} +2 -2
- package/dist/ui/assets/{onboarding-orchestrator-KQGvne4_.js → onboarding-orchestrator-CbnB67nZ.js} +1 -1
- package/dist/ui/assets/{openai-codex-CzeEgu1I.js → openai-codex-BtwVt-12.js} +1 -1
- package/dist/ui/assets/{openai-codex-CxQZLpwm.js → openai-codex-SI0nWQNS.js} +1 -1
- package/dist/ui/assets/{openrouter-B7J-7z5K.js → openrouter-BFlMjaCH.js} +1 -1
- package/dist/ui/assets/{openrouter-DOm8fQ1O.js → openrouter-BruOnSfT.js} +1 -1
- package/dist/ui/assets/{openrouter-free-B5-DDkrc.js → openrouter-free-B2pceWVg.js} +1 -1
- package/dist/ui/assets/{openrouter-free-qfML0fyf.js → openrouter-free-DPQDCfqQ.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-BK2Nn8wi.js → openrouter-oauth-BLskezr8.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-BJUinrf5.js → openrouter-oauth-C4kwBIwS.js} +1 -1
- package/dist/ui/assets/opfs-mount-8s9WP18b.js +2 -0
- package/dist/ui/assets/opfs-mount-DF49ioKQ.js +2 -0
- package/dist/ui/assets/{panel-rpc-handlers-CByqCf9E.js → panel-rpc-handlers-BuMdGle_.js} +2 -2
- package/dist/ui/assets/{panelize-shell-B79ZTaEI.js → panelize-shell-Dg_58ImI.js} +1 -1
- package/dist/ui/assets/{pi-edit-execution-CuhfcMVc.js → pi-edit-execution-C9GYKunH.js} +1 -1
- package/dist/ui/assets/{provider-CS0Ezi-C.js → provider-B_fhkXn7.js} +2 -2
- package/dist/ui/assets/{provider-Cf9_NWke.js → provider-DEcfbBkM.js} +1 -1
- package/dist/ui/assets/{provider-settings-CFxffjS6.js → provider-settings-BLtjMrT0.js} +1 -1
- package/dist/ui/assets/provider-store-access-C0w1Xcs2.js +1 -0
- package/dist/ui/assets/provider-store-access-YjQKD2es.js +1 -0
- package/dist/ui/assets/{providers-wWXM8pKV.js → providers-B0rCH1pp.js} +1 -1
- package/dist/ui/assets/{providers-BIgVZAND.js → providers-B9p2VR5L.js} +2 -2
- package/dist/ui/assets/{quick-llm-CJfwSjQT.js → quick-llm-B8uh7EVu.js} +1 -1
- package/dist/ui/assets/{realm-inprocess-B0LLgY2y.js → realm-inprocess-qhbZWW6z.js} +1 -1
- package/dist/ui/assets/{recovery-screen-5rwCQu-V.js → recovery-screen-M8szzZB2.js} +1 -1
- package/dist/ui/assets/registry-DfuJBCKY.js +1 -0
- package/dist/ui/assets/{remote-terminal-view-CvgN6whk.js → remote-terminal-view-6ygd42Fb.js} +1 -1
- package/dist/ui/assets/{restore-gxqWgOJu.js → restore-Qq5h6a38.js} +1 -1
- package/dist/ui/assets/{run-CyI0DyWz.js → run--H9dud5r.js} +2 -2
- package/dist/ui/assets/{run-jHY3ksSb.js → run-Bk0pGJJa.js} +1 -1
- package/dist/ui/assets/{run-DsvkFux3.js → run-C0wVagJ5.js} +2 -2
- package/dist/ui/assets/{run-B5CPaO-I.js → run-C3rYy-Lu.js} +1 -1
- package/dist/ui/assets/{run-DdeplIj8.js → run-CPDsfLJJ.js} +2 -2
- package/dist/ui/assets/run-DUzzkV29.js +82 -0
- package/dist/ui/assets/{run-Dzp6uf9a.js → run-_QNErIec.js} +2 -2
- package/dist/ui/assets/{session-command-memory-DSKgr_FE.js → session-command-memory-CAl1-crq.js} +2 -2
- package/dist/ui/assets/{session-jsonl-DUeVG2T_.js → session-jsonl-B-4fihPX.js} +1 -1
- package/dist/ui/assets/{session-jsonl-BfqZO6d_.js → session-jsonl-lB9-7rZS.js} +1 -1
- package/dist/ui/assets/{session-search-index-o_XRNxc8.js → session-search-index-Bn4FhmPW.js} +1 -1
- package/dist/ui/assets/{setup-feature-flags-remote-DUEXmwjs.js → setup-feature-flags-remote-opNg3JWs.js} +1 -1
- package/dist/ui/assets/{signed-fetch-Dl15vWXR.js → signed-fetch-YC2zrriw.js} +1 -1
- package/dist/ui/assets/{silent-renew-backoff-DsKGgLRs.js → silent-renew-backoff-Bak0vwwf.js} +1 -1
- package/dist/ui/assets/slicc-version-D1Js64gw.js +1 -0
- package/dist/ui/assets/{snapshot-Citj7-JE.js → snapshot-6br_5p-f.js} +1 -1
- package/dist/ui/assets/{snapshot-features-BHLqOlg9.js → snapshot-features-BqGUjBWl.js} +1 -1
- package/dist/ui/assets/{soundscape-DSsqJ8zv.js → soundscape-DRViCPly.js} +1 -1
- package/dist/ui/assets/{speak-D6aVzMns.js → speak-DRv_vLqY.js} +1 -1
- package/dist/ui/assets/{sprinkle-manager-ME8d4cjx.js → sprinkle-manager-DeJrE3Hq.js} +1 -1
- package/dist/ui/assets/{sprinkle-renderer-DUag5OwG.js → sprinkle-renderer-DYUy10CO.js} +1 -1
- package/dist/ui/assets/ssh-D1zj1EXl.js +6 -0
- package/dist/ui/assets/{state-B6uRuQMD.js → state-BpyjzTIG.js} +1 -1
- package/dist/ui/assets/{store-KHNvC53T.js → store-DQkIRnav.js} +1 -1
- package/dist/ui/assets/{store-589yQxDA.js → store-DwUewAuZ.js} +1 -1
- package/dist/ui/assets/{sudo-s-73cy5v.js → sudo-DIegVBwT.js} +1 -1
- package/dist/ui/assets/{supervisor-DAEgImH3.js → supervisor-gHbk5m7z.js} +1 -1
- package/dist/ui/assets/{sync-dialog-KSbJH8Ib.js → sync-dialog-CH4PBcVu.js} +1 -1
- package/dist/ui/assets/tab-0xwFvGm5.js +1 -0
- package/dist/ui/assets/{transformers-env-BoPF1XI7.js → transformers-env-9M9En1_O.js} +1 -1
- package/dist/ui/assets/{tray-leader-DYTuRHiF.js → tray-leader-Bd293BI8.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-DBskaqlh.js → tray-leave-runtime-wLd1uBMu.js} +1 -1
- package/dist/ui/assets/{tray-sidecar-CI3PdkCD.js → tray-sidecar-C35X7Jht.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-xF6lC9IK.js → upgrade-detection-Tp8fDJAG.js} +1 -1
- package/dist/ui/assets/{upskill-lick-skip-DVUSlTF5.js → upskill-lick-skip-Cr0VVPGj.js} +1 -1
- package/dist/ui/assets/url-B1WJZBSE.js +1 -0
- package/dist/ui/assets/v86-BOapztuq.js +1 -0
- package/dist/ui/assets/{voice-reply-jXkqXAts.js → voice-reply-wJfABSIn.js} +1 -1
- package/dist/ui/assets/{wc-attach-BXamqL0L.js → wc-attach-CtVWDKPk.js} +2 -2
- package/dist/ui/assets/{wc-browser-Df2q83J-.js → wc-browser-BJemxWhg.js} +1 -1
- package/dist/ui/assets/{wc-computers-BLXLTk2O.js → wc-computers-Cr14YnOg.js} +1 -1
- package/dist/ui/assets/{wc-detached-ezoaBCsO.js → wc-detached-DQ_ZTSZ-.js} +1 -1
- package/dist/ui/assets/{wc-extension-DBHJH1V7.js → wc-extension-C8pgLDqO.js} +2 -2
- package/dist/ui/assets/{wc-follower-BwVh5O1m.js → wc-follower-nosCeVKN.js} +3 -3
- package/dist/ui/assets/{wc-follower-oauth-BHrFykQ1.js → wc-follower-oauth-BU-XAftl.js} +1 -1
- package/dist/ui/assets/{wc-gelatiere-CAhoFlla.js → wc-gelatiere-BiyouLW3.js} +1 -1
- package/dist/ui/assets/{wc-live-By-Auby6.js → wc-live-CaopRwn0.js} +5 -5
- package/dist/ui/assets/{wc-nav-BfvCMizF.js → wc-nav-Wn2qDNiX.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-B62UQF1p.js → wc-onboarding-FjrDOv_u.js} +2 -2
- package/dist/ui/assets/{wc-permissions-CcLlwQLN.js → wc-permissions-C63-jLbY.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-DEsDdnWi.js → wc-placeholder-Bdbmjijc.js} +3 -3
- package/dist/ui/assets/{wc-secret-request-CAv_ZACt.js → wc-secret-request-C9iCWgBV.js} +1 -1
- package/dist/ui/assets/{wc-settings-DxgsllBm.js → wc-settings-1ZJgN4Wk.js} +3 -3
- package/dist/ui/assets/{wc-shell-C6h5-x1_.js → wc-shell-CrMn8BW0.js} +3 -3
- package/dist/ui/assets/{wc-shortcut-config-C_f-Vhnd.js → wc-shortcut-config-JXEU24sg.js} +1 -1
- package/dist/ui/assets/{wc-sprinkles-UqEPIOlU.js → wc-sprinkles-CBaPR_V8.js} +2 -2
- package/dist/ui/assets/{wc-transcript-export-DORqMy3T.js → wc-transcript-export-eyG-SwVe.js} +2 -2
- package/dist/ui/assets/{wc-tray-CTF4wGF3.js → wc-tray-dSLNIDh9.js} +4 -4
- package/dist/ui/assets/welcome-detection-DuFRP38Z.js +1 -0
- package/dist/ui/assets/{whisper-session-D6DdyCO_.js → whisper-session-DrDhzSqp.js} +2 -2
- package/dist/ui/assets/{xai-grok-BpXfk14G.js → xai-grok-C2oyJ5tt.js} +1 -1
- package/dist/ui/assets/{xai-grok-gjfzWslr.js → xai-grok-G4GFCgrM.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-B_vSLfiC.js +0 -1
- package/dist/ui/assets/encode-frame-30wbFN-H.js +0 -1
- package/dist/ui/assets/frames-7E6RloFP.js +0 -1
- package/dist/ui/assets/host-CLGoytqB.js +0 -1
- package/dist/ui/assets/memory-v2-flag-BL9HcWqE.js +0 -1
- package/dist/ui/assets/opfs-mount-BknMrwaQ.js +0 -2
- package/dist/ui/assets/opfs-mount-Dizi9FS1.js +0 -2
- package/dist/ui/assets/provider-store-access-9MDuGe4W.js +0 -1
- package/dist/ui/assets/provider-store-access-Bvtkddv7.js +0 -1
- package/dist/ui/assets/registry-qHtWYFOX.js +0 -1
- package/dist/ui/assets/run-B4NB-XFg.js +0 -80
- package/dist/ui/assets/slicc-version-BaTg4J2W.js +0 -1
- package/dist/ui/assets/ssh-2T7ub5Yk.js +0 -6
- package/dist/ui/assets/tab-DI1zy4Vd.js +0 -1
- package/dist/ui/assets/url-SK-_tyJs.js +0 -1
- package/dist/ui/assets/v86-BF0NlNun.js +0 -1
- package/dist/ui/assets/welcome-detection-mqLqle6h.js +0 -1
package/dist/ui/assets/{remote-terminal-view-CvgN6whk.js → remote-terminal-view-6ygd42Fb.js}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/readline-BOCWRKSR.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/xterm-B5LH8GIb.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./preload-helper-Czpn1I53.js";import{ft as n,pt as r}from"./wc-shell-
|
|
2
|
+
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./preload-helper-Czpn1I53.js";import{ft as n,pt as r}from"./wc-shell-CrMn8BW0.js";import"./tool-ui-eSQ1g2I1.js";import{t as i}from"./permissions-surface-registry-CilCRwhh.js";import{storePendingHandle as a}from"./mount-picker-popup-qcWGbpG5.js";import{r as o,t as s}from"./hid-device-registry-B2R-0rNt.js";import"./browser-DGwroBSO.js";import{a as c,n as l}from"./serial-port-registry-CCqklAEr.js";import{a as u,t as d}from"./usb-device-registry--JwKRTYp.js";import"./usb-operations-v1mGAdRY.js";import{t as f}from"./terminal-session-client-ADzaWGFd.js";function p(e,t){let n=[],r=new Map,i=new Set;for(let a=0;a<e.length;a++){let o=e[a];o.startsWith(`-`)?t.has(o)?r.set(o,e[++a]??``):i.add(o):n.push(o)}return{positionals:n,flags:r,bools:i}}new TextDecoder(`utf-8`,{fatal:!1}),new TextEncoder;var m=new Set([`--vid`,`--pid`,`--baud`,`--data-bits`,`--stop-bits`,`--parity`,`--flow-control`,`--buffer-size`,`--bytes`,`--until`,`--timeout-ms`,`--dtr`,`--rts`,`--break`,`--__resolved`]);function h(e){return p(e,m)}function g(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function _(e){let t={};return e.has(`--vid`)&&(t.usbVendorId=g(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.usbProductId=g(e.get(`--pid`),`pid`)),Object.keys(t).length>0?[t]:[]}`${l}${l}`;var v=new Set([`--port`,`--baud`,`--vid`,`--pid`]),y=115200;function b(e){return p(e,v)}`${y}`;var x=new Set([`--vid`,`--pid`,`--usage-page`,`--usage`,`--__resolved`,`--timeout`]);function S(e){return p(e,x)}function C(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function w(e){let t={};return e.has(`--vid`)&&(t.vendorId=C(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=C(e.get(`--pid`),`pid`)),e.has(`--usage-page`)&&(t.usagePage=C(e.get(`--usage-page`),`usage-page`)),e.has(`--usage`)&&(t.usage=C(e.get(`--usage`),`usage`)),Object.keys(t).length>0?[t]:[]}`${s}`;var T=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function E(e){return p(e,T)}function D(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function O(e){let t={};return e.has(`--vid`)&&(t.vendorId=D(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=D(e.get(`--pid`),`pid`)),e.has(`--class`)&&(t.classCode=D(e.get(`--class`),`class`)),e.has(`--subclass`)&&(t.subclassCode=D(e.get(`--subclass`),`subclass`)),e.has(`--protocol`)&&(t.protocolCode=D(e.get(`--protocol`),`protocol`)),e.has(`--serial`)&&(t.serialNumber=e.get(`--serial`)),Object.keys(t).length>0?[t]:[]}`${d}`;function k(e){let{border:t,...r}=n(e);return r}var A=`\x1B[34m/\x1B[0m \x1B[90m$\x1B[0m `,j=class{options;client;terminal=null;fitAddon=null;terminalHost=null;previewHost=null;previewUrls=[];hasPreview=!1;previewStateListener=null;resizeObserver=null;unwatchTheme=null;mountRoot=null;readline=null;disposed=!1;abortPromptLoop=null;programmaticResolve=null;isExecuting=!1;suppressOutput=!1;tabBusy=!1;constructor(e){this.options=e;let t=e.sid??`panel-terminal-${Date.now()}`;this.client=new f({client:e.client,sid:t,onEvent:e=>this.handleEvent(e)})}async mount(n){let{Terminal:i}=await t(async()=>{let{Terminal:e}=await import(`./xterm-C3BHN0de.js`);return{Terminal:e}},[]),{FitAddon:a}=await t(async()=>{let{FitAddon:e}=await import(`./addon-fit-DIOBYJe3.js`);return{FitAddon:e}},[]),{Readline:o}=await t(async()=>{let{Readline:t}=await import(`./readline-BOCWRKSR.js`).then(t=>e(t.default,1));return{Readline:t}},__vite__mapDeps([0,1]));await t(()=>Promise.resolve({}),__vite__mapDeps([2])),this.mountRoot=n,this.terminal=new i({cursorBlink:!0,fontSize:11,fontFamily:`'Source Code Pro', 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace`,theme:k(n),convertEol:!0}),this.unwatchTheme?.(),this.unwatchTheme=r(n,()=>{this.terminal&&(this.terminal.options.theme=k(this.mountRoot))}),this.fitAddon=new a,this.terminal.loadAddon(this.fitAddon),n.replaceChildren(),this.terminalHost=document.createElement(`div`),this.terminalHost.className=`terminal-panel__terminal-host`,n.appendChild(this.terminalHost),this.previewHost=document.createElement(`div`),this.previewHost.className=`terminal-panel__preview`,n.appendChild(this.previewHost),this.terminal.open(this.terminalHost),this.fitAddon.fit(),this.resizeObserver=new ResizeObserver(()=>this.refit()),this.resizeObserver.observe(this.terminalHost),this.readline=new o,this.neutralizeReadlineHistoryPersistence(),this.terminal.loadAddon(this.readline),this.readline.setCtrlCHandler(()=>this.signalInterruptDuringExec()),this.setupInput(),this.terminal.writeln(`\x1B[1mslicc\x1B[0m \x1B[90mshell (kernel)\x1B[0m`),this.terminal.writeln(`\x1B[90mType "help" for available commands.\x1B[0m
|
|
3
3
|
`),await this.client.open({cwd:this.options.cwd,env:this.options.env}),this.runPromptLoop()}refit(){this.fitAddon?.fit()}clearTerminal(){this.terminal?.clear()}async executeCommandInTerminal(e){let t=e.trim();if(!t)return{stdout:``,stderr:``,exitCode:0};if(!this.terminal||!this.readline)return this.client.exec(t);if(this.isExecuting||this.programmaticResolve||this.readline.getLine().length>0)return{stdout:``,stderr:`terminal is busy; finish current input first
|
|
4
4
|
`,exitCode:1};let n=new Promise(e=>{this.programmaticResolve=e});return this.readline.updateLine(t),this.terminal.input(`\r`),n}setPreviewStateListener(e){this.previewStateListener=e,e?.(this.hasPreview)}dispose(){this.disposed=!0,this.abortPromptLoop?.(Error(`terminal disposed`)),this.abortPromptLoop=null,this.clearMediaPreview(),this.unwatchTheme?.(),this.unwatchTheme=null,this.mountRoot=null,this.resizeObserver?.disconnect(),this.resizeObserver=null,this.terminal?.dispose(),this.terminal=null,this.readline=null,this.fitAddon=null,this.terminalHost=null,this.previewHost=null,this.client.close(),this.client.dispose()}renderMediaPreview(e){if(!this.previewHost)return;let t=Uint8Array.from(atob(e.data),e=>e.charCodeAt(0)),n=URL.createObjectURL(new Blob([t],{type:e.mediaType}));this.previewUrls.push(n);let r=document.createElement(`div`);r.className=`terminal-panel__preview-item`;let i=document.createElement(`div`);i.className=`terminal-panel__preview-label`;let a=e.path.split(`/`).pop()??e.path;if(i.textContent=`${a} · ${e.mediaType}`,r.appendChild(i),e.mediaType.startsWith(`video/`)){let e=document.createElement(`video`);e.className=`terminal-panel__preview-media`,e.controls=!0,e.autoplay=!0,e.loop=!0,e.muted=!0,e.playsInline=!0,e.src=n,e.addEventListener(`loadedmetadata`,()=>this.refit(),{once:!0}),r.appendChild(e)}else{let e=document.createElement(`img`);e.className=`terminal-panel__preview-media`,e.alt=a,e.src=n,e.addEventListener(`load`,()=>this.refit(),{once:!0}),r.appendChild(e)}this.previewHost.appendChild(r),this.previewHost.classList.add(`terminal-panel__preview--visible`),this.hasPreview=!0,this.previewStateListener?.(!0)}clearMediaPreview(){for(let e of this.previewUrls)URL.revokeObjectURL(e);this.previewUrls=[],this.previewHost&&(this.previewHost.replaceChildren(),this.previewHost.classList.remove(`terminal-panel__preview--visible`)),this.hasPreview=!1,this.previewStateListener?.(!1)}async runPromptLoop(){for(;!this.disposed&&this.readline&&this.terminal;){let e;try{e=await this.readNextLine()}catch{break}finally{this.abortPromptLoop=null}let t=this.programmaticResolve!==null,n=await this.processLine(e,t);this.programmaticResolve&&=(this.programmaticResolve(n),null)}}readNextLine(){let e=this.terminal,t=this.readline;if(!e||!t)return Promise.reject(Error(`terminal not mounted`));let n=new Promise((e,t)=>{this.abortPromptLoop=t}),r=new Promise((n,r)=>{e.write(``,()=>{e.buffer.active.cursorX>0&&e.write(`\x1B[7m%\x1B[0m\r
|
|
5
5
|
`),t.read(A).then(n,r)})});return Promise.race([r,n])}async processLine(e,t=!1){let n=e.trim();return!n||!t&&await this.tryRunPicker(n)?{stdout:``,stderr:``,exitCode:0}:this.runRemote(n)}async tryRunPicker(e){let t=M(e);if(t)return await this.runRemoteWithLocalPicker(e,t),!0;let n=z(e);if(n)return await this.runRemoteWithUsbPicker(n),!0;let r=B(e);if(r)return await this.runRemoteWithHidPicker(r),!0;let i=H(e);if(i)return await this.runRemoteWithSerialPicker(i),!0;let a=U(e);if(a)return await this.runRemoteWithEsptoolPicker(e,a),!0;let o=R(e);return o?(await this.runRemoteWithScreenShare(o.name),!0):!1}setupInput(){this.terminal&&(this.terminal.onData(e=>{e===` `&&this.handleTab()}),this.terminal.attachCustomKeyEventHandler(e=>!(e.type===`keydown`&&e.key===`Enter`&&this.tabBusy)))}signalInterruptDuringExec(){this.isExecuting&&(this.terminal?.writeln(`^C`),this.client.signal(`SIGINT`))}neutralizeReadlineHistoryPersistence(){let e=this.readline.history;e&&(e.entries=[],e.cursor=-1,e.saveToLocalStorage=()=>void 0,e.restoreFromLocalStorage=()=>void 0)}reanchorReadline(){if(!this.terminal||!this.readline)return;let e=this.readline.state;e&&(e.getTty().anchorRow=this.terminal.buffer.active.cursorY,e.refresh())}async handleTab(){if(!(!this.terminal||!this.readline)&&!(this.isExecuting||this.tabBusy)){this.tabBusy=!0,this.isExecuting=!0;try{let{currentWord:e,isFirstWord:t,compgenCmd:n}=G(this.readline.getLine());this.suppressOutput=!0;let r=``;try{r=(await this.client.exec(n)).stdout}finally{this.suppressOutput=!1}let i=r.split(`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{l as e,n as t,t as n}from"./almost-bash-shell-headless-
|
|
1
|
+
import{l as e,n as t,t as n}from"./almost-bash-shell-headless-B29ulBpN.js";import{n as r}from"./browser-DG5MjvHF.js";import{c as i}from"./sudoers-BdBYQPUn.js";import{r as a}from"./sudo-fs-C6r_MIIY.js";import{n as o}from"./jsh-discovery-CnvNKojr.js";import{o as s}from"./just-bash-compat-B-SPHuh_.js";import{n as c,r as l}from"./supervisor-gHbk5m7z.js";function u(t,n){return new Map(Object.entries({HOME:e,PATH:o,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t.cwd,...n,...t.env}))}function d(e,t,n,i){let a=u(t,i);return r({fs:e,cwd:t.cwd,env:a,stdin:s(``),exec:(e,r)=>n.exec(e,{env:r?.env??Object.fromEntries(a),cwd:r?.cwd??t.cwd,args:r?.args,...r?.env===void 0?{}:{replaceEnv:!0}})})}const f={requestApproval:async()=>({decision:`deny`})};async function p(e){let r=h(e.fs,e.sudo),i=new t(r),a=new n({fs:r,cwd:`/workspace`,processManager:e.processManager,processOwner:{kind:`jshd`}}),o={exec:(e,t)=>a.getBash().exec(e,{env:t?.env??a.getEnv(),cwd:t?.cwd??`/workspace`,args:t?.args,...t?.env===void 0?{}:{replaceEnv:!0}})},s=c({fs:e.fs,processManager:e.processManager,lickManager:e.lickManager,...e.realmFactory?{realmFactory:e.realmFactory}:{},buildContext:e=>m(i,e,o)}),u=(await l(e.fs)).filter(e=>e.enabled);if(u.length===0)return[];let d=[];for(let e of u)try{await s.start(e),d.push(e.name)}catch{}return d}function m(e,t,n){return d(e,t,n)}function h(e,t){return a(e,{broker:t?.broker??f,getPolicy:t?.getPolicy??i,defaultDisposition:`allow`})}export{p as restoreEnabledJshdUnits};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{t as e}from"./subcommand-flags-BZi7j78Q.js";import{r as t,t as n}from"./subcommand-help-CgO7wRS5.js";import{i as r,o as i}from"./jsh-discovery-CnvNKojr.js";import{a,i as o,r as s,s as c,t as l}from"./supervisor-
|
|
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,o as i}from"./jsh-discovery-CnvNKojr.js";import{a,i as o,r as s,s as c,t as l}from"./supervisor-gHbk5m7z.js";const u=`usage: jshd <command> [options]
|
|
2
2
|
|
|
3
3
|
Durable background jsh units: one realm worker each, restored on reload
|
|
4
4
|
when --enable is set. Keep-alive follows the realm (pending timers and
|
|
@@ -34,7 +34,7 @@ Notes:
|
|
|
34
34
|
`)+`
|
|
35
35
|
`)}async function A(e,t,n,r){let i=t[0];if(!i)return Y(`missing unit name`);let o=L(n);if(o)return o;let s=P(n,r);if(!s)return Y(`kernel host has not booted yet — try again in a moment`);if(e===`stop`)return await s.stop(i)?J(`jshd: stopped '${i}'\n`):await a(n.fs,i)?J(`jshd: unit '${i}' is not running\n`):Y(`unknown unit '${i}'`);if(e===`restart`){let e=await s.restart(i);return e?J(`jshd: restarted '${i}' (pid ${e.pid})\n`):Y(`unknown unit '${i}'`)}return!await a(n.fs,i)&&!s.status(i)?Y(`unknown unit '${i}'`):(await s.rm(i),J(`jshd: removed '${i}'\n`))}async function j(t,n,r){let i=e(t,{value:T,bool:[`-f`,`--follow`]});if(`error`in i)return Y(i.error);let a=i.positionals[0];if(!a)return Y(`missing unit name`);let s=i.bools.has(`-f`)||i.bools.has(`--follow`),c=i.values.get(`-n`)??i.values.get(`--lines`),l=c===void 0?void 0:Number.parseInt(c,10);if(c!==void 0&&(!Number.isFinite(l)||l<0))return Y(`-n must be a non-negative integer`);let u=await o(n.fs,a),d=l===void 0?u:H(u,l);if(!s)return J(d.endsWith(`
|
|
36
36
|
`)||d.length===0?d:`${d}\n`);let f=W(n),p=G(n);return f?U({ctx:n,name:a,displayed:d,seen:u.length,signal:f,sink:p}):(p?.(d),J(p?``:d.endsWith(`
|
|
37
|
-
`)||d.length===0?d:`${d}\n`))}async function M(e,t,n,r){let i=e[0];if(!i)return Y(`missing unit name`);let a=L(t);if(a)return a;let o=P(t,n);return(o?await o.setEnabled(i,r):await N(t,i,r))?J(`jshd: ${r?`enabled`:`disabled`} '${i}'\n`):Y(`unknown unit '${i}'`)}async function N(e,t,n){let r=await a(e.fs,t);if(!r)return null;let i={...r,enabled:n},{writeUnitRecord:o}=await import(`./supervisor-
|
|
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-gHbk5m7z.js`).then(e=>e.o);return await o(e.fs,i),i}function P(e,t){let n=l();if(n)return n;let r=t.processManager??K();if(!r)return null;let i=q();return l({fs:e.fs,processManager:r,...i?{lickManager:i}:{},...t.realmFactory?{realmFactory:t.realmFactory}:{},buildContext:t=>F(e,t)})}function F(e,t){let n=new Map(e.env);for(let[e,r]of Object.entries(t.env))n.set(e,r);return{...e,cwd:t.cwd,env:n}}function I(e){if(typeof e!=`object`||!e)return!1;let t=e.canWrite;return typeof t==`function`&&!t.call(e,`/workspace/.jshd`)}function L(e){return I(e.fs)?Y(`not available inside a restricted scoop`):null}function R(e,t,n){let r=new Map(t.map(e=>[e.name,e]));return[...new Set([...e.map(e=>e.name),...r.keys()])].sort().map(t=>r.get(t)||z(e.find(e=>e.name===t),n))}function z(e,t){return{name:e.name,pid:null,state:`stopped`,restarts:0,uptimeMs:null,enabled:e.enabled,restart:e.restart,argv:e.argv,cwd:e.cwd,durable:t,lastExitCode:null}}function B(e){let t=e.pid===null?`-`:String(e.pid),n=V(e.uptimeMs);return[e.name.padEnd(15),t.padEnd(7),e.state.padEnd(9),String(e.restarts).padEnd(9),n.padEnd(6),String(e.enabled).padEnd(8),String(e.durable)].join(` `)}function V(e){if(e===null)return`-`;let t=Math.max(0,Math.round(e/1e3));return t<60?`${t}s`:`${Math.floor(t/60)}m${t%60}s`}function H(e,t){if(t===0)return``;let n=e.split(`
|
|
38
38
|
`);return n[n.length-1]===``&&n.pop(),`${n.slice(-t).join(`
|
|
39
39
|
`)}${e.endsWith(`
|
|
40
40
|
`)?`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./slicc-version-
|
|
1
|
+
import{n as e}from"./slicc-version-D1Js64gw.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(`
|
|
@@ -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-D1l9WE1j.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-uChv9nwr.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{t as e}from"./base64-BPBW1Gzr.js";import{m as t}from"./state-B6uRuQMD.js";import{t as n}from"./realm-browser-fetch-V3uggGbM.js";const r=new TextEncoder;function i(e){return typeof e==`object`&&!!e&&`exitCode`in e}async function a(e,t){try{return await e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t))}catch{return{message:`curlwright: cannot read ${t}`,exitCode:26}}}function o(e){let t=new Uint8Array(e.length),n=0;for(let r of e)r!==10&&r!==13&&(t[n++]=r);return t.subarray(0,n)}async function s(e,t){let n=t.indexOf(`=`),o=t.indexOf(`@`),s=o!==-1&&(n===-1||o<n),c=s?o:n,l=c===-1?``:t.slice(0,c),u=c===-1?t:t.slice(c+1),d=u;if(s){let t=await a(e,u);if(i(t))return t;d=new TextDecoder().decode(t)}let f=encodeURIComponent(d);return r.encode(l===``?f:`${l}=${f}`)}async function c(e,t){if(t.kind===`urlencode`)return s(e,t.value);if(t.kind===`raw`||!t.value.startsWith(`@`))return r.encode(t.value);let n=await a(e,t.value.slice(1));return i(n)||t.kind===`binary`?n:o(n)}function l(e){let t=Math.max(0,e.length-1),n=e.reduce((e,t)=>e+t.length,0)+t,r=new Uint8Array(n),i=0;return e.forEach((e,t)=>{t>0&&(r[i++]=38),r.set(e,i),i+=e.length}),r}function u(e){let t=e.split(`;`);return{value:t[0],options:t.slice(1)}}function d(e,t){for(let n of e){let e=n.trim();if(e.startsWith(`${t}=`))return e.slice(t.length+1)}return null}function f(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n===-1?t:t.slice(n+1)}async function p(e,t,n){let r=n.value.indexOf(`=`);if(r===-1)return{message:`curlwright: -F requires name=content (got "${n.value}")`,exitCode:2};let o=n.value.slice(0,r),s=n.value.slice(r+1);if(n.literal||s[0]!==`@`&&s[0]!==`<`)return t.append(o,s),null;let{value:c,options:l}=u(s.slice(1)),p=await a(e,c);if(i(p))return p;if(s[0]===`<`)return t.append(o,new TextDecoder().decode(p)),null;let m=d(l,`type`)??`application/octet-stream`,h=d(l,`filename`)??f(c);return t.append(o,new Blob([p],{type:m}),h),null}async function m(e,t,n){if(t.length>0&&n.length>0)return{message:`curlwright: -F cannot be combined with -d`,exitCode:2};if(n.length>0){let t=new FormData;for(let r of n){let n=await p(e,t,r);if(n)return n}return{bytes:null,form:t,contentType:null,accept:null}}if(t.length===0)return{bytes:null,form:null,contentType:null,accept:null};let r=[];for(let n of t){let t=await c(e,n);if(i(t))return t;r.push(t)}let a=t.some(e=>e.kind===`json`);return{bytes:l(r),form:null,contentType:a?`application/json`:`application/x-www-form-urlencoded`,accept:a?`application/json`:null}}const h=new Set([`request`,`header`,`data`,`data-raw`,`data-binary`,`data-ascii`,`data-urlencode`,`json`,`form`,`form-string`,`output`,`dump-header`,`write-out`,`max-time`,`user`,`referer`,`range`,`url`,`tab`,`frame`]),g=new Set([`silent`,`show-error`,`include`,`head`,`verbose`,`fail`,`location`,`remote-name`,`get`,`no-credentials`,`help`]),_={X:`request`,H:`header`,d:`data`,F:`form`,o:`output`,D:`dump-header`,w:`write-out`,m:`max-time`,u:`user`,e:`referer`,r:`range`},v={s:`silent`,S:`show-error`,i:`include`,I:`head`,v:`verbose`,f:`fail`,L:`location`,O:`remote-name`,G:`get`,h:`help`},y={cert:`client certificates are the browser profile's to present, not the shell's`,"cert-type":`client certificates are the browser profile's to present, not the shell's`,key:`client certificates are the browser profile's to present, not the shell's`,cacert:`the browser decides which roots to trust`,capath:`the browser decides which roots to trust`,insecure:`the browser enforces TLS verification; a page cannot opt out`,proxy:`proxying is configured on the browser, not per request`,"proxy-user":`proxying is configured on the browser, not per request`,interface:`a page cannot choose an outgoing interface`,"unix-socket":`a page cannot dial a unix socket`,resolve:`a page cannot override DNS resolution`,compressed:`always on — the browser negotiates encoding itself`,cookie:"the tab's own cookies are already sent; set one with `playwright-cli cookie-set`","cookie-jar":"cookies live in the browser profile; read them with `playwright-cli cookies`","limit-rate":`a page cannot throttle a fetch`,"continue-at":"a page fetch cannot resume; use `-H 'Range: bytes=N-'`","connect-timeout":"a page fetch cannot time the connect phase alone; use `--max-time`","http1.1":`the browser negotiates the HTTP version`,http2:`the browser negotiates the HTTP version`,http3:`the browser negotiates the HTTP version`,"no-buffer":`responses are read whole, never streamed to stdout`,"trace-ascii":"no wire trace exists; use `playwright-cli network-requests`",trace:"no wire trace exists; use `playwright-cli network-requests`","user-agent":`User-Agent is a forbidden header name for fetch(); the tab sets it`},b={k:`insecure`,x:`proxy`,b:`cookie`,c:`cookie-jar`,E:`cert`,C:`continue-at`,N:`no-buffer`,A:`user-agent`};function ee(){return{url:null,requestMethod:null,headers:[],data:[],form:[],get:!1,output:null,remoteName:!1,include:!1,head:!1,dumpHeader:null,writeOut:null,silent:!1,showError:!1,verbose:!1,failOnError:!1,maxTimeSeconds:null,credentials:`include`,tab:null,frame:null,user:null,referer:null,range:null,help:!1}}function x(e,t){return{message:`curlwright: option ${e} is not supported in a page context — ${y[t]}`,exitCode:2}}function S(e){return{message:`curlwright: unknown option ${e}\nRun 'curlwright --help' for the supported flags.`,exitCode:2}}function C(e){let t=e.indexOf(`:`);if(t===-1)return e.endsWith(`;`)?{name:e.slice(0,-1).trim(),value:``,unset:!1}:{name:e.trim(),value:``,unset:!1};let n=e.slice(0,t).trim(),r=e.slice(t+1).trim();return{name:n,value:r,unset:r===``}}function w(e,t,n,r){switch(t){case`request`:return e.requestMethod=n,null;case`header`:return e.headers.push(C(n??``)),null;case`data`:case`data-ascii`:return e.data.push({kind:`ascii`,value:n??``}),null;case`data-raw`:return e.data.push({kind:`raw`,value:n??``}),null;case`data-binary`:return e.data.push({kind:`binary`,value:n??``}),null;case`data-urlencode`:return e.data.push({kind:`urlencode`,value:n??``}),null;case`json`:return e.data.push({kind:`json`,value:n??``}),null;case`form`:return e.form.push({value:n??``,literal:!1}),null;case`form-string`:return e.form.push({value:n??``,literal:!0}),null;case`output`:return e.output=n,null;case`dump-header`:return e.dumpHeader=n,null;case`write-out`:return e.writeOut=n,null;case`max-time`:return T(e,n,r);case`user`:return e.user=n,null;case`referer`:return e.referer=n,null;case`range`:return e.range=n,null;case`url`:return e.url=n,null;case`tab`:return e.tab=n,null;case`frame`:return e.frame=n,null;default:return E(e,t,r)}}function T(e,t,n){let r=Number(t);return!Number.isFinite(r)||r<=0?{message:`curlwright: ${n} expects a positive number of seconds`,exitCode:2}:(e.maxTimeSeconds=r,null)}function E(e,t,n){switch(t){case`silent`:return e.silent=!0,null;case`show-error`:return e.showError=!0,null;case`include`:return e.include=!0,null;case`head`:return e.head=!0,null;case`verbose`:return e.verbose=!0,null;case`fail`:return e.failOnError=!0,null;case`location`:return null;case`remote-name`:return e.remoteName=!0,null;case`get`:return e.get=!0,null;case`no-credentials`:return e.credentials=`omit`,null;case`help`:return e.help=!0,null;default:return S(n)}}function te(e,t,n){let r=t[n],i=r.indexOf(`=`),a=(i===-1?r.slice(2):r.slice(2,i)).trim(),o=i===-1?null:r.slice(i+1);if(a in y)return x(`--${a}`,a);if(h.has(a)){let r=o??t[n+1];return r===void 0?{message:`curlwright: option --${a} requires a value`,exitCode:2}:w(e,a,r,`--${a}`)??{next:o===null?n+2:n+1}}return g.has(a)?w(e,a,null,`--${a}`)??{next:n+1}:S(`--${a}`)}function ne(e,t,n){let r=t[n];for(let i=1;i<r.length;i++){let a=r[i];if(a in b)return x(`-${a}`,b[a]);if(a in _){let o=r.slice(i+1),s=o===``?t[n+1]:o;return s===void 0?{message:`curlwright: option -${a} requires a value`,exitCode:2}:w(e,_[a],s,`-${a}`)??{next:o===``?n+2:n+1}}if(!(a in v))return S(`-${a}`);let o=w(e,v[a],null,`-${a}`);if(o)return o}return{next:n+1}}function re(e,t){return e.url!==null&&e.url!==t?{message:`curlwright: only one URL is supported (got "${e.url}" and "${t}")`,exitCode:2}:(e.url=t,null)}function ie(e){let t=ee(),n=0,r=!1;for(;n<e.length;){let i=e[n];if(!r&&i===`--`){r=!0,n++;continue}if(!r&&i.startsWith(`--`)){let r=te(t,e,n);if(`message`in r)return r;n=r.next;continue}if(!r&&i.startsWith(`-`)&&i.length>1){let r=ne(t,e,n);if(`message`in r)return r;n=r.next;continue}let a=re(t,i);if(a)return a;n++}return t}function ae(e){return`message`in e}const D={"accept-charset":`the browser sets it`,"accept-encoding":`the browser negotiates encoding`,connection:`the browser owns the connection`,"content-length":`derived from the body`,cookie:"the tab's cookies are sent already; set one with `playwright-cli cookie-set`",cookie2:`the tab's cookies are sent already`,date:`the browser sets it`,dnt:`the browser sets it`,expect:`a page fetch cannot send it`,host:`derived from the URL`,"keep-alive":`the browser owns the connection`,origin:`the tab's own origin is sent automatically`,referer:`use -e/--referer, which sets the fetch referrer`,te:`the browser owns transfer encoding`,trailer:`the browser owns transfer encoding`,"transfer-encoding":`the browser owns transfer encoding`,upgrade:`the browser owns the connection`,via:`the browser sets it`};function oe(e){let t=e.toLowerCase();return t in D?D[t]:t.startsWith(`proxy-`)?`proxying is configured on the browser`:t.startsWith(`sec-`)?`Sec- headers are reserved for the browser`:null}function se(e){for(let t of e){let e=oe(t.name);if(e)return{message:`curlwright: header "${t.name}" cannot be set from a page — ${e}`,exitCode:2}}return null}function O(e,t){let n=t.toLowerCase();return Object.keys(e).some(e=>e.toLowerCase()===n)}function k(e){let t={},n=new Set;for(let r of e.headers)if(r.name!==``){if(r.unset){n.add(r.name.toLowerCase());continue}t[r.name]=r.value}return{headers:t,suppressed:n}}function A(e,t,n){return!O(e,n)&&!t.has(n)}function j(e){return/^[a-zA-Z]+=/.test(e)?e:`bytes=${e}`}function M(e,t,n,r){n.user!==null&&A(e,t,`authorization`)&&(e.Authorization=`Basic ${btoa(n.user)}`),n.range!==null&&A(e,t,`range`)&&(e.Range=j(n.range)),r.contentType&&A(e,t,`content-type`)&&(e[`Content-Type`]=r.contentType),r.accept&&A(e,t,`accept`)&&(e.Accept=r.accept)}function N(e,t){if(t===``)return e;let[n,r]=P(e);return`${n}${n.includes(`?`)?`&`:`?`}${t}${r}`}function P(e){let t=e.indexOf(`#`);return t===-1?[e,``]:[e.slice(0,t),e.slice(t)]}function F(e,t){return e.requestMethod?e.requestMethod:e.head?`HEAD`:t?`POST`:`GET`}function I(e,t,n){let r=e.toUpperCase();return!t||r!==`GET`&&r!==`HEAD`?null:{message:`curlwright: ${n.requestMethod?`-X ${n.requestMethod}`:`-I`} cannot carry a request body — a page fetch rejects a ${r} with one. Drop the data, or use -G to send it as a query string.`,exitCode:2}}function L(e,t){if(e.url===null)return{message:`curlwright: no URL specified`,exitCode:2};let{headers:n,suppressed:r}=k(e),i=e.get&&t.bytes!==null,a=i?{...t,bytes:null,contentType:null}:t;M(n,r,e,a);let o=i?N(e.url,new TextDecoder().decode(t.bytes??new Uint8Array)):e.url,s=a.bytes!==null||a.form!==null,c=F(e,s),l=I(c,s,e);if(l)return l;let u={method:c,headers:n,credentials:e.credentials,responseType:`binary`};return a.form?u.body=a.form:a.bytes&&(u.body=a.bytes),e.referer!==null&&(u.referrer=e.referer),e.maxTimeSeconds!==null&&(u.timeoutMs=e.maxTimeSeconds*1e3),{url:o,method:c,fetchOptions:u,uploadSize:a.bytes?.length??0}}function R(e){let t=e.fetchOptions.headers??{},n=[`> ${e.method} ${e.url}`];for(let[e,r]of Object.entries(t))n.push(`> ${e}: ${r}`);return n.push(`> `),`${n.join(`
|
|
1
|
+
import{t as e}from"./base64-BPBW1Gzr.js";import{m as t}from"./state-BpyjzTIG.js";import{t as n}from"./realm-browser-fetch-V3uggGbM.js";const r=new TextEncoder;function i(e){return typeof e==`object`&&!!e&&`exitCode`in e}async function a(e,t){try{return await e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t))}catch{return{message:`curlwright: cannot read ${t}`,exitCode:26}}}function o(e){let t=new Uint8Array(e.length),n=0;for(let r of e)r!==10&&r!==13&&(t[n++]=r);return t.subarray(0,n)}async function s(e,t){let n=t.indexOf(`=`),o=t.indexOf(`@`),s=o!==-1&&(n===-1||o<n),c=s?o:n,l=c===-1?``:t.slice(0,c),u=c===-1?t:t.slice(c+1),d=u;if(s){let t=await a(e,u);if(i(t))return t;d=new TextDecoder().decode(t)}let f=encodeURIComponent(d);return r.encode(l===``?f:`${l}=${f}`)}async function c(e,t){if(t.kind===`urlencode`)return s(e,t.value);if(t.kind===`raw`||!t.value.startsWith(`@`))return r.encode(t.value);let n=await a(e,t.value.slice(1));return i(n)||t.kind===`binary`?n:o(n)}function l(e){let t=Math.max(0,e.length-1),n=e.reduce((e,t)=>e+t.length,0)+t,r=new Uint8Array(n),i=0;return e.forEach((e,t)=>{t>0&&(r[i++]=38),r.set(e,i),i+=e.length}),r}function u(e){let t=e.split(`;`);return{value:t[0],options:t.slice(1)}}function d(e,t){for(let n of e){let e=n.trim();if(e.startsWith(`${t}=`))return e.slice(t.length+1)}return null}function f(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n===-1?t:t.slice(n+1)}async function p(e,t,n){let r=n.value.indexOf(`=`);if(r===-1)return{message:`curlwright: -F requires name=content (got "${n.value}")`,exitCode:2};let o=n.value.slice(0,r),s=n.value.slice(r+1);if(n.literal||s[0]!==`@`&&s[0]!==`<`)return t.append(o,s),null;let{value:c,options:l}=u(s.slice(1)),p=await a(e,c);if(i(p))return p;if(s[0]===`<`)return t.append(o,new TextDecoder().decode(p)),null;let m=d(l,`type`)??`application/octet-stream`,h=d(l,`filename`)??f(c);return t.append(o,new Blob([p],{type:m}),h),null}async function m(e,t,n){if(t.length>0&&n.length>0)return{message:`curlwright: -F cannot be combined with -d`,exitCode:2};if(n.length>0){let t=new FormData;for(let r of n){let n=await p(e,t,r);if(n)return n}return{bytes:null,form:t,contentType:null,accept:null}}if(t.length===0)return{bytes:null,form:null,contentType:null,accept:null};let r=[];for(let n of t){let t=await c(e,n);if(i(t))return t;r.push(t)}let a=t.some(e=>e.kind===`json`);return{bytes:l(r),form:null,contentType:a?`application/json`:`application/x-www-form-urlencoded`,accept:a?`application/json`:null}}const h=new Set([`request`,`header`,`data`,`data-raw`,`data-binary`,`data-ascii`,`data-urlencode`,`json`,`form`,`form-string`,`output`,`dump-header`,`write-out`,`max-time`,`user`,`referer`,`range`,`url`,`tab`,`frame`]),g=new Set([`silent`,`show-error`,`include`,`head`,`verbose`,`fail`,`location`,`remote-name`,`get`,`no-credentials`,`help`]),_={X:`request`,H:`header`,d:`data`,F:`form`,o:`output`,D:`dump-header`,w:`write-out`,m:`max-time`,u:`user`,e:`referer`,r:`range`},v={s:`silent`,S:`show-error`,i:`include`,I:`head`,v:`verbose`,f:`fail`,L:`location`,O:`remote-name`,G:`get`,h:`help`},y={cert:`client certificates are the browser profile's to present, not the shell's`,"cert-type":`client certificates are the browser profile's to present, not the shell's`,key:`client certificates are the browser profile's to present, not the shell's`,cacert:`the browser decides which roots to trust`,capath:`the browser decides which roots to trust`,insecure:`the browser enforces TLS verification; a page cannot opt out`,proxy:`proxying is configured on the browser, not per request`,"proxy-user":`proxying is configured on the browser, not per request`,interface:`a page cannot choose an outgoing interface`,"unix-socket":`a page cannot dial a unix socket`,resolve:`a page cannot override DNS resolution`,compressed:`always on — the browser negotiates encoding itself`,cookie:"the tab's own cookies are already sent; set one with `playwright-cli cookie-set`","cookie-jar":"cookies live in the browser profile; read them with `playwright-cli cookies`","limit-rate":`a page cannot throttle a fetch`,"continue-at":"a page fetch cannot resume; use `-H 'Range: bytes=N-'`","connect-timeout":"a page fetch cannot time the connect phase alone; use `--max-time`","http1.1":`the browser negotiates the HTTP version`,http2:`the browser negotiates the HTTP version`,http3:`the browser negotiates the HTTP version`,"no-buffer":`responses are read whole, never streamed to stdout`,"trace-ascii":"no wire trace exists; use `playwright-cli network-requests`",trace:"no wire trace exists; use `playwright-cli network-requests`","user-agent":`User-Agent is a forbidden header name for fetch(); the tab sets it`},b={k:`insecure`,x:`proxy`,b:`cookie`,c:`cookie-jar`,E:`cert`,C:`continue-at`,N:`no-buffer`,A:`user-agent`};function ee(){return{url:null,requestMethod:null,headers:[],data:[],form:[],get:!1,output:null,remoteName:!1,include:!1,head:!1,dumpHeader:null,writeOut:null,silent:!1,showError:!1,verbose:!1,failOnError:!1,maxTimeSeconds:null,credentials:`include`,tab:null,frame:null,user:null,referer:null,range:null,help:!1}}function x(e,t){return{message:`curlwright: option ${e} is not supported in a page context — ${y[t]}`,exitCode:2}}function S(e){return{message:`curlwright: unknown option ${e}\nRun 'curlwright --help' for the supported flags.`,exitCode:2}}function C(e){let t=e.indexOf(`:`);if(t===-1)return e.endsWith(`;`)?{name:e.slice(0,-1).trim(),value:``,unset:!1}:{name:e.trim(),value:``,unset:!1};let n=e.slice(0,t).trim(),r=e.slice(t+1).trim();return{name:n,value:r,unset:r===``}}function w(e,t,n,r){switch(t){case`request`:return e.requestMethod=n,null;case`header`:return e.headers.push(C(n??``)),null;case`data`:case`data-ascii`:return e.data.push({kind:`ascii`,value:n??``}),null;case`data-raw`:return e.data.push({kind:`raw`,value:n??``}),null;case`data-binary`:return e.data.push({kind:`binary`,value:n??``}),null;case`data-urlencode`:return e.data.push({kind:`urlencode`,value:n??``}),null;case`json`:return e.data.push({kind:`json`,value:n??``}),null;case`form`:return e.form.push({value:n??``,literal:!1}),null;case`form-string`:return e.form.push({value:n??``,literal:!0}),null;case`output`:return e.output=n,null;case`dump-header`:return e.dumpHeader=n,null;case`write-out`:return e.writeOut=n,null;case`max-time`:return T(e,n,r);case`user`:return e.user=n,null;case`referer`:return e.referer=n,null;case`range`:return e.range=n,null;case`url`:return e.url=n,null;case`tab`:return e.tab=n,null;case`frame`:return e.frame=n,null;default:return E(e,t,r)}}function T(e,t,n){let r=Number(t);return!Number.isFinite(r)||r<=0?{message:`curlwright: ${n} expects a positive number of seconds`,exitCode:2}:(e.maxTimeSeconds=r,null)}function E(e,t,n){switch(t){case`silent`:return e.silent=!0,null;case`show-error`:return e.showError=!0,null;case`include`:return e.include=!0,null;case`head`:return e.head=!0,null;case`verbose`:return e.verbose=!0,null;case`fail`:return e.failOnError=!0,null;case`location`:return null;case`remote-name`:return e.remoteName=!0,null;case`get`:return e.get=!0,null;case`no-credentials`:return e.credentials=`omit`,null;case`help`:return e.help=!0,null;default:return S(n)}}function te(e,t,n){let r=t[n],i=r.indexOf(`=`),a=(i===-1?r.slice(2):r.slice(2,i)).trim(),o=i===-1?null:r.slice(i+1);if(a in y)return x(`--${a}`,a);if(h.has(a)){let r=o??t[n+1];return r===void 0?{message:`curlwright: option --${a} requires a value`,exitCode:2}:w(e,a,r,`--${a}`)??{next:o===null?n+2:n+1}}return g.has(a)?w(e,a,null,`--${a}`)??{next:n+1}:S(`--${a}`)}function ne(e,t,n){let r=t[n];for(let i=1;i<r.length;i++){let a=r[i];if(a in b)return x(`-${a}`,b[a]);if(a in _){let o=r.slice(i+1),s=o===``?t[n+1]:o;return s===void 0?{message:`curlwright: option -${a} requires a value`,exitCode:2}:w(e,_[a],s,`-${a}`)??{next:o===``?n+2:n+1}}if(!(a in v))return S(`-${a}`);let o=w(e,v[a],null,`-${a}`);if(o)return o}return{next:n+1}}function re(e,t){return e.url!==null&&e.url!==t?{message:`curlwright: only one URL is supported (got "${e.url}" and "${t}")`,exitCode:2}:(e.url=t,null)}function ie(e){let t=ee(),n=0,r=!1;for(;n<e.length;){let i=e[n];if(!r&&i===`--`){r=!0,n++;continue}if(!r&&i.startsWith(`--`)){let r=te(t,e,n);if(`message`in r)return r;n=r.next;continue}if(!r&&i.startsWith(`-`)&&i.length>1){let r=ne(t,e,n);if(`message`in r)return r;n=r.next;continue}let a=re(t,i);if(a)return a;n++}return t}function ae(e){return`message`in e}const D={"accept-charset":`the browser sets it`,"accept-encoding":`the browser negotiates encoding`,connection:`the browser owns the connection`,"content-length":`derived from the body`,cookie:"the tab's cookies are sent already; set one with `playwright-cli cookie-set`",cookie2:`the tab's cookies are sent already`,date:`the browser sets it`,dnt:`the browser sets it`,expect:`a page fetch cannot send it`,host:`derived from the URL`,"keep-alive":`the browser owns the connection`,origin:`the tab's own origin is sent automatically`,referer:`use -e/--referer, which sets the fetch referrer`,te:`the browser owns transfer encoding`,trailer:`the browser owns transfer encoding`,"transfer-encoding":`the browser owns transfer encoding`,upgrade:`the browser owns the connection`,via:`the browser sets it`};function oe(e){let t=e.toLowerCase();return t in D?D[t]:t.startsWith(`proxy-`)?`proxying is configured on the browser`:t.startsWith(`sec-`)?`Sec- headers are reserved for the browser`:null}function se(e){for(let t of e){let e=oe(t.name);if(e)return{message:`curlwright: header "${t.name}" cannot be set from a page — ${e}`,exitCode:2}}return null}function O(e,t){let n=t.toLowerCase();return Object.keys(e).some(e=>e.toLowerCase()===n)}function k(e){let t={},n=new Set;for(let r of e.headers)if(r.name!==``){if(r.unset){n.add(r.name.toLowerCase());continue}t[r.name]=r.value}return{headers:t,suppressed:n}}function A(e,t,n){return!O(e,n)&&!t.has(n)}function j(e){return/^[a-zA-Z]+=/.test(e)?e:`bytes=${e}`}function M(e,t,n,r){n.user!==null&&A(e,t,`authorization`)&&(e.Authorization=`Basic ${btoa(n.user)}`),n.range!==null&&A(e,t,`range`)&&(e.Range=j(n.range)),r.contentType&&A(e,t,`content-type`)&&(e[`Content-Type`]=r.contentType),r.accept&&A(e,t,`accept`)&&(e.Accept=r.accept)}function N(e,t){if(t===``)return e;let[n,r]=P(e);return`${n}${n.includes(`?`)?`&`:`?`}${t}${r}`}function P(e){let t=e.indexOf(`#`);return t===-1?[e,``]:[e.slice(0,t),e.slice(t)]}function F(e,t){return e.requestMethod?e.requestMethod:e.head?`HEAD`:t?`POST`:`GET`}function I(e,t,n){let r=e.toUpperCase();return!t||r!==`GET`&&r!==`HEAD`?null:{message:`curlwright: ${n.requestMethod?`-X ${n.requestMethod}`:`-I`} cannot carry a request body — a page fetch rejects a ${r} with one. Drop the data, or use -G to send it as a query string.`,exitCode:2}}function L(e,t){if(e.url===null)return{message:`curlwright: no URL specified`,exitCode:2};let{headers:n,suppressed:r}=k(e),i=e.get&&t.bytes!==null,a=i?{...t,bytes:null,contentType:null}:t;M(n,r,e,a);let o=i?N(e.url,new TextDecoder().decode(t.bytes??new Uint8Array)):e.url,s=a.bytes!==null||a.form!==null,c=F(e,s),l=I(c,s,e);if(l)return l;let u={method:c,headers:n,credentials:e.credentials,responseType:`binary`};return a.form?u.body=a.form:a.bytes&&(u.body=a.bytes),e.referer!==null&&(u.referrer=e.referer),e.maxTimeSeconds!==null&&(u.timeoutMs=e.maxTimeSeconds*1e3),{url:o,method:c,fetchOptions:u,uploadSize:a.bytes?.length??0}}function R(e){let t=e.fetchOptions.headers??{},n=[`> ${e.method} ${e.url}`];for(let[e,r]of Object.entries(t))n.push(`> ${e}: ${r}`);return n.push(`> `),`${n.join(`
|
|
2
2
|
`)}\n`}function z(e,t){let n=[`< ${e}`];for(let[e,r]of Object.entries(t))n.push(`< ${e}: ${r}`);return n.push(`< `),`${n.join(`
|
|
3
3
|
`)}\n`}function B(t,n){return typeof t==`string`?n===`base64`?e(t):new TextEncoder().encode(t):new Uint8Array}function V(e,t){return t?`HTTP/1.1 ${e} ${t}`:`HTTP/1.1 ${e}`}function H(e,t,n){let r=[V(e,t)];for(let[e,t]of Object.entries(n))r.push(`${e}: ${t}`);return`${r.join(`\r
|
|
4
4
|
`)}\r\n\r\n`}function U(e){if(e.includes(0))return!0;try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e),!1}catch{return!0}}function W(e){let t;try{t=new URL(e).pathname}catch{t=e.split(`?`)[0]}return t.replace(/\/+$/,``).split(`/`).pop()||null}function G(e,t,n){return new TextEncoder().encode(H(e,t,n)).length}function K(e){try{return new URL(e).origin}catch{return null}}function q(e){return e.map(e=>` --tab=${e.targetId} ${e.url}`).join(`
|
|
@@ -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-LwLxI7v1.js`).then(e=>e.t),a=await import(`./providers-B0rCH1pp.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-Gh6Z-BhZ.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-Gh6Z-BhZ.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-LwLxI7v1.js`).then(e=>e.t),{getRegisteredProviderConfig:r,getRegisteredProviderIds:i}=await import(`./providers-B0rCH1pp.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-LwLxI7v1.js`).then(e=>e.t),{getRegisteredProviderConfig:i,getRegisteredProviderIds:a}=await import(`./providers-B0rCH1pp.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-LwLxI7v1.js`).then(e=>e.t),{getRegisteredProviderConfig:r,getRegisteredProviderIds:i}=await import(`./providers-B0rCH1pp.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
|
`)+`
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{r as t}from"./base64-BPBW1Gzr.js";import"./bridge-protocol-31SWTdS5.js";import{n}from"./host-command-B0EUpLfV.js";import{n as r,t as i}from"./panel-rpc-DVS1uJpt.js";import{a,i as o,n as s}from"./tool-ui-DRnUkp2g.js";import{r as c,t as l}from"./subcommand-help-CgO7wRS5.js";import{t as u}from"./approval-timeout-BQ29Z0gf.js";import{t as d}from"./tmpdir-env-ate4iNcK.js";import{n as f}from"./screencapture-media-shared-DlK1Wqh8.js";import{c as p,l as m,r as h,u as g}from"./frame-bytes-BSmP8I94.js";import{i as ee,n as te,o as ne,s as re,t as ie}from"./frames-C1gdZfee.js";import{getComputerRegistry as ae,installComputerRegistry as oe}from"./registry-DfuJBCKY.js";import{getComputersHost as _}from"./host-DDFasAvt.js";import{t as se}from"./engine-CzMNXd8U.js";const ce=[`bridgeToken`,`bridge`,`tray`],le=[`cherry`,`connect`],ue=[`/join/`,`/tray/`],de=[``,`/`,`/cloud`,`/connect`];function fe(e){let t=e.replace(/\/index\.html$/,`/`);return t.length>1?t.replace(/\/$/,``):t}function pe(e,t={}){let n;try{n=new URL(e)}catch{return!1}for(let e of ce)if(n.searchParams.has(e))return!0;for(let e of le)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=fe(n.pathname);return de.includes(r)?!0:ue.some(e=>`${r}/`.startsWith(e))}function v(e={x:0,y:0}){return{x:e.x,y:e.y}}function me(e,t){return t.x!==void 0&&t.y!==void 0&&(e.x=t.x,e.y=t.y),e}function y(e,t){return t.x!==void 0&&t.y!==void 0?(e.x=t.x,e.y=t.y,{x:t.x,y:t.y}):{x:e.x,y:e.y}}function he(e,t){return t.map(t=>{if(t.type===`mousemove`||t.type===`click`||t.type===`button`||t.type===`scroll`){let n=y(e,t);return{...t,x:n.x,y:n.y}}return t.type===`drag`&&me(e,{x:t.x2,y:t.y2}),t})}const b={low:256,medium:768,high:1536};function x(e){if(!e)return b.medium;if(e in b)return b[e];let t=/^(\d+)(?:x\d+)?$/u.exec(e);if(t){let e=Number.parseInt(t[1],10);if(e>0)return e}return b.medium}function ge(e,t){let n=e.width>0?e.width:t.width,r=e.height>0?e.height:t.height,i=t.width,a=t.height,o=n>0?i/n:1;return{nativeWidth:n,nativeHeight:r,shotWidth:i,shotHeight:a,scale:o>0?o:1}}function _e(e){let t=e.scale===1?`1`:e.scale.toFixed(2).replace(/0+$/u,``).replace(/\.$/u,``);return`${e.nativeWidth}x${e.nativeHeight} → ${e.shotWidth}x${e.shotHeight} (scale ${t})`}function ve(e,t){return{width:e.shotWidth,height:e.shotHeight,scale:e.scale,at:t}}function ye(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)}}function be(e,t,n){let r=Number.isFinite(n)&&n>0?n:1;return r===1?{x:e,y:t}:{x:Math.round(e/r),y:Math.round(t/r)}}function S(e){return`tab:${e}`}const xe={screenshot:!0,text:!1,frames:`poll`,keyboard:!0,mouse:`absolute`,scroll:!0,exec:!1,inputAllowed:!0},C={1:`left`,2:`middle`,3:`right`};function w(e){if(pe(e.url))throw Error(`refusing SLICC app tab '${e.title??e.url}'`)}var Se=class{browser;targetId;seq=0;title;url;size=null;pointer=v();constructor(e,t,n={title:t,url:``}){this.browser=e,this.targetId=t,this.title=n.title,this.url=n.url}describe(){return{id:S(this.targetId),kind:`tab`,title:this.title,size:this.size,state:`live`,capabilities:xe,pid:null}}async screenshot(e){return await this.refreshInfo(),w({url:this.url,title:this.title}),this.browser.withTab(this.targetId,async t=>{let n=await Ce(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(),w({url:this.url,title:this.title}),await this.browser.withTab(this.targetId,async t=>{let n=await D(t);for(let r of e)await T(t,r,this.pointer,n)})}async close(){}async refreshInfo(){let e=await Ae(this.browser,this.targetId);e&&(this.title=e.title||this.title,this.url=e.url||this.url)}};async function Ce(e,t){let n=await e.screenshot({format:`png`}),r=h(n),i=g(r)??p(r),a=r;t.maxWidth&&i&&i.width>t.maxWidth?a=h(await e.screenshot({format:`png`,maxWidth:t.maxWidth})):t.format!==`png`&&(a=h(await e.screenshot({format:`jpeg`,quality:70})));let o=g(a)??p(a)??i??{width:0,height:0};return t.format!==`png`&&!p(a)&&(a=await m(a)),{mime:p(a)?`image/jpeg`:`image/png`,bytes:a,width:o.width,height:o.height,native:i}}var we=class{rpc;targetId;seq=0;title;url;size=null;pointer=v();constructor(e,t,n={title:t,url:``}){this.rpc=e,this.targetId=t,this.title=n.title,this.url=n.url}describe(){return{id:S(this.targetId),kind:`tab`,title:this.title,size:this.size,state:`live`,capabilities:xe,pid:null}}async screenshot(e){let t=await this.rpc.call(`computer-tab-screenshot`,{targetId:this.targetId,maxWidth:e.maxWidth,format:e.format});return this.title=t.title,this.url=t.url,this.size=t.nativeWidth&&t.nativeHeight?{width:t.nativeWidth,height:t.nativeHeight}:{width:t.width,height:t.height},this.seq+=1,{seq:this.seq,mime:t.mime,width:t.width,height:t.height,bytes:h(t.base64)}}async input(e){let t=he(this.pointer,e);await this.rpc.call(`computer-tab-input`,{targetId:this.targetId,events:t})}async close(){}};async function T(e,t,n=v(),r){let i=r??await D(e);switch(t.type){case`mousemove`:{let r=E(n,t,i);await e.send(`Input.dispatchMouseEvent`,{type:`mouseMoved`,x:r.x,y:r.y});return}case`button`:await Te(e,t,n,i);return;case`click`:await Ee(e,t,n,i);return;case`drag`:await De(e,t,n,i);return;case`scroll`:{let r=E(n,t,i);await e.send(`Input.dispatchMouseEvent`,{type:`mouseWheel`,x:r.x,y:r.y,deltaX:t.dx,deltaY:t.dy});return}case`key`:await Oe(e,t);return;case`text`:await e.send(`Input.insertText`,{text:t.text});return;case`wait`:await O(Math.max(0,t.ms));return}}async function Te(e,t,n,r){let i=E(n,t,r);await e.send(`Input.dispatchMouseEvent`,{type:t.down?`mousePressed`:`mouseReleased`,x:i.x,y:i.y,button:C[t.button],clickCount:1})}async function Ee(e,t,n,r){let i=E(n,t,r),a=Math.max(1,t.count);for(let n=1;n<=a;n++)await e.send(`Input.dispatchMouseEvent`,{type:`mousePressed`,x:i.x,y:i.y,button:C[t.button],clickCount:n}),t.holdMs&&t.holdMs>0&&await O(t.holdMs),await e.send(`Input.dispatchMouseEvent`,{type:`mouseReleased`,x:i.x,y:i.y,button:C[t.button],clickCount:n})}async function De(e,t,n,r){await T(e,{type:`mousemove`,x:t.x1,y:t.y1},n,r),await T(e,{type:`button`,button:1,down:!0,x:t.x1,y:t.y1},n,r),await T(e,{type:`mousemove`,x:t.x2,y:t.y2},n,r),await T(e,{type:`button`,button:1,down:!1,x:t.x2,y:t.y2},n,r)}async function Oe(e,t){let n=ne(t.keysym);if(!n)throw Error(`unknown keysym '${t.keysym}'`);for(let r of re(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 E(e,t,n){let r=y(e,t);return be(r.x,r.y,n)}async function D(e){try{let t=await e.evaluate(`window.devicePixelRatio`);return typeof t==`number`&&Number.isFinite(t)&&t>0?t:1}catch{return 1}}function ke(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 Ae(e,t){let n=(await e.listAllTargets()).find(e=>e.targetId===t);return n?{title:n.title,url:n.url}:null}function O(e){return new Promise(t=>setTimeout(t,e))}function je(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 k=`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. -c takes an id, the
|
|
8
|
+
\`-n\` name (preferred — it never changes), or the live title.
|
|
9
|
+
|
|
10
|
+
Lifecycle:
|
|
11
|
+
ls list registered computers (NAME is the -n handle,
|
|
12
|
+
TITLE is what the surface currently calls itself)
|
|
13
|
+
add tab <targetId|url> [-n name]
|
|
14
|
+
register a browser tab (refuses SLICC app tabs)
|
|
15
|
+
add screen [-n name] share this display (needs a user gesture)
|
|
16
|
+
add ssh <follower> [--sim <udid>] [--allow-input] [-n name]
|
|
17
|
+
follower desktop (or iOS Simulator on a Mac).
|
|
18
|
+
--allow-input needs sudo (phone can Face ID).
|
|
19
|
+
The iOS follower itself is never a computer.
|
|
20
|
+
add url <http(s)://base> [-n name]
|
|
21
|
+
HTTP remote computer (GET /computer). Trailing
|
|
22
|
+
/computer is stripped. node-server --computer-demo
|
|
23
|
+
is the in-tree reference.
|
|
24
|
+
rm [id] unregister (stops a live screen share)
|
|
25
|
+
use <id> set the default computer
|
|
26
|
+
info descriptor for the current target
|
|
27
|
+
|
|
28
|
+
Look:
|
|
29
|
+
screenshot [--size low|medium|high|<N>] [--view] [file]
|
|
30
|
+
JPEG; prints WxH → wxh (scale s) and a frozen frame
|
|
31
|
+
text text-mode dump when the backend supports it
|
|
32
|
+
watch [--fps N] [--stop] live frames to the page (phase 2 UI)
|
|
33
|
+
record [-V|--duration SEC] [--fps N] [file]
|
|
34
|
+
timed clip (screen: live session; other kinds:
|
|
35
|
+
JPEG stills through ffmpeg -f image2pipe, max 60s,
|
|
36
|
+
--fps ≤10, streamed into the encoder)
|
|
37
|
+
|
|
38
|
+
Poke (xdotool; every verb ends with a frozen-frame line):
|
|
39
|
+
mousemove <x> <y> [--relative]
|
|
40
|
+
click [1|2|3] [--at x,y] [--hold MS] [--repeat N]
|
|
41
|
+
mousedown [1|2|3] [--at x,y]
|
|
42
|
+
mouseup [1|2|3] [--at x,y]
|
|
43
|
+
drag <x1> <y1> <x2> <y2>
|
|
44
|
+
scroll <dx> <dy> [--at x,y]
|
|
45
|
+
key <keysym> [keysym...] ctrl+alt+Delete, Return, F5, super+space
|
|
46
|
+
keydown <keysym>
|
|
47
|
+
keyup <keysym>
|
|
48
|
+
type <text...>
|
|
49
|
+
wait <ms>
|
|
50
|
+
exec <command...> when the backend supports it
|
|
51
|
+
|
|
52
|
+
Anthropic aliases (same verbs):
|
|
53
|
+
left_click right_click middle_click double_click triple_click
|
|
54
|
+
left_click_drag mouse_move scroll key type screenshot wait
|
|
55
|
+
|
|
56
|
+
Coordinates are screenshot-space of the last shot unless --native
|
|
57
|
+
(the pixel space the descriptor advertises). Tab computers convert
|
|
58
|
+
that native space to CSS pixels with the tab's devicePixelRatio.
|
|
59
|
+
Buttons: 1 left, 2 middle, 3 right. Chain verbs: computer click 1 type hello
|
|
60
|
+
|
|
61
|
+
v86 guests register as v86:<name> on \`v86 start\`. Prefer this command;
|
|
62
|
+
\`v86 type|key|mouse|screenshot|text\` remain as thin aliases.
|
|
63
|
+
`,Ne=[`-c`,`--computer`,`--size`,`--at`,`--hold`,`--repeat`,`--fps`,`-n`,`--name`,`--__resolved`,`-V`,`--duration`,`--sim`],Pe=new Set([`ls`,`add`,`rm`,`use`,`info`,`screenshot`,`text`,`watch`,`record`,`mousemove`,`click`,`mousedown`,`mouseup`,`drag`,`scroll`,`key`,`keydown`,`keyup`,`type`,`wait`,`exec`]),Fe={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`},Ie=new Set([`type`,`key`,`exec`,`add`]),Le=new Set([`--size`,`--at`,`--hold`,`--repeat`,`--fps`,`-n`,`--name`,`-c`,`--computer`,`--__resolved`,`-V`,`--duration`,`--sim`]);function Re(e){return Pe.has(e)||e in Fe}function ze(e){return Pe.has(e)?e:Fe[e]??null}function Be(e){let t=[],n,r=!1,i=!1;for(let a=0;a<e.length;a++){let o=e[a];if(o===`--`){t.push(...e.slice(a));break}if(o===`--json`){r=!0;continue}if(o===`--native`){i=!0;continue}if(o===`-c`||o===`--computer`){n=e[++a];continue}t.push(o)}return{computer:n,json:r,native:i,rest:t}}function Ve(e){let t=[],n=0;for(;n<e.length;){let r=e[n];if(r===`--`){n+=1;continue}let i=ze(r);if(!i)throw Error(`unknown verb '${r}' — see \`computer --help\``);n+=1;let{args:a,next:o}=Ue(i,e,n);t.push({verb:i,alias:r,args:He(r,i,a)}),n=o}return t}function He(e,t,n){return t===`click`?e===`left_click`?A(n,`1`):e===`middle_click`?A(n,`2`):e===`right_click`?A(n,`3`):e===`double_click`?[...A(n,`1`),`--repeat`,`2`]:e===`triple_click`?[...A(n,`1`),`--repeat`,`3`]:n:n}function A(e,t){return e[0]===`1`||e[0]===`2`||e[0]===`3`?e:[t,...e]}function Ue(e,t,n){return Ie.has(e)?We(t,n):Ge(qe(e),t,n)}function We(e,t){let n=[],r=t,i=!1;for(;r<e.length;){let t=e[r];if(!i&&t===`--`){i=!0,r+=1;continue}if(!i&&Re(t))break;n.push(t),r+=1}return{args:n,next:r}}function j(e){return e.startsWith(`--`)||e===`-n`||e===`-c`||e===`-V`}function M(e,t,n){let r=e[t];return n.push(r),t+=1,Le.has(r)&&t<e.length&&(n.push(e[t]),t+=1),t}function Ge(e,t,n){let r=[],i=n,a=0;for(;i<t.length;){let n=t[i];if(n===`--`){i+=1;continue}if(j(n)){i=M(t,i,r);continue}if(Re(n))break;if(r.push(n),a+=1,i+=1,a>=e&&e>0){i=Ke(t,i,r);break}}return{args:r,next:i}}function Ke(e,t,n){let r=t;for(;r<e.length&&j(e[r]);)r=M(e,r,n);return r}function qe(e){switch(e){case`mousemove`:return 2;case`drag`:return 4;case`scroll`:return 2;case`click`:case`mousedown`:case`mouseup`:return 3;case`wait`:case`keydown`:case`keyup`:case`rm`:case`use`:return 1;case`screenshot`:return 1;case`record`:return 1;default:return 0}}function N(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 P(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 F(e,t){return e.includes(t)}function I(e,t){for(let n of t){let t=e.indexOf(n);if(t!==-1)return e[t+1]}}function L(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n];if(r===`--`){t.push(...e.slice(n+1));break}if(r.startsWith(`--`)||r===`-n`||r===`-c`||r===`-V`){Le.has(r)&&(n+=1);continue}t.push(r)}return t}function Je(e){let t=0;for(let n of e)t+=n.byteLength;let n=new Uint8Array(t),r=0;for(let t of e)n.set(t,r),r+=t.byteLength;return n}function Ye(e){return new Promise(t=>{setTimeout(t,e)})}function R(e){return Math.min(10,Math.max(1,e))}async function Xe(e,t,n){let r=e;if(typeof r.appendFile==`function`){await r.appendFile(t,n);return}let i=new Uint8Array;if(typeof r.readFile==`function`)try{let e=await r.readFile(t,{encoding:`binary`});e instanceof Uint8Array&&(i=Uint8Array.from(e))}catch{}let a=new Uint8Array(i.byteLength+n.byteLength);a.set(i,0),a.set(n,i.byteLength),await e.writeFile(t,a)}async function Ze(e){let t=R(e.fps),n=Math.max(1,Math.round(1e3/t)),r=e.now??Date.now,i=e.sleep??Ye,a=r()+e.durationMs,o=0,s=0,c=0,l=0,u=!1;for(;;){let d=await e.screenshot(),f=l+d.bytes.byteLength;if(c>0&&(c>=600||f>8388608)){u=!0;break}o=d.width,s=d.height,await e.onFrame?.(d.bytes),c+=1,l=f;let p=c>=600||l>=8388608,m=r()+n>=a;if(p||m){u=p&&Math.round(c/t*1e3)<e.durationMs;break}await i(n)}return{width:o,height:s,frameCount:c,byteLength:l,durationMs:u?Math.round(c/t*1e3):e.durationMs,truncated:u}}function z(e){let t=d(e.env).replace(/\/$/u,``),n=crypto.randomUUID();return e.fs.resolvePath(e.cwd,`${t}/computer-record-${n}.mjpeg`)}async function B(e,t){let n=e;typeof n.rm==`function`&&await n.rm(t,{force:!0}).catch(()=>void 0)}function Qe(e){let t=e instanceof Map?new Map(e):new Map;return t.set(se,`wasm`),t}async function $e(e){let{runFfmpeg:t}=await import(`./run-dNFrBZDI.js`),n=!e.sourcePath,r=e.sourcePath??z(e.ctx);n&&(await e.ctx.fs.mkdir(r.slice(0,r.lastIndexOf(`/`)),{recursive:!0}),await e.ctx.fs.writeFile(r,Je(e.frames)));try{let n=await t([`-y`,`-hide_banner`,`-nostdin`,`-f`,`image2pipe`,`-c:v`,`mjpeg`,`-framerate`,String(e.fps),`-i`,r,`-an`,`-vf`,`scale=trunc(iw/2)*2:trunc(ih/2)*2`,`-c:v`,`libvpx`,`-b:v`,`1M`,`-pix_fmt`,`yuv420p`,e.dest],{...e.ctx,env:Qe(e.ctx.env)});if(n.exitCode!==0){let e=n.stderr.trim()||`ffmpeg failed`;throw Error(e)}return{mime:`video/webm`}}finally{n&&await B(e.ctx.fs,r)}}async function et(e,t){let n=await e.fs.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?Uint8Array.from(n):new Uint8Array}async function tt(e){let t=R(e.fps),n=z(e.ctx);await e.ctx.fs.mkdir(n.slice(0,n.lastIndexOf(`/`)),{recursive:!0}),await e.ctx.fs.writeFile(n,new Uint8Array);try{let r=await Ze({screenshot:e.screenshot,durationMs:e.durationMs,fps:t,now:e.now,sleep:e.sleep,onFrame:t=>Xe(e.ctx.fs,n,t)}),{mime:i}=await(e.encode??$e)({frames:[],sourcePath:n,fps:t,dest:e.dest,width:r.width,height:r.height,durationMs:r.durationMs,ctx:e.ctx}),a=new Uint8Array;try{a=await et(e.ctx,e.dest)}catch{}return{bytes:a,mime:i,width:r.width,height:r.height,durationMs:r.durationMs,...r.truncated?{truncated:!0}:{}}}finally{await B(e.ctx.fs,n)}}const V=new Set;let H;function nt(e){if(typeof e!=`object`||!e)return!1;let t=Object.getOwnPropertyDescriptor(e,`type`)?.value,n=Object.getOwnPropertyDescriptor(e,`id`)?.value;return(t===`begin`||t===`end`)&&typeof n==`string`}function U(e){e.type===`begin`?V.add(e.id):V.delete(e.id)}function rt(){if(H===void 0){if(typeof BroadcastChannel!=`function`){H=null;return}try{H=new BroadcastChannel(`slicc-screen-share-approval`)}catch{H=null;return}H.onmessage=e=>{nt(e.data)&&U(e.data)}}}function W(e){rt(),U(e);try{H?.postMessage(e)}catch{}}function it(e){W({type:`begin`,id:e})}function at(e){W({type:`end`,id:e})}const G=Symbol(`screen-share-approval-timeout`);function ot(){return`
|
|
64
|
+
<div class="sprinkle-action-card">
|
|
65
|
+
<div class="sprinkle-action-card__header">
|
|
66
|
+
<div class="sprinkle-action-card__title-group">Share this display</div>
|
|
67
|
+
<span class="sprinkle-badge sprinkle-badge--notice">approval</span>
|
|
68
|
+
</div>
|
|
69
|
+
<div class="sprinkle-action-card__actions">
|
|
70
|
+
<button class="sprinkle-btn sprinkle-btn--secondary" data-action="deny">Deny</button>
|
|
71
|
+
<button class="sprinkle-btn sprinkle-btn--primary" data-action="approve" data-picker="screenshare">Share screen</button>
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
`}async function st(){let e=a();if(!e)throw Error("add screen: needs a user gesture — type `computer add screen` in the panel terminal, or run it from a cone tool call so an approval card can open the picker");let t=o.generateId(),n=!1;it(t);try{let r=s({id:t,html:ot(),onAction:async(e,t)=>{if(e!==`approve`)return{denied:!0};let n=t;return n?.cancelled?{cancelled:!0}:n?.error?{error:String(n.error)}:n?.granted&&typeof n.handle==`string`?{approved:!0,handle:n.handle}:{error:`screen share returned an unexpected response`}}},e.onUpdate).catch(e=>{if(n)return G;throw e}),i,a=new Promise(e=>{i=setTimeout(()=>{n=!0,o.cancel(t,`screen share: timed out`),e(G)},12e4)}),c=await Promise.race([r,a]);if(i&&clearTimeout(i),c===G)throw Error(`add screen: timed out after 120s waiting for user approval`);let l=c;if(l.denied)throw Error(`add screen: denied by user`);if(l.cancelled)throw Error(`add screen: cancelled`);if(l.error)throw Error(`add screen: ${l.error}`);if(!l.approved||!l.handle)throw Error(`add screen: no display selected`);return{handle:l.handle}}finally{at(t)}}function K(e,t,n){let r=e.list(),i=t=>e.nameOf(t);if(t)return ct(r,t,i);let a=n.get(`COMPUTER`);if(a)return ct(r,a,i);let o=e.lastUsedId();return o&&e.get(o)?{id:o}:r.length===1?{id:r[0].id}:r.length===0?{error:"no computers registered — `computer add tab <id>`, `computer add screen`, `computer add ssh <follower>`, `computer add url <http(s)://base>`, or `v86 start`"}:{error:`which computer? pass -c <id> or \`computer use\`. registered: ${r.map(e=>e.id).join(`, `)}`}}function ct(e,t,n){let r=e.find(e=>e.id===t);if(r)return{id:r.id};let i=e.filter(e=>n(e.id)===t);if(i.length===1)return{id:i[0].id};if(i.length>1)return lt(t,i);let a=e.filter(e=>e.id.endsWith(`:${t}`)||e.title===t||e.id===`v86:${t}`||e.id===`tab:${t}`||e.id===`screen:${t}`||e.id===`ssh:${t}`||e.id===`url:${t}`);if(a.length===1)return{id:a[0].id};if(a.length>1)return lt(t,a);let o=e.map(e=>{let t=n(e.id);return t?`${e.id} (${t})`:e.id}).join(`, `);return{error:`unknown computer '${t}'${o?` — registered: ${o}`:` — none registered`}`}}function lt(e,t){return{error:`ambiguous computer '${e}' matches ${t.map(e=>e.id).join(`, `)}`}}var ut=e({runComputer:()=>St});function q(e){return{stdout:``,stderr:`computer: ${e}\n`,exitCode:1}}function J(e=``){return{stdout:e,stderr:``,exitCode:0}}function dt(){return globalThis.__slicc_pm??null}function ft(e){return e.browser??globalThis.__slicc_browser??null}function Y(e){return e.panelRpc??globalThis.__slicc_panelRpc??r()}function pt(e){return e.sudoBroker?e.sudoBroker:globalThis.__slicc_sudo??null}function mt(e,t){let n=Y(e);if(n)return{async capture(e){let r=await n.call(`tray-computer-native`,{runtimeId:t,action:`capture`,fps:e.fps,maxWidth:e.maxWidth,watch:e.watch},{timeoutMs:6e4});if(!r.jpeg)throw Error(`empty native screenshot from follower`);let{bytesFromBase64:i}=await import(`./frame-bytes-BSmP8I94.js`).then(e=>e.a);return{bytes:i(r.jpeg),mime:`image/jpeg`,width:r.width??0,height:r.height??0,nativeWidth:r.nativeWidth??r.width??0,nativeHeight:r.nativeHeight??r.height??0}},unwatch(){n.call(`tray-computer-native`,{runtimeId:t,action:`unwatch`}).catch(()=>{})},async input(e){await n.call(`tray-computer-native`,{runtimeId:t,action:`input`,events:e})}}}function ht(e){return e.listFollowers?.()??n()}const X={platform:`darwin`,tools:[],capture:null,input:`none`};async function gt(e,t,n,r,i){if(!n)return X;try{return await i(e,t)}catch(e){let t=e instanceof Error?e.message:String(e);return r?X:{error:t.startsWith(`add ssh:`)?t:`add ssh: ${t}`}}}async function _t(e,t,n,r,i){if(i===`none`&&!r)return q(`add ssh: --allow-input needs cliclick, xdotool, ydotool, or idb on the follower (screenshot-only otherwise)`);let a=pt(e);if(!a)return q(`add ssh: --allow-input needs sudo approval (not configured)`);let o=await a.requestApproval({kind:`command`,detail:`computer add ssh ${t.runtimeId}${n?` --sim ${n}`:``} --allow-input`,reason:`grant pointer and keyboard control of the follower desktop`});return o.decision===`deny`?q(u(`add ssh`,o)):null}async function vt(e,t,n,r){if(e.sshExec)return e.sshExec(t,n,r);let a=Y(e);if(!a)throw Error(`no panel RPC in this float`);let o=r??3e4,s=await a.call(`tray-exec`,{runtimeId:t,command:n,execToken:`computer-ssh-${Date.now().toString(36)}`,timeoutMs:o},{timeoutMs:o+i});if(s.error)throw Error(s.error);return{stdout:s.stdout,stderr:s.stderr,exitCode:s.exitCode}}function yt(e,t){let n=t.filter(e=>e.exec||e.computer),r=n.find(t=>t.runtimeId===e);if(r)return r;let i=n.filter(t=>t.runtimeId.endsWith(e)||t.runtimeId.includes(e));return i.length===1?i[0]:i.length>1?{error:`add ssh: ambiguous follower '${e}'`}:{error:`add ssh: no exec-capable or computer-capable follower '${e}' — try \`host\` (an entry tagged [ssh] or [computer] is eligible; \`ssh --list\` shows exec targets only)`}}function bt(e){let t=[];return e.kind===`screen`&&t.push(`display slot`),e.kind===`ssh`&&t.push(e.capabilities.inputAllowed?`input`:`view-only`),t.length>0?` [${t.join(`, `)}]`:``}function xt(e){return e.registry?e.registry:ae()??oe(e.processManager??dt())}async function St(e,t,n={}){if(e.length===0||e[0]===`--help`||e[0]===`-h`||e[0]===`help`)return J(k);let r=Be(e);if(r.rest.length===0)return J(k);let i=r.rest[0];if(l(r.rest.slice(1),{valueFlags:[...Ne]}))return J(c(`computer`,i,k,{prefix:`computer`}));let a;try{a=Ve(r.rest)}catch(e){return q(e instanceof Error?e.message:String(e))}let o=xt(n),s=[],u=[];for(let e of a)try{let i=await Ct(e,r,t,n,o);if(i.exitCode!==0)return i;i.stdout&&s.push(i.stdout.replace(/\n$/u,``)),i.stderr&&u.push(i.stderr.replace(/\n$/u,``))}catch(e){return q(e instanceof Error?e.message:String(e))}let d=cn(s.filter(Boolean).join(`
|
|
75
|
+
`),a,o,r.computer,t,r.json);return{stdout:d?`${d}\n`:``,stderr:u.length?`${u.join(`
|
|
76
|
+
`)}\n`:``,exitCode:0}}async function Ct(e,t,n,r,i){switch(e.verb){case`ls`:return wt(i,t.json);case`add`:return Tt(e.args,n,r,i);case`rm`:return jt(e.args,t.computer,n,i);case`use`:return Mt(e.args,i);case`info`:return Nt(t,n,i);case`screenshot`:return Pt(e.args,t,n,i);case`text`:return Ft(t,n,i);case`watch`:return It(e.args,t,n,i,r);case`record`:return zt(e.args,t,n,i,r);case`exec`:return Ht(e.args,t,n,i);default:return Ut(e,t,n,i,r)}}function wt(e,t){let n=e.list();if(t){let t=n.map(t=>{let n=e.nameOf(t.id);return n?{...t,name:n}:t});return J(`${JSON.stringify(t)}\n`)}if(n.length===0)return J(`no computers registered
|
|
77
|
+
`);let r=[`ID KIND STATE NAME TITLE`];for(let t of n){let n=e.nameOf(t.id)??`-`;r.push(`${t.id.padEnd(20)} ${t.kind.padEnd(6)} ${t.state.padEnd(9)} ${n.padEnd(10)} ${t.title}${bt(t)}`)}return J(`${r.join(`
|
|
78
|
+
`)}\n`)}async function Tt(e,t,n,r){let i=e[0];return i===`tab`?kt(e,t,n,r):i===`screen`?At(e,t,n,r):i===`ssh`?Ot(e,t,n,r):i===`url`?Dt(e,t,n,r):q(`add: unknown kind '${i??``}' — phase 3 supports \`computer add tab\`, \`computer add screen\`, \`computer add ssh\`, and \`computer add url\``)}async function Et(e){if(e.urlFetch)return e.urlFetch;let{createProxiedFetch:t}=await import(`./proxied-fetch-CZTz7e5K.js`).then(e=>e.i),{wrapUrlComputerFetch:n}=await import(`./url-B1WJZBSE.js`),r=t();return n((e,t)=>r(e,t))}async function Dt(e,t,n,r){let i=I(e,[`-n`,`--name`]),a=L(e).slice(1)[0];if(!a)return q(`add url: requires <http(s)://base>`);let{UrlComputerBackend:o,probeUrlComputer:s,normalizeComputerBase:c}=await import(`./url-B1WJZBSE.js`),l;try{l=c(a)}catch(e){return q(`add url: ${e instanceof Error?e.message:String(e)}`)}let u=await Et(n),d;try{d=await s(u,l)}catch(e){let t=e instanceof Error?e.message:String(e);return q(t.startsWith(`add url:`)?t:`add url: ${t}`)}i&&(d={...d,title:i});let f=new o(u,l,d),p=r.register(f,{name:i});return r.use(p.id),J(`registered ${p.id} (${i??p.title})\n`)}async function Ot(e,t,n,r){let i=I(e,[`-n`,`--name`]),a=I(e,[`--sim`]),o=F(e,`--allow-input`),s=L(e).slice(1)[0];if(!s)return q(`add ssh: requires <follower>`);let c=yt(s,ht(n));if(`error`in c)return q(c.error);if(c.floatType===`ios`)return q(`add ssh: the iOS follower itself is not a driven computer (a real iPhone is out of scope; pass --sim <udid> on a Mac follower)`);if(a&&!c.exec)return q(`add ssh: --sim needs an exec-capable Mac follower`);let{SshComputerBackend:l,probeSsh:u}=await import(`./ssh-D1zj1EXl.js`),d=c.computer?n.nativeComputer?.(c.runtimeId)??mt(n,c.runtimeId):void 0,f=c.exec?(e,t)=>vt(n,c.runtimeId,e,t?.timeoutMs):async()=>{throw Error(`follower has no exec capability`)},p=await gt(f,a,!!c.exec,!!d,u);if(`error`in p)return q(p.error);if(o){let e=await _t(n,c,a,!!d,p.input);if(e)return e}let m=i??(a?`${c.runtimeId} sim ${a}`:c.runtimeId),h=new l(f,{runtimeId:c.runtimeId,title:m,probe:p,inputAllowed:o,sim:a,native:d}),g=r.register(h,{name:i});return r.use(g.id),J(`registered ${g.id} (${i??g.title})\n`)}async function kt(e,t,n,r){let i=I(e,[`-n`,`--name`]),a=L(e).slice(1)[0];if(!a)return q(`add tab: requires <targetId|url>`);let o=ft(n);if(!o)return q(`add tab: no browser API in this float`);let s=ke(await o.listAllTargets(),a);if(`error`in s)return q(s.error);try{w(s)}catch(e){return q(e instanceof Error?e.message:String(e))}let c={title:s.title,url:s.url},l=n.browser&&!n.panelRpc?null:Y(n),u=l?new we(l,s.targetId,c):new Se(o,s.targetId,c),d=r.register(u,{name:i});return r.use(d.id),J(`registered ${d.id} (${i??d.title})\n`)}async function At(e,t,n,r){let i=I(e,[`-n`,`--name`]),o=I(e,[`--__resolved`]);if(!o){if(!a())return q("add screen: needs a user gesture — type `computer add screen` in the panel terminal, or run it from a cone tool call so an approval card can open the picker");try{o=(await st()).handle}catch(e){return q(e instanceof Error?e.message:String(e))}}let s=Y(n);if(!s)return q(`add screen: no panel RPC in this float`);let{BridgedScreenComputerBackend:c,screenComputerId:l}=await import(`./screen-C5DDwz1F.js`),u=new c(s,o,{title:i??`Display`},()=>{r.refresh(l(o))}),d=r.register(u,{name:i});return r.use(d.id),J(`registered ${d.id} (${i??d.title})\n`)}async function jt(e,t,n,r){let i=K(r,L(e)[0]??t,$(n));return`error`in i?q(i.error):await r.unregister(i.id)?J(`unregistered ${i.id}\n`):q(`unknown computer '${i.id}'`)}function Mt(e,t){let n=L(e)[0];if(!n)return q(`use: requires <id>`);let r=K(t,n,new Map);return`error`in r?q(r.error):(t.use(r.id),J(`using ${r.id}\n`))}function Nt(e,t,n){let r=K(n,e.computer,$(t));if(`error`in r)return q(r.error);let i=n.getEntry(r.id);if(!i)return q(`unknown computer '${r.id}'`);let a=n.nameOf(r.id);if(e.json)return J(`${JSON.stringify(a?{...i.descriptor,name:a}:i.descriptor)}\n`);let o=i.descriptor,s=o.size?`${o.size.width}x${o.size.height}`:`-`;return J(`id: ${o.id}\nname: ${a??`-`}\nkind: ${o.kind}\ntitle: ${o.title}\nstate: ${o.state}\nsize: ${s}\npid: ${o.pid??`-`}\n`)}async function Pt(e,n,r,i){let a=Q(i,n.computer,r);if(`exitCode`in a)return a;let o=x(I(e,[`--size`])),s=await a.backend.screenshot({format:`jpeg`,maxWidth:o}),c=ge(a.backend.describe().size??{width:s.width,height:s.height},{width:s.width,height:s.height});i.rememberShot(a.id,ve(c,Date.now()),s);let l=s.seq>0?s.seq:i.nextSeq(a.id),u=await ee({fs:r.fs,cwd:r.cwd,env:r.env,name:ln(a.descriptor),seq:l,frame:s}),d=L(e)[0];if(d){let e=r.fs.resolvePath(r.cwd,d);await r.fs.writeFile(e,s.bytes)}let f=[_e(c),te(u)];return(F(e,`--view`)||F(e,`-v`))&&f.push(`<img:data:${s.mime};base64,${t(s.bytes)}>`),n.json?J(`${JSON.stringify({id:a.id,path:u,mapping:c})}\n`):J(`${f.join(`
|
|
79
|
+
`)}\n`)}async function Ft(e,t,n){let r=Q(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 It(e,t,n,r,i){let a=Q(r,t.computer,n);if(`exitCode`in a)return a;let o=Vt(i);if(!o)return q(`watch: computers host is not running`);if(F(e,`--stop`))return o.unwatch(a.id),J(`unwatched ${a.id}\n`);let s=P(e,`--fps`)??2,c=x(I(e,[`--size`]));return o.watch(a.id,s,c),J(`watching ${a.id} at ${s} fps\n`)}function Lt(e){return`recordClip`in e&&typeof e.recordClip==`function`}function Rt(e){let t=I(e,[`-V`,`--duration`]);if(t===void 0)return 5;let n=Number(t);if(!Number.isFinite(n)||n<=0)throw Error(`-V/--duration requires a positive number of seconds`);return n}async function zt(e,t,n,r,i){let a=Q(r,t.computer,n);if(`exitCode`in a)return a;let o,s;try{o=Rt(e),s=P(e,`--fps`)??2}catch(e){return q(e instanceof Error?e.message:String(e))}if(s<=0)return q(`--fps requires a positive number`);if(s>10)return q(`--fps exceeds 10`);let c=f(o*1e3),l=L(e)[0]??`clip.webm`,u=n.fs.resolvePath(n.cwd,l),d;try{d=Lt(a.backend)?await a.backend.recordClip(c):await Bt(a.backend,c,s,u,n,i)}catch(e){return q(`record: ${e instanceof Error?e.message:String(e)}`)}d.bytes.byteLength>0&&await n.fs.writeFile(u,d.bytes);let p=d.durationMs??c;if(t.json)return J(`${JSON.stringify({id:a.id,path:u,durationMs:p,mime:d.mime,...d.truncated?{truncated:!0}:{}})}\n`);let m=d.truncated?` (truncated)`:``;return J(`recorded ${p}ms ${d.width}x${d.height}${m} → ${u}\n`)}async function Bt(e,t,n,r,i,a){return tt({screenshot:()=>e.screenshot({format:`jpeg`,maxWidth:768}),durationMs:t,fps:n,dest:r,ctx:i,encode:a.encodeRecordedFrames})}function Vt(e){if(e.watch)return{watch:e.watch,unwatch:e.unwatch??(()=>void 0)};let t=_();return t?{watch:t.watch,unwatch:t.unwatch}:null}async function Ht(e,t,n,r){let i=Q(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(`
|
|
80
|
+
`);return{stdout:s?`${s}\n`:``,stderr:``,exitCode:o.exitCode}}async function Ut(e,t,n,r,i){let a=Q(r,t.computer,n);if(`exitCode`in a)return a;let o=Yt(e,t.native,a.descriptor),s=je(a.descriptor.capabilities,o);if(s)return q(`${e.verb}: ${s}`);try{await a.backend.input(o)}catch(t){return q(`${e.verb}: ${t instanceof Error?t.message:String(t)}`)}return qt(a,n,r,i)}function Wt(e,t){return t.isWatching?t.isWatching(e):_()?.isWatching(e)??!1}function Gt(e,t){let n=e.descriptor.capabilities.frames===`push`;return e.backend.screenshot({format:`jpeg`,maxWidth:t,...n?{pull:!0}:{}})}async function Kt(e,t,n){if(!(e.descriptor.capabilities.frames===`push`&&Wt(e.id,n)))return Gt(e,t);let r=new AbortController,i=n.postActionTimeoutMs??5e3;try{return await Jt(e.backend.screenshot({format:`jpeg`,maxWidth:t,signal:r.signal}),i)}catch{return r.abort(),Gt(e,t)}}async function qt(e,t,n,r){let i=e.descriptor.lastShot?.width??768,a;try{a=await Kt(e,i,r)}catch(e){return{stdout:``,stderr:`computer: screenshot failed after input: ${e instanceof Error?e.message:String(e)}\n`,exitCode:0}}let o=n.nextSeq(e.id),s={...a,seq:o};n.rememberFrame(e.id,s);let c=await ee({fs:t.fs,cwd:t.cwd,env:t.env,name:ln(e.descriptor),seq:o,frame:s});return J(`${te(c)}\n`)}function Jt(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 Yt(e,t,n){let r=(e,r)=>ye(e,r,n.lastShot,t);switch(e.verb){case`mousemove`:return Xt(e.args,r);case`click`:case`mousedown`:case`mouseup`:return Zt(e.verb,e.args,r);case`drag`:return Qt(e.args,r,n.capabilities.mouse);case`scroll`:return $t(e.args,r);case`key`:case`keydown`:case`keyup`:return en(e.verb,e.args);case`type`:return tn(e.args);case`wait`:return nn(e.args);default:throw Error(`internal: ${e.verb} is not an input verb`)}}function Xt(e,t){let n=L(e),r=Number(n[0]),i=Number(n[1]);if(!Number.isFinite(r)||!Number.isFinite(i))throw Error(`mousemove: requires <x> <y>`);let a=F(e,`--relative`),o=a?{x:r,y:i}:t(r,i);return[{type:`mousemove`,x:o.x,y:o.y,relative:a}]}function Zt(e,t,n){let r=L(t),{button:i,skip:a}=rn(r),o=N(t)??on(r,a),s=o?n(o.x,o.y):void 0;if(e===`mousedown`)return[{type:`button`,button:i,down:!0,...Z(s)}];if(e===`mouseup`)return[{type:`button`,button:i,down:!1,...Z(s)}];let c=P(t,`--hold`);return[{type:`click`,button:i,count:P(t,`--repeat`)??1,...c===void 0?{}:{holdMs:c},...Z(s)}]}function Qt(e,t,n){let r=L(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 $t(e,t){let n=L(e),r=Number(n[0]),i=Number(n[1]);if(!Number.isFinite(r)||!Number.isFinite(i))throw Error(`scroll: requires <dx> <dy>`);let a=N(e);return[{type:`scroll`,dx:r,dy:i,...Z(a?t(a.x,a.y):void 0)}]}function en(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=L(t)[0];if(!n)throw Error(`${e}: no keysym supplied`);return[{type:`key`,keysym:n,down:e===`keydown`}]}function tn(e){let t=e.join(` `).replace(/\\n/gu,`
|
|
81
|
+
`).replace(/\\t/gu,` `);if(!t)throw Error(`type: no text supplied`);return[{type:`text`,text:t}]}function nn(e){let t=Number(L(e)[0]);if(!Number.isFinite(t))throw Error(`wait: requires <ms>`);return[{type:`wait`,ms:t}]}function rn(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:an(e[0]),skip:1}:{button:1,skip:0}}function an(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 on(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 Z(e){return e?{x:e.x,y:e.y}:{}}const sn=new Set([`ls`,`add`,`rm`,`use`]);function cn(e,t,n,r,i,a){if(a||!t.some(e=>!sn.has(e.verb)))return e;let o=K(n,r,$(i));if(`error`in o)return e;let s=ie(o.id);return e.split(`
|
|
82
|
+
`).some(e=>e.trim()===s)?e:e?`${s}\n${e}`:s}function Q(e,t,n){let r=K(e,t,$(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 $(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 ln(e){return e.id.replace(/[/:]/gu,`_`)}export{he as n,v as r,St as runComputer,ut as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{t as e}from"./record-ChU1ND2B.js";import{t,u as n}from"./descriptor-S4Jug1iP.js";import{t as r}from"./subcommand-flags-BZi7j78Q.js";import{t as i}from"./subcommand-help-CgO7wRS5.js";import{a,r as o,t as s}from"./memory-budget-Bcf7Eolo.js";import{o as c}from"./kernel-worker-
|
|
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{o as c}from"./kernel-worker-B23YxkDH.js";const l=`usage: memory <command> [options]
|
|
2
2
|
|
|
3
3
|
Durable cone memory: one file per cone, rewritten by the memory-curator
|
|
4
4
|
scoop after a chat freezes. This command inspects that system and pokes it.
|
|
@@ -38,7 +38,7 @@ Examples:
|
|
|
38
38
|
memory log --limit 5
|
|
39
39
|
memory curate --archive 2026-09-11T08-30-00Z-fix-build.md
|
|
40
40
|
memory dream --all
|
|
41
|
-
`,u=[`--cone`,`--archive`,`--limit`];function d(e){return{stdout:e,stderr:``,exitCode:0}}function f(e){return{stdout:``,stderr:`memory: ${e}\n`,exitCode:1}}function p(){let e=globalThis.__slicc_memory;return e&&typeof e.curate==`function`&&typeof e.dream==`function`?e:null}async function m(){let{isMemoryV2Enabled:e}=await import(`./memory-v2-flag-
|
|
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-uChv9nwr.js`);return!e()}async function h(e,t){try{let n=await e.readFile(t,{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}catch{return null}}async function g(n){let r=[e];try{let e=await n.readDir(t);for(let t of e)t.type===`directory`&&r.push(t.name)}catch{}return r}function _(e){return n({parentJid:null,folder:e}).memoryPath}async function v(e,t){let n=await g(e);return n.includes(t)?{folder:t}:{error:`unknown cone "${t}" (cones: ${n.join(`, `)})`}}function y(e){return e.memoryFailed===void 0?e.memoryPending?`pending`:e.memoryCuratedAt===void 0?e.memorySkipped?`skipped`:`none`:`curated`:`failed`}async function b(e,t){let n=r(e,{value:[`--cone`]});if(`error`in n)return f(n.error);let i=await v(t,n.values.get(`--cone`)??`cone`);if(`error`in i)return f(i.error);let a=_(i.folder),o=await h(t,a);return o===null?f(`no memory file at ${a}`):d(o.endsWith(`
|
|
42
42
|
`)||o===``?o:`${o}\n`)}const x=`/sessions/.curation/health.json`;async function S(e){let t=await h(e,x);if(t===null)return null;try{let e=JSON.parse(t);return typeof e.at!=`string`||!Array.isArray(e.failures)?null:{at:e.at,failures:e.failures.map(String)}}catch{return null}}async function C(e){let t=await c(e),n=[];for(let t of await g(e)){let r=_(t),i=await h(e,r);n.push({folder:t,path:r,chars:i===null?null:i.length})}let r={curated:0,failed:0,pending:0,skipped:0,none:0},i=new Map;for(let e of t){let t=y(e);if(r[t]++,t===`curated`){let t=e.cone??`cone`;i.set(t,(i.get(t)??0)+1)}}let l=[];r.failed>0&&l.push(`${r.failed} archive(s) whose last curation attempt failed — see \`memory log\``);for(let t of s)await h(e,t)!==null&&l.push(`${t} is no longer read — memory instructions live in ${o}; carry any customization over, then delete it`);for(let e of n){let t=i.get(e.folder)??0;t===0||(e.chars??0)>0||l.push(e.folder===`cone`?`${t} archive(s) report successful curation but the primary memory file is missing or empty`:`${t} archive(s) from cone "${e.folder}" report successful curation but its memory file (${e.path}) is missing or empty`)}return{memoryV2:!await m(),sessions:t.length,budgetChars:a(t.length),cones:n,curation:r,checks:l,scheduledCheck:await S(e)}}async function w(e,t){let n=r(e,{bool:[`--json`,`--check`]});if(`error`in n)return f(n.error);let i=await C(t),a=n.bools.has(`--check`)&&i.checks.length>0;if(n.bools.has(`--json`))return{stdout:`${JSON.stringify(i,null,2)}\n`,stderr:``,exitCode:+!!a};let o=`Memory v2: ${i.memoryV2?`ON`:`OFF — curation surfaces beyond the freezer pass are disabled`}\n`;o+=`Sessions: ${i.sessions} archived (memory budget ${i.budgetChars} chars)\n`,o+=`Memory files:
|
|
43
43
|
`;for(let e of i.cones){let t=e.chars===null?`missing`:`${e.chars} chars`;o+=` ${e.folder.padEnd(14)}${e.path} (${t})\n`}let{curated:s,failed:c,pending:l,skipped:u,none:d}=i.curation;if(o+=`Curation: ${s} curated, ${c} failed, ${l} pending, ${u} skipped, ${d} unmarked\n`,i.checks.length>0){o+=`Health:
|
|
44
44
|
`;for(let e of i.checks)o+=` FAIL ${e}\n`}else o+=`Health: ok
|
package/dist/ui/assets/{session-command-memory-DSKgr_FE.js → session-command-memory-CAl1-crq.js}
RENAMED
|
@@ -18,5 +18,5 @@ import{r as e,t}from"./subcommand-help-CgO7wRS5.js";const n=`session — export
|
|
|
18
18
|
usage: session search <query> [--limit N]
|
|
19
19
|
`}}function i(e,t,n){if(!e||e.startsWith(`-`))return{ok:!1,stderr:`session read: ${t} requires a number\n`};let r=Number(e);return!Number.isFinite(r)||r<n?{ok:!1,stderr:`session read: ${t} must be ${n===0?`a non-negative integer`:`a positive integer`}\n`}:{ok:!0,n:Math.floor(r)}}function a(e){let t=e.slice(1),n,r,a;for(let e=0;e<t.length;e++){let o=t[e];if(o===`--from`||o===`--count`){let n=i(t[e+1],o,o===`--from`?0:1);if(!n.ok)return n;o===`--from`?r=n.n:a=n.n,e++}else if(o.startsWith(`-`))return{ok:!1,stderr:`session read: unknown flag ${o}\n`};else if(n===void 0)n=o;else return{ok:!1,stderr:`session read: unexpected argument ${JSON.stringify(o)}\n`}}return n?{ok:!0,id:n,from:r,count:a}:{ok:!1,stderr:`session read: missing id
|
|
20
20
|
usage: session read <id> [--from N --count M]
|
|
21
|
-
`}}async function o(e,t){let n=r(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};try{let{searchSessions:e}=await import(`./session-search-index-
|
|
22
|
-
`)}\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`session search: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function s(e,t){let n=a(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};try{let{readSessionHit:e,SESSION_READ_BYTE_CAP:r}=await import(`./session-search-index-
|
|
21
|
+
`}}async function o(e,t){let n=r(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};try{let{searchSessions:e}=await import(`./session-search-index-Bn4FhmPW.js`),r=await e(t.fs,n.query,{limit:n.limit});if(r.length===0)return{stdout:`# session search: ${n.query} (0 hits)\nNo matching messages in /sessions.\n`,stderr:``,exitCode:0};let i=[`# session search: ${n.query} (${r.length} hits)`];for(let e of r)i.push(`id=${e.id} score=${e.score.toFixed(2)} kind=${e.echoKind} role=${e.role}`),i.push(` session=${JSON.stringify(e.sessionTitle)} path=${e.path}`),i.push(` ${e.excerpt}`),i.push(``);return i.push(`Use: session read <id> [--from N --count M]`),{stdout:`${i.join(`
|
|
22
|
+
`)}\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`session search: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function s(e,t){let n=a(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};try{let{readSessionHit:e,SESSION_READ_BYTE_CAP:r}=await import(`./session-search-index-Bn4FhmPW.js`),i=await e(t.fs,n.id,{from:n.from,count:n.count});return i?{stdout:`# session read: ${n.id}\npath=${i.hit.path} title=${JSON.stringify(i.hit.sessionTitle)}\nmessages ${i.from}–${i.from+i.count-1} of ${i.total} (remaining: ${i.remaining}${i.truncated?`, truncated to byte cap`:``})\nbyteCap=${r}\n\n`+i.text,stderr:``,exitCode:0}:{stdout:``,stderr:`session read: unknown id ${JSON.stringify(n.id)}\n`,exitCode:1}}catch(e){return{stdout:``,stderr:`session read: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function c(r,i,a,c){return r===`help`?{stdout:c?e(`session`,c,n):n,stderr:``,exitCode:0}:t(i.slice(1))?{stdout:e(`session`,r,n),stderr:``,exitCode:0}:r===`search`?o(i,a):s(i,a)}async function l(e,n,r){let{isMemoryV2Enabled:i}=await import(`./memory-v2-flag-uChv9nwr.js`),a=i();if(t(e)){if(!a)return{stdout:r,stderr:``,exitCode:0};let t=e[0];return c(`help`,e,n,t&&t!==`--help`&&t!==`-h`?t:void 0)}let o=e[0];return o===`search`||o===`read`?a?c(o,e,n):{stdout:``,stderr:`session export: unknown subcommand ${JSON.stringify(o)} — usage: session export [--id <id>] [--output <path>]\n`,exitCode:1}:a?{stdout:``,stderr:`session: unknown subcommand ${JSON.stringify(o??``)} — usage: session export|search|read (see session --help)\n`,exitCode:1}:{stdout:``,stderr:`session export: unknown subcommand ${JSON.stringify(o??``)} — usage: session export [--id <id>] [--output <path>]\n`,exitCode:1}}export{l as dispatchSessionMemoryAware};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{t as e}from"./types-D8gIX-W-.js";import{a as t,r as n}from"./kernel-worker-
|
|
1
|
+
import{t as e}from"./types-D8gIX-W-.js";import{a as t,r as n}from"./kernel-worker-B23YxkDH.js";import"./frozen-archive-writer-C97kBlYw.js";function r(e){let t=`${e.endsWith(`.md`)?e.slice(0,-3):e.replace(/\.md$/i,``)}.jsonl`;return t.startsWith(`/`)?t:`${n}/${t}`}async function i(e,n,r){let i=t(n);if(i.messages.length>0||!i.sidecar)return i;let a=await u(e,r??i.sidecar.replace(/\.jsonl$/i,`.md`));return a?{...i,messages:a}:i}function a(e){let t=[],n=null;for(let r of e.split(`
|
|
2
2
|
`)){let e=r.trim();if(!e)continue;let i=o(e);if(i){if(i.role===`user`)t.push(s(i)),n=null;else if(i.role===`assistant`){let e=c(i);t.push(e),n=e}else i.role===`toolResult`&&l(n,i)}}return t}function o(e){try{return JSON.parse(e)}catch{return null}}function s(e){return{id:e.id??m(`u`),role:`user`,content:f(e.content),timestamp:e.timestamp??0,...e.source?{source:e.source}:{},...e.channel?{channel:e.channel}:{},...e.attachments?.length?{attachments:e.attachments}:{}}}function c(e){let t=p(e.content);return{id:e.id??m(`a`),role:`assistant`,content:f(e.content),timestamp:e.timestamp??0,...t.length?{toolCalls:t}:{},...e.source?{source:e.source}:{},...e.compaction?{compaction:e.compaction}:{},...e.attachments?.length?{attachments:e.attachments}:{}}}function l(e,t){if(!t.toolCallId||!e?.toolCalls)return;let n=e.toolCalls.find(e=>e.id===t.toolCallId);n&&(n.result=f(t.content),t.isError&&(n.isError=!0))}async function u(t,n){let i=r(n);try{let e=await t.readFile(i,{encoding:`utf-8`});return a(typeof e==`string`?e:new TextDecoder().decode(e))}catch(t){if(t instanceof e&&t.code===`ENOENT`)return null;throw t}}async function d(t,n){let i=r(n);try{await t.rm(i)}catch(t){if(t instanceof e&&t.code===`ENOENT`)return;throw t}}function f(e){return typeof e==`string`?e:e.filter(e=>e.type===`text`).map(e=>e.text).join(`
|
|
3
3
|
`)}function p(e){return typeof e==`string`?[]:e.filter(e=>e.type===`toolCall`).map(e=>({id:e.id,name:e.name,input:e.arguments}))}function m(e){return`${e}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`}export{i as loadFrozenArchive,d as removeSessionJsonl};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{Dt as t,rt as n}from"./wc-shell-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{Dt as t,rt as n}from"./wc-shell-CrMn8BW0.js";import{t as r}from"./slugify-BYJ6QVAt.js";import{t as i}from"./types-D8gIX-W-.js";var a=[{category:`jwt`,source:String.raw`ey[A-Za-z0-9_-]{4,}\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+`,flags:`g`},{category:`private-key`,source:`-----BEGIN [A-Z ]* PRIVATE KEY-----`+String.raw`[\s\S]*?`+`-----END [A-Z ]* PRIVATE KEY-----`,flags:`g`},{category:`bearer-token`,source:`Bearer [A-Za-z0-9._~+/=!-]+`,flags:`gi`},{category:`api-key`,source:`(?:sk-(?:live|test|prod|proj)-[A-Za-z0-9]{8,}|sk-ant-[A-Za-z0-9-]{8,}|xoxb-[A-Za-z0-9-]{10,}|xoxp-[A-Za-z0-9-]{10,}|AKIA[A-Z0-9]{16}|ghp_[A-Za-z0-9]{36}|hf_[A-Za-z0-9]{34})`,flags:`g`},{category:`password`,source:String.raw`\b(?:password|passwd|token|secret|api_key)\s*[=:]\s*\S+`,flags:`gi`}],o=`⟦REDACTED:[^⟧]*⟧`;function s(e,t){return e.start<t.end&&t.start<e.end}function c(e){let t=[];for(let n of e.matchAll(new RegExp(o,`g`))){let e=n.index;e!==void 0&&t.push({start:e,end:e+n[0].length})}return t}function l(e,t,n=1,r){let i=c(e),o=[],l=n,u=r?.categories?a.filter(e=>r.categories?.includes(e.category)):a;for(let{category:n,source:r,flags:a}of u)for(let c of e.matchAll(new RegExp(r,a))){let e=c.index;if(e===void 0)continue;let r={start:e,end:e+c[0].length};i.some(e=>s(e,r))||o.some(e=>s(e,r))||o.push({...r,id:`${t}${l++}`,category:n})}o.sort((e,t)=>e.start-t.start);let d=``,f=0;for(let{start:t,end:n,id:r,category:i}of o)d+=e.slice(f,t),d+=`⟦REDACTED:${i}:${r}⟧`,f=n;return d+=e.slice(f),{text:d,matches:o.map(({id:e,category:t})=>({id:e,category:t})),nextId:l}}var u=[`jwt`,`private-key`,`bearer-token`,`api-key`],d=`ar`;function f(){return{nextId:1}}function p(e,t){let{text:n,nextId:r}=l(e,d,t.nextId,{categories:u});return t.nextId=r,n}function m(e,t){if(typeof e==`string`)return p(e,t);if(Array.isArray(e)){let n=!1,r=[];for(let i of e){let e=m(i,t);e!==i&&(n=!0),r.push(e)}return n?r:e}if(typeof e==`object`&&e){let n=!1,r={};for(let[i,a]of Object.entries(e)){let e=m(a,t);e!==a&&(n=!0),r[i]=e}return n?r:e}return e}function h(e,t=f()){return m(e,t)}var g=`/sessions`,_=`/sessions/index.json`;async function ee(e){try{let t=await e.readFile(_,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r:[]}catch{return[]}}function v(e){return`${g}/${e.filename}`}function y(e){let t=e,n=`Untitled`,r={},i=t.match(/^---\n([\s\S]*?)\n---\n+/);if(i){t=t.slice(i[0].length),Object.assign(r,te(i[1]));let e=i[1].match(/^title:\s*(.+?)\s*$/m);e&&(n=b(e[1]))}let a=t.match(/<!-- slicc:session-data\n([\s\S]*?)\n-->\n*/);if(a){try{let e=a[1].replace(/-- >/g,`-->`),t=JSON.parse(e);if(Array.isArray(t))return{title:n,messages:t,...r}}catch{}t=t.replace(/<!-- slicc:session-data\n[\s\S]*?\n-->\n*/,``)}return r.sidecar?{title:n,messages:[],...r}:(t=t.replace(/^#\s+[^\n]*\n+/,``),{title:n,messages:S(t),...r})}function te(e){let t={},n=x(e,`cost`),r=x(e,`models`);n&&(t.cost=n),r&&(t.models=r);let i=e.match(/^cone:\s*(.+?)\s*$/m)?.[1];i&&(t.cone=i);let a=e.match(/^coneLabel:\s*(.+?)\s*$/m)?.[1];a&&(t.coneLabel=b(a)),/^memorySkipped:\s*true\s*$/m.test(e)&&(t.memorySkipped=!0),/^live:\s*true\s*$/m.test(e)&&(t.live=!0);let o=Number(e.match(/^liveThrough:\s*(\d+)\s*$/m)?.[1]);Number.isFinite(o)&&o>0&&(t.liveThrough=o);let s=Number(e.match(/^compactions:\s*(\d+)\s*$/m)?.[1]);Number.isFinite(s)&&s>0&&(t.compactions=s);let c=Number(e.match(/^curatedThrough:\s*(\d+)\s*$/m)?.[1]);Number.isFinite(c)&&c>0&&(t.curatedThrough=c);let l=e.match(/^id:\s*(\S+)\s*$/m)?.[1];l&&(t.id=l);let u=e.match(/^sidecar:\s*(\S+)\s*$/m)?.[1];return u&&(t.sidecar=u),t}function b(e){let t=e.trim();if(!t.startsWith(`"`))return t;try{let e=JSON.parse(t);if(typeof e==`string`)return e}catch{}return t.replace(/^"|"$/g,``)}function x(e,t){let n=RegExp(`^${t}:\\s*(.+?)\\s*$`,`m`).exec(e)?.[1];if(n)try{return JSON.parse(n)}catch{return}}function S(e){let t=[],n=/^## (User|Assistant)\s*\n/gm,r=[],i;for(;(i=n.exec(e))!==null;)r.push({role:i[1]===`User`?`user`:`assistant`,start:i.index,bodyStart:i.index+i[0].length});for(let n=0;n<r.length;n++){let i=n+1<r.length?r[n+1].start:e.length,a=e.slice(r[n].bodyStart,i).trim();t.push({id:`frozen-${n}`,role:r[n].role,content:a,timestamp:0})}return t}function C(e){let r=``;for(let i of e){let e=i.role===`user`?`User`:`Assistant`,a=i.role===`user`?n(i.content):i.content;if(r+=`## ${e}\n${a}\n\n`,i.attachments?.length&&(r+=`Attachments:\n${i.attachments.map(e=>`- ${t(e)}`).join(`
|
|
2
2
|
`)}\n\n`),i.toolCalls)for(let e of i.toolCalls)r+=`### Tool: ${e.name}\nInput: ${JSON.stringify(e.input,null,2)}\nResult: ${e.result??``}\n\n`}return r}var ne=`<!-- slicc:session-data
|
|
3
3
|
`,re=`
|
|
4
4
|
-->`;function w(e){return e.startsWith(`pending-`)||e.startsWith(`live-`)}function T(e,t){return e.find(e=>e.live===!0&&(e.cone??`cone`)===t)}function E(){return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`}function D(e){return r(e,{maxLen:48,fallback:`session`})}var O=`untitled-session`,k=RegExp(`^(?:_Forwarded from .+?\\._\\s*)*(?:\\[@\\S+ (?:completed|idle|sudo-request|FAILED)\\b|\\[scoop_wait\\b|\\[(?:${[`Webhook Event`,`Sprinkle Event`,`File Watch Event`,`Session Reload`,`Navigate Event`,`Upgrade Event`,`Cherry Event`,`Workflow Event`,`Background Command`,`jshd Unit`,`Cron Event`,`Scoop Access Request`,`Preview Event`,`Preview event`,`Discovery Event`].join(`|`)})\\b|Preview tab (?:connected|disconnected) from |<context-summary\\b)`);function ie(e){return e.slice(0,480).trim().replace(/\s+/g,` `).slice(0,240)}function ae(e){let t=ie(e);return t.length>0&&k.test(t)}function oe(e){return e.role!==`user`||!e.content?.trim()||e.source===`lick`||e.channel?!1:!ae(e.content)}function se(e){let t=e.find(oe);if(!t?.content)return O;let n=t.content.trim().replace(/\s+/g,` `);return n.length>60?`${n.slice(0,60)}…`:n||O}function A(e){return e.map(e=>{let t={id:e.id,role:e.role,content:e.content,timestamp:e.timestamp};return e.attachments?.length&&(t.attachments=e.attachments),e.toolCalls?.length&&(t.toolCalls=e.toolCalls.map(e=>({id:e.id,name:e.name,input:e.input,...e.result===void 0?{}:{result:e.result},...e.isError?{isError:e.isError}:{}}))),e.source&&(t.source=e.source),e.channel&&(t.channel=e.channel),e.compaction&&(t.compaction=e.compaction),t})}function ce(e,t,n){return!t||t===n?e:e.split(t).join(n)}function j(e){let t=f(),n={...e,title:p(e.title,t),messages:h(e.messages,t)},r=(n.cost?`cost: ${JSON.stringify(n.cost)}\n`:``)+(n.models?`models: ${JSON.stringify(n.models)}\n`:``),i=(n.cone?`cone: ${n.cone}\n`:``)+(n.coneLabel?`coneLabel: ${JSON.stringify(n.coneLabel)}\n`:``)+(n.memorySkipped?`memorySkipped: true
|
package/dist/ui/assets/{session-search-index-o_XRNxc8.js → session-search-index-Bn4FhmPW.js}
RENAMED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{o as e,r as t}from"./kernel-worker-
|
|
1
|
+
import{o as e,r as t}from"./kernel-worker-B23YxkDH.js";import{loadFrozenArchive as n}from"./session-jsonl-B-4fihPX.js";const r=`/sessions/.search-index.json`,i=12e3,a=4e3;async function o(e,t){return typeof e.readdir==`function`?e.readdir(t):typeof e.readDir==`function`?(await e.readDir(t)).map(e=>e.name):[]}const s={fields:[`title`,`body`],storeFields:[`title`,`body`,`sessionId`,`sessionTitle`,`filename`,`messageId`,`messageIndex`,`role`,`echoKind`,`path`],idField:`id`,processTerm:e=>{let t=e.toLowerCase();return t.length<2?null:j(t)},searchOptions:{boost:{title:4,body:1},prefix:!0}},c={original:1,summary:.35,echo:.15};function l(e){if(e.compaction)return`summary`;let t=e.content??``;return/<context-summary>/i.test(t)||/Earlier conversation messages were compacted/i.test(t)||/full transcript of the conversation before this compaction is saved at/i.test(t)?`summary`:/^# session (search|read):/m.test(t)||/\bid=sess\/[^\s]+/.test(t)||e.role===`assistant`&&e.toolCalls?.some(e=>e.name===`bash`&&typeof e.input==`object`&&e.input!==null&&/session\s+(search|read)\b/.test(String(e.input.command??``)))?`echo`:`original`}function u(e,t){return`sess/${e}/msg/${t}`}function d(e){let t=/^sess\/([^/]+)\/msg\/(.+)$/.exec(e);return t?{sessionId:t[1],messageId:t[2]}:null}function f(e){let t=`${e.sessionsDir??`/sessions`}/${e.filename}`,n=[];return e.messages.forEach((r,i)=>{let o=r.id||`i${i}`,s=[k(r.content??``,a)];for(let e of r.toolCalls??[])s.push(e.name,k(A(e.input),a)),e.result&&s.push(k(e.result,a));let c=k(s.filter(Boolean).join(`
|
|
2
2
|
`),a);!c.trim()&&!r.compaction||n.push({id:u(e.sessionId,o),title:e.sessionTitle,body:c,sessionId:e.sessionId,sessionTitle:e.sessionTitle,filename:e.filename,messageId:o,messageIndex:i,role:r.role,echoKind:l(r),path:t})}),n}const p=`/scoops`;async function m(e){let t;try{t=await o(e,p)}catch{return[]}let n=[];for(let r of t)try{let t=await o(e,`${p}/${r}/sessions`);for(let e of t)n.push(`${p}/${r}/sessions/${e}`)}catch{}return n.sort()}async function h(n){let r=(await e(n)).map(e=>({entry:e,sessionsDir:t}));for(let e of await m(n))for(let t of await g(n,e))r.push({entry:t,sessionsDir:e});return r}async function g(e,t){try{let n=await e.readFile(`${t}/index.json`,{encoding:`utf-8`}),r=typeof n==`string`?n:new TextDecoder().decode(n),i=JSON.parse(r);return Array.isArray(i)?i:[]}catch{return[]}}async function _(e){let t=(await import(`./es-BR4l6CGS.js`)).default,n=await h(e),i=[],a=new Set;for(let{entry:t,sessionsDir:r}of n)for(let n of await x(e,t,r))a.has(n.id)||(a.add(n.id),i.push(n));let o=new t(s);i.length&&o.addAll(i);let c={version:1,builtAt:Date.now(),archiveCount:n.length,fingerprint:C(n)};return await e.writeFile(r,JSON.stringify({meta:c,index:o.toJSON()})),{docs:i.length,archives:n.length}}async function v(e){let t=(await import(`./es-BR4l6CGS.js`)).default,n=C(await h(e));try{let i=await e.readFile(r,{encoding:`utf-8`}),a=typeof i==`string`?i:new TextDecoder().decode(i),o=JSON.parse(a);if(o.meta?.fingerprint===n&&o.index)return t.loadJS(o.index,s)}catch{}await _(e);let i=await e.readFile(r,{encoding:`utf-8`}),a=typeof i==`string`?i:new TextDecoder().decode(i),o=JSON.parse(a);return t.loadJS(o.index,s)}async function y(e,t,n={}){let r=Math.min(Math.max(1,n.limit??8),20),i=t.trim();if(!i)return[];let a=await v(e),o=a.search(i,{boost:{title:4,body:1},prefix:!0}),s=[];for(let e of o){let t=a.getStoredFields(e.id);if(!t)continue;let n=t.echoKind??`original`,r=e.score*(c[n]??1);s.push({id:String(e.id),score:r,echoKind:n,sessionId:t.sessionId,sessionTitle:t.sessionTitle,filename:t.filename,messageId:t.messageId,messageIndex:t.messageIndex,role:t.role,path:t.path,excerpt:w(t.body,i)})}return s.sort((e,t)=>t.score-e.score),s.slice(0,r)}async function b(e,t,n={}){let r=d(t);if(!r)return null;let i=await h(e),a=i.find(({entry:e})=>e.sessionId===r.sessionId)??i.find(({entry:e})=>e.filename.replace(/\.md$/i,``)===r.sessionId);if(!a)return null;let{entry:o,sessionsDir:s}=a,c=await S(e,o,s),l=c.findIndex((e,t)=>(e.id||`i${t}`)===r.messageId),u=Math.max(0,n.from??Math.max(0,l)),f=Math.max(1,n.count??3),p=c.slice(u,u+f),m=T(p,u),g=!1;for(;O(m)>12e3&&p.length>1;)p=p.slice(0,-1),m=T(p,u),g=!0;O(m)>12e3&&(m=`${k(m,11980)}\n…[truncated]\n`,g=!0);let _=p.length,v=Math.max(0,c.length-(u+_));return{hit:{sessionId:o.sessionId??r.sessionId,messageId:r.messageId,sessionTitle:o.title,path:`${s}/${o.filename}`},messages:p,from:u,count:_,total:c.length,remaining:v,truncated:g,text:m}}async function x(e,n,r=t){let i=await S(e,n,r);return f({sessionId:n.sessionId??n.filename.replace(/\.md$/i,``),sessionTitle:n.title,filename:n.filename,messages:i,sessionsDir:r})}async function S(e,r,i=t){try{let t=`${i}/${r.filename}`,a=await e.readFile(t,{encoding:`utf-8`}),o=typeof a==`string`?a:new TextDecoder().decode(a);return(await n(e,o,t)).messages}catch{return[]}}function C(e){return e.map(({entry:e,sessionsDir:t})=>`${t}/${e.filename}:${e.messageCount}:${e.frozenAt}:${e.sessionId??``}`).sort().join(`|`)}function w(e,t,n=80){let r=e.replace(/\s+/g,` `).trim();if(!r)return``;let i=t.toLowerCase().split(/\s+/).filter(e=>e.length>1),a=-1;for(let e of i)if(a=r.toLowerCase().indexOf(e),a>=0)break;if(a<0)return r.slice(0,n*2)+(r.length>n*2?`…`:``);let o=Math.max(0,a-n),s=Math.min(r.length,a+n);return`${o>0?`…`:``}${r.slice(o,s)}${s<r.length?`…`:``}`}function T(e,t){let n=[];return e.forEach((e,r)=>{let i=t+r,a=e.id||`i${i}`;n.push(`## [${i}] ${e.role} id=${a}`),e.content&&n.push(e.content);for(let t of e.toolCalls??[])n.push(`### tool ${t.name} (${t.id})${t.isError?` ERROR`:``}`),n.push(A(t.input)),t.result&&n.push(t.result);n.push(``)}),n.join(`
|
|
3
3
|
`)}async function E(e){try{await e.rm(r)}catch{}}const D=new TextEncoder;function O(e){return D.encode(e).byteLength}function k(e,t){if(t<=0)return``;let n=D.encode(e);if(n.byteLength<=t)return e;let r=t;for(;r>0&&(n[r]&192)==128;)r--;return new TextDecoder().decode(n.subarray(0,r))}function A(e){try{return JSON.stringify(e)}catch{return String(e)}}function j(e){if(e.length<3)return e;let t=e;if(t.endsWith(`sses`)||t.endsWith(`ies`)?t=`${t.slice(0,-2)}`:t.endsWith(`ss`)||t.endsWith(`s`)&&t.length>3&&(t=t.slice(0,-1)),t.endsWith(`eed`))M(t.slice(0,-3))>0&&(t=t.slice(0,-1));else if(/(ed|ing)$/.test(t)){let e=t.replace(/(ed|ing)$/,``);/[aeiouy]/.test(e)&&(t=e,/(at|bl|iz)$/.test(t)?t=`${t}e`:/(.)\1$/.test(t)&&!/[lsz]$/.test(t)?t=t.slice(0,-1):M(t)===1&&N(t)&&(t=`${t}e`))}return t.endsWith(`y`)&&/[aeiouy]/.test(t.slice(0,-1))&&(t=`${t.slice(0,-1)}i`),t}function M(e){return(e.toLowerCase().replace(/[^aeiouy]+/g,`C`).replace(/[aeiouy]+/g,`V`).replace(/^C/,``).replace(/V$/,``).match(/VC/g)??[]).length}function N(e){if(e.length<3)return!1;let t=e[e.length-3],n=e[e.length-2],r=e[e.length-1],i=e=>/[aeiouy]/.test(e);return!i(t)&&i(n)&&!i(r)&&!/[wxy]/.test(r)}export{i as SESSION_READ_BYTE_CAP,E as invalidateSessionSearchIndex,b as readSessionHit,y as searchSessions};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as e,L as t,R as n,_ as r,g as i,k as a}from"./main-
|
|
1
|
+
import{A as e,L as t,R as n,_ as r,g as i,k as a}from"./main-DFTTAllP.js";var o=3e3;async function s(n,r){let i=a(r.storage);try{let a=new URL(`/api/flags`,`${r.workerBaseUrl.replace(/\/+$/,``)}/`);a.searchParams.set(`float`,n);let s=await c(a.toString(),r.fetchImpl??fetch,r.timeoutMs??o);if(!s)return;e(i,n,s),t(n,s)}catch{}}async function c(e,t,n){let r=new AbortController,i;try{let a=new Promise(e=>{i=setTimeout(()=>{r.abort(),e(null)},n)}),o=t(e,{cache:`no-store`,headers:{Accept:`application/json`},signal:r.signal}).then(async e=>e.ok?l(await e.json()):null).catch(()=>null);return await Promise.race([o,a])}catch{return null}finally{i!==void 0&&clearTimeout(i)}}function l(e){if(!u(e))return null;let t=e.flags;return!u(t)||Object.values(t).some(e=>typeof e!=`string`)?null:t}function u(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function d(e,t){return s(e,{workerBaseUrl:g(t),storage:t.storage})}var f=18e5,p=null;function m(e,t,n=f){return h(),p=setInterval(()=>{d(e,t)},n),h}function h(){p!==null&&(clearInterval(p),p=null)}function g(e){let t=_(e.storage),a=n(e.envBaseUrl??null);if(t)return t;if(a)return a;if(!e.isDev)try{let t=new URL(e.locationHref);if(t.protocol===`http:`||t.protocol===`https:`)return t.origin}catch{}return e.isDev?r:i}function _(e){try{return n(e?.getItem(`slicc.trayWorkerBaseUrl`)??null)}catch{return null}}export{d as refreshFeatureFlagsForPage,m as scheduleFeatureFlagsRefresh};
|