sliccy 6.130.0 → 6.131.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/node-server/_shared/agent-wire-types.d.ts +54 -0
- package/dist/node-server/_shared/agent-wire-types.d.ts.map +1 -1
- package/dist/node-server/_shared/cdp-target-info.d.ts +19 -0
- package/dist/node-server/_shared/cdp-target-info.d.ts.map +1 -0
- package/dist/node-server/_shared/cdp-target-info.js +9 -0
- package/dist/node-server/_shared/cdp-target-info.js.map +1 -0
- package/dist/node-server/_shared/discovery-link.d.ts +76 -0
- package/dist/node-server/_shared/discovery-link.d.ts.map +1 -0
- package/dist/node-server/_shared/discovery-link.js +76 -0
- package/dist/node-server/_shared/discovery-link.js.map +1 -0
- package/dist/node-server/_shared/extension-bridge-protocol.d.ts +165 -0
- package/dist/node-server/_shared/extension-bridge-protocol.d.ts.map +1 -0
- package/dist/node-server/_shared/extension-bridge-protocol.js +65 -0
- package/dist/node-server/_shared/extension-bridge-protocol.js.map +1 -0
- package/dist/node-server/_shared/handoff-link.d.ts +90 -0
- package/dist/node-server/_shared/handoff-link.d.ts.map +1 -0
- package/dist/node-server/_shared/handoff-link.js +192 -0
- package/dist/node-server/_shared/handoff-link.js.map +1 -0
- package/dist/node-server/_shared/iframe-repaint.d.ts +51 -0
- package/dist/node-server/_shared/iframe-repaint.d.ts.map +1 -0
- package/dist/node-server/_shared/iframe-repaint.js +118 -0
- package/dist/node-server/_shared/iframe-repaint.js.map +1 -0
- package/dist/node-server/_shared/index.d.ts +9 -0
- package/dist/node-server/_shared/index.d.ts.map +1 -1
- package/dist/node-server/_shared/index.js +9 -0
- package/dist/node-server/_shared/index.js.map +1 -1
- package/dist/node-server/_shared/leader-ext-id.d.ts +16 -0
- package/dist/node-server/_shared/leader-ext-id.d.ts.map +1 -0
- package/dist/node-server/_shared/leader-ext-id.js +16 -0
- package/dist/node-server/_shared/leader-ext-id.js.map +1 -0
- package/dist/node-server/_shared/link-header.d.ts +98 -0
- package/dist/node-server/_shared/link-header.d.ts.map +1 -0
- package/dist/node-server/_shared/link-header.js +441 -0
- package/dist/node-server/_shared/link-header.js.map +1 -0
- package/dist/node-server/_shared/proxy-headers.d.ts +46 -0
- package/dist/node-server/_shared/proxy-headers.d.ts.map +1 -0
- package/dist/node-server/_shared/proxy-headers.js +133 -0
- package/dist/node-server/_shared/proxy-headers.js.map +1 -0
- package/dist/node-server/_shared/well-known-probe.d.ts +63 -0
- package/dist/node-server/_shared/well-known-probe.d.ts.map +1 -0
- package/dist/node-server/_shared/well-known-probe.js +104 -0
- package/dist/node-server/_shared/well-known-probe.js.map +1 -0
- package/dist/node-server/electron-controller.d.ts +51 -0
- package/dist/node-server/electron-controller.js +88 -5
- package/dist/ui/.vite/manifest.json +414 -488
- package/dist/ui/assets/CLAUDE-CWMPcWVI.js +34 -0
- package/dist/ui/assets/{CLAUDE-BG8Wfdn_.js → CLAUDE-DM1onrcU.js} +1 -1
- package/dist/ui/assets/SKILL--AFE5RE3.js +1 -0
- package/dist/ui/assets/{SKILL-DT72j81i.js → SKILL-cpVS35My.js} +1 -1
- package/dist/ui/assets/__vite-browser-external-B6A3FtA_.js +1 -0
- package/dist/ui/assets/{account-store-EaBcIxhN.js → account-store-DsMvFZgS.js} +3 -3
- package/dist/ui/assets/account-store-naVgJKHe.js +1 -0
- package/dist/ui/assets/{adobe-B0U_BLCy.js → adobe-BhZB46bT.js} +1 -1
- package/dist/ui/assets/{adobe-DSoEAq_f.js → adobe-sRIQnDEl.js} +2 -2
- package/dist/ui/assets/{agent-bridge-sbs3wiia.js → agent-bridge-DVqU5-sn.js} +1 -1
- package/dist/ui/assets/{agent-message-to-chat-Cnv4uh07.js → agent-message-to-chat-Df4an5Ei.js} +1 -1
- package/dist/ui/assets/{agent-message-to-chat-DW2ZZk9R.js → agent-message-to-chat-xGeYopQz.js} +1 -1
- package/dist/ui/assets/api-endpoint-DGxXvrur.js +1 -0
- package/dist/ui/assets/api-endpoint-Lx_FU5cP.js +1 -0
- package/dist/ui/assets/{apply-layout-DvwSioYn.js → apply-layout-dNkV0TEv.js} +1 -1
- package/dist/ui/assets/{apps-DFIoDcds.js → apps-tzFQ7_KO.js} +1 -1
- package/dist/ui/assets/{auto-mount-table-CEBCZFRF.js → auto-mount-table-0jMTi9rV.js} +1 -1
- package/dist/ui/assets/{azure-openai-C_J_i_Uv.js → azure-openai-B9ZeZZ0T.js} +1 -1
- package/dist/ui/assets/{azure-openai-DUJebq5R.js → azure-openai-DsmgiFlX.js} +1 -1
- package/dist/ui/assets/{backend-hostfs-t651gkrP.js → backend-hostfs-BH8uwRZG.js} +1 -1
- package/dist/ui/assets/{backend-hostfs-BQYf7TAS.js → backend-hostfs-BxfjZHzO.js} +1 -1
- package/dist/ui/assets/bridge-protocol-06nbmp2X.js +1 -0
- package/dist/ui/assets/bridge-protocol-DdqxTTSu.js +1 -0
- package/dist/ui/assets/{bsh-watchdog-D97yX3sQ.js → bsh-watchdog-CxyhQHy5.js} +1 -1
- package/dist/ui/assets/{capability-Btlr4Wc-.js → capability-Bxl0SE1s.js} +2 -2
- package/dist/ui/assets/{cdp-DHIp_AO9.js → cdp-CmXwwigc.js} +1 -1
- package/dist/ui/assets/{cerebras-4vCJGBUt.js → cerebras-CsdnfQnc.js} +1 -1
- package/dist/ui/assets/{cerebras-CBjabVSb.js → cerebras-Mux-1Uqj.js} +1 -1
- package/dist/ui/assets/{client-CjV_9a9h.js → client-C6Cmi9c4.js} +1 -1
- package/dist/ui/assets/composer-speech-CElQJ4q_.js +1 -0
- package/dist/ui/assets/{connect-surface-DrBGja7c.js → connect-surface-DgrjdeR5.js} +1 -1
- package/dist/ui/assets/{context-compaction-huebTevb.js → context-compaction-DRymamfD.js} +3 -3
- package/dist/ui/assets/{core-CdPvxBo3.js → core-B8y1Kyh_.js} +2 -2
- package/dist/ui/assets/{derive-C_gfjwp6.js → derive-TWFNEJkb.js} +1 -1
- package/dist/ui/assets/dip-1TiuHkUR.js +233 -0
- package/dist/ui/assets/{directed-approval-cJrhWrrr.js → directed-approval-BDO2wdC5.js} +1 -1
- package/dist/ui/assets/{discovery-preference-DFkmIHQo.js → discovery-preference-B9KlkVuR.js} +1 -1
- package/dist/ui/assets/ensure-speech-assets-DasC7jBA.js +1 -0
- package/dist/ui/assets/{esbuild-wasm-CSKOA492.js → esbuild-wasm-Ew76Vf_V.js} +2 -2
- package/dist/ui/assets/export-provider-CqI0pk50.js +1 -0
- package/dist/ui/assets/export-spool-CuNzzI8a.js +1 -0
- package/dist/ui/assets/{extension-bridge-transport-D3PItLFo.js → extension-bridge-transport-DfRNjx8c.js} +1 -1
- package/dist/ui/assets/extension-media-capture-2FcAdcuB.js +1 -0
- package/dist/ui/assets/extension-ops-owOXVncP.js +1 -0
- package/dist/ui/assets/float-topology-hfgMx1Yq.js +1 -0
- package/dist/ui/assets/{follower-navigate-watcher-B9ZostUJ.js → follower-navigate-watcher-JQ0b_cW8.js} +1 -1
- package/dist/ui/assets/{fs-C9SJY4sJ.js → fs-CBaQR8Xc.js} +2 -2
- package/dist/ui/assets/{fs-n6R6QZv0.js → fs-CDaCMxrL.js} +1 -1
- package/dist/ui/assets/github-B7uOq9Q1.js +1 -0
- package/dist/ui/assets/{github-copilot-COZvaCzG.js → github-copilot-BeWJoZwD.js} +1 -1
- package/dist/ui/assets/{github-copilot-Cai-dPyZ.js → github-copilot-DwKSI23j.js} +1 -1
- package/dist/ui/assets/{github-install-DfhMDFC9.js → github-install-DE7dF6r8.js} +1 -1
- package/dist/ui/assets/{github-D-fdkiMQ.js → github-qhOhjD2Q.js} +2 -2
- package/dist/ui/assets/{github-zip-ZEV5pLGZ.js → github-zip-CuwUOO-U.js} +1 -1
- package/dist/ui/assets/{guest-tool-gate-CG9Yw8Kq.js → guest-tool-gate-BxRAm4CU.js} +1 -1
- package/dist/ui/assets/{hear-D7MO-jTh.js → hear-CNQSuR1y.js} +1 -1
- package/dist/ui/assets/{help-CQHZfeL3.js → help-D66VHlYj.js} +8 -4
- package/dist/ui/assets/hid-picker-sFJ8vzUj.js +1 -0
- package/dist/ui/assets/host-command-29ain4NA.js +1 -0
- package/dist/ui/assets/idle-compaction-B9i1duyd.js +1 -0
- package/dist/ui/assets/idle-compaction-settings-1yyApSsQ.js +1 -0
- package/dist/ui/assets/image-markers-BFDmhPy4.js +1 -0
- package/dist/ui/assets/image-markers-DuyWsic3.js +1 -0
- package/dist/ui/assets/{installer-7BWtTgd6.js → installer-C6TqZaGO.js} +3 -3
- package/dist/ui/assets/{js-realm-worker-CXI-Ngjy.js → js-realm-worker-Bsb6rmK5.js} +4 -4
- package/dist/ui/assets/{jsh-runtime-extensions-Bf9eAUzp.js → jsh-runtime-extensions-Dkujbplu.js} +1 -1
- package/dist/ui/assets/kernel-worker-CkZd8Enf.js +4991 -0
- package/dist/ui/assets/lick-manager-ULemXDKa.js +2 -0
- package/dist/ui/assets/lick-urls-BX4Jyu_T.js +1 -0
- package/dist/ui/assets/{lick-ws-bridge-Jk_oJNDM.js → lick-ws-bridge-Bo5sH7lf.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-ct0HLNad.js → lick-ws-bridge-RFOSPq0w.js} +1 -1
- package/dist/ui/assets/{live-session-snapshot-DnNBHXrk.js → live-session-snapshot-BTnyrQCU.js} +1 -1
- package/dist/ui/assets/{loader-B90Xxi7L.js → loader-Dw-TPPKt.js} +1 -1
- package/dist/ui/assets/{local-llm-Dm5mp8ES.js → local-llm-B-qS5oNT.js} +1 -1
- package/dist/ui/assets/{local-llm-CXD-Qof4.js → local-llm-COCS88AU.js} +1 -1
- package/dist/ui/assets/{magick-wasm-BEYfJbAX.js → magick-wasm-C7OGcZrJ.js} +2 -2
- package/dist/ui/assets/main-CAXbdHY8.js +22 -0
- package/dist/ui/assets/main-cherry-DSNvH0CD.js +1 -0
- package/dist/ui/assets/{mount-DD8rKTRS.js → mount-BbUBqN71.js} +2 -2
- package/dist/ui/assets/{mount-bridge-client-CUPodVo6.js → mount-bridge-client-BejrWSrL.js} +1 -1
- package/dist/ui/assets/{mount-bridge-client-BrMqFu_x.js → mount-bridge-client-DGJyqEPG.js} +1 -1
- package/dist/ui/assets/{mount-picker-popup-CVvcLs1V.js → mount-picker-popup--ijSfN8u.js} +1 -1
- package/dist/ui/assets/{mount-recovery-D6g3iniZ.js → mount-recovery-OxgGejDC.js} +1 -1
- package/dist/ui/assets/{mount-C1nMn8bL.js → mount-ysOnJBjr.js} +3 -3
- package/dist/ui/assets/navigation-watcher-C8xRyQBd.js +1 -0
- package/dist/ui/assets/new-session-JIL4tJ1I.js +2 -0
- package/dist/ui/assets/oauth-bootstrap-DP5y5Dy8.js +2 -0
- package/dist/ui/assets/oauth-service-Bconf2Pz.js +1 -0
- package/dist/ui/assets/oauth-service-t2taQm3p.js +1 -0
- package/dist/ui/assets/{openai-codex-BveJezys.js → openai-codex-BZDYkVh6.js} +1 -1
- package/dist/ui/assets/{openai-codex-WPOtL2Mf.js → openai-codex-DlFMWNVB.js} +1 -1
- package/dist/ui/assets/{openrouter-98Q9mrw8.js → openrouter-BrS9XpJS.js} +1 -1
- package/dist/ui/assets/{openrouter-6nEYTdxI.js → openrouter-Dn_iX45f.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-C7w8rKLa.js → openrouter-oauth-CioQlp0x.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-BCNSNHpM.js → openrouter-oauth-D9gZVt7e.js} +1 -1
- package/dist/ui/assets/{page-approval-service-DnWfuBVQ.js → page-approval-service-IZdlRu-_.js} +1 -1
- package/dist/ui/assets/panel-rpc-handlers-DUN0E_f8.js +2 -0
- package/dist/ui/assets/{panelize-shell-C7Ptpa69.js → panelize-shell-KNX1XTnq.js} +1 -1
- package/dist/ui/assets/picker-popup-sQtXmfAo.js +1 -0
- package/dist/ui/assets/{port-bridge-client-wFmUGeZa.js → port-bridge-client-C1tBBqwu.js} +1 -1
- package/dist/ui/assets/{port-bridge-client-BTnhFM03.js → port-bridge-client-CN1cFP4D.js} +1 -1
- package/dist/ui/assets/preview-url-r19H6zH1.js +1 -0
- package/dist/ui/assets/{provider-1nSAXh4b.js → provider-BfGyOQHs.js} +2 -2
- package/dist/ui/assets/{provider-RrpO6cEr.js → provider-DnIZJQjl.js} +1 -1
- package/dist/ui/assets/provider-settings-C6uIHjd4.js +1 -0
- package/dist/ui/assets/provider-settings-DrWv51sQ.js +2 -0
- package/dist/ui/assets/{provider-store-access-kKnmyJjr.js → provider-store-access-BqErJhmB.js} +2 -2
- package/dist/ui/assets/provider-store-access-BuQzycZu.js +1 -0
- package/dist/ui/assets/{providers-CvD7PECK.js → providers-CF2FF0H2.js} +1 -1
- package/dist/ui/assets/providers-CqZKx9qW.js +2 -0
- package/dist/ui/assets/proxied-fetch-CiijUcSt.js +2 -0
- package/dist/ui/assets/proxied-fetch-DUC7X0GS.js +1 -0
- package/dist/ui/assets/{py-realm-worker-DGFMfg27.js → py-realm-worker-BYQkpReo.js} +2 -2
- package/dist/ui/assets/{pyodide-BDRAQKP6.js → pyodide-BwD0AtZB.js} +2 -2
- package/dist/ui/assets/{quick-llm-I3oLGgvo.js → quick-llm-B9NubAhJ.js} +1 -1
- package/dist/ui/assets/{recovery-screen-CBwlz3Qo.js → recovery-screen-cHPORxsj.js} +1 -1
- package/dist/ui/assets/{redirect-uri-DZXyVwvI.js → redirect-uri-BKkf61lT.js} +1 -1
- package/dist/ui/assets/{remote-terminal-view-Db-9V2n9.js → remote-terminal-view-BHs39pzZ.js} +1 -1
- package/dist/ui/assets/request-body-DWn6QJ_H.js +1 -0
- package/dist/ui/assets/rest-ops-CLpS_ilI.js +1 -0
- package/dist/ui/assets/rest-ops-D2ig8qfG.js +1 -0
- package/dist/ui/assets/{run-BBAgk3Ml.js → run-03JeZZol.js} +1 -1
- package/dist/ui/assets/{run-COi81T_1.js → run-B5YOTTPD.js} +1 -1
- package/dist/ui/assets/run-BOu4zIOZ.js +29 -0
- package/dist/ui/assets/{run-DZMSwK6o.js → run-CUXVFhoI.js} +1 -1
- package/dist/ui/assets/run-D5Va_gO8.js +81 -0
- package/dist/ui/assets/{run-DCeEfqcT.js → run-DZh-18uA.js} +3 -3
- package/dist/ui/assets/{secret-env-Cp2Eduxg.js → secret-env-CtpVPUh5.js} +1 -1
- package/dist/ui/assets/secret-topology-Yt0aO4Gz.js +1 -0
- package/dist/ui/assets/{secrets-bridge-client-CHMeCH4_.js → secrets-bridge-client-BVl0YuB2.js} +1 -1
- package/dist/ui/assets/{secrets-bridge-client-CNOtgwnq.js → secrets-bridge-client-C3MaYf_O.js} +1 -1
- package/dist/ui/assets/serial-picker-BQF_Eitc.js +1 -0
- package/dist/ui/assets/{session-freezer-DVh0_BPO.js → session-freezer-Bltt6zUt.js} +3 -3
- package/dist/ui/assets/{setup-feature-flags-remote-DBcwYFl-.js → setup-feature-flags-remote-BkP-HRZt.js} +1 -1
- package/dist/ui/assets/setup-standalone-prelude-C2tPUGcI.js +2 -0
- package/dist/ui/assets/setup-sudo-BSw__xoN.js +2 -0
- package/dist/ui/assets/shared-Djytys1b.js +1 -0
- package/dist/ui/assets/shared-Dq_aaG_m.js +4 -0
- package/dist/ui/assets/silent-renew-backoff-DIMz5UqB.js +1 -0
- package/dist/ui/assets/silent-renew-backoff-SSzHR-oP.js +1 -0
- package/dist/ui/assets/{skills-BEEjU5I5.js → skills-wzno5Tj5.js} +1 -1
- package/dist/ui/assets/slicc-app-url-B9OxaBDe.js +1 -0
- package/dist/ui/assets/slicc-version-HwuyIZfW.js +1 -0
- package/dist/ui/assets/{snapshot-CPjJBR4Z.js → snapshot-Bi6QabWh.js} +1 -1
- package/dist/ui/assets/{snapshot-features-BZbgnon7.js → snapshot-features-BEPdcWF6.js} +3 -3
- package/dist/ui/assets/{speak-Dx2FEQBZ.js → speak-BxNdNjKi.js} +1 -1
- package/dist/ui/assets/{sprinkle-bridge-BVfyHi8X.js → sprinkle-bridge-BNzhEsPj.js} +1 -1
- package/dist/ui/assets/{sprinkle-manager-Dxc8U2h1.js → sprinkle-manager-CflRWcbq.js} +1 -1
- package/dist/ui/assets/{sprinkle-renderer-1C1DNVyK.js → sprinkle-renderer-BnSqYzuY.js} +1 -1
- package/dist/ui/assets/{src-kInvzkEg.js → src-Bex_z_yH.js} +583 -148
- package/dist/ui/assets/state-DIwkpIaB.js +42 -0
- package/dist/ui/assets/{store-BHLq6CyB.js → store-CFx1fIZL.js} +1 -1
- package/dist/ui/assets/{store-Dd0aJqlJ.js → store-i7XHN1Er.js} +1 -1
- package/dist/ui/assets/{sudo-DBeYNsAF.js → sudo-r7OrTMGT.js} +1 -1
- package/dist/ui/assets/sync-dialog-D7Wg49Up.js +1 -0
- package/dist/ui/assets/tab-teleport-PAaKnGkm.js +1 -0
- package/dist/ui/assets/transcript-export-DP-r8eDz.js +1 -0
- package/dist/ui/assets/transformers-env-BmBEKck6.js +1 -0
- package/dist/ui/assets/{tray-leader-DTpZEm3l.js → tray-leader-DabyaEs-.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-BrGJs1g5.js → tray-leave-runtime-VfTj-MHR.js} +1 -1
- package/dist/ui/assets/tray-runtime-config-BQL-GPqt.js +1 -0
- package/dist/ui/assets/tray-runtime-config-C3Ti4Pik.js +1 -0
- package/dist/ui/assets/tray-sidecar-Zx9F34-1.js +2 -0
- package/dist/ui/assets/tray-sync-protocol-jKTx-dCF.js +1 -0
- package/dist/ui/assets/tray-webrtc-uW6sTyIA.js +1 -0
- package/dist/ui/assets/{upgrade-detection-BwiYpjuO.js → upgrade-detection-Cz0eOMYf.js} +1 -1
- package/dist/ui/assets/usb-picker-Cbm0jfjl.js +1 -0
- package/dist/ui/assets/{voice-reply-BGR2cNZ_.js → voice-reply-B43Nr1Xr.js} +1 -1
- package/dist/ui/assets/{wc-attach-BLZapYO1.js → wc-attach-BbT2famN.js} +3 -3
- package/dist/ui/assets/wc-browser-Ctsf5Y23.js +1 -0
- package/dist/ui/assets/{wc-extension-B_OX4AT5.js → wc-extension-CJ6cvLnw.js} +2 -2
- package/dist/ui/assets/{wc-float-label-Ck2cAgp3.js → wc-float-label-CnFnKVLC.js} +1 -1
- package/dist/ui/assets/wc-follower-CkrdiOKN.js +17 -0
- package/dist/ui/assets/wc-follower-oauth-B6m2XpVI.js +5 -0
- package/dist/ui/assets/wc-live-CxoqWHpR.js +8 -0
- package/dist/ui/assets/wc-nav-Bnd_bEYw.js +2 -0
- package/dist/ui/assets/wc-onboarding-FeHr2fj5.js +2 -0
- package/dist/ui/assets/{wc-permissions-iZXqGvtf.js → wc-permissions-CppSymRx.js} +3 -3
- package/dist/ui/assets/wc-permissions-providers-BjqCnuQT.js +2 -0
- package/dist/ui/assets/wc-placeholder-C79lmtig.js +4 -0
- package/dist/ui/assets/wc-settings-DdAeaZhQ.js +59 -0
- package/dist/ui/assets/wc-shell-BP3biEU1.js +125 -0
- package/dist/ui/assets/{wc-shortcut-config--IseG9bJ.js → wc-shortcut-config-CjOJXjsp.js} +2 -2
- package/dist/ui/assets/wc-shortcuts-BDQiHczD.js +41 -0
- package/dist/ui/assets/wc-sprinkles-ChlcnDD2.js +2 -0
- package/dist/ui/assets/wc-transcript-export-DdEuCfi6.js +2 -0
- package/dist/ui/assets/wc-tray-BfoqEbBg.js +5 -0
- package/dist/ui/assets/whisper-session-DW7HkDu2.js +2 -0
- package/dist/ui/assets/{xai-grok-OLNPEXTT.js → xai-grok-3L0LL1R8.js} +1 -1
- package/dist/ui/assets/{xai-grok-C-iHnNxi.js → xai-grok-CKevFY8L.js} +1 -1
- package/dist/ui/index.html +15 -17
- package/dist/ui/llm-proxy-sw.js +1 -1
- package/dist/ui/packages/webapp/index.html +15 -17
- package/package.json +5 -4
- package/dist/ui/assets/CLAUDE-DhkULx_E.js +0 -1
- package/dist/ui/assets/SKILL-DJAvKejL.js +0 -1
- package/dist/ui/assets/__vite-browser-external-B19j3y2v.js +0 -1
- package/dist/ui/assets/account-store-CCqSr710.js +0 -1
- package/dist/ui/assets/api-endpoint-BB41u1PK.js +0 -1
- package/dist/ui/assets/api-endpoint-DRYP1Kfj.js +0 -1
- package/dist/ui/assets/composer-speech-C8OcijP-.js +0 -1
- package/dist/ui/assets/dip-Co-Ga2Ny.js +0 -233
- package/dist/ui/assets/ensure-speech-assets-Csum3_gw.js +0 -1
- package/dist/ui/assets/export-provider-BunpOA08.js +0 -1
- package/dist/ui/assets/export-spool-Bvpvkbul.js +0 -1
- package/dist/ui/assets/extension-media-capture-DiCJSgES.js +0 -1
- package/dist/ui/assets/extension-ops-CsNT8YjX.js +0 -1
- package/dist/ui/assets/float-topology-ey0oewfq.js +0 -1
- package/dist/ui/assets/github-BXAKydA_.js +0 -1
- package/dist/ui/assets/handoff-link-CGs8AaQW.js +0 -1
- package/dist/ui/assets/hid-picker-C4WMZ0dN.js +0 -1
- package/dist/ui/assets/host-command-PnmJLRej.js +0 -1
- package/dist/ui/assets/idle-compaction-CACtwRU_.js +0 -1
- package/dist/ui/assets/idle-compaction-settings-wK6JTbJh.js +0 -1
- package/dist/ui/assets/image-markers-DXh8szCT.js +0 -1
- package/dist/ui/assets/image-markers-Gur55AOh.js +0 -1
- package/dist/ui/assets/kernel-worker-Da1sBAJS.js +0 -4940
- package/dist/ui/assets/lick-manager-DtpJc-rA.js +0 -2
- package/dist/ui/assets/lick-urls-f41PW9LN.js +0 -1
- package/dist/ui/assets/main-BwL0siqZ.js +0 -22
- package/dist/ui/assets/main-cherry-D1l6FfCM.js +0 -1
- package/dist/ui/assets/navigation-watcher-C3S1JDXr.js +0 -1
- package/dist/ui/assets/new-session-DyvxhZfj.js +0 -2
- package/dist/ui/assets/oauth-bootstrap-KB9SK_o_.js +0 -2
- package/dist/ui/assets/oauth-service-CT-Lvflt.js +0 -1
- package/dist/ui/assets/oauth-service-nBlvta_T.js +0 -1
- package/dist/ui/assets/panel-rpc-handlers-BPA7Umeo.js +0 -2
- package/dist/ui/assets/picker-popup-BjCTzsQH.js +0 -1
- package/dist/ui/assets/picker-popup-CFr7T4TJ.js +0 -1
- package/dist/ui/assets/preview-url-BvtKejEp.js +0 -1
- package/dist/ui/assets/provider-settings-CHQp2onM.js +0 -1
- package/dist/ui/assets/provider-settings-Dp2FBrlU.js +0 -2
- package/dist/ui/assets/provider-store-access-8IJH8x4u.js +0 -1
- package/dist/ui/assets/providers-DuO7vxZy.js +0 -2
- package/dist/ui/assets/proxied-fetch-B0SF_J0b.js +0 -1
- package/dist/ui/assets/proxied-fetch-CNztWUVW.js +0 -2
- package/dist/ui/assets/remote-cdp-transport-BZuQZZe1.js +0 -1
- package/dist/ui/assets/request-body-CsruB58l.js +0 -1
- package/dist/ui/assets/rest-ops-31ZkM4IG.js +0 -1
- package/dist/ui/assets/rest-ops-D6OyHX5S.js +0 -1
- package/dist/ui/assets/run-b1PI_1dP.js +0 -81
- package/dist/ui/assets/runtime-env-BFnohVwN.js +0 -1
- package/dist/ui/assets/runtime-env-Dc36nUmg.js +0 -1
- package/dist/ui/assets/runtime-env-NCI8LQob.js +0 -1
- package/dist/ui/assets/runtime-env-a_l4ilH_.js +0 -1
- package/dist/ui/assets/secret-topology-B8MYKYm6.js +0 -1
- package/dist/ui/assets/serial-picker-fzg2DxKj.js +0 -1
- package/dist/ui/assets/setup-standalone-prelude-C2jWAIl4.js +0 -2
- package/dist/ui/assets/setup-sudo-BK3Rz-OI.js +0 -2
- package/dist/ui/assets/shared-BpOmrBY4.js +0 -1
- package/dist/ui/assets/shared-CTdWt5ZU.js +0 -4
- package/dist/ui/assets/silent-renew-backoff-B8p8Ja1t.js +0 -1
- package/dist/ui/assets/silent-renew-backoff-BjF-rXLR.js +0 -1
- package/dist/ui/assets/slicc-app-url-DnN_aesz.js +0 -1
- package/dist/ui/assets/slicc-version-CUqwa07v.js +0 -1
- package/dist/ui/assets/src-DXa5EsFV.js +0 -1
- package/dist/ui/assets/src-XLzS9HFL.js +0 -1
- package/dist/ui/assets/state-C7WiY9TK.js +0 -42
- package/dist/ui/assets/sync-dialog-BZ2j4xTg.js +0 -1
- package/dist/ui/assets/tab-teleport-D1Xeuund.js +0 -1
- package/dist/ui/assets/transformers-env-DnkszgHP.js +0 -1
- package/dist/ui/assets/tray-runtime-config-D9gR_d0I.js +0 -1
- package/dist/ui/assets/tray-runtime-config-DCaFjGSS.js +0 -1
- package/dist/ui/assets/tray-sidecar-CWqVyj-w.js +0 -2
- package/dist/ui/assets/tray-sync-protocol-BNw4_0UD.js +0 -1
- package/dist/ui/assets/tray-sync-protocol-BZ5yhJH9.js +0 -1
- package/dist/ui/assets/tray-webrtc-De2SkVvZ.js +0 -1
- package/dist/ui/assets/usb-picker-B8B4LJT7.js +0 -1
- package/dist/ui/assets/wc-browser-AyZY1PPl.js +0 -1
- package/dist/ui/assets/wc-follower-CYLEd4rs.js +0 -17
- package/dist/ui/assets/wc-follower-oauth-CTgC7D7W.js +0 -5
- package/dist/ui/assets/wc-live-s5MA_zAo.js +0 -8
- package/dist/ui/assets/wc-nav-DHUiLdz3.js +0 -2
- package/dist/ui/assets/wc-onboarding-CX3HBRTZ.js +0 -2
- package/dist/ui/assets/wc-permissions-providers-BzoJwkWd.js +0 -2
- package/dist/ui/assets/wc-placeholder-BPLzZhYP.js +0 -4
- package/dist/ui/assets/wc-settings-tszLzSGm.js +0 -59
- package/dist/ui/assets/wc-shell-BBDMmI8N.js +0 -122
- package/dist/ui/assets/wc-shortcuts-BWBA9QlD.js +0 -11
- package/dist/ui/assets/wc-sprinkles-Cx9Zvx6r.js +0 -2
- package/dist/ui/assets/wc-transcript-export-B6x5VMbH.js +0 -2
- package/dist/ui/assets/wc-tray-DEV2i60z.js +0 -5
- package/dist/ui/assets/whisper-session-i96-W77q.js +0 -2
package/dist/ui/llm-proxy-sw.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";(()=>{var C="https://www.sliccy.ai";var T="bridgeToken",I="bridge",B="X-Bridge-Token";var Ee=new URL(C).hostname,ct={[Ee]:"sliccy.now","sliccy.ai":"sliccy.now","slicc-tray-hub-staging.minivelos.workers.dev":"sliccy.dev","localhost:8787":"localhost:8787"};var Re=["ghp_","gho_","ghu_","ghs_","ghr_","github_pat_","sk-","pk-","xoxb-","xoxp-","xoxa-","xoxs-","AKIA","ABIA","ACCA","ASIA","sk-ant-","Bearer "],ft=[...Re].sort((e,t)=>t.length-e.length);var Me=["canonical-agent-history-unavailable","tool-data-may-be-truncated","model-metadata-unavailable","scoop-history-unavailable","attachment-file-missing","attachment-association-unavailable","complete-snapshot-unavailable"];var Nt=new Set(Me);var Ut=[{category:"jwt",source:String.raw`ey[A-Za-z0-9_-]{4,}\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+`,flags:"g"},{category:"private-key",source:"-----BEGIN [A-Z ]* PRIVATE KEY-----"+String.raw`[\s\S]*?`+"-----END [A-Z ]* PRIVATE KEY-----",flags:"g"},{category:"bearer-token",source:"Bearer [A-Za-z0-9._~+/=!-]+",flags:"gi"},{category:"api-key",source:"(?:sk-(?:live|test|prod|proj)-[A-Za-z0-9]{8,}|sk-ant-[A-Za-z0-9-]{8,}|xoxb-[A-Za-z0-9-]{10,}|xoxp-[A-Za-z0-9-]{10,}|AKIA[A-Z0-9]{16}|ghp_[A-Za-z0-9]{36}|hf_[A-Za-z0-9]{34})",flags:"g"},{category:"password",source:String.raw`\b(?:password|passwd|token|secret|api_key)\s*[=:]\s*\S+`,flags:"gi"}];var Pt=16*1024;var $t=64*1024,Dt=32*1024;var _e="slicc-sync-fs-";function q(e){return _e+e}var H="sync-fs-nonce",V="sync-fs-need-nonce",E="/__slicc/fs-sync/";var R="/__slicc/exec-sync",N="x-slicc-fs-token",S="x-slicc-fs-errno",m="x-slicc-fs",M="x-slicc-fs-no-responder",j="sync-fs-req",Y="sync-fs-ack",W="sync-fs-res",G=25e3,z=2e3,K=12e4,F=6e5,X=2e3;function U(e){if(!e)return{};let t={};for(let[r,n]of Object.entries(e)){let s=r.toLowerCase();s==="cookie"?t["X-Proxy-Cookie"]=n:s==="origin"?t["X-Proxy-Origin"]=n:s==="referer"?t["X-Proxy-Referer"]=n:s.startsWith("proxy-")?t[`X-Proxy-${r}`]=n:t[r]=n}return t}function J(e){let t={};for(let[r,n]of Object.entries(e))r.toLowerCase()==="x-proxy-set-cookie"?t["set-cookie"]=n:t[r]=n;return t}var Ae=new Set([101,103,204,205,304]);function be(e){let t=atob(e),r=new Uint8Array(t.length);for(let n=0;n<t.length;n++)r[n]=t.charCodeAt(n);return r}function Q(e){let t,r,n=new Promise((o,a)=>{t=o,r=a}),s=null,i=new ReadableStream({start(o){s=o}}),u=!1,p=!1,g=()=>{try{s?.close()}catch{}},y=o=>{try{s?.error(o)}catch{}},d=o=>{if(u)return;u=!0;let a=new Headers;for(let[k,x]of Object.entries(J(o.headers)))a.set(k,x);let h=Ae.has(o.status)?null:i;t(new Response(h,{status:o.status,statusText:o.statusText,headers:a}))},l=o=>{p=!0;let a=new Error(o.error);u?y(a):r(a),e.close?.()};return e.onmessage=o=>{let a=o.data;!a||typeof a.type!="string"||p||(a.type==="response-head"?d(a):a.type==="response-chunk"?s?.enqueue(be(a.dataBase64)):a.type==="response-end"?(p=!0,g(),e.close?.()):a.type==="response-error"&&l(a))},e.start?.(),{responsePromise:n}}var ve=new Set([101,103,204,205,304]);function L(e){let t=ve.has(e.status)?null:e.body;return new Response(t,{status:e.status,statusText:e.statusText,headers:e.headers})}var Z="slicc",ee="leader";function te(e){try{let t=new URL(e);return`${t.protocol==="wss:"?"https:":"http:"}//${t.host}`}catch{return null}}var Ce="slicc:bridge-config";function re(e,t){if(e?.apiBaseUrl&&e.token)return{apiBaseUrl:e.apiBaseUrl.replace(/\/+$/,""),token:e.token};if(!t)return null;let r;try{r=new URL(t)}catch{return null}let n=r.searchParams.get(I),s=r.searchParams.get(T);if(!n||!s)return null;let i=te(n);return i?{apiBaseUrl:i.replace(/\/+$/,""),token:s}:null}function ne(e,t){if(e?.apiBaseUrl&&e.token)return re(e,null);for(let r of t){let n=re(null,r);if(n)return n}return null}function se(e,t){return t?`${t.apiBaseUrl}${e}`:e}function oe(e,t){let r,n;try{r=new URL(t),n=new URL(e)}catch{return!1}return n.origin===r.origin&&n.pathname.startsWith("/api/")}function ie(e){return!e||typeof e!="object"?!1:e.type===Ce}var _=class{byClient=new Map;set(t,r){if(t){if(!r.apiBaseUrl||!r.token){this.byClient.delete(t);return}this.byClient.set(t,{apiBaseUrl:r.apiBaseUrl.replace(/\/+$/,""),token:r.token})}}get(t){return t?this.byClient.get(t)??null:null}delete(t){this.byClient.delete(t)}size(){return this.byClient.size}},Te="slicc:extension-delegate-config",ae="slicc:ext-fetch";function ce(e){return!e||typeof e!="object"?!1:e.type===Te}function O(e){if(!e)return null;let t;try{t=new URL(e)}catch{return null}if(t.searchParams.get(Z)!==ee)return null;let r=t.searchParams.get("ext");return r?{extensionId:r}:null}function ue(e,t){if(e?.extensionId)return{extensionId:e.extensionId};for(let r of t){let n=O(r);if(n)return n}return null}var A=class{byClient=new Map;set(t,r){if(t){if(!r.extensionId){this.byClient.delete(t);return}this.byClient.set(t,{extensionId:r.extensionId})}}get(t){return t?this.byClient.get(t)??null:null}delete(t){this.byClient.delete(t)}size(){return this.byClient.size}},Ie=new Set(["image","font","style","video","audio","track","iframe","object","embed"]);function le(e){return Ie.has(e)}function P(e){let t=e;return t?.type==="window"&&t.frameType==="top-level"}function b(e){return P(e)}function v(e){return e.filter(b)}function de(){let e=[];return{notify(){let t=e;e=[];for(let r of t)r()},wait(t){return new Promise(r=>{let n=!1,s=()=>{n||(n=!0,clearTimeout(i),e=e.filter(u=>u!==s),r())},i=setTimeout(s,t);e.push(s)})}}}var $="exec";function fe(e,t){return typeof e!="number"||!Number.isFinite(e)||e<=0?Math.min(t,F):Math.min(e,F)}var Fe=G,Ue=200,Le=1e4,Oe=new Set(["stat","lstat","readdir","exists"]),Pe=new Set(["mkdir","rm"]);function $e(e){return De(e)?fe(e.timeoutMs,K)+X:Fe}function De(e){return e.channel===$}function Be(e){switch(e){case"ENOENT":return 404;case"EACCES":return 403;case"EISDIR":case"ENOTDIR":case"EINVAL":return 400;case"EIO":return 503;default:return 500}}async function qe(e){if(e.method!=="POST")return null;let t;try{let i=await e.arrayBuffer();t=JSON.parse(new TextDecoder().decode(new Uint8Array(i)))}catch{return null}if(!t||typeof t!="object")return null;let r=t,n=r.command;return typeof n=="string"||Array.isArray(n)&&n.every(i=>typeof i=="string")?{token:e.headers.get(N)??"",channel:$,command:n,...Array.isArray(r.args)&&r.args.every(i=>typeof i=="string")?{args:r.args}:{},...typeof r.stdin=="string"?{stdin:r.stdin}:{},...typeof r.timeoutMs=="number"?{timeoutMs:r.timeoutMs}:{}}:null}async function pe(e){let t=new URL(e.url);if(t.pathname===R)return qe(e);if(!t.pathname.startsWith(E))return null;let r=t.pathname.slice(E.length-1),n;try{n=r.split("/").map(decodeURIComponent).join("/")}catch{return null}let s=e.headers.get(N)??"",i=t.searchParams.get("op");if(e.method==="POST"){if(i&&Pe.has(i))return{token:s,op:i,path:n};let u=await e.arrayBuffer();return{token:s,op:"write",path:n,body:new Uint8Array(u)}}return i&&Oe.has(i)?{token:s,op:i,path:n}:{token:s,op:"read",path:n}}function He(e){if(!e.ok){let r=e.errno??"EIO";return new Response(e.message??r,{status:Be(r),headers:{[S]:r,[m]:"1"}})}if(e.kind==="json")return new Response(JSON.stringify(e.json??null),{status:200,headers:{"content-type":"application/json",[m]:"1"}});let t=e.kind==="bytes"?new Uint8Array(e.bytes):new Uint8Array(0);return new Response(t,{status:200,headers:{"content-type":"application/octet-stream",[m]:"1"}})}function ge(e,t,r={}){let n=r.timeoutMs??$e(t),s=r.retryIntervalMs??Ue,i=Math.min(r.noResponderMs??Le,n),u=crypto.randomUUID();return new Promise(p=>{let g=!1,y=!1,d,l,o,a=()=>{for(let c of e)c.removeEventListener("message",k);d&&clearInterval(d),l&&clearTimeout(l),o&&clearTimeout(o)},h=c=>{y||(y=!0,a(),p(c))},k=c=>{let f=c.data;if(!(!f||f.id!==u)){if(f.type===Y){g=!0,d&&clearInterval(d),o&&clearTimeout(o);return}f.type===W&&h(He(f))}};for(let c of e)c.addEventListener("message",k);let x=()=>{for(let c of e)c.postMessage({type:j,id:u,...t})};x(),d=setInterval(()=>{g||x()},s),o=setTimeout(()=>{g||h(new Response("sync-fs bridge: no responder",{status:503,headers:{[S]:"EIO",[m]:"1",[M]:"1"}}))},i),l=setTimeout(()=>{h(new Response("sync-fs bridge timeout",{status:503,headers:{[S]:"EIO",[m]:"1"}}))},n)})}var Ve="/api/fetch-proxy",w="x-bypass-llm-proxy",Se=new _,ke=new A,je=32*1024*1024;self.importScripts("/preview-sw.js");self.addEventListener("install",e=>{e.waitUntil(self.skipWaiting())});self.addEventListener("activate",e=>{e.waitUntil(self.clients.claim())});self.addEventListener("message",e=>{let t=e.source;if(!t||!("id"in t)||typeof t.id!="string")return;if(ie(e.data)&&b(t)){Se.set(t.id,{apiBaseUrl:e.data.apiBaseUrl,token:e.data.token});return}if(ce(e.data)&&b(t)){ke.set(t.id,{extensionId:e.data.extensionId});return}let r=e.data;if(r?.type===H&&typeof r.nonce=="string"){P(t)&&Ye(r.nonce);return}});self.addEventListener("fetch",e=>{let t=e.request;if(t.headers.get(w)==="1"||le(t.destination))return;let r;try{r=new URL(t.url)}catch{return}r.origin!==self.location.origin&&(r.protocol!=="http:"&&r.protocol!=="https:"||e.respondWith(We(t,e.clientId||null)))});var D=new Map,xe=de();function me(){return[...D.values()]}function Ye(e){D.has(e)||(D.set(e,new BroadcastChannel(q(e))),xe.notify())}async function ye(){let e=await self.clients.matchAll({type:"window"}),t={type:V};for(let r of e)r.postMessage(t)}self.addEventListener("fetch",e=>{let t=new URL(e.request.url);t.origin===self.location.origin&&(!t.pathname.startsWith(E)&&t.pathname!==R||e.respondWith((async()=>{let r=await pe(e.request);if(!r)return new Response("sync bridge: malformed request",{status:400,headers:{[S]:"EINVAL",[m]:"1"}});let n=me();if(n.length===0&&(ye(),await xe.wait(z),n=me(),n.length===0))return new Response("sync-fs bridge not ready",{status:503,headers:{[S]:"EIO",[m]:"1"}});let s=await ge(n,r);return s.headers.get(M)==="1"&&ye(),s})()))});async function We(e,t){let r=e.url,n={};e.headers.forEach((c,f)=>{f.toLowerCase()!==w&&(n[f]=c)});let s=U(n),i=new Headers;for(let[c,f]of Object.entries(s))i.set(c,f);i.set("X-Target-URL",r);let u=Se.get(t),p=ke.get(t),g=await Ge(t),y=u||p?[]:await ze(),d=[g,...y],l=ue(p,d);if(l){let c=await Ke();if(c)return Je(e,l,c,r)}let o=ne(u,d);if(o&&oe(e.url,o.apiBaseUrl)){let c=new Headers(e.headers);c.set(w,"1");let f={method:e.method,headers:c,cache:"no-store",credentials:e.credentials,redirect:"manual",signal:e.signal,body:await he(e)};return L(await fetch(e.url,f))}o&&i.set(B,o.token);let a=se(Ve,o),h=await he(e),k={method:e.method,headers:i,cache:"no-store",credentials:"omit",redirect:"manual",signal:e.signal,body:h},x=await fetch(a,k);return L(x)}async function he(e){if(e.method==="GET"||e.method==="HEAD")return;let t=await e.arrayBuffer();return t.byteLength>0?t:void 0}async function Ge(e){if(!e)return null;try{let t=await self.clients.get(e);return v(t?[t]:[])[0]?.url??null}catch{return null}}async function ze(){try{let e=await self.clients.matchAll({type:"window",includeUncontrolled:!0});return v(e).map(t=>t.url).filter(t=>!!t)}catch{return[]}}async function Ke(){try{let e=v(await self.clients.matchAll({type:"window",includeUncontrolled:!0}));return e.length===0?null:e.find(r=>O(r.url)!==null)??e[0]}catch{return null}}function Xe(e){let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return btoa(t)}async function Je(e,t,r,n){let s={};e.headers.forEach((l,o)=>{o.toLowerCase()!==w&&(s[o]=l)});let i=U(s),u,p=!1;if(e.method!=="GET"&&e.method!=="HEAD"){let l=await e.arrayBuffer();l.byteLength>je?p=!0:l.byteLength>0&&(u=Xe(new Uint8Array(l)))}let g=new MessageChannel,{responsePromise:y}=Q(g.port1),d={type:ae,requestId:Qe(),extensionId:t.extensionId,request:{url:n,method:e.method,headers:i,bodyBase64:u,requestBodyTooLarge:p}};return r.postMessage(d,[g.port2]),y}function Qe(){let e=globalThis.crypto;return e&&typeof e.randomUUID=="function"?e.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`}})();
|
|
1
|
+
"use strict";(()=>{var T="bridgeToken",A="bridge",B="X-Bridge-Token";function h(e){if(!e)return{};let t={};for(let[s,r]of Object.entries(e)){let n=s.toLowerCase();n==="cookie"?t["X-Proxy-Cookie"]=r:n==="origin"?t["X-Proxy-Origin"]=r:n==="referer"?t["X-Proxy-Referer"]=r:n.startsWith("proxy-")?t[`X-Proxy-${s}`]=r:t[s]=r}return t}function I(e){let t={};for(let[s,r]of Object.entries(e))s.toLowerCase()==="x-proxy-set-cookie"?t["set-cookie"]=r:t[s]=r;return t}var Re="slicc-sync-fs-";function V(e){return Re+e}var Y="sync-fs-nonce",H="sync-fs-need-nonce",x="/__slicc/fs-sync/";var k="/__slicc/exec-sync",N="x-slicc-fs-token",E="x-slicc-fs-errno",y="x-slicc-fs",v="x-slicc-fs-no-responder",W="sync-fs-req",G="sync-fs-ack",j="sync-fs-res",X=25e3,J=2e3,z=12e4,U=6e5,Q=2e3;var he=new Set([101,103,204,205,304]);function ke(e){let t=atob(e),s=new Uint8Array(t.length);for(let r=0;r<t.length;r++)s[r]=t.charCodeAt(r);return s}function $(e){let t,s,r=new Promise((o,a)=>{t=o,s=a}),n=null,i=new ReadableStream({start(o){n=o}}),l=!1,d=!1,f=()=>{try{n?.close()}catch{}},m=o=>{try{n?.error(o)}catch{}},u=o=>{if(l)return;l=!0;let a=new Headers;for(let[M,R]of Object.entries(I(o.headers)))a.set(M,R);let S=he.has(o.status)?null:i;t(new Response(S,{status:o.status,statusText:o.statusText,headers:a}))},p=o=>{d=!0;let a=new Error(o.error);l?m(a):s(a),e.close?.()};return e.onmessage=o=>{let a=o.data;!a||typeof a.type!="string"||d||(a.type==="response-head"?u(a):a.type==="response-chunk"?n?.enqueue(ke(a.dataBase64)):a.type==="response-end"?(d=!0,f(),e.close?.()):a.type==="response-error"&&p(a))},e.start?.(),{responsePromise:r}}var ve=new Set([101,103,204,205,304]);function q(e){let t=ve.has(e.status)?null:e.body;return new Response(t,{status:e.status,statusText:e.statusText,headers:e.headers})}var K="slicc",Z="leader";function ee(e){try{let t=new URL(e);return`${t.protocol==="wss:"?"https:":"http:"}//${t.host}`}catch{return null}}var we="slicc:bridge-config";function te(e,t){if(e?.apiBaseUrl&&e.token)return{apiBaseUrl:e.apiBaseUrl.replace(/\/+$/,""),token:e.token};if(!t)return null;let s;try{s=new URL(t)}catch{return null}let r=s.searchParams.get(A),n=s.searchParams.get(T);if(!r||!n)return null;let i=ee(r);return i?{apiBaseUrl:i.replace(/\/+$/,""),token:n}:null}function se(e,t){if(e?.apiBaseUrl&&e.token)return te(e,null);for(let s of t){let r=te(null,s);if(r)return r}return null}function re(e,t){return t?`${t.apiBaseUrl}${e}`:e}function ne(e,t){let s,r;try{s=new URL(t),r=new URL(e)}catch{return!1}return r.origin===s.origin&&r.pathname.startsWith("/api/")}function oe(e){return!e||typeof e!="object"?!1:e.type===we}var _=class{byClient=new Map;set(t,s){if(t){if(!s.apiBaseUrl||!s.token){this.byClient.delete(t);return}this.byClient.set(t,{apiBaseUrl:s.apiBaseUrl.replace(/\/+$/,""),token:s.token})}}get(t){return t?this.byClient.get(t)??null:null}delete(t){this.byClient.delete(t)}size(){return this.byClient.size}},Ce="slicc:extension-delegate-config",ie="slicc:ext-fetch";function ae(e){return!e||typeof e!="object"?!1:e.type===Ce}function L(e){if(!e)return null;let t;try{t=new URL(e)}catch{return null}if(t.searchParams.get(K)!==Z)return null;let s=t.searchParams.get("ext");return s?{extensionId:s}:null}function ce(e,t){if(e?.extensionId)return{extensionId:e.extensionId};for(let s of t){let r=L(s);if(r)return r}return null}var w=class{byClient=new Map;set(t,s){if(t){if(!s.extensionId){this.byClient.delete(t);return}this.byClient.set(t,{extensionId:s.extensionId})}}get(t){return t?this.byClient.get(t)??null:null}delete(t){this.byClient.delete(t)}size(){return this.byClient.size}},be=new Set(["image","font","style","video","audio","track","iframe","object","embed"]);function le(e){return be.has(e)}function D(e){let t=e;return t?.type==="window"&&t.frameType==="top-level"}function C(e){return D(e)}function b(e){return e.filter(C)}function pe(){let e=[];return{notify(){let t=e;e=[];for(let s of t)s()},wait(t){return new Promise(s=>{let r=!1,n=()=>{r||(r=!0,clearTimeout(i),e=e.filter(l=>l!==n),s())},i=setTimeout(n,t);e.push(n)})}}}var P="exec";function ue(e,t){return typeof e!="number"||!Number.isFinite(e)||e<=0?Math.min(t,U):Math.min(e,U)}var Te=X,Ae=200,Ie=1e4,Ne=new Set(["stat","lstat","readdir","exists"]),Ue=new Set(["mkdir","rm"]);function qe(e){return Le(e)?ue(e.timeoutMs,z)+Q:Te}function Le(e){return e.channel===P}function De(e){switch(e){case"ENOENT":return 404;case"EACCES":return 403;case"EISDIR":case"ENOTDIR":case"EINVAL":return 400;case"EIO":return 503;default:return 500}}async function Pe(e){if(e.method!=="POST")return null;let t;try{let i=await e.arrayBuffer();t=JSON.parse(new TextDecoder().decode(new Uint8Array(i)))}catch{return null}if(!t||typeof t!="object")return null;let s=t,r=s.command;return typeof r=="string"||Array.isArray(r)&&r.every(i=>typeof i=="string")?{token:e.headers.get(N)??"",channel:P,command:r,...Array.isArray(s.args)&&s.args.every(i=>typeof i=="string")?{args:s.args}:{},...typeof s.stdin=="string"?{stdin:s.stdin}:{},...typeof s.timeoutMs=="number"?{timeoutMs:s.timeoutMs}:{}}:null}async function ge(e){let t=new URL(e.url);if(t.pathname===k)return Pe(e);if(!t.pathname.startsWith(x))return null;let s=t.pathname.slice(x.length-1),r;try{r=s.split("/").map(decodeURIComponent).join("/")}catch{return null}let n=e.headers.get(N)??"",i=t.searchParams.get("op");if(e.method==="POST"){if(i&&Ue.has(i))return{token:n,op:i,path:r};let l=await e.arrayBuffer();return{token:n,op:"write",path:r,body:new Uint8Array(l)}}return i&&Ne.has(i)?{token:n,op:i,path:r}:{token:n,op:"read",path:r}}function Oe(e){if(!e.ok){let s=e.errno??"EIO";return new Response(e.message??s,{status:De(s),headers:{[E]:s,[y]:"1"}})}if(e.kind==="json")return new Response(JSON.stringify(e.json??null),{status:200,headers:{"content-type":"application/json",[y]:"1"}});let t=e.kind==="bytes"?new Uint8Array(e.bytes):new Uint8Array(0);return new Response(t,{status:200,headers:{"content-type":"application/octet-stream",[y]:"1"}})}function de(e,t,s={}){let r=s.timeoutMs??qe(t),n=s.retryIntervalMs??Ae,i=Math.min(s.noResponderMs??Ie,r),l=crypto.randomUUID();return new Promise(d=>{let f=!1,m=!1,u,p,o,a=()=>{for(let c of e)c.removeEventListener("message",M);u&&clearInterval(u),p&&clearTimeout(p),o&&clearTimeout(o)},S=c=>{m||(m=!0,a(),d(c))},M=c=>{let g=c.data;if(!(!g||g.id!==l)){if(g.type===G){f=!0,u&&clearInterval(u),o&&clearTimeout(o);return}g.type===j&&S(Oe(g))}};for(let c of e)c.addEventListener("message",M);let R=()=>{for(let c of e)c.postMessage({type:W,id:l,...t})};R(),u=setInterval(()=>{f||R()},n),o=setTimeout(()=>{f||S(new Response("sync-fs bridge: no responder",{status:503,headers:{[E]:"EIO",[y]:"1",[v]:"1"}}))},i),p=setTimeout(()=>{S(new Response("sync-fs bridge timeout",{status:503,headers:{[E]:"EIO",[y]:"1"}}))},r)})}var Be="/api/fetch-proxy",F="x-bypass-llm-proxy",Se=new _,Ee=new w,Ve=32*1024*1024;self.importScripts("/preview-sw.js");self.addEventListener("install",e=>{e.waitUntil(self.skipWaiting())});self.addEventListener("activate",e=>{e.waitUntil(self.clients.claim())});self.addEventListener("message",e=>{let t=e.source;if(!t||!("id"in t)||typeof t.id!="string")return;if(oe(e.data)&&C(t)){Se.set(t.id,{apiBaseUrl:e.data.apiBaseUrl,token:e.data.token});return}if(ae(e.data)&&C(t)){Ee.set(t.id,{extensionId:e.data.extensionId});return}let s=e.data;if(s?.type===Y&&typeof s.nonce=="string"){D(t)&&Ye(s.nonce);return}});self.addEventListener("fetch",e=>{let t=e.request;if(t.headers.get(F)==="1"||le(t.destination))return;let s;try{s=new URL(t.url)}catch{return}s.origin!==self.location.origin&&(s.protocol!=="http:"&&s.protocol!=="https:"||e.respondWith(He(t,e.clientId||null)))});var O=new Map,Me=pe();function fe(){return[...O.values()]}function Ye(e){O.has(e)||(O.set(e,new BroadcastChannel(V(e))),Me.notify())}async function ye(){let e=await self.clients.matchAll({type:"window"}),t={type:H};for(let s of e)s.postMessage(t)}self.addEventListener("fetch",e=>{let t=new URL(e.request.url);t.origin===self.location.origin&&(!t.pathname.startsWith(x)&&t.pathname!==k||e.respondWith((async()=>{let s=await ge(e.request);if(!s)return new Response("sync bridge: malformed request",{status:400,headers:{[E]:"EINVAL",[y]:"1"}});let r=fe();if(r.length===0&&(ye(),await Me.wait(J),r=fe(),r.length===0))return new Response("sync-fs bridge not ready",{status:503,headers:{[E]:"EIO",[y]:"1"}});let n=await de(r,s);return n.headers.get(v)==="1"&&ye(),n})()))});async function He(e,t){let s=e.url,r={};e.headers.forEach((c,g)=>{g.toLowerCase()!==F&&(r[g]=c)});let n=h(r),i=new Headers;for(let[c,g]of Object.entries(n))i.set(c,g);i.set("X-Target-URL",s);let l=Se.get(t),d=Ee.get(t),f=await We(t),m=l||d?[]:await Ge(),u=[f,...m],p=ce(d,u);if(p){let c=await je();if(c)return Je(e,p,c,s)}let o=se(l,u);if(o&&ne(e.url,o.apiBaseUrl)){let c=new Headers(e.headers);c.set(F,"1");let g={method:e.method,headers:c,cache:"no-store",credentials:e.credentials,redirect:"manual",signal:e.signal,body:await me(e)};return q(await fetch(e.url,g))}o&&i.set(B,o.token);let a=re(Be,o),S=await me(e),M={method:e.method,headers:i,cache:"no-store",credentials:"omit",redirect:"manual",signal:e.signal,body:S},R=await fetch(a,M);return q(R)}async function me(e){if(e.method==="GET"||e.method==="HEAD")return;let t=await e.arrayBuffer();return t.byteLength>0?t:void 0}async function We(e){if(!e)return null;try{let t=await self.clients.get(e);return b(t?[t]:[])[0]?.url??null}catch{return null}}async function Ge(){try{let e=await self.clients.matchAll({type:"window",includeUncontrolled:!0});return b(e).map(t=>t.url).filter(t=>!!t)}catch{return[]}}async function je(){try{let e=b(await self.clients.matchAll({type:"window",includeUncontrolled:!0}));return e.length===0?null:e.find(s=>L(s.url)!==null)??e[0]}catch{return null}}function Xe(e){let t="";for(let s=0;s<e.length;s++)t+=String.fromCharCode(e[s]);return btoa(t)}async function Je(e,t,s,r){let n={};e.headers.forEach((p,o)=>{o.toLowerCase()!==F&&(n[o]=p)});let i=h(n),l,d=!1;if(e.method!=="GET"&&e.method!=="HEAD"){let p=await e.arrayBuffer();p.byteLength>Ve?d=!0:p.byteLength>0&&(l=Xe(new Uint8Array(p)))}let f=new MessageChannel,{responsePromise:m}=$(f.port1),u={type:ie,requestId:ze(),extensionId:t.extensionId,request:{url:r,method:e.method,headers:i,bodyBase64:l,requestBodyTooLarge:d}};return s.postMessage(u,[f.port2]),m}function ze(){let e=globalThis.crypto;return e&&typeof e.randomUUID=="function"?e.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`}})();
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>slicc</title>
|
|
7
7
|
<link rel="icon" type="image/png" href="/logos/sliccy-color-1scoops-32x32.png" />
|
|
8
|
-
<script type="module" crossorigin src="/assets/main-
|
|
8
|
+
<script type="module" crossorigin src="/assets/main-CAXbdHY8.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-P2Xu9kJm.js">
|
|
10
10
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-Dd_uD5pT.js">
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-Czpn1I53.js">
|
|
@@ -17,34 +17,32 @@
|
|
|
17
17
|
<link rel="modulepreload" crossorigin href="/assets/claude-model-version-BJLrDjmH.js">
|
|
18
18
|
<link rel="modulepreload" crossorigin href="/assets/libesm-BypnjKEL.js">
|
|
19
19
|
<link rel="modulepreload" crossorigin href="/assets/logger-DDBAeTLF.js">
|
|
20
|
-
<link rel="modulepreload" crossorigin href="/assets/src-XLzS9HFL.js">
|
|
21
20
|
<link rel="modulepreload" crossorigin href="/assets/base64-DJRlyqZu.js">
|
|
22
21
|
<link rel="modulepreload" crossorigin href="/assets/fetch-body-D2PwksUW.js">
|
|
23
22
|
<link rel="modulepreload" crossorigin href="/assets/runtime-env-Dlaokqg1.js">
|
|
24
|
-
<link rel="modulepreload" crossorigin href="/assets/api-endpoint-
|
|
25
|
-
<link rel="modulepreload" crossorigin href="/assets/proxied-fetch-
|
|
26
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
27
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
28
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
29
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
30
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
31
|
-
<link rel="modulepreload" crossorigin href="/assets/image-markers-DXh8szCT.js">
|
|
23
|
+
<link rel="modulepreload" crossorigin href="/assets/api-endpoint-DGxXvrur.js">
|
|
24
|
+
<link rel="modulepreload" crossorigin href="/assets/proxied-fetch-CiijUcSt.js">
|
|
25
|
+
<link rel="modulepreload" crossorigin href="/assets/float-topology-hfgMx1Yq.js">
|
|
26
|
+
<link rel="modulepreload" crossorigin href="/assets/secret-topology-Yt0aO4Gz.js">
|
|
27
|
+
<link rel="modulepreload" crossorigin href="/assets/port-bridge-client-C1tBBqwu.js">
|
|
28
|
+
<link rel="modulepreload" crossorigin href="/assets/secrets-bridge-client-BVl0YuB2.js">
|
|
29
|
+
<link rel="modulepreload" crossorigin href="/assets/image-markers-BFDmhPy4.js">
|
|
32
30
|
<link rel="modulepreload" crossorigin href="/assets/tool-ui-eSQ1g2I1.js">
|
|
33
|
-
<link rel="modulepreload" crossorigin href="/assets/providers-
|
|
31
|
+
<link rel="modulepreload" crossorigin href="/assets/providers-CqZKx9qW.js">
|
|
34
32
|
<link rel="modulepreload" crossorigin href="/assets/panel-rpc-B3MSVImO.js">
|
|
35
33
|
<link rel="modulepreload" crossorigin href="/assets/bedrock-camp-compat-CgBMwna8.js">
|
|
36
|
-
<link rel="modulepreload" crossorigin href="/assets/account-store-
|
|
34
|
+
<link rel="modulepreload" crossorigin href="/assets/account-store-DsMvFZgS.js">
|
|
35
|
+
<link rel="modulepreload" crossorigin href="/assets/bridge-protocol-06nbmp2X.js">
|
|
37
36
|
<link rel="modulepreload" crossorigin href="/assets/messages-BD4p8GuF.js">
|
|
38
|
-
<link rel="modulepreload" crossorigin href="/assets/tray-runtime-config-
|
|
39
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
40
|
-
<link rel="modulepreload" crossorigin href="/assets/setup-
|
|
41
|
-
<link rel="modulepreload" crossorigin href="/assets/setup-standalone-prelude-C2jWAIl4.js">
|
|
37
|
+
<link rel="modulepreload" crossorigin href="/assets/tray-runtime-config-BQL-GPqt.js">
|
|
38
|
+
<link rel="modulepreload" crossorigin href="/assets/setup-sudo-BSw__xoN.js">
|
|
39
|
+
<link rel="modulepreload" crossorigin href="/assets/setup-standalone-prelude-C2tPUGcI.js">
|
|
42
40
|
<link rel="modulepreload" crossorigin href="/assets/telemetry-MJ77Fp1a.js">
|
|
43
41
|
<link rel="modulepreload" crossorigin href="/assets/feature-flags-DaSRRz0w.js">
|
|
44
42
|
<link rel="modulepreload" crossorigin href="/assets/tray-follower-status-BAjnN7Ar.js">
|
|
45
43
|
<link rel="modulepreload" crossorigin href="/assets/clipboard-eqmn97SP.js">
|
|
46
44
|
<link rel="modulepreload" crossorigin href="/assets/tray-join-url-BIvzbiFR.js">
|
|
47
|
-
<link rel="modulepreload" crossorigin href="/assets/provider-settings-
|
|
45
|
+
<link rel="modulepreload" crossorigin href="/assets/provider-settings-DrWv51sQ.js">
|
|
48
46
|
</head>
|
|
49
47
|
<body>
|
|
50
48
|
<div id="app"></div>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sliccy",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.131.0",
|
|
4
4
|
"description": "Browser-based coding agent with thin CLI server",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -71,14 +71,15 @@
|
|
|
71
71
|
"test:server-integration": "vitest run --config packages/node-server/tests/integration/server/vitest.config.ts",
|
|
72
72
|
"test:e2e": "npx playwright test --config packages/webapp/tests/e2e/playwright.config.ts",
|
|
73
73
|
"start:extension": "npm run build -w @slicc/chrome-extension && npm run dev -- --profile=extension",
|
|
74
|
-
"lint": "biome check --write . && prettier --write . && npm run lint:docs && npm run lint:skills && npm run lint:skill-router && npm run lint:no-innerhtml && npm run lint:no-ui-in-providers && npm run lint:layer-back-edges && npm run lint:record-string-unknown && npm run lint:patches && npm run lint:swift-pins && npm run lint:no-raw-chrome-runtime-id && npm run lint:hosted-origin && npm run lint:swift-deps && npm run lint:ios-ui-tests && npm run lint:duplication",
|
|
75
|
-
"lint:ci": "biome check . && prettier --check . && npm run lint:docs && npm run lint:skills -- --strict && npm run lint:skill-router && npm run lint:no-innerhtml && npm run lint:no-ui-in-providers && npm run lint:layer-back-edges && npm run lint:record-string-unknown && npm run lint:patches && npm run lint:swift-pins && npm run lint:no-raw-chrome-runtime-id && npm run lint:hosted-origin && npm run lint:swift-deps && npm run lint:ios-ui-tests && npm run lint:duplication",
|
|
74
|
+
"lint": "biome check --write . && prettier --write . && npm run lint:docs && npm run lint:skills && npm run lint:skill-router && npm run lint:no-innerhtml && npm run lint:no-ui-in-providers && npm run lint:layer-back-edges && npm run lint:no-float-probes && npm run lint:record-string-unknown && npm run lint:patches && npm run lint:swift-pins && npm run lint:no-raw-chrome-runtime-id && npm run lint:hosted-origin && npm run lint:swift-deps && npm run lint:ios-ui-tests && npm run lint:duplication",
|
|
75
|
+
"lint:ci": "biome check . && prettier --check . && npm run lint:docs && npm run lint:skills -- --strict && npm run lint:skill-router && npm run lint:no-innerhtml && npm run lint:no-ui-in-providers && npm run lint:layer-back-edges && npm run lint:no-float-probes && npm run lint:record-string-unknown && npm run lint:patches && npm run lint:swift-pins && npm run lint:no-raw-chrome-runtime-id && npm run lint:hosted-origin && npm run lint:swift-deps && npm run lint:ios-ui-tests && npm run lint:duplication",
|
|
76
76
|
"lint:docs": "node packages/dev-tools/tools/check-doc-sizes.mjs && node packages/dev-tools/tools/check-agents-symlinks.mjs && node packages/dev-tools/tools/check-doc-refs.mjs",
|
|
77
77
|
"lint:skills": "node packages/dev-tools/tools/lint-skills.mjs",
|
|
78
78
|
"lint:skill-router": "bash packages/dev-tools/tools/check-skill-router-sync.sh",
|
|
79
79
|
"lint:no-innerhtml": "node packages/dev-tools/tools/check-no-innerhtml.mjs",
|
|
80
80
|
"lint:no-ui-in-providers": "node packages/dev-tools/tools/check-no-ui-imports-in-providers.mjs",
|
|
81
81
|
"lint:layer-back-edges": "node packages/dev-tools/tools/check-layer-back-edges.mjs",
|
|
82
|
+
"lint:no-float-probes": "node packages/dev-tools/tools/check-no-float-probes.mjs",
|
|
82
83
|
"lint:record-string-unknown": "node packages/dev-tools/tools/check-record-string-unknown.mjs",
|
|
83
84
|
"lint:patches": "node packages/dev-tools/patch-reconcile/check-patches.mjs",
|
|
84
85
|
"lint:swift-pins": "node packages/dev-tools/swift-pin-reconcile/check-swift-pins.mjs",
|
|
@@ -118,7 +119,7 @@
|
|
|
118
119
|
"@semantic-release/exec": "7.1.0",
|
|
119
120
|
"@semantic-release/git": "11.0.1",
|
|
120
121
|
"@size-limit/file": "13.0.3",
|
|
121
|
-
"@tessl/cli": "0.
|
|
122
|
+
"@tessl/cli": "0.102.0",
|
|
122
123
|
"@types/node": "24.13.3",
|
|
123
124
|
"@vitest/browser": "4.1.11",
|
|
124
125
|
"@vitest/browser-playwright": "4.1.11",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e='# sliccy\n\nAI agent in SLICC, a browser-native runtime: code, automate, browse, orchestrate parallel agents.\n\n## Vocabulary\n\n- **Cone**: You. Orchestrate scoops, talk to the human, full FS access.\n- **Scoops**: Isolated sub-agents (`scoop_scoop`, `feed_scoop`, `drop_scoop`, `agent` one-shot).\n- **Sprinkles**: Persistent UI panels (`.shtml`), owned by a long-lived scoop.\n- **Dips**: Inline `shtml` chat widgets; ephemeral, lick-only.\n- **Licks**: Events routed to scoops (below).\n- **Trays**: Remote runtimes. `host` lists; `--runtime=<id>` targets.\n\n## Explore first\n\n100+ commands. When unsure: `commands`, `<cmd> --help`, `man <topic>`, `skill list`.\n\n**Never say "I can\'t" without checking.** If stuck: `upskill search "<query>"`; `upskill tabs` for tab skills.\n\n## SLICC-native commands\n\nOften missed:\n\n- `oauth-token`, `mcp add`, `webhook`, `crontask`, `agent`, `serve`, `ffmpeg`, `hf`, `usb`/`serial`/`hid`/`esptool`, `workflow`\n\n## Principles\n\n- **Scoops do the heavy lifting. The cone orchestrates and synthesizes.** See `man delegation`.\n- When something fails, try another approach.\n- New capabilities = skills, not features. Author: `/workspace/skills/skill-authoring/SKILL.md`.\n\n## Sprinkles\n\nOne scoop per sprinkle, named identically. Cone MUST NOT write `.shtml`/run `sprinkle` — delegate via `feed_scoop`. See `man sprinkle`.\n\n## Dips and media\n\n`` renders inline: images, video (mp4/webm/mov), audio (mp3/wav/ogg), 2+ per paragraph = gallery. Absolute paths only; beats `open`, a tab per file. Raw HTML renders too (sanitized; VFS paths resolve) when you need layout — but a ```html fence only shows source.\n\nInteractive → a dip: sandboxed inline `shtml`, cone-written (buttons emit `slicc.lick(...)`). Persistent UI → Sprinkles. Authoring: `/workspace/skills/dips/SKILL.md`.\n\n## Licks\n\nEvents arrive as `[<Event>: <name>]` with JSON body. **Navigate** (handoff): `man handoff`. **Discovery** (`[Discovery Event: <url>]`): origin advertises agentic resources (ai-catalog.json/llms.txt) — informational; you MAY fetch/act (`mcp add`, read `llms.txt`), never required. **Webhook/Cron/File Watch**: `/workspace/skills/automation/SKILL.md`. **Sprinkle** routes to its scoop. Scoops return on `scoop-notify`/`scoop-idle`/`scoop-wait`.\n\n**Actionable** — `lick_confirm`/`lick_dismiss`. navigate·upskill → `upskill`; session-reload·mount-recovery → re-run `mount`; upgrade → update files; session-reload plain → dismiss-only; navigate·handoff → human-gated.\n\n## Workflows\n\n`workflow run <file.js>` — parallel fan-out, backgrounded; result at `/shared/workflow-runs/<id>.json` (`--wait` blocks). API: `agent(prompt,{schema?,thinking?})`, `parallel`, `pipeline`, `phase`, `log`. Deterministic (`Date`/`Math.random`/`crypto`/timers throw). `workflow status|list|stop|save <id>`.\n\n## Approvals (sudo)\n\n`/etc/sudoers` gates actions; deny → exit 1/`EACCES`. `Cmnd`/`Read`/`Write`/`Export <glob>` (+`NOPASSWD`); "Always" → `sudoers.d/granted`. `sudo <cmd>` requests one. Scoops escalate via `sudo_request` (you resolve; `always` persists).\n\n## Style\n\nProfessional tool, not chatbot. No emoji.\n\n## Memory\n\nPersists across sessions. Add durable user prefs; prune stale. Each scoop has its own `CLAUDE.md`.\n';export{e as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e="---\nname: playwright-cli\ndescription: |\n Use this whenever the user asks to browse, navigate, click, fill a form,\n scrape, take a screenshot, or otherwise interact with a web page. SLICC drives\n the browser through the `playwright-cli` shell command (also aliased as\n `playwright` and `puppeteer`). Read this BEFORE running any browser\n automation: every tab-operating command requires a `--tab` target id, and\n multi-agent tab handling has rules you must follow.\nallowed-tools: bash\n---\n\n# Browser Automation via playwright-cli\n\nUse `playwright-cli` (also aliased as `playwright` and `puppeteer`) via the bash tool for all browser automation.\n\n**Every tab-operating command requires `--tab=<targetId>`.** There is no implicit \"current tab\". Always specify which tab you're operating on.\n\n`playwright-cli <command> --help` prints that command's usage and does nothing else — safe to run before any action.\n\n## Quick Start\n\n```bash\n# 1. Open a page — note the targetId in the output\nplaywright-cli open https://example.com\n# Output: Opened https://example.com in new tab [targetId: E9A3F...]\n\n# 2. Take a snapshot to see the page structure and get element refs\nplaywright-cli snapshot --tab=E9A3F\n\n# 3. Interact using refs from the snapshot (e.g. e5, e12)\nplaywright-cli click --tab=E9A3F e5\nplaywright-cli fill --tab=E9A3F e12 \"hello world\"\n\n# 4. Re-snapshot after interactions (refs change)\nplaywright-cli snapshot --tab=E9A3F\n```\n\n## Tab IDs\n\n- `tab-list` shows all tabs with their targetIds. The user's active tab is marked `(active)`.\n- `tab-new` / `open` return the new tab's targetId — capture it for subsequent commands.\n- Use `--tab=<targetId>` on ALL commands that operate on a tab.\n\n## Frame IDs\n\n- `frames --tab=<targetId>` lists frame IDs. A frame ID is not a tab target ID; never pass it to `--tab`.\n- Use `--tab=<targetId> --frame=<frameId>` with `eval`, `eval-file`, or `snapshot` to target a child frame, including cross-origin frames.\n- A frame-scoped `snapshot` prints only that frame's accessibility subtree. Its frame-prefixed refs work with `click`, `fill`, `dblclick`, `hover`, `select`, `check`, and `uncheck`; do not pass `--frame` to those commands. Other ref commands require refs from a top-level snapshot.\n\n## Common Failure Modes\n\n- `--tab <targetId> is required` — you forgot `--tab=<id>`. Run `tab-list` to get IDs.\n- `is a frame ID, not a tab target ID` — keep the owning tab's targetId in `--tab` and pass the frame ID with `--frame`.\n- `No snapshot available` — run `snapshot --tab=<id>` before using refs.\n- `unknown flag \"--x\"` / `unexpected argument \"y\"` — every subcommand rejects arguments it does not\n support, so an exit code of 0 means everything you passed was honoured. Check `<verb> --help`.\n- For free-text payloads that start with `-` (e.g. `fill`/`type`/`eval`), put `--` before the text:\n `fill --tab=<id> e1 -- --dash-looking`.\n- `is not an element ref` — a screenshot's positional is a main-frame element ref (`e5`); the output\n path is `--filename=<path>`. Frame-prefixed refs (`f1e5`) clip only with `click`-family commands.\n- Refs are tied to **one tab + one snapshot**. They do not carry across tabs, navigations, or reloads.\n\n## Element Refs\n\nSnapshots assign short ref IDs (`e1`, `e2`, ...) to interactive elements. Use these refs with `click`, `fill`, `dblclick`, `hover`, `select`, `check`, `uncheck`, `drag`, `upload`, `drop`, and `screenshot`.\n\nRefs are invalidated after any state-changing command. Always re-snapshot to get fresh refs.\n\n## Commands\n\nAll commands below that operate on a tab require `--tab=<targetId>`.\n\n### Core\n\n```bash\nplaywright-cli open [url] [--foreground] [--mobile] # Open tab (background by default), returns targetId\nplaywright-cli tab-new [url] [--foreground] [--mobile] # Same as open\nplaywright-cli tab-close --tab=<id> # Close tab (alias: close)\nplaywright-cli goto --tab=<id> <url> # Navigate tab\nplaywright-cli navigate --tab=<id> <url> # Alias for goto\nplaywright-cli snapshot --tab=<id> [--frame=<frameId>] [--no-iframes] [--filename=path] [--depth=<n>] [--boxes] # Tab tree or one frame subtree; --depth limits nesting, --boxes adds [box=x,y,w,h] rects\nplaywright-cli find --tab=<id> <text> # Search the snapshot for text (case-insensitive), returns matching lines + context\nplaywright-cli find --tab=<id> --regex=<re> # Same, with a regexp (use either text or --regex, not both)\nplaywright-cli eval --tab=<id> [--frame=<frameId>] <expression> [--filename=path|--output=path] # Evaluate JS in a tab/frame, incl. top-level await/return; use `--` before an expression that starts with `-`\nplaywright-cli eval-file --tab=<id> [--frame=<frameId>] <vfs-path> [--output=path|--filename=path] # Evaluate JS from a VFS file in a tab/frame (top-level await/return supported)\nplaywright-cli frames --tab=<id> # List frame IDs for --frame (not --tab)\nplaywright-cli resize --tab=<id> <width> <height> # Resize viewport\n```\n\n`--foreground` (or `--fg`) opens the new tab **in the foreground** — it brings the\nnew tab to the front and switches the user's visible/active tab to it, instead of\nopening in the background.\n\n**Bringing a tab to the foreground (activate / focus / raise / switch to a tab):**\n\n- **New tab** → `open <url> --foreground` (or `tab-new <url> --fg`).\n- **Existing tab** → `tab-select <index>` (1-based index from `tab-list`).\n\n`--mobile` opens the tab with generic mobile-device emulation (viewport,\ndevice pixel ratio, touch, Android Chrome UA), sticky for the tab's lifetime —\na later `resize` changes only the dimensions and keeps the mobile identity.\nMobile pages are usually lighter, which saves tokens.\n\nThese two are the ONLY ways to change which tab is in front. There is no\n`activate`, `bring-to-front`, or `focus` subcommand, and `eval`-ing\n`window.focus()` does NOT work (browsers block a page from stealing foreground).\nIf a tab didn't come to the front, re-run `tab-select` / `--foreground` — do not\nfall back to `window.focus()`.\n\n### Interaction\n\n```bash\nplaywright-cli click --tab=<id> <ref> [--modifiers=Shift,Control,Alt,Meta] # Click element\nplaywright-cli dblclick --tab=<id> <ref> [button] [--modifiers=...] # Double-click\nplaywright-cli fill --tab=<id> <ref> <text> [--submit] # Clear input + type text (--submit presses Enter); use `--` before text that starts with `-`\nplaywright-cli type --tab=<id> <text> [--submit] # Type into focused element (--submit presses Enter); use `--` before text that starts with `-`\nplaywright-cli hover --tab=<id> <ref> # Hover over element\nplaywright-cli select --tab=<id> <ref> <value> # Select dropdown value\nplaywright-cli check --tab=<id> <ref> # Check checkbox/radio\nplaywright-cli uncheck --tab=<id> <ref> # Uncheck checkbox/radio\nplaywright-cli drag --tab=<id> <startRef> <endRef> # Drag and drop\nplaywright-cli upload --tab=<id> [ref] <file> [file...] # Upload VFS files to file input (optional ref targets hidden inputs)\nplaywright-cli drop --tab=<id> <ref> [--path=<vfs-path>] [--data=<mime/type=value>] # Drop files/data onto element\nplaywright-cli dialog-accept --tab=<id> [text] # Accept JS dialog\nplaywright-cli dialog-dismiss --tab=<id> # Dismiss JS dialog\n```\n\n### Keyboard\n\n```bash\nplaywright-cli press --tab=<id> <key> # Press key (keyDown + keyUp, e.g. Enter, Tab, Escape)\nplaywright-cli keydown --tab=<id> <key> # Hold key down (no paired keyUp)\nplaywright-cli keyup --tab=<id> <key> # Release held key (no paired keyDown)\n```\n\n### Mouse\n\n```bash\nplaywright-cli mousemove --tab=<id> <x> <y> # Move mouse to coordinates (negative coords ok, e.g. -10 20)\nplaywright-cli mousedown --tab=<id> [button] # Press mouse button (left/right/middle, default: left)\nplaywright-cli mouseup --tab=<id> [button] # Release mouse button\nplaywright-cli mousewheel --tab=<id> <dx> <dy> # Scroll mouse wheel (negative deltas ok, e.g. 0 -300)\n```\n\n### Navigation\n\n```bash\nplaywright-cli go-back --tab=<id> # history.back()\nplaywright-cli go-forward --tab=<id> # history.forward()\nplaywright-cli reload --tab=<id> # Reload page\n```\n\n### Teleport\n\n```bash\nplaywright-cli teleport --tab=<id> --start=<regex> --return=<regex> [--timeout=<s>]\nplaywright-cli teleport --list # List available follower runtimes\nplaywright-cli teleport --off --tab=<id> # Cancel a teleport on this tab\nplaywright-cli open <url> --teleport-start=<regex> --teleport-return=<regex>\nplaywright-cli goto --tab=<id> <url> --teleport-start=<regex> --teleport-return=<regex>\n```\n\nTeleport is for leader/follower tray auth handoffs. Scoped to a specific tab — only commands targeting the teleporting tab are blocked; other tabs remain operational.\n\n`--runtime` is optional: without it, teleport picks the most recently active eligible follower (preferring standalone floats). Only followers that can actually serve cookies are eligible — cherry hosts, exec-only CLI followers, and any target advertising `network: false` are excluded, so a teleport fails fast instead of \"succeeding\" with zero cookies.\n\n### Screenshots\n\n```bash\nplaywright-cli screenshot --tab=<id> # Save to $TMPDIR/screenshot-<ts>.png\nplaywright-cli screenshot --tab=<id> --filename=page.png # Save to custom path\nplaywright-cli screenshot --tab=<id> e5 # Clip to an element (positional = MAIN-FRAME ref, not a path)\nplaywright-cli screenshot --tab=<id> --fullPage # Full scrollable page (alias: --full-page)\nplaywright-cli screenshot --tab=<id> --max-width=800 # Downscale to a max width (png output only)\nplaywright-cli screenshot --tab=<id> --type=jpeg # png (default) / jpeg / webp; inferred from --filename extension\nplaywright-cli screenshot --tab=<id> --hires # Capture in device pixels (honors device pixel ratio)\n```\n\nAn element screenshot (`screenshot e5`) returns **that element's crop or fails**\n(exit 1) — typically because the snapshot went stale after a navigation or\nlayout change. Re-run `snapshot` and retry with a fresh ref; it never silently\nsubstitutes a full-viewport frame.\n\nA `resize` sticks to its tab: the viewport override is re-applied automatically\nwhenever the tab is re-attached, so another driver switching tabs cannot reset\nit.\n\nAll playwright-cli commands share one browser and run **serialized**. When\nconcurrent callers (e.g. parallel scoops) queue up, commands may emit a\n`note: browser bridge contended — ...` line on stderr with the total lock wait\nand queue depth — treat it as a signal to stagger callers or reduce fan-out\nrather than re-running commands.\n\n### Save As\n\n```bash\nplaywright-cli pdf --tab=<id> [--filename=path] # Save page as PDF (not available in extension mode)\n```\n\n### Viewing pages and screenshots yourself\n\nThe browser displays things to the human; `open --view` is what lets _you_ see them. **But viewing screenshots is a last resort for the cone — every image you load eats a large chunk of the context window** (a single 1280×800 PNG can run 1500+ tokens, full-page screenshots much more). Reach for cheaper signals first:\n\n1. **`playwright-cli snapshot --tab=<id>`** — text accessibility tree. Use this first; it answers \"what's on the page\" for almost all verification tasks at a tiny fraction of the token cost. On a big page, `find --tab=<id> <text>` greps the snapshot and returns just the matching lines with context, and `snapshot --depth=<n>` caps the tree — both much cheaper than the full tree.\n2. **`eval` against the DOM** — when you need a specific value (`document.title`, an attribute, computed style), `eval` it. Don't screenshot for facts you can extract.\n3. **Delegate visual inspection to a scoop.** If the cone genuinely needs vision (layout regression, render fidelity, \"does this look right\"), spawn a scoop to take and view the screenshot — the scoop's context absorbs the tokens, and you receive its summary back. The cone's window stays clean for orchestration.\n4. **`open --view` in the cone** — only when the cone itself must see pixels for its current decision and steps 1–3 won't do.\n\n**What you CAN see:**\n\n- `open --view <path>` — reads an image from the VFS and returns it. Works with PNG, JPEG, GIF, WebP, SVG.\n- `playwright-cli screenshot --tab=<id>` + `open --view <path>` — screenshot a tab, then view it.\n- `screencapture --view screenshot.png` — capture the user's screen via browser screen sharing.\n- `playwright-cli snapshot --tab=<id>` — accessibility tree (text). Use to verify content without vision.\n\n**What only the human sees:**\n\n- `serve <dir>` — opens an app directory in a browser tab (read-only preview).\n- `serve --ttl 30d <dir>` — uploads an immutable snapshot that works without the leader. TTL units are whole `m`, `h`, `d`, or `w`, capped at 30 days. It implies `--no-bridge`, conflicts with `--bridge`/`--max-tabs`, and is limited to 1,000 files, 25 MiB per file, and 50 MiB total. Use `serve --list` for mode/expiry and `serve --stop <token>` to revoke it early.\n- `serve --bridge <dir>` — opens a **driveable** preview whose visitors auto-connect as live synthetic-CDP targets you can navigate/click/evaluate/screenshot via playwright. **Security: opt-in only; cross-subdomain cookie risk accepted (host-only cookies isolated; `Domain=.sliccy.now` cookies readable across previews).** Flags: `--max-tabs <N>` (default 20), `--quiet` (suppress the first-visit announcement), `--no-bridge` (force read-only), `--stop <token>` (revoke + delete webhook). Use `serve --logs [<token>] [--lines <N>]` to inspect leader-memory-only connect/disconnect records without emitting a lick or waking the cone. `serve --truncate [<token>]` clears matching records **and re-arms the first-visit announcement**, so the next visit announces once. Visitor page API: `window.slicc.emit(name, detail?)` (fires webhook lick on cone), `window.slicc.on(name, cb)` (subscribes to CustomEvents you dispatch).\n- `open <path>` (no flags) — opens a file in a browser tab.\n- `imgcat <path>` — displays an image in the terminal preview.\n\n**Workflow to verify a page (when vision is actually required):**\n\n1. `serve /workspace/app` — open the app (the human sees it).\n2. `playwright-cli tab-list` — find the tab by URL, note the targetId.\n3. `playwright-cli snapshot --tab=<id>` — required before screenshot, and often answers your question on its own.\n4. `playwright-cli screenshot --tab=<id> --filename=\"$TMPDIR/shot.png\"` — consider `--max-width` to keep the file small.\n5. `open --view \"$TMPDIR/shot.png\"` — now you can see it. Strongly prefer doing this from a scoop, not the cone.\n\n**Don't:**\n\n- Default to screenshots when a snapshot would do.\n- `read_file` on a PNG or base64-encode to view images.\n- `imgcat` or `cat` on screenshots expecting to see them.\n- Open a screenshot then screenshot that tab.\n- Use `eval` to check the active tab — use `tab-list`.\n\n### Tab Management\n\n```bash\nplaywright-cli tab-list # List tabs with targetIds + (active) marker\nplaywright-cli tab-new [url] # New tab, returns targetId\nplaywright-cli tab-close --tab=<id> # Close specific tab\nplaywright-cli tab-select <index> # Select (bring to front) tab by 1-based index\n```\n\n### Cookies\n\n```bash\nplaywright-cli cookie-list --tab=<id> [--domain=<d>] [--path=<p>] # List cookies (filter by domain/path)\nplaywright-cli cookie-get --tab=<id> <name> # Get cookie\nplaywright-cli cookie-set --tab=<id> <name> <value> [--sameSite=Strict|Lax|None] [other flags] # Set cookie\nplaywright-cli cookie-delete --tab=<id> <name> [--domain= --path=] # Delete cookie\nplaywright-cli cookie-clear --tab=<id> # Clear all cookies\n```\n\n### Storage\n\n```bash\nplaywright-cli localstorage-list --tab=<id>\nplaywright-cli localstorage-get --tab=<id> <key>\nplaywright-cli localstorage-set --tab=<id> <key> <value>\nplaywright-cli localstorage-delete --tab=<id> <key>\nplaywright-cli localstorage-clear --tab=<id>\n# Same pattern for sessionstorage-*\nplaywright-cli state-save --tab=<id> [filename|--filename=path] # Save cookies + localStorage to JSON\nplaywright-cli state-load --tab=<id> <filename> # Restore from state file\n```\n\n### Network\n\n```bash\nplaywright-cli console --tab=<id> [min-level] [--clear] # List console messages (debug/log/info/warning/error)\nplaywright-cli requests --tab=<id> [--static] [--filter=<regex>] [--clear] # List network requests\nplaywright-cli request --tab=<id> <index> [--filename=path] # Full request details\nplaywright-cli request-headers --tab=<id> <index> # Request headers only\nplaywright-cli request-body --tab=<id> <index> # Request body only\nplaywright-cli response-headers --tab=<id> <index> # Response headers only\nplaywright-cli response-body --tab=<id> <index> [--filename=path] # Response body (saves binary to file)\nplaywright-cli network-state-set --tab=<id> <online|offline> # Toggle network state\nplaywright-cli route --tab=<id> <pattern> [--status=N] [--body=text] [--content-type=type] [--header=name:value]\nplaywright-cli route-list --tab=<id> # List active routes\nplaywright-cli unroute --tab=<id> [pattern] # Remove routes (all if no pattern)\n```\n\n### DevTools\n\n```bash\nplaywright-cli generate-locator --tab=<id> <ref> # Generate Playwright locator string for element\nplaywright-cli highlight --tab=<id> <ref> [--style=<css>] # Highlight element with visual overlay\nplaywright-cli highlight --tab=<id> --hide [ref] # Remove highlight (all if no ref)\n```\n\n### HAR Recording\n\n```bash\nplaywright-cli record [url] [--filter=<js-expr>] # Open tab with network recording\nplaywright-cli stop-recording <recordingId> # Stop and save HAR\n```\n\n## Multi-Agent Tab Behavior\n\n**All agents (cone + scoops) share the same tab namespace.** There is no tab isolation.\n\n- `tab-list` shows **every** tab from every agent — yours, the cone's, other scoops'. The list can be noisy.\n- Any agent can `eval`, `snapshot`, or `close` any tab — there are no ownership checks.\n- Tab counts fluctuate as other agents open and close tabs concurrently.\n\n**Best practices for scoops:**\n\n1. **Track your own tab IDs.** When you open a tab, capture the targetId and store it. Don't rely on `tab-list` to find your tabs later — other agents' tabs will be mixed in.\n\n ```bash\n # Open and capture the ID\n playwright-cli tab-new https://example.com\n # Output: Opened https://example.com in new tab [targetId: ABC123...]\n # Use ABC123 for all subsequent commands on this tab\n ```\n\n2. **NEVER close tabs you didn't open.** Tabs you don't recognize belong to the **user** or other agents. User tabs are off-limits unless the user explicitly asks you to close them. Only close tabs whose targetId you captured from your own `tab-new` / `open` calls.\n\n3. **Handle \"tab not found\" gracefully.** Another agent might close a tab between your `tab-list` and your command. If you get `Error: No tab with id`, the tab is gone — move on.\n\n4. **Don't depend on tab count or ordering.** Other agents are opening/closing tabs concurrently. Use targetIds, not positional logic.\n\n5. **Clean up when done.** Close all tabs you opened before finishing. Include this in every scoop brief:\n _\"Close each tab with `playwright-cli tab-close --tab=<id>` when done.\"_\n\n## Tips\n\n- **Refs change after every interaction** — always re-snapshot before clicking or filling.\n- `open` and `tab-new` open tabs in the **background** by default. Capture the targetId from the output. To open in the **foreground** add `--foreground`/`--fg`; to raise an **already-open** tab use `tab-select <index>`.\n- After `click`, `fill`, `goto`, `go-back`, `go-forward`, `reload`, `select`, `check`, `uncheck`, `drag`, or `dialog-*`, take a fresh `snapshot --tab=<id>` before using refs again.\n- Unexpected JavaScript dialogs are auto-dismissed on attached pages.\n- Use `eval --tab=<id>` for DOM operations not covered by built-in commands; save results with `--filename=path`.\n- The SLICC app tab and Chrome internal UI tabs are automatically excluded from `tab-list`.\n- `fill` clears and types into regular inputs, textareas, and `contenteditable` elements. Use `--submit` to press Enter after. If the text or an `eval` expression starts with `-`, put `--` before it so it is not parsed as a flag.\n- Negative numbers for `mousewheel` / `mousemove` are positionals (no `--` needed): `mousewheel --tab=<id> 0 -300`.\n- Screenshots default to `$TMPDIR/screenshot-<timestamp>.png` — your own scratch directory, not the shared root. Use `--filename=path` to save elsewhere —\n `screenshot <path>` is an error, because that slot is the element ref.\n- Unsupported flags and extra positionals are rejected per subcommand, so a probe that exits 0 means\n the flag was honoured — nothing is silently dropped.\n- Use `keydown`/`keyup` for holding modifier keys (e.g. Shift+click: `keydown Shift`, `click`, `keyup Shift`).\n- Use `requests` + `response-body` to inspect XHR/fetch responses; `route` to mock or block them.\n- **Calling the app's own backend? Use `curlwright`, not `eval-file`.** It is curl's flags run by a `fetch()` inside the tab, so cookies, origin and session come along: `curlwright -s -X POST https://app.example.com/api/items -H 'X-CSRF-Token: abc' -d '{\"name\":\"x\"}' --tab=<id>`. `-o <file>` writes a **byte-exact** body, which `eval-file` cannot do at all — that is the only way to pull a binary response out of a page. Without `--tab` it uses the tab already on that origin. `curlwright --help` for the flag list.\n- `state-save` / `state-load` persist auth state (cookies + localStorage) across sessions.\n- `pdf` saves a print-layout PDF; not available in extension mode.\n\n## Low-level CDP escape hatch\n\nFor raw Chrome DevTools Protocol calls that `playwright-cli` doesn't wrap, send JSON-RPC directly over WebSocket with `websocat`:\n\n```bash\n# Discover the page's debug socket URL via the CDP HTTP endpoint\ncurl -s http://127.0.0.1:9222/json | jq -r '.[0].webSocketDebuggerUrl'\n\n# Send a single CDP method, receive the response, exit\necho 'Page.navigate {\"url\":\"https://example.com\"}' \\\n | websocat -1 --jsonrpc --jsonrpc-omit-jsonrpc ws://127.0.0.1:9222/devtools/page/<id>\n```\n\nRun `websocat --help` for the full flag list. Use this only when `playwright-cli` has no wrapper for the CDP method you need.\n";export{e as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./py-realm-worker-DGFMfg27.js";var t=e(((e,t)=>{t.exports={}}));export default t();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./logger-LESFN7Hj.js";import{n,r}from"./panel-rpc-BPwAqRch.js";import{n as i,o as a,t as o}from"./providers-CvD7PECK.js";import"./src-DXa5EsFV.js";import"./proxied-fetch-B0SF_J0b.js";import{a as s,t as c}from"./api-endpoint-DRYP1Kfj.js";import{u as ee}from"./core-CdPvxBo3.js";import{i as l,n as te,r as u}from"./compat-uEPf6-XW.js";import{t as ne}from"./secrets-bridge-client-CNOtgwnq.js";import{r as re,t as ie}from"./bedrock-camp-compat-CYnC9BQI.js";import{a as d}from"./claude-model-version-CJiITCDG.js";const f=`slicc_oauth_extra_domains`;function p(e){try{let t=e.getItem(f);if(!t)return{};let n=JSON.parse(t);if(typeof n!=`object`||!n||Array.isArray(n))return{};let r={};for(let[e,t]of Object.entries(n)){if(typeof e!=`string`||!Array.isArray(t))continue;let n=t.filter(e=>typeof e==`string`&&e.length>0);n.length>0&&(r[e]=n)}return r}catch{return{}}}function ae(e,t){try{e.setItem(f,JSON.stringify(t))}catch(e){throw Error(`Failed to persist OAuth extras (localStorage quota exceeded?): ${e instanceof Error?e.message:String(e)}`)}}function oe(e,t){let n={input:0,output:0,cacheRead:0,cacheWrite:0},r=d(e);if(!r)return n;let i;for(let e of t.values()){let t=d(e.id);!t||t.family!==r.family||(!i||t.major>i.major||t.major===i.major&&t.minor>i.minor)&&(i={major:t.major,minor:t.minor,cost:e.cost})}return i?.cost??n}const se=t(`model-policy`),m=`/etc/models`;function h(){return{sections:{}}}function ce(e){let t=e.indexOf(`#`);return(t===-1?e:e.slice(0,t)).trim()}function le(e){let t=h();if(typeof e!=`string`)return t;let n=null;for(let r of e.split(/\r?\n/)){let e=ce(r);if(!e)continue;let i=/^\[([^\]]+)\]$/.exec(e);if(i){n=i[1].trim(),t.sections[n]??=[];continue}if(n===null){se.warn(`model policy entry before any [provider] section — ignored`,{entry:e});continue}let a=e.startsWith(`-`),o=a?e.slice(1).trim():e,s=o.indexOf(`:`);if(s<=0||s===o.length-1){se.warn(`model policy entry is not provider:model — ignored`,{entry:e});continue}t.sections[n].push({providerId:o.slice(0,s).trim(),modelId:o.slice(s+1).trim(),deny:a})}return t}function g(e,t,n){return e.providerId===t?e.modelId===`*`||e.modelId===n:!1}function ue(e,t){return e.sections[t]??[]}function de(e,t,n,r){return ue(e,t).some(e=>e.deny&&g(e,n,r))}function fe(e,t,n,r){let i=ue(e,t);return i.some(e=>e.deny&&g(e,n,r))?!1:n===t||i.some(e=>!e.deny&&g(e,n,r))}let pe=h();function me(e){pe=e}function _(){return pe}function he(e,t,n){return`add \`${t}:${n}\` (or \`${t}:*\`) under \`[${e}]\` in ${m}`}var ge=e({ACCOUNTS_KEY:()=>b,__test__:()=>Se,addAccount:()=>I,applyProviderDefaults:()=>Te,clearAllSettings:()=>Ze,clearApiKey:()=>Ke,clearBaseUrl:()=>Ye,clearSelectedProvider:()=>Ue,exportProviders:()=>Xe,getAccounts:()=>N,getAllAvailableModels:()=>Oe,getAllExtraOAuthDomains:()=>je,getApiKey:()=>We,getApiKeyForProvider:()=>B,getApiVersionForProvider:()=>ze,getAvailableProviders:()=>w,getBaseUrl:()=>qe,getBaseUrlForProvider:()=>V,getDeploymentForProvider:()=>Re,getExtraOAuthDomains:()=>P,getOAuthAccountInfo:()=>k,getProviderConfig:()=>E,getProviderModels:()=>O,getRawApiKeyForProvider:()=>z,getSelectedModelId:()=>H,getSelectedProvider:()=>U,isModelHiddenFromPicker:()=>j,logoutOAuthAccount:()=>Pe,maskOAuthTokenWithRetry:()=>Fe,migrateLegacyAuthOnlySelection:()=>be,modelRunsOnProvider:()=>q,persistOAuthMaskViaServiceWorker:()=>R,policyVisible:()=>M,providerOffersLlmModels:()=>T,removeAccount:()=>L,resolveCurrentModel:()=>J,resolveModelById:()=>K,resolveModelByShorthand:()=>nt,resolveModelIdForScoop:()=>ut,resolveModelSelectionForScoop:()=>Q,saveOAuthAccount:()=>Le,setApiKey:()=>Ge,setBaseUrl:()=>Je,setExtraOAuthDomains:()=>ke,setExtraOAuthDomainsAsync:()=>Ae,setSelectedModelId:()=>Be,setSelectedProvider:()=>He});const v=te,y=u,b=`slicc_accounts`,x=`selected-model`,_e=[`slicc_provider`,`slicc_api_key`,`slicc_base_url`,`anthropic_api_key`,`api_provider`,`azure_resource`,`bedrock_region`],ve=new Set([`github`]);function S(e){let t;try{t=l()}catch{return!1}return t.includes(e)&&!a(e)}let C=!1;function ye(){if(!C){C=!0;for(let e of _e)try{localStorage.removeItem(e)}catch{}be()}}function be(){try{let e=localStorage.getItem(x);if(e){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t);(ve.has(n)||S(n))&&localStorage.removeItem(x)}}}catch{}try{let e=localStorage.getItem(b);if(!e)return;let t=JSON.parse(e);if(!Array.isArray(t))return;let n=t.filter(e=>!(typeof e==`object`&&e&&typeof e.providerId==`string`&&S(e.providerId)));n.length!==t.length&&localStorage.setItem(b,JSON.stringify(n))}catch{}}function xe(){C=!1}const Se={_resetLegacyCleanup:xe};function w(){let e=l().filter(a),t=i();return[...new Set([...e,...t])].filter(e=>!o(e)?.hidden)}function T(e){try{if(O(e).length>0)return!0}catch{}try{if(u(e).length>0)return!0}catch{}let t=o(e);return!!(t?.modelOverrides&&Object.keys(t.modelOverrides).length>0)}function Ce(e,t){try{if(O(e).some(e=>e.id===t))return!0}catch{}try{if(u(e).some(e=>e.id===t))return!0}catch{}let n=o(e);return!!(n?.modelOverrides&&Object.hasOwn(n.modelOverrides,t))}function E(e){return o(e)||{id:e,name:e.split(`-`).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),description:`${e} provider`,requiresApiKey:!0,requiresBaseUrl:!1}}function D(e,t){t.context_window!==void 0&&(e.contextWindow=t.context_window),t.max_tokens!==void 0&&(e.maxTokens=t.max_tokens),t.reasoning!==void 0&&(e.reasoning=t.reasoning),t.input!==void 0&&(e.input=t.input),t.cost!==void 0&&(e.cost=t.cost,e.inputCost=t.cost.input,e.outputCost=t.cost.output,e.cacheReadCost=t.cost.cacheRead,e.cacheWriteCost=t.cost.cacheWrite),t.compat!==void 0&&(e.compat={...e.compat??{},...t.compat}),t.thinkingLevelMap!==void 0&&(e.thinkingLevelMap={...e.thinkingLevelMap??{},...t.thinkingLevelMap})}function O(e){try{if(e===`bedrock-camp`){let e=ie(V(`bedrock-camp`));return y(`amazon-bedrock`).filter(t=>re(t,e)).map(e=>({...e,api:`bedrock-camp-converse`,provider:`bedrock-camp`}))}let t=E(e);if(t.getModelIds){let n;try{n=t.getModelIds()}catch(t){return A.error(`Provider getModelIds callback failed`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}let r=new Map;for(let e of l())try{for(let t of y(e))r.set(t.id,t)}catch{}return n.map(n=>{let i=n.api===`openai`?`openai`:`anthropic`,a=`${e}-${i}`,o=r.get(n.id),s;if(o)s={...o,api:a,provider:e};else if(s=W(e,n.id,``,a),n.name&&(s.name=n.name),i===`anthropic`){let e=oe(n.id,r);s.cost=e,s.inputCost=e.input,s.outputCost=e.output,s.cacheReadCost=e.cacheRead,s.cacheWriteCost=e.cacheWrite}let c=t.modelOverrides?.[n.id];return c&&D(s,c),D(s,n),s})}if(t.isOAuth){let n=y(`anthropic`),r=`${e}-anthropic`;return n.map(n=>{let i={...n,api:r,provider:e},a=t.modelOverrides?.[n.id];return a&&D(i,a),i})}return y(e===`azure-ai-foundry`?`anthropic`:e)}catch(t){return A.error(`Failed to load models`,{providerId:e,error:t instanceof Error?t.message:String(t)}),[]}}function k(e){let t=N().find(t=>t.providerId===e);if(!t?.accessToken)return null;let n=!!t.tokenExpiresAt&&Date.now()>t.tokenExpiresAt-6e4;return{token:t.accessToken,maskedValue:t.maskedValue,expiresAt:t.tokenExpiresAt,userName:t.userName,userAvatar:t.userAvatar,scopes:t.scopes,expired:n}}const we=Object.assign({})[`/packages/webapp/providers.json`]??[],A=t(`provider-settings`);function Te(e=we){if(e.length===0||N().length>0)return;let t=new Set(w());for(let n of e)if(!(!n.providerId||!n.apiKey)){if(!t.has(n.providerId)){A.warn(`Unknown provider "${n.providerId}" in providers.json — skipping`);continue}I(n.providerId,n.apiKey,n.baseUrl)}let n=e.find(e=>e.providerId&&e.apiKey&&t.has(e.providerId));n?.model&&!localStorage.getItem(x)&&localStorage.setItem(x,`${n.providerId}:${n.model}`)}const Ee=[/haiku/i];function j(e){return Ee.some(t=>t.test(e))}function De(e){return e.filter(e=>!j(e.id))}function M(e,t){let n=$();if(n===null)return e;let r=_();return e.filter(e=>!de(r,n,t,e.id))}function Oe(){let e=N();if(e.length===0)return[];let t=new Map;for(let n of e){if(t.has(n.providerId))continue;let e=E(n.providerId);if(e.hidden||S(n.providerId))continue;let r=M(De(O(n.providerId)),n.providerId);if(r.length===0)continue;let i={providerId:n.providerId,providerName:e.name,models:r};t.set(n.providerId,i)}return[...t.values()]}function N(){ye();let e=localStorage.getItem(b);if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`object`&&!!e&&typeof e.providerId==`string`&&typeof e.apiKey==`string`):[]}catch{return[]}}function P(e){return p(localStorage)[e]??[]}function ke(e,t){let n=p(localStorage),r=t.map(e=>e.trim()).filter(e=>e.length>0);r.length===0?delete n[e]:n[e]=r,ae(localStorage,n)}async function Ae(e,t){if(r()){ke(e,t);return}let i=n();if(!i)throw Error(`setExtraOAuthDomainsAsync: no DOM and no panel-rpc client — cannot persist to page localStorage`);let{storeAfter:a}=await i.call(`oauth-extras-set`,{providerId:e,domains:t});try{ae(localStorage,a)}catch(t){A.warn(`worker-shim mirror failed after successful page write — reload to refresh`,{providerId:e,error:t instanceof Error?t.message:String(t)})}}function je(){return p(localStorage)}function Me(e){localStorage.setItem(b,JSON.stringify(e))}async function F(e){if(r()){Me(e);return}let t=n();if(!t)throw Error(`saveAccountsAsync: no DOM and no panel-rpc client — cannot persist to page localStorage`);let i=JSON.stringify(e),{storedJson:a}=await t.call(`save-oauth-accounts`,{accountsJson:i});try{localStorage.setItem(b,a)}catch(e){A.warn(`worker-shim mirror failed after successful page write — reload to refresh`,{error:e instanceof Error?e.message:String(e)})}}function I(e,t,n,r,i){let a=N().filter(t=>t.providerId!==e),o={providerId:e,apiKey:t};n&&(o.baseUrl=n),r&&(o.deployment=r),i&&(o.apiVersion=i),a.push(o),Me(a)}async function Ne(e){let t=ee();try{if(t===`extension-direct`){let t=await new Promise(t=>{chrome.runtime.sendMessage({type:`secrets.delete`,name:`oauth.${e}.token`},n=>{chrome.runtime.lastError&&A.error(`SW secrets.delete transport failed`,{providerId:e,error:chrome.runtime.lastError.message}),t(n??{})})});t.error&&A.error(`SW secrets.delete returned error`,{providerId:e,error:t.error})}else if(t===`extension-delegate`){let t=await ne(`secrets.delete`,{name:`oauth.${e}.token`});t?.error&&A.error(`Bridge secrets.delete returned error`,{providerId:e,error:t.error})}else if(t!==`connect`){let t=await fetch(s(`/api/secrets/oauth/${e}`),{method:`DELETE`,headers:c()});!t.ok&&t.status!==404&&A.warn(`OAuth replica DELETE non-ok`,{providerId:e,status:t.status})}}catch(n){A.error(`OAuth replica removal failed`,{providerId:e,topology:t,error:n instanceof Error?n.message:String(n)})}}async function L(e){let t=N().find(t=>t.providerId===e),n=E(e);t&&n?.isOAuth&&await Pe(e),await Ne(e),await F(N().filter(t=>t.providerId!==e));let r=localStorage.getItem(x)??``,i=r.indexOf(`:`);i>0&&r.slice(0,i)===e&&localStorage.removeItem(x)}async function Pe(e){let t=N().find(t=>t.providerId===e);if(!t)return;let n=E(e);if(n?.isOAuth){if(n.onOAuthLogout)try{await n.onOAuthLogout()}catch(t){A.warn(`onOAuthLogout failed`,{providerId:e,error:t instanceof Error?t.message:String(t)})}if(n.getOAuthLogoutUrl){let r=n.getOAuthLogoutUrl(t);if(r){let{openIdpLogoutUrl:t}=await import(`./oauth-service-CT-Lvflt.js`);await t(r).catch(t=>{A.warn(`IdP logout popup failed`,{providerId:e,error:t instanceof Error?t.message:String(t)})})}}await F(N().map(t=>t.providerId===e?{providerId:t.providerId,apiKey:``,baseUrl:t.baseUrl,userName:t.userName,userAvatar:t.userAvatar,loggedOut:!0}:t)),await Ne(e)}}async function Fe(e,t={}){let n=Math.max(1,t.attempts??3),r=t.delayMs??150,i=t.sleep??(e=>new Promise(t=>setTimeout(t,e))),a;for(let t=0;t<n;t++){let o=await e();if(o.maskedValue)return{maskedValue:o.maskedValue};o.error&&(a=o.error),t<n-1&&await i(r)}return{lastError:a}}async function R(e,t,n){let r={providerId:e.providerId,accessToken:e.accessToken,domains:e.domains.join(`,`)},{maskedValue:i,lastError:a}=await Fe(()=>t.sendMaskRequest(r),n);if(!i){A.error(`OAuth mask give-up: no masked value after retries`,{providerId:e.providerId,reason:a??`no error reported (cold SW or empty reply)`});return}let o=t.getAccounts(),s=o.find(t=>t.providerId===e.providerId);s&&(s.maskedValue=i,await t.saveAccounts(o))}function Ie(e,t){if(e.accessToken)return`scopes`in e?e.scopes:t?.scopes}async function Le(e){let t=N().find(t=>t.providerId===e.providerId),n=N().filter(t=>t.providerId!==e.providerId);n.push({providerId:e.providerId,apiKey:``,accessToken:e.accessToken,refreshToken:e.refreshToken,tokenExpiresAt:e.tokenExpiresAt,userName:e.userName,userAvatar:e.userAvatar,baseUrl:e.baseUrl??t?.baseUrl,scopes:Ie(e,t)}),await F(n);let r=E(e.providerId)?.oauthTokenDomains??[],i=P(e.providerId),a=new Set,o=[];for(let e of[...r,...i]){let t=e.toLowerCase();a.has(t)||(a.add(t),o.push(e))}if(o.length===0)return;let l=ee();try{if(l===`extension-direct`)await R({providerId:e.providerId,accessToken:e.accessToken,domains:o},{sendMaskRequest:t=>new Promise(n=>{chrome.runtime.sendMessage({type:`secrets.mask-oauth-token`,...t},t=>{chrome.runtime.lastError&&A.error(`SW mask-oauth-token transport failed`,{providerId:e.providerId,error:chrome.runtime.lastError.message});let r=typeof t==`object`&&t?t:void 0;r?.error&&A.warn(`SW mask-oauth-token returned error`,{providerId:e.providerId,error:r.error}),n(r??{})})}),getAccounts:N,saveAccounts:F});else if(l===`extension-delegate`)await R({providerId:e.providerId,accessToken:e.accessToken,domains:o},{sendMaskRequest:t=>ne(`secrets.mask-oauth-token`,t).then(t=>(t?.error&&A.warn(`Bridge mask-oauth-token returned error`,{providerId:e.providerId,error:t.error}),t??{})).catch(t=>(A.error(`Bridge mask-oauth-token transport failed`,{providerId:e.providerId,error:t instanceof Error?t.message:String(t)}),{})),getAccounts:N,saveAccounts:F});else if(l!==`connect`){let t=await fetch(s(`/api/secrets/oauth-update`),{method:`POST`,headers:c({"Content-Type":`application/json`}),body:JSON.stringify({providerId:e.providerId,accessToken:e.accessToken,domains:o})});if(t.ok){let n=await t.json();if(typeof n.maskedValue==`string`){let t=N(),r=t.find(t=>t.providerId===e.providerId);r&&(r.maskedValue=n.maskedValue,await F(t))}else A.warn(`OAuth replica POST ok but missing maskedValue`,{providerId:e.providerId})}else A.warn(`OAuth replica POST non-ok`,{providerId:e.providerId,status:t.status})}}catch(t){A.error(`OAuth replica sync failed`,{providerId:e.providerId,topology:l,error:t instanceof Error?t.message:String(t)})}}function z(e){let t=N().find(t=>t.providerId===e);return t&&(t.accessToken||t.apiKey)||null}function B(e){let t=N().find(t=>t.providerId===e);return t?t.accessToken||t.apiKey||(E(e).optionalApiKey?`local`:null):null}function V(e){return N().find(t=>t.providerId===e)?.baseUrl??null}function Re(e){return N().find(t=>t.providerId===e)?.deployment??null}function ze(e){return N().find(t=>t.providerId===e)?.apiVersion??null}function H(){let e=localStorage.getItem(x)||``,t=e.indexOf(`:`);return t>=0?e.slice(t+1):e}function Be(e){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t),r=new Set([...i(),...w()]),a=n.includes(`.`);if(r.has(n)||!a){localStorage.setItem(x,e);return}}let n=U();localStorage.setItem(x,`${n}:${e}`)}function Ve(){return localStorage.getItem(x)||``}function U(){let e=Ve(),t=e.indexOf(`:`);if(t>0)return e.slice(0,t);let n=N(),r=H();if(r){let e=n.find(e=>T(e.providerId)&&Ce(e.providerId,r));if(e)return e.providerId}let i=n.find(e=>T(e.providerId));return i?i.providerId:n.length>0?n[0].providerId:`anthropic`}function He(e){let t=H();localStorage.setItem(x,`${e}:${t}`)}function Ue(){let e=H();localStorage.setItem(x,e)}function We(){return B(U())}function Ge(e){let t=U();I(t,e,V(t)??void 0)}async function Ke(){await L(U())}function qe(){return V(U())}function Je(e){let t=U(),n=z(t);n&&I(t,n,e||void 0)}function Ye(){let e=U(),t=z(e);t&&I(e,t)}function Xe(){let e=N(),t=U(),n=H();return e.map(e=>{let r={providerId:e.providerId,apiKey:e.apiKey};return e.baseUrl&&(r.baseUrl=e.baseUrl),e.providerId===t&&n&&(r.model=n),r})}async function Ze(){let e=N();await Promise.allSettled(e.map(e=>L(e.providerId))),localStorage.removeItem(b),localStorage.removeItem(x);for(let e of _e)localStorage.removeItem(e)}function Qe(e){return/^(?:gpt[-.]?|o[0-9]|chatgpt)/i.test(e)?`openai`:`anthropic`}function W(e,t,n,r){return{id:t,name:t,provider:e,api:r??`${e}-${Qe(t)}`,baseUrl:n??``,contextWindow:2e5,maxTokens:16384,input:[`text`,`image`],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},reasoning:!0}}function G(e,t){return t.isOAuth||e===`azure-ai-foundry`?`anthropic`:e===`bedrock-camp`?`amazon-bedrock`:e}function $e(e,t,n){let r=O(e).find(e=>e.id===t);return r?n?{...r,baseUrl:n}:r:null}function et(e,t,n,r){return n.isOAuth?O(t).find(e=>e.id===r)||{...e,api:`${t}-anthropic`,provider:t}:t===`bedrock-camp`?{...e,api:`bedrock-camp-converse`,provider:`bedrock-camp`}:e}function tt(e,t,n,r,i){if(t.isOAuth)return $e(e,n,r)??W(e,n,r);if(i)throw Error(`Model ${n} is not available from provider ${e}`);return J()}function K(e,t){if(!e)return J();let n=t??U(),r=V(n),i=E(n);if(t!==void 0){let t=$e(n,e,r);if(t)return t}try{let t=G(n,i),a=v(t,e);if(!a?.id)throw Error(`Model ${e} not found`);let o=et(a,n,i,e);return r?{...o,baseUrl:r}:o}catch(a){return A.debug(`resolveModelById: pi-ai lookup miss, using provider fallback`,{providerId:n,modelId:e,error:a instanceof Error?a.message:String(a)}),tt(n,i,e,r,t!==void 0)}}function q(e,t){return e.provider===t||e.provider===G(t,E(t))}function J(){let e=U(),t=H(),n=V(e),r=O(e),i=E(e),a=i.defaultModelId?r.find(e=>e.id.toLowerCase().includes(i.defaultModelId.toLowerCase()))?.id:void 0,o=t||a||r[0]?.id||`claude-sonnet-4-6`;try{let t=G(e,i),a=v(t,o);if(!a?.id)throw Error(`Model ${o} not found in ${t} registry`);let s=a;return i.isOAuth?s=r.find(e=>e.id===o)||{...s,api:`${e}-anthropic`,provider:e}:e===`bedrock-camp`&&(s={...s,api:`bedrock-camp-converse`,provider:`bedrock-camp`}),n&&(s={...s,baseUrl:n}),s}catch(t){A.debug(`resolveCurrentModel: pi-ai lookup miss, using provider fallback`,{providerId:e,effectiveModelId:o,error:t instanceof Error?t.message:String(t)});let a=r.find(e=>e.id===o);return a?n?{...a,baseUrl:n}:a:i.isOAuth?W(e,o,n):v(`anthropic`,`claude-sonnet-4-0`)}}function nt(e){let t=e.toLowerCase();if(!t)return null;let n=null;try{n=U()}catch{}if(n!==null){let e=Y(t,[n]);if(e!==null)return e}return Y(t,N().map(e=>e.providerId))}function Y(e,t){let n=null,r=-1;for(let i of t)for(let t of O(i)){let i=t.id.toLowerCase(),a=(t.name??``).toLowerCase();if(!i.includes(e)&&!a.includes(e))continue;let o=t.contextWindow??0;(o>r||o===r&&dt(t.id,n??``)>0)&&(r=o,n=t.id)}return n}function X(){let e=[];try{for(let t of N())e.includes(t.providerId)||e.push(t.providerId)}catch{}try{let t=U();e.includes(t)||e.push(t)}catch{}return e}function rt(e){let t=e.indexOf(`:`);if(t<=0||t===e.length-1)return null;let n=e.slice(0,t),r=e.slice(t+1),i=X().includes(n);if(i)return{providerId:n,modelId:r,configured:i};let a=!1;try{a=w().includes(n)}catch{}return a?{providerId:n,modelId:r,configured:!1}:null}function Z(e,t,n=!0){let r=[e],i=n?Y(e.toLowerCase(),[t]):null;i!==null&&i!==e&&r.push(i);let a=[];try{a=O(t)}catch{}for(let n of r)if(!(a.length>0&&!a.some(e=>e.id===n)))try{if(K(n,t).id===n)return{modelId:n,providerId:t}}catch(r){A.debug(`selectModelFromProvider: candidate did not resolve`,{input:e,candidate:n,providerId:t,error:r instanceof Error?r.message:String(r)})}return null}function it(e){return e.map(e=>`${e.providerId}:${e.modelId}`).join(`, `)}function Q(e){if(!e)return{ok:!1,error:`unknown model: (empty)`};let t=rt(e);if(t)return ct(e,t);let n=null;try{n=U()}catch{}if(n!==null){let t=Z(e,n);if(t)return st(t)}return lt(e,n)}function $(){try{return U()}catch{return null}}function at(e){let t=$();return t===null||fe(_(),t,e.providerId,e.modelId)}function ot(e){let t=$()??`<none>`;return{ok:!1,error:`model not allowed: ${`${e.providerId}:${e.modelId}`} is blocked by ${m} while "${t}" is selected — ${he(t,e.providerId,e.modelId)}`}}function st(e){return at(e)?{ok:!0,selection:e}:ot(e)}function ct(e,t){if(!t.configured){let n=X();return{ok:!1,error:`unknown model: ${e} (provider "${t.providerId}" is not configured${n.length>0?`; configured: ${n.join(`, `)}`:``})`}}let n=Z(t.modelId,t.providerId);return n?st(n):{ok:!1,error:`unknown model: ${e} (provider "${t.providerId}" does not offer "${t.modelId}")`}}function lt(e,t){let n=X().filter(e=>e!==t);for(let t of[`exact`,`shorthand`]){let r=[];for(let i of n){let n=t===`exact`?e:Y(e.toLowerCase(),[i]);if(n===null)continue;let a=Z(n,i,!1);a&&r.push(a)}let i=r.filter(at);if(i.length===0&&r.length>0)return ot(r[0]);if(i.length===1)return{ok:!0,selection:i[0]};if(i.length>1)return{ok:!1,error:`ambiguous model: ${e} matches ${it(i)} — qualify it as provider:model`}}return{ok:!1,error:`unknown model: ${e}`}}function ut(e){let t=Q(e);return t.ok?t.selection.modelId:null}function dt(e,t){let n=e.match(/\d+/g)?.map(Number)??[],r=t.match(/\d+/g)?.map(Number)??[],i=Math.max(n.length,r.length);for(let e=0;e<i;e++){let t=(n[e]??0)-(r[e]??0);if(t!==0)return t}return 0}export{m as _,ze as a,me as b,k as c,U as d,q as f,Le as g,Q as h,B as i,O as l,K as m,N as n,V as o,J as p,We as r,Re as s,ge as t,H as u,h as v,oe as x,le as y};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./src-XLzS9HFL.js";import{n as e}from"./runtime-env-Dlaokqg1.js";var t=null,n=null;function r(e){if(e===null||e===``){t=null;return}t=e.replace(/\/+$/,``)}function i(){return t}function a(e){n=e===null||e===``?null:e}var o=null;function s(e){o=e===null||e===``?null:e}function c(){return o}var l=null;function u(){return l===null&&(l=e()),l}function d(e){return t?`${t}${e}`:e}function f(e){let r={};if(n&&t&&(r[`X-Bridge-Token`]=n),e)for(let t of Object.keys(e))r[t]=e[t];return r}export{d as a,r as c,i,u as n,a as o,c as r,s,f as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./src-DXa5EsFV.js";import{t as e}from"./runtime-env-DadgceZk.js";let t=null,n=null;function r(e){if(e===null||e===``){t=null;return}t=e.replace(/\/+$/,``)}function i(){return t}function a(e){n=e===null||e===``?null:e}let o=null;function s(e){o=e===null||e===``?null:e}function c(){return o}let l=null;function u(){return l===null&&(l=e()),l}function d(e){return t?`${t}${e}`:e}function f(e){let r={};if(n&&t&&(r[`X-Bridge-Token`]=n),e)for(let t of Object.keys(e))r[t]=e[t];return r}export{d as a,r as c,i,u as n,a as o,c as r,s,f as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./logger-DDBAeTLF.js";import{n as t}from"./runtime-env-Dlaokqg1.js";import"./runtime-env-NCI8LQob.js";import{t as n}from"./permissions-surface-registry-CilCRwhh.js";import{t as r}from"./speech-C5U8h4In.js";import{t as i}from"./speech-assets-bridge-CFYafE89.js";import{o as a}from"./transformers-env-DnkszgHP.js";import{i as o,t as s}from"./whisper-session-i96-W77q.js";var c=e(`speech:composer`),l=5e3,u=(e,t,n)=>new Promise((r,i)=>{let a=setTimeout(()=>i(Error(`${n} timed out after ${t}ms`)),t);e.then(e=>{clearTimeout(a),r(e)},e=>{clearTimeout(a),i(e)})}),d=class{#e;#t;#n;#r;#i;#a=null;#o=!1;#s={engine:`builtin`,state:`idle`};#c=a();#l=new Set;#u=null;constructor(e={}){this.#e=e.builtin??r(),this.#t=e.loadWhisper??o,this.#n=e.startSession??s,this.#r=e.getPermissionSurface??f,this.#i=e.ensureAssets??v}permission(){return this.#e.permission()}async requestPermission(){let e=this.#r();if(e)try{let t=await e.request(`microphone`);return t?(this.#p(t.stream),!0):!1}catch(e){return c.warn(`permission surface microphone request failed`,e),!1}return this.#e.requestPermission()}microphones(){return this.#e.microphones()}status(){return this.#s}onStatus(e){return this.#l.add(e),e(this.#s),()=>this.#l.delete(e)}warmup(){this.#o||(this.#o=!0,this.#c=a(),this.#_({engine:`builtin`,state:`downloading`}),this.#d().then(e=>{this.#a=e,this.#_({engine:`enhanced`,state:`ready`})},e=>{this.#o=!1,this.#_({engine:`builtin`,state:`unavailable`,message:m(e)}),c.warn(`enhanced speech engine unavailable`,e)}))}async#d(){let e=null;try{await this.#i(e=>this.#h(e))}catch(t){e=t,c.warn(`speech asset staging failed; trying already-present assets`,t)}try{return await this.#t(e=>this.#g(e))}catch(t){throw e??t}}async start(e){let t=this.#a;if(t){let n=null;try{return n=await this.#f(e.deviceId),await this.#n(t,{deviceId:e.deviceId,lang:e.lang,onPartial:e.onPartial,onError:e.onError,stream:n??void 0})}catch(e){if(n)for(let e of n.getTracks())e.stop();c.warn(`whisper session failed to start; falling back to builtin`,e)}}return this.#e.start(e)}async#f(e){let t=e&&e!=="default"?e:void 0,n=this.#m();if(n){if(!t&&p(n))return n;for(let e of n.getTracks())e.stop()}let r=this.#r();if(!r)return null;let i={audio:!t||{deviceId:{exact:t}}},a=await u(r.request(`microphone`,{constraints:i}),l,`microphone capture`);if(!a)throw Error(`microphone permission denied`);return a.stream}#p(e){if(this.#u&&this.#u!==e)for(let e of this.#u.getTracks())e.stop();this.#u=e}#m(){let e=this.#u;return this.#u=null,e}get enhancedReady(){return this.#a!==null}#h(e){if(this.#s.state!==`downloading`)return;(e.bytesTotal!=null||e.bytesLoaded!=null)&&this.#c.update(e.asset,e.bytesLoaded??0,e.bytesTotal??0);let t=this.#c.snapshot();t.total<=0||this.#_({engine:`builtin`,state:`downloading`,download:{loaded:t.loaded,total:t.total,etaSeconds:t.etaSeconds}})}#g(e){this.#s.state===`downloading`&&this.#_({engine:`builtin`,state:`downloading`,download:{loaded:e.loaded,total:e.total,etaSeconds:e.etaSeconds}})}#_(e){this.#s=e;for(let t of this.#l)t(e)}};function f(){let e=n();return e?{async request(t,n){let r=await e.request(t,n);return r?.kind===`microphone`?{kind:`microphone`,stream:r.stream}:null}}:null}function p(e){let t=e.getTracks();return t.length>0&&t.some(e=>e.readyState!==`ended`)}function m(e){return`Enhanced speech unavailable: ${e instanceof Error?e.message:String(e)}`}var h=t,g;function _(e){g=e}function v(e){return h()?Promise.resolve():i({instanceId:g,onProgress:e})}var y=null;function b(){return y??=new d,y}export{b as getComposerSpeech,_ as setComposerSpeechInstanceId};
|
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/mount-picker-popup-CVvcLs1V.js","assets/logger-DDBAeTLF.js","assets/picker-popup-BjCTzsQH.js","assets/runtime-env-Dlaokqg1.js","assets/runtime-env-a_l4ilH_.js","assets/src-XLzS9HFL.js","assets/usb-picker-B8B4LJT7.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/picker-popup-CFr7T4TJ.js","assets/serial-picker-fzg2DxKj.js","assets/hid-picker-C4WMZ0dN.js","assets/usb-device-registry-CRsCisej.js","assets/serial-port-registry-CCqklAEr.js","assets/hid-device-registry-B2R-0rNt.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./preload-helper-Czpn1I53.js";import{n}from"./runtime-env-Dlaokqg1.js";import"./runtime-env-NCI8LQob.js";import{t as r}from"./permissions-surface-registry-CilCRwhh.js";import{n as i,r as a}from"./hid-device-registry-B2R-0rNt.js";import{a as o,i as s}from"./serial-port-registry-CCqklAEr.js";import{C as c,D as l,E as u,S as d,_ as f,a as ee,g as te,h as p,k as m,l as ne,m as re,n as ie,o as ae,s as oe,w as se,x as ce,y as le}from"./usb-operations-BBXJ4GF8.js";import{i as ue,r as h}from"./usb-device-registry-CRsCisej.js";import{i as g,n as de,r as _}from"./sprinkle-renderer-1C1DNVyK.js";import{n as fe}from"./sprinkle-bridge-BVfyHi8X.js";import{a as v,n as y,r as b}from"./theme-CXRqxpw6.js";var x=e({broadcastToDips:()=>L,disposeDips:()=>X,handleDipPickerAction:()=>Z,hydrateDips:()=>Y,mountDip:()=>K,setDipExecHandler:()=>_e}),S=n();function pe(e){if(typeof e!=`object`||!e||Array.isArray(e))return[];let t=e.filters;return Array.isArray(t)?t:[]}async function C(e,t){if(t?.aborted)throw new DOMException(`aborted`,`AbortError`);let n=await T(e,!0,t);if(t?.aborted)throw new DOMException(`aborted`,`AbortError`);if(n===null)throw Error(`VFS read failed: ${e}`);return typeof n==`string`?n:new TextDecoder().decode(n)}var w=null;function me(){if(w)return w;if(typeof BroadcastChannel>`u`)return null;try{w=new BroadcastChannel(`preview-vfs`)}catch{return null}return w}async function T(e,t,n){let r=me();if(!r)return null;let i=`dip-${Date.now()}-${Math.random().toString(36).slice(2)}`;return new Promise(a=>{let o=!1,s=()=>{r.removeEventListener(`message`,c),n?.removeEventListener(`abort`,l)},c=e=>{if(!o&&e.data?.type===`preview-vfs-response`&&e.data.id===i){if(o=!0,s(),e.data.error){a(null);return}a(e.data.content??null)}},l=()=>{o||(o=!0,s(),a(null))};r.addEventListener(`message`,c),n?.addEventListener(`abort`,l),setTimeout(()=>{o||(o=!0,s(),a(null))},5e3),r.postMessage({type:`preview-vfs-read`,id:i,path:e,asText:t})})}var he=[`/shared/sprinkles/`,`/workspace/skills/sprinkles/`,`/workspace/sprinkles/`],ge=[`/shared/`,`/workspace/skills/sprinkles/`,`/workspace/sprinkles/`];function E(e){return he.some(t=>e.startsWith(t))}function D(e){return typeof e!=`string`||!e.startsWith(`/`)||e.includes(`..`)?!1:ge.some(t=>e.startsWith(t))}var O=new WeakSet,k=`,
|
|
3
|
-
exec: Object.assign(function(cmd) {
|
|
4
|
-
return _vfsCall('dip-exec', { cmd: cmd }, function(m) { return m.result; });
|
|
5
|
-
}, { spawn: function(argv) {
|
|
6
|
-
return _vfsCall('dip-jsh', { op: 'spawn', args: [argv] }, function(m) { return m.result; });
|
|
7
|
-
} }),
|
|
8
|
-
agent: function(prompt, opts) {
|
|
9
|
-
return _vfsCall('dip-agent', { prompt: prompt, opts: opts || null },
|
|
10
|
-
function(m) { return m.result; });
|
|
11
|
-
}`,A=`,
|
|
12
|
-
fetch: function(url, init) {
|
|
13
|
-
return _vfsCall('dip-jsh', { op: 'fetch', args: [url, init || null] }, function(m) { return m.result; });
|
|
14
|
-
},
|
|
15
|
-
http: { client: function(cfg) {
|
|
16
|
-
function mk(method) { return function(path, opts) { return _vfsCall('dip-jsh', { op: 'http', args: [cfg, method, path, opts || null] }, function(m) { return m.result; }); }; }
|
|
17
|
-
return { get: mk('get'), post: mk('post'), put: mk('put'), patch: mk('patch'), 'delete': mk('delete') };
|
|
18
|
-
} },
|
|
19
|
-
browser: {
|
|
20
|
-
findTab: function(q) { return _vfsCall('dip-jsh', { op: 'browser', args: ['findTab', q] }, function(m) { return m.result; }); },
|
|
21
|
-
ensureTab: function(url, options) { return _vfsCall('dip-jsh', { op: 'browser', args: ['ensureTab', url, options || {}] }, function(m) { return m.result; }); },
|
|
22
|
-
eval: function(tab, code) { return _vfsCall('dip-jsh', { op: 'browser', args: ['eval', tab, code] }, function(m) { return m.result; }); },
|
|
23
|
-
evalAsync: function(tab, code) { return _vfsCall('dip-jsh', { op: 'browser', args: ['evalAsync', tab, code] }, function(m) { return m.result; }); },
|
|
24
|
-
cookie: function(tab, name) { return _vfsCall('dip-jsh', { op: 'browser', args: ['cookie', tab, name] }, function(m) { return m.result; }); },
|
|
25
|
-
localStorage: function(tab, key) { return _vfsCall('dip-jsh', { op: 'browser', args: ['localStorage', tab, key] }, function(m) { return m.result; }); },
|
|
26
|
-
fetch: function(tab, url, opts) { return _vfsCall('dip-jsh', { op: 'browser', args: ['fetch', tab, url, opts || {}] }, function(m) { return m.result; }); }
|
|
27
|
-
},
|
|
28
|
-
fetchToFile: function(url, path) {
|
|
29
|
-
return _vfsCall('dip-jsh', { op: 'fetchToFile', args: [url, path] }, function(m) { return m.result; });
|
|
30
|
-
}`,j=`,
|
|
31
|
-
_device: function(channel, op, args) {
|
|
32
|
-
return _vfsCall('dip-device-op',
|
|
33
|
-
{ channel: channel, op: op, args: args || [] },
|
|
34
|
-
function(m) { return m.result; });
|
|
35
|
-
},
|
|
36
|
-
hid: {
|
|
37
|
-
list: function() { return _vfsCall('dip-device-op', { channel: 'hid', op: 'list', args: [] }, function(m) { return m.result; }); },
|
|
38
|
-
request: function(filters) { return _vfsCall('dip-device-op', { channel: 'hid', op: 'request', args: [filters || []] }, function(m) { return m.result; }); },
|
|
39
|
-
open: function(handle) { return _vfsCall('dip-device-op', { channel: 'hid', op: 'open', args: [handle] }, function(m) { return m.result; }).then(function() {}); },
|
|
40
|
-
close: function(handle) { return _vfsCall('dip-device-op', { channel: 'hid', op: 'close', args: [handle] }, function(m) { return m.result; }).then(function() {}); },
|
|
41
|
-
sendReport: function(handle, reportId, data) { return _vfsCall('dip-device-op', { channel: 'hid', op: 'sendReport', args: [handle, reportId, data] }, function(m) { return m.result; }).then(function() {}); },
|
|
42
|
-
on: function(event, cb) { if (event === 'inputreport') _hidInputReportListeners.add(cb); },
|
|
43
|
-
off: function(event, cb) { if (event === 'inputreport') _hidInputReportListeners.delete(cb); }
|
|
44
|
-
},
|
|
45
|
-
serial: {
|
|
46
|
-
list: function() { return _vfsCall('dip-device-op', { channel: 'serial', op: 'list', args: [] }, function(m) { return m.result; }); },
|
|
47
|
-
request: function(filters) { return _vfsCall('dip-device-op', { channel: 'serial', op: 'request', args: [filters || []] }, function(m) { return m.result; }); },
|
|
48
|
-
open: function(handle, options) { return _vfsCall('dip-device-op', { channel: 'serial', op: 'open', args: [handle, options] }, function(m) { return m.result; }).then(function() {}); },
|
|
49
|
-
close: function(handle) { return _vfsCall('dip-device-op', { channel: 'serial', op: 'close', args: [handle] }, function(m) { return m.result; }).then(function() {}); }
|
|
50
|
-
},
|
|
51
|
-
usb: {
|
|
52
|
-
list: function() { return _vfsCall('dip-device-op', { channel: 'usb', op: 'list', args: [] }, function(m) { return m.result; }); },
|
|
53
|
-
request: function(filters) { return _vfsCall('dip-device-op', { channel: 'usb', op: 'request', args: [filters || []] }, function(m) { return m.result; }); },
|
|
54
|
-
open: function(handle) { return _vfsCall('dip-device-op', { channel: 'usb', op: 'open', args: [handle] }, function(m) { return m.result; }).then(function() {}); },
|
|
55
|
-
close: function(handle) { return _vfsCall('dip-device-op', { channel: 'usb', op: 'close', args: [handle] }, function(m) { return m.result; }).then(function() {}); }
|
|
56
|
-
}`;function M(e){return`(function() {
|
|
57
|
-
var _cbId = 0;
|
|
58
|
-
var _callbacks = {};
|
|
59
|
-
var _hidInputReportListeners = new Set();
|
|
60
|
-
|
|
61
|
-
function _vfsCall(type, params, extractResult) {
|
|
62
|
-
return new Promise(function(resolve, reject) {
|
|
63
|
-
var id = ++_cbId;
|
|
64
|
-
_callbacks[id] = function(msg) {
|
|
65
|
-
if (msg.error) reject(new Error(msg.error));
|
|
66
|
-
else resolve(extractResult ? extractResult(msg) : undefined);
|
|
67
|
-
};
|
|
68
|
-
var m = { type: type, id: id };
|
|
69
|
-
if (params) { for (var k in params) m[k] = params[k]; }
|
|
70
|
-
parent.postMessage(m, '*');
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
window.slicc = window.bridge = {
|
|
75
|
-
lick: function(event) {
|
|
76
|
-
var action = typeof event === 'string' ? event : event.action;
|
|
77
|
-
var data = typeof event === 'string' ? undefined : ('data' in event ? event.data : event);
|
|
78
|
-
parent.postMessage({ type: 'dip-lick', action: action, data: data }, '*');
|
|
79
|
-
},
|
|
80
|
-
/* Read-only VFS access. Mirrors the sprinkle bridge so dips can
|
|
81
|
-
check onboarding markers, profiles, etc. without a parent-side
|
|
82
|
-
handshake. */
|
|
83
|
-
readFile: function(path) {
|
|
84
|
-
return _vfsCall('dip-readfile', { path: path }, function(m) { return m.content; });
|
|
85
|
-
},
|
|
86
|
-
exists: function(path) {
|
|
87
|
-
return _vfsCall('dip-exists', { path: path }, function(m) { return m.exists; });
|
|
88
|
-
},
|
|
89
|
-
stat: function(path) {
|
|
90
|
-
return _vfsCall('dip-stat', { path: path }, function(m) { return m.stat; });
|
|
91
|
-
}${e?k:``}${e?A:``}${e?j:``}
|
|
92
|
-
};
|
|
93
|
-
function reportHeight() {
|
|
94
|
-
parent.postMessage({ type: 'dip-height',
|
|
95
|
-
height: document.documentElement.scrollHeight }, '*');
|
|
96
|
-
}
|
|
97
|
-
window.addEventListener('message', function(e) {
|
|
98
|
-
if (!e.data || typeof e.data.type !== 'string') return;
|
|
99
|
-
if (e.data.type === 'slicc-theme') {
|
|
100
|
-
document.documentElement.classList.toggle('theme-light', !!e.data.isLight);
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
/* Pushed device events (currently 'hid:inputreport'). The host
|
|
104
|
-
attaches the underlying listener on slicc.hid.open(handle) for
|
|
105
|
-
this dip; teardown happens automatically on dispose. */
|
|
106
|
-
if (e.data.type === 'dip-device-event' && e.data.channel === 'hid:inputreport') {
|
|
107
|
-
_hidInputReportListeners.forEach(function(cb) {
|
|
108
|
-
try { cb(e.data.payload); } catch(ex) {}
|
|
109
|
-
});
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
/* VFS callback responses target the originating call by id. */
|
|
113
|
-
if (e.data.id && _callbacks[e.data.id]) {
|
|
114
|
-
var cb = _callbacks[e.data.id];
|
|
115
|
-
delete _callbacks[e.data.id];
|
|
116
|
-
cb(e.data);
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
/* Forward any other slicc-* message to in-page listeners via a
|
|
120
|
-
CustomEvent. Dips can opt in with
|
|
121
|
-
window.addEventListener('slicc-message', (ev) => ev.detail). */
|
|
122
|
-
if (e.data.type.indexOf('slicc-') === 0) {
|
|
123
|
-
try {
|
|
124
|
-
document.dispatchEvent(new CustomEvent('slicc-message', { detail: e.data }));
|
|
125
|
-
} catch (ex) {}
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
window.addEventListener('load', function() {
|
|
129
|
-
reportHeight();
|
|
130
|
-
new ResizeObserver(reportHeight).observe(document.body);
|
|
131
|
-
});
|
|
132
|
-
/* Support data-action attributes (Tool UI compat) — auto-lick on click.
|
|
133
|
-
Also intercept <a href> clicks and relay to the parent so links open
|
|
134
|
-
despite the iframe sandbox blocking top-level navigation. */
|
|
135
|
-
document.addEventListener('click', function(e) {
|
|
136
|
-
var el = e.target;
|
|
137
|
-
while (el && el !== document.body) {
|
|
138
|
-
if (el.dataset && el.dataset.action) {
|
|
139
|
-
var actionData = el.dataset.actionData;
|
|
140
|
-
if (actionData) { try { actionData = JSON.parse(actionData); } catch(ex) {} }
|
|
141
|
-
/* Picker hint (e.g. data-picker="directory") needs the parent to
|
|
142
|
-
run File System Access API on the click activation chain.
|
|
143
|
-
Forward as a separate message so the parent can run
|
|
144
|
-
showDirectoryPicker, stash the handle in IDB, then dispatch
|
|
145
|
-
the lick with the IDB key. */
|
|
146
|
-
var picker = el.dataset.picker;
|
|
147
|
-
if (picker) {
|
|
148
|
-
parent.postMessage({
|
|
149
|
-
type: 'dip-picker-action',
|
|
150
|
-
action: el.dataset.action,
|
|
151
|
-
data: actionData || null,
|
|
152
|
-
picker: picker,
|
|
153
|
-
}, '*');
|
|
154
|
-
} else {
|
|
155
|
-
window.slicc.lick({ action: el.dataset.action, data: actionData || null });
|
|
156
|
-
}
|
|
157
|
-
e.preventDefault();
|
|
158
|
-
e.stopPropagation();
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
if (el.tagName === 'A' && el.getAttribute('href')) {
|
|
162
|
-
var href = el.getAttribute('href');
|
|
163
|
-
/* Allow in-iframe anchor navigation (#foo). Skip javascript: for safety. */
|
|
164
|
-
if (href.charAt(0) === '#') return;
|
|
165
|
-
if (/^javascript:/i.test(href)) { e.preventDefault(); return; }
|
|
166
|
-
/* Resolve relative URLs against the iframe's base. */
|
|
167
|
-
var resolved;
|
|
168
|
-
try { resolved = new URL(href, document.baseURI).href; } catch(ex) { resolved = href; }
|
|
169
|
-
parent.postMessage({ type: 'dip-open-link', url: resolved }, '*');
|
|
170
|
-
e.preventDefault();
|
|
171
|
-
e.stopPropagation();
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
174
|
-
el = el.parentElement;
|
|
175
|
-
}
|
|
176
|
-
});
|
|
177
|
-
})();`}var N=`html,body{margin:0;padding:0;overflow:hidden;background:transparent;box-sizing:border-box}
|
|
178
|
-
*,*::before,*::after{box-sizing:inherit}
|
|
179
|
-
/* Vertical breathing room around dip content. Horizontal padding is owned
|
|
180
|
-
by the dip's own content (e.g. .sprinkle-action-card__body) so shtml
|
|
181
|
-
widgets that already pad themselves don't end up double-indented. The
|
|
182
|
-
ResizeObserver on document.body reports the post-padding scrollHeight
|
|
183
|
-
correctly, so auto-height continues to work. The .sprinkle-inline rule
|
|
184
|
-
(set on the iframe body) carries 2px of horizontal padding so the 1px
|
|
185
|
-
focus ring (box-shadow:0 0 0 1px on inputs/select below) doesn't get
|
|
186
|
-
clipped at the iframe paint boundary. */
|
|
187
|
-
body{padding:12px 0;font-family:var(--s2-font-family, sans-serif);font-size:13px;color:var(--s2-content-default)}
|
|
188
|
-
.sprinkle-inline{padding:var(--s2-spacing-100) 2px}
|
|
189
|
-
.sprinkle-inline .sprinkle-btn{padding:4px 12px;font-size:12px;height:28px;box-shadow:none}
|
|
190
|
-
.sprinkle-inline .sprinkle-btn:not([class*="sprinkle-btn--"]){background:var(--s2-bg-elevated)}
|
|
191
|
-
.sprinkle-inline .sprinkle-card{box-shadow:none;margin:0}
|
|
192
|
-
.sprinkle-inline .sprinkle-action-card{margin:0;width:100%}
|
|
193
|
-
.sprinkle-inline .sprinkle-action-card .sprinkle-table{width:100%}
|
|
194
|
-
.sprinkle-inline .sprinkle-grid{width:100%}
|
|
195
|
-
input[type="range"]{width:100%;height:4px;-webkit-appearance:none;appearance:none;background:var(--s2-gray-300);border-radius:2px;outline:none;cursor:default}
|
|
196
|
-
input[type="range"]::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;border-radius:50%;background:var(--s2-accent);cursor:default;border:2px solid var(--s2-bg-base)}
|
|
197
|
-
input[type="range"]::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:var(--s2-accent);cursor:default;border:2px solid var(--s2-bg-base)}
|
|
198
|
-
input[type="text"],input[type="number"],textarea{width:100%;padding:7px 12px;font-size:13px;font-family:var(--s2-font-family,sans-serif);color:var(--s2-content-default);background:var(--s2-bg-layer-2);border:1px solid var(--s2-border-subtle,var(--s2-gray-300));border-radius:8px;outline:none;box-sizing:border-box}
|
|
199
|
-
input[type="text"]:focus,input[type="number"]:focus,textarea:focus{border-color:var(--s2-accent);box-shadow:0 0 0 1px var(--s2-accent)}
|
|
200
|
-
input[type="text"]::placeholder,textarea::placeholder{color:var(--s2-content-disabled,var(--s2-gray-400))}
|
|
201
|
-
select{padding:6px 12px;font-size:13px;font-family:var(--s2-font-family,sans-serif);color:var(--s2-content-default);background:var(--s2-bg-layer-2);border:1px solid var(--s2-border-subtle,var(--s2-gray-300));border-radius:8px;outline:none;cursor:default}
|
|
202
|
-
select:focus{border-color:var(--s2-accent);box-shadow:0 0 0 1px var(--s2-accent)}
|
|
203
|
-
button{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:28px;padding:4px 12px;border:1px solid var(--s2-border-default,var(--s2-gray-300));border-radius:9999px;background:transparent;color:var(--s2-content-default);font-size:12px;font-weight:700;font-family:var(--s2-font-family,sans-serif);cursor:default;transition:background 130ms ease}
|
|
204
|
-
button:hover{background:color-mix(in srgb,var(--s2-content-default) 6%,transparent)}
|
|
205
|
-
button:disabled{opacity:0.4;pointer-events:none}
|
|
206
|
-
canvas{display:block;width:100%;border-radius:8px}
|
|
207
|
-
mark{background:color-mix(in srgb,var(--s2-accent) 25%,transparent);color:inherit;border-radius:2px;padding:0 2px}
|
|
208
|
-
.c-purple{background:#3C3489;color:#EEEDFE}.c-teal{background:#085041;color:#E1F5EE}
|
|
209
|
-
.c-coral{background:#712B13;color:#FAECE7}.c-pink{background:#72243E;color:#FBEAF0}
|
|
210
|
-
.c-gray{background:#444441;color:#F1EFE8}.c-blue{background:#0C447C;color:#E6F1FB}
|
|
211
|
-
.c-amber{background:#633806;color:#FAEEDA}.c-red{background:#791F1F;color:#FCEBEB}
|
|
212
|
-
.c-green{background:#27500A;color:#EAF3DE}`,P=`(function(){
|
|
213
|
-
window.addEventListener('message', function(e){
|
|
214
|
-
if (!e.data || e.data.type !== 'dip-draft-update') return;
|
|
215
|
-
var content = typeof e.data.content === 'string' ? e.data.content : '';
|
|
216
|
-
document.body.innerHTML = content;
|
|
217
|
-
if (window.lucide && typeof window.lucide.createIcons === 'function') {
|
|
218
|
-
try { window.lucide.createIcons(); } catch(ex){}
|
|
219
|
-
}
|
|
220
|
-
});
|
|
221
|
-
})();`;function F(e,t,n=!1){let r=de(),i=y()?` class="theme-light"`:``,a=t||e.includes(`<slicc-editor`),o=t||e.includes(`<slicc-diff`),s=t?`<script>${P}<\/script>`:``;return`<!DOCTYPE html>
|
|
222
|
-
<html${i}><head>
|
|
223
|
-
<meta charset="utf-8">
|
|
224
|
-
<style>${r}</style>
|
|
225
|
-
<style>${N}</style>
|
|
226
|
-
<script>${M(n&&!t)}<\/script>
|
|
227
|
-
${s}
|
|
228
|
-
${a?`<script src="/slicc-editor.js"><\/script>`:``}
|
|
229
|
-
${o?`<script src="/slicc-diff.js"><\/script>`:``}
|
|
230
|
-
<script src="/lucide-icons.js"><\/script>
|
|
231
|
-
</head>
|
|
232
|
-
<body class="sprinkle-inline">${e}</body></html>`}var I=new Set;function L(e){if(typeof e?.type!=`string`||e.type.indexOf(`slicc-`)!==0)throw Error(`broadcastToDips: payload.type must start with 'slicc-'`);for(let t of I)try{t.postMessage(e,`*`)}catch{}}var R;function _e(e){R=e}function z(e){return e.length===0?`''`:`'${e.replace(/'/g,`'\\''`)}'`}function ve(e,t){let n=t?.cwd??`.`,r=t?.allowedCommands??`*`,i=[`agent`];return t?.model&&i.push(`--model`,z(t.model)),t?.thinking&&i.push(`--thinking`,z(t.thinking)),t?.readOnly&&i.push(`--read-only`,z(t.readOnly)),i.push(z(n),z(r),z(e)),i.join(` `)}async function B(e){if(!R)return{stdout:``,stderr:`exec: shell bridge not available
|
|
233
|
-
`,exitCode:127};try{return await R(e)}catch(e){return{stdout:``,stderr:`exec: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function ye(e,t){let n=await B(ve(e,t));return{stdout:n.stdout||n.stderr,exitCode:n.exitCode}}async function V(e,t){let n=await fe(B,e,t);if(e===`fetch`){let e=n,t=atob(e.bodyBase64),r=new Uint8Array(t.length);for(let e=0;e<t.length;e++)r[e]=t.charCodeAt(e);return{...e,body:new TextDecoder(`utf-8`).decode(r)}}return n}var H=new WeakMap;function be(e,t){try{e.postMessage({type:`dip-device-event`,channel:`hid:inputreport`,payload:t},`*`)}catch{}}async function xe(e,t){let n=H.get(e);if(n||(n=new Map,H.set(e,n)),n.has(t))return;let r=await d(a(),t,n=>{let r=n.bytes instanceof Uint8Array?n.bytes:new Uint8Array(n.bytes);be(e,{handle:t,reportId:n.reportId,data:r})});n.set(t,r)}async function Se(e,t){let n=H.get(e);if(!n)return;let r=n.get(t);if(r){n.delete(t);try{await Promise.resolve(r())}catch{}}n.size===0&&H.delete(e)}function U(e){let t=H.get(e);if(t){for(let e of t.values())try{Promise.resolve(e()).catch(()=>{})}catch{}H.delete(e)}}function Ce(e){if(e instanceof Uint8Array)return e;if(e instanceof ArrayBuffer)return new Uint8Array(e);if(ArrayBuffer.isView(e)){let t=e;return new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}if(Array.isArray(e))return new Uint8Array(e);throw Error(`expected Uint8Array, ArrayBuffer, or number[]`)}async function we(e,t,n){let r=a();switch(t){case`list`:{let e=i();if(!e)throw Error(`WebHID is unavailable in this browser`);return te(r,e)}case`request`:{let e=i();if(!e)throw Error(`WebHID is unavailable in this browser`);return le(r,e,n[0]??[])}case`info`:return p(r,n[0]);case`open`:{let t=n[0];return await f(r,t),await xe(e,t),{ok:!0}}case`close`:{let t=n[0];return await Se(e,t),await re(r,t),{ok:!0}}case`sendReport`:{let e=n[0],t=n[1],i=Ce(n[2]),a=i.buffer.slice(i.byteOffset,i.byteOffset+i.byteLength);return await ce(r,e,t,a),{ok:!0}}default:throw Error(`hid: unknown op '${t}'`)}}async function Te(e,t){let n=o();switch(e){case`list`:{let e=s();if(!e)throw Error(`Web Serial is unavailable in this browser`);return u(n,e)}case`request`:{let e=s();if(!e)throw Error(`Web Serial is unavailable in this browser`);return m(n,e,t[0]??[])}case`info`:return se(n,t[0]);case`open`:{let e=t[0],r=t[1]??{baudRate:9600};return await l(n,e,r),{ok:!0}}case`close`:return await c(n,t[0]),{ok:!0};default:throw Error(`serial: unknown op '${e}'`)}}async function Ee(e,t){let n=ue();switch(e){case`list`:{let e=h();if(!e)throw Error(`WebUSB is unavailable in this browser`);return ae(n,e)}case`request`:{let e=h();if(!e)throw Error(`WebUSB is unavailable in this browser`);return ne(n,e,t[0]??[])}case`info`:return ee(n,t[0]);case`open`:return await oe(n,t[0]),{ok:!0};case`close`:return await ie(n,t[0]),{ok:!0};default:throw Error(`usb: unknown op '${e}'`)}}async function De(e,t,n,r){switch(t){case`hid`:return we(e,n,r);case`serial`:return Te(n,r);case`usb`:return Ee(n,r);default:throw Error(`unknown device channel '${t}'`)}}async function W(e,t){if(!e||typeof t.id!=`number`)return!1;let n=n=>{try{e.postMessage({...n,id:t.id},`*`)}catch{}};if(!O.has(e))return n({type:`dip-device-op-response`,error:`device access not allowed for this dip`}),!0;let r=t.channel;if(r!==`hid`&&r!==`serial`&&r!==`usb`)return n({type:`dip-device-op-response`,error:`unknown device channel '${r}'`}),!0;try{n({type:`dip-device-op-response`,result:await De(e,r,typeof t.op==`string`?t.op:``,Array.isArray(t.args)?t.args:[])})}catch(e){n({type:`dip-device-op-response`,error:e instanceof Error?e.message:String(e)})}return!0}async function G(e,t){if(!e||typeof t.id!=`number`)return!1;let n=n=>{try{e.postMessage({...n,id:t.id},`*`)}catch{}};if(!O.has(e))return n({type:`${t.type}-response`,error:`exec not allowed for this dip`}),!0;if(t.type===`dip-exec`)return n({type:`dip-exec-response`,result:await B(typeof t.cmd==`string`?t.cmd:``)}),!0;if(t.type===`dip-agent`)return n({type:`dip-agent-response`,result:await ye(typeof t.prompt==`string`?t.prompt:``,t.opts)}),!0;if(t.type===`dip-jsh`){try{n({type:`dip-jsh-response`,result:await V(typeof t.op==`string`?t.op:``,Array.isArray(t.args)?t.args:[])})}catch(e){n({type:`dip-jsh-response`,error:e instanceof Error?e.message:String(e)})}return!0}return!1}function K(e,t,n,r=!1){let i=F(t,!1,r);if(S)return Ne(e,i,n,r);let a=document.createElement(`iframe`);a.setAttribute(`sandbox`,`allow-scripts allow-same-origin`),a.style.cssText=`width:100%;border:none;overflow:hidden;display:block;`,a.srcdoc=i,e.appendChild(a),a.contentWindow&&(b(a.contentWindow),I.add(a.contentWindow),r&&O.add(a.contentWindow)),a.addEventListener(`load`,()=>{b(a.contentWindow),a.contentWindow&&(I.add(a.contentWindow),r&&O.add(a.contentWindow)),_()&&g(a)},{once:!0});let o=e=>{if(e.source!==a.contentWindow)return;let t=e.data;t?.type&&(t.type===`dip-lick`?n(t.action,t.data):t.type===`dip-height`?a.style.height=t.height+`px`:t.type===`dip-open-link`?J(t.url):t.type===`dip-picker-action`?Z(t,n):t.type===`dip-readfile`||t.type===`dip-exists`||t.type===`dip-stat`?q(a.contentWindow,t):t.type===`dip-exec`||t.type===`dip-agent`||t.type===`dip-jsh`?G(a.contentWindow,t):t.type===`dip-device-op`&&W(a.contentWindow,t))};window.addEventListener(`message`,o);let s=null;if(_()&&typeof IntersectionObserver<`u`){let e=!1,t=new IntersectionObserver(n=>{if(n[n.length-1].isIntersecting){if(e){e=!1;return}t.unobserve(a),g(a,()=>{e=!0,t.observe(a)})}});s=t,t.observe(a)}return{dispose(){s?.disconnect(),window.removeEventListener(`message`,o),v(a.contentWindow),a.contentWindow&&(I.delete(a.contentWindow),O.delete(a.contentWindow),U(a.contentWindow)),a.remove()}}}async function q(e,t){if(!e||typeof t.id!=`number`)return!1;let n=typeof t.path==`string`?t.path:``,r=n=>{try{e.postMessage({...n,id:t.id},`*`)}catch{}};if(!O.has(e))return r({type:`${t.type}-response`,error:`VFS access not allowed for this dip`}),!0;if(!D(n))return r({type:`${t.type}-response`,error:`VFS path not allowed: ${n}`}),!0;if(t.type===`dip-readfile`){let e=await T(n,!0);return e===null?(r({type:`dip-readfile-response`,error:`Read failed`}),!0):(r({type:`dip-readfile-response`,content:typeof e==`string`?e:new TextDecoder().decode(e)}),!0)}if(t.type===`dip-exists`)return r({type:`dip-exists-response`,exists:await T(n,!0)!==null}),!0;if(t.type===`dip-stat`){let e=await T(n,!1);return e===null?(r({type:`dip-stat-response`,error:`Stat failed`}),!0):(r({type:`dip-stat-response`,stat:{isFile:!0,isDirectory:!1,size:typeof e==`string`?e.length:e.byteLength,mtimeMs:0}}),!0)}return!1}function J(e){if(!(typeof e!=`string`||!e)&&/^(https?:|mailto:)/i.test(e))try{window.open(e,`_blank`,`noopener,noreferrer`)}catch{}}function Y(e,t){let n=[],r=e.querySelectorAll(`pre > code.language-shtml`);for(let e of r){let r=e.parentElement,i=e.textContent??``,a=document.createElement(`div`);a.className=`msg__dip`,r.replaceWith(a),n.push(K(a,i,t,!1))}let i=e.querySelectorAll(`img[src$=".shtml"]`);for(let e of i){let r=e.getAttribute(`src`);if(!r)continue;let i=document.createElement(`div`);i.className=`msg__dip`,e.alt&&i.setAttribute(`title`,e.alt),e.replaceWith(i);let a=new AbortController,o=null,s=!1;n.push({dispose(){s=!0,a.abort(),o&&=(o.dispose(),null)}});let c=r.startsWith(`/`),l=typeof navigator<`u`&&!!navigator.serviceWorker?.controller,u=c?`/preview${r}`:r,d=async()=>{if(c&&!l)return C(r,a.signal);let e;try{e=await fetch(u,{signal:a.signal})}catch(e){if(e?.name===`AbortError`)throw e;if(c)return C(r,a.signal);throw e}if(e.ok)return e.text();if(c)return C(r,a.signal);throw Error(`HTTP ${e.status}`)},f=c&&E(r);d().then(e=>{s||!i.isConnected||(o=K(i,e,t,f))}).catch(e=>{s||e?.name===`AbortError`||(i.textContent=`Failed to load dip: ${r}`,i.style.cssText=`padding:8px;font-size:12px;color:var(--s2-negative);font-family:var(--s2-font-mono)`)})}return n}function X(e){for(let t of e)try{t.dispose()}catch{}e.length=0}async function Z(e,t){let n=pe(e.data);if(S){await Oe(e.picker,e.action,n,t);return}switch(e.picker){case`directory`:await ke(e.action,t);return;case`usb-device`:await Ae(e.action,n,t);return;case`serial-port`:await je(e.action,n,t);return;case`hid-device`:await Me(e.action,n,t);return;default:t(e.action,e.data);return}}async function Oe(e,n,r,i){try{switch(e){case`directory`:{let{openMountPickerPopup:e}=await t(async()=>{let{openMountPickerPopup:e}=await import(`./mount-picker-popup-CVvcLs1V.js`);return{openMountPickerPopup:e}},__vite__mapDeps([0,1,2,3,4,5])),r=await e();r.cancelled?i(n,{cancelled:!0}):r.error?i(n,{error:r.error}):r.idbKey?i(n,{handleInIdb:!0,idbKey:r.idbKey,dirName:r.dirName??``}):i(n,{error:`mount picker returned no handle key`});return}case`usb-device`:{let{openUsbPickerPopup:e}=await t(async()=>{let{openUsbPickerPopup:e}=await import(`./usb-picker-B8B4LJT7.js`).then(e=>e.t);return{openUsbPickerPopup:e}},__vite__mapDeps([6,7,2,3,4,5,8])),a=await e(r);`cancelled`in a?i(n,{cancelled:!0}):`error`in a?i(n,{error:a.error}):i(n,{granted:!0,info:a.info});return}case`serial-port`:{let{openSerialPickerPopup:e}=await t(async()=>{let{openSerialPickerPopup:e}=await import(`./serial-picker-fzg2DxKj.js`).then(e=>e.t);return{openSerialPickerPopup:e}},__vite__mapDeps([9,7,2,3,4,5,8])),a=await e(r);`cancelled`in a?i(n,{cancelled:!0}):`error`in a?i(n,{error:a.error}):i(n,{granted:!0,info:a.info});return}case`hid-device`:{let{openHidPickerPopup:e}=await t(async()=>{let{openHidPickerPopup:e}=await import(`./hid-picker-C4WMZ0dN.js`).then(e=>e.t);return{openHidPickerPopup:e}},__vite__mapDeps([10,7,2,3,4,5,8])),a=await e(r);`cancelled`in a?i(n,{cancelled:!0}):`error`in a?i(n,{error:a.error}):i(n,{granted:!0,info:a.info});return}default:i(n,{error:`unknown picker kind: ${e??`(none)`}`});return}}catch(e){i(n,{error:e instanceof Error?e.message:String(e)})}}async function Q(e,t){let n=r();if(!n)return null;let i={current:null},a=t=>{let n=t.detail;n.kind===e&&(i.current=n)};n.addEventListener(`slicc-permission-deny`,a);try{let r=await n.request(e,t);if(r)return{ok:!0,grant:r};let a=i.current;return{ok:!1,reason:a?.reason??`error`,...a?.message?{message:a.message}:{}}}finally{n.removeEventListener(`slicc-permission-deny`,a)}}function $(e,t,n,r){if(t.reason===`cancelled`){r(e,{cancelled:!0});return}if(t.reason===`unavailable`){r(e,{error:n});return}r(e,{error:t.message??`unknown error`})}async function ke(e,n){let r=await Q(`filesystem`);if(!r){n(e,{error:`File System Access API not available`});return}if(!r.ok){$(e,r,`File System Access API not available`,n);return}let i=r.grant.handle,a=`pendingMount:dip-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`;try{let{storePendingHandle:e}=await t(async()=>{let{storePendingHandle:e}=await import(`./mount-picker-popup-CVvcLs1V.js`);return{storePendingHandle:e}},__vite__mapDeps([0,1,2,3,4,5]));await e(a,i)}catch(t){n(e,{error:`failed to store directory handle: ${t instanceof Error?t.message:String(t)}`});return}n(e,{handleInIdb:!0,idbKey:a,dirName:i.name})}async function Ae(e,n,r){let i=await Q(`usb`,{filters:n});if(!i){r(e,{error:`WebUSB is not available`});return}if(!i.ok){$(e,i,`WebUSB is not available`,r);return}let a=i.grant,{getSharedUsbRegistry:o,deviceToInfo:s}=await t(async()=>{let{getSharedUsbRegistry:e,deviceToInfo:t}=await import(`./usb-device-registry-CRsCisej.js`).then(e=>e.a);return{getSharedUsbRegistry:e,deviceToInfo:t}},__vite__mapDeps([11,7])),c=o().register(a.device);r(e,{granted:!0,handle:c,info:s(c,a.device)})}async function je(e,n,r){let i=await Q(`serial`,n.length?{filters:n}:void 0);if(!i){r(e,{error:`Web Serial is not available`});return}if(!i.ok){$(e,i,`Web Serial is not available`,r);return}let a=i.grant,o=await t(()=>import(`./serial-port-registry-CCqklAEr.js`).then(e=>e.o),__vite__mapDeps([12,7])),s=o.getSharedSerialRegistry(),c=s.register(a.port),l=s.get(c);r(e,{granted:!0,handle:c,info:l?o.deviceToInfo(c,l):{handle:c}})}async function Me(e,n,r){let i=await Q(`hid`,{filters:n});if(!i){r(e,{error:`WebHID is not available`});return}if(!i.ok){$(e,i,`WebHID is not available`,r);return}let a=i.grant,{getSharedHidRegistry:o,hidDeviceToInfo:s}=await t(async()=>{let{getSharedHidRegistry:e,hidDeviceToInfo:t}=await import(`./hid-device-registry-B2R-0rNt.js`).then(e=>e.a);return{getSharedHidRegistry:e,hidDeviceToInfo:t}},__vite__mapDeps([13,7])),c=o(),l=a.devices.map(e=>{let t=c.register(e);return s(t,e)}),u=l[0];r(e,{granted:!0,handle:u.handle,info:u,devices:l})}function Ne(e,t,n,r=!1){let i=document.createElement(`iframe`);i.src=chrome.runtime.getURL(`sprinkle-sandbox.html`),i.style.cssText=`width:100%;border:none;overflow:hidden;display:block;`,e.appendChild(i);let a=e=>{if(e.source!==i.contentWindow)return;let t=e.data;t?.type&&(t.type===`dip-lick`?n(t.action,t.data):t.type===`dip-height`?i.style.height=t.height+`px`:t.type===`dip-open-link`?J(t.url):t.type===`dip-readfile`||t.type===`dip-exists`||t.type===`dip-stat`?q(i.contentWindow,t):t.type===`dip-exec`||t.type===`dip-agent`||t.type===`dip-jsh`?G(i.contentWindow,t):t.type===`dip-device-op`?W(i.contentWindow,t):t.type===`dip-picker-action`&&Z(t,n))};return window.addEventListener(`message`,a),i.addEventListener(`load`,()=>{b(i.contentWindow),i.contentWindow&&(I.add(i.contentWindow),r&&O.add(i.contentWindow)),i.contentWindow?.postMessage({type:`dip-render`,srcdoc:t,isLight:y()},`*`)},{once:!0}),{dispose(){window.removeEventListener(`message`,a),v(i.contentWindow),i.contentWindow&&(I.delete(i.contentWindow),O.delete(i.contentWindow),U(i.contentWindow)),i.remove()}}}export{K as a,Y as i,x as n,X as r,L as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./logger-LESFN7Hj.js";import{t}from"./runtime-env-DadgceZk.js";import"./proxied-fetch-B0SF_J0b.js";import"./shared-CTdWt5ZU.js";import{f as n,p as r,r as i}from"./installer-7BWtTgd6.js";import"./runtime-env-Dc36nUmg.js";e(`speech:espeak`);const a=[`ort-wasm-simd-threaded.jsep.mjs`,`https://${["cdn","jsdelivr","net"].join(".")}/npm/onnxruntime-web@1.26.0-dev.20260416-b7804b056c/dist/ort-wasm-simd-threaded.jsep.wasm`,`ort-wasm-simd-threaded.mjs`,`https://${["cdn","jsdelivr","net"].join(".")}/npm/onnxruntime-web@1.26.0-dev.20260416-b7804b056c/dist/ort.wasm`,`ort-wasm-simd-threaded.asyncify.mjs`,`https://${["cdn","jsdelivr","net"].join(".")}/npm/onnxruntime-web@1.26.0-dev.20260416-b7804b056c/dist/ort-wasm-simd-threaded.asyncify.wasm`],o=e(`speech:ensure-assets`),s=`onnxruntime-web`,c=`espeak-ng`,l=[`espeak-ng.js`,`espeak-ng.wasm`],u=`/workspace`,d=t,f=a.filter(e=>!/\.(asyncify|jspi)\./.test(e));async function p(e,t){if((await Promise.all(f.map(t=>e.fs.exists(`/workspace/node_modules/onnxruntime-web/dist/${t}`)))).every(Boolean))return t?.({asset:s,phase:`present`}),!1;t?.({asset:s,phase:`staging`});let{errors:n}=await i([s],{fs:e.fs,fetch:e.fetch,cwd:u});if(n.length>0)throw Error(`failed to stage ${s} wasm runtime: ${n[0].error.message}`);return t?.({asset:s,phase:`done`}),!0}async function m(e,t){if((await Promise.all(l.map(t=>e.fs.exists(`/workspace/node_modules/espeak-ng/dist/${t}`)))).every(Boolean))return t?.({asset:c,phase:`present`}),!1;t?.({asset:c,phase:`staging`});let{errors:n}=await i([c],{fs:e.fs,fetch:e.fetch,cwd:u});if(n.length>0)throw Error(`failed to stage ${c} wasm: ${n[0].error.message}`);return t?.({asset:c,phase:`done`}),!0}async function h(e,t){try{return await m(e,t)}catch(e){return o.warn(`optional espeak-ng staging failed; non-English Kokoro voices may fall back`,e),!1}}async function g(e,t,i){let a=r(t,null,u),o=0,s=await n({fetch:e.fetch,fs:e.fs,repo:t,targetDir:a,progress:{onListed:({files:e,totalBytes:n})=>i?.({asset:t,phase:`listing`,filesLoaded:0,filesTotal:e.length,bytesLoaded:0,bytesTotal:n}),onFile:e=>{o+=e.bytes,i?.({asset:t,phase:e.status,file:e.file,filesLoaded:e.index,filesTotal:e.total,bytesLoaded:o})}}});return i?.({asset:t,phase:`done`,filesLoaded:s.files.length,filesTotal:s.files.length,bytesLoaded:o,bytesTotal:o}),{repo:t,downloaded:s.downloaded,skipped:s.skipped}}async function _(e,t){if(d())return{skipped:!0,ortStaged:!1,espeakStaged:!1,repos:[]};let n=await p(e,t),r=e.repos??[`onnx-community/whisper-tiny`,`onnx-community/Kokoro-82M-v1.0-ONNX`],i=[];for(let n of r)i.push(await g(e,n,t));let a=await h(e,t);return o.info(`speech assets staged`,{ortStaged:n,espeakStaged:a,repos:i.length}),{skipped:!1,ortStaged:n,espeakStaged:a,repos:i}}export{_ as ensureSpeechAssetsStaged};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{r as t}from"./src-XLzS9HFL.js";var n=e({getTranscriptExportService:()=>a,registerTranscriptExportService:()=>i}),r=null;function i(e){return r=e,()=>{r===e&&(r=null)}}function a(){if(!r)throw new t(`session-not-found`);return r}export{i as n,n as t};
|