sliccy 6.255.2 → 6.255.3

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 (135) hide show
  1. package/dist/ui/.vite/manifest.json +179 -179
  2. package/dist/ui/assets/{account-store-Cf3nt4Ba.js → account-store-BtAuf6gP.js} +1 -1
  3. package/dist/ui/assets/{account-store-D9MqJPUO.js → account-store-DA_90c6T.js} +1 -1
  4. package/dist/ui/assets/{adobe-DKSayuDM.js → adobe-Da0W7qIr.js} +1 -1
  5. package/dist/ui/assets/{adobe-DYOfQktE.js → adobe-YnzczEkw.js} +1 -1
  6. package/dist/ui/assets/{agent-panels-B6RysulJ.js → agent-panels-lFb6k83q.js} +1 -1
  7. package/dist/ui/assets/{almost-bash-shell-headless-DWCqrjAh.js → almost-bash-shell-headless-DyTPbJyI.js} +15 -15
  8. package/dist/ui/assets/{apply-layout-B2wjm9RK.js → apply-layout-BZyrDakE.js} +1 -1
  9. package/dist/ui/assets/{azure-openai-BEymMYkN.js → azure-openai-CHy0sRjX.js} +1 -1
  10. package/dist/ui/assets/{azure-openai-D3MtNKIb.js → azure-openai-Dab1fd9g.js} +1 -1
  11. package/dist/ui/assets/{cdp-NQEfSnv-.js → cdp-upNCezZ-.js} +1 -1
  12. package/dist/ui/assets/{cerebras-DpTZM6yA.js → cerebras-BDlAuvUB.js} +1 -1
  13. package/dist/ui/assets/{cerebras-dJVR9WAK.js → cerebras-DBUaswoE.js} +1 -1
  14. package/dist/ui/assets/{composer-speech-NZukAzEx.js → composer-speech-D3cUCzdJ.js} +1 -1
  15. package/dist/ui/assets/{connect-surface-BQzGigyz.js → connect-surface-et4-NzTy.js} +1 -1
  16. package/dist/ui/assets/{directed-approval-SNvKLDBW.js → directed-approval-Cf4-Aztt.js} +1 -1
  17. package/dist/ui/assets/{emscripten-vfs-hook-DlsQ8ZVb.js → emscripten-vfs-hook-DtWxmRin.js} +1 -1
  18. package/dist/ui/assets/{frozen-archive-writer-vxDXEHCh.js → frozen-archive-writer-BjLxnx_c.js} +1 -1
  19. package/dist/ui/assets/{frozen-session-delete-D4IkvnMA.js → frozen-session-delete-DuxpPtSG.js} +1 -1
  20. package/dist/ui/assets/{frozen-session-identity-C4zhLmVQ.js → frozen-session-identity-D5Qj252f.js} +1 -1
  21. package/dist/ui/assets/{gelatiere-unit-CjjU5kDS.js → gelatiere-unit-C3nmTset.js} +1 -1
  22. package/dist/ui/assets/{github-BXHpiPPY.js → github-B2GJ0_zy.js} +1 -1
  23. package/dist/ui/assets/{github-B4AdxnN3.js → github-C7Rye1ka.js} +1 -1
  24. package/dist/ui/assets/{github-copilot-CzppBKxA.js → github-copilot-CMYjADkM.js} +1 -1
  25. package/dist/ui/assets/{github-copilot-BM_TojeH.js → github-copilot-CVXhq9JM.js} +1 -1
  26. package/dist/ui/assets/{go-driver-BO7YotSu.js → go-driver-D3mNk1Cz.js} +1 -1
  27. package/dist/ui/assets/{hear-C3qj675z.js → hear-wESywxve.js} +1 -1
  28. package/dist/ui/assets/{js-realm-worker-CuE-jRf6.js → js-realm-worker-Cf01SG1p.js} +2 -2
  29. package/dist/ui/assets/{jsh-executor-CFHNjBVO.js → jsh-executor-kIjCmwlk.js} +3 -3
  30. package/dist/ui/assets/{kernel-worker-DVGTdmUT.js → kernel-worker-Cd7FNbq1.js} +8 -8
  31. package/dist/ui/assets/{lick-ws-bridge-CHms6qG0.js → lick-ws-bridge-De0I-k0t.js} +1 -1
  32. package/dist/ui/assets/{lick-ws-bridge-Dy2Mt2to.js → lick-ws-bridge-DjTDdI5j.js} +1 -1
  33. package/dist/ui/assets/{live-session-curation-D2o8L_Ai.js → live-session-curation-BLNb7yO2.js} +1 -1
  34. package/dist/ui/assets/{live-session-curation-CNVAnSeA.js → live-session-curation-BU8kS39E.js} +1 -1
  35. package/dist/ui/assets/{live-session-snapshot-Dc6xeNMs.js → live-session-snapshot-DrbReY-A.js} +1 -1
  36. package/dist/ui/assets/{local-llm-7bD_TE39.js → local-llm-8SpPgRow.js} +1 -1
  37. package/dist/ui/assets/{local-llm-BO0X_FdV.js → local-llm-BbYFHz0B.js} +1 -1
  38. package/dist/ui/assets/{main-2eWFiMZP.js → main-COVMMx36.js} +3 -3
  39. package/dist/ui/assets/{main-cherry-DQMKYz99.js → main-cherry-D9T4bwdP.js} +1 -1
  40. package/dist/ui/assets/{mcp-command-CYwILBJU.js → mcp-command-CtrIXANQ.js} +10 -10
  41. package/dist/ui/assets/{memory-curation-seam-D7V2h65G.js → memory-curation-seam-Bft0k7Nt.js} +1 -1
  42. package/dist/ui/assets/{memory-health-Da4v0FoP.js → memory-health-c3V8_UXM.js} +1 -1
  43. package/dist/ui/assets/{memory-write-execute-DZf1bQma.js → memory-write-execute-GXd2Y5xo.js} +1 -1
  44. package/dist/ui/assets/{merge-folded-cost-into-frozen-DEDsffs3.js → merge-folded-cost-into-frozen-nSzCfMp_.js} +1 -1
  45. package/dist/ui/assets/{new-session-Dl_kGyLP.js → new-session-DYZCZ-m9.js} +2 -2
  46. package/dist/ui/assets/{oauth-bootstrap-CMWNKl7f.js → oauth-bootstrap-DWYVCuo7.js} +2 -2
  47. package/dist/ui/assets/{onboarding-orchestrator-DwL8pKbb.js → onboarding-orchestrator-CRYn49zQ.js} +1 -1
  48. package/dist/ui/assets/{openai-codex-BZDRCcp1.js → openai-codex-_oTh8O8z.js} +1 -1
  49. package/dist/ui/assets/{openai-codex-BUB7Y9ke.js → openai-codex-h0hcRP1H.js} +1 -1
  50. package/dist/ui/assets/{openrouter-DC8qHkPU.js → openrouter-CTG7CLV0.js} +1 -1
  51. package/dist/ui/assets/{openrouter-CNVt5NVc.js → openrouter-DPc6XChB.js} +1 -1
  52. package/dist/ui/assets/{openrouter-free-CSdi9NpY.js → openrouter-free-Cyz4nITt.js} +1 -1
  53. package/dist/ui/assets/{openrouter-free-LLAN6Y1f.js → openrouter-free-I-AEJ7le.js} +1 -1
  54. package/dist/ui/assets/{openrouter-oauth-CzgDjRKa.js → openrouter-oauth-CHgJJDbk.js} +1 -1
  55. package/dist/ui/assets/{openrouter-oauth-g5aryBlJ.js → openrouter-oauth-DdDXWH_t.js} +1 -1
  56. package/dist/ui/assets/{panel-rpc-handlers-RMWMDINZ.js → panel-rpc-handlers-Bu75byKj.js} +2 -2
  57. package/dist/ui/assets/{panelize-shell-D2NlUvEo.js → panelize-shell-C3LIuKpI.js} +1 -1
  58. package/dist/ui/assets/{pi-edit-execution-Chw4K4FR.js → pi-edit-execution-BCFPZ7AL.js} +1 -1
  59. package/dist/ui/assets/{provider-C9t-j9Xp.js → provider-DO51w0di.js} +1 -1
  60. package/dist/ui/assets/{provider-settings-B9uwgniy.js → provider-settings-DY5yz2fk.js} +1 -1
  61. package/dist/ui/assets/provider-store-access-BitzbXLx.js +1 -0
  62. package/dist/ui/assets/provider-store-access-C_klgpk-.js +1 -0
  63. package/dist/ui/assets/{provider-Ce28E3zD.js → provider-zzJki9w5.js} +1 -1
  64. package/dist/ui/assets/{providers-D21kuf5m.js → providers-DKP00_I1.js} +1 -1
  65. package/dist/ui/assets/{providers-DqmhARGF.js → providers-c8aZdtVp.js} +2 -2
  66. package/dist/ui/assets/{quick-llm-BQMpHhX4.js → quick-llm-DaLr-DKD.js} +1 -1
  67. package/dist/ui/assets/{realm-inprocess-5cOwJIYJ.js → realm-inprocess-DaqKKCx6.js} +2 -2
  68. package/dist/ui/assets/{realm-unhandled-rejections-C5d8Tbn2.js → realm-unhandled-rejections-B4G_thge.js} +1 -1
  69. package/dist/ui/assets/{realm-unhandled-rejections-D_AkSzhp.js → realm-unhandled-rejections-K3YIZowK.js} +1 -1
  70. package/dist/ui/assets/{remote-terminal-view-BtFRTHLE.js → remote-terminal-view-jHhcdpLv.js} +2 -2
  71. package/dist/ui/assets/{restore-DMrBRbbm.js → restore-P18-rOrE.js} +1 -1
  72. package/dist/ui/assets/{run-DYHnri4i.js → run-BBaO_6mp.js} +1 -1
  73. package/dist/ui/assets/{run-DjPz37VL.js → run-CEAU0h2N.js} +1 -1
  74. package/dist/ui/assets/{run-EJrDfKgq.js → run-CXqJc7kx.js} +1 -1
  75. package/dist/ui/assets/{run-CE7Nb_eL.js → run-Ch9LISxW.js} +2 -2
  76. package/dist/ui/assets/{run-p83rHHiz.js → run-D4B23Bwp.js} +2 -2
  77. package/dist/ui/assets/{serve-command-CqF1OkZl.js → serve-command-DrttW0u9.js} +2 -2
  78. package/dist/ui/assets/{serve-runtime-DbA8xhOk.js → serve-runtime-DjDSJ7hA.js} +1 -1
  79. package/dist/ui/assets/{session-command-memory-CDotXm2I.js → session-command-memory-BmzAZLA5.js} +2 -2
  80. package/dist/ui/assets/{session-jsonl-BPUDzAaw.js → session-jsonl-BngEANiJ.js} +1 -1
  81. package/dist/ui/assets/{session-search-index-lEsBWOr8.js → session-search-index-ei5TA3_U.js} +1 -1
  82. package/dist/ui/assets/{setup-feature-flags-remote-CCdRRPQb.js → setup-feature-flags-remote-BP2fteYJ.js} +1 -1
  83. package/dist/ui/assets/{setup-model-catalog-wvhFd6EK.js → setup-model-catalog-DSBO0gAW.js} +1 -1
  84. package/dist/ui/assets/{silent-renew-backoff-CjfMcAko.js → silent-renew-backoff-DR79B1_a.js} +1 -1
  85. package/dist/ui/assets/{slicc-tls-engine-Bs2FEks9.wasm → slicc-tls-engine-BI33-1tp.wasm} +0 -0
  86. package/dist/ui/assets/{slicc-tls-engine-CZixXDAG.js → slicc-tls-engine-pcgCryui.js} +1 -1
  87. package/dist/ui/assets/slicc-version-CX16XBIe.js +1 -0
  88. package/dist/ui/assets/{soundscape-BzKLvO-1.js → soundscape-CnMaxsGi.js} +1 -1
  89. package/dist/ui/assets/{speak-CSG4gGch.js → speak-Ct5uxVZy.js} +1 -1
  90. package/dist/ui/assets/{sprinkle-manager-Duq4LRr7.js → sprinkle-manager-C_KsFhMA.js} +1 -1
  91. package/dist/ui/assets/{sprinkle-renderer-_81Q9qf8.js → sprinkle-renderer-B2w4h0U6.js} +1 -1
  92. package/dist/ui/assets/{sudo-CDOnEP3h.js → sudo-B1y10CBc.js} +1 -1
  93. package/dist/ui/assets/{supervisor-C0O_9zrp.js → supervisor-CENSzutT.js} +1 -1
  94. package/dist/ui/assets/{sync-dialog-DTQ_-NI7.js → sync-dialog-6tsqlgzU.js} +1 -1
  95. package/dist/ui/assets/{transformers-env-CLzXIpCN.js → transformers-env-QfJ4HlCA.js} +1 -1
  96. package/dist/ui/assets/{tray-leader-CfmQX77N.js → tray-leader-BSjF1qu8.js} +1 -1
  97. package/dist/ui/assets/{tray-leave-runtime-BRulCzY_.js → tray-leave-runtime-QOw0h06o.js} +1 -1
  98. package/dist/ui/assets/{tray-sidecar-mQMRHcGT.js → tray-sidecar-CnxjutnK.js} +1 -1
  99. package/dist/ui/assets/{upgrade-detection-BYubCZqs.js → upgrade-detection-D8ahmWpE.js} +1 -1
  100. package/dist/ui/assets/{upgrade-to-seven-Pq-UDrPi.js → upgrade-to-seven-C26s1NUp.js} +1 -1
  101. package/dist/ui/assets/{voice-reply-DgaSWq8u.js → voice-reply-B9aQ7-pU.js} +1 -1
  102. package/dist/ui/assets/{wc-attach-DkaTR7TF.js → wc-attach-Ckcoly3R.js} +2 -2
  103. package/dist/ui/assets/{wc-browser-B7ndz1jM.js → wc-browser-DTYOb_lz.js} +1 -1
  104. package/dist/ui/assets/{wc-computers-BCkukNOu.js → wc-computers-B6LgI0jf.js} +1 -1
  105. package/dist/ui/assets/{wc-detached-CLERu9mV.js → wc-detached-Ddyb3l_B.js} +1 -1
  106. package/dist/ui/assets/{wc-extension-B4USdq0c.js → wc-extension-uIPxVPmP.js} +2 -2
  107. package/dist/ui/assets/{wc-follower-0jzY0wJ0.js → wc-follower-CnWb2tNC.js} +3 -3
  108. package/dist/ui/assets/{wc-follower-oauth-BUtItDwr.js → wc-follower-oauth-8SUipRQu.js} +1 -1
  109. package/dist/ui/assets/{wc-gelatiere-DajT2OUD.js → wc-gelatiere-BkhkkA4U.js} +1 -1
  110. package/dist/ui/assets/{wc-live-B2VH_Eli.js → wc-live-DNFy1jXb.js} +5 -5
  111. package/dist/ui/assets/{wc-nav-DkW2VrjM.js → wc-nav-CghQ-Uhj.js} +2 -2
  112. package/dist/ui/assets/{wc-onboarding-LbJfXmAg.js → wc-onboarding-BbqEmRwr.js} +2 -2
  113. package/dist/ui/assets/{wc-permissions-ChaoL5x5.js → wc-permissions-u9aV_qIN.js} +2 -2
  114. package/dist/ui/assets/{wc-placeholder-DvXhdEmk.js → wc-placeholder-DCc2kK2v.js} +2 -2
  115. package/dist/ui/assets/{wc-profile-export-nWsuW0TA.js → wc-profile-export-s0l5x7db.js} +3 -3
  116. package/dist/ui/assets/{wc-secret-request-DiIKRPKg.js → wc-secret-request-CrMqE5AI.js} +1 -1
  117. package/dist/ui/assets/{wc-settings-3Ng33xpc.js → wc-settings-DsqncEY8.js} +3 -3
  118. package/dist/ui/assets/{wc-shell-BbGmkwhl.js → wc-shell-Dl3FRPoa.js} +3 -3
  119. package/dist/ui/assets/{wc-shortcut-config-D8Tpotkh.js → wc-shortcut-config-CxoXQZWD.js} +1 -1
  120. package/dist/ui/assets/{wc-sprinkles-s172FzJd.js → wc-sprinkles-B6wlFpjd.js} +2 -2
  121. package/dist/ui/assets/{wc-transcript-export-PY510kMQ.js → wc-transcript-export-BB6Z7XLR.js} +2 -2
  122. package/dist/ui/assets/{wc-tray-CZbGdtuM.js → wc-tray-C3w3FohI.js} +4 -4
  123. package/dist/ui/assets/welcome-detection-D6A9jo6q.js +1 -0
  124. package/dist/ui/assets/{whisper-session-DV2-MGXV.js → whisper-session-BETavvEW.js} +2 -2
  125. package/dist/ui/assets/{xai-grok-nLcr7B7M.js → xai-grok-Hg-JZgP-.js} +1 -1
  126. package/dist/ui/assets/{xai-grok-DKNmr41Y.js → xai-grok-x2vu1WfU.js} +1 -1
  127. package/dist/ui/index.html +3 -3
  128. package/dist/ui/packages/webapp/index.html +3 -3
  129. package/dist/ui/packages/webapp/upgrade-to-seven.html +1 -1
  130. package/dist/ui/upgrade-to-seven.html +1 -1
  131. package/package.json +3 -3
  132. package/dist/ui/assets/provider-store-access-CM_A3_LB.js +0 -1
  133. package/dist/ui/assets/provider-store-access-CSEJaroY.js +0 -1
  134. package/dist/ui/assets/slicc-version-nzLa6zFr.js +0 -1
  135. package/dist/ui/assets/welcome-detection-IHJ0GQ5L.js +0 -1
