sliccy 6.258.0 → 6.258.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 +180 -180
- package/dist/ui/assets/{account-store-CUu9wiNw.js → account-store-BGnbKLs5.js} +1 -1
- package/dist/ui/assets/{account-store-CNW9xmjU.js → account-store-CcZuCy3S.js} +1 -1
- package/dist/ui/assets/{adobe-7rBTWxYo.js → adobe-B5vP9OGp.js} +1 -1
- package/dist/ui/assets/{adobe-BlkXWTnp.js → adobe-C-ScLUGu.js} +1 -1
- package/dist/ui/assets/{agent-panels-Bb3PofV4.js → agent-panels-DCTo6Wss.js} +1 -1
- package/dist/ui/assets/{almost-bash-shell-headless-C_obk6Ox.js → almost-bash-shell-headless-CHa5Ul-3.js} +13 -13
- package/dist/ui/assets/{apply-layout-BnoCri0Y.js → apply-layout-DTLpbNxu.js} +1 -1
- package/dist/ui/assets/{azure-openai-jAyRsplU.js → azure-openai-BAct6ZA6.js} +1 -1
- package/dist/ui/assets/{azure-openai-zUbPeUeo.js → azure-openai-BMILhYX9.js} +1 -1
- package/dist/ui/assets/{cdp-DrjI9S7b.js → cdp-BzAZVurf.js} +3 -3
- package/dist/ui/assets/{cerebras-CghZzvCb.js → cerebras-CNgD7lp_.js} +1 -1
- package/dist/ui/assets/{cerebras-BHgo-Yiu.js → cerebras-Dz-h_wl1.js} +1 -1
- package/dist/ui/assets/{composer-speech--FTT95U5.js → composer-speech-OESQv3sI.js} +1 -1
- package/dist/ui/assets/{connect-surface-rscbakkA.js → connect-surface-8DlvxEca.js} +1 -1
- package/dist/ui/assets/{directed-approval-DDh0C5dJ.js → directed-approval-DLMjxdBs.js} +1 -1
- package/dist/ui/assets/{emscripten-vfs-hook-CKtkk4aV.js → emscripten-vfs-hook-C4qGX7bQ.js} +1 -1
- package/dist/ui/assets/{frozen-archive-writer-DxP1mGuF.js → frozen-archive-writer-D55Jt3H8.js} +1 -1
- package/dist/ui/assets/{frozen-session-delete-DvIQ0Acy.js → frozen-session-delete-BGggKcjU.js} +1 -1
- package/dist/ui/assets/{frozen-session-identity-C3QmAAvW.js → frozen-session-identity-BZSTAeu4.js} +1 -1
- package/dist/ui/assets/{gelatiere-unit-IwV4f9c5.js → gelatiere-unit-CUOJrgej.js} +1 -1
- package/dist/ui/assets/{github-BlWMGfB9.js → github-B811MuHC.js} +1 -1
- package/dist/ui/assets/{github-DG-_XbX4.js → github-CkJtSiU7.js} +1 -1
- package/dist/ui/assets/{github-copilot-CsE5WY9p.js → github-copilot-HCrqTnGC.js} +1 -1
- package/dist/ui/assets/{github-copilot-BUlj_BqL.js → github-copilot-oFv9l7dG.js} +1 -1
- package/dist/ui/assets/{hear-EtbOp9Cp.js → hear-C8k48Jl2.js} +1 -1
- package/dist/ui/assets/{hidden-page-input-Co3c1C0E.js → hidden-page-input-BxTN-_nx.js} +1 -1
- package/dist/ui/assets/{hidden-page-input-Baj5QP-I.js → hidden-page-input-CIKwo-BX.js} +1 -1
- package/dist/ui/assets/{js-realm-worker-Bkv-oMoS.js → js-realm-worker-BYcES1dO.js} +3 -3
- package/dist/ui/assets/{jsh-executor-BRRtEA2V.js → jsh-executor-iplislRW.js} +3 -3
- package/dist/ui/assets/{kernel-worker-Sy3AKX-Z.js → kernel-worker-B2Z-nUYg.js} +9 -9
- package/dist/ui/assets/{lick-ws-bridge-DwzS37NQ.js → lick-ws-bridge-D0FS6u9I.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-Bwp6Ht7o.js → lick-ws-bridge-LzLHO4a3.js} +1 -1
- package/dist/ui/assets/{live-session-curation-cWQza88g.js → live-session-curation-Bi9mZH0h.js} +1 -1
- package/dist/ui/assets/{live-session-curation-DDGxi7-m.js → live-session-curation-C6xwCNY7.js} +1 -1
- package/dist/ui/assets/{live-session-snapshot-DphOR9NB.js → live-session-snapshot-Dbnvkv8x.js} +1 -1
- package/dist/ui/assets/{local-llm-B0JI4B9j.js → local-llm-CM0Cay8_.js} +1 -1
- package/dist/ui/assets/{local-llm-BGDybr0k.js → local-llm-DGZvPJuu.js} +1 -1
- package/dist/ui/assets/{main-CB28fE35.js → main-CXxw-s8f.js} +3 -3
- package/dist/ui/assets/{main-cherry-CwNOEp7q.js → main-cherry-zhX2VFst.js} +1 -1
- package/dist/ui/assets/{mcp-command-Be_c7IO7.js → mcp-command-DMlFGT3U.js} +10 -10
- package/dist/ui/assets/{memory-curation-seam-DZxgJ-6z.js → memory-curation-seam-BP-IrsfK.js} +1 -1
- package/dist/ui/assets/{memory-write-execute-BH5um8i-.js → memory-write-execute-DvUX-zG7.js} +1 -1
- package/dist/ui/assets/{merge-folded-cost-into-frozen-BLg3vPEC.js → merge-folded-cost-into-frozen-Bsq0Ib6e.js} +1 -1
- package/dist/ui/assets/{new-session-DmKJtfIJ.js → new-session-BdRMCsns.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-cLa8GrcE.js → oauth-bootstrap-CO11SJzF.js} +2 -2
- package/dist/ui/assets/{onboarding-orchestrator-D3Nmcesg.js → onboarding-orchestrator-2GUITkQb.js} +1 -1
- package/dist/ui/assets/{openai-codex-D2oS9IpX.js → openai-codex-BUcn4LtY.js} +1 -1
- package/dist/ui/assets/{openai-codex-I9vkB4qk.js → openai-codex-YR4JQ9us.js} +1 -1
- package/dist/ui/assets/{openrouter-BXE-hGgk.js → openrouter-B0gFLpAT.js} +1 -1
- package/dist/ui/assets/{openrouter-free-GnDe-_cn.js → openrouter-free-Cc8rClvB.js} +1 -1
- package/dist/ui/assets/{openrouter-free-C3gOkDax.js → openrouter-free-DmDUncOh.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-CFbVFmPZ.js → openrouter-oauth-CoX3NZkY.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-DV2x9bI8.js → openrouter-oauth-Dn1ozKpc.js} +1 -1
- package/dist/ui/assets/{openrouter-BHu5QpgD.js → openrouter-vQ5g0p4t.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-DIeCVMgh.js → panel-rpc-handlers-hilOlK5V.js} +2 -2
- package/dist/ui/assets/{panelize-shell-wFRc2opb.js → panelize-shell-fCwzGqHl.js} +1 -1
- package/dist/ui/assets/{pi-edit-execution-1X13K76L.js → pi-edit-execution-C-JEQc-C.js} +1 -1
- package/dist/ui/assets/{provider-Bj7pLmFU.js → provider-Bc01vHZ3.js} +1 -1
- package/dist/ui/assets/{provider-B9d4wWKz.js → provider-BeWCtDQ3.js} +1 -1
- package/dist/ui/assets/{provider-settings-CL7Ap2pl.js → provider-settings-tlJjbAeQ.js} +1 -1
- package/dist/ui/assets/{provider-store-access-C4_y59-C.js → provider-store-access-3wJOZlG7.js} +1 -1
- package/dist/ui/assets/provider-store-access-CFbI4daT.js +1 -0
- package/dist/ui/assets/{providers-HJBOGH0_.js → providers-CoJHYmNe.js} +2 -2
- package/dist/ui/assets/{providers-DYzR-lAy.js → providers-eqicsvB_.js} +1 -1
- package/dist/ui/assets/{quick-llm-DuBsZ_oy.js → quick-llm-DCAllSWQ.js} +1 -1
- package/dist/ui/assets/{realm-inprocess-HXfgE_uz.js → realm-inprocess-BMUE_Hz8.js} +3 -3
- package/dist/ui/assets/{realm-unhandled-rejections-BWSCrECb.js → realm-unhandled-rejections-DSDIrg3R.js} +1 -1
- package/dist/ui/assets/{realm-unhandled-rejections-Cp8WTQTu.js → realm-unhandled-rejections-WM41Cfg1.js} +1 -1
- package/dist/ui/assets/{remote-terminal-view-Dowc_BQG.js → remote-terminal-view-BZVNE8DR.js} +2 -2
- package/dist/ui/assets/{restore-B5u2srVx.js → restore-DvM96Ugu.js} +1 -1
- package/dist/ui/assets/{run-DDl2kFGO.js → run-BEXxnwAI.js} +1 -1
- package/dist/ui/assets/{run-DfY7ONtC.js → run-BbvDS1e5.js} +2 -2
- package/dist/ui/assets/{run-BGOfD8E8.js → run-CkQK8Cwr.js} +2 -2
- package/dist/ui/assets/{serve-command-BQbdzFCR.js → serve-command-C3Zt9caR.js} +2 -2
- package/dist/ui/assets/{serve-runtime-9hWMj5cF.js → serve-runtime-C_dCDB4D.js} +1 -1
- package/dist/ui/assets/{session-command-memory-BAZnNVlf.js → session-command-memory-CdfHPOdQ.js} +2 -2
- package/dist/ui/assets/{session-jsonl-DIgotzcM.js → session-jsonl-b01SiQZt.js} +1 -1
- package/dist/ui/assets/{session-search-index-B66T7tj_.js → session-search-index-DepHWoDZ.js} +1 -1
- package/dist/ui/assets/{setup-feature-flags-remote-DiBAMVj6.js → setup-feature-flags-remote-B9_vJ1H1.js} +1 -1
- package/dist/ui/assets/{setup-model-catalog-cVNaa1wK.js → setup-model-catalog-UPQ6ml4Q.js} +1 -1
- package/dist/ui/assets/{silent-renew-backoff-CcpPMMwF.js → silent-renew-backoff-BXEMMYRE.js} +1 -1
- package/dist/ui/assets/slicc-version-CiMJbWqF.js +1 -0
- package/dist/ui/assets/{soundscape-BddKaUXd.js → soundscape-DKnzoFxU.js} +1 -1
- package/dist/ui/assets/{speak-C_Z4t38Q.js → speak-D6vwVL_J.js} +1 -1
- package/dist/ui/assets/{sprinkle-manager-DPmtsJap.js → sprinkle-manager-CaVy2uo1.js} +1 -1
- package/dist/ui/assets/{sprinkle-renderer-BoLqrN8K.js → sprinkle-renderer-CITuWHTA.js} +1 -1
- package/dist/ui/assets/{sudo-CjjIMlUj.js → sudo-BDm3xajX.js} +1 -1
- package/dist/ui/assets/{supervisor-bOjEeYp4.js → supervisor-VtWuadhb.js} +1 -1
- package/dist/ui/assets/{sync-dialog-DGmAtwAl.js → sync-dialog-D5Q0cjUF.js} +1 -1
- package/dist/ui/assets/{transformers-env-B1vN_Gx-.js → transformers-env-C84-8fvZ.js} +1 -1
- package/dist/ui/assets/{tray-leader-UiRKzyG3.js → tray-leader-qu__mEKK.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-dtpeidC-.js → tray-leave-runtime-LO4iGTOm.js} +1 -1
- package/dist/ui/assets/{tray-sidecar-CwSo8pRV.js → tray-sidecar-CELqvXC4.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-CNDMDgUK.js → upgrade-detection-CnccPiBn.js} +1 -1
- package/dist/ui/assets/{upgrade-to-seven-CK6eGnS5.js → upgrade-to-seven-D4NzsKJF.js} +1 -1
- package/dist/ui/assets/{voice-reply-Bk1tZoOZ.js → voice-reply-xfIZyhOh.js} +1 -1
- package/dist/ui/assets/{wc-attach-DZ-ZWKyM.js → wc-attach-C9Mhe62k.js} +2 -2
- package/dist/ui/assets/{wc-browser-iff5keZS.js → wc-browser-CI0bwE3K.js} +1 -1
- package/dist/ui/assets/{wc-computers-C9gbNyl0.js → wc-computers-bYGXyaiq.js} +1 -1
- package/dist/ui/assets/{wc-detached-B7w0DBTl.js → wc-detached-B3277WZK.js} +1 -1
- package/dist/ui/assets/{wc-extension-AVTSLUTo.js → wc-extension-CjaGm930.js} +2 -2
- package/dist/ui/assets/{wc-follower-BDLvpCXv.js → wc-follower-hANP0Y9v.js} +3 -3
- package/dist/ui/assets/{wc-follower-oauth-Chs1XjjQ.js → wc-follower-oauth-OGX9YuNF.js} +1 -1
- package/dist/ui/assets/{wc-gelatiere-DOQC7qQt.js → wc-gelatiere-BsrB8674.js} +1 -1
- package/dist/ui/assets/{wc-live-BQ473arq.js → wc-live-Rl9zyNOw.js} +5 -5
- package/dist/ui/assets/{wc-nav-CeHBGJNE.js → wc-nav-C8FqqkCL.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-Cr4M_Dt6.js → wc-onboarding-BAabu9Xs.js} +2 -2
- package/dist/ui/assets/{wc-permissions-Cf4VxDgw.js → wc-permissions-COHuDzpW.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-CO-RG0pv.js → wc-placeholder-cMjLeeOU.js} +2 -2
- package/dist/ui/assets/{wc-profile-export-BtFdUZc0.js → wc-profile-export-PPqX9elC.js} +3 -3
- package/dist/ui/assets/{wc-secret-request-BqS7TLNh.js → wc-secret-request-DQakJ4iC.js} +1 -1
- package/dist/ui/assets/{wc-settings-DnFpuLk-.js → wc-settings-meDi3yxj.js} +3 -3
- package/dist/ui/assets/{wc-shell-I5f8yL0J.js → wc-shell-Cty8D-1f.js} +3 -3
- package/dist/ui/assets/{wc-shortcut-config-Df-UAOxp.js → wc-shortcut-config-CdEMzluj.js} +1 -1
- package/dist/ui/assets/{wc-sprinkles-NiUbnZ4r.js → wc-sprinkles-kL-04xzI.js} +2 -2
- package/dist/ui/assets/{wc-transcript-export-BK1qrcHa.js → wc-transcript-export-nBVzrgCd.js} +2 -2
- package/dist/ui/assets/{wc-tray-BRApJ7pM.js → wc-tray-Bb8ILz7k.js} +4 -4
- package/dist/ui/assets/{welcome-detection-C8WCoDcd.js → welcome-detection-DaonMeSW.js} +1 -1
- package/dist/ui/assets/{whisper-session-BmAdn9JP.js → whisper-session-LfAksMkB.js} +2 -2
- package/dist/ui/assets/{xai-grok-s6wlotmp.js → xai-grok-BXudiU7L.js} +1 -1
- package/dist/ui/assets/{xai-grok-nZ79__pR.js → xai-grok-CxDGtG_E.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/ui/packages/webapp/index.html +3 -3
- package/dist/ui/packages/webapp/upgrade-to-seven.html +1 -1
- package/dist/ui/upgrade-to-seven.html +1 -1
- package/package.json +4 -4
- package/dist/ui/assets/provider-store-access-Dn9ny6oH.js +0 -1
- package/dist/ui/assets/slicc-version-Yrr7EIQi.js +0 -1
package/dist/ui/assets/{remote-terminal-view-Dowc_BQG.js → remote-terminal-view-BZVNE8DR.js}
RENAMED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/wc-shell-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/wc-shell-Cty8D-1f.js","assets/rolldown-runtime-COiEfhsA.js","assets/logger-dqckiMJt.js","assets/preload-helper-BLdHbfdN.js","assets/dictation-priming-BJiq_7sd.js","assets/mime-types-D0xZwlMO.js","assets/base64-ELzoYfwP.js","assets/bridge-protocol-C52CnDIj.js","assets/account-store-BGnbKLs5.js","assets/core-eNeHeyA9.js","assets/provider-env-WocePWH4.js","assets/__vite-browser-external-wwA6K3d-.js","assets/feature-flags-DDJdMcuw.js","assets/proxied-fetch-SAhvzdVS.js","assets/api-endpoint-C4kPBkpA.js","assets/secret-topology-Xi4wEaNK.js","assets/secrets-bridge-client-qNvySBWv.js","assets/panel-rpc-accessor-B4BfPLSo.js","assets/image-markers-4eaAm9QS.js","assets/stored-accounts-CdMZdZUa.js","assets/providers-CoJHYmNe.js","assets/renamed-providers-CO43PCxL.js","assets/bedrock-camp-compat-Oh_iOehJ.js","assets/bedrock-camp-extra-models-DdUk8URk.js","assets/claude-model-version-3MWQoaco.js","assets/sha256-DynDhwRL.js","assets/telemetry-kqkj0A7x.js","assets/GELATIERE-DDQCXCWG.js","assets/types-D8gIX-W-.js","assets/same-file-identity-DuEcSmPX.js","assets/icons-D4XASin-.js","assets/message-envelope-DAKDdMdt.js","assets/agent-message-to-chat-n7rU-oNf.js","assets/wc-shell-WkeczD9x.css"])))=>i.map(i=>d[i]);
|
|
2
2
|
import"./core-eNeHeyA9.js";import{t as e}from"./preload-helper-BLdHbfdN.js";import{t}from"./permissions-surface-registry-CilCRwhh.js";import{storePendingHandle as n}from"./mount-picker-popup-CkaBln-5.js";import{r}from"./hid-device-registry-BLGpdMjD.js";import"./browser-Bz7mYhuz.js";import{a as i}from"./serial-port-registry-B_XYGslQ.js";import{a}from"./usb-device-registry-CcuwcT2H.js";import"./usb-operations-CU7_oNBB.js";import{t as o}from"./terminal-session-client-DaXc9zss.js";function s(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 c=new Set([`--vid`,`--pid`,`--baud`,`--data-bits`,`--stop-bits`,`--parity`,`--flow-control`,`--buffer-size`,`--bytes`,`--until`,`--timeout-ms`,`--dtr`,`--rts`,`--break`,`--__resolved`]);function l(e){return s(e,c)}function u(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 d(e){let t={};return e.has(`--vid`)&&(t.usbVendorId=u(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.usbProductId=u(e.get(`--pid`),`pid`)),Object.keys(t).length>0?[t]:[]}var f=new Set([`--port`,`--baud`,`--vid`,`--pid`]);function p(e){return s(e,f)}var m=new Set([`--vid`,`--pid`,`--usage-page`,`--usage`,`--__resolved`,`--timeout`]);function h(e){return s(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.vendorId=g(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=g(e.get(`--pid`),`pid`)),e.has(`--usage-page`)&&(t.usagePage=g(e.get(`--usage-page`),`usage-page`)),e.has(`--usage`)&&(t.usage=g(e.get(`--usage`),`usage`)),Object.keys(t).length>0?[t]:[]}var v=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function y(e){return s(e,v)}function b(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 x(e){let t={};return e.has(`--vid`)&&(t.vendorId=b(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=b(e.get(`--pid`),`pid`)),e.has(`--class`)&&(t.classCode=b(e.get(`--class`),`class`)),e.has(`--subclass`)&&(t.subclassCode=b(e.get(`--subclass`),`subclass`)),e.has(`--protocol`)&&(t.protocolCode=b(e.get(`--protocol`),`protocol`)),e.has(`--serial`)&&(t.serialNumber=e.get(`--serial`)),Object.keys(t).length>0?[t]:[]}var S=`\x1B]7777;`,C=/\x1b\]7777;(\d+)\x07/g;String.raw`printf '\033]7777;%s\007' "$?"`;function w(e){let t=e.replace(/\r\n/g,`
|
|
3
3
|
`),n=t.indexOf(`
|
|
4
4
|
`);return n<0?``:t.slice(n+1)}var T=class{seen=!1;carry=``;capture=null;filter(e){let t=this.carry+e;this.carry=``;let n=t.lastIndexOf(`\x1B`),r=n<0?``:t.slice(n);r&&(S.startsWith(r)||r.startsWith(S)&&!r.includes(`\x07`))&&(this.carry=r,t=t.slice(0,n));let i=``,a=0;for(let e of t.matchAll(C)){let n=t.slice(a,e.index);i+=n,this.settle(n,Number(e[1])),this.seen=!0,a=e.index+e[0].length}let o=t.slice(a);return this.capture&&(this.capture.out+=o),i+o}get pending(){return this.capture!==null}expect(){return new Promise(e=>{this.capture={out:``,resolve:e}})}end(){this.settle(``,1),this.seen=!1,this.carry=``}settle(e,t){let n=this.capture;n&&(this.capture=null,n.resolve({stdout:w(n.out+e),stderr:``,exitCode:t}))}},E=500,D=class{display;line=[];cursor=0;history=[];historyIndex=0;draft=``;prompt=``;anchorRow=0;resolve=null;reject=null;constructor(e){this.display=e}get isReading(){return this.resolve!==null}get text(){return this.line.join(``)}get beforeCursor(){return this.line.slice(0,this.cursor).join(``)}read(e){if(this.isReading)throw Error(`terminal already reading`);return this.display.getCursor().col>0&&this.display.write(`\x1B[7m%\x1B[0m\r
|
|
5
5
|
`),this.prompt=e,this.line=[],this.cursor=0,this.historyIndex=this.history.length,this.draft=``,this.anchorRow=this.display.getCursor().row,this.display.write(e),new Promise((e,t)=>{this.resolve=e,this.reject=t})}abort(e){this.reject?.(e),this.resolve=null,this.reject=null}setLine(e){this.isReading&&(this.line=[...e],this.cursor=this.line.length,this.redraw())}insert(e){if(!this.isReading||!e)return;let t=[...e.replace(/[\r\n\x1b]/g,``)];this.line.splice(this.cursor,0,...t),this.cursor+=t.length,this.redraw()}list(e){if(!this.isReading)return;let t=this.cursor;this.cursor=this.line.length,this.redraw(),this.display.write(`\r\n${e.join(` `)}\r\n`),this.anchorRow=this.display.getCursor().row,this.cursor=t,this.redraw()}accept(){if(!this.resolve)return;this.cursor=this.line.length,this.redraw();let e=this.text;this.display.write(`\r
|
|
6
6
|
`),e.trim()&&this.history.at(-1)!==e&&(this.history.push(e),this.history.length>E&&this.history.shift());let t=this.resolve;this.resolve=null,this.reject=null,t(e)}cancel(){if(!this.resolve)return;this.cursor=this.line.length,this.redraw(),this.display.write(`^C\r
|
|
7
7
|
`);let e=this.resolve;this.resolve=null,this.reject=null,e(``)}feed(e){if(this.isReading)switch(e){case`\r`:case`
|
|
8
|
-
`:this.accept();return;case``:this.cancel();return;case``:case`\b`:this.cursor>0&&(this.line.splice(--this.cursor,1),this.redraw());return;case`\x1B[3~`:this.cursor<this.line.length&&(this.line.splice(this.cursor,1),this.redraw());return;case`\x1B[D`:case`\x1BOD`:this.cursor=Math.max(0,this.cursor-1),this.redraw();return;case`\x1B[C`:case`\x1BOC`:this.cursor=Math.min(this.line.length,this.cursor+1),this.redraw();return;case`\x1B[H`:case`\x1BOH`:case``:this.cursor=0,this.redraw();return;case`\x1B[F`:case`\x1BOF`:case``:this.cursor=this.line.length,this.redraw();return;case`\x1B[A`:case`\x1BOA`:this.navigate(-1);return;case`\x1B[B`:case`\x1BOB`:this.navigate(1);return;case``:this.line.splice(0,this.cursor),this.cursor=0,this.redraw();return;case`\v`:this.line.splice(this.cursor),this.redraw();return;case``:{let e=this.cursor;for(;e>0&&/\s/.test(this.line[e-1]??``);)e--;for(;e>0&&!/\s/.test(this.line[e-1]??``);)e--;this.line.splice(e,this.cursor-e),this.cursor=e,this.redraw();return}default:!e.includes(`\x1B`)&&!/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/.test(e)&&this.insert(e.replace(/[\r\n\t]+/g,` `))}}navigate(e){e<0&&this.historyIndex===0||e>0&&this.historyIndex===this.history.length||(this.historyIndex===this.history.length&&(this.draft=this.text),this.historyIndex+=e,this.line=[...this.history[this.historyIndex]??this.draft],this.cursor=this.line.length,this.redraw())}redraw(){let{row:e}=this.display.getCursor(),t=this.display.getScrollbackCount(),n=e-this.anchorRow;n>0&&this.display.write(`\x1b[${n}A`),this.display.write(`\r\x1B[0J`),this.display.write(this.prompt+this.beforeCursor),this.display.write(`\x1B7`),this.display.write(this.line.slice(this.cursor).join(``)),this.display.write(`\x1B8`),this.anchorRow=Math.max(0,this.anchorRow-(this.display.getScrollbackCount()-t))}},O=`\x1B[34m/\x1B[0m \x1B[90m$\x1B[0m `,k=class{options;client;terminal=null;terminalHost=null;previewHost=null;previewUrls=[];hasPreview=!1;previewStateListener=null;resizeObserver=null;rejectTerminalReady=null;editor=null;disposed=!1;programmaticResolve=null;isExecuting=!1;ptyMode=!1;loginShell=!1;loginSawPty=!1;marks=new T;settleSession=()=>{};sessionSettled=new Promise(e=>{this.settleSession=e});reportedSize=``;suppressOutput=!1;tabBusy=!1;pendingTabInput=[];constructor(e){this.options=e;let t=e.sid??`panel-terminal-${Date.now()}`;this.client=new o({client:e.client,sid:t,onEvent:e=>this.handleEvent(e)})}async mount(t){if(await e(()=>import(`./wc-shell-
|
|
8
|
+
`:this.accept();return;case``:this.cancel();return;case``:case`\b`:this.cursor>0&&(this.line.splice(--this.cursor,1),this.redraw());return;case`\x1B[3~`:this.cursor<this.line.length&&(this.line.splice(this.cursor,1),this.redraw());return;case`\x1B[D`:case`\x1BOD`:this.cursor=Math.max(0,this.cursor-1),this.redraw();return;case`\x1B[C`:case`\x1BOC`:this.cursor=Math.min(this.line.length,this.cursor+1),this.redraw();return;case`\x1B[H`:case`\x1BOH`:case``:this.cursor=0,this.redraw();return;case`\x1B[F`:case`\x1BOF`:case``:this.cursor=this.line.length,this.redraw();return;case`\x1B[A`:case`\x1BOA`:this.navigate(-1);return;case`\x1B[B`:case`\x1BOB`:this.navigate(1);return;case``:this.line.splice(0,this.cursor),this.cursor=0,this.redraw();return;case`\v`:this.line.splice(this.cursor),this.redraw();return;case``:{let e=this.cursor;for(;e>0&&/\s/.test(this.line[e-1]??``);)e--;for(;e>0&&!/\s/.test(this.line[e-1]??``);)e--;this.line.splice(e,this.cursor-e),this.cursor=e,this.redraw();return}default:!e.includes(`\x1B`)&&!/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/.test(e)&&this.insert(e.replace(/[\r\n\t]+/g,` `))}}navigate(e){e<0&&this.historyIndex===0||e>0&&this.historyIndex===this.history.length||(this.historyIndex===this.history.length&&(this.draft=this.text),this.historyIndex+=e,this.line=[...this.history[this.historyIndex]??this.draft],this.cursor=this.line.length,this.redraw())}redraw(){let{row:e}=this.display.getCursor(),t=this.display.getScrollbackCount(),n=e-this.anchorRow;n>0&&this.display.write(`\x1b[${n}A`),this.display.write(`\r\x1B[0J`),this.display.write(this.prompt+this.beforeCursor),this.display.write(`\x1B7`),this.display.write(this.line.slice(this.cursor).join(``)),this.display.write(`\x1B8`),this.anchorRow=Math.max(0,this.anchorRow-(this.display.getScrollbackCount()-t))}},O=`\x1B[34m/\x1B[0m \x1B[90m$\x1B[0m `,k=class{options;client;terminal=null;terminalHost=null;previewHost=null;previewUrls=[];hasPreview=!1;previewStateListener=null;resizeObserver=null;rejectTerminalReady=null;editor=null;disposed=!1;programmaticResolve=null;isExecuting=!1;ptyMode=!1;loginShell=!1;loginSawPty=!1;marks=new T;settleSession=()=>{};sessionSettled=new Promise(e=>{this.settleSession=e});reportedSize=``;suppressOutput=!1;tabBusy=!1;pendingTabInput=[];constructor(e){this.options=e;let t=e.sid??`panel-terminal-${Date.now()}`;this.client=new o({client:e.client,sid:t,onEvent:e=>this.handleEvent(e)})}async mount(t){if(await e(()=>import(`./wc-shell-Cty8D-1f.js`).then(e=>e.N),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33])),this.disposed)return;t.replaceChildren(),this.terminalHost=document.createElement(`div`),this.terminalHost.className=`terminal-panel__terminal-host`,t.appendChild(this.terminalHost),this.previewHost=document.createElement(`div`),this.previewHost.className=`terminal-panel__preview`,t.appendChild(this.previewHost);let n=document.createElement(`slicc-terminal`);n.hideHeader=!0,n.style.width=`100%`,n.style.height=`100%`,this.terminal=n;let r=new Promise((e,t)=>{let r=()=>{n.removeEventListener(`terminal-ready`,i),n.removeEventListener(`terminal-error`,a),this.rejectTerminalReady=null},i=()=>{r(),e()},a=e=>{r(),t(e.detail)};this.rejectTerminalReady=e=>{r(),t(e)},n.addEventListener(`terminal-ready`,i),n.addEventListener(`terminal-error`,a)});n.addEventListener(`terminal-data`,e=>{this.handleTerminalData(e.detail)}),this.terminalHost.appendChild(n),await r,!this.disposed&&(n.fit(),this.editor=new D({write:e=>n.write(e),getCursor:()=>n.terminal?.bridge?.getCursor()??{row:0,col:0},getScrollbackCount:()=>n.terminal?.bridge?.getScrollbackCount()??0}),this.resizeObserver=new ResizeObserver(()=>this.refit()),this.resizeObserver.observe(this.terminalHost),await this.client.open({cwd:this.options.cwd,env:this.options.env}),this.startSession(n))}async startSession(e){let t=await this.runLoginShell();this.disposed||(t||(e.writeln(`\x1B[1mslicc\x1B[0m \x1B[90mshell (kernel)\x1B[0m`),e.writeln(`\x1B[90mType "help" for available commands.\x1B[0m`),e.writeln(``)),this.runPromptLoop(),this.settleSession())}async runLoginShell(){this.loginShell=!0,this.loginSawPty=!1;let e=await this.runRemote(`wasm --login`,{discardCapturedOutput:!0});return this.loginShell=!1,this.marks.end(),!this.loginSawPty&&e.exitCode===125?null:(this.terminal?.writeln(`\x1b[90mbash exited (${e.exitCode}); this is the slicc shell. \`wasm --login\` starts bash again.\x1b[0m`),e)}refit(){this.terminal?.fit(),this.reportSize()}reportSize(){let e=this.terminal?.terminal;if(!e)return;let t=`${e.cols}x${e.rows}`;t!==this.reportedSize&&(this.reportedSize=t,this.client.resize(e.cols,e.rows))}clearTerminal(){this.terminal?.clear()}async executeCommandInTerminal(e){let t=e.trim();if(!t)return{stdout:``,stderr:``,exitCode:0};if(this.editor&&!(this.loginShell&&this.ptyMode)&&await this.sessionSettled,this.loginShell&&this.ptyMode)return this.typeIntoLoginShell(t);if(!this.terminal||!this.editor)return this.client.exec(t);if(this.isExecuting||this.programmaticResolve||!this.editor.isReading||this.editor.text)return{stdout:``,stderr:`terminal is busy; finish current input first
|
|
9
9
|
`,exitCode:1};let n=new Promise(e=>{this.programmaticResolve=e});return this.editor.setLine(t),this.editor.accept(),n}typeIntoLoginShell(e){if(this.marks.pending)return Promise.resolve({stdout:``,stderr:`terminal is busy
|
|
10
10
|
`,exitCode:1});let t=this.marks.seen?this.marks.expect():Promise.resolve({stdout:``,stderr:``,exitCode:0});return this.client.stdin(`${e}\r`),t}setPreviewStateListener(e){this.previewStateListener=e,e?.(this.hasPreview)}dispose(){this.disposed=!0,this.settleSession(),this.rejectTerminalReady?.(Error(`terminal disposed`)),this.editor?.abort(Error(`terminal disposed`)),this.clearMediaPreview(),this.resizeObserver?.disconnect(),this.resizeObserver=null,this.terminal?.remove(),this.terminal=null,this.editor=null,this.pendingTabInput=[],this.terminalHost=null,this.previewHost=null,this.client.close(),this.client.dispose()}renderMediaPreview(e){if(!this.previewHost)return;let t=document.createElement(`div`);t.className=`terminal-panel__preview-item`;let n=document.createElement(`div`);n.className=`terminal-panel__preview-label`;let r=e.path.split(`/`).pop()??e.path;if(n.textContent=`${r} · ${e.mediaType}`,t.appendChild(n),e.mediaType===`image/png`){let n=document.createElement(`slicc-terminal`);n.hideHeader=!0,n.style.width=`100%`,n.style.height=`180px`,n.style.pointerEvents=`none`,n.setAttribute(`aria-label`,`Kitty graphics preview of ${r}`),n.addEventListener(`terminal-ready`,()=>requestAnimationFrame(()=>{let e=n.shadowRoot?.querySelector(`.host`);e&&(e.scrollTop=0),this.terminal?.focus()}),{once:!0}),t.appendChild(n);for(let t=0;t<e.data.length;t+=4096){let r=t===0,i=t+4096>=e.data.length,a=r?`a=T,f=100,t=d,m=${+!i}`:`m=${+!i}`;n.write(`\x1b_G${a};${e.data.slice(t,t+4096)}\x1b\\`)}}else if(e.mediaType.startsWith(`video/`)){let n=Uint8Array.from(atob(e.data),e=>e.charCodeAt(0)),r=URL.createObjectURL(new Blob([n],{type:e.mediaType}));this.previewUrls.push(r);let i=document.createElement(`video`);i.className=`terminal-panel__preview-media`,i.controls=!0,i.autoplay=!0,i.loop=!0,i.muted=!0,i.playsInline=!0,i.src=r,i.addEventListener(`loadedmetadata`,()=>this.refit(),{once:!0}),t.appendChild(i)}else{let n=Uint8Array.from(atob(e.data),e=>e.charCodeAt(0)),i=URL.createObjectURL(new Blob([n],{type:e.mediaType}));this.previewUrls.push(i);let a=document.createElement(`img`);a.className=`terminal-panel__preview-media`,a.alt=r,a.src=i,a.addEventListener(`load`,()=>this.refit(),{once:!0}),t.appendChild(a)}this.previewHost.appendChild(t),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.editor&&this.terminal;){let e;try{e=await this.readNextLine()}catch{break}let t=this.programmaticResolve!==null,n=await this.processLine(e,t);this.programmaticResolve&&=(this.programmaticResolve(n),null)}}readNextLine(){if(!this.editor)return Promise.reject(Error(`terminal not mounted`));let e=this.editor.read(O);return this.flushPendingTabInput(),e}flushPendingTabInput(){for(;this.editor?.isReading&&this.pendingTabInput.length>0;)this.editor.feed(this.pendingTabInput.shift()??``)}handleTerminalData(e){this.ptyMode?this.client.stdin(e):e===` `?this.tabBusy||this.handleTab():e===``&&this.isExecuting?this.signalInterruptDuringExec():this.tabBusy?this.pendingTabInput.push(e):this.editor?.feed(e)}async processLine(e,t=!1){let n=e.trim(),r={stdout:``,stderr:``,exitCode:0};return n?n===`wasm --login`?await this.runLoginShell()??{stdout:``,stderr:`wasm: --login: no GNU bash to log in to (install @ai-ecoverse/wasm-bash)
|
|
11
11
|
`,exitCode:125}:!t&&await this.tryRunPicker(n)?r:this.runRemote(n):r}async tryRunPicker(e){let t=A(e);if(t)return await this.runRemoteWithLocalPicker(e,t),!0;let n=L(e);if(n)return await this.runRemoteWithUsbPicker(n),!0;let r=R(e);if(r)return await this.runRemoteWithHidPicker(r),!0;let i=B(e);if(i)return await this.runRemoteWithSerialPicker(i),!0;let a=V(e);if(a)return await this.runRemoteWithEsptoolPicker(e,a),!0;let o=I(e);return o?(await this.runRemoteWithScreenShare(o.name),!0):!1}signalInterruptDuringExec(){this.isExecuting&&(this.terminal?.writeln(`^C`),this.client.signal(`SIGINT`))}async handleTab(){if(this.terminal&&this.editor&&!(this.isExecuting||this.tabBusy)){this.tabBusy=!0,this.isExecuting=!0;try{let e=this.editor.beforeCursor,{currentWord:t,isFirstWord:n,compgenCmd:r}=U(e);this.suppressOutput=!0;let i=``;try{i=(await this.client.exec(r)).stdout}finally{this.suppressOutput=!1}let a=i.split(`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e,t}from"./almost-bash-shell-headless-
|
|
1
|
+
import{n as e,t}from"./almost-bash-shell-headless-CHa5Ul-3.js";import{o as n}from"./browser-Brcy18LQ.js";import{c as r}from"./sudoers-D6zuYF9I.js";import{r as i}from"./sudo-fs-DaF0615V.js";import{s as a}from"./just-bash-compat-Cg70pjrK.js";import{t as o}from"./home-dir-BmtQVSXa.js";import{n as s}from"./jsh-discovery-DUWJlGSv.js";import{n as c,r as l}from"./supervisor-VtWuadhb.js";function u(e,t){return new Map(Object.entries({HOME:o,PATH:s,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:e.cwd,...t,...e.env}))}function d(e,t,r,i){let o=u(t,i);return n({fs:e,cwd:t.cwd,env:o,stdin:a(``),exec:(e,n)=>r.exec(e,{env:n?.env??Object.fromEntries(o),cwd:n?.cwd??t.cwd,args:n?.args,...n?.env===void 0?{}:{replaceEnv:!0}})})}const f={requestApproval:async()=>({decision:`deny`})};async function p(n){let r=h(n.fs,n.sudo),i=new e(r),a=new t({fs:r,cwd:`/workspace`,processManager:n.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:n.fs,processManager:n.processManager,lickManager:n.lickManager,...n.realmFactory?{realmFactory:n.realmFactory}:{},buildContext:e=>m(i,e,o)}),u=(await l(n.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 i(e,{broker:t?.broker??f,getPolicy:t?.getPolicy??r,defaultDisposition:`allow`})}export{p as restoreEnabledJshdUnits};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./slicc-version-
|
|
1
|
+
import{n as e}from"./slicc-version-CiMJbWqF.js";import{o as t}from"./just-bash-compat-Cg70pjrK.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(`
|
|
@@ -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-CcZuCy3S.js`).then(e=>e.t),a=await import(`./providers-eqicsvB_.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-BGe-y713.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-BGe-y713.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-CcZuCy3S.js`).then(e=>e.t),{getRegisteredProviderConfig:r,getRegisteredProviderIds:i}=await import(`./providers-eqicsvB_.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-CcZuCy3S.js`).then(e=>e.t),{getRegisteredProviderConfig:i,getRegisteredProviderIds:a}=await import(`./providers-eqicsvB_.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-CcZuCy3S.js`).then(e=>e.t),{getRegisteredProviderConfig:r,getRegisteredProviderIds:i}=await import(`./providers-eqicsvB_.js`).then(e=>e.r),a=w(e,`onSilentRenew`,t,r,i);if(!a)return H(`oauth-token --renew: no provider supports silent renewal`);let o=r(a);if(!o)return H(`oauth-token --renew: unknown provider "${a}"`);if(!o.onSilentRenew)return H(`oauth-token --renew: provider "${a}" has no onSilentRenew hook`);let s=n(a),c=s?.token,l=[`oauth-token --renew ${a}`];l.push(` stored token: ${F(s)}`);let u=null,d=null;try{u=await o.onSilentRenew()}catch(e){d=e instanceof Error?e.message:String(e)}if(u){let e=n(a),t=!!(c&&e?.token&&c!==e.token);return l.push(` silent renewal: SUCCESS${t?` — token refreshed`:` (token unchanged)`}`),l.push(` renewed token: ${F(e)}`),{stdout:l.join(`
|
|
104
104
|
`)+`
|
|
105
105
|
`,stderr:``,exitCode:0}}if(d)return l.push(` silent renewal: ERROR — ${d}`,...P(a)),{stdout:l.join(`
|
|
106
106
|
`)+`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{t as e}from"./subcommand-flags-BRSOk05V.js";import{r as t,t as n}from"./subcommand-help-p8_2GpQY.js";import{i as r,s as i}from"./jsh-discovery-DUWJlGSv.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-BRSOk05V.js";import{r as t,t as n}from"./subcommand-help-p8_2GpQY.js";import{i as r,s as i}from"./jsh-discovery-DUWJlGSv.js";import{a,i as o,r as s,s as c,t as l}from"./supervisor-VtWuadhb.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
|
|
@@ -62,7 +62,7 @@ Notes:
|
|
|
62
62
|
`)+`
|
|
63
63
|
`)}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(`
|
|
64
64
|
`)||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(`
|
|
65
|
-
`)||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-
|
|
65
|
+
`)||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-VtWuadhb.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[.../* @__PURE__ */ 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(`
|
|
66
66
|
`);return n[n.length-1]===``&&n.pop(),`${n.slice(-t).join(`
|
|
67
67
|
`)}${e.endsWith(`
|
|
68
68
|
`)?`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{bindMcpRunner as e,currentPublication as t,discoverCli as n,ensureMcpServeInstalled as r,i,n as a,r as o,setPublication as s,t as c}from"./serve-runtime-
|
|
1
|
+
import{bindMcpRunner as e,currentPublication as t,discoverCli as n,ensureMcpServeInstalled as r,i,n as a,r as o,setPublication as s,t as c}from"./serve-runtime-C_dCDB4D.js";async function l(a,l){let d=b(l.fs),f=await v(l);e(f),r();let p=l.cwd||`/`;return u(x(a,p),{discover:(e,t)=>n(C(p,e),t,f),load:async()=>t()??c(d),save:e=>s(d,e),publish:e=>o(e),setGeneration:e=>o(e),stopRemote:()=>i()})}async function u(e,t){let n=a(e);if(n.error)return T(n.error);if(n.help)return w(d());let r=await t.load();return n.list?w(_(r)):n.stop===null?n.targets.length===0?T(`mcp --serve: missing path`):f(n.targets,r,t):h(n.stop,r,t)}function d(){return`usage: mcp --serve <path> [--serve <path>…]
|
|
2
2
|
mcp --serve <name>=<path>
|
|
3
3
|
mcp --serve --list
|
|
4
4
|
mcp --serve --stop [<name>]
|
|
@@ -14,5 +14,5 @@ CLI to the same URL. Tool names are prefixed with the CLI name.
|
|
|
14
14
|
`}async function f(e,t,n){let r=t??{url:``,token:``,grantGeneration:0,clis:[]},i=[],a=new Set(r.clis.map(e=>e.name));for(let t of e){if(r.clis.some(e=>e.path===t.path))continue;let e=await m(t,n);if(`error`in e)return T(e.error);if(a.has(e.cli.name))return T(`mcp --serve: ${e.cli.name} is already published; pass name=path to rename one`);a.add(e.cli.name),i.push(e.cli)}if(i.length===0)return t?.url?w(`${t.url}\n`):T(`mcp --serve: missing path`);let o=r.clis.concat(i);try{return await p(t,o,n)}catch(e){return T(e instanceof Error?e.message:`mcp --serve: publish failed`)}}async function p(e,t,n){if(!e){let e=await n.publish(1),r={url:e.url,token:e.token,grantGeneration:1,clis:t};return await n.save(r),w(`${r.url}\n`)}let r=e.grantGeneration+1,i=await n.setGeneration(r),a={...e,url:i.url||e.url,token:i.token||e.token,grantGeneration:r,clis:t};return await n.save(a),w(`${a.url}\n`)}async function m(e,t){try{return{cli:await t.discover(e.path,e.name)}}catch(e){return{error:e instanceof Error?e.message:`mcp --serve: discovery failed`}}}async function h(e,t,n){if(!t)return T(`mcp --serve: nothing is published`);if(typeof e!=`string`)return await g(n);let r=t.clis.filter(t=>t.name!==e);return r.length===t.clis.length?T(`mcp --serve: no CLI named ${e}`):r.length===0?await g(n):(await n.save({...t,clis:r}),w(`${t.url}\n`))}async function g(e){try{await e.stopRemote()}catch(e){return T(e instanceof Error?e.message:`mcp --serve: stop failed`)}return await e.save(null),w(`stopped
|
|
15
15
|
`)}function _(e){return e?`${[e.url,...e.clis.map(e=>`${e.name}\t${e.path}`)].join(`
|
|
16
16
|
`)}\n`:`mcp --serve: nothing is published
|
|
17
|
-
`}async function v(e){let{executeJshFile:t}=await import(`./jsh-executor-
|
|
17
|
+
`}async function v(e){let{executeJshFile:t}=await import(`./jsh-executor-iplislRW.js`).then(e=>e.r),{textAsStdin:n}=await import(`./just-bash-compat-Cg70pjrK.js`).then(e=>e.r);return(r,i,a)=>t(r,i,{...e,stdin:n(a??``)}).then(e=>y(e))}function y(e){return{stdout:e.stdout,stderr:e.stderr,exitCode:e.exitCode}}function b(e){return{readFile:t=>e.readFile(t),writeFile:(t,n)=>e.writeFile(t,n),exists:t=>e.exists(t),mkdir:async t=>{await e.exists(t)||await e.mkdir(t)}}}function x(e,t){let n=[];for(let r=0;r<e.length;r++){let i=e[r]??``;if(n.push(i),i!==`--serve`)continue;let a=e[r+1];a&&!a.startsWith(`--`)&&(n.push(S(a,t)),r++)}return n}function S(e,t){let n=e.indexOf(`=`);return n>0&&!e.slice(0,n).includes(`/`)?`${e.slice(0,n)}=${C(t,e.slice(n+1))}`:C(t,e)}function C(e,t){return t.startsWith(`/`)?t:`${e.endsWith(`/`)?e.slice(0,-1):e}/${t}`}function w(e){return{stdout:e,stderr:``,exitCode:0}}function T(e){return{stdout:``,stderr:e.endsWith(`
|
|
18
18
|
`)?e:`${e}\n`,exitCode:1}}export{l as runMcpServeCommand};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{t as e}from"./logger-Cx6Y120U.js";import{t}from"./types-D8gIX-W-.js";import{f as n}from"./kernel-worker-
|
|
1
|
+
import{t as e}from"./logger-Cx6Y120U.js";import{t}from"./types-D8gIX-W-.js";import{f as n}from"./kernel-worker-B2Z-nUYg.js";let r=e=>new BroadcastChannel(e),i=null,a=null,o=null;function s(e){return e?`slicc-mcp-serve:${e}`:`slicc-mcp-serve`}function c(e,t){a=e,o=t,u()}function l(e,t=15e3){return d(u(),{kind:`publish`,id:crypto.randomUUID(),grantGeneration:e},t)}function ee(e=15e3){let t=crypto.randomUUID();return d(u(),{kind:`stop`,id:t},e).then(()=>void 0)}function u(){return i||(i=r(s(n())),i.addEventListener(`message`,e=>{te(e.data)}),i.postMessage({kind:`kernel-ready`}),i)}async function te(e){if(e&&typeof e==`object`){if(e.kind===`page-ready`)o?.();else if(e.kind===`call`&&a)try{let t=await a(e.op,e.body);i?.postMessage({kind:`call-result`,id:e.id,...t})}catch(t){i?.postMessage({kind:`call-result`,id:e.id,status:500,contentType:`application/json; charset=utf-8`,body:JSON.stringify({error:t instanceof Error?t.message:`mcp call failed`})})}}}function d(e,t,n){let r=t.id,i=t.kind===`publish`?`publish-result`:`stop-result`;return new Promise((a,o)=>{let s=setTimeout(()=>{e.removeEventListener(`message`,c),o(/* @__PURE__ */ Error(`mcp ${t.kind} timed out`))},n),c=n=>{let l=n.data;l&&l.kind===i&&l.id===r&&(clearTimeout(s),e.removeEventListener(`message`,c),l.ok?a({url:l.kind===`publish-result`?l.url??``:``,token:l.kind===`publish-result`?l.token??``:``}):o(Error(l.error||`mcp ${t.kind} failed`)))};e.addEventListener(`message`,c),e.postMessage(t)})}const f=/^[A-Za-z][\w-]*$/;function p(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`_`).replace(/^_+|_+$/g,``)||`cli`}function ne(e,t,n){return p(n||v(e)||(t.split(`/`).pop()??t).replace(/\.jsh$/i,``))}function re(e){let t=[],n=!1,r=!1,i=null;for(let a=0;a<e.length;a++){let o=e[a]??``;if(o===`--help`||o===`-h`)n=!0;else if(o===`--list`)r=!0;else if(o===`--stop`){let t=e[a+1];t&&!t.startsWith(`--`)?(i=t,a++):i=!0}else if(o===`--serve`){let n=e[a+1];n&&!n.startsWith(`--`)&&(t.push(T(n)),a++)}else return{help:n,list:r,stop:i,targets:t,error:`mcp --serve: unexpected argument ${o}`}}return{help:n,list:r,stop:i,targets:t}}function m(e){let t=ue(e),n=v(e),r=be(t.commands,me(e,n));return{...n?{program:n}:{},commands:xe(r,t.scoped),globalFlags:t.globalFlags}}function ie(e){return e.path.length===1&&e.positionals.length===0&&e.flags.length===0}function ae(e,t,n,r){let i=h(n.commands,n.globalFlags);if(i.length===0)return null;let a=i.map(e=>e.path[0]??``);if(a.length===r.size&&a.every(e=>r.has(e)))return null;let o=i.map(e=>({...e,path:Ce(t,e)}));return e.filter(e=>e.path[0]!==t).concat(o)}function h(e,t){return t.length===0?e:e.map(e=>({...e,flags:S(e.flags,t)}))}function g(e){let t;try{t=JSON.parse(e)}catch{return null}if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=Object.getOwnPropertyDescriptor(t,`commands`)?.value;if(!Array.isArray(n))return null;let r=[];for(let e of n){let t=we(e);t&&r.push(t)}return r.length===0?null:{commands:r,globalFlags:[]}}function _(e,t){let n=[{name:`${e}_help`,description:`Show ${e} help.`,inputSchema:E({}),cli:e,kind:`help`,commandPath:[]},{name:`${e}_invoke`,description:`Run ${e} with an argv array (one element per argument) and optional stdin. A non-zero exit is a tool error.`,inputSchema:D(),cli:e,kind:`invoke`,commandPath:[]}];for(let r of t){let t=r.path.join(`_`);n.push({name:`${e}_${t}`,description:r.description||`Run ${e} ${r.path.join(` `)}`,inputSchema:De(r),cli:e,kind:`command`,commandPath:r.path})}return n}function oe(e){if(e==null)return{fields:[]};if(typeof e!=`object`||Array.isArray(e))return{fields:[],error:`arguments must be an object`};let t=[],n,r,i;for(let a of Object.keys(e)){let o=Object.getOwnPropertyDescriptor(e,a)?.value,s=ke(a,o);if(s.error)return{fields:t,error:s.error};s.stdin===void 0?s.passthrough?r=s.passthrough:s.argv?i=s.argv:s.field&&t.push(s.field):n=s.stdin}return{fields:t,...n===void 0?{}:{stdin:n},...r?{passthrough:r}:{},...i?{argv:i}:{}}}function se(e,t){if(t.error)return{error:t.error};let n=[...e.path];for(let r of e.positionals){let e=t.fields.find(e=>e.name===r.name);if(e){if(typeof e.value!=`string`&&typeof e.value!=`number`)return{error:`${r.name} must be a string`};n.push(String(e.value))}else if(r.required)return{error:`missing ${r.name}`}}let r=ce(e.flags,t.fields);return`error`in r?r:(n.push(...r.argv),t.passthrough&&n.push(...t.passthrough),{argv:n,...t.stdin===void 0?{}:{stdin:t.stdin}})}function ce(e,t){let n=[];for(let r of e){let e=t.find(e=>e.name===r.name);if(!e||e.value===!1)continue;let i=le(r,e.value);if(`error`in i)return i;n.push(...i.argv)}return{argv:n}}function le(e,t){if(e.type===`boolean`)return t===!0?{argv:[`--${e.name}`]}:{argv:[]};if(e.type===`string[]`){if(!Array.isArray(t))return{error:`${e.name} must be an array of strings`};let n=[];for(let r of t)n.push(`--${e.name}`,r);return{argv:n}}return typeof t!=`string`&&typeof t!=`number`?{error:`${e.name} must be a string`}:{argv:[`--${e.name}`,String(t)]}}function ue(e){let t=`none`,n=[],r=[],i=[];for(let a of e.split(`
|
|
2
2
|
`)){let e=a.replace(/\t/g,` `),o=fe(e);o?(t=o.kind===`other`?`none`:o.kind,o.kind===`scoped`&&o.name&&i.push({name:o.name,flags:[]})):de(t,e,n,r,i)}return{commands:n,globalFlags:r,scoped:i}}function de(e,t,n,r,i){if(e===`commands`){let e=pe(t);e&&n.push(e);return}let a=ve(t);a&&(e===`options`&&r.push(a),e===`scoped`&&i[i.length-1]?.flags.push(a))}function fe(e){let t=e.trim();if(/^commands:?$/i.test(t))return{kind:`commands`};if(/^options:?$/i.test(t))return{kind:`options`};let n=/^([A-Za-z][\w-]*)\s+flags:?$/i.exec(t);return n?.[1]?{kind:`scoped`,name:n[1].toLowerCase()}:/^[A-Z][A-Z0-9 ]+:$/.test(t)?{kind:`other`}:null}function pe(e){if(!/^\s{2,}\S/.test(e))return null;let t=e.trim().split(/\s{2,}/);if(t.length<2)return null;let n=x(t[0]??``),r=n[0]??``;if(!f.test(r)||r.startsWith(`-`))return null;let i=y();for(let e of n.slice(1))b(e,i);return{path:[r],description:t.slice(1).join(` `).trim(),positionals:i.positionals,flags:i.flags}}function v(e){for(let t of e.split(`
|
|
3
3
|
`)){if(!/^[\s>*]*usage:/i.test(t))continue;let e=x(t)[0];if(e&&f.test(e))return e}}function me(e,t){let n=[];for(let r of e.split(`
|
|
4
4
|
`)){let e=ge(r,t);e&&n.push(e)}return n}function he(e){let t=e.replace(/^\[|\]$/g,``).replace(/^<|>$/g,``).toLowerCase();return t===`command`||t===`cmd`||t===`subcommand`||t===`verb`}function ge(e,t){let n=e.trim(),r=x(n);if(r.length<2||!/^usage:/i.test(n)&&r[0]!==t)return null;let i=[],a=1;for(;a<r.length&&i.length<2&&f.test(r[a]??``);)i.push(r[a]??``),a++;if(i.length===0||he(r[a]??``))return null;let o=y();for(let e of r.slice(a))b(e,o);return{path:i,description:``,positionals:o.positionals,flags:o.flags}}function y(){return{positionals:[],flags:[]}}function b(e,t){let n=e.startsWith(`[`)&&e.endsWith(`]`),r=n?e.slice(1,-1).trim():e;if(r.startsWith(`--`)){let e=_e(r);e&&t.flags.push(e)}else r.startsWith(`<`)&&r.endsWith(`>`)?t.positionals.push({name:C(r.slice(1,-1)),required:!n,description:``}):f.test(r)&&t.positionals.push({name:C(r),required:!n,description:``})}function _e(e){let t=/^--([A-Za-z][\w-]*)(?:(?:=|\s+)(\S+))?$/.exec(e.trim());if(!t?.[1])return null;let n=t[2]??``;return n?{name:t[1],type:n.includes(`...`)?`string[]`:`string`,description:``}:{name:t[1],type:`boolean`,description:``}}function ve(e){let t=e.trim();if(!t.includes(`--`))return null;let n=/--([A-Za-z][\w-]*)(?:=(\S+)|(?:\s+(<[^>]+>|\[[^\]]+\]|[A-Z][A-Z0-9_-]+)))?/.exec(t);if(!n?.[1])return null;let r=n[2]||n[3]||``,i=/\brepeat|\.\.\.|one or more/i.test(t),a=ye(t);return!r&&!i?{name:n[1],type:`boolean`,description:a}:{name:n[1],type:i?`string[]`:`string`,description:a}}function ye(e){let t=e.trim().split(/\s{2,}/);return t.length>1?t.slice(1).join(` `).trim():``}function x(e){let t=e.trim().replace(/^usage:\s*/i,``),n=[],r=0;for(;r<t.length;){if(t[r]===` `){r++;continue}let e=t[r]===`[`?`]`:t[r]===`<`?`>`:``;if(e){let i=t.indexOf(e,r);if(i===-1){n.push(t.slice(r));break}n.push(t.slice(r,i+1)),r=i+1;continue}let i=t.indexOf(` `,r);if(i===-1){n.push(t.slice(r));break}n.push(t.slice(r,i)),r=i}return n}function be(e,t){let n=e.map(e=>({...e}));for(let e of t){let t=n.find(t=>Se(t.path,e.path));t?(t.positionals.length===0&&(t.positionals=e.positionals),t.description||=e.description,t.flags=S(t.flags,e.flags)):n.push(e)}return n}function xe(e,t){return e.map(e=>{let n=t.find(t=>t.name===(e.path[0]??``).toLowerCase());return n?{...e,flags:S(e.flags,n.flags)}:e})}function S(e,t){let n=[...e];for(let e of t)n.some(t=>t.name===e.name)||n.push(e);return n}function Se(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}function Ce(e,t){return t.path[0]===e?t.path.slice(0,2):[e,t.path[0]??``].filter(e=>e.length>0).slice(0,2)}function C(e){return e.replace(/[^A-Za-z0-9_-]+/g,``).replace(/^-+/,``)||`arg`}function we(e){if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=w(e,`name`);if(!t)return null;let n=t.split(/\s+/).filter(e=>f.test(e)).slice(0,2);return n.length===0?null:{path:n,description:w(e,`description`)??``,positionals:Te(Object.getOwnPropertyDescriptor(e,`positionals`)?.value),flags:Ee(Object.getOwnPropertyDescriptor(e,`flags`)?.value)}}function Te(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){if(!n||typeof n!=`object`||Array.isArray(n))continue;let e=w(n,`name`);if(!e)continue;let r=Object.getOwnPropertyDescriptor(n,`required`)?.value;t.push({name:e,required:r!==!1,description:``})}return t}function Ee(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){if(!n||typeof n!=`object`||Array.isArray(n))continue;let e=w(n,`name`),r=w(n,`type`);!e||r!==`boolean`&&r!==`string`&&r!==`string[]`||t.push({name:e,type:r,description:``})}return t}function w(e,t){let n=Object.getOwnPropertyDescriptor(e,t)?.value;return typeof n==`string`&&n.length>0?n:void 0}function T(e){let t=e.indexOf(`=`);return t>0&&!e.slice(0,t).includes(`/`)?{name:e.slice(0,t),path:e.slice(t+1)}:{path:e}}function E(e,t){return{type:`object`,properties:e,additionalProperties:!1,...t&&t.length>0?{required:t}:{}}}function D(){return E({argv:{type:`array`,items:{type:`string`},description:`Arguments, one element per argument. Never a shell string.`},stdin:{type:`string`,description:`Optional standard input.`}},[`argv`])}function De(e){let t={},n=[];for(let r of e.positionals)t[r.name]={type:`string`,description:r.description||r.name},r.required&&n.push(r.name);for(let n of e.flags)t[n.name]=Oe(n);return t.stdin={type:`string`,description:`Optional standard input.`},t.passthrough={type:`array`,items:{type:`string`},description:`Extra arguments appended as-is.`},E(t,n)}function Oe(e){return e.type===`boolean`?{type:`boolean`,description:e.description||e.name}:e.type===`string[]`?{type:`array`,items:{type:`string`},description:e.description||e.name}:{type:`string`,description:e.description||e.name}}function ke(e,t){if(e===`stdin`)return typeof t==`string`?{stdin:t}:{error:`stdin must be a string`};if(e===`passthrough`)return O(t,`passthrough`);if(e===`argv`){let e=O(t,`argv`);return e.passthrough?{argv:e.passthrough}:e}return Ae(t)?{field:{name:e,value:t}}:{error:`${e} has an unsupported type`}}function O(e,t){return!Array.isArray(e)||!e.every(e=>typeof e==`string`)?{error:`${t} must be an array of strings`}:{passthrough:e}}function Ae(e){return typeof e==`string`||typeof e==`boolean`||typeof e==`number`||Array.isArray(e)&&e.every(e=>typeof e==`string`)}function je(e){let t=Me(e.tools).map(e=>{let t=e.tools.map(e=>`<li><code>${k(e.name)}</code> ${k(e.description)}</li>`).join(``);return`<h2>${k(e.cli)}</h2><ul>${t}</ul>`}).join(``);return`<!DOCTYPE html>
|
package/dist/ui/assets/{session-command-memory-BAZnNVlf.js → session-command-memory-CdfHPOdQ.js}
RENAMED
|
@@ -18,5 +18,5 @@ import{r as e,t}from"./subcommand-help-p8_2GpQY.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-DepHWoDZ.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-DepHWoDZ.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-B14H0FfC.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{r as e,u as t}from"./frozen-archive-format-DjmxMrNn.js";import{t as n}from"./types-D8gIX-W-.js";import"./frozen-archive-writer-
|
|
1
|
+
import{r as e,u as t}from"./frozen-archive-format-DjmxMrNn.js";import{t as n}from"./types-D8gIX-W-.js";import"./frozen-archive-writer-D55Jt3H8.js";function r(t){let n=`${t.endsWith(`.md`)?t.slice(0,-3):t.replace(/\.md$/i,``)}.jsonl`;return n.startsWith(`/`)?n:`${e}/${n}`}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(e,t){let i=r(t);try{let t=await e.readFile(i,{encoding:`utf-8`});return a(typeof t==`string`?t:new TextDecoder().decode(t))}catch(e){if(e instanceof n&&e.code===`ENOENT`)return null;throw e}}async function d(e,t){let i=r(t);try{await e.rm(i)}catch(e){if(e instanceof n&&e.code===`ENOENT`)return;throw e}}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};
|
package/dist/ui/assets/{session-search-index-B66T7tj_.js → session-search-index-DepHWoDZ.js}
RENAMED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{o as e,p as t,r as n}from"./frozen-archive-format-DjmxMrNn.js";import{loadFrozenArchive as r}from"./session-jsonl-
|
|
1
|
+
import{o as e,p as t,r as n}from"./frozen-archive-format-DjmxMrNn.js";import{loadFrozenArchive as r}from"./session-jsonl-b01SiQZt.js";const i=`/sessions/.search-index.json`,a=12e3,o=4e3;async function s(e,t){return typeof e.readdir==`function`?e.readdir(t):typeof e.readDir==`function`?(await e.readDir(t)).map(e=>e.name):[]}const c={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:N(t)},searchOptions:{boost:{title:4,body:1},prefix:!0}},l={original:1,summary:.35,echo:.15};function u(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 d(e,t){return`sess/${e}/msg/${t}`}function f(e){let t=/^sess\/([^/]+)\/msg\/(.+)$/.exec(e);return t?{sessionId:t[1],messageId:t[2]}:null}function p(e){let t=`${e.sessionsDir??`/sessions`}/${e.filename}`,n=[];return e.messages.forEach((r,i)=>{let a=r.id||`i${i}`,s=[j(r.content??``,o)];for(let e of r.toolCalls??[])s.push(e.name,j(M(e.input),o)),e.result&&s.push(j(e.result,o));let c=j(s.filter(Boolean).join(`
|
|
2
2
|
`),o);(c.trim()||r.compaction)&&n.push({id:d(e.sessionId,a),title:e.sessionTitle,body:c,sessionId:e.sessionId,sessionTitle:e.sessionTitle,filename:e.filename,messageId:a,messageIndex:i,role:r.role,echoKind:u(r),path:t})}),n}const m=`/scoops`;async function h(e){let t;try{t=await s(e,m)}catch{return[]}let n=[];for(let r of t)try{let t=await s(e,`${m}/${r}/sessions`);for(let e of t)n.push(`${m}/${r}/sessions/${e}`)}catch{}return n.sort()}async function g(e){let r=(await t(e)).map(e=>({entry:e,sessionsDir:n}));for(let t of await h(e))for(let n of await _(e,t))r.push({entry:n,sessionsDir:t});return r}async function _(t,n){try{let r=await t.readFile(`${n}/index.json`,{encoding:`utf-8`}),i=typeof r==`string`?r:new TextDecoder().decode(r),a=JSON.parse(i);return Array.isArray(a)?e(a):[]}catch{return[]}}async function v(e){let t=(await import(`./es-DoD-AdNd.js`)).default,n=await g(e),r=[],i=/* @__PURE__ */ new Set;for(let{entry:t,sessionsDir:a}of n)for(let n of await C(e,t,a))i.has(n.id)||(i.add(n.id),r.push(n));let a=new t(c);return r.length&&a.addAll(r),{mini:a,meta:{version:1,builtAt:Date.now(),archiveCount:n.length,fingerprint:T(n)},docs:r.length,archives:n.length}}async function y(e,t){return T(await g(e))===t.meta.fingerprint&&(await e.writeFile(i,JSON.stringify({meta:t.meta,index:t.mini.toJSON()})),!0)}async function b(e){let t=(await import(`./es-DoD-AdNd.js`)).default,n=T(await g(e));try{let r=await e.readFile(i,{encoding:`utf-8`}),a=typeof r==`string`?r:new TextDecoder().decode(r),o=JSON.parse(a);if(o.meta?.fingerprint===n&&o.index)return t.loadJS(o.index,c)}catch{}let r=await v(e);return await y(e,r),r.mini}async function x(e,t,n={}){let r=Math.min(Math.max(1,n.limit??8),20),i=t.trim();if(!i)return[];let a=await b(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*(l[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:E(t.body,i)})}return s.sort((e,t)=>t.score-e.score),s.slice(0,r)}async function S(e,t,n={}){let r=f(t);if(!r)return null;let i=await g(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 w(e,o,s),l=c.findIndex((e,t)=>(e.id||`i${t}`)===r.messageId),u=Math.max(0,n.from??Math.max(0,l)),d=Math.max(1,n.count??3),p=c.slice(u,u+d),m=D(p,u),h=!1;for(;A(m)>12e3&&p.length>1;)p=p.slice(0,-1),m=D(p,u),h=!0;A(m)>12e3&&(m=`${j(m,11980)}\n…[truncated]\n`,h=!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:h,text:m}}async function C(e,t,r=n){let i=await w(e,t,r);return p({sessionId:t.sessionId??t.filename.replace(/\.md$/i,``),sessionTitle:t.title,filename:t.filename,messages:i,sessionsDir:r})}async function w(e,t,i=n){try{let n=`${i}/${t.filename}`,a=await e.readFile(n,{encoding:`utf-8`}),o=typeof a==`string`?a:new TextDecoder().decode(a);return(await r(e,o,n)).messages}catch{return[]}}function T(e){return e.map(({entry:e,sessionsDir:t})=>`${t}/${e.filename}:${e.messageCount}:${e.frozenAt}:${e.sessionId??``}`).sort().join(`|`)}function E(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 D(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(M(t.input)),t.result&&n.push(t.result);n.push(``)}),n.join(`
|
|
3
3
|
`)}async function O(e,t={}){try{await e.rm(i)}catch(e){if(t.strict&&e?.code!==`ENOENT`)throw e}}const k=new TextEncoder;function A(e){return k.encode(e).byteLength}function j(e,t){if(t<=0)return``;let n=k.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 M(e){try{return JSON.stringify(e)}catch{return String(e)}}function N(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`))P(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):P(t)===1&&F(t)&&(t=`${t}e`))}return t.endsWith(`y`)&&/[aeiouy]/.test(t.slice(0,-1))&&(t=`${t.slice(0,-1)}i`),t}function P(e){return(e.toLowerCase().replace(/[^aeiouy]+/g,`C`).replace(/[aeiouy]+/g,`V`).replace(/^C/,``).replace(/V$/,``).match(/VC/g)??[]).length}function F(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{a as SESSION_READ_BYTE_CAP,O as invalidateSessionSearchIndex,S as readSessionHit,x as searchSessions};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as e}from"./feature-flags-DDJdMcuw.js";import{D as t,E as n,T as r,f as i,p as a}from"./main-
|
|
1
|
+
import{u as e}from"./feature-flags-DDJdMcuw.js";import{D as t,E as n,T as r,f as i,p as a}from"./main-CXxw-s8f.js";var o=3e3;async function s(t,i){let a=r(i.storage);try{let r=new URL(`/api/flags`,`${i.workerBaseUrl.replace(/\/+$/,``)}/`);r.searchParams.set(`float`,t);let s=await c(r.toString(),i.fetchImpl??fetch,i.timeoutMs??o);if(!s)return;n(a,t,s),e(t,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 n=_(e.storage),r=t(e.envBaseUrl??null);if(n)return n;if(r)return r;if(!e.isDev)try{let t=new URL(e.locationHref);if(t.protocol===`http:`||t.protocol===`https:`)return t.origin}catch{}return e.isDev?a:i}function _(e){try{return t(e?.getItem(`slicc.trayWorkerBaseUrl`)??null)}catch{return null}}export{d as refreshFeatureFlagsForPage,g as resolveFeatureFlagsWorkerBaseUrl,m as scheduleFeatureFlagsRefresh};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./logger-dqckiMJt.js";import{_ as t,a as n,i as r,l as i,r as a,u as o}from"./core-eNeHeyA9.js";import{a as s}from"./feature-flags-DDJdMcuw.js";import{S as c}from"./account-store-
|
|
1
|
+
import{t as e}from"./logger-dqckiMJt.js";import{_ as t,a as n,i as r,l as i,r as a,u as o}from"./core-eNeHeyA9.js";import{a as s}from"./feature-flags-DDJdMcuw.js";import{S as c}from"./account-store-BGnbKLs5.js";import{resolveFeatureFlagsWorkerBaseUrl as l}from"./setup-feature-flags-remote-B9_vJ1H1.js";var u=`/api/models/providers/`,d=4e3,f=2e3;function p(e){let t=Array.isArray(e)?e:i(e)&&Array.isArray(n(e,`models`))?n(e,`models`):i(e)?Object.values(e):null;return t?t.filter(e=>i(e)&&typeof n(e,`id`)==`string`).slice(0,f):null}async function m(e,t,n,r){let i=new AbortController,a=setTimeout(()=>i.abort(),r);try{return await e(t,{...n,signal:i.signal})}finally{clearTimeout(a)}}async function h(e,t,n){if(!n.force&&t?.checkedAt!==void 0&&n.now-t.checkedAt<144e5)return{kind:`skip`};let r=new URL(`${u}${encodeURIComponent(e)}`,`${n.workerBaseUrl.replace(/\/+$/,``)}/`).toString(),i=t?.models.length?t.etag:void 0,a;try{a=await m(n.fetchImpl,r,{headers:{Accept:`application/json`,...i?{"If-None-Match":i}:{}}},n.timeoutMs)}catch{return{kind:`failed`,entry:t?{...t,checkedAt:n.now}:void 0}}if(a.status===304&&t)return{kind:`stored`,entry:{...t,checkedAt:n.now},changed:!1};if(a.status===404)return{kind:`stored`,entry:{models:[],checkedAt:n.now,lastModified:0},changed:!0};if(!a.ok)return{kind:`failed`,entry:t?{...t,checkedAt:n.now}:void 0};let o;try{o=p(await a.json())}catch{o=null}if(!o)return{kind:`failed`,entry:t};let s=Date.parse(a.headers.get(`last-modified`)??``),c={models:o,checkedAt:n.now,lastModified:Number.isNaN(s)?0:s},l=a.headers.get(`etag`);return l&&(c.etag=l),{kind:`stored`,entry:c,changed:!0}}async function g(e){let n={updated:[],failed:[]};if(!s(`live-model-catalog`))return n;let i=e.storage===void 0?r():e.storage;if(!i)return n;let c=new Set(t()),l=[...new Set(e.providers)].filter(e=>c.has(e));if(l.length===0)return n;let u=(e.now??Date.now)(),f={workerBaseUrl:e.workerBaseUrl,fetchImpl:e.fetchImpl??fetch,timeoutMs:e.timeoutMs??d,force:e.force===!0,now:u},p=o(i).store,m=await Promise.all(l.map(async e=>[e,await h(e,p[e],f)])),g={...o(i).store},_=!1;for(let[e,t]of m)t.kind!==`skip`&&(t.entry&&(g[e]=t.entry,_=!0),t.kind===`failed`?n.failed.push(e):t.changed&&n.updated.push(e));if(_)try{i.setItem(a,JSON.stringify(g))}catch{}return n}var _=e(`model-catalog`),v=36e5,y=null;async function b(e,t=!1){let n=await g({workerBaseUrl:l(e),providers:c(),storage:e.storage,force:t});return n.updated.length>0&&_.info(`Model catalogue refreshed`,{providers:n.updated}),n.failed.length>0&&_.debug(`Model catalogue refresh failed`,{providers:n.failed}),n}function x(e,t=v){return S(),y=setInterval(()=>{b(e)},t),b(e)}function S(){y!==null&&(clearInterval(y),y=null)}export{x as setupModelCatalog};
|
package/dist/ui/assets/{silent-renew-backoff-CcpPMMwF.js → silent-renew-backoff-BXEMMYRE.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./bridge-protocol-C52CnDIj.js";import{O as e}from"./main-
|
|
1
|
+
import"./bridge-protocol-C52CnDIj.js";import{O as e}from"./main-CXxw-s8f.js";function t(t){try{let n=new URL(t);return n.searchParams.has(`bridge`)?!0:!e(n.hostname)}catch{return!1}}function n(n,r){let i=t(n.pageHref),a=r();if(i){if(n.configuredRedirectUri){let t=``;try{t=new URL(n.configuredRedirectUri).origin}catch{t=``}if(t&&n.pageOrigin===t){let e=btoa(JSON.stringify({source:`opener`,path:`/auth/callback`,nonce:a}));return{redirectUri:n.configuredRedirectUri,oauthState:e,expectedNonce:a,source:`opener`}}let r=null;try{r=new URL(n.pageHref)}catch{r=null}if(r!==null&&r.protocol===`http:`&&e(r.hostname)&&r.port!==``&&r){let e=parseInt(r.port,10),t=btoa(JSON.stringify({source:`local`,port:e,path:`/auth/callback`,nonce:a}));return{redirectUri:n.configuredRedirectUri,oauthState:t,expectedNonce:a,source:`local`}}}return{redirectUri:`${n.pageOrigin}/auth/callback`,oauthState:btoa(JSON.stringify({source:`opener`,path:`/auth/callback`,nonce:a})),expectedNonce:a,source:`opener`}}let o=n.configuredRedirectUri??`${n.pageOrigin}/auth/callback`,s=parseInt(new URL(n.pageHref).port||`5710`,10);return{redirectUri:o,oauthState:btoa(JSON.stringify({port:s,path:`/auth/callback`,nonce:a})),expectedNonce:a,source:`local`}}var r=3e5;function i(e=r){let t=0;return{async run(n,r=Date.now()){if(r<t)return null;let i=null;try{i=await n()}catch(e){console.debug(`[silent-renew-backoff] renew threw:`,e instanceof Error?e.message:String(e)),i=null}return t=i?0:r+e,i},inCooldown(e=Date.now()){return e<t}}}export{n,t as r,i as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(){return{version:`6.258.2`,releasedAt:`2026-11-06T23:05:43Z`,buildId:`6.258.2-mw5l24pa`}}let t=null;function n(e){t=e}function r(){return t}export{e as n,n as r,r as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./logger-dqckiMJt.js";import{et as t}from"./wc-shell-
|
|
1
|
+
import{t as e}from"./logger-dqckiMJt.js";import{et as t}from"./wc-shell-Cty8D-1f.js";var n=e(`speech:soundscape`),r=`soundscape-enabled`;function i(){try{return localStorage.getItem(r)!==`false`}catch{return!0}}var a=0,o=!1;function s(){a++}function c(){a>0&&a--}function l(){return a>0}function u(e){o=e}function d(){return o}var f=null;function p(){return typeof AudioContext>`u`?null:(f&&f.state!==`closed`||(f=new AudioContext),f)}function m(e){if(!i()||!l()||d())return;let r=p();if(r)try{r.state===`suspended`&&r.resume(),t(r,e)}catch(e){n.debug(`soundscape cue failed`,e)}}export{s as beginVoiceTurn,c as endVoiceTurn,m as playCue,u as setTtsActive};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/transformers.web-HrBbrlqK.js","assets/rolldown-runtime-COiEfhsA.js","assets/kokoro-Db6eL6-_.js","assets/__vite-browser-external-wwA6K3d-.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{t as e}from"./logger-dqckiMJt.js";import{t}from"./preload-helper-BLdHbfdN.js";import{p as n}from"./api-endpoint-C4kPBkpA.js";import{t as r}from"./speech-assets-bridge-0pjUp_rk.js";import{i,n as a,o,r as s,t as c}from"./transformers-env-
|
|
2
|
+
import{t as e}from"./logger-dqckiMJt.js";import{t}from"./preload-helper-BLdHbfdN.js";import{p as n}from"./api-endpoint-C4kPBkpA.js";import{t as r}from"./speech-assets-bridge-0pjUp_rk.js";import{i,n as a,o,r as s,t as c}from"./transformers-env-C84-8fvZ.js";var l=e(`speech:espeak`),u=`/workspace/node_modules/espeak-ng/dist/`,d=`espeak-ng.js`,f=`espeak-ng.wasm`;async function p(e,t,n,r){let i=`phonemes.txt`;return(await e({arguments:[`-q`,`-b=1`,`--ipa`,`-v`,n,`--phonout`,i,t],...r?{locateFile:r}:{}})).FS.readFile(i,{encoding:`utf8`}).split(`
|
|
3
3
|
`).map(e=>e.trim()).filter(e=>e.length>0)}function ee(e,t){return async n=>{let r=URL.createObjectURL(new Blob([new Uint8Array(t)],{type:`application/wasm`}));try{let t=e=>e.endsWith(`.wasm`)?r:n.locateFile?.(e)??e;return await e({...n,locateFile:t})}finally{URL.revokeObjectURL(r)}}}function m(e){if(typeof BroadcastChannel>`u`)return Promise.reject(Error(`Cannot read VFS path ${e}: BroadcastChannel unavailable`));let t=new BroadcastChannel(`preview-vfs`),n=`espeak-${Date.now()}-${Math.random().toString(36).slice(2)}`;return new Promise((r,i)=>{let a=e=>{t.removeEventListener(`message`,c),t.close(),e()},o,s=()=>{clearTimeout(o),o=setTimeout(()=>a(()=>i(Error(`ENOENT: ${e} (timed out)`))),3e4)};s();let c=t=>{let c=t.data;if(c&&c.id===n){if(c.type===`preview-vfs-start`)s();else if(c.type===`preview-vfs-response`){if(clearTimeout(o),typeof c.error==`string`)a(()=>i(Error(c.error)));else if(c.content instanceof Uint8Array){let e=c.content;a(()=>r(e))}else if(typeof c.content==`string`){let e=c.content;a(()=>r(new TextEncoder().encode(e)))}else a(()=>i(Error(`Empty preview-vfs response for ${e}`)))}}};t.addEventListener(`message`,c),t.postMessage({type:`preview-vfs-read`,id:n,path:e,asText:!1})})}async function te(){let[e,t]=await Promise.all([m(`${u}${d}`),m(`${u}${f}`)]),n=URL.createObjectURL(new Blob([new Uint8Array(e)],{type:`text/javascript`}));try{return{factory:ee((await import(n)).default,t)}}finally{URL.revokeObjectURL(n)}}var ne=te,h=null;function g(){return h||=ne().then(({factory:e,locateFile:t})=>(l.info(`espeak-ng multilingual phonemizer loaded`),(n,r)=>p(e,n,r,t)),e=>{throw h=null,l.error(`espeak-ng load failed`,e),e}),h}var re=Object.freeze({e:`es`,f:`fr-fr`,i:`it`,h:`hi`,p:`pt-br`});function _(e){return re[e[0]]??null}var ie=Object.freeze({a:`en-us`,b:`en-gb`});function ae(e){return ie[e[0]]??null}function oe(e){let t=e instanceof Error?e.message:String(e);return/Invalid language identifier/i.test(t)&&/Should be one of:\s*\.?\s*$/i.test(t)}var se=RegExp(`(\\s*[${`;:,.!?¡¿—…"«»“”(){}[]`.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}]+\\s*)+`,`g`);function ce(e){let t=[],n=0;for(let r of e.matchAll(se)){let i=r[0],a=r.index??0;n<a&&t.push({punct:!1,text:e.slice(n,a)}),i.length>0&&t.push({punct:!0,text:i}),n=a+i.length}return n<e.length&&t.push({punct:!1,text:e.slice(n)}),t}function le(e){return e.replace(/kəkˈoːɹoʊ/g,`kˈoʊkəɹoʊ`).replace(/kəkˈɔːɹəʊ/g,`kˈəʊkəɹəʊ`).replace(/(?<=[a-zɹrː])(?=hˈʌndɹɪd)/g,` `).replace(/ z(?=[;:,.!?¡¿—…"«»“” ]|$)/g,`z`).trim()}async function ue(e,t,n){let r=ce(e);return le((await Promise.all(r.map(async e=>e.punct?e.text:(await n(e.text,t)).join(` `)))).join(``))}var v=e(`speech:kokoro`),y={a:`en-US`,b:`en-GB`,e:`es-ES`,f:`fr-FR`,i:`it-IT`,h:`hi-IN`,p:`pt-BR`,j:`ja-JP`,z:`zh-CN`},b=new Set([`en-US`,`en-GB`,`es-ES`,`fr-FR`,`it-IT`,`hi-IN`,`pt-BR`]);function x(e){let[t,n]=e.split(`-`);return n?`${t.toLowerCase()}-${n.toUpperCase()}`:t.toLowerCase()}function S(e,t){if(!t)return!1;if(b.has(t))return!0;if(t.includes(`-`))return!1;let n=y[e[0]];return n!==void 0&&b.has(n)&&n.split(`-`)[0].toLowerCase()===t}function de(e){return Object.entries(e).map(([e,t])=>{let n=t.language?x(t.language):y[e[0]];return{id:e,name:t.name||e,lang:n??`en-US`,onDevice:S(e,n),...t.gender?{gender:t.gender}:{}}})}var fe=Object.freeze({ef_dora:{name:`Dora`,gender:`Female`},em_alex:{name:`Alex`,gender:`Male`},em_santa:{name:`Santa`,gender:`Male`},ff_siwis:{name:`Siwis`,gender:`Female`},hf_alpha:{name:`Alpha`,gender:`Female`},hf_beta:{name:`Beta`,gender:`Female`},hm_omega:{name:`Omega`,gender:`Male`},hm_psi:{name:`Psi`,gender:`Male`},if_sara:{name:`Sara`,gender:`Female`},im_nicola:{name:`Nicola`,gender:`Male`},pf_dora:{name:`Dora`,gender:`Female`},pm_alex:{name:`Alex`,gender:`Male`},pm_santa:{name:`Santa`,gender:`Male`},jf_alpha:{name:`Alpha`,gender:`Female`},jf_gongitsune:{name:`Gongitsune`,gender:`Female`},jf_nezumi:{name:`Nezumi`,gender:`Female`},jf_tebukuro:{name:`Tebukuro`,gender:`Female`},jm_kumo:{name:`Kumo`,gender:`Male`},zf_xiaobei:{name:`Xiaobei`,gender:`Female`},zf_xiaoni:{name:`Xiaoni`,gender:`Female`},zf_xiaoxiao:{name:`Xiaoxiao`,gender:`Female`},zf_xiaoyi:{name:`Xiaoyi`,gender:`Female`},zm_yunjian:{name:`Yunjian`,gender:`Male`},zm_yunxi:{name:`Yunxi`,gender:`Male`},zm_yunxia:{name:`Yunxia`,gender:`Male`},zm_yunyang:{name:`Yunyang`,gender:`Male`}});function C(e){let t={...e};for(let[e,n]of Object.entries(fe))e in t||(t[e]=n);return de(t)}var w=`style_text_to_speech_2`,T=`StyleTextToSpeech2Model`;function pe(e){return e?.model_type!==w||Array.isArray(e.architectures)&&e.architectures.length!==0||(e.architectures=[T]),e}var E=Symbol.for(`slicc.kokoro.style-tts2-arch-shim`);function me(e){let t=e?.AutoConfig,n=t?.from_pretrained;if(!t||typeof n!=`function`){v.debug(`style_text_to_speech_2 shim skipped: AutoConfig.from_pretrained unavailable`);return}if(n[E])return;let r=async(...e)=>{let r=await n.apply(t,e),i=r?.model_type===w&&(!Array.isArray(r.architectures)||r.architectures.length===0);return pe(r),i&&v.debug(`style_text_to_speech_2 architectures injected for "${String(e[0])}": [${T}]`),r};r[E]=!0,t.from_pretrained=r,v.debug(`style_text_to_speech_2 architecture shim installed on AutoConfig.from_pretrained`)}async function D(e,t,n,r,i,a){let o=await ue(t,n,a),s=e.tokenizer,{input_ids:c}=s(o,{truncation:!0}),l=await e.generate_from_ids(c,{voice:r,...i?{speed:i}:{}});return{audio:l.audio,sampleRate:l.sampling_rate}}var he=/(?<=[.!?。!?…])\s+|\n{2,}/u;function O(e,t){let n=t??he,r=e.split(n).map(e=>e.trim()).filter(e=>e.length>0),i=e.trim();return r.length>0?r:i?[i]:[]}var k=null,A=`idle`,j=null,M=null;function N(){return A}function P(){return j}function F(){return M}function I(e){return k||=(A=`loading`,L(e).then(e=>(A=`ready`,M=e,e),e=>{throw A=`failed`,k=null,v.error(`kokoro load failed`,e),e})),k}async function L(e){let n=await t(()=>import(`./transformers.web-HrBbrlqK.js`),__vite__mapDeps([0,1]));a(n.env),me(n),await c(i),await s();let{KokoroTTS:r,TextSplitterStream:l}=await t(async()=>{let{KokoroTTS:e,TextSplitterStream:t}=await import(`./kokoro-Db6eL6-_.js`);return{KokoroTTS:e,TextSplitterStream:t}},__vite__mapDeps([2,1,3,0])),u=o(),d=typeof navigator<`u`&&`gpu`in navigator,f=await r.from_pretrained(i,{device:d?`webgpu`:`wasm`,dtype:d?`fp32`:`q8`,progress_callback:t=>{if(t?.file){if(t.status===`progress`)u.update(t.file,t.loaded??0,t.total??0);else if(t.status===`done`)u.complete(t.file);else return;j=u.snapshot(),e?.(j)}}});v.info(`kokoro ready`,{model:i,device:d?`webgpu`:`wasm`});let p=C(f.voices);return{async synthesize(e,t){let r=t?.voice??`af_heart`,i=_(r);if(i){let n=await g();return D(f,e,i,r,t?.speed,n)}try{let r=performance.now(),i=await f.generate(e,{...t?.voice?{voice:t.voice}:{},...t?.speed?{speed:t.speed}:{}}),a=i.audio;return v.info(`kokoro synthesize`,{elapsedMs:Math.round(performance.now()-r),chars:e.length,audioSeconds:Math.round(a.length/i.sampling_rate*100)/100,numThreads:n.env.backends?.onnx?.wasm?.numThreads}),{audio:a,sampleRate:i.sampling_rate}}catch(n){let i=await R(n,r);if(!i)throw n;return D(f,e,i.lang,r,t?.speed,i.phonemize)}},async*synthesizeStream(e,t){let r=t?.voice??`af_heart`,i=_(r);if(i){let n=await g();for(let a of O(e,t?.splitPattern))yield await D(f,a,i,r,t?.speed,n);return}let a={...t?.voice?{voice:t.voice}:{},...t?.speed?{speed:t.speed}:{}},o=new l;if(t?.splitPattern){let n=e.split(t.splitPattern).map(e=>e.trim()).filter(e=>e.length>0);o.push(...n)}else o.push(e);o.close();try{let t=performance.now(),r=0,i=0,s=0;for await(let e of f.stream(o,a)){let t=e.audio.audio;r+=1,i+=t.length,s=e.audio.sampling_rate,yield{audio:t,sampleRate:s}}v.info(`kokoro synthesizeStream`,{elapsedMs:Math.round(performance.now()-t),chunks:r,chars:e.length,audioSeconds:s?Math.round(i/s*100)/100:0,numThreads:n.env.backends?.onnx?.wasm?.numThreads})}catch(n){let i=await R(n,r);if(!i)throw n;for(let n of O(e,t?.splitPattern))yield await D(f,n,i.lang,r,t?.speed,i.phonemize)}},voices:()=>p}}async function R(e,t){if(!oe(e))return null;let n=ae(t);if(!n)return null;try{let e=await g();return v.warn(`kokoro bundled phonemizer reported no languages; phonemizing English with the staged espeak-ng`,{voiceId:t,lang:n}),{lang:n,phonemize:e}}catch(e){return v.warn(`staged espeak-ng unavailable, cannot recover English synthesis`,{error:String(e)}),null}}var z=44,B=16,V=1,H=B/8;function U(e,t,n){for(let r=0;r<n.length;r++)e.setUint8(t+r,n.charCodeAt(r))}function ge(e){let t=Math.max(-1,Math.min(1,e));return Math.round(t<0?t*32768:t*32767)}function _e(e){if(e.length===0)throw Error(`wav-encode: at least one PCM chunk is required`);let t=e[0].sampleRate;if(!Number.isFinite(t)||t<=0)throw Error(`wav-encode: invalid sample rate ${t}`);let n=0;for(let r of e){if(r.sampleRate!==t)throw Error(`wav-encode: mixed sample rates (${r.sampleRate} vs ${t}) — resample upstream`);n+=r.audio.length}let r=n*V*H,i=new ArrayBuffer(z+r),a=new DataView(i);U(a,0,`RIFF`),a.setUint32(4,36+r,!0),U(a,8,`WAVE`),U(a,12,`fmt `),a.setUint32(16,16,!0),a.setUint16(20,1,!0),a.setUint16(22,V,!0),a.setUint32(24,t,!0),a.setUint32(28,t*V*H,!0),a.setUint16(32,2,!0),a.setUint16(34,B,!0),U(a,36,`data`),a.setUint32(40,r,!0);let o=z;for(let t of e)for(let e=0;e<t.audio.length;e++)a.setInt16(o,ge(t.audio[e]),!0),o+=H;return new Uint8Array(i)}var W=e(`speech:speak`),G=2e4;function K(e){return e.toLowerCase().startsWith(`en`)}function ve(e,t){if(!t.ready)return`webspeech`;let n=e=>e.onDevice&&(K(e.lang)||t.nonEnglishOnDevice);if(e.voice){let r=t.voices.find(t=>t.id===e.voice);return r&&n(r)?`kokoro`:`webspeech`}let r=(e.lang?e.lang.split(`-`)[0]:`en`).toLowerCase();return t.voices.some(e=>e.lang.split(`-`)[0].toLowerCase()===r&&n(e))?`kokoro`:`webspeech`}function ye(e,t){if(!e||K(e))return;let n=e.split(`-`)[0].toLowerCase();return t.find(e=>e.onDevice&&e.lang.split(`-`)[0].toLowerCase()===n)?.id}var be=48;function xe(e){let t=e;return t=t.replace(/```[\s\S]*?```/g,` `),t=t.replace(/~~~[\s\S]*?~~~/g,` `),t=t.replace(/(?:```|~~~)[\s\S]*$/,` `),t=t.replace(/!\[([^\]]*)\]\([^)]*\)/g,`$1`),t=t.replace(/\[([^\]]+)\]\([^)]*\)/g,`$1`),t=t.replace(/`([^`]*)`/g,(e,t)=>t.length>be?` `:t),t=t.replace(/<[^>\n]+>/g,` `),t=t.replace(/^[ \t]{0,3}#{1,6}[ \t]+/gm,``),t=t.replace(/^[ \t]*>[ \t]?/gm,``),t=t.replace(/^[ \t]*(?:[-*+]|\d+[.)])[ \t]+/gm,``),t=t.replace(/[*_~]{1,3}([^*_~]+)[*_~]{1,3}/g,`$1`),t=t.replace(/\s+/g,` `).trim(),t.length>G&&(t=`${t.slice(0,G).replace(/\s+\S*$/,``)}…`),t}var q=n;function Se(e){return e.onDevice&&(K(e.lang)||!q())}function J(){return F()?.voices().map(e=>({...e,onDevice:Se(e)}))??[]}async function Y(){if(typeof speechSynthesis>`u`)return[];let e=speechSynthesis.getVoices();return e.length>0||typeof speechSynthesis.addEventListener!=`function`?e:new Promise(e=>{let t=()=>{clearTimeout(r),speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())},n=()=>t(),r=setTimeout(t,2e3);speechSynthesis.addEventListener(`voiceschanged`,n)})}async function Ce(e){let t=e.split(`-`)[0]?.toLowerCase();return t?J().some(e=>e.onDevice&&e.lang.split(`-`)[0].toLowerCase()===t)?!0:(await Y()).some(e=>e.lang.split(`-`)[0].toLowerCase()===t):!1}var X;function we(e){X=e}function Z(){let e=P();return{state:N(),...e?{loaded:e.loaded,total:e.total,etaSeconds:e.etaSeconds}:{}}}async function Te(){try{q()||await r({instanceId:X})}catch(e){W.warn(`kokoro asset staging failed; trying already-present weights`,e)}try{await I()}catch(e){W.warn(`kokoro warmup load failed`,e)}}function Q(){return Te(),Z()}var $=null;function Ee(){return $&&$.state!==`closed`||($=new AudioContext),$}async function De(e,t,n=1){let r=Ee();r.state===`suspended`&&await r.resume();let i=r.createBuffer(1,e.length,t);i.copyToChannel(new Float32Array(e),0);let a=r.createBufferSource();a.buffer=i;let o=r.createGain();o.gain.value=n,a.connect(o),o.connect(r.destination),await new Promise(e=>{a.onended=()=>e(),a.start()})}async function Oe(e){if(typeof speechSynthesis>`u`)throw Error(`speechSynthesis is unavailable in this realm`);let t=await Y();return new Promise((n,r)=>{let i=new SpeechSynthesisUtterance(e.text);if(e.lang!==void 0&&(i.lang=e.lang),e.rate!==void 0&&(i.rate=e.rate),e.pitch!==void 0&&(i.pitch=e.pitch),e.volume!==void 0&&(i.volume=e.volume),e.voice){let n=t.find(t=>t.name===e.voice);n&&(i.voice=n)}else if(e.lang){let n=e.lang.split(`-`)[0].toLowerCase(),r=t.find(e=>e.lang.split(`-`)[0].toLowerCase()===n);r&&(i.voice=r)}i.onend=()=>n(),i.onerror=e=>r(Error(`speak: ${e.error||`utterance failed`}`)),speechSynthesis.speak(i)})}async function ke(e){let t=F(),n=t?.voices()??[];if(ve(e,{ready:t!==null,voices:n,nonEnglishOnDevice:!q()})===`kokoro`&&t){let r=e.voice??ye(e.lang,n),i=0;try{let n=t.synthesizeStream(e.text,{...r?{voice:r}:{},...e.rate?{speed:e.rate}:{}});for await(let t of n)await De(t.audio,t.sampleRate,e.volume),i++;return{engine:`kokoro`}}catch(e){if(i>0)return W.warn(`kokoro stream failed mid-playback; stopping`,e),{engine:`kokoro`};W.warn(`kokoro synthesis failed; falling back to webspeech`,e)}}return await Oe(e),{engine:`webspeech`}}async function Ae(e){let t=F();if(!t)throw Error(`on-device voice not ready — run say --warmup and retry once it reports ready`);if(e.lang&&!e.lang.toLowerCase().startsWith(`en`))throw Error(`-o writes WAV via the on-device voice, which is English-only (got ${e.lang})`);if(e.voice&&!t.voices().map(e=>e.id).includes(e.voice))throw Error(`-o writes WAV via the on-device voice; "${e.voice}" is a Web Speech voice. Pick a kokoro voice (e.g. af_heart) or omit -v.`);let n=[],r=t.synthesizeStream(e.text,{...e.voice?{voice:e.voice}:{},...e.rate?{speed:e.rate}:{}});for await(let e of r)n.push({audio:e.audio,sampleRate:e.sampleRate});if(n.length===0)throw Error(`kokoro produced no audio (text is empty after sentence split?)`);return _e(n)}export{Ce as hasVoiceForLang,Z as kokoroStatus,J as kokoroVoicesIfReady,Q as kokoroWarmup,we as setSpeakAssetsInstanceId,ke as speak,xe as speechTextFromMarkdown,Ae as synthesizeToWav};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./logger-dqckiMJt.js";import{a as t}from"./feature-flags-DDJdMcuw.js";import{r as n,t as r}from"./sprinkle-renderer-BoLqrN8K.js";import{n as i,t as a}from"./panel-rpc-accessor-B4BfPLSo.js";import{s as o}from"./telemetry-kqkj0A7x.js";import{t as s}from"./permissions-surface-registry-CilCRwhh.js";import{n as c,t as l}from"./bounded-walk-BM2KRYZO.js";import"./sprinkle-instances-B8n7h-oP.js";var u=[`/workspace`,`/shared`,`/scoops`,`/home`],d=[`/shared/sprinkles`],f=6,p=500,m=new Set([`connect-llm`,`welcome`]);function h(e){return m.has(e)?!0:e===`suggestions`&&!t(`memory-v2`)}async function g(e){let t=new Map;for(let n of[...d,...u])await e.exists(n)&&await _(e,n,t);return t}async function _(e,t,n){let r=c(e,t,{maxDepth:f,maxDirs:p,skip:l});for await(let t of r){if(!t.endsWith(`.shtml`))continue;let r=v(t);if(!h(r)&&!n.has(r)){let i;try{i=await e.readFile(t,{encoding:`utf-8`})??``}catch{i=``}n.set(r,{name:r,path:t,title:y(i,r),autoOpen:b(i),icon:x(i)})}}}function v(e){let t=e.split(`/`).pop()??e;return t.endsWith(`.shtml`)?t.slice(0,-6):t}function y(e,t){let n=e.match(/data-sprinkle-title=["']([^"']+)["']/);if(n)return n[1];let r=e.match(/<title>([^<]+)<\/title>/i);return r?r[1].trim():t}function b(e){return/data-sprinkle-autoopen\b/.test(e)}function x(e){let t=/<link\b/gi,n;for(;(n=t.exec(e))!==null;){let t=n.index+n[0].length,r=S(e,t);if(r<0)continue;let i=e.slice(t,r);if(!/\brel\s*=\s*("|')\s*(?:shortcut\s+)?icon\s*\1/i.test(i))continue;let a=C(i,`href`);if(a!==void 0)return a.trim()}let r=C(e,`data-sprinkle-icon`);if(r!==void 0)return r.trim()}function S(e,t){let n=!1,r=!1;for(let i=t;i<e.length;i++){let t=e.charCodeAt(i);if(n)t===34&&(n=!1);else if(r)t===39&&(r=!1);else if(t===34)n=!0;else if(t===39)r=!0;else if(t===62)return i}return-1}function C(e,t){let n=RegExp(`\\b${t}\\s*=\\s*(?:"([^"]*)"|'([^']*)')`,`i`),r=e.match(n);if(r)return r[1]??r[2]??void 0}var w=e(`sprinkle-manager`);async function T(){let e=s();if(e){let t=await e.prompt({kinds:[`screenshare`],description:`A sprinkle asks to share a screen.`,requestOptions:{screenshare:{constraints:{video:!0,audio:!1}}}}),n=t.status===`granted`?t.grants.find(e=>e.kind===`screenshare`):void 0;if(!n){let e=t.message?`: ${t.message}`:``,n=t.reason??t.status;throw Error(n===`cancelled`||t.status===`cancelled`?`Screen capture cancelled`:`Screen capture ${n}${e}`)}return n.stream}if(!navigator.mediaDevices?.getDisplayMedia)throw Error(`Screen capture not supported in this browser`);return navigator.mediaDevices.getDisplayMedia({video:!0,audio:!1})}var E=`slicc-open-sprinkles`,D=`sprinkles`;function O(){try{if(typeof window>`u`||!window.location)return null;let e=new URLSearchParams(window.location.search).get(D);return e===null?null:e===``?[]:e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0)}catch{return null}}function k(e){try{if(typeof window>`u`||!window.location||typeof history>`u`||typeof history.replaceState!=`function`)return;let t=new URL(window.location.href);e.length===0?t.searchParams.delete(D):t.searchParams.set(D,e.join(`,`));let n=t.pathname+t.search+t.hash;history.replaceState(history.state??null,``,n)}catch{}}var A=`slicc-known-sprinkles`;function j(e){try{let t=new Set(e),n=M().filter(e=>t.has(e));localStorage.setItem(A,JSON.stringify(n))}catch{}}function M(){try{let e=localStorage.getItem(A);if(!e)return[];let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`string`):[]}catch{return[]}}var N=`slicc-autoopened-once`,P=u,F=250,I=class{fs;bridge;callbacks;availableSprinkles=new Map;watcherUnsub;openSprinkles=new Map;attentionOnly=new Set;rendererOperationTails=new Map;inflightRefresh=null;lastRefreshAt=0;autoOpenBehavior;onSendToSprinkle;onSprinkleReloaded;resolveLickOriginUnitId;registeredSprinkles=new Set;inlineSprinkles;changeListeners=new Set;changeNotifyScheduled=!1;urlWriteScheduled=!1;constructor(e,t,r,o,s={}){this.fs=e;let c=async()=>{let e=`image/png`,t=i(),n=a();if(!t&&!n)throw Error(`Screen capture unavailable in this environment`);let r,o,s;if(t){let t=await T();try{let n=document.createElement(`video`);n.srcObject=t,n.muted=!0,n.playsInline=!0,await new Promise((e,t)=>{n.onloadedmetadata=()=>n.play().then(()=>e()).catch(t),n.onerror=()=>t(Error(`Failed to load video stream`))}),await new Promise(e=>setTimeout(e,100)),o=n.videoWidth,s=n.videoHeight;let i=document.createElement(`canvas`);i.width=o,i.height=s;let a=i.getContext(`2d`);if(!a)throw Error(`Failed to get canvas context`);a.drawImage(n,0,0,o,s),r=await(await new Promise((t,n)=>{i.toBlob(e=>e?t(e):n(Error(`Failed to create image blob`)),e,1)})).arrayBuffer()}finally{for(let e of t.getTracks())e.stop()}}else{let t=await n.call(`screencapture`,{mimeType:e,quality:1},{timeoutMs:3e5});r=t.bytes,o=t.width,s=t.height}let c=new Uint8Array(r),l=[],u=8192;for(let e=0;e<c.length;e+=u)l.push(String.fromCharCode(...c.subarray(e,e+u)));return{base64:btoa(l.join(``)),width:o,height:s,mimeType:e}};this.bridge=new n(e,t,e=>this.close(e),e=>this.minimize(e),o,s.onAttachImage??(()=>{}),c,s.execHandler,(e,t,n)=>{this.openSprinkles.get(e)?.renderer.pushDeviceEvent(t,n)},s.selectScoopHandler,s.selectedScoopHandler),this.callbacks=r,this.autoOpenBehavior=s.autoOpenBehavior??`activate`,this.onSendToSprinkle=s.onSendToSprinkle,this.onSprinkleReloaded=s.onSprinkleReloaded,this.resolveLickOriginUnitId=s.resolveLickOriginUnitId,this.inlineSprinkles=s.inlineSprinkles??new Set}setSendToSprinkleHook(e){this.onSendToSprinkle&&!e&&w.error(`SprinkleManager broadcast hook detached`),this.onSendToSprinkle=e}setReloadHook(e){this.onSprinkleReloaded=e}enqueueRendererOperation(e,t){let n=(this.rendererOperationTails.get(e)??Promise.resolve()).then(t,t);return this.rendererOperationTails.set(e,n),n.finally(()=>{this.rendererOperationTails.get(e)===n&&this.rendererOperationTails.delete(e)})}reload(e){return this.enqueueRendererOperation(e,()=>this.reloadNow(e))}async reloadNow(e){let t=this.openSprinkles.get(e);if(!t){w.info(`Cannot reload closed sprinkle`,{name:e});return}let n=this.availableSprinkles.get(e);if(n||=(await this.refresh(),this.availableSprinkles.get(e)),!n){w.warn(`Sprinkle not found during reload`,{name:e});return}let i=await this.fs.readFile(n.path,{encoding:`utf-8`});if(i==null){w.warn(`Failed to read sprinkle content during reload`,{name:e});return}let a=typeof i==`string`?i:new TextDecoder(`utf-8`).decode(i);t.renderer?.dispose(),this.bridge.removeSprinkle(e);let o=this.bridge.createAPI(e,()=>t.lickOriginUnitId),s=new r(t.container,o);if(await s.render(a,e),!this.openSprinkles.has(e))s.dispose();else if(t.renderer=s,s.activateBridgeLifecycle(),this.openSprinkles.has(e)&&(w.info(`Sprinkle reloaded`,{name:e}),this.notifyChange(),this.onSprinkleReloaded))try{this.onSprinkleReloaded(e)}catch(t){w.error(`onSprinkleReloaded hook threw`,{name:e,error:t instanceof Error?t.message:String(t)})}}async restoreOpenSprinkles(){try{let e=O();if(e!==null){await this.reopenInBackground(e);return}let t=localStorage.getItem(E);t?await this.restoreFromLegacyStorage(t):await this.autoOpenFirstRun()}catch{}await this.surfaceUnseenSprinkles()}async reopenInBackground(e){for(let t of e)try{await this.open(t,void 0,{background:!0})}catch{w.warn(`Failed to restore sprinkle`,{name:t})}}async restoreFromLegacyStorage(e){try{await this.reopenInBackground(JSON.parse(e))}finally{try{localStorage.removeItem(E)}catch{}}}async autoOpenFirstRun(){let e=this.autoOpenBehavior===`attention`,t=this.loadAutoOpenedOnce(),n=new Set;for(let r of this.availableSprinkles.values())if(r.autoOpen&&!t.has(r.name))try{await this.open(r.name,void 0,{attention:e}),n.add(r.name)}catch{w.warn(`Failed to auto-open sprinkle`,{name:r.name})}n.size>0&&this.persistAutoOpenedOnce(n)}async surfaceUnseenSprinkles(){let e=this.loadKnownSprinkles(),t=this.loadAutoOpenedOnce(),n=this.autoOpenBehavior===`attention`,r=new Set;for(let i of this.availableSprinkles.values())if(!e.has(i.name)&&!this.openSprinkles.has(i.name)&&!(i.autoOpen&&t.has(i.name)))try{await this.open(i.name,void 0,{attention:!i.autoOpen||n}),i.autoOpen&&r.add(i.name),w.info(`Surfaced previously-unseen sprinkle`,{name:i.name})}catch{w.warn(`Failed to surface unseen sprinkle`,{name:i.name})}this.persistKnownSprinkles(new Set(this.availableSprinkles.keys())),r.size>0&&this.persistAutoOpenedOnce(r)}loadKnownSprinkles(){return new Set(M())}persistKnownSprinkles(e){try{let t=new Set([...this.loadKnownSprinkles(),...e]);localStorage.setItem(A,JSON.stringify([...t]))}catch{}}loadAutoOpenedOnce(){try{let e=localStorage.getItem(N);if(!e)return new Set;let t=JSON.parse(e);return Array.isArray(t)?new Set(t.filter(e=>typeof e==`string`)):new Set}catch{return new Set}}persistAutoOpenedOnce(e){try{let t=new Set([...this.loadAutoOpenedOnce(),...e]);localStorage.setItem(N,JSON.stringify([...t]))}catch{}}persistOpenSprinkles(){try{let e=[...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e));localStorage.setItem(E,JSON.stringify(e))}catch{}this.schedulePersistOpenSprinklesToUrl()}schedulePersistOpenSprinklesToUrl(){this.urlWriteScheduled||(this.urlWriteScheduled=!0,queueMicrotask(()=>{this.urlWriteScheduled=!1,k([...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e)))}))}async openNewAutoOpenSprinkles(){if(this.inflightRefresh!==null)return this.inflightRefresh;if(!(Date.now()-this.lastRefreshAt<F))return this.inflightRefresh=this.runOpenNewAutoOpenSprinkles().finally(()=>{this.lastRefreshAt=Date.now(),this.inflightRefresh=null}),this.inflightRefresh}async runOpenNewAutoOpenSprinkles(){let e=new Set(this.availableSprinkles.keys());await this.refresh();let t=this.autoOpenBehavior===`attention`,n=this.loadAutoOpenedOnce(),r=new Set,i=!1;for(let a of this.availableSprinkles.values())if(!this.openSprinkles.has(a.name)&&!e.has(a.name)){if(i=!0,a.autoOpen){if(n.has(a.name)){w.info(`Skipped one-shot auto-open for previously-consumed sprinkle`,{name:a.name});continue}try{await this.open(a.name,void 0,{attention:t}),r.add(a.name),w.info(`Auto-opened new sprinkle after install`,{name:a.name,attention:t})}catch{w.warn(`Failed to auto-open new sprinkle`,{name:a.name})}}else try{await this.open(a.name,void 0,{attention:!0}),w.info(`Surfaced newly-installed sprinkle in rail`,{name:a.name})}catch{w.warn(`Failed to surface newly-installed sprinkle`,{name:a.name})}}i&&this.persistKnownSprinkles(new Set(this.availableSprinkles.keys())),r.size>0&&this.persistAutoOpenedOnce(r)}async refresh(){this.availableSprinkles=await g(this.fs),w.info(`Discovered sprinkles`,{count:this.availableSprinkles.size}),this.syncRegisteredIcons(),this.notifyChange()}syncRegisteredIcons(){if(!this.callbacks.registerSprinkle)return;let e=new Set;for(let t of this.availableSprinkles.values())this.inlineSprinkles.has(t.name)||e.add(t.name);for(let t of this.availableSprinkles.values())if(e.has(t.name)&&!this.registeredSprinkles.has(t.name))try{this.callbacks.registerSprinkle(t.name,t.title,{icon:t.icon}),this.registeredSprinkles.add(t.name)}catch(e){w.warn(`registerSprinkle callback threw`,{name:t.name,error:e instanceof Error?e.message:String(e)})}for(let t of[...this.registeredSprinkles])if(!e.has(t)){this.openSprinkles.has(t)&&this.close(t);try{this.callbacks.unregisterSprinkle?.(t)}catch(e){w.warn(`unregisterSprinkle callback threw`,{name:t,error:e instanceof Error?e.message:String(e)})}this.registeredSprinkles.delete(t)}}onChange(e){return this.changeListeners.add(e),()=>{this.changeListeners.delete(e)}}notifyChange(){this.changeNotifyScheduled||(this.changeNotifyScheduled=!0,queueMicrotask(()=>{this.changeNotifyScheduled=!1;for(let e of this.changeListeners)try{e()}catch(e){w.error(`SprinkleManager.onChange handler threw`,{error:e instanceof Error?e.message:String(e)})}}))}open(e,t,n={}){return this.enqueueRendererOperation(e,()=>this.openNow(e,t,n))}async openNow(e,t,n={}){if(this.openSprinkles.has(e)){w.info(`Sprinkle already open`,{name:e});return}let i=this.availableSprinkles.get(e);if(i||=(await this.refresh(),this.availableSprinkles.get(e)),!i)throw Error(`Sprinkle not found: ${e}`);let a=await this.fs.readFile(i.path,{encoding:`utf-8`});if(a==null)throw Error(`Failed to read sprinkle content: ${i.path} (file may be corrupted or missing)`);let s=typeof a==`string`?a:new TextDecoder(`utf-8`).decode(a),c=document.createElement(`div`);c.className=`sprinkle-panel`,c.style.cssText=`width: 100%; height: 100%; display: flex; flex-direction: column; overflow-y: auto;`,c.dataset.sprinkle=e;let l={renderer:null,container:c,lickOriginUnitId:n.lickOriginTarget?this.resolveLickOriginUnitId?.(n.lickOriginTarget):void 0};this.openSprinkles.set(e,l),n.attention?this.attentionOnly.add(e):this.attentionOnly.delete(e),this.callbacks.addSprinkle(e,i.title,c,t,{attention:n.attention,background:n.background,icon:i.icon});let u=this.bridge.createAPI(e,()=>l.lickOriginUnitId),d=new r(c,u);await d.render(s,e);let f=this.openSprinkles.get(e);f?(f.renderer=d,d.activateBridgeLifecycle(),this.openSprinkles.has(e)&&(this.persistOpenSprinkles(),o(e),w.info(`Sprinkle opened`,{name:e,title:i.title}),this.notifyChange())):d.dispose()}markActivated(e){this.attentionOnly.has(e)&&(this.attentionOnly.delete(e),this.persistOpenSprinkles(),w.info(`Sprinkle promoted from attention to user-opened`,{name:e}),this.notifyChange())}async activate(e,t,n={}){let r=this.attentionOnly.has(e),i=this.openSprinkles.get(e);if(r&&i&&n.lickOriginTarget&&(i.lickOriginUnitId=this.resolveLickOriginUnitId?.(n.lickOriginTarget)),r&&this.markActivated(e),!i){try{await this.open(e,t,n)}catch(t){w.warn(`Failed to open sprinkle from rail-icon click`,{name:e,error:t instanceof Error?t.message:String(t)})}return}let a=this.availableSprinkles.get(e);this.callbacks.addSprinkle(e,a?.title??e,i.container,t,{icon:a?.icon})}close(e){let t=this.openSprinkles.get(e);t&&(t.renderer?.dispose(),t.container.remove(),this.bridge.removeSprinkle(e),this.openSprinkles.delete(e),this.attentionOnly.delete(e),this.callbacks.closeSprinkleContent?this.callbacks.closeSprinkleContent(e):this.callbacks.removeSprinkle(e),this.persistOpenSprinkles(),w.info(`Sprinkle closed`,{name:e}),this.notifyChange())}minimize(e){this.openSprinkles.has(e)&&(this.callbacks.minimizeSprinkle(e),w.info(`Sprinkle minimized`,{name:e}))}available(){return Array.from(this.availableSprinkles.values())}opened(){return Array.from(this.openSprinkles.keys())}lickOriginUnitIdOf(e){return this.openSprinkles.get(e)?.lickOriginUnitId}setupWatcher(e){let t=null,n=new Map,r=e=>{let r=!1;for(let t of e){let e=this.findOpenSprinkleByPath(t.path);if(e){let t=n.get(e);t&&clearTimeout(t),n.set(e,setTimeout(()=>{n.delete(e),this.reload(e).catch(t=>{w.warn(`Sprinkle reload on watcher event failed`,{name:e,error:t instanceof Error?t.message:String(t)})})},300))}else r=!0}r&&!t&&(t=setTimeout(()=>{t=null,this.openNewAutoOpenSprinkles().catch(e=>{w.warn(`Sprinkle refresh on watcher event failed`,{error:e instanceof Error?e.message:String(e)})})},150))},i=P.map(t=>e.watch(t,e=>e.endsWith(`.shtml`),r));this.watcherUnsub=()=>{for(let e of i)e();t&&=(clearTimeout(t),null);for(let e of n.values())clearTimeout(e);n.clear()}}findOpenSprinkleByPath(e){for(let[t]of this.openSprinkles){let n=this.availableSprinkles.get(t);if(n&&n.path===e)return t}return null}dispose(){this.watcherUnsub?.()}sendToSprinkle(e,t,n){let r=!n?.runtime||n.runtime===`leader`,i=!n?.runtime||n.runtime!==`leader`,a={leader:!1,followers:[]};if(r){let n=this.openSprinkles.get(e);n?(this.bridge.pushUpdate(e,t),n.renderer.pushUpdate(t),a.leader=!0):w.warn(`Cannot send to closed sprinkle`,{name:e})}if(i&&this.onSendToSprinkle)try{let r=this.onSendToSprinkle(e,t,n);r&&(a.followers=r.followers,r.unknownRuntime&&(a.unknownRuntime=r.unknownRuntime))}catch(t){w.error(`onSendToSprinkle hook threw`,{name:e,error:t instanceof Error?t.message:String(t)})}return a}};export{I as SprinkleManager,j as pruneKnownSprinkleNames,M as readKnownSprinkleNames};
|
|
1
|
+
import{t as e}from"./logger-dqckiMJt.js";import{a as t}from"./feature-flags-DDJdMcuw.js";import{r as n,t as r}from"./sprinkle-renderer-CITuWHTA.js";import{n as i,t as a}from"./panel-rpc-accessor-B4BfPLSo.js";import{s as o}from"./telemetry-kqkj0A7x.js";import{t as s}from"./permissions-surface-registry-CilCRwhh.js";import{n as c,t as l}from"./bounded-walk-BM2KRYZO.js";import"./sprinkle-instances-B8n7h-oP.js";var u=[`/workspace`,`/shared`,`/scoops`,`/home`],d=[`/shared/sprinkles`],f=6,p=500,m=new Set([`connect-llm`,`welcome`]);function h(e){return m.has(e)?!0:e===`suggestions`&&!t(`memory-v2`)}async function g(e){let t=new Map;for(let n of[...d,...u])await e.exists(n)&&await _(e,n,t);return t}async function _(e,t,n){let r=c(e,t,{maxDepth:f,maxDirs:p,skip:l});for await(let t of r){if(!t.endsWith(`.shtml`))continue;let r=v(t);if(!h(r)&&!n.has(r)){let i;try{i=await e.readFile(t,{encoding:`utf-8`})??``}catch{i=``}n.set(r,{name:r,path:t,title:y(i,r),autoOpen:b(i),icon:x(i)})}}}function v(e){let t=e.split(`/`).pop()??e;return t.endsWith(`.shtml`)?t.slice(0,-6):t}function y(e,t){let n=e.match(/data-sprinkle-title=["']([^"']+)["']/);if(n)return n[1];let r=e.match(/<title>([^<]+)<\/title>/i);return r?r[1].trim():t}function b(e){return/data-sprinkle-autoopen\b/.test(e)}function x(e){let t=/<link\b/gi,n;for(;(n=t.exec(e))!==null;){let t=n.index+n[0].length,r=S(e,t);if(r<0)continue;let i=e.slice(t,r);if(!/\brel\s*=\s*("|')\s*(?:shortcut\s+)?icon\s*\1/i.test(i))continue;let a=C(i,`href`);if(a!==void 0)return a.trim()}let r=C(e,`data-sprinkle-icon`);if(r!==void 0)return r.trim()}function S(e,t){let n=!1,r=!1;for(let i=t;i<e.length;i++){let t=e.charCodeAt(i);if(n)t===34&&(n=!1);else if(r)t===39&&(r=!1);else if(t===34)n=!0;else if(t===39)r=!0;else if(t===62)return i}return-1}function C(e,t){let n=RegExp(`\\b${t}\\s*=\\s*(?:"([^"]*)"|'([^']*)')`,`i`),r=e.match(n);if(r)return r[1]??r[2]??void 0}var w=e(`sprinkle-manager`);async function T(){let e=s();if(e){let t=await e.prompt({kinds:[`screenshare`],description:`A sprinkle asks to share a screen.`,requestOptions:{screenshare:{constraints:{video:!0,audio:!1}}}}),n=t.status===`granted`?t.grants.find(e=>e.kind===`screenshare`):void 0;if(!n){let e=t.message?`: ${t.message}`:``,n=t.reason??t.status;throw Error(n===`cancelled`||t.status===`cancelled`?`Screen capture cancelled`:`Screen capture ${n}${e}`)}return n.stream}if(!navigator.mediaDevices?.getDisplayMedia)throw Error(`Screen capture not supported in this browser`);return navigator.mediaDevices.getDisplayMedia({video:!0,audio:!1})}var E=`slicc-open-sprinkles`,D=`sprinkles`;function O(){try{if(typeof window>`u`||!window.location)return null;let e=new URLSearchParams(window.location.search).get(D);return e===null?null:e===``?[]:e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0)}catch{return null}}function k(e){try{if(typeof window>`u`||!window.location||typeof history>`u`||typeof history.replaceState!=`function`)return;let t=new URL(window.location.href);e.length===0?t.searchParams.delete(D):t.searchParams.set(D,e.join(`,`));let n=t.pathname+t.search+t.hash;history.replaceState(history.state??null,``,n)}catch{}}var A=`slicc-known-sprinkles`;function j(e){try{let t=new Set(e),n=M().filter(e=>t.has(e));localStorage.setItem(A,JSON.stringify(n))}catch{}}function M(){try{let e=localStorage.getItem(A);if(!e)return[];let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`string`):[]}catch{return[]}}var N=`slicc-autoopened-once`,P=u,F=250,I=class{fs;bridge;callbacks;availableSprinkles=new Map;watcherUnsub;openSprinkles=new Map;attentionOnly=new Set;rendererOperationTails=new Map;inflightRefresh=null;lastRefreshAt=0;autoOpenBehavior;onSendToSprinkle;onSprinkleReloaded;resolveLickOriginUnitId;registeredSprinkles=new Set;inlineSprinkles;changeListeners=new Set;changeNotifyScheduled=!1;urlWriteScheduled=!1;constructor(e,t,r,o,s={}){this.fs=e;let c=async()=>{let e=`image/png`,t=i(),n=a();if(!t&&!n)throw Error(`Screen capture unavailable in this environment`);let r,o,s;if(t){let t=await T();try{let n=document.createElement(`video`);n.srcObject=t,n.muted=!0,n.playsInline=!0,await new Promise((e,t)=>{n.onloadedmetadata=()=>n.play().then(()=>e()).catch(t),n.onerror=()=>t(Error(`Failed to load video stream`))}),await new Promise(e=>setTimeout(e,100)),o=n.videoWidth,s=n.videoHeight;let i=document.createElement(`canvas`);i.width=o,i.height=s;let a=i.getContext(`2d`);if(!a)throw Error(`Failed to get canvas context`);a.drawImage(n,0,0,o,s),r=await(await new Promise((t,n)=>{i.toBlob(e=>e?t(e):n(Error(`Failed to create image blob`)),e,1)})).arrayBuffer()}finally{for(let e of t.getTracks())e.stop()}}else{let t=await n.call(`screencapture`,{mimeType:e,quality:1},{timeoutMs:3e5});r=t.bytes,o=t.width,s=t.height}let c=new Uint8Array(r),l=[],u=8192;for(let e=0;e<c.length;e+=u)l.push(String.fromCharCode(...c.subarray(e,e+u)));return{base64:btoa(l.join(``)),width:o,height:s,mimeType:e}};this.bridge=new n(e,t,e=>this.close(e),e=>this.minimize(e),o,s.onAttachImage??(()=>{}),c,s.execHandler,(e,t,n)=>{this.openSprinkles.get(e)?.renderer.pushDeviceEvent(t,n)},s.selectScoopHandler,s.selectedScoopHandler),this.callbacks=r,this.autoOpenBehavior=s.autoOpenBehavior??`activate`,this.onSendToSprinkle=s.onSendToSprinkle,this.onSprinkleReloaded=s.onSprinkleReloaded,this.resolveLickOriginUnitId=s.resolveLickOriginUnitId,this.inlineSprinkles=s.inlineSprinkles??new Set}setSendToSprinkleHook(e){this.onSendToSprinkle&&!e&&w.error(`SprinkleManager broadcast hook detached`),this.onSendToSprinkle=e}setReloadHook(e){this.onSprinkleReloaded=e}enqueueRendererOperation(e,t){let n=(this.rendererOperationTails.get(e)??Promise.resolve()).then(t,t);return this.rendererOperationTails.set(e,n),n.finally(()=>{this.rendererOperationTails.get(e)===n&&this.rendererOperationTails.delete(e)})}reload(e){return this.enqueueRendererOperation(e,()=>this.reloadNow(e))}async reloadNow(e){let t=this.openSprinkles.get(e);if(!t){w.info(`Cannot reload closed sprinkle`,{name:e});return}let n=this.availableSprinkles.get(e);if(n||=(await this.refresh(),this.availableSprinkles.get(e)),!n){w.warn(`Sprinkle not found during reload`,{name:e});return}let i=await this.fs.readFile(n.path,{encoding:`utf-8`});if(i==null){w.warn(`Failed to read sprinkle content during reload`,{name:e});return}let a=typeof i==`string`?i:new TextDecoder(`utf-8`).decode(i);t.renderer?.dispose(),this.bridge.removeSprinkle(e);let o=this.bridge.createAPI(e,()=>t.lickOriginUnitId),s=new r(t.container,o);if(await s.render(a,e),!this.openSprinkles.has(e))s.dispose();else if(t.renderer=s,s.activateBridgeLifecycle(),this.openSprinkles.has(e)&&(w.info(`Sprinkle reloaded`,{name:e}),this.notifyChange(),this.onSprinkleReloaded))try{this.onSprinkleReloaded(e)}catch(t){w.error(`onSprinkleReloaded hook threw`,{name:e,error:t instanceof Error?t.message:String(t)})}}async restoreOpenSprinkles(){try{let e=O();if(e!==null){await this.reopenInBackground(e);return}let t=localStorage.getItem(E);t?await this.restoreFromLegacyStorage(t):await this.autoOpenFirstRun()}catch{}await this.surfaceUnseenSprinkles()}async reopenInBackground(e){for(let t of e)try{await this.open(t,void 0,{background:!0})}catch{w.warn(`Failed to restore sprinkle`,{name:t})}}async restoreFromLegacyStorage(e){try{await this.reopenInBackground(JSON.parse(e))}finally{try{localStorage.removeItem(E)}catch{}}}async autoOpenFirstRun(){let e=this.autoOpenBehavior===`attention`,t=this.loadAutoOpenedOnce(),n=new Set;for(let r of this.availableSprinkles.values())if(r.autoOpen&&!t.has(r.name))try{await this.open(r.name,void 0,{attention:e}),n.add(r.name)}catch{w.warn(`Failed to auto-open sprinkle`,{name:r.name})}n.size>0&&this.persistAutoOpenedOnce(n)}async surfaceUnseenSprinkles(){let e=this.loadKnownSprinkles(),t=this.loadAutoOpenedOnce(),n=this.autoOpenBehavior===`attention`,r=new Set;for(let i of this.availableSprinkles.values())if(!e.has(i.name)&&!this.openSprinkles.has(i.name)&&!(i.autoOpen&&t.has(i.name)))try{await this.open(i.name,void 0,{attention:!i.autoOpen||n}),i.autoOpen&&r.add(i.name),w.info(`Surfaced previously-unseen sprinkle`,{name:i.name})}catch{w.warn(`Failed to surface unseen sprinkle`,{name:i.name})}this.persistKnownSprinkles(new Set(this.availableSprinkles.keys())),r.size>0&&this.persistAutoOpenedOnce(r)}loadKnownSprinkles(){return new Set(M())}persistKnownSprinkles(e){try{let t=new Set([...this.loadKnownSprinkles(),...e]);localStorage.setItem(A,JSON.stringify([...t]))}catch{}}loadAutoOpenedOnce(){try{let e=localStorage.getItem(N);if(!e)return new Set;let t=JSON.parse(e);return Array.isArray(t)?new Set(t.filter(e=>typeof e==`string`)):new Set}catch{return new Set}}persistAutoOpenedOnce(e){try{let t=new Set([...this.loadAutoOpenedOnce(),...e]);localStorage.setItem(N,JSON.stringify([...t]))}catch{}}persistOpenSprinkles(){try{let e=[...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e));localStorage.setItem(E,JSON.stringify(e))}catch{}this.schedulePersistOpenSprinklesToUrl()}schedulePersistOpenSprinklesToUrl(){this.urlWriteScheduled||(this.urlWriteScheduled=!0,queueMicrotask(()=>{this.urlWriteScheduled=!1,k([...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e)))}))}async openNewAutoOpenSprinkles(){if(this.inflightRefresh!==null)return this.inflightRefresh;if(!(Date.now()-this.lastRefreshAt<F))return this.inflightRefresh=this.runOpenNewAutoOpenSprinkles().finally(()=>{this.lastRefreshAt=Date.now(),this.inflightRefresh=null}),this.inflightRefresh}async runOpenNewAutoOpenSprinkles(){let e=new Set(this.availableSprinkles.keys());await this.refresh();let t=this.autoOpenBehavior===`attention`,n=this.loadAutoOpenedOnce(),r=new Set,i=!1;for(let a of this.availableSprinkles.values())if(!this.openSprinkles.has(a.name)&&!e.has(a.name)){if(i=!0,a.autoOpen){if(n.has(a.name)){w.info(`Skipped one-shot auto-open for previously-consumed sprinkle`,{name:a.name});continue}try{await this.open(a.name,void 0,{attention:t}),r.add(a.name),w.info(`Auto-opened new sprinkle after install`,{name:a.name,attention:t})}catch{w.warn(`Failed to auto-open new sprinkle`,{name:a.name})}}else try{await this.open(a.name,void 0,{attention:!0}),w.info(`Surfaced newly-installed sprinkle in rail`,{name:a.name})}catch{w.warn(`Failed to surface newly-installed sprinkle`,{name:a.name})}}i&&this.persistKnownSprinkles(new Set(this.availableSprinkles.keys())),r.size>0&&this.persistAutoOpenedOnce(r)}async refresh(){this.availableSprinkles=await g(this.fs),w.info(`Discovered sprinkles`,{count:this.availableSprinkles.size}),this.syncRegisteredIcons(),this.notifyChange()}syncRegisteredIcons(){if(!this.callbacks.registerSprinkle)return;let e=new Set;for(let t of this.availableSprinkles.values())this.inlineSprinkles.has(t.name)||e.add(t.name);for(let t of this.availableSprinkles.values())if(e.has(t.name)&&!this.registeredSprinkles.has(t.name))try{this.callbacks.registerSprinkle(t.name,t.title,{icon:t.icon}),this.registeredSprinkles.add(t.name)}catch(e){w.warn(`registerSprinkle callback threw`,{name:t.name,error:e instanceof Error?e.message:String(e)})}for(let t of[...this.registeredSprinkles])if(!e.has(t)){this.openSprinkles.has(t)&&this.close(t);try{this.callbacks.unregisterSprinkle?.(t)}catch(e){w.warn(`unregisterSprinkle callback threw`,{name:t,error:e instanceof Error?e.message:String(e)})}this.registeredSprinkles.delete(t)}}onChange(e){return this.changeListeners.add(e),()=>{this.changeListeners.delete(e)}}notifyChange(){this.changeNotifyScheduled||(this.changeNotifyScheduled=!0,queueMicrotask(()=>{this.changeNotifyScheduled=!1;for(let e of this.changeListeners)try{e()}catch(e){w.error(`SprinkleManager.onChange handler threw`,{error:e instanceof Error?e.message:String(e)})}}))}open(e,t,n={}){return this.enqueueRendererOperation(e,()=>this.openNow(e,t,n))}async openNow(e,t,n={}){if(this.openSprinkles.has(e)){w.info(`Sprinkle already open`,{name:e});return}let i=this.availableSprinkles.get(e);if(i||=(await this.refresh(),this.availableSprinkles.get(e)),!i)throw Error(`Sprinkle not found: ${e}`);let a=await this.fs.readFile(i.path,{encoding:`utf-8`});if(a==null)throw Error(`Failed to read sprinkle content: ${i.path} (file may be corrupted or missing)`);let s=typeof a==`string`?a:new TextDecoder(`utf-8`).decode(a),c=document.createElement(`div`);c.className=`sprinkle-panel`,c.style.cssText=`width: 100%; height: 100%; display: flex; flex-direction: column; overflow-y: auto;`,c.dataset.sprinkle=e;let l={renderer:null,container:c,lickOriginUnitId:n.lickOriginTarget?this.resolveLickOriginUnitId?.(n.lickOriginTarget):void 0};this.openSprinkles.set(e,l),n.attention?this.attentionOnly.add(e):this.attentionOnly.delete(e),this.callbacks.addSprinkle(e,i.title,c,t,{attention:n.attention,background:n.background,icon:i.icon});let u=this.bridge.createAPI(e,()=>l.lickOriginUnitId),d=new r(c,u);await d.render(s,e);let f=this.openSprinkles.get(e);f?(f.renderer=d,d.activateBridgeLifecycle(),this.openSprinkles.has(e)&&(this.persistOpenSprinkles(),o(e),w.info(`Sprinkle opened`,{name:e,title:i.title}),this.notifyChange())):d.dispose()}markActivated(e){this.attentionOnly.has(e)&&(this.attentionOnly.delete(e),this.persistOpenSprinkles(),w.info(`Sprinkle promoted from attention to user-opened`,{name:e}),this.notifyChange())}async activate(e,t,n={}){let r=this.attentionOnly.has(e),i=this.openSprinkles.get(e);if(r&&i&&n.lickOriginTarget&&(i.lickOriginUnitId=this.resolveLickOriginUnitId?.(n.lickOriginTarget)),r&&this.markActivated(e),!i){try{await this.open(e,t,n)}catch(t){w.warn(`Failed to open sprinkle from rail-icon click`,{name:e,error:t instanceof Error?t.message:String(t)})}return}let a=this.availableSprinkles.get(e);this.callbacks.addSprinkle(e,a?.title??e,i.container,t,{icon:a?.icon})}close(e){let t=this.openSprinkles.get(e);t&&(t.renderer?.dispose(),t.container.remove(),this.bridge.removeSprinkle(e),this.openSprinkles.delete(e),this.attentionOnly.delete(e),this.callbacks.closeSprinkleContent?this.callbacks.closeSprinkleContent(e):this.callbacks.removeSprinkle(e),this.persistOpenSprinkles(),w.info(`Sprinkle closed`,{name:e}),this.notifyChange())}minimize(e){this.openSprinkles.has(e)&&(this.callbacks.minimizeSprinkle(e),w.info(`Sprinkle minimized`,{name:e}))}available(){return Array.from(this.availableSprinkles.values())}opened(){return Array.from(this.openSprinkles.keys())}lickOriginUnitIdOf(e){return this.openSprinkles.get(e)?.lickOriginUnitId}setupWatcher(e){let t=null,n=new Map,r=e=>{let r=!1;for(let t of e){let e=this.findOpenSprinkleByPath(t.path);if(e){let t=n.get(e);t&&clearTimeout(t),n.set(e,setTimeout(()=>{n.delete(e),this.reload(e).catch(t=>{w.warn(`Sprinkle reload on watcher event failed`,{name:e,error:t instanceof Error?t.message:String(t)})})},300))}else r=!0}r&&!t&&(t=setTimeout(()=>{t=null,this.openNewAutoOpenSprinkles().catch(e=>{w.warn(`Sprinkle refresh on watcher event failed`,{error:e instanceof Error?e.message:String(e)})})},150))},i=P.map(t=>e.watch(t,e=>e.endsWith(`.shtml`),r));this.watcherUnsub=()=>{for(let e of i)e();t&&=(clearTimeout(t),null);for(let e of n.values())clearTimeout(e);n.clear()}}findOpenSprinkleByPath(e){for(let[t]of this.openSprinkles){let n=this.availableSprinkles.get(t);if(n&&n.path===e)return t}return null}dispose(){this.watcherUnsub?.()}sendToSprinkle(e,t,n){let r=!n?.runtime||n.runtime===`leader`,i=!n?.runtime||n.runtime!==`leader`,a={leader:!1,followers:[]};if(r){let n=this.openSprinkles.get(e);n?(this.bridge.pushUpdate(e,t),n.renderer.pushUpdate(t),a.leader=!0):w.warn(`Cannot send to closed sprinkle`,{name:e})}if(i&&this.onSendToSprinkle)try{let r=this.onSendToSprinkle(e,t,n);r&&(a.followers=r.followers,r.unknownRuntime&&(a.unknownRuntime=r.unknownRuntime))}catch(t){w.error(`onSendToSprinkle hook threw`,{name:e,error:t instanceof Error?t.message:String(t)})}return a}};export{I as SprinkleManager,j as pruneKnownSprinkleNames,M as readKnownSprinkleNames};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/usb-claim-broker-DO4Ct1vR.js","assets/usb-device-registry-CcuwcT2H.js","assets/rolldown-runtime-COiEfhsA.js","assets/slicc-editor-CdcloiHk.js","assets/preload-helper-BLdHbfdN.js","assets/upgrade-own-properties-DI0JKxGt.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{t as e}from"./preload-helper-BLdHbfdN.js";import{t}from"./permissions-surface-registry-CilCRwhh.js";import{nt as n}from"./wc-shell-
|
|
2
|
+
import{t as e}from"./preload-helper-BLdHbfdN.js";import{t}from"./permissions-surface-registry-CilCRwhh.js";import{nt as n}from"./wc-shell-Cty8D-1f.js";import{n as r,r as i}from"./hid-device-registry-BLGpdMjD.js";import{a,i as o}from"./serial-port-registry-B_XYGslQ.js";import{c as s,d as c,g as l,i as u,l as d,m as f,n as ee,o as te,p,r as ne,t as re,u as ie}from"./hid-operations-DMvq_57V.js";import{a as m,i as h,o as ae,s as oe}from"./usb-device-registry-CcuwcT2H.js";import{a as se,d as ce,f as le,g as ue,h as de,i as fe,l as pe,m as g,n as _,o as v,p as me,r as he,s as ge,u as _e}from"./usb-operations-CU7_oNBB.js";import"./shared-CI2a5OiH.js";import{a as y,n as ve,r as ye}from"./theme-CRtLJexZ.js";function b(){try{let e=globalThis.window??globalThis;return e.self!==e.top}catch{return!0}}var x=new WeakSet;function S(e,t){if(x.has(e)){t?.();return}let n=!1;C(e,t,()=>{n=!0}),setTimeout(()=>{n||e.isConnected&&C(e)},500)}function C(e,t,n){if(x.has(e)){t?.();return}x.add(e);let r=e.style.display;e.style.display=`none`;let i=!1,a=a=>{i||(i=!0,e.style.display=r,x.delete(e),a&&n?.(),t?.())},o=globalThis.requestAnimationFrame;typeof o==`function`&&o(()=>{o(()=>a(!0))}),setTimeout(()=>a(!1),100)}var w=`
|
|
3
3
|
(function() {
|
|
4
4
|
function _focusAllowed() {
|
|
5
5
|
try { return document.hasFocus(); } catch (e) { return false; }
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/panel-rpc-DHIDsklF.js","assets/rolldown-runtime-COiEfhsA.js","assets/panel-rpc-accessor-B4BfPLSo.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{t as e}from"./logger-dqckiMJt.js";import{t}from"./preload-helper-BLdHbfdN.js";import{t as n}from"./quick-llm-
|
|
2
|
+
import{t as e}from"./logger-dqckiMJt.js";import{t}from"./preload-helper-BLdHbfdN.js";import{t as n}from"./quick-llm-DCAllSWQ.js";import{n as r}from"./types-DSxCdZw6.js";import{t as i}from"./approval-decision-BvumWm-U.js";import"./capability-BBHlZjGQ.js";import{t as a}from"./page-approval-service-D7fc1Dli.js";var o=e(`sudo:timeout`);function s(e=`user-timeout`){return{decision:`deny`,reason:e}}function c(e,t={}){let n=t.timeoutMs??3e5;if(!Number.isFinite(n)||n<=0)return e;let i=t.setTimer??((e,t)=>setTimeout(e,t)),a=t.clearTimer??(e=>clearTimeout(e));return{requestApproval(t,c){return new Promise(l=>{let u=new AbortController,d=()=>u.abort();c?.signal?.addEventListener(`abort`,d,{once:!0});let f=!1,p=e=>{f=!0,c?.signal?.removeEventListener(`abort`,d),l(e)},m=i(()=>{f||(o.warn(`sudo approval timed out — failing closed`,{kind:t.kind,detail:t.detail,timeoutMs:n}),u.abort(),p(s(`user-timeout`)))},n),h=e=>{f?o.warn(`sudo decision arrived after timeout — discarded`,{kind:t.kind,detail:t.detail,decision:e.decision}):(a(m),p(e))};e.requestApproval(t,{signal:u.signal}).then(h,e=>{o.warn(`sudo broker threw — denying`,{error:e instanceof Error?e.message:String(e)}),h(r())})})}}}var l=e(`sudo-suggest`),u=`You generalize a single shell command into a minimal glob pattern for an
|
|
3
3
|
allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,
|
|
4
4
|
no backticks. Keep the leading command/sub-command verbatim and replace only
|
|
5
5
|
the volatile tail (args, paths, refs) with a single trailing "*".
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-BNaE-Ejt.js";import{t}from"./logger-Cx6Y120U.js";import{n}from"./jsh-executor-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-BNaE-Ejt.js";import{t}from"./logger-Cx6Y120U.js";import{n}from"./jsh-executor-iplislRW.js";import{h as r}from"./kernel-worker-B2Z-nUYg.js";const i=`/workspace/.jshd`,a=`/workspace/.jshd/log`,o=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function s(e){return o.test(e)&&e!==`log`}function c(e){if(!s(e))throw Error(`invalid unit name '${e}' (use letters, digits, '.', '_' or '-')`)}function l(e){return c(e),`${i}/${e}.json`}function u(e){return c(e),`${a}/${e}.log`}const d=6e4;var f=/* @__PURE__ */ e({appendUnitLog:()=>b,deleteUnitRecord:()=>v,ensureJshdDirs:()=>h,listUnitRecords:()=>y,readUnitLog:()=>x,readUnitRecord:()=>_,writeUnitRecord:()=>g});const p=/* @__PURE__ */ new Set([`always`,`on-failure`,`no`]);function m(e){return typeof e==`string`?e:new TextDecoder().decode(e)}async function h(e){await e.mkdir(i,{recursive:!0}),await e.mkdir(a,{recursive:!0})}async function g(e,t){if(!s(t.name))throw Error(`invalid unit name '${t.name}' (use letters, digits, '.', '_' or '-')`);await h(e),await e.writeFile(l(t.name),`${JSON.stringify(t,null,2)}\n`)}async function _(e,t){if(!s(t))return null;let n=l(t);if(!await e.exists(n))return null;try{let r=S(JSON.parse(m(await e.readFile(n))));return!r||r.name!==t?null:r}catch{return null}}async function v(e,t){if(!s(t))return;let n=l(t);await e.exists(n)&&await e.rm?.(n);let r=u(t);await e.exists(r)&&await e.rm?.(r)}async function y(e){if(!await e.exists(`/workspace/.jshd`))return[];let t=await w(e,i),n=[];for(let r of t){if(!r.endsWith(`.json`))continue;let t=r.slice(0,-5);if(!s(t))continue;let i=await _(e,t);i&&n.push(i)}return n.sort((e,t)=>e.name.localeCompare(t.name)),n}async function b(e,t,n){if(!n||!s(t))return;await h(e);let r=u(t);if(e.appendFile){await e.appendFile(r,n);return}let i=await e.exists(r)?m(await e.readFile(r)):``;await e.writeFile(r,i+n)}async function x(e,t){if(!s(t))return``;let n=u(t);return await e.exists(n)?m(await e.readFile(n)):``}function S(e){if(typeof e!=`object`||!e)return null;let t=e;if(typeof t.name!=`string`||!s(t.name)||!Array.isArray(t.argv)||typeof t.cwd!=`string`||typeof t.createdAt!=`string`||typeof t.enabled!=`boolean`||typeof t.restart!=`string`||!p.has(t.restart))return null;let n=t.argv.filter(e=>typeof e==`string`);return n.length===0?null:{name:t.name,argv:n,cwd:t.cwd,env:C(t.env),restart:t.restart,enabled:t.enabled,createdAt:t.createdAt}}function C(e){let t={};if(typeof e!=`object`||!e||Array.isArray(e))return t;for(let[n,r]of Object.entries(e))typeof r==`string`&&(t[n]=r);return t}async function w(e,t){try{if(e.readdir)return await e.readdir(t);if(e.readDir)return(await e.readDir(t)).map(e=>typeof e==`string`?e:e.name)}catch{return[]}return[]}const T=new class{jobs=/* @__PURE__ */ new Map;upsert(e){this.jobs.set(e.id,{...e,argv:[...e.argv]})}get(e){let t=this.jobs.get(e);return t?{...t,argv:[...t.argv]}:void 0}remove(e){this.jobs.delete(e)}list(){return[...this.jobs.values()].map(e=>({...e,argv:[...e.argv]}))}clear(){this.jobs.clear()}},E=t(`jshd`);var D=class{units=/* @__PURE__ */ new Map;logQueues=/* @__PURE__ */ new Map;deps;constructor(e){this.deps=e}isDurable(){return this.deps.isDurable?.()??typeof Worker<`u`}list(){return[...this.units.values()].map(e=>this.toStatus(e)).sort((e,t)=>e.name.localeCompare(t.name))}status(e){let t=this.units.get(e);return t?this.toStatus(t):null}async start(e){let t=this.units.get(e.name);if(t&&(t.state===`running`||t.state===`starting`))throw Error(`unit '${e.name}' is already ${t.state}`);let n=this.makeLive(e);this.units.set(e.name,n);try{await g(this.deps.fs,e)}catch(t){throw this.units.delete(e.name),t}let r=new Promise((e,t)=>{n.spawnResolve=e,n.spawnReject=t});return n.loop=this.runLoop(n),{pid:await r,durable:this.isDurable()}}async stop(e){let t=this.units.get(e);return t?(t.stopRequested=!0,t.backoffAbort?.abort(),t.pid!==null&&this.deps.processManager.signal(t.pid,`SIGTERM`),t.loop!=null&&await t.loop.catch(()=>void 0),t.state=`stopped`,t.pid=null,this.syncJob(t),await this.flushLogs(e),!0):!1}async restart(e){let t=this.units.get(e)?.record??await _(this.deps.fs,e);return t?(await this.stop(e),this.start(t)):null}async rm(e){await this.stop(e),this.units.delete(e),T.remove(O(e)),await this.flushLogs(e);let{deleteUnitRecord:t}=await Promise.resolve().then(()=>f);return await t(this.deps.fs,e),!0}async setEnabled(e,t){let n=this.units.get(e),r=n?.record??await _(this.deps.fs,e);if(!r)return null;let i={...r,enabled:t};return n&&(n.record=i),await g(this.deps.fs,i),i}dispose(){for(let e of this.units.values())e.stopRequested=!0,e.backoffAbort?.abort(),e.pid!==null&&this.deps.processManager.signal(e.pid,`SIGKILL`);this.units.clear()}makeLive(e){return{record:e,pid:null,state:`starting`,restarts:0,startedAt:null,lastExitCode:null,stopRequested:!1,restartAt:[],spawnResolve:null,spawnReject:null,loop:null,backoffAbort:null}}async runLoop(e){try{for(;!e.stopRequested;){let t=await this.runOnce(e);if(e.lastExitCode=t.exitCode,e.pid=null,e.stopRequested||t.signaled||!this.shouldRestart(e,t.exitCode)){e.state=`stopped`,this.syncJob(e);return}if(this.hitCrashLoop(e)){e.state=`errored`,this.syncJob(e),this.emitCrashLoop(e);return}if(await this.backoff(e),e.stopRequested){e.state=`stopped`,this.syncJob(e);return}e.restarts+=1}e.state=`stopped`,this.syncJob(e)}catch(t){E.warn(`jshd unit loop failed`,{name:e.record.name,error:t instanceof Error?t.message:String(t)}),e.state=`errored`,e.spawnReject?.(t instanceof Error?t:Error(String(t))),this.syncJob(e)}}async runOnce(e){e.state=`starting`,e.startedAt=this.now(),this.syncJob(e);let t=e.record.argv[0],r=e.record.argv.slice(1),i=this.deps.buildContext(e.record),a=await n(t,r,i,this.pmConfig(),{...this.deps.realmFactory?{realmFactory:this.deps.realmFactory}:{},captureOutput:!1,onSpawn:t=>{e.pid=t,e.state=`running`,this.syncJob(e),e.spawnResolve?.(t),e.spawnResolve=null,e.spawnReject=null},onOutput:t=>{this.enqueueLog(e.record.name,t)}});e.pid===null&&(e.spawnReject?.(Error(a.stderr.trim()||`unit '${e.record.name}' failed to start`)),e.spawnResolve=null,e.spawnReject=null);let o=e.pid===null?null:this.deps.processManager.get(e.pid);return{exitCode:a.exitCode,signaled:o?.terminatedBy!=null}}shouldRestart(e,t){return e.record.restart===`no`?!1:e.record.restart===`always`||t!==0}hitCrashLoop(e){let t=this.now();return e.restartAt=e.restartAt.filter(e=>t-e<d),e.restartAt.push(t),e.restartAt.length>=8}async backoff(e){let t=r({attempt:e.restarts,baseMs:1e3,capMs:3e4,maxShift:8}),n=this.deps.sleep??k,i=new AbortController;e.backoffAbort=i;try{await n(t,i.signal)}catch{e.stopRequested=!0}finally{e.backoffAbort=null}}emitCrashLoop(e){let t=e.record.name,n=`jshd unit '${t}' marked errored after ${e.restarts} restarts in ${d/1e3}s`;this.deps.lickManager?.emitEvent({type:`jshd`,jshdName:t,jshdRestarts:e.restarts,resultPath:u(t),preview:n,timestamp:new Date(this.now()).toISOString(),body:{kind:`jshd`,name:t,reason:`crash-loop`,restarts:e.restarts}})}enqueueLog(e,t){let n=(this.logQueues.get(e)??Promise.resolve()).then(()=>this.tee(e,t)).catch(()=>void 0);return this.logQueues.set(e,n),n}async flushLogs(e){let t=this.logQueues.get(e);t&&(await t.catch(()=>void 0),this.logQueues.delete(e))}async tee(e,t){try{await b(this.deps.fs,e,t)}catch(t){E.warn(`failed to tee jshd log`,{name:e,error:t instanceof Error?t.message:String(t)})}}pmConfig(){return{processManager:this.deps.processManager,owner:{kind:`jshd`}}}syncJob(e){T.upsert({id:O(e.record.name),kind:`jshd`,pid:e.pid,argv:e.record.argv,status:e.state,startedAt:e.startedAt??this.now(),restarts:e.restarts})}toStatus(e){let t=this.now();return{name:e.record.name,pid:e.pid,state:e.state,restarts:e.restarts,uptimeMs:e.startedAt!==null&&e.state===`running`?t-e.startedAt:null,enabled:e.record.enabled,restart:e.record.restart,argv:e.record.argv,cwd:e.record.cwd,durable:this.isDurable(),lastExitCode:e.lastExitCode}}now(){return this.deps.now?.()??Date.now()}};function O(e){return`jshd:${e}`}function k(e,t){return e<=0?Promise.resolve():t?.aborted?Promise.reject(A()):new Promise((n,r)=>{let i=setTimeout(()=>{t?.removeEventListener(`abort`,a),n()},e),a=()=>{clearTimeout(i),r(A())};t?.addEventListener(`abort`,a,{once:!0})})}function A(){let e=/* @__PURE__ */ Error(`aborted`);return e.name=`AbortError`,e}let j=null;function M(e){return j||(e?(j=new D(e),j):null)}function N(e){return j||=new D(e),j}export{_ as a,x as i,N as n,f as o,y as r,s,M as t};
|