sliccy 6.35.1 → 6.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/dist/ui/assets/{account-store-fsZiMtXd.js → account-store-CBeFYmaM.js} +1 -1
  2. package/dist/ui/assets/{account-store-DWX-EZHx.js → account-store-CWS560Wh.js} +1 -1
  3. package/dist/ui/assets/{adobe-LRe2nlQ-.js → adobe-BFIqyp-l.js} +1 -1
  4. package/dist/ui/assets/{adobe-CMYfdTV_.js → adobe-aXw3aAhW.js} +1 -1
  5. package/dist/ui/assets/{apply-layout-LlDO9Nk8.js → apply-layout-CLPMc1fn.js} +1 -1
  6. package/dist/ui/assets/{apps-XUz4UHJy.js → apps-BjkqQmnk.js} +1 -1
  7. package/dist/ui/assets/{azure-openai-vSDrXKCz.js → azure-openai-CvATJRrd.js} +1 -1
  8. package/dist/ui/assets/{azure-openai-B7qn6krc.js → azure-openai-DOiU6jTr.js} +1 -1
  9. package/dist/ui/assets/{cerebras-u8ZWzxTB.js → cerebras-6Zhdq4Su.js} +1 -1
  10. package/dist/ui/assets/{cerebras-DgXSeCJt.js → cerebras-B6NS5hN9.js} +1 -1
  11. package/dist/ui/assets/{connect-surface-CKjmFE_I.js → connect-surface-BK1kU6a7.js} +1 -1
  12. package/dist/ui/assets/{fs-CqrpSNTX.js → fs-8ZcM_j1q.js} +1 -1
  13. package/dist/ui/assets/{fs-VCwbgYvh.js → fs-ElH0GO6T.js} +2 -2
  14. package/dist/ui/assets/{github-B5DdlAQU.js → github-DxHEiUAP.js} +2 -2
  15. package/dist/ui/assets/{github-copilot-CBNhncDi.js → github-copilot-C_mqs1aF.js} +1 -1
  16. package/dist/ui/assets/{github-copilot-Bk_IBZCm.js → github-copilot-Ct0I1kyb.js} +1 -1
  17. package/dist/ui/assets/{github-CBhxlF7p.js → github-iZTZ8Mg8.js} +1 -1
  18. package/dist/ui/assets/{github-install-B3ZM7IrG.js → github-install-BsTY26PR.js} +1 -1
  19. package/dist/ui/assets/{github-zip-DaPqIt4B.js → github-zip-CjAQYwNO.js} +1 -1
  20. package/dist/ui/assets/{kernel-worker-DQl7D0WI.js → kernel-worker-R1J9GzsB.js} +33 -24
  21. package/dist/ui/assets/{local-llm-B1ibS4CJ.js → local-llm-B-u8m8ac.js} +1 -1
  22. package/dist/ui/assets/{local-llm-BlWvSasC.js → local-llm-BD_t3DO-.js} +1 -1
  23. package/dist/ui/assets/{main-C1z-umpk.js → main-BZzuW4lk.js} +3 -3
  24. package/dist/ui/assets/{mount-CxmnNZsY.js → mount-BV51i0GO.js} +2 -2
  25. package/dist/ui/assets/{mount-8csnltQ9.js → mount-DimEqdNs.js} +1 -1
  26. package/dist/ui/assets/{mount-recovery-BK3xkz-a.js → mount-recovery-2zfX6UM0.js} +1 -1
  27. package/dist/ui/assets/new-session-CKIDZ0GM.js +2 -0
  28. package/dist/ui/assets/{oauth-bootstrap-BioadW_t.js → oauth-bootstrap-Dm06cIth.js} +2 -2
  29. package/dist/ui/assets/{openai-codex-BZ1L8fpb.js → openai-codex-H9Hl_PE5.js} +1 -1
  30. package/dist/ui/assets/{openai-codex-DKlx0_yo.js → openai-codex-cbVAk3AD.js} +1 -1
  31. package/dist/ui/assets/{openrouter-IauFwJCr.js → openrouter-DX9KpSvc.js} +1 -1
  32. package/dist/ui/assets/{openrouter-CV3xKx85.js → openrouter-QMm6r1v0.js} +1 -1
  33. package/dist/ui/assets/{openrouter-oauth-BiKNscbx.js → openrouter-oauth-6xKgd4sP.js} +1 -1
  34. package/dist/ui/assets/{openrouter-oauth-C8WqNElY.js → openrouter-oauth-C9T2MI19.js} +1 -1
  35. package/dist/ui/assets/{panel-rpc-handlers-B7-5MvpQ.js → panel-rpc-handlers-YSHejYCE.js} +2 -2
  36. package/dist/ui/assets/{panelize-shell-Bo3jE0rP.js → panelize-shell-DeP-Mot2.js} +1 -1
  37. package/dist/ui/assets/{provider-hQNT4vZC.js → provider-BgsIIERd.js} +1 -1
  38. package/dist/ui/assets/{provider-Bss6JSnT.js → provider-DIF7Kosx.js} +2 -2
  39. package/dist/ui/assets/{provider-settings-LcSPuWPj.js → provider-settings-DMVkJ4Yc.js} +1 -1
  40. package/dist/ui/assets/{provider-settings-DRzBx_K-.js → provider-settings-DnPrTgxX.js} +1 -1
  41. package/dist/ui/assets/{provider-store-access-Ci97F5qf.js → provider-store-access-CNKHAb1n.js} +2 -2
  42. package/dist/ui/assets/provider-store-access-Eml4cT65.js +1 -0
  43. package/dist/ui/assets/{providers-CC3HjAlh.js → providers-Db8ySw1C.js} +1 -1
  44. package/dist/ui/assets/{providers-CvRdyDpX.js → providers-I0N2Pli8.js} +2 -2
  45. package/dist/ui/assets/{quick-llm-BsKuuErB.js → quick-llm-BXyljJCN.js} +1 -1
  46. package/dist/ui/assets/{redirect-uri-D02-fMO2.js → redirect-uri-DzBKxywN.js} +1 -1
  47. package/dist/ui/assets/{session-freezer-AVMhPlXu.js → session-freezer-B-OCeiiv.js} +13 -4
  48. package/dist/ui/assets/{setup-feature-flags-remote-B1tLs0mW.js → setup-feature-flags-remote-DvVkbj7J.js} +1 -1
  49. package/dist/ui/assets/{setup-standalone-prelude-DYYcXOyR.js → setup-standalone-prelude-MWNzooiD.js} +1 -1
  50. package/dist/ui/assets/{setup-sudo-CCOhbwTK.js → setup-sudo-Cf6DyfC1.js} +2 -2
  51. package/dist/ui/assets/{skills-C9XJE6Cb.js → skills-1nGKkAbi.js} +1 -1
  52. package/dist/ui/assets/{src-scK1LFrC.js → src-WmaDIMoL.js} +103 -103
  53. package/dist/ui/assets/{store-RBIStgRQ.js → store-DbbrOQ7C.js} +1 -1
  54. package/dist/ui/assets/{store-DLosooX2.js → store-SOclaML-.js} +1 -1
  55. package/dist/ui/assets/{sudo-CX6L-imR.js → sudo-BbrhTMIr.js} +1 -1
  56. package/dist/ui/assets/{upgrade-detection-CUghvK-5.js → upgrade-detection-mwA5IuX3.js} +1 -1
  57. package/dist/ui/assets/{wc-attach-CQ73n67L.js → wc-attach-BRFtXk_B.js} +2 -2
  58. package/dist/ui/assets/{wc-extension-CPus6AG_.js → wc-extension-Aw0BjzuI.js} +2 -2
  59. package/dist/ui/assets/{wc-follower-CJ0D6nJ6.js → wc-follower-m6MfK05b.js} +3 -3
  60. package/dist/ui/assets/{wc-live-CPgy6Rt3.js → wc-live-BySJtS73.js} +3 -3
  61. package/dist/ui/assets/{wc-nav-CTdoUJsb.js → wc-nav-CxHKuThY.js} +2 -2
  62. package/dist/ui/assets/{wc-onboarding-CgiUSi7F.js → wc-onboarding-CJFxXLj6.js} +2 -2
  63. package/dist/ui/assets/{wc-placeholder-BMh4Tisi.js → wc-placeholder-BBmJbT9F.js} +2 -2
  64. package/dist/ui/assets/{wc-settings-F06K4Jl2.js → wc-settings-VG6EVany.js} +2 -2
  65. package/dist/ui/assets/{wc-shell-CdxYnLU8.js → wc-shell-BKzIjFoa.js} +3 -3
  66. package/dist/ui/assets/{wc-sprinkles-TY8z4iwr.js → wc-sprinkles-Ck5w92e4.js} +2 -2
  67. package/dist/ui/assets/{wc-tray-ClWTrIkP.js → wc-tray-qe1eJlXc.js} +2 -2
  68. package/dist/ui/assets/{xai-grok-DX8mvf4y.js → xai-grok-C40UOWbs.js} +1 -1
  69. package/dist/ui/assets/{xai-grok-B-YVuGaO.js → xai-grok-CCdriFaS.js} +1 -1
  70. package/dist/ui/index.html +6 -6
  71. package/dist/ui/packages/webapp/index.html +6 -6
  72. package/package.json +1 -1
  73. package/dist/ui/assets/new-session-C1dKxso_.js +0 -2
  74. package/dist/ui/assets/provider-store-access-BZp12OD3.js +0 -1
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/quick-llm-BsKuuErB.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/account-store-fsZiMtXd.js","assets/preload-helper-Czpn1I53.js","assets/compat-Bn8HnC3L.js","assets/models-DgdVqaw5.js","assets/diagnostics-DN_idNHx.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-C8HitxAG.js","assets/context-compaction-DDaM9TWa.js","assets/logger-DDBAeTLF.js","assets/src-CAWTvdAa.js","assets/proxied-fetch-ULPrH97b.js","assets/base64-DpPqYZJF.js","assets/runtime-env-DH4NDw4t.js","assets/fetch-body-D2PwksUW.js","assets/secret-topology-DCQNOMWj.js","assets/secrets-bridge-client-BZMh3a0J.js","assets/port-bridge-client-Bg6_jjLD.js","assets/tool-ui-DfXu6quJ.js","assets/tool-result-images-D8kQ0hH0.js","assets/providers-CvRdyDpX.js","assets/panel-rpc-B3MSVImO.js","assets/bedrock-camp-BDCjQMZx.js","assets/transform-messages-DgR3h-Ck.js","assets/llm-session-id-bZQs6gBN.js","assets/icons-DtQGhvkp.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/quick-llm-BXyljJCN.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/account-store-CBeFYmaM.js","assets/preload-helper-Czpn1I53.js","assets/compat-Bn8HnC3L.js","assets/models-DgdVqaw5.js","assets/diagnostics-DN_idNHx.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-C8HitxAG.js","assets/context-compaction-DDaM9TWa.js","assets/logger-DDBAeTLF.js","assets/src-CAWTvdAa.js","assets/proxied-fetch-ULPrH97b.js","assets/base64-DpPqYZJF.js","assets/runtime-env-DH4NDw4t.js","assets/fetch-body-D2PwksUW.js","assets/secret-topology-DCQNOMWj.js","assets/secrets-bridge-client-BZMh3a0J.js","assets/port-bridge-client-Bg6_jjLD.js","assets/tool-ui-DfXu6quJ.js","assets/tool-result-images-D8kQ0hH0.js","assets/providers-I0N2Pli8.js","assets/panel-rpc-B3MSVImO.js","assets/bedrock-camp-BDCjQMZx.js","assets/transform-messages-DgR3h-Ck.js","assets/llm-session-id-bZQs6gBN.js","assets/icons-DtQGhvkp.js"])))=>i.map(i=>d[i]);
2
2
  import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./preload-helper-Czpn1I53.js";import{t as n}from"./compat-Bn8HnC3L.js";import{t as r}from"./attachments-CByeG2Ru.js";import{n as i,r as a,t as o}from"./context-compaction-DDaM9TWa.js";import{t as s}from"./logger-DDBAeTLF.js";import{t as c}from"./types-idfTVsM8.js";import{t as l}from"./icons-DtQGhvkp.js";import{a as u}from"./dictation-priming-CNllGgNq.js";var d=`---
