sliccy 6.256.20 → 6.256.21

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 (131) hide show
  1. package/dist/ui/.vite/manifest.json +180 -180
  2. package/dist/ui/assets/{account-store-CuQyRnib.js → account-store--QH_gRlz.js} +1 -1
  3. package/dist/ui/assets/{account-store-CEqw_XTp.js → account-store-CbKQrU_A.js} +1 -1
  4. package/dist/ui/assets/{adobe-DLwRzZCw.js → adobe-BBZZjXPq.js} +1 -1
  5. package/dist/ui/assets/{adobe-B4Y2A2AD.js → adobe-D6tf-vd0.js} +1 -1
  6. package/dist/ui/assets/{agent-panels-DrtCqAV-.js → agent-panels-DwoeuEZJ.js} +1 -1
  7. package/dist/ui/assets/{almost-bash-shell-headless-pwdOe3YW.js → almost-bash-shell-headless-IexVAylq.js} +11 -11
  8. package/dist/ui/assets/{apply-layout-CH3UhXCP.js → apply-layout-DyJWDEg0.js} +1 -1
  9. package/dist/ui/assets/{azure-openai-CxZFHgjG.js → azure-openai-DfNYV355.js} +1 -1
  10. package/dist/ui/assets/{azure-openai-5qDnHBYT.js → azure-openai-mzyA6ec_.js} +1 -1
  11. package/dist/ui/assets/{cdp-C8HHv5qA.js → cdp-D4hCZeiK.js} +3 -3
  12. package/dist/ui/assets/{cerebras-Czbq-0qg.js → cerebras-DCpB0UlY.js} +1 -1
  13. package/dist/ui/assets/{cerebras-B1cY7cfF.js → cerebras-nIWXceol.js} +1 -1
  14. package/dist/ui/assets/{composer-speech-DeLPAAnL.js → composer-speech-tLlsFK5D.js} +1 -1
  15. package/dist/ui/assets/{connect-surface-Du9dcsgG.js → connect-surface-XwtqAfeO.js} +1 -1
  16. package/dist/ui/assets/{directed-approval-Ch4rtrAp.js → directed-approval-BHC1QE2R.js} +1 -1
  17. package/dist/ui/assets/{emscripten-vfs-hook-BYpqS-pK.js → emscripten-vfs-hook-D27gwwXv.js} +1 -1
  18. package/dist/ui/assets/{frozen-archive-writer-CXRaBKpe.js → frozen-archive-writer-Cixi7_NJ.js} +1 -1
  19. package/dist/ui/assets/{frozen-session-delete-Cd8Hp2Od.js → frozen-session-delete-2eh2Yhbl.js} +1 -1
  20. package/dist/ui/assets/{frozen-session-identity-XzcVW8UL.js → frozen-session-identity-DoWKIEpR.js} +1 -1
  21. package/dist/ui/assets/{gelatiere-unit-BIIKTgS2.js → gelatiere-unit-BqTcFkxk.js} +1 -1
  22. package/dist/ui/assets/{github-DOfti7_n.js → github-BhZHOxKc.js} +1 -1
  23. package/dist/ui/assets/{github-D0xw3eYJ.js → github-DN2OBZNS.js} +1 -1
  24. package/dist/ui/assets/{github-copilot-BVDlkmAY.js → github-copilot-CQhrDhDZ.js} +1 -1
  25. package/dist/ui/assets/{github-copilot-C1c9Cctf.js → github-copilot-Dgi-j2_O.js} +1 -1
  26. package/dist/ui/assets/{hear-Bf5HwOni.js → hear-BDUAwa28.js} +1 -1
  27. package/dist/ui/assets/{hidden-page-input-DDEF33JC.js → hidden-page-input-01CnfmMB.js} +1 -1
  28. package/dist/ui/assets/{hidden-page-input-A06qdSVm.js → hidden-page-input-CBbLsDx2.js} +1 -1
  29. package/dist/ui/assets/{js-realm-worker-CemAn96I.js → js-realm-worker-CDJhvYJx.js} +2 -2
  30. package/dist/ui/assets/{jsh-executor-DGOAl5iJ.js → jsh-executor-BVFFU-rP.js} +3 -3
  31. package/dist/ui/assets/{kernel-worker-DQZWnLpe.js → kernel-worker-965_891X.js} +9 -9
  32. package/dist/ui/assets/{lick-ws-bridge-B-61k0Zh.js → lick-ws-bridge-D4PsA45A.js} +1 -1
  33. package/dist/ui/assets/{lick-ws-bridge-DbJ8yf-k.js → lick-ws-bridge-DuAP_Xb5.js} +1 -1
  34. package/dist/ui/assets/{live-session-curation-zfkDVdK3.js → live-session-curation-BB61f9E8.js} +1 -1
  35. package/dist/ui/assets/{live-session-curation-CLbx1I_X.js → live-session-curation-CGxamyw3.js} +1 -1
  36. package/dist/ui/assets/{live-session-snapshot-3Eb9FMGE.js → live-session-snapshot-BDyBgtvN.js} +1 -1
  37. package/dist/ui/assets/{local-llm-D2S0cCYP.js → local-llm-CEQQXhGE.js} +1 -1
  38. package/dist/ui/assets/{local-llm-RFZ66ynj.js → local-llm-Cy5E3lJo.js} +1 -1
  39. package/dist/ui/assets/{main-CN0eXvpe.js → main-C8hdX5_E.js} +3 -3
  40. package/dist/ui/assets/{main-cherry-CsLIn0Jy.js → main-cherry-ykXNeN9-.js} +1 -1
  41. package/dist/ui/assets/{mcp-command-Co4BM7rI.js → mcp-command-w6OUcgfO.js} +10 -10
  42. package/dist/ui/assets/{memory-curation-seam-DitfDTyZ.js → memory-curation-seam-C4r6A-jq.js} +1 -1
  43. package/dist/ui/assets/{memory-write-execute-DnPv8AaN.js → memory-write-execute-C_0rryC9.js} +1 -1
  44. package/dist/ui/assets/{merge-folded-cost-into-frozen-C24isZFN.js → merge-folded-cost-into-frozen-C9I1ykhe.js} +1 -1
  45. package/dist/ui/assets/{new-session-Bz-zsmnA.js → new-session-k7LcBmG5.js} +2 -2
  46. package/dist/ui/assets/{oauth-bootstrap-CowVQxka.js → oauth-bootstrap-qTw880dW.js} +2 -2
  47. package/dist/ui/assets/{onboarding-orchestrator-BW5xLMjU.js → onboarding-orchestrator-B5XUC4QP.js} +1 -1
  48. package/dist/ui/assets/{openai-codex-D-mRHUJ_.js → openai-codex-BpfRFQ9A.js} +1 -1
  49. package/dist/ui/assets/{openai-codex-BIUq5T-M.js → openai-codex-BtEdGRUK.js} +1 -1
  50. package/dist/ui/assets/{openrouter-B8wWwNw8.js → openrouter-CGkUkGLm.js} +1 -1
  51. package/dist/ui/assets/{openrouter-euDNOeLU.js → openrouter-D9PB_Wxr.js} +1 -1
  52. package/dist/ui/assets/{openrouter-free-CxpCaBRA.js → openrouter-free-BfihlWk1.js} +1 -1
  53. package/dist/ui/assets/{openrouter-free-DF0yibHR.js → openrouter-free-Brc9YCWo.js} +1 -1
  54. package/dist/ui/assets/{openrouter-oauth-BfiowYVD.js → openrouter-oauth-DIBlm_UZ.js} +1 -1
  55. package/dist/ui/assets/{openrouter-oauth-cciCymss.js → openrouter-oauth-DdrrVt3S.js} +1 -1
  56. package/dist/ui/assets/{panel-rpc-handlers-B3eqfWJ0.js → panel-rpc-handlers-BmON86n5.js} +2 -2
  57. package/dist/ui/assets/{panelize-shell-BfSgnfgs.js → panelize-shell-Dt3FXNpB.js} +1 -1
  58. package/dist/ui/assets/{pi-edit-execution-ji-kHMKJ.js → pi-edit-execution-iaL4Mz3u.js} +1 -1
  59. package/dist/ui/assets/{provider-BKtPDkWZ.js → provider-B8I1Mys2.js} +1 -1
  60. package/dist/ui/assets/{provider-CSI-1cw8.js → provider-CN-5jpvI.js} +1 -1
  61. package/dist/ui/assets/{provider-settings-CjUgLZVJ.js → provider-settings-B5CKyKdE.js} +1 -1
  62. package/dist/ui/assets/provider-store-access-D3cir6Mf.js +1 -0
  63. package/dist/ui/assets/provider-store-access-DruVrLP2.js +1 -0
  64. package/dist/ui/assets/{providers-BME8SM7Y.js → providers-CnawElFK.js} +1 -1
  65. package/dist/ui/assets/{providers-DUsi8UJy.js → providers-s2pRjrQo.js} +2 -2
  66. package/dist/ui/assets/{quick-llm-BgX8DGOf.js → quick-llm-DcceQmkj.js} +1 -1
  67. package/dist/ui/assets/{realm-inprocess-B-o6MXXm.js → realm-inprocess-48bEemKF.js} +2 -2
  68. package/dist/ui/assets/{realm-unhandled-rejections--yOMYML4.js → realm-unhandled-rejections-BqWjiqaB.js} +1 -1
  69. package/dist/ui/assets/{realm-unhandled-rejections-B_sD1Eqh.js → realm-unhandled-rejections-DpKKv_Sg.js} +1 -1
  70. package/dist/ui/assets/{remote-terminal-view-D95a_lGP.js → remote-terminal-view-ML6zl31u.js} +2 -2
  71. package/dist/ui/assets/{restore-BUvJhiTF.js → restore-Uo3FkyTn.js} +1 -1
  72. package/dist/ui/assets/{run-BwR10Tfc.js → run-7BBLWyxm.js} +2 -2
  73. package/dist/ui/assets/{run-DX49FiKl.js → run-BZUVJe9B.js} +2 -2
  74. package/dist/ui/assets/{run-b9uA0T1r.js → run-tb90H7t4.js} +1 -1
  75. package/dist/ui/assets/{serve-command-B5HZS1FV.js → serve-command-C1oMKVa-.js} +2 -2
  76. package/dist/ui/assets/{serve-runtime-CqUYUISo.js → serve-runtime-BMkuNcbl.js} +1 -1
  77. package/dist/ui/assets/{session-command-memory-c8nM2oAl.js → session-command-memory-lm81X-Is.js} +2 -2
  78. package/dist/ui/assets/{session-jsonl-BwJt_n1u.js → session-jsonl-eXAElh6W.js} +1 -1
  79. package/dist/ui/assets/{session-search-index-DumLK4vT.js → session-search-index-ByisDLR5.js} +1 -1
  80. package/dist/ui/assets/{setup-feature-flags-remote-CIolNdqX.js → setup-feature-flags-remote-z293EM8V.js} +1 -1
  81. package/dist/ui/assets/{setup-model-catalog-D5oj1TnB.js → setup-model-catalog-DFfU37vS.js} +1 -1
  82. package/dist/ui/assets/{silent-renew-backoff-BwsIHdH7.js → silent-renew-backoff-B0lMVNh5.js} +1 -1
  83. package/dist/ui/assets/slicc-version-DGCQeyP5.js +1 -0
  84. package/dist/ui/assets/{soundscape-gX8pyQsR.js → soundscape-DHszzPsM.js} +1 -1
  85. package/dist/ui/assets/{speak-DUmL0M9L.js → speak-DZZSpSqs.js} +1 -1
  86. package/dist/ui/assets/{sprinkle-manager-el_STA97.js → sprinkle-manager-CMAEGvh9.js} +1 -1
  87. package/dist/ui/assets/{sprinkle-renderer-C9fr3WHR.js → sprinkle-renderer-DcsYmznT.js} +1 -1
  88. package/dist/ui/assets/{sudo-ZExTT5ER.js → sudo-YyLShRTX.js} +1 -1
  89. package/dist/ui/assets/{supervisor-CuK_w37s.js → supervisor-BJNQ0Sie.js} +1 -1
  90. package/dist/ui/assets/{sync-dialog-Y1I8wtI7.js → sync-dialog-OIBe84rb.js} +1 -1
  91. package/dist/ui/assets/{transformers-env-CFMmsFPt.js → transformers-env-DlTQEcvy.js} +1 -1
  92. package/dist/ui/assets/{tray-leader-WA8nmGPu.js → tray-leader-x0HDgpHa.js} +1 -1
  93. package/dist/ui/assets/{tray-leave-runtime-Dnbn_g0R.js → tray-leave-runtime-B6ZqjKqA.js} +1 -1
  94. package/dist/ui/assets/{tray-sidecar-D5lGknCp.js → tray-sidecar-C08eb6rV.js} +1 -1
  95. package/dist/ui/assets/{upgrade-detection-B_0cdTwX.js → upgrade-detection-BZOEx1T3.js} +1 -1
  96. package/dist/ui/assets/{upgrade-to-seven-YOHOuBIz.js → upgrade-to-seven-Pi7N3s4V.js} +1 -1
  97. package/dist/ui/assets/{voice-reply-Du8td5dw.js → voice-reply-D0KspY5L.js} +1 -1
  98. package/dist/ui/assets/{wc-attach-BQmRGrD1.js → wc-attach-C--w91hS.js} +2 -2
  99. package/dist/ui/assets/{wc-browser-mLBbjD7x.js → wc-browser-Bwwt12VY.js} +1 -1
  100. package/dist/ui/assets/{wc-computers-D4cVXfw8.js → wc-computers-CEYTEbzK.js} +1 -1
  101. package/dist/ui/assets/{wc-detached-DJvs-BOI.js → wc-detached-BMfwyvTN.js} +1 -1
  102. package/dist/ui/assets/{wc-extension-C8pEK7qU.js → wc-extension-WVBzb68j.js} +2 -2
  103. package/dist/ui/assets/{wc-follower-DH7hCy3x.js → wc-follower-CfQXvNqW.js} +3 -3
  104. package/dist/ui/assets/{wc-follower-oauth-DKRGLBWN.js → wc-follower-oauth-CRA3bG2x.js} +1 -1
  105. package/dist/ui/assets/{wc-gelatiere-CJpfn7Ca.js → wc-gelatiere-CFupkA18.js} +1 -1
  106. package/dist/ui/assets/{wc-live-mNieNNOh.js → wc-live-jfkgv1D5.js} +5 -5
  107. package/dist/ui/assets/{wc-nav-mcV-muIN.js → wc-nav-CMmiK8CR.js} +2 -2
  108. package/dist/ui/assets/{wc-onboarding-DhNdAmF2.js → wc-onboarding-DwK2Xo_f.js} +2 -2
  109. package/dist/ui/assets/{wc-permissions-DfXcDHFY.js → wc-permissions-sEzYJY5L.js} +2 -2
  110. package/dist/ui/assets/{wc-placeholder-BO7LIBQk.js → wc-placeholder-dACLWYRH.js} +2 -2
  111. package/dist/ui/assets/{wc-profile-export-K9m6pZBL.js → wc-profile-export-0_MWQlQi.js} +3 -3
  112. package/dist/ui/assets/{wc-secret-request-DFNuYRtA.js → wc-secret-request-Bj6AEfhW.js} +1 -1
  113. package/dist/ui/assets/{wc-settings-KPmFCSeh.js → wc-settings-D36d5og0.js} +3 -3
  114. package/dist/ui/assets/{wc-shell-DUnQ3yem.js → wc-shell-Dviry0M3.js} +3 -3
  115. package/dist/ui/assets/{wc-shortcut-config-_FC-kTdg.js → wc-shortcut-config-BEJ7hCGM.js} +1 -1
  116. package/dist/ui/assets/{wc-sprinkles-CGU4-WKU.js → wc-sprinkles-CCEvPCsZ.js} +2 -2
  117. package/dist/ui/assets/{wc-transcript-export-BXCZhTfg.js → wc-transcript-export-BLZIE8ep.js} +2 -2
  118. package/dist/ui/assets/{wc-tray-B4fcMI28.js → wc-tray-Bpsl7Mew.js} +4 -4
  119. package/dist/ui/assets/welcome-detection-CWqP_ofb.js +1 -0
  120. package/dist/ui/assets/{whisper-session-B4xkoupa.js → whisper-session-CmQR_O2N.js} +2 -2
  121. package/dist/ui/assets/{xai-grok-BJ0tBHY1.js → xai-grok-BjEcnSUJ.js} +1 -1
  122. package/dist/ui/assets/{xai-grok-DA654XhD.js → xai-grok-DNyRhPcB.js} +1 -1
  123. package/dist/ui/index.html +3 -3
  124. package/dist/ui/packages/webapp/index.html +3 -3
  125. package/dist/ui/packages/webapp/upgrade-to-seven.html +1 -1
  126. package/dist/ui/upgrade-to-seven.html +1 -1
  127. package/package.json +2 -2
  128. package/dist/ui/assets/provider-store-access-B8DHQMsm.js +0 -1
  129. package/dist/ui/assets/provider-store-access-DR6dk4La.js +0 -1
  130. package/dist/ui/assets/slicc-version-DtrTeMyR.js +0 -1
  131. package/dist/ui/assets/welcome-detection-JV0kEwvY.js +0 -1
