sliccy 6.243.1 → 6.243.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/dist/ui/.vite/manifest.json +200 -200
  2. package/dist/ui/assets/{account-store-lkEr3iIk.js → account-store-CZxeDCj6.js} +1 -1
  3. package/dist/ui/assets/{account-store-BJFsDWSZ.js → account-store-XLm6U_oB.js} +1 -1
  4. package/dist/ui/assets/{adobe-DDodE_vF.js → adobe-4Lv-lEUy.js} +1 -1
  5. package/dist/ui/assets/{adobe-DeyS89Z1.js → adobe-DP6TLAwd.js} +1 -1
  6. package/dist/ui/assets/{agent-panels-C4RG9Ub_.js → agent-panels-BLkJvMDw.js} +1 -1
  7. package/dist/ui/assets/{almost-bash-shell-headless-D0VY87gL.js → almost-bash-shell-headless-McU6QzNw.js} +12 -12
  8. package/dist/ui/assets/{apply-layout-CYyV9fun.js → apply-layout-DhAyX0Ov.js} +1 -1
  9. package/dist/ui/assets/{azure-openai-BgFnoIfA.js → azure-openai-DNomGJQA.js} +1 -1
  10. package/dist/ui/assets/{azure-openai-UDS64Pms.js → azure-openai-DgQO_MPc.js} +1 -1
  11. package/dist/ui/assets/{cdp-C7gI7nwi.js → cdp-BPODO-v6.js} +1 -1
  12. package/dist/ui/assets/{cerebras-DRfIpjta.js → cerebras-BcnsNVTj.js} +1 -1
  13. package/dist/ui/assets/{cerebras-BE_VnaBM.js → cerebras-DCbwMLZs.js} +1 -1
  14. package/dist/ui/assets/{composer-speech-CEmutNrx.js → composer-speech-DLpMUmHi.js} +1 -1
  15. package/dist/ui/assets/{connect-surface-n0caH6ih.js → connect-surface-Dd6etMS1.js} +1 -1
  16. package/dist/ui/assets/{core-C--iyWKC.js → core-C3diKI3_.js} +1 -1
  17. package/dist/ui/assets/{directed-approval-zbsK6TVp.js → directed-approval-CxGyqGmw.js} +1 -1
  18. package/dist/ui/assets/{emscripten-vfs-hook-wFB8snre.js → emscripten-vfs-hook-D5wuCcmd.js} +1 -1
  19. package/dist/ui/assets/{frozen-archive-writer-AC06UCUb.js → frozen-archive-writer-BMGO4Pl3.js} +1 -1
  20. package/dist/ui/assets/{frozen-archive-writer-BJ0wJaR_.js → frozen-archive-writer-Cl1Ysgmc.js} +1 -1
  21. package/dist/ui/assets/{frozen-session-delete-Bapa2Gei.js → frozen-session-delete-BImwwqtA.js} +1 -1
  22. package/dist/ui/assets/{frozen-session-identity-CkIXB5VV.js → frozen-session-identity-DpCAG3W1.js} +1 -1
  23. package/dist/ui/assets/{frozen-session-identity-bJgy_hch.js → frozen-session-identity-cfIMH4Td.js} +1 -1
  24. package/dist/ui/assets/{gelatiere-unit-B220kXOx.js → gelatiere-unit-DOXwGapU.js} +1 -1
  25. package/dist/ui/assets/{github-cdKZ9rew.js → github-BzZw7TIs.js} +1 -1
  26. package/dist/ui/assets/{github-eHNRFngi.js → github-CsKFSSqV.js} +1 -1
  27. package/dist/ui/assets/{github-copilot-CtFv69wt.js → github-copilot-C5z2PQ1P.js} +1 -1
  28. package/dist/ui/assets/{github-copilot-LZz_GzBE.js → github-copilot-dtNkDvfZ.js} +1 -1
  29. package/dist/ui/assets/{guest-tool-gate-D5-Z-l4h.js → guest-tool-gate-BNo9y_Uv.js} +1 -1
  30. package/dist/ui/assets/{hear-pXmVzEZn.js → hear-CMC1K5UA.js} +1 -1
  31. package/dist/ui/assets/{image-processor-BlI3KRoz.js → image-processor-C15fHQoW.js} +1 -1
  32. package/dist/ui/assets/{index-kP-kVY3-.js → index-C9xmWnPK.js} +1900 -1885
  33. package/dist/ui/assets/{interrupted-work-recovery-Bc8UHznp.js → interrupted-work-recovery-Dbckx3Ur.js} +1 -1
  34. package/dist/ui/assets/{js-realm-worker-BHWkeaRb.js → js-realm-worker-Ba8zud52.js} +2 -2
  35. package/dist/ui/assets/{jsh-executor-D5qCzMEP.js → jsh-executor-qDakdAS_.js} +2 -2
  36. package/dist/ui/assets/{kernel-worker-DX2Vi4XK.js → kernel-worker-D1Q7ClUJ.js} +9 -9
  37. package/dist/ui/assets/{lick-ws-bridge-Cwu5ARV0.js → lick-ws-bridge-712p86v_.js} +1 -1
  38. package/dist/ui/assets/{lick-ws-bridge-Bz2aGwwC.js → lick-ws-bridge-B5fuce_W.js} +1 -1
  39. package/dist/ui/assets/{live-session-curation-fTEz4CoK.js → live-session-curation-B0pppRPO.js} +1 -1
  40. package/dist/ui/assets/{live-session-curation-DUES5Svq.js → live-session-curation-BeUaBQ0O.js} +1 -1
  41. package/dist/ui/assets/{live-session-snapshot-bb0C0N-W.js → live-session-snapshot-g151JaRq.js} +1 -1
  42. package/dist/ui/assets/{local-llm-CTsTPsNd.js → local-llm-BDORdmqg.js} +1 -1
  43. package/dist/ui/assets/{local-llm-DB1N4OCh.js → local-llm-DJvkrQKj.js} +1 -1
  44. package/dist/ui/assets/magick-wasm-i1MzN-IS.js +43 -0
  45. package/dist/ui/assets/{main-C73xRKFo.js → main-BsdSV37L.js} +3 -3
  46. package/dist/ui/assets/{main-cherry-B9oR_G-Y.js → main-cherry-CR-h4E9K.js} +1 -1
  47. package/dist/ui/assets/{mcp-command-BPfD2_6b.js → mcp-command-CWc3RewX.js} +10 -10
  48. package/dist/ui/assets/{memory-curation-seam-CozbYrLJ.js → memory-curation-seam-DQycDeZC.js} +1 -1
  49. package/dist/ui/assets/{memory-health-Cuk7kP_b.js → memory-health-15TTx6Ic.js} +1 -1
  50. package/dist/ui/assets/{memory-write-execute-DIOFNKgy.js → memory-write-execute-DkPMw8VV.js} +1 -1
  51. package/dist/ui/assets/{merge-folded-cost-into-frozen-DpNuVfvC.js → merge-folded-cost-into-frozen-DRJ6s4PX.js} +1 -1
  52. package/dist/ui/assets/{new-session-TuTnf9kl.js → new-session-CUUn1ajO.js} +2 -2
  53. package/dist/ui/assets/{oauth-bootstrap-DhPvV_hP.js → oauth-bootstrap-JLz985ZL.js} +2 -2
  54. package/dist/ui/assets/{onboarding-orchestrator-ykxRS08c.js → onboarding-orchestrator-EMPTI-j1.js} +1 -1
  55. package/dist/ui/assets/{openai-codex-BNDFbVKG.js → openai-codex-BfWZSHpB.js} +1 -1
  56. package/dist/ui/assets/{openai-codex-B1Aep-z0.js → openai-codex-Q6PUT3gV.js} +1 -1
  57. package/dist/ui/assets/{openrouter-CdJmtj-O.js → openrouter-BNtQ_P1J.js} +1 -1
  58. package/dist/ui/assets/{openrouter-DKiybt03.js → openrouter-DQNJ63yB.js} +1 -1
  59. package/dist/ui/assets/{openrouter-free-DEybPXcr.js → openrouter-free-BoYIz3XV.js} +1 -1
  60. package/dist/ui/assets/{openrouter-free-Bz1T5U6K.js → openrouter-free-G3JKrY_P.js} +1 -1
  61. package/dist/ui/assets/{openrouter-oauth-ObOCcBI7.js → openrouter-oauth-DozNS5US.js} +1 -1
  62. package/dist/ui/assets/{openrouter-oauth-1TO_HmLs.js → openrouter-oauth-vUgEXXiX.js} +1 -1
  63. package/dist/ui/assets/{panel-rpc-handlers-CAL-BoZZ.js → panel-rpc-handlers-DJvPSTfc.js} +2 -2
  64. package/dist/ui/assets/{panelize-shell-x6YI93kr.js → panelize-shell-BIA9fIYU.js} +1 -1
  65. package/dist/ui/assets/{pi-edit-execution-Bb3EQRID.js → pi-edit-execution-B0PqMqNv.js} +1 -1
  66. package/dist/ui/assets/{provider-DdIRzZ8L.js → provider-D3ZCTHqJ.js} +1 -1
  67. package/dist/ui/assets/{provider-CJvEJd5h.js → provider-DL5HVsgz.js} +1 -1
  68. package/dist/ui/assets/{provider-settings-C4MXTmad.js → provider-settings-D4-pVNMC.js} +1 -1
  69. package/dist/ui/assets/provider-store-access-BbupGN5p.js +1 -0
  70. package/dist/ui/assets/provider-store-access-CeDf0OTu.js +1 -0
  71. package/dist/ui/assets/{providers-CRj5SAmh.js → providers-BCV7QPpP.js} +1 -1
  72. package/dist/ui/assets/{providers-CRbfL8DM.js → providers-dzjrpTMk.js} +2 -2
  73. package/dist/ui/assets/{quick-llm-BGid1Nfi.js → quick-llm-DaP4ryRr.js} +1 -1
  74. package/dist/ui/assets/{realm-inprocess-DCzva8DF.js → realm-inprocess-DnnpW3lX.js} +2 -2
  75. package/dist/ui/assets/{realm-unhandled-rejections-BTpsYElo.js → realm-unhandled-rejections-Bpetsjkq.js} +1 -1
  76. package/dist/ui/assets/{realm-unhandled-rejections-C7iRoy1c.js → realm-unhandled-rejections-CCuyDZV1.js} +1 -1
  77. package/dist/ui/assets/{recovery-screen-AGpbQeDv.js → recovery-screen-7AXEx7XV.js} +1 -1
  78. package/dist/ui/assets/{remote-terminal-view-ClSeTi_D.js → remote-terminal-view-DsZr87Ur.js} +2 -2
  79. package/dist/ui/assets/{restore-BlXpjaKV.js → restore-Cq90Gpjz.js} +1 -1
  80. package/dist/ui/assets/{run-DFuHxEdU.js → run-BKLI816a.js} +2 -2
  81. package/dist/ui/assets/{run-DO1mPczq.js → run-BLk5z5Fd.js} +2 -2
  82. package/dist/ui/assets/{run-Y91MeFjE.js → run-C6C7wjY-.js} +1 -1
  83. package/dist/ui/assets/{run-Chzm2K9l.js → run-Kr2m1I2U.js} +1 -1
  84. package/dist/ui/assets/{serve-command-DpK9bAXS.js → serve-command-CyZJk9MZ.js} +2 -2
  85. package/dist/ui/assets/{serve-runtime-Du96324Z.js → serve-runtime-CTBKr3Z7.js} +1 -1
  86. package/dist/ui/assets/{session-command-memory-B_cbA6Yh.js → session-command-memory-Bqv2ix3h.js} +2 -2
  87. package/dist/ui/assets/{session-jsonl-C_ljwRsC.js → session-jsonl-DY5vSsEY.js} +1 -1
  88. package/dist/ui/assets/{session-jsonl-C-wpqHB3.js → session-jsonl-meQI1UV7.js} +1 -1
  89. package/dist/ui/assets/{session-search-index-B1xJARqI.js → session-search-index-BXkJ-N76.js} +1 -1
  90. package/dist/ui/assets/{setup-feature-flags-remote-CcrXeFlK.js → setup-feature-flags-remote-r75qKqHJ.js} +1 -1
  91. package/dist/ui/assets/{setup-model-catalog-Dk0F9aSl.js → setup-model-catalog-ByEasP3_.js} +1 -1
  92. package/dist/ui/assets/{silent-renew-backoff-NioGtMUC.js → silent-renew-backoff-CASWtcNf.js} +1 -1
  93. package/dist/ui/assets/slicc-version-kdyYkViZ.js +1 -0
  94. package/dist/ui/assets/{soundscape-C2fNkDar.js → soundscape-zvfIWAUQ.js} +1 -1
  95. package/dist/ui/assets/{speak-PgRd2MYk.js → speak-FFaf-I-F.js} +1 -1
  96. package/dist/ui/assets/{sprinkle-manager-Bek-iKlj.js → sprinkle-manager-DBl0Qryg.js} +1 -1
  97. package/dist/ui/assets/{sprinkle-renderer-Cq--FJDO.js → sprinkle-renderer-OV3BTNWr.js} +1 -1
  98. package/dist/ui/assets/{sudo-CKnHwVs3.js → sudo-DJyP7dsU.js} +1 -1
  99. package/dist/ui/assets/{supervisor-BvSLhIJl.js → supervisor-BdTIArZU.js} +1 -1
  100. package/dist/ui/assets/{sync-dialog-BI1IAovz.js → sync-dialog-Br_K5KpJ.js} +1 -1
  101. package/dist/ui/assets/{transformers-env-heAPSI7s.js → transformers-env-DLc7g3N6.js} +1 -1
  102. package/dist/ui/assets/{tray-leader-CL2QWqNl.js → tray-leader-Bv7S20n9.js} +1 -1
  103. package/dist/ui/assets/{tray-leave-runtime-bMGBnwb7.js → tray-leave-runtime-I7apUYzZ.js} +1 -1
  104. package/dist/ui/assets/{tray-sidecar-TWF8cm6D.js → tray-sidecar-M-r6mIft.js} +1 -1
  105. package/dist/ui/assets/{turn-journal-BJ3lAG7q.js → turn-journal-S3k7L0u2.js} +1 -1
  106. package/dist/ui/assets/{upgrade-detection-BCaBJ0pj.js → upgrade-detection-CeUiUHgY.js} +1 -1
  107. package/dist/ui/assets/{voice-reply-xDtxF1e9.js → voice-reply-BJYe4UwJ.js} +1 -1
  108. package/dist/ui/assets/{wc-attach-Dl_c7G9f.js → wc-attach-DAZxEW7e.js} +2 -2
  109. package/dist/ui/assets/{wc-browser-B1ERSJW9.js → wc-browser-CPqLSnWi.js} +1 -1
  110. package/dist/ui/assets/{wc-computers-BfIFM0hI.js → wc-computers-BSO6h83W.js} +1 -1
  111. package/dist/ui/assets/{wc-detached-C13Al4oU.js → wc-detached-BTcUbqyC.js} +1 -1
  112. package/dist/ui/assets/{wc-extension-Dh6SLGz5.js → wc-extension-CZhf2w5M.js} +2 -2
  113. package/dist/ui/assets/{wc-follower-BzTYSMq0.js → wc-follower-ClkUaYlS.js} +3 -3
  114. package/dist/ui/assets/{wc-follower-oauth-ZzvxpowO.js → wc-follower-oauth-BXQZ0Hj3.js} +1 -1
  115. package/dist/ui/assets/{wc-gelatiere-CzSC1zFW.js → wc-gelatiere-D_dcZETl.js} +1 -1
  116. package/dist/ui/assets/{wc-live-DSX8s_4R.js → wc-live-CM0kJV-w.js} +5 -5
  117. package/dist/ui/assets/{wc-nav-Vr1F6uQc.js → wc-nav-DMm0_AmC.js} +2 -2
  118. package/dist/ui/assets/{wc-onboarding-DkovNDTy.js → wc-onboarding-DDUN43nx.js} +2 -2
  119. package/dist/ui/assets/{wc-permissions-BRINha4S.js → wc-permissions-Dpvz8D7r.js} +2 -2
  120. package/dist/ui/assets/{wc-placeholder-CyAKwXOu.js → wc-placeholder-DUTpA2Ya.js} +3 -3
  121. package/dist/ui/assets/{wc-secret-request-5SBbXCyp.js → wc-secret-request-iNh1HLmJ.js} +1 -1
  122. package/dist/ui/assets/{wc-settings-Bw7Izcrk.js → wc-settings-DLevZ4n0.js} +3 -3
  123. package/dist/ui/assets/{wc-shell-DuUMUsfJ.js → wc-shell-BTbyNdYF.js} +3 -3
  124. package/dist/ui/assets/{wc-shortcut-config-C9iY0tja.js → wc-shortcut-config-CB8hU7p1.js} +1 -1
  125. package/dist/ui/assets/{wc-sprinkles-BRbD_nG_.js → wc-sprinkles-D0rQnhwv.js} +2 -2
  126. package/dist/ui/assets/{wc-transcript-export-Dx8FT2HA.js → wc-transcript-export-COXpYoBX.js} +2 -2
  127. package/dist/ui/assets/{wc-tray-D32PCpWc.js → wc-tray-CotD2fxR.js} +4 -4
  128. package/dist/ui/assets/welcome-detection-B6xiu7OK.js +1 -0
  129. package/dist/ui/assets/{whisper-session-CeHEZu8f.js → whisper-session-DGQAkJoW.js} +2 -2
  130. package/dist/ui/assets/{xai-grok-CgqeLG-2.js → xai-grok-Bj8PAnmK.js} +1 -1
  131. package/dist/ui/assets/{xai-grok-CoGq6C-X.js → xai-grok-Cd9-MlJg.js} +1 -1
  132. package/dist/ui/index.html +3 -3
  133. package/dist/ui/packages/webapp/index.html +3 -3
  134. package/package.json +1 -1
  135. package/dist/ui/assets/magick-wasm-BbnwhVj1.js +0 -43
  136. package/dist/ui/assets/provider-store-access-Baic2oBa.js +0 -1
  137. package/dist/ui/assets/provider-store-access-BvztSrUA.js +0 -1
  138. package/dist/ui/assets/slicc-version-QI-OWNWp.js +0 -1
  139. package/dist/ui/assets/welcome-detection-XGuofChI.js +0 -1