3
3
  writablePaths:
4
4
  - /workspace/CLAUDE.md
@@ -13,22 +13,31 @@ allowedCommands:
13
13
  - cut
14
14
  - date
15
15
  - diff
16
+ - du
16
17
  - echo
18
+ - file
17
19
  - find
18
20
  - grep
19
21
  - head
22
+ - jq # structured reads of JSON stores such as /shared/loose-ends.json
20
23
  - ls
21
24
  - mkdir
25
+ - mount # listing mount state; mutations blocked by the write grant, not this list
22
26
  - mv
27
+ - nl
28
+ - od # read-only byte inspection of corrupted stores
23
29
  - printf
30
+ - readlink
24
31
  - sed
25
32
  - sort
33
+ - stat
26
34
  - tail
27
35
  - touch
28
36
  - tr
29
37
  - uniq
30
38
  - upskill
31
39
  - wc
40
+ - xxd
32
41
  timeoutSeconds: 120
33
42
  thinkingLevel: medium
34
43
  ---
@@ -135,13 +144,13 @@ ${r}
135
144
  </auto-extracted>`,a={role:`user`,content:[{type:`text`,text:ae}],timestamp:Date.now()},o=await n(e.model,{systemPrompt:i,messages:[a]},{apiKey:e.apiKey,maxTokens:ie,headers:e.headers,signal:e.signal});if(o.stopReason===`error`)throw Error(`Restructure call failed: ${o.errorMessage||`Unknown error`}`);let s=o.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
136
145
  `).trim();if(!s)throw Error(`Restructure call returned empty content`);return`${t}${t.length===0||t.endsWith(`
137
146
  `)?``:`
138
- `}${s}\n`}async function _(e){if(!e.model||!e.apiKey)return{restructured:!1,reason:`no-llm`};let t=``;try{let n=await e.vfs.readFile(p,{encoding:`utf-8`});t=typeof n==`string`?n:new TextDecoder().decode(n)}catch{return{restructured:!1,reason:`missing-file`}}let n=await g(e.vfs),r=h(n),i=r*ne;if(t.length<=i)return{restructured:!1,reason:`under-threshold`};f.info(`Cone memory over threshold — restructuring`,{size:t.length,budget:r,threshold:i,sessionCount:n});try{let n=await se({currentContent:t,budget:r,model:e.model,apiKey:e.apiKey,headers:e.headers,signal:e.signal});return await e.vfs.writeFile(p,n),f.info(`Cone memory restructured`,{before:t.length,after:n.length}),{restructured:!0}}catch(e){return f.warn(`Cone memory restructure failed — leaving appended content in place`,{error:e instanceof Error?e.message:String(e)}),{restructured:!1,reason:`error`}}}var v=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`];function ce(e){return typeof e==`string`&&v.includes(e)}var y=s(`agentic-memory`),le=`/shared/MEMORY.md`,ue=[p],de=[`/sessions/`,`/shared/`,`/workspace/`],fe=`/workspace`,pe=[`awk`,`cat`,`cp`,`cut`,`date`,`diff`,`echo`,`find`,`grep`,`head`,`ls`,`mkdir`,`mv`,`printf`,`sed`,`sort`,`tail`,`touch`,`tr`,`uniq`,`upskill`,`wc`],me=new Set([`writablePaths`,`visiblePaths`,`allowedCommands`]),he=new Set([`model`,`timeoutSeconds`,`thinkingLevel`]),ge=`medium`;async function _e(e){try{if(e.signal?.aborted)return{ok:!1,reason:`aborted`,legacyFallbackSafe:!1};let t=await ve(e.vfs),n=Ee(t,De(t.promptTemplate,{MEMORY_PATH:p,SESSION_ARCHIVE_PATH:e.sessionArchivePath,SESSION_COUNT:String(e.sessionCount),BUDGET_CHARS:String(h(e.sessionCount)),TODAY:e.today??new Date().toISOString().slice(0,10)})),r=await w(Promise.resolve().then(()=>e.spawn(n)),t.timeoutSeconds*1e3,e.signal);return r.type===`timeout`?{ok:!1,reason:`timeout`,legacyFallbackSafe:!1}:r.type===`aborted`?{ok:!1,reason:`aborted`,legacyFallbackSafe:!1}:r.type===`error`?{ok:!1,reason:T(r.error),legacyFallbackSafe:!0}:r.result.exitCode===0?{ok:!0,report:r.result.finalText}:{ok:!1,reason:r.result.finalText||`exit-${r.result.exitCode}`,legacyFallbackSafe:!0}}catch(e){return y.warn(`Agentic memory pass failed`,{error:T(e)}),{ok:!1,reason:T(e),legacyFallbackSafe:!1}}}async function ve(e){try{let t=await e.readFile(le,{encoding:`utf-8`});return b(typeof t==`string`?t:new TextDecoder().decode(t))}catch(e){return y.warn(`Could not load valid MEMORY.md; using built-in default`,{error:T(e)}),b(d)}}function b(e){let t=e.replace(/^\uFEFF/,``).replace(/\r\n?/g,`
147
+ `}${s}\n`}async function _(e){if(!e.model||!e.apiKey)return{restructured:!1,reason:`no-llm`};let t=``;try{let n=await e.vfs.readFile(p,{encoding:`utf-8`});t=typeof n==`string`?n:new TextDecoder().decode(n)}catch{return{restructured:!1,reason:`missing-file`}}let n=await g(e.vfs),r=h(n),i=r*ne;if(t.length<=i)return{restructured:!1,reason:`under-threshold`};f.info(`Cone memory over threshold — restructuring`,{size:t.length,budget:r,threshold:i,sessionCount:n});try{let n=await se({currentContent:t,budget:r,model:e.model,apiKey:e.apiKey,headers:e.headers,signal:e.signal});return await e.vfs.writeFile(p,n),f.info(`Cone memory restructured`,{before:t.length,after:n.length}),{restructured:!0}}catch(e){return f.warn(`Cone memory restructure failed — leaving appended content in place`,{error:e instanceof Error?e.message:String(e)}),{restructured:!1,reason:`error`}}}var v=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`];function ce(e){return typeof e==`string`&&v.includes(e)}var y=s(`agentic-memory`),le=`/shared/MEMORY.md`,ue=[p],de=[`/sessions/`,`/shared/`,`/workspace/`],fe=`/workspace`,pe=`awk.cat.cp.cut.date.diff.du.echo.file.find.grep.head.jq.ls.mkdir.mount.mv.nl.od.printf.readlink.sed.sort.stat.tail.touch.tr.uniq.upskill.wc.xxd`.split(`.`),me=new Set([`writablePaths`,`visiblePaths`,`allowedCommands`]),he=new Set([`model`,`timeoutSeconds`,`thinkingLevel`]),ge=`medium`;async function _e(e){try{if(e.signal?.aborted)return{ok:!1,reason:`aborted`,legacyFallbackSafe:!1};let t=await ve(e.vfs),n=Ee(t,De(t.promptTemplate,{MEMORY_PATH:p,SESSION_ARCHIVE_PATH:e.sessionArchivePath,SESSION_COUNT:String(e.sessionCount),BUDGET_CHARS:String(h(e.sessionCount)),TODAY:e.today??new Date().toISOString().slice(0,10)})),r=await w(Promise.resolve().then(()=>e.spawn(n)),t.timeoutSeconds*1e3,e.signal);return r.type===`timeout`?{ok:!1,reason:`timeout`,legacyFallbackSafe:!1}:r.type===`aborted`?{ok:!1,reason:`aborted`,legacyFallbackSafe:!1}:r.type===`error`?{ok:!1,reason:T(r.error),legacyFallbackSafe:!0}:r.result.exitCode===0?{ok:!0,report:r.result.finalText}:{ok:!1,reason:r.result.finalText||`exit-${r.result.exitCode}`,legacyFallbackSafe:!0}}catch(e){return y.warn(`Agentic memory pass failed`,{error:T(e)}),{ok:!1,reason:T(e),legacyFallbackSafe:!1}}}async function ve(e){try{let t=await e.readFile(le,{encoding:`utf-8`});return b(typeof t==`string`?t:new TextDecoder().decode(t))}catch(e){return y.warn(`Could not load valid MEMORY.md; using built-in default`,{error:T(e)}),b(d)}}function b(e){let t=e.replace(/^\uFEFF/,``).replace(/\r\n?/g,`
139
148
  `).match(/^---\s*\n([\s\S]*?)\n---\s*\n([\s\S]*)$/);if(!t?.[2].trim())throw Error(`MEMORY.md requires frontmatter and a prompt`);let n=be(t[1]),r=S(n,`writablePaths`,ue);if(r.length===0)throw Error(`writablePaths must not be empty`);C(r,`writablePaths`);let i=S(n,`visiblePaths`,de);C(i,`visiblePaths`);let a=Te(n.timeoutSeconds),o=we(n.model,`model`);return{writablePaths:r,visiblePaths:i,allowedCommands:[...new Set([...pe,...S(n,`allowedCommands`,[])])],...o?{model:o}:{},thinkingLevel:ye(n.thinkingLevel),timeoutSeconds:a,promptTemplate:t[2].trim()}}function ye(e){if(e===void 0)return ge;if(typeof e!=`string`||!ce(e))throw Error(`thinkingLevel must be one of ${v.join(`, `)}`);return e}function be(e){let t={},n=e.split(`
