sliccy 6.256.12 → 6.256.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ui/.vite/manifest.json +257 -257
- package/dist/ui/assets/{account-store-DNqYoutv.js → account-store-BL_8ChTq.js} +1 -1
- package/dist/ui/assets/{account-store-DB5jhIwX.js → account-store-CRulNb41.js} +1 -1
- package/dist/ui/assets/{adobe-HrIC2otU.js → adobe-253xKg67.js} +1 -1
- package/dist/ui/assets/{adobe-D48q7QBn.js → adobe-DnEnb36b.js} +1 -1
- package/dist/ui/assets/agent-message-to-chat-CGO6oI4A.js +7 -0
- package/dist/ui/assets/{agent-panels-DFOxK1C_.js → agent-panels-wW9dyBKG.js} +1 -1
- package/dist/ui/assets/agent-session-archive-CZN0w-ke.js +2 -0
- package/dist/ui/assets/{almost-bash-shell-headless-O2r1SF6g.js → almost-bash-shell-headless-BU19g3qu.js} +12 -12
- package/dist/ui/assets/{apply-layout-B37jD_Ge.js → apply-layout-CKNWtXfd.js} +1 -1
- package/dist/ui/assets/{azure-openai-4kkN4C3Q.js → azure-openai-BDBxTYAw.js} +1 -1
- package/dist/ui/assets/{azure-openai-Dk4T6snQ.js → azure-openai-BvYzMIj9.js} +1 -1
- package/dist/ui/assets/{cdp-CSLN_b8q.js → cdp-Dsm1GADb.js} +1 -1
- package/dist/ui/assets/{cerebras-BgE-UvEm.js → cerebras-BXxGJuif.js} +1 -1
- package/dist/ui/assets/{cerebras-C-Lf6WUk.js → cerebras-BcMNzJi3.js} +1 -1
- package/dist/ui/assets/{composer-speech-rpzLr-ur.js → composer-speech-Bs3FbM-i.js} +1 -1
- package/dist/ui/assets/{connect-surface-B9shnjr7.js → connect-surface-Ba3Ke5aM.js} +1 -1
- package/dist/ui/assets/{directed-approval-Cq241THp.js → directed-approval-C5W3WJVa.js} +1 -1
- package/dist/ui/assets/{emscripten-vfs-hook-7VkC0nrA.js → emscripten-vfs-hook-CtwAEh72.js} +1 -1
- package/dist/ui/assets/{export-spool-BM-FG26Y.js → export-spool-twZZWurf.js} +1 -1
- package/dist/ui/assets/{exporter-deps-DEd_7AYZ.js → exporter-deps-xnNr83vG.js} +2 -2
- package/dist/ui/assets/frozen-archive-writer-EZsuL49i.js +8 -0
- package/dist/ui/assets/frozen-archive-writer-qYFDiThA.js +8 -0
- package/dist/ui/assets/{frozen-session-delete-BSc-IGQS.js → frozen-session-delete-CVNvI90e.js} +1 -1
- package/dist/ui/assets/{frozen-session-identity-DhVXDjBR.js → frozen-session-identity-B8lRRYtw.js} +1 -1
- package/dist/ui/assets/{frozen-session-identity-CVGqg_js.js → frozen-session-identity-CLil11AR.js} +1 -1
- package/dist/ui/assets/{gelatiere-unit-B62LlbDu.js → gelatiere-unit-CwQ4Z-8u.js} +1 -1
- package/dist/ui/assets/{github-CxoqPCXy.js → github-CZUj50jg.js} +1 -1
- package/dist/ui/assets/{github-copilot-B1_NjWw6.js → github-copilot-CRmSA8Li.js} +1 -1
- package/dist/ui/assets/{github-copilot-f_kE1PYS.js → github-copilot-DkvpLiRx.js} +1 -1
- package/dist/ui/assets/{github-iwg9qRv2.js → github-jLSAxETr.js} +1 -1
- package/dist/ui/assets/{hear-COaYyMur.js → hear-_yh9fTlw.js} +1 -1
- package/dist/ui/assets/{js-realm-worker-h1Flg7yk.js → js-realm-worker-J9nx5Q-j.js} +2 -2
- package/dist/ui/assets/{jsh-executor-ck6PbxPZ.js → jsh-executor-mI9O-wx4.js} +3 -3
- package/dist/ui/assets/{kernel-worker-DLG9IcIa.js → kernel-worker-BQddJN6m.js} +73 -80
- package/dist/ui/assets/{lick-ws-bridge-CJxp9zKB.js → lick-ws-bridge-CXIyIC0_.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-VsiuL_5m.js → lick-ws-bridge-CuBkByJW.js} +1 -1
- package/dist/ui/assets/live-session-curation-Bhnb6z_B.js +15 -0
- package/dist/ui/assets/{live-session-curation-BjZ3N2HU.js → live-session-curation-DoZ7BwQd.js} +1 -1
- package/dist/ui/assets/live-session-snapshot-Cilj3zqK.js +1 -0
- package/dist/ui/assets/{local-llm-BB5CRGt3.js → local-llm-B3dSUNOb.js} +1 -1
- package/dist/ui/assets/{local-llm-fWWsG1Tz.js → local-llm-BcuXGox2.js} +1 -1
- package/dist/ui/assets/{main-CzE7HAeM.js → main-B9uLwabk.js} +3 -3
- package/dist/ui/assets/{main-cherry-hTMbq9Hb.js → main-cherry-CpbKxiZK.js} +1 -1
- package/dist/ui/assets/{mcp-command-B78QHc-8.js → mcp-command-JNxmsQLt.js} +10 -10
- package/dist/ui/assets/{memory-curation-seam-DYa8T4Ho.js → memory-curation-seam-ByUA3cmh.js} +1 -1
- package/dist/ui/assets/{memory-health-CJw1a-TZ.js → memory-health-wNnvD0kB.js} +1 -1
- package/dist/ui/assets/{memory-write-execute-D9whsdb7.js → memory-write-execute-DrvvvhKi.js} +1 -1
- package/dist/ui/assets/{merge-folded-cost-into-frozen-rfS2nsWO.js → merge-folded-cost-into-frozen-BGSL3jVL.js} +1 -1
- package/dist/ui/assets/{migration-s8QYUSWA.js → migration-DZenEQ01.js} +1 -1
- package/dist/ui/assets/{new-session-DZTrom09.js → new-session-BPCfvA6j.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-CMl6k4oQ.js → oauth-bootstrap-DF2A9FNH.js} +2 -2
- package/dist/ui/assets/{onboarding-orchestrator-CcWlQTX7.js → onboarding-orchestrator-Du1IyfmQ.js} +1 -1
- package/dist/ui/assets/{openai-codex-BoT1q8oZ.js → openai-codex-C2c3eydK.js} +1 -1
- package/dist/ui/assets/{openai-codex-DMJvA3T3.js → openai-codex-DmWHPdvs.js} +1 -1
- package/dist/ui/assets/{openrouter-BQGA-6JJ.js → openrouter-BCX02Yk7.js} +1 -1
- package/dist/ui/assets/{openrouter-u24KkkWI.js → openrouter-XC9tgI9x.js} +1 -1
- package/dist/ui/assets/{openrouter-free-CChTnFC4.js → openrouter-free-1asghv4A.js} +1 -1
- package/dist/ui/assets/{openrouter-free-CtR7642v.js → openrouter-free-BQMEmEP2.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-un2ePpPS.js → openrouter-oauth-CZNb6ySK.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-CE_63yeC.js → openrouter-oauth-CyATq8lK.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-CuwdFaJW.js → panel-rpc-handlers-Z_PY6nKh.js} +2 -2
- package/dist/ui/assets/{panelize-shell-BPfNZ0OR.js → panelize-shell-CNPJupm7.js} +1 -1
- package/dist/ui/assets/{pi-edit-execution-CrY167D2.js → pi-edit-execution-aPxQmnfw.js} +1 -1
- package/dist/ui/assets/{profile-directory-opfs-CwWHZ1mI.js → profile-directory-opfs-DfDAT732.js} +1 -1
- package/dist/ui/assets/{profile-export-ArlQAdGa.js → profile-export-BdEdJ251.js} +2 -2
- package/dist/ui/assets/{profile-export-deps-BildqbH-.js → profile-export-deps-DpT8pwWG.js} +2 -2
- package/dist/ui/assets/{provider-BX_68fp4.js → provider-B2ILr1Oc.js} +1 -1
- package/dist/ui/assets/{provider-kmIAfYef.js → provider-C7-ZDo9_.js} +1 -1
- package/dist/ui/assets/{provider-settings-rakWajBK.js → provider-settings-HeCMxfPA.js} +1 -1
- package/dist/ui/assets/provider-store-access-BYN-eNh6.js +1 -0
- package/dist/ui/assets/provider-store-access-BfpNwGx-.js +1 -0
- package/dist/ui/assets/{providers--JWoOZZo.js → providers-B6bwctI0.js} +2 -2
- package/dist/ui/assets/{providers-DtXWtB--.js → providers-DqI0wt99.js} +1 -1
- package/dist/ui/assets/{quick-llm-BjHK8kJA.js → quick-llm-Bhg1Qsvk.js} +1 -1
- package/dist/ui/assets/{realm-inprocess-DgAcsNaH.js → realm-inprocess-DR9gVLt3.js} +2 -2
- package/dist/ui/assets/{realm-unhandled-rejections-C9CS4PW8.js → realm-unhandled-rejections-BZJxRO8M.js} +1 -1
- package/dist/ui/assets/{realm-unhandled-rejections-DID14bBr.js → realm-unhandled-rejections-Bb1RQBWs.js} +1 -1
- package/dist/ui/assets/{remote-terminal-view-HtBDeIWT.js → remote-terminal-view-DLgfQYzJ.js} +2 -2
- package/dist/ui/assets/{restore-CchSLWcg.js → restore-BLWYXa-O.js} +1 -1
- package/dist/ui/assets/{run-Bbf9LoOE.js → run-BJVRJfry.js} +1 -1
- package/dist/ui/assets/{run-Czcf-OLI.js → run-CHGn5R2p.js} +2 -2
- package/dist/ui/assets/{run-CWb5gfHY.js → run-CncM0gvM.js} +1 -1
- package/dist/ui/assets/{run-BOu98KTH.js → run-DDKWaVLJ.js} +2 -2
- package/dist/ui/assets/{serve-command-CXQerJuf.js → serve-command-DvTFPR-H.js} +2 -2
- package/dist/ui/assets/{serve-runtime-CjGzH2QQ.js → serve-runtime-Dc11AJBu.js} +1 -1
- package/dist/ui/assets/{session-command-memory-DG5ydqh9.js → session-command-memory-2JOGo6yD.js} +2 -2
- package/dist/ui/assets/{session-jsonl-Cib34fXS.js → session-jsonl-Du5hJR-Y.js} +1 -1
- package/dist/ui/assets/{session-jsonl-VIrDPkzT.js → session-jsonl-ZG0juWbu.js} +1 -1
- package/dist/ui/assets/{session-search-index-CE0g7zKf.js → session-search-index-QQ1sxRWT.js} +2 -2
- package/dist/ui/assets/{sessions-C9JcENTo.js → sessions-DWl_wZV3.js} +1 -1
- package/dist/ui/assets/{setup-feature-flags-remote-DzEq1lQ0.js → setup-feature-flags-remote-CZb8ym_6.js} +1 -1
- package/dist/ui/assets/{setup-model-catalog-CkKaRw7P.js → setup-model-catalog-DHrO2Kfp.js} +1 -1
- package/dist/ui/assets/{silent-renew-backoff-CH8OLNVg.js → silent-renew-backoff-nrppuh6T.js} +1 -1
- package/dist/ui/assets/slicc-version-D0nsefc_.js +1 -0
- package/dist/ui/assets/{snapshot-store-Cxzssf1H.js → snapshot-store-DCt_qbAe.js} +2 -2
- package/dist/ui/assets/{soundscape-BrcQQCXQ.js → soundscape-B2yoSkQB.js} +1 -1
- package/dist/ui/assets/{speak-FP7e2aGZ.js → speak-DZwNiIko.js} +1 -1
- package/dist/ui/assets/{sprinkle-manager-DdFqnPA_.js → sprinkle-manager-DxyX3NbF.js} +1 -1
- package/dist/ui/assets/{sprinkle-renderer-CpaDAgwf.js → sprinkle-renderer-DKpjowk6.js} +1 -1
- package/dist/ui/assets/{sudo-BC4uXyky.js → sudo-GkFEMFPC.js} +1 -1
- package/dist/ui/assets/{supervisor-0pR5BdFe.js → supervisor-C73lAuSe.js} +1 -1
- package/dist/ui/assets/{sync-dialog-DtKE5dLz.js → sync-dialog-BnOTTgci.js} +1 -1
- package/dist/ui/assets/{transformers-env-LuVjF3zC.js → transformers-env-B-1kLQRQ.js} +1 -1
- package/dist/ui/assets/{tray-leader-SHmhYp7O.js → tray-leader-DmmGAndB.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-2Yo7S9EJ.js → tray-leave-runtime-BDzrqGlh.js} +1 -1
- package/dist/ui/assets/{tray-sidecar-BizIb_0V.js → tray-sidecar-CbjBYp0n.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-yn0T8Iq3.js → upgrade-detection-_GX3hzxQ.js} +1 -1
- package/dist/ui/assets/{upgrade-to-seven-DC-ajzXj.js → upgrade-to-seven-BqcS19nh.js} +2 -2
- package/dist/ui/assets/{voice-reply-OgbTWXcM.js → voice-reply-BnKAiPTl.js} +1 -1
- package/dist/ui/assets/{wc-attach-CVffqLqy.js → wc-attach-BqpBnkA0.js} +2 -2
- package/dist/ui/assets/{wc-browser-C6-8Pzx5.js → wc-browser-CF0O-Ri0.js} +1 -1
- package/dist/ui/assets/{wc-computers-Cx4EZhjC.js → wc-computers-BX8DYCQq.js} +1 -1
- package/dist/ui/assets/{wc-detached-DUK4MOdm.js → wc-detached-C0OfGsMQ.js} +1 -1
- package/dist/ui/assets/{wc-extension-Bn4RKL4i.js → wc-extension-BMQL0I9I.js} +2 -2
- package/dist/ui/assets/{wc-follower-B8qcjZUV.js → wc-follower-Co4brJFi.js} +3 -3
- package/dist/ui/assets/{wc-follower-oauth-1EU9vHY0.js → wc-follower-oauth-Pzit-Xte.js} +2 -2
- package/dist/ui/assets/{wc-gelatiere-CDGVz4PK.js → wc-gelatiere-Cb7NYNC8.js} +1 -1
- package/dist/ui/assets/wc-live-oqKW7QrK.js +248 -0
- package/dist/ui/assets/{wc-nav-Bex4AT9o.js → wc-nav-CxPbGD5_.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-DzdhdUh0.js → wc-onboarding-DYltx5C7.js} +2 -2
- package/dist/ui/assets/{wc-permissions-mW3iQYTV.js → wc-permissions-X7QRMVtU.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-B3qFYO0l.js → wc-placeholder-DLt-co6P.js} +2 -2
- package/dist/ui/assets/{wc-profile-export-BH_hv2ui.js → wc-profile-export-DaY7L-Io.js} +3 -3
- package/dist/ui/assets/{wc-secret-request-BKuDj0jW.js → wc-secret-request-B5OTif8D.js} +1 -1
- package/dist/ui/assets/{wc-settings-CVsuWAQ1.js → wc-settings-CH3Oe1cT.js} +3 -3
- package/dist/ui/assets/{wc-shell-D5wVSx0r.js → wc-shell-B6egqVH1.js} +3 -3
- package/dist/ui/assets/{wc-shortcut-config-Ca0UN1Aj.js → wc-shortcut-config-CEc1903E.js} +1 -1
- package/dist/ui/assets/{wc-sprinkles-CBTKiatd.js → wc-sprinkles-BHIC0rGC.js} +2 -2
- package/dist/ui/assets/{wc-transcript-export-DcGtK0x1.js → wc-transcript-export-BduFFwnK.js} +2 -2
- package/dist/ui/assets/{wc-tray-DrkwQH2B.js → wc-tray-C7h0Rxkp.js} +4 -4
- package/dist/ui/assets/{wc-unit-context-kfFcXXnc.js → wc-unit-context-BpAIa5HN.js} +1 -1
- package/dist/ui/assets/welcome-detection-C4QBcXlF.js +1 -0
- package/dist/ui/assets/{whisper-session-7pJLsYTQ.js → whisper-session-DAFwIDHy.js} +2 -2
- package/dist/ui/assets/{xai-grok-DxlcaZW6.js → xai-grok-BTQg_O4T.js} +1 -1
- package/dist/ui/assets/{xai-grok-DeeOVfG_.js → xai-grok-DNR48o_C.js} +1 -1
- package/dist/ui/assets/zip-stream-iQd4PFgh.js +1 -0
- package/dist/ui/index.html +3 -3
- package/dist/ui/packages/webapp/index.html +3 -3
- package/dist/ui/packages/webapp/upgrade-to-seven.html +3 -3
- package/dist/ui/upgrade-to-seven.html +3 -3
- package/package.json +1 -1
- package/dist/ui/assets/archive-redaction-Bi6veJCs.js +0 -1
- package/dist/ui/assets/frozen-archive-writer-BjBi0ClB.js +0 -8
- package/dist/ui/assets/frozen-archive-writer-DEBCxy3Y.js +0 -8
- package/dist/ui/assets/live-session-curation-B1dM4FOC.js +0 -15
- package/dist/ui/assets/live-session-snapshot-CGkkk8Ee.js +0 -1
- package/dist/ui/assets/provider-store-access-CJkjiyeF.js +0 -1
- package/dist/ui/assets/provider-store-access-DGwsDsmo.js +0 -1
- package/dist/ui/assets/slicc-version-BOjQKoXu.js +0 -1
- package/dist/ui/assets/wc-live-Dhd7KQf8.js +0 -248
- package/dist/ui/assets/welcome-detection-D0VzTAVZ.js +0 -1
- package/dist/ui/assets/zip-stream-Ca3Bq_Cz.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./logger-Cx6Y120U.js";import{n as t,t as n}from"./tray-leader-status-BPM2zVsj.js";import{n as r,r as i,t as a}from"./lick-urls-CgPiVwD-.js";import{v as o}from"./kernel-worker-
|
|
1
|
+
import{t as e}from"./logger-Cx6Y120U.js";import{n as t,t as n}from"./tray-leader-status-BPM2zVsj.js";import{n as r,r as i,t as a}from"./lick-urls-CgPiVwD-.js";import{v as o}from"./kernel-worker-BQddJN6m.js";const s=e(`lick-ws-bridge`);function c(e){if(e.stopped)return;let t;try{t=e.wsFactory(e.wsUrl)}catch(t){s.error(`Failed to construct lick WebSocket`,{url:e.wsUrl,error:t instanceof Error?t.message:String(t)}),l(e,`construct-threw`);return}e.socket=t,t.onopen=()=>{e.consecutiveFailures>0?s.info(`Lick WebSocket recovered`,{attempts:e.consecutiveFailures}):s.info(`Lick WebSocket connected`),e.consecutiveFailures=0,e.unrecoverableSignalled=!1},t.onmessage=n=>{d(e,t,n.data).catch(e=>{let t=typeof n.data==`string`?n.data.slice(0,200):`[non-string payload]`;s.error(`Failed to process lick message`,{error:e instanceof Error?e.message:String(e),preview:t})})},t.onclose=n=>{if(e.socket===t&&(e.socket=null),e.stopped)return;let r=n.reason?` reason=${JSON.stringify(n.reason)}`:``;l(e,`disconnected code=${n.code}${r}`)},t.onerror=t=>{let n=t.target;s.error(`Lick WebSocket error`,{url:e.wsUrl,readyState:n?.readyState,eventType:t.type})}}function l(e,t){if(e.reconnectHandle!=null){s.debug(`Lick WS failure during pending reconnect — keeping existing timer`,{cause:t});return}e.consecutiveFailures++;let n=o({attempt:e.consecutiveFailures-1,baseMs:e.baseDelay,capMs:6e4}),r={url:e.wsUrl,attempt:e.consecutiveFailures,cause:t,retryInMs:n};if(e.consecutiveFailures>=3?s.error(`Lick WebSocket still down`,r):s.warn(`Lick WebSocket down`,r),e.consecutiveFailures===20&&!e.unrecoverableSignalled){e.unrecoverableSignalled=!0;try{e.lickManager.emitEvent({type:`session-reload`,targetScoop:void 0,timestamp:(/* @__PURE__ */ new Date()).toISOString(),body:{reason:`lick-ws-bridge-down`,url:e.wsUrl,attempts:e.consecutiveFailures}})}catch(e){s.error(`Failed to emit lick-ws-bridge-down signal`,{error:e instanceof Error?e.message:String(e)})}}u(e,n)}function u(e,t){e.stopped||e.reconnectHandle!=null||(e.reconnectHandle=e.setTimer(()=>{e.reconnectHandle=null,c(e)},t))}async function d(e,t,n){let r=JSON.parse(typeof n==`string`?n:String(n));if(r.requestId){let n=r.requestId,i=await _(e,r,n);if(e.stopped||e.socket!==t||t.readyState!==1){s.warn(`Lick reply dropped — socket changed/closed mid-request`,{type:r.type,requestId:n});return}try{t.send(JSON.stringify(i))}catch(e){s.error(`ws.send() failed delivering lick reply`,{type:r.type,requestId:n,error:e instanceof Error?e.message:String(e)})}return}if(r.type===`webhook_event`){f(e.lickManager,r);return}if(r.type===`navigate_event`){m(e.lickManager,r);return}r.type===`hostfs_invalidate`&&g(e,r)}function f(e,t){let n=typeof t.webhookId==`string`?t.webhookId:null;if(!n)return s.error(`Malformed webhook_event from lick-ws`,{receivedKeys:Object.keys(t)}),`malformed`;let r=t.headers&&typeof t.headers==`object`?t.headers:{};try{return e.handleWebhookEvent(n,r,t.body)}catch(e){return s.error(`Webhook event dispatch failed`,{webhookId:n,error:e instanceof Error?e.message:String(e)}),`failed`}}function p(e){let t=typeof e.verb==`string`?e.verb:null,n=typeof e.target==`string`?e.target:null,r=typeof e.url==`string`&&e.url.length>0?e.url:null;if(t!==`handoff`&&t!==`upskill`||!n||!r)return null;let i={url:r,verb:t,target:n};return typeof e.instruction==`string`&&(i.instruction=e.instruction),typeof e.branch==`string`&&(i.branch=e.branch),typeof e.path==`string`&&(i.path=e.path),typeof e.title==`string`&&(i.title=e.title),{type:`navigate`,navigateUrl:r,targetScoop:void 0,timestamp:typeof e.timestamp==`string`?e.timestamp:(/* @__PURE__ */ new Date()).toISOString(),body:i}}function m(e,t){let n=p(t);if(!n){s.debug(`navigate_event dropped — invalid payload`,{hasVerb:typeof t.verb==`string`,hasTarget:typeof t.target==`string`,hasUrl:typeof t.url==`string`&&t.url.length>0});return}e.emitEvent(n)}function h(e){if(typeof e.mount!=`string`||e.mount.length===0)return null;let t=e.paths,n=[];if(Array.isArray(t))for(let e of t)typeof e==`string`&&n.push(e);return{type:`hostfs_invalidate`,mount:e.mount,paths:n,timestamp:typeof e.timestamp==`string`?e.timestamp:void 0}}function g(e,t){let n=h(t);if(!n){s.debug(`hostfs_invalidate dropped — invalid payload`,{hasMount:typeof t.mount==`string`&&t.mount.length>0,pathsIsArray:Array.isArray(t.paths)});return}try{e.options.onHostfsInvalidate?.(n)}catch(e){s.warn(`hostfs_invalidate handler threw`,{mount:n.mount,error:e instanceof Error?e.message:String(e)})}}async function _(e,t,r){let{lickManager:i}=e;try{switch(t.type){case`list_webhooks`:return{type:`response`,requestId:r,data:i.listWebhooks().map(t=>({...t,url:v(e,t.id)}))};case`create_webhook`:{let n=await i.createWebhook(t.name||`default`,t.scoop,t.filter);return{type:`response`,requestId:r,data:{...n,url:v(e,n.id)}}}case`webhook_event`:return{type:`response`,requestId:r,data:{disposition:f(i,t)}};case`delete_webhook`:return await i.deleteWebhook(t.id)?{type:`response`,requestId:r,data:{ok:!0}}:{type:`response`,requestId:r,data:{error:`Webhook not found`}};case`list_crontasks`:return{type:`response`,requestId:r,data:i.listCronTasks()};case`create_crontask`:if(!t.name)throw Error(`name is required`);if(!t.cron)throw Error(`cron is required`);return{type:`response`,requestId:r,data:await i.createCronTask(t.name,t.cron,t.scoop,t.filter)};case`delete_crontask`:return await i.deleteCronTask(t.id)?{type:`response`,requestId:r,data:{ok:!0}}:{type:`response`,requestId:r,data:{error:`Cron task not found`}};case`tray_status`:{let e=n();return{type:`response`,requestId:r,data:{state:e.state,joinUrl:e.session?.joinUrl??null,workerBaseUrl:e.session?.workerBaseUrl??null,trayId:e.session?.trayId??null}}}default:return{type:`response`,requestId:r,error:`Unknown request type: ${t.type}`}}}catch(e){return{type:`response`,requestId:r,error:e instanceof Error?e.message:String(e)}}}function v(e,n){let a=t().session;return a?.webhookUrl?r(a.webhookUrl,n):e.webhookOriginOverride?`${e.webhookOriginOverride}/webhooks/${n}`:i(e.options.locationHref,n)}function y(e){if(e.stopped)return;e.stopped=!0,e.reconnectHandle!=null&&(e.clearTimer(e.reconnectHandle),e.reconnectHandle=null);let t=e.socket;if(e.socket=null,t)try{t.close()}catch(e){t.readyState!==3&&t.readyState!==2&&s.warn(`Lick socket close() threw before terminal state`,{readyState:t.readyState,error:e instanceof Error?e.message:String(e)})}}function b(e,t){try{new URL(t.locationHref)}catch(e){throw Error(`startLickWsBridge: invalid locationHref ${JSON.stringify(t.locationHref)}: ${e instanceof Error?e.message:String(e)}`)}let n=typeof t.lickWsUrl==`string`&&t.lickWsUrl.length>0?t.lickWsUrl:a(t.locationHref),r=null;if(typeof t.lickWsUrl==`string`&&t.lickWsUrl.length>0)try{let e=new URL(t.lickWsUrl);r=`${e.protocol===`wss:`?`https:`:`http:`}//${e.host}`}catch{r=null}let i={lickManager:e,options:t,wsUrl:n,webhookOriginOverride:r,baseDelay:t.reconnectDelayMs??3e3,wsFactory:t.webSocketFactory??(e=>new WebSocket(e)),setTimer:t.setTimeoutFn??setTimeout.bind(globalThis),clearTimer:t.clearTimeoutFn??clearTimeout.bind(globalThis),stopped:!1,socket:null,reconnectHandle:null,consecutiveFailures:0,unrecoverableSignalled:!1};return c(i),{stop(){y(i)}}}export{b as startLickWsBridge};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./logger-dqckiMJt.js";import"./logger-BuvZB4wn.js";import"./tray-leader-
|
|
1
|
+
import{t as e}from"./logger-dqckiMJt.js";import"./logger-BuvZB4wn.js";import"./tray-leader-DmmGAndB.js";e(`lick-ws-bridge`);function t(e){let t=typeof e.verb==`string`?e.verb:null,n=typeof e.target==`string`?e.target:null,r=typeof e.url==`string`&&e.url.length>0?e.url:null;if(t!==`handoff`&&t!==`upskill`||!n||!r)return null;let i={url:r,verb:t,target:n};return typeof e.instruction==`string`&&(i.instruction=e.instruction),typeof e.branch==`string`&&(i.branch=e.branch),typeof e.path==`string`&&(i.path=e.path),typeof e.title==`string`&&(i.title=e.title),{type:`navigate`,navigateUrl:r,targetScoop:void 0,timestamp:typeof e.timestamp==`string`?e.timestamp:new Date().toISOString(),body:i}}function n(e){let t=typeof e.discoveryOrigin==`string`?e.discoveryOrigin:null,n=e.discoveryKind===`ai-catalog`||e.discoveryKind===`llms-txt`?e.discoveryKind:null,r=typeof e.discoveryUrl==`string`&&e.discoveryUrl.length>0?e.discoveryUrl:null;if(!t||!n||!r)return null;let i=typeof e.url==`string`?e.url:void 0;return{type:`discovery`,discoveryOrigin:t,discoveryKind:n,discoveryUrl:r,discoverySource:`live-navigation`,targetScoop:void 0,timestamp:typeof e.timestamp==`string`?e.timestamp:new Date().toISOString(),body:{origin:t,kind:n,url:r,...i?{pageUrl:i}:{}}}}export{n as mapDiscoveryPayloadToLickEvent,t as mapNavigatePayloadToLickEvent};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import{t as e}from"./logger-dqckiMJt.js";import{g as t,h as n}from"./core-BXRpM6QF.js";import"./feature-flags-DDJdMcuw.js";import"./account-store-CRulNb41.js";import{T as r,l as i,v as a,w as o,x as s,y as c}from"./zip-stream-iQd4PFgh.js";import{t as l}from"./MEMORY-B9cGngY_.js";import{t as u}from"./types-D8gIX-W-.js";import{dt as d,ft as f,ht as p,mt as ee,pt as te,ut as ne}from"./wc-shell-B6egqVH1.js";import{l as re,m as ie,n as m,o as h}from"./frozen-archive-writer-EZsuL49i.js";import{n as g,t as ae}from"./thinking-level-DCJktR5U.js";var _=`/etc/MEMORY.md`,oe=4e3,se=2e3;function v(e){return Math.round(oe+se*Math.log2((Number.isFinite(e)&&e>=0?e:0)+2))}var ce=`abject.abortive.abrasive.absolute.abstruse.abundant.abyssal.accessible.acerbic.acrid.adamant.adept.adlerian.adornian.adroit.adventurous.aeolian.aerated.aesthetic.affable.aged.ageless.agile.airborne.airlocked.airy.akkadian.alabaster.alacritous.alert.alien.alloyed.allusive.aloof.alpha.alpine.alternate.altruistic.amaranthine.amber.ambidextrous.ambivalent.ambrosial.amiable.amorphous.ample.analog.analytical.ancestral.ancient.angelic.animated.animist.anomalous.antediluvian.antic.antlered.apollinairian.apollonian.apt.aquatic.arbitrary.arcadian.arcane.archaic.archimedean.ardent.arduous.arendtian.argent.argentine.argive.aristotelian.armstrongian.aromatic.arresting.artful.arthurian.articulate.artificial.artisanal.artless.ascetic.ashen.ashy.asimovian.aspiring.assiduous.assyrian.asteroidal.astral.astute.asynchronous.athenian.atlantean.atomic.attentive.attic.audacious.audenesque.augmented.august.augustan.aureate.auric.auroral.austenian.austere.austral.authentic.autonomous.autumnal.avalonian.avid.avuncular.aztec.azure.babbagean.babylonian.bacchic.bachian.bactrian.ballardian.ballistic.balmy.banksian.barefoot.barreled.barthesian.bartokian.bashy.baudelairean.bayesian.beatific.beckettesque.beckettian.beethovenian.beguiling.bellicose.bemused.benevolent.benign.benjaminian.bergmanesque.beta.bewitched.binary.bionic.bismarckian.bitter.bitwise.blackened.blakean.blameless.bland.blazar.blazing.blended.blessed.blissful.blistered.blithe.blooming.blunt.blustery.boeotian.boggy.bohrian.boingy.boisterous.bold.bolted.bombastic.bonny.boolean.boreal.borgesian.borgian.bosky.botticellian.bottled.bouncy.boundless.bountiful.bourbon.bradburyan.brahmsian.braised.brambly.brash.brave.brazen.bready.breathless.brechtian.breezy.briared.briery.bright.brilliant.brined.briny.brisk.bristling.briton.brittenesque.broadband.brontean.bronzed.brooding.browned.browningesque.brucknerian.brumal.brusque.bubbling.bubbly.bucolic.budding.bunuelian.buoyant.burnished.burnt.buttered.buttery.bygone.byronic.bytewise.byzantine.cacophonous.caesarean.callow.calm.candescent.candid.candied.canny.cantorian.capable.capricious.caramelized.caravaggesque.carbon.carefree.carolingian.cartesian.carved.casked.cast.cavafian.cavalier.celebrated.celestial.celtic.ceramic.cerebral.ceremonious.cerulean.cervantine.cezannesque.chagallian.chalky.chaplinesque.charcoal.charismatic.charmed.charming.charred.chaucerian.cheeky.cheerful.chekhovian.cherished.cherubic.chewy.chilled.chilly.chimerical.chipper.chirpy.chivalrous.chopinesque.chromospheric.chronal.chthonic.chubby.chunky.churchillian.cimmerian.cindered.circumspect.circumstellar.citrusy.civil.clandestine.clangy.clarified.clarkean.classic.clement.clever.cloaked.clockwork.clompy.cloned.cloudlike.cloudy.clunky.clustered.coastal.cobalt.cognitive.coherent.coleridgean.colossal.coltranesque.comely.cometary.compiled.complacent.composite.concurrent.conradian.constablean.convivial.copernican.copious.coplandesque.cordial.corinthian.corked.cornelian.coronal.cortical.cosmic.coy.cozy.cracked.crackling.crafty.cranky.crashy.creamy.credible.crepuscular.cretan.crimson.crisp.crispy.crowned.crumbly.crunchy.crushed.cryo.cryofrozen.cryogenic.cryonic.cryptic.crystalline.cuddly.cumulative.cunning.cupric.cured.curious.cursed.cursory.cushy.cybernetic.cyberpunk.cynical.cyprian.daliesque.dancy.dandy.dantean.dantesque.dapper.dappled.daring.dark.darwinian.dashing.dashy.dauntless.davisian.dawning.dazzling.deathless.debonair.deboned.debussyan.decanted.decompiled.decorous.decrypted.deep.deferential.deft.degasian.delectable.deleuzian.delian.deliberate.delicate.delirious.delphic.delta.demure.depressurized.derridean.destined.devout.dewy.dexterous.diaphanous.diced.dickensian.dickian.dickinsonian.didactic.dieselpunk.diffident.digital.dignified.diligent.dimensional.dinky.dionysian.discerning.discreet.disheveled.disparate.distant.distinct.distributed.diurnal.divine.dizzy.docile.docked.dogged.doomed.dorian.dormant.dostoevskian.dotty.doughty.doughy.downy.dozy.draconic.dreamful.dreamy.drifting.dripping.drizzly.droll.drowsy.druidic.dulcet.dun.dunky.durkheimian.dusky.dwarven.dynamic.dystopian.eager.earnest.earthy.eastward.easygoing.ebony.ebullient.eclectic.eclipsed.ecstatic.edenic.edwardian.effervescent.effulgent.effusive.einsteinian.elamite.elastic.elated.eldritch.electric.electronic.elegant.elegiac.elgarian.eliotian.eliotic.elizabethan.ellingtonian.eloquent.elusive.elven.elvish.elysian.embered.emergent.eminent.emphatic.emulsified.enchanted.encoded.encrypted.endearing.endless.endogenous.energetic.enhanced.enigmatic.enthralling.ephemeral.epic.epicurean.equanimous.errant.erudite.escherian.esoteric.esteemed.eternal.ethereal.ethiopian.etruscan.euclidean.eulerian.euphonious.euphoric.evanescent.evening.eventide.everlasting.evocative.exacting.exalted.exemplary.exo.exogenous.expansive.expressive.exquisite.extraterrestrial.extruded.exuberant.fabled.fabulous.facetious.faithful.fallow.fanciful.fantastic.faradayic.faraway.farmhouse.fastidious.fated.fateful.fathomless.faulknerian.faunal.fearless.feathered.feathery.fecund.federated.feisty.felicitous.felliniesque.fenny.fermented.ferny.ferrous.fervent.fervid.festive.fetching.fey.fickle.fierce.fiery.filleted.filtered.fitzgeraldian.fizzy.flaky.flamboyant.flamed.flashy.flawless.fleecy.fleet.fleeting.flexible.flickering.flinty.floral.florid.flouncy.flourishing.flowering.fluent.fluffy.fluid.fluvial.foamy.folded.fond.foraged.forged.formidable.forthright.fortuitous.forward.foucauldian.fourier.fractal.fragrant.frank.frankish.freckled.free.fresh.freudian.friedmanite.frisky.frizzy.frolicsome.frosted.frosty.frothy.frozen.frugal.fruiting.fruity.funky.furred.furtive.futuristic.fuzzy.gaelic.galactic.galbraithian.galilean.gallant.gallic.galvanic.gamesome.gamma.gandhian.garlanded.garrulous.gauguinesque.gaussian.gauzy.generous.genetic.genial.genomic.genteel.gentle.geomagnetic.georgian.gershwinesque.ghostly.giant.gibsonian.giddy.gifted.giga.giggly.gilded.giottesque.glacial.glad.glazed.gleaming.gleeful.glimmering.glistening.glorious.glossy.glowing.gnomish.godardian.godelian.goethean.goethesque.gogolian.golden.gooey.goofy.gorgeous.gorsy.gossamer.gothic.gowned.goyaesque.graceful.gracious.grainy.grand.grassy.grated.gravitic.gregarious.grilled.groovy.ground.grounded.guileless.gushy.gusty.habermasian.habsburg.hadrianic.halcyon.hale.hallowed.haloed.halved.hamiltonian.han.handelian.handmade.handsome.hanoverian.hapless.happy.hardy.hardyesque.harmonious.hashed.haunted.haydnesque.hayekian.hazy.heady.heaneyesque.hearthside.hearty.heathen.heathered.heavenly.hegelian.heideggerian.heinesque.heinleinian.heirloom.heisenbergian.heliacal.hellenic.hellish.hemingwayesque.herbal.herbertian.herculean.hermetic.heroic.hexed.hibernal.hilbertian.histrionic.hitchcockian.hittite.hoar.hoary.hobbesian.hobbitish.hogarthian.holderlinian.holo.holographic.holy.homerian.homeric.homeward.honest.honeyed.honky.hooded.hooved.hopeful.hopkinsian.hopperesque.hoppy.horatian.horned.hospitable.hot.housemade.huggy.humble.humean.humming.humorous.hunky.hunnish.hurrian.hushed.hydraulic.hyper.hyperborean.hypersonic.hyperspatial.hypnotic.iberian.ibsenite.iced.icy.ideal.idyllic.igneous.illustrious.imaginative.immaculate.immense.immortal.impassioned.impeccable.impetuous.impish.impressive.incan.incandescent.incisive.incorrigible.indefatigable.indelible.indigo.indolent.indomitable.industrious.ineffable.inexorable.infernal.infinite.infra.infrared.infused.ingenious.ingenuous.inimitable.innocuous.inquisitive.insatiable.inspired.intense.intergalactic.interstellar.intragalactic.intrepid.intricate.intrinsic.intuitive.inventive.inveterate.invincible.inward.ionian.ionic.ionospheric.irenic.iridescent.irrepressible.ithacan.itinerant.ivory.jacobean.jammy.jangly.jaunty.jazzy.jeffersonian.jiggly.jingly.jocular.jocund.johnsonian.jolly.jouncy.jovial.jovian.joycean.joyful.joyous.jubilant.judicious.juiced.juicy.jumped.jumpy.jungian.junky.justinianic.jute.kafkaesque.kandinskian.kantian.keatonesque.keatsian.keen.keplerian.keynesian.kierkegaardian.kindly.kindred.kinetic.kiplingesque.klimtian.knowing.kooky.kubrickian.kurosawan.lacanian.laconic.lacquered.lacustrine.lacy.lamarckian.lambda.lambent.laminated.landed.languid.lanky.laplacian.larkinesque.laser.latent.lathed.latin.lattice.laudable.launched.laureled.lavish.layered.leaden.leafy.lean.learned.legendary.leguinian.leibnizian.lemian.lemurian.lenient.leonardesque.liberal.libyan.lidar.light.lighthearted.likable.lilac.lilting.liminal.limpid.lincolnesque.lingering.linnaean.lissome.lisztian.literate.lithe.littoral.lively.loamy.local.lockean.lofty.logical.loopy.loose.loquacious.lorcaesque.lorcan.lossless.lossy.lovecraftian.lovelacean.loyal.lucent.lucid.lucky.ludic.lukewarm.luminal.luminous.lunar.luscious.lush.lushy.lusitanian.lustrous.lydian.lynchian.lyotardian.lyric.lyrical.macerated.machiavellian.macro.magical.magnanimous.magnetar.magnetic.magnetospheric.magnificent.magrittean.mahlerian.majestic.mallarmean.malleable.malthusian.malty.mandelan.manetesque.manifold.marbled.marshy.martial.martian.marvelous.marxian.maser.masked.masterful.matchless.matin.matissean.mature.matutinal.mauve.maverick.mawkish.maxwellian.mayan.meandering.mechanical.median.medicean.mega.mellifluous.mellow.melodic.mendelian.merciful.mercurial.merovingian.merry.meshed.meta.metamorphic.meteoric.meticulous.metternichian.mettlesome.michelangelesque.micro.microwave.midnight.mighty.mild.milled.miltonian.miltonic.minced.mindful.mineral.ming.mingusian.minoan.minty.miraculous.mired.miroesque.mirthful.mischievous.misty.mobile.modest.modular.molecular.molieresque.momentous.mondrianesque.monetian.monkish.mono.montane.moonless.moonlit.mordant.morning.mossy.motley.mottled.mouthwatering.mozartian.mughal.multiversal.munificent.murmuring.mushy.musical.mutable.mutant.mycenaean.mysterious.mystical.mythic.nabokovian.nameless.nano.nanoscale.napoleonic.narrowband.nascent.natty.neat.nebular.nebulous.nefarious.neptunian.nerudian.networked.neural.neutron.neutronic.newtonian.nietzschean.nifty.nimble.noble.nocturnal.nonchalant.nonpareil.noontide.norse.northward.nostalgic.notable.novel.nozickian.nuanced.nubian.nuclear.numinous.nutty.oaky.obdurate.oblique.observant.obstinate.obtuse.oceanic.ochre.odyssean.olden.olympian.omega.omni.onward.opaline.opportune.optical.optimistic.opulent.oracular.orbital.orbiting.orderly.original.ornate.orphic.orwellian.osirian.ostentatious.otherworldly.otiose.ottoman.outgoing.outspoken.outward.overcast.overclocked.ovidian.pacific.pagan.painstaking.palatial.pale.pallid.palpable.paradisal.paradoxical.parallel.paramount.parkerish.parsonian.parthian.passionate.pastoral.patched.pathless.patient.pavlovian.peaceable.peaceful.peachy.pearly.peaty.pebbly.peeled.peered.peerless.pelagic.pellucid.penetrating.pensive.peppered.peppery.peppy.perceptive.perennial.perfect.perfumed.perky.persian.persistent.perspicacious.persuasive.pert.pervasive.pessoan.petaled.petrarchan.phantom.pharaonic.phased.philosophical.phlegmatic.phoenician.photonic.photospheric.phrygian.picassoesque.pickled.pictish.picturesque.pillowy.pindaric.pinteresque.piping.piquant.pirandellian.pithy.pivotal.pixelated.placid.planckian.planetary.planetoid.plangent.plasmic.plathian.platinum.platonic.playful.pleasant.plentiful.pliant.plinky.plonky.plucky.plumed.plummy.plush.plushy.plutonian.plutonic.pneumatic.poached.poesque.poetic.poignant.poised.polished.polite.pollockian.poly.polygonal.polymer.polynesian.popean.popped.popular.portly.posh.positronic.posthuman.potent.pouncy.powdery.powerful.pragmatic.prancy.precise.precocious.precognitive.preeminent.premier.prescient.pressed.pressurized.prestigious.pretty.primeval.primordial.princely.printed.pristine.private.prized.prodigious.profane.proficient.profound.profuse.prokofievian.prolific.promethean.prompt.proper.prophetic.prosaic.prosperous.protean.proto.protostellar.proud.proustian.providential.prudent.psionic.puccinian.puckish.pudgy.puffed.pulled.pulsar.punctilious.punctual.pungent.punic.pure.purposeful.pushkinian.pynchonesque.pythagorean.quaint.quantum.quartered.quasar.questing.quick.quiescent.quiet.quintessential.quirky.quixotic.rabelaisian.racinian.radar.radiant.radio.rainwashed.rainy.rakish.rambunctious.raphaelesque.rapid.rapturous.rare.rational.ravelian.rawlsian.raytraced.ready.reasonable.rebooted.receptive.recondite.recursive.redolent.reduced.reedy.refined.reflective.refulgent.regal.relativistic.relaxed.reliable.remarkable.rembrandtesque.remote.rendered.renoiresque.renowned.replete.replicated.resilient.resinous.resolute.resourceful.respectful.resplendent.responsive.restful.restive.restless.reticent.retro.reverent.rhapsodic.rhodian.rhythmic.ricardian.rich.richelieuvian.riemannian.rigorous.rilkean.rimbaudian.rimed.ringed.ripe.ripening.rippling.risible.riverine.riveted.roaming.roaring.roasted.robed.robotic.robust.rolled.roly.roman.romanov.romantic.rompy.rooseveltian.roseate.rosy.rothkoesque.rousing.rousseauian.rowdy.royal.rubenesque.ruddy.runic.rushy.russet.rustic.sabine.sable.sacred.sagacious.sage.saintly.salient.saline.salingeresque.salted.salty.salubrious.samian.sandaled.sandy.sanguine.sapid.sapient.sapphic.sardonic.sarmatian.sartrean.sassy.satiny.saturnian.saturnine.saucy.savory.savvy.saxon.scalding.scarlet.schielesque.schillerian.schoenbergian.scholarly.schubertian.schumannesque.schumpeterian.scintillating.scorched.scorsesean.scrappy.scruffy.scrupulous.scythian.seaborne.seamless.seared.seasonal.seaward.secure.sedate.sedgy.sedimentary.sedulous.seemly.seismic.selenic.selfless.sensible.sensitive.sentient.sentimental.seraphic.sere.serene.seuratian.shaded.shadowed.shadowy.shaggy.shaken.shakespearean.shamanic.shannonian.sharded.sharp.shaved.shavian.shelleyan.shielded.shimmering.shiny.shoreless.shostakovian.shrewd.shucked.sibelian.sibilant.sibylline.sicilian.sidereal.sienna.sifted.sigma.silicon.silken.silky.silly.silty.silver.silvered.simmering.simulated.sincere.singed.singing.singular.sinuous.sisyphean.sizzling.skeptical.skillful.skinnerian.skittish.skyward.sleek.sleepless.sleepy.slender.sliced.slick.slipstreamed.slow.sly.smart.smashy.smithian.smoked.smoky.smoldering.smooth.snappy.snazzy.snoozy.snowy.snug.snuggly.soaring.sociable.socratic.sodden.soft.sogdian.solar.solarpunk.solemn.solid.somnolent.sonar.song.sonic.sonorous.sooty.soporific.soulful.sound.soundless.sour.southward.sovereign.spaceborne.spacefaring.spacious.sparkling.sparkly.spartan.special.speckled.spectacular.spectral.speedy.spellbound.spiced.spicy.spielbergian.spiffy.spinozan.spirited.splashy.splendid.split.sploshy.spontaneous.spooky.sporty.spotless.spotted.sprightly.sproingy.spry.spun.spunky.squally.squashy.squelchy.squiggly.squishy.staid.stainless.stalwart.starborn.starfaring.starless.starlit.stasisbound.stately.steadfast.steady.steaming.steampunk.steely.steeped.steinbeckian.stellar.stellarborn.sticky.stirred.stirring.stoic.stoical.stolid.stompy.stoppardian.storied.stormy.stout.strained.stratospheric.straussian.stravinskian.streaky.stretched.striking.strindbergian.striped.strong.stuart.stubby.studious.stunning.sturdy.stygian.suave.subatomic.sublime.suborbital.subsonic.substantial.subtle.succinct.succulent.sudsy.sugared.sugary.sumerian.summery.sunless.sunlit.sunny.sunward.superb.supergalactic.superlative.superluminal.supersonic.supple.supreme.sure.surreptitious.svelte.swanky.sweeping.sweet.swift.swiftian.swirled.swooshy.sylvan.sympathetic.synaptic.synchronous.synthetic.syrupy.tableside.tachyonic.taciturn.talented.talleyrandian.tame.tang.tangy.tarantinoesque.tarkovskian.tart.tasteful.tattered.taut.tawny.tectonic.telekinetic.telepathic.temperate.tempered.temporal.tenacious.tender.tennysonian.tenuous.tepid.tera.terran.terrific.terse.textured.thackerayan.thankful.thawed.theban.thessalian.theta.thorny.thorough.thoughtful.thracian.threadbare.thriving.thundery.tidal.tidy.timeless.timely.timeworn.tinkly.tiny.tipsy.tireless.titanesque.titanian.titanic.titanium.titianesque.toasted.toasty.tocharian.tokenized.tolerant.tolkienesque.tolstoyan.tonic.tonky.toothsome.torched.totemic.tough.towering.trackless.tranquil.transcendent.transhuman.treacly.treasured.tremendous.tremulous.trenchant.tricky.trim.triumphant.trojan.trollopian.truculent.true.truffautian.truffled.trusty.truthful.tudor.turbo.turingian.turneresque.twangy.twilight.twilit.twinkling.twinkly.ubiquitous.ultra.ultrasonic.ultraviolet.umami.umber.unassuming.unbounded.uncanny.uncorked.unctuous.undaunted.underworldly.undocked.undying.unearthly.unerring.unflappable.unique.unknown.unruffled.upbeat.upgraded.upright.upstanding.upward.uranian.urbane.utopian.vacuous.valeryan.valiant.valorous.vandal.vangoghian.vast.veblenian.vectorized.vedic.vehement.veiled.velazquezian.velvet.velvety.venerable.venturous.venusian.veracious.verbose.verdant.verdian.verdurous.verlainian.vermeerian.vermilion.vernal.verneian.versatile.vesper.vespertine.vibrant.victorian.vigilant.vigorous.vintage.violet.virgilian.virtual.virtuous.visceral.vital.vivacious.vivid.vocal.voidborn.voidward.volcanic.voltairean.voluble.vonnegutian.voracious.voxel.vroomy.wacky.wagnerian.wakeful.waking.wan.wandering.warholian.warm.warped.wary.washingtonian.wayward.wealthy.weathered.weberian.welcome.welded.wellesian.wellsian.westward.whacky.whimsical.whimsy.whipped.whisked.whispering.whistlerian.whitmanesque.whole.wholesome.whooshy.wide.wiggly.wild.wildean.willowy.wilsonian.wily.windswept.windy.winged.winning.winsome.wintry.wired.wireframe.wireless.wise.wishful.wispy.wistful.wittgensteinian.witty.wobbly.wodehousian.wondrous.wonky.wooded.woody.woolly.woozy.wordless.wordsworthian.wormholed.worthy.wraithlike.wreathed.wriggly.wry.xenial.xeno.yanky.yearning.yeasty.yeatsian.young.youthful.yuletide.yummy.zany.zappy.zealous.zested.zestful.zesty.zeta.zingy.zippy.zodiacal.zonked.zonky.zoomy.zoroastrian`.split(`.`),le=`abalone.absinthe.absyrtus.accelerator.achilles.acorn.acquerello.actuator.adobo.adonis.aeetes.aegis.aello.aeneas.aengus.aether.affogato.afterburner.agartha.agate.agni.agnolotti.aioli.airlock.ajax.aji.albatross.alder.ale.alecto.aleppo.alfheim.allegory.alliteration.almond.amaranth.amaretto.amaterasu.ambrosia.americano.amphiaraus.anago.anapest.ancho.anchovy.android.andromeda.anise.annal.annwn.ansible.antaeus.antenna.anthem.antigone.antimony.antistrophe.anubis.aoidos.aperol.aphelion.aphrodite.apogee.apollo.apple.apricot.aquamarine.aquavit.aqueduct.arabica.arachne.arawn.arbor.arborio.arc.arcadia.arch.archipelago.ares.argo.argon.argonaut.aria.ariadne.ark.arke.armagnac.array.arrow.artemis.arthur.artichoke.artifact.arugula.asgard.asgardia.ash.asparagus.aspen.assam.assonance.asteroid.astronaut.atalanta.athena.atlantis.atlas.atoll.atom.atropos.aubergine.augean.aura.aurora.avalon.avalonia.avocado.awning.axion.axle.azurite.bacchus.bagna.baharat.balder.ballad.balladeer.banana.banshee.baozi.bard.barge.barium.barley.barn.basalt.basil.basilisk.basmati.bastet.bastion.bay.bayleaf.beacon.beam.bean.bearing.beech.beetroot.behemoth.bellini.beowulf.bergamot.berth.beryl.beryllium.bifrost.biodome.birch.biscotti.bismuth.bisque.bit.bittern.blackberry.blast.blaster.blini.block.blodeuwedd.bloodstone.blossom.bluebell.blueberry.bolt.bomba.bonito.boom.borage.boson.botargo.bottarga.bouillon.boundary.bow.bower.bragi.bramble.bran.branch.brandy.branwen.breeze.brew.bridge.brigid.brioche.broccoli.brook.brulee.brunhild.brush.bucatini.buckler.buckwheat.buffer.bulkhead.bunting.burrata.burst.bus.busiris.butte.butter.buttercup.butterscotch.byte.cabbage.cabin.cacao.cachaca.cache.cacus.cadence.caesura.calamarata.calamari.calcite.caldera.calliope.calvados.calypso.cam.camellia.camelot.camembert.campari.canal.cannelloni.cannoli.canopy.cantaloupe.cantata.canticle.canvas.canyon.canzone.capacitor.capellini.caper.capon.cappelletti.cappuccino.capsule.caramel.cardamom.cardoon.carillon.carnaroli.carnation.carol.carrier.carrot.cascade.cashew.cassandra.cassis.castle.castor.cavatelli.caviar.cayenne.cedar.celaeno.celeriac.cell.centaur.cerberi.cerberus.cernunnos.ceryneian.cesium.ceto.ceylon.chaff.chaffinch.chai.chain.chalk.chamomile.champagne.chandra.channel.chanson.chanterelle.chard.charon.chartreuse.cheddar.cherry.chert.chervil.chestnut.chickweed.chicory.chili.chime.chimera.chimichurri.chimney.chip.chipotle.chirashi.chiron.chive.chocolate.chorale.chorizo.chorus.chronicle.chrysanthemum.chrysaor.chrysomallus.chutney.ciabatta.cibola.cider.cilantro.cinder.cinnamon.cipher.circe.circlet.circuit.cirque.cistern.citadel.citrine.citron.clementine.cliff.clio.clipper.cloak.clotho.cloud.clove.clover.cluster.coal.cobbler.cockaigne.cockpit.cocoa.coconut.codex.coffee.cog.cognac.coif.coil.col.colchis.collider.colony.combe.comet.compote.concerto.conchiglie.conduit.confit.console.consomme.consonance.continuum.contour.cookies.coordinate.core.coriander.cormorant.corona.coronet.cortado.corvette.cosmos.cottage.couplet.course.couscous.cove.cowl.cowslip.crab.craft.crag.cranberry.crane.crayon.cream.creme.crepe.cress.crocus.croissant.crosne.crown.cruiser.crumble.cryopod.cryosleep.crystal.cuchulainn.cuckoo.cucumber.cuirass.cumin.cupid.curlew.currant.current.curry.custard.cyborg.cycle.cyclops.cyclotron.cylinder.dactyl.daedalus.daemon.daffodil.dagda.dahlia.daiquiri.dais.daisy.dale.dam.dandelion.danu.daphne.darjeeling.dart.dashi.date.dawn.daydream.deck.deirdre.demeter.destroyer.dew.diadem.diary.dill.dimension.diode.diomedean.dionysus.ditalini.ditch.djinn.dock.doenjang.domain.donburi.donjon.door.doppio.dove.downlink.dreadnought.dream.drift.droid.dryad.dukkah.dulce.dumpling.dune.durga.dusk.dust.dyke.eagle.earlgrey.easel.echidna.echo.eclair.eclipse.ecliptic.edamame.eddy.edelweiss.edge.egret.einsteinium.elderflower.eldorado.electra.elegy.elm.elysium.ember.endive.enigma.enjambment.enkidu.envoi.eos.epigram.epistle.epode.erato.erinyes.eros.erymanthian.escargot.espresso.estuary.eumenides.euryale.eurybia.eurydice.eurytion.excalibur.exoplanet.fable.fafnir.falcon.fancy.farfalle.fate.feather.feldspar.fell.fence.fennel.fenrir.fenugreek.fermion.fern.fettuccine.fiddlehead.field.fig.finch.finn.fionn.firebird.firefly.fission.fizz.fjord.flake.flame.flare.flash.flicker.flint.flue.fluorite.flux.flywheel.focaccia.fog.folio.fondant.forge.fortress.foxglove.fragment.fraise.frame.frangipane.frappe.freesia.fregola.freighter.freya.frigate.frigg.frost.fudge.fugue.fumarole.furies.fusilli.fusion.gaia.galahad.galangal.galatea.galaxy.galette.galleon.gallium.ganache.ganesh.gannet.gantry.ganymede.garam.gardenia.garlic.garuda.gateway.gauntlet.gawain.gazebo.gear.gelato.gemelli.genmaicha.genoise.geranium.germ.germanium.geryon.geyser.ghazal.ghee.ghost.gilgamesh.ginger.gingko.ginnungagap.girder.glacier.glade.glaze.gleam.gleeman.glen.glimmer.glint.glitter.gloss.glow.gluon.gnocchi.gochujang.goldfinch.golem.goose.gooseberry.gorgon.gouda.governor.gradient.graeae.granary.granite.grapefruit.grappa.gratin.graviton.greave.grebe.gremolata.grenadine.grendel.grid.griffin.gruyere.guajillo.guava.gudrun.guinevere.gunkan.gwydion.gyoza.gyroscope.habanero.habitat.hades.hadron.haiku.hall.halloumi.halo.halva.hamachi.hangar.hanuman.harissa.harpies.harpy.harvest.hatch.hauberk.hawthorn.haze.hazel.hazelnut.heading.headland.heap.heart.hearth.heather.hecate.hedge.heimdall.hel.helheim.helios.helium.helix.helle.hellebore.helm.hemistich.hephaestus.hera.hermes.heron.hesperides.hestia.hibiscus.hippogriff.hirame.hive.hoisin.hojicha.hollandaise.hollow.holly.hologram.honey.honeycomb.honeysuckle.hood.hoopoe.horizon.horseradish.horus.hrothgar.hub.huckleberry.hue.huginn.hull.husk.hut.hyacinth.hydra.hydras.hylas.hymn.hyperborea.hypercube.hyperdrive.hyperion.hyperspace.hyssop.iamb.ibis.icarus.idas.idunn.idyll.igniter.igraine.ikura.indium.indra.inductor.infusion.injector.ink.inlet.inspiration.ion.iridium.iris.ishtar.isis.isolde.isotope.ivy.iwashi.izanagi.jackdaw.jackfruit.jalapeno.janus.jasmine.jason.jasper.javelin.jay.jet.jiaozi.jongleur.jonquil.jormungandr.jotunheim.journal.julep.jumpgate.juniper.juno.jupiter.kaffir.kale.kali.kampachi.karaage.karasumi.katsu.keel.keep.kefir.kelpie.kenning.kernel.kestrel.khinkali.kiln.kimchi.kingfisher.kinmedai.kirsch.kite.kitsune.kiwi.koan.kohlrabi.kombucha.koshihikari.kraken.krypton.kumquat.kvass.lachesis.lacquer.ladon.ladons.laertes.lager.lagoon.lake.lakshmi.lambic.lament.lance.lancelot.lander.lane.langoustine.lantern.lapis.lark.larkspur.lasagna.latte.laureate.laurel.lava.lavender.leaf.leda.leek.legend.lemon.lemonbalm.lemongrass.lemuria.lens.lentil.lepton.lernaean.lethe.letter.levee.lever.leviathan.lightyear.lily.lime.limerick.limoncello.linden.linguine.link.linnet.lir.lithium.lityerses.lobster.loch.lock.lodge.loki.loop.loquat.lotus.lovage.lugh.lullaby.lungo.luster.lychee.lynceus.lyonesse.lyricist.macadamia.macaron.macchiato.madai.madeleine.madrigal.magma.magnolia.magpie.mail.mainframe.maki.makrut.malachite.manannan.mango.manicotti.manor.manti.manticore.mantle.mantou.manuscript.maple.marble.marduk.margarita.marigold.marjoram.marquee.marrow.martini.marvel.marzipan.masago.masala.mascarpone.mast.matcha.matrix.mead.meadow.mech.medea.medusa.megaera.meleager.memoir.mentaiko.mercury.meringue.merlin.merlot.mesa.mesh.metaphor.meteor.meter.mezcal.mezzaluna.mica.midas.midgard.mill.mimir.mimosa.minerva.minotaur.minstrel.mint.minuet.miracle.mirin.mirror.miso.missive.mist.mjolnir.mocha.module.moira.mojito.molasses.mole.momo.monolith.moonbase.moonbeam.moonstone.moor.mopsus.mordred.morel.morgana.morpheus.morrigan.moss.mote.motet.mousse.mu.mulberry.muninn.muon.muse.muspelheim.mustard.myrtle.mystery.myth.nadir.naga.naiad.nanite.nanobot.narcissus.neapolitan.nebula.nectarine.needle.negroni.nemean.nemesis.neon.neptune.neptunium.nereid.nereus.nessus.nest.nestor.net.nettle.neutrino.nexus.niamh.nib.nibble.nibiru.niflheim.nightingale.nigiri.nike.niobe.njord.nocturne.node.nog.nori.norn.note.nougat.nova.nozzle.nuada.nutmeg.nyx.oak.oasis.oat.obelisk.oberon.obsidian.oceanid.oceanus.octave.octavo.ocypete.ode.odin.odysseus.oisin.okonomiyaki.olive.olympus.oni.onigiri.oolong.oracle.orange.orb.orbit.orbiter.orchard.orchid.oreads.orecchiette.oregano.orion.orpheus.orthros.orthrus.orzo.oscillator.osiris.osmium.osprey.ouroboros.outline.outpost.ouzo.oven.overture.owl.oyster.paccheri.packet.padron.page.palace.palette.palladium.palm.pan.pandan.pandora.panettone.pansotti.pansy.pantoum.papaya.pappardelle.paprika.papyrus.parable.paradox.parcae.parchment.parfait.parmesan.parsec.parsley.parsnip.particle.partridge.parvati.pasilla.passionfruit.pastel.pastis.patina.pavilion.pavlova.peach.peak.pear.pebble.pecan.pegasi.pegasus.pekoe.peleus.pelican.pelmeni.pen.pencil.penelope.penne.peony.pepper.peppermint.percival.peregrine.pergola.peridot.perigee.perihelion.perry.persephone.perseus.persillade.persimmon.pesto.petal.petrel.phase.pheasant.phoenix.pholus.phorcys.photon.phrixus.pickle.pierogi.pigment.pimento.pine.pineapple.ping.pinot.pipe.pipit.piquillo.pisco.pistachio.piston.pith.plane.plasma.plate.plover.plum.plume.pluto.plutonium.poblano.pod.podarge.poet.polenta.pollux.polyphemus.pomegranate.pomelo.pond.pontus.ponzu.pooka.pool.poplar.poppy.porcini.port.portal.porter.porthole.poseidon.positron.prairie.praline.prelude.primrose.prism.probe.profile.prometheus.prosciutto.prosecco.proteus.protocol.psalm.psyche.pudding.puffin.pulse.pumice.pumpkin.purslane.pwyll.pylon.pyrrhic.quadrant.quail.quark.quarto.quartz.quatrain.qubit.quetzalcoatl.queue.quill.quince.quinoa.quiver.radish.radium.radon.ragnarok.rain.rama.ramen.ramp.rampart.ramson.raspberry.ratatoskr.raven.ravioli.ray.reactor.realm.reaper.reed.reef.refrain.region.register.relay.relic.remnant.requiem.reservoir.residue.resistor.resonator.reverie.rhapsode.rhapsody.rhea.rhiannon.rhodium.rhododendron.rhubarb.rhyme.ricotta.riddle.ridge.riesling.rigatoni.rim.ring.risotto.ristretto.river.roast.robin.robusta.roc.rocket.rod.romesco.rondeau.rooibos.rook.root.rose.rosemary.rosewater.roundel.rover.rowan.rubidium.rum.rune.saba.saffron.saga.saison.sake.salmoriglio.salsa.salsify.sambal.sambuca.samphire.sancerre.sandpiper.sangria.sanma.sansho.saraswati.sashimi.sasquatch.satellite.satyr.sauternes.savanna.sawara.sazerac.scaffold.scalar.scallop.scansion.scepter.schnapps.schooner.scop.scorzonera.scotchbonnet.scroll.sector.seed.sekhmet.selene.selenite.selenium.selkie.sencha.sensor.sequoia.serenade.serrano.servo.sesame.sestina.sextet.shack.shade.shadow.shaft.shale.shallot.shambhala.shard.shed.sheen.sherbet.sherry.shield.shimmer.ship.shishito.shiso.shiva.shoyu.shrub.shumai.shuttle.sibyl.sif.signal.sigurd.silhouette.silo.simile.simurgh.singularity.siren.sita.skadi.skald.skiff.skuld.skylark.slant.slate.sleipnir.sling.slipstream.sliver.sloop.sluice.smithy.smoke.snowdrop.socket.sofrito.sonata.sonnet.soot.sorbet.sorrel.souffle.soul.soy.spaceport.spaghetti.spark.sparkle.sparrow.spear.speck.specter.speculoos.spelt.sphere.sphinx.sphinxes.spindle.spinel.spiral.spire.spirit.splinter.spoke.spondee.spore.spring.spritz.spruce.sriracha.ssamjang.stack.stanza.starbase.starlight.starling.starport.starship.stasis.station.steam.stellarator.steppe.stheno.stork.stracciatella.strawberry.stream.strontium.strophe.strozzapreti.strut.stylus.stymphalian.styx.subspace.sumac.summit.sunbeam.sunstone.supernova.surge.surya.susanoo.sushi.svartalfheim.swallow.swan.swarm.sycamore.syleus.synchrotron.tabard.tachyon.tagliatelle.tahini.takoyaki.taliesin.tamari.tamarind.tangerine.tanka.tanker.tapenade.tapioca.tarako.taranis.tare.tarn.tarragon.tartarus.telamon.telemetry.teleporter.tellurium.temaki.tempura.tengu.tensor.tent.tequila.tercet.teriyaki.terminal.tern.terraform.tesseract.tethys.thalassa.thalia.thallium.thaumas.themis.theseus.thistle.thor.thorium.thoth.threshold.throne.throttle.thrush.thruster.thule.thunderbird.thyme.tiamat.tiara.tide.tint.tintagel.tiphys.tiramisu.tirnanog.tisane.tisiphone.titan.tobiko.toccata.toddy.toffee.tofu.tokamak.tomatillo.tomato.tome.tone.tonka.tonkatsu.tor.tortellini.torus.tourmaline.tower.trace.track.transducer.transistor.treacle.trellis.triolet.tristan.triton.trochee.trofie.trope.troubadour.trouvere.truffle.trunk.truss.tug.tulip.tundra.tungsten.turbine.turmeric.turquoise.turret.twinkle.typhon.tyr.udon.ulysses.unagi.uni.unicorn.uplink.uramaki.urania.uranium.urd.urfa.uther.vale.valhalla.valkyrie.valve.vanadium.vanaheim.vanilla.vapor.vareniki.varnish.varuna.vector.veil.vellum.vent.venus.verbena.verdandi.verge.verjus.vermouth.verse.vessel.vesta.vestige.vialone.viewport.villanelle.vishnu.vodka.volcano.volta.volume.vortex.vulcan.wall.walnut.waltz.warbler.warpgate.wasabi.wash.watercress.watermelon.wave.waypoint.web.weir.well.wendigo.wheat.whisky.whisper.wiglaf.willow.wimple.window.wisteria.wonder.wonton.woodcock.woodpecker.word.wormhole.wraith.wren.wyrm.wyvern.xenon.yacht.yakitori.yama.yarrow.yeti.yew.yggdrasil.yokai.yuzu.zaatar.zabaglione.zenith.zephyr.zeus.zinnia.zircon.zirconium.ziti.zone.zucchini`.split(`.`);ce.length*le.length,e(`agent-bridge`);var ue=`agent: name already in use`,y=e(`cone-memory-budget`),de=1.25,fe=a.memoryPath,pe=`/sessions/index.json`,me=4096,he=/^## Auto-extracted/m,ge=`Consolidate the auto-extracted memory bullets below into a single tighter set of durable memories.
|
|
2
|
+
|
|
3
|
+
Rules:
|
|
4
|
+
- Output ONLY a single \`## Auto-extracted (consolidated)\` heading followed by markdown bullets.
|
|
5
|
+
- One fact per bullet. Drop duplicates and superseded facts. Keep the most recent / specific phrasing.
|
|
6
|
+
- Preserve concrete identifiers (file paths, URLs, IDs, names) verbatim.
|
|
7
|
+
- Be terse. Aim well under the original size.
|
|
8
|
+
- Do NOT add preamble, commentary, or any heading other than the single consolidated one.`;function _e(e){let t=he.exec(e);if(!t)return{header:e,autoExtracted:``};let n=t.index;return{header:e.slice(0,n),autoExtracted:e.slice(n)}}async function b(e){try{let t=await e.readFile(pe,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r.length:0}catch{return 0}}async function ve(e){let{header:r,autoExtracted:i}=_e(e.currentContent);if(!i.trim())return e.currentContent;let a=n(`You are a memory consolidation assistant. You are given a markdown file's "auto-extracted" section — a list of memory bullets accumulated across sessions of an AI coding assistant. Your job is to rewrite that section as a tighter, deduplicated set of durable memories that fits well within ${e.budget} characters.
|
|
9
|
+
|
|
10
|
+
<auto-extracted>
|
|
11
|
+
${i}
|
|
12
|
+
</auto-extracted>`),o={role:`user`,content:[{type:`text`,text:n(ge)}],timestamp:Date.now()},s=await t(e.model,{systemPrompt:a,messages:[o]},{apiKey:e.apiKey,maxTokens:me,headers:e.headers,signal:e.signal});if(s.stopReason===`error`)throw Error(`Restructure call failed: ${s.errorMessage||`Unknown error`}`);let c=s.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
|
|
13
|
+
`).trim();if(!c)throw Error(`Restructure call returned empty content`);return`${r}${r.length===0||r.endsWith(`
|
|
14
|
+
`)?``:`
|
|
15
|
+
`}${c}\n`}async function ye(e){if(!e.model||!e.apiKey)return{restructured:!1,reason:`no-llm`};let t=e.memoryPath??fe,n=``;try{let r=await e.vfs.readFile(t,{encoding:`utf-8`});n=typeof r==`string`?r:new TextDecoder().decode(r)}catch{return{restructured:!1,reason:`missing-file`}}let r=await b(e.vfs),i=v(r),a=i*de;if(n.length<=a)return{restructured:!1,reason:`under-threshold`};y.info(`Cone memory over threshold — restructuring`,{size:n.length,budget:i,threshold:a,sessionCount:r});try{let r=await ve({currentContent:n,budget:i,model:e.model,apiKey:e.apiKey,headers:e.headers,signal:e.signal});return await e.vfs.writeFile(t,r),y.info(`Cone memory restructured`,{before:n.length,after:r.length}),{restructured:!0}}catch(e){return y.warn(`Cone memory restructure failed — leaving appended content in place`,{error:e instanceof Error?e.message:String(e)}),{restructured:!1,reason:`error`}}}var x=e(`agentic-memory`),be=1200,xe=3600,Se=7200,S=e=>[e.memoryPath],C=e=>[`/sessions/`,`/shared/`,...s(e)],w=`awk.cat.cp.cut.date.diff.du.echo.file.find.grep.head.jq.ls.mkdir.mount.mv.nl.od.printf.readlink.rg.sed.sort.stat.tail.touch.tr.uniq.uname.upskill.wc.xxd`.split(`.`),T={arrayKeys:new Set([`writablePaths`,`visiblePaths`,`allowedCommands`]),scalarKeys:new Set([`model`,`timeoutSeconds`,`dreamTimeoutSeconds`,`thinkingLevel`])},E=`medium`,D=3e4;function O(e){return e===`cone`?`memory-curator`:`memory-curator-${e}`}var k={kind:`curate`,nameFor:O,rivalsFor:e=>[we(e)]},A=`{{TASK}}`,j=`(no session archive this pass)`;function Ce(e,t,n){return e.kind===`dream`?`**Consolidation pass** (the nightly dreaming): there is NO new session to mine — skip "Mining the session archive" entirely. Your whole job is to make the existing memory better: consolidated, current, and inside its budget. If the file is missing or empty, reply with one line saying so and stop; never invent memories. The run is hard-stopped after ${n} minutes; a run stopped at that bound lands whatever the memory file holds at that moment (every memory_write leaves a whole, budget-checked file), so consolidate section by section, writing as you go, and finish cleanly when you can.`:`**Curation pass**: mine the archived session at ${t} for what is worth carrying into future sessions, fold it into the memory, and consolidate the whole file in the same pass. Work fast: a pass should finish in well under 10 minutes and is hard-stopped after ${n} minutes — mine the three signals, write, and stop, rather than exploring the archive exhaustively.`}function we(e){return e===`cone`?`memory-dreamer`:`memory-dreamer-${e}`}function M(e,t){let n=e.nameFor(t);return N.test(n)?n:e.nameFor(r)}function Te(e,t){let n=N.test(e.nameFor(t))?t:r;return e.rivalsFor?.(n)??[]}var N=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;function P(e,t){return`/scoops/agent-${M(e,t)}`}function Ee(e){return P(k,e)}var F=Ee(r);function De(e){return o({parentJid:null,folder:e?.folder??`cone`})}function I(e,t){if(t.root===a.root)return e;if(e===a.memoryPath)return t.memoryPath;if(e===`/workspace/skills`||e.startsWith(`/workspace/skills/`))return e;let n=`${a.root}/`;return e===a.root?t.root:e.startsWith(n)?`${t.root}/${e.slice(n.length)}`:e}function Oe(e,t){let n=`${c}/`,r=e=>e.some(e=>n.startsWith(e.endsWith(`/`)?e:`${e}/`)),i=e.map(e=>I(e,t));return r(e)&&!r(i)&&i.push(n),i}async function ke(e){try{if(e.signal?.aborted)return{ok:!1,reason:`aborted`,legacyFallbackSafe:!1};let t=e.instructions??k,n=De(e.cone),r=P(t,e.cone?.folder??`cone`),i=await Ae(e.vfs,n),a=t.kind===`dream`?i.dreamTimeoutSeconds:i.timeoutSeconds,o=V(e.sessionArchivePath);try{await Ne(e.vfs,n.memoryPath,e.sessionArchivePath)}catch(e){return{ok:!1,reason:`snapshot: ${H(e)}`,legacyFallbackSafe:!0}}let s=t.kind===`dream`?j:e.sessionArchivePath,c=Math.max(1,Math.round(a/60)),l=Ce(t,s,c),u=Fe(i,a,Ie(Le(i.promptTemplate.includes(A)?i.promptTemplate:`${i.promptTemplate.trimEnd()}\n\n${A}`,{MEMORY_PATH:o,SESSION_ARCHIVE_PATH:s,SESSION_COUNT:String(e.sessionCount),BUDGET_CHARS:String(v(e.sessionCount)),SCRATCH_DIR:r,VISIBLE_PATHS:i.visiblePaths.join(`, `),TODAY:e.today??new Date().toISOString().slice(0,10),TIMEOUT_MINUTES:String(c),TASK:l}),r),e.sessionArchivePath,n,e.cone,t);e.signal&&(u.signal=e.signal);let d=await Re(Promise.resolve().then(()=>e.spawn(u)),a*1e3+D,e.signal);if(d.type===`timeout`)return x.warn(`Agentic memory wait timed out past the in-run bound + grace`,{timeoutSeconds:a,graceMs:D}),{ok:!1,reason:`timeout`,legacyFallbackSafe:!1};if(d.type===`aborted`)return{ok:!1,reason:`aborted`,legacyFallbackSafe:!1};if(d.type===`error`)return{ok:!1,reason:H(d.error),legacyFallbackSafe:!0};if(d.result.exitCode!==0){let e=(d.result.finalText??``).startsWith(ue);return{ok:!1,reason:d.result.finalText||`exit-${d.result.exitCode}`,legacyFallbackSafe:!e}}return{ok:!0,report:d.result.finalText}}catch(e){return x.warn(`Agentic memory pass failed`,{error:H(e)}),{ok:!1,reason:H(e),legacyFallbackSafe:!1}}}async function Ae(e,t=a){try{let n=await e.readFile(_,{encoding:`utf-8`});return L(typeof n==`string`?n:new TextDecoder().decode(n),t)}catch(e){return x.warn(`Could not load valid ${_}; using built-in default`,{error:H(e)}),L(l,t)}}function L(e,t=a){let n=ee(e,`MEMORY.md`),r=ne(n.frontmatter,T),i=d(r,`writablePaths`,S(t));if(i.length===0)throw Error(`writablePaths must not be empty`);p(i,`writablePaths`);let o=d(r,`visiblePaths`,C(t));p(o,`visiblePaths`);let s=f(r.timeoutSeconds,600,be),c=f(r.dreamTimeoutSeconds,xe,Se,`dreamTimeoutSeconds`),l=te(r.model,`model`);return{writablePaths:i.map(e=>I(e,t)),visiblePaths:Oe(o,t),allowedCommands:[...new Set([...w,...d(r,`allowedCommands`,[])])],...l?{model:l}:{},thinkingLevel:je(r.thinkingLevel),timeoutSeconds:s,dreamTimeoutSeconds:c,promptTemplate:n.body}}function je(e){if(e===void 0)return E;if(typeof e!=`string`||!g(e))throw Error(`thinkingLevel must be one of ${ae.join(`, `)}`);return e}function R(e){return`/sessions/.curated/${e.slice(e.lastIndexOf(`/`)+1)}`}function z(e){return`/sessions/.curation/${e.slice(e.lastIndexOf(`/`)+1)}`}function B(e){return`${z(e)}/base.md`}function V(e){return`${z(e)}/draft.md`}function Me(e){return`${z(e)}/status.json`}async function Ne(e,t,n){let r=``;try{let n=await e.readFile(t,{encoding:`utf-8`});r=typeof n==`string`?n:new TextDecoder().decode(n)}catch{}await e.mkdir(z(n),{recursive:!0}),await e.writeFile(B(n),r),await e.writeFile(V(n),r)}function Pe(e,t,n){let r=e.map(e=>e===t?n:e);return r.includes(n)?r:[...r,n]}function Fe(e,t,n,r,i,a,o){let s=e.model===`parent`||e.model===`cone`,c=B(r),l=V(r);return{cwd:i.root,writablePaths:Pe(e.writablePaths,i.memoryPath,l),visiblePaths:[...e.visiblePaths,`${z(r)}/`],allowedCommands:e.allowedCommands,prompt:n,thinkingLevel:e.thinkingLevel,persistSession:!0,name:M(o,a?.folder??`cone`),exclusiveWith:Te(o,a?.folder??`cone`),...a?.jid?{parentJid:a.jid}:{},notifyOnComplete:!0,successReceiptPath:R(r),mergeOnSuccess:{targetPath:i.memoryPath,basePath:c,draftPath:l},outcomeReceiptPath:Me(r),maxWallClockMs:t*1e3,...!s&&e.model?{modelId:e.model}:{}}}function Ie(e,t){if(t===F)return e;let n=`\0SCRATCH\0`;return e.replaceAll(t,n).replaceAll(F,t).replaceAll(n,t)}function Le(e,t){let n=e;for(let[e,r]of Object.entries(t))n=n.replaceAll(`{{${e}}}`,r);return n}function Re(e,t,n){return new Promise(r=>{let i=!1,a=e=>{i||(i=!0,clearTimeout(s),n?.removeEventListener(`abort`,o),r(e))},o=()=>a({type:`aborted`}),s=setTimeout(()=>a({type:`timeout`}),t);n?.addEventListener(`abort`,o,{once:!0}),e.then(e=>a({type:`result`,result:e}),e=>a({type:`error`,error:e}))})}function H(e){return e instanceof Error?e.message:String(e)}function U(e){let t=0;for(let n of e)n.timestamp>t&&(t=n.timestamp);return t}function W(e,t){return t>0?e.filter(e=>e.timestamp>t):[...e]}e(`live-session-curation`);var ze=8e4,G=`/sessions/.live-deltas`,K={maxMessages:200,maxChars:ze};function q(e,t,n){return`${G}/${e}-${t}-${n}.md`}function J(e,t=K){if(e.length===0)return[];let n=[],r=0;for(let i of e){let e=Ge(i);if(n.length>=t.maxMessages||n.length>0&&r+e>t.maxChars)break;n.push(i),r+=e}n.length===0&&n.push(e[0]);let i=n[n.length-1].timestamp,a=n.length;for(;a<e.length&&e[a].timestamp===i;)n.push(e[a]),a+=1;return n}async function Be(e,t,n,r){let i=t.curatedThrough??0,a=t.sessionId?await X(e,t.sessionId,t.filename,n,i,r):i;return{through:a,caughtUp:a>0&&W(n,a).length===0}}async function Ve(e,t){let n=(t.curatedThrough??0)>0,r=await X(e,t.sessionId,t.filename,t.messages,t.curatedThrough??0),i=W(t.messages,r);if(i.length===0)return{kind:`covered`,through:r};if(!n&&r===0)return{kind:`full`};let a=U(i),o=q(t.sessionId,r,a);return await Z(e,o)?(await Y(e,t.filename,a),{kind:`covered`,through:a}):(await He(e,t,i,o),{kind:`delta`,path:o,through:a,messages:[...i]})}async function Y(e,t,n){n>0&&await re(async()=>{let r=await h(Q(e)),a=r.findIndex(e=>e.filename===t);if(a===-1)return;let o=r[a].curatedThrough??0,s=n>o;if(!s&&r[a].memoryFailed===void 0)return;let{memoryFailed:c,...l}=r[a],u=r.slice();u[a]={...l,curatedThrough:Math.max(n,o),memoryCuratedAt:new Date().toISOString()},await ie(Q(e),u),s&&await Ue(e,`${i}/${t}`,n),await e.flush?.()})}async function X(e,t,n,r,i,a){let o=i;for(let n=0;n<50;n+=1){let n=W(r,o);if(n.length===0)break;let i=U(J(n,a??K));if(i<=o||!await Z(e,q(t,o,i)))break;o=i}return o>i&&await Y(e,n,o),o}async function He(e,t,n,r){let i={id:t.sessionId,sessionId:t.sessionId,title:t.title,frozenAt:t.frozenAt,createdAt:n[0]?.timestamp??0,updatedAt:U(n),messageCount:n.length,messages:[...n],...t.cone?{cone:t.cone}:{},...t.coneLabel?{coneLabel:t.coneLabel}:{}};await e.mkdir(G,{recursive:!0}),await e.writeFile(r,m(i))}async function Ue(e,t,n){let r;try{r=await We(e,t)}catch(e){if($(e))return;throw e}let i=r.match(/^---\n([\s\S]*?)\n---\n/);if(!i)return;let a=`curatedThrough: ${n}`,o=/^curatedThrough:\s*\d+\s*$/m.test(i[1])?i[1].replace(/^curatedThrough:\s*\d+\s*$/m,a):`${i[1]}\n${a}`;o!==i[1]&&await e.writeFile(t,`---\n${o}\n---\n${r.slice(i[0].length)}`)}async function Z(e,t){try{return await e.readFile(R(t),{encoding:`utf-8`}),!0}catch(e){if($(e))return!1;throw e}}async function We(e,t){let n=await e.readFile(t,{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}function Ge(e){let t=e.toolCalls?JSON.stringify(e.toolCalls).length:0;return e.content.length+t}function Q(e){return e}function $(e){return e instanceof u?e.code===`ENOENT`:typeof e!=`object`||!e||!(`code`in e)?!1:e.code===`ENOENT`}export{B as a,R as c,b as d,Be as i,ke as l,Y as n,z as o,Ve as r,V as s,G as t,ye as u};
|
package/dist/ui/assets/{live-session-curation-BjZ3N2HU.js → live-session-curation-DoZ7BwQd.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./logger-Cx6Y120U.js";import{i as t}from"./feature-flags-CoR3q8DD.js";import{t as n}from"./record-DTUQtot0.js";import{n as r,o as i,r as a,u as o}from"./descriptor-3sZ9zo81.js";import{n as s,t as c}from"./thinking-level-5x0UAu9N.js";import{t as l}from"./types-D8gIX-W-.js";import{a as u,r as d}from"./memory-budget-CFfevxz_.js";import{i as f,p as ee,s as te}from"./kernel-worker-DLG9IcIa.js";import{t as ne}from"./MEMORY-Byv8wmch.js";import{a as re,i as ie,n as p,o as m,r as h,t as ae}from"./instruction-frontmatter-B48EsYtA.js";import{l as g,n as oe,p as _,r as se,u as v}from"./frozen-archive-writer-BjBi0ClB.js";function y(e){let t=0;for(let n of e)n.timestamp>t&&(t=n.timestamp);return t}function b(e,t){return t>0?e.filter(e=>e.timestamp>t):[...e]}const x=e(`agentic-memory`),ce=e=>[e.memoryPath],le=e=>[`/sessions/`,`/shared/`,...i(e)],ue=/* @__PURE__ */ `awk.cat.cp.cut.date.diff.du.echo.file.find.grep.head.jq.ls.mkdir.mount.mv.nl.od.printf.readlink.rg.sed.sort.stat.tail.touch.tr.uniq.uname.upskill.wc.xxd`.split(`.`),de={arrayKeys:/* @__PURE__ */ new Set([`writablePaths`,`visiblePaths`,`allowedCommands`]),scalarKeys:/* @__PURE__ */ new Set([`model`,`timeoutSeconds`,`dreamTimeoutSeconds`,`thinkingLevel`])},S=3e4;function C(e){return e===`cone`?`memory-curator`:`memory-curator-${e}`}const w={kind:`curate`,nameFor:C,rivalsFor:e=>[E(e)]},T=`{{TASK}}`;function fe(e,t,n){return e.kind===`dream`?`**Consolidation pass** (the nightly dreaming): there is NO new session to mine — skip "Mining the session archive" entirely. Your whole job is to make the existing memory better: consolidated, current, and inside its budget. If the file is missing or empty, reply with one line saying so and stop; never invent memories. The run is hard-stopped after ${n} minutes; a run stopped at that bound lands whatever the memory file holds at that moment (every memory_write leaves a whole, budget-checked file), so consolidate section by section, writing as you go, and finish cleanly when you can.`:`**Curation pass**: mine the archived session at ${t} for what is worth carrying into future sessions, fold it into the memory, and consolidate the whole file in the same pass. Work fast: a pass should finish in well under 10 minutes and is hard-stopped after ${n} minutes — mine the three signals, write, and stop, rather than exploring the archive exhaustively.`}async function pe(e){try{await e.stat(d);return}catch{}try{await e.mkdir(`/etc`,{recursive:!0}),await e.writeFile(d,ne),x.info(`Seeded default ${d}`)}catch(e){x.warn(`Failed to seed ${d}`,{error:R(e)})}}function E(e){return e===`cone`?`memory-dreamer`:`memory-dreamer-${e}`}function D(e,t){let r=e.nameFor(t);return O.test(r)?r:e.nameFor(n)}function me(e,t){let r=O.test(e.nameFor(t))?t:n;return e.rivalsFor?.(r)??[]}const O=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;function k(e,t){return`/scoops/agent-${D(e,t)}`}function he(e){return k(w,e)}const A=he(n);function ge(e){return o({parentJid:null,folder:e?.folder??`cone`})}function j(e,t){if(t.root===r.root)return e;if(e===r.memoryPath)return t.memoryPath;if(e===`/workspace/skills`||e.startsWith(`/workspace/skills/`))return e;let n=`${r.root}/`;return e===r.root?t.root:e.startsWith(n)?`${t.root}/${e.slice(n.length)}`:e}function _e(e,t){let n=`${a}/`,r=e=>e.some(e=>n.startsWith(e.endsWith(`/`)?e:`${e}/`)),i=e.map(e=>j(e,t));return r(e)&&!r(i)&&i.push(n),i}async function M(e){try{if(e.signal?.aborted)return{ok:!1,reason:`aborted`,legacyFallbackSafe:!1};let t=e.instructions??w,n=ge(e.cone),r=k(t,e.cone?.folder??`cone`),i=await ve(e.vfs,n),a=t.kind===`dream`?i.dreamTimeoutSeconds:i.timeoutSeconds,o=L(e.sessionArchivePath);try{await xe(e.vfs,n.memoryPath,e.sessionArchivePath)}catch(e){return{ok:!1,reason:`snapshot: ${R(e)}`,legacyFallbackSafe:!0}}let s=t.kind===`dream`?`(no session archive this pass)`:e.sessionArchivePath,c=Math.max(1,Math.round(a/60)),l=fe(t,s,c),d=Ce(i,a,we(Te(i.promptTemplate.includes(T)?i.promptTemplate:`${i.promptTemplate.trimEnd()}\n\n${T}`,{MEMORY_PATH:o,SESSION_ARCHIVE_PATH:s,SESSION_COUNT:String(e.sessionCount),BUDGET_CHARS:String(u(e.sessionCount)),SCRATCH_DIR:r,VISIBLE_PATHS:i.visiblePaths.join(`, `),TODAY:e.today??(/* @__PURE__ */ new Date()).toISOString().slice(0,10),TIMEOUT_MINUTES:String(c),TASK:l}),r),e.sessionArchivePath,n,e.cone,t);e.signal&&(d.signal=e.signal);let f=await Ee(Promise.resolve().then(()=>e.spawn(d)),a*1e3+S,e.signal);if(f.type===`timeout`)return x.warn(`Agentic memory wait timed out past the in-run bound + grace`,{timeoutSeconds:a,graceMs:S}),{ok:!1,reason:`timeout`,legacyFallbackSafe:!1};if(f.type===`aborted`)return{ok:!1,reason:`aborted`,legacyFallbackSafe:!1};if(f.type===`error`)return{ok:!1,reason:R(f.error),legacyFallbackSafe:!0};if(f.result.exitCode!==0){let e=(f.result.finalText??``).startsWith(ee);return{ok:!1,reason:f.result.finalText||`exit-${f.result.exitCode}`,legacyFallbackSafe:!e}}return{ok:!0,report:f.result.finalText}}catch(e){return x.warn(`Agentic memory pass failed`,{error:R(e)}),{ok:!1,reason:R(e),legacyFallbackSafe:!1}}}async function ve(e,t=r){try{let n=await e.readFile(d,{encoding:`utf-8`});return N(typeof n==`string`?n:new TextDecoder().decode(n),t)}catch(e){return x.warn(`Could not load valid ${d}; using built-in default`,{error:R(e)}),N(ne,t)}}function N(e,t=r){let n=re(e,`MEMORY.md`),i=ae(n.frontmatter,de),a=p(i,`writablePaths`,ce(t));if(a.length===0)throw Error(`writablePaths must not be empty`);m(a,`writablePaths`);let o=p(i,`visiblePaths`,le(t));m(o,`visiblePaths`);let s=h(i.timeoutSeconds,600,1200),c=h(i.dreamTimeoutSeconds,3600,7200,`dreamTimeoutSeconds`),l=ie(i.model,`model`);return{writablePaths:a.map(e=>j(e,t)),visiblePaths:_e(o,t),allowedCommands:[.../* @__PURE__ */ new Set([...ue,...p(i,`allowedCommands`,[])])],...l?{model:l}:{},thinkingLevel:ye(i.thinkingLevel),timeoutSeconds:s,dreamTimeoutSeconds:c,promptTemplate:n.body}}function ye(e){if(e===void 0)return`medium`;if(typeof e!=`string`||!s(e))throw Error(`thinkingLevel must be one of ${c.join(`, `)}`);return e}function P(e){return`/sessions/.curated/${e.slice(e.lastIndexOf(`/`)+1)}`}function F(e){return`/sessions/.curation/${e.slice(e.lastIndexOf(`/`)+1)}`}function I(e){return`${F(e)}/base.md`}function L(e){return`${F(e)}/draft.md`}function be(e){return`${F(e)}/status.json`}async function xe(e,t,n){let r=``;try{let n=await e.readFile(t,{encoding:`utf-8`});r=typeof n==`string`?n:new TextDecoder().decode(n)}catch{}await e.mkdir(F(n),{recursive:!0}),await e.writeFile(I(n),r),await e.writeFile(L(n),r)}function Se(e,t,n){let r=e.map(e=>e===t?n:e);return r.includes(n)?r:[...r,n]}function Ce(e,t,n,r,i,a,o){let s=e.model===`parent`||e.model===`cone`,c=I(r),l=L(r);return{cwd:i.root,writablePaths:Se(e.writablePaths,i.memoryPath,l),visiblePaths:[...e.visiblePaths,`${F(r)}/`],allowedCommands:e.allowedCommands,prompt:n,thinkingLevel:e.thinkingLevel,persistSession:!0,name:D(o,a?.folder??`cone`),exclusiveWith:me(o,a?.folder??`cone`),...a?.jid?{parentJid:a.jid}:{},notifyOnComplete:!0,successReceiptPath:P(r),mergeOnSuccess:{targetPath:i.memoryPath,basePath:c,draftPath:l},outcomeReceiptPath:be(r),maxWallClockMs:t*1e3,...!s&&e.model?{modelId:e.model}:{}}}function we(e,t){if(t===A)return e;let n=`\0SCRATCH\0`;return e.replaceAll(t,n).replaceAll(A,t).replaceAll(n,t)}function Te(e,t){let n=e;for(let[e,r]of Object.entries(t))n=n.replaceAll(`{{${e}}}`,r);return n}function Ee(e,t,n){return new Promise(r=>{let i=!1,a=e=>{i||(i=!0,clearTimeout(s),n?.removeEventListener(`abort`,o),r(e))},o=()=>a({type:`aborted`}),s=setTimeout(()=>a({type:`timeout`}),t);n?.addEventListener(`abort`,o,{once:!0}),e.then(e=>a({type:`result`,result:e}),e=>a({type:`error`,error:e}))})}function R(e){return e instanceof Error?e.message:String(e)}const z=e(`live-session-curation`),B=`/sessions/.live-deltas`,V={maxMessages:200,maxChars:8e4},H=/* @__PURE__ */ new Map,U=/* @__PURE__ */ new Map;function W(){return t(`memory-v2`)&&t(`agentic-memory`)}function G(e,t,n){return`${B}/${e}-${t}-${n}.md`}function K(e,t=V){if(e.length===0)return[];let n=[],r=0;for(let i of e){let e=ze(i);if(n.length>=t.maxMessages||n.length>0&&r+e>t.maxChars)break;n.push(i),r+=e}n.length===0&&n.push(e[0]);let i=n[n.length-1].timestamp,a=n.length;for(;a<e.length&&e[a].timestamp===i;)n.push(e[a]),a+=1;return n}function De(e){if(!W())return Promise.resolve({status:`skipped`,reason:`flag-off`});let t=e.cone.folder||`cone`,n={...e.cone,folder:t},r=Re();if(!r)return z.info(`Live delta curation skipped: agent bridge not published`,{cone:t}),Promise.resolve({status:`skipped`,reason:`no-bridge`});let i={...e,cone:n},a=H.get(t);return a==null?Y(i,r):(U.set(t,i),a)}function q(e){let t=e.cone.folder||`cone`,n={...e.cone,folder:t},r={...e,cone:n};if(e.hold===`held`)return ke(r);let i=H.get(t);return i==null?X(t,ke(r)):i.then(()=>q(r))}async function J(e,t,n){n>0&&await v(async()=>{let r=await g(Z(e)),i=r.findIndex(e=>e.filename===t);if(i===-1)return;let a=r[i].curatedThrough??0,o=n>a;if(!o&&r[i].memoryFailed===void 0)return;let{memoryFailed:s,...c}=r[i],l=r.slice();l[i]={...c,curatedThrough:Math.max(n,a),memoryCuratedAt:(/* @__PURE__ */ new Date()).toISOString()},await _(Z(e),l),o&&await Pe(e,`${f}/${t}`,n),await e.flush?.()})}function Y(e,t){return X(e.cone.folder||`cone`,q({vfs:e.vfs,cone:e.cone,spawn:e=>t.spawn(e),enabled:!0,hold:`held`,...e.limits?{limits:e.limits}:{}}))}function X(e,t){return H.set(e,t),t.then(()=>Oe(e,t),()=>Oe(e,t)),t}function Oe(e,t){if(H.get(e)!==t)return;H.delete(e);let n=U.get(e);if(U.delete(e),!n||!W())return;let r=Re();r&&Y(n,r).catch(t=>{z.warn(`Follow-up live delta curation failed to start`,{cone:e,error:Q(t)})})}async function ke(e){if(!(e.enabled??W()))return{status:`skipped`,reason:`flag-off`};let t=e.cone.folder||`cone`,n=e.limits??V,r;try{r=await g(Z(e.vfs))}catch(e){return z.warn(`Live delta curation skipped: sessions index unreadable`,{cone:t,error:Q(e)}),{status:`skipped`,reason:`index-unreadable`}}let i=oe(r,t);if(!i?.sessionId)return{status:`skipped`,reason:`no-archive`};let a=await Fe(e.vfs,`${f}/${i.filename}`);if(!a)return{status:`skipped`,reason:`no-archive`};let o=await Ae(e.vfs,i.sessionId,i.filename,a,i.curatedThrough??0,n),s=b(a,o);if(s.length===0)return{status:`skipped`,reason:`caught-up`};let c=K(s,n),l=y(c);if(l<=o)return{status:`skipped`,reason:`caught-up`};let u=G(i.sessionId,o,l);await je(e.vfs,{sessionId:i.sessionId,filename:i.filename,title:i.title,frozenAt:i.frozenAt,cone:i.cone,coneLabel:i.coneLabel},c,u);let d=await M({spawn:e.spawn,vfs:e.vfs,sessionArchivePath:u,sessionCount:r.length,...t!==`cone`||e.cone.jid?{cone:e.cone}:{},...e.signal?{signal:e.signal}:{}});return d.ok?(await J(e.vfs,i.filename,l),z.info(`Live delta curated`,{cone:t,filename:i.filename,through:l}),{status:`curated`,curatedThrough:l,filename:i.filename}):(d.reason.startsWith(`agent: name already in use`)||await Me(e.vfs,i.filename,d.reason),z.warn(`Live delta curation failed`,{cone:t,filename:i.filename,reason:d.reason}),{status:`failed`,reason:d.reason,filename:i.filename})}async function Ae(e,t,n,r,i,a){let o=i;for(let n=0;n<50;n+=1){let n=b(r,o);if(n.length===0)break;let i=y(K(n,a??V));if(i<=o||!await Ie(e,G(t,o,i)))break;o=i}return o>i&&await J(e,n,o),o}async function je(e,t,n,r){let i={id:t.sessionId,sessionId:t.sessionId,title:t.title,frozenAt:t.frozenAt,createdAt:n[0]?.timestamp??0,updatedAt:y(n),messageCount:n.length,messages:[...n],...t.cone?{cone:t.cone}:{},...t.coneLabel?{coneLabel:t.coneLabel}:{}};await e.mkdir(B,{recursive:!0}),await e.writeFile(r,se(i))}async function Me(e,t,n){await Ne(e,t,{ok:!1,reason:n})}async function Ne(e,t,n,r){try{await v(async()=>{let i=await g(Z(e)),a=i.findIndex(e=>e.filename===t);if(a===-1)return;let o=i[a].cone??`cone`;if(r!==void 0&&o!==r)return;let{memoryFailed:s,...c}=i[a],l=i.slice();l[a]=n.ok?{...c,memoryCuratedAt:(/* @__PURE__ */ new Date()).toISOString()}:{...i[a],memoryFailed:n.reason.slice(0,300)},await _(Z(e),l),await e.flush?.()})}catch(e){z.warn(`Failed to record curation outcome`,{filename:t,error:Q(e)})}}async function Pe(e,t,n){let r;try{r=await Le(e,t)}catch(e){if($(e))return;throw e}let i=r.match(/^---\n([\s\S]*?)\n---\n/);if(!i)return;let a=`curatedThrough: ${n}`,o=/^curatedThrough:\s*\d+\s*$/m.test(i[1])?i[1].replace(/^curatedThrough:\s*\d+\s*$/m,a):`${i[1]}\n${a}`;o!==i[1]&&await e.writeFile(t,`---\n${o}\n---\n${r.slice(i[0].length)}`)}async function Fe(e,t){try{return te(await Le(e,t)).messages}catch(e){if($(e))return null;throw e}}async function Ie(e,t){try{return await e.readFile(P(t),{encoding:`utf-8`}),!0}catch(e){if($(e))return!1;throw e}}async function Le(e,t){let n=await e.readFile(t,{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}function Re(){return globalThis.__slicc_agent}function ze(e){let t=e.toolCalls?JSON.stringify(e.toolCalls).length:0;return e.content.length+t}function Z(e){return e}function Q(e){return e instanceof Error?e.message:String(e)}function $(e){return e instanceof l?e.code===`ENOENT`:typeof e!=`object`||!e||!(`code`in e)?!1:e.code===`ENOENT`}export{q as curateLiveSessionDelta,pe as i,W as liveDeltaCurationEnabled,E as n,M as r,De as scheduleLiveDeltaCuration,Ne as stampCurationOutcome,C as t};
|
|
1
|
+
import{t as e}from"./logger-Cx6Y120U.js";import{i as t}from"./feature-flags-CoR3q8DD.js";import{t as n}from"./record-DTUQtot0.js";import{n as r,o as i,r as a,u as o}from"./descriptor-3sZ9zo81.js";import{n as s,t as c}from"./thinking-level-5x0UAu9N.js";import{t as l}from"./types-D8gIX-W-.js";import{a as u,r as d}from"./memory-budget-CFfevxz_.js";import{i as f,m as ee,s as te}from"./kernel-worker-BQddJN6m.js";import{t as ne}from"./MEMORY-Byv8wmch.js";import{a as re,i as ie,n as p,o as m,r as h,t as ae}from"./instruction-frontmatter-B48EsYtA.js";import{l as g,n as oe,p as _,r as se,u as v}from"./frozen-archive-writer-qYFDiThA.js";function y(e){let t=0;for(let n of e)n.timestamp>t&&(t=n.timestamp);return t}function b(e,t){return t>0?e.filter(e=>e.timestamp>t):[...e]}const x=e(`agentic-memory`),ce=e=>[e.memoryPath],le=e=>[`/sessions/`,`/shared/`,...i(e)],ue=/* @__PURE__ */ `awk.cat.cp.cut.date.diff.du.echo.file.find.grep.head.jq.ls.mkdir.mount.mv.nl.od.printf.readlink.rg.sed.sort.stat.tail.touch.tr.uniq.uname.upskill.wc.xxd`.split(`.`),de={arrayKeys:/* @__PURE__ */ new Set([`writablePaths`,`visiblePaths`,`allowedCommands`]),scalarKeys:/* @__PURE__ */ new Set([`model`,`timeoutSeconds`,`dreamTimeoutSeconds`,`thinkingLevel`])},S=3e4;function C(e){return e===`cone`?`memory-curator`:`memory-curator-${e}`}const w={kind:`curate`,nameFor:C,rivalsFor:e=>[E(e)]},T=`{{TASK}}`;function fe(e,t,n){return e.kind===`dream`?`**Consolidation pass** (the nightly dreaming): there is NO new session to mine — skip "Mining the session archive" entirely. Your whole job is to make the existing memory better: consolidated, current, and inside its budget. If the file is missing or empty, reply with one line saying so and stop; never invent memories. The run is hard-stopped after ${n} minutes; a run stopped at that bound lands whatever the memory file holds at that moment (every memory_write leaves a whole, budget-checked file), so consolidate section by section, writing as you go, and finish cleanly when you can.`:`**Curation pass**: mine the archived session at ${t} for what is worth carrying into future sessions, fold it into the memory, and consolidate the whole file in the same pass. Work fast: a pass should finish in well under 10 minutes and is hard-stopped after ${n} minutes — mine the three signals, write, and stop, rather than exploring the archive exhaustively.`}async function pe(e){try{await e.stat(d);return}catch{}try{await e.mkdir(`/etc`,{recursive:!0}),await e.writeFile(d,ne),x.info(`Seeded default ${d}`)}catch(e){x.warn(`Failed to seed ${d}`,{error:R(e)})}}function E(e){return e===`cone`?`memory-dreamer`:`memory-dreamer-${e}`}function D(e,t){let r=e.nameFor(t);return O.test(r)?r:e.nameFor(n)}function me(e,t){let r=O.test(e.nameFor(t))?t:n;return e.rivalsFor?.(r)??[]}const O=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;function k(e,t){return`/scoops/agent-${D(e,t)}`}function he(e){return k(w,e)}const A=he(n);function ge(e){return o({parentJid:null,folder:e?.folder??`cone`})}function j(e,t){if(t.root===r.root)return e;if(e===r.memoryPath)return t.memoryPath;if(e===`/workspace/skills`||e.startsWith(`/workspace/skills/`))return e;let n=`${r.root}/`;return e===r.root?t.root:e.startsWith(n)?`${t.root}/${e.slice(n.length)}`:e}function _e(e,t){let n=`${a}/`,r=e=>e.some(e=>n.startsWith(e.endsWith(`/`)?e:`${e}/`)),i=e.map(e=>j(e,t));return r(e)&&!r(i)&&i.push(n),i}async function M(e){try{if(e.signal?.aborted)return{ok:!1,reason:`aborted`,legacyFallbackSafe:!1};let t=e.instructions??w,n=ge(e.cone),r=k(t,e.cone?.folder??`cone`),i=await ve(e.vfs,n),a=t.kind===`dream`?i.dreamTimeoutSeconds:i.timeoutSeconds,o=L(e.sessionArchivePath);try{await xe(e.vfs,n.memoryPath,e.sessionArchivePath)}catch(e){return{ok:!1,reason:`snapshot: ${R(e)}`,legacyFallbackSafe:!0}}let s=t.kind===`dream`?`(no session archive this pass)`:e.sessionArchivePath,c=Math.max(1,Math.round(a/60)),l=fe(t,s,c),d=Ce(i,a,we(Te(i.promptTemplate.includes(T)?i.promptTemplate:`${i.promptTemplate.trimEnd()}\n\n${T}`,{MEMORY_PATH:o,SESSION_ARCHIVE_PATH:s,SESSION_COUNT:String(e.sessionCount),BUDGET_CHARS:String(u(e.sessionCount)),SCRATCH_DIR:r,VISIBLE_PATHS:i.visiblePaths.join(`, `),TODAY:e.today??(/* @__PURE__ */ new Date()).toISOString().slice(0,10),TIMEOUT_MINUTES:String(c),TASK:l}),r),e.sessionArchivePath,n,e.cone,t);e.signal&&(d.signal=e.signal);let f=await Ee(Promise.resolve().then(()=>e.spawn(d)),a*1e3+S,e.signal);if(f.type===`timeout`)return x.warn(`Agentic memory wait timed out past the in-run bound + grace`,{timeoutSeconds:a,graceMs:S}),{ok:!1,reason:`timeout`,legacyFallbackSafe:!1};if(f.type===`aborted`)return{ok:!1,reason:`aborted`,legacyFallbackSafe:!1};if(f.type===`error`)return{ok:!1,reason:R(f.error),legacyFallbackSafe:!0};if(f.result.exitCode!==0){let e=(f.result.finalText??``).startsWith(ee);return{ok:!1,reason:f.result.finalText||`exit-${f.result.exitCode}`,legacyFallbackSafe:!e}}return{ok:!0,report:f.result.finalText}}catch(e){return x.warn(`Agentic memory pass failed`,{error:R(e)}),{ok:!1,reason:R(e),legacyFallbackSafe:!1}}}async function ve(e,t=r){try{let n=await e.readFile(d,{encoding:`utf-8`});return N(typeof n==`string`?n:new TextDecoder().decode(n),t)}catch(e){return x.warn(`Could not load valid ${d}; using built-in default`,{error:R(e)}),N(ne,t)}}function N(e,t=r){let n=re(e,`MEMORY.md`),i=ae(n.frontmatter,de),a=p(i,`writablePaths`,ce(t));if(a.length===0)throw Error(`writablePaths must not be empty`);m(a,`writablePaths`);let o=p(i,`visiblePaths`,le(t));m(o,`visiblePaths`);let s=h(i.timeoutSeconds,600,1200),c=h(i.dreamTimeoutSeconds,3600,7200,`dreamTimeoutSeconds`),l=ie(i.model,`model`);return{writablePaths:a.map(e=>j(e,t)),visiblePaths:_e(o,t),allowedCommands:[.../* @__PURE__ */ new Set([...ue,...p(i,`allowedCommands`,[])])],...l?{model:l}:{},thinkingLevel:ye(i.thinkingLevel),timeoutSeconds:s,dreamTimeoutSeconds:c,promptTemplate:n.body}}function ye(e){if(e===void 0)return`medium`;if(typeof e!=`string`||!s(e))throw Error(`thinkingLevel must be one of ${c.join(`, `)}`);return e}function P(e){return`/sessions/.curated/${e.slice(e.lastIndexOf(`/`)+1)}`}function F(e){return`/sessions/.curation/${e.slice(e.lastIndexOf(`/`)+1)}`}function I(e){return`${F(e)}/base.md`}function L(e){return`${F(e)}/draft.md`}function be(e){return`${F(e)}/status.json`}async function xe(e,t,n){let r=``;try{let n=await e.readFile(t,{encoding:`utf-8`});r=typeof n==`string`?n:new TextDecoder().decode(n)}catch{}await e.mkdir(F(n),{recursive:!0}),await e.writeFile(I(n),r),await e.writeFile(L(n),r)}function Se(e,t,n){let r=e.map(e=>e===t?n:e);return r.includes(n)?r:[...r,n]}function Ce(e,t,n,r,i,a,o){let s=e.model===`parent`||e.model===`cone`,c=I(r),l=L(r);return{cwd:i.root,writablePaths:Se(e.writablePaths,i.memoryPath,l),visiblePaths:[...e.visiblePaths,`${F(r)}/`],allowedCommands:e.allowedCommands,prompt:n,thinkingLevel:e.thinkingLevel,persistSession:!0,name:D(o,a?.folder??`cone`),exclusiveWith:me(o,a?.folder??`cone`),...a?.jid?{parentJid:a.jid}:{},notifyOnComplete:!0,successReceiptPath:P(r),mergeOnSuccess:{targetPath:i.memoryPath,basePath:c,draftPath:l},outcomeReceiptPath:be(r),maxWallClockMs:t*1e3,...!s&&e.model?{modelId:e.model}:{}}}function we(e,t){if(t===A)return e;let n=`\0SCRATCH\0`;return e.replaceAll(t,n).replaceAll(A,t).replaceAll(n,t)}function Te(e,t){let n=e;for(let[e,r]of Object.entries(t))n=n.replaceAll(`{{${e}}}`,r);return n}function Ee(e,t,n){return new Promise(r=>{let i=!1,a=e=>{i||(i=!0,clearTimeout(s),n?.removeEventListener(`abort`,o),r(e))},o=()=>a({type:`aborted`}),s=setTimeout(()=>a({type:`timeout`}),t);n?.addEventListener(`abort`,o,{once:!0}),e.then(e=>a({type:`result`,result:e}),e=>a({type:`error`,error:e}))})}function R(e){return e instanceof Error?e.message:String(e)}const z=e(`live-session-curation`),B=`/sessions/.live-deltas`,V={maxMessages:200,maxChars:8e4},H=/* @__PURE__ */ new Map,U=/* @__PURE__ */ new Map;function W(){return t(`memory-v2`)&&t(`agentic-memory`)}function G(e,t,n){return`${B}/${e}-${t}-${n}.md`}function K(e,t=V){if(e.length===0)return[];let n=[],r=0;for(let i of e){let e=ze(i);if(n.length>=t.maxMessages||n.length>0&&r+e>t.maxChars)break;n.push(i),r+=e}n.length===0&&n.push(e[0]);let i=n[n.length-1].timestamp,a=n.length;for(;a<e.length&&e[a].timestamp===i;)n.push(e[a]),a+=1;return n}function De(e){if(!W())return Promise.resolve({status:`skipped`,reason:`flag-off`});let t=e.cone.folder||`cone`,n={...e.cone,folder:t},r=Re();if(!r)return z.info(`Live delta curation skipped: agent bridge not published`,{cone:t}),Promise.resolve({status:`skipped`,reason:`no-bridge`});let i={...e,cone:n},a=H.get(t);return a==null?Y(i,r):(U.set(t,i),a)}function q(e){let t=e.cone.folder||`cone`,n={...e.cone,folder:t},r={...e,cone:n};if(e.hold===`held`)return ke(r);let i=H.get(t);return i==null?X(t,ke(r)):i.then(()=>q(r))}async function J(e,t,n){n>0&&await v(async()=>{let r=await g(Z(e)),i=r.findIndex(e=>e.filename===t);if(i===-1)return;let a=r[i].curatedThrough??0,o=n>a;if(!o&&r[i].memoryFailed===void 0)return;let{memoryFailed:s,...c}=r[i],l=r.slice();l[i]={...c,curatedThrough:Math.max(n,a),memoryCuratedAt:(/* @__PURE__ */ new Date()).toISOString()},await _(Z(e),l),o&&await Pe(e,`${f}/${t}`,n),await e.flush?.()})}function Y(e,t){return X(e.cone.folder||`cone`,q({vfs:e.vfs,cone:e.cone,spawn:e=>t.spawn(e),enabled:!0,hold:`held`,...e.limits?{limits:e.limits}:{}}))}function X(e,t){return H.set(e,t),t.then(()=>Oe(e,t),()=>Oe(e,t)),t}function Oe(e,t){if(H.get(e)!==t)return;H.delete(e);let n=U.get(e);if(U.delete(e),!n||!W())return;let r=Re();r&&Y(n,r).catch(t=>{z.warn(`Follow-up live delta curation failed to start`,{cone:e,error:Q(t)})})}async function ke(e){if(!(e.enabled??W()))return{status:`skipped`,reason:`flag-off`};let t=e.cone.folder||`cone`,n=e.limits??V,r;try{r=await g(Z(e.vfs))}catch(e){return z.warn(`Live delta curation skipped: sessions index unreadable`,{cone:t,error:Q(e)}),{status:`skipped`,reason:`index-unreadable`}}let i=oe(r,t);if(!i?.sessionId)return{status:`skipped`,reason:`no-archive`};let a=await Fe(e.vfs,`${f}/${i.filename}`);if(!a)return{status:`skipped`,reason:`no-archive`};let o=await Ae(e.vfs,i.sessionId,i.filename,a,i.curatedThrough??0,n),s=b(a,o);if(s.length===0)return{status:`skipped`,reason:`caught-up`};let c=K(s,n),l=y(c);if(l<=o)return{status:`skipped`,reason:`caught-up`};let u=G(i.sessionId,o,l);await je(e.vfs,{sessionId:i.sessionId,filename:i.filename,title:i.title,frozenAt:i.frozenAt,cone:i.cone,coneLabel:i.coneLabel},c,u);let d=await M({spawn:e.spawn,vfs:e.vfs,sessionArchivePath:u,sessionCount:r.length,...t!==`cone`||e.cone.jid?{cone:e.cone}:{},...e.signal?{signal:e.signal}:{}});return d.ok?(await J(e.vfs,i.filename,l),z.info(`Live delta curated`,{cone:t,filename:i.filename,through:l}),{status:`curated`,curatedThrough:l,filename:i.filename}):(d.reason.startsWith(`agent: name already in use`)||await Me(e.vfs,i.filename,d.reason),z.warn(`Live delta curation failed`,{cone:t,filename:i.filename,reason:d.reason}),{status:`failed`,reason:d.reason,filename:i.filename})}async function Ae(e,t,n,r,i,a){let o=i;for(let n=0;n<50;n+=1){let n=b(r,o);if(n.length===0)break;let i=y(K(n,a??V));if(i<=o||!await Ie(e,G(t,o,i)))break;o=i}return o>i&&await J(e,n,o),o}async function je(e,t,n,r){let i={id:t.sessionId,sessionId:t.sessionId,title:t.title,frozenAt:t.frozenAt,createdAt:n[0]?.timestamp??0,updatedAt:y(n),messageCount:n.length,messages:[...n],...t.cone?{cone:t.cone}:{},...t.coneLabel?{coneLabel:t.coneLabel}:{}};await e.mkdir(B,{recursive:!0}),await e.writeFile(r,se(i))}async function Me(e,t,n){await Ne(e,t,{ok:!1,reason:n})}async function Ne(e,t,n,r){try{await v(async()=>{let i=await g(Z(e)),a=i.findIndex(e=>e.filename===t);if(a===-1)return;let o=i[a].cone??`cone`;if(r!==void 0&&o!==r)return;let{memoryFailed:s,...c}=i[a],l=i.slice();l[a]=n.ok?{...c,memoryCuratedAt:(/* @__PURE__ */ new Date()).toISOString()}:{...i[a],memoryFailed:n.reason.slice(0,300)},await _(Z(e),l),await e.flush?.()})}catch(e){z.warn(`Failed to record curation outcome`,{filename:t,error:Q(e)})}}async function Pe(e,t,n){let r;try{r=await Le(e,t)}catch(e){if($(e))return;throw e}let i=r.match(/^---\n([\s\S]*?)\n---\n/);if(!i)return;let a=`curatedThrough: ${n}`,o=/^curatedThrough:\s*\d+\s*$/m.test(i[1])?i[1].replace(/^curatedThrough:\s*\d+\s*$/m,a):`${i[1]}\n${a}`;o!==i[1]&&await e.writeFile(t,`---\n${o}\n---\n${r.slice(i[0].length)}`)}async function Fe(e,t){try{return te(await Le(e,t)).messages}catch(e){if($(e))return null;throw e}}async function Ie(e,t){try{return await e.readFile(P(t),{encoding:`utf-8`}),!0}catch(e){if($(e))return!1;throw e}}async function Le(e,t){let n=await e.readFile(t,{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}function Re(){return globalThis.__slicc_agent}function ze(e){let t=e.toolCalls?JSON.stringify(e.toolCalls).length:0;return e.content.length+t}function Z(e){return e}function Q(e){return e instanceof Error?e.message:String(e)}function $(e){return e instanceof l?e.code===`ENOENT`:typeof e!=`object`||!e||!(`code`in e)?!1:e.code===`ENOENT`}export{q as curateLiveSessionDelta,pe as i,W as liveDeltaCurationEnabled,E as n,M as r,De as scheduleLiveDeltaCuration,Ne as stampCurationOutcome,C as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./logger-Cx6Y120U.js";import{n as t}from"./record-DTUQtot0.js";import{t as n}from"./agent-message-to-chat-CGO6oI4A.js";import{t as r}from"./types-D8gIX-W-.js";import{i,o as a,s as o}from"./kernel-worker-BQddJN6m.js";import{a as s,c,d as l,f as u,l as d,n as f,p,r as m,s as h,t as g,u as _}from"./frozen-archive-writer-qYFDiThA.js";const v=e(`live-session-snapshot`);function y(e,t){return`/scoops/${e}/sessions/${t}`}function b(e){let t=e.cone.folder||`cone`,r=e.sessionsDir??`/sessions`,i=n(e.messages,{source:e.cone.label??t,uncapped:!0});return _(async()=>e.stillValid&&!e.stillValid()?(v.info(`Live session snapshot skipped: session gone before the write`,{cone:t,sessionsDir:r,trigger:e.trigger}),null):x(e,t,r,i),l(r))}async function x(e,n,r,i){let o=e.now??Date.now,l=await d(e.vfs,r),p=f(l,n),_=p?await E(e.vfs,r,p):null,y=_===null?0:p?.liveThrough??T(_),b=w(i,_??[],y),x=[..._??[],...b],S=Math.max(y,T(i)),C=p?.filename??c(n),D=p?.frozenAt??new Date(o()).toISOString(),O=s(x),k=p?.title&&!h(p.title)?p.title:O,A=(p?.compactions??0)+1,j={cone:n,...n!==`cone`&&e.cone.label?{coneLabel:e.cone.label}:{}},M=p?.sessionId??crypto.randomUUID(),N={id:t({folder:n}),sessionId:M,title:k,frozenAt:D,createdAt:x[0]?.timestamp||o(),updatedAt:o(),messageCount:x.length,messages:x,...j,live:!0,liveThrough:S,compactions:A,...p?.curatedThrough?{curatedThrough:p.curatedThrough}:{}},P={filename:C,sessionId:M,title:k,frozenAt:D,messageCount:x.length,...j,...p?.icon?{icon:p.icon}:{},live:!0,liveThrough:S,compactions:A,...a(p)};await g(e.vfs,r);let F=`${r}/${C}`;return await e.vfs.writeFile(F,m(N)),await u(e.vfs,P,r,l),await e.vfs.flush(),v.info(`Live session snapshot written`,{cone:n,sessionsDir:r,filename:C,trigger:e.trigger,appended:b.length,total:x.length,compactions:A}),{transcriptPath:F,entry:P,appended:b.length}}function S(e,t){let n=t||`cone`;return _(async()=>{let t=await d(e),r=f(t,n);if(!r)return!1;let{live:a,liveThrough:o,...s}=r,c={...s,pendingEnrichment:!0};return await p(e,t.map(e=>e===r?c:e)),await D(e,`${i}/${r.filename}`),await e.flush(),v.info(`Live session snapshot finalized`,{cone:n,filename:r.filename}),!0})}function C(e,t){let n=t||`cone`;return _(async()=>{let t=await d(e),a=t.filter(e=>e.live===!0&&(e.cone??`cone`)===n);if(a.length===0)return 0;await p(e,t.filter(e=>!a.includes(e)));for(let t of a){try{await e.rm(`${i}/${t.filename}`)}catch(e){if(!(e instanceof r)||e.code!==`ENOENT`)throw e}let{removeSessionJsonl:n}=await import(`./session-jsonl-Du5hJR-Y.js`);await n(e,t.filename)}let{invalidateSessionSearchIndex:o}=await import(`./session-search-index-QQ1sxRWT.js`);return await o(e),await e.flush(),v.info(`Live session snapshot discarded`,{cone:n,removed:a.length}),a.length})}function w(e,t,n){if(t.length===0)return e;let r=t.filter(e=>e.timestamp===n);return e.filter(e=>e.timestamp>n?!0:e.timestamp<n?!1:!r.some(t=>t.role===e.role&&t.content===e.content))}function T(e){let t=0;for(let n of e)n.timestamp>t&&(t=n.timestamp);return t}async function E(e,t,n){try{let r=await e.readFile(`${t}/${n.filename}`,{encoding:`utf-8`}),i=typeof r==`string`?r:new TextDecoder().decode(r);return o(i).messages}catch(e){if(!(e instanceof r)||e.code!==`ENOENT`)throw e;return v.warn(`Live snapshot archive missing; rewriting from the agent history`,{sessionsDir:t,filename:n.filename}),null}}async function D(e,t){try{let n=await e.readFile(t,{encoding:`utf-8`}),r=typeof n==`string`?n:new TextDecoder().decode(n),i=r.match(/^---\n([\s\S]*?)\n---\n/);if(!i)return;let a=i[1].replace(/^(live: true|liveThrough: \d+)\n?/gm,``);if(a===i[1])return;await e.writeFile(t,`---\n${a}\n---\n${r.slice(i[0].length)}`)}catch(e){if(e instanceof r&&e.code===`ENOENT`)return;throw e}}export{C as discardLiveSnapshot,S as finalizeLiveSnapshot,y as scoopSessionsDir,b as snapshotLiveSession};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DBVvNlSN.js";import{t}from"./logger-Cx6Y120U.js";import{c as n}from"./account-store-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DBVvNlSN.js";import{t}from"./logger-Cx6Y120U.js";import{c as n}from"./account-store-BL_8ChTq.js";import{a as r}from"./diagnostics-B-5VkVir.js";import{a as i}from"./compat-CuWVDYYO.js";import{r as a,s as o}from"./legacy-api-aliases-DcPvcesD.js";import{n as s}from"./pi-transcript-context-C6LXdArv.js";var c=/* @__PURE__ */ e({config:()=>f,detectRuntime:()=>E,discoverModels:()=>T,originOf:()=>C,register:()=>b,verifyConnection:()=>k});const l=t(`local-llm`),u=`local-llm`,d=`${u}-unconfigured`,f={id:u,name:`Local LLM (OpenAI-compatible)`,description:[`Connect to any OpenAI-compatible local model server.`,``,`Common base URLs:`,` • Ollama http://localhost:11434/v1`,` • LM Studio http://localhost:1234/v1`,` • llama.cpp http://localhost:8080/v1`,` • vLLM http://localhost:8000/v1`,` • mlx_lm http://localhost:8080/v1`,` • Jan http://localhost:1337/v1`,``,`Ollama needs OLLAMA_ORIGINS=* (or chrome-extension://*) so the`,`browser can reach it. macOS: launchctl setenv OLLAMA_ORIGINS "*".`].join(`
|
|
2
2
|
`),requiresApiKey:!1,optionalApiKey:!0,apiKeyPlaceholder:`Leave empty for local servers, or paste a key for hosted endpoints`,apiKeyEnvVar:`LOCAL_LLM_API_KEY`,requiresBaseUrl:!0,baseUrlPlaceholder:`http://localhost:11434/v1`,baseUrlDescription:`Ollama: 11434 • LM Studio: 1234 • llama.cpp/mlx: 8080 • vLLM: 8000 • Jan: 1337. Trailing /v1 required.`,requiresDeployment:!0,deploymentPlaceholder:`llama3.1:8b, qwen2.5-coder:14b`,deploymentDescription:`Comma-separated model IDs from your server. List them with: curl <baseUrl>/models | jq -r .data[].id`,getModelIds:()=>{let e=p(n(u));return e.length===0?[{id:d,name:`Local LLM (set base URL + model IDs in Settings)`,api:`openai`}]:e.map(e=>({id:e,name:e,api:`openai`,input:[`text`],context_window:32e3,max_tokens:4096}))}};function p(e){return e?e.split(`,`).map(e=>e.trim()).filter(Boolean):[]}const m=`${u}-openai`;function h(e){return{...e,api:`openai-completions`}}function g(e){let t=e??{};return!t.apiKey||t.apiKey.length===0?{...t,apiKey:`local`}:t}const _=(e,t,n={})=>e.id===d?y(e,`Local LLM is not configured. Set base URL and model IDs in Settings.`):e.baseUrl?a(h(e),s(t),g(n)):y(e,`Local LLM base URL is required (e.g. http://localhost:11434/v1).`),v=(e,t,n)=>e.id===d?y(e,`Local LLM is not configured. Set base URL and model IDs in Settings.`):e.baseUrl?o(h(e),s(t),g(n)):y(e,`Local LLM base URL is required (e.g. http://localhost:11434/v1).`);function y(e,t){let n=r(),i={role:`assistant`,content:[],api:e.api,provider:e.provider,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`error`,errorMessage:t,timestamp:Date.now()};return queueMicrotask(()=>{n.push({type:`error`,reason:`error`,error:i}),n.end()}),n}function b(){i({api:m,stream:_,streamSimple:v})}function x(e){return typeof e==`object`&&!!e&&`object`in e&&e.object===`list`}function S(e){return typeof e==`object`&&!!e&&`build_info`in e}function C(e){try{let t=new URL(e);return`${t.protocol}//${t.host}`}catch{return e.replace(/\/v1\/?$/,``).replace(/\/+$/,``)}}function w(e){let t=e.replace(/\/+$/,``);try{let e=new URL(t);if(e.pathname===``||e.pathname===`/`)return`${t}/v1`}catch{}return t}async function T(e,t,n){let r=`${w(e)}/models`,i={Accept:`application/json`};t&&t.length>0&&(i.Authorization=`Bearer ${t}`);let a=await fetch(r,{method:`GET`,headers:i,signal:n});if(!a.ok)throw Error(`GET ${r} -> ${a.status} ${a.statusText}`);let o=await a.json();return Array.isArray(o.data)?o.data.map(e=>e.id??``).filter(e=>e.length>0):[]}async function E(e,t){let n=C(e),r=await O(`${n}/api/version`,t);if(r&&typeof r.version==`string`)return{kind:`ollama`,version:r.version};if(x(await O(`${n}/api/v0/models`,t)))return{kind:`lmstudio`};let i=await O(`${n}/props`,t);if(S(i))return{kind:`llamacpp`,version:i.build_info?.version};let a=D(e);return a===`11434`?{kind:`ollama`}:a===`1234`?{kind:`lmstudio`}:a===`8000`?{kind:`vllm`}:a===`1337`?{kind:`jan`}:{kind:`unknown`}}function D(e){try{return new URL(e).port||null}catch{return null}}async function O(e,t){try{let n=await fetch(e,{method:`GET`,signal:t});return n.ok?await n.json():null}catch{return null}}async function k(e,t,n){let r={kind:`unknown`};try{r=await E(e,n)}catch{}try{let i=await T(e,t,n);return{ok:!0,runtime:r,models:i}}catch(t){let n=t instanceof Error?t.message:String(t),i=A(n,r.kind);return l.warn(`verifyConnection failed`,{baseUrl:e,runtime:r.kind,message:n}),{ok:!1,runtime:r,models:[],error:i}}}function A(e,t){let n=e.toLowerCase();return n.includes(`failed to fetch`)||n.includes(`networkerror`)?t===`ollama`?{kind:`cors`,message:e,hint:'Ollama rejects requests from non-localhost origins by default. Set OLLAMA_ORIGINS=* (or chrome-extension://*) and restart Ollama. macOS: `launchctl setenv OLLAMA_ORIGINS "*"` then quit and relaunch the Ollama app.'}:{kind:`connection`,message:e,hint:`Server unreachable. Check the URL and that the server is running.`}:n.includes(` 401`)||n.includes(` 403`)?{kind:`auth`,message:e,hint:`Server returned an auth error. If your endpoint requires a key, set it in Settings.`}:/-> \d{3} /.test(e)?{kind:`http`,message:e}:{kind:`unknown`,message:e}}export{c as n,f as t};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./logger-dqckiMJt.js";import{$ as t,v as n}from"./core-BXRpM6QF.js";import{r,s as i}from"./legacy-api-aliases-yN2KDO_G.js";import{b as a}from"./account-store-
|
|
1
|
+
import{t as e}from"./logger-dqckiMJt.js";import{$ as t,v as n}from"./core-BXRpM6QF.js";import{r,s as i}from"./legacy-api-aliases-yN2KDO_G.js";import{b as a}from"./account-store-CRulNb41.js";import{n as o}from"./pi-transcript-context-CrhAqp9b.js";var s=e(`local-llm`),c=`local-llm`,l=`local`,u=`${c}-unconfigured`,d={id:c,name:`Local LLM (OpenAI-compatible)`,description:[`Connect to any OpenAI-compatible local model server.`,``,`Common base URLs:`,` • Ollama http://localhost:11434/v1`,` • LM Studio http://localhost:1234/v1`,` • llama.cpp http://localhost:8080/v1`,` • vLLM http://localhost:8000/v1`,` • mlx_lm http://localhost:8080/v1`,` • Jan http://localhost:1337/v1`,``,`Ollama needs OLLAMA_ORIGINS=* (or chrome-extension://*) so the`,`browser can reach it. macOS: launchctl setenv OLLAMA_ORIGINS "*".`].join(`
|
|
2
2
|
`),requiresApiKey:!1,optionalApiKey:!0,apiKeyPlaceholder:`Leave empty for local servers, or paste a key for hosted endpoints`,apiKeyEnvVar:`LOCAL_LLM_API_KEY`,requiresBaseUrl:!0,baseUrlPlaceholder:`http://localhost:11434/v1`,baseUrlDescription:`Ollama: 11434 • LM Studio: 1234 • llama.cpp/mlx: 8080 • vLLM: 8000 • Jan: 1337. Trailing /v1 required.`,requiresDeployment:!0,deploymentPlaceholder:`llama3.1:8b, qwen2.5-coder:14b`,deploymentDescription:`Comma-separated model IDs from your server. List them with: curl <baseUrl>/models | jq -r .data[].id`,getModelIds:()=>{let e=f(a(c));return e.length===0?[{id:u,name:`Local LLM (set base URL + model IDs in Settings)`,api:`openai`}]:e.map(e=>({id:e,name:e,api:`openai`,input:[`text`],context_window:32e3,max_tokens:4096}))}};function f(e){return e?e.split(`,`).map(e=>e.trim()).filter(Boolean):[]}var p=`openai-completions`,m=`${c}-openai`;function h(e){return{...e,api:p}}function g(e){let t=e??{};return!t.apiKey||t.apiKey.length===0?{...t,apiKey:l}:t}var _=(e,t,n={})=>e.id===u?y(e,`Local LLM is not configured. Set base URL and model IDs in Settings.`):e.baseUrl?r(h(e),o(t),g(n)):y(e,`Local LLM base URL is required (e.g. http://localhost:11434/v1).`),v=(e,t,n)=>e.id===u?y(e,`Local LLM is not configured. Set base URL and model IDs in Settings.`):e.baseUrl?i(h(e),o(t),g(n)):y(e,`Local LLM base URL is required (e.g. http://localhost:11434/v1).`);function y(e,n){let r=t(),i={role:`assistant`,content:[],api:e.api,provider:e.provider,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`error`,errorMessage:n,timestamp:Date.now()};return queueMicrotask(()=>{r.push({type:`error`,reason:`error`,error:i}),r.end()}),r}function b(){n({api:m,stream:_,streamSimple:v})}function x(e){return typeof e==`object`&&!!e&&`object`in e&&e.object===`list`}function S(e){return typeof e==`object`&&!!e&&`build_info`in e}function C(e){try{let t=new URL(e);return`${t.protocol}//${t.host}`}catch{return e.replace(/\/v1\/?$/,``).replace(/\/+$/,``)}}function w(e){let t=e.replace(/\/+$/,``);try{let e=new URL(t);if(e.pathname===``||e.pathname===`/`)return`${t}/v1`}catch{}return t}async function T(e,t,n){let r=`${w(e)}/models`,i={Accept:`application/json`};t&&t.length>0&&(i.Authorization=`Bearer ${t}`);let a=await fetch(r,{method:`GET`,headers:i,signal:n});if(!a.ok)throw Error(`GET ${r} -> ${a.status} ${a.statusText}`);let o=await a.json();return Array.isArray(o.data)?o.data.map(e=>e.id??``).filter(e=>e.length>0):[]}async function E(e,t){let n=C(e),r=await O(`${n}/api/version`,t);if(r&&typeof r.version==`string`)return{kind:`ollama`,version:r.version};if(x(await O(`${n}/api/v0/models`,t)))return{kind:`lmstudio`};let i=await O(`${n}/props`,t);if(S(i))return{kind:`llamacpp`,version:i.build_info?.version};let a=D(e);return a===`11434`?{kind:`ollama`}:a===`1234`?{kind:`lmstudio`}:a===`8000`?{kind:`vllm`}:a===`1337`?{kind:`jan`}:{kind:`unknown`}}function D(e){try{return new URL(e).port||null}catch{return null}}async function O(e,t){try{let n=await fetch(e,{method:`GET`,signal:t});return n.ok?await n.json():null}catch{return null}}async function k(e,t,n){let r={kind:`unknown`};try{r=await E(e,n)}catch{}try{let i=await T(e,t,n);return{ok:!0,runtime:r,models:i}}catch(t){let n=t instanceof Error?t.message:String(t),i=A(n,r.kind);return s.warn(`verifyConnection failed`,{baseUrl:e,runtime:r.kind,message:n}),{ok:!1,runtime:r,models:[],error:i}}}function A(e,t){let n=e.toLowerCase();return n.includes(`failed to fetch`)||n.includes(`networkerror`)?t===`ollama`?{kind:`cors`,message:e,hint:'Ollama rejects requests from non-localhost origins by default. Set OLLAMA_ORIGINS=* (or chrome-extension://*) and restart Ollama. macOS: `launchctl setenv OLLAMA_ORIGINS "*"` then quit and relaunch the Ollama app.'}:{kind:`connection`,message:e,hint:`Server unreachable. Check the URL and that the server is running.`}:n.includes(` 401`)||n.includes(` 403`)?{kind:`auth`,message:e,hint:`Server returned an auth error. If your endpoint requires a key, set it in Settings.`}:/-> \d{3} /.test(e)?{kind:`http`,message:e}:{kind:`unknown`,message:e}}export{d as config,E as detectRuntime,T as discoverModels,C as originOf,b as register,k as verifyConnection};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/setup-feature-flags-remote-
|
|
2
|
-
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./logger-dqckiMJt.js";import"./core-BXRpM6QF.js";import{t as n}from"./preload-helper-BLdHbfdN.js";import{i as r}from"./feature-flags-DDJdMcuw.js";import{a as i,i as a,n as o,o as s,r as c,t as l}from"./bridge-protocol-C52CnDIj.js";import"./proxied-fetch-2sdz8vNB.js";import{t as u}from"./stored-accounts-CdMZdZUa.js";import{A as d,B as f,C as p,D as m,E as h,F as g,G as _,H as v,I as y,J as b,K as x,L as S,M as C,N as ee,O as te,P as ne,Q as re,R as ie,S as ae,T as w,U as oe,V as se,W as ce,X as le,Y as ue,Z as de,_ as fe,a as pe,b as me,c as he,d as ge,f as _e,g as ve,h as ye,i as be,j as xe,k as Se,l as Ce,m as we,n as T,o as Te,p as Ee,q as De,r as Oe,s as ke,t as Ae,u as E,v as je,w as Me,x as Ne,y as Pe,z as Fe}from"./account-store-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/setup-feature-flags-remote-CZb8ym_6.js","assets/feature-flags-DDJdMcuw.js","assets/sudo-GkFEMFPC.js","assets/logger-dqckiMJt.js","assets/preload-helper-BLdHbfdN.js","assets/quick-llm-Bhg1Qsvk.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/core-BXRpM6QF.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/proxied-fetch-2sdz8vNB.js","assets/base64-ELzoYfwP.js","assets/api-endpoint-CNqFa-M3.js","assets/secret-topology-BuXN_6_0.js","assets/secrets-bridge-client-BD4AHTxg.js","assets/panel-rpc-accessor-B4BfPLSo.js","assets/image-markers-4eaAm9QS.js","assets/account-store-CRulNb41.js","assets/stored-accounts-CdMZdZUa.js","assets/providers-B6bwctI0.js","assets/renamed-providers-d0bAaa0l.js","assets/bedrock-camp-compat-D6dUCn_T.js","assets/bedrock-camp-extra-models-COVvjLB5.js","assets/claude-model-version-3MWQoaco.js","assets/llm-session-id-bZQs6gBN.js","assets/icons-3Rdl9zWU.js","assets/types-DSxCdZw6.js","assets/approval-decision-BvumWm-U.js","assets/capability-Bf6pawsJ.js","assets/page-approval-service-Ct3rnfXL.js","assets/extension-bridge-transport-mKv-D3Lx.js","assets/pending-request-table-k-D7ZZsL.js","assets/lick-ws-bridge-CuBkByJW.js","assets/logger-BuvZB4wn.js","assets/tray-leader-DmmGAndB.js","assets/db-CIXZItfi.js","assets/cdp-Dsm1GADb.js","assets/navigation-watcher-f6QKlJrS.js","assets/bridge-protocol-C52CnDIj.js","assets/wc-follower-oauth-Pzit-Xte.js","assets/dictation-priming-BHJC0hch.js","assets/sprinkle-renderer-DKpjowk6.js","assets/permissions-surface-registry-CilCRwhh.js","assets/wc-shell-B6egqVH1.js","assets/mime-types-D0xZwlMO.js","assets/sha256-DynDhwRL.js","assets/telemetry-kqkj0A7x.js","assets/GELATIERE-CLK_MA5a.js","assets/types-D8gIX-W-.js","assets/same-file-identity-DuEcSmPX.js","assets/message-envelope-BPSSjJbW.js","assets/agent-message-to-chat-BiZHDYFR.js","assets/wc-shell-WkeczD9x.css","assets/hid-device-registry-B2R-0rNt.js","assets/serial-port-registry-CCqklAEr.js","assets/hid-operations-C97SZtrY.js","assets/usb-device-registry--JwKRTYp.js","assets/usb-operations-Dx9QXlZ0.js","assets/shared-DSEuryGJ.js","assets/theme-CmogKzdP.js","assets/theme-engine-CwaY1aIr.js","assets/slicc-app-url-BKHBBuTR.js","assets/zip-stream-iQd4PFgh.js","assets/transcript-export-DTRO8k03.js","assets/tray-follower-status-BAjnN7Ar.js","assets/export-spool-twZZWurf.js","assets/main-cherry-CpbKxiZK.js","assets/synthetic-cdp-transport-OUVdC4zy.js","assets/oauth-service-DBNa_4eS.js","assets/setup-model-catalog-DHrO2Kfp.js","assets/wc-follower-Co4brJFi.js","assets/wc-live-oqKW7QrK.js","assets/provider-budget-LCzMPlKv.js","assets/browser-OXhgs9Cl.js","assets/sessions-DWl_wZV3.js","assets/types-CFfBWsH5.js","assets/store-DP4F8FwF.js","assets/entries-ChYQ3OMf.js","assets/frozen-archive-writer-EZsuL49i.js","assets/frozen-session-identity-CLil11AR.js","assets/session-jsonl-ZG0juWbu.js","assets/snapshot-store-DCt_qbAe.js","assets/live-session-curation-Bhnb6z_B.js","assets/MEMORY-B9cGngY_.js","assets/thinking-level-DCJktR5U.js","assets/profile-export-deps-DpT8pwWG.js","assets/global-db-CbuLl-zx.js","assets/wc-unit-context-BpAIa5HN.js","assets/wc-sprinkles-BHIC0rGC.js","assets/lick-target-match-mT46VVD2.js","assets/wc-attach-BqpBnkA0.js","assets/wc-permissions-X7QRMVtU.js","assets/oauth-bootstrap-DF2A9FNH.js","assets/legacy-styles-CGcVbQni.js","assets/connect-surface-Ba3Ke5aM.js","assets/wc-extension-BMQL0I9I.js","assets/wc-detached-C0OfGsMQ.js","assets/recovery-screen-DWu0J0eq.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./logger-dqckiMJt.js";import"./core-BXRpM6QF.js";import{t as n}from"./preload-helper-BLdHbfdN.js";import{i as r}from"./feature-flags-DDJdMcuw.js";import{a as i,i as a,n as o,o as s,r as c,t as l}from"./bridge-protocol-C52CnDIj.js";import"./proxied-fetch-2sdz8vNB.js";import{t as u}from"./stored-accounts-CdMZdZUa.js";import{A as d,B as f,C as p,D as m,E as h,F as g,G as _,H as v,I as y,J as b,K as x,L as S,M as C,N as ee,O as te,P as ne,Q as re,R as ie,S as ae,T as w,U as oe,V as se,W as ce,X as le,Y as ue,Z as de,_ as fe,a as pe,b as me,c as he,d as ge,f as _e,g as ve,h as ye,i as be,j as xe,k as Se,l as Ce,m as we,n as T,o as Te,p as Ee,q as De,r as Oe,s as ke,t as Ae,u as E,v as je,w as Me,x as Ne,y as Pe,z as Fe}from"./account-store-CRulNb41.js";import{c as Ie,d as Le,f as D,l as Re,n as ze,o as Be,p as O,s as Ve,t as He,u as Ue}from"./api-endpoint-CNqFa-M3.js";import{o as We,t as Ge}from"./telemetry-kqkj0A7x.js";import{a as Ke}from"./providers-B6bwctI0.js";import{_ as qe,a as Je,i as Ye,m as Xe,o as Ze,r as Qe,s as $e,u as et}from"./renamed-providers-d0bAaa0l.js";import{t as tt}from"./tray-follower-status-BAjnN7Ar.js";import{n as nt}from"./clipboard-eqmn97SP.js";function rt({attempt:e,baseMs:t,capMs:n,jitter:r=0,maxShift:i,random:a=Math.random}){let o=Math.max(0,e);i!==void 0&&(o=Math.min(o,i));let s=t*2**o,c=n===void 0?s:Math.min(n,s);if(r<=0)return c;let l=c+Math.round(c*r*a());return n===void 0?l:Math.min(n,l)}var it=`role`;function at(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e&&typeof e.source==`string`}function ot(e){if(!e)return!1;let t=e.startsWith(`[`)&&e.endsWith(`]`)?e.slice(1,-1):e;return!!(t===`localhost`||t===`::1`||/^127(\.\d{1,3}){3}$/.test(t))}var k=`tray`,st=`trayWorkerUrl`,ct=`lead`;function A(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``,t.pathname!==`/`&&(t.pathname=t.pathname.replace(/\/+$/,``)||`/`);let n=t.toString();return n.endsWith(`/`)?n.slice(0,-1):n}catch{return null}}function lt(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``;let n=t.toString(),r=t.pathname.split(`/`).filter(Boolean);if(r.length<2||r.at(-2)!==`join`)return null;let[i,a,...o]=decodeURIComponent(r.at(-1)).split(`.`);if(!i||!a||o.length>0)return null;r.splice(-2,2),t.pathname=r.length>0?`/${r.join(`/`)}`:`/`;let s=A(t.toString());return s?{workerBaseUrl:s,trayId:i,joinUrl:n}:null}catch{return null}}function ut(e,t){let n=new URL(e);return n.searchParams.delete(st),n.searchParams.delete(ct),n.searchParams.set(k,t),n.toString()}function dt(e){try{let t=new URL(e);return`${t.protocol===`wss:`?`https:`:`http:`}//${t.host}`}catch{return null}}function ft(e){try{let t=new URL(e);return`${t.protocol}//${t.host}/licks-ws`}catch{return null}}function pt(e){let t;try{t=new URLSearchParams(e)}catch{return null}let n=t.get(a),r=t.get(c);if(!n||!r||!/^wss?:\/\//.test(n))return null;let i;try{i=new URL(n).hostname}catch{return null}if(!ot(i))return null;let o=t.get(it),s=o===`leader`||o===`follower`?o:null;return{url:n,subprotocol:`${l}${r}`,token:r,apiBaseUrl:dt(n),lickWsUrl:ft(n),role:s}}var mt=`slicc:bridge-config`,ht=`slicc:extension-delegate-config`;function gt(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.type===`slicc:ext-fetch`&&typeof t.extensionId==`string`&&!!t.request&&typeof t.request==`object`}var _t=t(`boot/ext-fetch-delegate`);function vt(){let e=globalThis.chrome?.runtime;return e&&typeof e.connect==`function`?e:null}function yt(e,t,n){let r=vt();if(!r){try{t.postMessage({type:`response-error`,error:`extension-delegate: chrome.runtime.connect unavailable`})}catch{}t.close();return}let i=e.extensionId||n,a;try{a=r.connect(i,{name:`fetch-proxy.fetch`})}catch(e){try{t.postMessage({type:`response-error`,error:`extension-delegate: connect failed — ${e instanceof Error?e.message:String(e)}`})}catch{}t.close();return}let o=!1,s=()=>{o=!0;try{a.disconnect()}catch{}try{t.close()}catch{}};a.onMessage.addListener(e=>{if(o)return;let n=e;try{t.postMessage(n)}catch{}(n.type===`response-end`||n.type===`response-error`)&&s()}),a.onDisconnect.addListener(()=>{if(!o){try{t.postMessage({type:`response-error`,error:`extension-delegate: fetch-proxy port disconnected`})}catch{}s()}}),a.postMessage({type:`request`,...e.request})}function bt(e){typeof navigator<`u`&&navigator.serviceWorker&&navigator.serviceWorker.addEventListener(`message`,t=>{if(!gt(t.data))return;let n=t.ports?.[0];if(!n){_t.warn(`delegated fetch envelope arrived without a response port`);return}yt(t.data,n,e)})}var xt=`slicc_feature_flags_remote`;function St(e){return`${xt}:${e}`}function Ct(e,t){let n=Tt(t);r(e,Et(n,e)??{})}function wt(e,t,n){try{e?.setItem(St(t),JSON.stringify(n))}catch{}}function Tt(e){if(e!==void 0)return e;try{let e=globalThis.localStorage;return typeof e?.getItem!=`function`||typeof e.setItem!=`function`?void 0:e}catch{return}}function Et(e,t){try{let n=e?.getItem(St(t));return n?Dt(JSON.parse(n)):null}catch{return null}}function Dt(e){return!Ot(e)||Object.values(e).some(e=>typeof e!=`string`)?null:e}function Ot(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function kt(e){return at(e)}var j=`slicc.trayWorkerBaseUrl`,M=`slicc.trayJoinUrl`;function N(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``;let n=t.pathname.split(`/`).filter(Boolean),r=null;if(n.length>=2&&n.at(-2)===`tray`)r=decodeURIComponent(n.at(-1)),n.splice(-2,2),t.pathname=n.length>0?`/${n.join(`/`)}`:`/`;else if(n.length>=2&&n.at(-2)===`join`)return lt(t.toString());let i=A(t.toString());return i?{workerBaseUrl:i,trayId:r,joinUrl:null}:null}catch{return null}}function P(e){let t=N(e);return t?.joinUrl?t:null}var At=i,jt=s;function Mt(e,t){let n=A(e);if(!n)throw Error(`Invalid tray worker base URL: ${e}`);let r=t.replace(/^\/+/,``);return new URL(r,`${n}/`).toString()}function F(e,t){let n=P(t);return n?(e.setItem(M,n.joinUrl),e.setItem(j,n.workerBaseUrl),n):null}function Nt(e){return!!P(e?.getItem(`slicc.trayJoinUrl`)??null)}function Pt(e,t){let n=!1;try{let t=new URL(e),r=t.searchParams.get(k);if(r!==null){n=!0;let e=N(r);if(e?.joinUrl)return e.joinUrl}t.searchParams.get(`slicc`)===`leader`&&(n=!0)}catch{}let r=N(e);return r?.joinUrl?r.joinUrl:(r?.trayId&&(n=!0),n?null:P(t?.getItem(`slicc.trayJoinUrl`)??null)?.joinUrl??null)}function Ft(e){try{let t=new URL(e);t.searchParams.delete(k);let n=t.pathname.split(`/`).filter(Boolean);return n.length>=2&&n.at(-2)===`join`&&(n.splice(-2,2),t.pathname=n.length>0?`/${n.join(`/`)}`:`/`),t.toString()}catch{return e}}function It(e,t){let n=A(e);if(!n)throw Error(`Invalid tray worker base URL: ${e}`);let r=t?.trim();return r?new URL(`tray/${encodeURIComponent(r)}`,`${n}/`).toString():n}function Lt(e,t,n){return ut(e,It(t,n))}async function Rt(e){let t=Vt(e.locationHref);if(t)return e.storage&&(t.joinUrl&&e.storage.setItem(M,t.joinUrl),e.storage.setItem(j,t.workerBaseUrl)),t;let n=P(e.storage?.getItem(`slicc.trayJoinUrl`)??null);if(n)return e.storage&&e.storage.setItem(j,n.workerBaseUrl),n;let r=e.runtimeConfigFetcher?await Ht(e.runtimeConfigFetcher):null;if(r?.joinConfig)return e.storage&&(e.storage.setItem(M,r.joinConfig.joinUrl),e.storage.setItem(j,r.joinConfig.workerBaseUrl)),r.joinConfig;let i=r?.workerBaseUrl??null,a=A(e.storage?.getItem(`slicc.trayWorkerBaseUrl`)??null),o=A(e.envBaseUrl??null),s=A(e.defaultWorkerBaseUrl??null),c=i??a??o??s;return c?(e.storage&&e.storage.setItem(j,c),{workerBaseUrl:c,trayId:null,joinUrl:null}):null}async function zt(e){return(await Rt(e))?.workerBaseUrl??null}async function Bt(e=fetch){try{let t=await e(Ve(`/api/runtime-config`),{cache:`no-store`,headers:He()});return await Le(t),t.ok?await t.json():null}catch(e){if(Be(e))throw e;return null}}function Vt(e){try{let t=new URL(e),n=N(t.searchParams.get(k));if(n)return n;let r=N(t.searchParams.get(ct));if(r)return r;let i=A(t.searchParams.get(st));return i?{workerBaseUrl:i,trayId:null,joinUrl:null}:lt(e)||null}catch{return null}}async function Ht(e){let t=await e();if(!t)return null;let n=P(t.trayJoinUrl??null);return{workerBaseUrl:A(t.trayWorkerBaseUrl??null),joinConfig:n}}function Ut(e,t,n){if(t){try{if(new URL(e).searchParams.has(`detached`))return`extension-detached`}catch{}return`extension`}try{let t=new URL(e);return t.searchParams.get(`connect`)===`1`?`connect`:t.searchParams.get(`runtime`)===`hosted-leader`?`hosted-leader`:t.searchParams.get(`cherry`)===`1`?`cherry`:Pt(e,n===void 0?typeof window<`u`?window.localStorage:null:n)?`follower`:Gt(t)?`electron-overlay`:`standalone`}catch{return`standalone`}}function Wt(e,t){return e===`electron-overlay`||e===`hosted-leader`||e===`standalone`&&t}function Gt(e){return e.pathname===`/electron`||e.pathname===`/electron/`||e.searchParams.get(`runtime`)===`electron-overlay`}function Kt(e,t){Ct(e,t.storage),n(async()=>{let{refreshFeatureFlagsForPage:e,scheduleFeatureFlagsRefresh:t}=await import(`./setup-feature-flags-remote-CZb8ym_6.js`);return{refreshFeatureFlagsForPage:e,scheduleFeatureFlagsRefresh:t}},__vite__mapDeps([0,1])).then(({refreshFeatureFlagsForPage:n,scheduleFeatureFlagsRefresh:r})=>(r(e,t),n(e,t))).catch(()=>{})}function qt(e){let t=Ut(e.locationHref,e.isExtension,e.storage);return Kt(t,e),t}function Jt(){if(O())return;let e=new Blob([`
|
|
3
3
|
let lastPong = Date.now();
|
|
4
4
|
let frozen = false;
|
|
5
5
|
setInterval(() => {
|
|
@@ -19,4 +19,4 @@ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./logger-dqckiM
|
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
};
|
|
22
|
-
`],{type:`application/javascript`}),t=URL.createObjectURL(e),n=new Worker(t);URL.revokeObjectURL(t),n.onmessage=e=>{if(e.data.type===`ping`)n.postMessage({type:`pong`});else if(e.data.type===`freeze-detected`)console.error(`[freeze-watchdog] Main thread blocked for ${e.data.elapsed}ms — capturing trace on recovery`);else if(e.data.type===`freeze-recovered`){console.error(`[freeze-watchdog] Main thread recovered. Stack trace at recovery point:`),console.trace(`[freeze-watchdog] recovery stack`);let e=performance.getEntriesByType(`longtask`);e.length>0&&console.error(`[freeze-watchdog] Long tasks:`,e.map(e=>({duration:e.duration,startTime:e.startTime,name:e.name})))}},window.addEventListener(`beforeunload`,()=>{n.terminate()},{once:!0})}var I=null;function Yt(){return I||(I=qe(),I)}t(`stale-asset`);var Xt=`slicc-stale-asset-reload`;function Zt(e,t){if(typeof BroadcastChannel!=`function`)return()=>{};let n=new BroadcastChannel(Xt),r=n=>{let r=n.data;r?.type===`stale-asset-reload`&&r.instanceId===e&&t(r.replayTurn===!0)};return n.addEventListener(`message`,r),()=>{n.removeEventListener(`message`,r),n.close()}}var Qt=`slicc:stale-asset-reloaded-at`,$t=6e4,L=`slicc:stale-asset-replay`;function en(e=window.sessionStorage){try{e.setItem(L,`1`)}catch{}}function tn(e=window.sessionStorage){try{return e.getItem(L)===`1`&&(e.removeItem(L),!0)}catch{return!1}}function nn(){return{reload:()=>window.location.reload(),storage:window.sessionStorage,now:()=>Date.now(),windowMs:$t,storageKey:Qt}}function rn(e,t,n){return e===null||t-e>=n}function R(e=nn()){let t;try{t=e.storage.getItem(e.storageKey)}catch{return!1}let n=t===null?null:Number(t),r=n!==null&&Number.isFinite(n)?n:null,i=e.now();if(!rn(r,i,e.windowMs))return!1;try{e.storage.setItem(e.storageKey,String(i))}catch{return!1}return e.reload(),!0}var z=null,B=null;function an(e){z||(B={...nn(),...e},z=e=>{R(B)&&e.preventDefault()},window.addEventListener(`vite:preloadError`,z))}var V=null;function on(e){return V||(V=Zt(e,e=>{e&&en(),R(B??void 0)}),V)}async function sn(e,t={}){Ze(e,t.channel);let n=await Qe(t.locks===void 0?Ye():t.locks);return n?(Je(n.release),$e()):(await et(),!0)}var cn=3e4,ln=.2,un=`CDP bridge rejected the session token (bridge-token-required). Open SLICC again from Sliccstart to pick up a fresh token.`,dn=class extends Error{constructor(e=un){super(e),this.name=`CdpBridgeRejectedError`}},fn=class extends Error{constructor(){super(`CDP reconnect is backing off`),this.name=`CdpReconnectBackoffError`}};function pn(e,t=Math.random){return rt({attempt:e,baseMs:250,capMs:cn,jitter:ln,maxShift:16,random:t})}function mn(e){try{let t=new URL(e);return t.protocol!==`ws:`&&t.protocol!==`wss:`?null:`${t.protocol===`wss:`?`https:`:`http:`}//${t.host}`}catch{return null}}function hn(e){let t=(e===void 0?[]:Array.isArray(e)?e:[e]).find(e=>e.startsWith(l));if(!t)return null;let n=t.slice(l.length);return n.length>0?n:null}async function gn(e,t=globalThis.fetch){let n=hn(e.protocols),r=mn(e.url);if(!n||!r||typeof t!=`function`)return`transient`;try{let e=await t(`${r}/api/status`,{method:`GET`,headers:{[o]:n},cache:`no-store`,signal:AbortSignal.timeout(1e3)}),i=await e.text();return e.status===403&&i.includes(`bridge-token-required`)?`terminal`:`transient`}catch{return`transient`}}var H=`slicc-cdp-superseded-banner`,_n=`slicc-cdp-bridge-rejected-banner`,vn=[`position:fixed`,`left:0`,`right:0`,`z-index:2147483647`,`padding:10px 16px`,`background:#b3261e`,`color:#fff`,`font:13px/1.4 system-ui,sans-serif`,`text-align:center`,`box-shadow:0 1px 4px rgba(0,0,0,0.3)`].join(`;`);function yn(e){if(e.getElementById(H))return;let t=e.createElement(`div`);t.id=H,t.setAttribute(`role`,`alert`),t.textContent=`Another SLICC tab or window has taken control of this browser instance. Only one tab can drive the browser per instance — close the other tabs, then reload this page to resume.`,t.style.cssText=`top:0;${vn}`,e.body.appendChild(t)}function bn(e){if(e.getElementById(_n))return;let t=e.createElement(`div`);t.id=_n,t.setAttribute(`role`,`alert`),t.textContent=`The bridge token for this tab was rejected by the local SLICC server. Open SLICC again from Sliccstart so the tab picks up a fresh token.`;let n=e.getElementById(H)?`top:44px;`:`top:0;`;t.style.cssText=`${n}${vn}`,e.body.appendChild(t)}var xn=e({setupSudoExtension:()=>Cn,setupSudoStandalone:()=>Sn});async function Sn(e){let{createSudoBroker:t,installSudoTestHook:r}=await n(async()=>{let{createSudoBroker:e,installSudoTestHook:t}=await import(`./sudo-BC4uXyky.js`);return{createSudoBroker:e,installSudoTestHook:t}},__vite__mapDeps([2,3,4,5,6,7,8,9,1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29])),{createRestCapabilityBroker:i}=await n(async()=>{let{createRestCapabilityBroker:e}=await import(`./capability-Bf6pawsJ.js`).then(e=>e.t);return{createRestCapabilityBroker:e}},__vite__mapDeps([28,6,4]));r(t(i()))}async function Cn(e){let{installPanelSudoResponder:t}=await n(async()=>{let{installPanelSudoResponder:e}=await import(`./sudo-BC4uXyky.js`);return{installPanelSudoResponder:e}},__vite__mapDeps([2,3,4,5,6,7,8,9,1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29]));t()}function wn(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`slicc-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function Tn(e){let t;try{t=new URLSearchParams(e)}catch{return null}if(t.get(`slicc`)!==`leader`)return null;let n=t.get(`ext`);return n?{extensionId:n}:null}var En=[100,200,400,800,1600];async function Dn(e,t,n,r=En,i=e=>new Promise(t=>setTimeout(t,e))){let a=r.length+1,o=null;for(let s=0;s<a;s++)try{await e.connect(t),s>0&&n.info(`CDP bridge connect succeeded after retry`,{attempt:s+1});return}catch(e){if(o=e,e instanceof dn){n.error(`CDP bridge rejected the session token; stopped reconnecting`,e.message);return}s<r.length&&await i(r[s]??0)}n.warn(`Initial CDP connect failed after retries; worker-forwarded commands will retry on demand`,o instanceof Error?o.message:String(o))}async function On(e,t,r){let{ExtensionBridgeTransport:i}=await n(async()=>{let{ExtensionBridgeTransport:e}=await import(`./extension-bridge-transport-mKv-D3Lx.js`);return{ExtensionBridgeTransport:e}},__vite__mapDeps([30,3,31])),{mapDiscoveryPayloadToLickEvent:a,mapNavigatePayloadToLickEvent:o}=await n(async()=>{let{mapDiscoveryPayloadToLickEvent:e,mapNavigatePayloadToLickEvent:t}=await import(`./lick-ws-bridge-VsiuL_5m.js`);return{mapDiscoveryPayloadToLickEvent:e,mapNavigatePayloadToLickEvent:t}},__vite__mapDeps([32,3,33,34,6,10,4,11,12,35])),s=null,c=[],l=!1,u=e=>{s=e;for(let t of c)e.sendForwardedLick(t);c.length=0},d=e=>{if(e){if(s){s.sendForwardedLick(e);return}c.length>=50&&(c.shift(),l||(l=!0,r.warn(`extension-bridge lick buffer overflow (cap 50); dropping oldest pending licks until the kernel client attaches`))),c.push(e)}},f=new e(new i({extensionId:t,onLick:e=>{d(o(e))},onDiscovery:e=>{d(a(e))},onOpenSettings:()=>{globalThis.dispatchEvent(new CustomEvent(`slicc:open-settings-from-panel`))}}));return await Dn(f,void 0,r),{browser:f,attachLickForwardingClient:u}}async function kn(e){let{browser:t,bridge:n,log:r,document:i,sleep:a}=e;t.setCdpConnectFailureClassifier(gn),t.setCdpBridgeRejectedHandler(()=>bn(i)),n&&r.info(`Routing CDP through local standalone bridge`,{url:n.url,role:n.role??`(unset)`});let o=n?{url:n.url,protocols:n.subprotocol}:void 0;if(n?.role===`follower`){r.info(`Skipping CDP connect for follower overlay tab`),t.primeConnectOptions(o);return}await Dn(t,o,r,void 0,a),t.setCdpSupersededHandler(()=>yn(i))}async function An(e){let{runtimeMode:t,envBaseUrl:r,window:i,log:a,sleep:o}=e,s=t===`electron-overlay`;a.info(`setting up standalone page runtime (BrowserAPI + CDP)`,{runtimeMode:t});let{BrowserAPI:c}=await n(async()=>{let{BrowserAPI:e}=await import(`./cdp-CSLN_b8q.js`);return{BrowserAPI:e}},__vite__mapDeps([36,3,37,38,39,6,4,40,11,41,42,43,44,17,7,8,9,1,10,12,13,14,15,16,18,19,20,21,22,23,45,46,47,48,49,25,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,31,65]));await Sn({log:a});let l,u,d,f=null,p=null,m=null,h=null,g,_=t===`cherry`?null:Tn(i.location.search),v=!!_&&D(),y=t===`cherry`||v?null:pt(i.location.search);y?.apiBaseUrl&&(f=y.apiBaseUrl,Ue(y.apiBaseUrl),p=y.token,Ie(y.token)),y?.lickWsUrl&&(m=y.lickWsUrl);let b=t===`cherry`||v||y!==null,x=await Bt(),S=Wt(t,x!==null)?At:null;if(await Rt({locationHref:i.location.href,storage:i.localStorage,envBaseUrl:r,defaultWorkerBaseUrl:S,runtimeConfigFetcher:async()=>x}),t===`cherry`){let{setupCherryFollower:e}=await n(async()=>{let{setupCherryFollower:e}=await import(`./main-cherry-hTMbq9Hb.js`);return{setupCherryFollower:e}},__vite__mapDeps([66,3,63,31,36,37,38,39,6,4,40,11,41,42,43,44,17,7,8,9,1,10,12,13,14,15,16,18,19,20,21,22,23,45,46,47,48,49,25,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,67])),t=await e();l=t.browser,u=t.joinUrl,d=t.transport}else if(_&&D()){a.info(`Routing CDP through the extension bridge (leader tab)`);let e=await On(c,_.extensionId,a);l=e.browser,g=e.attachLickForwardingClient,h=_.extensionId,Re(_.extensionId)}else l=new c,await kn({browser:l,bridge:y,log:a,document:i.document,sleep:o});let C=l.getUnderlyingTransport();return globalThis.__slicc_browser=l,{browser:l,realCdpTransport:C,hasLocalCdpSurface:b,cherryJoinUrl:u,cherryTransport:d,instanceId:wn(),isElectronOverlay:s,localApiBaseUrl:f,bridgeToken:p,localLickWsUrl:m,extensionDelegateId:h,attachLickForwardingClient:g}}var U=t(`storage-persist`);function jn(){try{return globalThis.navigator?.storage}catch{return}}async function Mn(e=jn()){try{return typeof e?.persist==`function`?typeof e.persisted==`function`&&await e.persisted()?`already-persisted`:await e.persist()?`granted`:`denied`:`unsupported`}catch(e){return U.warn(`storage persistence check failed`,e),`failed`}}var Nn=!1;function Pn(){Nn||(Nn=!0,Mn().then(e=>{switch(e){case`granted`:U.info(`OPFS marked persistent — SLICC data is now exempt from disk-pressure eviction`);break;case`already-persisted`:U.debug(`OPFS already persistent`);break;case`denied`:U.warn(`Browser declined persistent storage — SLICC data can be evicted if the disk fills up`);break;case`unsupported`:U.debug(`navigator.storage.persist() unavailable in this runtime`)}}).catch(()=>{}))}var Fn=`/os/`;function In(e){try{return e.localStorage?.getItem(`slicc-os.six`)??null}catch{return null}}function W(e){return e.location.origin===`https://www.sliccy.ai`&&In(e)===`upgraded`}function Ln(e){return W(e)?(e.location.replace(Fn),!0):(e.location.origin===`https://www.sliccy.ai`&&e.addEventListener?.(`storage`,t=>{(t.key===`slicc-os.six`||t.key===null)&&W(e)&&e.location.replace(Fn)}),!1)}var G=t(`boot/sw-registration`);async function Rn(e=null,t=null){if(W(window))return`ready`;let n=(()=>{try{return new URL(window.location.href).searchParams.get(`connect`)===`1`}catch{return!1}})();if(`serviceWorker`in navigator&&n&&await Vn())return`reload-pending`;if(!(`serviceWorker`in navigator)||n)return`ready`;try{if(await navigator.serviceWorker.register(`/preview-sw.js`,{scope:`/preview/`}),G.info(`Preview SW registered`),!O())try{await navigator.serviceWorker.register(`/llm-proxy-sw.js`,{scope:`/`}),G.info(`LLM-proxy SW registered`)}catch(e){G.error(`LLM-proxy SW registration failed — cross-origin LLM calls will hit CORS`,e)}if(navigator.serviceWorker.controller||await Promise.race([new Promise(e=>navigator.serviceWorker.addEventListener(`controllerchange`,()=>e(),{once:!0})),new Promise(e=>setTimeout(e,1500))]),!navigator.serviceWorker.controller&&!sessionStorage.getItem(`slicc-sw-reloaded`))return sessionStorage.setItem(`slicc-sw-reloaded`,`1`),G.info(`Reloading once to gain SW control`),location.reload(),`reload-pending`;sessionStorage.removeItem(`slicc-sw-reloaded`),e&&(zn(e),navigator.serviceWorker.addEventListener(`controllerchange`,()=>{zn(e)})),t&&(Bn(t),navigator.serviceWorker.addEventListener(`controllerchange`,()=>{Bn(t)}))}catch(e){G.error(`Preview SW registration failed — preview feature will not work`,e)}return`ready`}function zn(e){let t=navigator.serviceWorker.controller;if(!t)return;let n={type:mt,apiBaseUrl:e.apiBaseUrl,token:e.token};try{t.postMessage(n)}catch(e){G.warn(`LLM-proxy SW bridge-config postMessage failed`,e)}}function Bn(e){let t=navigator.serviceWorker.controller;if(!t)return;let n={type:ht,extensionId:e.extensionId};try{t.postMessage(n)}catch(e){G.warn(`LLM-proxy SW extension-delegate postMessage failed`,e)}}async function Vn(){try{let e=await navigator.serviceWorker.getRegistrations();if(await Promise.all(e.map(e=>e.unregister().catch(()=>!1))),navigator.serviceWorker.controller&&!sessionStorage.getItem(`slicc-connect-sw-cleared`))return sessionStorage.setItem(`slicc-connect-sw-cleared`,`1`),G.info(`connect mode: detaching from service worker (no proxy on worker origin)`),location.reload(),!0;sessionStorage.removeItem(`slicc-connect-sw-cleared`)}catch(e){G.error(`connect-mode SW cleanup failed`,e)}return!1}function Hn(e,t){if(e.state===`inactive`&&t.state===`inactive`)return{kind:`leader-offer`,label:`Enable multi-browser sync`,caption:`Connect another browser to this session.`};if(e.state===`leader`&&e.session?.joinUrl)return{kind:`leader-copy`,joinUrl:e.session.joinUrl,label:`Enable multi-browser sync`,caption:`Share this URL to connect more browsers.`};if(e.state!==`inactive`){let t=e.state===`connecting`?`Setting up multi-browser sync…`:e.state===`reconnecting`?`Reconnecting…`:`Sync service unreachable.`;return{kind:`leader-pending`,label:`Multi-browser sync`,caption:e.error??t}}return{kind:`follower`,label:`Multi-browser sync`,caption:t.error??t.lastError??Un(t.state)??`Mirroring another browser.`}}function Un(e){switch(e){case`connected`:return`Connected — mirroring another browser.`;case`connecting`:return`Connecting to the other browser…`;case`reconnecting`:return`Reconnecting…`;case`disconnected`:return`Disconnected from the other browser.`;default:return null}}function Wn(e){let t=e.trim();if(!t)return`Paste a sync URL to continue.`;let n=null;try{n=new URL(t)}catch{return`That doesn’t look like a URL. Paste the full https://… link from the other browser.`}return n.protocol!==`https:`&&n.protocol!==`http:`?`Sync URLs must start with https://.`:n.pathname.includes(`/join/`)?`That sync URL is malformed. Re-copy it from the other browser and try again.`:`This URL is missing the /join/… capability. Use “Enable multi-browser sync” on the other browser.`}var Gn=e({ACCOUNTS_KEY:()=>u,__test__:()=>Ae,addAccount:()=>T,applyProviderDefaults:()=>Oe,clearAllSettings:()=>be,clearApiKey:()=>pe,clearBaseUrl:()=>Te,clearSelectedProvider:()=>ke,describeInvalidJoinUrl:()=>Wn,downloadProviders:()=>Yn,ensureOAuthMaskReplica:()=>he,exportProviders:()=>Ce,getAccounts:()=>E,getAllAvailableModels:()=>ge,getAllExtraOAuthDomains:()=>_e,getAlternativeModelProviders:()=>Ee,getApiKey:()=>we,getApiKeyForProvider:()=>ye,getApiVersionForProvider:()=>ve,getAvailableProviders:()=>fe,getBaseUrl:()=>je,getBaseUrlForProvider:()=>Pe,getDeploymentForProvider:()=>me,getExtraOAuthDomains:()=>Ne,getModelCatalogProviderIds:()=>ae,getOAuthAccountInfo:()=>p,getPickerHiddenModels:()=>Me,getProviderConfig:()=>w,getProviderModels:()=>h,getRawApiKeyForProvider:()=>m,getSelectedModelId:()=>te,getSelectedProvider:()=>Se,isModelHiddenFromPicker:()=>d,isUsableOAuthMaskReplica:()=>xe,logoutOAuthAccount:()=>C,maskOAuthTokenWithRetry:()=>ee,migrateLegacyAuthOnlySelection:()=>ne,migrateRenamedPiProviders:()=>g,modelRunsOnProvider:()=>y,persistOAuthMaskViaServiceWorker:()=>S,policyVisible:()=>ie,providerOffersLlmModels:()=>Fe,reloginOAuthAccount:()=>$n,removeAccount:()=>f,resolveCurrentModel:()=>se,resolveModelById:()=>v,resolveModelByShorthand:()=>oe,resolveModelIdForScoop:()=>ce,resolveModelSelectionForScoop:()=>_,saveOAuthAccount:()=>x,setApiKey:()=>De,setBaseUrl:()=>b,setExtraOAuthDomains:()=>ue,setExtraOAuthDomainsAsync:()=>le,setSelectedModelId:()=>de,setSelectedProvider:()=>re,showProviderSettings:()=>br,testOnlyDispatchTrayJoinWithFailureFeedback:()=>qn}),Kn=t(`provider-settings`);function qn(e,t){return Jn(e,t)}function Jn(e,t){let n=`tray-join-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,r=!1,i,a=()=>{r||(r=!0,i!==void 0&&clearTimeout(i),window.removeEventListener(`slicc:tray-join-failed`,o))},o=r=>{let i=r.detail;if(i.requestId!==void 0&&i.requestId!==n)return;if(a(),!t.isConnected){Kn.error(`Tray-join failure arrived after dialog dismissed (UX swallowed half-state)`,{joinUrl:e,error:i.error,requestId:n});return}let o=t.dataset.dismissTimer;if(o){let e=Number(o);Number.isFinite(e)&&clearTimeout(e),delete t.dataset.dismissTimer}t.textContent=`Sync failed: ${i.error}. Reload the page and try again.`,t.style.color=`var(--slicc-cone)`};return window.addEventListener(`slicc:tray-join-failed`,o),i=setTimeout(a,1e4),window.dispatchEvent(new CustomEvent(`slicc:tray-join`,{detail:{joinUrl:e,requestId:n}})),a}function Yn(){let e=JSON.stringify(Ce(),null,2),t=new Blob([e],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`providers.json`,r.click(),URL.revokeObjectURL(n)}function Xn(e){return e.length<=10?`****`:e.slice(0,4)+`...`+e.slice(-4)}function K(e){let t=`http://www.w3.org/2000/svg`,n=document.createElementNS(t,`svg`);n.setAttribute(`width`,`14`),n.setAttribute(`height`,`14`),n.setAttribute(`viewBox`,`0 0 20 20`),n.setAttribute(`fill`,`none`),n.setAttribute(`stroke`,`currentColor`),n.setAttribute(`stroke-width`,`1.5`),n.setAttribute(`stroke-linecap`,`round`),n.setAttribute(`stroke-linejoin`,`round`);for(let r of e){let e=document.createElementNS(t,`path`);e.setAttribute(`d`,r),n.appendChild(e)}return n}var q={pen:[`M14.3 3.3a1.5 1.5 0 0 1 2.1 0l.3.3a1.5 1.5 0 0 1 0 2.1L7.7 14.8l-3.2.7.7-3.2z`],trash:[`M4 6h12`,`M8 6V4a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2`,`M6 6v10a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V6`],logout:[`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,`M16 17l5-5-5-5`,`M21 12H9`],login:[`M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4`,`M10 17l5-5-5-5`,`M15 12H3`]},J=`background: transparent; border: 1px solid var(--s2-border-subtle); color: var(--s2-content-secondary); border-radius: var(--s2-radius-s); padding: 6px; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: color 0.15s, border-color 0.15s;`;function Y(e,t){e.addEventListener(`mouseenter`,()=>{e.style.color=t,e.style.borderColor=t}),e.addEventListener(`mouseleave`,()=>{e.style.color=`var(--s2-content-secondary)`,e.style.borderColor=`var(--s2-border-subtle)`})}function X(e){e.overlay.remove(),e.resolve((localStorage.getItem(`slicc_accounts`)??``)!==e.accountsBefore)}function Zn(e){e.options?.startInAddAccount?X(e):Z(e)}function Qn(e){let t=document.createElement(`div`);return t.style.cssText=`font-size: 11px; color: var(--s2-content-disabled); font-family: monospace; margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;`,e.loggedOut?(t.textContent=e.userName?`Logged out — was ${e.userName}`:`Logged out`,t.style.color=`var(--s2-content-disabled)`):t.textContent=e.userName?e.userName:e.accessToken?`Logged in`:Xn(e.apiKey),e.baseUrl&&(t.textContent+=` • `+e.baseUrl),t}async function $n(e,t){let{createOAuthLauncher:r,createInterceptingOAuthLauncherForCurrentRuntime:i}=await n(async()=>{let{createOAuthLauncher:e,createInterceptingOAuthLauncherForCurrentRuntime:t}=await import(`./oauth-service-DBNa_4eS.js`);return{createOAuthLauncher:e,createInterceptingOAuthLauncherForCurrentRuntime:t}},__vite__mapDeps([68,4,10,6,11,12,15,42])),a={forceReauth:!0};if(e.onOAuthLoginIntercepted){let n=await i();n&&await e.onOAuthLoginIntercepted(n,t,a)}else if(e.onOAuthLogin){let n=r();await e.onOAuthLogin(n,t,a)}}function er(e,t){let n=document.createElement(`button`);return n.style.cssText=J,n.setAttribute(`aria-label`,`Edit account`),n.appendChild(K(q.pen)),Y(n,`var(--s2-accent)`),n.addEventListener(`click`,()=>Q(e,t)),n}function tr(e,t,n){let r=document.createElement(`button`);return r.style.cssText=J,t.loggedOut===!0?(r.setAttribute(`aria-label`,`Log in`),r.setAttribute(`title`,`Log in`),r.appendChild(K(q.login)),Y(r,`var(--s2-accent)`),r.addEventListener(`click`,()=>{$n(n,()=>Z(e))})):(r.setAttribute(`aria-label`,`Log out`),r.setAttribute(`title`,`Log out`),r.appendChild(K(q.logout)),Y(r,`var(--s2-warning, #f59e0b)`),r.addEventListener(`click`,()=>{(async()=>{await C(t.providerId),Z(e)})()})),r}function nr(e,t){let n=document.createElement(`button`);return n.style.cssText=J,n.setAttribute(`aria-label`,`Remove account`),n.appendChild(K(q.trash)),Y(n,`var(--s2-negative)`),n.addEventListener(`click`,()=>{(async()=>{await f(t.providerId),Z(e)})()}),n}function rr(e,t){let n=w(t.providerId),r=document.createElement(`div`);r.style.cssText=`display: flex; align-items: center; justify-content: space-between; padding: 10px 12px; background: var(--s2-bg-layer-2); border-radius: var(--s2-radius-default); margin-bottom: 8px; border: 1px solid var(--s2-border-subtle);`;let i=document.createElement(`div`);i.style.cssText=`flex: 1; min-width: 0;`;let a=document.createElement(`div`);a.style.cssText=`font-size: 14px; font-weight: 600; color: var(--s2-content-default);`,a.textContent=n.name,i.appendChild(a),i.appendChild(Qn(t)),r.appendChild(i);let o=document.createElement(`div`);return o.style.cssText=`display: flex; gap: 4px; margin-left: 12px; flex-shrink: 0;`,o.appendChild(er(e,t)),n.isOAuth&&o.appendChild(tr(e,t,n)),o.appendChild(nr(e,t)),r.appendChild(o),r}function ir(e){let t=document.createDocumentFragment(),n=document.createElement(`hr`);n.style.cssText=`border: none; border-top: 1px solid var(--s2-border-subtle); margin: 16px 0;`,t.appendChild(n);let r=document.createElement(`div`);r.className=`dialog__desc`,r.style.cssText=`font-weight: 600; margin-bottom: 8px;`,r.textContent=`Tray`,t.appendChild(r);let i=tt(),a=i.state!==`inactive`,o=Nt(window.localStorage);if(a||o){let e=document.createElement(`div`);e.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px;`,e.textContent=`Follower: ${a?i.state:`configured`}`,i.error&&(e.textContent+=` — ${i.error}`,e.style.color=`var(--slicc-cone)`),t.appendChild(e)}let s=document.createElement(`button`);return s.className=`dialog__btn dialog__btn--secondary`,s.textContent=a||o?`Reconnect to other browser`:`Connect to another browser`,s.addEventListener(`click`,()=>yr(e)),t.appendChild(s),t}function Z(e){let{dialog:t}=e;t.innerHTML=``;let n=document.createElement(`div`);n.className=`dialog__title`,n.textContent=`Accounts`,t.appendChild(n);let r=E();if(r.length===0){let e=document.createElement(`div`);e.className=`dialog__desc`,e.textContent=`No accounts configured.`,t.appendChild(e)}else{let n=document.createElement(`div`);n.style.cssText=`margin-bottom: 16px;`;for(let t of r)n.appendChild(rr(e,t));t.appendChild(n)}let i=document.createElement(`div`);i.style.cssText=`display: flex; gap: 8px;`;let a=document.createElement(`button`);a.className=r.length>0?`dialog__btn dialog__btn--secondary`:`dialog__btn`,a.style.flex=`1`,a.textContent=`Add Account`,a.addEventListener(`click`,()=>Q(e)),i.appendChild(a);let o=document.createElement(`button`);o.className=`dialog__btn dialog__btn--secondary`,o.style.flex=`1`,o.textContent=`Export`,o.addEventListener(`click`,()=>Yn()),i.appendChild(o),t.appendChild(i),t.appendChild(ir(e));let s=document.createElement(`hr`);s.style.cssText=`border: none; border-top: 1px solid var(--s2-border-subtle); margin: 16px 0;`,t.appendChild(s);let c=document.createElement(`button`);c.className=`dialog__btn`,c.textContent=`Get Started`,c.addEventListener(`click`,()=>X(e)),t.appendChild(c)}function ar(e,t){let n=document.createElement(`select`);if(n.className=`dialog__input`,n.style.marginBottom=`8px`,t){let e=w(t.providerId),r=document.createElement(`option`);return r.value=t.providerId,r.textContent=e.name,n.appendChild(r),n.disabled=!0,n.style.opacity=`0.7`,n}let r=document.createElement(`option`);r.value=``,r.textContent=`Select a provider…`,r.disabled=!0,r.selected=!0,r.hidden=!0,n.appendChild(r);let i=new Set(E().map(e=>e.providerId)),a=[...fe()].sort((e,t)=>w(e).name.localeCompare(w(t).name));for(let t of a){if(i.has(t))continue;if(e?.providerFilter){if(!e.providerFilter(t))continue}else if(!Fe(t))continue;let r=document.createElement(`option`);r.value=t,r.textContent=w(t).name,n.appendChild(r)}return n}function or(e,t){let n=ar(e,t),r=document.createElement(`div`);r.className=`dialog__desc`,r.style.cssText=`font-size: 12px; color: var(--s2-content-tertiary); margin-bottom: 16px; margin-top: -4px;`;let i=document.createElement(`div`);i.style.cssText=`margin-bottom: 16px; display: none;`;let a=document.createElement(`button`);a.className=`dialog__btn`,a.textContent=`Login`,a.style.cssText=`width: 100%; margin-bottom: 8px;`,i.appendChild(a);let o=document.createElement(`div`);o.className=`dialog__desc`,o.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); text-align: center;`,i.appendChild(o);let s=document.createElement(`div`),c=document.createElement(`div`);c.className=`dialog__desc`,s.appendChild(c);let l=document.createElement(`input`);l.className=`dialog__input`,l.type=`password`,l.autocomplete=`off`,l.spellcheck=!1,t&&(l.value=t.apiKey),s.appendChild(l);let u=document.createElement(`div`),d=document.createElement(`div`);d.className=`dialog__desc`,d.textContent=`Base URL:`,u.appendChild(d);let f=document.createElement(`input`);f.className=`dialog__input`,f.type=`text`,f.autocomplete=`off`,f.spellcheck=!1,t?.baseUrl&&(f.value=t.baseUrl),u.appendChild(f);let p=document.createElement(`div`);p.className=`dialog__desc`,p.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,u.appendChild(p);let m=document.createElement(`div`);m.style.display=`none`;let h=document.createElement(`div`);h.className=`dialog__desc`,h.textContent=`Deployment:`,m.appendChild(h);let g=document.createElement(`input`);g.className=`dialog__input`,g.type=`text`,g.autocomplete=`off`,g.spellcheck=!1,t?.deployment&&(g.value=t.deployment),m.appendChild(g);let _=document.createElement(`div`);_.className=`dialog__desc`,_.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,m.appendChild(_);let v=document.createElement(`div`);v.style.display=`none`;let y=document.createElement(`div`);y.className=`dialog__desc`,y.textContent=`API Version:`,v.appendChild(y);let b=document.createElement(`input`);b.className=`dialog__input`,b.type=`text`,b.autocomplete=`off`,b.spellcheck=!1,t?.apiVersion&&(b.value=t.apiVersion),v.appendChild(b);let x=document.createElement(`div`);x.className=`dialog__desc`,x.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,v.appendChild(x);let S=document.createElement(`div`);S.style.cssText=`color: var(--slicc-cone); font-size: 12px; margin-bottom: 8px; display: none;`;let C=document.createElement(`button`);return C.className=`dialog__btn`,C.textContent=t?`Save`:`Add`,{providerSelect:n,providerDesc:r,oauth:{section:i,loginBtn:a,status:o},apiKeySection:s,apiKeyLabel:c,apiKeyInput:l,baseUrlSection:u,baseUrlInput:f,baseUrlDesc:p,deploymentSection:m,deploymentInput:g,deploymentDesc:_,apiVersionSection:v,apiVersionInput:b,apiVersionDesc:x,errorEl:S,saveBtn:C}}function sr(e){let t=document.createElement(`div`);t.setAttribute(`data-slicc-device-code-prompt`,``),t.style.cssText=`display:flex;flex-direction:column;gap:8px`;let n=document.createElement(`div`);n.className=`dialog__desc`,n.textContent=`Verification code`,n.style.cssText=`font-size: 11px; color: var(--s2-content-tertiary);`;let r=document.createElement(`div`);r.textContent=e,r.style.cssText=[`font: 600 22px ui-monospace, SFMono-Regular, Menlo, monospace`,`letter-spacing: 2px`,`color: var(--s2-content-primary, #e6edf3)`,`background: var(--s2-bg-secondary, #161b22)`,`border: 1px solid var(--s2-border, #30363d)`,`border-radius: 6px`,`padding: 10px 12px`,`text-align: center`,`user-select: all`,`cursor: text`].join(`;`);let i=document.createElement(`div`);i.className=`dialog__desc`,i.style.cssText=`font-size: 12px; color: var(--s2-content-secondary);`,i.textContent=`Click Copy & Continue — we will open the GitHub authorization page in a new tab. Paste this code there if it is not already filled in.`;let a=document.createElement(`div`);a.style.cssText=`display:flex;gap:8px;justify-content:flex-end;margin-top:4px`;let o=document.createElement(`button`);o.type=`button`,o.className=`dialog__btn`,o.textContent=`Cancel`;let s=document.createElement(`button`);return s.type=`button`,s.className=`dialog__btn dialog__btn--primary`,s.textContent=`Copy & Continue`,a.appendChild(o),a.appendChild(s),t.appendChild(n),t.appendChild(r),t.appendChild(i),t.appendChild(a),{prompt:t,cancelBtn:o,continueBtn:s}}function cr(e){return t=>new Promise(n=>{let r=e.loginBtn.style.display,i=e.status.style.display;e.loginBtn.style.display=`none`,e.status.style.display=`none`;let{prompt:a,cancelBtn:o,continueBtn:s}=sr(t.userCode),c=()=>{try{a.remove()}catch{}e.loginBtn.style.display=r,e.status.style.display=i};o.addEventListener(`click`,()=>{c(),n(`cancel`)}),s.addEventListener(`click`,()=>{(async()=>{try{await nt(t.userCode)}catch{}c(),e.status.style.display=i,e.status.textContent=`Waiting for you to authorize in the new tab…`,n(`continue`)})()}),e.section.appendChild(a)})}async function lr(e,t){let r=t.providerSelect.value;if(!r)return;let i=w(r);if(!i.onOAuthLogin&&!i.onOAuthLoginIntercepted)return;let{status:a}=t.oauth,o=E().some(e=>e.providerId===r),s=Pe(r);if(i.requiresBaseUrl&&!t.baseUrlInput.value.trim()&&!s){a.textContent=`Base URL is required.`,a.style.color=`var(--slicc-cone)`,t.baseUrlInput.focus();return}i.requiresBaseUrl&&t.baseUrlInput.value.trim()&&T(r,``,t.baseUrlInput.value.trim()),a.textContent=`Opening login window...`;try{if(i.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:r}=await n(async()=>{let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await import(`./oauth-service-DBNa_4eS.js`);return{createInterceptingOAuthLauncherForCurrentRuntime:e}},__vite__mapDeps([68,4,10,6,11,12,15,42])),a=await r();if(!a)throw Error(`No controlled-browser CDP transport available — open SLICC in standalone mode or the Chrome extension.`);await i.onOAuthLoginIntercepted(a,()=>Zn(e),{presentDeviceCode:cr(t.oauth)})}else if(i.onOAuthLogin){let{createOAuthLauncher:t}=await n(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-DBNa_4eS.js`);return{createOAuthLauncher:e}},__vite__mapDeps([68,4,10,6,11,12,15,42])),r=t();await i.onOAuthLogin(r,()=>Zn(e))}}catch(e){if(!o)try{await f(r)}catch{}Kn.error(`OAuth login failed`,{providerId:r,error:e instanceof Error?e.message:String(e)}),a.textContent=`Login failed: ${e instanceof Error?e.message:String(e)}`}}function ur(e,t){if(t.isOAuth){e.oauth.section.style.display=``,e.apiKeySection.style.display=`none`,e.baseUrlSection.style.display=t.requiresBaseUrl?``:`none`,t.requiresBaseUrl&&(e.baseUrlInput.placeholder=t.baseUrlPlaceholder||`https://...`,e.baseUrlDesc.textContent=t.baseUrlDescription||``),e.oauth.loginBtn.textContent=`Login with ${t.name}`,e.saveBtn.style.display=`none`;return}e.oauth.section.style.display=`none`;let n=t.requiresApiKey?`API Key`:`API Key (optional)`;e.apiKeyLabel.textContent=`${n}${t.apiKeyEnvVar?` (${t.apiKeyEnvVar})`:``}:`,e.apiKeyInput.placeholder=t.apiKeyPlaceholder||`API key`,e.apiKeySection.style.display=t.requiresApiKey||t.optionalApiKey?``:`none`,e.baseUrlInput.placeholder=t.baseUrlPlaceholder||`https://...`,e.baseUrlDesc.textContent=t.baseUrlDescription||``,e.baseUrlSection.style.display=t.requiresBaseUrl?``:`none`,e.saveBtn.style.display=``}function dr(e,t){t.requiresDeployment?(e.deploymentSection.style.display=``,e.deploymentInput.placeholder=t.deploymentPlaceholder||`deployment-name`,e.deploymentDesc.textContent=t.deploymentDescription||``):e.deploymentSection.style.display=`none`}function fr(e,t){t.requiresApiVersion?(e.apiVersionSection.style.display=``,!e.apiVersionInput.value&&t.apiVersionDefault&&(e.apiVersionInput.value=t.apiVersionDefault),e.apiVersionInput.placeholder=t.apiVersionDefault||`api-version`,e.apiVersionDesc.textContent=t.apiVersionDescription||``):e.apiVersionSection.style.display=`none`}function pr(e){let t=e.providerSelect.value;if(!t){e.providerDesc.textContent=``,e.oauth.section.style.display=`none`,e.apiKeySection.style.display=`none`,e.baseUrlSection.style.display=`none`,e.deploymentSection.style.display=`none`,e.apiVersionSection.style.display=`none`,e.saveBtn.style.display=`none`;return}let n=w(t);e.providerDesc.textContent=n.description,ur(e,n),dr(e,n),fr(e,n)}function mr(e,t){let n=t.providerSelect.value;if(!n)return;let r=w(n),i=(e,n)=>{t.errorEl.textContent=e,t.errorEl.style.display=``,n.focus()};if(r.requiresApiKey&&t.apiKeyInput.value.trim().length<5){i(`API key is required (at least 5 characters).`,t.apiKeyInput);return}if(r.requiresBaseUrl&&!t.baseUrlInput.value.trim()){i(`Base URL is required for this provider.`,t.baseUrlInput);return}if(r.requiresDeployment&&!t.deploymentInput.value.trim()){i(`Deployment name is required for this provider.`,t.deploymentInput);return}T(n,t.apiKeyInput.value.trim(),t.baseUrlInput.value.trim()||void 0,t.deploymentInput.value.trim()||void 0,t.apiVersionInput.value.trim()||void 0),Zn(e)}function hr(e,t){let{dialog:n,options:r}=e,i=E().length>0;if(r?.startInAddAccount){let t=document.createElement(`button`);t.className=`dialog__btn dialog__btn--secondary`,t.style.marginTop=`8px`,t.textContent=`Cancel`,t.addEventListener(`click`,()=>X(e)),n.appendChild(t)}else if(!t&&!i){let t=document.createElement(`button`);t.className=`dialog__btn dialog__btn--secondary`,t.style.marginTop=`8px`,t.textContent=`Connect to another browser`,t.addEventListener(`click`,()=>yr(e)),n.appendChild(t)}else if(i){let t=document.createElement(`button`);t.className=`dialog__btn dialog__btn--secondary`,t.style.marginTop=`8px`,t.textContent=`Back`,t.addEventListener(`click`,()=>Z(e)),n.appendChild(t)}}function Q(e,t){let{dialog:n}=e;n.innerHTML=``;let r=document.createElement(`div`);r.className=`dialog__title`,r.textContent=t?`Edit Account`:`Add Account`,n.appendChild(r);let i=document.createElement(`div`);i.className=`dialog__desc`,i.textContent=`Provider:`,n.appendChild(i);let a=or(e.options,t);n.appendChild(a.providerSelect),n.appendChild(a.providerDesc),a.oauth.loginBtn.addEventListener(`click`,()=>{lr(e,a)}),t?.userName&&(a.oauth.status.textContent=`Logged in as ${t.userName}`,a.oauth.loginBtn.textContent=`Re-login`),n.appendChild(a.oauth.section),n.appendChild(a.apiKeySection),n.appendChild(a.baseUrlSection),n.appendChild(a.deploymentSection),n.appendChild(a.apiVersionSection),n.appendChild(a.errorEl),a.providerSelect.addEventListener(`change`,()=>{a.errorEl.style.display=`none`,pr(a)}),pr(a),a.saveBtn.addEventListener(`click`,()=>mr(e,a));let o=t=>{t.key===`Enter`&&mr(e,a)};a.apiKeyInput.addEventListener(`keydown`,o),a.baseUrlInput.addEventListener(`keydown`,o),a.deploymentInput.addEventListener(`keydown`,o),a.apiVersionInput.addEventListener(`keydown`,o),n.appendChild(a.saveBtn),hr(e,!!t),requestAnimationFrame(()=>{let e=a.providerSelect.value;if(!e)return;let t=w(e);t.requiresApiKey?a.apiKeyInput.focus():t.requiresBaseUrl&&a.baseUrlInput.focus()})}function gr(e,t,n){Jn(t,n),n.textContent=`Connecting…`,n.style.display=``,n.style.color=`var(--s2-content-secondary)`;let r=setTimeout(()=>{e.overlay.remove(),e.resolve(!1)},800);n.dataset.dismissTimer=String(r)}function _r(e,t){let{dialog:n}=e;n.innerHTML=``;let r=document.createElement(`div`);r.className=`dialog__title`,r.textContent=`Connect this browser?`,n.appendChild(r);let i=document.createElement(`div`);i.className=`dialog__desc`,i.style.marginBottom=`12px`,i.textContent=`You’ve been invited to mirror another SLICC browser. Click below to start syncing.`,n.appendChild(i);let a=document.createElement(`div`);a.className=`dialog__desc`,a.style.cssText=`font-family: monospace; font-size: 11px; color: var(--s2-content-secondary); word-break: break-all; margin-bottom: 16px; padding: 8px; background: var(--s2-bg-secondary); border-radius: 4px;`,a.textContent=t.length>80?t.slice(0,40)+`…`+t.slice(-37):t,n.appendChild(a);let o=document.createElement(`div`);o.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px; display: none;`,n.appendChild(o);let s=document.createElement(`button`);s.className=`dialog__btn`,s.textContent=`Connect`,s.addEventListener(`click`,()=>{let n=F(window.localStorage,t);if(!n){o.textContent=`Invalid sync URL.`,o.style.display=``,o.style.color=`var(--slicc-cone)`;return}gr(e,n.joinUrl,o)}),n.appendChild(s);let c=document.createElement(`button`);c.className=`dialog__btn dialog__btn--secondary`,c.style.marginTop=`8px`,c.textContent=`Set up an account instead`,c.addEventListener(`click`,()=>Q(e)),n.appendChild(c)}function vr(){let e=document.createElement(`details`);e.style.cssText=`margin-bottom: 12px; font-size: 12px; color: var(--s2-content-secondary);`;let t=document.createElement(`summary`);t.style.cssText=`cursor: pointer; user-select: none; color: var(--s2-content-secondary);`,t.textContent=`How do I get the sync URL?`,e.appendChild(t);let n=document.createElement(`div`);n.style.cssText=`margin-top: 8px; padding: 10px 12px; background: var(--s2-bg-layer-2); border-radius: var(--s2-radius-default); border: 1px solid var(--s2-border-subtle); line-height: 1.5;`;let r=document.createElement(`ol`);r.style.cssText=`margin: 0; padding-left: 20px;`;for(let e of[`On the other SLICC, click the avatar (top right).`,`Choose “Enable multi-browser sync” — the URL is copied automatically.`,`Paste it below. Both browsers must be on the same SLICC version.`]){let t=document.createElement(`li`);t.textContent=e,r.appendChild(t)}return n.appendChild(r),e.appendChild(n),e}function yr(e){let{dialog:t}=e;t.innerHTML=``;let n=document.createElement(`div`);n.className=`dialog__title`,n.textContent=`Connect to another browser`,t.appendChild(n);let r=document.createElement(`div`);r.className=`dialog__desc`,r.style.marginBottom=`12px`,r.textContent=`Paste a multi-browser sync URL to mirror another SLICC browser.`,t.appendChild(r),t.appendChild(vr());let a=document.createElement(`div`);a.className=`dialog__desc`,a.textContent=`Sync URL:`,t.appendChild(a);let o=document.createElement(`input`);o.className=`dialog__input`,o.type=`text`,o.autocomplete=`off`,o.spellcheck=!1,o.placeholder=`${i}/join/<token>`,t.appendChild(o);let s=document.createElement(`div`);s.style.cssText=`color: var(--slicc-cone); font-size: 12px; margin-bottom: 8px; display: none;`,t.appendChild(s);let c=document.createElement(`div`);c.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px; display: none;`;let l=document.createElement(`button`);l.className=`dialog__btn`,l.textContent=`Connect`,l.addEventListener(`click`,()=>{let t=o.value.trim();if(!t){s.textContent=`Paste a sync URL to continue.`,s.style.display=``,o.focus();return}let n=F(window.localStorage,t);if(!n){s.textContent=Wn(t),s.style.display=``,o.focus();return}gr(e,n.joinUrl,c)}),t.appendChild(l),t.appendChild(c);let u=document.createElement(`button`);u.className=`dialog__btn dialog__btn--secondary`,u.style.marginTop=`8px`,u.textContent=`Back`,u.addEventListener(`click`,()=>Q(e)),t.appendChild(u),o.addEventListener(`input`,()=>{s.style.display=`none`}),o.addEventListener(`keydown`,e=>{e.key===`Enter`&&l.click()}),requestAnimationFrame(()=>o.focus())}function br(e){return We(`button`),new Promise(t=>{let n=document.createElement(`div`);n.className=`dialog-overlay`;let r=document.createElement(`div`);r.className=`dialog`,r.style.cssText=`max-width: 480px; width: 90vw; padding: 32px;`;let i={overlay:n,dialog:r,options:e,accountsBefore:localStorage.getItem(`slicc_accounts`)??``,resolve:t};e?.startInAddAccount?Q(i):E().length>0?Z(i):e?.autoJoinUrl?_r(i,e.autoJoinUrl):e?.preferTrayJoin?yr(i):Q(i),n.appendChild(r),document.body.appendChild(n)})}var $=t(`main`);function xr(e){try{return new URL(e).searchParams.has(`ui-fixture`)}catch{return!1}}function Sr(){n(async()=>{let{setupModelCatalog:e}=await import(`./setup-model-catalog-CkKaRw7P.js`);return{setupModelCatalog:e}},__vite__mapDeps([69,3,7,6,4,8,9,1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,0])).then(({setupModelCatalog:e})=>e({locationHref:window.location.href,storage:window.localStorage,envBaseUrl:null,isDev:!1})).catch(()=>{})}async function Cr(){if(Ln(window))return;an();let e=document.getElementById(`app`);if(!e)throw Error(`#app element not found`);let t=O(),r=qt({locationHref:window.location.href,storage:window.localStorage,envBaseUrl:null,isDev:!1,isExtension:t});if(xr(window.location.href)){let{mountWcUiPreview:t}=await n(async()=>{let{mountWcUiPreview:e}=await import(`./wc-shell-D5wVSx0r.js`).then(e=>e.s);return{mountWcUiPreview:e}},__vite__mapDeps([43,6,3,4,40,44,11,38,17,7,8,9,1,10,12,13,14,15,16,18,19,20,21,22,23,45,46,47,48,49,25,50,51,52]));t(e);return}if(!t&&await sn(document))return;Jt(),Yt(),Pn(),r!==`connect`&&Ge({isExtensionRealm:t}).catch(()=>{});let i=pt(window.location.search),a=r===`cherry`?null:Tn(window.location.search),o=!!a&&D();if(await Rn(i?{apiBaseUrl:i.apiBaseUrl,token:i.token}:null,o&&a?{extensionId:a.extensionId}:null)===`reload-pending`)return;if(!t&&(r===`follower`||r===`cherry`)){let{bootFollowerFloat:t}=await n(async()=>{let{bootFollowerFloat:e}=await import(`./wc-follower-B8qcjZUV.js`);return{bootFollowerFloat:e}},__vite__mapDeps([70,3,4,1,63,39,6,40,11,41,42,43,44,38,17,7,8,9,10,12,13,14,15,16,18,19,20,21,22,23,45,46,47,48,49,25,50,51,52,53,54,55,56,57,58,59,60,61,62,64,31,65,71,72,73,34,35,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91]));return t(e,$,r)}await Ke(),Oe(),Sr(),i?.apiBaseUrl&&!o&&(Ue(i.apiBaseUrl),Ie(i.token),await ze());let{bootstrapOAuthReplicas:s}=await n(async()=>{let{bootstrapOAuthReplicas:e}=await import(`./oauth-bootstrap-CMl6k4oQ.js`);return{bootstrapOAuthReplicas:e}},__vite__mapDeps([92,3,4,17,7,6,8,9,1,10,11,12,13,14,15,16,18,19,20,21,22,23,33]));if(await Promise.race([s().catch(e=>{$.error(`OAuth bootstrap failed`,e)}),new Promise(e=>setTimeout(e,1e4))]),r===`connect`){globalThis.__slicc_connect_mode=!0;let{loadLegacyStyles:t}=await n(async()=>{let{loadLegacyStyles:e}=await import(`./legacy-styles-CGcVbQni.js`);return{loadLegacyStyles:e}},__vite__mapDeps([93,4]));await t();let{mountConnectSurface:r}=await n(async()=>{let{mountConnectSurface:e}=await import(`./connect-surface-B9shnjr7.js`);return{mountConnectSurface:e}},__vite__mapDeps([94,17,3,7,6,4,8,9,1,10,11,12,13,14,15,16,18,19,20,21,22,23]));await r(e);return}if(t){let{bootExtensionFloat:t}=await n(async()=>{let{bootExtensionFloat:e}=await import(`./wc-extension-Bn4RKL4i.js`);return{bootExtensionFloat:e}},__vite__mapDeps([95,4,71,6,3,7,8,9,1,10,11,12,13,14,15,16,40,41,42,43,44,38,17,18,19,20,21,22,23,45,46,47,48,49,25,50,51,52,53,54,55,56,57,58,59,60,62,63,64,72,73,34,35,74,75,76,77,78,79,80,81,82,83,84,85,86,87,96]));return t(e,$,r===`extension-detached`)}o&&a&&bt(a.extensionId);let{bootLeaderFloat:c}=await n(async()=>{let{bootLeaderFloat:e}=await import(`./wc-live-Dhd7KQf8.js`).then(e=>e.n);return{bootLeaderFloat:e}},__vite__mapDeps([71,6,3,7,4,8,9,1,10,11,12,13,14,15,16,40,41,42,43,44,38,17,18,19,20,21,22,23,45,46,47,48,49,25,50,51,52,53,54,55,56,57,58,59,60,62,63,64,72,73,34,35,74,75,76,77,78,79,80,81,82,83,84,85,86,87]));return c(e,$,r)}function wr(e,t){let n=document.createElement(`div`);n.style.cssText=`padding:2rem;text-align:center;font-family:system-ui;`;let r=document.createElement(`h1`);r.textContent=`Failed to start`;let i=document.createElement(`p`);i.textContent=t instanceof Error?t.message:String(t);let a=document.createElement(`button`);a.type=`button`,a.textContent=`Reload`,a.addEventListener(`click`,()=>location.reload()),n.append(r,i,a),e.replaceChildren(n)}async function Tr(e,t){let r;try{({renderBootRecoveryScreen:r}=await n(()=>import(`./recovery-screen-DWu0J0eq.js`),__vite__mapDeps([97,12,20,3])))}catch{wr(e,t);return}if(r(e,t),t instanceof Error&&t.message.includes(`did not signal ready`))try{let{triageModuleWorkerHealth:i}=await n(async()=>{let{triageModuleWorkerHealth:e}=await import(`./worker-triage-BvsMZrdR.js`);return{triageModuleWorkerHealth:e}},[]),a=await i();a===`browser-wedged`&&r(e,t,{verdict:a})}catch{}}Cr().catch(e=>{$.error(`Fatal error`,e),Xe();let t=document.getElementById(`app`);t&&Tr(t,e)});export{j as C,A as D,wt as E,ot as O,M as S,Tt as T,Pt as _,xn as a,Ft as b,pn as c,on as d,At as f,Nt as g,Mt as h,An as i,rt as k,tn as l,Lt as m,br as n,dn as o,jt as p,Hn as r,fn as s,Gn as t,R as u,zt as v,kt as w,P as x,F as y};
|
|
22
|
+
`],{type:`application/javascript`}),t=URL.createObjectURL(e),n=new Worker(t);URL.revokeObjectURL(t),n.onmessage=e=>{if(e.data.type===`ping`)n.postMessage({type:`pong`});else if(e.data.type===`freeze-detected`)console.error(`[freeze-watchdog] Main thread blocked for ${e.data.elapsed}ms — capturing trace on recovery`);else if(e.data.type===`freeze-recovered`){console.error(`[freeze-watchdog] Main thread recovered. Stack trace at recovery point:`),console.trace(`[freeze-watchdog] recovery stack`);let e=performance.getEntriesByType(`longtask`);e.length>0&&console.error(`[freeze-watchdog] Long tasks:`,e.map(e=>({duration:e.duration,startTime:e.startTime,name:e.name})))}},window.addEventListener(`beforeunload`,()=>{n.terminate()},{once:!0})}var I=null;function Yt(){return I||(I=qe(),I)}t(`stale-asset`);var Xt=`slicc-stale-asset-reload`;function Zt(e,t){if(typeof BroadcastChannel!=`function`)return()=>{};let n=new BroadcastChannel(Xt),r=n=>{let r=n.data;r?.type===`stale-asset-reload`&&r.instanceId===e&&t(r.replayTurn===!0)};return n.addEventListener(`message`,r),()=>{n.removeEventListener(`message`,r),n.close()}}var Qt=`slicc:stale-asset-reloaded-at`,$t=6e4,L=`slicc:stale-asset-replay`;function en(e=window.sessionStorage){try{e.setItem(L,`1`)}catch{}}function tn(e=window.sessionStorage){try{return e.getItem(L)===`1`&&(e.removeItem(L),!0)}catch{return!1}}function nn(){return{reload:()=>window.location.reload(),storage:window.sessionStorage,now:()=>Date.now(),windowMs:$t,storageKey:Qt}}function rn(e,t,n){return e===null||t-e>=n}function R(e=nn()){let t;try{t=e.storage.getItem(e.storageKey)}catch{return!1}let n=t===null?null:Number(t),r=n!==null&&Number.isFinite(n)?n:null,i=e.now();if(!rn(r,i,e.windowMs))return!1;try{e.storage.setItem(e.storageKey,String(i))}catch{return!1}return e.reload(),!0}var z=null,B=null;function an(e){z||(B={...nn(),...e},z=e=>{R(B)&&e.preventDefault()},window.addEventListener(`vite:preloadError`,z))}var V=null;function on(e){return V||(V=Zt(e,e=>{e&&en(),R(B??void 0)}),V)}async function sn(e,t={}){Ze(e,t.channel);let n=await Qe(t.locks===void 0?Ye():t.locks);return n?(Je(n.release),$e()):(await et(),!0)}var cn=3e4,ln=.2,un=`CDP bridge rejected the session token (bridge-token-required). Open SLICC again from Sliccstart to pick up a fresh token.`,dn=class extends Error{constructor(e=un){super(e),this.name=`CdpBridgeRejectedError`}},fn=class extends Error{constructor(){super(`CDP reconnect is backing off`),this.name=`CdpReconnectBackoffError`}};function pn(e,t=Math.random){return rt({attempt:e,baseMs:250,capMs:cn,jitter:ln,maxShift:16,random:t})}function mn(e){try{let t=new URL(e);return t.protocol!==`ws:`&&t.protocol!==`wss:`?null:`${t.protocol===`wss:`?`https:`:`http:`}//${t.host}`}catch{return null}}function hn(e){let t=(e===void 0?[]:Array.isArray(e)?e:[e]).find(e=>e.startsWith(l));if(!t)return null;let n=t.slice(l.length);return n.length>0?n:null}async function gn(e,t=globalThis.fetch){let n=hn(e.protocols),r=mn(e.url);if(!n||!r||typeof t!=`function`)return`transient`;try{let e=await t(`${r}/api/status`,{method:`GET`,headers:{[o]:n},cache:`no-store`,signal:AbortSignal.timeout(1e3)}),i=await e.text();return e.status===403&&i.includes(`bridge-token-required`)?`terminal`:`transient`}catch{return`transient`}}var H=`slicc-cdp-superseded-banner`,_n=`slicc-cdp-bridge-rejected-banner`,vn=[`position:fixed`,`left:0`,`right:0`,`z-index:2147483647`,`padding:10px 16px`,`background:#b3261e`,`color:#fff`,`font:13px/1.4 system-ui,sans-serif`,`text-align:center`,`box-shadow:0 1px 4px rgba(0,0,0,0.3)`].join(`;`);function yn(e){if(e.getElementById(H))return;let t=e.createElement(`div`);t.id=H,t.setAttribute(`role`,`alert`),t.textContent=`Another SLICC tab or window has taken control of this browser instance. Only one tab can drive the browser per instance — close the other tabs, then reload this page to resume.`,t.style.cssText=`top:0;${vn}`,e.body.appendChild(t)}function bn(e){if(e.getElementById(_n))return;let t=e.createElement(`div`);t.id=_n,t.setAttribute(`role`,`alert`),t.textContent=`The bridge token for this tab was rejected by the local SLICC server. Open SLICC again from Sliccstart so the tab picks up a fresh token.`;let n=e.getElementById(H)?`top:44px;`:`top:0;`;t.style.cssText=`${n}${vn}`,e.body.appendChild(t)}var xn=e({setupSudoExtension:()=>Cn,setupSudoStandalone:()=>Sn});async function Sn(e){let{createSudoBroker:t,installSudoTestHook:r}=await n(async()=>{let{createSudoBroker:e,installSudoTestHook:t}=await import(`./sudo-GkFEMFPC.js`);return{createSudoBroker:e,installSudoTestHook:t}},__vite__mapDeps([2,3,4,5,6,7,8,9,1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29])),{createRestCapabilityBroker:i}=await n(async()=>{let{createRestCapabilityBroker:e}=await import(`./capability-Bf6pawsJ.js`).then(e=>e.t);return{createRestCapabilityBroker:e}},__vite__mapDeps([28,6,4]));r(t(i()))}async function Cn(e){let{installPanelSudoResponder:t}=await n(async()=>{let{installPanelSudoResponder:e}=await import(`./sudo-GkFEMFPC.js`);return{installPanelSudoResponder:e}},__vite__mapDeps([2,3,4,5,6,7,8,9,1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29]));t()}function wn(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`slicc-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function Tn(e){let t;try{t=new URLSearchParams(e)}catch{return null}if(t.get(`slicc`)!==`leader`)return null;let n=t.get(`ext`);return n?{extensionId:n}:null}var En=[100,200,400,800,1600];async function Dn(e,t,n,r=En,i=e=>new Promise(t=>setTimeout(t,e))){let a=r.length+1,o=null;for(let s=0;s<a;s++)try{await e.connect(t),s>0&&n.info(`CDP bridge connect succeeded after retry`,{attempt:s+1});return}catch(e){if(o=e,e instanceof dn){n.error(`CDP bridge rejected the session token; stopped reconnecting`,e.message);return}s<r.length&&await i(r[s]??0)}n.warn(`Initial CDP connect failed after retries; worker-forwarded commands will retry on demand`,o instanceof Error?o.message:String(o))}async function On(e,t,r){let{ExtensionBridgeTransport:i}=await n(async()=>{let{ExtensionBridgeTransport:e}=await import(`./extension-bridge-transport-mKv-D3Lx.js`);return{ExtensionBridgeTransport:e}},__vite__mapDeps([30,3,31])),{mapDiscoveryPayloadToLickEvent:a,mapNavigatePayloadToLickEvent:o}=await n(async()=>{let{mapDiscoveryPayloadToLickEvent:e,mapNavigatePayloadToLickEvent:t}=await import(`./lick-ws-bridge-CuBkByJW.js`);return{mapDiscoveryPayloadToLickEvent:e,mapNavigatePayloadToLickEvent:t}},__vite__mapDeps([32,3,33,34,6,10,4,11,12,35])),s=null,c=[],l=!1,u=e=>{s=e;for(let t of c)e.sendForwardedLick(t);c.length=0},d=e=>{if(e){if(s){s.sendForwardedLick(e);return}c.length>=50&&(c.shift(),l||(l=!0,r.warn(`extension-bridge lick buffer overflow (cap 50); dropping oldest pending licks until the kernel client attaches`))),c.push(e)}},f=new e(new i({extensionId:t,onLick:e=>{d(o(e))},onDiscovery:e=>{d(a(e))},onOpenSettings:()=>{globalThis.dispatchEvent(new CustomEvent(`slicc:open-settings-from-panel`))}}));return await Dn(f,void 0,r),{browser:f,attachLickForwardingClient:u}}async function kn(e){let{browser:t,bridge:n,log:r,document:i,sleep:a}=e;t.setCdpConnectFailureClassifier(gn),t.setCdpBridgeRejectedHandler(()=>bn(i)),n&&r.info(`Routing CDP through local standalone bridge`,{url:n.url,role:n.role??`(unset)`});let o=n?{url:n.url,protocols:n.subprotocol}:void 0;if(n?.role===`follower`){r.info(`Skipping CDP connect for follower overlay tab`),t.primeConnectOptions(o);return}await Dn(t,o,r,void 0,a),t.setCdpSupersededHandler(()=>yn(i))}async function An(e){let{runtimeMode:t,envBaseUrl:r,window:i,log:a,sleep:o}=e,s=t===`electron-overlay`;a.info(`setting up standalone page runtime (BrowserAPI + CDP)`,{runtimeMode:t});let{BrowserAPI:c}=await n(async()=>{let{BrowserAPI:e}=await import(`./cdp-Dsm1GADb.js`);return{BrowserAPI:e}},__vite__mapDeps([36,3,37,38,39,6,4,40,11,41,42,43,44,17,7,8,9,1,10,12,13,14,15,16,18,19,20,21,22,23,45,46,47,48,49,25,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,31,65]));await Sn({log:a});let l,u,d,f=null,p=null,m=null,h=null,g,_=t===`cherry`?null:Tn(i.location.search),v=!!_&&D(),y=t===`cherry`||v?null:pt(i.location.search);y?.apiBaseUrl&&(f=y.apiBaseUrl,Ue(y.apiBaseUrl),p=y.token,Ie(y.token)),y?.lickWsUrl&&(m=y.lickWsUrl);let b=t===`cherry`||v||y!==null,x=await Bt(),S=Wt(t,x!==null)?At:null;if(await Rt({locationHref:i.location.href,storage:i.localStorage,envBaseUrl:r,defaultWorkerBaseUrl:S,runtimeConfigFetcher:async()=>x}),t===`cherry`){let{setupCherryFollower:e}=await n(async()=>{let{setupCherryFollower:e}=await import(`./main-cherry-CpbKxiZK.js`);return{setupCherryFollower:e}},__vite__mapDeps([66,3,63,31,36,37,38,39,6,4,40,11,41,42,43,44,17,7,8,9,1,10,12,13,14,15,16,18,19,20,21,22,23,45,46,47,48,49,25,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,67])),t=await e();l=t.browser,u=t.joinUrl,d=t.transport}else if(_&&D()){a.info(`Routing CDP through the extension bridge (leader tab)`);let e=await On(c,_.extensionId,a);l=e.browser,g=e.attachLickForwardingClient,h=_.extensionId,Re(_.extensionId)}else l=new c,await kn({browser:l,bridge:y,log:a,document:i.document,sleep:o});let C=l.getUnderlyingTransport();return globalThis.__slicc_browser=l,{browser:l,realCdpTransport:C,hasLocalCdpSurface:b,cherryJoinUrl:u,cherryTransport:d,instanceId:wn(),isElectronOverlay:s,localApiBaseUrl:f,bridgeToken:p,localLickWsUrl:m,extensionDelegateId:h,attachLickForwardingClient:g}}var U=t(`storage-persist`);function jn(){try{return globalThis.navigator?.storage}catch{return}}async function Mn(e=jn()){try{return typeof e?.persist==`function`?typeof e.persisted==`function`&&await e.persisted()?`already-persisted`:await e.persist()?`granted`:`denied`:`unsupported`}catch(e){return U.warn(`storage persistence check failed`,e),`failed`}}var Nn=!1;function Pn(){Nn||(Nn=!0,Mn().then(e=>{switch(e){case`granted`:U.info(`OPFS marked persistent — SLICC data is now exempt from disk-pressure eviction`);break;case`already-persisted`:U.debug(`OPFS already persistent`);break;case`denied`:U.warn(`Browser declined persistent storage — SLICC data can be evicted if the disk fills up`);break;case`unsupported`:U.debug(`navigator.storage.persist() unavailable in this runtime`)}}).catch(()=>{}))}var Fn=`/os/`;function In(e){try{return e.localStorage?.getItem(`slicc-os.six`)??null}catch{return null}}function W(e){return e.location.origin===`https://www.sliccy.ai`&&In(e)===`upgraded`}function Ln(e){return W(e)?(e.location.replace(Fn),!0):(e.location.origin===`https://www.sliccy.ai`&&e.addEventListener?.(`storage`,t=>{(t.key===`slicc-os.six`||t.key===null)&&W(e)&&e.location.replace(Fn)}),!1)}var G=t(`boot/sw-registration`);async function Rn(e=null,t=null){if(W(window))return`ready`;let n=(()=>{try{return new URL(window.location.href).searchParams.get(`connect`)===`1`}catch{return!1}})();if(`serviceWorker`in navigator&&n&&await Vn())return`reload-pending`;if(!(`serviceWorker`in navigator)||n)return`ready`;try{if(await navigator.serviceWorker.register(`/preview-sw.js`,{scope:`/preview/`}),G.info(`Preview SW registered`),!O())try{await navigator.serviceWorker.register(`/llm-proxy-sw.js`,{scope:`/`}),G.info(`LLM-proxy SW registered`)}catch(e){G.error(`LLM-proxy SW registration failed — cross-origin LLM calls will hit CORS`,e)}if(navigator.serviceWorker.controller||await Promise.race([new Promise(e=>navigator.serviceWorker.addEventListener(`controllerchange`,()=>e(),{once:!0})),new Promise(e=>setTimeout(e,1500))]),!navigator.serviceWorker.controller&&!sessionStorage.getItem(`slicc-sw-reloaded`))return sessionStorage.setItem(`slicc-sw-reloaded`,`1`),G.info(`Reloading once to gain SW control`),location.reload(),`reload-pending`;sessionStorage.removeItem(`slicc-sw-reloaded`),e&&(zn(e),navigator.serviceWorker.addEventListener(`controllerchange`,()=>{zn(e)})),t&&(Bn(t),navigator.serviceWorker.addEventListener(`controllerchange`,()=>{Bn(t)}))}catch(e){G.error(`Preview SW registration failed — preview feature will not work`,e)}return`ready`}function zn(e){let t=navigator.serviceWorker.controller;if(!t)return;let n={type:mt,apiBaseUrl:e.apiBaseUrl,token:e.token};try{t.postMessage(n)}catch(e){G.warn(`LLM-proxy SW bridge-config postMessage failed`,e)}}function Bn(e){let t=navigator.serviceWorker.controller;if(!t)return;let n={type:ht,extensionId:e.extensionId};try{t.postMessage(n)}catch(e){G.warn(`LLM-proxy SW extension-delegate postMessage failed`,e)}}async function Vn(){try{let e=await navigator.serviceWorker.getRegistrations();if(await Promise.all(e.map(e=>e.unregister().catch(()=>!1))),navigator.serviceWorker.controller&&!sessionStorage.getItem(`slicc-connect-sw-cleared`))return sessionStorage.setItem(`slicc-connect-sw-cleared`,`1`),G.info(`connect mode: detaching from service worker (no proxy on worker origin)`),location.reload(),!0;sessionStorage.removeItem(`slicc-connect-sw-cleared`)}catch(e){G.error(`connect-mode SW cleanup failed`,e)}return!1}function Hn(e,t){if(e.state===`inactive`&&t.state===`inactive`)return{kind:`leader-offer`,label:`Enable multi-browser sync`,caption:`Connect another browser to this session.`};if(e.state===`leader`&&e.session?.joinUrl)return{kind:`leader-copy`,joinUrl:e.session.joinUrl,label:`Enable multi-browser sync`,caption:`Share this URL to connect more browsers.`};if(e.state!==`inactive`){let t=e.state===`connecting`?`Setting up multi-browser sync…`:e.state===`reconnecting`?`Reconnecting…`:`Sync service unreachable.`;return{kind:`leader-pending`,label:`Multi-browser sync`,caption:e.error??t}}return{kind:`follower`,label:`Multi-browser sync`,caption:t.error??t.lastError??Un(t.state)??`Mirroring another browser.`}}function Un(e){switch(e){case`connected`:return`Connected — mirroring another browser.`;case`connecting`:return`Connecting to the other browser…`;case`reconnecting`:return`Reconnecting…`;case`disconnected`:return`Disconnected from the other browser.`;default:return null}}function Wn(e){let t=e.trim();if(!t)return`Paste a sync URL to continue.`;let n=null;try{n=new URL(t)}catch{return`That doesn’t look like a URL. Paste the full https://… link from the other browser.`}return n.protocol!==`https:`&&n.protocol!==`http:`?`Sync URLs must start with https://.`:n.pathname.includes(`/join/`)?`That sync URL is malformed. Re-copy it from the other browser and try again.`:`This URL is missing the /join/… capability. Use “Enable multi-browser sync” on the other browser.`}var Gn=e({ACCOUNTS_KEY:()=>u,__test__:()=>Ae,addAccount:()=>T,applyProviderDefaults:()=>Oe,clearAllSettings:()=>be,clearApiKey:()=>pe,clearBaseUrl:()=>Te,clearSelectedProvider:()=>ke,describeInvalidJoinUrl:()=>Wn,downloadProviders:()=>Yn,ensureOAuthMaskReplica:()=>he,exportProviders:()=>Ce,getAccounts:()=>E,getAllAvailableModels:()=>ge,getAllExtraOAuthDomains:()=>_e,getAlternativeModelProviders:()=>Ee,getApiKey:()=>we,getApiKeyForProvider:()=>ye,getApiVersionForProvider:()=>ve,getAvailableProviders:()=>fe,getBaseUrl:()=>je,getBaseUrlForProvider:()=>Pe,getDeploymentForProvider:()=>me,getExtraOAuthDomains:()=>Ne,getModelCatalogProviderIds:()=>ae,getOAuthAccountInfo:()=>p,getPickerHiddenModels:()=>Me,getProviderConfig:()=>w,getProviderModels:()=>h,getRawApiKeyForProvider:()=>m,getSelectedModelId:()=>te,getSelectedProvider:()=>Se,isModelHiddenFromPicker:()=>d,isUsableOAuthMaskReplica:()=>xe,logoutOAuthAccount:()=>C,maskOAuthTokenWithRetry:()=>ee,migrateLegacyAuthOnlySelection:()=>ne,migrateRenamedPiProviders:()=>g,modelRunsOnProvider:()=>y,persistOAuthMaskViaServiceWorker:()=>S,policyVisible:()=>ie,providerOffersLlmModels:()=>Fe,reloginOAuthAccount:()=>$n,removeAccount:()=>f,resolveCurrentModel:()=>se,resolveModelById:()=>v,resolveModelByShorthand:()=>oe,resolveModelIdForScoop:()=>ce,resolveModelSelectionForScoop:()=>_,saveOAuthAccount:()=>x,setApiKey:()=>De,setBaseUrl:()=>b,setExtraOAuthDomains:()=>ue,setExtraOAuthDomainsAsync:()=>le,setSelectedModelId:()=>de,setSelectedProvider:()=>re,showProviderSettings:()=>br,testOnlyDispatchTrayJoinWithFailureFeedback:()=>qn}),Kn=t(`provider-settings`);function qn(e,t){return Jn(e,t)}function Jn(e,t){let n=`tray-join-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,r=!1,i,a=()=>{r||(r=!0,i!==void 0&&clearTimeout(i),window.removeEventListener(`slicc:tray-join-failed`,o))},o=r=>{let i=r.detail;if(i.requestId!==void 0&&i.requestId!==n)return;if(a(),!t.isConnected){Kn.error(`Tray-join failure arrived after dialog dismissed (UX swallowed half-state)`,{joinUrl:e,error:i.error,requestId:n});return}let o=t.dataset.dismissTimer;if(o){let e=Number(o);Number.isFinite(e)&&clearTimeout(e),delete t.dataset.dismissTimer}t.textContent=`Sync failed: ${i.error}. Reload the page and try again.`,t.style.color=`var(--slicc-cone)`};return window.addEventListener(`slicc:tray-join-failed`,o),i=setTimeout(a,1e4),window.dispatchEvent(new CustomEvent(`slicc:tray-join`,{detail:{joinUrl:e,requestId:n}})),a}function Yn(){let e=JSON.stringify(Ce(),null,2),t=new Blob([e],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`providers.json`,r.click(),URL.revokeObjectURL(n)}function Xn(e){return e.length<=10?`****`:e.slice(0,4)+`...`+e.slice(-4)}function K(e){let t=`http://www.w3.org/2000/svg`,n=document.createElementNS(t,`svg`);n.setAttribute(`width`,`14`),n.setAttribute(`height`,`14`),n.setAttribute(`viewBox`,`0 0 20 20`),n.setAttribute(`fill`,`none`),n.setAttribute(`stroke`,`currentColor`),n.setAttribute(`stroke-width`,`1.5`),n.setAttribute(`stroke-linecap`,`round`),n.setAttribute(`stroke-linejoin`,`round`);for(let r of e){let e=document.createElementNS(t,`path`);e.setAttribute(`d`,r),n.appendChild(e)}return n}var q={pen:[`M14.3 3.3a1.5 1.5 0 0 1 2.1 0l.3.3a1.5 1.5 0 0 1 0 2.1L7.7 14.8l-3.2.7.7-3.2z`],trash:[`M4 6h12`,`M8 6V4a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2`,`M6 6v10a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V6`],logout:[`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,`M16 17l5-5-5-5`,`M21 12H9`],login:[`M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4`,`M10 17l5-5-5-5`,`M15 12H3`]},J=`background: transparent; border: 1px solid var(--s2-border-subtle); color: var(--s2-content-secondary); border-radius: var(--s2-radius-s); padding: 6px; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: color 0.15s, border-color 0.15s;`;function Y(e,t){e.addEventListener(`mouseenter`,()=>{e.style.color=t,e.style.borderColor=t}),e.addEventListener(`mouseleave`,()=>{e.style.color=`var(--s2-content-secondary)`,e.style.borderColor=`var(--s2-border-subtle)`})}function X(e){e.overlay.remove(),e.resolve((localStorage.getItem(`slicc_accounts`)??``)!==e.accountsBefore)}function Zn(e){e.options?.startInAddAccount?X(e):Z(e)}function Qn(e){let t=document.createElement(`div`);return t.style.cssText=`font-size: 11px; color: var(--s2-content-disabled); font-family: monospace; margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;`,e.loggedOut?(t.textContent=e.userName?`Logged out — was ${e.userName}`:`Logged out`,t.style.color=`var(--s2-content-disabled)`):t.textContent=e.userName?e.userName:e.accessToken?`Logged in`:Xn(e.apiKey),e.baseUrl&&(t.textContent+=` • `+e.baseUrl),t}async function $n(e,t){let{createOAuthLauncher:r,createInterceptingOAuthLauncherForCurrentRuntime:i}=await n(async()=>{let{createOAuthLauncher:e,createInterceptingOAuthLauncherForCurrentRuntime:t}=await import(`./oauth-service-DBNa_4eS.js`);return{createOAuthLauncher:e,createInterceptingOAuthLauncherForCurrentRuntime:t}},__vite__mapDeps([68,4,10,6,11,12,15,42])),a={forceReauth:!0};if(e.onOAuthLoginIntercepted){let n=await i();n&&await e.onOAuthLoginIntercepted(n,t,a)}else if(e.onOAuthLogin){let n=r();await e.onOAuthLogin(n,t,a)}}function er(e,t){let n=document.createElement(`button`);return n.style.cssText=J,n.setAttribute(`aria-label`,`Edit account`),n.appendChild(K(q.pen)),Y(n,`var(--s2-accent)`),n.addEventListener(`click`,()=>Q(e,t)),n}function tr(e,t,n){let r=document.createElement(`button`);return r.style.cssText=J,t.loggedOut===!0?(r.setAttribute(`aria-label`,`Log in`),r.setAttribute(`title`,`Log in`),r.appendChild(K(q.login)),Y(r,`var(--s2-accent)`),r.addEventListener(`click`,()=>{$n(n,()=>Z(e))})):(r.setAttribute(`aria-label`,`Log out`),r.setAttribute(`title`,`Log out`),r.appendChild(K(q.logout)),Y(r,`var(--s2-warning, #f59e0b)`),r.addEventListener(`click`,()=>{(async()=>{await C(t.providerId),Z(e)})()})),r}function nr(e,t){let n=document.createElement(`button`);return n.style.cssText=J,n.setAttribute(`aria-label`,`Remove account`),n.appendChild(K(q.trash)),Y(n,`var(--s2-negative)`),n.addEventListener(`click`,()=>{(async()=>{await f(t.providerId),Z(e)})()}),n}function rr(e,t){let n=w(t.providerId),r=document.createElement(`div`);r.style.cssText=`display: flex; align-items: center; justify-content: space-between; padding: 10px 12px; background: var(--s2-bg-layer-2); border-radius: var(--s2-radius-default); margin-bottom: 8px; border: 1px solid var(--s2-border-subtle);`;let i=document.createElement(`div`);i.style.cssText=`flex: 1; min-width: 0;`;let a=document.createElement(`div`);a.style.cssText=`font-size: 14px; font-weight: 600; color: var(--s2-content-default);`,a.textContent=n.name,i.appendChild(a),i.appendChild(Qn(t)),r.appendChild(i);let o=document.createElement(`div`);return o.style.cssText=`display: flex; gap: 4px; margin-left: 12px; flex-shrink: 0;`,o.appendChild(er(e,t)),n.isOAuth&&o.appendChild(tr(e,t,n)),o.appendChild(nr(e,t)),r.appendChild(o),r}function ir(e){let t=document.createDocumentFragment(),n=document.createElement(`hr`);n.style.cssText=`border: none; border-top: 1px solid var(--s2-border-subtle); margin: 16px 0;`,t.appendChild(n);let r=document.createElement(`div`);r.className=`dialog__desc`,r.style.cssText=`font-weight: 600; margin-bottom: 8px;`,r.textContent=`Tray`,t.appendChild(r);let i=tt(),a=i.state!==`inactive`,o=Nt(window.localStorage);if(a||o){let e=document.createElement(`div`);e.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px;`,e.textContent=`Follower: ${a?i.state:`configured`}`,i.error&&(e.textContent+=` — ${i.error}`,e.style.color=`var(--slicc-cone)`),t.appendChild(e)}let s=document.createElement(`button`);return s.className=`dialog__btn dialog__btn--secondary`,s.textContent=a||o?`Reconnect to other browser`:`Connect to another browser`,s.addEventListener(`click`,()=>yr(e)),t.appendChild(s),t}function Z(e){let{dialog:t}=e;t.innerHTML=``;let n=document.createElement(`div`);n.className=`dialog__title`,n.textContent=`Accounts`,t.appendChild(n);let r=E();if(r.length===0){let e=document.createElement(`div`);e.className=`dialog__desc`,e.textContent=`No accounts configured.`,t.appendChild(e)}else{let n=document.createElement(`div`);n.style.cssText=`margin-bottom: 16px;`;for(let t of r)n.appendChild(rr(e,t));t.appendChild(n)}let i=document.createElement(`div`);i.style.cssText=`display: flex; gap: 8px;`;let a=document.createElement(`button`);a.className=r.length>0?`dialog__btn dialog__btn--secondary`:`dialog__btn`,a.style.flex=`1`,a.textContent=`Add Account`,a.addEventListener(`click`,()=>Q(e)),i.appendChild(a);let o=document.createElement(`button`);o.className=`dialog__btn dialog__btn--secondary`,o.style.flex=`1`,o.textContent=`Export`,o.addEventListener(`click`,()=>Yn()),i.appendChild(o),t.appendChild(i),t.appendChild(ir(e));let s=document.createElement(`hr`);s.style.cssText=`border: none; border-top: 1px solid var(--s2-border-subtle); margin: 16px 0;`,t.appendChild(s);let c=document.createElement(`button`);c.className=`dialog__btn`,c.textContent=`Get Started`,c.addEventListener(`click`,()=>X(e)),t.appendChild(c)}function ar(e,t){let n=document.createElement(`select`);if(n.className=`dialog__input`,n.style.marginBottom=`8px`,t){let e=w(t.providerId),r=document.createElement(`option`);return r.value=t.providerId,r.textContent=e.name,n.appendChild(r),n.disabled=!0,n.style.opacity=`0.7`,n}let r=document.createElement(`option`);r.value=``,r.textContent=`Select a provider…`,r.disabled=!0,r.selected=!0,r.hidden=!0,n.appendChild(r);let i=new Set(E().map(e=>e.providerId)),a=[...fe()].sort((e,t)=>w(e).name.localeCompare(w(t).name));for(let t of a){if(i.has(t))continue;if(e?.providerFilter){if(!e.providerFilter(t))continue}else if(!Fe(t))continue;let r=document.createElement(`option`);r.value=t,r.textContent=w(t).name,n.appendChild(r)}return n}function or(e,t){let n=ar(e,t),r=document.createElement(`div`);r.className=`dialog__desc`,r.style.cssText=`font-size: 12px; color: var(--s2-content-tertiary); margin-bottom: 16px; margin-top: -4px;`;let i=document.createElement(`div`);i.style.cssText=`margin-bottom: 16px; display: none;`;let a=document.createElement(`button`);a.className=`dialog__btn`,a.textContent=`Login`,a.style.cssText=`width: 100%; margin-bottom: 8px;`,i.appendChild(a);let o=document.createElement(`div`);o.className=`dialog__desc`,o.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); text-align: center;`,i.appendChild(o);let s=document.createElement(`div`),c=document.createElement(`div`);c.className=`dialog__desc`,s.appendChild(c);let l=document.createElement(`input`);l.className=`dialog__input`,l.type=`password`,l.autocomplete=`off`,l.spellcheck=!1,t&&(l.value=t.apiKey),s.appendChild(l);let u=document.createElement(`div`),d=document.createElement(`div`);d.className=`dialog__desc`,d.textContent=`Base URL:`,u.appendChild(d);let f=document.createElement(`input`);f.className=`dialog__input`,f.type=`text`,f.autocomplete=`off`,f.spellcheck=!1,t?.baseUrl&&(f.value=t.baseUrl),u.appendChild(f);let p=document.createElement(`div`);p.className=`dialog__desc`,p.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,u.appendChild(p);let m=document.createElement(`div`);m.style.display=`none`;let h=document.createElement(`div`);h.className=`dialog__desc`,h.textContent=`Deployment:`,m.appendChild(h);let g=document.createElement(`input`);g.className=`dialog__input`,g.type=`text`,g.autocomplete=`off`,g.spellcheck=!1,t?.deployment&&(g.value=t.deployment),m.appendChild(g);let _=document.createElement(`div`);_.className=`dialog__desc`,_.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,m.appendChild(_);let v=document.createElement(`div`);v.style.display=`none`;let y=document.createElement(`div`);y.className=`dialog__desc`,y.textContent=`API Version:`,v.appendChild(y);let b=document.createElement(`input`);b.className=`dialog__input`,b.type=`text`,b.autocomplete=`off`,b.spellcheck=!1,t?.apiVersion&&(b.value=t.apiVersion),v.appendChild(b);let x=document.createElement(`div`);x.className=`dialog__desc`,x.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,v.appendChild(x);let S=document.createElement(`div`);S.style.cssText=`color: var(--slicc-cone); font-size: 12px; margin-bottom: 8px; display: none;`;let C=document.createElement(`button`);return C.className=`dialog__btn`,C.textContent=t?`Save`:`Add`,{providerSelect:n,providerDesc:r,oauth:{section:i,loginBtn:a,status:o},apiKeySection:s,apiKeyLabel:c,apiKeyInput:l,baseUrlSection:u,baseUrlInput:f,baseUrlDesc:p,deploymentSection:m,deploymentInput:g,deploymentDesc:_,apiVersionSection:v,apiVersionInput:b,apiVersionDesc:x,errorEl:S,saveBtn:C}}function sr(e){let t=document.createElement(`div`);t.setAttribute(`data-slicc-device-code-prompt`,``),t.style.cssText=`display:flex;flex-direction:column;gap:8px`;let n=document.createElement(`div`);n.className=`dialog__desc`,n.textContent=`Verification code`,n.style.cssText=`font-size: 11px; color: var(--s2-content-tertiary);`;let r=document.createElement(`div`);r.textContent=e,r.style.cssText=[`font: 600 22px ui-monospace, SFMono-Regular, Menlo, monospace`,`letter-spacing: 2px`,`color: var(--s2-content-primary, #e6edf3)`,`background: var(--s2-bg-secondary, #161b22)`,`border: 1px solid var(--s2-border, #30363d)`,`border-radius: 6px`,`padding: 10px 12px`,`text-align: center`,`user-select: all`,`cursor: text`].join(`;`);let i=document.createElement(`div`);i.className=`dialog__desc`,i.style.cssText=`font-size: 12px; color: var(--s2-content-secondary);`,i.textContent=`Click Copy & Continue — we will open the GitHub authorization page in a new tab. Paste this code there if it is not already filled in.`;let a=document.createElement(`div`);a.style.cssText=`display:flex;gap:8px;justify-content:flex-end;margin-top:4px`;let o=document.createElement(`button`);o.type=`button`,o.className=`dialog__btn`,o.textContent=`Cancel`;let s=document.createElement(`button`);return s.type=`button`,s.className=`dialog__btn dialog__btn--primary`,s.textContent=`Copy & Continue`,a.appendChild(o),a.appendChild(s),t.appendChild(n),t.appendChild(r),t.appendChild(i),t.appendChild(a),{prompt:t,cancelBtn:o,continueBtn:s}}function cr(e){return t=>new Promise(n=>{let r=e.loginBtn.style.display,i=e.status.style.display;e.loginBtn.style.display=`none`,e.status.style.display=`none`;let{prompt:a,cancelBtn:o,continueBtn:s}=sr(t.userCode),c=()=>{try{a.remove()}catch{}e.loginBtn.style.display=r,e.status.style.display=i};o.addEventListener(`click`,()=>{c(),n(`cancel`)}),s.addEventListener(`click`,()=>{(async()=>{try{await nt(t.userCode)}catch{}c(),e.status.style.display=i,e.status.textContent=`Waiting for you to authorize in the new tab…`,n(`continue`)})()}),e.section.appendChild(a)})}async function lr(e,t){let r=t.providerSelect.value;if(!r)return;let i=w(r);if(!i.onOAuthLogin&&!i.onOAuthLoginIntercepted)return;let{status:a}=t.oauth,o=E().some(e=>e.providerId===r),s=Pe(r);if(i.requiresBaseUrl&&!t.baseUrlInput.value.trim()&&!s){a.textContent=`Base URL is required.`,a.style.color=`var(--slicc-cone)`,t.baseUrlInput.focus();return}i.requiresBaseUrl&&t.baseUrlInput.value.trim()&&T(r,``,t.baseUrlInput.value.trim()),a.textContent=`Opening login window...`;try{if(i.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:r}=await n(async()=>{let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await import(`./oauth-service-DBNa_4eS.js`);return{createInterceptingOAuthLauncherForCurrentRuntime:e}},__vite__mapDeps([68,4,10,6,11,12,15,42])),a=await r();if(!a)throw Error(`No controlled-browser CDP transport available — open SLICC in standalone mode or the Chrome extension.`);await i.onOAuthLoginIntercepted(a,()=>Zn(e),{presentDeviceCode:cr(t.oauth)})}else if(i.onOAuthLogin){let{createOAuthLauncher:t}=await n(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-DBNa_4eS.js`);return{createOAuthLauncher:e}},__vite__mapDeps([68,4,10,6,11,12,15,42])),r=t();await i.onOAuthLogin(r,()=>Zn(e))}}catch(e){if(!o)try{await f(r)}catch{}Kn.error(`OAuth login failed`,{providerId:r,error:e instanceof Error?e.message:String(e)}),a.textContent=`Login failed: ${e instanceof Error?e.message:String(e)}`}}function ur(e,t){if(t.isOAuth){e.oauth.section.style.display=``,e.apiKeySection.style.display=`none`,e.baseUrlSection.style.display=t.requiresBaseUrl?``:`none`,t.requiresBaseUrl&&(e.baseUrlInput.placeholder=t.baseUrlPlaceholder||`https://...`,e.baseUrlDesc.textContent=t.baseUrlDescription||``),e.oauth.loginBtn.textContent=`Login with ${t.name}`,e.saveBtn.style.display=`none`;return}e.oauth.section.style.display=`none`;let n=t.requiresApiKey?`API Key`:`API Key (optional)`;e.apiKeyLabel.textContent=`${n}${t.apiKeyEnvVar?` (${t.apiKeyEnvVar})`:``}:`,e.apiKeyInput.placeholder=t.apiKeyPlaceholder||`API key`,e.apiKeySection.style.display=t.requiresApiKey||t.optionalApiKey?``:`none`,e.baseUrlInput.placeholder=t.baseUrlPlaceholder||`https://...`,e.baseUrlDesc.textContent=t.baseUrlDescription||``,e.baseUrlSection.style.display=t.requiresBaseUrl?``:`none`,e.saveBtn.style.display=``}function dr(e,t){t.requiresDeployment?(e.deploymentSection.style.display=``,e.deploymentInput.placeholder=t.deploymentPlaceholder||`deployment-name`,e.deploymentDesc.textContent=t.deploymentDescription||``):e.deploymentSection.style.display=`none`}function fr(e,t){t.requiresApiVersion?(e.apiVersionSection.style.display=``,!e.apiVersionInput.value&&t.apiVersionDefault&&(e.apiVersionInput.value=t.apiVersionDefault),e.apiVersionInput.placeholder=t.apiVersionDefault||`api-version`,e.apiVersionDesc.textContent=t.apiVersionDescription||``):e.apiVersionSection.style.display=`none`}function pr(e){let t=e.providerSelect.value;if(!t){e.providerDesc.textContent=``,e.oauth.section.style.display=`none`,e.apiKeySection.style.display=`none`,e.baseUrlSection.style.display=`none`,e.deploymentSection.style.display=`none`,e.apiVersionSection.style.display=`none`,e.saveBtn.style.display=`none`;return}let n=w(t);e.providerDesc.textContent=n.description,ur(e,n),dr(e,n),fr(e,n)}function mr(e,t){let n=t.providerSelect.value;if(!n)return;let r=w(n),i=(e,n)=>{t.errorEl.textContent=e,t.errorEl.style.display=``,n.focus()};if(r.requiresApiKey&&t.apiKeyInput.value.trim().length<5){i(`API key is required (at least 5 characters).`,t.apiKeyInput);return}if(r.requiresBaseUrl&&!t.baseUrlInput.value.trim()){i(`Base URL is required for this provider.`,t.baseUrlInput);return}if(r.requiresDeployment&&!t.deploymentInput.value.trim()){i(`Deployment name is required for this provider.`,t.deploymentInput);return}T(n,t.apiKeyInput.value.trim(),t.baseUrlInput.value.trim()||void 0,t.deploymentInput.value.trim()||void 0,t.apiVersionInput.value.trim()||void 0),Zn(e)}function hr(e,t){let{dialog:n,options:r}=e,i=E().length>0;if(r?.startInAddAccount){let t=document.createElement(`button`);t.className=`dialog__btn dialog__btn--secondary`,t.style.marginTop=`8px`,t.textContent=`Cancel`,t.addEventListener(`click`,()=>X(e)),n.appendChild(t)}else if(!t&&!i){let t=document.createElement(`button`);t.className=`dialog__btn dialog__btn--secondary`,t.style.marginTop=`8px`,t.textContent=`Connect to another browser`,t.addEventListener(`click`,()=>yr(e)),n.appendChild(t)}else if(i){let t=document.createElement(`button`);t.className=`dialog__btn dialog__btn--secondary`,t.style.marginTop=`8px`,t.textContent=`Back`,t.addEventListener(`click`,()=>Z(e)),n.appendChild(t)}}function Q(e,t){let{dialog:n}=e;n.innerHTML=``;let r=document.createElement(`div`);r.className=`dialog__title`,r.textContent=t?`Edit Account`:`Add Account`,n.appendChild(r);let i=document.createElement(`div`);i.className=`dialog__desc`,i.textContent=`Provider:`,n.appendChild(i);let a=or(e.options,t);n.appendChild(a.providerSelect),n.appendChild(a.providerDesc),a.oauth.loginBtn.addEventListener(`click`,()=>{lr(e,a)}),t?.userName&&(a.oauth.status.textContent=`Logged in as ${t.userName}`,a.oauth.loginBtn.textContent=`Re-login`),n.appendChild(a.oauth.section),n.appendChild(a.apiKeySection),n.appendChild(a.baseUrlSection),n.appendChild(a.deploymentSection),n.appendChild(a.apiVersionSection),n.appendChild(a.errorEl),a.providerSelect.addEventListener(`change`,()=>{a.errorEl.style.display=`none`,pr(a)}),pr(a),a.saveBtn.addEventListener(`click`,()=>mr(e,a));let o=t=>{t.key===`Enter`&&mr(e,a)};a.apiKeyInput.addEventListener(`keydown`,o),a.baseUrlInput.addEventListener(`keydown`,o),a.deploymentInput.addEventListener(`keydown`,o),a.apiVersionInput.addEventListener(`keydown`,o),n.appendChild(a.saveBtn),hr(e,!!t),requestAnimationFrame(()=>{let e=a.providerSelect.value;if(!e)return;let t=w(e);t.requiresApiKey?a.apiKeyInput.focus():t.requiresBaseUrl&&a.baseUrlInput.focus()})}function gr(e,t,n){Jn(t,n),n.textContent=`Connecting…`,n.style.display=``,n.style.color=`var(--s2-content-secondary)`;let r=setTimeout(()=>{e.overlay.remove(),e.resolve(!1)},800);n.dataset.dismissTimer=String(r)}function _r(e,t){let{dialog:n}=e;n.innerHTML=``;let r=document.createElement(`div`);r.className=`dialog__title`,r.textContent=`Connect this browser?`,n.appendChild(r);let i=document.createElement(`div`);i.className=`dialog__desc`,i.style.marginBottom=`12px`,i.textContent=`You’ve been invited to mirror another SLICC browser. Click below to start syncing.`,n.appendChild(i);let a=document.createElement(`div`);a.className=`dialog__desc`,a.style.cssText=`font-family: monospace; font-size: 11px; color: var(--s2-content-secondary); word-break: break-all; margin-bottom: 16px; padding: 8px; background: var(--s2-bg-secondary); border-radius: 4px;`,a.textContent=t.length>80?t.slice(0,40)+`…`+t.slice(-37):t,n.appendChild(a);let o=document.createElement(`div`);o.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px; display: none;`,n.appendChild(o);let s=document.createElement(`button`);s.className=`dialog__btn`,s.textContent=`Connect`,s.addEventListener(`click`,()=>{let n=F(window.localStorage,t);if(!n){o.textContent=`Invalid sync URL.`,o.style.display=``,o.style.color=`var(--slicc-cone)`;return}gr(e,n.joinUrl,o)}),n.appendChild(s);let c=document.createElement(`button`);c.className=`dialog__btn dialog__btn--secondary`,c.style.marginTop=`8px`,c.textContent=`Set up an account instead`,c.addEventListener(`click`,()=>Q(e)),n.appendChild(c)}function vr(){let e=document.createElement(`details`);e.style.cssText=`margin-bottom: 12px; font-size: 12px; color: var(--s2-content-secondary);`;let t=document.createElement(`summary`);t.style.cssText=`cursor: pointer; user-select: none; color: var(--s2-content-secondary);`,t.textContent=`How do I get the sync URL?`,e.appendChild(t);let n=document.createElement(`div`);n.style.cssText=`margin-top: 8px; padding: 10px 12px; background: var(--s2-bg-layer-2); border-radius: var(--s2-radius-default); border: 1px solid var(--s2-border-subtle); line-height: 1.5;`;let r=document.createElement(`ol`);r.style.cssText=`margin: 0; padding-left: 20px;`;for(let e of[`On the other SLICC, click the avatar (top right).`,`Choose “Enable multi-browser sync” — the URL is copied automatically.`,`Paste it below. Both browsers must be on the same SLICC version.`]){let t=document.createElement(`li`);t.textContent=e,r.appendChild(t)}return n.appendChild(r),e.appendChild(n),e}function yr(e){let{dialog:t}=e;t.innerHTML=``;let n=document.createElement(`div`);n.className=`dialog__title`,n.textContent=`Connect to another browser`,t.appendChild(n);let r=document.createElement(`div`);r.className=`dialog__desc`,r.style.marginBottom=`12px`,r.textContent=`Paste a multi-browser sync URL to mirror another SLICC browser.`,t.appendChild(r),t.appendChild(vr());let a=document.createElement(`div`);a.className=`dialog__desc`,a.textContent=`Sync URL:`,t.appendChild(a);let o=document.createElement(`input`);o.className=`dialog__input`,o.type=`text`,o.autocomplete=`off`,o.spellcheck=!1,o.placeholder=`${i}/join/<token>`,t.appendChild(o);let s=document.createElement(`div`);s.style.cssText=`color: var(--slicc-cone); font-size: 12px; margin-bottom: 8px; display: none;`,t.appendChild(s);let c=document.createElement(`div`);c.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px; display: none;`;let l=document.createElement(`button`);l.className=`dialog__btn`,l.textContent=`Connect`,l.addEventListener(`click`,()=>{let t=o.value.trim();if(!t){s.textContent=`Paste a sync URL to continue.`,s.style.display=``,o.focus();return}let n=F(window.localStorage,t);if(!n){s.textContent=Wn(t),s.style.display=``,o.focus();return}gr(e,n.joinUrl,c)}),t.appendChild(l),t.appendChild(c);let u=document.createElement(`button`);u.className=`dialog__btn dialog__btn--secondary`,u.style.marginTop=`8px`,u.textContent=`Back`,u.addEventListener(`click`,()=>Q(e)),t.appendChild(u),o.addEventListener(`input`,()=>{s.style.display=`none`}),o.addEventListener(`keydown`,e=>{e.key===`Enter`&&l.click()}),requestAnimationFrame(()=>o.focus())}function br(e){return We(`button`),new Promise(t=>{let n=document.createElement(`div`);n.className=`dialog-overlay`;let r=document.createElement(`div`);r.className=`dialog`,r.style.cssText=`max-width: 480px; width: 90vw; padding: 32px;`;let i={overlay:n,dialog:r,options:e,accountsBefore:localStorage.getItem(`slicc_accounts`)??``,resolve:t};e?.startInAddAccount?Q(i):E().length>0?Z(i):e?.autoJoinUrl?_r(i,e.autoJoinUrl):e?.preferTrayJoin?yr(i):Q(i),n.appendChild(r),document.body.appendChild(n)})}var $=t(`main`);function xr(e){try{return new URL(e).searchParams.has(`ui-fixture`)}catch{return!1}}function Sr(){n(async()=>{let{setupModelCatalog:e}=await import(`./setup-model-catalog-DHrO2Kfp.js`);return{setupModelCatalog:e}},__vite__mapDeps([69,3,7,6,4,8,9,1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,0])).then(({setupModelCatalog:e})=>e({locationHref:window.location.href,storage:window.localStorage,envBaseUrl:null,isDev:!1})).catch(()=>{})}async function Cr(){if(Ln(window))return;an();let e=document.getElementById(`app`);if(!e)throw Error(`#app element not found`);let t=O(),r=qt({locationHref:window.location.href,storage:window.localStorage,envBaseUrl:null,isDev:!1,isExtension:t});if(xr(window.location.href)){let{mountWcUiPreview:t}=await n(async()=>{let{mountWcUiPreview:e}=await import(`./wc-shell-B6egqVH1.js`).then(e=>e.s);return{mountWcUiPreview:e}},__vite__mapDeps([43,6,3,4,40,44,11,38,17,7,8,9,1,10,12,13,14,15,16,18,19,20,21,22,23,45,46,47,48,49,25,50,51,52]));t(e);return}if(!t&&await sn(document))return;Jt(),Yt(),Pn(),r!==`connect`&&Ge({isExtensionRealm:t}).catch(()=>{});let i=pt(window.location.search),a=r===`cherry`?null:Tn(window.location.search),o=!!a&&D();if(await Rn(i?{apiBaseUrl:i.apiBaseUrl,token:i.token}:null,o&&a?{extensionId:a.extensionId}:null)===`reload-pending`)return;if(!t&&(r===`follower`||r===`cherry`)){let{bootFollowerFloat:t}=await n(async()=>{let{bootFollowerFloat:e}=await import(`./wc-follower-Co4brJFi.js`);return{bootFollowerFloat:e}},__vite__mapDeps([70,3,4,1,63,39,6,40,11,41,42,43,44,38,17,7,8,9,10,12,13,14,15,16,18,19,20,21,22,23,45,46,47,48,49,25,50,51,52,53,54,55,56,57,58,59,60,61,62,64,31,65,71,72,73,34,35,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91]));return t(e,$,r)}await Ke(),Oe(),Sr(),i?.apiBaseUrl&&!o&&(Ue(i.apiBaseUrl),Ie(i.token),await ze());let{bootstrapOAuthReplicas:s}=await n(async()=>{let{bootstrapOAuthReplicas:e}=await import(`./oauth-bootstrap-DF2A9FNH.js`);return{bootstrapOAuthReplicas:e}},__vite__mapDeps([92,3,4,17,7,6,8,9,1,10,11,12,13,14,15,16,18,19,20,21,22,23,33]));if(await Promise.race([s().catch(e=>{$.error(`OAuth bootstrap failed`,e)}),new Promise(e=>setTimeout(e,1e4))]),r===`connect`){globalThis.__slicc_connect_mode=!0;let{loadLegacyStyles:t}=await n(async()=>{let{loadLegacyStyles:e}=await import(`./legacy-styles-CGcVbQni.js`);return{loadLegacyStyles:e}},__vite__mapDeps([93,4]));await t();let{mountConnectSurface:r}=await n(async()=>{let{mountConnectSurface:e}=await import(`./connect-surface-Ba3Ke5aM.js`);return{mountConnectSurface:e}},__vite__mapDeps([94,17,3,7,6,4,8,9,1,10,11,12,13,14,15,16,18,19,20,21,22,23]));await r(e);return}if(t){let{bootExtensionFloat:t}=await n(async()=>{let{bootExtensionFloat:e}=await import(`./wc-extension-BMQL0I9I.js`);return{bootExtensionFloat:e}},__vite__mapDeps([95,4,71,6,3,7,8,9,1,10,11,12,13,14,15,16,40,41,42,43,44,38,17,18,19,20,21,22,23,45,46,47,48,49,25,50,51,52,53,54,55,56,57,58,59,60,62,63,64,72,73,34,35,74,75,76,77,78,79,80,81,82,83,84,85,86,87,96]));return t(e,$,r===`extension-detached`)}o&&a&&bt(a.extensionId);let{bootLeaderFloat:c}=await n(async()=>{let{bootLeaderFloat:e}=await import(`./wc-live-oqKW7QrK.js`).then(e=>e.n);return{bootLeaderFloat:e}},__vite__mapDeps([71,6,3,7,4,8,9,1,10,11,12,13,14,15,16,40,41,42,43,44,38,17,18,19,20,21,22,23,45,46,47,48,49,25,50,51,52,53,54,55,56,57,58,59,60,62,63,64,72,73,34,35,74,75,76,77,78,79,80,81,82,83,84,85,86,87]));return c(e,$,r)}function wr(e,t){let n=document.createElement(`div`);n.style.cssText=`padding:2rem;text-align:center;font-family:system-ui;`;let r=document.createElement(`h1`);r.textContent=`Failed to start`;let i=document.createElement(`p`);i.textContent=t instanceof Error?t.message:String(t);let a=document.createElement(`button`);a.type=`button`,a.textContent=`Reload`,a.addEventListener(`click`,()=>location.reload()),n.append(r,i,a),e.replaceChildren(n)}async function Tr(e,t){let r;try{({renderBootRecoveryScreen:r}=await n(()=>import(`./recovery-screen-DWu0J0eq.js`),__vite__mapDeps([97,12,20,3])))}catch{wr(e,t);return}if(r(e,t),t instanceof Error&&t.message.includes(`did not signal ready`))try{let{triageModuleWorkerHealth:i}=await n(async()=>{let{triageModuleWorkerHealth:e}=await import(`./worker-triage-BvsMZrdR.js`);return{triageModuleWorkerHealth:e}},[]),a=await i();a===`browser-wedged`&&r(e,t,{verdict:a})}catch{}}Cr().catch(e=>{$.error(`Fatal error`,e),Xe();let t=document.getElementById(`app`);t&&Tr(t,e)});export{j as C,A as D,wt as E,ot as O,M as S,Tt as T,Pt as _,xn as a,Ft as b,pn as c,on as d,At as f,Nt as g,Mt as h,An as i,rt as k,tn as l,Lt as m,br as n,dn as o,jt as p,Hn as r,fn as s,Gn as t,R as u,zt as v,kt as w,P as x,F as y};
|