@@ -1 +1 @@
1
- import{t as e}from"./logger-DDBAeTLF.js";import"./tray-leader-CL2QWqNl.js";import"./logger-BoSvu4mW.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};
1
+ import{t as e}from"./logger-DDBAeTLF.js";import"./tray-leader-Bv7S20n9.js";import"./logger-BoSvu4mW.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};
@@ -1 +1 @@
1
- import{t as e}from"./logger-LESFN7Hj.js";import{n as t,t as n}from"./tray-leader-status-CpkFr6n7.js";import{n as r,r as i,t as a}from"./lick-urls-CgPiVwD-.js";import"./kernel-worker-DX2Vi4XK.js";const o=e(`lick-ws-bridge`);function s(e){if(e.stopped)return;let t;try{t=e.wsFactory(e.wsUrl)}catch(t){o.error(`Failed to construct lick WebSocket`,{url:e.wsUrl,error:t instanceof Error?t.message:String(t)}),c(e,`construct-threw`);return}e.socket=t,t.onopen=()=>{e.consecutiveFailures>0?o.info(`Lick WebSocket recovered`,{attempts:e.consecutiveFailures}):o.info(`Lick WebSocket connected`),e.consecutiveFailures=0,e.unrecoverableSignalled=!1},t.onmessage=n=>{u(e,t,n.data).catch(e=>{let t=typeof n.data==`string`?n.data.slice(0,200):`[non-string payload]`;o.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)}`:``;c(e,`disconnected code=${n.code}${r}`)},t.onerror=t=>{let n=t.target;o.error(`Lick WebSocket error`,{url:e.wsUrl,readyState:n?.readyState,eventType:t.type})}}function c(e,t){if(e.reconnectHandle!=null){o.debug(`Lick WS failure during pending reconnect — keeping existing timer`,{cause:t});return}e.consecutiveFailures++;let n=Math.min(e.baseDelay*2**(e.consecutiveFailures-1),6e4),r={url:e.wsUrl,attempt:e.consecutiveFailures,cause:t,retryInMs:n};if(e.consecutiveFailures>=3?o.error(`Lick WebSocket still down`,r):o.warn(`Lick WebSocket down`,r),e.consecutiveFailures===20&&!e.unrecoverableSignalled){e.unrecoverableSignalled=!0;try{e.lickManager.emitEvent({type:`session-reload`,targetScoop:void 0,timestamp:new Date().toISOString(),body:{reason:`lick-ws-bridge-down`,url:e.wsUrl,attempts:e.consecutiveFailures}})}catch(e){o.error(`Failed to emit lick-ws-bridge-down signal`,{error:e instanceof Error?e.message:String(e)})}}l(e,n)}function l(e,t){e.stopped||e.reconnectHandle!=null||(e.reconnectHandle=e.setTimer(()=>{e.reconnectHandle=null,s(e)},t))}async function u(e,t,n){let r=JSON.parse(typeof n==`string`?n:String(n));if(r.requestId){let n=r.requestId,i=await g(e,r,n);if(e.stopped||e.socket!==t||t.readyState!==1){o.warn(`Lick reply dropped — socket changed/closed mid-request`,{type:r.type,requestId:n});return}try{t.send(JSON.stringify(i))}catch(e){o.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`){d(e.lickManager,r);return}if(r.type===`navigate_event`){p(e.lickManager,r);return}r.type===`hostfs_invalidate`&&h(e,r)}function d(e,t){let n=typeof t.webhookId==`string`?t.webhookId:null;if(!n)return o.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 o.error(`Webhook event dispatch failed`,{webhookId:n,error:e instanceof Error?e.message:String(e)}),`failed`}}function f(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 p(e,t){let n=f(t);if(!n){o.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 m(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 h(e,t){let n=m(t);if(!n){o.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){o.warn(`hostfs_invalidate handler threw`,{mount:n.mount,error:e instanceof Error?e.message:String(e)})}}async function g(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:_(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:_(e,n.id)}}}case`webhook_event`:return{type:`response`,requestId:r,data:{disposition:d(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 _(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 v(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&&o.warn(`Lick socket close() threw before terminal state`,{readyState:t.readyState,error:e instanceof Error?e.message:String(e)})}}function y(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 s(i),{stop(){v(i)}}}export{y as startLickWsBridge};
1
+ import{t as e}from"./logger-LESFN7Hj.js";import{n as t,t as n}from"./tray-leader-status-CpkFr6n7.js";import{n as r,r as i,t as a}from"./lick-urls-CgPiVwD-.js";import"./kernel-worker-D1Q7ClUJ.js";const o=e(`lick-ws-bridge`);function s(e){if(e.stopped)return;let t;try{t=e.wsFactory(e.wsUrl)}catch(t){o.error(`Failed to construct lick WebSocket`,{url:e.wsUrl,error:t instanceof Error?t.message:String(t)}),c(e,`construct-threw`);return}e.socket=t,t.onopen=()=>{e.consecutiveFailures>0?o.info(`Lick WebSocket recovered`,{attempts:e.consecutiveFailures}):o.info(`Lick WebSocket connected`),e.consecutiveFailures=0,e.unrecoverableSignalled=!1},t.onmessage=n=>{u(e,t,n.data).catch(e=>{let t=typeof n.data==`string`?n.data.slice(0,200):`[non-string payload]`;o.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)}`:``;c(e,`disconnected code=${n.code}${r}`)},t.onerror=t=>{let n=t.target;o.error(`Lick WebSocket error`,{url:e.wsUrl,readyState:n?.readyState,eventType:t.type})}}function c(e,t){if(e.reconnectHandle!=null){o.debug(`Lick WS failure during pending reconnect — keeping existing timer`,{cause:t});return}e.consecutiveFailures++;let n=Math.min(e.baseDelay*2**(e.consecutiveFailures-1),6e4),r={url:e.wsUrl,attempt:e.consecutiveFailures,cause:t,retryInMs:n};if(e.consecutiveFailures>=3?o.error(`Lick WebSocket still down`,r):o.warn(`Lick WebSocket down`,r),e.consecutiveFailures===20&&!e.unrecoverableSignalled){e.unrecoverableSignalled=!0;try{e.lickManager.emitEvent({type:`session-reload`,targetScoop:void 0,timestamp:new Date().toISOString(),body:{reason:`lick-ws-bridge-down`,url:e.wsUrl,attempts:e.consecutiveFailures}})}catch(e){o.error(`Failed to emit lick-ws-bridge-down signal`,{error:e instanceof Error?e.message:String(e)})}}l(e,n)}function l(e,t){e.stopped||e.reconnectHandle!=null||(e.reconnectHandle=e.setTimer(()=>{e.reconnectHandle=null,s(e)},t))}async function u(e,t,n){let r=JSON.parse(typeof n==`string`?n:String(n));if(r.requestId){let n=r.requestId,i=await g(e,r,n);if(e.stopped||e.socket!==t||t.readyState!==1){o.warn(`Lick reply dropped — socket changed/closed mid-request`,{type:r.type,requestId:n});return}try{t.send(JSON.stringify(i))}catch(e){o.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`){d(e.lickManager,r);return}if(r.type===`navigate_event`){p(e.lickManager,r);return}r.type===`hostfs_invalidate`&&h(e,r)}function d(e,t){let n=typeof t.webhookId==`string`?t.webhookId:null;if(!n)return o.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 o.error(`Webhook event dispatch failed`,{webhookId:n,error:e instanceof Error?e.message:String(e)}),`failed`}}function f(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 p(e,t){let n=f(t);if(!n){o.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 m(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 h(e,t){let n=m(t);if(!n){o.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){o.warn(`hostfs_invalidate handler threw`,{mount:n.mount,error:e instanceof Error?e.message:String(e)})}}async function g(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:_(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:_(e,n.id)}}}case`webhook_event`:return{type:`response`,requestId:r,data:{disposition:d(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 _(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 v(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&&o.warn(`Lick socket close() threw before terminal state`,{readyState:t.readyState,error:e instanceof Error?e.message:String(e)})}}function y(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 s(i),{stop(){v(i)}}}export{y as startLickWsBridge};
@@ -1,4 +1,4 @@
1
- import{t as e}from"./compat-0YnuwvMn.js";import{t}from"./logger-DDBAeTLF.js";import{Ct as n,Et as r,St as i,Tt as a,wt as o,xt as s}from"./wc-shell-DuUMUsfJ.js";import{n as c}from"./utf16-clip-CGL7omVm.js";import"./feature-flags-DvsApnS-.js";import"./account-store-lkEr3iIk.js";import{c as l,m as u,n as d,o as f,p}from"./frozen-archive-writer-BJ0wJaR_.js";import{t as m}from"./types-D8gIX-W-.js";import{t as h}from"./record-DtD74Jn0.js";import{i as ee,n as g,s as te,t as _}from"./descriptor-1ECGTjSt.js";import{n as ne,t as re}from"./thinking-level-DCJktR5U.js";var v=`---
1
+ import{t as e}from"./compat-0YnuwvMn.js";import{t}from"./logger-DDBAeTLF.js";import{Ct as n,Et as r,St as i,Tt as a,wt as o,xt as s}from"./wc-shell-BTbyNdYF.js";import{n as c}from"./utf16-clip-CGL7omVm.js";import"./feature-flags-DvsApnS-.js";import"./account-store-CZxeDCj6.js";import{c as l,m as u,n as d,o as f,p}from"./frozen-archive-writer-Cl1Ysgmc.js";import{t as m}from"./types-D8gIX-W-.js";import{t as h}from"./record-DtD74Jn0.js";import{i as ee,n as g,s as te,t as _}from"./descriptor-1ECGTjSt.js";import{n as ne,t as re}from"./thinking-level-DCJktR5U.js";var v=`---
2
2
  writablePaths:
3
3
  - /workspace/CLAUDE.md
4
4
  - /shared/wiki/
@@ -1 +1 @@
1
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./logger-LESFN7Hj.js";import{i as n}from"./feature-flags-QlgHaQc1.js";import{t as r}from"./record-Ban9cWMI.js";import{n as i,o as a,r as o,u as s}from"./descriptor-xRf4P0gd.js";import{n as c,t as l}from"./thinking-level-5x0UAu9N.js";import{t as u}from"./types-D8gIX-W-.js";import{a as d,r as f}from"./memory-budget-CFfevxz_.js";import{f as ee,i as p,o as te}from"./kernel-worker-DX2Vi4XK.js";import{t as m}from"./MEMORY-B9cGngY_.js";import{a as ne,i as re,n as h,o as g,r as _,t as ie}from"./instruction-frontmatter-B48EsYtA.js";import{l as v,n as ae,p as y,r as oe,u as se}from"./frozen-archive-writer-AC06UCUb.js";function b(e){let t=0;for(let n of e)n.timestamp>t&&(t=n.timestamp);return t}function x(e,t){return t>0?e.filter(e=>e.timestamp>t):[...e]}const S=t(`agentic-memory`),ce=e=>[e.memoryPath],le=e=>[`/sessions/`,`/shared/`,...a(e)],ue=`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:new Set([`writablePaths`,`visiblePaths`,`allowedCommands`]),scalarKeys:new Set([`model`,`timeoutSeconds`,`dreamTimeoutSeconds`,`thinkingLevel`])},C=3e4;function w(e){return e===`cone`?`memory-curator`:`memory-curator-${e}`}const T={kind:`curate`,nameFor:w,rivalsFor:e=>[D(e)]},E=`{{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(f);return}catch{}try{await e.mkdir(`/etc`,{recursive:!0}),await e.writeFile(f,m),S.info(`Seeded default ${f}`)}catch(e){S.warn(`Failed to seed ${f}`,{error:I(e)})}}function D(e){return e===`cone`?`memory-dreamer`:`memory-dreamer-${e}`}function O(e,t){let n=e.nameFor(t);return k.test(n)?n:e.nameFor(r)}function me(e,t){let n=k.test(e.nameFor(t))?t:r;return e.rivalsFor?.(n)??[]}const k=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;function A(e,t){return`/scoops/agent-${O(e,t)}`}function he(e){return A(T,e)}const j=he(r);function ge(e){return s({parentJid:null,folder:e?.folder??`cone`})}function _e(e,t){if(t.root===i.root)return e;if(e===i.memoryPath)return t.memoryPath;if(e===`/workspace/skills`||e.startsWith(`/workspace/skills/`))return e;let n=`${i.root}/`;return e===i.root?t.root:e.startsWith(n)?`${t.root}/${e.slice(n.length)}`:e}function ve(e,t){let n=`${o}/`,r=e=>e.some(e=>n.startsWith(e.endsWith(`/`)?e:`${e}/`)),i=e.map(e=>_e(e,t));return r(e)&&!r(i)&&i.push(n),i}async function ye(e){try{if(e.signal?.aborted)return{ok:!1,reason:`aborted`,legacyFallbackSafe:!1};let t=e.instructions??T,n=ge(e.cone),r=A(t,e.cone?.folder??`cone`),i=await be(e.vfs,n),a=t.kind===`dream`?i.dreamTimeoutSeconds:i.timeoutSeconds,o=F(e.sessionArchivePath);try{await we(e.vfs,n.memoryPath,e.sessionArchivePath)}catch(e){return{ok:!1,reason:`snapshot: ${I(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),u=Ee(i,a,De(Oe(i.promptTemplate.includes(E)?i.promptTemplate:`${i.promptTemplate.trimEnd()}\n\n${E}`,{MEMORY_PATH:o,SESSION_ARCHIVE_PATH:s,SESSION_COUNT:String(e.sessionCount),BUDGET_CHARS:String(d(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 f=await ke(Promise.resolve().then(()=>e.spawn(u)),a*1e3+C,e.signal);if(f.type===`timeout`)return S.warn(`Agentic memory wait timed out past the in-run bound + grace`,{timeoutSeconds:a,graceMs:C}),{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:I(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 S.warn(`Agentic memory pass failed`,{error:I(e)}),{ok:!1,reason:I(e),legacyFallbackSafe:!1}}}async function be(e,t=i){try{let n=await e.readFile(f,{encoding:`utf-8`});return xe(typeof n==`string`?n:new TextDecoder().decode(n),t)}catch(e){return S.warn(`Could not load valid ${f}; using built-in default`,{error:I(e)}),xe(m,t)}}function xe(e,t=i){let n=ne(e,`MEMORY.md`),r=ie(n.frontmatter,de),a=h(r,`writablePaths`,ce(t));if(a.length===0)throw Error(`writablePaths must not be empty`);g(a,`writablePaths`);let o=h(r,`visiblePaths`,le(t));g(o,`visiblePaths`);let s=_(r.timeoutSeconds,600,1200),c=_(r.dreamTimeoutSeconds,3600,7200,`dreamTimeoutSeconds`),l=re(r.model,`model`);return{writablePaths:a.map(e=>_e(e,t)),visiblePaths:ve(o,t),allowedCommands:[...new Set([...ue,...h(r,`allowedCommands`,[])])],...l?{model:l}:{},thinkingLevel:Se(r.thinkingLevel),timeoutSeconds:s,dreamTimeoutSeconds:c,promptTemplate:n.body}}function Se(e){if(e===void 0)return`medium`;if(typeof e!=`string`||!c(e))throw Error(`thinkingLevel must be one of ${l.join(`, `)}`);return e}function M(e){return`/sessions/.curated/${e.slice(e.lastIndexOf(`/`)+1)}`}function N(e){return`/sessions/.curation/${e.slice(e.lastIndexOf(`/`)+1)}`}function P(e){return`${N(e)}/base.md`}function F(e){return`${N(e)}/draft.md`}function Ce(e){return`${N(e)}/status.json`}async function we(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(N(n),{recursive:!0}),await e.writeFile(P(n),r),await e.writeFile(F(n),r)}function Te(e,t,n){let r=e.map(e=>e===t?n:e);return r.includes(n)?r:[...r,n]}function Ee(e,t,n,r,i,a,o){let s=e.model===`parent`||e.model===`cone`,c=P(r),l=F(r);return{cwd:i.root,writablePaths:Te(e.writablePaths,i.memoryPath,l),visiblePaths:[...e.visiblePaths,`${N(r)}/`],allowedCommands:e.allowedCommands,prompt:n,thinkingLevel:e.thinkingLevel,persistSession:!0,name:O(o,a?.folder??`cone`),exclusiveWith:me(o,a?.folder??`cone`),...a?.jid?{parentJid:a.jid}:{},notifyOnComplete:!0,successReceiptPath:M(r),mergeOnSuccess:{targetPath:i.memoryPath,basePath:c,draftPath:l},outcomeReceiptPath:Ce(r),maxWallClockMs:t*1e3,...!s&&e.model?{modelId:e.model}:{}}}function De(e,t){if(t===j)return e;let n=`\0SCRATCH\0`;return e.replaceAll(t,n).replaceAll(j,t).replaceAll(n,t)}function Oe(e,t){let n=e;for(let[e,r]of Object.entries(t))n=n.replaceAll(`{{${e}}}`,r);return n}function ke(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 I(e){return e instanceof Error?e.message:String(e)}var Ae=e({DEFAULT_DELTA_LIMITS:()=>B,LIVE_DELTA_DIR:()=>z,LIVE_DELTA_MAX_CHARS:()=>R,LIVE_DELTA_MAX_MESSAGES:()=>200,advanceCuratedThrough:()=>q,curateLiveSessionDelta:()=>K,liveDeltaArchivePath:()=>W,liveDeltaCurationEnabled:()=>U,scheduleLiveDeltaCuration:()=>je,takeDeltaSlice:()=>G});const L=t(`live-session-curation`),R=8e4,z=`/sessions/.live-deltas`,B={maxMessages:200,maxChars:R},V=new Map,H=new Map;function U(){return n(`memory-v2`)&&n(`agentic-memory`)}function W(e,t,n){return`${z}/${e}-${t}-${n}.md`}function G(e,t=B){if(e.length===0)return[];let n=[],r=0;for(let i of e){let e=Ve(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 je(e){if(!U())return Promise.resolve({status:`skipped`,reason:`flag-off`});let t=e.cone.folder||`cone`,n={...e.cone,folder:t},r=Be();if(!r)return L.info(`Live delta curation skipped: agent bridge not published`,{cone:t}),Promise.resolve({status:`skipped`,reason:`no-bridge`});let i={...e,cone:n},a=V.get(t);return a==null?J(i,r):(H.set(t,i),a)}function K(e){let t=e.cone.folder||`cone`,n={...e.cone,folder:t},r={...e,cone:n};if(e.hold===`held`)return Me(r);let i=V.get(t);return i==null?Y(t,Me(r)):i.then(()=>K(r))}async function q(e,t,n){n>0&&await se(async()=>{let r=await v(Z(e)),i=r.findIndex(e=>e.filename===t);if(i===-1||n<=(r[i].curatedThrough??0))return;let{memoryFailed:a,...o}=r[i],s=r.slice();s[i]={...o,curatedThrough:n},await y(Z(e),s),await Ie(e,`${p}/${t}`,n),await e.flush?.()})}function J(e,t){return Y(e.cone.folder||`cone`,K({vfs:e.vfs,cone:e.cone,spawn:e=>t.spawn(e),enabled:!0,hold:`held`,...e.limits?{limits:e.limits}:{}}))}function Y(e,t){return V.set(e,t),t.then(()=>X(e,t),()=>X(e,t)),t}function X(e,t){if(V.get(e)!==t)return;V.delete(e);let n=H.get(e);if(H.delete(e),!n||!U())return;let r=Be();r&&J(n,r).catch(t=>{L.warn(`Follow-up live delta curation failed to start`,{cone:e,error:Q(t)})})}async function Me(e){if(!(e.enabled??U()))return{status:`skipped`,reason:`flag-off`};let t=e.cone.folder||`cone`,n=e.limits??B,r;try{r=await v(Z(e.vfs))}catch(e){return L.warn(`Live delta curation skipped: sessions index unreadable`,{cone:t,error:Q(e)}),{status:`skipped`,reason:`index-unreadable`}}let i=ae(r,t);if(!i?.sessionId)return{status:`skipped`,reason:`no-archive`};let a=await Le(e.vfs,`${p}/${i.filename}`);if(!a)return{status:`skipped`,reason:`no-archive`};let o=await Ne(e.vfs,i.sessionId,i.filename,a,i.curatedThrough??0,n),s=x(a,o);if(s.length===0)return{status:`skipped`,reason:`caught-up`};let c=G(s,n),l=b(c);if(l<=o)return{status:`skipped`,reason:`caught-up`};let u=W(i.sessionId,o,l);await Pe(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 ye({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 q(e.vfs,i.filename,l),L.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 Fe(e.vfs,i.filename,d.reason),L.warn(`Live delta curation failed`,{cone:t,filename:i.filename,reason:d.reason}),{status:`failed`,reason:d.reason,filename:i.filename})}async function Ne(e,t,n,r,i,a){let o=i;for(let n=0;n<50;n+=1){let n=x(r,o);if(n.length===0)break;let i=b(G(n,a??B));if(i<=o||!await Re(e,W(t,o,i)))break;o=i}return o>i&&await q(e,n,o),o}async function Pe(e,t,n,r){let i={id:t.sessionId,sessionId:t.sessionId,title:t.title,frozenAt:t.frozenAt,createdAt:n[0]?.timestamp??0,updatedAt:b(n),messageCount:n.length,messages:[...n],...t.cone?{cone:t.cone}:{},...t.coneLabel?{coneLabel:t.coneLabel}:{}};await e.mkdir(z,{recursive:!0}),await e.writeFile(r,oe(i))}async function Fe(e,t,n){try{await se(async()=>{let r=await v(Z(e)),i=r.findIndex(e=>e.filename===t);if(i===-1)return;let a=r.slice();a[i]={...r[i],memoryFailed:n.slice(0,300)},await y(Z(e),a),await e.flush?.()})}catch(e){L.warn(`Failed to record live curation failure`,{filename:t,error:Q(e)})}}async function Ie(e,t,n){let r;try{r=await ze(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 Le(e,t){try{return te(await ze(e,t)).messages}catch(e){if($(e))return null;throw e}}async function Re(e,t){try{return await e.readFile(M(t),{encoding:`utf-8`}),!0}catch(e){if($(e))return!1;throw e}}async function ze(e,t){let n=await e.readFile(t,{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}function Be(){return globalThis.__slicc_agent}function Ve(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 u?e.code===`ENOENT`:typeof e!=`object`||!e||!(`code`in e)?!1:e.code===`ENOENT`}export{D as a,w as i,U as n,ye as o,Ae as r,pe as s,K as t};
1
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./logger-LESFN7Hj.js";import{i as n}from"./feature-flags-QlgHaQc1.js";import{t as r}from"./record-Ban9cWMI.js";import{n as i,o as a,r as o,u as s}from"./descriptor-xRf4P0gd.js";import{n as c,t as l}from"./thinking-level-5x0UAu9N.js";import{t as u}from"./types-D8gIX-W-.js";import{a as d,r as f}from"./memory-budget-CFfevxz_.js";import{f as ee,i as p,o as te}from"./kernel-worker-D1Q7ClUJ.js";import{t as m}from"./MEMORY-B9cGngY_.js";import{a as ne,i as re,n as h,o as g,r as _,t as ie}from"./instruction-frontmatter-B48EsYtA.js";import{l as v,n as ae,p as y,r as oe,u as se}from"./frozen-archive-writer-BMGO4Pl3.js";function b(e){let t=0;for(let n of e)n.timestamp>t&&(t=n.timestamp);return t}function x(e,t){return t>0?e.filter(e=>e.timestamp>t):[...e]}const S=t(`agentic-memory`),ce=e=>[e.memoryPath],le=e=>[`/sessions/`,`/shared/`,...a(e)],ue=`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:new Set([`writablePaths`,`visiblePaths`,`allowedCommands`]),scalarKeys:new Set([`model`,`timeoutSeconds`,`dreamTimeoutSeconds`,`thinkingLevel`])},C=3e4;function w(e){return e===`cone`?`memory-curator`:`memory-curator-${e}`}const T={kind:`curate`,nameFor:w,rivalsFor:e=>[D(e)]},E=`{{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(f);return}catch{}try{await e.mkdir(`/etc`,{recursive:!0}),await e.writeFile(f,m),S.info(`Seeded default ${f}`)}catch(e){S.warn(`Failed to seed ${f}`,{error:I(e)})}}function D(e){return e===`cone`?`memory-dreamer`:`memory-dreamer-${e}`}function O(e,t){let n=e.nameFor(t);return k.test(n)?n:e.nameFor(r)}function me(e,t){let n=k.test(e.nameFor(t))?t:r;return e.rivalsFor?.(n)??[]}const k=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;function A(e,t){return`/scoops/agent-${O(e,t)}`}function he(e){return A(T,e)}const j=he(r);function ge(e){return s({parentJid:null,folder:e?.folder??`cone`})}function _e(e,t){if(t.root===i.root)return e;if(e===i.memoryPath)return t.memoryPath;if(e===`/workspace/skills`||e.startsWith(`/workspace/skills/`))return e;let n=`${i.root}/`;return e===i.root?t.root:e.startsWith(n)?`${t.root}/${e.slice(n.length)}`:e}function ve(e,t){let n=`${o}/`,r=e=>e.some(e=>n.startsWith(e.endsWith(`/`)?e:`${e}/`)),i=e.map(e=>_e(e,t));return r(e)&&!r(i)&&i.push(n),i}async function ye(e){try{if(e.signal?.aborted)return{ok:!1,reason:`aborted`,legacyFallbackSafe:!1};let t=e.instructions??T,n=ge(e.cone),r=A(t,e.cone?.folder??`cone`),i=await be(e.vfs,n),a=t.kind===`dream`?i.dreamTimeoutSeconds:i.timeoutSeconds,o=F(e.sessionArchivePath);try{await we(e.vfs,n.memoryPath,e.sessionArchivePath)}catch(e){return{ok:!1,reason:`snapshot: ${I(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),u=Ee(i,a,De(Oe(i.promptTemplate.includes(E)?i.promptTemplate:`${i.promptTemplate.trimEnd()}\n\n${E}`,{MEMORY_PATH:o,SESSION_ARCHIVE_PATH:s,SESSION_COUNT:String(e.sessionCount),BUDGET_CHARS:String(d(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 f=await ke(Promise.resolve().then(()=>e.spawn(u)),a*1e3+C,e.signal);if(f.type===`timeout`)return S.warn(`Agentic memory wait timed out past the in-run bound + grace`,{timeoutSeconds:a,graceMs:C}),{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:I(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 S.warn(`Agentic memory pass failed`,{error:I(e)}),{ok:!1,reason:I(e),legacyFallbackSafe:!1}}}async function be(e,t=i){try{let n=await e.readFile(f,{encoding:`utf-8`});return xe(typeof n==`string`?n:new TextDecoder().decode(n),t)}catch(e){return S.warn(`Could not load valid ${f}; using built-in default`,{error:I(e)}),xe(m,t)}}function xe(e,t=i){let n=ne(e,`MEMORY.md`),r=ie(n.frontmatter,de),a=h(r,`writablePaths`,ce(t));if(a.length===0)throw Error(`writablePaths must not be empty`);g(a,`writablePaths`);let o=h(r,`visiblePaths`,le(t));g(o,`visiblePaths`);let s=_(r.timeoutSeconds,600,1200),c=_(r.dreamTimeoutSeconds,3600,7200,`dreamTimeoutSeconds`),l=re(r.model,`model`);return{writablePaths:a.map(e=>_e(e,t)),visiblePaths:ve(o,t),allowedCommands:[...new Set([...ue,...h(r,`allowedCommands`,[])])],...l?{model:l}:{},thinkingLevel:Se(r.thinkingLevel),timeoutSeconds:s,dreamTimeoutSeconds:c,promptTemplate:n.body}}function Se(e){if(e===void 0)return`medium`;if(typeof e!=`string`||!c(e))throw Error(`thinkingLevel must be one of ${l.join(`, `)}`);return e}function M(e){return`/sessions/.curated/${e.slice(e.lastIndexOf(`/`)+1)}`}function N(e){return`/sessions/.curation/${e.slice(e.lastIndexOf(`/`)+1)}`}function P(e){return`${N(e)}/base.md`}function F(e){return`${N(e)}/draft.md`}function Ce(e){return`${N(e)}/status.json`}async function we(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(N(n),{recursive:!0}),await e.writeFile(P(n),r),await e.writeFile(F(n),r)}function Te(e,t,n){let r=e.map(e=>e===t?n:e);return r.includes(n)?r:[...r,n]}function Ee(e,t,n,r,i,a,o){let s=e.model===`parent`||e.model===`cone`,c=P(r),l=F(r);return{cwd:i.root,writablePaths:Te(e.writablePaths,i.memoryPath,l),visiblePaths:[...e.visiblePaths,`${N(r)}/`],allowedCommands:e.allowedCommands,prompt:n,thinkingLevel:e.thinkingLevel,persistSession:!0,name:O(o,a?.folder??`cone`),exclusiveWith:me(o,a?.folder??`cone`),...a?.jid?{parentJid:a.jid}:{},notifyOnComplete:!0,successReceiptPath:M(r),mergeOnSuccess:{targetPath:i.memoryPath,basePath:c,draftPath:l},outcomeReceiptPath:Ce(r),maxWallClockMs:t*1e3,...!s&&e.model?{modelId:e.model}:{}}}function De(e,t){if(t===j)return e;let n=`\0SCRATCH\0`;return e.replaceAll(t,n).replaceAll(j,t).replaceAll(n,t)}function Oe(e,t){let n=e;for(let[e,r]of Object.entries(t))n=n.replaceAll(`{{${e}}}`,r);return n}function ke(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 I(e){return e instanceof Error?e.message:String(e)}var Ae=e({DEFAULT_DELTA_LIMITS:()=>B,LIVE_DELTA_DIR:()=>z,LIVE_DELTA_MAX_CHARS:()=>R,LIVE_DELTA_MAX_MESSAGES:()=>200,advanceCuratedThrough:()=>q,curateLiveSessionDelta:()=>K,liveDeltaArchivePath:()=>W,liveDeltaCurationEnabled:()=>U,scheduleLiveDeltaCuration:()=>je,takeDeltaSlice:()=>G});const L=t(`live-session-curation`),R=8e4,z=`/sessions/.live-deltas`,B={maxMessages:200,maxChars:R},V=new Map,H=new Map;function U(){return n(`memory-v2`)&&n(`agentic-memory`)}function W(e,t,n){return`${z}/${e}-${t}-${n}.md`}function G(e,t=B){if(e.length===0)return[];let n=[],r=0;for(let i of e){let e=Ve(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 je(e){if(!U())return Promise.resolve({status:`skipped`,reason:`flag-off`});let t=e.cone.folder||`cone`,n={...e.cone,folder:t},r=Be();if(!r)return L.info(`Live delta curation skipped: agent bridge not published`,{cone:t}),Promise.resolve({status:`skipped`,reason:`no-bridge`});let i={...e,cone:n},a=V.get(t);return a==null?J(i,r):(H.set(t,i),a)}function K(e){let t=e.cone.folder||`cone`,n={...e.cone,folder:t},r={...e,cone:n};if(e.hold===`held`)return Me(r);let i=V.get(t);return i==null?Y(t,Me(r)):i.then(()=>K(r))}async function q(e,t,n){n>0&&await se(async()=>{let r=await v(Z(e)),i=r.findIndex(e=>e.filename===t);if(i===-1||n<=(r[i].curatedThrough??0))return;let{memoryFailed:a,...o}=r[i],s=r.slice();s[i]={...o,curatedThrough:n},await y(Z(e),s),await Ie(e,`${p}/${t}`,n),await e.flush?.()})}function J(e,t){return Y(e.cone.folder||`cone`,K({vfs:e.vfs,cone:e.cone,spawn:e=>t.spawn(e),enabled:!0,hold:`held`,...e.limits?{limits:e.limits}:{}}))}function Y(e,t){return V.set(e,t),t.then(()=>X(e,t),()=>X(e,t)),t}function X(e,t){if(V.get(e)!==t)return;V.delete(e);let n=H.get(e);if(H.delete(e),!n||!U())return;let r=Be();r&&J(n,r).catch(t=>{L.warn(`Follow-up live delta curation failed to start`,{cone:e,error:Q(t)})})}async function Me(e){if(!(e.enabled??U()))return{status:`skipped`,reason:`flag-off`};let t=e.cone.folder||`cone`,n=e.limits??B,r;try{r=await v(Z(e.vfs))}catch(e){return L.warn(`Live delta curation skipped: sessions index unreadable`,{cone:t,error:Q(e)}),{status:`skipped`,reason:`index-unreadable`}}let i=ae(r,t);if(!i?.sessionId)return{status:`skipped`,reason:`no-archive`};let a=await Le(e.vfs,`${p}/${i.filename}`);if(!a)return{status:`skipped`,reason:`no-archive`};let o=await Ne(e.vfs,i.sessionId,i.filename,a,i.curatedThrough??0,n),s=x(a,o);if(s.length===0)return{status:`skipped`,reason:`caught-up`};let c=G(s,n),l=b(c);if(l<=o)return{status:`skipped`,reason:`caught-up`};let u=W(i.sessionId,o,l);await Pe(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 ye({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 q(e.vfs,i.filename,l),L.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 Fe(e.vfs,i.filename,d.reason),L.warn(`Live delta curation failed`,{cone:t,filename:i.filename,reason:d.reason}),{status:`failed`,reason:d.reason,filename:i.filename})}async function Ne(e,t,n,r,i,a){let o=i;for(let n=0;n<50;n+=1){let n=x(r,o);if(n.length===0)break;let i=b(G(n,a??B));if(i<=o||!await Re(e,W(t,o,i)))break;o=i}return o>i&&await q(e,n,o),o}async function Pe(e,t,n,r){let i={id:t.sessionId,sessionId:t.sessionId,title:t.title,frozenAt:t.frozenAt,createdAt:n[0]?.timestamp??0,updatedAt:b(n),messageCount:n.length,messages:[...n],...t.cone?{cone:t.cone}:{},...t.coneLabel?{coneLabel:t.coneLabel}:{}};await e.mkdir(z,{recursive:!0}),await e.writeFile(r,oe(i))}async function Fe(e,t,n){try{await se(async()=>{let r=await v(Z(e)),i=r.findIndex(e=>e.filename===t);if(i===-1)return;let a=r.slice();a[i]={...r[i],memoryFailed:n.slice(0,300)},await y(Z(e),a),await e.flush?.()})}catch(e){L.warn(`Failed to record live curation failure`,{filename:t,error:Q(e)})}}async function Ie(e,t,n){let r;try{r=await ze(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 Le(e,t){try{return te(await ze(e,t)).messages}catch(e){if($(e))return null;throw e}}async function Re(e,t){try{return await e.readFile(M(t),{encoding:`utf-8`}),!0}catch(e){if($(e))return!1;throw e}}async function ze(e,t){let n=await e.readFile(t,{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}function Be(){return globalThis.__slicc_agent}function Ve(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 u?e.code===`ENOENT`:typeof e!=`object`||!e||!(`code`in e)?!1:e.code===`ENOENT`}export{D as a,w as i,U as n,ye as o,Ae as r,pe as s,K as t};
@@ -1 +1 @@
1
- import{t as e}from"./logger-LESFN7Hj.js";import{n as t}from"./record-Ban9cWMI.js";import{t as n}from"./types-D8gIX-W-.js";import{i as r,o as i,p as a}from"./kernel-worker-DX2Vi4XK.js";import{a as o,c as s,d as c,f as l,l as u,n as d,p as f,r as p,s as m,t as h,u as g}from"./frozen-archive-writer-AC06UCUb.js";const _=e(`live-session-snapshot`);function v(e,t){return`/scoops/${e}/sessions/${t}`}function y(e){let t=e.cone.folder||`cone`,n=e.sessionsDir??`/sessions`,r=a(e.messages,{source:e.cone.label??t,uncapped:!0});return g(async()=>e.stillValid&&!e.stillValid()?(_.info(`Live session snapshot skipped: session gone before the write`,{cone:t,sessionsDir:n,trigger:e.trigger}),null):b(e,t,n,r),c(n))}async function b(e,n,r,i){let a=e.now??Date.now,c=await u(e.vfs,r),f=d(c,n),g=f?await T(e.vfs,r,f):null,v=g===null?0:f?.liveThrough??w(g),y=C(i,g??[],v),b=[...g??[],...y],x=Math.max(v,w(i)),S=f?.filename??s(n),E=f?.frozenAt??new Date(a()).toISOString(),D=o(b),O=f?.title&&!m(f.title)?f.title:D,k=(f?.compactions??0)+1,A={cone:n,...n!==`cone`&&e.cone.label?{coneLabel:e.cone.label}:{}},j=f?.sessionId??crypto.randomUUID(),M={id:t({folder:n}),sessionId:j,title:O,frozenAt:E,createdAt:b[0]?.timestamp||a(),updatedAt:a(),messageCount:b.length,messages:b,...A,live:!0,liveThrough:x,compactions:k,...f?.curatedThrough?{curatedThrough:f.curatedThrough}:{}},N={filename:S,sessionId:j,title:O,frozenAt:E,messageCount:b.length,...A,...f?.icon?{icon:f.icon}:{},live:!0,liveThrough:x,compactions:k,...f?.curatedThrough?{curatedThrough:f.curatedThrough}:{},...f?.memoryFailed?{memoryFailed:f.memoryFailed}:{}};await h(e.vfs,r);let P=`${r}/${S}`;return await e.vfs.writeFile(P,p(M)),await l(e.vfs,N,r),await e.vfs.flush(),_.info(`Live session snapshot written`,{cone:n,sessionsDir:r,filename:S,trigger:e.trigger,appended:y.length,total:b.length,compactions:k}),{transcriptPath:P,entry:N,appended:y.length}}function x(e,t){let n=t||`cone`;return g(async()=>{let t=await u(e),i=d(t,n);if(!i)return!1;let{live:a,liveThrough:o,...s}=i,c={...s,pendingEnrichment:!0};return await f(e,t.map(e=>e===i?c:e)),await E(e,`${r}/${i.filename}`),await e.flush(),_.info(`Live session snapshot finalized`,{cone:n,filename:i.filename}),!0})}function S(e,t){let i=t||`cone`;return g(async()=>{let t=await u(e),a=t.filter(e=>e.live===!0&&(e.cone??`cone`)===i);if(a.length===0)return 0;await f(e,t.filter(e=>!a.includes(e)));for(let t of a){try{await e.rm(`${r}/${t.filename}`)}catch(e){if(!(e instanceof n)||e.code!==`ENOENT`)throw e}let{removeSessionJsonl:i}=await import(`./session-jsonl-C-wpqHB3.js`);await i(e,t.filename)}let{invalidateSessionSearchIndex:o}=await import(`./session-search-index-B1xJARqI.js`);return await o(e),await e.flush(),_.info(`Live session snapshot discarded`,{cone:i,removed:a.length}),a.length})}function C(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 w(e){let t=0;for(let n of e)n.timestamp>t&&(t=n.timestamp);return t}async function T(e,t,r){try{let n=await e.readFile(`${t}/${r.filename}`,{encoding:`utf-8`}),a=typeof n==`string`?n:new TextDecoder().decode(n);return i(a).messages}catch(e){if(!(e instanceof n)||e.code!==`ENOENT`)throw e;return _.warn(`Live snapshot archive missing; rewriting from the agent history`,{sessionsDir:t,filename:r.filename}),null}}async function E(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 n&&e.code===`ENOENT`)return;throw e}}export{S as discardLiveSnapshot,x as finalizeLiveSnapshot,v as scoopSessionsDir,y as snapshotLiveSession};
1
+ import{t as e}from"./logger-LESFN7Hj.js";import{n as t}from"./record-Ban9cWMI.js";import{t as n}from"./types-D8gIX-W-.js";import{i as r,o as i,p as a}from"./kernel-worker-D1Q7ClUJ.js";import{a as o,c as s,d as c,f as l,l as u,n as d,p as f,r as p,s as m,t as h,u as g}from"./frozen-archive-writer-BMGO4Pl3.js";const _=e(`live-session-snapshot`);function v(e,t){return`/scoops/${e}/sessions/${t}`}function y(e){let t=e.cone.folder||`cone`,n=e.sessionsDir??`/sessions`,r=a(e.messages,{source:e.cone.label??t,uncapped:!0});return g(async()=>e.stillValid&&!e.stillValid()?(_.info(`Live session snapshot skipped: session gone before the write`,{cone:t,sessionsDir:n,trigger:e.trigger}),null):b(e,t,n,r),c(n))}async function b(e,n,r,i){let a=e.now??Date.now,c=await u(e.vfs,r),f=d(c,n),g=f?await T(e.vfs,r,f):null,v=g===null?0:f?.liveThrough??w(g),y=C(i,g??[],v),b=[...g??[],...y],x=Math.max(v,w(i)),S=f?.filename??s(n),E=f?.frozenAt??new Date(a()).toISOString(),D=o(b),O=f?.title&&!m(f.title)?f.title:D,k=(f?.compactions??0)+1,A={cone:n,...n!==`cone`&&e.cone.label?{coneLabel:e.cone.label}:{}},j=f?.sessionId??crypto.randomUUID(),M={id:t({folder:n}),sessionId:j,title:O,frozenAt:E,createdAt:b[0]?.timestamp||a(),updatedAt:a(),messageCount:b.length,messages:b,...A,live:!0,liveThrough:x,compactions:k,...f?.curatedThrough?{curatedThrough:f.curatedThrough}:{}},N={filename:S,sessionId:j,title:O,frozenAt:E,messageCount:b.length,...A,...f?.icon?{icon:f.icon}:{},live:!0,liveThrough:x,compactions:k,...f?.curatedThrough?{curatedThrough:f.curatedThrough}:{},...f?.memoryFailed?{memoryFailed:f.memoryFailed}:{}};await h(e.vfs,r);let P=`${r}/${S}`;return await e.vfs.writeFile(P,p(M)),await l(e.vfs,N,r),await e.vfs.flush(),_.info(`Live session snapshot written`,{cone:n,sessionsDir:r,filename:S,trigger:e.trigger,appended:y.length,total:b.length,compactions:k}),{transcriptPath:P,entry:N,appended:y.length}}function x(e,t){let n=t||`cone`;return g(async()=>{let t=await u(e),i=d(t,n);if(!i)return!1;let{live:a,liveThrough:o,...s}=i,c={...s,pendingEnrichment:!0};return await f(e,t.map(e=>e===i?c:e)),await E(e,`${r}/${i.filename}`),await e.flush(),_.info(`Live session snapshot finalized`,{cone:n,filename:i.filename}),!0})}function S(e,t){let i=t||`cone`;return g(async()=>{let t=await u(e),a=t.filter(e=>e.live===!0&&(e.cone??`cone`)===i);if(a.length===0)return 0;await f(e,t.filter(e=>!a.includes(e)));for(let t of a){try{await e.rm(`${r}/${t.filename}`)}catch(e){if(!(e instanceof n)||e.code!==`ENOENT`)throw e}let{removeSessionJsonl:i}=await import(`./session-jsonl-meQI1UV7.js`);await i(e,t.filename)}let{invalidateSessionSearchIndex:o}=await import(`./session-search-index-BXkJ-N76.js`);return await o(e),await e.flush(),_.info(`Live session snapshot discarded`,{cone:i,removed:a.length}),a.length})}function C(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 w(e){let t=0;for(let n of e)n.timestamp>t&&(t=n.timestamp);return t}async function T(e,t,r){try{let n=await e.readFile(`${t}/${r.filename}`,{encoding:`utf-8`}),a=typeof n==`string`?n:new TextDecoder().decode(n);return i(a).messages}catch(e){if(!(e instanceof n)||e.code!==`ENOENT`)throw e;return _.warn(`Live snapshot archive missing; rewriting from the agent history`,{sessionsDir:t,filename:r.filename}),null}}async function E(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 n&&e.code===`ENOENT`)return;throw e}}export{S as discardLiveSnapshot,x as finalizeLiveSnapshot,v as scoopSessionsDir,y as snapshotLiveSession};
@@ -1,2 +1,2 @@
1
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./logger-LESFN7Hj.js";import{c as n}from"./account-store-BJFsDWSZ.js";import{a as r}from"./diagnostics-B-5VkVir.js";import{a as i}from"./compat-Ba4wPWa_.js";import{r as a,s as o}from"./legacy-api-aliases-C3_OAyZB.js";import{n as s}from"./pi-transcript-context-CE8ItnBz.js";var c=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(`
1
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./logger-LESFN7Hj.js";import{c as n}from"./account-store-XLm6U_oB.js";import{a as r}from"./diagnostics-B-5VkVir.js";import{a as i}from"./compat-Ba4wPWa_.js";import{r as a,s as o}from"./legacy-api-aliases-C3_OAyZB.js";import{n as s}from"./pi-transcript-context-CE8ItnBz.js";var c=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{a as e}from"./diagnostics-B-5VkVir.js";import{a as t}from"./compat-0YnuwvMn.js";import{r as n,s as r}from"./legacy-api-aliases-D-3Ssy_B.js";import{t as i}from"./logger-DDBAeTLF.js";import{b as a}from"./account-store-lkEr3iIk.js";import{n as o}from"./pi-transcript-context-DZyPy5yf.js";var s=i(`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(`
1
+ import{a as e}from"./diagnostics-B-5VkVir.js";import{a as t}from"./compat-0YnuwvMn.js";import{r as n,s as r}from"./legacy-api-aliases-D-3Ssy_B.js";import{t as i}from"./logger-DDBAeTLF.js";import{b as a}from"./account-store-CZxeDCj6.js";import{n as o}from"./pi-transcript-context-DZyPy5yf.js";var s=i(`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,r={})=>e.id===u?y(e,`Local LLM is not configured. Set base URL and model IDs in Settings.`):e.baseUrl?n(h(e),o(t),g(r)):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?r(h(e),o(t),g(n)):y(e,`Local LLM base URL is required (e.g. http://localhost:11434/v1).`);function y(t,n){let r=e(),i={role:`assistant`,content:[],api:t.api,provider:t.provider,model:t.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(){t({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};