140
149
  `);for(let e=0;e<n.length;e+=1){let r=n[e];if(!r.trim()||r.trimStart().startsWith(`#`))continue;let i=r.match(/^([A-Za-z][A-Za-z0-9]*):\s*(.*)$/);if(!i)throw Error(`Invalid frontmatter line: ${r}`);let[,a,o]=i;if(me.has(a)){let r=xe(n,e,o);t[a]=r.value,e=r.lastIndex}else if(he.has(a)&&o.trim())t[a]=x(o);else throw Error(`Unsupported or empty frontmatter field: ${a}`)}return t}function xe(e,t,n){if(n.trim()){let e=n.trim();if(!e.startsWith(`[`)||!e.endsWith(`]`))throw Error(`Expected an array`);let r=e.slice(1,-1).trim();return{value:r?Se(r):[],lastIndex:t}}let r=[],i=t;for(let n=t+1;n<e.length;n+=1){let t=e[n].match(/^\s+-\s+(.+)$/);if(!t)break;r.push(x(Ce(t[1]))),i=n}return{value:r,lastIndex:i}}function Se(e){let t=[],n=0,r;for(let i=0;i<e.length;i+=1){let a=e[i];a===`"`||a===`'`?r=r===a?void 0:r??a:a===`,`&&!r&&(t.push(x(e.slice(n,i))),n=i+1)}if(r)throw Error(`Unclosed quoted value`);return t.push(x(e.slice(n))),t}function Ce(e){let t;for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`"`||r===`'`)t=t===r?void 0:t??r;else if(r===`#`&&!t&&(n===0||/\s/.test(e[n-1])))return e.slice(0,n).trimEnd()}return e}function x(e){let t=e.trim();if(!t)throw Error(`Empty frontmatter value`);let n=t[0];if((n===`"`||n===`'`)&&t.at(-1)===n)return t.slice(1,-1);if(n===`"`||n===`'`)throw Error(`Unclosed quoted value`);return t}function S(e,t,n){let r=e[t];if(r===void 0)return[...n];if(!Array.isArray(r)||r.some(e=>!e))throw Error(`${t} is invalid`);return[...r]}function we(e,t){if(e!==void 0){if(typeof e!=`string`||!e)throw Error(`${t} is invalid`);return e}}function Te(e){if(e===void 0)return 120;if(typeof e!=`string`)throw Error(`timeoutSeconds is invalid`);let t=Number(e);if(!Number.isFinite(t)||t<=0)throw Error(`timeoutSeconds must be positive`);return Math.min(t,600)}function C(e,t){if(e.some(e=>!e.startsWith(`/`)||e.includes(`\0`)||t===`writablePaths`&&e===`/`))throw Error(`${t} must contain absolute VFS paths`)}function Ee(e,t){let n=e.model===`parent`||e.model===`cone`;return{cwd:fe,writablePaths:e.writablePaths,visiblePaths:e.visiblePaths,allowedCommands:e.allowedCommands,prompt:t,thinkingLevel:e.thinkingLevel,notifyOnComplete:!0,...!n&&e.model?{modelId:e.model}:{}}}function De(e,t){let n=e;for(let[e,r]of Object.entries(t))n=n.replaceAll(`{{${e}}}`,r);return n}function w(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 T(e){return e instanceof Error?e.message:String(e)}var E=`/sessions`,D=`/sessions/index.json`;async function O(e){try{let t=await e.readFile(D,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r:[]}catch{return[]}}function k(e){return`${E}/${e.filename}`}function A(e){let t=e,n=`Untitled`,r={},i=t.match(/^---\n([\s\S]*?)\n---\n+/);if(i){t=t.slice(i[0].length);let e=j(i[1],`cost`),a=j(i[1],`models`);e&&(r.cost=e),a&&(r.models=a);let o=i[1].match(/^title:\s*(.+?)\s*$/m);if(o){let e=o[1].trim();if(e.startsWith(`"`))try{let t=JSON.parse(e);typeof t==`string`&&(n=t)}catch{n=e.replace(/^"|"$/g,``)}else n=e}}let a=t.match(/<!-- slicc:session-data\n([\s\S]*?)\n-->\n*/);if(a){try{let e=a[1].replace(/-- >/g,`-->`),t=JSON.parse(e);if(Array.isArray(t))return{title:n,messages:t,...r}}catch{}t=t.replace(/<!-- slicc:session-data\n[\s\S]*?\n-->\n*/,``)}return t=t.replace(/^#\s+[^\n]*\n+/,``),{title:n,messages:Oe(t),...r}}function j(e,t){let n=RegExp(`^${t}:\\s*(.+?)\\s*$`,`m`).exec(e)?.[1];if(n)try{return JSON.parse(n)}catch{return}}function Oe(e){let t=[],n=/^## (User|Assistant)\s*\n/gm,r=[],i;for(;(i=n.exec(e))!==null;)r.push({role:i[1]===`User`?`user`:`assistant`,start:i.index,bodyStart:i.index+i[0].length});for(let n=0;n<r.length;n++){let i=n+1<r.length?r[n+1].start:e.length,a=e.slice(r[n].bodyStart,i).trim();t.push({id:`frozen-${n}`,role:r[n].role,content:a,timestamp:0})}return t}function M(e){let t=``;for(let n of e){let e=n.role===`user`?`User`:`Assistant`,i=n.role===`user`?u(n.content):n.content;if(t+=`## ${e}\n${i}\n\n`,n.attachments?.length&&(t+=`Attachments:\n${n.attachments.map(e=>`- ${r(e)}`).join(`
141
- `)}\n\n`),n.toolCalls)for(let e of n.toolCalls)t+=`### Tool: ${e.name}\nInput: ${JSON.stringify(e.input,null,2)}\nResult: ${e.result??``}\n\n`}return t}var ke=e({PENDING_SESSION_ATTEMPT_LIMIT:()=>3,SESSIONS_INDEX_PATH:()=>D,curateFrozenSessionMemories:()=>R,enrichPendingSession:()=>Z,freezeConeSession:()=>L,listPendingEnrichments:()=>J,markSnapshotUnavailable:()=>$,processPendingSessions:()=>Y,readSessionsIndex:()=>O}),N=s(`session-freezer`),Ae=4,P=2048,F=40,I=`${E}/attachments`;async function L(e){let t=await Ve(e.sessionStore);if(!t||t.messages.length<Ae)return N.info(`Skipping freeze: session below threshold or missing`,{messageCount:t?.messages.length??0}),null;let n=U(t.messages),r=e.mode??`full`,i=r===`full`&&!!(e.apiKey&&e.model);(!i||!e.agenticMemorySpawn)&&await B(e,n,i);let a=await Me(e,n,i)||Ke(t.messages);return await Ne(e,t,a,r,i?await je(e,a):void 0,i&&!!e.agenticMemorySpawn)}async function R(e,t){let n=U(t.archive.messages),r;try{r=await _e({spawn:e.agenticMemorySpawn,vfs:e.vfs,sessionArchivePath:k(t),sessionCount:await g(e.vfs)})}catch(e){r={ok:!1,reason:e instanceof Error?e.message:String(e),legacyFallbackSafe:!1}}if(r.ok){let n=await rt(e.vfs,t.filename);return n?(delete t.memoryPending,N.info(`Agentic memory pass completed`,{filename:t.filename}),n):(N.info(`Agentic memory pass completed; index entry already gone`,{filename:t.filename}),null)}return r.legacyFallbackSafe?(N.warn(`Agentic memory pass failed after finishing — falling back to legacy extraction`,{filename:t.filename,reason:r.reason}),await B(e,n,!0),null):(N.warn(`Agentic memory pass unfinished — entry stays pending for boot catch-up`,{filename:t.filename,reason:r.reason,attemptLimit:3}),null)}async function je(e,n){try{return z(await(e.pickIcon??(await t(async()=>{let{pickLucideIcon:e}=await import(`./quick-llm-BsKuuErB.js`).then(e=>e.n);return{pickLucideIcon:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]))).pickLucideIcon)({subject:`"${n}" — an archived chat session`})??void 0)}catch(e){N.warn(`Icon pick failed (freeze still proceeds)`,{error:e instanceof Error?e.message:String(e)});return}}function z(e){if(e)return l(e)?e:void 0}async function B(e,t,n){if(!n){N.info(`LLM unavailable — skipping memory extraction; freezing anyway`);return}let r=``;try{r=await a({messages:t,instruction:o,model:e.model,apiKey:e.apiKey,maxTokens:P,headers:e.headers})}catch(e){N.warn(`Memory extraction call failed (freeze still proceeds)`,{error:e instanceof Error?e.message:String(e)});return}if(!r.trim()||r.trim()===`NONE`){N.info(`Memory extraction returned no durable memories`);return}try{await q(e.vfs,r.trim(),`new-session`,{model:e.model,apiKey:e.apiKey,headers:e.headers}),N.info(`Memory extracted and appended on new-session`)}catch(e){N.warn(`Memory append failed`,{error:e instanceof Error?e.message:String(e)})}}async function Me(e,t,n){if(!n)return``;try{return W(await a({messages:t,instruction:i,model:e.model,apiKey:e.apiKey,maxTokens:F,headers:e.headers}))}catch(e){return N.warn(`Title generation call failed (using heuristic)`,{error:e instanceof Error?e.message:String(e)}),``}}async function Ne(e,t,n,r,i,a=!1){let o=new Date().toISOString(),s=crypto.randomUUID(),c=r===`quick`?`pending-${qe()}.md`:`${o.replace(/[:.]/g,`-`)}-${G(n)}.md`,l=Pe(t.messages),u={filename:c,sessionId:s,title:n,frozenAt:o,messageCount:t.messages.length,...l??{},...i?{icon:i}:{},...r===`quick`?{pendingEnrichment:!0}:{},...a?{memoryPending:!0}:{}};try{await K(e.vfs,E);let r=await Ie(e.vfs,t.messages,c.replace(/\.md$/,``)),i={id:t.id,title:n,frozenAt:o,createdAt:t.createdAt,updatedAt:t.updatedAt,messageCount:t.messages.length,messages:r,...l??{}},a=Ge(i);return await e.vfs.writeFile(`${E}/${c}`,a),await Ye(e.vfs,u),await e.vfs.flush(),N.info(`Cone session frozen`,{filename:c,title:n,messageCount:t.messages.length}),{...u,archive:i}}catch(e){return N.warn(`Failed to write frozen session to VFS`,{error:e instanceof Error?e.message:String(e)}),null}}function Pe(e){let t={total:0,input:0,output:0,cacheRead:0,cacheWrite:0},n=new Map,r=!1;for(let i of e){if(i.role!==`assistant`)continue;let{model:e,usage:a}=i;if(!e||!a||!Fe(a))return null;let o=a.cost;r=!0,t.total+=o.total,t.input+=o.input,t.output+=o.output,t.cacheRead+=o.cacheRead,t.cacheWrite+=o.cacheWrite;let s=n.get(e)??{model:e,cost:0,turns:0,tokens:0};s.cost+=o.total,s.turns+=1,s.tokens+=a.input+a.output+a.cacheRead+a.cacheWrite,n.set(e,s)}return r?{cost:t,models:[...n.values()].sort((e,t)=>t.cost-e.cost)}:null}function V(e){return typeof e==`number`&&Number.isFinite(e)}function Fe(e){let{cost:t}=e;return[e.input,e.output,e.cacheRead,e.cacheWrite].every(V)&&[t.input,t.output,t.cacheRead,t.cacheWrite,t.total].every(V)}async function Ie(e,t,n){let r={vfs:e,archiveDir:`${I}/${n}`,copiedPaths:new Map,fileIndex:0},i=[];for(let e of t){if(!e.attachments?.some(H)){i.push(e);continue}let t=[];for(let n of e.attachments)t.push(await Le(r,n));i.push({...e,attachments:t})}return i}async function Le(e,t){if(!H(t))return t;let n=e.copiedPaths.get(t.path);if(n)return{...t,path:n};let r=await Re(e.vfs,t.path);if(!r)return Be(t);let i=t.name.replace(/[^A-Za-z0-9._-]+/g,`_`)||`attachment`,a=`${e.archiveDir}/${e.fileIndex++}-${i}`;return await K(e.vfs,e.archiveDir),await e.vfs.writeFile(a,r),e.copiedPaths.set(t.path,a),{...t,path:a}}async function Re(e,t){try{if(!await ze(e,t))return null;let n=await e.readFile(t,{encoding:`binary`});if(!(n instanceof Uint8Array))throw Error(`Expected binary attachment content at ${t}`);return n}catch{return null}}function H(e){return typeof e.path==`string`&&e.path.startsWith(`/tmp/`)&&e.data===void 0&&e.text===void 0}async function ze(e,t){let n=t.split(`/`).slice(1);if(n.length<2||n[0]!==`tmp`||n.some(e=>!e||e===`.`||e===`..`))return!1;let r=`/`;for(let t=0;t<n.length;t+=1){let i=(await e.readDir(r)).find(e=>e.name===n[t]);if(!i)return!1;if(t===n.length-1)return i.type===`file`;if(i.type!==`directory`)return!1;r=r===`/`?`/${n[t]}`:`${r}/${n[t]}`}return!1}function Be(e){let{path:t,...n}=e;return{...n,error:e.error??`Archived attachment file is missing or unsafe to preserve.`}}async function Ve(e){try{return await e.load(`session-cone`)}catch(e){return N.warn(`Failed to load session-cone`,{error:e instanceof Error?e.message:String(e)}),null}}function U(e){return e.map(e=>({role:e.role,content:[{type:`text`,text:e.content}],timestamp:e.timestamp}))}var He=`<!-- slicc:session-data
150
+ `)}\n\n`),n.toolCalls)for(let e of n.toolCalls)t+=`### Tool: ${e.name}\nInput: ${JSON.stringify(e.input,null,2)}\nResult: ${e.result??``}\n\n`}return t}var ke=e({PENDING_SESSION_ATTEMPT_LIMIT:()=>3,SESSIONS_INDEX_PATH:()=>D,curateFrozenSessionMemories:()=>R,enrichPendingSession:()=>Z,freezeConeSession:()=>L,listPendingEnrichments:()=>J,markSnapshotUnavailable:()=>$,processPendingSessions:()=>Y,readSessionsIndex:()=>O}),N=s(`session-freezer`),Ae=4,P=2048,F=40,I=`${E}/attachments`;async function L(e){let t=await Ve(e.sessionStore);if(!t||t.messages.length<Ae)return N.info(`Skipping freeze: session below threshold or missing`,{messageCount:t?.messages.length??0}),null;let n=U(t.messages),r=e.mode??`full`,i=r===`full`&&!!(e.apiKey&&e.model);e.agenticMemorySpawn||await B(e,n,i);let a=await Me(e,n,i)||Ke(t.messages);return await Ne(e,t,a,r,i?await je(e,a):void 0,!!e.agenticMemorySpawn)}async function R(e,t){let n=U(t.archive.messages),r;try{r=await _e({spawn:e.agenticMemorySpawn,vfs:e.vfs,sessionArchivePath:k(t),sessionCount:await g(e.vfs)})}catch(e){r={ok:!1,reason:e instanceof Error?e.message:String(e),legacyFallbackSafe:!1}}if(r.ok){let n=await it(e.vfs,t.filename);return n?(delete t.memoryPending,N.info(`Agentic memory pass completed`,{filename:t.filename}),n):(N.info(`Agentic memory pass completed; index entry already gone`,{filename:t.filename}),null)}return r.legacyFallbackSafe?(N.warn(`Agentic memory pass failed after finishing — falling back to legacy extraction`,{filename:t.filename,reason:r.reason}),await B(e,n,!0),null):(N.warn(`Agentic memory pass unfinished — entry stays pending for boot catch-up`,{filename:t.filename,reason:r.reason,attemptLimit:3}),null)}async function je(e,n){try{return z(await(e.pickIcon??(await t(async()=>{let{pickLucideIcon:e}=await import(`./quick-llm-BXyljJCN.js`).then(e=>e.n);return{pickLucideIcon:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]))).pickLucideIcon)({subject:`"${n}" — an archived chat session`})??void 0)}catch(e){N.warn(`Icon pick failed (freeze still proceeds)`,{error:e instanceof Error?e.message:String(e)});return}}function z(e){if(e)return l(e)?e:void 0}async function B(e,t,n){if(!n){N.info(`LLM unavailable — skipping memory extraction; freezing anyway`);return}let r=``;try{r=await a({messages:t,instruction:o,model:e.model,apiKey:e.apiKey,maxTokens:P,headers:e.headers})}catch(e){N.warn(`Memory extraction call failed (freeze still proceeds)`,{error:e instanceof Error?e.message:String(e)});return}if(!r.trim()||r.trim()===`NONE`){N.info(`Memory extraction returned no durable memories`);return}try{await q(e.vfs,r.trim(),`new-session`,{model:e.model,apiKey:e.apiKey,headers:e.headers}),N.info(`Memory extracted and appended on new-session`)}catch(e){N.warn(`Memory append failed`,{error:e instanceof Error?e.message:String(e)})}}async function Me(e,t,n){if(!n)return``;try{return W(await a({messages:t,instruction:i,model:e.model,apiKey:e.apiKey,maxTokens:F,headers:e.headers}))}catch(e){return N.warn(`Title generation call failed (using heuristic)`,{error:e instanceof Error?e.message:String(e)}),``}}async function Ne(e,t,n,r,i,a=!1){let o=new Date().toISOString(),s=crypto.randomUUID(),c=r===`quick`?`pending-${qe()}.md`:`${o.replace(/[:.]/g,`-`)}-${G(n)}.md`,l=Pe(t.messages),u={filename:c,sessionId:s,title:n,frozenAt:o,messageCount:t.messages.length,...l??{},...i?{icon:i}:{},...r===`quick`?{pendingEnrichment:!0}:{},...a?{memoryPending:!0}:{}};try{await K(e.vfs,E);let r=await Ie(e.vfs,t.messages,c.replace(/\.md$/,``)),i={id:t.id,title:n,frozenAt:o,createdAt:t.createdAt,updatedAt:t.updatedAt,messageCount:t.messages.length,messages:r,...l??{}},a=Ge(i);return await e.vfs.writeFile(`${E}/${c}`,a),await Ye(e.vfs,u),await e.vfs.flush(),N.info(`Cone session frozen`,{filename:c,title:n,messageCount:t.messages.length}),{...u,archive:i}}catch(e){return N.warn(`Failed to write frozen session to VFS`,{error:e instanceof Error?e.message:String(e)}),null}}function Pe(e){let t={total:0,input:0,output:0,cacheRead:0,cacheWrite:0},n=new Map,r=!1;for(let i of e){if(i.role!==`assistant`)continue;let{model:e,usage:a}=i;if(!e||!a||!Fe(a))return null;let o=a.cost;r=!0,t.total+=o.total,t.input+=o.input,t.output+=o.output,t.cacheRead+=o.cacheRead,t.cacheWrite+=o.cacheWrite;let s=n.get(e)??{model:e,cost:0,turns:0,tokens:0};s.cost+=o.total,s.turns+=1,s.tokens+=a.input+a.output+a.cacheRead+a.cacheWrite,n.set(e,s)}return r?{cost:t,models:[...n.values()].sort((e,t)=>t.cost-e.cost)}:null}function V(e){return typeof e==`number`&&Number.isFinite(e)}function Fe(e){let{cost:t}=e;return[e.input,e.output,e.cacheRead,e.cacheWrite].every(V)&&[t.input,t.output,t.cacheRead,t.cacheWrite,t.total].every(V)}async function Ie(e,t,n){let r={vfs:e,archiveDir:`${I}/${n}`,copiedPaths:new Map,fileIndex:0},i=[];for(let e of t){if(!e.attachments?.some(H)){i.push(e);continue}let t=[];for(let n of e.attachments)t.push(await Le(r,n));i.push({...e,attachments:t})}return i}async function Le(e,t){if(!H(t))return t;let n=e.copiedPaths.get(t.path);if(n)return{...t,path:n};let r=await Re(e.vfs,t.path);if(!r)return Be(t);let i=t.name.replace(/[^A-Za-z0-9._-]+/g,`_`)||`attachment`,a=`${e.archiveDir}/${e.fileIndex++}-${i}`;return await K(e.vfs,e.archiveDir),await e.vfs.writeFile(a,r),e.copiedPaths.set(t.path,a),{...t,path:a}}async function Re(e,t){try{if(!await ze(e,t))return null;let n=await e.readFile(t,{encoding:`binary`});if(!(n instanceof Uint8Array))throw Error(`Expected binary attachment content at ${t}`);return n}catch{return null}}function H(e){return typeof e.path==`string`&&e.path.startsWith(`/tmp/`)&&e.data===void 0&&e.text===void 0}async function ze(e,t){let n=t.split(`/`).slice(1);if(n.length<2||n[0]!==`tmp`||n.some(e=>!e||e===`.`||e===`..`))return!1;let r=`/`;for(let t=0;t<n.length;t+=1){let i=(await e.readDir(r)).find(e=>e.name===n[t]);if(!i)return!1;if(t===n.length-1)return i.type===`file`;if(i.type!==`directory`)return!1;r=r===`/`?`/${n[t]}`:`${r}/${n[t]}`}return!1}function Be(e){let{path:t,...n}=e;return{...n,error:e.error??`Archived attachment file is missing or unsafe to preserve.`}}async function Ve(e){try{return await e.load(`session-cone`)}catch(e){return N.warn(`Failed to load session-cone`,{error:e instanceof Error?e.message:String(e)}),null}}function U(e){return e.map(e=>({role:e.role,content:[{type:`text`,text:e.content}],timestamp:e.timestamp}))}var He=`<!-- slicc:session-data
142
151
  `,Ue=`