@@ -1 +1 @@
1
- import{t as e}from"./logger-Cx6Y120U.js";import{n as t,t as n}from"./tray-leader-status-BPM2zVsj.js";import{n as r,r as i,t as a}from"./lick-urls-CgPiVwD-.js";import{h as o}from"./kernel-worker-DQZWnLpe.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{h as o}from"./kernel-worker-965_891X.js";const s=e(`lick-ws-bridge`);function c(e){if(e.stopped)return;let t;try{t=e.wsFactory(e.wsUrl)}catch(t){s.error(`Failed to construct lick WebSocket`,{url:e.wsUrl,error:t instanceof Error?t.message:String(t)}),l(e,`construct-threw`);return}e.socket=t,t.onopen=()=>{e.consecutiveFailures>0?s.info(`Lick WebSocket recovered`,{attempts:e.consecutiveFailures}):s.info(`Lick WebSocket connected`),e.consecutiveFailures=0,e.unrecoverableSignalled=!1},t.onmessage=n=>{d(e,t,n.data).catch(e=>{let t=typeof n.data==`string`?n.data.slice(0,200):`[non-string payload]`;s.error(`Failed to process lick message`,{error:e instanceof Error?e.message:String(e),preview:t})})},t.onclose=n=>{if(e.socket===t&&(e.socket=null),e.stopped)return;let r=n.reason?` reason=${JSON.stringify(n.reason)}`:``;l(e,`disconnected code=${n.code}${r}`)},t.onerror=t=>{let n=t.target;s.error(`Lick WebSocket error`,{url:e.wsUrl,readyState:n?.readyState,eventType:t.type})}}function l(e,t){if(e.reconnectHandle!=null){s.debug(`Lick WS failure during pending reconnect — keeping existing timer`,{cause:t});return}e.consecutiveFailures++;let n=o({attempt:e.consecutiveFailures-1,baseMs:e.baseDelay,capMs:6e4}),r={url:e.wsUrl,attempt:e.consecutiveFailures,cause:t,retryInMs:n};if(e.consecutiveFailures>=3?s.error(`Lick WebSocket still down`,r):s.warn(`Lick WebSocket down`,r),e.consecutiveFailures===20&&!e.unrecoverableSignalled){e.unrecoverableSignalled=!0;try{e.lickManager.emitEvent({type:`session-reload`,targetScoop:void 0,timestamp:(/* @__PURE__ */ new Date()).toISOString(),body:{reason:`lick-ws-bridge-down`,url:e.wsUrl,attempts:e.consecutiveFailures}})}catch(e){s.error(`Failed to emit lick-ws-bridge-down signal`,{error:e instanceof Error?e.message:String(e)})}}u(e,n)}function u(e,t){e.stopped||e.reconnectHandle!=null||(e.reconnectHandle=e.setTimer(()=>{e.reconnectHandle=null,c(e)},t))}async function d(e,t,n){let r=JSON.parse(typeof n==`string`?n:String(n));if(r.requestId){let n=r.requestId,i=await _(e,r,n);if(e.stopped||e.socket!==t||t.readyState!==1){s.warn(`Lick reply dropped — socket changed/closed mid-request`,{type:r.type,requestId:n});return}try{t.send(JSON.stringify(i))}catch(e){s.error(`ws.send() failed delivering lick reply`,{type:r.type,requestId:n,error:e instanceof Error?e.message:String(e)})}return}if(r.type===`webhook_event`){f(e.lickManager,r);return}if(r.type===`navigate_event`){m(e.lickManager,r);return}r.type===`hostfs_invalidate`&&g(e,r)}function f(e,t){let n=typeof t.webhookId==`string`?t.webhookId:null;if(!n)return s.error(`Malformed webhook_event from lick-ws`,{receivedKeys:Object.keys(t)}),`malformed`;let r=t.headers&&typeof t.headers==`object`?t.headers:{};try{return e.handleWebhookEvent(n,r,t.body)}catch(e){return s.error(`Webhook event dispatch failed`,{webhookId:n,error:e instanceof Error?e.message:String(e)}),`failed`}}function p(e){let t=typeof e.verb==`string`?e.verb:null,n=typeof e.target==`string`?e.target:null,r=typeof e.url==`string`&&e.url.length>0?e.url:null;if(t!==`handoff`&&t!==`upskill`||!n||!r)return null;let i={url:r,verb:t,target:n};return typeof e.instruction==`string`&&(i.instruction=e.instruction),typeof e.branch==`string`&&(i.branch=e.branch),typeof e.path==`string`&&(i.path=e.path),typeof e.title==`string`&&(i.title=e.title),{type:`navigate`,navigateUrl:r,targetScoop:void 0,timestamp:typeof e.timestamp==`string`?e.timestamp:(/* @__PURE__ */ new Date()).toISOString(),body:i}}function m(e,t){let n=p(t);if(!n){s.debug(`navigate_event dropped — invalid payload`,{hasVerb:typeof t.verb==`string`,hasTarget:typeof t.target==`string`,hasUrl:typeof t.url==`string`&&t.url.length>0});return}e.emitEvent(n)}function h(e){if(typeof e.mount!=`string`||e.mount.length===0)return null;let t=e.paths,n=[];if(Array.isArray(t))for(let e of t)typeof e==`string`&&n.push(e);return{type:`hostfs_invalidate`,mount:e.mount,paths:n,timestamp:typeof e.timestamp==`string`?e.timestamp:void 0}}function g(e,t){let n=h(t);if(!n){s.debug(`hostfs_invalidate dropped — invalid payload`,{hasMount:typeof t.mount==`string`&&t.mount.length>0,pathsIsArray:Array.isArray(t.paths)});return}try{e.options.onHostfsInvalidate?.(n)}catch(e){s.warn(`hostfs_invalidate handler threw`,{mount:n.mount,error:e instanceof Error?e.message:String(e)})}}async function _(e,t,r){let{lickManager:i}=e;try{switch(t.type){case`list_webhooks`:return{type:`response`,requestId:r,data:i.listWebhooks().map(t=>({...t,url:v(e,t.id)}))};case`create_webhook`:{let n=await i.createWebhook(t.name||`default`,t.scoop,t.filter);return{type:`response`,requestId:r,data:{...n,url:v(e,n.id)}}}case`webhook_event`:return{type:`response`,requestId:r,data:{disposition:f(i,t)}};case`delete_webhook`:return await i.deleteWebhook(t.id)?{type:`response`,requestId:r,data:{ok:!0}}:{type:`response`,requestId:r,data:{error:`Webhook not found`}};case`list_crontasks`:return{type:`response`,requestId:r,data:i.listCronTasks()};case`create_crontask`:if(!t.name)throw Error(`name is required`);if(!t.cron)throw Error(`cron is required`);return{type:`response`,requestId:r,data:await i.createCronTask(t.name,t.cron,t.scoop,t.filter)};case`delete_crontask`:return await i.deleteCronTask(t.id)?{type:`response`,requestId:r,data:{ok:!0}}:{type:`response`,requestId:r,data:{error:`Cron task not found`}};case`tray_status`:{let e=n();return{type:`response`,requestId:r,data:{state:e.state,joinUrl:e.session?.joinUrl??null,workerBaseUrl:e.session?.workerBaseUrl??null,trayId:e.session?.trayId??null}}}default:return{type:`response`,requestId:r,error:`Unknown request type: ${t.type}`}}}catch(e){return{type:`response`,requestId:r,error:e instanceof Error?e.message:String(e)}}}function v(e,n){let a=t().session;return a?.webhookUrl?r(a.webhookUrl,n):e.webhookOriginOverride?`${e.webhookOriginOverride}/webhooks/${n}`:i(e.options.locationHref,n)}function y(e){if(e.stopped)return;e.stopped=!0,e.reconnectHandle!=null&&(e.clearTimer(e.reconnectHandle),e.reconnectHandle=null);let t=e.socket;if(e.socket=null,t)try{t.close()}catch(e){t.readyState!==3&&t.readyState!==2&&s.warn(`Lick socket close() threw before terminal state`,{readyState:t.readyState,error:e instanceof Error?e.message:String(e)})}}function b(e,t){try{new URL(t.locationHref)}catch(e){throw Error(`startLickWsBridge: invalid locationHref ${JSON.stringify(t.locationHref)}: ${e instanceof Error?e.message:String(e)}`)}let n=typeof t.lickWsUrl==`string`&&t.lickWsUrl.length>0?t.lickWsUrl:a(t.locationHref),r=null;if(typeof t.lickWsUrl==`string`&&t.lickWsUrl.length>0)try{let e=new URL(t.lickWsUrl);r=`${e.protocol===`wss:`?`https:`:`http:`}//${e.host}`}catch{r=null}let i={lickManager:e,options:t,wsUrl:n,webhookOriginOverride:r,baseDelay:t.reconnectDelayMs??3e3,wsFactory:t.webSocketFactory??(e=>new WebSocket(e)),setTimer:t.setTimeoutFn??setTimeout.bind(globalThis),clearTimer:t.clearTimeoutFn??clearTimeout.bind(globalThis),stopped:!1,socket:null,reconnectHandle:null,consecutiveFailures:0,unrecoverableSignalled:!1};return c(i),{stop(){y(i)}}}export{b as startLickWsBridge};
@@ -1 +1 @@
1
- import{t as e}from"./logger-dqckiMJt.js";import"./logger-BuvZB4wn.js";import"./tray-leader-WA8nmGPu.js";e(`lick-ws-bridge`);function t(e){let t=typeof e.verb==`string`?e.verb:null,n=typeof e.target==`string`?e.target:null,r=typeof e.url==`string`&&e.url.length>0?e.url:null;if(t!==`handoff`&&t!==`upskill`||!n||!r)return null;let i={url:r,verb:t,target:n};return typeof e.instruction==`string`&&(i.instruction=e.instruction),typeof e.branch==`string`&&(i.branch=e.branch),typeof e.path==`string`&&(i.path=e.path),typeof e.title==`string`&&(i.title=e.title),{type:`navigate`,navigateUrl:r,targetScoop:void 0,timestamp:typeof e.timestamp==`string`?e.timestamp:new Date().toISOString(),body:i}}function n(e){let t=typeof e.discoveryOrigin==`string`?e.discoveryOrigin:null,n=e.discoveryKind===`ai-catalog`||e.discoveryKind===`llms-txt`?e.discoveryKind:null,r=typeof e.discoveryUrl==`string`&&e.discoveryUrl.length>0?e.discoveryUrl:null;if(!t||!n||!r)return null;let i=typeof e.url==`string`?e.url:void 0;return{type:`discovery`,discoveryOrigin:t,discoveryKind:n,discoveryUrl:r,discoverySource:`live-navigation`,targetScoop:void 0,timestamp:typeof e.timestamp==`string`?e.timestamp:new Date().toISOString(),body:{origin:t,kind:n,url:r,...i?{pageUrl:i}:{}}}}export{n as mapDiscoveryPayloadToLickEvent,t as mapNavigatePayloadToLickEvent};
1
+ import{t as e}from"./logger-dqckiMJt.js";import"./logger-BuvZB4wn.js";import"./tray-leader-x0HDgpHa.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,4 +1,4 @@
1
- import{t as e}from"./logger-dqckiMJt.js";import{g as t,h as n}from"./core-BXRpM6QF.js";import"./feature-flags-DDJdMcuw.js";import"./account-store-CEqw_XTp.js";import{C as r,O as i,S as a,T as o,h as s,k as c,u as l}from"./zip-stream-DZF8sKOl.js";import{t as u}from"./MEMORY-B9cGngY_.js";import{t as d}from"./types-D8gIX-W-.js";import{dt as f,ft as p,ht as m,mt as ee,pt as te,ut as ne}from"./wc-shell-DUnQ3yem.js";import"./agent-message-to-chat-BiZHDYFR.js";import{l as re,m as ie,n as ae,o as oe}from"./frozen-archive-writer-d8c53vzV.js";import{n as se,t as ce}from"./thinking-level-DCJktR5U.js";var h=`/etc/MEMORY.md`,le=4e3,ue=2e3;function g(e){return Math.round(le+ue*Math.log2((Number.isFinite(e)&&e>=0?e:0)+2))}var _=`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(`.`),de=`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(`.`);_.length*de.length,e(`agent-bridge`);var fe=`agent: name already in use`,v=e(`cone-memory-budget`),y=1.25,b=a.memoryPath,pe=`/sessions/index.json`,me=4096,he=/^## Auto-extracted/m,ge=`Consolidate the auto-extracted memory bullets below into a single tighter set of durable memories.
1
+ import{t as e}from"./logger-dqckiMJt.js";import{g as t,h as n}from"./core-BXRpM6QF.js";import"./feature-flags-DDJdMcuw.js";import"./account-store-CbKQrU_A.js";import{C as r,O as i,S as a,T as o,h as s,k as c,u as l}from"./zip-stream-DZF8sKOl.js";import{t as u}from"./MEMORY-B9cGngY_.js";import{t as d}from"./types-D8gIX-W-.js";import{dt as f,ft as p,ht as m,mt as ee,pt as te,ut as ne}from"./wc-shell-Dviry0M3.js";import"./agent-message-to-chat-BiZHDYFR.js";import{l as re,m as ie,n as ae,o as oe}from"./frozen-archive-writer-d8c53vzV.js";import{n as se,t as ce}from"./thinking-level-DCJktR5U.js";var h=`/etc/MEMORY.md`,le=4e3,ue=2e3;function g(e){return Math.round(le+ue*Math.log2((Number.isFinite(e)&&e>=0?e:0)+2))}var _=`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(`.`),de=`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(`.`);_.length*de.length,e(`agent-bridge`);var fe=`agent: name already in use`,v=e(`cone-memory-budget`),y=1.25,b=a.memoryPath,pe=`/sessions/index.json`,me=4096,he=/^## Auto-extracted/m,ge=`Consolidate the auto-extracted memory bullets below into a single tighter set of durable memories.
2
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{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{r as s,u as c}from"./frozen-archive-format-7wcOWvsT.js";import{n as l,t as u}from"./thinking-level-5x0UAu9N.js";import{t as d}from"./types-D8gIX-W-.js";import{a as f,r as p}from"./memory-budget-CFfevxz_.js";import{c as ee}from"./kernel-worker-DQZWnLpe.js";import{t as m}from"./MEMORY-Byv8wmch.js";import{a as te,i as ne,n as h,o as g,r as _,t as re}from"./instruction-frontmatter-B48EsYtA.js";import{l as v,n as ie,p as y,r as ae,u as oe}from"./frozen-archive-writer-CXRaBKpe.js";function b(e){let t=0;for(let n of e)n.timestamp>t&&(t=n.timestamp);return t}function x(e,t){return t>0?e.filter(e=>e.timestamp>t):[...e]}const S=e(`agentic-memory`),se=e=>[e.memoryPath],ce=e=>[`/sessions/`,`/shared/`,...i(e)],le=/* @__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(`.`),ue={arrayKeys:/* @__PURE__ */ new Set([`writablePaths`,`visiblePaths`,`allowedCommands`]),scalarKeys:/* @__PURE__ */ new Set([`model`,`timeoutSeconds`,`dreamTimeoutSeconds`,`thinkingLevel`])},C=3e4;function w(e){return e===`cone`?`memory-curator`:`memory-curator-${e}`}const T={kind:`curate`,nameFor:w,rivalsFor:e=>[D(e)]},E=`{{TASK}}`;function de(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 fe(e){try{await e.stat(p);return}catch(e){if(!B(e)){S.warn(`Could not stat ${p}; not seeding`,{error:z(e)});return}}try{await e.mkdir(`/etc`,{recursive:!0}),await e.writeFile(p,m),S.info(`Seeded default ${p}`)}catch(e){S.warn(`Failed to seed ${p}`,{error:z(e)})}}function D(e){return e===`cone`?`memory-dreamer`:`memory-dreamer-${e}`}function O(e,t){let r=e.nameFor(t);return k.test(r)?r:e.nameFor(n)}function pe(e,t){let r=k.test(e.nameFor(t))?t:n;return e.rivalsFor?.(r)??[]}const k=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;function A(e,t){return`/scoops/agent-${O(e,t)}`}function me(e){return A(T,e)}const j=me(n);function he(e){return o({parentJid:null,folder:e?.folder??`cone`})}function M(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 ge(e,t){let n=`${a}/`,r=e=>e.some(e=>n.startsWith(e.endsWith(`/`)?e:`${e}/`)),i=e.map(e=>M(e,t));return r(e)&&!r(i)&&i.push(n),i}async function N(e){try{if(e.signal?.aborted)return{ok:!1,reason:`aborted`,legacyFallbackSafe:!1};let t=e.instructions??T,n=he(e.cone),r=A(t,e.cone?.folder??`cone`),i=await _e(e.vfs,n),a=t.kind===`dream`?i.dreamTimeoutSeconds:i.timeoutSeconds,o=R(e.sessionArchivePath);try{await be(e.vfs,n.memoryPath,e.sessionArchivePath)}catch(e){return S.error(`Curation snapshot failed; pass aborted, live memory untouched`,{memoryPath:n.memoryPath,error:z(e)}),{ok:!1,reason:`snapshot: ${z(e)}`,legacyFallbackSafe:!0}}let s=t.kind===`dream`?`(no session archive this pass)`:e.sessionArchivePath,c=Math.max(1,Math.round(a/60)),l=de(t,s,c),u=Se(i,a,Ce(we(i.promptTemplate.includes(E)?i.promptTemplate:`${i.promptTemplate.trimEnd()}\n\n${E}`,{MEMORY_PATH:o,SESSION_ARCHIVE_PATH:s,SESSION_COUNT:String(e.sessionCount),BUDGET_CHARS:String(f(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&&(u.signal=e.signal);let d=await Te(Promise.resolve().then(()=>e.spawn(u)),a*1e3+C,e.signal);if(d.type===`timeout`)return S.warn(`Agentic memory wait timed out past the in-run bound + grace`,{timeoutSeconds:a,graceMs:C}),{ok:!1,reason:`timeout`,legacyFallbackSafe:!1};if(d.type===`aborted`)return{ok:!1,reason:`aborted`,legacyFallbackSafe:!1};if(d.type===`error`)return{ok:!1,reason:z(d.error),legacyFallbackSafe:!0};if(d.result.exitCode!==0){let e=(d.result.finalText??``).startsWith(ee);return{ok:!1,reason:d.result.finalText||`exit-${d.result.exitCode}`,legacyFallbackSafe:!e}}return{ok:!0,report:d.result.finalText}}catch(e){return S.warn(`Agentic memory pass failed`,{error:z(e)}),{ok:!1,reason:z(e),legacyFallbackSafe:!1}}}async function _e(e,t=r){try{let n=await e.readFile(p,{encoding:`utf-8`});return P(typeof n==`string`?n:new TextDecoder().decode(n),t)}catch(e){return S.warn(`Could not load valid ${p}; using built-in default`,{error:z(e)}),P(m,t)}}function P(e,t=r){let n=te(e,`MEMORY.md`),i=re(n.frontmatter,ue),a=h(i,`writablePaths`,se(t));if(a.length===0)throw Error(`writablePaths must not be empty`);g(a,`writablePaths`);let o=h(i,`visiblePaths`,ce(t));g(o,`visiblePaths`);let s=_(i.timeoutSeconds,600,1200),c=_(i.dreamTimeoutSeconds,3600,7200,`dreamTimeoutSeconds`),l=ne(i.model,`model`);return{writablePaths:a.map(e=>M(e,t)),visiblePaths:ge(o,t),allowedCommands:[.../* @__PURE__ */ new Set([...le,...h(i,`allowedCommands`,[])])],...l?{model:l}:{},thinkingLevel:ve(i.thinkingLevel),timeoutSeconds:s,dreamTimeoutSeconds:c,promptTemplate:n.body}}function ve(e){if(e===void 0)return`medium`;if(typeof e!=`string`||!l(e))throw Error(`thinkingLevel must be one of ${u.join(`, `)}`);return e}function F(e){return`/sessions/.curated/${e.slice(e.lastIndexOf(`/`)+1)}`}function I(e){return`/sessions/.curation/${e.slice(e.lastIndexOf(`/`)+1)}`}function L(e){return`${I(e)}/base.md`}function R(e){return`${I(e)}/draft.md`}function ye(e){return`${I(e)}/status.json`}async function be(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(e){if(!B(e))throw e}await e.mkdir(I(n),{recursive:!0}),await e.writeFile(L(n),r),await e.writeFile(R(n),r)}function xe(e,t,n){let r=e.map(e=>e===t?n:e);return r.includes(n)?r:[...r,n]}function Se(e,t,n,r,i,a,o){let s=e.model===`parent`||e.model===`cone`,c=L(r),l=R(r);return{cwd:i.root,writablePaths:xe(e.writablePaths,i.memoryPath,l),visiblePaths:[...e.visiblePaths,`${I(r)}/`],allowedCommands:e.allowedCommands,prompt:n,thinkingLevel:e.thinkingLevel,persistSession:!0,name:O(o,a?.folder??`cone`),exclusiveWith:pe(o,a?.folder??`cone`),...a?.jid?{parentJid:a.jid}:{},notifyOnComplete:!0,successReceiptPath:F(r),mergeOnSuccess:{targetPath:i.memoryPath,basePath:c,draftPath:l},outcomeReceiptPath:ye(r),maxWallClockMs:t*1e3,...!s&&e.model?{modelId:e.model}:{}}}function Ce(e,t){if(t===j)return e;let n=`\0SCRATCH\0`;return e.replaceAll(t,n).replaceAll(j,t).replaceAll(n,t)}function we(e,t){let n=e;for(let[e,r]of Object.entries(t))n=n.replaceAll(`{{${e}}}`,r);return n}function Te(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 z(e){return e instanceof Error?e.message:String(e)}function B(e){return e?.code===`ENOENT`}const V=e(`live-session-curation`),H=`/sessions/.live-deltas`,U={maxMessages:200,maxChars:8e4},W=/* @__PURE__ */ new Map,G=/* @__PURE__ */ new Map;function K(){return t(`memory-v2`)&&t(`agentic-memory`)}function q(e,t,n){return`${H}/${e}-${t}-${n}.md`}function J(e,t=U){if(e.length===0)return[];let n=[],r=0;for(let i of e){let e=Be(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 Ee(e){if(!K())return Promise.resolve({status:`skipped`,reason:`flag-off`});let t=e.cone.folder||`cone`,n={...e.cone,folder:t},r=ze();if(!r)return V.info(`Live delta curation skipped: agent bridge not published`,{cone:t}),Promise.resolve({status:`skipped`,reason:`no-bridge`});let i={...e,cone:n},a=W.get(t);return a==null?De(i,r):(G.set(t,i),a)}function Y(e){let t=e.cone.folder||`cone`,n={...e.cone,folder:t},r={...e,cone:n};if(e.hold===`held`)return Ae(r);let i=W.get(t);return i==null?Oe(t,Ae(r)):i.then(()=>Y(r))}async function X(e,t,n){n>0&&await oe(async()=>{let r=await v(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:c,...l}=r[i],u=r.slice();u[i]={...l,curatedThrough:Math.max(n,a),memoryCuratedAt:(/* @__PURE__ */ new Date()).toISOString()},await y(Z(e),u),o&&await Fe(e,`${s}/${t}`,n),await e.flush?.()})}function De(e,t){return Oe(e.cone.folder||`cone`,Y({vfs:e.vfs,cone:e.cone,spawn:e=>t.spawn(e),enabled:!0,hold:`held`,...e.limits?{limits:e.limits}:{}}))}function Oe(e,t){return W.set(e,t),t.then(()=>ke(e,t),()=>ke(e,t)),t}function ke(e,t){if(W.get(e)!==t)return;W.delete(e);let n=G.get(e);if(G.delete(e),!n||!K())return;let r=ze();r&&De(n,r).catch(t=>{V.warn(`Follow-up live delta curation failed to start`,{cone:e,error:Q(t)})})}async function Ae(e){if(!(e.enabled??K()))return{status:`skipped`,reason:`flag-off`};let t=e.cone.folder||`cone`,n=e.limits??U,r;try{r=await v(Z(e.vfs))}catch(e){return V.warn(`Live delta curation skipped: sessions index unreadable`,{cone:t,error:Q(e)}),{status:`skipped`,reason:`index-unreadable`}}let i=ie(r,t);if(!i?.sessionId)return{status:`skipped`,reason:`no-archive`};let a=await Ie(e.vfs,`${s}/${i.filename}`);if(!a)return{status:`skipped`,reason:`no-archive`};let o=await je(e.vfs,i.sessionId,i.filename,a,i.curatedThrough??0,n),c=x(a,o);if(c.length===0)return{status:`skipped`,reason:`caught-up`};let l=J(c,n),u=b(l);if(u<=o)return{status:`skipped`,reason:`caught-up`};let d=q(i.sessionId,o,u);await Me(e.vfs,{sessionId:i.sessionId,filename:i.filename,title:i.title,frozenAt:i.frozenAt,cone:i.cone,coneLabel:i.coneLabel},l,d);let f=await N({spawn:e.spawn,vfs:e.vfs,sessionArchivePath:d,sessionCount:r.length,...t!==`cone`||e.cone.jid?{cone:e.cone}:{},...e.signal?{signal:e.signal}:{}});return f.ok?(await X(e.vfs,i.filename,u),V.info(`Live delta curated`,{cone:t,filename:i.filename,through:u}),{status:`curated`,curatedThrough:u,filename:i.filename}):(f.reason.startsWith(`agent: name already in use`)||await Ne(e.vfs,i.filename,f.reason),V.warn(`Live delta curation failed`,{cone:t,filename:i.filename,reason:f.reason}),{status:`failed`,reason:f.reason,filename:i.filename})}async function je(e,t,n,r,i,a){let o=i;for(let n=0;n<50;n+=1){let n=x(r,o);if(n.length===0)break;let i=b(J(n,a??U));if(i<=o||!await Le(e,q(t,o,i)))break;o=i}return o>i&&await X(e,n,o),o}async function Me(e,t,n,r){let i={id:t.sessionId,sessionId:t.sessionId,title:t.title,frozenAt:t.frozenAt,createdAt:n[0]?.timestamp??0,updatedAt:b(n),messageCount:n.length,messages:[...n],...t.cone?{cone:t.cone}:{},...t.coneLabel?{coneLabel:t.coneLabel}:{}};await e.mkdir(H,{recursive:!0}),await e.writeFile(r,ae(i))}async function Ne(e,t,n){await Pe(e,t,{ok:!1,reason:n})}async function Pe(e,t,n,r){try{await oe(async()=>{let i=await v(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 y(Z(e),l),await e.flush?.()})}catch(e){V.warn(`Failed to record curation outcome`,{filename:t,error:Q(e)})}}async function Fe(e,t,n){let r;try{r=await Re(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 Ie(e,t){try{return c(await Re(e,t)).messages}catch(e){if($(e))return null;throw e}}async function Le(e,t){try{return await e.readFile(F(t),{encoding:`utf-8`}),!0}catch(e){if($(e))return!1;throw e}}async function Re(e,t){let n=await e.readFile(t,{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}function ze(){return globalThis.__slicc_agent}function Be(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 d?e.code===`ENOENT`:typeof e!=`object`||!e||!(`code`in e)?!1:e.code===`ENOENT`}export{Y as curateLiveSessionDelta,fe as i,K as liveDeltaCurationEnabled,D as n,N as r,Ee as scheduleLiveDeltaCuration,Pe as stampCurationOutcome,w 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{r as s,u as c}from"./frozen-archive-format-7wcOWvsT.js";import{n as l,t as u}from"./thinking-level-5x0UAu9N.js";import{t as d}from"./types-D8gIX-W-.js";import{a as f,r as p}from"./memory-budget-CFfevxz_.js";import{c as ee}from"./kernel-worker-965_891X.js";import{t as m}from"./MEMORY-Byv8wmch.js";import{a as te,i as ne,n as h,o as g,r as _,t as re}from"./instruction-frontmatter-B48EsYtA.js";import{l as v,n as ie,p as y,r as ae,u as oe}from"./frozen-archive-writer-Cixi7_NJ.js";function b(e){let t=0;for(let n of e)n.timestamp>t&&(t=n.timestamp);return t}function x(e,t){return t>0?e.filter(e=>e.timestamp>t):[...e]}const S=e(`agentic-memory`),se=e=>[e.memoryPath],ce=e=>[`/sessions/`,`/shared/`,...i(e)],le=/* @__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(`.`),ue={arrayKeys:/* @__PURE__ */ new Set([`writablePaths`,`visiblePaths`,`allowedCommands`]),scalarKeys:/* @__PURE__ */ new Set([`model`,`timeoutSeconds`,`dreamTimeoutSeconds`,`thinkingLevel`])},C=3e4;function w(e){return e===`cone`?`memory-curator`:`memory-curator-${e}`}const T={kind:`curate`,nameFor:w,rivalsFor:e=>[D(e)]},E=`{{TASK}}`;function de(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 fe(e){try{await e.stat(p);return}catch(e){if(!B(e)){S.warn(`Could not stat ${p}; not seeding`,{error:z(e)});return}}try{await e.mkdir(`/etc`,{recursive:!0}),await e.writeFile(p,m),S.info(`Seeded default ${p}`)}catch(e){S.warn(`Failed to seed ${p}`,{error:z(e)})}}function D(e){return e===`cone`?`memory-dreamer`:`memory-dreamer-${e}`}function O(e,t){let r=e.nameFor(t);return k.test(r)?r:e.nameFor(n)}function pe(e,t){let r=k.test(e.nameFor(t))?t:n;return e.rivalsFor?.(r)??[]}const k=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;function A(e,t){return`/scoops/agent-${O(e,t)}`}function me(e){return A(T,e)}const j=me(n);function he(e){return o({parentJid:null,folder:e?.folder??`cone`})}function M(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 ge(e,t){let n=`${a}/`,r=e=>e.some(e=>n.startsWith(e.endsWith(`/`)?e:`${e}/`)),i=e.map(e=>M(e,t));return r(e)&&!r(i)&&i.push(n),i}async function N(e){try{if(e.signal?.aborted)return{ok:!1,reason:`aborted`,legacyFallbackSafe:!1};let t=e.instructions??T,n=he(e.cone),r=A(t,e.cone?.folder??`cone`),i=await _e(e.vfs,n),a=t.kind===`dream`?i.dreamTimeoutSeconds:i.timeoutSeconds,o=R(e.sessionArchivePath);try{await be(e.vfs,n.memoryPath,e.sessionArchivePath)}catch(e){return S.error(`Curation snapshot failed; pass aborted, live memory untouched`,{memoryPath:n.memoryPath,error:z(e)}),{ok:!1,reason:`snapshot: ${z(e)}`,legacyFallbackSafe:!0}}let s=t.kind===`dream`?`(no session archive this pass)`:e.sessionArchivePath,c=Math.max(1,Math.round(a/60)),l=de(t,s,c),u=Se(i,a,Ce(we(i.promptTemplate.includes(E)?i.promptTemplate:`${i.promptTemplate.trimEnd()}\n\n${E}`,{MEMORY_PATH:o,SESSION_ARCHIVE_PATH:s,SESSION_COUNT:String(e.sessionCount),BUDGET_CHARS:String(f(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&&(u.signal=e.signal);let d=await Te(Promise.resolve().then(()=>e.spawn(u)),a*1e3+C,e.signal);if(d.type===`timeout`)return S.warn(`Agentic memory wait timed out past the in-run bound + grace`,{timeoutSeconds:a,graceMs:C}),{ok:!1,reason:`timeout`,legacyFallbackSafe:!1};if(d.type===`aborted`)return{ok:!1,reason:`aborted`,legacyFallbackSafe:!1};if(d.type===`error`)return{ok:!1,reason:z(d.error),legacyFallbackSafe:!0};if(d.result.exitCode!==0){let e=(d.result.finalText??``).startsWith(ee);return{ok:!1,reason:d.result.finalText||`exit-${d.result.exitCode}`,legacyFallbackSafe:!e}}return{ok:!0,report:d.result.finalText}}catch(e){return S.warn(`Agentic memory pass failed`,{error:z(e)}),{ok:!1,reason:z(e),legacyFallbackSafe:!1}}}async function _e(e,t=r){try{let n=await e.readFile(p,{encoding:`utf-8`});return P(typeof n==`string`?n:new TextDecoder().decode(n),t)}catch(e){return S.warn(`Could not load valid ${p}; using built-in default`,{error:z(e)}),P(m,t)}}function P(e,t=r){let n=te(e,`MEMORY.md`),i=re(n.frontmatter,ue),a=h(i,`writablePaths`,se(t));if(a.length===0)throw Error(`writablePaths must not be empty`);g(a,`writablePaths`);let o=h(i,`visiblePaths`,ce(t));g(o,`visiblePaths`);let s=_(i.timeoutSeconds,600,1200),c=_(i.dreamTimeoutSeconds,3600,7200,`dreamTimeoutSeconds`),l=ne(i.model,`model`);return{writablePaths:a.map(e=>M(e,t)),visiblePaths:ge(o,t),allowedCommands:[.../* @__PURE__ */ new Set([...le,...h(i,`allowedCommands`,[])])],...l?{model:l}:{},thinkingLevel:ve(i.thinkingLevel),timeoutSeconds:s,dreamTimeoutSeconds:c,promptTemplate:n.body}}function ve(e){if(e===void 0)return`medium`;if(typeof e!=`string`||!l(e))throw Error(`thinkingLevel must be one of ${u.join(`, `)}`);return e}function F(e){return`/sessions/.curated/${e.slice(e.lastIndexOf(`/`)+1)}`}function I(e){return`/sessions/.curation/${e.slice(e.lastIndexOf(`/`)+1)}`}function L(e){return`${I(e)}/base.md`}function R(e){return`${I(e)}/draft.md`}function ye(e){return`${I(e)}/status.json`}async function be(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(e){if(!B(e))throw e}await e.mkdir(I(n),{recursive:!0}),await e.writeFile(L(n),r),await e.writeFile(R(n),r)}function xe(e,t,n){let r=e.map(e=>e===t?n:e);return r.includes(n)?r:[...r,n]}function Se(e,t,n,r,i,a,o){let s=e.model===`parent`||e.model===`cone`,c=L(r),l=R(r);return{cwd:i.root,writablePaths:xe(e.writablePaths,i.memoryPath,l),visiblePaths:[...e.visiblePaths,`${I(r)}/`],allowedCommands:e.allowedCommands,prompt:n,thinkingLevel:e.thinkingLevel,persistSession:!0,name:O(o,a?.folder??`cone`),exclusiveWith:pe(o,a?.folder??`cone`),...a?.jid?{parentJid:a.jid}:{},notifyOnComplete:!0,successReceiptPath:F(r),mergeOnSuccess:{targetPath:i.memoryPath,basePath:c,draftPath:l},outcomeReceiptPath:ye(r),maxWallClockMs:t*1e3,...!s&&e.model?{modelId:e.model}:{}}}function Ce(e,t){if(t===j)return e;let n=`\0SCRATCH\0`;return e.replaceAll(t,n).replaceAll(j,t).replaceAll(n,t)}function we(e,t){let n=e;for(let[e,r]of Object.entries(t))n=n.replaceAll(`{{${e}}}`,r);return n}function Te(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 z(e){return e instanceof Error?e.message:String(e)}function B(e){return e?.code===`ENOENT`}const V=e(`live-session-curation`),H=`/sessions/.live-deltas`,U={maxMessages:200,maxChars:8e4},W=/* @__PURE__ */ new Map,G=/* @__PURE__ */ new Map;function K(){return t(`memory-v2`)&&t(`agentic-memory`)}function q(e,t,n){return`${H}/${e}-${t}-${n}.md`}function J(e,t=U){if(e.length===0)return[];let n=[],r=0;for(let i of e){let e=Be(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 Ee(e){if(!K())return Promise.resolve({status:`skipped`,reason:`flag-off`});let t=e.cone.folder||`cone`,n={...e.cone,folder:t},r=ze();if(!r)return V.info(`Live delta curation skipped: agent bridge not published`,{cone:t}),Promise.resolve({status:`skipped`,reason:`no-bridge`});let i={...e,cone:n},a=W.get(t);return a==null?De(i,r):(G.set(t,i),a)}function Y(e){let t=e.cone.folder||`cone`,n={...e.cone,folder:t},r={...e,cone:n};if(e.hold===`held`)return Ae(r);let i=W.get(t);return i==null?Oe(t,Ae(r)):i.then(()=>Y(r))}async function X(e,t,n){n>0&&await oe(async()=>{let r=await v(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:c,...l}=r[i],u=r.slice();u[i]={...l,curatedThrough:Math.max(n,a),memoryCuratedAt:(/* @__PURE__ */ new Date()).toISOString()},await y(Z(e),u),o&&await Fe(e,`${s}/${t}`,n),await e.flush?.()})}function De(e,t){return Oe(e.cone.folder||`cone`,Y({vfs:e.vfs,cone:e.cone,spawn:e=>t.spawn(e),enabled:!0,hold:`held`,...e.limits?{limits:e.limits}:{}}))}function Oe(e,t){return W.set(e,t),t.then(()=>ke(e,t),()=>ke(e,t)),t}function ke(e,t){if(W.get(e)!==t)return;W.delete(e);let n=G.get(e);if(G.delete(e),!n||!K())return;let r=ze();r&&De(n,r).catch(t=>{V.warn(`Follow-up live delta curation failed to start`,{cone:e,error:Q(t)})})}async function Ae(e){if(!(e.enabled??K()))return{status:`skipped`,reason:`flag-off`};let t=e.cone.folder||`cone`,n=e.limits??U,r;try{r=await v(Z(e.vfs))}catch(e){return V.warn(`Live delta curation skipped: sessions index unreadable`,{cone:t,error:Q(e)}),{status:`skipped`,reason:`index-unreadable`}}let i=ie(r,t);if(!i?.sessionId)return{status:`skipped`,reason:`no-archive`};let a=await Ie(e.vfs,`${s}/${i.filename}`);if(!a)return{status:`skipped`,reason:`no-archive`};let o=await je(e.vfs,i.sessionId,i.filename,a,i.curatedThrough??0,n),c=x(a,o);if(c.length===0)return{status:`skipped`,reason:`caught-up`};let l=J(c,n),u=b(l);if(u<=o)return{status:`skipped`,reason:`caught-up`};let d=q(i.sessionId,o,u);await Me(e.vfs,{sessionId:i.sessionId,filename:i.filename,title:i.title,frozenAt:i.frozenAt,cone:i.cone,coneLabel:i.coneLabel},l,d);let f=await N({spawn:e.spawn,vfs:e.vfs,sessionArchivePath:d,sessionCount:r.length,...t!==`cone`||e.cone.jid?{cone:e.cone}:{},...e.signal?{signal:e.signal}:{}});return f.ok?(await X(e.vfs,i.filename,u),V.info(`Live delta curated`,{cone:t,filename:i.filename,through:u}),{status:`curated`,curatedThrough:u,filename:i.filename}):(f.reason.startsWith(`agent: name already in use`)||await Ne(e.vfs,i.filename,f.reason),V.warn(`Live delta curation failed`,{cone:t,filename:i.filename,reason:f.reason}),{status:`failed`,reason:f.reason,filename:i.filename})}async function je(e,t,n,r,i,a){let o=i;for(let n=0;n<50;n+=1){let n=x(r,o);if(n.length===0)break;let i=b(J(n,a??U));if(i<=o||!await Le(e,q(t,o,i)))break;o=i}return o>i&&await X(e,n,o),o}async function Me(e,t,n,r){let i={id:t.sessionId,sessionId:t.sessionId,title:t.title,frozenAt:t.frozenAt,createdAt:n[0]?.timestamp??0,updatedAt:b(n),messageCount:n.length,messages:[...n],...t.cone?{cone:t.cone}:{},...t.coneLabel?{coneLabel:t.coneLabel}:{}};await e.mkdir(H,{recursive:!0}),await e.writeFile(r,ae(i))}async function Ne(e,t,n){await Pe(e,t,{ok:!1,reason:n})}async function Pe(e,t,n,r){try{await oe(async()=>{let i=await v(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 y(Z(e),l),await e.flush?.()})}catch(e){V.warn(`Failed to record curation outcome`,{filename:t,error:Q(e)})}}async function Fe(e,t,n){let r;try{r=await Re(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 Ie(e,t){try{return c(await Re(e,t)).messages}catch(e){if($(e))return null;throw e}}async function Le(e,t){try{return await e.readFile(F(t),{encoding:`utf-8`}),!0}catch(e){if($(e))return!1;throw e}}async function Re(e,t){let n=await e.readFile(t,{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}function ze(){return globalThis.__slicc_agent}function Be(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 d?e.code===`ENOENT`:typeof e!=`object`||!e||!(`code`in e)?!1:e.code===`ENOENT`}export{Y as curateLiveSessionDelta,fe as i,K as liveDeltaCurationEnabled,D as n,N as r,Ee as scheduleLiveDeltaCuration,Pe as stampCurationOutcome,w as t};
@@ -1 +1 @@
1
- import{t as e}from"./logger-Cx6Y120U.js";import{n as t}from"./record-DTUQtot0.js";import{a as n,f as r,l as i,r as a,u as o}from"./frozen-archive-format-7wcOWvsT.js";import{t as s}from"./types-D8gIX-W-.js";import{l as c}from"./kernel-worker-DQZWnLpe.js";import{a as l,c as u,d,f,l as p,n as m,p as h,r as g,s as _,t as v,u as y}from"./frozen-archive-writer-CXRaBKpe.js";const b=e(`live-session-snapshot`);function x(e,t){return`/scoops/${e}/sessions/${t}`}function S(e){let t=e.cone.folder||`cone`,n=e.sessionsDir??`/sessions`,r=c(e.messages,{source:e.cone.label??t,uncapped:!0});return y(async()=>e.stillValid&&!e.stillValid()?(b.info(`Live session snapshot skipped: session gone before the write`,{cone:t,sessionsDir:n,trigger:e.trigger}),null):C(e,t,n,r),d(n))}async function C(e,r,i,a){let o=e.now??Date.now,s=await p(e.vfs,i),c=m(s,r),d=c?await O(e.vfs,i,c):null,h=d?.messages??null,y=h===null?0:c?.liveThrough??D(h),x=E(a,h??[],y),S=[...h??[],...x],C=Math.max(y,D(a)),w=c?.filename??u(r),T=c?.frozenAt??new Date(o()).toISOString(),k=l(S),A=c?.title&&!_(c.title)?c.title:k,j=(c?.compactions??0)+1,M={cone:r,...r!==`cone`&&e.cone.label?{coneLabel:e.cone.label}:{}},N=c?.sessionId??crypto.randomUUID(),P={id:t({folder:r}),sessionId:N,title:A,frozenAt:T,createdAt:S[0]?.timestamp||o(),updatedAt:o(),messageCount:S.length,messages:S,...M,live:!0,liveThrough:C,compactions:j,...c?.curatedThrough?{curatedThrough:c.curatedThrough}:{},...d?.damagedSnapshots.length?{damagedSnapshots:d.damagedSnapshots}:{}},F={filename:w,sessionId:N,title:A,frozenAt:T,messageCount:S.length,...M,...c?.icon?{icon:c.icon}:{},live:!0,liveThrough:C,compactions:j,...n(c)};await v(e.vfs,i);let I=`${i}/${w}`;return await e.vfs.writeFile(I,g(P)),await f(e.vfs,F,i,s),await e.vfs.flush(),b.info(`Live session snapshot written`,{cone:r,sessionsDir:i,filename:w,trigger:e.trigger,appended:x.length,total:S.length,compactions:j}),{transcriptPath:I,entry:F,appended:x.length}}function w(e,t){let n=t||`cone`;return y(async()=>{let t=await p(e),r=m(t,n);if(!r)return!1;let{live:i,liveThrough:o,...s}=r,c={...s,pendingEnrichment:!0};return await h(e,t.map(e=>e===r?c:e)),await k(e,`${a}/${r.filename}`),await e.flush(),b.info(`Live session snapshot finalized`,{cone:n,filename:r.filename}),!0})}function T(e,t){let n=t||`cone`;return y(async()=>{let t=await p(e),r=t.filter(e=>e.live===!0&&(e.cone??`cone`)===n);if(r.length===0)return 0;await h(e,t.filter(e=>!r.includes(e)));for(let t of r){try{await e.rm(`${a}/${t.filename}`)}catch(e){if(!(e instanceof s)||e.code!==`ENOENT`)throw e}let{removeSessionJsonl:n}=await import(`./session-jsonl-BwJt_n1u.js`);await n(e,t.filename)}let{invalidateSessionSearchIndex:i}=await import(`./session-search-index-DumLK4vT.js`);return await i(e),await e.flush(),b.info(`Live session snapshot discarded`,{cone:n,removed:r.length}),r.length})}function E(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 D(e){let t=0;for(let n of e)n.timestamp>t&&(t=n.timestamp);return t}async function O(e,t,n){try{let a=await e.readFile(`${t}/${n.filename}`,{encoding:`utf-8`}),s=typeof a==`string`?a:new TextDecoder().decode(a),c=o(s);return i(s,c)?(b.warn(`Live snapshot archive is damaged; keeping its bytes inside the rewrite`,{sessionsDir:t,filename:n.filename,bytes:s.length}),{messages:[],damagedSnapshots:[s]}):{messages:c.messages,damagedSnapshots:r(s)}}catch(e){if(!(e instanceof s)||e.code!==`ENOENT`)throw e;return b.warn(`Live snapshot archive missing; rewriting from the agent history`,{sessionsDir:t,filename:n.filename}),null}}async function k(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 s&&e.code===`ENOENT`)return;throw e}}export{T as discardLiveSnapshot,w as finalizeLiveSnapshot,x as scoopSessionsDir,S as snapshotLiveSession};
1
+ import{t as e}from"./logger-Cx6Y120U.js";import{n as t}from"./record-DTUQtot0.js";import{a as n,f as r,l as i,r as a,u as o}from"./frozen-archive-format-7wcOWvsT.js";import{t as s}from"./types-D8gIX-W-.js";import{l as c}from"./kernel-worker-965_891X.js";import{a as l,c as u,d,f,l as p,n as m,p as h,r as g,s as _,t as v,u as y}from"./frozen-archive-writer-Cixi7_NJ.js";const b=e(`live-session-snapshot`);function x(e,t){return`/scoops/${e}/sessions/${t}`}function S(e){let t=e.cone.folder||`cone`,n=e.sessionsDir??`/sessions`,r=c(e.messages,{source:e.cone.label??t,uncapped:!0});return y(async()=>e.stillValid&&!e.stillValid()?(b.info(`Live session snapshot skipped: session gone before the write`,{cone:t,sessionsDir:n,trigger:e.trigger}),null):C(e,t,n,r),d(n))}async function C(e,r,i,a){let o=e.now??Date.now,s=await p(e.vfs,i),c=m(s,r),d=c?await O(e.vfs,i,c):null,h=d?.messages??null,y=h===null?0:c?.liveThrough??D(h),x=E(a,h??[],y),S=[...h??[],...x],C=Math.max(y,D(a)),w=c?.filename??u(r),T=c?.frozenAt??new Date(o()).toISOString(),k=l(S),A=c?.title&&!_(c.title)?c.title:k,j=(c?.compactions??0)+1,M={cone:r,...r!==`cone`&&e.cone.label?{coneLabel:e.cone.label}:{}},N=c?.sessionId??crypto.randomUUID(),P={id:t({folder:r}),sessionId:N,title:A,frozenAt:T,createdAt:S[0]?.timestamp||o(),updatedAt:o(),messageCount:S.length,messages:S,...M,live:!0,liveThrough:C,compactions:j,...c?.curatedThrough?{curatedThrough:c.curatedThrough}:{},...d?.damagedSnapshots.length?{damagedSnapshots:d.damagedSnapshots}:{}},F={filename:w,sessionId:N,title:A,frozenAt:T,messageCount:S.length,...M,...c?.icon?{icon:c.icon}:{},live:!0,liveThrough:C,compactions:j,...n(c)};await v(e.vfs,i);let I=`${i}/${w}`;return await e.vfs.writeFile(I,g(P)),await f(e.vfs,F,i,s),await e.vfs.flush(),b.info(`Live session snapshot written`,{cone:r,sessionsDir:i,filename:w,trigger:e.trigger,appended:x.length,total:S.length,compactions:j}),{transcriptPath:I,entry:F,appended:x.length}}function w(e,t){let n=t||`cone`;return y(async()=>{let t=await p(e),r=m(t,n);if(!r)return!1;let{live:i,liveThrough:o,...s}=r,c={...s,pendingEnrichment:!0};return await h(e,t.map(e=>e===r?c:e)),await k(e,`${a}/${r.filename}`),await e.flush(),b.info(`Live session snapshot finalized`,{cone:n,filename:r.filename}),!0})}function T(e,t){let n=t||`cone`;return y(async()=>{let t=await p(e),r=t.filter(e=>e.live===!0&&(e.cone??`cone`)===n);if(r.length===0)return 0;await h(e,t.filter(e=>!r.includes(e)));for(let t of r){try{await e.rm(`${a}/${t.filename}`)}catch(e){if(!(e instanceof s)||e.code!==`ENOENT`)throw e}let{removeSessionJsonl:n}=await import(`./session-jsonl-eXAElh6W.js`);await n(e,t.filename)}let{invalidateSessionSearchIndex:i}=await import(`./session-search-index-ByisDLR5.js`);return await i(e),await e.flush(),b.info(`Live session snapshot discarded`,{cone:n,removed:r.length}),r.length})}function E(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 D(e){let t=0;for(let n of e)n.timestamp>t&&(t=n.timestamp);return t}async function O(e,t,n){try{let a=await e.readFile(`${t}/${n.filename}`,{encoding:`utf-8`}),s=typeof a==`string`?a:new TextDecoder().decode(a),c=o(s);return i(s,c)?(b.warn(`Live snapshot archive is damaged; keeping its bytes inside the rewrite`,{sessionsDir:t,filename:n.filename,bytes:s.length}),{messages:[],damagedSnapshots:[s]}):{messages:c.messages,damagedSnapshots:r(s)}}catch(e){if(!(e instanceof s)||e.code!==`ENOENT`)throw e;return b.warn(`Live snapshot archive missing; rewriting from the agent history`,{sessionsDir:t,filename:n.filename}),null}}async function k(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 s&&e.code===`ENOENT`)return;throw e}}export{T as discardLiveSnapshot,w as finalizeLiveSnapshot,x as scoopSessionsDir,S 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-CuQyRnib.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--QH_gRlz.js";import{a as r}from"./diagnostics-B-5VkVir.js";import{a as i}from"./compat-CuWVDYYO.js";import{r as a,s as o}from"./legacy-api-aliases-DcPvcesD.js";import{n as s}from"./pi-transcript-context-C6LXdArv.js";var c=/* @__PURE__ */ e({config:()=>f,detectRuntime:()=>E,discoverModels:()=>T,originOf:()=>C,register:()=>b,verifyConnection:()=>k});const l=t(`local-llm`),u=`local-llm`,d=`${u}-unconfigured`,f={id:u,name:`Local LLM (OpenAI-compatible)`,description:[`Connect to any OpenAI-compatible local model server.`,``,`Common base URLs:`,` • Ollama http://localhost:11434/v1`,` • LM Studio http://localhost:1234/v1`,` • llama.cpp http://localhost:8080/v1`,` • vLLM http://localhost:8000/v1`,` • mlx_lm http://localhost:8080/v1`,` • Jan http://localhost:1337/v1`,``,`Ollama needs OLLAMA_ORIGINS=* (or chrome-extension://*) so the`,`browser can reach it. macOS: launchctl setenv OLLAMA_ORIGINS "*".`].join(`
2
2
  `),requiresApiKey:!1,optionalApiKey:!0,apiKeyPlaceholder:`Leave empty for local servers, or paste a key for hosted endpoints`,apiKeyEnvVar:`LOCAL_LLM_API_KEY`,requiresBaseUrl:!0,baseUrlPlaceholder:`http://localhost:11434/v1`,baseUrlDescription:`Ollama: 11434 • LM Studio: 1234 • llama.cpp/mlx: 8080 • vLLM: 8000 • Jan: 1337. Trailing /v1 required.`,requiresDeployment:!0,deploymentPlaceholder:`llama3.1:8b, qwen2.5-coder:14b`,deploymentDescription:`Comma-separated model IDs from your server. List them with: curl <baseUrl>/models | jq -r .data[].id`,getModelIds:()=>{let e=p(n(u));return e.length===0?[{id:d,name:`Local LLM (set base URL + model IDs in Settings)`,api:`openai`}]:e.map(e=>({id:e,name:e,api:`openai`,input:[`text`],context_window:32e3,max_tokens:4096}))}};function p(e){return e?e.split(`,`).map(e=>e.trim()).filter(Boolean):[]}const m=`${u}-openai`;function h(e){return{...e,api:`openai-completions`}}function g(e){let t=e??{};return!t.apiKey||t.apiKey.length===0?{...t,apiKey:`local`}:t}const _=(e,t,n={})=>e.id===d?y(e,`Local LLM is not configured. Set base URL and model IDs in Settings.`):e.baseUrl?a(h(e),s(t),g(n)):y(e,`Local LLM base URL is required (e.g. http://localhost:11434/v1).`),v=(e,t,n)=>e.id===d?y(e,`Local LLM is not configured. Set base URL and model IDs in Settings.`):e.baseUrl?o(h(e),s(t),g(n)):y(e,`Local LLM base URL is required (e.g. http://localhost:11434/v1).`);function y(e,t){let n=r(),i={role:`assistant`,content:[],api:e.api,provider:e.provider,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`error`,errorMessage:t,timestamp:Date.now()};return queueMicrotask(()=>{n.push({type:`error`,reason:`error`,error:i}),n.end()}),n}function b(){i({api:m,stream:_,streamSimple:v})}function x(e){return typeof e==`object`&&!!e&&`object`in e&&e.object===`list`}function S(e){return typeof e==`object`&&!!e&&`build_info`in e}function C(e){try{let t=new URL(e);return`${t.protocol}//${t.host}`}catch{return e.replace(/\/v1\/?$/,``).replace(/\/+$/,``)}}function w(e){let t=e.replace(/\/+$/,``);try{let e=new URL(t);if(e.pathname===``||e.pathname===`/`)return`${t}/v1`}catch{}return t}async function T(e,t,n){let r=`${w(e)}/models`,i={Accept:`application/json`};t&&t.length>0&&(i.Authorization=`Bearer ${t}`);let a=await fetch(r,{method:`GET`,headers:i,signal:n});if(!a.ok)throw Error(`GET ${r} -> ${a.status} ${a.statusText}`);let o=await a.json();return Array.isArray(o.data)?o.data.map(e=>e.id??``).filter(e=>e.length>0):[]}async function E(e,t){let n=C(e),r=await O(`${n}/api/version`,t);if(r&&typeof r.version==`string`)return{kind:`ollama`,version:r.version};if(x(await O(`${n}/api/v0/models`,t)))return{kind:`lmstudio`};let i=await O(`${n}/props`,t);if(S(i))return{kind:`llamacpp`,version:i.build_info?.version};let a=D(e);return a===`11434`?{kind:`ollama`}:a===`1234`?{kind:`lmstudio`}:a===`8000`?{kind:`vllm`}:a===`1337`?{kind:`jan`}:{kind:`unknown`}}function D(e){try{return new URL(e).port||null}catch{return null}}async function O(e,t){try{let n=await fetch(e,{method:`GET`,signal:t});return n.ok?await n.json():null}catch{return null}}async function k(e,t,n){let r={kind:`unknown`};try{r=await E(e,n)}catch{}try{let i=await T(e,t,n);return{ok:!0,runtime:r,models:i}}catch(t){let n=t instanceof Error?t.message:String(t),i=A(n,r.kind);return l.warn(`verifyConnection failed`,{baseUrl:e,runtime:r.kind,message:n}),{ok:!1,runtime:r,models:[],error:i}}}function A(e,t){let n=e.toLowerCase();return n.includes(`failed to fetch`)||n.includes(`networkerror`)?t===`ollama`?{kind:`cors`,message:e,hint:'Ollama rejects requests from non-localhost origins by default. Set OLLAMA_ORIGINS=* (or chrome-extension://*) and restart Ollama. macOS: `launchctl setenv OLLAMA_ORIGINS "*"` then quit and relaunch the Ollama app.'}:{kind:`connection`,message:e,hint:`Server unreachable. Check the URL and that the server is running.`}:n.includes(` 401`)||n.includes(` 403`)?{kind:`auth`,message:e,hint:`Server returned an auth error. If your endpoint requires a key, set it in Settings.`}:/-> \d{3} /.test(e)?{kind:`http`,message:e}:{kind:`unknown`,message:e}}export{c as n,f as t};
@@ -1,2 +1,2 @@
1
- import{t as e}from"./logger-dqckiMJt.js";import{$ as t,v as n}from"./core-BXRpM6QF.js";import{r,s as i}from"./legacy-api-aliases-yN2KDO_G.js";import{b as a}from"./account-store-CEqw_XTp.js";import{n as o}from"./pi-transcript-context-CrhAqp9b.js";var s=e(`local-llm`),c=`local-llm`,l=`local`,u=`${c}-unconfigured`,d={id:c,name:`Local LLM (OpenAI-compatible)`,description:[`Connect to any OpenAI-compatible local model server.`,``,`Common base URLs:`,` • Ollama http://localhost:11434/v1`,` • LM Studio http://localhost:1234/v1`,` • llama.cpp http://localhost:8080/v1`,` • vLLM http://localhost:8000/v1`,` • mlx_lm http://localhost:8080/v1`,` • Jan http://localhost:1337/v1`,``,`Ollama needs OLLAMA_ORIGINS=* (or chrome-extension://*) so the`,`browser can reach it. macOS: launchctl setenv OLLAMA_ORIGINS "*".`].join(`
1
+ import{t as e}from"./logger-dqckiMJt.js";import{$ as t,v as n}from"./core-BXRpM6QF.js";import{r,s as i}from"./legacy-api-aliases-yN2KDO_G.js";import{b as a}from"./account-store-CbKQrU_A.js";import{n as o}from"./pi-transcript-context-CrhAqp9b.js";var s=e(`local-llm`),c=`local-llm`,l=`local`,u=`${c}-unconfigured`,d={id:c,name:`Local LLM (OpenAI-compatible)`,description:[`Connect to any OpenAI-compatible local model server.`,``,`Common base URLs:`,` • Ollama http://localhost:11434/v1`,` • LM Studio http://localhost:1234/v1`,` • llama.cpp http://localhost:8080/v1`,` • vLLM http://localhost:8000/v1`,` • mlx_lm http://localhost:8080/v1`,` • Jan http://localhost:1337/v1`,``,`Ollama needs OLLAMA_ORIGINS=* (or chrome-extension://*) so the`,`browser can reach it. macOS: launchctl setenv OLLAMA_ORIGINS "*".`].join(`
2
2
  `),requiresApiKey:!1,optionalApiKey:!0,apiKeyPlaceholder:`Leave empty for local servers, or paste a key for hosted endpoints`,apiKeyEnvVar:`LOCAL_LLM_API_KEY`,requiresBaseUrl:!0,baseUrlPlaceholder:`http://localhost:11434/v1`,baseUrlDescription:`Ollama: 11434 • LM Studio: 1234 • llama.cpp/mlx: 8080 • vLLM: 8000 • Jan: 1337. Trailing /v1 required.`,requiresDeployment:!0,deploymentPlaceholder:`llama3.1:8b, qwen2.5-coder:14b`,deploymentDescription:`Comma-separated model IDs from your server. List them with: curl <baseUrl>/models | jq -r .data[].id`,getModelIds:()=>{let e=f(a(c));return e.length===0?[{id:u,name:`Local LLM (set base URL + model IDs in Settings)`,api:`openai`}]:e.map(e=>({id:e,name:e,api:`openai`,input:[`text`],context_window:32e3,max_tokens:4096}))}};function f(e){return e?e.split(`,`).map(e=>e.trim()).filter(Boolean):[]}var p=`openai-completions`,m=`${c}-openai`;function h(e){return{...e,api:p}}function g(e){let t=e??{};return!t.apiKey||t.apiKey.length===0?{...t,apiKey:l}:t}var _=(e,t,n={})=>e.id===u?y(e,`Local LLM is not configured. Set base URL and model IDs in Settings.`):e.baseUrl?r(h(e),o(t),g(n)):y(e,`Local LLM base URL is required (e.g. http://localhost:11434/v1).`),v=(e,t,n)=>e.id===u?y(e,`Local LLM is not configured. Set base URL and model IDs in Settings.`):e.baseUrl?i(h(e),o(t),g(n)):y(e,`Local LLM base URL is required (e.g. http://localhost:11434/v1).`);function y(e,n){let r=t(),i={role:`assistant`,content:[],api:e.api,provider:e.provider,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`error`,errorMessage:n,timestamp:Date.now()};return queueMicrotask(()=>{r.push({type:`error`,reason:`error`,error:i}),r.end()}),r}function b(){n({api:m,stream:_,streamSimple:v})}function x(e){return typeof e==`object`&&!!e&&`object`in e&&e.object===`list`}function S(e){return typeof e==`object`&&!!e&&`build_info`in e}function C(e){try{let t=new URL(e);return`${t.protocol}//${t.host}`}catch{return e.replace(/\/v1\/?$/,``).replace(/\/+$/,``)}}function w(e){let t=e.replace(/\/+$/,``);try{let e=new URL(t);if(e.pathname===``||e.pathname===`/`)return`${t}/v1`}catch{}return t}async function T(e,t,n){let r=`${w(e)}/models`,i={Accept:`application/json`};t&&t.length>0&&(i.Authorization=`Bearer ${t}`);let a=await fetch(r,{method:`GET`,headers:i,signal:n});if(!a.ok)throw Error(`GET ${r} -> ${a.status} ${a.statusText}`);let o=await a.json();return Array.isArray(o.data)?o.data.map(e=>e.id??``).filter(e=>e.length>0):[]}async function E(e,t){let n=C(e),r=await O(`${n}/api/version`,t);if(r&&typeof r.version==`string`)return{kind:`ollama`,version:r.version};if(x(await O(`${n}/api/v0/models`,t)))return{kind:`lmstudio`};let i=await O(`${n}/props`,t);if(S(i))return{kind:`llamacpp`,version:i.build_info?.version};let a=D(e);return a===`11434`?{kind:`ollama`}:a===`1234`?{kind:`lmstudio`}:a===`8000`?{kind:`vllm`}:a===`1337`?{kind:`jan`}:{kind:`unknown`}}function D(e){try{return new URL(e).port||null}catch{return null}}async function O(e,t){try{let n=await fetch(e,{method:`GET`,signal:t});return n.ok?await n.json():null}catch{return null}}async function k(e,t,n){let r={kind:`unknown`};try{r=await E(e,n)}catch{}try{let i=await T(e,t,n);return{ok:!0,runtime:r,models:i}}catch(t){let n=t instanceof Error?t.message:String(t),i=A(n,r.kind);return s.warn(`verifyConnection failed`,{baseUrl:e,runtime:r.kind,message:n}),{ok:!1,runtime:r,models:[],error:i}}}function A(e,t){let n=e.toLowerCase();return n.includes(`failed to fetch`)||n.includes(`networkerror`)?t===`ollama`?{kind:`cors`,message:e,hint:'Ollama rejects requests from non-localhost origins by default. Set OLLAMA_ORIGINS=* (or chrome-extension://*) and restart Ollama. macOS: `launchctl setenv OLLAMA_ORIGINS "*"` then quit and relaunch the Ollama app.'}:{kind:`connection`,message:e,hint:`Server unreachable. Check the URL and that the server is running.`}:n.includes(` 401`)||n.includes(` 403`)?{kind:`auth`,message:e,hint:`Server returned an auth error. If your endpoint requires a key, set it in Settings.`}:/-> \d{3} /.test(e)?{kind:`http`,message:e}:{kind:`unknown`,message:e}}export{d as config,E as detectRuntime,T as discoverModels,C as originOf,b as register,k as verifyConnection};