@@ -1 +1 @@
1
- import{v as e}from"./renamed-providers-CKF5I4-o.js";import"./logger-BtfxAgTA.js";import"./tray-leader-CfmQX77N.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{v as e}from"./renamed-providers-CKF5I4-o.js";import"./logger-BtfxAgTA.js";import"./tray-leader-BSjF1qu8.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-Cx6Y120U.js";import{n as t,t as n}from"./tray-leader-status-BPM2zVsj.js";import{n as r,r as i,t as a}from"./lick-urls-CgPiVwD-.js";import{v as o}from"./kernel-worker-DVGTdmUT.js";const s=e(`lick-ws-bridge`);function c(e){if(e.stopped)return;let t;try{t=e.wsFactory(e.wsUrl)}catch(t){s.error(`Failed to construct lick WebSocket`,{url:e.wsUrl,error:t instanceof Error?t.message:String(t)}),l(e,`construct-threw`);return}e.socket=t,t.onopen=()=>{e.consecutiveFailures>0?s.info(`Lick WebSocket recovered`,{attempts:e.consecutiveFailures}):s.info(`Lick WebSocket connected`),e.consecutiveFailures=0,e.unrecoverableSignalled=!1},t.onmessage=n=>{d(e,t,n.data).catch(e=>{let t=typeof n.data==`string`?n.data.slice(0,200):`[non-string payload]`;s.error(`Failed to process lick message`,{error:e instanceof Error?e.message:String(e),preview:t})})},t.onclose=n=>{if(e.socket===t&&(e.socket=null),e.stopped)return;let r=n.reason?` reason=${JSON.stringify(n.reason)}`:``;l(e,`disconnected code=${n.code}${r}`)},t.onerror=t=>{let n=t.target;s.error(`Lick WebSocket error`,{url:e.wsUrl,readyState:n?.readyState,eventType:t.type})}}function l(e,t){if(e.reconnectHandle!=null){s.debug(`Lick WS failure during pending reconnect — keeping existing timer`,{cause:t});return}e.consecutiveFailures++;let n=o({attempt:e.consecutiveFailures-1,baseMs:e.baseDelay,capMs:6e4}),r={url:e.wsUrl,attempt:e.consecutiveFailures,cause:t,retryInMs:n};if(e.consecutiveFailures>=3?s.error(`Lick WebSocket still down`,r):s.warn(`Lick WebSocket down`,r),e.consecutiveFailures===20&&!e.unrecoverableSignalled){e.unrecoverableSignalled=!0;try{e.lickManager.emitEvent({type:`session-reload`,targetScoop:void 0,timestamp:(/* @__PURE__ */ new Date()).toISOString(),body:{reason:`lick-ws-bridge-down`,url:e.wsUrl,attempts:e.consecutiveFailures}})}catch(e){s.error(`Failed to emit lick-ws-bridge-down signal`,{error:e instanceof Error?e.message:String(e)})}}u(e,n)}function u(e,t){e.stopped||e.reconnectHandle!=null||(e.reconnectHandle=e.setTimer(()=>{e.reconnectHandle=null,c(e)},t))}async function d(e,t,n){let r=JSON.parse(typeof n==`string`?n:String(n));if(r.requestId){let n=r.requestId,i=await _(e,r,n);if(e.stopped||e.socket!==t||t.readyState!==1){s.warn(`Lick reply dropped — socket changed/closed mid-request`,{type:r.type,requestId:n});return}try{t.send(JSON.stringify(i))}catch(e){s.error(`ws.send() failed delivering lick reply`,{type:r.type,requestId:n,error:e instanceof Error?e.message:String(e)})}return}if(r.type===`webhook_event`){f(e.lickManager,r);return}if(r.type===`navigate_event`){m(e.lickManager,r);return}r.type===`hostfs_invalidate`&&g(e,r)}function f(e,t){let n=typeof t.webhookId==`string`?t.webhookId:null;if(!n)return s.error(`Malformed webhook_event from lick-ws`,{receivedKeys:Object.keys(t)}),`malformed`;let r=t.headers&&typeof t.headers==`object`?t.headers:{};try{return e.handleWebhookEvent(n,r,t.body)}catch(e){return s.error(`Webhook event dispatch failed`,{webhookId:n,error:e instanceof Error?e.message:String(e)}),`failed`}}function p(e){let t=typeof e.verb==`string`?e.verb:null,n=typeof e.target==`string`?e.target:null,r=typeof e.url==`string`&&e.url.length>0?e.url:null;if(t!==`handoff`&&t!==`upskill`||!n||!r)return null;let i={url:r,verb:t,target:n};return typeof e.instruction==`string`&&(i.instruction=e.instruction),typeof e.branch==`string`&&(i.branch=e.branch),typeof e.path==`string`&&(i.path=e.path),typeof e.title==`string`&&(i.title=e.title),{type:`navigate`,navigateUrl:r,targetScoop:void 0,timestamp:typeof e.timestamp==`string`?e.timestamp:(/* @__PURE__ */ new Date()).toISOString(),body:i}}function m(e,t){let n=p(t);if(!n){s.debug(`navigate_event dropped — invalid payload`,{hasVerb:typeof t.verb==`string`,hasTarget:typeof t.target==`string`,hasUrl:typeof t.url==`string`&&t.url.length>0});return}e.emitEvent(n)}function h(e){if(typeof e.mount!=`string`||e.mount.length===0)return null;let t=e.paths,n=[];if(Array.isArray(t))for(let e of t)typeof e==`string`&&n.push(e);return{type:`hostfs_invalidate`,mount:e.mount,paths:n,timestamp:typeof e.timestamp==`string`?e.timestamp:void 0}}function g(e,t){let n=h(t);if(!n){s.debug(`hostfs_invalidate dropped — invalid payload`,{hasMount:typeof t.mount==`string`&&t.mount.length>0,pathsIsArray:Array.isArray(t.paths)});return}try{e.options.onHostfsInvalidate?.(n)}catch(e){s.warn(`hostfs_invalidate handler threw`,{mount:n.mount,error:e instanceof Error?e.message:String(e)})}}async function _(e,t,r){let{lickManager:i}=e;try{switch(t.type){case`list_webhooks`:return{type:`response`,requestId:r,data:i.listWebhooks().map(t=>({...t,url:v(e,t.id)}))};case`create_webhook`:{let n=await i.createWebhook(t.name||`default`,t.scoop,t.filter);return{type:`response`,requestId:r,data:{...n,url:v(e,n.id)}}}case`webhook_event`:return{type:`response`,requestId:r,data:{disposition:f(i,t)}};case`delete_webhook`:return await i.deleteWebhook(t.id)?{type:`response`,requestId:r,data:{ok:!0}}:{type:`response`,requestId:r,data:{error:`Webhook not found`}};case`list_crontasks`:return{type:`response`,requestId:r,data:i.listCronTasks()};case`create_crontask`:if(!t.name)throw Error(`name is required`);if(!t.cron)throw Error(`cron is required`);return{type:`response`,requestId:r,data:await i.createCronTask(t.name,t.cron,t.scoop,t.filter)};case`delete_crontask`:return await i.deleteCronTask(t.id)?{type:`response`,requestId:r,data:{ok:!0}}:{type:`response`,requestId:r,data:{error:`Cron task not found`}};case`tray_status`:{let e=n();return{type:`response`,requestId:r,data:{state:e.state,joinUrl:e.session?.joinUrl??null,workerBaseUrl:e.session?.workerBaseUrl??null,trayId:e.session?.trayId??null}}}default:return{type:`response`,requestId:r,error:`Unknown request type: ${t.type}`}}}catch(e){return{type:`response`,requestId:r,error:e instanceof Error?e.message:String(e)}}}function v(e,n){let a=t().session;return a?.webhookUrl?r(a.webhookUrl,n):e.webhookOriginOverride?`${e.webhookOriginOverride}/webhooks/${n}`:i(e.options.locationHref,n)}function y(e){if(e.stopped)return;e.stopped=!0,e.reconnectHandle!=null&&(e.clearTimer(e.reconnectHandle),e.reconnectHandle=null);let t=e.socket;if(e.socket=null,t)try{t.close()}catch(e){t.readyState!==3&&t.readyState!==2&&s.warn(`Lick socket close() threw before terminal state`,{readyState:t.readyState,error:e instanceof Error?e.message:String(e)})}}function b(e,t){try{new URL(t.locationHref)}catch(e){throw Error(`startLickWsBridge: invalid locationHref ${JSON.stringify(t.locationHref)}: ${e instanceof Error?e.message:String(e)}`)}let n=typeof t.lickWsUrl==`string`&&t.lickWsUrl.length>0?t.lickWsUrl:a(t.locationHref),r=null;if(typeof t.lickWsUrl==`string`&&t.lickWsUrl.length>0)try{let e=new URL(t.lickWsUrl);r=`${e.protocol===`wss:`?`https:`:`http:`}//${e.host}`}catch{r=null}let i={lickManager:e,options:t,wsUrl:n,webhookOriginOverride:r,baseDelay:t.reconnectDelayMs??3e3,wsFactory:t.webSocketFactory??(e=>new WebSocket(e)),setTimer:t.setTimeoutFn??setTimeout.bind(globalThis),clearTimer:t.clearTimeoutFn??clearTimeout.bind(globalThis),stopped:!1,socket:null,reconnectHandle:null,consecutiveFailures:0,unrecoverableSignalled:!1};return c(i),{stop(){y(i)}}}export{b as startLickWsBridge};
1
+ import{t as e}from"./logger-Cx6Y120U.js";import{n as t,t as n}from"./tray-leader-status-BPM2zVsj.js";import{n as r,r as i,t as a}from"./lick-urls-CgPiVwD-.js";import{v as o}from"./kernel-worker-Cd7FNbq1.js";const s=e(`lick-ws-bridge`);function c(e){if(e.stopped)return;let t;try{t=e.wsFactory(e.wsUrl)}catch(t){s.error(`Failed to construct lick WebSocket`,{url:e.wsUrl,error:t instanceof Error?t.message:String(t)}),l(e,`construct-threw`);return}e.socket=t,t.onopen=()=>{e.consecutiveFailures>0?s.info(`Lick WebSocket recovered`,{attempts:e.consecutiveFailures}):s.info(`Lick WebSocket connected`),e.consecutiveFailures=0,e.unrecoverableSignalled=!1},t.onmessage=n=>{d(e,t,n.data).catch(e=>{let t=typeof n.data==`string`?n.data.slice(0,200):`[non-string payload]`;s.error(`Failed to process lick message`,{error:e instanceof Error?e.message:String(e),preview:t})})},t.onclose=n=>{if(e.socket===t&&(e.socket=null),e.stopped)return;let r=n.reason?` reason=${JSON.stringify(n.reason)}`:``;l(e,`disconnected code=${n.code}${r}`)},t.onerror=t=>{let n=t.target;s.error(`Lick WebSocket error`,{url:e.wsUrl,readyState:n?.readyState,eventType:t.type})}}function l(e,t){if(e.reconnectHandle!=null){s.debug(`Lick WS failure during pending reconnect — keeping existing timer`,{cause:t});return}e.consecutiveFailures++;let n=o({attempt:e.consecutiveFailures-1,baseMs:e.baseDelay,capMs:6e4}),r={url:e.wsUrl,attempt:e.consecutiveFailures,cause:t,retryInMs:n};if(e.consecutiveFailures>=3?s.error(`Lick WebSocket still down`,r):s.warn(`Lick WebSocket down`,r),e.consecutiveFailures===20&&!e.unrecoverableSignalled){e.unrecoverableSignalled=!0;try{e.lickManager.emitEvent({type:`session-reload`,targetScoop:void 0,timestamp:(/* @__PURE__ */ new Date()).toISOString(),body:{reason:`lick-ws-bridge-down`,url:e.wsUrl,attempts:e.consecutiveFailures}})}catch(e){s.error(`Failed to emit lick-ws-bridge-down signal`,{error:e instanceof Error?e.message:String(e)})}}u(e,n)}function u(e,t){e.stopped||e.reconnectHandle!=null||(e.reconnectHandle=e.setTimer(()=>{e.reconnectHandle=null,c(e)},t))}async function d(e,t,n){let r=JSON.parse(typeof n==`string`?n:String(n));if(r.requestId){let n=r.requestId,i=await _(e,r,n);if(e.stopped||e.socket!==t||t.readyState!==1){s.warn(`Lick reply dropped — socket changed/closed mid-request`,{type:r.type,requestId:n});return}try{t.send(JSON.stringify(i))}catch(e){s.error(`ws.send() failed delivering lick reply`,{type:r.type,requestId:n,error:e instanceof Error?e.message:String(e)})}return}if(r.type===`webhook_event`){f(e.lickManager,r);return}if(r.type===`navigate_event`){m(e.lickManager,r);return}r.type===`hostfs_invalidate`&&g(e,r)}function f(e,t){let n=typeof t.webhookId==`string`?t.webhookId:null;if(!n)return s.error(`Malformed webhook_event from lick-ws`,{receivedKeys:Object.keys(t)}),`malformed`;let r=t.headers&&typeof t.headers==`object`?t.headers:{};try{return e.handleWebhookEvent(n,r,t.body)}catch(e){return s.error(`Webhook event dispatch failed`,{webhookId:n,error:e instanceof Error?e.message:String(e)}),`failed`}}function p(e){let t=typeof e.verb==`string`?e.verb:null,n=typeof e.target==`string`?e.target:null,r=typeof e.url==`string`&&e.url.length>0?e.url:null;if(t!==`handoff`&&t!==`upskill`||!n||!r)return null;let i={url:r,verb:t,target:n};return typeof e.instruction==`string`&&(i.instruction=e.instruction),typeof e.branch==`string`&&(i.branch=e.branch),typeof e.path==`string`&&(i.path=e.path),typeof e.title==`string`&&(i.title=e.title),{type:`navigate`,navigateUrl:r,targetScoop:void 0,timestamp:typeof e.timestamp==`string`?e.timestamp:(/* @__PURE__ */ new Date()).toISOString(),body:i}}function m(e,t){let n=p(t);if(!n){s.debug(`navigate_event dropped — invalid payload`,{hasVerb:typeof t.verb==`string`,hasTarget:typeof t.target==`string`,hasUrl:typeof t.url==`string`&&t.url.length>0});return}e.emitEvent(n)}function h(e){if(typeof e.mount!=`string`||e.mount.length===0)return null;let t=e.paths,n=[];if(Array.isArray(t))for(let e of t)typeof e==`string`&&n.push(e);return{type:`hostfs_invalidate`,mount:e.mount,paths:n,timestamp:typeof e.timestamp==`string`?e.timestamp:void 0}}function g(e,t){let n=h(t);if(!n){s.debug(`hostfs_invalidate dropped — invalid payload`,{hasMount:typeof t.mount==`string`&&t.mount.length>0,pathsIsArray:Array.isArray(t.paths)});return}try{e.options.onHostfsInvalidate?.(n)}catch(e){s.warn(`hostfs_invalidate handler threw`,{mount:n.mount,error:e instanceof Error?e.message:String(e)})}}async function _(e,t,r){let{lickManager:i}=e;try{switch(t.type){case`list_webhooks`:return{type:`response`,requestId:r,data:i.listWebhooks().map(t=>({...t,url:v(e,t.id)}))};case`create_webhook`:{let n=await i.createWebhook(t.name||`default`,t.scoop,t.filter);return{type:`response`,requestId:r,data:{...n,url:v(e,n.id)}}}case`webhook_event`:return{type:`response`,requestId:r,data:{disposition:f(i,t)}};case`delete_webhook`:return await i.deleteWebhook(t.id)?{type:`response`,requestId:r,data:{ok:!0}}:{type:`response`,requestId:r,data:{error:`Webhook not found`}};case`list_crontasks`:return{type:`response`,requestId:r,data:i.listCronTasks()};case`create_crontask`:if(!t.name)throw Error(`name is required`);if(!t.cron)throw Error(`cron is required`);return{type:`response`,requestId:r,data:await i.createCronTask(t.name,t.cron,t.scoop,t.filter)};case`delete_crontask`:return await i.deleteCronTask(t.id)?{type:`response`,requestId:r,data:{ok:!0}}:{type:`response`,requestId:r,data:{error:`Cron task not found`}};case`tray_status`:{let e=n();return{type:`response`,requestId:r,data:{state:e.state,joinUrl:e.session?.joinUrl??null,workerBaseUrl:e.session?.workerBaseUrl??null,trayId:e.session?.trayId??null}}}default:return{type:`response`,requestId:r,error:`Unknown request type: ${t.type}`}}}catch(e){return{type:`response`,requestId:r,error:e instanceof Error?e.message:String(e)}}}function v(e,n){let a=t().session;return a?.webhookUrl?r(a.webhookUrl,n):e.webhookOriginOverride?`${e.webhookOriginOverride}/webhooks/${n}`:i(e.options.locationHref,n)}function y(e){if(e.stopped)return;e.stopped=!0,e.reconnectHandle!=null&&(e.clearTimer(e.reconnectHandle),e.reconnectHandle=null);let t=e.socket;if(e.socket=null,t)try{t.close()}catch(e){t.readyState!==3&&t.readyState!==2&&s.warn(`Lick socket close() threw before terminal state`,{readyState:t.readyState,error:e instanceof Error?e.message:String(e)})}}function b(e,t){try{new URL(t.locationHref)}catch(e){throw Error(`startLickWsBridge: invalid locationHref ${JSON.stringify(t.locationHref)}: ${e instanceof Error?e.message:String(e)}`)}let n=typeof t.lickWsUrl==`string`&&t.lickWsUrl.length>0?t.lickWsUrl:a(t.locationHref),r=null;if(typeof t.lickWsUrl==`string`&&t.lickWsUrl.length>0)try{let e=new URL(t.lickWsUrl);r=`${e.protocol===`wss:`?`https:`:`http:`}//${e.host}`}catch{r=null}let i={lickManager:e,options:t,wsUrl:n,webhookOriginOverride:r,baseDelay:t.reconnectDelayMs??3e3,wsFactory:t.webSocketFactory??(e=>new WebSocket(e)),setTimer:t.setTimeoutFn??setTimeout.bind(globalThis),clearTimer:t.clearTimeoutFn??clearTimeout.bind(globalThis),stopped:!1,socket:null,reconnectHandle:null,consecutiveFailures:0,unrecoverableSignalled:!1};return c(i),{stop(){y(i)}}}export{b as startLickWsBridge};
@@ -1 +1 @@
1
- import{t as e}from"./logger-Cx6Y120U.js";import{i as t}from"./feature-flags-CoR3q8DD.js";import{t as n}from"./record-DTUQtot0.js";import{n as r,o as i,r as a,u as o}from"./descriptor-3sZ9zo81.js";import{n as s,t as c}from"./thinking-level-5x0UAu9N.js";import{t as l}from"./types-D8gIX-W-.js";import{a as u,r as d}from"./memory-budget-CFfevxz_.js";import{i as f,p as ee,s as te}from"./kernel-worker-DVGTdmUT.js";import{t as ne}from"./MEMORY-Byv8wmch.js";import{a as re,i as ie,n as p,o as m,r as h,t as ae}from"./instruction-frontmatter-B48EsYtA.js";import{l as g,n as oe,p as _,r as se,u as v}from"./frozen-archive-writer-vxDXEHCh.js";function y(e){let t=0;for(let n of e)n.timestamp>t&&(t=n.timestamp);return t}function b(e,t){return t>0?e.filter(e=>e.timestamp>t):[...e]}const x=e(`agentic-memory`),ce=e=>[e.memoryPath],le=e=>[`/sessions/`,`/shared/`,...i(e)],ue=/* @__PURE__ */ `awk.cat.cp.cut.date.diff.du.echo.file.find.grep.head.jq.ls.mkdir.mount.mv.nl.od.printf.readlink.rg.sed.sort.stat.tail.touch.tr.uniq.uname.upskill.wc.xxd`.split(`.`),de={arrayKeys:/* @__PURE__ */ new Set([`writablePaths`,`visiblePaths`,`allowedCommands`]),scalarKeys:/* @__PURE__ */ new Set([`model`,`timeoutSeconds`,`dreamTimeoutSeconds`,`thinkingLevel`])},S=3e4;function C(e){return e===`cone`?`memory-curator`:`memory-curator-${e}`}const w={kind:`curate`,nameFor:C,rivalsFor:e=>[E(e)]},T=`{{TASK}}`;function fe(e,t,n){return e.kind===`dream`?`**Consolidation pass** (the nightly dreaming): there is NO new session to mine — skip "Mining the session archive" entirely. Your whole job is to make the existing memory better: consolidated, current, and inside its budget. If the file is missing or empty, reply with one line saying so and stop; never invent memories. The run is hard-stopped after ${n} minutes; a run stopped at that bound lands whatever the memory file holds at that moment (every memory_write leaves a whole, budget-checked file), so consolidate section by section, writing as you go, and finish cleanly when you can.`:`**Curation pass**: mine the archived session at ${t} for what is worth carrying into future sessions, fold it into the memory, and consolidate the whole file in the same pass. Work fast: a pass should finish in well under 10 minutes and is hard-stopped after ${n} minutes — mine the three signals, write, and stop, rather than exploring the archive exhaustively.`}async function pe(e){try{await e.stat(d);return}catch{}try{await e.mkdir(`/etc`,{recursive:!0}),await e.writeFile(d,ne),x.info(`Seeded default ${d}`)}catch(e){x.warn(`Failed to seed ${d}`,{error:R(e)})}}function E(e){return e===`cone`?`memory-dreamer`:`memory-dreamer-${e}`}function D(e,t){let r=e.nameFor(t);return O.test(r)?r:e.nameFor(n)}function me(e,t){let r=O.test(e.nameFor(t))?t:n;return e.rivalsFor?.(r)??[]}const O=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;function k(e,t){return`/scoops/agent-${D(e,t)}`}function he(e){return k(w,e)}const A=he(n);function ge(e){return o({parentJid:null,folder:e?.folder??`cone`})}function j(e,t){if(t.root===r.root)return e;if(e===r.memoryPath)return t.memoryPath;if(e===`/workspace/skills`||e.startsWith(`/workspace/skills/`))return e;let n=`${r.root}/`;return e===r.root?t.root:e.startsWith(n)?`${t.root}/${e.slice(n.length)}`:e}function _e(e,t){let n=`${a}/`,r=e=>e.some(e=>n.startsWith(e.endsWith(`/`)?e:`${e}/`)),i=e.map(e=>j(e,t));return r(e)&&!r(i)&&i.push(n),i}async function M(e){try{if(e.signal?.aborted)return{ok:!1,reason:`aborted`,legacyFallbackSafe:!1};let t=e.instructions??w,n=ge(e.cone),r=k(t,e.cone?.folder??`cone`),i=await ve(e.vfs,n),a=t.kind===`dream`?i.dreamTimeoutSeconds:i.timeoutSeconds,o=L(e.sessionArchivePath);try{await xe(e.vfs,n.memoryPath,e.sessionArchivePath)}catch(e){return{ok:!1,reason:`snapshot: ${R(e)}`,legacyFallbackSafe:!0}}let s=t.kind===`dream`?`(no session archive this pass)`:e.sessionArchivePath,c=Math.max(1,Math.round(a/60)),l=fe(t,s,c),d=Ce(i,a,we(Te(i.promptTemplate.includes(T)?i.promptTemplate:`${i.promptTemplate.trimEnd()}\n\n${T}`,{MEMORY_PATH:o,SESSION_ARCHIVE_PATH:s,SESSION_COUNT:String(e.sessionCount),BUDGET_CHARS:String(u(e.sessionCount)),SCRATCH_DIR:r,VISIBLE_PATHS:i.visiblePaths.join(`, `),TODAY:e.today??(/* @__PURE__ */ new Date()).toISOString().slice(0,10),TIMEOUT_MINUTES:String(c),TASK:l}),r),e.sessionArchivePath,n,e.cone,t);e.signal&&(d.signal=e.signal);let f=await Ee(Promise.resolve().then(()=>e.spawn(d)),a*1e3+S,e.signal);if(f.type===`timeout`)return x.warn(`Agentic memory wait timed out past the in-run bound + grace`,{timeoutSeconds:a,graceMs:S}),{ok:!1,reason:`timeout`,legacyFallbackSafe:!1};if(f.type===`aborted`)return{ok:!1,reason:`aborted`,legacyFallbackSafe:!1};if(f.type===`error`)return{ok:!1,reason:R(f.error),legacyFallbackSafe:!0};if(f.result.exitCode!==0){let e=(f.result.finalText??``).startsWith(ee);return{ok:!1,reason:f.result.finalText||`exit-${f.result.exitCode}`,legacyFallbackSafe:!e}}return{ok:!0,report:f.result.finalText}}catch(e){return x.warn(`Agentic memory pass failed`,{error:R(e)}),{ok:!1,reason:R(e),legacyFallbackSafe:!1}}}async function ve(e,t=r){try{let n=await e.readFile(d,{encoding:`utf-8`});return N(typeof n==`string`?n:new TextDecoder().decode(n),t)}catch(e){return x.warn(`Could not load valid ${d}; using built-in default`,{error:R(e)}),N(ne,t)}}function N(e,t=r){let n=re(e,`MEMORY.md`),i=ae(n.frontmatter,de),a=p(i,`writablePaths`,ce(t));if(a.length===0)throw Error(`writablePaths must not be empty`);m(a,`writablePaths`);let o=p(i,`visiblePaths`,le(t));m(o,`visiblePaths`);let s=h(i.timeoutSeconds,600,1200),c=h(i.dreamTimeoutSeconds,3600,7200,`dreamTimeoutSeconds`),l=ie(i.model,`model`);return{writablePaths:a.map(e=>j(e,t)),visiblePaths:_e(o,t),allowedCommands:[.../* @__PURE__ */ new Set([...ue,...p(i,`allowedCommands`,[])])],...l?{model:l}:{},thinkingLevel:ye(i.thinkingLevel),timeoutSeconds:s,dreamTimeoutSeconds:c,promptTemplate:n.body}}function ye(e){if(e===void 0)return`medium`;if(typeof e!=`string`||!s(e))throw Error(`thinkingLevel must be one of ${c.join(`, `)}`);return e}function P(e){return`/sessions/.curated/${e.slice(e.lastIndexOf(`/`)+1)}`}function F(e){return`/sessions/.curation/${e.slice(e.lastIndexOf(`/`)+1)}`}function I(e){return`${F(e)}/base.md`}function L(e){return`${F(e)}/draft.md`}function be(e){return`${F(e)}/status.json`}async function xe(e,t,n){let r=``;try{let n=await e.readFile(t,{encoding:`utf-8`});r=typeof n==`string`?n:new TextDecoder().decode(n)}catch{}await e.mkdir(F(n),{recursive:!0}),await e.writeFile(I(n),r),await e.writeFile(L(n),r)}function Se(e,t,n){let r=e.map(e=>e===t?n:e);return r.includes(n)?r:[...r,n]}function Ce(e,t,n,r,i,a,o){let s=e.model===`parent`||e.model===`cone`,c=I(r),l=L(r);return{cwd:i.root,writablePaths:Se(e.writablePaths,i.memoryPath,l),visiblePaths:[...e.visiblePaths,`${F(r)}/`],allowedCommands:e.allowedCommands,prompt:n,thinkingLevel:e.thinkingLevel,persistSession:!0,name:D(o,a?.folder??`cone`),exclusiveWith:me(o,a?.folder??`cone`),...a?.jid?{parentJid:a.jid}:{},notifyOnComplete:!0,successReceiptPath:P(r),mergeOnSuccess:{targetPath:i.memoryPath,basePath:c,draftPath:l},outcomeReceiptPath:be(r),maxWallClockMs:t*1e3,...!s&&e.model?{modelId:e.model}:{}}}function we(e,t){if(t===A)return e;let n=`\0SCRATCH\0`;return e.replaceAll(t,n).replaceAll(A,t).replaceAll(n,t)}function Te(e,t){let n=e;for(let[e,r]of Object.entries(t))n=n.replaceAll(`{{${e}}}`,r);return n}function Ee(e,t,n){return new Promise(r=>{let i=!1,a=e=>{i||(i=!0,clearTimeout(s),n?.removeEventListener(`abort`,o),r(e))},o=()=>a({type:`aborted`}),s=setTimeout(()=>a({type:`timeout`}),t);n?.addEventListener(`abort`,o,{once:!0}),e.then(e=>a({type:`result`,result:e}),e=>a({type:`error`,error:e}))})}function R(e){return e instanceof Error?e.message:String(e)}const z=e(`live-session-curation`),B=`/sessions/.live-deltas`,V={maxMessages:200,maxChars:8e4},H=/* @__PURE__ */ new Map,U=/* @__PURE__ */ new Map;function W(){return t(`memory-v2`)&&t(`agentic-memory`)}function G(e,t,n){return`${B}/${e}-${t}-${n}.md`}function K(e,t=V){if(e.length===0)return[];let n=[],r=0;for(let i of e){let e=ze(i);if(n.length>=t.maxMessages||n.length>0&&r+e>t.maxChars)break;n.push(i),r+=e}n.length===0&&n.push(e[0]);let i=n[n.length-1].timestamp,a=n.length;for(;a<e.length&&e[a].timestamp===i;)n.push(e[a]),a+=1;return n}function De(e){if(!W())return Promise.resolve({status:`skipped`,reason:`flag-off`});let t=e.cone.folder||`cone`,n={...e.cone,folder:t},r=Re();if(!r)return z.info(`Live delta curation skipped: agent bridge not published`,{cone:t}),Promise.resolve({status:`skipped`,reason:`no-bridge`});let i={...e,cone:n},a=H.get(t);return a==null?Y(i,r):(U.set(t,i),a)}function q(e){let t=e.cone.folder||`cone`,n={...e.cone,folder:t},r={...e,cone:n};if(e.hold===`held`)return ke(r);let i=H.get(t);return i==null?X(t,ke(r)):i.then(()=>q(r))}async function J(e,t,n){n>0&&await v(async()=>{let r=await g(Z(e)),i=r.findIndex(e=>e.filename===t);if(i===-1)return;let a=r[i].curatedThrough??0,o=n>a;if(!o&&r[i].memoryFailed===void 0)return;let{memoryFailed:s,...c}=r[i],l=r.slice();l[i]={...c,curatedThrough:Math.max(n,a),memoryCuratedAt:(/* @__PURE__ */ new Date()).toISOString()},await _(Z(e),l),o&&await Pe(e,`${f}/${t}`,n),await e.flush?.()})}function Y(e,t){return X(e.cone.folder||`cone`,q({vfs:e.vfs,cone:e.cone,spawn:e=>t.spawn(e),enabled:!0,hold:`held`,...e.limits?{limits:e.limits}:{}}))}function X(e,t){return H.set(e,t),t.then(()=>Oe(e,t),()=>Oe(e,t)),t}function Oe(e,t){if(H.get(e)!==t)return;H.delete(e);let n=U.get(e);if(U.delete(e),!n||!W())return;let r=Re();r&&Y(n,r).catch(t=>{z.warn(`Follow-up live delta curation failed to start`,{cone:e,error:Q(t)})})}async function ke(e){if(!(e.enabled??W()))return{status:`skipped`,reason:`flag-off`};let t=e.cone.folder||`cone`,n=e.limits??V,r;try{r=await g(Z(e.vfs))}catch(e){return z.warn(`Live delta curation skipped: sessions index unreadable`,{cone:t,error:Q(e)}),{status:`skipped`,reason:`index-unreadable`}}let i=oe(r,t);if(!i?.sessionId)return{status:`skipped`,reason:`no-archive`};let a=await Fe(e.vfs,`${f}/${i.filename}`);if(!a)return{status:`skipped`,reason:`no-archive`};let o=await Ae(e.vfs,i.sessionId,i.filename,a,i.curatedThrough??0,n),s=b(a,o);if(s.length===0)return{status:`skipped`,reason:`caught-up`};let c=K(s,n),l=y(c);if(l<=o)return{status:`skipped`,reason:`caught-up`};let u=G(i.sessionId,o,l);await je(e.vfs,{sessionId:i.sessionId,filename:i.filename,title:i.title,frozenAt:i.frozenAt,cone:i.cone,coneLabel:i.coneLabel},c,u);let d=await M({spawn:e.spawn,vfs:e.vfs,sessionArchivePath:u,sessionCount:r.length,...t!==`cone`||e.cone.jid?{cone:e.cone}:{},...e.signal?{signal:e.signal}:{}});return d.ok?(await J(e.vfs,i.filename,l),z.info(`Live delta curated`,{cone:t,filename:i.filename,through:l}),{status:`curated`,curatedThrough:l,filename:i.filename}):(d.reason.startsWith(`agent: name already in use`)||await Me(e.vfs,i.filename,d.reason),z.warn(`Live delta curation failed`,{cone:t,filename:i.filename,reason:d.reason}),{status:`failed`,reason:d.reason,filename:i.filename})}async function Ae(e,t,n,r,i,a){let o=i;for(let n=0;n<50;n+=1){let n=b(r,o);if(n.length===0)break;let i=y(K(n,a??V));if(i<=o||!await Ie(e,G(t,o,i)))break;o=i}return o>i&&await J(e,n,o),o}async function je(e,t,n,r){let i={id:t.sessionId,sessionId:t.sessionId,title:t.title,frozenAt:t.frozenAt,createdAt:n[0]?.timestamp??0,updatedAt:y(n),messageCount:n.length,messages:[...n],...t.cone?{cone:t.cone}:{},...t.coneLabel?{coneLabel:t.coneLabel}:{}};await e.mkdir(B,{recursive:!0}),await e.writeFile(r,se(i))}async function Me(e,t,n){await Ne(e,t,{ok:!1,reason:n})}async function Ne(e,t,n,r){try{await v(async()=>{let i=await g(Z(e)),a=i.findIndex(e=>e.filename===t);if(a===-1)return;let o=i[a].cone??`cone`;if(r!==void 0&&o!==r)return;let{memoryFailed:s,...c}=i[a],l=i.slice();l[a]=n.ok?{...c,memoryCuratedAt:(/* @__PURE__ */ new Date()).toISOString()}:{...i[a],memoryFailed:n.reason.slice(0,300)},await _(Z(e),l),await e.flush?.()})}catch(e){z.warn(`Failed to record curation outcome`,{filename:t,error:Q(e)})}}async function Pe(e,t,n){let r;try{r=await Le(e,t)}catch(e){if($(e))return;throw e}let i=r.match(/^---\n([\s\S]*?)\n---\n/);if(!i)return;let a=`curatedThrough: ${n}`,o=/^curatedThrough:\s*\d+\s*$/m.test(i[1])?i[1].replace(/^curatedThrough:\s*\d+\s*$/m,a):`${i[1]}\n${a}`;o!==i[1]&&await e.writeFile(t,`---\n${o}\n---\n${r.slice(i[0].length)}`)}async function Fe(e,t){try{return te(await Le(e,t)).messages}catch(e){if($(e))return null;throw e}}async function Ie(e,t){try{return await e.readFile(P(t),{encoding:`utf-8`}),!0}catch(e){if($(e))return!1;throw e}}async function Le(e,t){let n=await e.readFile(t,{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}function Re(){return globalThis.__slicc_agent}function ze(e){let t=e.toolCalls?JSON.stringify(e.toolCalls).length:0;return e.content.length+t}function Z(e){return e}function Q(e){return e instanceof Error?e.message:String(e)}function $(e){return e instanceof l?e.code===`ENOENT`:typeof e!=`object`||!e||!(`code`in e)?!1:e.code===`ENOENT`}export{q as curateLiveSessionDelta,pe as i,W as liveDeltaCurationEnabled,E as n,M as r,De as scheduleLiveDeltaCuration,Ne as stampCurationOutcome,C as t};
1
+ import{t as e}from"./logger-Cx6Y120U.js";import{i as t}from"./feature-flags-CoR3q8DD.js";import{t as n}from"./record-DTUQtot0.js";import{n as r,o as i,r as a,u as o}from"./descriptor-3sZ9zo81.js";import{n as s,t as c}from"./thinking-level-5x0UAu9N.js";import{t as l}from"./types-D8gIX-W-.js";import{a as u,r as d}from"./memory-budget-CFfevxz_.js";import{i as f,p as ee,s as te}from"./kernel-worker-Cd7FNbq1.js";import{t as ne}from"./MEMORY-Byv8wmch.js";import{a as re,i as ie,n as p,o as m,r as h,t as ae}from"./instruction-frontmatter-B48EsYtA.js";import{l as g,n as oe,p as _,r as se,u as v}from"./frozen-archive-writer-BjLxnx_c.js";function y(e){let t=0;for(let n of e)n.timestamp>t&&(t=n.timestamp);return t}function b(e,t){return t>0?e.filter(e=>e.timestamp>t):[...e]}const x=e(`agentic-memory`),ce=e=>[e.memoryPath],le=e=>[`/sessions/`,`/shared/`,...i(e)],ue=/* @__PURE__ */ `awk.cat.cp.cut.date.diff.du.echo.file.find.grep.head.jq.ls.mkdir.mount.mv.nl.od.printf.readlink.rg.sed.sort.stat.tail.touch.tr.uniq.uname.upskill.wc.xxd`.split(`.`),de={arrayKeys:/* @__PURE__ */ new Set([`writablePaths`,`visiblePaths`,`allowedCommands`]),scalarKeys:/* @__PURE__ */ new Set([`model`,`timeoutSeconds`,`dreamTimeoutSeconds`,`thinkingLevel`])},S=3e4;function C(e){return e===`cone`?`memory-curator`:`memory-curator-${e}`}const w={kind:`curate`,nameFor:C,rivalsFor:e=>[E(e)]},T=`{{TASK}}`;function fe(e,t,n){return e.kind===`dream`?`**Consolidation pass** (the nightly dreaming): there is NO new session to mine — skip "Mining the session archive" entirely. Your whole job is to make the existing memory better: consolidated, current, and inside its budget. If the file is missing or empty, reply with one line saying so and stop; never invent memories. The run is hard-stopped after ${n} minutes; a run stopped at that bound lands whatever the memory file holds at that moment (every memory_write leaves a whole, budget-checked file), so consolidate section by section, writing as you go, and finish cleanly when you can.`:`**Curation pass**: mine the archived session at ${t} for what is worth carrying into future sessions, fold it into the memory, and consolidate the whole file in the same pass. Work fast: a pass should finish in well under 10 minutes and is hard-stopped after ${n} minutes — mine the three signals, write, and stop, rather than exploring the archive exhaustively.`}async function pe(e){try{await e.stat(d);return}catch{}try{await e.mkdir(`/etc`,{recursive:!0}),await e.writeFile(d,ne),x.info(`Seeded default ${d}`)}catch(e){x.warn(`Failed to seed ${d}`,{error:R(e)})}}function E(e){return e===`cone`?`memory-dreamer`:`memory-dreamer-${e}`}function D(e,t){let r=e.nameFor(t);return O.test(r)?r:e.nameFor(n)}function me(e,t){let r=O.test(e.nameFor(t))?t:n;return e.rivalsFor?.(r)??[]}const O=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;function k(e,t){return`/scoops/agent-${D(e,t)}`}function he(e){return k(w,e)}const A=he(n);function ge(e){return o({parentJid:null,folder:e?.folder??`cone`})}function j(e,t){if(t.root===r.root)return e;if(e===r.memoryPath)return t.memoryPath;if(e===`/workspace/skills`||e.startsWith(`/workspace/skills/`))return e;let n=`${r.root}/`;return e===r.root?t.root:e.startsWith(n)?`${t.root}/${e.slice(n.length)}`:e}function _e(e,t){let n=`${a}/`,r=e=>e.some(e=>n.startsWith(e.endsWith(`/`)?e:`${e}/`)),i=e.map(e=>j(e,t));return r(e)&&!r(i)&&i.push(n),i}async function M(e){try{if(e.signal?.aborted)return{ok:!1,reason:`aborted`,legacyFallbackSafe:!1};let t=e.instructions??w,n=ge(e.cone),r=k(t,e.cone?.folder??`cone`),i=await ve(e.vfs,n),a=t.kind===`dream`?i.dreamTimeoutSeconds:i.timeoutSeconds,o=L(e.sessionArchivePath);try{await xe(e.vfs,n.memoryPath,e.sessionArchivePath)}catch(e){return{ok:!1,reason:`snapshot: ${R(e)}`,legacyFallbackSafe:!0}}let s=t.kind===`dream`?`(no session archive this pass)`:e.sessionArchivePath,c=Math.max(1,Math.round(a/60)),l=fe(t,s,c),d=Ce(i,a,we(Te(i.promptTemplate.includes(T)?i.promptTemplate:`${i.promptTemplate.trimEnd()}\n\n${T}`,{MEMORY_PATH:o,SESSION_ARCHIVE_PATH:s,SESSION_COUNT:String(e.sessionCount),BUDGET_CHARS:String(u(e.sessionCount)),SCRATCH_DIR:r,VISIBLE_PATHS:i.visiblePaths.join(`, `),TODAY:e.today??(/* @__PURE__ */ new Date()).toISOString().slice(0,10),TIMEOUT_MINUTES:String(c),TASK:l}),r),e.sessionArchivePath,n,e.cone,t);e.signal&&(d.signal=e.signal);let f=await Ee(Promise.resolve().then(()=>e.spawn(d)),a*1e3+S,e.signal);if(f.type===`timeout`)return x.warn(`Agentic memory wait timed out past the in-run bound + grace`,{timeoutSeconds:a,graceMs:S}),{ok:!1,reason:`timeout`,legacyFallbackSafe:!1};if(f.type===`aborted`)return{ok:!1,reason:`aborted`,legacyFallbackSafe:!1};if(f.type===`error`)return{ok:!1,reason:R(f.error),legacyFallbackSafe:!0};if(f.result.exitCode!==0){let e=(f.result.finalText??``).startsWith(ee);return{ok:!1,reason:f.result.finalText||`exit-${f.result.exitCode}`,legacyFallbackSafe:!e}}return{ok:!0,report:f.result.finalText}}catch(e){return x.warn(`Agentic memory pass failed`,{error:R(e)}),{ok:!1,reason:R(e),legacyFallbackSafe:!1}}}async function ve(e,t=r){try{let n=await e.readFile(d,{encoding:`utf-8`});return N(typeof n==`string`?n:new TextDecoder().decode(n),t)}catch(e){return x.warn(`Could not load valid ${d}; using built-in default`,{error:R(e)}),N(ne,t)}}function N(e,t=r){let n=re(e,`MEMORY.md`),i=ae(n.frontmatter,de),a=p(i,`writablePaths`,ce(t));if(a.length===0)throw Error(`writablePaths must not be empty`);m(a,`writablePaths`);let o=p(i,`visiblePaths`,le(t));m(o,`visiblePaths`);let s=h(i.timeoutSeconds,600,1200),c=h(i.dreamTimeoutSeconds,3600,7200,`dreamTimeoutSeconds`),l=ie(i.model,`model`);return{writablePaths:a.map(e=>j(e,t)),visiblePaths:_e(o,t),allowedCommands:[.../* @__PURE__ */ new Set([...ue,...p(i,`allowedCommands`,[])])],...l?{model:l}:{},thinkingLevel:ye(i.thinkingLevel),timeoutSeconds:s,dreamTimeoutSeconds:c,promptTemplate:n.body}}function ye(e){if(e===void 0)return`medium`;if(typeof e!=`string`||!s(e))throw Error(`thinkingLevel must be one of ${c.join(`, `)}`);return e}function P(e){return`/sessions/.curated/${e.slice(e.lastIndexOf(`/`)+1)}`}function F(e){return`/sessions/.curation/${e.slice(e.lastIndexOf(`/`)+1)}`}function I(e){return`${F(e)}/base.md`}function L(e){return`${F(e)}/draft.md`}function be(e){return`${F(e)}/status.json`}async function xe(e,t,n){let r=``;try{let n=await e.readFile(t,{encoding:`utf-8`});r=typeof n==`string`?n:new TextDecoder().decode(n)}catch{}await e.mkdir(F(n),{recursive:!0}),await e.writeFile(I(n),r),await e.writeFile(L(n),r)}function Se(e,t,n){let r=e.map(e=>e===t?n:e);return r.includes(n)?r:[...r,n]}function Ce(e,t,n,r,i,a,o){let s=e.model===`parent`||e.model===`cone`,c=I(r),l=L(r);return{cwd:i.root,writablePaths:Se(e.writablePaths,i.memoryPath,l),visiblePaths:[...e.visiblePaths,`${F(r)}/`],allowedCommands:e.allowedCommands,prompt:n,thinkingLevel:e.thinkingLevel,persistSession:!0,name:D(o,a?.folder??`cone`),exclusiveWith:me(o,a?.folder??`cone`),...a?.jid?{parentJid:a.jid}:{},notifyOnComplete:!0,successReceiptPath:P(r),mergeOnSuccess:{targetPath:i.memoryPath,basePath:c,draftPath:l},outcomeReceiptPath:be(r),maxWallClockMs:t*1e3,...!s&&e.model?{modelId:e.model}:{}}}function we(e,t){if(t===A)return e;let n=`\0SCRATCH\0`;return e.replaceAll(t,n).replaceAll(A,t).replaceAll(n,t)}function Te(e,t){let n=e;for(let[e,r]of Object.entries(t))n=n.replaceAll(`{{${e}}}`,r);return n}function Ee(e,t,n){return new Promise(r=>{let i=!1,a=e=>{i||(i=!0,clearTimeout(s),n?.removeEventListener(`abort`,o),r(e))},o=()=>a({type:`aborted`}),s=setTimeout(()=>a({type:`timeout`}),t);n?.addEventListener(`abort`,o,{once:!0}),e.then(e=>a({type:`result`,result:e}),e=>a({type:`error`,error:e}))})}function R(e){return e instanceof Error?e.message:String(e)}const z=e(`live-session-curation`),B=`/sessions/.live-deltas`,V={maxMessages:200,maxChars:8e4},H=/* @__PURE__ */ new Map,U=/* @__PURE__ */ new Map;function W(){return t(`memory-v2`)&&t(`agentic-memory`)}function G(e,t,n){return`${B}/${e}-${t}-${n}.md`}function K(e,t=V){if(e.length===0)return[];let n=[],r=0;for(let i of e){let e=ze(i);if(n.length>=t.maxMessages||n.length>0&&r+e>t.maxChars)break;n.push(i),r+=e}n.length===0&&n.push(e[0]);let i=n[n.length-1].timestamp,a=n.length;for(;a<e.length&&e[a].timestamp===i;)n.push(e[a]),a+=1;return n}function De(e){if(!W())return Promise.resolve({status:`skipped`,reason:`flag-off`});let t=e.cone.folder||`cone`,n={...e.cone,folder:t},r=Re();if(!r)return z.info(`Live delta curation skipped: agent bridge not published`,{cone:t}),Promise.resolve({status:`skipped`,reason:`no-bridge`});let i={...e,cone:n},a=H.get(t);return a==null?Y(i,r):(U.set(t,i),a)}function q(e){let t=e.cone.folder||`cone`,n={...e.cone,folder:t},r={...e,cone:n};if(e.hold===`held`)return ke(r);let i=H.get(t);return i==null?X(t,ke(r)):i.then(()=>q(r))}async function J(e,t,n){n>0&&await v(async()=>{let r=await g(Z(e)),i=r.findIndex(e=>e.filename===t);if(i===-1)return;let a=r[i].curatedThrough??0,o=n>a;if(!o&&r[i].memoryFailed===void 0)return;let{memoryFailed:s,...c}=r[i],l=r.slice();l[i]={...c,curatedThrough:Math.max(n,a),memoryCuratedAt:(/* @__PURE__ */ new Date()).toISOString()},await _(Z(e),l),o&&await Pe(e,`${f}/${t}`,n),await e.flush?.()})}function Y(e,t){return X(e.cone.folder||`cone`,q({vfs:e.vfs,cone:e.cone,spawn:e=>t.spawn(e),enabled:!0,hold:`held`,...e.limits?{limits:e.limits}:{}}))}function X(e,t){return H.set(e,t),t.then(()=>Oe(e,t),()=>Oe(e,t)),t}function Oe(e,t){if(H.get(e)!==t)return;H.delete(e);let n=U.get(e);if(U.delete(e),!n||!W())return;let r=Re();r&&Y(n,r).catch(t=>{z.warn(`Follow-up live delta curation failed to start`,{cone:e,error:Q(t)})})}async function ke(e){if(!(e.enabled??W()))return{status:`skipped`,reason:`flag-off`};let t=e.cone.folder||`cone`,n=e.limits??V,r;try{r=await g(Z(e.vfs))}catch(e){return z.warn(`Live delta curation skipped: sessions index unreadable`,{cone:t,error:Q(e)}),{status:`skipped`,reason:`index-unreadable`}}let i=oe(r,t);if(!i?.sessionId)return{status:`skipped`,reason:`no-archive`};let a=await Fe(e.vfs,`${f}/${i.filename}`);if(!a)return{status:`skipped`,reason:`no-archive`};let o=await Ae(e.vfs,i.sessionId,i.filename,a,i.curatedThrough??0,n),s=b(a,o);if(s.length===0)return{status:`skipped`,reason:`caught-up`};let c=K(s,n),l=y(c);if(l<=o)return{status:`skipped`,reason:`caught-up`};let u=G(i.sessionId,o,l);await je(e.vfs,{sessionId:i.sessionId,filename:i.filename,title:i.title,frozenAt:i.frozenAt,cone:i.cone,coneLabel:i.coneLabel},c,u);let d=await M({spawn:e.spawn,vfs:e.vfs,sessionArchivePath:u,sessionCount:r.length,...t!==`cone`||e.cone.jid?{cone:e.cone}:{},...e.signal?{signal:e.signal}:{}});return d.ok?(await J(e.vfs,i.filename,l),z.info(`Live delta curated`,{cone:t,filename:i.filename,through:l}),{status:`curated`,curatedThrough:l,filename:i.filename}):(d.reason.startsWith(`agent: name already in use`)||await Me(e.vfs,i.filename,d.reason),z.warn(`Live delta curation failed`,{cone:t,filename:i.filename,reason:d.reason}),{status:`failed`,reason:d.reason,filename:i.filename})}async function Ae(e,t,n,r,i,a){let o=i;for(let n=0;n<50;n+=1){let n=b(r,o);if(n.length===0)break;let i=y(K(n,a??V));if(i<=o||!await Ie(e,G(t,o,i)))break;o=i}return o>i&&await J(e,n,o),o}async function je(e,t,n,r){let i={id:t.sessionId,sessionId:t.sessionId,title:t.title,frozenAt:t.frozenAt,createdAt:n[0]?.timestamp??0,updatedAt:y(n),messageCount:n.length,messages:[...n],...t.cone?{cone:t.cone}:{},...t.coneLabel?{coneLabel:t.coneLabel}:{}};await e.mkdir(B,{recursive:!0}),await e.writeFile(r,se(i))}async function Me(e,t,n){await Ne(e,t,{ok:!1,reason:n})}async function Ne(e,t,n,r){try{await v(async()=>{let i=await g(Z(e)),a=i.findIndex(e=>e.filename===t);if(a===-1)return;let o=i[a].cone??`cone`;if(r!==void 0&&o!==r)return;let{memoryFailed:s,...c}=i[a],l=i.slice();l[a]=n.ok?{...c,memoryCuratedAt:(/* @__PURE__ */ new Date()).toISOString()}:{...i[a],memoryFailed:n.reason.slice(0,300)},await _(Z(e),l),await e.flush?.()})}catch(e){z.warn(`Failed to record curation outcome`,{filename:t,error:Q(e)})}}async function Pe(e,t,n){let r;try{r=await Le(e,t)}catch(e){if($(e))return;throw e}let i=r.match(/^---\n([\s\S]*?)\n---\n/);if(!i)return;let a=`curatedThrough: ${n}`,o=/^curatedThrough:\s*\d+\s*$/m.test(i[1])?i[1].replace(/^curatedThrough:\s*\d+\s*$/m,a):`${i[1]}\n${a}`;o!==i[1]&&await e.writeFile(t,`---\n${o}\n---\n${r.slice(i[0].length)}`)}async function Fe(e,t){try{return te(await Le(e,t)).messages}catch(e){if($(e))return null;throw e}}async function Ie(e,t){try{return await e.readFile(P(t),{encoding:`utf-8`}),!0}catch(e){if($(e))return!1;throw e}}async function Le(e,t){let n=await e.readFile(t,{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}function Re(){return globalThis.__slicc_agent}function ze(e){let t=e.toolCalls?JSON.stringify(e.toolCalls).length:0;return e.content.length+t}function Z(e){return e}function Q(e){return e instanceof Error?e.message:String(e)}function $(e){return e instanceof l?e.code===`ENOENT`:typeof e!=`object`||!e||!(`code`in e)?!1:e.code===`ENOENT`}export{q as curateLiveSessionDelta,pe as i,W as liveDeltaCurationEnabled,E as n,M as r,De as scheduleLiveDeltaCuration,Ne as stampCurationOutcome,C as t};
@@ -1,4 +1,4 @@
1
- import{g as e,h as t}from"./core-DoHWT79Y.js";import{v as n}from"./renamed-providers-CKF5I4-o.js";import"./feature-flags-DDJdMcuw.js";import"./account-store-D9MqJPUO.js";import{C as r,_ as i,b as a,l as o,v as s,w as c}from"./zip-stream-Ca_YRvVc.js";import{t as l}from"./MEMORY-B9cGngY_.js";import{t as u}from"./types-D8gIX-W-.js";import{dt as d,ft as f,ht as p,mt as ee,pt as te,ut as ne}from"./wc-shell-BbGmkwhl.js";import"./agent-message-to-chat-BiZHDYFR.js";import{c as re,n as ie,o as m,p as h}from"./frozen-archive-writer-Be4hcxM7.js";import{n as g,t as ae}from"./thinking-level-DCJktR5U.js";var _=`/etc/MEMORY.md`,oe=4e3,se=2e3;function v(e){return Math.round(oe+se*Math.log2((Number.isFinite(e)&&e>=0?e:0)+2))}var ce=`abject.abortive.abrasive.absolute.abstruse.abundant.abyssal.accessible.acerbic.acrid.adamant.adept.adlerian.adornian.adroit.adventurous.aeolian.aerated.aesthetic.affable.aged.ageless.agile.airborne.airlocked.airy.akkadian.alabaster.alacritous.alert.alien.alloyed.allusive.aloof.alpha.alpine.alternate.altruistic.amaranthine.amber.ambidextrous.ambivalent.ambrosial.amiable.amorphous.ample.analog.analytical.ancestral.ancient.angelic.animated.animist.anomalous.antediluvian.antic.antlered.apollinairian.apollonian.apt.aquatic.arbitrary.arcadian.arcane.archaic.archimedean.ardent.arduous.arendtian.argent.argentine.argive.aristotelian.armstrongian.aromatic.arresting.artful.arthurian.articulate.artificial.artisanal.artless.ascetic.ashen.ashy.asimovian.aspiring.assiduous.assyrian.asteroidal.astral.astute.asynchronous.athenian.atlantean.atomic.attentive.attic.audacious.audenesque.augmented.august.augustan.aureate.auric.auroral.austenian.austere.austral.authentic.autonomous.autumnal.avalonian.avid.avuncular.aztec.azure.babbagean.babylonian.bacchic.bachian.bactrian.ballardian.ballistic.balmy.banksian.barefoot.barreled.barthesian.bartokian.bashy.baudelairean.bayesian.beatific.beckettesque.beckettian.beethovenian.beguiling.bellicose.bemused.benevolent.benign.benjaminian.bergmanesque.beta.bewitched.binary.bionic.bismarckian.bitter.bitwise.blackened.blakean.blameless.bland.blazar.blazing.blended.blessed.blissful.blistered.blithe.blooming.blunt.blustery.boeotian.boggy.bohrian.boingy.boisterous.bold.bolted.bombastic.bonny.boolean.boreal.borgesian.borgian.bosky.botticellian.bottled.bouncy.boundless.bountiful.bourbon.bradburyan.brahmsian.braised.brambly.brash.brave.brazen.bready.breathless.brechtian.breezy.briared.briery.bright.brilliant.brined.briny.brisk.bristling.briton.brittenesque.broadband.brontean.bronzed.brooding.browned.browningesque.brucknerian.brumal.brusque.bubbling.bubbly.bucolic.budding.bunuelian.buoyant.burnished.burnt.buttered.buttery.bygone.byronic.bytewise.byzantine.cacophonous.caesarean.callow.calm.candescent.candid.candied.canny.cantorian.capable.capricious.caramelized.caravaggesque.carbon.carefree.carolingian.cartesian.carved.casked.cast.cavafian.cavalier.celebrated.celestial.celtic.ceramic.cerebral.ceremonious.cerulean.cervantine.cezannesque.chagallian.chalky.chaplinesque.charcoal.charismatic.charmed.charming.charred.chaucerian.cheeky.cheerful.chekhovian.cherished.cherubic.chewy.chilled.chilly.chimerical.chipper.chirpy.chivalrous.chopinesque.chromospheric.chronal.chthonic.chubby.chunky.churchillian.cimmerian.cindered.circumspect.circumstellar.citrusy.civil.clandestine.clangy.clarified.clarkean.classic.clement.clever.cloaked.clockwork.clompy.cloned.cloudlike.cloudy.clunky.clustered.coastal.cobalt.cognitive.coherent.coleridgean.colossal.coltranesque.comely.cometary.compiled.complacent.composite.concurrent.conradian.constablean.convivial.copernican.copious.coplandesque.cordial.corinthian.corked.cornelian.coronal.cortical.cosmic.coy.cozy.cracked.crackling.crafty.cranky.crashy.creamy.credible.crepuscular.cretan.crimson.crisp.crispy.crowned.crumbly.crunchy.crushed.cryo.cryofrozen.cryogenic.cryonic.cryptic.crystalline.cuddly.cumulative.cunning.cupric.cured.curious.cursed.cursory.cushy.cybernetic.cyberpunk.cynical.cyprian.daliesque.dancy.dandy.dantean.dantesque.dapper.dappled.daring.dark.darwinian.dashing.dashy.dauntless.davisian.dawning.dazzling.deathless.debonair.deboned.debussyan.decanted.decompiled.decorous.decrypted.deep.deferential.deft.degasian.delectable.deleuzian.delian.deliberate.delicate.delirious.delphic.delta.demure.depressurized.derridean.destined.devout.dewy.dexterous.diaphanous.diced.dickensian.dickian.dickinsonian.didactic.dieselpunk.diffident.digital.dignified.diligent.dimensional.dinky.dionysian.discerning.discreet.disheveled.disparate.distant.distinct.distributed.diurnal.divine.dizzy.docile.docked.dogged.doomed.dorian.dormant.dostoevskian.dotty.doughty.doughy.downy.dozy.draconic.dreamful.dreamy.drifting.dripping.drizzly.droll.drowsy.druidic.dulcet.dun.dunky.durkheimian.dusky.dwarven.dynamic.dystopian.eager.earnest.earthy.eastward.easygoing.ebony.ebullient.eclectic.eclipsed.ecstatic.edenic.edwardian.effervescent.effulgent.effusive.einsteinian.elamite.elastic.elated.eldritch.electric.electronic.elegant.elegiac.elgarian.eliotian.eliotic.elizabethan.ellingtonian.eloquent.elusive.elven.elvish.elysian.embered.emergent.eminent.emphatic.emulsified.enchanted.encoded.encrypted.endearing.endless.endogenous.energetic.enhanced.enigmatic.enthralling.ephemeral.epic.epicurean.equanimous.errant.erudite.escherian.esoteric.esteemed.eternal.ethereal.ethiopian.etruscan.euclidean.eulerian.euphonious.euphoric.evanescent.evening.eventide.everlasting.evocative.exacting.exalted.exemplary.exo.exogenous.expansive.expressive.exquisite.extraterrestrial.extruded.exuberant.fabled.fabulous.facetious.faithful.fallow.fanciful.fantastic.faradayic.faraway.farmhouse.fastidious.fated.fateful.fathomless.faulknerian.faunal.fearless.feathered.feathery.fecund.federated.feisty.felicitous.felliniesque.fenny.fermented.ferny.ferrous.fervent.fervid.festive.fetching.fey.fickle.fierce.fiery.filleted.filtered.fitzgeraldian.fizzy.flaky.flamboyant.flamed.flashy.flawless.fleecy.fleet.fleeting.flexible.flickering.flinty.floral.florid.flouncy.flourishing.flowering.fluent.fluffy.fluid.fluvial.foamy.folded.fond.foraged.forged.formidable.forthright.fortuitous.forward.foucauldian.fourier.fractal.fragrant.frank.frankish.freckled.free.fresh.freudian.friedmanite.frisky.frizzy.frolicsome.frosted.frosty.frothy.frozen.frugal.fruiting.fruity.funky.furred.furtive.futuristic.fuzzy.gaelic.galactic.galbraithian.galilean.gallant.gallic.galvanic.gamesome.gamma.gandhian.garlanded.garrulous.gauguinesque.gaussian.gauzy.generous.genetic.genial.genomic.genteel.gentle.geomagnetic.georgian.gershwinesque.ghostly.giant.gibsonian.giddy.gifted.giga.giggly.gilded.giottesque.glacial.glad.glazed.gleaming.gleeful.glimmering.glistening.glorious.glossy.glowing.gnomish.godardian.godelian.goethean.goethesque.gogolian.golden.gooey.goofy.gorgeous.gorsy.gossamer.gothic.gowned.goyaesque.graceful.gracious.grainy.grand.grassy.grated.gravitic.gregarious.grilled.groovy.ground.grounded.guileless.gushy.gusty.habermasian.habsburg.hadrianic.halcyon.hale.hallowed.haloed.halved.hamiltonian.han.handelian.handmade.handsome.hanoverian.hapless.happy.hardy.hardyesque.harmonious.hashed.haunted.haydnesque.hayekian.hazy.heady.heaneyesque.hearthside.hearty.heathen.heathered.heavenly.hegelian.heideggerian.heinesque.heinleinian.heirloom.heisenbergian.heliacal.hellenic.hellish.hemingwayesque.herbal.herbertian.herculean.hermetic.heroic.hexed.hibernal.hilbertian.histrionic.hitchcockian.hittite.hoar.hoary.hobbesian.hobbitish.hogarthian.holderlinian.holo.holographic.holy.homerian.homeric.homeward.honest.honeyed.honky.hooded.hooved.hopeful.hopkinsian.hopperesque.hoppy.horatian.horned.hospitable.hot.housemade.huggy.humble.humean.humming.humorous.hunky.hunnish.hurrian.hushed.hydraulic.hyper.hyperborean.hypersonic.hyperspatial.hypnotic.iberian.ibsenite.iced.icy.ideal.idyllic.igneous.illustrious.imaginative.immaculate.immense.immortal.impassioned.impeccable.impetuous.impish.impressive.incan.incandescent.incisive.incorrigible.indefatigable.indelible.indigo.indolent.indomitable.industrious.ineffable.inexorable.infernal.infinite.infra.infrared.infused.ingenious.ingenuous.inimitable.innocuous.inquisitive.insatiable.inspired.intense.intergalactic.interstellar.intragalactic.intrepid.intricate.intrinsic.intuitive.inventive.inveterate.invincible.inward.ionian.ionic.ionospheric.irenic.iridescent.irrepressible.ithacan.itinerant.ivory.jacobean.jammy.jangly.jaunty.jazzy.jeffersonian.jiggly.jingly.jocular.jocund.johnsonian.jolly.jouncy.jovial.jovian.joycean.joyful.joyous.jubilant.judicious.juiced.juicy.jumped.jumpy.jungian.junky.justinianic.jute.kafkaesque.kandinskian.kantian.keatonesque.keatsian.keen.keplerian.keynesian.kierkegaardian.kindly.kindred.kinetic.kiplingesque.klimtian.knowing.kooky.kubrickian.kurosawan.lacanian.laconic.lacquered.lacustrine.lacy.lamarckian.lambda.lambent.laminated.landed.languid.lanky.laplacian.larkinesque.laser.latent.lathed.latin.lattice.laudable.launched.laureled.lavish.layered.leaden.leafy.lean.learned.legendary.leguinian.leibnizian.lemian.lemurian.lenient.leonardesque.liberal.libyan.lidar.light.lighthearted.likable.lilac.lilting.liminal.limpid.lincolnesque.lingering.linnaean.lissome.lisztian.literate.lithe.littoral.lively.loamy.local.lockean.lofty.logical.loopy.loose.loquacious.lorcaesque.lorcan.lossless.lossy.lovecraftian.lovelacean.loyal.lucent.lucid.lucky.ludic.lukewarm.luminal.luminous.lunar.luscious.lush.lushy.lusitanian.lustrous.lydian.lynchian.lyotardian.lyric.lyrical.macerated.machiavellian.macro.magical.magnanimous.magnetar.magnetic.magnetospheric.magnificent.magrittean.mahlerian.majestic.mallarmean.malleable.malthusian.malty.mandelan.manetesque.manifold.marbled.marshy.martial.martian.marvelous.marxian.maser.masked.masterful.matchless.matin.matissean.mature.matutinal.mauve.maverick.mawkish.maxwellian.mayan.meandering.mechanical.median.medicean.mega.mellifluous.mellow.melodic.mendelian.merciful.mercurial.merovingian.merry.meshed.meta.metamorphic.meteoric.meticulous.metternichian.mettlesome.michelangelesque.micro.microwave.midnight.mighty.mild.milled.miltonian.miltonic.minced.mindful.mineral.ming.mingusian.minoan.minty.miraculous.mired.miroesque.mirthful.mischievous.misty.mobile.modest.modular.molecular.molieresque.momentous.mondrianesque.monetian.monkish.mono.montane.moonless.moonlit.mordant.morning.mossy.motley.mottled.mouthwatering.mozartian.mughal.multiversal.munificent.murmuring.mushy.musical.mutable.mutant.mycenaean.mysterious.mystical.mythic.nabokovian.nameless.nano.nanoscale.napoleonic.narrowband.nascent.natty.neat.nebular.nebulous.nefarious.neptunian.nerudian.networked.neural.neutron.neutronic.newtonian.nietzschean.nifty.nimble.noble.nocturnal.nonchalant.nonpareil.noontide.norse.northward.nostalgic.notable.novel.nozickian.nuanced.nubian.nuclear.numinous.nutty.oaky.obdurate.oblique.observant.obstinate.obtuse.oceanic.ochre.odyssean.olden.olympian.omega.omni.onward.opaline.opportune.optical.optimistic.opulent.oracular.orbital.orbiting.orderly.original.ornate.orphic.orwellian.osirian.ostentatious.otherworldly.otiose.ottoman.outgoing.outspoken.outward.overcast.overclocked.ovidian.pacific.pagan.painstaking.palatial.pale.pallid.palpable.paradisal.paradoxical.parallel.paramount.parkerish.parsonian.parthian.passionate.pastoral.patched.pathless.patient.pavlovian.peaceable.peaceful.peachy.pearly.peaty.pebbly.peeled.peered.peerless.pelagic.pellucid.penetrating.pensive.peppered.peppery.peppy.perceptive.perennial.perfect.perfumed.perky.persian.persistent.perspicacious.persuasive.pert.pervasive.pessoan.petaled.petrarchan.phantom.pharaonic.phased.philosophical.phlegmatic.phoenician.photonic.photospheric.phrygian.picassoesque.pickled.pictish.picturesque.pillowy.pindaric.pinteresque.piping.piquant.pirandellian.pithy.pivotal.pixelated.placid.planckian.planetary.planetoid.plangent.plasmic.plathian.platinum.platonic.playful.pleasant.plentiful.pliant.plinky.plonky.plucky.plumed.plummy.plush.plushy.plutonian.plutonic.pneumatic.poached.poesque.poetic.poignant.poised.polished.polite.pollockian.poly.polygonal.polymer.polynesian.popean.popped.popular.portly.posh.positronic.posthuman.potent.pouncy.powdery.powerful.pragmatic.prancy.precise.precocious.precognitive.preeminent.premier.prescient.pressed.pressurized.prestigious.pretty.primeval.primordial.princely.printed.pristine.private.prized.prodigious.profane.proficient.profound.profuse.prokofievian.prolific.promethean.prompt.proper.prophetic.prosaic.prosperous.protean.proto.protostellar.proud.proustian.providential.prudent.psionic.puccinian.puckish.pudgy.puffed.pulled.pulsar.punctilious.punctual.pungent.punic.pure.purposeful.pushkinian.pynchonesque.pythagorean.quaint.quantum.quartered.quasar.questing.quick.quiescent.quiet.quintessential.quirky.quixotic.rabelaisian.racinian.radar.radiant.radio.rainwashed.rainy.rakish.rambunctious.raphaelesque.rapid.rapturous.rare.rational.ravelian.rawlsian.raytraced.ready.reasonable.rebooted.receptive.recondite.recursive.redolent.reduced.reedy.refined.reflective.refulgent.regal.relativistic.relaxed.reliable.remarkable.rembrandtesque.remote.rendered.renoiresque.renowned.replete.replicated.resilient.resinous.resolute.resourceful.respectful.resplendent.responsive.restful.restive.restless.reticent.retro.reverent.rhapsodic.rhodian.rhythmic.ricardian.rich.richelieuvian.riemannian.rigorous.rilkean.rimbaudian.rimed.ringed.ripe.ripening.rippling.risible.riverine.riveted.roaming.roaring.roasted.robed.robotic.robust.rolled.roly.roman.romanov.romantic.rompy.rooseveltian.roseate.rosy.rothkoesque.rousing.rousseauian.rowdy.royal.rubenesque.ruddy.runic.rushy.russet.rustic.sabine.sable.sacred.sagacious.sage.saintly.salient.saline.salingeresque.salted.salty.salubrious.samian.sandaled.sandy.sanguine.sapid.sapient.sapphic.sardonic.sarmatian.sartrean.sassy.satiny.saturnian.saturnine.saucy.savory.savvy.saxon.scalding.scarlet.schielesque.schillerian.schoenbergian.scholarly.schubertian.schumannesque.schumpeterian.scintillating.scorched.scorsesean.scrappy.scruffy.scrupulous.scythian.seaborne.seamless.seared.seasonal.seaward.secure.sedate.sedgy.sedimentary.sedulous.seemly.seismic.selenic.selfless.sensible.sensitive.sentient.sentimental.seraphic.sere.serene.seuratian.shaded.shadowed.shadowy.shaggy.shaken.shakespearean.shamanic.shannonian.sharded.sharp.shaved.shavian.shelleyan.shielded.shimmering.shiny.shoreless.shostakovian.shrewd.shucked.sibelian.sibilant.sibylline.sicilian.sidereal.sienna.sifted.sigma.silicon.silken.silky.silly.silty.silver.silvered.simmering.simulated.sincere.singed.singing.singular.sinuous.sisyphean.sizzling.skeptical.skillful.skinnerian.skittish.skyward.sleek.sleepless.sleepy.slender.sliced.slick.slipstreamed.slow.sly.smart.smashy.smithian.smoked.smoky.smoldering.smooth.snappy.snazzy.snoozy.snowy.snug.snuggly.soaring.sociable.socratic.sodden.soft.sogdian.solar.solarpunk.solemn.solid.somnolent.sonar.song.sonic.sonorous.sooty.soporific.soulful.sound.soundless.sour.southward.sovereign.spaceborne.spacefaring.spacious.sparkling.sparkly.spartan.special.speckled.spectacular.spectral.speedy.spellbound.spiced.spicy.spielbergian.spiffy.spinozan.spirited.splashy.splendid.split.sploshy.spontaneous.spooky.sporty.spotless.spotted.sprightly.sproingy.spry.spun.spunky.squally.squashy.squelchy.squiggly.squishy.staid.stainless.stalwart.starborn.starfaring.starless.starlit.stasisbound.stately.steadfast.steady.steaming.steampunk.steely.steeped.steinbeckian.stellar.stellarborn.sticky.stirred.stirring.stoic.stoical.stolid.stompy.stoppardian.storied.stormy.stout.strained.stratospheric.straussian.stravinskian.streaky.stretched.striking.strindbergian.striped.strong.stuart.stubby.studious.stunning.sturdy.stygian.suave.subatomic.sublime.suborbital.subsonic.substantial.subtle.succinct.succulent.sudsy.sugared.sugary.sumerian.summery.sunless.sunlit.sunny.sunward.superb.supergalactic.superlative.superluminal.supersonic.supple.supreme.sure.surreptitious.svelte.swanky.sweeping.sweet.swift.swiftian.swirled.swooshy.sylvan.sympathetic.synaptic.synchronous.synthetic.syrupy.tableside.tachyonic.taciturn.talented.talleyrandian.tame.tang.tangy.tarantinoesque.tarkovskian.tart.tasteful.tattered.taut.tawny.tectonic.telekinetic.telepathic.temperate.tempered.temporal.tenacious.tender.tennysonian.tenuous.tepid.tera.terran.terrific.terse.textured.thackerayan.thankful.thawed.theban.thessalian.theta.thorny.thorough.thoughtful.thracian.threadbare.thriving.thundery.tidal.tidy.timeless.timely.timeworn.tinkly.tiny.tipsy.tireless.titanesque.titanian.titanic.titanium.titianesque.toasted.toasty.tocharian.tokenized.tolerant.tolkienesque.tolstoyan.tonic.tonky.toothsome.torched.totemic.tough.towering.trackless.tranquil.transcendent.transhuman.treacly.treasured.tremendous.tremulous.trenchant.tricky.trim.triumphant.trojan.trollopian.truculent.true.truffautian.truffled.trusty.truthful.tudor.turbo.turingian.turneresque.twangy.twilight.twilit.twinkling.twinkly.ubiquitous.ultra.ultrasonic.ultraviolet.umami.umber.unassuming.unbounded.uncanny.uncorked.unctuous.undaunted.underworldly.undocked.undying.unearthly.unerring.unflappable.unique.unknown.unruffled.upbeat.upgraded.upright.upstanding.upward.uranian.urbane.utopian.vacuous.valeryan.valiant.valorous.vandal.vangoghian.vast.veblenian.vectorized.vedic.vehement.veiled.velazquezian.velvet.velvety.venerable.venturous.venusian.veracious.verbose.verdant.verdian.verdurous.verlainian.vermeerian.vermilion.vernal.verneian.versatile.vesper.vespertine.vibrant.victorian.vigilant.vigorous.vintage.violet.virgilian.virtual.virtuous.visceral.vital.vivacious.vivid.vocal.voidborn.voidward.volcanic.voltairean.voluble.vonnegutian.voracious.voxel.vroomy.wacky.wagnerian.wakeful.waking.wan.wandering.warholian.warm.warped.wary.washingtonian.wayward.wealthy.weathered.weberian.welcome.welded.wellesian.wellsian.westward.whacky.whimsical.whimsy.whipped.whisked.whispering.whistlerian.whitmanesque.whole.wholesome.whooshy.wide.wiggly.wild.wildean.willowy.wilsonian.wily.windswept.windy.winged.winning.winsome.wintry.wired.wireframe.wireless.wise.wishful.wispy.wistful.wittgensteinian.witty.wobbly.wodehousian.wondrous.wonky.wooded.woody.woolly.woozy.wordless.wordsworthian.wormholed.worthy.wraithlike.wreathed.wriggly.wry.xenial.xeno.yanky.yearning.yeasty.yeatsian.young.youthful.yuletide.yummy.zany.zappy.zealous.zested.zestful.zesty.zeta.zingy.zippy.zodiacal.zonked.zonky.zoomy.zoroastrian`.split(`.`),le=`abalone.absinthe.absyrtus.accelerator.achilles.acorn.acquerello.actuator.adobo.adonis.aeetes.aegis.aello.aeneas.aengus.aether.affogato.afterburner.agartha.agate.agni.agnolotti.aioli.airlock.ajax.aji.albatross.alder.ale.alecto.aleppo.alfheim.allegory.alliteration.almond.amaranth.amaretto.amaterasu.ambrosia.americano.amphiaraus.anago.anapest.ancho.anchovy.android.andromeda.anise.annal.annwn.ansible.antaeus.antenna.anthem.antigone.antimony.antistrophe.anubis.aoidos.aperol.aphelion.aphrodite.apogee.apollo.apple.apricot.aquamarine.aquavit.aqueduct.arabica.arachne.arawn.arbor.arborio.arc.arcadia.arch.archipelago.ares.argo.argon.argonaut.aria.ariadne.ark.arke.armagnac.array.arrow.artemis.arthur.artichoke.artifact.arugula.asgard.asgardia.ash.asparagus.aspen.assam.assonance.asteroid.astronaut.atalanta.athena.atlantis.atlas.atoll.atom.atropos.aubergine.augean.aura.aurora.avalon.avalonia.avocado.awning.axion.axle.azurite.bacchus.bagna.baharat.balder.ballad.balladeer.banana.banshee.baozi.bard.barge.barium.barley.barn.basalt.basil.basilisk.basmati.bastet.bastion.bay.bayleaf.beacon.beam.bean.bearing.beech.beetroot.behemoth.bellini.beowulf.bergamot.berth.beryl.beryllium.bifrost.biodome.birch.biscotti.bismuth.bisque.bit.bittern.blackberry.blast.blaster.blini.block.blodeuwedd.bloodstone.blossom.bluebell.blueberry.bolt.bomba.bonito.boom.borage.boson.botargo.bottarga.bouillon.boundary.bow.bower.bragi.bramble.bran.branch.brandy.branwen.breeze.brew.bridge.brigid.brioche.broccoli.brook.brulee.brunhild.brush.bucatini.buckler.buckwheat.buffer.bulkhead.bunting.burrata.burst.bus.busiris.butte.butter.buttercup.butterscotch.byte.cabbage.cabin.cacao.cachaca.cache.cacus.cadence.caesura.calamarata.calamari.calcite.caldera.calliope.calvados.calypso.cam.camellia.camelot.camembert.campari.canal.cannelloni.cannoli.canopy.cantaloupe.cantata.canticle.canvas.canyon.canzone.capacitor.capellini.caper.capon.cappelletti.cappuccino.capsule.caramel.cardamom.cardoon.carillon.carnaroli.carnation.carol.carrier.carrot.cascade.cashew.cassandra.cassis.castle.castor.cavatelli.caviar.cayenne.cedar.celaeno.celeriac.cell.centaur.cerberi.cerberus.cernunnos.ceryneian.cesium.ceto.ceylon.chaff.chaffinch.chai.chain.chalk.chamomile.champagne.chandra.channel.chanson.chanterelle.chard.charon.chartreuse.cheddar.cherry.chert.chervil.chestnut.chickweed.chicory.chili.chime.chimera.chimichurri.chimney.chip.chipotle.chirashi.chiron.chive.chocolate.chorale.chorizo.chorus.chronicle.chrysanthemum.chrysaor.chrysomallus.chutney.ciabatta.cibola.cider.cilantro.cinder.cinnamon.cipher.circe.circlet.circuit.cirque.cistern.citadel.citrine.citron.clementine.cliff.clio.clipper.cloak.clotho.cloud.clove.clover.cluster.coal.cobbler.cockaigne.cockpit.cocoa.coconut.codex.coffee.cog.cognac.coif.coil.col.colchis.collider.colony.combe.comet.compote.concerto.conchiglie.conduit.confit.console.consomme.consonance.continuum.contour.cookies.coordinate.core.coriander.cormorant.corona.coronet.cortado.corvette.cosmos.cottage.couplet.course.couscous.cove.cowl.cowslip.crab.craft.crag.cranberry.crane.crayon.cream.creme.crepe.cress.crocus.croissant.crosne.crown.cruiser.crumble.cryopod.cryosleep.crystal.cuchulainn.cuckoo.cucumber.cuirass.cumin.cupid.curlew.currant.current.curry.custard.cyborg.cycle.cyclops.cyclotron.cylinder.dactyl.daedalus.daemon.daffodil.dagda.dahlia.daiquiri.dais.daisy.dale.dam.dandelion.danu.daphne.darjeeling.dart.dashi.date.dawn.daydream.deck.deirdre.demeter.destroyer.dew.diadem.diary.dill.dimension.diode.diomedean.dionysus.ditalini.ditch.djinn.dock.doenjang.domain.donburi.donjon.door.doppio.dove.downlink.dreadnought.dream.drift.droid.dryad.dukkah.dulce.dumpling.dune.durga.dusk.dust.dyke.eagle.earlgrey.easel.echidna.echo.eclair.eclipse.ecliptic.edamame.eddy.edelweiss.edge.egret.einsteinium.elderflower.eldorado.electra.elegy.elm.elysium.ember.endive.enigma.enjambment.enkidu.envoi.eos.epigram.epistle.epode.erato.erinyes.eros.erymanthian.escargot.espresso.estuary.eumenides.euryale.eurybia.eurydice.eurytion.excalibur.exoplanet.fable.fafnir.falcon.fancy.farfalle.fate.feather.feldspar.fell.fence.fennel.fenrir.fenugreek.fermion.fern.fettuccine.fiddlehead.field.fig.finch.finn.fionn.firebird.firefly.fission.fizz.fjord.flake.flame.flare.flash.flicker.flint.flue.fluorite.flux.flywheel.focaccia.fog.folio.fondant.forge.fortress.foxglove.fragment.fraise.frame.frangipane.frappe.freesia.fregola.freighter.freya.frigate.frigg.frost.fudge.fugue.fumarole.furies.fusilli.fusion.gaia.galahad.galangal.galatea.galaxy.galette.galleon.gallium.ganache.ganesh.gannet.gantry.ganymede.garam.gardenia.garlic.garuda.gateway.gauntlet.gawain.gazebo.gear.gelato.gemelli.genmaicha.genoise.geranium.germ.germanium.geryon.geyser.ghazal.ghee.ghost.gilgamesh.ginger.gingko.ginnungagap.girder.glacier.glade.glaze.gleam.gleeman.glen.glimmer.glint.glitter.gloss.glow.gluon.gnocchi.gochujang.goldfinch.golem.goose.gooseberry.gorgon.gouda.governor.gradient.graeae.granary.granite.grapefruit.grappa.gratin.graviton.greave.grebe.gremolata.grenadine.grendel.grid.griffin.gruyere.guajillo.guava.gudrun.guinevere.gunkan.gwydion.gyoza.gyroscope.habanero.habitat.hades.hadron.haiku.hall.halloumi.halo.halva.hamachi.hangar.hanuman.harissa.harpies.harpy.harvest.hatch.hauberk.hawthorn.haze.hazel.hazelnut.heading.headland.heap.heart.hearth.heather.hecate.hedge.heimdall.hel.helheim.helios.helium.helix.helle.hellebore.helm.hemistich.hephaestus.hera.hermes.heron.hesperides.hestia.hibiscus.hippogriff.hirame.hive.hoisin.hojicha.hollandaise.hollow.holly.hologram.honey.honeycomb.honeysuckle.hood.hoopoe.horizon.horseradish.horus.hrothgar.hub.huckleberry.hue.huginn.hull.husk.hut.hyacinth.hydra.hydras.hylas.hymn.hyperborea.hypercube.hyperdrive.hyperion.hyperspace.hyssop.iamb.ibis.icarus.idas.idunn.idyll.igniter.igraine.ikura.indium.indra.inductor.infusion.injector.ink.inlet.inspiration.ion.iridium.iris.ishtar.isis.isolde.isotope.ivy.iwashi.izanagi.jackdaw.jackfruit.jalapeno.janus.jasmine.jason.jasper.javelin.jay.jet.jiaozi.jongleur.jonquil.jormungandr.jotunheim.journal.julep.jumpgate.juniper.juno.jupiter.kaffir.kale.kali.kampachi.karaage.karasumi.katsu.keel.keep.kefir.kelpie.kenning.kernel.kestrel.khinkali.kiln.kimchi.kingfisher.kinmedai.kirsch.kite.kitsune.kiwi.koan.kohlrabi.kombucha.koshihikari.kraken.krypton.kumquat.kvass.lachesis.lacquer.ladon.ladons.laertes.lager.lagoon.lake.lakshmi.lambic.lament.lance.lancelot.lander.lane.langoustine.lantern.lapis.lark.larkspur.lasagna.latte.laureate.laurel.lava.lavender.leaf.leda.leek.legend.lemon.lemonbalm.lemongrass.lemuria.lens.lentil.lepton.lernaean.lethe.letter.levee.lever.leviathan.lightyear.lily.lime.limerick.limoncello.linden.linguine.link.linnet.lir.lithium.lityerses.lobster.loch.lock.lodge.loki.loop.loquat.lotus.lovage.lugh.lullaby.lungo.luster.lychee.lynceus.lyonesse.lyricist.macadamia.macaron.macchiato.madai.madeleine.madrigal.magma.magnolia.magpie.mail.mainframe.maki.makrut.malachite.manannan.mango.manicotti.manor.manti.manticore.mantle.mantou.manuscript.maple.marble.marduk.margarita.marigold.marjoram.marquee.marrow.martini.marvel.marzipan.masago.masala.mascarpone.mast.matcha.matrix.mead.meadow.mech.medea.medusa.megaera.meleager.memoir.mentaiko.mercury.meringue.merlin.merlot.mesa.mesh.metaphor.meteor.meter.mezcal.mezzaluna.mica.midas.midgard.mill.mimir.mimosa.minerva.minotaur.minstrel.mint.minuet.miracle.mirin.mirror.miso.missive.mist.mjolnir.mocha.module.moira.mojito.molasses.mole.momo.monolith.moonbase.moonbeam.moonstone.moor.mopsus.mordred.morel.morgana.morpheus.morrigan.moss.mote.motet.mousse.mu.mulberry.muninn.muon.muse.muspelheim.mustard.myrtle.mystery.myth.nadir.naga.naiad.nanite.nanobot.narcissus.neapolitan.nebula.nectarine.needle.negroni.nemean.nemesis.neon.neptune.neptunium.nereid.nereus.nessus.nest.nestor.net.nettle.neutrino.nexus.niamh.nib.nibble.nibiru.niflheim.nightingale.nigiri.nike.niobe.njord.nocturne.node.nog.nori.norn.note.nougat.nova.nozzle.nuada.nutmeg.nyx.oak.oasis.oat.obelisk.oberon.obsidian.oceanid.oceanus.octave.octavo.ocypete.ode.odin.odysseus.oisin.okonomiyaki.olive.olympus.oni.onigiri.oolong.oracle.orange.orb.orbit.orbiter.orchard.orchid.oreads.orecchiette.oregano.orion.orpheus.orthros.orthrus.orzo.oscillator.osiris.osmium.osprey.ouroboros.outline.outpost.ouzo.oven.overture.owl.oyster.paccheri.packet.padron.page.palace.palette.palladium.palm.pan.pandan.pandora.panettone.pansotti.pansy.pantoum.papaya.pappardelle.paprika.papyrus.parable.paradox.parcae.parchment.parfait.parmesan.parsec.parsley.parsnip.particle.partridge.parvati.pasilla.passionfruit.pastel.pastis.patina.pavilion.pavlova.peach.peak.pear.pebble.pecan.pegasi.pegasus.pekoe.peleus.pelican.pelmeni.pen.pencil.penelope.penne.peony.pepper.peppermint.percival.peregrine.pergola.peridot.perigee.perihelion.perry.persephone.perseus.persillade.persimmon.pesto.petal.petrel.phase.pheasant.phoenix.pholus.phorcys.photon.phrixus.pickle.pierogi.pigment.pimento.pine.pineapple.ping.pinot.pipe.pipit.piquillo.pisco.pistachio.piston.pith.plane.plasma.plate.plover.plum.plume.pluto.plutonium.poblano.pod.podarge.poet.polenta.pollux.polyphemus.pomegranate.pomelo.pond.pontus.ponzu.pooka.pool.poplar.poppy.porcini.port.portal.porter.porthole.poseidon.positron.prairie.praline.prelude.primrose.prism.probe.profile.prometheus.prosciutto.prosecco.proteus.protocol.psalm.psyche.pudding.puffin.pulse.pumice.pumpkin.purslane.pwyll.pylon.pyrrhic.quadrant.quail.quark.quarto.quartz.quatrain.qubit.quetzalcoatl.queue.quill.quince.quinoa.quiver.radish.radium.radon.ragnarok.rain.rama.ramen.ramp.rampart.ramson.raspberry.ratatoskr.raven.ravioli.ray.reactor.realm.reaper.reed.reef.refrain.region.register.relay.relic.remnant.requiem.reservoir.residue.resistor.resonator.reverie.rhapsode.rhapsody.rhea.rhiannon.rhodium.rhododendron.rhubarb.rhyme.ricotta.riddle.ridge.riesling.rigatoni.rim.ring.risotto.ristretto.river.roast.robin.robusta.roc.rocket.rod.romesco.rondeau.rooibos.rook.root.rose.rosemary.rosewater.roundel.rover.rowan.rubidium.rum.rune.saba.saffron.saga.saison.sake.salmoriglio.salsa.salsify.sambal.sambuca.samphire.sancerre.sandpiper.sangria.sanma.sansho.saraswati.sashimi.sasquatch.satellite.satyr.sauternes.savanna.sawara.sazerac.scaffold.scalar.scallop.scansion.scepter.schnapps.schooner.scop.scorzonera.scotchbonnet.scroll.sector.seed.sekhmet.selene.selenite.selenium.selkie.sencha.sensor.sequoia.serenade.serrano.servo.sesame.sestina.sextet.shack.shade.shadow.shaft.shale.shallot.shambhala.shard.shed.sheen.sherbet.sherry.shield.shimmer.ship.shishito.shiso.shiva.shoyu.shrub.shumai.shuttle.sibyl.sif.signal.sigurd.silhouette.silo.simile.simurgh.singularity.siren.sita.skadi.skald.skiff.skuld.skylark.slant.slate.sleipnir.sling.slipstream.sliver.sloop.sluice.smithy.smoke.snowdrop.socket.sofrito.sonata.sonnet.soot.sorbet.sorrel.souffle.soul.soy.spaceport.spaghetti.spark.sparkle.sparrow.spear.speck.specter.speculoos.spelt.sphere.sphinx.sphinxes.spindle.spinel.spiral.spire.spirit.splinter.spoke.spondee.spore.spring.spritz.spruce.sriracha.ssamjang.stack.stanza.starbase.starlight.starling.starport.starship.stasis.station.steam.stellarator.steppe.stheno.stork.stracciatella.strawberry.stream.strontium.strophe.strozzapreti.strut.stylus.stymphalian.styx.subspace.sumac.summit.sunbeam.sunstone.supernova.surge.surya.susanoo.sushi.svartalfheim.swallow.swan.swarm.sycamore.syleus.synchrotron.tabard.tachyon.tagliatelle.tahini.takoyaki.taliesin.tamari.tamarind.tangerine.tanka.tanker.tapenade.tapioca.tarako.taranis.tare.tarn.tarragon.tartarus.telamon.telemetry.teleporter.tellurium.temaki.tempura.tengu.tensor.tent.tequila.tercet.teriyaki.terminal.tern.terraform.tesseract.tethys.thalassa.thalia.thallium.thaumas.themis.theseus.thistle.thor.thorium.thoth.threshold.throne.throttle.thrush.thruster.thule.thunderbird.thyme.tiamat.tiara.tide.tint.tintagel.tiphys.tiramisu.tirnanog.tisane.tisiphone.titan.tobiko.toccata.toddy.toffee.tofu.tokamak.tomatillo.tomato.tome.tone.tonka.tonkatsu.tor.tortellini.torus.tourmaline.tower.trace.track.transducer.transistor.treacle.trellis.triolet.tristan.triton.trochee.trofie.trope.troubadour.trouvere.truffle.trunk.truss.tug.tulip.tundra.tungsten.turbine.turmeric.turquoise.turret.twinkle.typhon.tyr.udon.ulysses.unagi.uni.unicorn.uplink.uramaki.urania.uranium.urd.urfa.uther.vale.valhalla.valkyrie.valve.vanadium.vanaheim.vanilla.vapor.vareniki.varnish.varuna.vector.veil.vellum.vent.venus.verbena.verdandi.verge.verjus.vermouth.verse.vessel.vesta.vestige.vialone.viewport.villanelle.vishnu.vodka.volcano.volta.volume.vortex.vulcan.wall.walnut.waltz.warbler.warpgate.wasabi.wash.watercress.watermelon.wave.waypoint.web.weir.well.wendigo.wheat.whisky.whisper.wiglaf.willow.wimple.window.wisteria.wonder.wonton.woodcock.woodpecker.word.wormhole.wraith.wren.wyrm.wyvern.xenon.yacht.yakitori.yama.yarrow.yeti.yew.yggdrasil.yokai.yuzu.zaatar.zabaglione.zenith.zephyr.zeus.zinnia.zircon.zirconium.ziti.zone.zucchini`.split(`.`);ce.length*le.length,n(`agent-bridge`);var ue=`agent: name already in use`,y=n(`cone-memory-budget`),de=1.25,fe=i.memoryPath,pe=`/sessions/index.json`,me=4096,he=/^## Auto-extracted/m,ge=`Consolidate the auto-extracted memory bullets below into a single tighter set of durable memories.
1
+ import{g as e,h as t}from"./core-DoHWT79Y.js";import{v as n}from"./renamed-providers-CKF5I4-o.js";import"./feature-flags-DDJdMcuw.js";import"./account-store-DA_90c6T.js";import{C as r,_ as i,b as a,l as o,v as s,w as c}from"./zip-stream-Ca_YRvVc.js";import{t as l}from"./MEMORY-B9cGngY_.js";import{t as u}from"./types-D8gIX-W-.js";import{dt as d,ft as f,ht as p,mt as ee,pt as te,ut as ne}from"./wc-shell-Dl3FRPoa.js";import"./agent-message-to-chat-BiZHDYFR.js";import{c as re,n as ie,o as m,p as h}from"./frozen-archive-writer-Be4hcxM7.js";import{n as g,t as ae}from"./thinking-level-DCJktR5U.js";var _=`/etc/MEMORY.md`,oe=4e3,se=2e3;function v(e){return Math.round(oe+se*Math.log2((Number.isFinite(e)&&e>=0?e:0)+2))}var ce=`abject.abortive.abrasive.absolute.abstruse.abundant.abyssal.accessible.acerbic.acrid.adamant.adept.adlerian.adornian.adroit.adventurous.aeolian.aerated.aesthetic.affable.aged.ageless.agile.airborne.airlocked.airy.akkadian.alabaster.alacritous.alert.alien.alloyed.allusive.aloof.alpha.alpine.alternate.altruistic.amaranthine.amber.ambidextrous.ambivalent.ambrosial.amiable.amorphous.ample.analog.analytical.ancestral.ancient.angelic.animated.animist.anomalous.antediluvian.antic.antlered.apollinairian.apollonian.apt.aquatic.arbitrary.arcadian.arcane.archaic.archimedean.ardent.arduous.arendtian.argent.argentine.argive.aristotelian.armstrongian.aromatic.arresting.artful.arthurian.articulate.artificial.artisanal.artless.ascetic.ashen.ashy.asimovian.aspiring.assiduous.assyrian.asteroidal.astral.astute.asynchronous.athenian.atlantean.atomic.attentive.attic.audacious.audenesque.augmented.august.augustan.aureate.auric.auroral.austenian.austere.austral.authentic.autonomous.autumnal.avalonian.avid.avuncular.aztec.azure.babbagean.babylonian.bacchic.bachian.bactrian.ballardian.ballistic.balmy.banksian.barefoot.barreled.barthesian.bartokian.bashy.baudelairean.bayesian.beatific.beckettesque.beckettian.beethovenian.beguiling.bellicose.bemused.benevolent.benign.benjaminian.bergmanesque.beta.bewitched.binary.bionic.bismarckian.bitter.bitwise.blackened.blakean.blameless.bland.blazar.blazing.blended.blessed.blissful.blistered.blithe.blooming.blunt.blustery.boeotian.boggy.bohrian.boingy.boisterous.bold.bolted.bombastic.bonny.boolean.boreal.borgesian.borgian.bosky.botticellian.bottled.bouncy.boundless.bountiful.bourbon.bradburyan.brahmsian.braised.brambly.brash.brave.brazen.bready.breathless.brechtian.breezy.briared.briery.bright.brilliant.brined.briny.brisk.bristling.briton.brittenesque.broadband.brontean.bronzed.brooding.browned.browningesque.brucknerian.brumal.brusque.bubbling.bubbly.bucolic.budding.bunuelian.buoyant.burnished.burnt.buttered.buttery.bygone.byronic.bytewise.byzantine.cacophonous.caesarean.callow.calm.candescent.candid.candied.canny.cantorian.capable.capricious.caramelized.caravaggesque.carbon.carefree.carolingian.cartesian.carved.casked.cast.cavafian.cavalier.celebrated.celestial.celtic.ceramic.cerebral.ceremonious.cerulean.cervantine.cezannesque.chagallian.chalky.chaplinesque.charcoal.charismatic.charmed.charming.charred.chaucerian.cheeky.cheerful.chekhovian.cherished.cherubic.chewy.chilled.chilly.chimerical.chipper.chirpy.chivalrous.chopinesque.chromospheric.chronal.chthonic.chubby.chunky.churchillian.cimmerian.cindered.circumspect.circumstellar.citrusy.civil.clandestine.clangy.clarified.clarkean.classic.clement.clever.cloaked.clockwork.clompy.cloned.cloudlike.cloudy.clunky.clustered.coastal.cobalt.cognitive.coherent.coleridgean.colossal.coltranesque.comely.cometary.compiled.complacent.composite.concurrent.conradian.constablean.convivial.copernican.copious.coplandesque.cordial.corinthian.corked.cornelian.coronal.cortical.cosmic.coy.cozy.cracked.crackling.crafty.cranky.crashy.creamy.credible.crepuscular.cretan.crimson.crisp.crispy.crowned.crumbly.crunchy.crushed.cryo.cryofrozen.cryogenic.cryonic.cryptic.crystalline.cuddly.cumulative.cunning.cupric.cured.curious.cursed.cursory.cushy.cybernetic.cyberpunk.cynical.cyprian.daliesque.dancy.dandy.dantean.dantesque.dapper.dappled.daring.dark.darwinian.dashing.dashy.dauntless.davisian.dawning.dazzling.deathless.debonair.deboned.debussyan.decanted.decompiled.decorous.decrypted.deep.deferential.deft.degasian.delectable.deleuzian.delian.deliberate.delicate.delirious.delphic.delta.demure.depressurized.derridean.destined.devout.dewy.dexterous.diaphanous.diced.dickensian.dickian.dickinsonian.didactic.dieselpunk.diffident.digital.dignified.diligent.dimensional.dinky.dionysian.discerning.discreet.disheveled.disparate.distant.distinct.distributed.diurnal.divine.dizzy.docile.docked.dogged.doomed.dorian.dormant.dostoevskian.dotty.doughty.doughy.downy.dozy.draconic.dreamful.dreamy.drifting.dripping.drizzly.droll.drowsy.druidic.dulcet.dun.dunky.durkheimian.dusky.dwarven.dynamic.dystopian.eager.earnest.earthy.eastward.easygoing.ebony.ebullient.eclectic.eclipsed.ecstatic.edenic.edwardian.effervescent.effulgent.effusive.einsteinian.elamite.elastic.elated.eldritch.electric.electronic.elegant.elegiac.elgarian.eliotian.eliotic.elizabethan.ellingtonian.eloquent.elusive.elven.elvish.elysian.embered.emergent.eminent.emphatic.emulsified.enchanted.encoded.encrypted.endearing.endless.endogenous.energetic.enhanced.enigmatic.enthralling.ephemeral.epic.epicurean.equanimous.errant.erudite.escherian.esoteric.esteemed.eternal.ethereal.ethiopian.etruscan.euclidean.eulerian.euphonious.euphoric.evanescent.evening.eventide.everlasting.evocative.exacting.exalted.exemplary.exo.exogenous.expansive.expressive.exquisite.extraterrestrial.extruded.exuberant.fabled.fabulous.facetious.faithful.fallow.fanciful.fantastic.faradayic.faraway.farmhouse.fastidious.fated.fateful.fathomless.faulknerian.faunal.fearless.feathered.feathery.fecund.federated.feisty.felicitous.felliniesque.fenny.fermented.ferny.ferrous.fervent.fervid.festive.fetching.fey.fickle.fierce.fiery.filleted.filtered.fitzgeraldian.fizzy.flaky.flamboyant.flamed.flashy.flawless.fleecy.fleet.fleeting.flexible.flickering.flinty.floral.florid.flouncy.flourishing.flowering.fluent.fluffy.fluid.fluvial.foamy.folded.fond.foraged.forged.formidable.forthright.fortuitous.forward.foucauldian.fourier.fractal.fragrant.frank.frankish.freckled.free.fresh.freudian.friedmanite.frisky.frizzy.frolicsome.frosted.frosty.frothy.frozen.frugal.fruiting.fruity.funky.furred.furtive.futuristic.fuzzy.gaelic.galactic.galbraithian.galilean.gallant.gallic.galvanic.gamesome.gamma.gandhian.garlanded.garrulous.gauguinesque.gaussian.gauzy.generous.genetic.genial.genomic.genteel.gentle.geomagnetic.georgian.gershwinesque.ghostly.giant.gibsonian.giddy.gifted.giga.giggly.gilded.giottesque.glacial.glad.glazed.gleaming.gleeful.glimmering.glistening.glorious.glossy.glowing.gnomish.godardian.godelian.goethean.goethesque.gogolian.golden.gooey.goofy.gorgeous.gorsy.gossamer.gothic.gowned.goyaesque.graceful.gracious.grainy.grand.grassy.grated.gravitic.gregarious.grilled.groovy.ground.grounded.guileless.gushy.gusty.habermasian.habsburg.hadrianic.halcyon.hale.hallowed.haloed.halved.hamiltonian.han.handelian.handmade.handsome.hanoverian.hapless.happy.hardy.hardyesque.harmonious.hashed.haunted.haydnesque.hayekian.hazy.heady.heaneyesque.hearthside.hearty.heathen.heathered.heavenly.hegelian.heideggerian.heinesque.heinleinian.heirloom.heisenbergian.heliacal.hellenic.hellish.hemingwayesque.herbal.herbertian.herculean.hermetic.heroic.hexed.hibernal.hilbertian.histrionic.hitchcockian.hittite.hoar.hoary.hobbesian.hobbitish.hogarthian.holderlinian.holo.holographic.holy.homerian.homeric.homeward.honest.honeyed.honky.hooded.hooved.hopeful.hopkinsian.hopperesque.hoppy.horatian.horned.hospitable.hot.housemade.huggy.humble.humean.humming.humorous.hunky.hunnish.hurrian.hushed.hydraulic.hyper.hyperborean.hypersonic.hyperspatial.hypnotic.iberian.ibsenite.iced.icy.ideal.idyllic.igneous.illustrious.imaginative.immaculate.immense.immortal.impassioned.impeccable.impetuous.impish.impressive.incan.incandescent.incisive.incorrigible.indefatigable.indelible.indigo.indolent.indomitable.industrious.ineffable.inexorable.infernal.infinite.infra.infrared.infused.ingenious.ingenuous.inimitable.innocuous.inquisitive.insatiable.inspired.intense.intergalactic.interstellar.intragalactic.intrepid.intricate.intrinsic.intuitive.inventive.inveterate.invincible.inward.ionian.ionic.ionospheric.irenic.iridescent.irrepressible.ithacan.itinerant.ivory.jacobean.jammy.jangly.jaunty.jazzy.jeffersonian.jiggly.jingly.jocular.jocund.johnsonian.jolly.jouncy.jovial.jovian.joycean.joyful.joyous.jubilant.judicious.juiced.juicy.jumped.jumpy.jungian.junky.justinianic.jute.kafkaesque.kandinskian.kantian.keatonesque.keatsian.keen.keplerian.keynesian.kierkegaardian.kindly.kindred.kinetic.kiplingesque.klimtian.knowing.kooky.kubrickian.kurosawan.lacanian.laconic.lacquered.lacustrine.lacy.lamarckian.lambda.lambent.laminated.landed.languid.lanky.laplacian.larkinesque.laser.latent.lathed.latin.lattice.laudable.launched.laureled.lavish.layered.leaden.leafy.lean.learned.legendary.leguinian.leibnizian.lemian.lemurian.lenient.leonardesque.liberal.libyan.lidar.light.lighthearted.likable.lilac.lilting.liminal.limpid.lincolnesque.lingering.linnaean.lissome.lisztian.literate.lithe.littoral.lively.loamy.local.lockean.lofty.logical.loopy.loose.loquacious.lorcaesque.lorcan.lossless.lossy.lovecraftian.lovelacean.loyal.lucent.lucid.lucky.ludic.lukewarm.luminal.luminous.lunar.luscious.lush.lushy.lusitanian.lustrous.lydian.lynchian.lyotardian.lyric.lyrical.macerated.machiavellian.macro.magical.magnanimous.magnetar.magnetic.magnetospheric.magnificent.magrittean.mahlerian.majestic.mallarmean.malleable.malthusian.malty.mandelan.manetesque.manifold.marbled.marshy.martial.martian.marvelous.marxian.maser.masked.masterful.matchless.matin.matissean.mature.matutinal.mauve.maverick.mawkish.maxwellian.mayan.meandering.mechanical.median.medicean.mega.mellifluous.mellow.melodic.mendelian.merciful.mercurial.merovingian.merry.meshed.meta.metamorphic.meteoric.meticulous.metternichian.mettlesome.michelangelesque.micro.microwave.midnight.mighty.mild.milled.miltonian.miltonic.minced.mindful.mineral.ming.mingusian.minoan.minty.miraculous.mired.miroesque.mirthful.mischievous.misty.mobile.modest.modular.molecular.molieresque.momentous.mondrianesque.monetian.monkish.mono.montane.moonless.moonlit.mordant.morning.mossy.motley.mottled.mouthwatering.mozartian.mughal.multiversal.munificent.murmuring.mushy.musical.mutable.mutant.mycenaean.mysterious.mystical.mythic.nabokovian.nameless.nano.nanoscale.napoleonic.narrowband.nascent.natty.neat.nebular.nebulous.nefarious.neptunian.nerudian.networked.neural.neutron.neutronic.newtonian.nietzschean.nifty.nimble.noble.nocturnal.nonchalant.nonpareil.noontide.norse.northward.nostalgic.notable.novel.nozickian.nuanced.nubian.nuclear.numinous.nutty.oaky.obdurate.oblique.observant.obstinate.obtuse.oceanic.ochre.odyssean.olden.olympian.omega.omni.onward.opaline.opportune.optical.optimistic.opulent.oracular.orbital.orbiting.orderly.original.ornate.orphic.orwellian.osirian.ostentatious.otherworldly.otiose.ottoman.outgoing.outspoken.outward.overcast.overclocked.ovidian.pacific.pagan.painstaking.palatial.pale.pallid.palpable.paradisal.paradoxical.parallel.paramount.parkerish.parsonian.parthian.passionate.pastoral.patched.pathless.patient.pavlovian.peaceable.peaceful.peachy.pearly.peaty.pebbly.peeled.peered.peerless.pelagic.pellucid.penetrating.pensive.peppered.peppery.peppy.perceptive.perennial.perfect.perfumed.perky.persian.persistent.perspicacious.persuasive.pert.pervasive.pessoan.petaled.petrarchan.phantom.pharaonic.phased.philosophical.phlegmatic.phoenician.photonic.photospheric.phrygian.picassoesque.pickled.pictish.picturesque.pillowy.pindaric.pinteresque.piping.piquant.pirandellian.pithy.pivotal.pixelated.placid.planckian.planetary.planetoid.plangent.plasmic.plathian.platinum.platonic.playful.pleasant.plentiful.pliant.plinky.plonky.plucky.plumed.plummy.plush.plushy.plutonian.plutonic.pneumatic.poached.poesque.poetic.poignant.poised.polished.polite.pollockian.poly.polygonal.polymer.polynesian.popean.popped.popular.portly.posh.positronic.posthuman.potent.pouncy.powdery.powerful.pragmatic.prancy.precise.precocious.precognitive.preeminent.premier.prescient.pressed.pressurized.prestigious.pretty.primeval.primordial.princely.printed.pristine.private.prized.prodigious.profane.proficient.profound.profuse.prokofievian.prolific.promethean.prompt.proper.prophetic.prosaic.prosperous.protean.proto.protostellar.proud.proustian.providential.prudent.psionic.puccinian.puckish.pudgy.puffed.pulled.pulsar.punctilious.punctual.pungent.punic.pure.purposeful.pushkinian.pynchonesque.pythagorean.quaint.quantum.quartered.quasar.questing.quick.quiescent.quiet.quintessential.quirky.quixotic.rabelaisian.racinian.radar.radiant.radio.rainwashed.rainy.rakish.rambunctious.raphaelesque.rapid.rapturous.rare.rational.ravelian.rawlsian.raytraced.ready.reasonable.rebooted.receptive.recondite.recursive.redolent.reduced.reedy.refined.reflective.refulgent.regal.relativistic.relaxed.reliable.remarkable.rembrandtesque.remote.rendered.renoiresque.renowned.replete.replicated.resilient.resinous.resolute.resourceful.respectful.resplendent.responsive.restful.restive.restless.reticent.retro.reverent.rhapsodic.rhodian.rhythmic.ricardian.rich.richelieuvian.riemannian.rigorous.rilkean.rimbaudian.rimed.ringed.ripe.ripening.rippling.risible.riverine.riveted.roaming.roaring.roasted.robed.robotic.robust.rolled.roly.roman.romanov.romantic.rompy.rooseveltian.roseate.rosy.rothkoesque.rousing.rousseauian.rowdy.royal.rubenesque.ruddy.runic.rushy.russet.rustic.sabine.sable.sacred.sagacious.sage.saintly.salient.saline.salingeresque.salted.salty.salubrious.samian.sandaled.sandy.sanguine.sapid.sapient.sapphic.sardonic.sarmatian.sartrean.sassy.satiny.saturnian.saturnine.saucy.savory.savvy.saxon.scalding.scarlet.schielesque.schillerian.schoenbergian.scholarly.schubertian.schumannesque.schumpeterian.scintillating.scorched.scorsesean.scrappy.scruffy.scrupulous.scythian.seaborne.seamless.seared.seasonal.seaward.secure.sedate.sedgy.sedimentary.sedulous.seemly.seismic.selenic.selfless.sensible.sensitive.sentient.sentimental.seraphic.sere.serene.seuratian.shaded.shadowed.shadowy.shaggy.shaken.shakespearean.shamanic.shannonian.sharded.sharp.shaved.shavian.shelleyan.shielded.shimmering.shiny.shoreless.shostakovian.shrewd.shucked.sibelian.sibilant.sibylline.sicilian.sidereal.sienna.sifted.sigma.silicon.silken.silky.silly.silty.silver.silvered.simmering.simulated.sincere.singed.singing.singular.sinuous.sisyphean.sizzling.skeptical.skillful.skinnerian.skittish.skyward.sleek.sleepless.sleepy.slender.sliced.slick.slipstreamed.slow.sly.smart.smashy.smithian.smoked.smoky.smoldering.smooth.snappy.snazzy.snoozy.snowy.snug.snuggly.soaring.sociable.socratic.sodden.soft.sogdian.solar.solarpunk.solemn.solid.somnolent.sonar.song.sonic.sonorous.sooty.soporific.soulful.sound.soundless.sour.southward.sovereign.spaceborne.spacefaring.spacious.sparkling.sparkly.spartan.special.speckled.spectacular.spectral.speedy.spellbound.spiced.spicy.spielbergian.spiffy.spinozan.spirited.splashy.splendid.split.sploshy.spontaneous.spooky.sporty.spotless.spotted.sprightly.sproingy.spry.spun.spunky.squally.squashy.squelchy.squiggly.squishy.staid.stainless.stalwart.starborn.starfaring.starless.starlit.stasisbound.stately.steadfast.steady.steaming.steampunk.steely.steeped.steinbeckian.stellar.stellarborn.sticky.stirred.stirring.stoic.stoical.stolid.stompy.stoppardian.storied.stormy.stout.strained.stratospheric.straussian.stravinskian.streaky.stretched.striking.strindbergian.striped.strong.stuart.stubby.studious.stunning.sturdy.stygian.suave.subatomic.sublime.suborbital.subsonic.substantial.subtle.succinct.succulent.sudsy.sugared.sugary.sumerian.summery.sunless.sunlit.sunny.sunward.superb.supergalactic.superlative.superluminal.supersonic.supple.supreme.sure.surreptitious.svelte.swanky.sweeping.sweet.swift.swiftian.swirled.swooshy.sylvan.sympathetic.synaptic.synchronous.synthetic.syrupy.tableside.tachyonic.taciturn.talented.talleyrandian.tame.tang.tangy.tarantinoesque.tarkovskian.tart.tasteful.tattered.taut.tawny.tectonic.telekinetic.telepathic.temperate.tempered.temporal.tenacious.tender.tennysonian.tenuous.tepid.tera.terran.terrific.terse.textured.thackerayan.thankful.thawed.theban.thessalian.theta.thorny.thorough.thoughtful.thracian.threadbare.thriving.thundery.tidal.tidy.timeless.timely.timeworn.tinkly.tiny.tipsy.tireless.titanesque.titanian.titanic.titanium.titianesque.toasted.toasty.tocharian.tokenized.tolerant.tolkienesque.tolstoyan.tonic.tonky.toothsome.torched.totemic.tough.towering.trackless.tranquil.transcendent.transhuman.treacly.treasured.tremendous.tremulous.trenchant.tricky.trim.triumphant.trojan.trollopian.truculent.true.truffautian.truffled.trusty.truthful.tudor.turbo.turingian.turneresque.twangy.twilight.twilit.twinkling.twinkly.ubiquitous.ultra.ultrasonic.ultraviolet.umami.umber.unassuming.unbounded.uncanny.uncorked.unctuous.undaunted.underworldly.undocked.undying.unearthly.unerring.unflappable.unique.unknown.unruffled.upbeat.upgraded.upright.upstanding.upward.uranian.urbane.utopian.vacuous.valeryan.valiant.valorous.vandal.vangoghian.vast.veblenian.vectorized.vedic.vehement.veiled.velazquezian.velvet.velvety.venerable.venturous.venusian.veracious.verbose.verdant.verdian.verdurous.verlainian.vermeerian.vermilion.vernal.verneian.versatile.vesper.vespertine.vibrant.victorian.vigilant.vigorous.vintage.violet.virgilian.virtual.virtuous.visceral.vital.vivacious.vivid.vocal.voidborn.voidward.volcanic.voltairean.voluble.vonnegutian.voracious.voxel.vroomy.wacky.wagnerian.wakeful.waking.wan.wandering.warholian.warm.warped.wary.washingtonian.wayward.wealthy.weathered.weberian.welcome.welded.wellesian.wellsian.westward.whacky.whimsical.whimsy.whipped.whisked.whispering.whistlerian.whitmanesque.whole.wholesome.whooshy.wide.wiggly.wild.wildean.willowy.wilsonian.wily.windswept.windy.winged.winning.winsome.wintry.wired.wireframe.wireless.wise.wishful.wispy.wistful.wittgensteinian.witty.wobbly.wodehousian.wondrous.wonky.wooded.woody.woolly.woozy.wordless.wordsworthian.wormholed.worthy.wraithlike.wreathed.wriggly.wry.xenial.xeno.yanky.yearning.yeasty.yeatsian.young.youthful.yuletide.yummy.zany.zappy.zealous.zested.zestful.zesty.zeta.zingy.zippy.zodiacal.zonked.zonky.zoomy.zoroastrian`.split(`.`),le=`abalone.absinthe.absyrtus.accelerator.achilles.acorn.acquerello.actuator.adobo.adonis.aeetes.aegis.aello.aeneas.aengus.aether.affogato.afterburner.agartha.agate.agni.agnolotti.aioli.airlock.ajax.aji.albatross.alder.ale.alecto.aleppo.alfheim.allegory.alliteration.almond.amaranth.amaretto.amaterasu.ambrosia.americano.amphiaraus.anago.anapest.ancho.anchovy.android.andromeda.anise.annal.annwn.ansible.antaeus.antenna.anthem.antigone.antimony.antistrophe.anubis.aoidos.aperol.aphelion.aphrodite.apogee.apollo.apple.apricot.aquamarine.aquavit.aqueduct.arabica.arachne.arawn.arbor.arborio.arc.arcadia.arch.archipelago.ares.argo.argon.argonaut.aria.ariadne.ark.arke.armagnac.array.arrow.artemis.arthur.artichoke.artifact.arugula.asgard.asgardia.ash.asparagus.aspen.assam.assonance.asteroid.astronaut.atalanta.athena.atlantis.atlas.atoll.atom.atropos.aubergine.augean.aura.aurora.avalon.avalonia.avocado.awning.axion.axle.azurite.bacchus.bagna.baharat.balder.ballad.balladeer.banana.banshee.baozi.bard.barge.barium.barley.barn.basalt.basil.basilisk.basmati.bastet.bastion.bay.bayleaf.beacon.beam.bean.bearing.beech.beetroot.behemoth.bellini.beowulf.bergamot.berth.beryl.beryllium.bifrost.biodome.birch.biscotti.bismuth.bisque.bit.bittern.blackberry.blast.blaster.blini.block.blodeuwedd.bloodstone.blossom.bluebell.blueberry.bolt.bomba.bonito.boom.borage.boson.botargo.bottarga.bouillon.boundary.bow.bower.bragi.bramble.bran.branch.brandy.branwen.breeze.brew.bridge.brigid.brioche.broccoli.brook.brulee.brunhild.brush.bucatini.buckler.buckwheat.buffer.bulkhead.bunting.burrata.burst.bus.busiris.butte.butter.buttercup.butterscotch.byte.cabbage.cabin.cacao.cachaca.cache.cacus.cadence.caesura.calamarata.calamari.calcite.caldera.calliope.calvados.calypso.cam.camellia.camelot.camembert.campari.canal.cannelloni.cannoli.canopy.cantaloupe.cantata.canticle.canvas.canyon.canzone.capacitor.capellini.caper.capon.cappelletti.cappuccino.capsule.caramel.cardamom.cardoon.carillon.carnaroli.carnation.carol.carrier.carrot.cascade.cashew.cassandra.cassis.castle.castor.cavatelli.caviar.cayenne.cedar.celaeno.celeriac.cell.centaur.cerberi.cerberus.cernunnos.ceryneian.cesium.ceto.ceylon.chaff.chaffinch.chai.chain.chalk.chamomile.champagne.chandra.channel.chanson.chanterelle.chard.charon.chartreuse.cheddar.cherry.chert.chervil.chestnut.chickweed.chicory.chili.chime.chimera.chimichurri.chimney.chip.chipotle.chirashi.chiron.chive.chocolate.chorale.chorizo.chorus.chronicle.chrysanthemum.chrysaor.chrysomallus.chutney.ciabatta.cibola.cider.cilantro.cinder.cinnamon.cipher.circe.circlet.circuit.cirque.cistern.citadel.citrine.citron.clementine.cliff.clio.clipper.cloak.clotho.cloud.clove.clover.cluster.coal.cobbler.cockaigne.cockpit.cocoa.coconut.codex.coffee.cog.cognac.coif.coil.col.colchis.collider.colony.combe.comet.compote.concerto.conchiglie.conduit.confit.console.consomme.consonance.continuum.contour.cookies.coordinate.core.coriander.cormorant.corona.coronet.cortado.corvette.cosmos.cottage.couplet.course.couscous.cove.cowl.cowslip.crab.craft.crag.cranberry.crane.crayon.cream.creme.crepe.cress.crocus.croissant.crosne.crown.cruiser.crumble.cryopod.cryosleep.crystal.cuchulainn.cuckoo.cucumber.cuirass.cumin.cupid.curlew.currant.current.curry.custard.cyborg.cycle.cyclops.cyclotron.cylinder.dactyl.daedalus.daemon.daffodil.dagda.dahlia.daiquiri.dais.daisy.dale.dam.dandelion.danu.daphne.darjeeling.dart.dashi.date.dawn.daydream.deck.deirdre.demeter.destroyer.dew.diadem.diary.dill.dimension.diode.diomedean.dionysus.ditalini.ditch.djinn.dock.doenjang.domain.donburi.donjon.door.doppio.dove.downlink.dreadnought.dream.drift.droid.dryad.dukkah.dulce.dumpling.dune.durga.dusk.dust.dyke.eagle.earlgrey.easel.echidna.echo.eclair.eclipse.ecliptic.edamame.eddy.edelweiss.edge.egret.einsteinium.elderflower.eldorado.electra.elegy.elm.elysium.ember.endive.enigma.enjambment.enkidu.envoi.eos.epigram.epistle.epode.erato.erinyes.eros.erymanthian.escargot.espresso.estuary.eumenides.euryale.eurybia.eurydice.eurytion.excalibur.exoplanet.fable.fafnir.falcon.fancy.farfalle.fate.feather.feldspar.fell.fence.fennel.fenrir.fenugreek.fermion.fern.fettuccine.fiddlehead.field.fig.finch.finn.fionn.firebird.firefly.fission.fizz.fjord.flake.flame.flare.flash.flicker.flint.flue.fluorite.flux.flywheel.focaccia.fog.folio.fondant.forge.fortress.foxglove.fragment.fraise.frame.frangipane.frappe.freesia.fregola.freighter.freya.frigate.frigg.frost.fudge.fugue.fumarole.furies.fusilli.fusion.gaia.galahad.galangal.galatea.galaxy.galette.galleon.gallium.ganache.ganesh.gannet.gantry.ganymede.garam.gardenia.garlic.garuda.gateway.gauntlet.gawain.gazebo.gear.gelato.gemelli.genmaicha.genoise.geranium.germ.germanium.geryon.geyser.ghazal.ghee.ghost.gilgamesh.ginger.gingko.ginnungagap.girder.glacier.glade.glaze.gleam.gleeman.glen.glimmer.glint.glitter.gloss.glow.gluon.gnocchi.gochujang.goldfinch.golem.goose.gooseberry.gorgon.gouda.governor.gradient.graeae.granary.granite.grapefruit.grappa.gratin.graviton.greave.grebe.gremolata.grenadine.grendel.grid.griffin.gruyere.guajillo.guava.gudrun.guinevere.gunkan.gwydion.gyoza.gyroscope.habanero.habitat.hades.hadron.haiku.hall.halloumi.halo.halva.hamachi.hangar.hanuman.harissa.harpies.harpy.harvest.hatch.hauberk.hawthorn.haze.hazel.hazelnut.heading.headland.heap.heart.hearth.heather.hecate.hedge.heimdall.hel.helheim.helios.helium.helix.helle.hellebore.helm.hemistich.hephaestus.hera.hermes.heron.hesperides.hestia.hibiscus.hippogriff.hirame.hive.hoisin.hojicha.hollandaise.hollow.holly.hologram.honey.honeycomb.honeysuckle.hood.hoopoe.horizon.horseradish.horus.hrothgar.hub.huckleberry.hue.huginn.hull.husk.hut.hyacinth.hydra.hydras.hylas.hymn.hyperborea.hypercube.hyperdrive.hyperion.hyperspace.hyssop.iamb.ibis.icarus.idas.idunn.idyll.igniter.igraine.ikura.indium.indra.inductor.infusion.injector.ink.inlet.inspiration.ion.iridium.iris.ishtar.isis.isolde.isotope.ivy.iwashi.izanagi.jackdaw.jackfruit.jalapeno.janus.jasmine.jason.jasper.javelin.jay.jet.jiaozi.jongleur.jonquil.jormungandr.jotunheim.journal.julep.jumpgate.juniper.juno.jupiter.kaffir.kale.kali.kampachi.karaage.karasumi.katsu.keel.keep.kefir.kelpie.kenning.kernel.kestrel.khinkali.kiln.kimchi.kingfisher.kinmedai.kirsch.kite.kitsune.kiwi.koan.kohlrabi.kombucha.koshihikari.kraken.krypton.kumquat.kvass.lachesis.lacquer.ladon.ladons.laertes.lager.lagoon.lake.lakshmi.lambic.lament.lance.lancelot.lander.lane.langoustine.lantern.lapis.lark.larkspur.lasagna.latte.laureate.laurel.lava.lavender.leaf.leda.leek.legend.lemon.lemonbalm.lemongrass.lemuria.lens.lentil.lepton.lernaean.lethe.letter.levee.lever.leviathan.lightyear.lily.lime.limerick.limoncello.linden.linguine.link.linnet.lir.lithium.lityerses.lobster.loch.lock.lodge.loki.loop.loquat.lotus.lovage.lugh.lullaby.lungo.luster.lychee.lynceus.lyonesse.lyricist.macadamia.macaron.macchiato.madai.madeleine.madrigal.magma.magnolia.magpie.mail.mainframe.maki.makrut.malachite.manannan.mango.manicotti.manor.manti.manticore.mantle.mantou.manuscript.maple.marble.marduk.margarita.marigold.marjoram.marquee.marrow.martini.marvel.marzipan.masago.masala.mascarpone.mast.matcha.matrix.mead.meadow.mech.medea.medusa.megaera.meleager.memoir.mentaiko.mercury.meringue.merlin.merlot.mesa.mesh.metaphor.meteor.meter.mezcal.mezzaluna.mica.midas.midgard.mill.mimir.mimosa.minerva.minotaur.minstrel.mint.minuet.miracle.mirin.mirror.miso.missive.mist.mjolnir.mocha.module.moira.mojito.molasses.mole.momo.monolith.moonbase.moonbeam.moonstone.moor.mopsus.mordred.morel.morgana.morpheus.morrigan.moss.mote.motet.mousse.mu.mulberry.muninn.muon.muse.muspelheim.mustard.myrtle.mystery.myth.nadir.naga.naiad.nanite.nanobot.narcissus.neapolitan.nebula.nectarine.needle.negroni.nemean.nemesis.neon.neptune.neptunium.nereid.nereus.nessus.nest.nestor.net.nettle.neutrino.nexus.niamh.nib.nibble.nibiru.niflheim.nightingale.nigiri.nike.niobe.njord.nocturne.node.nog.nori.norn.note.nougat.nova.nozzle.nuada.nutmeg.nyx.oak.oasis.oat.obelisk.oberon.obsidian.oceanid.oceanus.octave.octavo.ocypete.ode.odin.odysseus.oisin.okonomiyaki.olive.olympus.oni.onigiri.oolong.oracle.orange.orb.orbit.orbiter.orchard.orchid.oreads.orecchiette.oregano.orion.orpheus.orthros.orthrus.orzo.oscillator.osiris.osmium.osprey.ouroboros.outline.outpost.ouzo.oven.overture.owl.oyster.paccheri.packet.padron.page.palace.palette.palladium.palm.pan.pandan.pandora.panettone.pansotti.pansy.pantoum.papaya.pappardelle.paprika.papyrus.parable.paradox.parcae.parchment.parfait.parmesan.parsec.parsley.parsnip.particle.partridge.parvati.pasilla.passionfruit.pastel.pastis.patina.pavilion.pavlova.peach.peak.pear.pebble.pecan.pegasi.pegasus.pekoe.peleus.pelican.pelmeni.pen.pencil.penelope.penne.peony.pepper.peppermint.percival.peregrine.pergola.peridot.perigee.perihelion.perry.persephone.perseus.persillade.persimmon.pesto.petal.petrel.phase.pheasant.phoenix.pholus.phorcys.photon.phrixus.pickle.pierogi.pigment.pimento.pine.pineapple.ping.pinot.pipe.pipit.piquillo.pisco.pistachio.piston.pith.plane.plasma.plate.plover.plum.plume.pluto.plutonium.poblano.pod.podarge.poet.polenta.pollux.polyphemus.pomegranate.pomelo.pond.pontus.ponzu.pooka.pool.poplar.poppy.porcini.port.portal.porter.porthole.poseidon.positron.prairie.praline.prelude.primrose.prism.probe.profile.prometheus.prosciutto.prosecco.proteus.protocol.psalm.psyche.pudding.puffin.pulse.pumice.pumpkin.purslane.pwyll.pylon.pyrrhic.quadrant.quail.quark.quarto.quartz.quatrain.qubit.quetzalcoatl.queue.quill.quince.quinoa.quiver.radish.radium.radon.ragnarok.rain.rama.ramen.ramp.rampart.ramson.raspberry.ratatoskr.raven.ravioli.ray.reactor.realm.reaper.reed.reef.refrain.region.register.relay.relic.remnant.requiem.reservoir.residue.resistor.resonator.reverie.rhapsode.rhapsody.rhea.rhiannon.rhodium.rhododendron.rhubarb.rhyme.ricotta.riddle.ridge.riesling.rigatoni.rim.ring.risotto.ristretto.river.roast.robin.robusta.roc.rocket.rod.romesco.rondeau.rooibos.rook.root.rose.rosemary.rosewater.roundel.rover.rowan.rubidium.rum.rune.saba.saffron.saga.saison.sake.salmoriglio.salsa.salsify.sambal.sambuca.samphire.sancerre.sandpiper.sangria.sanma.sansho.saraswati.sashimi.sasquatch.satellite.satyr.sauternes.savanna.sawara.sazerac.scaffold.scalar.scallop.scansion.scepter.schnapps.schooner.scop.scorzonera.scotchbonnet.scroll.sector.seed.sekhmet.selene.selenite.selenium.selkie.sencha.sensor.sequoia.serenade.serrano.servo.sesame.sestina.sextet.shack.shade.shadow.shaft.shale.shallot.shambhala.shard.shed.sheen.sherbet.sherry.shield.shimmer.ship.shishito.shiso.shiva.shoyu.shrub.shumai.shuttle.sibyl.sif.signal.sigurd.silhouette.silo.simile.simurgh.singularity.siren.sita.skadi.skald.skiff.skuld.skylark.slant.slate.sleipnir.sling.slipstream.sliver.sloop.sluice.smithy.smoke.snowdrop.socket.sofrito.sonata.sonnet.soot.sorbet.sorrel.souffle.soul.soy.spaceport.spaghetti.spark.sparkle.sparrow.spear.speck.specter.speculoos.spelt.sphere.sphinx.sphinxes.spindle.spinel.spiral.spire.spirit.splinter.spoke.spondee.spore.spring.spritz.spruce.sriracha.ssamjang.stack.stanza.starbase.starlight.starling.starport.starship.stasis.station.steam.stellarator.steppe.stheno.stork.stracciatella.strawberry.stream.strontium.strophe.strozzapreti.strut.stylus.stymphalian.styx.subspace.sumac.summit.sunbeam.sunstone.supernova.surge.surya.susanoo.sushi.svartalfheim.swallow.swan.swarm.sycamore.syleus.synchrotron.tabard.tachyon.tagliatelle.tahini.takoyaki.taliesin.tamari.tamarind.tangerine.tanka.tanker.tapenade.tapioca.tarako.taranis.tare.tarn.tarragon.tartarus.telamon.telemetry.teleporter.tellurium.temaki.tempura.tengu.tensor.tent.tequila.tercet.teriyaki.terminal.tern.terraform.tesseract.tethys.thalassa.thalia.thallium.thaumas.themis.theseus.thistle.thor.thorium.thoth.threshold.throne.throttle.thrush.thruster.thule.thunderbird.thyme.tiamat.tiara.tide.tint.tintagel.tiphys.tiramisu.tirnanog.tisane.tisiphone.titan.tobiko.toccata.toddy.toffee.tofu.tokamak.tomatillo.tomato.tome.tone.tonka.tonkatsu.tor.tortellini.torus.tourmaline.tower.trace.track.transducer.transistor.treacle.trellis.triolet.tristan.triton.trochee.trofie.trope.troubadour.trouvere.truffle.trunk.truss.tug.tulip.tundra.tungsten.turbine.turmeric.turquoise.turret.twinkle.typhon.tyr.udon.ulysses.unagi.uni.unicorn.uplink.uramaki.urania.uranium.urd.urfa.uther.vale.valhalla.valkyrie.valve.vanadium.vanaheim.vanilla.vapor.vareniki.varnish.varuna.vector.veil.vellum.vent.venus.verbena.verdandi.verge.verjus.vermouth.verse.vessel.vesta.vestige.vialone.viewport.villanelle.vishnu.vodka.volcano.volta.volume.vortex.vulcan.wall.walnut.waltz.warbler.warpgate.wasabi.wash.watercress.watermelon.wave.waypoint.web.weir.well.wendigo.wheat.whisky.whisper.wiglaf.willow.wimple.window.wisteria.wonder.wonton.woodcock.woodpecker.word.wormhole.wraith.wren.wyrm.wyvern.xenon.yacht.yakitori.yama.yarrow.yeti.yew.yggdrasil.yokai.yuzu.zaatar.zabaglione.zenith.zephyr.zeus.zinnia.zircon.zirconium.ziti.zone.zucchini`.split(`.`);ce.length*le.length,n(`agent-bridge`);var ue=`agent: name already in use`,y=n(`cone-memory-budget`),de=1.25,fe=i.memoryPath,pe=`/sessions/index.json`,me=4096,he=/^## Auto-extracted/m,ge=`Consolidate the auto-extracted memory bullets below into a single tighter set of durable memories.
2
2
 
3
3
  Rules:
4
4
  - Output ONLY a single \`## Auto-extracted (consolidated)\` heading followed by markdown bullets.
@@ -1 +1 @@
1
- import{t as e}from"./logger-Cx6Y120U.js";import{n as t}from"./record-DTUQtot0.js";import{t as n}from"./types-D8gIX-W-.js";import{i as r,m as i,o as a,s as o}from"./kernel-worker-DVGTdmUT.js";import{a as s,c,d as l,f as u,l as d,n as f,p,r as m,s as h,t as g,u as _}from"./frozen-archive-writer-vxDXEHCh.js";const v=e(`live-session-snapshot`);function y(e,t){return`/scoops/${e}/sessions/${t}`}function b(e){let t=e.cone.folder||`cone`,n=e.sessionsDir??`/sessions`,r=i(e.messages,{source:e.cone.label??t,uncapped:!0});return _(async()=>e.stillValid&&!e.stillValid()?(v.info(`Live session snapshot skipped: session gone before the write`,{cone:t,sessionsDir:n,trigger:e.trigger}),null):x(e,t,n,r),l(n))}async function x(e,n,r,i){let o=e.now??Date.now,l=await d(e.vfs,r),p=f(l,n),_=p?await E(e.vfs,r,p):null,y=_===null?0:p?.liveThrough??T(_),b=w(i,_??[],y),x=[..._??[],...b],S=Math.max(y,T(i)),C=p?.filename??c(n),D=p?.frozenAt??new Date(o()).toISOString(),O=s(x),k=p?.title&&!h(p.title)?p.title:O,A=(p?.compactions??0)+1,j={cone:n,...n!==`cone`&&e.cone.label?{coneLabel:e.cone.label}:{}},M=p?.sessionId??crypto.randomUUID(),N={id:t({folder:n}),sessionId:M,title:k,frozenAt:D,createdAt:x[0]?.timestamp||o(),updatedAt:o(),messageCount:x.length,messages:x,...j,live:!0,liveThrough:S,compactions:A,...p?.curatedThrough?{curatedThrough:p.curatedThrough}:{}},P={filename:C,sessionId:M,title:k,frozenAt:D,messageCount:x.length,...j,...p?.icon?{icon:p.icon}:{},live:!0,liveThrough:S,compactions:A,...a(p)};await g(e.vfs,r);let F=`${r}/${C}`;return await e.vfs.writeFile(F,m(N)),await u(e.vfs,P,r),await e.vfs.flush(),v.info(`Live session snapshot written`,{cone:n,sessionsDir:r,filename:C,trigger:e.trigger,appended:b.length,total:x.length,compactions:A}),{transcriptPath:F,entry:P,appended:b.length}}function S(e,t){let n=t||`cone`;return _(async()=>{let t=await d(e),i=f(t,n);if(!i)return!1;let{live:a,liveThrough:o,...s}=i,c={...s,pendingEnrichment:!0};return await p(e,t.map(e=>e===i?c:e)),await D(e,`${r}/${i.filename}`),await e.flush(),v.info(`Live session snapshot finalized`,{cone:n,filename:i.filename}),!0})}function C(e,t){let i=t||`cone`;return _(async()=>{let t=await d(e),a=t.filter(e=>e.live===!0&&(e.cone??`cone`)===i);if(a.length===0)return 0;await p(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-BPUDzAaw.js`);await i(e,t.filename)}let{invalidateSessionSearchIndex:o}=await import(`./session-search-index-lEsBWOr8.js`);return await o(e),await e.flush(),v.info(`Live session snapshot discarded`,{cone:i,removed:a.length}),a.length})}function w(e,t,n){if(t.length===0)return e;let r=t.filter(e=>e.timestamp===n);return e.filter(e=>e.timestamp>n?!0:e.timestamp<n?!1:!r.some(t=>t.role===e.role&&t.content===e.content))}function T(e){let t=0;for(let n of e)n.timestamp>t&&(t=n.timestamp);return t}async function E(e,t,r){try{let n=await e.readFile(`${t}/${r.filename}`,{encoding:`utf-8`}),i=typeof n==`string`?n:new TextDecoder().decode(n);return o(i).messages}catch(e){if(!(e instanceof n)||e.code!==`ENOENT`)throw e;return v.warn(`Live snapshot archive missing; rewriting from the agent history`,{sessionsDir:t,filename:r.filename}),null}}async function D(e,t){try{let n=await e.readFile(t,{encoding:`utf-8`}),r=typeof n==`string`?n:new TextDecoder().decode(n),i=r.match(/^---\n([\s\S]*?)\n---\n/);if(!i)return;let a=i[1].replace(/^(live: true|liveThrough: \d+)\n?/gm,``);if(a===i[1])return;await e.writeFile(t,`---\n${a}\n---\n${r.slice(i[0].length)}`)}catch(e){if(e instanceof n&&e.code===`ENOENT`)return;throw e}}export{C as discardLiveSnapshot,S as finalizeLiveSnapshot,y as scoopSessionsDir,b as snapshotLiveSession};
1
+ import{t as e}from"./logger-Cx6Y120U.js";import{n as t}from"./record-DTUQtot0.js";import{t as n}from"./types-D8gIX-W-.js";import{i as r,m as i,o as a,s as o}from"./kernel-worker-Cd7FNbq1.js";import{a as s,c,d as l,f as u,l as d,n as f,p,r as m,s as h,t as g,u as _}from"./frozen-archive-writer-BjLxnx_c.js";const v=e(`live-session-snapshot`);function y(e,t){return`/scoops/${e}/sessions/${t}`}function b(e){let t=e.cone.folder||`cone`,n=e.sessionsDir??`/sessions`,r=i(e.messages,{source:e.cone.label??t,uncapped:!0});return _(async()=>e.stillValid&&!e.stillValid()?(v.info(`Live session snapshot skipped: session gone before the write`,{cone:t,sessionsDir:n,trigger:e.trigger}),null):x(e,t,n,r),l(n))}async function x(e,n,r,i){let o=e.now??Date.now,l=await d(e.vfs,r),p=f(l,n),_=p?await E(e.vfs,r,p):null,y=_===null?0:p?.liveThrough??T(_),b=w(i,_??[],y),x=[..._??[],...b],S=Math.max(y,T(i)),C=p?.filename??c(n),D=p?.frozenAt??new Date(o()).toISOString(),O=s(x),k=p?.title&&!h(p.title)?p.title:O,A=(p?.compactions??0)+1,j={cone:n,...n!==`cone`&&e.cone.label?{coneLabel:e.cone.label}:{}},M=p?.sessionId??crypto.randomUUID(),N={id:t({folder:n}),sessionId:M,title:k,frozenAt:D,createdAt:x[0]?.timestamp||o(),updatedAt:o(),messageCount:x.length,messages:x,...j,live:!0,liveThrough:S,compactions:A,...p?.curatedThrough?{curatedThrough:p.curatedThrough}:{}},P={filename:C,sessionId:M,title:k,frozenAt:D,messageCount:x.length,...j,...p?.icon?{icon:p.icon}:{},live:!0,liveThrough:S,compactions:A,...a(p)};await g(e.vfs,r);let F=`${r}/${C}`;return await e.vfs.writeFile(F,m(N)),await u(e.vfs,P,r),await e.vfs.flush(),v.info(`Live session snapshot written`,{cone:n,sessionsDir:r,filename:C,trigger:e.trigger,appended:b.length,total:x.length,compactions:A}),{transcriptPath:F,entry:P,appended:b.length}}function S(e,t){let n=t||`cone`;return _(async()=>{let t=await d(e),i=f(t,n);if(!i)return!1;let{live:a,liveThrough:o,...s}=i,c={...s,pendingEnrichment:!0};return await p(e,t.map(e=>e===i?c:e)),await D(e,`${r}/${i.filename}`),await e.flush(),v.info(`Live session snapshot finalized`,{cone:n,filename:i.filename}),!0})}function C(e,t){let i=t||`cone`;return _(async()=>{let t=await d(e),a=t.filter(e=>e.live===!0&&(e.cone??`cone`)===i);if(a.length===0)return 0;await p(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-BngEANiJ.js`);await i(e,t.filename)}let{invalidateSessionSearchIndex:o}=await import(`./session-search-index-ei5TA3_U.js`);return await o(e),await e.flush(),v.info(`Live session snapshot discarded`,{cone:i,removed:a.length}),a.length})}function w(e,t,n){if(t.length===0)return e;let r=t.filter(e=>e.timestamp===n);return e.filter(e=>e.timestamp>n?!0:e.timestamp<n?!1:!r.some(t=>t.role===e.role&&t.content===e.content))}function T(e){let t=0;for(let n of e)n.timestamp>t&&(t=n.timestamp);return t}async function E(e,t,r){try{let n=await e.readFile(`${t}/${r.filename}`,{encoding:`utf-8`}),i=typeof n==`string`?n:new TextDecoder().decode(n);return o(i).messages}catch(e){if(!(e instanceof n)||e.code!==`ENOENT`)throw e;return v.warn(`Live snapshot archive missing; rewriting from the agent history`,{sessionsDir:t,filename:r.filename}),null}}async function D(e,t){try{let n=await e.readFile(t,{encoding:`utf-8`}),r=typeof n==`string`?n:new TextDecoder().decode(n),i=r.match(/^---\n([\s\S]*?)\n---\n/);if(!i)return;let a=i[1].replace(/^(live: true|liveThrough: \d+)\n?/gm,``);if(a===i[1])return;await e.writeFile(t,`---\n${a}\n---\n${r.slice(i[0].length)}`)}catch(e){if(e instanceof n&&e.code===`ENOENT`)return;throw e}}export{C as discardLiveSnapshot,S as finalizeLiveSnapshot,y as scoopSessionsDir,b as snapshotLiveSession};
@@ -1,2 +1,2 @@
1
- import{n as e}from"./rolldown-runtime-DBVvNlSN.js";import{t}from"./logger-Cx6Y120U.js";import{c as n}from"./account-store-Cf3nt4Ba.js";import{a as r}from"./diagnostics-B-5VkVir.js";import{a as i}from"./compat-CuWVDYYO.js";import{r as a,s as o}from"./legacy-api-aliases-DcPvcesD.js";import{n as s}from"./pi-transcript-context-C6LXdArv.js";var c=/* @__PURE__ */ e({config:()=>f,detectRuntime:()=>E,discoverModels:()=>T,originOf:()=>C,register:()=>b,verifyConnection:()=>k});const l=t(`local-llm`),u=`local-llm`,d=`${u}-unconfigured`,f={id:u,name:`Local LLM (OpenAI-compatible)`,description:[`Connect to any OpenAI-compatible local model server.`,``,`Common base URLs:`,` • Ollama http://localhost:11434/v1`,` • LM Studio http://localhost:1234/v1`,` • llama.cpp http://localhost:8080/v1`,` • vLLM http://localhost:8000/v1`,` • mlx_lm http://localhost:8080/v1`,` • Jan http://localhost:1337/v1`,``,`Ollama needs OLLAMA_ORIGINS=* (or chrome-extension://*) so the`,`browser can reach it. macOS: launchctl setenv OLLAMA_ORIGINS "*".`].join(`
1
+ import{n as e}from"./rolldown-runtime-DBVvNlSN.js";import{t}from"./logger-Cx6Y120U.js";import{c as n}from"./account-store-BtAuf6gP.js";import{a as r}from"./diagnostics-B-5VkVir.js";import{a as i}from"./compat-CuWVDYYO.js";import{r as a,s as o}from"./legacy-api-aliases-DcPvcesD.js";import{n as s}from"./pi-transcript-context-C6LXdArv.js";var c=/* @__PURE__ */ e({config:()=>f,detectRuntime:()=>E,discoverModels:()=>T,originOf:()=>C,register:()=>b,verifyConnection:()=>k});const l=t(`local-llm`),u=`local-llm`,d=`${u}-unconfigured`,f={id:u,name:`Local LLM (OpenAI-compatible)`,description:[`Connect to any OpenAI-compatible local model server.`,``,`Common base URLs:`,` • Ollama http://localhost:11434/v1`,` • LM Studio http://localhost:1234/v1`,` • llama.cpp http://localhost:8080/v1`,` • vLLM http://localhost:8000/v1`,` • mlx_lm http://localhost:8080/v1`,` • Jan http://localhost:1337/v1`,``,`Ollama needs OLLAMA_ORIGINS=* (or chrome-extension://*) so the`,`browser can reach it. macOS: launchctl setenv OLLAMA_ORIGINS "*".`].join(`
2
2
  `),requiresApiKey:!1,optionalApiKey:!0,apiKeyPlaceholder:`Leave empty for local servers, or paste a key for hosted endpoints`,apiKeyEnvVar:`LOCAL_LLM_API_KEY`,requiresBaseUrl:!0,baseUrlPlaceholder:`http://localhost:11434/v1`,baseUrlDescription:`Ollama: 11434 • LM Studio: 1234 • llama.cpp/mlx: 8080 • vLLM: 8000 • Jan: 1337. Trailing /v1 required.`,requiresDeployment:!0,deploymentPlaceholder:`llama3.1:8b, qwen2.5-coder:14b`,deploymentDescription:`Comma-separated model IDs from your server. List them with: curl <baseUrl>/models | jq -r .data[].id`,getModelIds:()=>{let e=p(n(u));return e.length===0?[{id:d,name:`Local LLM (set base URL + model IDs in Settings)`,api:`openai`}]:e.map(e=>({id:e,name:e,api:`openai`,input:[`text`],context_window:32e3,max_tokens:4096}))}};function p(e){return e?e.split(`,`).map(e=>e.trim()).filter(Boolean):[]}const m=`${u}-openai`;function h(e){return{...e,api:`openai-completions`}}function g(e){let t=e??{};return!t.apiKey||t.apiKey.length===0?{...t,apiKey:`local`}:t}const _=(e,t,n={})=>e.id===d?y(e,`Local LLM is not configured. Set base URL and model IDs in Settings.`):e.baseUrl?a(h(e),s(t),g(n)):y(e,`Local LLM base URL is required (e.g. http://localhost:11434/v1).`),v=(e,t,n)=>e.id===d?y(e,`Local LLM is not configured. Set base URL and model IDs in Settings.`):e.baseUrl?o(h(e),s(t),g(n)):y(e,`Local LLM base URL is required (e.g. http://localhost:11434/v1).`);function y(e,t){let n=r(),i={role:`assistant`,content:[],api:e.api,provider:e.provider,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`error`,errorMessage:t,timestamp:Date.now()};return queueMicrotask(()=>{n.push({type:`error`,reason:`error`,error:i}),n.end()}),n}function b(){i({api:m,stream:_,streamSimple:v})}function x(e){return typeof e==`object`&&!!e&&`object`in e&&e.object===`list`}function S(e){return typeof e==`object`&&!!e&&`build_info`in e}function C(e){try{let t=new URL(e);return`${t.protocol}//${t.host}`}catch{return e.replace(/\/v1\/?$/,``).replace(/\/+$/,``)}}function w(e){let t=e.replace(/\/+$/,``);try{let e=new URL(t);if(e.pathname===``||e.pathname===`/`)return`${t}/v1`}catch{}return t}async function T(e,t,n){let r=`${w(e)}/models`,i={Accept:`application/json`};t&&t.length>0&&(i.Authorization=`Bearer ${t}`);let a=await fetch(r,{method:`GET`,headers:i,signal:n});if(!a.ok)throw Error(`GET ${r} -> ${a.status} ${a.statusText}`);let o=await a.json();return Array.isArray(o.data)?o.data.map(e=>e.id??``).filter(e=>e.length>0):[]}async function E(e,t){let n=C(e),r=await O(`${n}/api/version`,t);if(r&&typeof r.version==`string`)return{kind:`ollama`,version:r.version};if(x(await O(`${n}/api/v0/models`,t)))return{kind:`lmstudio`};let i=await O(`${n}/props`,t);if(S(i))return{kind:`llamacpp`,version:i.build_info?.version};let a=D(e);return a===`11434`?{kind:`ollama`}:a===`1234`?{kind:`lmstudio`}:a===`8000`?{kind:`vllm`}:a===`1337`?{kind:`jan`}:{kind:`unknown`}}function D(e){try{return new URL(e).port||null}catch{return null}}async function O(e,t){try{let n=await fetch(e,{method:`GET`,signal:t});return n.ok?await n.json():null}catch{return null}}async function k(e,t,n){let r={kind:`unknown`};try{r=await E(e,n)}catch{}try{let i=await T(e,t,n);return{ok:!0,runtime:r,models:i}}catch(t){let n=t instanceof Error?t.message:String(t),i=A(n,r.kind);return l.warn(`verifyConnection failed`,{baseUrl:e,runtime:r.kind,message:n}),{ok:!1,runtime:r,models:[],error:i}}}function A(e,t){let n=e.toLowerCase();return n.includes(`failed to fetch`)||n.includes(`networkerror`)?t===`ollama`?{kind:`cors`,message:e,hint:'Ollama rejects requests from non-localhost origins by default. Set OLLAMA_ORIGINS=* (or chrome-extension://*) and restart Ollama. macOS: `launchctl setenv OLLAMA_ORIGINS "*"` then quit and relaunch the Ollama app.'}:{kind:`connection`,message:e,hint:`Server unreachable. Check the URL and that the server is running.`}:n.includes(` 401`)||n.includes(` 403`)?{kind:`auth`,message:e,hint:`Server returned an auth error. If your endpoint requires a key, set it in Settings.`}:/-> \d{3} /.test(e)?{kind:`http`,message:e}:{kind:`unknown`,message:e}}export{c as n,f as t};
@@ -1,2 +1,2 @@
1
- import{$ as e,v as t}from"./core-DoHWT79Y.js";import{r as n,s as r}from"./legacy-api-aliases-B5j9Mm8h.js";import{v as i}from"./renamed-providers-CKF5I4-o.js";import{b as a}from"./account-store-D9MqJPUO.js";import{n as o}from"./pi-transcript-context-JtAzRvqX.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{$ as e,v as t}from"./core-DoHWT79Y.js";import{r as n,s as r}from"./legacy-api-aliases-B5j9Mm8h.js";import{v as i}from"./renamed-providers-CKF5I4-o.js";import{b as a}from"./account-store-DA_90c6T.js";import{n as o}from"./pi-transcript-context-JtAzRvqX.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};