143
152
  -->`;function We(e){return e.map(e=>{let t={id:e.id,role:e.role,content:e.content,timestamp:e.timestamp};return e.attachments?.length&&(t.attachments=e.attachments),e.toolCalls?.length&&(t.toolCalls=e.toolCalls.map(e=>({id:e.id,name:e.name,input:e.input,...e.result===void 0?{}:{result:e.result},...e.isError?{isError:e.isError}:{}}))),e.source&&(t.source=e.source),e.channel&&(t.channel=e.channel),t})}function Ge(e){let t=(e.cost?`cost: ${JSON.stringify(e.cost)}\n`:``)+(e.models?`models: ${JSON.stringify(e.models)}\n`:``),n=`---\nid: ${e.id}\ntitle: ${JSON.stringify(e.title)}\nfrozenAt: ${e.frozenAt}\ncreatedAt: ${e.createdAt}\nupdatedAt: ${e.updatedAt}\nmessageCount: ${e.messageCount}\n`+t+`---
144
153
 
145
154
  `,r=`${He}${JSON.stringify(We(e.messages)).replace(/-->/g,`-- >`)}${Ue}\n\n`,i=`# ${e.title}\n\n`;return n+r+i+M(e.messages)}function W(e){let t=e.trim();return t=t.replace(/^["'`]+|["'`]+$/g,``).trim(),t=t.replace(/\s+/g,` `),t.length>80&&(t=t.slice(0,80).trimEnd()),t}function Ke(e){let t=e.find(e=>e.role===`user`);if(!t?.content)return`untitled-session`;let n=t.content.trim().replace(/\s+/g,` `);return n.length>60?`${n.slice(0,60)}…`:n||`untitled-session`}function G(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,48)||`session`}function qe(){return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`}function Je(e){return e.startsWith(`pending-`)}async function K(e,t){try{await e.mkdir(t,{recursive:!0})}catch{}}async function q(e,t,n,r){let i=`/workspace/CLAUDE.md`,a=``;try{let t=await e.readFile(i,{encoding:`utf-8`});a=typeof t==`string`?t:new TextDecoder().decode(t)}catch(t){if(!(t instanceof c)||t.code!==`ENOENT`)throw t;await K(e,`/workspace`)}let o=`## Auto-extracted (${new Date().toISOString().slice(0,10)}, ${n})`,s=`${a.length===0||a.endsWith(`
146
155
  `)?``:`
