@xopcai/xopc 0.0.119 → 0.0.120

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 (138) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/telegram/xopc.extension.json +1 -1
  3. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-CU8J6zou.js → agent-avatar-dicebear-APTlX9Sq.js} +1 -1
  4. package/dist/gateway/static/root/assets/agents-CFW_FS_V.js +2 -0
  5. package/dist/gateway/static/root/assets/{app-management-settings-panel-B9vfYoEr.js → app-management-settings-panel-DTKc5HHT.js} +1 -1
  6. package/dist/gateway/static/root/assets/{appearance-settings-ClOzIO24.js → appearance-settings-BTciFrE9.js} +1 -1
  7. package/dist/gateway/static/root/assets/{apps-page-DU0dz9Zo.js → apps-page-DT52OrbM.js} +1 -1
  8. package/dist/gateway/static/root/assets/{archive-plugin-BkVIgZzA.js → archive-plugin-CiHaUMII.js} +1 -1
  9. package/dist/gateway/static/root/assets/{attachment-load-CaCMWh1D.js → attachment-load-t4gSrNjL.js} +1 -1
  10. package/dist/gateway/static/root/assets/{automation-suggestion-card-DhGDpKP3.js → automation-suggestion-card-CtysjSoQ.js} +1 -1
  11. package/dist/gateway/static/root/assets/{automations-page-CTedroVo.js → automations-page-B2YvT3ES.js} +1 -1
  12. package/dist/gateway/static/root/assets/{binary-plugins-B4TO_bsn.js → binary-plugins-BAbSldW5.js} +1 -1
  13. package/dist/gateway/static/root/assets/{block-editor-DJRWwWNI.js → block-editor-BNr_82xl.js} +1 -1
  14. package/dist/gateway/static/root/assets/{browser-settings-page-FCDwOOBK.js → browser-settings-page-BQEXPhDU.js} +3 -3
  15. package/dist/gateway/static/root/assets/{capability-presets-api-Befi89CL.js → capability-presets-api-tzD702Gg.js} +1 -1
  16. package/dist/gateway/static/root/assets/{capability-presets-settings-panel-_G8eb2vJ.js → capability-presets-settings-panel-AGhTueAc.js} +1 -1
  17. package/dist/gateway/static/root/assets/{channel-recipient-api-BNSuJb5f.js → channel-recipient-api-DL_KzwGE.js} +1 -1
  18. package/dist/gateway/static/root/assets/{channels-settings-C3d5JBJX.js → channels-settings-DRTutLlN.js} +1 -1
  19. package/dist/gateway/static/root/assets/{connectors-page-yaUNvt5u.js → connectors-page-DneJVuge.js} +2 -2
  20. package/dist/gateway/static/root/assets/dreaming-settings-BEwWA1yf.js +1 -0
  21. package/dist/gateway/static/root/assets/{extension-debug-page-DYh402XV.js → extension-debug-page-Dl2kO0Sf.js} +1 -1
  22. package/dist/gateway/static/root/assets/{extension-page-Cr_TizrN.js → extension-page-DmbLPsx_.js} +1 -1
  23. package/dist/gateway/static/root/assets/{extension-settings-page-BU1KoKRj.js → extension-settings-page-BS2rx40e.js} +1 -1
  24. package/dist/gateway/static/root/assets/{fetch-Y7AEX4H3.js → fetch-B3ME5Eri.js} +1 -1
  25. package/dist/gateway/static/root/assets/{gateway-config-api-RbMmAOpX.js → gateway-config-api-DI9_BBTo.js} +1 -1
  26. package/dist/gateway/static/root/assets/{gateway-settings-C79wkXef.js → gateway-settings-DAFI_T0W.js} +1 -1
  27. package/dist/gateway/static/root/assets/{gateway-startup-retry-DiD_Tx4N.js → gateway-startup-retry-CSZQTz6K.js} +1 -1
  28. package/dist/gateway/static/root/assets/goal-detail-page-DLuz4jC9.js +1 -0
  29. package/dist/gateway/static/root/assets/{goals-config-api-DqxVi0p5.js → goals-config-api-Bhzqrp2w.js} +1 -1
  30. package/dist/gateway/static/root/assets/{goals-page-CS0R-Af2.js → goals-page-DTAfv9Ft.js} +2 -2
  31. package/dist/gateway/static/root/assets/{goals-settings-CSuzZ8Ae.js → goals-settings-CWN2iirQ.js} +1 -1
  32. package/dist/gateway/static/root/assets/{heartbeat-settings-DXPaYJm3.js → heartbeat-settings-CkkkHvOi.js} +1 -1
  33. package/dist/gateway/static/root/assets/index-CnjzMw5i.js +191 -0
  34. package/dist/gateway/static/root/assets/index-E1QinYKp.css +1 -0
  35. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-Dvg53qnd.js → keyboard-shortcuts-settings-kMp08SlX.js} +1 -1
  36. package/dist/gateway/static/root/assets/{locale-store-DjbfSsfA.js → locale-store-Ba72bFmP.js} +1 -1
  37. package/dist/gateway/static/root/assets/{logs-page-DLXPcksQ.js → logs-page-CDXDlS_W.js} +2 -2
  38. package/dist/gateway/static/root/assets/{markdown-split-CpHxbtWJ.js → markdown-split-Bc0w40vz.js} +1 -1
  39. package/dist/gateway/static/root/assets/{media-plugins-SFPQRSxq.js → media-plugins-DJ_HvgIy.js} +1 -1
  40. package/dist/gateway/static/root/assets/messages-CISb1HLv.js +3 -0
  41. package/dist/gateway/static/root/assets/models-hub-panel-BTwxMIgZ.js +2 -0
  42. package/dist/gateway/static/root/assets/note-detail-page-BBfOeB0m.js +2 -0
  43. package/dist/gateway/static/root/assets/{note-image-lightbox-BUYURRgn.js → note-image-lightbox-4zntqpZq.js} +1 -1
  44. package/dist/gateway/static/root/assets/{notes-page-BsIBSFyZ.js → notes-page-VocWOjoK.js} +1 -1
  45. package/dist/gateway/static/root/assets/{preview-open-alternatives-BHz9iWYA.js → preview-open-alternatives-BbA7sRd_.js} +1 -1
  46. package/dist/gateway/static/root/assets/remote-access-hub-CXwjuD_Q.js +1 -0
  47. package/dist/gateway/static/root/assets/{save-bar-controls-CefkOlRg.js → save-bar-controls-Dividh61.js} +1 -1
  48. package/dist/gateway/static/root/assets/{schedule-field-CmTRoOcE.js → schedule-field-pRheF2CO.js} +1 -1
  49. package/dist/gateway/static/root/assets/{schema-form-FMKv1vGu.js → schema-form-D6PiPxfr.js} +1 -1
  50. package/dist/gateway/static/root/assets/sessions-page-CpcVySQK.js +1 -0
  51. package/dist/gateway/static/root/assets/settings-advanced-gate-BVy_TawT.js +1 -0
  52. package/dist/gateway/static/root/assets/{settings-collapsible-section-BouO6JTi.js → settings-collapsible-section-BMCOfuE_.js} +1 -1
  53. package/dist/gateway/static/root/assets/settings-form-section-DBkGwpIN.js +1 -0
  54. package/dist/gateway/static/root/assets/settings-page-CZpNyCWn.js +1 -0
  55. package/dist/gateway/static/root/assets/{settings-page-layout-BJ4Gsef5.js → settings-page-layout-NxoW5Y57.js} +1 -1
  56. package/dist/gateway/static/root/assets/setup-status-panel-MVHLLu_a.js +1 -0
  57. package/dist/gateway/static/root/assets/{share-preview-page-BDy2btRN.js → share-preview-page-B0suFCfj.js} +1 -1
  58. package/dist/gateway/static/root/assets/{shares-settings-B18OBmH5.js → shares-settings-C6DBbQGo.js} +1 -1
  59. package/dist/gateway/static/root/assets/skill-reload-api-6hJmhwSn.js +1 -0
  60. package/dist/gateway/static/root/assets/{skills-page-Bm2ebkwl.js → skills-page-Im1MA0Iw.js} +1 -1
  61. package/dist/gateway/static/root/assets/{system-settings-panel-CRngrlnZ.js → system-settings-panel-CrmEnyX4.js} +1 -1
  62. package/dist/gateway/static/root/assets/{theme-store-CD2wtgZV.js → theme-store-Bt6vAkSB.js} +1 -1
  63. package/dist/gateway/static/root/assets/{typed-models-lib-BltBc0b-.js → typed-models-lib-BAsGn25g.js} +1 -1
  64. package/dist/gateway/static/root/assets/{use-channel-catalog-CjN-51e6.js → use-channel-catalog-C7vcAoGb.js} +1 -1
  65. package/dist/gateway/static/root/assets/{user-profile-settings-panel-DJ1dKwZy.js → user-profile-settings-panel-QAQWGelF.js} +1 -1
  66. package/dist/gateway/static/root/assets/{utils-B5M5-YvK.js → utils-Dl9efgnV.js} +1 -1
  67. package/dist/gateway/static/root/assets/{voice-api-key-field-CeEevm7z.js → voice-api-key-field-D-6XueTv.js} +1 -1
  68. package/dist/gateway/static/root/assets/{voice-player-store-B7ykUlHM.js → voice-player-store-CMC5NOJp.js} +1 -1
  69. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-C4PzUQjB.js → workflow-run-setup-panel-DVPllR4k.js} +1 -1
  70. package/dist/gateway/static/root/assets/{workflows-page-BL84_-Ky.js → workflows-page-B94WISTW.js} +2 -2
  71. package/dist/gateway/static/root/index.html +7 -7
  72. package/dist/package.js +1 -1
  73. package/dist/src/agent/context/workspace-templates/AGENTS.md +3 -2
  74. package/dist/src/agent/memory/builtin-memory-store.d.ts +1 -1
  75. package/dist/src/agent/memory/builtin-memory-store.js +1 -1
  76. package/dist/src/agent/memory/builtin-memory-store.js.map +1 -1
  77. package/dist/src/agent/memory/builtin-provider.d.ts +2 -2
  78. package/dist/src/agent/memory/builtin-provider.js +2 -2
  79. package/dist/src/agent/memory/builtin-provider.js.map +1 -1
  80. package/dist/src/agent/memory/dreaming/light-sweep.d.ts +0 -7
  81. package/dist/src/agent/memory/dreaming/light-sweep.js +16 -277
  82. package/dist/src/agent/memory/dreaming/light-sweep.js.map +1 -1
  83. package/dist/src/agent/memory/dreaming/rem-patterns.d.ts +1 -1
  84. package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
  85. package/dist/src/agent/memory/dreaming/rem-patterns.js.map +1 -1
  86. package/dist/src/agent/memory/dreaming/short-term-store.d.ts +3 -3
  87. package/dist/src/agent/memory/dreaming/short-term-store.js +5 -5
  88. package/dist/src/agent/memory/dreaming/short-term-store.js.map +1 -1
  89. package/dist/src/agent/memory/dreaming/utils.d.ts +2 -2
  90. package/dist/src/agent/memory/dreaming/utils.js +2 -2
  91. package/dist/src/agent/memory/dreaming/utils.js.map +1 -1
  92. package/dist/src/agent/memory/index.d.ts +0 -2
  93. package/dist/src/agent/memory/index.js +1 -2
  94. package/dist/src/agent/prompt/sections/memory-skills.js +11 -10
  95. package/dist/src/agent/prompt/sections/memory-skills.js.map +1 -1
  96. package/dist/src/agent/prompt/sections/tooling.js +2 -2
  97. package/dist/src/agent/prompt/sections/tooling.js.map +1 -1
  98. package/dist/src/agent/reply/startup-context.js +6 -105
  99. package/dist/src/agent/reply/startup-context.js.map +1 -1
  100. package/dist/src/agent/service.d.ts +0 -3
  101. package/dist/src/agent/service.js +0 -41
  102. package/dist/src/agent/service.js.map +1 -1
  103. package/dist/src/agent/tools/memory-tool.js +2 -2
  104. package/dist/src/agent/tools/memory-tool.js.map +1 -1
  105. package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
  106. package/dist/src/cli/commands/init.js +1 -1
  107. package/dist/src/cli/commands/init.js.map +1 -1
  108. package/dist/src/cli/templates.js +3 -2
  109. package/dist/src/cli/templates.js.map +1 -1
  110. package/dist/src/config/schema.d.ts +2 -2
  111. package/dist/src/config/schema.js +2 -2
  112. package/dist/src/config/schema.js.map +1 -1
  113. package/dist/src/gateway/hono/routes/config-patch/misc.js +4 -1
  114. package/dist/src/gateway/hono/routes/config-patch/misc.js.map +1 -1
  115. package/dist/src/infra/update-restart.js +1 -1
  116. package/dist/src/storage/sqlite/row-mappers.js +3 -1
  117. package/dist/src/storage/sqlite/row-mappers.js.map +1 -1
  118. package/dist/src/tui/backends/embedded-backend.js +1 -2
  119. package/dist/src/tui/backends/embedded-backend.js.map +1 -1
  120. package/package.json +1 -1
  121. package/dist/gateway/static/root/assets/agents-B0hkpLhP.js +0 -2
  122. package/dist/gateway/static/root/assets/dreaming-settings-DNrdg1Ve.js +0 -1
  123. package/dist/gateway/static/root/assets/goal-detail-page-9paXuHdo.js +0 -1
  124. package/dist/gateway/static/root/assets/index-BoKafJIZ.js +0 -191
  125. package/dist/gateway/static/root/assets/index-CArhCcYn.css +0 -1
  126. package/dist/gateway/static/root/assets/messages-CrDHEbss.js +0 -3
  127. package/dist/gateway/static/root/assets/models-hub-panel-BDF2iyRk.js +0 -2
  128. package/dist/gateway/static/root/assets/note-detail-page-CSb_hwig.js +0 -2
  129. package/dist/gateway/static/root/assets/remote-access-hub-CwzSovcS.js +0 -1
  130. package/dist/gateway/static/root/assets/sessions-page-PHmX-NmA.js +0 -1
  131. package/dist/gateway/static/root/assets/settings-advanced-gate-BRAeKJN4.js +0 -1
  132. package/dist/gateway/static/root/assets/settings-form-section-D-4lBl6X.js +0 -1
  133. package/dist/gateway/static/root/assets/settings-page-KKrbFjy8.js +0 -1
  134. package/dist/gateway/static/root/assets/setup-status-panel-CrUjHPQo.js +0 -1
  135. package/dist/gateway/static/root/assets/skill-reload-api-C28-2uKQ.js +0 -1
  136. package/dist/src/agent/memory/memory-flush.d.ts +0 -27
  137. package/dist/src/agent/memory/memory-flush.js +0 -124
  138. package/dist/src/agent/memory/memory-flush.js.map +0 -1