147
- `}\n${o}\n\n${t}\n`;await e.writeFile(i,a+s);try{await _({vfs:e,model:r?.model,apiKey:r?.apiKey,headers:r?.headers,signal:r?.signal})}catch(e){N.warn(`Cone memory budget step threw (append already committed)`,{error:e instanceof Error?e.message:String(e)})}}async function Ye(e,t){let n=[];try{let t=await e.readFile(D,{encoding:`utf-8`}),r=typeof t==`string`?t:new TextDecoder().decode(t),i=JSON.parse(r);Array.isArray(i)&&(n=i)}catch{}let r=[t,...n.filter(e=>e.filename!==t.filename)];await e.writeFile(D,JSON.stringify(r,null,2))}async function J(e){return(await O(e)).filter(e=>(e.pendingEnrichment===!0||e.memoryPending===!0)&&X(e)<3)}async function Y(e){let t={attempted:0,completed:0};if(!e.model||!e.apiKey)return t;try{let n=await J(e.vfs);for(let r of n)try{let n=await it(e.vfs,r.filename);if(!n)continue;t.attempted+=1,await Z(e.vfs,n,{model:e.model,apiKey:e.apiKey,headers:e.headers})&&(t.completed+=1)}catch(e){N.warn(`Pending session catch-up attempt failed`,{filename:r.filename,error:e instanceof Error?e.message:String(e)})}}catch(e){N.warn(`Pending session catch-up failed`,{error:e instanceof Error?e.message:String(e)})}return t}function X(e){let t=e.pendingAttemptCount;return typeof t==`number`&&Number.isInteger(t)&&t>0?t:0}async function Z(e,t,n){if(!t.pendingEnrichment&&!t.memoryPending)return null;let r=await Ze(e,t);if(r===null)return null;let i=Qe(t,r);if(i===null)return null;let a=await $e(t,i,n);if(a===null)return null;let o=await Xe(n,a.newTitle);return await et(e,t,a.bullets,n),await tt(e,t,r,a.newTitle,o)}async function Xe(e,t){if(e.pickIcon)try{return await z(await e.pickIcon({subject:`"${t}" — an archived chat session`})??void 0)}catch(e){N.warn(`Enrichment icon pick failed (continuing without icon)`,{error:e instanceof Error?e.message:String(e)});return}}async function Ze(e,t){try{let n=await e.readFile(k(t),{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}catch(e){return e?.code===`ENOENT`?N.info(`Pending archive missing — treating as already enriched`,{filename:t.filename}):N.warn(`Failed to read pending archive (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}}function Qe(e,t){let n;try{n=A(t).messages}catch(t){return N.warn(`Failed to parse pending archive — leaving entry intact`,{filename:e.filename,error:t instanceof Error?t.message:String(t)}),null}return n.length===0?(N.info(`Pending archive has no messages — skipping enrichment`,{filename:e.filename}),null):U(n)}async function $e(e,t,n){let r=``;try{r=await a({messages:t,instruction:o,model:n.model,apiKey:n.apiKey,maxTokens:P,headers:n.headers})}catch(t){return N.warn(`Enrichment memory call failed (entry stays pending)`,{filename:e.filename,error:t instanceof Error?t.message:String(t)}),null}let s=``;try{s=W(await a({messages:t,instruction:i,model:n.model,apiKey:n.apiKey,maxTokens:F,headers:n.headers}))}catch(t){return N.warn(`Enrichment title call failed (entry stays pending)`,{filename:e.filename,error:t instanceof Error?t.message:String(t)}),null}return s?{bullets:r,newTitle:s}:(N.info(`Enrichment title call returned empty — entry stays pending`,{filename:e.filename}),null)}async function et(e,t,n,r){let i=n.trim();if(!(!i||i===`NONE`))try{await q(e,i,`pending-enrichment`,{model:r.model,apiKey:r.apiKey,headers:r.headers})}catch(e){N.warn(`Enrichment memory append failed (continuing with title rewrite)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)})}}async function tt(e,t,n,r,i){let a=k(t),o=Je(t.filename),s=o?r:t.title,c=o?`${t.frozenAt.replace(/[:.]/g,`-`)}-${G(r)}.md`:t.filename,l=`${E}/${c}`;if(o)try{await K(e,E),await e.writeFile(l,nt(n,s))}catch(e){return N.warn(`Enrichment write failed (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}let u=i??t.icon,d={filename:c,title:s,frozenAt:t.frozenAt,messageCount:t.messageCount,...t.cost?{cost:t.cost}:{},...t.models?{models:t.models}:{},...t.sessionId?{sessionId:t.sessionId}:{},...u?{icon:u}:{},...t.completeSnapshotUnavailable?{completeSnapshotUnavailable:!0}:{}};try{await at(e,t.filename,d)}catch(e){return N.warn(`Enrichment index update failed (entry may stay pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}if(l!==a)try{await e.rm(a)}catch(e){N.info(`Stale pending archive cleanup failed (harmless)`,{oldPath:a,error:e instanceof Error?e.message:String(e)})}try{await e.flush()}catch{}return N.info(`Pending session enriched`,{oldFilename:t.filename,newFilename:c,title:s}),d}function nt(e,t){let n=e.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);if(!n)return e;let r=n[1].replace(/^title:\s*.+$/m,`title: ${JSON.stringify(t)}`),i=n[2];return i=i.replace(/^#\s+[^\n]*$/m,`# ${t}`),`---\n${r}\n---\n${i}`}var Q=Promise.resolve();async function rt(e,t){let n=null,r=async()=>{let r=await O(e),i=r.findIndex(e=>e.filename===t);if(i===-1)return;let{memoryPending:a,pendingEnrichment:o,pendingAttemptCount:s,...c}=r[i],l=r.slice();l[i]=c,await e.writeFile(D,JSON.stringify(l,null,2)),await e.flush(),n=c},i=Q.then(r,r);Q=i.then(()=>void 0,()=>void 0);try{await i}catch(e){N.warn(`Failed to clear agentic memory pending marker`,{filename:t,error:e instanceof Error?e.message:String(e)})}return n}async function it(e,t){let n=null,r=async()=>{let r=await O(e),i=r.findIndex(e=>e.filename===t);if(i===-1)return;let a=r[i];if(!a.pendingEnrichment&&!a.memoryPending)return;let o=X(a);if(o>=3)return;n={...a,pendingAttemptCount:o+1};let s=r.slice();s[i]=n,await e.writeFile(D,JSON.stringify(s,null,2)),await e.flush()},i=Q.then(r,r);return Q=i.then(()=>void 0,()=>void 0),await i,n}async function at(e,t,n){let r=async()=>{let r=[];try{let t=await e.readFile(D,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),i=JSON.parse(n);Array.isArray(i)&&(r=i)}catch{}let i=r.findIndex(e=>e.filename===t),a;i===-1?a=[n,...r.filter(e=>e.filename!==n.filename)]:(a=r.slice(),a[i]=n,a=a.filter((e,t)=>t===i||e.filename!==n.filename)),await e.writeFile(D,JSON.stringify(a,null,2))},i=Q.then(r,r);return Q=i.then(()=>void 0,()=>void 0),i}async function $(e,t){let n=async()=>{let n=[];try{let t=await e.readFile(D,{encoding:`utf-8`}),r=typeof t==`string`?t:new TextDecoder().decode(t),i=JSON.parse(r);Array.isArray(i)&&(n=i)}catch{return}if(!n.find(e=>e.filename===t))return;let r=n.map(e=>e.filename===t?{...e,completeSnapshotUnavailable:!0}:e);await e.writeFile(D,JSON.stringify(r,null,2))},r=Q.then(n,n);return Q=r.then(()=>void 0,()=>void 0),r}export{Y as a,D as c,O as d,$ as i,k as l,Z as n,ke as o,L as r,M as s,R as t,A as u};
156
+ `}\n${o}\n\n${t}\n`;await e.writeFile(i,a+s);try{await _({vfs:e,model:r?.model,apiKey:r?.apiKey,headers:r?.headers,signal:r?.signal})}catch(e){N.warn(`Cone memory budget step threw (append already committed)`,{error:e instanceof Error?e.message:String(e)})}}async function Ye(e,t){let n=[];try{let t=await e.readFile(D,{encoding:`utf-8`}),r=typeof t==`string`?t:new TextDecoder().decode(t),i=JSON.parse(r);Array.isArray(i)&&(n=i)}catch{}let r=[t,...n.filter(e=>e.filename!==t.filename)];await e.writeFile(D,JSON.stringify(r,null,2))}async function J(e){return(await O(e)).filter(e=>(e.pendingEnrichment===!0||e.memoryPending===!0)&&X(e)<3)}async function Y(e){let t={attempted:0,completed:0};if(!e.model||!e.apiKey)return t;try{let n=await J(e.vfs);for(let r of n)try{let n=await at(e.vfs,r.filename);if(!n)continue;t.attempted+=1,await Z(e.vfs,n,{model:e.model,apiKey:e.apiKey,headers:e.headers})&&(t.completed+=1)}catch(e){N.warn(`Pending session catch-up attempt failed`,{filename:r.filename,error:e instanceof Error?e.message:String(e)})}}catch(e){N.warn(`Pending session catch-up failed`,{error:e instanceof Error?e.message:String(e)})}return t}function X(e){let t=e.pendingAttemptCount;return typeof t==`number`&&Number.isInteger(t)&&t>0?t:0}async function Z(e,t,n){if(!t.pendingEnrichment&&!t.memoryPending)return null;let r=await Ze(e,t);if(r===null)return null;let i=Qe(t,r);if(i===null)return null;let a=await $e(t,i,n);if(a===null)return null;let o=await Xe(n,a.newTitle);return await et(e,t,a.bullets,n),await nt(e,t,r,a.newTitle,o,n.skipMemory===!0)}async function Xe(e,t){if(e.pickIcon)try{return await z(await e.pickIcon({subject:`"${t}" — an archived chat session`})??void 0)}catch(e){N.warn(`Enrichment icon pick failed (continuing without icon)`,{error:e instanceof Error?e.message:String(e)});return}}async function Ze(e,t){try{let n=await e.readFile(k(t),{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}catch(e){return e?.code===`ENOENT`?N.info(`Pending archive missing — treating as already enriched`,{filename:t.filename}):N.warn(`Failed to read pending archive (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}}function Qe(e,t){let n;try{n=A(t).messages}catch(t){return N.warn(`Failed to parse pending archive — leaving entry intact`,{filename:e.filename,error:t instanceof Error?t.message:String(t)}),null}return n.length===0?(N.info(`Pending archive has no messages — skipping enrichment`,{filename:e.filename}),null):U(n)}async function $e(e,t,n){let r=``;if(!n.skipMemory)try{r=await a({messages:t,instruction:o,model:n.model,apiKey:n.apiKey,maxTokens:P,headers:n.headers})}catch(t){return N.warn(`Enrichment memory call failed (entry stays pending)`,{filename:e.filename,error:t instanceof Error?t.message:String(t)}),null}let s=``;try{s=W(await a({messages:t,instruction:i,model:n.model,apiKey:n.apiKey,maxTokens:F,headers:n.headers}))}catch(t){return N.warn(`Enrichment title call failed (entry stays pending)`,{filename:e.filename,error:t instanceof Error?t.message:String(t)}),null}return s?{bullets:r,newTitle:s}:(N.info(`Enrichment title call returned empty — entry stays pending`,{filename:e.filename}),null)}async function et(e,t,n,r){let i=n.trim();if(!(!i||i===`NONE`))try{await q(e,i,`pending-enrichment`,{model:r.model,apiKey:r.apiKey,headers:r.headers})}catch(e){N.warn(`Enrichment memory append failed (continuing with title rewrite)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)})}}function tt(e,t,n,r,i){let a=r??e.icon;return{filename:t,title:n,frozenAt:e.frozenAt,messageCount:e.messageCount,...e.cost?{cost:e.cost}:{},...e.models?{models:e.models}:{},...e.sessionId?{sessionId:e.sessionId}:{},...a?{icon:a}:{},...e.completeSnapshotUnavailable?{completeSnapshotUnavailable:!0}:{},...i&&e.memoryPending?{memoryPending:!0}:{}}}async function nt(e,t,n,r,i,a=!1){let o=k(t),s=Je(t.filename),c=s?r:t.title,l=s?`${t.frozenAt.replace(/[:.]/g,`-`)}-${G(r)}.md`:t.filename,u=`${E}/${l}`;if(s)try{await K(e,E),await e.writeFile(u,rt(n,c))}catch(e){return N.warn(`Enrichment write failed (entry stays pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}let d=tt(t,l,c,i,a);try{await ot(e,t.filename,d)}catch(e){return N.warn(`Enrichment index update failed (entry may stay pending)`,{filename:t.filename,error:e instanceof Error?e.message:String(e)}),null}if(u!==o)try{await e.rm(o)}catch(e){N.info(`Stale pending archive cleanup failed (harmless)`,{oldPath:o,error:e instanceof Error?e.message:String(e)})}try{await e.flush()}catch{}return N.info(`Pending session enriched`,{oldFilename:t.filename,newFilename:l,title:c}),d}function rt(e,t){let n=e.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);if(!n)return e;let r=n[1].replace(/^title:\s*.+$/m,`title: ${JSON.stringify(t)}`),i=n[2];return i=i.replace(/^#\s+[^\n]*$/m,`# ${t}`),`---\n${r}\n---\n${i}`}var Q=Promise.resolve();async function it(e,t){let n=null,r=async()=>{let r=await O(e),i=r.findIndex(e=>e.filename===t);if(i===-1)return;let{memoryPending:a,pendingEnrichment:o,pendingAttemptCount:s,...c}=r[i],l=r.slice();l[i]=c,await e.writeFile(D,JSON.stringify(l,null,2)),await e.flush(),n=c},i=Q.then(r,r);Q=i.then(()=>void 0,()=>void 0);try{await i}catch(e){N.warn(`Failed to clear agentic memory pending marker`,{filename:t,error:e instanceof Error?e.message:String(e)})}return n}async function at(e,t){let n=null,r=async()=>{let r=await O(e),i=r.findIndex(e=>e.filename===t);if(i===-1)return;let a=r[i];if(!a.pendingEnrichment&&!a.memoryPending)return;let o=X(a);if(o>=3)return;n={...a,pendingAttemptCount:o+1};let s=r.slice();s[i]=n,await e.writeFile(D,JSON.stringify(s,null,2)),await e.flush()},i=Q.then(r,r);return Q=i.then(()=>void 0,()=>void 0),await i,n}async function ot(e,t,n){let r=async()=>{let r=[];try{let t=await e.readFile(D,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),i=JSON.parse(n);Array.isArray(i)&&(r=i)}catch{}let i=r.findIndex(e=>e.filename===t),a;i===-1?a=[n,...r.filter(e=>e.filename!==n.filename)]:(a=r.slice(),a[i]=n,a=a.filter((e,t)=>t===i||e.filename!==n.filename)),await e.writeFile(D,JSON.stringify(a,null,2))},i=Q.then(r,r);return Q=i.then(()=>void 0,()=>void 0),i}async function $(e,t){let n=async()=>{let n=[];try{let t=await e.readFile(D,{encoding:`utf-8`}),r=typeof t==`string`?t:new TextDecoder().decode(t),i=JSON.parse(r);Array.isArray(i)&&(n=i)}catch{return}if(!n.find(e=>e.filename===t))return;let r=n.map(e=>e.filename===t?{...e,completeSnapshotUnavailable:!0}:e);await e.writeFile(D,JSON.stringify(r,null,2))},r=Q.then(n,n);return Q=r.then(()=>void 0,()=>void 0),r}export{Y as a,D as c,O as d,$ as i,k as l,Z as n,ke as o,L as r,M as s,R as t,A as u};
@@ -1 +1 @@
1
- import{n as e}from"./feature-flags-Cf-Bv5AK.js";import{h as t,n,t as r}from"./tray-runtime-config-C82czC62.js";import{n as i,t as a}from"./main-C1z-umpk.js";var o=3e3;async function s(t,n){let r=a(n.storage);try{let a=new URL(`/api/flags`,`${n.workerBaseUrl.replace(/\/+$/,``)}/`);a.searchParams.set(`float`,t);let s=await c(a.toString(),n.fetchImpl??fetch,n.timeoutMs??o);if(!s)return;i(r,t,s),e(t,s)}catch{}}async function c(e,t,n){let r=new AbortController,i;try{let a=new Promise(e=>{i=setTimeout(()=>{r.abort(),e(null)},n)}),o=t(e,{cache:`no-store`,headers:{Accept:`application/json`},signal:r.signal}).then(async e=>e.ok?l(await e.json()):null).catch(()=>null);return await Promise.race([o,a])}catch{return null}finally{i!==void 0&&clearTimeout(i)}}function l(e){return!u(e)||!u(e.flags)||Object.values(e.flags).some(e=>typeof e!=`string`)?null:e.flags}function u(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function d(e,t){return s(e,{workerBaseUrl:f(t),storage:t.storage})}function f(e){let i=p(e.storage),a=t(e.envBaseUrl??null);if(i)return i;if(a)return a;if(!e.isDev)try{let t=new URL(e.locationHref);if(t.protocol===`http:`||t.protocol===`https:`)return t.origin}catch{}return e.isDev?n:r}function p(e){try{return t(e?.getItem(`slicc.trayWorkerBaseUrl`)??null)}catch{return null}}export{d as refreshFeatureFlagsForPage};
1
+ import{n as e}from"./feature-flags-Cf-Bv5AK.js";import{h as t,n,t as r}from"./tray-runtime-config-C82czC62.js";import{n as i,t as a}from"./main-BZzuW4lk.js";var o=3e3;async function s(t,n){let r=a(n.storage);try{let a=new URL(`/api/flags`,`${n.workerBaseUrl.replace(/\/+$/,``)}/`);a.searchParams.set(`float`,t);let s=await c(a.toString(),n.fetchImpl??fetch,n.timeoutMs??o);if(!s)return;i(r,t,s),e(t,s)}catch{}}async function c(e,t,n){let r=new AbortController,i;try{let a=new Promise(e=>{i=setTimeout(()=>{r.abort(),e(null)},n)}),o=t(e,{cache:`no-store`,headers:{Accept:`application/json`},signal:r.signal}).then(async e=>e.ok?l(await e.json()):null).catch(()=>null);return await Promise.race([o,a])}catch{return null}finally{i!==void 0&&clearTimeout(i)}}function l(e){return!u(e)||!u(e.flags)||Object.values(e.flags).some(e=>typeof e!=`string`)?null:e.flags}function u(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function d(e,t){return s(e,{workerBaseUrl:f(t),storage:t.storage})}function f(e){let i=p(e.storage),a=t(e.envBaseUrl??null);if(i)return i;if(a)return a;if(!e.isDev)try{let t=new URL(e.locationHref);if(t.protocol===`http:`||t.protocol===`https:`)return t.origin}catch{}return e.isDev?n:r}function p(e){try{return t(e?.getItem(`slicc.trayWorkerBaseUrl`)??null)}catch{return null}}export{d as refreshFeatureFlagsForPage};
@@ -1,2 +1,2 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/extension-bridge-transport-D3PItLFo.js","assets/logger-DDBAeTLF.js","assets/pending-request-table-Dgn6qYdL.js","assets/lick-ws-bridge-D_e6wRPA.js","assets/runtime-mode-BgSVO5sw.js","assets/src-CAWTvdAa.js","assets/electron-overlay-route-CjT6k9Df.js","assets/messages-BD4p8GuF.js","assets/tray-runtime-config-C82czC62.js","assets/proxied-fetch-ULPrH97b.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/preload-helper-Czpn1I53.js","assets/base64-DpPqYZJF.js","assets/runtime-env-DH4NDw4t.js","assets/fetch-body-D2PwksUW.js","assets/tray-leader-BIbpF_6U.js","assets/db-C7OEVMWU.js","assets/cdp-CUhn-e9o.js","assets/navigation-watcher-CcKsLKw9.js","assets/handoff-link-BM4ctkE8.js","assets/remote-cdp-transport-CgOXLjZ8.js","assets/tray-sync-protocol-BZ5yhJH9.js","assets/main-cherry-B3C0ufyv.js","assets/synthetic-cdp-transport-Ds83IPjw.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import{c as n,l as r,s as i}from"./proxied-fetch-ULPrH97b.js";import{t as a}from"./runtime-env-DH4NDw4t.js";import{t as o}from"./bridge-launch-params-B8x2eq4a.js";import"./messages-BD4p8GuF.js";import{d as s,s as c,t as l}from"./tray-runtime-config-C82czC62.js";import{n as u}from"./runtime-mode-BgSVO5sw.js";import{t as d}from"./setup-sudo-CCOhbwTK.js";t(`stale-asset`);var f=`slicc-stale-asset-reload`;function p(e,t){if(typeof BroadcastChannel!=`function`)return()=>{};let n=new BroadcastChannel(f),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 m=`slicc:stale-asset-reloaded-at`,h=6e4,g=`slicc:stale-asset-replay`;function _(e=window.sessionStorage){try{e.setItem(g,`1`)}catch{}}function v(e=window.sessionStorage){try{return e.getItem(g)===`1`&&(e.removeItem(g),!0)}catch{return!1}}function y(){return{reload:()=>window.location.reload(),storage:window.sessionStorage,now:()=>Date.now(),windowMs:h,storageKey:m}}function b(e,t,n){return e===null||t-e>=n}function x(e=y()){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(!b(r,i,e.windowMs))return!1;try{e.storage.setItem(e.storageKey,String(i))}catch{return!1}return e.reload(),!0}var S=null,C=null;function w(e){S||(C={...y(),...e},S=e=>{x(C)&&e.preventDefault()},window.addEventListener(`vite:preloadError`,S))}var T=null;function E(e){return T||(T=p(e,e=>{e&&_(),x(C??void 0)}),T)}var D=`slicc-cdp-superseded-banner`;function O(e){if(e.getElementById(D))return;let t=e.createElement(`div`);t.id=D,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=[`position:fixed`,`top:0`,`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(`;`),e.body.appendChild(t)}function k(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`slicc-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function A(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 j=[100,200,400,800,1600];async function M(e,t,n,r=j,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){o=e,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 N(t,n,r){let{ExtensionBridgeTransport:i}=await e(async()=>{let{ExtensionBridgeTransport:e}=await import(`./extension-bridge-transport-D3PItLFo.js`);return{ExtensionBridgeTransport:e}},__vite__mapDeps([0,1,2])),{mapDiscoveryPayloadToLickEvent:a,mapNavigatePayloadToLickEvent:o}=await e(async()=>{let{mapDiscoveryPayloadToLickEvent:e,mapNavigatePayloadToLickEvent:t}=await import(`./lick-ws-bridge-D_e6wRPA.js`);return{mapDiscoveryPayloadToLickEvent:e,mapNavigatePayloadToLickEvent:t}},__vite__mapDeps([3,1,4,5,6,7,8,9,10,11,12,13,14,15,16])),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 t(new i({extensionId:n,onLick:e=>{d(o(e))},onDiscovery:e=>{d(a(e))},onOpenSettings:()=>{globalThis.dispatchEvent(new CustomEvent(`slicc:open-settings-from-panel`))}}));return await M(f,void 0,r),{browser:f,attachLickForwardingClient:u}}async function P(t){let{runtimeMode:f,envBaseUrl:p,window:m,log:h}=t,g=f===`electron-overlay`;h.info(`setting up standalone page runtime (BrowserAPI + CDP)`,{runtimeMode:f});let{BrowserAPI:_}=await e(async()=>{let{BrowserAPI:e}=await import(`./cdp-CUhn-e9o.js`);return{BrowserAPI:e}},__vite__mapDeps([17,1,2,18,19,5,20,21]));await d({log:h});let v,y,b,x=null,S=null,C=null,w=null,T,E=f===`cherry`?null:A(m.location.search),D=!!E&&a(),j=f===`cherry`||D?null:o(m.location.search);j?.apiBaseUrl&&(x=j.apiBaseUrl,r(j.apiBaseUrl),S=j.token,i(j.token)),j?.lickWsUrl&&(C=j.lickWsUrl);let P=f===`cherry`||D||j!==null,F=await c(),I=u(f,F!==null)?l:null;if(await s({locationHref:m.location.href,storage:m.localStorage,envBaseUrl:p,defaultWorkerBaseUrl:I,runtimeConfigFetcher:async()=>F}),f===`cherry`){let{setupCherryFollower:t}=await e(async()=>{let{setupCherryFollower:e}=await import(`./main-cherry-B3C0ufyv.js`);return{setupCherryFollower:e}},__vite__mapDeps([22,1,5,2,17,18,19,20,21,23])),n=await t();v=n.browser,y=n.joinUrl,b=n.transport}else if(E&&a()){h.info(`Routing CDP through the extension bridge (leader tab)`);let e=await N(_,E.extensionId,h);v=e.browser,T=e.attachLickForwardingClient,w=E.extensionId,n(E.extensionId)}else{v=new _,j&&h.info(`Routing CDP through local standalone bridge`,{url:j.url,role:j.role??`(unset)`});let e=j?{url:j.url,protocols:j.subprotocol}:void 0;j?.role===`follower`?(h.info(`Skipping CDP connect for follower overlay tab`),v.primeConnectOptions(e)):(await M(v,e,h),v.setCdpSupersededHandler(()=>O(m.document)))}let L=v.getTransport();return globalThis.__slicc_browser=v,{browser:v,realCdpTransport:L,hasLocalCdpSurface:P,cherryJoinUrl:y,cherryTransport:b,instanceId:k(),isElectronOverlay:g,localApiBaseUrl:x,bridgeToken:S,localLickWsUrl:C,extensionDelegateId:w,attachLickForwardingClient:T}}export{E as a,x as i,P as n,w as o,v as r,A as t};
2
+ import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import{c as n,l as r,s as i}from"./proxied-fetch-ULPrH97b.js";import{t as a}from"./runtime-env-DH4NDw4t.js";import{t as o}from"./bridge-launch-params-B8x2eq4a.js";import"./messages-BD4p8GuF.js";import{d as s,s as c,t as l}from"./tray-runtime-config-C82czC62.js";import{n as u}from"./runtime-mode-BgSVO5sw.js";import{t as d}from"./setup-sudo-Cf6DyfC1.js";t(`stale-asset`);var f=`slicc-stale-asset-reload`;function p(e,t){if(typeof BroadcastChannel!=`function`)return()=>{};let n=new BroadcastChannel(f),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 m=`slicc:stale-asset-reloaded-at`,h=6e4,g=`slicc:stale-asset-replay`;function _(e=window.sessionStorage){try{e.setItem(g,`1`)}catch{}}function v(e=window.sessionStorage){try{return e.getItem(g)===`1`&&(e.removeItem(g),!0)}catch{return!1}}function y(){return{reload:()=>window.location.reload(),storage:window.sessionStorage,now:()=>Date.now(),windowMs:h,storageKey:m}}function b(e,t,n){return e===null||t-e>=n}function x(e=y()){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(!b(r,i,e.windowMs))return!1;try{e.storage.setItem(e.storageKey,String(i))}catch{return!1}return e.reload(),!0}var S=null,C=null;function w(e){S||(C={...y(),...e},S=e=>{x(C)&&e.preventDefault()},window.addEventListener(`vite:preloadError`,S))}var T=null;function E(e){return T||(T=p(e,e=>{e&&_(),x(C??void 0)}),T)}var D=`slicc-cdp-superseded-banner`;function O(e){if(e.getElementById(D))return;let t=e.createElement(`div`);t.id=D,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=[`position:fixed`,`top:0`,`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(`;`),e.body.appendChild(t)}function k(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`slicc-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function A(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 j=[100,200,400,800,1600];async function M(e,t,n,r=j,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){o=e,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 N(t,n,r){let{ExtensionBridgeTransport:i}=await e(async()=>{let{ExtensionBridgeTransport:e}=await import(`./extension-bridge-transport-D3PItLFo.js`);return{ExtensionBridgeTransport:e}},__vite__mapDeps([0,1,2])),{mapDiscoveryPayloadToLickEvent:a,mapNavigatePayloadToLickEvent:o}=await e(async()=>{let{mapDiscoveryPayloadToLickEvent:e,mapNavigatePayloadToLickEvent:t}=await import(`./lick-ws-bridge-D_e6wRPA.js`);return{mapDiscoveryPayloadToLickEvent:e,mapNavigatePayloadToLickEvent:t}},__vite__mapDeps([3,1,4,5,6,7,8,9,10,11,12,13,14,15,16])),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 t(new i({extensionId:n,onLick:e=>{d(o(e))},onDiscovery:e=>{d(a(e))},onOpenSettings:()=>{globalThis.dispatchEvent(new CustomEvent(`slicc:open-settings-from-panel`))}}));return await M(f,void 0,r),{browser:f,attachLickForwardingClient:u}}async function P(t){let{runtimeMode:f,envBaseUrl:p,window:m,log:h}=t,g=f===`electron-overlay`;h.info(`setting up standalone page runtime (BrowserAPI + CDP)`,{runtimeMode:f});let{BrowserAPI:_}=await e(async()=>{let{BrowserAPI:e}=await import(`./cdp-CUhn-e9o.js`);return{BrowserAPI:e}},__vite__mapDeps([17,1,2,18,19,5,20,21]));await d({log:h});let v,y,b,x=null,S=null,C=null,w=null,T,E=f===`cherry`?null:A(m.location.search),D=!!E&&a(),j=f===`cherry`||D?null:o(m.location.search);j?.apiBaseUrl&&(x=j.apiBaseUrl,r(j.apiBaseUrl),S=j.token,i(j.token)),j?.lickWsUrl&&(C=j.lickWsUrl);let P=f===`cherry`||D||j!==null,F=await c(),I=u(f,F!==null)?l:null;if(await s({locationHref:m.location.href,storage:m.localStorage,envBaseUrl:p,defaultWorkerBaseUrl:I,runtimeConfigFetcher:async()=>F}),f===`cherry`){let{setupCherryFollower:t}=await e(async()=>{let{setupCherryFollower:e}=await import(`./main-cherry-B3C0ufyv.js`);return{setupCherryFollower:e}},__vite__mapDeps([22,1,5,2,17,18,19,20,21,23])),n=await t();v=n.browser,y=n.joinUrl,b=n.transport}else if(E&&a()){h.info(`Routing CDP through the extension bridge (leader tab)`);let e=await N(_,E.extensionId,h);v=e.browser,T=e.attachLickForwardingClient,w=E.extensionId,n(E.extensionId)}else{v=new _,j&&h.info(`Routing CDP through local standalone bridge`,{url:j.url,role:j.role??`(unset)`});let e=j?{url:j.url,protocols:j.subprotocol}:void 0;j?.role===`follower`?(h.info(`Skipping CDP connect for follower overlay tab`),v.primeConnectOptions(e)):(await M(v,e,h),v.setCdpSupersededHandler(()=>O(m.document)))}let L=v.getTransport();return globalThis.__slicc_browser=v,{browser:v,realCdpTransport:L,hasLocalCdpSurface:P,cherryJoinUrl:y,cherryTransport:b,instanceId:k(),isElectronOverlay:g,localApiBaseUrl:x,bridgeToken:S,localLickWsUrl:C,extensionDelegateId:w,attachLickForwardingClient:T}}export{E as a,x as i,P as n,w as o,v as r,A as t};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/sudo-CX6L-imR.js","assets/preload-helper-Czpn1I53.js","assets/logger-DDBAeTLF.js","assets/proxied-fetch-ULPrH97b.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/base64-DpPqYZJF.js","assets/src-CAWTvdAa.js","assets/runtime-env-DH4NDw4t.js","assets/fetch-body-D2PwksUW.js","assets/quick-llm-BsKuuErB.js","assets/account-store-fsZiMtXd.js","assets/compat-Bn8HnC3L.js","assets/models-DgdVqaw5.js","assets/diagnostics-DN_idNHx.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-C8HitxAG.js","assets/context-compaction-DDaM9TWa.js","assets/secret-topology-DCQNOMWj.js","assets/secrets-bridge-client-BZMh3a0J.js","assets/port-bridge-client-Bg6_jjLD.js","assets/tool-ui-DfXu6quJ.js","assets/tool-result-images-D8kQ0hH0.js","assets/providers-CvRdyDpX.js","assets/panel-rpc-B3MSVImO.js","assets/bedrock-camp-BDCjQMZx.js","assets/transform-messages-DgR3h-Ck.js","assets/llm-session-id-bZQs6gBN.js","assets/icons-DtQGhvkp.js","assets/panel-responder-B6PI12mV.js"])))=>i.map(i=>d[i]);
2
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./preload-helper-Czpn1I53.js";var n=e({setupSudoExtension:()=>i,setupSudoStandalone:()=>r});async function r(e){let{installSudoTestHook:n}=await t(async()=>{let{installSudoTestHook:e}=await import(`./sudo-CX6L-imR.js`);return{installSudoTestHook:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29]));n()}async function i(e){let{installPanelSudoResponder:n}=await t(async()=>{let{installPanelSudoResponder:e}=await import(`./sudo-CX6L-imR.js`);return{installPanelSudoResponder:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29]));n()}export{n,r as t};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/sudo-BbrhTMIr.js","assets/preload-helper-Czpn1I53.js","assets/logger-DDBAeTLF.js","assets/proxied-fetch-ULPrH97b.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/base64-DpPqYZJF.js","assets/src-CAWTvdAa.js","assets/runtime-env-DH4NDw4t.js","assets/fetch-body-D2PwksUW.js","assets/quick-llm-BXyljJCN.js","assets/account-store-CBeFYmaM.js","assets/compat-Bn8HnC3L.js","assets/models-DgdVqaw5.js","assets/diagnostics-DN_idNHx.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-C8HitxAG.js","assets/context-compaction-DDaM9TWa.js","assets/secret-topology-DCQNOMWj.js","assets/secrets-bridge-client-BZMh3a0J.js","assets/port-bridge-client-Bg6_jjLD.js","assets/tool-ui-DfXu6quJ.js","assets/tool-result-images-D8kQ0hH0.js","assets/providers-I0N2Pli8.js","assets/panel-rpc-B3MSVImO.js","assets/bedrock-camp-BDCjQMZx.js","assets/transform-messages-DgR3h-Ck.js","assets/llm-session-id-bZQs6gBN.js","assets/icons-DtQGhvkp.js","assets/panel-responder-B6PI12mV.js"])))=>i.map(i=>d[i]);
2
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./preload-helper-Czpn1I53.js";var n=e({setupSudoExtension:()=>i,setupSudoStandalone:()=>r});async function r(e){let{installSudoTestHook:n}=await t(async()=>{let{installSudoTestHook:e}=await import(`./sudo-BbrhTMIr.js`);return{installSudoTestHook:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29]));n()}async function i(e){let{installPanelSudoResponder:n}=await t(async()=>{let{installPanelSudoResponder:e}=await import(`./sudo-BbrhTMIr.js`);return{installPanelSudoResponder:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29]));n()}export{n,r as t};
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./logger-LESFN7Hj.js";import{n}from"./path-utils-Rm3AltuN.js";import{t as r}from"./types-idfTVsM8.js";import{i}from"./fs-CqrpSNTX.js";const a=t(`sudo:sudoers`),o=`/etc/sudoers`,s=`/etc/sudoers.d`,c=/^\/scoops\/[^/]+\/etc\/sudoers$/;function l(e){return`/scoops/${e}/etc/sudoers`}function u(e,t){return e===`no-match`?t===`require-approval`?`require-approval`:`no-match`:e}function d(){return{cmnd:[],read:[],write:[]}}function f(e){return`.+^$()[]|\\{}`.includes(e)?`\\${e}`:e}function p(e){let t=``,n=0;for(;n<e.length;){let r=e[n];r===`*`?(t+=`.*`,n+=e[n+1]===`*`?2:1):r===`?`?(t+=`.`,n+=1):(t+=f(r),n+=1)}return RegExp(`^${t}$`,`s`)}function m(e){let t=``,n=0;for(;n<e.length;){let r=e[n];r===`*`&&e[n+1]===`*`?(t.endsWith(`/`)?t=`${t.slice(0,-1)}(?:/.*)?`:t+=`.*`,n+=2,e[n]===`/`&&(n+=1)):r===`*`?(t+=`[^/]*`,n+=1):r===`?`?(t+=`[^/]`,n+=1):(t+=f(r),n+=1)}return RegExp(`^${t}$`)}function h(e){return e.split(/\r?\n/,1)[0]?.trim()??``}const g=new Set([`Cmnd`,`Read`,`Write`]);function _(e){let t=e.trim(),n=!1,r=t.search(/\s/);(r===-1?t:t.slice(0,r))===`NOPASSWD`&&(n=!0,t=r===-1?``:t.slice(r).trimStart());let i=t.search(/\s/),a=i===-1?t:t.slice(0,i);if(!g.has(a))return null;let o=i===-1?``:t.slice(i).trim();return o?{directive:a,nopasswd:n,pattern:o}:null}function v(e){let t=d();try{if(typeof e!=`string`)return t;for(let n of e.split(`
1
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./logger-LESFN7Hj.js";import{n}from"./path-utils-Rm3AltuN.js";import{t as r}from"./types-idfTVsM8.js";import{i}from"./fs-8ZcM_j1q.js";const a=t(`sudo:sudoers`),o=`/etc/sudoers`,s=`/etc/sudoers.d`,c=/^\/scoops\/[^/]+\/etc\/sudoers$/;function l(e){return`/scoops/${e}/etc/sudoers`}function u(e,t){return e===`no-match`?t===`require-approval`?`require-approval`:`no-match`:e}function d(){return{cmnd:[],read:[],write:[]}}function f(e){return`.+^$()[]|\\{}`.includes(e)?`\\${e}`:e}function p(e){let t=``,n=0;for(;n<e.length;){let r=e[n];r===`*`?(t+=`.*`,n+=e[n+1]===`*`?2:1):r===`?`?(t+=`.`,n+=1):(t+=f(r),n+=1)}return RegExp(`^${t}$`,`s`)}function m(e){let t=``,n=0;for(;n<e.length;){let r=e[n];r===`*`&&e[n+1]===`*`?(t.endsWith(`/`)?t=`${t.slice(0,-1)}(?:/.*)?`:t+=`.*`,n+=2,e[n]===`/`&&(n+=1)):r===`*`?(t+=`[^/]*`,n+=1):r===`?`?(t+=`[^/]`,n+=1):(t+=f(r),n+=1)}return RegExp(`^${t}$`)}function h(e){return e.split(/\r?\n/,1)[0]?.trim()??``}const g=new Set([`Cmnd`,`Read`,`Write`]);function _(e){let t=e.trim(),n=!1,r=t.search(/\s/);(r===-1?t:t.slice(0,r))===`NOPASSWD`&&(n=!0,t=r===-1?``:t.slice(r).trimStart());let i=t.search(/\s/),a=i===-1?t:t.slice(0,i);if(!g.has(a))return null;let o=i===-1?``:t.slice(i).trim();return o?{directive:a,nopasswd:n,pattern:o}:null}function v(e){let t=d();try{if(typeof e!=`string`)return t;for(let n of e.split(`
2
2
  `)){let e=n.trim();if(!e||e.startsWith(`#`))continue;let r=_(e);if(!r){a.warn(`Skipping unrecognized sudoers line`,{line:e});continue}let i=r.directive===`Cmnd`?p:m,o={pattern:r.pattern,nopasswd:r.nopasswd,regex:i(r.pattern)};r.directive===`Cmnd`?t.cmnd.push(o):r.directive===`Read`?t.read.push(o):t.write.push(o)}return t}catch(e){return a.error(`Failed to parse sudoers; falling back to self-protection only`,{err:e}),d()}}function y(...e){let t=d();for(let n of e)n&&(t.cmnd.push(...n.cmnd),t.read.push(...n.read),t.write.push(...n.write));return t}function b(e,t){let n=!1;for(let r of e)if(r.regex.test(t)){if(r.nopasswd)return`nopasswd-allow`;n=!0}return n?`require-approval`:`no-match`}function x(e,t){return b(e.cmnd,t.trim())}function S(e){return e===`/etc/sudoers`||e===`/etc/sudoers.d`||e.startsWith(`/etc/sudoers.d/`)||c.test(e)||e===`/etc/slicc/layouts`||e.startsWith(`/etc/slicc/layouts/`)}function C(e,t,r,a){let o=n(r);if(t===`write`){if(S(o))return`require-approval`;if(a?.isContentWrite&&i(o))return`nopasswd-allow`}return b(t===`read`?e.read:e.write,o)}const w=t(`sudo:fs`),T=Symbol.for(`slicc.fs.monkeypatchUnsafe`),E=`${s}/granted`,D=[`readFile`,`readTextFile`,`readDir`,`exists`,`stat`],O=[`writeFile`],ee=[`mkdir`,`rm`];async function te(e,t,n,i){let a=h(i);if(!a)return;let o=t(),c={pattern:a,nopasswd:!0,regex:m(a)};(n===`read`?o.read:o.write).push(c);let l=`NOPASSWD ${n===`read`?`Read`:`Write`} ${a}\n`;try{await e.mkdir(s,{recursive:!0});let t=``;try{t=await e.readFile(E,{encoding:`utf-8`})}catch(e){if(!(e instanceof r&&e.code===`ENOENT`))throw e}let n=t.length>0&&!t.endsWith(`
3
3
  `)?`
4
4
  `:``;await e.writeFile(E,t+n+l)}catch(e){w.warn(`Failed to persist NOPASSWD grant; effective in-session only`,{error:e instanceof Error?e.message:String(e)})}}function ne(e,t){let{broker:i,getPolicy:a}=t,o=t.defaultDisposition??`allow`,s=t.onGrant?t.onGrant:(t,n)=>te(e,a,t,n);async function c(e,t,c=!1){let l=n(t),d=C(a(),e,l,{isContentWrite:c});if((e===`write`?u(d,o):d)!==`require-approval`)return;let f=e,p=await i.requestApproval({kind:f,detail:l});if(p.decision===`deny`)throw new r(`EACCES`,`sudo: approval denied`,l);p.decision===`always`&&await s(e,p.pattern?.trim()||l)}function l(e){return C(a(),`read`,n(e))!==`require-approval`}let d=t=>typeof e[t]==`function`,f={};for(let t of D)d(t)&&(f[t]=async(n,...r)=>(await c(`read`,n),e[t](n,...r)));for(let t of O)d(t)&&(f[t]=async(n,...r)=>(await c(`write`,n,!0),e[t](n,...r)));for(let t of ee)d(t)&&(f[t]=async(n,...r)=>(await c(`write`,n),e[t](n,...r)));return d(`walk`)&&(f.walk=async function*(t,...n){await c(`read`,t),yield*e.walk(t,...n)}),d(`symlink`)&&(f.symlink=async(t,n)=>(await c(`write`,n),e.symlink(t,n))),d(`rename`)&&(f.rename=async(t,n)=>(await c(`read`,t),await c(`write`,t),await c(`write`,n),e.rename(t,n))),d(`copyFile`)&&(f.copyFile=async(t,n)=>(await c(`read`,t),await c(`write`,n),e.copyFile(t,n))),d(`mount`)&&(f.mount=async(t,...n)=>(await c(`write`,t),e.mount(t,...n))),d(`unmount`)&&(f.unmount=async t=>(await c(`write`,t),e.unmount(t))),d(`refreshMount`)&&(f.refreshMount=async(t,...n)=>(await c(`write`,t),e.refreshMount(t,...n))),d(`statSync`)&&(f.statSync=t=>l(t)?e.statSync(t):null),d(`readDirSync`)&&(f.readDirSync=t=>l(t)?e.readDirSync(t):null),new Proxy(e,{get(e,t,n){if(t===T)return!0;if(typeof t==`string`&&t in f)return f[t];let r=Reflect.get(e,t,n);return typeof r==`function`?r.bind(e):r}})}const k=`/workspace/skills`,A=`SKILL.md`,j=t(`skills-discovery`),M=[`native`,`agents`,`claude`,`marketplace`,`plugin`],N=new Map([[`.agents`,`agents`],[`.claude`,`claude`]]),P=new Set([`.git`,`.slicc`,`node_modules`]),F=2e4,I=[`mkdir`,`mount`,`rename`,`rm`,`unmount`,`writeFile`],L=new WeakMap,R=new WeakSet;async function z(e,t=k){let n=await W(e,t),r=await V(e),i=await B(e);return[...M.flatMap(e=>(e===`native`?n:e===`plugin`?i:r.filter(t=>t.source===e)).sort((e,t)=>e.path.localeCompare(t.path)))]}async function B(e){let t;try{let n=await e.readTextFile(`/workspace/.plugins/plugins.json`),r=JSON.parse(n);if(!r||typeof r!=`object`||!r.plugins)return[];t=Object.values(r.plugins).map(e=>e?.root).filter(e=>typeof e==`string`)}catch{return[]}let n=[];for(let r of t){let t=`${r}/skills`,i=await Z(e,t);for(let r of i){if(r.type!==`directory`)continue;let i=`${t}/${r.name}`,a=`${i}/${A}`;await X(e,a)&&n.push({source:`plugin`,sourceRoot:t,path:i,skillFilePath:a})}}return n}async function V(e){if(H(e))return(await J(e)).map(e=>({...e}));Y(e);let t=e,n=L.get(t);if(n)return n.map(e=>({...e}));let r=await J(e);return L.set(t,r),r.map(e=>({...e}))}function H(e){try{return e[T]===!0}catch{return!1}}function U(e,t){let n=new Map,r=new Map;for(let i of e){let e=t(i);if(!n.has(e)){n.set(e,i);continue}let a=r.get(e)??{name:e,winner:n.get(e),shadowed:[]};a.shadowed.push(i),r.set(e,a)}return{winners:Array.from(n.values()),collisions:Array.from(r.values())}}async function W(e,t){let n=await Z(e,t),r=[];for(let i of n){if(i.type!==`directory`)continue;let n=`${t}/${i.name}`,a=`${n}/${A}`;await X(e,a)&&r.push({source:`native`,sourceRoot:t,path:n,skillFilePath:a})}return r}async function G(e,t){let n;try{n=await e.readTextFile(t)}catch{return[]}let r;try{r=JSON.parse(n)}catch{return[]}if(typeof r!=`object`||!r||!Array.isArray(r.plugins))return[];let i=t.replace(/\/[^/]+$/,``).replace(/\/.claude-plugin$/,``),a=[];for(let e of r.plugins){if(typeof e!=`object`||!e)continue;let t=e.source;if(typeof t!=`string`||t.startsWith(`/`)||t.split(`/`).includes(`..`))continue;let n=t.replace(/^\.\//,``).replace(/\/$/,``).replace(/^\.$/,``);a.push(n?`${i}/${n}`:i)}return a}async function K(e,t,n){let r=await G(e,`${t}/marketplace.json`),i=[];for(let t of r){let r=`${t}/skills`,a=await Z(e,r);for(let t of a){if(t.type!==`directory`)continue;let a=`${r}/${t.name}`,o=`${a}/${A}`;!await X(e,o)||n.has(a)||(n.add(a),i.push({source:`marketplace`,sourceRoot:r,path:a,skillFilePath:o}))}}return i}async function q(e,t,n,r){let i=`${t}/skills`,a=await Z(e,i),o=[];for(let t of a){if(t.type!==`directory`)continue;let a=`${i}/${t.name}`,s=`${a}/${A}`;!await X(e,s)||r.has(a)||(r.add(a),o.push({source:n,sourceRoot:i,path:a,skillFilePath:s}))}return o}async function J(e){let t=[],n=new Set,r=new Set([`/`]),i=[{path:`/`,depth:0}];for(let a=0;a<i.length;a+=1){if(a>=F){j.warn(`skills discovery: directory budget exhausted; walk truncated`,{budget:F});break}let{path:o,depth:s}=i[a],c=await Z(e,o);for(let a of c){if(a.type!==`directory`||a.name===`.`||a.name===`..`)continue;let c=o===`/`?`/${a.name}`:`${o}/${a.name}`,l=N.get(a.name);if(l){let r=await q(e,c,l,n);t.push(...r)}if(a.name===`.claude-plugin`){let r=await K(e,c,n);t.push(...r);continue}!P.has(a.name)&&s<24&&!r.has(c)&&(r.add(c),i.push({path:c,depth:s+1}))}}return t}function Y(e){if(H(e))return;let t=e;if(R.has(t))return;R.add(t);let n=e;for(let r of I){let i=n[r];if(typeof i!=`function`)continue;let a=i;try{n[r]=async(...n)=>{let r=await a.apply(e,n);return L.delete(t),r}}catch{}}}async function X(e,t){try{return await e.stat(t),!0}catch{return!1}}async function Z(e,t){try{return[...await e.readDir(t)].sort((e,t)=>e.name.localeCompare(t.name))}catch{return[]}}async function Q(e,t=`/workspace/skills`){let n=await z(e,t),r=[];for(let t of n){let n=t.path.split(`/`).pop()??t.path,i=``;if(t.skillFilePath)try{i=ie(await e.readTextFile(t.skillFilePath))??``}catch{}r.push({name:n,source:t.source,sourceRoot:t.sourceRoot,path:t.path,skillFilePath:t.skillFilePath,description:i})}let{winners:i,collisions:a}=U(r,e=>e.name),o=new Map(a.map(e=>[e.winner.path,e.shadowed.map(e=>e.path)]));return i.map(e=>({...e,shadowedPaths:o.get(e.path)}))}async function $(e,t,n=`/workspace/skills`){return(await Q(e,n)).find(e=>e.name===t)||null}async function re(e,t,n=`/workspace/skills`){let r=await $(e,t,n);if(!r?.skillFilePath)return null;try{return await e.readTextFile(r.skillFilePath)}catch{return null}}function ie(e){let t=e.replace(/^\uFEFF/,``).replace(/\r\n?/g,`