@@ -1 +0,0 @@
1
- import{n as e,t}from"./vendor-react-BOUWij0V.js";import{t as n}from"./cn-BQ_8x0bT.js";import{so as r,ta as i}from"./index-BoKafJIZ.js";var a=e();function o(){return`rounded-2xl bg-surface-base px-4 py-5 sm:px-5`}var s=t();function c(e){let t=(0,a.c)(6),{children:r,className:i,id:c}=e,l;t[0]===i?l=t[1]:(l=n(o(),i),t[0]=i,t[1]=l);let u;return t[2]!==r||t[3]!==c||t[4]!==l?(u=(0,s.jsx)(`section`,{id:c,className:l,children:r}),t[2]=r,t[3]=c,t[4]=l,t[5]=u):u=t[5],u}var l=`flex size-9 shrink-0 items-center justify-center rounded-lg bg-surface-hover/90 text-fg-muted transition-colors dark:bg-surface-hover/70`;function u(e){let t=(0,a.c)(26),{icon:o,title:c,subtitle:u,trailing:d,className:f,iconInteractive:p,iconLeading:m}=e,h;t[0]===o?h=t[1]:(h=(0,s.jsx)(o,{className:`size-4`,strokeWidth:1.75,"aria-hidden":!0}),t[0]=o,t[1]=h);let g=m??h,_;t[2]===m?_=t[3]:(_=m?n(`flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-surface-panel p-0 ring-1 ring-inset ring-edge-subtle transition-[box-shadow] hover:ring-accent/40 dark:ring-edge-subtle`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-base`,i.press):n(l,`hover:text-fg`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-base`,i.press),t[2]=m,t[3]=_);let v=_,y=!!(p&&m),b;t[4]===f?b=t[5]:(b=n(`mb-5 flex items-start gap-3`,f),t[4]=f,t[5]=b);let x;t[6]!==p||t[7]!==m||t[8]!==g||t[9]!==v||t[10]!==y?(x=p?y?(0,s.jsxs)(`span`,{className:`relative shrink-0`,children:[(0,s.jsx)(`button`,{type:`button`,id:p.id,onClick:p.onClick,"aria-label":p.ariaLabel,className:v,children:g}),(0,s.jsx)(`span`,{className:`pointer-events-none absolute -bottom-0.5 -right-0.5 flex size-4 items-center justify-center rounded-md border border-edge bg-surface-panel text-fg-muted shadow-sm dark:border-edge dark:bg-surface-base`,"aria-hidden":!0,children:(0,s.jsx)(r,{className:`size-2.5`,strokeWidth:2.25})})]}):(0,s.jsx)(`button`,{type:`button`,id:p.id,onClick:p.onClick,"aria-label":p.ariaLabel,className:v,children:g}):(0,s.jsx)(`div`,{className:n(m?`flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-surface-panel ring-1 ring-inset ring-edge-subtle dark:ring-edge-subtle`:l),"aria-hidden":!m,children:g}),t[6]=p,t[7]=m,t[8]=g,t[9]=v,t[10]=y,t[11]=x):x=t[11];let S;t[12]===c?S=t[13]:(S=(0,s.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:c}),t[12]=c,t[13]=S);let C;t[14]===u?C=t[15]:(C=u?(0,s.jsx)(`p`,{className:`mt-0.5 text-xs text-fg-muted`,children:u}):null,t[14]=u,t[15]=C);let w;t[16]!==S||t[17]!==C?(w=(0,s.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[S,C]}),t[16]=S,t[17]=C,t[18]=w):w=t[18];let T;t[19]===d?T=t[20]:(T=d?(0,s.jsx)(`div`,{className:`shrink-0`,children:d}):null,t[19]=d,t[20]=T);let E;return t[21]!==b||t[22]!==x||t[23]!==w||t[24]!==T?(E=(0,s.jsxs)(`div`,{className:b,children:[x,w,T]}),t[21]=b,t[22]=x,t[23]=w,t[24]=T,t[25]=E):E=t[25],E}export{u as n,o as r,c as t};
@@ -1 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{t as i}from"./messages-CrDHEbss.js";import{t as a}from"./locale-store-DjbfSsfA.js";import{Ci as o,Ei as s,Si as c,Ti as l,Xs as u,_i as d,bi as f,gi as p,hi as m,mi as h,pi as g,qs as _,vi as v,wi as y,xi as b,yi as x}from"./index-BoKafJIZ.js";var S=n(),C=e(t(),1),w=r(),T=[`overview`,`appearance`,`keyboard-shortcuts`,`user-profile`,`system`,`app-management`,`credentials`,`capability-presets`,`gateway`,`heartbeat`,`tunnel`,`remote-access`,`shares`,`goals`,`dreams`],E=(0,C.lazy)(()=>o().then(e=>({default:e.SetupStatusPanel}))),D=(0,C.lazy)(()=>h().then(e=>({default:e.AppearanceSettingsPanel}))),O=(0,C.lazy)(()=>f().then(e=>({default:e.KeyboardShortcutsSettingsPanel}))),k=(0,C.lazy)(()=>s().then(e=>({default:e.UserProfileSettingsPanel}))),A=(0,C.lazy)(()=>l().then(e=>({default:e.SystemSettingsPanel}))),j=(0,C.lazy)(()=>g().then(e=>({default:e.AppManagementSettingsPanel}))),M=(0,C.lazy)(()=>b().then(e=>({default:e.ModelsHubPanel}))),N=(0,C.lazy)(()=>d().then(e=>({default:e.GatewaySettingsPanel}))),P=(0,C.lazy)(()=>x().then(e=>({default:e.HeartbeatSettingsPanel}))),F=(0,C.lazy)(()=>c().then(e=>({default:e.RemoteAccessHub}))),I=(0,C.lazy)(()=>y().then(e=>({default:e.SharesSettingsPanel}))),L=(0,C.lazy)(()=>p().then(e=>({default:e.DreamingSettingsPanel}))),R=(0,C.lazy)(()=>v().then(e=>({default:e.GoalsSettingsPanel}))),z=(0,C.lazy)(()=>m().then(e=>({default:e.CapabilityPresetsSettingsPanel})));function B(){let e=(0,S.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,w.jsxs)(`div`,{className:`mx-auto w-full max-w-app-main flex-1 px-4 py-8`,"aria-busy":!0,children:[(0,w.jsx)(`div`,{className:`h-8 w-48 max-w-full animate-pulse rounded-md bg-surface-hover`}),(0,w.jsx)(`div`,{className:`mt-6 h-36 animate-pulse rounded-xl bg-surface-hover`}),(0,w.jsx)(`div`,{className:`mt-4 h-24 animate-pulse rounded-xl bg-surface-hover`})]}),e[0]=t):t=e[0],t}function V(e){return(0,w.jsx)(C.Suspense,{fallback:(0,w.jsx)(B,{}),children:(0,w.jsx)(e,{})})}function H(){let e=(0,S.c)(31),{section:t}=u(),n=a(U),r,o,s,c,l;if(e[0]!==n||e[1]!==t){l=Symbol.for(`react.early_return_sentinel`);bb0:{let a=i(n);if(t===`agent`||t===`agents`){let t;e[7]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,w.jsx)(_,{to:`/agents`,replace:!0}),e[7]=t):t=e[7],l=t;break bb0}if(!t||!T.includes(t)){let t;e[8]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,w.jsx)(_,{to:`/settings/overview`,replace:!0}),e[8]=t):t=e[8],l=t;break bb0}if(t===`tunnel`){let t;e[9]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,w.jsx)(_,{to:`/settings/remote-access`,replace:!0}),e[9]=t):t=e[9],l=t;break bb0}let u=t;if(u===`overview`){let t;e[10]===Symbol.for(`react.memo_cache_sentinel`)?(t=V(E),e[10]=t):t=e[10],l=t;break bb0}let d=a.settingsSections[u];if(u===`appearance`){let t;e[11]===Symbol.for(`react.memo_cache_sentinel`)?(t=V(D),e[11]=t):t=e[11],l=t;break bb0}if(u===`keyboard-shortcuts`){let t;e[12]===Symbol.for(`react.memo_cache_sentinel`)?(t=V(O),e[12]=t):t=e[12],l=t;break bb0}if(u===`user-profile`){let t;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(t=V(k),e[13]=t):t=e[13],l=t;break bb0}if(u===`system`){let t;e[14]===Symbol.for(`react.memo_cache_sentinel`)?(t=V(A),e[14]=t):t=e[14],l=t;break bb0}if(u===`app-management`){let t;e[15]===Symbol.for(`react.memo_cache_sentinel`)?(t=V(j),e[15]=t):t=e[15],l=t;break bb0}if(u===`credentials`){let t;e[16]===Symbol.for(`react.memo_cache_sentinel`)?(t=V(M),e[16]=t):t=e[16],l=t;break bb0}if(u===`capability-presets`){let t;e[17]===Symbol.for(`react.memo_cache_sentinel`)?(t=V(z),e[17]=t):t=e[17],l=t;break bb0}if(u===`gateway`){let t;e[18]===Symbol.for(`react.memo_cache_sentinel`)?(t=V(N),e[18]=t):t=e[18],l=t;break bb0}if(u===`heartbeat`){let t;e[19]===Symbol.for(`react.memo_cache_sentinel`)?(t=V(P),e[19]=t):t=e[19],l=t;break bb0}if(u===`tunnel`||u===`remote-access`){let t;e[20]===Symbol.for(`react.memo_cache_sentinel`)?(t=V(F),e[20]=t):t=e[20],l=t;break bb0}if(u===`shares`){let t;e[21]===Symbol.for(`react.memo_cache_sentinel`)?(t=V(I),e[21]=t):t=e[21],l=t;break bb0}if(u===`dreams`){let t;e[22]===Symbol.for(`react.memo_cache_sentinel`)?(t=V(L),e[22]=t):t=e[22],l=t;break bb0}if(u===`goals`){let t;e[23]===Symbol.for(`react.memo_cache_sentinel`)?(t=V(R),e[23]=t):t=e[23],l=t;break bb0}s=`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,c=(0,w.jsx)(`h1`,{className:`text-lg font-semibold text-fg`,children:d}),r=`text-sm text-fg-muted`,o=a.settingsPage.comingSoon.replace(`{{title}}`,d)}e[0]=n,e[1]=t,e[2]=r,e[3]=o,e[4]=s,e[5]=c,e[6]=l}else r=e[2],o=e[3],s=e[4],c=e[5],l=e[6];if(l!==Symbol.for(`react.early_return_sentinel`))return l;let d;e[24]!==r||e[25]!==o?(d=(0,w.jsx)(`p`,{className:r,children:o}),e[24]=r,e[25]=o,e[26]=d):d=e[26];let f;return e[27]!==s||e[28]!==c||e[29]!==d?(f=(0,w.jsxs)(`div`,{className:s,children:[c,d]}),e[27]=s,e[28]=c,e[29]=d,e[30]=f):f=e[30],f}function U(e){return e.language}export{H as SettingsPage};
@@ -1 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{t as i}from"./cn-BQ_8x0bT.js";import{t as a}from"./messages-CrDHEbss.js";import{t as o}from"./locale-store-DjbfSsfA.js";import{c as s,i as c,n as l}from"./fetch-Y7AEX4H3.js";import{i as u}from"./vendor-swr-BIWyz7Rc.js";import{$i as d,Ds as f,Gs as p,Io as m,Ks as h,Lt as g,Oa as _,Rt as v,So as y,Ya as b,_s as x,kn as S,kt as C,ni as w,ta as T,vs as E,ws as D,ya as O,zt as k}from"./index-BoKafJIZ.js";import{n as A,t as j}from"./settings-form-section-D-4lBl6X.js";import{n as M,t as N}from"./settings-page-layout-BJ4Gsef5.js";var P=e(t(),1),F=n();function I(e){if(!e||typeof e!=`object`)return 0;let t=e.providers;return!t||typeof t!=`object`||Array.isArray(t)?0:Object.values(t).filter(e=>typeof e==`string`&&d(e)).length}function L(e){if(!e||typeof e!=`object`)return``;let t=e.agents;if(!t||typeof t!=`object`||Array.isArray(t))return``;let n=t,r=typeof n.defaultPreset==`string`&&n.defaultPreset.trim()?n.defaultPreset.trim():`default`,i=n.capabilityPresets,a=i&&typeof i==`object`&&!Array.isArray(i)?i[r]:void 0,o=a&&typeof a==`object`&&!Array.isArray(a)?a.models:void 0;if(!o||typeof o!=`object`||Array.isArray(o))return``;let s=o,c=s.roles;if(!c||typeof c!=`object`||Array.isArray(c))return``;let l=c,u=typeof s.defaultRole==`string`&&s.defaultRole.trim()?s.defaultRole.trim():Object.keys(l)[0],d=u?l[u]:void 0;if(!d||typeof d!=`object`||Array.isArray(d))return``;let f=d.model;return typeof f==`string`?f.trim():``}function R(e){if(!e||typeof e!=`object`)return!1;let t=e.channels;return!t||typeof t!=`object`||Array.isArray(t)?!1:Object.values(t).some(e=>{if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=e;if(`configured`in t||`config`in t||`schema`in t||`uiHints`in t){if(t.configured===!0)return!0;let e=t.config;if(!e||typeof e!=`object`||Array.isArray(e))return!1;let n=e;return n.enabled===!0||Object.keys(n).length>0}return t.enabled===!0||Object.keys(t).length>0})}function z(e){if(!e||typeof e!=`object`)return{enabled:!1,backend:`extension`};let t=e.browser;if(!t||typeof t!=`object`||Array.isArray(t))return{enabled:!1,backend:`extension`};let n=t;return{enabled:n.enabled===!0,backend:typeof n.backend==`string`&&n.backend.trim()?n.backend.trim():`extension`}}function B(e){return e?`pass`:`fail`}function V(e){if(e===`provider-auth`)return`/settings/credentials`;if(e===`config-health`)return`/settings/gateway`;if(e===`state-integrity`||e===`workspace-status`)return`/agents`;if(e===`database-schema`||e===`session-integrity`)return`/settings/sessions`;if(e===`channel-config`||e===`channel-pairing-pending`||e.startsWith(`channel:`))return`/channels`;if(e===`security-audit`||e===`gateway-service`||e===`gateway-health`)return`/settings/gateway`;if(e===`version-check`)return`/settings/app-management`}function H(e){return{fail:4,warn:3,skip:2,pass:1}[e]}function U(e){return e.filter(e=>e.status===`fail`||e.status===`warn`).map(e=>({id:e.id,label:e.label,status:e.status,message:e.message,hints:e.hints,path:V(e.id),source:`doctor`})).toSorted((e,t)=>H(t.status)-H(e.status)||e.label.localeCompare(t.label))}function W(e){let t=new Map(e.doctorChecks.map(e=>[e.id,e])),n=[];for(let e of[`security-audit`,`channel-config`,`channel-pairing-pending`,`gateway-health`]){let r=t.get(e);r&&n.push({id:r.id,label:r.label,status:r.status,message:r.message,path:V(r.id)})}if(e.logsHealth){let t=e.logsHealth.stats?.errorsLast24h??0;n.push({id:`logs-health`,label:`Logs`,status:e.logsHealth.shuttingDown||t>0?`warn`:`pass`,message:e.logsHealth.shuttingDown?`Logger is shutting down.`:t>0?`${t} error(s) in the last 24 hours.`:`Log system is healthy.`,path:`/settings/logs`})}for(let t of e.browserDiagnostics??[])n.push(t);return n}function ee(e){let t=I(e.config),n=e.providerMeta?.configured??t,r=e.providerMeta?.total??0,i=n>0||t>0,a=L(e.config),o=a.length>0,s=e.hasToken&&e.sseConnected,c=R(e.config),l=e.skillCount>0,u=e.doctorChecks??[],d=U(u),f=[{id:`gateway`,done:s,detail:s?e.labels.gatewayOnline:e.labels.gatewayOffline},{id:`provider`,done:i,detail:i?e.providerMeta&&e.providerMeta.total>0?e.labels.providersMetaReady(n,r):e.labels.providersConfigured(t):e.labels.providersMissing},{id:`defaultModel`,done:o,detail:o?e.labels.modelConfigured(a):e.labels.modelMissing},{id:`channel`,done:c,optional:!0,detail:c?e.labels.channelConfigured:e.labels.channelMissing},{id:`skill`,done:l,optional:!0,detail:l?e.labels.skillsConfigured(e.skillCount):e.labels.skillsMissing}],p=f.filter(e=>!e.optional).every(e=>e.done),m=f.every(e=>e.done),h=[{id:`gateway`,status:B(s),title:`Gateway`,detail:s?e.labels.gatewayOnline:e.labels.gatewayOffline,path:`/settings/gateway`},{id:`provider`,status:B(i),title:`Model provider`,detail:i?e.providerMeta&&e.providerMeta.total>0?e.labels.providersMetaReady(n,r):e.labels.providersConfigured(t):e.labels.providersMissing,path:`/settings/credentials`},{id:`defaultModel`,status:B(o),title:`Default model`,detail:o?e.labels.modelConfigured(a):e.labels.modelMissing,path:`/settings/credentials?tab=services`},{id:`ready`,status:p?`pass`:`fail`,title:`Chat readiness`,detail:p?e.labels.readyToChat:e.labels.modelMissing,path:`/chat`}],g=d.some(e=>e.status===`fail`),_=d.some(e=>e.status===`warn`),v=g?`blocked`:_?`attention`:p?`ready`:`setup`,y=W({doctorChecks:u,logsHealth:e.logsHealth,browserDiagnostics:e.browserDiagnostics});return{gatewayConnected:s,providerConfigured:i,providerCount:t,providerMetaConfigured:n,providerMetaTotal:r,defaultModel:a,defaultModelConfigured:o,channelConfigured:c,skillInstalled:l,skillCount:e.skillCount,checklist:f,readiness:h,issues:d,healthTier:v,diagnosticSignals:y,requiredComplete:p,allComplete:m}}function te(e){return z(e)}function G(e){return!e.id||!e.label||!e.status||!e.message||![`pass`,`warn`,`fail`,`skip`].includes(e.status)?null:{id:e.id,label:e.label,status:e.status,message:e.message,hints:Array.isArray(e.hints)?e.hints.filter(e=>typeof e==`string`):[],fixed:e.fixed===!0,findings:Array.isArray(e.findings)?e.findings:void 0}}function ne(){return c(`/api/doctor`)}async function re(){return((await l(ne())).checks??[]).map(G).filter(e=>e!==null)}function ie(){return c(`/api/logs/health`)}async function ae(){return l(ie())}function K(e){return e?`pass`:`warn`}function q(e){return`/settings/agent-browser?tab=${encodeURIComponent(e)}`}function oe(e){return e?.enabled?[`setup-browser-diagnostics`,e]:null}async function se(e){if(!e.enabled)return[];if(e.backend===`local`){let e=await l(c(`/api/browser/playwright/doctor`)),t=e.payload?.installed===!0;return[{id:`browser-playwright`,label:`Browser: Playwright`,status:K(t),message:t?`Local Chromium is installed.`:e.payload?.reason??`Local Chromium is not installed.`,path:q(`local`)}]}if(e.backend===`cloakbrowser`){let e=await l(c(`/api/browser/cloakbrowser/doctor`)),t=e.payload?.installed===!0;return[{id:`browser-cloakbrowser`,label:`Browser: CloakBrowser`,status:K(t),message:t?`CloakBrowser ${e.payload?.version??``}`.trim():`CloakBrowser is not installed.`,path:q(`cloakbrowser`)}]}if(e.backend===`extension`){let e=await l(c(`/api/browser/extension-status?probe=true`)),t=e.artifacts?.installed===!0,n=e.connected===!0,r=e.artifacts?.needsRefresh===!0||e.artifacts?.needsChromeReload===!0;return[{id:`browser-extension`,label:`Browser: Chrome extension`,status:n?`pass`:`warn`,message:n?`Chrome extension bridge is connected.`:t?r?`Chrome extension needs refresh.`:`Chrome extension is installed but not connected.`:`Chrome extension is not installed.`,path:q(`extension`)}]}return[{id:`browser-playwright`,label:`Browser`,status:`skip`,message:`Browser backend "${e.backend}" is not checked on this overview.`,path:q(e.backend||`overview`)}]}function J(){let e=(0,F.c)(57),t=s(pe),n=o(fe),r;e[0]===n?r=e[1]:(r=a(n),e[0]=n,e[1]=r);let i=r,c=i.setupStatus.labels,l=k(de),{data:d,error:f,isLoading:p,mutate:m}=w(!!t),h;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(h={revalidateOnFocus:!1},e[2]=h):h=e[2];let{data:_,error:y,isLoading:b,mutate:x}=u(t?`setup-checklist-skills`:null,ue,h),S;e[3]===Symbol.for(`react.memo_cache_sentinel`)?(S={revalidateOnFocus:!1},e[3]=S):S=e[3];let{data:T,error:E,isLoading:D,mutate:O}=u(t?`setup-checklist-provider-meta`:null,C,S),A;e[4]===t?A=e[5]:(A=t?ne():null,e[4]=t,e[5]=A);let j;e[6]===Symbol.for(`react.memo_cache_sentinel`)?(j={revalidateOnFocus:!1},e[6]=j):j=e[6];let{data:M,error:N,isLoading:P,mutate:I}=u(A,re,j),L;e[7]===t?L=e[8]:(L=t?ie():null,e[7]=t,e[8]=L);let R;e[9]===Symbol.for(`react.memo_cache_sentinel`)?(R={revalidateOnFocus:!1},e[9]=R):R=e[9];let{data:z,isLoading:B,mutate:V}=u(L,ae,R);d?.payload?.config;let H=d?.payload?.config,U;e[10]===H?U=e[11]:(U=te(H),e[10]=H,e[11]=U);let W=t?U:null,G;e[12]===W?G=e[13]:(G=oe(W),e[12]=W,e[13]=G);let K;e[14]===Symbol.for(`react.memo_cache_sentinel`)?(K={revalidateOnFocus:!1},e[14]=K):K=e[14];let{data:q,isLoading:se,mutate:J}=u(G,le,K),Y;e[15]===Symbol.for(`react.memo_cache_sentinel`)?(Y={revalidateOnFocus:!1},e[15]=Y):Y=e[15],u(t?g:null,v,Y);let X=!t||!p&&!b&&!D&&!P&&!B&&!se,Z=!!(f||y||E||N),me;bb0:{if(!t||!X){me=null;break bb0}let n=_?.catalog?.length??0,r;if(e[16]!==q||e[17]!==d?.payload?.config||e[18]!==M||e[19]!==c.channelConfigured||e[20]!==c.channelMissing||e[21]!==c.gatewayOffline||e[22]!==c.gatewayOnline||e[23]!==c.modelConfigured||e[24]!==c.modelMissing||e[25]!==c.providersConfigured||e[26]!==c.providersMetaReady||e[27]!==c.providersMissing||e[28]!==c.skillsConfigured||e[29]!==c.skillsMissing||e[30]!==z||e[31]!==i.setupStatus.requiredCompleteMessage||e[32]!==T||e[33]!==n||e[34]!==l||e[35]!==t){let a=T?.filter(ce).length??0,o=T?.length??0,s;e[37]===c.providersConfigured?s=e[38]:(s=e=>c.providersConfigured.replace(`{{count}}`,String(e)),e[37]=c.providersConfigured,e[38]=s);let u;e[39]===c.providersMetaReady?u=e[40]:(u=(e,t)=>c.providersMetaReady.replace(`{{configured}}`,String(e)).replace(`{{total}}`,String(t)),e[39]=c.providersMetaReady,e[40]=u);let f;e[41]===c.modelConfigured?f=e[42]:(f=e=>c.modelConfigured.replace(`{{model}}`,e),e[41]=c.modelConfigured,e[42]=f);let p;e[43]===c.skillsConfigured?p=e[44]:(p=e=>c.skillsConfigured.replace(`{{count}}`,String(e)),e[43]=c.skillsConfigured,e[44]=p),r=ee({hasToken:!!t,sseConnected:l,config:d?.payload?.config,skillCount:n,providerMeta:o>0?{configured:a,total:o}:null,doctorChecks:M,logsHealth:z,browserDiagnostics:q,labels:{gatewayOnline:c.gatewayOnline,gatewayOffline:c.gatewayOffline,providersConfigured:s,providersMetaReady:u,providersMissing:c.providersMissing,modelConfigured:f,modelMissing:c.modelMissing,channelConfigured:c.channelConfigured,channelMissing:c.channelMissing,skillsConfigured:p,skillsMissing:c.skillsMissing,readyToChat:i.setupStatus.requiredCompleteMessage}}),e[16]=q,e[17]=d?.payload?.config,e[18]=M,e[19]=c.channelConfigured,e[20]=c.channelMissing,e[21]=c.gatewayOffline,e[22]=c.gatewayOnline,e[23]=c.modelConfigured,e[24]=c.modelMissing,e[25]=c.providersConfigured,e[26]=c.providersMetaReady,e[27]=c.providersMissing,e[28]=c.skillsConfigured,e[29]=c.skillsMissing,e[30]=z,e[31]=i.setupStatus.requiredCompleteMessage,e[32]=T,e[33]=n,e[34]=l,e[35]=t,e[36]=r}else r=e[36];me=r}let he=me,Q;e[45]!==J||e[46]!==m||e[47]!==I||e[48]!==V||e[49]!==O||e[50]!==x?(Q=async()=>{await Promise.all([m(),x(),O(),I(),V(),J()])},e[45]=J,e[46]=m,e[47]=I,e[48]=V,e[49]=O,e[50]=x,e[51]=Q):Q=e[51];let ge=Q,$;return e[52]!==Z||e[53]!==X||e[54]!==ge||e[55]!==he?($={ready:X,error:Z,snapshot:he,refresh:ge},e[52]=Z,e[53]=X,e[54]=ge,e[55]=he,e[56]=$):$=e[56],$}function ce(e){return e.configured}function le(e){let[,t]=e;return se(t)}function ue(){return S()}function de(e){return e.connectionState===`connected`}function fe(e){return e.language}function pe(e){return e.token}var Y=r();function X(e){return e===`pass`?`border-success/30 bg-success-soft text-success`:e===`warn`?`border-amber-500/30 bg-amber-500/10 text-amber-700 dark:text-amber-300`:e===`fail`?`border-red-500/30 bg-red-500/10 text-red-700 dark:text-red-300`:`border-edge bg-surface-hover text-fg-muted`}function Z(e){return e===`pass`?D:e===`warn`?O:e===`fail`?E:m}function me(e,t){return e===`blocked`?{icon:E,className:`border-red-500/30 bg-red-500/10 text-red-950 dark:text-red-100`,title:t.health.blockedTitle,body:t.health.blockedBody,action:t.health.viewIssues,targetId:`next-steps`}:e===`attention`?{icon:O,className:`border-amber-500/30 bg-amber-500/10 text-amber-950 dark:text-amber-100`,title:t.health.attentionTitle,body:t.health.attentionBody,action:t.health.viewIssues,targetId:`next-steps`}:e===`setup`?{icon:x,className:`border-edge bg-surface-panel text-fg`,title:t.health.setupTitle,body:t.health.setupBody,action:t.health.continueSetup,targetId:`next-steps`}:{icon:D,className:`border-success/30 bg-success-soft text-success`,title:t.health.readyTitle,body:t.health.readyBody,action:t.health.startChat,actionPath:`/chat`}}function he(e){let t=(0,F.c)(48),{tier:n,issueCount:r,onRunDoctor:s,ready:c,doctorRunning:l,doctorRunState:u}=e,d=o(Q),p,m,g,_,v,x,S,C,w,E,D;if(t[0]!==r||t[1]!==d||t[2]!==n){m=a(d).setupStatus;let e=me(n,m),o=e.icon,s=`targetId`in e&&typeof e.targetId==`string`?e.targetId:null,c=`actionPath`in e&&typeof e.actionPath==`string`?e.actionPath:`/chat`;p=s?(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>document.getElementById(s)?.scrollIntoView({block:`start`,behavior:`smooth`}),className:`inline-flex items-center gap-1 rounded-lg bg-surface-base px-3 py-2 text-sm font-medium text-fg shadow-sm hover:bg-surface-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,children:[e.action,(0,Y.jsx)(f,{className:`size-4`,"aria-hidden":!0})]}):(0,Y.jsxs)(h,{to:c,className:`inline-flex items-center gap-1 rounded-lg bg-surface-base px-3 py-2 text-sm font-medium text-fg shadow-sm hover:bg-surface-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,children:[e.action,(0,Y.jsx)(f,{className:`size-4`,"aria-hidden":!0})]}),D=i(`rounded-xl border px-4 py-4`,e.className),E=`flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between`,C=`flex min-w-0 gap-3`,w=(0,Y.jsx)(o,{className:`mt-0.5 size-5 shrink-0`,"aria-hidden":!0}),v=`min-w-0`,x=(0,Y.jsx)(`h2`,{className:`text-base font-semibold`,children:e.title}),S=(0,Y.jsx)(`p`,{className:`mt-1 text-sm opacity-85`,children:e.body}),g=`mt-2 text-xs opacity-75`,_=m.health.issueCount.replace(`{{count}}`,String(r)),t[0]=r,t[1]=d,t[2]=n,t[3]=p,t[4]=m,t[5]=g,t[6]=_,t[7]=v,t[8]=x,t[9]=S,t[10]=C,t[11]=w,t[12]=E,t[13]=D}else p=t[3],m=t[4],g=t[5],_=t[6],v=t[7],x=t[8],S=t[9],C=t[10],w=t[11],E=t[12],D=t[13];let O;t[14]!==g||t[15]!==_?(O=(0,Y.jsx)(`p`,{className:g,children:_}),t[14]=g,t[15]=_,t[16]=O):O=t[16];let k;t[17]!==O||t[18]!==v||t[19]!==x||t[20]!==S?(k=(0,Y.jsxs)(`div`,{className:v,children:[x,S,O]}),t[17]=O,t[18]=v,t[19]=x,t[20]=S,t[21]=k):k=t[21];let A;t[22]!==k||t[23]!==C||t[24]!==w?(A=(0,Y.jsxs)(`div`,{className:C,children:[w,k]}),t[22]=k,t[23]=C,t[24]=w,t[25]=A):A=t[25];let j;t[26]===Symbol.for(`react.memo_cache_sentinel`)?(j=i(`inline-flex items-center gap-2 rounded-lg border border-edge bg-surface-base px-3 py-2 text-sm font-medium text-fg`,`hover:bg-surface-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,T.press),t[26]=j):j=t[26];let M=!c||l,N;t[27]===l?N=t[28]:(N=l?(0,Y.jsx)(y,{className:`size-4 animate-spin`,"aria-hidden":!0}):(0,Y.jsx)(b,{className:`size-4`,"aria-hidden":!0}),t[27]=l,t[28]=N);let P=l?m.health.runDoctorRunning:m.health.runDoctor,I;t[29]!==l||t[30]!==s||t[31]!==M||t[32]!==N||t[33]!==P?(I=(0,Y.jsxs)(`button`,{type:`button`,className:j,onClick:s,disabled:M,"aria-busy":l,children:[N,P]}),t[29]=l,t[30]=s,t[31]=M,t[32]=N,t[33]=P,t[34]=I):I=t[34];let L;t[35]!==p||t[36]!==I?(L=(0,Y.jsxs)(`div`,{className:`flex shrink-0 flex-wrap gap-2`,children:[p,I]}),t[35]=p,t[36]=I,t[37]=L):L=t[37];let R;t[38]!==A||t[39]!==L||t[40]!==E?(R=(0,Y.jsxs)(`div`,{className:E,children:[A,L]}),t[38]=A,t[39]=L,t[40]=E,t[41]=R):R=t[41];let z=l?m.health.doctorRunningMessage:u===`success`?m.health.doctorCompleteMessage:u===`error`?m.health.doctorFailedMessage:m.health.doctorIdleMessage,B;t[42]===z?B=t[43]:(B=(0,Y.jsx)(`p`,{className:`mt-3 text-xs opacity-75`,role:`status`,"aria-live":`polite`,children:z}),t[42]=z,t[43]=B);let V;return t[44]!==R||t[45]!==B||t[46]!==D?(V=(0,Y.jsxs)(`section`,{className:D,children:[R,B]}),t[44]=R,t[45]=B,t[46]=D,t[47]=V):V=t[47],V}function Q(e){return e.language}function ge(e){let t=(0,F.c)(34),{issue:n,fixLabel:r}=e,a;t[0]===n.status?a=t[1]:(a=Z(n.status),t[0]=n.status,t[1]=a);let o=a,s;t[2]===o?s=t[3]:(s=(0,Y.jsx)(o,{className:`mt-0.5 size-4 shrink-0`,"aria-hidden":!0}),t[2]=o,t[3]=s);let c;t[4]===n.label?c=t[5]:(c=(0,Y.jsx)(`span`,{className:`text-sm font-semibold text-fg`,children:n.label}),t[4]=n.label,t[5]=c);let l;t[6]===n.status?l=t[7]:(l=i(`rounded-full border px-2 py-0.5 text-[11px] font-medium uppercase`,X(n.status)),t[6]=n.status,t[7]=l);let u;t[8]!==n.status||t[9]!==l?(u=(0,Y.jsx)(`span`,{className:l,children:n.status}),t[8]=n.status,t[9]=l,t[10]=u):u=t[10];let d;t[11]!==c||t[12]!==u?(d=(0,Y.jsxs)(`span`,{className:`flex flex-wrap items-center gap-2`,children:[c,u]}),t[11]=c,t[12]=u,t[13]=d):d=t[13];let p;t[14]===n.message?p=t[15]:(p=(0,Y.jsx)(`span`,{className:`mt-1 block text-sm text-fg-muted`,children:n.message}),t[14]=n.message,t[15]=p);let m;t[16]===n.hints[0]?m=t[17]:(m=n.hints[0]?(0,Y.jsx)(`span`,{className:`mt-1 block truncate text-xs text-fg-subtle`,children:n.hints[0]}):null,t[16]=n.hints[0],t[17]=m);let g;t[18]!==d||t[19]!==p||t[20]!==m?(g=(0,Y.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[d,p,m]}),t[18]=d,t[19]=p,t[20]=m,t[21]=g):g=t[21];let _;t[22]!==r||t[23]!==n.path?(_=n.path?(0,Y.jsxs)(`span`,{className:`inline-flex shrink-0 items-center gap-1 text-xs font-medium text-accent-fg`,children:[r,(0,Y.jsx)(f,{className:`size-4`,"aria-hidden":!0})]}):null,t[22]=r,t[23]=n.path,t[24]=_):_=t[24];let v;t[25]!==_||t[26]!==s||t[27]!==g?(v=(0,Y.jsxs)(Y.Fragment,{children:[s,g,_]}),t[25]=_,t[26]=s,t[27]=g,t[28]=v):v=t[28];let y=v;if(n.path){let e;return t[29]!==y||t[30]!==n.path?(e=(0,Y.jsx)(h,{to:n.path,className:`flex items-start gap-3 rounded-lg border border-edge-subtle bg-surface-panel px-3 py-3 hover:bg-surface-hover/60 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,children:y}),t[29]=y,t[30]=n.path,t[31]=e):e=t[31],e}let b;return t[32]===y?b=t[33]:(b=(0,Y.jsx)(`div`,{className:`flex items-start gap-3 rounded-lg border border-edge-subtle bg-surface-panel px-3 py-3`,children:y}),t[32]=y,t[33]=b),b}function $(e){let t=(0,F.c)(27),{item:n,labels:r}=e,a;t[0]===n.status?a=t[1]:(a=Z(n.status),t[0]=n.status,t[1]=a);let o=a,s=r[n.id]??n.title,c;t[2]===n.status?c=t[3]:(c=i(`flex size-7 shrink-0 items-center justify-center rounded-full border`,X(n.status)),t[2]=n.status,t[3]=c);let l;t[4]===o?l=t[5]:(l=(0,Y.jsx)(o,{className:`size-4`,"aria-hidden":!0}),t[4]=o,t[5]=l);let u;t[6]!==c||t[7]!==l?(u=(0,Y.jsx)(`span`,{className:c,children:l}),t[6]=c,t[7]=l,t[8]=u):u=t[8];let d;t[9]===s?d=t[10]:(d=(0,Y.jsx)(`span`,{className:`block text-sm font-medium text-fg`,children:s}),t[9]=s,t[10]=d);let p;t[11]===n.detail?p=t[12]:(p=(0,Y.jsx)(`span`,{className:`mt-0.5 block truncate text-xs text-fg-muted`,children:n.detail}),t[11]=n.detail,t[12]=p);let m;t[13]!==d||t[14]!==p?(m=(0,Y.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[d,p]}),t[13]=d,t[14]=p,t[15]=m):m=t[15];let g;t[16]===n.path?g=t[17]:(g=n.path?(0,Y.jsx)(f,{className:`size-4 shrink-0 text-fg-subtle`,"aria-hidden":!0}):null,t[16]=n.path,t[17]=g);let _;t[18]!==u||t[19]!==m||t[20]!==g?(_=(0,Y.jsxs)(Y.Fragment,{children:[u,m,g]}),t[18]=u,t[19]=m,t[20]=g,t[21]=_):_=t[21];let v=_;if(n.path){let e;return t[22]!==v||t[23]!==n.path?(e=(0,Y.jsx)(h,{to:n.path,className:`flex items-center gap-3 rounded-lg px-3 py-3 hover:bg-surface-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,children:v}),t[22]=v,t[23]=n.path,t[24]=e):e=t[24],e}let y;return t[25]===v?y=t[26]:(y=(0,Y.jsx)(`div`,{className:`flex items-center gap-3 rounded-lg px-3 py-3`,children:v}),t[25]=v,t[26]=y),y}function _e(e){let t=(0,F.c)(29),{signal:n,fixLabel:r}=e,a;t[0]===n.status?a=t[1]:(a=Z(n.status),t[0]=n.status,t[1]=a);let o=a,s;t[2]===o?s=t[3]:(s=(0,Y.jsx)(o,{className:`mt-0.5 size-4 shrink-0`,"aria-hidden":!0}),t[2]=o,t[3]=s);let c;t[4]===n.label?c=t[5]:(c=(0,Y.jsx)(`span`,{className:`block truncate text-sm font-medium text-fg`,children:n.label}),t[4]=n.label,t[5]=c);let l;t[6]===n.message?l=t[7]:(l=(0,Y.jsx)(`span`,{className:`mt-0.5 block truncate text-xs text-fg-muted`,children:n.message}),t[6]=n.message,t[7]=l);let u;t[8]!==c||t[9]!==l?(u=(0,Y.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[c,l]}),t[8]=c,t[9]=l,t[10]=u):u=t[10];let d;t[11]===n.status?d=t[12]:(d=i(`shrink-0 rounded-full border px-2 py-0.5 text-[11px] font-medium uppercase`,X(n.status)),t[11]=n.status,t[12]=d);let f;t[13]!==n.status||t[14]!==d?(f=(0,Y.jsx)(`span`,{className:d,children:n.status}),t[13]=n.status,t[14]=d,t[15]=f):f=t[15];let p;t[16]!==r||t[17]!==n.path?(p=n.path?(0,Y.jsx)(`span`,{className:`sr-only`,children:r}):null,t[16]=r,t[17]=n.path,t[18]=p):p=t[18];let m;t[19]!==s||t[20]!==u||t[21]!==f||t[22]!==p?(m=(0,Y.jsxs)(Y.Fragment,{children:[s,u,f,p]}),t[19]=s,t[20]=u,t[21]=f,t[22]=p,t[23]=m):m=t[23];let g=m;if(n.path){let e;return t[24]!==g||t[25]!==n.path?(e=(0,Y.jsx)(h,{to:n.path,className:`flex min-w-0 items-start gap-2 rounded-lg border border-edge-subtle bg-surface-panel px-3 py-2.5 hover:bg-surface-hover/60 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,children:g}),t[24]=g,t[25]=n.path,t[26]=e):e=t[26],e}let _;return t[27]===g?_=t[28]:(_=(0,Y.jsx)(`div`,{className:`flex min-w-0 items-start gap-2 rounded-lg border border-edge-subtle bg-surface-panel px-3 py-2.5`,children:g}),t[27]=g,t[28]=_),_}function ve(){let e=a(o(e=>e.language)).setupStatus,{ready:t,error:n,snapshot:r,refresh:s}=J(),[c,l]=(0,P.useState)(!1),[u,d]=(0,P.useState)(`idle`),f=r?.diagnosticSignals.filter(e=>e.status===`fail`||e.status===`warn`)??[],m=async()=>{if(!(c||!t)){l(!0),d(`idle`);try{await s(),d(`success`)}catch{d(`error`)}finally{l(!1)}}};return(0,Y.jsxs)(N,{gap:`gap-6`,children:[(0,Y.jsx)(M,{title:e.title,subtitle:e.subtitle,actions:(0,Y.jsxs)(`button`,{type:`button`,className:i(`inline-flex shrink-0 items-center gap-2 rounded-lg border border-edge px-3 py-2 text-sm font-medium text-fg`,`hover:bg-surface-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,T.press),onClick:()=>void m(),disabled:!t||c,"aria-busy":c,children:[(0,Y.jsx)(b,{className:i(`size-4`,(!t||c)&&`animate-spin`),"aria-hidden":!0}),c?e.health.runDoctorRunning:e.refresh]})}),n?(0,Y.jsx)(`p`,{className:`rounded-xl border border-red-300/40 bg-red-50 px-4 py-3 text-sm text-red-700 dark:border-red-900/40 dark:bg-red-950/30 dark:text-red-300`,children:e.loadError}):null,!t||!r?(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-fg-muted`,"aria-busy":!0,children:[(0,Y.jsx)(y,{className:`size-4 animate-spin`,"aria-hidden":!0}),e.loading]}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(he,{tier:r.healthTier,issueCount:r.issues.length,ready:t,onRunDoctor:()=>void m(),doctorRunning:c,doctorRunState:u}),(0,Y.jsxs)(j,{id:`next-steps`,children:[(0,Y.jsx)(A,{icon:r.issues.length?O:p,title:e.nextStepsTitle,subtitle:r.issues.length?e.nextStepsIssuesSubtitle:e.nextStepsReadySubtitle}),r.issues.length?(0,Y.jsx)(`div`,{className:`mt-4 flex flex-col gap-2`,children:r.issues.slice(0,8).map(t=>(0,Y.jsx)(ge,{issue:t,fixLabel:e.fixIssue},`${t.source}:${t.id}`))}):(0,Y.jsx)(`div`,{className:`mt-4 divide-y divide-edge-subtle rounded-lg border border-edge-subtle bg-surface-panel`,children:r.readiness.map(t=>(0,Y.jsx)($,{item:t,labels:e.readinessLabels},t.id))})]}),(0,Y.jsxs)(j,{children:[(0,Y.jsx)(A,{icon:_,title:e.diagnosticsTitle,subtitle:e.diagnosticsSubtitle}),f.length?(0,Y.jsx)(`div`,{className:`mt-4 grid gap-2 md:grid-cols-2`,children:f.map(t=>(0,Y.jsx)(_e,{signal:t,fixLabel:e.fixIssue},t.id))}):(0,Y.jsx)(`p`,{className:`mt-4 rounded-lg border border-edge-subtle bg-surface-panel px-3 py-3 text-sm text-fg-muted`,children:r.diagnosticSignals.length?e.diagnosticsAllClear:e.diagnosticsEmpty})]})]})]})}export{ve as SetupStatusPanel};
@@ -1 +0,0 @@
1
- import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import{i as t,t as n}from"./fetch-Y7AEX4H3.js";import{An as r}from"./index-BoKafJIZ.js";var i=e({reloadSkills:()=>a});async function a(){let e=await n(t(`/api/skills/reload`),{method:`POST`});if(!e.ok)throw Error(await r(e))}export{i as n,a as t};
@@ -1,27 +0,0 @@
1
- import type { CompactionResult } from './compaction.js';
2
- export interface MemoryFlushConfig {
3
- enabled: boolean;
4
- threshold: number;
5
- softThresholdTokens: number;
6
- afterCompactions: number;
7
- maxEntryChars: number;
8
- includeToolHistory: boolean;
9
- }
10
- export interface MemoryFlushOptions {
11
- workspaceDir: string;
12
- sessionKey: string;
13
- compactionResult: CompactionResult;
14
- config: MemoryFlushConfig;
15
- }
16
- export interface MemoryFlushResult {
17
- flushed: boolean;
18
- entryPath: string;
19
- entryLength: number;
20
- reason?: string;
21
- }
22
- export declare class MemoryFlushService {
23
- flush(options: MemoryFlushOptions): Promise<MemoryFlushResult>;
24
- private buildEntry;
25
- /** YYYY-MM-DD in local time (for daily `memory/YYYY-MM-DD.md` names). */
26
- private isoDay;
27
- }
@@ -1,124 +0,0 @@
1
- import { createLogger } from "../../utils/logger/index.js";
2
- import { init_logger } from "../../utils/logger.js";
3
- import { join } from "node:path";
4
- import { existsSync } from "node:fs";
5
- import { appendFile, mkdir, readFile, writeFile } from "node:fs/promises";
6
- //#region src/agent/memory/memory-flush.ts
7
- init_logger();
8
- const log = createLogger("MemoryFlush");
9
- var MemoryFlushService = class {
10
- async flush(options) {
11
- const { workspaceDir, sessionKey, compactionResult, config } = options;
12
- if (!config.enabled) return {
13
- flushed: false,
14
- entryPath: "",
15
- entryLength: 0,
16
- reason: "disabled"
17
- };
18
- const now = /* @__PURE__ */ new Date();
19
- const day = this.isoDay(now);
20
- const memoryDir = join(workspaceDir, "memory");
21
- const filePath = join(memoryDir, `${day}.md`);
22
- const entryPath = `memory/${day}.md`;
23
- await mkdir(memoryDir, { recursive: true });
24
- const entryText = this.buildEntry(sessionKey, compactionResult, now, config).text;
25
- const entryLength = entryText.length;
26
- if (entryLength > config.maxEntryChars) log.warn({
27
- sessionKey,
28
- entryLength,
29
- maxEntryChars: config.maxEntryChars
30
- }, "Flush entry exceeds maxEntryChars; truncating");
31
- try {
32
- if (!existsSync(filePath)) await writeFile(filePath, `# Daily Notes — ${day}\n\n` + entryText, "utf-8");
33
- else {
34
- const existing = await readFile(filePath, "utf-8");
35
- if (existing.length > 5e4) log.warn({
36
- sessionKey,
37
- filePath,
38
- size: existing.length
39
- }, "Daily notes file is large; continuing append");
40
- await appendFile(filePath, "\n" + entryText, "utf-8");
41
- }
42
- log.info({
43
- sessionKey,
44
- entryPath,
45
- entryLength
46
- }, "Memory flushed to daily notes");
47
- return {
48
- flushed: true,
49
- entryPath,
50
- entryLength
51
- };
52
- } catch (err) {
53
- const em = err instanceof Error ? err.message : String(err);
54
- log.error({
55
- sessionKey,
56
- err,
57
- filePath
58
- }, `Memory flush failed: ${em}`);
59
- return {
60
- flushed: false,
61
- entryPath,
62
- entryLength: 0,
63
- reason: `write_error: ${em}`
64
- };
65
- }
66
- }
67
- buildEntry(sessionKey, result, now, config) {
68
- const iso = now.toISOString();
69
- const lines = [];
70
- lines.push(`## Session Flush [${sessionKey}] ${iso}`);
71
- lines.push("");
72
- const summary = result.summary || "";
73
- lines.push(`**Summary:** ${summary}`);
74
- lines.push("");
75
- const structured = result.structuredSummary;
76
- if (structured) {
77
- if (structured.userRequests && structured.userRequests.length > 0) {
78
- lines.push("**User Requests:**");
79
- for (const req of structured.userRequests) lines.push(`- ${req}`);
80
- lines.push("");
81
- }
82
- if (structured.keyDecisions && structured.keyDecisions.length > 0) {
83
- lines.push("**Key Decisions:**");
84
- for (const decision of structured.keyDecisions) lines.push(`- ${decision}`);
85
- lines.push("");
86
- }
87
- if (structured.filesModified && structured.filesModified.length > 0) {
88
- lines.push("**Files Modified:**");
89
- for (const file of structured.filesModified) lines.push(`- ${file}`);
90
- lines.push("");
91
- }
92
- if (config.includeToolHistory && structured.toolCalls && structured.toolCalls.length > 0) {
93
- lines.push("**Tool Calls:**");
94
- for (const call of structured.toolCalls) {
95
- const filePart = call.filePath ? ` (${call.filePath})` : "";
96
- const status = call.success ? "success" : "failed";
97
- lines.push(`- \`${call.toolName}\`${filePart} — ${status}`);
98
- }
99
- lines.push("");
100
- }
101
- } else if (summary) {
102
- lines.push("**Summary (text only):**");
103
- lines.push(summary);
104
- lines.push("");
105
- }
106
- lines.push("---");
107
- let text = lines.join("\n");
108
- if (text.length > config.maxEntryChars) {
109
- const headerEnd = text.indexOf("\n\n") + 2;
110
- const header = text.slice(0, headerEnd);
111
- const remainingBudget = config.maxEntryChars - header.length - 60;
112
- text = header + text.slice(headerEnd).slice(0, Math.max(0, remainingBudget)) + "\n\n*(Entry truncated due to length limit)*\n---";
113
- }
114
- return { text };
115
- }
116
- /** YYYY-MM-DD in local time (for daily `memory/YYYY-MM-DD.md` names). */
117
- isoDay(d) {
118
- return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}-${String(d.getDate()).padStart(2, "0")}`;
119
- }
120
- };
121
- //#endregion
122
- export { MemoryFlushService };
123
-
124
- //# sourceMappingURL=memory-flush.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory-flush.js","names":[],"sources":["../../../../src/agent/memory/memory-flush.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { mkdir, readFile, writeFile, appendFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { createLogger } from '../../utils/logger.js';\nimport type { CompactionResult } from './compaction.js';\n\nconst log = createLogger('MemoryFlush');\n\nexport interface MemoryFlushConfig {\n enabled: boolean;\n threshold: number;\n softThresholdTokens: number;\n afterCompactions: number;\n maxEntryChars: number;\n includeToolHistory: boolean;\n}\n\nexport interface MemoryFlushOptions {\n workspaceDir: string;\n sessionKey: string;\n compactionResult: CompactionResult;\n config: MemoryFlushConfig;\n}\n\nexport interface MemoryFlushResult {\n flushed: boolean;\n entryPath: string;\n entryLength: number;\n reason?: string;\n}\n\nexport class MemoryFlushService {\n async flush(options: MemoryFlushOptions): Promise<MemoryFlushResult> {\n const { workspaceDir, sessionKey, compactionResult, config } = options;\n\n if (!config.enabled) {\n return { flushed: false, entryPath: '', entryLength: 0, reason: 'disabled' };\n }\n\n const now = new Date();\n const day = this.isoDay(now);\n const memoryDir = join(workspaceDir, 'memory');\n const filePath = join(memoryDir, `${day}.md`);\n const entryPath = `memory/${day}.md`;\n\n await mkdir(memoryDir, { recursive: true });\n\n const entry = this.buildEntry(sessionKey, compactionResult, now, config);\n const entryText = entry.text;\n const entryLength = entryText.length;\n\n if (entryLength > config.maxEntryChars) {\n log.warn({ sessionKey, entryLength, maxEntryChars: config.maxEntryChars }, 'Flush entry exceeds maxEntryChars; truncating');\n }\n\n try {\n const fileExists = existsSync(filePath);\n if (!fileExists) {\n const frontmatter = `# Daily Notes — ${day}\\n\\n`;\n await writeFile(filePath, frontmatter + entryText, 'utf-8');\n } else {\n const existing = await readFile(filePath, 'utf-8');\n // Warn if file is getting large (>50KB) but still append\n if (existing.length > 50_000) {\n log.warn({ sessionKey, filePath, size: existing.length }, 'Daily notes file is large; continuing append');\n }\n await appendFile(filePath, '\\n' + entryText, 'utf-8');\n }\n\n log.info({ sessionKey, entryPath, entryLength }, 'Memory flushed to daily notes');\n return { flushed: true, entryPath, entryLength };\n } catch (err) {\n const em = err instanceof Error ? err.message : String(err);\n log.error({ sessionKey, err, filePath }, `Memory flush failed: ${em}`);\n return { flushed: false, entryPath, entryLength: 0, reason: `write_error: ${em}` };\n }\n }\n\n private buildEntry(\n sessionKey: string,\n result: CompactionResult,\n now: Date,\n config: MemoryFlushConfig,\n ): { text: string } {\n const iso = now.toISOString();\n const lines: string[] = [];\n\n lines.push(`## Session Flush [${sessionKey}] ${iso}`);\n lines.push('');\n\n const summary = result.summary || '';\n lines.push(`**Summary:** ${summary}`);\n lines.push('');\n\n const structured = result.structuredSummary;\n if (structured) {\n if (structured.userRequests && structured.userRequests.length > 0) {\n lines.push('**User Requests:**');\n for (const req of structured.userRequests) {\n lines.push(`- ${req}`);\n }\n lines.push('');\n }\n\n if (structured.keyDecisions && structured.keyDecisions.length > 0) {\n lines.push('**Key Decisions:**');\n for (const decision of structured.keyDecisions) {\n lines.push(`- ${decision}`);\n }\n lines.push('');\n }\n\n if (structured.filesModified && structured.filesModified.length > 0) {\n lines.push('**Files Modified:**');\n for (const file of structured.filesModified) {\n lines.push(`- ${file}`);\n }\n lines.push('');\n }\n\n if (config.includeToolHistory && structured.toolCalls && structured.toolCalls.length > 0) {\n lines.push('**Tool Calls:**');\n for (const call of structured.toolCalls) {\n const filePart = call.filePath ? ` (${call.filePath})` : '';\n const status = call.success ? 'success' : 'failed';\n lines.push(`- \\`${call.toolName}\\`${filePart} — ${status}`);\n }\n lines.push('');\n }\n } else if (summary) {\n // Fallback when structuredSummary is absent\n lines.push('**Summary (text only):**');\n lines.push(summary);\n lines.push('');\n }\n\n lines.push('---');\n\n let text = lines.join('\\n');\n\n // Respect maxEntryChars by truncating from the end if needed\n if (text.length > config.maxEntryChars) {\n // Keep the header and a truncation notice\n const headerEnd = text.indexOf('\\n\\n') + 2;\n const header = text.slice(0, headerEnd);\n const remainingBudget = config.maxEntryChars - header.length - 60;\n const body = text.slice(headerEnd);\n const truncatedBody = body.slice(0, Math.max(0, remainingBudget));\n text = header + truncatedBody + '\\n\\n*(Entry truncated due to length limit)*\\n---';\n }\n\n return { text };\n }\n\n /** YYYY-MM-DD in local time (for daily `memory/YYYY-MM-DD.md` names). */\n private isoDay(d: Date): string {\n const y = d.getFullYear();\n const m = String(d.getMonth() + 1).padStart(2, '0');\n const day = String(d.getDate()).padStart(2, '0');\n return `${y}-${m}-${day}`;\n }\n}\n"],"mappings":"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"}