@openpalm/ui 0.11.0-rc.13 → 0.11.0-rc.14

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 (137) hide show
  1. package/build/.openpalm-ui-version +1 -1
  2. package/build/client/_app/immutable/assets/0.CV_hiSDb.css +1 -0
  3. package/build/client/_app/immutable/assets/0.CV_hiSDb.css.br +0 -0
  4. package/build/client/_app/immutable/assets/0.CV_hiSDb.css.gz +0 -0
  5. package/build/client/_app/immutable/assets/4.Cztzqv5R.css +1 -0
  6. package/build/client/_app/immutable/assets/4.Cztzqv5R.css.br +0 -0
  7. package/build/client/_app/immutable/assets/4.Cztzqv5R.css.gz +0 -0
  8. package/build/client/_app/immutable/assets/6.DH6oAODR.css +1 -0
  9. package/build/client/_app/immutable/assets/6.DH6oAODR.css.br +0 -0
  10. package/build/client/_app/immutable/assets/6.DH6oAODR.css.gz +0 -0
  11. package/build/client/_app/immutable/assets/{7.CzC8JVIO.css → 7.CgArpKqX.css} +1 -1
  12. package/build/client/_app/immutable/assets/7.CgArpKqX.css.br +0 -0
  13. package/build/client/_app/immutable/assets/{7.CzC8JVIO.css.gz → 7.CgArpKqX.css.gz} +0 -0
  14. package/build/client/_app/immutable/assets/{AuthGate._tqG1OIX.css → AuthGate.CvHfx1js.css} +1 -1
  15. package/build/client/_app/immutable/assets/AuthGate.CvHfx1js.css.br +0 -0
  16. package/build/client/_app/immutable/assets/{AuthGate._tqG1OIX.css.gz → AuthGate.CvHfx1js.css.gz} +0 -0
  17. package/build/client/_app/immutable/chunks/{B1uQvvlv.js → B6eDnfZN.js} +2 -2
  18. package/build/client/_app/immutable/chunks/B6eDnfZN.js.br +0 -0
  19. package/build/client/_app/immutable/chunks/B6eDnfZN.js.gz +0 -0
  20. package/build/client/_app/immutable/chunks/{BPh8tqAg.js → CHbj1pWz.js} +1 -1
  21. package/build/client/_app/immutable/chunks/CHbj1pWz.js.br +0 -0
  22. package/build/client/_app/immutable/chunks/CHbj1pWz.js.gz +0 -0
  23. package/build/client/_app/immutable/chunks/{CrcMJfbz.js → WyJr2dGG.js} +1 -1
  24. package/build/client/_app/immutable/chunks/WyJr2dGG.js.br +0 -0
  25. package/build/client/_app/immutable/chunks/WyJr2dGG.js.gz +0 -0
  26. package/build/client/_app/immutable/chunks/{E7W0MQkU.js → kWSYYB4z.js} +1 -1
  27. package/build/client/_app/immutable/chunks/kWSYYB4z.js.br +0 -0
  28. package/build/client/_app/immutable/chunks/kWSYYB4z.js.gz +0 -0
  29. package/build/client/_app/immutable/entry/{app.9wfmQKXa.js → app.BBkXQZES.js} +2 -2
  30. package/build/client/_app/immutable/entry/app.BBkXQZES.js.br +0 -0
  31. package/build/client/_app/immutable/entry/app.BBkXQZES.js.gz +0 -0
  32. package/build/client/_app/immutable/entry/start.Bs5o_i7k.js +1 -0
  33. package/build/client/_app/immutable/entry/start.Bs5o_i7k.js.br +1 -0
  34. package/build/client/_app/immutable/entry/start.Bs5o_i7k.js.gz +0 -0
  35. package/build/client/_app/immutable/nodes/{1.B-z3blIe.js → 1.lFu-Nkuh.js} +1 -1
  36. package/build/client/_app/immutable/nodes/1.lFu-Nkuh.js.br +1 -0
  37. package/build/client/_app/immutable/nodes/1.lFu-Nkuh.js.gz +0 -0
  38. package/build/client/_app/immutable/nodes/4.D7DiVFrp.js +19 -0
  39. package/build/client/_app/immutable/nodes/4.D7DiVFrp.js.br +0 -0
  40. package/build/client/_app/immutable/nodes/4.D7DiVFrp.js.gz +0 -0
  41. package/build/client/_app/immutable/nodes/{5.BrAtimvQ.js → 5.B4UTvqdS.js} +1 -1
  42. package/build/client/_app/immutable/nodes/5.B4UTvqdS.js.br +0 -0
  43. package/build/client/_app/immutable/nodes/5.B4UTvqdS.js.gz +0 -0
  44. package/build/client/_app/immutable/nodes/{6.CDpI1TrW.js → 6.Dypiry5c.js} +1 -1
  45. package/build/client/_app/immutable/nodes/6.Dypiry5c.js.br +0 -0
  46. package/build/client/_app/immutable/nodes/6.Dypiry5c.js.gz +0 -0
  47. package/build/client/_app/immutable/nodes/{7.B5KYnWwU.js → 7.03_5HWHH.js} +1 -1
  48. package/build/client/_app/immutable/nodes/7.03_5HWHH.js.br +0 -0
  49. package/build/client/_app/immutable/nodes/7.03_5HWHH.js.gz +0 -0
  50. package/build/client/_app/version.json +1 -1
  51. package/build/client/_app/version.json.br +1 -1
  52. package/build/client/_app/version.json.gz +0 -0
  53. package/build/server/chunks/{0-CP9GcQBP.js → 0-BVoCeMeS.js} +4 -4
  54. package/build/server/chunks/{0-CP9GcQBP.js.map → 0-BVoCeMeS.js.map} +1 -1
  55. package/build/server/chunks/1-43kXv-lj.js +9 -0
  56. package/build/server/chunks/{1-BDxTrwG3.js.map → 1-43kXv-lj.js.map} +1 -1
  57. package/build/server/chunks/4-DyfubyL8.js +9 -0
  58. package/build/server/chunks/{4-CBgm4iSo.js.map → 4-DyfubyL8.js.map} +1 -1
  59. package/build/server/chunks/5-BugYLg1g.js +9 -0
  60. package/build/server/chunks/{5-CD1fuYOe.js.map → 5-BugYLg1g.js.map} +1 -1
  61. package/build/server/chunks/6-DxMMp_Ab.js +9 -0
  62. package/build/server/chunks/{6-B6tmbcQ8.js.map → 6-DxMMp_Ab.js.map} +1 -1
  63. package/build/server/chunks/7-1z1l4Gj9.js +9 -0
  64. package/build/server/chunks/{7-m4KLf_Gx.js.map → 7-1z1l4Gj9.js.map} +1 -1
  65. package/build/server/chunks/{AuthGate-BcB49fE5.js → AuthGate-UzM0ufsa.js} +9 -6
  66. package/build/server/chunks/{AuthGate-BcB49fE5.js.map → AuthGate-UzM0ufsa.js.map} +1 -1
  67. package/build/server/chunks/{ModeSwitch-D26evPMy.js → ModeSwitch-Kf6VtzMp.js} +2 -2
  68. package/build/server/chunks/{ModeSwitch-D26evPMy.js.map → ModeSwitch-Kf6VtzMp.js.map} +1 -1
  69. package/build/server/chunks/{_layout.svelte-C8ggVfth.js → _layout.svelte-BnCuSUPN.js} +2 -2
  70. package/build/server/chunks/{_layout.svelte-C8ggVfth.js.map → _layout.svelte-BnCuSUPN.js.map} +1 -1
  71. package/build/server/chunks/{_page.svelte-CEjRvc8B.js → _page.svelte-BXcDqPDM.js} +123 -29
  72. package/build/server/chunks/_page.svelte-BXcDqPDM.js.map +1 -0
  73. package/build/server/chunks/{_page.svelte-WWZsjJuR.js → _page.svelte-CLU3j0og.js} +6 -6
  74. package/build/server/chunks/{_page.svelte-WWZsjJuR.js.map → _page.svelte-CLU3j0og.js.map} +1 -1
  75. package/build/server/chunks/{_page.svelte-Cy4kcLwu.js → _page.svelte-D2G-zIql.js} +5 -5
  76. package/build/server/chunks/{_page.svelte-Cy4kcLwu.js.map → _page.svelte-D2G-zIql.js.map} +1 -1
  77. package/build/server/chunks/{_page.svelte-DrWHHwCU.js → _page.svelte-Ds-M9Dyp.js} +6 -6
  78. package/build/server/chunks/{_page.svelte-DrWHHwCU.js.map → _page.svelte-Ds-M9Dyp.js.map} +1 -1
  79. package/build/server/chunks/environment-qSeYk7Wm.js +36 -0
  80. package/build/server/chunks/environment-qSeYk7Wm.js.map +1 -0
  81. package/build/server/chunks/{error.svelte-CcHm-30A.js → error.svelte-DSc-Dp_M.js} +3 -3
  82. package/build/server/chunks/{error.svelte-CcHm-30A.js.map → error.svelte-DSc-Dp_M.js.map} +1 -1
  83. package/build/server/chunks/{internal-B08Y9iTe.js → internal-COESfFAd.js} +2 -2
  84. package/build/server/chunks/{internal-B08Y9iTe.js.map → internal-COESfFAd.js.map} +1 -1
  85. package/build/server/chunks/{state-CFHLgqLs.js → state-B_UDC_bs.js} +2 -2
  86. package/build/server/chunks/{state-CFHLgqLs.js.map → state-B_UDC_bs.js.map} +1 -1
  87. package/build/server/chunks/{theme-state.svelte-y-mfJax7.js → theme-state.svelte-CWo8vi7P.js} +11 -2
  88. package/build/server/chunks/{theme-state.svelte-y-mfJax7.js.map → theme-state.svelte-CWo8vi7P.js.map} +1 -1
  89. package/build/server/index.js +2 -32
  90. package/build/server/index.js.map +1 -1
  91. package/build/server/manifest.js +7 -7
  92. package/build/server/manifest.js.map +1 -1
  93. package/package.json +1 -1
  94. package/build/client/_app/immutable/assets/0.nenI9xO9.css +0 -1
  95. package/build/client/_app/immutable/assets/0.nenI9xO9.css.br +0 -0
  96. package/build/client/_app/immutable/assets/0.nenI9xO9.css.gz +0 -0
  97. package/build/client/_app/immutable/assets/4.j3F-W7h_.css +0 -1
  98. package/build/client/_app/immutable/assets/4.j3F-W7h_.css.br +0 -0
  99. package/build/client/_app/immutable/assets/4.j3F-W7h_.css.gz +0 -0
  100. package/build/client/_app/immutable/assets/6.B0Z8tVIH.css +0 -1
  101. package/build/client/_app/immutable/assets/6.B0Z8tVIH.css.br +0 -1
  102. package/build/client/_app/immutable/assets/6.B0Z8tVIH.css.gz +0 -0
  103. package/build/client/_app/immutable/assets/7.CzC8JVIO.css.br +0 -0
  104. package/build/client/_app/immutable/assets/AuthGate._tqG1OIX.css.br +0 -0
  105. package/build/client/_app/immutable/chunks/B1uQvvlv.js.br +0 -0
  106. package/build/client/_app/immutable/chunks/B1uQvvlv.js.gz +0 -0
  107. package/build/client/_app/immutable/chunks/BPh8tqAg.js.br +0 -2
  108. package/build/client/_app/immutable/chunks/BPh8tqAg.js.gz +0 -0
  109. package/build/client/_app/immutable/chunks/CrcMJfbz.js.br +0 -0
  110. package/build/client/_app/immutable/chunks/CrcMJfbz.js.gz +0 -0
  111. package/build/client/_app/immutable/chunks/E7W0MQkU.js.br +0 -0
  112. package/build/client/_app/immutable/chunks/E7W0MQkU.js.gz +0 -0
  113. package/build/client/_app/immutable/entry/app.9wfmQKXa.js.br +0 -0
  114. package/build/client/_app/immutable/entry/app.9wfmQKXa.js.gz +0 -0
  115. package/build/client/_app/immutable/entry/start.BzWuQgSn.js +0 -1
  116. package/build/client/_app/immutable/entry/start.BzWuQgSn.js.br +0 -0
  117. package/build/client/_app/immutable/entry/start.BzWuQgSn.js.gz +0 -0
  118. package/build/client/_app/immutable/nodes/1.B-z3blIe.js.br +0 -1
  119. package/build/client/_app/immutable/nodes/1.B-z3blIe.js.gz +0 -0
  120. package/build/client/_app/immutable/nodes/4.DOO_QIq1.js +0 -18
  121. package/build/client/_app/immutable/nodes/4.DOO_QIq1.js.br +0 -0
  122. package/build/client/_app/immutable/nodes/4.DOO_QIq1.js.gz +0 -0
  123. package/build/client/_app/immutable/nodes/5.BrAtimvQ.js.br +0 -0
  124. package/build/client/_app/immutable/nodes/5.BrAtimvQ.js.gz +0 -0
  125. package/build/client/_app/immutable/nodes/6.CDpI1TrW.js.br +0 -0
  126. package/build/client/_app/immutable/nodes/6.CDpI1TrW.js.gz +0 -0
  127. package/build/client/_app/immutable/nodes/7.B5KYnWwU.js.br +0 -0
  128. package/build/client/_app/immutable/nodes/7.B5KYnWwU.js.gz +0 -0
  129. package/build/server/chunks/1-BDxTrwG3.js +0 -9
  130. package/build/server/chunks/4-CBgm4iSo.js +0 -9
  131. package/build/server/chunks/5-CD1fuYOe.js +0 -9
  132. package/build/server/chunks/6-B6tmbcQ8.js +0 -9
  133. package/build/server/chunks/7-m4KLf_Gx.js +0 -9
  134. package/build/server/chunks/_page.svelte-CEjRvc8B.js.map +0 -1
  135. /package/build/client/_app/immutable/nodes/{0.DxAGOZgx.js → 0.DqHhUquH.js} +0 -0
  136. /package/build/client/_app/immutable/nodes/{0.DxAGOZgx.js.br → 0.DqHhUquH.js.br} +0 -0
  137. /package/build/client/_app/immutable/nodes/{0.DxAGOZgx.js.gz → 0.DqHhUquH.js.gz} +0 -0
@@ -1,18 +0,0 @@
1
- import{$ as e,A as t,D as n,E as r,F as i,G as a,H as o,J as s,K as c,L as l,M as u,N as d,O as f,P as p,Q as m,S as h,T as g,V as _,X as v,Y as y,Z as b,_ as x,a as S,at as C,b as w,c as T,ct as E,d as D,f as O,g as k,h as A,it as j,j as M,k as N,l as P,lt as F,m as I,n as L,p as R,q as z,r as B,s as V,tt as H,u as U,v as W,w as G,y as K}from"../chunks/0swOyi-5.js";import"../chunks/xihTtKlq.js";import{A as ee,C as te,D as ne,E as q,F as J,G as re,I as Y,J as X,K as Z,L as ie,M as ae,N as oe,O as se,P as ce,Q as le,R as ue,S as de,T as fe,U as pe,W as me,Z as he,a as ge,b as _e,d as Q,et as ve,f as ye,j as be,m as xe,o as Se,p as Ce,q as we,u as Te,v as Ee,w as De,x as Oe,y as ke,z as Ae}from"../chunks/BBdT9Cjm.js";import{n as je,r as Me,t as Ne}from"../chunks/B1uQvvlv.js";import{t as $}from"../chunks/BQ0vnNWj.js";import{n as Pe,t as Fe}from"../chunks/BQrb5YOM.js";var Ie=M(`<button role="tab"> </button>`),Le=M(`<button role="tab"><svg aria-hidden="true" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></svg> </button>`),Re=M(`<div class="subtab-row svelte-7673iv"><div class="tabs svelte-7673iv" role="tablist"></div></div>`),ze=M(`<nav class="nav-shell svelte-7673iv" aria-label="Admin sections"><div class="section-strip svelte-7673iv" role="tablist" aria-label="Sections"></div> <!></nav>`);function Be(e,t){C(t,!0);let r={overview:`<rect x="3" y="3" width="7" height="7" /><rect x="14" y="3" width="7" height="7" /><rect x="14" y="14" width="7" height="7" /><rect x="3" y="14" width="7" height="7" />`,containers:`<rect x="2" y="2" width="20" height="8" rx="2" ry="2" /><rect x="2" y="14" width="20" height="8" rx="2" ry="2" /><line x1="6" y1="6" x2="6.01" y2="6" /><line x1="6" y1="18" x2="6.01" y2="18" />`,logs:`<polyline points="4 17 10 11 4 5" /><line x1="12" y1="19" x2="20" y2="19" />`,connections:`<path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" /><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" />`,akm:`<path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z" /><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z" />`,"host-sharing":`<circle cx="18" cy="5" r="3" /><circle cx="6" cy="12" r="3" /><circle cx="18" cy="19" r="3" /><line x1="8.59" y1="13.51" x2="15.42" y2="17.49" /><line x1="15.41" y1="6.51" x2="8.59" y2="10.49" />`,voice:`<path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z" /><path d="M19 10v2a7 7 0 0 1-14 0v-2" /><line x1="12" y1="19" x2="12" y2="23" /><line x1="8" y1="23" x2="16" y2="23" />`,addons:`<path d="M12 2L2 7l10 5 10-5-10-5z" /><path d="M2 17l10 5 10-5" /><path d="M2 12l10 5 10-5" />`,automations:`<circle cx="12" cy="12" r="10" /><polyline points="12 6 12 12 16 14" />`,secrets:`<rect x="3" y="11" width="18" height="11" rx="2" ry="2" /><path d="M7 11V7a5 5 0 0 1 10 0v4" />`,updates:`<polyline points="8 17 12 21 16 17" /><line x1="12" y1="12" x2="12" y2="21" /><path d="M20.88 18.09A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.29" />`},a=[{id:`health`,label:`Health`,tabs:[{id:`overview`,label:`Overview`,icon:r.overview},{id:`containers`,label:`Systems`,icon:r.containers},{id:`logs`,label:`Journal`,icon:r.logs},{id:`updates`,label:`Check-up`,icon:r.updates}]},{id:`mind`,label:`Mind`,tabs:[{id:`connections`,label:`AI Providers`,icon:r.connections}]},{id:`voice`,label:`Voice`,tabs:[{id:`voice`,label:`Voice`,icon:r.voice}]},{id:`routines`,label:`Routines`,tabs:[{id:`automations`,label:`Automations`,icon:r.automations}]},{id:`capabilities`,label:`Capabilities`,tabs:[{id:`addons`,label:`Add-ons`,icon:r.addons}]},{id:`knowledge`,label:`Knowledge`,tabs:[{id:`akm`,label:`Memory`,icon:r.akm},{id:`secrets`,label:`Secrets`,icon:r.secrets},{id:`host-sharing`,label:`Sharing`,icon:r[`host-sharing`]}]}],c=H(()=>a.find(e=>e.tabs.some(e=>e.id===t.active))??a[0]);function u(e){if(e.key!==`ArrowLeft`&&e.key!==`ArrowRight`)return;e.preventDefault();let t=e.currentTarget,n=Array.from(t.parentElement?.querySelectorAll(`[role="tab"]`)??[]),r=n.indexOf(t);r!==-1&&n[e.key===`ArrowRight`?(r+1)%n.length:(r-1+n.length)%n.length]?.focus()}function d(e){if(e.key!==`ArrowLeft`&&e.key!==`ArrowRight`)return;e.preventDefault();let t=e.currentTarget,n=Array.from(t.parentElement?.querySelectorAll(`[role="tab"]`)??[]),r=n.indexOf(t);r!==-1&&n[e.key===`ArrowRight`?(r+1)%n.length:(r-1+n.length)%n.length]?.focus()}function p(e){t.onSelect(e.tabs[0].id)}var m=ze(),h=s(m);g(h,21,()=>a,e=>e.id,(e,t)=>{var n=Ie();let r;var a=s(n,!0);F(n),o(()=>{r=W(n,1,`section-tab svelte-7673iv`,null,r,{"section-tab-active":l(c).id===l(t).id}),D(n,`aria-selected`,l(c).id===l(t).id),f(a,l(t).label)}),i(`click`,n,()=>p(l(t))),i(`keydown`,n,u),N(e,n)}),F(h);var _=v(h,2),y=e=>{var n=Re(),r=s(n);g(r,21,()=>l(c).tabs,e=>e.id,(e,n)=>{var r=Le();let a;var c=s(r);G(c,()=>l(n).icon,!0),F(c);var u=v(c);F(r),o(()=>{a=W(r,1,`tab svelte-7673iv`,null,a,{"tab-active":t.active===l(n).id}),D(r,`aria-selected`,t.active===l(n).id),f(u,` ${l(n).label??``}`)}),i(`click`,r,()=>t.onSelect(l(n).id)),i(`keydown`,r,d),N(e,r)}),F(r),F(n),o(()=>D(r,`aria-label`,`${l(c).label??``} tabs`)),N(e,n)};n(_,e=>{l(c).tabs.length>1&&e(y)}),F(m),N(e,m),j()}p([`click`,`keydown`]);var Ve=u(`<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>`),He=u(`<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>`),Ue=u(`<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>`),We=M(`<button class="btn btn-secondary">View containers</button>`),Ge=M(`<section role="status" aria-live="polite"><span class="hero-icon svelte-10n23hu" aria-hidden="true"><!></span> <div class="hero-text svelte-10n23hu"><h2 class="hero-title svelte-10n23hu"> </h2> <p class="hero-detail svelte-10n23hu"> </p></div> <div class="hero-actions svelte-10n23hu"><button class="btn btn-secondary"> </button> <!> <button class="btn btn-secondary"> </button></div></section>`);function Ke(e,t){C(t,!0);var r=Ge(),a=s(r),c=s(a),l=e=>{N(e,Ve())},u=e=>{N(e,He())},d=e=>{N(e,Ue())};n(c,e=>{t.status===`warning`?e(l):t.status===`ok`?e(u,1):e(d,-1)}),F(a);var p=v(a,2),m=s(p),h=s(m,!0);F(m);var g=v(m,2),_=s(g,!0);F(g),F(p);var y=v(p,2),b=s(y),x=s(b,!0);F(b);var S=v(b,2),w=e=>{var n=We();i(`click`,n,()=>t.onNavigate(`containers`)),N(e,n)};n(S,e=>{t.status===`warning`&&e(w)});var T=v(S,2),E=s(T,!0);F(T),F(y),F(r),o(()=>{W(r,1,`hero hero--${t.status??``}`,`svelte-10n23hu`),f(h,t.title),f(_,t.detail),b.disabled=t.healthLoading,f(x,t.healthLoading?`Checking…`:`Re-check`),T.disabled=t.anyDangerousLoading||!t.tokenStored,f(E,t.applyLoading?`Applying…`:`Apply config & restart`)}),i(`click`,b,function(...e){t.onCheckHealth?.apply(this,e)}),i(`click`,T,function(...e){t.onApplyChanges?.apply(this,e)}),N(e,r),j()}p([`click`]);var qe=M(`<section><div class="output-header svelte-10sij3c"><h3 class="svelte-10sij3c">Operation output</h3> <button class="btn-ghost" aria-label="Dismiss"><svg aria-hidden="true" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg></button></div> <pre class="output-code svelte-10sij3c"> </pre></section>`);function Je(e,r){var a=t(),c=y(a),l=e=>{var t=qe(),n=s(t),a=v(s(n),2);F(n);var c=v(n,2),l=s(c,!0);F(c),F(t),o(()=>{W(t,1,`output-section output-section--${r.operationResultType??``}`,`svelte-10sij3c`),f(l,r.operationResult)}),i(`click`,a,function(...e){r.onDismissResult?.apply(this,e)}),N(e,t)};n(c,e=>{r.operationResult&&e(l)}),N(e,a)}p([`click`]);var Ye=M(`<span class="tile-metric tile-metric--icon svelte-19hpfg" aria-hidden="true"><!></span>`),Xe=M(`<span class="tile-metric-sub svelte-19hpfg"> </span>`),Ze=M(` <!>`,1),Qe=M(`<span class="tile-metric svelte-19hpfg"><!></span>`),$e=M(`<button class="tile svelte-19hpfg"><!> <span class="tile-label svelte-19hpfg"> </span></button>`);function et(e,t){let r=S(t,`value`,3,null),a=S(t,`sub`,3,null),c=S(t,`loaded`,3,!0);var l=$e(),u=s(l),p=e=>{var n=Ye();h(s(n),()=>t.icon),F(n),N(e,n)},m=e=>{var t=Qe(),i=s(t),l=e=>{var t=Ze(),i=y(t,!0),c=v(i),l=e=>{var t=Xe(),n=s(t,!0);F(t),o(()=>f(n,a())),N(e,t)};n(c,e=>{a()&&e(l)}),o(()=>f(i,r())),N(e,t)},u=e=>{N(e,d(`—`))};n(i,e=>{c()?e(l):e(u,-1)}),F(t),N(e,t)};n(u,e=>{t.icon?e(p):e(m,-1)});var g=v(u,2),_=s(g,!0);F(g),F(l),o(()=>f(_,t.label)),i(`click`,l,function(...e){t.onClick?.apply(this,e)}),N(e,l)}p([`click`]);var tt=M(`<div class="akm-metric svelte-dcgqe1"><span class="akm-num svelte-dcgqe1"> </span> <span class="akm-cap svelte-dcgqe1">Task failure rate</span></div>`),nt=M(`<div class="akm-metrics svelte-dcgqe1"><div class="akm-metric svelte-dcgqe1"><span class="akm-num svelte-dcgqe1"> </span> <span class="akm-cap svelte-dcgqe1">Indexed assets</span></div> <div class="akm-metric svelte-dcgqe1"><span class="akm-num svelte-dcgqe1"> <span class="akm-num-sub svelte-dcgqe1"> </span></span> <span class="akm-cap svelte-dcgqe1">Health checks passing</span></div> <div class="akm-metric svelte-dcgqe1"><span class="akm-num svelte-dcgqe1"> </span> <span class="akm-cap svelte-dcgqe1">Semantic search</span></div> <!></div>`),rt=M(`<p class="akm-unavailable svelte-dcgqe1">Metrics unavailable — the akm CLI isn't reachable from the admin host.</p>`),it=M(`<button class="akm-card svelte-dcgqe1" aria-label="AKM health — open Knowledge settings"><div class="akm-head svelte-dcgqe1"><span class="akm-title svelte-dcgqe1">AKM runtime health</span> <span> </span></div> <!></button>`);function at(e,t){C(t,!0);var r=it(),a=s(r),c=v(s(a),2),l=s(c,!0);F(c),F(a);var u=v(a,2),d=e=>{var r=nt(),i=s(r),a=s(i),c=s(a,!0);F(a),E(2),F(i);var l=v(i,2),u=s(l),d=s(u,!0),p=v(d),m=s(p);F(p),F(u),E(2),F(l);var h=v(l,2),g=s(h),_=s(g,!0);F(g),E(2),F(h);var y=v(h,2),b=e=>{var n=tt(),r=s(n),i=s(r);F(r),E(2),F(n),o(e=>f(i,`${e??``}%`),[()=>Math.round(t.akm.metrics.taskFailRate*100)]),N(e,n)};n(y,e=>{t.akm.metrics&&typeof t.akm.metrics.taskFailRate==`number`&&e(b)}),F(r),o(e=>{f(c,e),f(d,t.akm.checks.pass),f(m,`/${t.checkTotal??``}`),f(_,t.akm.index?.hasEmbeddings?`On`:`Off`)},[()=>t.akm.index?.entryCount?.toLocaleString()??`—`]),N(e,r)},p=e=>{N(e,rt())};n(u,e=>{t.akm&&t.akm.available?e(d):e(p,-1)}),F(r),o(()=>{W(c,1,`badge ${t.badge.cls??``}`,`svelte-dcgqe1`),f(l,t.badge.label)}),i(`click`,r,()=>t.onNavigate(`akm`)),N(e,r),j()}p([`click`]);var ot=M(`<div class="shortcut-grid svelte-8y2vdf"><button class="shortcut svelte-8y2vdf"><span class="shortcut-name svelte-8y2vdf">AI Providers</span> <span class="shortcut-desc svelte-8y2vdf">Models &amp; provider credentials</span></button> <button class="shortcut svelte-8y2vdf"><span class="shortcut-name svelte-8y2vdf">Knowledge</span> <span class="shortcut-desc svelte-8y2vdf">Assistant memory &amp; behavior</span></button> <button class="shortcut svelte-8y2vdf"><span class="shortcut-name svelte-8y2vdf">Voice</span> <span class="shortcut-desc svelte-8y2vdf">Speech-to-text &amp; text-to-speech</span></button> <button class="shortcut svelte-8y2vdf"><span class="shortcut-name svelte-8y2vdf">Channels &amp; add-ons</span> <span class="shortcut-desc svelte-8y2vdf">Discord, Slack, API &amp; more</span></button> <button class="shortcut svelte-8y2vdf"><span class="shortcut-name svelte-8y2vdf">Secrets</span> <span class="shortcut-desc svelte-8y2vdf">Stack &amp; channel credentials</span></button> <a class="shortcut svelte-8y2vdf" href="/setup?rerun=1"><span class="shortcut-name svelte-8y2vdf">Re-run setup</span> <span class="shortcut-desc svelte-8y2vdf">Walk through the setup wizard again</span></a></div>`);function st(e,t){C(t,!0);var n=ot(),r=s(n),a=v(r,2),o=v(a,2),c=v(o,2),l=v(c,2);E(2),F(n),i(`click`,r,()=>t.onNavigate(`connections`)),i(`click`,a,()=>t.onNavigate(`akm`)),i(`click`,o,()=>t.onNavigate(`voice`)),i(`click`,c,()=>t.onNavigate(`addons`)),i(`click`,l,()=>t.onNavigate(`secrets`)),N(e,n),j()}p([`click`]);var ct=u(`<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="4 17 10 11 4 5"></polyline><line x1="12" y1="19" x2="20" y2="19"></line></svg>`),lt=u(`<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="8 17 12 21 16 17"></polyline><line x1="12" y1="12" x2="12" y2="21"></line><path d="M20.88 18.09A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.29"></path></svg>`),ut=M(`<!> <!> <div class="tile-grid svelte-xz862u"><!> <!> <!></div> <h3 class="section-heading svelte-xz862u">Knowledge base (AKM)</h3> <!> <h3 class="section-heading svelte-xz862u">Configure</h3> <!>`,1);function dt(t,r){C(r,!0);let i=e(null);B(()=>{Me.load(),q().then(e=>{m(i,e,!0)}).catch(()=>{m(i,{available:!1},!0)})});let a=H(()=>{if(!l(i)||!l(i).available)return{label:`Unavailable`,cls:`badge-neutral`};let e=l(i).status;return e!==`ok`&&e!==`warn`&&e!==`fail`&&(e=l(i).checks.fail>0?`fail`:l(i).checks.warn>0?`warn`:`ok`),e===`ok`?{label:`Healthy`,cls:`badge-success`}:e===`warn`?{label:`Warnings`,cls:`badge-warning`}:{label:`Issues`,cls:`badge-danger`}}),o=H(()=>l(i)&&l(i).available?l(i).checks.pass+l(i).checks.warn+l(i).checks.fail:0);H(()=>r.automationsData?.automations.length??0),H(()=>r.automationsData?.automations.filter(e=>e.enabled).length??0);let c=H(()=>r.mergedServices.size===0?null:{total:r.mergedServices.size,running:[...r.mergedServices.values()].filter(e=>e===`running`).length}),u=H(()=>{let e=[];for(let[t,n]of r.mergedServices)n!==`running`&&e.push(t);return e}),d=H(()=>{if(!l(c))return{status:`unknown`,title:`Checking services…`,detail:`Fetching the latest status from Docker.`};if(l(c).running===l(c).total&&l(c).total>0)return{status:`ok`,title:`All systems operational`,detail:`${l(c).total} of ${l(c).total} services are running normally.`};let e=l(c).total-l(c).running,t=l(u).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(`, `);return{status:`warning`,title:`${e} of ${l(c).total} services not running`,detail:t?`Not running: ${t}.`:`One or more services need attention.`}});var f=ut(),p=y(f),h=e=>{Ke(e,{get status(){return l(d).status},get title(){return l(d).title},get detail(){return l(d).detail},get healthLoading(){return r.healthLoading},get applyLoading(){return r.applyLoading},get anyDangerousLoading(){return r.anyDangerousLoading},get tokenStored(){return r.tokenStored},get onCheckHealth(){return r.onCheckHealth},get onApplyChanges(){return r.onApplyChanges},get onNavigate(){return r.onNavigate}})};n(p,e=>{l(d).status!==`ok`&&e(h)});var g=v(p,2);Je(g,{get operationResult(){return r.operationResult},get operationResultType(){return r.operationResultType},get onDismissResult(){return r.onDismissResult}});var _=v(g,2),b=s(_);{let e=H(()=>l(c)?.running),t=H(()=>l(c)?`/${l(c).total}`:null),n=H(()=>!!l(c));et(b,{label:`Services running`,onClick:()=>r.onNavigate(`containers`),get value(){return l(e)},get sub(){return l(t)},get loaded(){return l(n)}})}var x=v(b,2);et(x,{label:`View logs`,onClick:()=>r.onNavigate(`logs`),icon:e=>{N(e,ct())},$$slots:{icon:!0}}),et(v(x,2),{label:`Check for updates`,onClick:()=>r.onNavigate(`updates`),icon:e=>{N(e,lt())},$$slots:{icon:!0}}),F(_);var S=v(_,4);at(S,{get akm(){return l(i)},get badge(){return l(a)},get checkTotal(){return l(o)},get onNavigate(){return r.onNavigate}}),st(v(S,4),{get onNavigate(){return r.onNavigate}}),N(t,f),j()}var ft=M(`<div class="version-select-skeleton svelte-7mkeya"></div>`),pt=M(`<option class="svelte-7mkeya"> </option>`),mt=M(`<select class="version-select svelte-7mkeya"><option class="svelte-7mkeya">latest</option><!></select>`),ht=M(`<input class="version-input svelte-7mkeya" type="text" placeholder="e.g. 0.11.0 or latest"/>`),gt=M(`<!> Applying…`,1),_t=M(`<!> Upgrading…`,1),vt=M(`<div class="version-select-skeleton svelte-7mkeya"></div>`),yt=M(`<option class="svelte-7mkeya"> </option>`),bt=M(`<select class="version-select svelte-7mkeya"></select>`),xt=M(`<input class="version-input svelte-7mkeya" type="text" placeholder="e.g. 0.11.0-beta.7"/>`),St=M(`<!> Downloading…`,1),Ct=M(`<div class="version-restart-prompt svelte-7mkeya">UI updated. <button class="btn btn-sm btn-primary svelte-7mkeya">Restart App</button></div>`),wt=M(`<p class="version-hint svelte-7mkeya">Downloads and replaces the UI from GitHub. Takes effect on restart.</p>`),Tt=M(`<div class="version-divider svelte-7mkeya"></div> <div class="version-section svelte-7mkeya"><div class="version-row svelte-7mkeya"><span class="version-label svelte-7mkeya">UI Version</span></div> <div class="version-input-row svelte-7mkeya"><!> <button class="btn btn-sm svelte-7mkeya"><!></button></div> <!></div>`,1),Et=M(`<div class="panel svelte-7mkeya" role="tabpanel"><div class="panel-header svelte-7mkeya"><div class="svelte-7mkeya"><h2 class="svelte-7mkeya">Updates</h2> <p class="panel-subtitle svelte-7mkeya">Pull new stack images, upgrade to the latest release, and update the UI.</p></div></div> <div class="panel-body svelte-7mkeya"><div class="version-section svelte-7mkeya"><div class="version-row svelte-7mkeya"><span class="version-label svelte-7mkeya">Stack images</span> <code class="version-value svelte-7mkeya"> </code></div> <div class="version-input-row svelte-7mkeya"><!> <button class="btn btn-sm btn-primary svelte-7mkeya"><!></button></div> <p class="version-hint svelte-7mkeya">Pulls the selected images and restarts services.</p></div> <div class="version-divider svelte-7mkeya"></div> <div class="version-section svelte-7mkeya"><div class="version-row svelte-7mkeya"><span class="version-label svelte-7mkeya">Upgrade Stack</span></div> <div class="version-input-row svelte-7mkeya"><button class="btn btn-sm btn-secondary svelte-7mkeya"><!></button></div> <p class="version-hint svelte-7mkeya">Downloads the latest assets, pulls images, and restarts services. Backs up current config first.</p></div> <!></div></div>`);function Dt(e,t){C(t,!0);function r(e){let t=[];return e.distTag?t.push(e.distTag):e.prerelease&&t.push(`pre-release`),t.length?`${e.version} (${t.join(`, `)})`:e.version}var a=Et(),c=v(s(a),2),u=s(c),p=s(u),m=v(s(p),2),h=s(m,!0);F(m),F(p);var _=v(p,2),b=s(_),x=e=>{N(e,ft())},S=e=>{var n=mt(),r=s(n);r.value=r.__value=`latest`,g(v(r),17,()=>t.releases,e=>e.tag,(e,t)=>{var n=pt(),r=s(n);F(n);var i={};o(()=>{f(r,`${l(t).tag??``}${l(t).prerelease?` (pre-release)`:``}`),i!==(i=l(t).tag)&&(n.value=(n.__value=l(t).tag)??``)}),N(e,n)}),F(n);var a;A(n),o(()=>{n.disabled=t.tagChangeLoading||t.anyDangerousLoading,a!==(a=t.selectedImageTag)&&(n.value=(n.__value=t.selectedImageTag)??``,k(n,t.selectedImageTag))}),i(`change`,n,e=>t.onSelectedImageTagChange(e.currentTarget.value)),N(e,n)},w=e=>{var n=ht();U(n),o(()=>{R(n,t.selectedImageTag),n.disabled=t.tagChangeLoading||t.anyDangerousLoading}),i(`input`,n,e=>t.onSelectedImageTagChange(e.currentTarget.value)),N(e,n)};n(b,e=>{t.releasesLoading?e(x):t.releases.length>0?e(S,1):e(w,-1)});var T=v(b,2),D=s(T),O=e=>{var t=gt();$(y(t),{}),E(),N(e,t)},M=e=>{N(e,d(`Pull & Restart`))};n(D,e=>{t.tagChangeLoading?e(O):e(M,-1)}),F(T),F(_),E(2),F(u);var P=v(u,4),I=v(s(P),2),L=s(I),z=s(L),B=e=>{var t=_t();$(y(t),{}),E(),N(e,t)},V=e=>{N(e,d(`Upgrade to Latest`))};n(z,e=>{t.upgradeLoading?e(B):e(V,-1)}),F(L),F(I),E(2),F(P);var H=v(P,2),W=e=>{var a=Tt(),c=v(y(a),2),u=v(s(c),2),p=s(u),m=e=>{N(e,vt())},h=e=>{var n=bt();g(n,21,()=>t.uiVersions,e=>e.version,(e,t)=>{var n=yt(),i=s(n,!0);F(n);var a={};o(e=>{f(i,e),a!==(a=l(t).version)&&(n.value=(n.__value=l(t).version)??``)},[()=>r(l(t))]),N(e,n)}),F(n);var a;A(n),o(()=>{n.disabled=t.uiDownloadLoading,a!==(a=t.selectedUiTag)&&(n.value=(n.__value=t.selectedUiTag)??``,k(n,t.selectedUiTag))}),i(`change`,n,e=>t.onSelectedUiTagChange(e.currentTarget.value)),N(e,n)},_=e=>{var n=xt();U(n),o(()=>{R(n,t.selectedUiTag),n.disabled=t.uiDownloadLoading}),i(`input`,n,e=>t.onSelectedUiTagChange(e.currentTarget.value)),N(e,n)};n(p,e=>{t.uiVersionsLoading?e(m):t.uiVersions.length>0?e(h,1):e(_,-1)});var b=v(p,2),x=s(b),S=e=>{var t=St();$(y(t),{}),E(),N(e,t)},C=e=>{N(e,d(`Download`))};n(x,e=>{t.uiDownloadLoading?e(S):e(C,-1)}),F(b),F(u);var w=v(u,2),T=e=>{var n=Ct(),r=v(s(n));F(n),i(`click`,r,function(...e){t.onRestartApp?.apply(this,e)}),N(e,n)},D=e=>{N(e,wt())};n(w,e=>{t.uiDownloadReady?e(T):e(D,-1)}),F(c),o(e=>b.disabled=e,[()=>!t.selectedUiTag.trim()||t.uiDownloadLoading]),i(`click`,b,()=>{t.selectedUiTag.trim()&&t.onDownloadUiVersion(t.selectedUiTag.trim())}),N(e,a)};n(H,e=>{t.inElectron&&e(W)}),F(c),F(a),o(e=>{f(h,t.currentImageTag||`—`),T.disabled=e,L.disabled=t.anyDangerousLoading||!t.tokenStored},[()=>!t.selectedImageTag.trim()||t.tagChangeLoading||t.anyDangerousLoading]),i(`click`,T,()=>{t.selectedImageTag.trim()&&t.onSetImageTag(t.selectedImageTag.trim())}),i(`click`,L,function(...e){t.onUpgradeStack?.apply(this,e)}),N(e,a),j()}p([`change`,`input`,`click`]);var Ot=M(`<div class="empty-state svelte-1dv4ads"><!> <!> <!></div>`);function kt(e,r){var i=Ot(),a=s(i),o=e=>{var n=t();h(y(n),()=>r.icon),N(e,n)};n(a,e=>{r.icon&&e(o)});var c=v(a,2);h(c,()=>r.children);var l=v(c,2),u=e=>{var n=t();h(y(n),()=>r.action),N(e,n)};n(l,e=>{r.action&&e(u)}),F(i),N(e,i)}var At=M(`<option> </option>`),jt=M(`<p class="ss-error svelte-180dg8u" role="alert"> </p>`),Mt=M(`<div class="ss-add-form svelte-180dg8u" role="group" aria-label="Add a new secret"><label class="ss-field svelte-180dg8u"><span class="ss-field-label svelte-180dg8u">Secret name</span> <input class="form-input" placeholder="e.g. discord_bot_token" autocomplete="off" spellcheck="false"/></label> <label class="ss-field svelte-180dg8u"><span class="ss-field-label svelte-180dg8u">Value</span> <input class="form-input" type="password" placeholder="Paste the secret value" autocomplete="new-password"/></label> <!> <div class="ss-actions svelte-180dg8u"><button type="button" class="btn btn-primary btn-sm"> </button> <button type="button" class="btn btn-secondary btn-sm">Cancel</button></div></div>`),Nt=M(`<div class="secret-select svelte-180dg8u"><div class="ss-row svelte-180dg8u"><select class="form-input ss-select svelte-180dg8u"><option> </option><!></select> <button type="button" class="btn btn-secondary ss-add-btn svelte-180dg8u"><svg aria-hidden="true" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svelte-180dg8u"><path d="M12 5v14"></path><path d="M5 12h14"></path></svg> <span class="ss-add-label svelte-180dg8u">New</span></button></div> <!></div>`);function Pt(t,r){C(r,!0);let a=S(r,`value`,15,``),c=S(r,`id`,3,`secret-select`),u=e(b([])),d=e(!0),p=e(!1),h=e(``),_=e(``),y=e(!1),x=e(``),w=e(void 0);async function T(){m(d,!0);try{let{files:e}=await ce();m(u,e.map(e=>e.name).sort((e,t)=>e.localeCompare(t)),!0)}catch{m(u,[],!0)}finally{m(d,!1)}}B(T);function E(e){a(e.currentTarget.value),r.onChange?.(a())}function O(){m(p,!0),m(x,``),m(h,``),m(_,``),queueMicrotask(()=>l(w)?.focus())}function M(){m(p,!1),m(x,``)}async function I(){let e=l(h).trim();if(!e){m(x,`Name is required.`);return}if(!l(_)){m(x,`Value is required.`);return}if(!l(y)){m(y,!0),m(x,``);try{await Z(e,l(_)),await T(),a(e),r.onChange?.(e),m(p,!1)}catch(e){m(x,e instanceof Error?e.message:`Could not save secret.`,!0)}finally{m(y,!1)}}}function L(e){e.key===`Escape`&&(e.preventDefault(),M())}var R=Nt(),z=s(R),H=s(z),W=s(H),G=s(W,!0);F(W),W.value=W.__value=``,g(v(W),16,()=>l(u),e=>e,(e,t)=>{var n=At(),r=s(n,!0);F(n);var i={};o(()=>{f(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),N(e,n)}),F(H);var K;A(H);var ee=v(H,2);F(z);var te=v(z,2),ne=e=>{var t=Mt(),r=s(t),a=v(s(r),2);U(a),V(a,e=>m(w,e),()=>l(w)),F(r);var c=v(r,2),u=v(s(c),2);U(u),F(c);var d=v(c,2),p=e=>{var t=jt(),n=s(t,!0);F(t),o(()=>f(n,l(x))),N(e,t)};n(d,e=>{l(x)&&e(p)});var g=v(d,2),b=s(g),S=s(b,!0);F(b);var C=v(b,2);F(g),F(t),o(()=>{b.disabled=l(y),f(S,l(y)?`Saving…`:`Save & select`),C.disabled=l(y)}),i(`keydown`,a,L),P(a,()=>l(h),e=>m(h,e)),i(`keydown`,u,L),P(u,()=>l(_),e=>m(_,e)),i(`click`,b,I),i(`click`,C,M),N(e,t)};n(te,e=>{l(p)&&e(ne)}),F(R),o(()=>{D(H,`id`,c()),H.disabled=l(d)||l(p),f(G,l(d)?`Loading secrets…`:`Select a secret…`),K!==(K=a())&&(H.value=(H.__value=a())??``,k(H,a())),ee.disabled=l(p)}),i(`change`,H,E),i(`click`,ee,O),N(t,R),j()}p([`change`,`click`,`keydown`]);var Ft=M(`<footer class="drawer-footer svelte-1u2o1qj"><!></footer>`),It=M(`<div class="drawer-scrim svelte-1u2o1qj"></div> <div class="drawer svelte-1u2o1qj" role="dialog" aria-modal="true" tabindex="-1"><header class="drawer-header svelte-1u2o1qj"><!> <h3 class="drawer-title svelte-1u2o1qj"> </h3> <button class="drawer-close svelte-1u2o1qj" aria-label="Close"><svg aria-hidden="true" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M18 6 6 18"></path><path d="m6 6 12 12"></path></svg></button></header> <div class="drawer-body svelte-1u2o1qj"><!></div> <!></div>`,1);function Lt(e,r){C(r,!0);let a=S(r,`width`,3,`32rem`);function c(e){return Array.from(e.querySelectorAll(`a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])`)).filter(e=>!e.hasAttribute(`hidden`)&&e.getAttribute(`aria-hidden`)!==`true`)}function l(e){let t=document.activeElement,n=e.querySelector(`.drawer-body`);return((n&&c(n)[0])??c(e)[0]??e).focus(),()=>t?.focus?.()}function u(e){if(e.key===`Escape`){r.onClose();return}if(e.key!==`Tab`)return;let t=e.currentTarget,n=c(t);if(n.length===0){e.preventDefault(),t.focus();return}let i=n[0],a=n[n.length-1],o=document.activeElement;e.shiftKey&&(o===i||o===t)?(e.preventDefault(),a.focus()):!e.shiftKey&&o===a&&(e.preventDefault(),i.focus())}var d=t(),p=y(d),m=e=>{var c=It(),d=y(c),p=v(d,2),m=s(p),g=s(m),_=e=>{var n=t();h(y(n),()=>r.headerStart),N(e,n)};n(g,e=>{r.headerStart&&e(_)});var b=v(g,2),S=s(b,!0);F(b);var C=v(b,2);F(m);var w=v(m,2);h(s(w),()=>r.children),F(w);var T=v(w,2),E=e=>{var t=Ft();h(s(t),()=>r.footer),F(t),N(e,t)};n(T,e=>{r.footer&&e(E)}),F(p),K(p,()=>l),o(()=>{x(p,`--drawer-width: ${a()??``}`),D(p,`aria-label`,r.title),f(S,r.title)}),i(`click`,d,function(...e){r.onClose?.apply(this,e)}),i(`keydown`,p,u),i(`click`,C,function(...e){r.onClose?.apply(this,e)}),N(e,c)};n(p,e=>{r.open&&e(m)}),N(e,d),j()}p([`click`,`keydown`]);var Rt=M(`<div class="loading-state"><!> <span>Loading addons...</span></div>`),zt=M(`<div class="error-state svelte-87zh26"><span> </span> <button class="btn btn-secondary btn-sm">Retry</button></div>`),Bt=u(`<svg aria-hidden="true" width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2L2 7l10 5 10-5-10-5z"></path><path d="M2 17l10 5 10-5"></path><path d="M2 12l10 5 10-5"></path></svg>`),Vt=M(`<p>No addons found in registry/addons/.</p>`),Ht=M(`<button class="btn btn-sm btn-secondary" aria-label="Configure Voice addon settings">Configure</button>`),Ut=M(`<button class="btn btn-sm btn-secondary">Credentials</button>`),Wt=M(`<div class="addon-row svelte-87zh26"><span class="addon-col addon-col--name addon-name svelte-87zh26"> </span> <span class="addon-col addon-col--status svelte-87zh26"><span> </span></span> <span class="addon-col addon-col--actions svelte-87zh26"><!> <button><!></button></span></div>`),Gt=M(`<div class="addon-table svelte-87zh26"><div class="addon-table-header svelte-87zh26"><span class="addon-col addon-col--name svelte-87zh26">Addon</span> <span class="addon-col addon-col--status svelte-87zh26">Status</span> <span class="addon-col addon-col--actions svelte-87zh26"></span></div> <!></div>`),Kt=M(`<button class="btn btn-secondary btn-sm">Cancel</button> <button class="btn btn-primary btn-sm"><!> Save</button>`,1),qt=M(`<div class="creds-loading svelte-87zh26"><!> Loading credentials…</div>`),Jt=M(`<p class="creds-empty svelte-87zh26">This addon has no configurable env vars (compose overlay only).</p>`),Yt=M(`<span class="creds-tag svelte-87zh26">sensitive</span>`),Xt=M(`<span class="creds-tag creds-tag--set svelte-87zh26">set</span>`),Zt=M(`<p class="creds-desc svelte-87zh26"> </p>`),Qt=M(`<p class="creds-desc svelte-87zh26">A value is already set — choose a secret to replace it.</p>`),$t=M(`<!> <!>`,1),en=M(`<input type="text" class="form-input svelte-87zh26" autocomplete="off"/>`),tn=M(`<div class="creds-row svelte-87zh26"><label class="creds-label svelte-87zh26"><code class="svelte-87zh26"> </code> <!> <!></label> <!> <!></div>`),nn=M(`<p class="creds-hint svelte-87zh26">Values are written to <code>knowledge/env/stack.env</code> and read by the addon container on next recreate.</p> <!>`,1),rn=M(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2>Addons</h2> <p class="panel-subtitle">Optional features you can enable or disable. Credentials are written to the stack config and applied when the addon container restarts.</p></div> <button class="btn btn-secondary btn-sm"><!> Refresh</button></div> <div class="panel-body panel-body--flush"><!></div> <!></div>`);function an(r,a){C(a,!0);let c={api:`API`,ssh:`SSH`,ui:`UI`};function u(e){return e.split(/[-_]/).filter(Boolean).map(e=>c[e.toLowerCase()]??e.charAt(0).toUpperCase()+e.slice(1)).join(` `)}let p=e(b([])),h=e(!1),_=e(``),x=e(null),S=e(null),w=b({}),T=b({}),O=b({}),k=e(null),A=e(null);async function M(e,t,n){if(!n){T[e][t]=``;return}try{let{value:r}=await oe(n);T[e][t]=r}catch(e){let t=e instanceof Error?e.message:String(e);Q.push(`error`,`Could not read secret: ${t}`)}}async function I(){m(h,!0),m(_,``);try{m(p,await De(),!0)}catch(e){let t=e instanceof Error?e.message:String(e);if(t.includes(`401`)||t.includes(`403`)){a.onAuthError();return}m(_,t,!0)}finally{m(h,!1)}}async function L(e,t){m(x,e,!0);try{await le(e,t),await I()}catch(e){let t=e instanceof Error?e.message:String(e);if(t.includes(`401`)||t.includes(`403`)){a.onAuthError();return}m(_,t,!0)}finally{m(x,null)}}function R(){m(S,null)}async function z(e){if(m(S,e,!0),!w[e]){m(k,e,!0);try{let t=await te(e);w[e]=t;let n={},r={};for(let e of t)n[e.key]=e.sensitive?``:e.value,e.sensitive&&(r[e.key]=``);T[e]=n,O[e]=r}catch(e){let t=e instanceof Error?e.message:String(e);if(t.includes(`401`)||t.includes(`403`)){a.onAuthError();return}Q.push(`error`,`Could not load credentials: ${t}`)}finally{m(k,null)}}}async function V(e){m(A,e,!0);try{let t=w[e]??[],n=new Set(t.filter(e=>e.sensitive).map(e=>e.key)),r={},i=T[e]??{};for(let[e,t]of Object.entries(i))n.has(e)&&t===``||(r[e]=t);if(Object.keys(r).length===0){Q.push(`error`,`Nothing to save.`);return}let{updated:a}=await me(e,r);Q.push(`success`,`Saved ${a.length} field(s). Recreate the addon container to apply.`);let o=await te(e);w[e]=o;let s={...i};for(let e of o)e.sensitive&&(s[e.key]=``);T[e]=s}catch(e){let t=e instanceof Error?e.message:String(e);if(t.includes(`401`)||t.includes(`403`)){a.onAuthError();return}Q.push(`error`,`Save failed: ${t}`)}finally{m(A,null)}}B(()=>{I()});var G=rn(),K=s(G),ee=v(s(K),2),ne=s(ee),q=e=>{$(e,{})};n(ne,e=>{l(h)&&e(q)}),E(),F(ee),F(K);var J=v(K,2),re=s(J),Y=e=>{var t=Rt();$(s(t),{}),E(2),F(t),N(e,t)},X=e=>{var t=zt(),n=s(t),r=s(n,!0);F(n);var a=v(n,2);F(t),o(()=>f(r,l(_))),i(`click`,a,()=>I()),N(e,t)},Z=e=>{kt(e,{icon:e=>{N(e,Bt())},children:(e,t)=>{N(e,Vt())},$$slots:{icon:!0,default:!0}})},ie=e=>{var t=Gt();g(v(s(t),2),17,()=>l(p),e=>e.name,(e,t)=>{var r=Wt(),c=s(r),p=s(c,!0);F(c);var m=v(c,2),h=s(m);let g;var _=s(h,!0);F(h),F(m);var y=v(m,2),b=s(y),S=e=>{var t=Ht();i(`click`,t,()=>a.onNavigate?.(`voice`)),N(e,t)},C=e=>{var n=Ut();o(()=>n.disabled=!l(t).available),i(`click`,n,()=>void z(l(t).name)),N(e,n)};n(b,e=>{l(t).name===`voice`&&l(t).enabled?e(S):e(C,-1)});var w=v(b,2);let T;var E=s(w),O=e=>{$(e,{})},k=e=>{var n=d();o(()=>f(n,l(t).enabled?`Disable`:`Enable`)),N(e,n)};n(E,e=>{l(x)===l(t).name?e(O):e(k,-1)}),F(w),F(y),F(r),o(e=>{D(c,`title`,l(t).name),f(p,e),g=W(h,1,`badge`,null,g,{"badge-enabled":l(t).enabled,"badge-disabled":!l(t).enabled}),f(_,l(t).enabled?`Enabled`:`Disabled`),T=W(w,1,`btn btn-sm`,null,T,{"btn-danger":l(t).enabled,"btn-outline":!l(t).enabled}),w.disabled=l(x)===l(t).name||!l(t).available},[()=>u(l(t).name)]),i(`click`,w,()=>L(l(t).name,!l(t).enabled)),N(e,r)}),F(t),N(e,t)};n(re,e=>{l(h)&&l(p).length===0?e(Y):l(_)?e(X,1):l(p).length===0?e(Z,2):e(ie,-1)}),F(J);var ae=v(J,2),se=e=>{let r=H(()=>l(S));{let a=e=>{var t=Kt(),r=y(t),a=v(r,2),c=s(a),u=e=>{$(e,{})};n(c,e=>{l(A)===l(S)&&e(u)}),E(),F(a),o(()=>a.disabled=!l(S)||l(A)===l(S)||(w[l(S)]?.length??0)===0),i(`click`,r,R),i(`click`,a,()=>l(S)&&void V(l(S))),N(e,t)},c=H(()=>u(l(r)));Lt(e,{open:!0,get title(){return`${l(c)??``} credentials`},onClose:R,footer:a,children:(e,i)=>{var a=t(),c=y(a),u=e=>{var t=qt();$(s(t),{}),E(),F(t),N(e,t)},d=e=>{N(e,Jt())},p=e=>{var t=nn();g(v(y(t),2),17,()=>w[l(r)]??[],e=>e.key,(e,t)=>{var i=tn(),a=s(i),c=s(a),u=s(c,!0);F(c);var d=v(c,2),p=e=>{N(e,Yt())};n(d,e=>{l(t).sensitive&&e(p)});var m=v(d,2),h=e=>{N(e,Xt())};n(m,e=>{l(t).sensitive&&l(t).set&&e(h)}),F(a);var g=v(a,2),_=e=>{var n=Zt(),r=s(n,!0);F(n),o(()=>f(r,l(t).description)),N(e,n)};n(g,e=>{l(t).description&&e(_)});var b=v(g,2),x=e=>{var i=$t(),a=y(i);Pt(a,{get id(){return`cred-${l(r)??``}-${l(t).key??``}`},onChange:e=>void M(l(r),l(t).key,e),get value(){return O[l(r)][l(t).key]},set value(e){O[l(r)][l(t).key]=e}});var o=v(a,2),s=e=>{N(e,Qt())};n(o,e=>{l(t).set&&e(s)}),N(e,i)},S=e=>{var n=en();U(n),o(()=>{D(n,`id`,`cred-${l(r)??``}-${l(t).key??``}`),D(n,`placeholder`,l(t).default)}),P(n,()=>T[l(r)][l(t).key],e=>T[l(r)][l(t).key]=e),N(e,n)};n(b,e=>{l(t).sensitive?e(x):e(S,-1)}),F(i),o(()=>{D(a,`for`,`cred-${l(r)??``}-${l(t).key??``}`),f(u,l(t).key)}),N(e,i)}),N(e,t)};n(c,e=>{l(k)===l(r)?e(u):(w[l(r)]?.length??0)===0?e(d,1):e(p,-1)}),N(e,a)},$$slots:{footer:!0,default:!0}})}};n(ae,e=>{l(S)&&e(se)}),F(G),o(()=>ee.disabled=l(h)),i(`click`,ee,()=>I()),N(r,G),j()}p([`click`]);var on=M(`<div class="panel-header-actions"><!></div>`),sn=M(`<div class="panel"><div class="panel-header"><h2> </h2> <!></div> <!></div>`);function cn(e,t){var r=sn(),i=s(r),a=s(i),c=s(a,!0);F(a);var l=v(a,2),u=e=>{var n=on();h(s(n),()=>t.actions),F(n),N(e,n)};n(l,e=>{t.actions&&e(u)}),F(i),h(v(i,2),()=>t.children),F(r),o(()=>{D(r,`role`,t.role),f(c,t.title)}),N(e,r)}function ln(e){let t=e.indexOf(`@`),n=t>-1?e.slice(0,t):e,r=n.lastIndexOf(`:`);return r>-1?{name:n.slice(0,r),tag:n.slice(r+1)}:{name:n,tag:`latest`}}function un(e){return e===`running`?`success`:e===`exited`||e===`dead`||e===`stopped`?`danger`:e===`restarting`||e===`paused`?`warning`:`idle`}function dn(e){return e?e.charAt(0).toUpperCase()+e.slice(1):e??``}var fn=M(`<span class="ct-not-created svelte-1clpuus">--</span>`),pn=M(`<span class="tag-badge"> </span>`),mn=M(`<span class="ct-not-created svelte-1clpuus">--</span>`),hn=M(`<button class="container-table-row container-table-row--clickable svelte-1clpuus"><span class="ct-col ct-col--name"><span></span> <span class="ct-service-name svelte-1clpuus"> </span></span> <span class="ct-col ct-col--image ct-mono svelte-1clpuus"><!></span> <span class="ct-col ct-col--tag"><!></span> <span class="ct-col ct-col--status"><span> </span></span> <span class="ct-col ct-col--actions"><svg aria-hidden="true" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg></span></button>`);function gn(e,t){C(t,!0);let r=H(()=>t.entry.docker?ln(t.entry.docker.Image):null);var a=hn(),c=s(a),u=s(c),p=v(u,2),m=s(p,!0);F(p),F(c);var h=v(c,2),g=s(h),_=e=>{var t=d();o(()=>f(t,l(r).name)),N(e,t)},y=e=>{N(e,fn())};n(g,e=>{l(r)?e(_):e(y,-1)}),F(h);var b=v(h,2),x=s(b),S=e=>{var t=pn(),n=s(t,!0);F(t),o(()=>f(n,l(r).tag)),N(e,t)},w=e=>{N(e,mn())};n(x,e=>{l(r)?e(S):e(w,-1)}),F(b);var T=v(b,2),E=s(T),O=s(E,!0);F(E),F(T);var k=v(T,2),A=s(k);let M;F(k),F(a),o((e,n,r)=>{D(a,`aria-expanded`,t.selected),W(u,1,`ct-indicator ct-indicator--${e??``}`,`svelte-1clpuus`),f(m,t.entry.service),W(E,1,`badge badge-${n??``}`,`svelte-1clpuus`),f(O,r),M=W(A,0,`svelte-1clpuus`,null,M,{"ct-chevron-open":t.selected})},[()=>un(t.entry.state),()=>un(t.entry.state),()=>dn(t.entry.state)]),i(`click`,a,function(...e){t.onToggle?.apply(this,e)}),N(e,a),j()}p([`click`]);var _n=M(`<span class="detail-mono detail-digest svelte-17lh9yz"> </span>`),vn=M(`<div class="detail-item svelte-17lh9yz"><span class="detail-label svelte-17lh9yz">Image Name</span> <span class="detail-value detail-mono svelte-17lh9yz"> </span></div> <div class="detail-item svelte-17lh9yz"><span class="detail-label svelte-17lh9yz">Tag / Digest</span> <span class="detail-value svelte-17lh9yz"><span class="tag-badge tag-badge--lg"> </span> <!></span></div>`,1),yn=M(`<div class="detail-item svelte-17lh9yz"><span class="detail-label svelte-17lh9yz">Health</span> <span class="detail-value svelte-17lh9yz"><span> </span></span></div>`),bn=M(`<div class="detail-item svelte-17lh9yz"><span class="detail-label svelte-17lh9yz">Ports</span> <span class="detail-value detail-mono svelte-17lh9yz"> </span></div>`),xn=M(`<div class="detail-item svelte-17lh9yz"><span class="detail-label svelte-17lh9yz">Uptime</span> <span class="detail-value svelte-17lh9yz"> </span></div>`),Sn=M(`<div class="detail-item svelte-17lh9yz"><span class="detail-label svelte-17lh9yz">Created</span> <span class="detail-value svelte-17lh9yz"> </span></div>`),Cn=M(`<div class="detail-item svelte-17lh9yz"><span class="detail-label svelte-17lh9yz">Project</span> <span class="detail-value detail-mono svelte-17lh9yz"> </span></div>`),wn=M(`<div class="detail-grid svelte-17lh9yz"><div class="detail-item svelte-17lh9yz"><span class="detail-label svelte-17lh9yz">Container ID</span> <span class="detail-value detail-mono svelte-17lh9yz"> </span></div> <div class="detail-item svelte-17lh9yz"><span class="detail-label svelte-17lh9yz">Name</span> <span class="detail-value detail-mono svelte-17lh9yz"> </span></div> <div class="detail-item svelte-17lh9yz"><span class="detail-label svelte-17lh9yz">Image</span> <span class="detail-value detail-mono svelte-17lh9yz"> </span></div> <!> <div class="detail-item svelte-17lh9yz"><span class="detail-label svelte-17lh9yz">State</span> <span class="detail-value svelte-17lh9yz"><span> </span></span></div> <div class="detail-item svelte-17lh9yz"><span class="detail-label svelte-17lh9yz">Status</span> <span class="detail-value svelte-17lh9yz"> </span></div> <!> <!> <!> <!> <!></div>`),Tn=M(`<div class="detail-not-created svelte-17lh9yz"><p class="svelte-17lh9yz">Container has not been created yet. Use <strong>Start</strong> to create and start it.</p></div>`),En=M(`<div role="status"> </div>`),Dn=M(`<div class="confirm-bar svelte-17lh9yz" role="alert"><span class="confirm-text svelte-17lh9yz"> <strong> </strong>?</span> <div class="confirm-actions svelte-17lh9yz"><button class="btn btn-danger btn-sm">Confirm</button> <button class="btn btn-secondary btn-sm">Cancel</button></div></div>`),On=M(`<button class="btn btn-primary btn-sm"><!> Start</button>`),kn=M(`<button class="btn btn-secondary btn-sm"><!> Start</button> <button class="btn btn-danger btn-sm"><!> Stop</button> <button class="btn btn-secondary btn-sm"><!> Restart</button>`,1),An=M(`<div class="detail-actions svelte-17lh9yz"><!></div>`),jn=M(`<div class="container-detail svelte-17lh9yz"><!> <!> <!></div>`);function Mn(e,t){C(t,!0);let r=H(()=>t.entry.docker?ln(t.entry.docker.Image):null),a=H(()=>t.actionInFlight!==null),c=H(()=>!t.entry.docker);var u=jn(),d=s(u),p=e=>{let i=H(()=>t.entry.docker);var a=wn(),c=s(a),u=v(s(c),2),d=s(u,!0);F(u),F(c);var p=v(c,2),m=v(s(p),2),h=s(m,!0);F(m),F(p);var g=v(p,2),_=v(s(g),2),b=s(_,!0);F(_),F(g);var x=v(g,2),S=e=>{var t=vn(),a=y(t),c=v(s(a),2),u=s(c,!0);F(c),F(a);var d=v(a,2),p=v(s(d),2),m=s(p),h=s(m,!0);F(m);var g=v(m,2),_=e=>{var t=_n(),n=s(t);F(t),o(e=>f(n,`${e??``}...`),[()=>l(i).Image.split(`@`)[1]?.slice(0,19)]),N(e,t)},b=H(()=>l(i).Image.includes(`@`));n(g,e=>{l(b)&&e(_)}),F(p),F(d),o(()=>{f(u,l(r).name),f(h,l(r).tag)}),N(e,t)};n(x,e=>{l(r)&&e(S)});var C=v(x,2),w=v(s(C),2),T=s(w),E=s(T,!0);F(T),F(w),F(C);var D=v(C,2),O=v(s(D),2),k=s(O,!0);F(O),F(D);var A=v(D,2),j=e=>{var t=yn(),n=v(s(t),2),r=s(n);let a;var c=s(r,!0);F(r),F(n),F(t),o(e=>{a=W(r,1,`badge`,null,a,e),f(c,l(i).Health)},[()=>({"badge-success":l(i).Health===`healthy`,"badge-warning":l(i).Health===`starting`,"badge-danger":l(i).Health===`unhealthy`,"badge-idle":![`healthy`,`starting`,`unhealthy`].includes(l(i).Health)})]),N(e,t)};n(A,e=>{l(i).Health&&e(j)});var M=v(A,2),P=e=>{var t=bn(),n=v(s(t),2),r=s(n,!0);F(n),F(t),o(()=>f(r,l(i).Ports)),N(e,t)};n(M,e=>{l(i).Ports&&e(P)});var I=v(M,2),L=e=>{var t=xn(),n=v(s(t),2),r=s(n,!0);F(n),F(t),o(()=>f(r,l(i).RunningFor)),N(e,t)};n(I,e=>{l(i).RunningFor&&e(L)});var R=v(I,2),z=e=>{var t=Sn(),n=v(s(t),2),r=s(n,!0);F(n),F(t),o(()=>f(r,l(i).CreatedAt)),N(e,t)};n(R,e=>{l(i).CreatedAt&&e(z)});var B=v(R,2),V=e=>{var t=Cn(),n=v(s(t),2),r=s(n,!0);F(n),F(t),o(()=>f(r,l(i).Project)),N(e,t)};n(B,e=>{l(i).Project&&e(V)}),F(a),o((e,t)=>{f(d,l(i).ID),f(h,l(i).Name||l(i).Names),f(b,l(i).Image),W(T,1,`badge badge-${e??``}`,`svelte-17lh9yz`),f(E,t),f(k,l(i).Status)},[()=>un(l(i).State),()=>dn(l(i).State)]),N(e,a)},m=e=>{N(e,Tn())};n(d,e=>{t.entry.docker?e(p):e(m,-1)});var h=v(d,2),g=e=>{var n=En(),r=s(n,!0);F(n),o(()=>{W(n,1,`action-feedback action-feedback--${t.feedback.type??``}`,`svelte-17lh9yz`),f(r,t.feedback.message)}),N(e,n)};n(h,e=>{t.feedback&&e(g)});var _=v(h,2),b=e=>{var n=Dn(),r=s(n),a=s(r),c=v(a),l=s(c,!0);F(c),E(),F(r);var u=v(r,2),d=s(u),p=v(d,2);F(u),F(n),o(e=>{f(a,`${e??``} `),f(l,t.entry.service)},[()=>t.confirmAction.charAt(0).toUpperCase()+t.confirmAction.slice(1)]),i(`click`,d,e=>t.onExecuteAction(t.confirmAction,e)),i(`click`,p,e=>t.onCancelConfirm(e)),N(e,n)},x=e=>{var r=An(),u=s(r),d=e=>{var r=On(),c=s(r),u=e=>{$(e,{size:12})};n(c,e=>{t.actionInFlight===`start`&&e(u)}),E(),F(r),o(()=>r.disabled=l(a)),i(`click`,r,e=>t.onRequestAction(`start`,e)),N(e,r)},f=e=>{var r=kn(),c=y(r),u=s(c),d=e=>{$(e,{size:12})};n(u,e=>{t.actionInFlight===`start`&&e(d)}),E(),F(c);var f=v(c,2),p=s(f),m=e=>{$(e,{size:12})};n(p,e=>{t.actionInFlight===`stop`&&e(m)}),E(),F(f);var h=v(f,2),g=s(h),_=e=>{$(e,{size:12})};n(g,e=>{t.actionInFlight===`restart`&&e(_)}),E(),F(h),o(()=>{c.disabled=l(a),f.disabled=l(a),h.disabled=l(a)}),i(`click`,c,e=>t.onRequestAction(`start`,e)),i(`click`,f,e=>t.onRequestAction(`stop`,e)),i(`click`,h,e=>t.onRequestAction(`restart`,e)),N(e,r)};n(u,e=>{l(c)?e(d):e(f,-1)}),F(r),N(e,r)};n(_,e=>{t.confirmAction?e(b):e(x,-1)}),F(u),N(e,u),j()}p([`click`]);var Nn=M(`<p>Loading container status...</p>`),Pn=M(`<p class="text-danger svelte-llpoy7"> </p> <button class="btn btn-secondary btn-sm svelte-llpoy7">Try Again</button>`,1),Fn=M(`<p>Docker is not available on this host.</p> <p class="hint svelte-llpoy7">Ensure Docker is running and the admin service has access to the Docker socket.</p>`,1),In=M(`<p>No containers found. Services may not be installed yet.</p>`),Ln=M(`<div class="empty-state svelte-llpoy7"><svg aria-hidden="true" width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="2" width="20" height="8" rx="2" ry="2"></rect><rect x="2" y="14" width="20" height="8" rx="2" ry="2"></rect><line x1="6" y1="6" x2="6.01" y2="6"></line><line x1="6" y1="18" x2="6.01" y2="18"></line></svg> <!></div>`);function Rn(e,t){C(t,!0);var r=Ln(),a=v(s(r),2),c=e=>{N(e,Nn())},l=e=>{var n=Pn(),r=y(n),a=s(r,!0);F(r);var c=v(r,2);o(()=>{f(a,t.error),c.disabled=!t.tokenStored}),i(`click`,c,function(...e){t.onRefresh?.apply(this,e)}),N(e,n)},u=e=>{var t=Fn();E(2),N(e,t)},d=e=>{N(e,In())};n(a,e=>{t.loading?e(c):t.error?e(l,1):t.containerData&&!t.containerData.dockerAvailable?e(u,2):e(d,-1)}),F(r),N(e,r),j()}p([`click`]);var zn=M(`<span class="last-updated svelte-fnc5b8"> </span>`),Bn=M(`<!> <button class="btn btn-secondary btn-sm"><!> Pull Images</button> <button class="btn btn-secondary btn-sm"><!> Refresh</button>`,1),Vn=M(`<!> <!>`,1),Hn=M(`<div class="container-table svelte-fnc5b8"><div class="container-table-header svelte-fnc5b8"><span class="ct-col ct-col--name">Container</span> <span class="ct-col ct-col--image">Image</span> <span class="ct-col ct-col--tag">Tag</span> <span class="ct-col ct-col--status">Status</span> <span class="ct-col ct-col--actions"></span></div> <!></div>`),Un=M(`<div class="panel-body panel-body--flush"><!></div>`);function Wn(e,t){C(t,!0);let r=H(()=>t.serviceEntries.length>0),a=b({});function c(e){return a[e]||(a[e]={inFlight:null,confirm:null,feedback:null}),a[e]}function u(e,t,n){n.stopPropagation(),c(e).confirm=t}function d(e,t){t.stopPropagation(),c(e).confirm=null}async function p(e,n,r,i){i.stopPropagation();let a=c(e);a.confirm=null,a.inFlight=r,a.feedback=null;try{r===`start`?t.onStart(n):r===`stop`?t.onStop(n):t.onRestart(n),a.feedback={type:`success`,message:`${r.charAt(0).toUpperCase()+r.slice(1)} initiated`}}catch(e){a.feedback={type:`error`,message:`${r} failed: ${e instanceof Error?e.message:e}`}}a.inFlight=null,setTimeout(()=>{a.feedback=null},3e3)}cn(e,{title:`Container Status`,role:`tabpanel`,actions:e=>{var r=Bn(),a=y(r),c=e=>{var n=zn(),r=s(n);F(n),o(()=>f(r,`Updated ${t.lastUpdated??``}`)),N(e,n)};n(a,e=>{t.lastUpdated&&e(c)});var l=v(a,2),u=s(l),d=e=>{$(e,{})};n(u,e=>{t.pullLoading&&e(d)}),E(),F(l);var p=v(l,2),m=s(p),h=e=>{$(e,{})};n(m,e=>{t.loading&&e(h)}),E(),F(p),o(()=>{l.disabled=t.pullLoading||!t.tokenStored,p.disabled=t.loading||!t.tokenStored}),i(`click`,l,function(...e){t.onPullImages?.apply(this,e)}),i(`click`,p,function(...e){t.onRefresh?.apply(this,e)}),N(e,r)},children:(e,i)=>{var o=Un(),c=s(o),f=e=>{var r=Hn();g(v(s(r),2),17,()=>t.serviceEntries,e=>e.id,(e,r)=>{let i=H(()=>t.selectedContainerId===l(r).id);var o=Vn(),s=y(o);gn(s,{get entry(){return l(r)},get selected(){return l(i)},onToggle:()=>t.onToggleContainer(l(r).id)});var c=v(s,2),f=e=>{{let t=H(()=>a[l(r).id]?.inFlight??null),n=H(()=>a[l(r).id]?.confirm??null),i=H(()=>a[l(r).id]?.feedback??null);Mn(e,{get entry(){return l(r)},get actionInFlight(){return l(t)},get confirmAction(){return l(n)},get feedback(){return l(i)},onRequestAction:(e,t)=>u(l(r).id,e,t),onCancelConfirm:e=>d(l(r).id,e),onExecuteAction:(e,t)=>p(l(r).id,l(r).service,e,t)})}};n(c,e=>{l(i)&&e(f)}),N(e,o)}),F(r),N(e,r)},m=e=>{Rn(e,{get loading(){return t.loading},get error(){return t.error},get containerData(){return t.containerData},get tokenStored(){return t.tokenStored},get onRefresh(){return t.onRefresh}})};n(c,e=>{l(r)?e(f):e(m,-1)}),F(o),N(e,o)},$$slots:{actions:!0,default:!0}}),j()}p([`click`]);var Gn=M(`<div class="task-editor svelte-1xltcby"><div class="task-editor-head svelte-1xltcby"><span class="task-editor-name svelte-1xltcby"> </span> <span class="task-editor-hint svelte-1xltcby">Raw akm task file (YAML) — set <code>enabled</code>, <code>schedule</code>, <code>command</code>, etc.</span></div> <textarea class="task-editor-area svelte-1xltcby" spellcheck="false" rows="14"></textarea> <div class="task-editor-actions svelte-1xltcby"><button class="btn btn-secondary btn-sm">Cancel</button> <button class="btn btn-primary btn-sm"><!> Save</button></div></div>`),Kn=M(`<div class="automation-desc svelte-1xltcby"> </div>`),qn=M(`<span class="meta-item schedule-friendly svelte-1xltcby"> </span>`),Jn=M(`<span class="meta-item svelte-1xltcby"><code class="svelte-1xltcby"> </code></span> <span class="meta-item meta-tz svelte-1xltcby"> </span>`,1),Yn=M(`<div class="automation-card svelte-1xltcby"><div class="automation-row svelte-1xltcby"><div class="automation-main svelte-1xltcby"><div class="automation-name svelte-1xltcby"> <span> </span> <span class="badge badge-type svelte-1xltcby"> </span></div> <!></div> <div class="automation-meta svelte-1xltcby"><!></div></div> <div class="automation-footer svelte-1xltcby"><span class="automation-file svelte-1xltcby"> </span> <div class="automation-actions svelte-1xltcby"><button class="btn btn-ghost btn-sm">Edit</button> <button class="btn btn-ghost btn-sm">Delete</button></div></div></div>`),Xn=M(`<div class="automation-list svelte-1xltcby"></div>`),Zn=u(`<svg aria-hidden="true" width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>`),Qn=M(`<p>Loading automations...</p>`),$n=M(`<p class="text-danger svelte-1xltcby"> </p> <button class="btn btn-secondary btn-sm empty-state-btn svelte-1xltcby">Try Again</button>`,1),er=M(`<p>No automations configured.</p> <p class="empty-state-hint svelte-1xltcby">Drop <code class="svelte-1xltcby">.md</code> task files into <code class="svelte-1xltcby">~/.openpalm/knowledge/tasks/</code>, or install via <code class="svelte-1xltcby">akm</code>.</p>`,1),tr=M(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2>Automations</h2> <p class="panel-subtitle">Scheduled tasks read from <code>~/.openpalm/knowledge/tasks/</code>. Add or edit task files there to manage automations — changes take effect on refresh.</p></div> <div class="panel-header-actions"><button class="btn btn-secondary btn-sm">New task</button> <button class="btn btn-secondary btn-sm"><!> Refresh</button></div></div> <!> <div class="panel-body"><!></div></div>`);function nr(a,u){C(u,!0);let d=H(()=>u.data!==null&&Array.isArray(u.data.automations)&&u.data.automations.length>0),p=e(null),h=e(``),_=e(!1);async function b(e){if(!l(_)){m(_,!0);try{m(p,e,!0),m(h,(await Y(e)).content,!0)}catch(e){Q.push(`error`,e instanceof Error?e.message:`Failed to read task file.`),m(p,null)}finally{m(_,!1)}}}function x(){let e=(prompt(`New task file name (.yml):`,`my-task.yml`)??``).trim();e&&(m(p,e,!0),m(h,`schedule: '0 9 * * *'
2
- enabled: false
3
- description:
4
- command:
5
- - sh
6
- - -c
7
- - echo hello
8
- `))}function S(){m(p,null),m(h,``)}async function w(){if(!(!l(p)||l(_))){m(_,!0);try{await we(l(p),l(h)),Q.push(`success`,`Saved ${l(p)}. Refreshing…`),S(),u.onRefresh()}catch(e){Q.push(`error`,e instanceof Error?e.message:`Failed to save task file.`)}finally{m(_,!1)}}}async function T(e){if(!(l(_)||!confirm(`Delete task file "${e}"?`))){m(_,!0);try{await ke(e),Q.push(`success`,`Deleted ${e}.`),l(p)===e&&S(),u.onRefresh()}catch(e){Q.push(`error`,e instanceof Error?e.message:`Failed to delete task file.`)}finally{m(_,!1)}}}let O={"* * * * *":`Every minute`,"*/5 * * * *":`Every 5 minutes`,"*/15 * * * *":`Every 15 minutes`,"0 * * * *":`Every hour`,"0 0 * * *":`Daily at midnight`,"0 8 * * *":`Daily at 8 AM`,"0 0 * * 0":`Weekly (Sunday midnight)`,"0 3 * * 0":`Weekly (Sunday 3 AM)`,"0 4 * * 0":`Weekly (Sunday 4 AM)`};function k(e){let t=O[e];return t?{label:t,cron:e}:null}var A=tr(),M=s(A),I=v(s(M),2),L=s(I),R=v(L,2),z=s(R),B=e=>{$(e,{})};n(z,e=>{u.loading&&e(B)}),E(),F(R),F(I),F(M);var V=v(M,2),U=e=>{var t=Gn(),r=s(t),a=s(r),u=s(a,!0);F(a),E(2),F(r);var d=v(r,2);c(d);var g=v(d,2),y=s(g),b=v(y,2),x=s(b),C=e=>{$(e,{})};n(x,e=>{l(_)&&e(C)}),E(),F(b),F(g),F(t),o(()=>{f(u,l(p)),d.disabled=l(_),y.disabled=l(_),b.disabled=l(_)}),P(d,()=>l(h),e=>m(h,e)),i(`click`,y,S),i(`click`,b,()=>void w()),N(e,t)};n(V,e=>{l(p)&&e(U)});var G=v(V,2),K=s(G),ee=e=>{var t=Xn();g(t,21,()=>u.data.automations,r,(e,t)=>{let r=H(()=>k(l(t).schedule));var a=Yn(),c=s(a),d=s(c),p=s(d),m=s(p),h=v(m);let g;var x=s(h,!0);F(h);var S=v(h,2),C=s(S,!0);F(S),F(p);var w=v(p,2),E=e=>{var n=Kn(),r=s(n,!0);F(n),o(()=>f(r,l(t).description)),N(e,n)};n(w,e=>{l(t).description&&e(E)}),F(d);var O=v(d,2),A=s(O),j=e=>{var t=qn(),n=s(t,!0);F(t),o(()=>f(n,l(r).label)),N(e,t)},M=e=>{var n=Jn(),r=y(n),i=s(r),a=s(i,!0);F(i),F(r);var c=v(r,2),u=s(c,!0);F(c),o(()=>{f(a,l(t).schedule),f(u,l(t).timezone)}),N(e,n)};n(A,e=>{l(r)?.cron?e(j):e(M,-1)}),F(O),F(c);var P=v(c,2),I=s(P),L=s(I,!0);F(I);var R=v(I,2),z=s(R),B=v(z,2);F(R),F(P),F(a),o(()=>{f(m,`${l(t).name??``} `),g=W(h,1,`badge`,null,g,{"badge-enabled":l(t).enabled,"badge-disabled":!l(t).enabled}),f(x,l(t).enabled?`Enabled`:`Disabled`),f(C,l(t).action.type),f(L,l(t).fileName),z.disabled=l(_)||!u.tokenStored,B.disabled=l(_)||!u.tokenStored,D(B,`aria-label`,`Delete ${l(t).fileName??``}`)}),i(`click`,z,()=>void b(l(t).fileName)),i(`click`,B,()=>void T(l(t).fileName)),N(e,a)}),F(t),N(e,t)},te=e=>{kt(e,{icon:e=>{N(e,Zn())},children:(e,r)=>{var a=t(),c=y(a),l=e=>{N(e,Qn())},d=e=>{var t=$n(),n=y(t),r=s(n,!0);F(n);var a=v(n,2);o(()=>f(r,u.error)),i(`click`,a,function(...e){u.onRefresh?.apply(this,e)}),N(e,t)},p=e=>{var t=er();E(2),N(e,t)};n(c,e=>{u.loading?e(l):u.error?e(d,1):e(p,-1)}),N(e,a)},$$slots:{icon:!0,default:!0}})};n(K,e=>{l(d)&&u.data?e(ee):e(te,-1)}),F(G),F(A),o(()=>{L.disabled=l(_)||!u.tokenStored,R.disabled=u.loading||!u.tokenStored}),i(`click`,L,x),i(`click`,R,function(...e){u.onRefresh?.apply(this,e)}),N(a,A),j()}p([`click`]);var rr=M(`<div class="empty svelte-1ykz2x6"> </div>`),ir=M(`<span class="provider-meta svelte-1ykz2x6"> </span>`),ar=M(`<button type="button" class="provider-pick svelte-1ykz2x6"><span class="provider-name svelte-1ykz2x6"> </span> <!></button>`),or=M(`<!> <button type="button" class="provider-pick provider-pick--custom svelte-1ykz2x6"><span class="provider-name svelte-1ykz2x6">Custom provider</span> <span class="provider-meta svelte-1ykz2x6">OpenAI-compatible</span></button>`,1),sr=M(`<input type="search" class="form-input add-search svelte-1ykz2x6" placeholder="Search providers…" autocomplete="off"/> <div class="pick-list svelte-1ykz2x6"><!></div>`,1);function cr(t,r){C(r,!0);let c=e(``),u=H(()=>{let e=l(c).trim().toLowerCase();return e?r.providers.filter(t=>t.name.toLowerCase().includes(e)||t.id.toLowerCase().includes(e)):r.providers});Lt(t,{open:!0,title:`Add provider`,get onClose(){return r.onclose},children:(e,t)=>{var d=sr(),p=y(d);U(p),a(p,!0);var h=v(p,2),_=s(h),b=e=>{var t=rr(),n=s(t);F(t),o(()=>f(n,`No providers match "${l(c)??``}".`)),N(e,t)},x=e=>{var t=or(),a=y(t);g(a,17,()=>l(u),e=>e.id,(e,t)=>{var a=ar(),c=s(a),u=s(c,!0);F(c);var d=v(c,2),p=e=>{var n=ir(),r=s(n);F(n),o(()=>f(r,`${l(t).modelCount??``} models`)),N(e,n)};n(d,e=>{l(t).modelCount>0&&e(p)}),F(a),o(()=>f(u,l(t).name)),i(`click`,a,()=>r.onselect(l(t))),N(e,a)}),i(`click`,v(a,2),function(...e){r.oncustom?.apply(this,e)}),N(e,t)};n(_,e=>{l(u).length===0&&l(c)?e(b):e(x,-1)}),F(h),P(p,()=>l(c),e=>m(c,e)),N(e,d)},$$slots:{default:!0}}),j()}p([`click`]);var lr=M(`<p class="field-error svelte-353jzw"> </p>`),ur=M(`<p class="field-hint"> </p>`),dr=M(`<div class="form-field"><label class="form-label"> </label> <!> <!></div>`);function fr(e,t){var r=dr(),i=s(r),a=s(i,!0);F(i);var c=v(i,2);h(c,()=>t.children);var l=v(c,2),u=e=>{var n=lr(),r=s(n,!0);F(n),o(()=>f(r,t.error)),N(e,n)},d=e=>{var n=ur(),r=s(n,!0);F(n),o(()=>f(r,t.hint)),N(e,n)};n(l,e=>{t.error?e(u):t.hint&&e(d,1)}),F(r),o(()=>{D(i,`for`,t.for),f(a,t.label)}),N(e,r)}var pr=M(`<button type="button" class="connect-back svelte-1bnolke" aria-label="Back">←</button>`),mr=M(`<button type="button" class="btn btn-primary"><!> Continue</button>`),hr=M(`<div class="feedback feedback--error"><span> </span></div>`),gr=M(`<button type="button" class="auth-method-card svelte-1bnolke"><span class="method-label svelte-1bnolke"> </span> <span class="method-type svelte-1bnolke"> </span></button>`),_r=M(`<p class="field-hint"> </p> <div class="auth-method-group svelte-1bnolke"></div>`,1),vr=M(`<input id="connect-apikey" type="password" class="form-input" placeholder="API key" autocomplete="off"/>`),yr=M(`<p class="field-hint"> </p> <!>`,1),br=M(`<input id="connect-code" type="text" class="form-input" placeholder="Authorization code" autocomplete="off"/>`),xr=M(`<p class="field-hint">Visit <a target="_blank" rel="noopener" class="text-link">this link</a> </p> <!>`,1),Sr=M(`<p class="field-hint"> </p>`),Cr=M(`<p class="field-hint">Open <a target="_blank" rel="noopener" class="text-link"> </a> to continue.</p>`),wr=M(`<!> <!> <p class="field-hint"><!> Waiting for sign-in to complete…</p>`,1),Tr=M(`<!> <!>`,1);function Er(r,a){C(a,!0);let c=H(()=>a.provider.authMethods.filter(e=>!e.label.toLowerCase().includes(`headless`))),u=e(b(d(a.provider)));function d(e){let t=e.authMethods.filter(e=>!e.label.toLowerCase().includes(`headless`));return t.length===0?`api-form`:t.length===1?t[0].type===`oauth`?`oauth-code`:`api-form`:`method-picker`}let p=e(null),h=e(``),_=e(``),x=e(null),S=e(null),w=e(!1),T=e(null),O;function k(){O?.abort(),O=void 0}L(k);let A=H(()=>l(u)===`method-picker`?`Connect ${a.provider.name}`:l(p)?`Login with ${l(p).label}`:`Connect ${a.provider.name}`),M=H(()=>l(u)!==`method-picker`&&l(c).length>1);function I(e){m(p,e,!0),m(h,``),m(_,``),m(x,null),m(S,null),m(T,null),e.type===`oauth`?z(e):m(u,`api-form`)}function R(){k(),m(p,null),m(h,``),m(_,``),m(x,null),m(S,null),m(T,null),m(w,!1),m(u,`method-picker`)}async function z(e){m(w,!0),m(T,null);try{let t=await(await fetch(`/admin/providers/oauth/start`,{method:`POST`,headers:{...Ce(),"content-type":`application/json`},body:JSON.stringify({providerId:a.provider.id,methodIndex:String(e.index)})})).json();if(!t.ok||!t.oauth){m(T,t.message??`OAuth start failed.`,!0),m(u,`method-picker`);return}if(m(x,t.oauth.url,!0),m(S,t.oauth.instructions??null,!0),window.open(t.oauth.url,`_blank`,`noopener`),t.oauth.mode===`auto`){m(u,`oauth-auto`),O=new AbortController;let e=t.oauth.providerId,n=t.oauth.methodIndex;fetch(`/admin/providers/oauth/${encodeURIComponent(e)}/callback`,{method:`POST`,headers:{...Ce(),"content-type":`application/json`},body:JSON.stringify({method:n}),signal:O.signal}).then(e=>{l(u)===`oauth-auto`&&(e.ok?W(`Signed in successfully.`):(m(T,`Sign-in failed (${e.status}). Try again.`),m(u,`method-picker`)))}).catch(e=>{l(u)===`oauth-auto`&&(e instanceof DOMException&&e.name===`AbortError`||(m(T,e instanceof Error?e.message:`Authorization failed.`,!0),m(u,`method-picker`)))})}else m(u,`oauth-code`)}catch(e){m(T,e instanceof Error?e.message:`OAuth start failed.`,!0),m(u,`method-picker`)}finally{m(w,!1)}}async function B(){if(!l(h).trim()){m(T,`Enter an API key.`);return}m(w,!0),m(T,null);try{let e=await fetch(`/admin/opencode/providers/${encodeURIComponent(a.provider.id)}/auth`,{method:`POST`,headers:{...Ce(),"content-type":`application/json`},body:JSON.stringify({mode:`api_key`,apiKey:l(h).trim()})});if(!e.ok){m(T,(await e.json().catch(()=>({}))).message??`Save failed (${e.status})`,!0);return}W(`API key saved.`)}catch(e){m(T,e instanceof Error?e.message:`Request failed.`,!0)}finally{m(w,!1)}}async function V(){if(!l(p)||!l(_).trim()){m(T,`Paste the authorization code.`);return}m(w,!0),m(T,null);try{let e=await fetch(`/admin/providers/oauth/finish`,{method:`POST`,headers:{...Ce(),"content-type":`application/json`},body:JSON.stringify({providerId:a.provider.id,methodIndex:l(p).index,code:l(_).trim()})});if(!e.ok){m(T,(await e.json().catch(()=>({}))).message??`Submission failed (${e.status})`,!0);return}W(`Signed in successfully.`)}catch(e){m(T,e instanceof Error?e.message:`Request failed.`,!0)}finally{m(w,!1)}}function W(e){a.onaction?.({ok:!0,message:e,selectedProviderId:a.provider.id})}function G(e){e.key===`Enter`&&(l(u)===`api-form`?B():l(u)===`oauth-code`&&V())}Lt(r,{open:!0,get title(){return l(A)},onClose:()=>a.onclose?.(),headerStart:e=>{var r=t(),a=y(r),o=e=>{var t=pr();i(`click`,t,R),N(e,t)};n(a,e=>{l(M)&&e(o)}),N(e,r)},footer:e=>{var r=t(),a=y(r),c=e=>{var t=mr(),r=s(t),a=e=>{$(e,{})};n(r,e=>{l(w)&&e(a)}),E(),F(t),o(()=>t.disabled=l(w)),i(`click`,t,()=>l(u)===`api-form`?void B():void V()),N(e,t)};n(a,e=>{(l(u)===`api-form`||l(u)===`oauth-code`)&&e(c)}),N(e,r)},children:(e,t)=>{var r=Tr(),d=y(r),b=e=>{var t=hr(),n=s(t),r=s(n,!0);F(n),F(t),o(()=>f(r,l(T))),N(e,t)};n(d,e=>{l(T)&&e(b)});var C=v(d,2),O=e=>{var t=_r(),n=y(t),r=s(n);F(n);var u=v(n,2);g(u,21,()=>l(c),e=>e.index,(e,t)=>{var n=gr(),r=s(n),a=s(r,!0);F(r);var c=v(r,2),u=s(c,!0);F(c),F(n),o(()=>{f(a,l(t).label),f(u,l(t).type===`oauth`?`Browser sign-in`:`API key`)}),i(`click`,n,()=>I(l(t))),N(e,n)}),F(u),o(()=>f(r,`Select login method for ${a.provider.name??``}.`)),N(e,t)},k=e=>{var t=yr(),n=y(t),r=s(n);F(n),fr(v(n,2),{get label(){return`${a.provider.name??``} API key`},for:`connect-apikey`,children:(e,t)=>{var n=vr();U(n),o(()=>n.disabled=l(w)),i(`keydown`,n,G),P(n,()=>l(h),e=>m(h,e)),N(e,n)},$$slots:{default:!0}}),o(()=>f(r,`Enter your ${a.provider.name??``} API key to connect your account and use ${a.provider.name??``} models in OpenCode.`)),N(e,t)},A=e=>{var t=xr(),n=y(t),r=v(s(n)),c=v(r);F(n);var u=v(n,2);{let e=H(()=>l(p)?.label??`OAuth`);fr(u,{get label(){return`${l(e)??``} authorization code`},for:`connect-code`,children:(e,t)=>{var n=br();U(n),o(()=>n.disabled=l(w)),i(`keydown`,n,G),P(n,()=>l(_),e=>m(_,e)),N(e,n)},$$slots:{default:!0}})}o(()=>{D(r,`href`,l(x)??`#`),f(c,` to collect your authorization code to connect your account and use ${a.provider.name??``} models in OpenCode.`)}),N(e,t)},j=e=>{var t=wr(),r=y(t),i=e=>{var t=Sr(),n=s(t,!0);F(t),o(()=>f(n,l(S))),N(e,t)};n(r,e=>{l(S)&&e(i)});var a=v(r,2),c=e=>{var t=Cr(),n=v(s(t)),r=s(n,!0);F(n),E(),F(t),o(()=>{D(n,`href`,l(x)),f(r,l(x))}),N(e,t)};n(a,e=>{l(x)&&e(c)});var u=v(a,2);$(s(u),{}),E(),F(u),N(e,t)};n(C,e=>{l(u)===`method-picker`?e(O):l(u)===`api-form`?e(k,1):l(u)===`oauth-code`?e(A,2):l(u)===`oauth-auto`&&e(j,3)}),N(e,r)},$$slots:{headerStart:!0,footer:!0,default:!0}}),j()}p([`click`,`keydown`]);var Dr=M(`<button type="button" class="btn btn-primary"><!> Continue</button>`),Or=M(`<div class="feedback feedback--error"><span> </span></div>`),kr=M(`<input id="custom-id" type="text" class="form-input" placeholder="my-provider" autocomplete="off"/>`),Ar=M(`<input id="custom-name" type="text" class="form-input" placeholder="My Provider" autocomplete="off"/>`),jr=M(`<input id="custom-url" type="url" class="form-input" placeholder="https://example.com/v1" autocomplete="off"/>`),Mr=M(`<p class="field-hint">Register an OpenAI-compatible provider by base URL. Models are auto-discovered on first connection.</p> <!> <div class="form-stack svelte-1btkq49"><!> <!> <!> <div class="form-field"><label class="form-label" for="custom-key">API key <span class="optional svelte-1btkq49">(optional)</span></label> <input id="custom-key" type="password" class="form-input" placeholder="API key" autocomplete="off"/></div></div>`,1);function Nr(t,r){C(r,!0);let a=e(``),c=e(``),u=e(``),d=e(``),p=e(!1),h=e(null);async function g(){let e=l(a).trim(),t=l(c).trim(),n=l(u).trim();if(!e||!t||!n){m(h,`ID, display name, and base URL are required.`);return}m(p,!0),m(h,null);try{let i=await fetch(`/admin/providers/${encodeURIComponent(e)}`,{method:`PATCH`,headers:{...Ce(),"content-type":`application/json`},body:JSON.stringify({kind:`register-custom`,displayName:t,baseURL:n,apiKey:l(d).trim()||void 0,modelsJson:`[]`,headersJson:`[]`,confirmOverwrite:`false`})}),a=await i.json();if(!i.ok||a.ok===!1){m(h,a.message??`Registration failed.`,!0);return}r.onaction?.(a)}catch(e){m(h,e instanceof Error?e.message:`Request failed.`,!0)}finally{m(p,!1)}}function _(e){e.key===`Enter`&&!l(p)&&g()}Lt(t,{open:!0,title:`Add custom provider`,onClose:()=>r.onclose?.(),footer:e=>{var t=Dr(),r=s(t),a=e=>{$(e,{})};n(r,e=>{l(p)&&e(a)}),E(),F(t),o(()=>t.disabled=l(p)),i(`click`,t,()=>void g()),N(e,t)},children:(e,t)=>{var r=Mr(),g=v(y(r),2),b=e=>{var t=Or(),n=s(t),r=s(n,!0);F(n),F(t),o(()=>f(r,l(h))),N(e,t)};n(g,e=>{l(h)&&e(b)});var x=v(g,2),S=s(x);fr(S,{label:`Provider ID`,for:`custom-id`,children:(e,t)=>{var n=kr();U(n),o(()=>n.disabled=l(p)),i(`keydown`,n,_),P(n,()=>l(a),e=>m(a,e)),N(e,n)},$$slots:{default:!0}});var C=v(S,2);fr(C,{label:`Display name`,for:`custom-name`,children:(e,t)=>{var n=Ar();U(n),o(()=>n.disabled=l(p)),i(`keydown`,n,_),P(n,()=>l(c),e=>m(c,e)),N(e,n)},$$slots:{default:!0}});var w=v(C,2);fr(w,{label:`Base URL`,for:`custom-url`,children:(e,t)=>{var n=jr();U(n),o(()=>n.disabled=l(p)),i(`keydown`,n,_),P(n,()=>l(u),e=>m(u,e)),N(e,n)},$$slots:{default:!0}});var T=v(w,2),E=v(s(T),2);U(E),F(T),F(x),o(()=>E.disabled=l(p)),i(`keydown`,E,_),P(E,()=>l(d),e=>m(d,e)),N(e,r)},$$slots:{footer:!0,default:!0}}),j()}p([`click`,`keydown`]);var Pr=M(`<button type="button" class="btn btn-primary">Done</button>`),Fr=M(`<button type="button" class="btn btn-primary"><!> Import</button>`),Ir=M(`<li class="svelte-15y8pah">Activated in OpenCode: <strong> </strong></li>`),Lr=M(`<li class="svelte-15y8pah">Skipped (already configured): <strong> </strong></li>`),Rr=M(`<li class="svelte-15y8pah"><span class="muted svelte-15y8pah"> </span></li>`),zr=M(`<div class="feedback feedback--success"><span>Import complete.</span></div> <ul class="result-list svelte-15y8pah"><li class="svelte-15y8pah">Providers imported: <strong> </strong></li> <li class="svelte-15y8pah">Credentials imported: <strong> </strong></li> <!> <!> <!></ul>`,1),Br=M(`<li class="svelte-15y8pah"><code class="svelte-15y8pah"> </code> <span class="muted svelte-15y8pah"> </span></li>`),Vr=M(`<li class="svelte-15y8pah"><code class="svelte-15y8pah"> </code> <span class="muted svelte-15y8pah"> </span></li>`),Hr=M(`<div class="feedback feedback--error"><span> </span></div>`),Ur=M(`<p class="field-hint">We found an OpenCode installation on this host:</p> <ul class="result-list svelte-15y8pah"><!> <!></ul> <p class="field-hint">Importing will copy provider settings and stored credentials into OP_HOME and
9
- activate them in the running assistant. Existing OP_HOME credentials are
10
- preserved on conflict.</p> <!>`,1);function Wr(r,a){C(a,!0);let c=e(!1),u=e(null),d=e(null);async function p(){m(c,!0),m(u,null);try{let e=await fetch(`/admin/providers/import-host`,{method:`POST`,headers:Ce()}),t=await e.json();if(!e.ok){m(u,t.message??`Import failed (${e.status})`,!0);return}m(d,t,!0)}catch(e){m(u,e instanceof Error?e.message:`Import failed.`,!0)}finally{m(c,!1)}}Lt(r,{open:!0,title:`Import from host OpenCode`,onClose:()=>l(d)?a.onimported?.():a.oncancel?.(),footer:e=>{var r=t(),u=y(r),f=e=>{var t=Pr();i(`click`,t,function(...e){a.onimported?.apply(this,e)}),N(e,t)},m=e=>{var t=Fr(),r=s(t),a=e=>{$(e,{})};n(r,e=>{l(c)&&e(a)}),E(),F(t),o(()=>t.disabled=l(c)),i(`click`,t,()=>void p()),N(e,t)};n(u,e=>{l(d)?e(f):e(m,-1)}),N(e,r)},children:(e,r)=>{var i=t(),c=y(i),p=e=>{var t=zr(),r=v(y(t),2),i=s(r),a=v(s(i)),c=s(a,!0);F(a),F(i);var u=v(i,2),p=v(s(u)),m=s(p,!0);F(p),F(u);var h=v(u,2),g=e=>{var t=Ir(),n=v(s(t)),r=s(n,!0);F(n),F(t),o(()=>f(r,l(d).livePushed)),N(e,t)};n(h,e=>{l(d).livePushed!==void 0&&e(g)});var _=v(h,2),b=e=>{var t=Lr(),n=v(s(t)),r=s(n,!0);F(n),F(t),o(e=>f(r,e),[()=>l(d).conflicts.join(`, `)]),N(e,t)};n(_,e=>{l(d).conflicts.length>0&&e(b)});var x=v(_,2),S=e=>{var t=Rr(),n=s(t),r=s(n);F(n),F(t),o(e=>f(r,`Live update failed for: ${e??``}.
11
- These will activate on next OpenCode restart.`),[()=>l(d).livePushFailed.join(`, `)]),N(e,t)};n(x,e=>{l(d).livePushFailed&&l(d).livePushFailed.length>0&&e(S)}),F(r),o(()=>{f(c,l(d).imported.providers),f(m,l(d).imported.credentials)}),N(e,t)},m=e=>{var t=Ur(),r=v(y(t),2),i=s(r),c=e=>{var t=Br(),n=s(t),r=s(n,!0);F(n);var i=v(n,2),c=s(i);F(i),F(t),o(()=>{f(r,a.configPath),f(c,`(${a.providerCount??``} provider${a.providerCount===1?``:`s`})`)}),N(e,t)};n(i,e=>{a.configPath&&e(c)});var d=v(i,2),p=e=>{var t=Vr(),n=s(t),r=s(n,!0);F(n);var i=v(n,2),c=s(i);F(i),F(t),o(()=>{f(r,a.authPath),f(c,`(${a.credentialCount??``} credential${a.credentialCount===1?``:`s`})`)}),N(e,t)};n(d,e=>{a.authPath&&e(p)}),F(r);var m=v(r,4),h=e=>{var t=Hr(),n=s(t),r=s(n,!0);F(n),F(t),o(()=>f(r,l(u))),N(e,t)};n(m,e=>{l(u)&&e(h)}),N(e,t)};n(c,e=>{l(d)?e(p):e(m,-1)}),N(e,i)},$$slots:{footer:!0,default:!0}}),j()}p([`click`]);var Gr=M(`<div class="feedback feedback--error inline svelte-19zt4ct"><span> </span> <button class="btn-dismiss" type="button" aria-label="Dismiss">×</button></div>`),Kr=u(`<svg aria-hidden="true" width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="2" width="20" height="8" rx="2" ry="2"></rect><rect x="2" y="14" width="20" height="8" rx="2" ry="2"></rect><line x1="6" y1="6" x2="6.01" y2="6"></line><line x1="6" y1="18" x2="6.01" y2="18"></line><line x1="1" y1="1" x2="23" y2="23"></line></svg>`),qr=M(`<p>The assistant (OpenCode server) is not reachable. Start the assistant container and refresh.</p>`),Jr=M(`<div class="loading-state"><!> <span>Loading providers…</span></div>`),Yr=u(`<svg aria-hidden="true" width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>`),Xr=M(`<p>No providers connected yet.</p> <p class="empty-hint svelte-19zt4ct">Click <strong>Add provider</strong> above to sign in to one.</p>`,1),Zr=M(`<option> </option>`),Qr=M(`<optgroup></optgroup>`),$r=M(`<option> </option>`),ei=M(`<optgroup></optgroup>`),ti=M(`<p class="model-error svelte-19zt4ct"> </p>`),ni=M(`<div class="provider-row svelte-19zt4ct"><div class="provider-id svelte-19zt4ct"><span class="provider-name svelte-19zt4ct"> </span> <span class="badge badge-connected"> </span></div> <button class="btn btn-outline btn-sm"><!> Disconnect</button></div>`),ri=M(`<div class="model-defaults svelte-19zt4ct"><div class="model-field svelte-19zt4ct"><label class="form-label" for="default-model">Default model</label> <select id="default-model" class="form-input"><option>— OpenCode default —</option><!></select></div> <div class="model-field svelte-19zt4ct"><label class="form-label" for="small-model">Small model</label> <select id="small-model" class="form-input"><option>— OpenCode default —</option><!></select></div> <!></div> <!>`,1),ii=M(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2>Connections</h2> <p class="panel-subtitle">Sign in to AI providers. Credentials are stored in OpenCode's auth.json.</p></div> <div class="panel-header-actions"><button type="button" class="btn btn-secondary btn-sm">Import from host</button> <button type="button" class="btn btn-primary btn-sm">Add provider</button> <button class="btn btn-secondary btn-sm"><!> Refresh</button></div></div> <!> <div class="panel-body panel-body--flush"><!></div></div> <!> <!> <!> <!>`,1);function ai(r,a){C(a,!0);let c=e(b({available:!1,providers:[],defaultModels:{},allowlistActive:!1,providerCountLabel:``,stats:{total:0,connected:0,configured:0,disabled:0}})),u=e(!0),d=e(null);async function p(){m(u,!0);try{let e=await fetch(`/admin/providers`,{headers:Ce()});e.ok&&(m(c,await e.json(),!0),m(x,l(c).currentModel??``,!0),m(S,l(c).currentSmallModel??``,!0))}catch{}finally{m(u,!1)}}B(()=>{p()});let h=H(()=>l(c).providers.filter(e=>e.connected)),_=H(()=>l(c).providers.filter(e=>!e.connected)),x=e(``),S=e(``),w=e(null);async function T(e,t){m(w,null);try{let n=await fetch(`/admin/opencode/model`,{method:`POST`,headers:{...Ce(),"content-type":`application/json`},body:JSON.stringify({[e]:t||null})});n.ok||m(w,(await n.json().catch(()=>({}))).message??`Save failed (${n.status})`,!0)}catch(e){m(w,e instanceof Error?e.message:`Request failed.`,!0)}}let O=e(!1),k=e(null),A=e(!1),M=e(null),P={env:`env`,api:`api key`,oauth:`oauth`,config:`config`,custom:`custom`};function L(e){return e.credentialType?P[e.credentialType]:``}function R(e){m(O,!1),m(k,e,!0)}function z(){m(O,!1),m(A,!0)}function V(){m(k,null),m(A,!1),p()}async function U(e){if(confirm(`Disconnect ${e.name}? Stored credentials will be removed.`)){m(M,e.id,!0),m(d,null);try{let t=await fetch(`/admin/opencode/providers/${encodeURIComponent(e.id)}/auth`,{method:`DELETE`,headers:Ce()});t.ok?p():m(d,(await t.json().catch(()=>({}))).message??`Disconnect failed (${t.status})`,!0)}catch(e){m(d,e instanceof Error?e.message:`Request failed.`,!0)}finally{m(M,null)}}}let W=e(null),G=e(!1);async function K(){try{let e=await fetch(`/admin/providers/host-status`,{headers:Ce()});e.ok&&m(W,await e.json(),!0)}catch{}}B(()=>{K()});function ee(){m(G,!1),p(),K()}var te=ii(),ne=y(te),q=s(ne),J=v(s(q),2),re=s(J),Y=v(re,2),X=v(Y,2),Z=s(X),ie=e=>{$(e,{})};n(Z,e=>{l(u)&&e(ie)}),E(),F(X),F(J),F(q);var ae=v(q,2),oe=e=>{var t=Gr(),n=s(t),r=s(n,!0);F(n);var a=v(n,2);F(t),o(()=>f(r,l(d))),i(`click`,a,()=>m(d,null)),N(e,t)};n(ae,e=>{l(d)&&e(oe)});var se=v(ae,2),ce=s(se),le=e=>{kt(e,{icon:e=>{N(e,Kr())},children:(e,t)=>{N(e,qr())},$$slots:{icon:!0,default:!0}})},ue=e=>{var t=Jr();$(s(t),{}),E(2),F(t),N(e,t)},de=e=>{kt(e,{icon:e=>{N(e,Yr())},children:(e,t)=>{var n=Xr();E(2),N(e,n)},$$slots:{icon:!0,default:!0}})},fe=e=>{var r=ri(),a=y(r),c=s(a),u=v(s(c),2),d=s(u);d.value=d.__value=``,g(v(d),17,()=>l(h),e=>e.id,(e,r)=>{var i=t(),a=y(i),c=e=>{var t=Qr();g(t,21,()=>l(r).models,e=>e.id,(e,t)=>{var n=Zr(),i=s(n,!0);F(n);var a={};o(()=>{f(i,l(t).name||l(t).id),a!==(a=`${l(r).id??``}/${l(t).id??``}`)&&(n.value=n.__value=`${l(r).id??``}/${l(t).id??``}`)}),N(e,n)}),F(t),o(()=>D(t,`label`,l(r).name)),N(e,t)};n(a,e=>{l(r).models.length>0&&e(c)}),N(e,i)}),F(u),F(c);var p=v(c,2),_=v(s(p),2),b=s(_);b.value=b.__value=``,g(v(b),17,()=>l(h),e=>e.id,(e,r)=>{var i=t(),a=y(i),c=e=>{var t=ei();g(t,21,()=>l(r).models,e=>e.id,(e,t)=>{var n=$r(),i=s(n,!0);F(n);var a={};o(()=>{f(i,l(t).name||l(t).id),a!==(a=`${l(r).id??``}/${l(t).id??``}`)&&(n.value=n.__value=`${l(r).id??``}/${l(t).id??``}`)}),N(e,n)}),F(t),o(()=>D(t,`label`,l(r).name)),N(e,t)};n(a,e=>{l(r).models.length>0&&e(c)}),N(e,i)}),F(_),F(p);var C=v(p,2),O=e=>{var t=ti(),n=s(t,!0);F(t),o(()=>f(n,l(w))),N(e,t)};n(C,e=>{l(w)&&e(O)}),F(a),g(v(a,2),17,()=>l(h),e=>e.id,(e,t)=>{var r=ni(),a=s(r),c=s(a),u=s(c,!0);F(c);var d=v(c,2),p=s(d,!0);F(d),F(a);var m=v(a,2),h=s(m),g=e=>{$(e,{})};n(h,e=>{l(M)===l(t).id&&e(g)}),E(),F(m),F(r),o(e=>{f(u,l(t).name),f(p,e),m.disabled=l(M)===l(t).id},[()=>L(l(t))]),i(`click`,m,()=>void U(l(t))),N(e,r)}),i(`change`,u,e=>void T(`model`,e.currentTarget.value)),I(u,()=>l(x),e=>m(x,e)),i(`change`,_,e=>void T(`small_model`,e.currentTarget.value)),I(_,()=>l(S),e=>m(S,e)),N(e,r)};n(ce,e=>{!l(c).available&&!l(u)?e(le):l(u)&&l(c).providers.length===0?e(ue,1):l(h).length===0?e(de,2):e(fe,-1)}),F(se),F(ne);var pe=v(ne,2),me=e=>{cr(e,{get providers(){return l(_)},onselect:R,oncustom:z,onclose:()=>{m(O,!1)}})};n(pe,e=>{l(O)&&e(me)});var he=v(pe,2),ge=e=>{Er(e,{get provider(){return l(k)},onaction:V,onclose:()=>{m(k,null)}})};n(he,e=>{l(k)&&e(ge)});var _e=v(he,2),Q=e=>{Nr(e,{onaction:V,onclose:()=>{m(A,!1)}})};n(_e,e=>{l(A)&&e(Q)});var ve=v(_e,2),ye=e=>{Wr(e,{get providerCount(){return l(W).providerCount},get credentialCount(){return l(W).credentialCount},get configPath(){return l(W).configPath},get authPath(){return l(W).authPath},onimported:ee,oncancel:()=>{m(G,!1)}})};n(ve,e=>{l(G)&&l(W)&&e(ye)}),o(()=>{re.disabled=!l(W)?.detected,D(re,`title`,l(W)?.detected?`Import ${l(W).providerCount} providers from host OpenCode`:`No host OpenCode installation detected`),X.disabled=l(u)}),i(`click`,re,()=>{m(G,!0)}),i(`click`,Y,()=>{m(O,!0)}),i(`click`,X,()=>void p()),N(r,te),j()}p([`click`,`change`]);var oi=M(`<button class="btn btn-secondary btn-sm"> </button> <button class="btn btn-secondary btn-sm"><!> Refresh</button>`,1),si=M(`<option> </option>`),ci=M(`<div class="error-banner svelte-coqj2u"><span> </span></div>`),li=M(`<pre class="log-output svelte-coqj2u"> </pre>`),ui=u(`<svg aria-hidden="true" width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line></svg>`),di=M(`<p>No log output — the container may not be running or has no recent output.</p>`),fi=M(`<p>Select a service and click "Load Logs" to view container output.</p>`),pi=M(`<div class="controls svelte-coqj2u"><div class="control-group svelte-coqj2u"><label for="log-service" class="control-label svelte-coqj2u">Service</label> <select id="log-service" class="control-input svelte-coqj2u"><option>All services</option><!></select></div> <div class="control-group svelte-coqj2u"><label for="log-tail" class="control-label svelte-coqj2u">Lines</label> <select id="log-tail" class="control-input svelte-coqj2u"><option>50</option><option>100</option><option>250</option><option>500</option><option>1000</option></select></div> <div class="control-group control-group--toggle svelte-coqj2u"><label class="toggle-label svelte-coqj2u"><input type="checkbox" class="svelte-coqj2u"/> <span>Auto-scroll</span></label></div> <button class="btn btn-primary btn-sm"><!> Load Logs</button></div> <div class="panel-body panel-body--flush"><!> <!></div>`,1);function mi(a,c){C(c,!0);let u=e(``),d=e(!1),p=e(!1),h=e(``),_=e(``),b=e(100),x=e(!0),S=e(!1),w=e(void 0);async function D(){m(p,!0),m(h,``);try{let e=await J({service:l(_)||void 0,tail:l(b)});e.ok?(m(u,e.logs,!0),m(d,!0),l(x)&&l(w)&&requestAnimationFrame(()=>{l(w)&&(l(w).scrollTop=l(w).scrollHeight)})):m(h,e.error??`Failed to fetch logs.`,!0)}catch(e){m(h,e instanceof Error?e.message:`Failed to fetch logs.`,!0)}finally{m(p,!1)}}async function O(){l(u)&&(await navigator.clipboard.writeText(l(u)),m(S,!0),setTimeout(()=>{m(S,!1)},2e3))}B(()=>{c.tokenStored&&D()}),cn(a,{title:`Service Logs`,role:`tabpanel`,actions:e=>{var t=oi(),r=y(t),a=s(r,!0);F(r);var d=v(r,2),m=s(d),h=e=>{$(e,{})};n(m,e=>{l(p)&&e(h)}),E(),F(d),o(()=>{r.disabled=!l(u),f(a,l(S)?`Copied!`:`Copy`),d.disabled=l(p)||!c.tokenStored}),i(`click`,r,()=>void O()),i(`click`,d,()=>void D()),N(e,t)},children:(e,a)=>{var S=pi(),C=y(S),O=s(C),k=v(s(O),2),A=s(k);A.value=A.__value=``,g(v(A),17,()=>c.services,r,(e,t)=>{var n=si(),r=s(n,!0);F(n);var i={};o(()=>{f(r,l(t)),i!==(i=l(t))&&(n.value=(n.__value=l(t))??``)}),N(e,n)}),F(k),F(O);var j=v(O,2),M=v(s(j),2),P=s(M);P.value=P.__value=50;var L=v(P);L.value=L.__value=100;var R=v(L);R.value=R.__value=250;var z=v(R);z.value=z.__value=500;var B=v(z);B.value=B.__value=1e3,F(M),F(j);var H=v(j,2),W=s(H),G=s(W);U(G),E(2),F(W),F(H);var K=v(H,2),ee=s(K),te=e=>{$(e,{})};n(ee,e=>{l(p)&&e(te)}),E(),F(K),F(C);var ne=v(C,2),q=s(ne),J=e=>{var t=ci(),n=s(t),r=s(n,!0);F(n),F(t),o(()=>f(r,l(h))),N(e,t)};n(q,e=>{l(h)&&e(J)});var re=v(q,2),Y=e=>{var t=li(),n=s(t,!0);F(t),V(t,e=>m(w,e),()=>l(w)),o(()=>f(n,l(u))),N(e,t)},X=e=>{kt(e,{icon:e=>{N(e,ui())},children:(e,r)=>{var i=t(),a=y(i),o=e=>{N(e,di())},s=e=>{N(e,fi())};n(a,e=>{l(d)?e(o):e(s,-1)}),N(e,i)},$$slots:{icon:!0,default:!0}})};n(re,e=>{l(u)?e(Y):l(p)||e(X,1)}),F(ne),o(()=>K.disabled=l(p)||!c.tokenStored),i(`change`,k,()=>void D()),I(k,()=>l(_),e=>m(_,e)),i(`change`,M,()=>void D()),I(M,()=>l(b),e=>m(b,e)),T(G,()=>l(x),e=>m(x,e)),i(`click`,K,()=>void D()),N(e,S)},$$slots:{actions:!0,default:!0}}),j()}p([`click`,`change`]);var hi=M(`<div class="error-banner svelte-epscb2"><span> </span></div>`),gi=M(`<p class="empty-note svelte-epscb2">No secret files found.</p>`),_i=M(`<div><button class="secret-name svelte-epscb2"><span class="mono svelte-epscb2"> </span> <span class="secret-size svelte-epscb2"> </span></button> <button class="btn btn-ghost btn-sm">✕</button></div>`),vi=M(`<div class="editor-head svelte-epscb2"><span class="mono svelte-epscb2"> </span> <label class="reveal-toggle svelte-epscb2"><input type="checkbox"/> Reveal</label></div> <textarea spellcheck="false" rows="16"></textarea> <div class="editor-actions svelte-epscb2"><button class="btn btn-secondary btn-sm">Close</button> <button class="btn btn-primary btn-sm"><!> Save</button></div>`,1),yi=M(`<div class="editor-empty svelte-epscb2"><svg aria-hidden="true" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="svelte-epscb2"><rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect><path d="M7 11V7a5 5 0 0 1 10 0v4"></path></svg> <p class="svelte-epscb2">Select a file to view or edit its contents.</p> <button class="btn btn-secondary btn-sm">New secret</button></div>`),bi=M(`<div class="panel" role="tabpanel"><div class="panel-header svelte-epscb2"><h2>Secrets</h2> <div class="panel-header-actions"><button class="btn btn-secondary btn-sm"><!> Refresh</button></div></div> <p class="section-note svelte-epscb2">Files in the assistant's secrets directory (<code>/stash/secrets</code> → <code>knowledge/secrets</code>). These are mounted into the assistant and granted to
12
- services via Docker secrets. Files are stored 0600. Editing here changes the live
13
- file — restart affected services to pick up changes.</p> <!> <div class="secrets-layout svelte-epscb2"><div class="secrets-list svelte-epscb2"><!> <!> <div class="new-secret svelte-epscb2"><label class="new-secret-label svelte-epscb2" for="new-secret-name">New secret file</label> <div class="new-secret-row svelte-epscb2"><input id="new-secret-name" class="control-input" type="text" spellcheck="false" placeholder="new-file-name"/> <button class="btn btn-secondary btn-sm">Add</button></div></div></div> <div class="secrets-editor svelte-epscb2"><!></div></div></div>`);function xi(t,r){C(r,!0);let a=e(!1),u=e(!1),d=e(``),p=e(b([])),h=e(null),_=e(``),x=e(!1),S=e(``),w=e(void 0);function O(e){return e<1024?`${e} B`:`${(e/1024).toFixed(1)} KB`}async function k(){m(a,!0),m(d,``);try{m(p,(await ce()).files,!0)}catch(e){m(d,e instanceof Error?e.message:`Failed to list secret files.`,!0)}finally{m(a,!1)}}async function A(e){if(!l(u)){m(u,!0),m(d,``);try{let t=await oe(e);m(h,t.name,!0),m(_,t.value,!0),m(x,!1)}catch(e){Q.push(`error`,e instanceof Error?e.message:`Failed to read file.`)}finally{m(u,!1)}}}function M(){m(h,null),m(_,``),m(x,!1)}async function I(){if(!(!l(h)||l(u))){m(u,!0);try{await Z(l(h),l(_)),Q.push(`success`,`Saved ${l(h)}.`),await k()}catch(e){Q.push(`error`,e instanceof Error?e.message:`Failed to save file.`)}finally{m(u,!1)}}}async function L(e){if(!l(u)&&confirm(`Delete secret file "${e}"? This cannot be undone.`)){m(u,!0);try{await Ee(e),Q.push(`success`,`Deleted ${e}.`),l(h)===e&&M(),await k()}catch(e){Q.push(`error`,e instanceof Error?e.message:`Failed to delete file.`)}finally{m(u,!1)}}}async function R(){let e=l(S).trim();if(!(!e||l(u))){m(u,!0);try{await Z(e,``),Q.push(`success`,`Created ${e}.`),m(S,``),await k(),await A(e)}catch(e){Q.push(`error`,e instanceof Error?e.message:`Failed to create file.`)}finally{m(u,!1)}}}B(()=>{r.tokenStored&&k()});var z=bi(),H=s(z),G=v(s(H),2),K=s(G),ee=s(K),te=e=>{$(e,{})};n(ee,e=>{l(a)&&e(te)}),E(),F(K),F(G),F(H);var ne=v(H,4),q=e=>{var t=hi(),n=s(t),r=s(n,!0);F(n),F(t),o(()=>f(r,l(d))),N(e,t)};n(ne,e=>{l(d)&&e(q)});var J=v(ne,2),re=s(J),Y=s(re),X=e=>{N(e,gi())};n(Y,e=>{l(p).length===0&&!l(a)&&e(X)});var ie=v(Y,2);g(ie,17,()=>l(p),e=>e.name,(e,t)=>{var n=_i(),r=s(n),a=s(r),c=s(a,!0);F(a);var d=v(a,2),p=s(d,!0);F(d),F(r);var m=v(r,2);F(n),o(e=>{W(n,1,`secret-row ${l(h)===l(t).name?`active`:``}`,`svelte-epscb2`),r.disabled=l(u),D(r,`aria-label`,`Edit ${l(t).name??``}`),f(c,l(t).name),f(p,e),m.disabled=l(u),D(m,`aria-label`,`Delete ${l(t).name??``}`)},[()=>O(l(t).size)]),i(`click`,r,()=>void A(l(t).name)),i(`click`,m,()=>void L(l(t).name)),N(e,n)});var ae=v(ie,2),se=v(s(ae),2),le=s(se);U(le),V(le,e=>m(w,e),()=>l(w));var ue=v(le,2);F(se),F(ae),F(re);var de=v(re,2),fe=s(de),pe=e=>{var t=vi(),r=y(t),a=s(r),d=s(a,!0);F(a);var p=v(a,2),g=s(p);U(g),E(),F(p),F(r);var b=v(r,2);c(b);var S=v(b,2),C=s(S),w=v(C,2),D=s(w),O=e=>{$(e,{})};n(D,e=>{l(u)&&e(O)}),E(),F(w),F(S),o(()=>{f(d,l(h)),W(b,1,`control-input editor-area ${l(x)?``:`masked`}`,`svelte-epscb2`),b.disabled=l(u),C.disabled=l(u),w.disabled=l(u)}),T(g,()=>l(x),e=>m(x,e)),P(b,()=>l(_),e=>m(_,e)),i(`click`,C,M),i(`click`,w,()=>void I()),N(e,t)},me=e=>{var t=yi(),n=v(s(t),4);F(t),i(`click`,n,()=>l(w)?.focus()),N(e,t)};n(fe,e=>{l(h)?e(pe):e(me,-1)}),F(de),F(J),F(z),o(e=>{K.disabled=l(a)||l(u)||!r.tokenStored,le.disabled=l(u),ue.disabled=e},[()=>l(u)||!l(S).trim()]),i(`click`,K,()=>void k()),P(le,()=>l(S),e=>m(S,e)),i(`click`,ue,()=>void R()),N(t,z),j()}p([`click`]);var Si=M(`<div class="input-with-toggle svelte-176sy43"><input class="control-input svelte-176sy43" spellcheck="false" autocomplete="new-password"/> <button type="button" class="btn-icon svelte-176sy43"> </button></div>`);function Ci(t,n){C(n,!0);let r=S(n,`value`,15,``),a=S(n,`disabled`,3,!1),c=e(!1);var u=Si(),d=s(u);U(d);var p=v(d,2),h=s(p,!0);F(p),F(u),o(()=>{D(d,`id`,n.id),D(d,`type`,l(c)?`text`:`password`),D(d,`placeholder`,n.placeholder),d.disabled=a(),D(p,`aria-label`,l(c)?`Hide value`:`Show value`),p.disabled=a(),f(h,l(c)?`Hide`:`Show`)}),P(d,r),i(`click`,p,()=>{m(c,!l(c))}),N(t,u),j()}p([`click`]);var wi=M(`<section class="config-section svelte-y5k1u8"><h3 class="section-title svelte-y5k1u8">Semantic search (embeddings)</h3> <p class="section-note svelte-y5k1u8">Vector embedding provider for semantic search. Leave Endpoint and Model blank to use built-in local embeddings.</p> <div class="controls--grid svelte-y5k1u8"><div class="control-group control-group--wide svelte-y5k1u8"><label class="control-label svelte-y5k1u8" for="embEndpoint">Endpoint</label> <input id="embEndpoint" class="control-input svelte-y5k1u8" type="url" spellcheck="false" placeholder="https://api.openai.com/v1/embeddings"/></div> <div class="control-group svelte-y5k1u8"><label class="control-label svelte-y5k1u8" for="embModel">Model</label> <input id="embModel" class="control-input svelte-y5k1u8" type="text" spellcheck="false" placeholder="text-embedding-3-small"/></div> <div class="control-group svelte-y5k1u8"><label class="control-label svelte-y5k1u8" for="embProvider">Provider (label)</label> <input id="embProvider" class="control-input svelte-y5k1u8" type="text" spellcheck="false" placeholder="openai"/></div> <div class="control-group svelte-y5k1u8"><label class="control-label svelte-y5k1u8" for="embApiKey">API Key</label> <!></div> <div class="control-group svelte-y5k1u8"><label class="control-label svelte-y5k1u8" for="embDimension">Dimensions</label> <input id="embDimension" class="control-input control-input--narrow svelte-y5k1u8" type="number" min="1"/></div> <div class="control-group svelte-y5k1u8"><label class="control-label svelte-y5k1u8" for="embLocalModel">Local model</label> <input id="embLocalModel" class="control-input svelte-y5k1u8" type="text" spellcheck="false" placeholder="Xenova/bge-small-en-v1.5"/></div> <div class="control-group svelte-y5k1u8"><label class="control-label svelte-y5k1u8" for="embBatchSize">Batch size</label> <input id="embBatchSize" class="control-input control-input--narrow svelte-y5k1u8" type="number" min="1"/></div> <div class="control-group svelte-y5k1u8"><label class="control-label svelte-y5k1u8" for="embChunkSize">Chunk size (chars)</label> <input id="embChunkSize" class="control-input control-input--narrow svelte-y5k1u8" type="number" min="1"/></div> <div class="control-group svelte-y5k1u8"><label class="control-label svelte-y5k1u8" for="embContextLength">Context length</label> <input id="embContextLength" class="control-input control-input--narrow svelte-y5k1u8" type="number" min="1"/></div> <div class="control-group svelte-y5k1u8"><label class="control-label svelte-y5k1u8" for="embOllamaNumCtx">Ollama num_ctx</label> <input id="embOllamaNumCtx" class="control-input control-input--narrow svelte-y5k1u8" type="number" min="1"/></div></div></section>`);function Ti(e,t){C(t,!0);let n=S(t,`endpoint`,15,``),r=S(t,`model`,15,``),i=S(t,`provider`,15,``),a=S(t,`apiKey`,15,``),c=S(t,`dimension`,15,1536),l=S(t,`localModel`,15,``),u=S(t,`batchSize`,15,``),d=S(t,`chunkSize`,15,``),f=S(t,`contextLength`,15,``),p=S(t,`ollamaNumCtx`,15,``),m=S(t,`disabled`,3,!1);var h=wi(),g=v(s(h),4),_=s(g),y=v(s(_),2);U(y),F(_);var b=v(_,2),x=v(s(b),2);U(x),F(b);var w=v(b,2),T=v(s(w),2);U(T),F(w);var E=v(w,2);Ci(v(s(E),2),{id:`embApiKey`,placeholder:"${AKM_EMBED_API_KEY}",get disabled(){return m()},get value(){return a()},set value(e){a(e)}}),F(E);var D=v(E,2),O=v(s(D),2);U(O),F(D);var k=v(D,2),A=v(s(k),2);U(A),F(k);var M=v(k,2),I=v(s(M),2);U(I),F(M);var L=v(M,2),R=v(s(L),2);U(R),F(L);var z=v(L,2),B=v(s(z),2);U(B),F(z);var V=v(z,2),H=v(s(V),2);U(H),F(V),F(g),F(h),o(()=>{y.disabled=m(),x.disabled=m(),T.disabled=m(),O.disabled=m(),A.disabled=m(),I.disabled=m(),R.disabled=m(),B.disabled=m(),H.disabled=m()}),P(y,n),P(x,r),P(T,i),P(O,c),P(A,l),P(I,u),P(R,d),P(B,f),P(H,p),N(e,h),j()}var Ei=M(`<section class="config-section svelte-gfn07p"><h3 class="section-title svelte-gfn07p">Behavior</h3> <div class="controls--grid svelte-gfn07p"><div class="control-group svelte-gfn07p"><label class="control-label svelte-gfn07p" for="semanticSearch">Semantic search</label> <select id="semanticSearch" class="control-input svelte-gfn07p"><option>Auto (vector index when available)</option><option>Off (keyword only)</option></select></div> <div class="control-group svelte-gfn07p"><label class="control-label svelte-gfn07p" for="outputFormat">Output format</label> <select id="outputFormat" class="control-input svelte-gfn07p"><option>JSON</option><option>YAML</option><option>Text</option></select></div> <div class="control-group svelte-gfn07p"><label class="control-label svelte-gfn07p" for="outputDetail">Output detail</label> <select id="outputDetail" class="control-input svelte-gfn07p"><option>Brief</option><option>Normal</option><option>Full</option></select></div></div></section> <details class="adv-details svelte-gfn07p"><summary class="adv-summary svelte-gfn07p">Advanced tuning — affects memory scoring &amp; indexing (leave at defaults unless you know the impact)</summary> <section class="config-section adv-body svelte-gfn07p"><p class="section-note svelte-gfn07p">Global tuning beyond per-profile settings. Leave blank to use akm defaults.</p> <div class="controls--grid svelte-gfn07p"><div class="control-group svelte-gfn07p"><label class="control-label svelte-gfn07p" for="adv-halflife">Utility decay half-life (days)</label> <input id="adv-halflife" class="control-input control-input--narrow svelte-gfn07p" type="number" min="0.1" step="0.1" placeholder="default"/></div> <div class="control-group svelte-gfn07p"><label class="control-label svelte-gfn07p" for="adv-fbboost">Feedback stability boost (≥1)</label> <input id="adv-fbboost" class="control-input control-input--narrow svelte-gfn07p" type="number" min="1" step="0.1" placeholder="default"/></div> <div class="control-group svelte-gfn07p"><label class="control-label svelte-gfn07p" for="adv-eventret">Event retention (days)</label> <input id="adv-eventret" class="control-input control-input--narrow svelte-gfn07p" type="number" min="0" placeholder="default"/></div> <div class="control-group svelte-gfn07p"><label class="control-label svelte-gfn07p" for="adv-minscore">Search min score</label> <input id="adv-minscore" class="control-input control-input--narrow svelte-gfn07p" type="number" min="0" step="0.01" placeholder="default"/></div> <div class="control-group svelte-gfn07p"><label class="control-label svelte-gfn07p" for="adv-rerank">Curate rerank</label> <select id="adv-rerank" class="control-input svelte-gfn07p"><option>Default</option><option>Enabled</option><option>Disabled</option></select></div> <div class="control-group svelte-gfn07p"><label class="control-label svelte-gfn07p" for="adv-reqreason">Feedback requires reason</label> <select id="adv-reqreason" class="control-input svelte-gfn07p"><option>Default</option><option>Required</option><option>Optional</option></select></div> <div class="control-group control-group--wide svelte-gfn07p"><label class="control-label svelte-gfn07p" for="adv-failmodes">Allowed feedback failure modes (comma-separated)</label> <input id="adv-failmodes" class="control-input svelte-gfn07p" type="text" spellcheck="false" placeholder="e.g. outdated, incorrect, irrelevant"/></div> <div class="control-group control-group--wide svelte-gfn07p"><label class="control-label svelte-gfn07p" for="adv-index">Index config (JSON, per-pass)</label> <textarea id="adv-index" class="control-input svelte-gfn07p" rows="4" spellcheck="false"></textarea> <span class="section-note svelte-gfn07p">Advanced per-pass indexing options (enrichment, graphExtraction, metadataEnhance, stalenessDetection). Must be a JSON object.</span></div></div></section></details>`,1);function Di(e,t){C(t,!0);let n=S(t,`semanticSearchMode`,15,`auto`),r=S(t,`outputFormat`,15,`json`),i=S(t,`outputDetail`,15,`brief`),a=S(t,`imHalfLife`,15,``),l=S(t,`imFeedbackBoost`,15,``),u=S(t,`imEventRetention`,15,``),d=S(t,`searchMinScore`,15,``),f=S(t,`searchCurateRerank`,15,``),p=S(t,`fbRequireReason`,15,``),m=S(t,`fbFailureModes`,15,``),h=S(t,`indexJson`,15,``),g=S(t,`disabled`,3,!1);var _=Ei(),b=y(_),x=v(s(b),2),w=s(x),T=v(s(w),2),O=s(T);O.value=O.__value=`auto`;var k=v(O);k.value=k.__value=`off`,F(T),F(w);var A=v(w,2),M=v(s(A),2),L=s(M);L.value=L.__value=`json`;var R=v(L);R.value=R.__value=`yaml`;var z=v(R);z.value=z.__value=`text`,F(M),F(A);var B=v(A,2),V=v(s(B),2),H=s(V);H.value=H.__value=`brief`;var W=v(H);W.value=W.__value=`normal`;var G=v(W);G.value=G.__value=`full`,F(V),F(B),F(x),F(b);var K=v(b,2),ee=v(s(K),2),te=v(s(ee),2),ne=s(te),q=v(s(ne),2);U(q),F(ne);var J=v(ne,2),re=v(s(J),2);U(re),F(J);var Y=v(J,2),X=v(s(Y),2);U(X),F(Y);var Z=v(Y,2),ie=v(s(Z),2);U(ie),F(Z);var ae=v(Z,2),oe=v(s(ae),2),se=s(oe);se.value=se.__value=``;var ce=v(se);ce.value=ce.__value=`on`;var le=v(ce);le.value=le.__value=`off`,F(oe),F(ae);var ue=v(ae,2),de=v(s(ue),2),fe=s(de);fe.value=fe.__value=``;var pe=v(fe);pe.value=pe.__value=`on`;var me=v(pe);me.value=me.__value=`off`,F(de),F(ue);var he=v(ue,2),ge=v(s(he),2);U(ge),F(he);var _e=v(he,2),Q=v(s(_e),2);c(Q),D(Q,`placeholder`,`{ "enrichment": { "llm": false } }`),E(2),F(_e),F(te),F(ee),F(K),o(()=>{T.disabled=g(),M.disabled=g(),V.disabled=g(),q.disabled=g(),re.disabled=g(),X.disabled=g(),ie.disabled=g(),oe.disabled=g(),de.disabled=g(),ge.disabled=g(),Q.disabled=g()}),I(T,n),I(M,r),I(V,i),P(q,a),P(re,l),P(X,u),P(ie,d),I(oe,f),I(de,p),P(ge,m),P(Q,h),N(e,_),j()}var Oi=M(`<span class="badge badge--default svelte-zzh9mp">Default</span>`),ki=M(`<button class="btn btn-sm">Set Default</button>`),Ai=M(`<div class="profile-row svelte-zzh9mp"><span class="profile-row-name svelte-zzh9mp"> </span> <!> <!> <div class="profile-row-actions svelte-zzh9mp"><!> <button class="btn btn-sm">Edit</button> <button class="btn btn-sm btn-danger">Remove</button></div></div>`);function ji(e,r){let a=S(r,`disabled`,3,!1);var c=Ai(),l=s(c),u=s(l,!0);F(l);var d=v(l,2),p=e=>{var n=t();h(y(n),()=>r.extra),N(e,n)};n(d,e=>{r.extra&&e(p)});var m=v(d,2),g=e=>{N(e,Oi())};n(m,e=>{r.isDefault&&r.name&&e(g)});var _=v(m,2),b=s(_),x=e=>{var t=ki();o(()=>t.disabled=a()),i(`click`,t,function(...e){r.onsetdefault?.apply(this,e)}),N(e,t)};n(b,e=>{r.name&&!r.isDefault&&e(x)});var C=v(b,2),w=v(C,2);F(_),F(c),o(()=>{f(u,r.name||`(unnamed)`),C.disabled=a(),w.disabled=a()}),i(`click`,C,function(...e){r.onedit?.apply(this,e)}),i(`click`,w,function(...e){r.onremove?.apply(this,e)}),N(e,c)}p([`click`]);var Mi=M(`<div class="profile-empty svelte-zwwvog"><svg aria-hidden="true" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="svelte-zwwvog"><ellipse cx="12" cy="5" rx="9" ry="3"></ellipse><path d="M3 5v14c0 1.66 4.03 3 9 3s9-1.34 9-3V5"></path><path d="M3 12c0 1.66 4.03 3 9 3s9-1.34 9-3"></path></svg> <p class="empty-note svelte-zwwvog">No LLM profiles configured — add one below.</p></div>`),Ni=M(`<div class="profile-list svelte-zwwvog"></div>`),Pi=M(`<section class="config-section svelte-zwwvog"><h3 class="section-title svelte-zwwvog">Language models <span class="section-title-aka svelte-zwwvog">akm LLM profiles</span></h3> <p class="section-note svelte-zwwvog">The language models your assistant uses to organize and improve its memory. Add one per LLM service.</p> <!> <button class="btn btn-secondary btn-sm">+ Add LLM Profile</button></section>`);function Fi(e,t){C(t,!0);let r=S(t,`profiles`,27,()=>b([])),a=S(t,`defaultName`,15,``),c=S(t,`disabled`,3,!1);var u=Pi(),d=v(s(u),4),f=e=>{N(e,Mi())},p=e=>{var n=Ni();g(n,21,r,e=>e.id,(e,n)=>{{let r=H(()=>a()===l(n).name);ji(e,{get name(){return l(n).name},get isDefault(){return l(r)},get disabled(){return c()},onsetdefault:()=>{a(l(n).name)},onedit:()=>t.onedit(l(n)),onremove:()=>t.onremove(l(n).id)})}}),F(n),N(e,n)};n(d,e=>{r().length===0?e(f):e(p,-1)});var m=v(d,2);F(u),o(()=>m.disabled=c()),i(`click`,m,function(...e){t.onadd?.apply(this,e)}),N(e,u),j()}p([`click`]);var Ii=M(`<div class="profile-empty svelte-anyxpa"><svg aria-hidden="true" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="svelte-anyxpa"><rect x="2" y="3" width="20" height="14" rx="2"></rect><path d="M8 21h8m-4-4v4"></path><circle cx="12" cy="10" r="2"></circle><path d="M9 10H7m10 0h-2"></path></svg> <p class="empty-note svelte-anyxpa">No agent profiles defined.</p></div>`),Li=M(`<span class="badge svelte-anyxpa"> </span>`),Ri=M(`<div class="profile-list svelte-anyxpa"></div>`),zi=M(`<section class="config-section svelte-anyxpa"><h3 class="section-title svelte-anyxpa">Agent runners <span class="section-title-aka svelte-anyxpa">akm agent profiles</span></h3> <p class="section-note svelte-anyxpa">Runner configs for maintenance steps that spawn a subprocess (opencode or claude CLI).</p> <!> <button class="btn btn-secondary btn-sm">+ Add Agent Profile</button></section>`);function Bi(e,t){C(t,!0);let r=S(t,`profiles`,27,()=>b([])),a=S(t,`defaultName`,15,``),c=S(t,`disabled`,3,!1);var u=zi(),d=v(s(u),4),p=e=>{N(e,Ii())},m=e=>{var n=Ri();g(n,21,r,e=>e.id,(e,n)=>{{let r=e=>{var t=Li(),r=s(t,!0);F(t),o(()=>f(r,l(n).platform)),N(e,t)},i=H(()=>a()===l(n).name);ji(e,{get name(){return l(n).name},get isDefault(){return l(i)},get disabled(){return c()},onsetdefault:()=>{a(l(n).name)},onedit:()=>t.onedit(l(n)),onremove:()=>t.onremove(l(n).id),extra:r,$$slots:{extra:!0}})}}),F(n),N(e,n)};n(d,e=>{r().length===0?e(p):e(m,-1)});var h=v(d,2);F(u),o(()=>h.disabled=c()),i(`click`,h,function(...e){t.onadd?.apply(this,e)}),N(e,u),j()}p([`click`]);var Vi=M(`<div class="profile-empty svelte-1ngozvb"><svg aria-hidden="true" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="svelte-1ngozvb"><path d="M12 3c-1 2-2 3-3 4 1 3 3 5 3 8a6 6 0 0 1-6-6c0-3 2-5 3-6"></path><path d="M17.5 3.5c.5 1.5.5 3-.5 4.5 1 1 2 2.5 2 4a4 4 0 0 1-4-4c0-2 1-3.5 2.5-4.5z"></path></svg> <p class="empty-note svelte-1ngozvb">No improve profiles defined — add one below.</p></div>`),Hi=M(`<span class="profile-row-desc svelte-1ngozvb"> </span>`),Ui=M(`<div class="profile-list svelte-1ngozvb"></div>`),Wi=M(`<section class="config-section svelte-1ngozvb"><h3 class="section-title svelte-1ngozvb">Memory maintenance <span class="section-title-aka svelte-1ngozvb">akm improve</span></h3> <p class="section-note svelte-1ngozvb">Scheduled runs that distill, deduplicate, and improve stored memories. Each configuration picks which steps run and which language model they use — add a language model above first.</p> <!> <button class="btn btn-secondary btn-sm">+ Add Improve Profile</button></section>`);function Gi(e,r){C(r,!0);let a=S(r,`profiles`,27,()=>b([])),c=S(r,`defaultName`,15,``),u=S(r,`disabled`,3,!1);var d=Wi(),p=v(s(d),4),m=e=>{N(e,Vi())},h=e=>{var i=Ui();g(i,21,a,e=>e.id,(e,i)=>{{let a=e=>{var r=t(),a=y(r),c=e=>{var t=Hi(),n=s(t,!0);F(t),o(()=>f(n,l(i).description)),N(e,t)};n(a,e=>{l(i).description&&e(c)}),N(e,r)},d=H(()=>c()===l(i).name);ji(e,{get name(){return l(i).name},get isDefault(){return l(d)},get disabled(){return u()},onsetdefault:()=>{c(l(i).name)},onedit:()=>r.onedit(l(i)),onremove:()=>r.onremove(l(i).id),extra:a,$$slots:{extra:!0}})}}),F(i),N(e,i)};n(p,e=>{a().length===0?e(m):e(h,-1)});var _=v(p,2);F(d),o(()=>_.disabled=u()),i(`click`,_,function(...e){r.onadd?.apply(this,e)}),N(e,d),j()}p([`click`]);var Ki=M(`<div class="drawer-scrim svelte-1gmn25z" role="presentation"></div> <div class="drawer svelte-1gmn25z" role="dialog" aria-modal="true" aria-label="Edit profile"><div class="drawer-header svelte-1gmn25z"><h3 class="drawer-title svelte-1gmn25z">LLM Profile</h3> <button class="drawer-close svelte-1gmn25z" aria-label="Close">✕</button></div> <div class="drawer-body svelte-1gmn25z"><div class="controls controls--grid svelte-1gmn25z"><div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-name">Profile Name</label> <input id="d-llm-name" class="control-input svelte-1gmn25z" type="text" spellcheck="false" placeholder="e.g. default"/></div> <div class="control-group control-group--wide svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-endpoint">Endpoint</label> <input id="d-llm-endpoint" class="control-input svelte-1gmn25z" type="url" spellcheck="false" placeholder="https://api.openai.com/v1/chat/completions"/></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-model">Model</label> <input id="d-llm-model" class="control-input svelte-1gmn25z" type="text" spellcheck="false" placeholder="gpt-4o-mini"/></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-provider">Provider (label)</label> <input id="d-llm-provider" class="control-input svelte-1gmn25z" type="text" spellcheck="false" placeholder="openai"/></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-apikey">API Key</label> <!></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-temperature">Temperature (0–2)</label> <input id="d-llm-temperature" class="control-input control-input--narrow svelte-1gmn25z" type="number" min="0" max="2" step="0.1"/></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-maxtokens">Max tokens</label> <input id="d-llm-maxtokens" class="control-input control-input--narrow svelte-1gmn25z" type="number" min="1"/></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-timeout">Timeout (ms)</label> <input id="d-llm-timeout" class="control-input control-input--narrow svelte-1gmn25z" type="number" min="1"/></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-concurrency">Concurrency</label> <input id="d-llm-concurrency" class="control-input control-input--narrow svelte-1gmn25z" type="number" min="1"/></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-contextlength">Context length</label> <input id="d-llm-contextlength" class="control-input control-input--narrow svelte-1gmn25z" type="number" min="1"/></div> <div class="control-group svelte-1gmn25z"><label class="control-label svelte-1gmn25z" for="d-llm-judgemodel">Judge model</label> <input id="d-llm-judgemodel" class="control-input svelte-1gmn25z" type="text" spellcheck="false" placeholder="gpt-4o"/></div></div> <label class="toggle-row svelte-1gmn25z" style="margin-top: var(--space-4)"><input type="checkbox" class="svelte-1gmn25z"/> <span class="toggle-label svelte-1gmn25z">Supports JSON schema</span> <span class="toggle-hint svelte-1gmn25z">Use response_format: json_schema for structured output</span></label> <label class="toggle-row svelte-1gmn25z"><input type="checkbox" class="svelte-1gmn25z"/> <span class="toggle-label svelte-1gmn25z">Structured output capability</span> <span class="toggle-hint svelte-1gmn25z">capabilities.structuredOutput — model reliably returns valid structured JSON</span></label> <label class="toggle-row svelte-1gmn25z"><input type="checkbox" class="svelte-1gmn25z"/> <span class="toggle-label svelte-1gmn25z">Enable thinking</span> <span class="toggle-hint svelte-1gmn25z">Allow extended/thinking tokens for reasoning models</span></label> <div class="control-group control-group--wide svelte-1gmn25z" style="margin-top: var(--space-4)"><label class="control-label svelte-1gmn25z" for="d-llm-extra">Extra params (JSON)</label> <textarea id="d-llm-extra" class="control-input svelte-1gmn25z" rows="3" spellcheck="false"></textarea> <span class="feat-hint svelte-1gmn25z">Merged into the provider request body. Must be a JSON object.</span></div></div> <div class="drawer-footer svelte-1gmn25z"><button class="btn btn-secondary">Cancel</button> <button class="btn btn-primary">Apply</button></div></div>`,1);function qi(e,t){C(t,!0);let n=S(t,`draft`,15);var r=Ki(),a=y(r),o=v(a,2),l=s(o),u=v(s(l),2);F(l);var d=v(l,2),f=s(d),p=s(f),m=v(s(p),2);U(m),F(p);var h=v(p,2),g=v(s(h),2);U(g),F(h);var _=v(h,2),b=v(s(_),2);U(b),F(_);var x=v(_,2),w=v(s(x),2);U(w),F(x);var O=v(x,2);Ci(v(s(O),2),{id:`d-llm-apikey`,placeholder:"${AKM_LLM_API_KEY}",get value(){return n().apiKey},set value(e){n(n().apiKey=e,!0)}}),F(O);var k=v(O,2),A=v(s(k),2);U(A),F(k);var M=v(k,2),I=v(s(M),2);U(I),F(M);var L=v(M,2),R=v(s(L),2);U(R),F(L);var z=v(L,2),B=v(s(z),2);U(B),F(z);var V=v(z,2),H=v(s(V),2);U(H),F(V);var W=v(V,2),G=v(s(W),2);U(G),F(W),F(f);var K=v(f,2),ee=s(K);U(ee),E(4),F(K);var te=v(K,2),ne=s(te);U(ne),E(4),F(te);var q=v(te,2),J=s(q);U(J),E(4),F(q);var re=v(q,2),Y=v(s(re),2);c(Y),D(Y,`placeholder`,`{ "top_p": 0.9 }`),E(2),F(re),F(d);var X=v(d,2),Z=s(X),ie=v(Z,2);F(X),F(o),i(`click`,a,function(...e){t.oncancel?.apply(this,e)}),i(`click`,u,function(...e){t.oncancel?.apply(this,e)}),P(m,()=>n().name,e=>n(n().name=e,!0)),P(g,()=>n().endpoint,e=>n(n().endpoint=e,!0)),P(b,()=>n().model,e=>n(n().model=e,!0)),P(w,()=>n().provider,e=>n(n().provider=e,!0)),P(A,()=>n().temperature,e=>n(n().temperature=e,!0)),P(I,()=>n().maxTokens,e=>n(n().maxTokens=e,!0)),P(R,()=>n().timeoutMs,e=>n(n().timeoutMs=e,!0)),P(B,()=>n().concurrency,e=>n(n().concurrency=e,!0)),P(H,()=>n().contextLength,e=>n(n().contextLength=e,!0)),P(G,()=>n().judgeModel,e=>n(n().judgeModel=e,!0)),T(ee,()=>n().supportsJsonSchema,e=>n(n().supportsJsonSchema=e,!0)),T(ne,()=>n().structuredOutput,e=>n(n().structuredOutput=e,!0)),T(J,()=>n().enableThinking,e=>n(n().enableThinking=e,!0)),P(Y,()=>n().extraParams,e=>n(n().extraParams=e,!0)),i(`click`,Z,function(...e){t.oncancel?.apply(this,e)}),i(`click`,ie,function(...e){t.onapply?.apply(this,e)}),N(e,r),j()}p([`click`]);var Ji=M(`<div class="control-group svelte-1evj0pt"><label class="control-label svelte-1evj0pt" for="d-agent-bin">Binary</label> <input id="d-agent-bin" class="control-input svelte-1evj0pt" type="text" spellcheck="false" placeholder="opencode"/></div> <div class="control-group control-group--wide svelte-1evj0pt"><label class="control-label svelte-1evj0pt" for="d-agent-args">Extra args (space-separated)</label> <input id="d-agent-args" class="control-input svelte-1evj0pt" type="text" spellcheck="false" placeholder="run --model gpt-4o"/></div>`,1),Yi=M(`<div class="control-group svelte-1evj0pt"><label class="control-label svelte-1evj0pt" for="d-agent-model">Model</label> <input id="d-agent-model" class="control-input svelte-1evj0pt" type="text" spellcheck="false" placeholder="anthropic/claude-sonnet-4-5"/></div> <div class="control-group svelte-1evj0pt"><label class="control-label svelte-1evj0pt" for="d-agent-workspace">Workspace</label> <input id="d-agent-workspace" class="control-input svelte-1evj0pt" type="text" spellcheck="false"/></div>`,1),Xi=M(`<div class="drawer-scrim svelte-1evj0pt" role="presentation"></div> <div class="drawer svelte-1evj0pt" role="dialog" aria-modal="true" aria-label="Edit profile"><div class="drawer-header svelte-1evj0pt"><h3 class="drawer-title svelte-1evj0pt">Agent Profile</h3> <button class="drawer-close svelte-1evj0pt" aria-label="Close">✕</button></div> <div class="drawer-body svelte-1evj0pt"><div class="controls controls--grid svelte-1evj0pt"><div class="control-group svelte-1evj0pt"><label class="control-label svelte-1evj0pt" for="d-agent-name">Profile Name</label> <input id="d-agent-name" class="control-input svelte-1evj0pt" type="text" spellcheck="false" placeholder="e.g. opencode"/></div> <div class="control-group svelte-1evj0pt"><label class="control-label svelte-1evj0pt" for="d-agent-platform">Platform</label> <select id="d-agent-platform" class="control-input svelte-1evj0pt"><option>opencode</option><option>claude</option><option>opencode-sdk</option></select></div> <!></div></div> <div class="drawer-footer svelte-1evj0pt"><button class="btn btn-secondary">Cancel</button> <button class="btn btn-primary">Apply</button></div></div>`,1);function Zi(e,t){C(t,!0);let r=S(t,`draft`,15);var a=Xi(),o=y(a),c=v(o,2),l=s(c),u=v(s(l),2);F(l);var d=v(l,2),f=s(d),p=s(f),m=v(s(p),2);U(m),F(p);var h=v(p,2),g=v(s(h),2),_=s(g);_.value=_.__value=`opencode`;var b=v(_);b.value=b.__value=`claude`;var x=v(b);x.value=x.__value=`opencode-sdk`,F(g),F(h);var w=v(h,2),T=e=>{var t=Ji(),n=y(t),i=v(s(n),2);U(i),F(n);var a=v(n,2),o=v(s(a),2);U(o),F(a),P(i,()=>r().bin,e=>r(r().bin=e,!0)),P(o,()=>r().args,e=>r(r().args=e,!0)),N(e,t)},E=e=>{var t=Yi(),n=y(t),i=v(s(n),2);U(i),F(n);var a=v(n,2),o=v(s(a),2);U(o),D(o,`placeholder`,"${PWD}"),F(a),P(i,()=>r().model,e=>r(r().model=e,!0)),P(o,()=>r().workspace,e=>r(r().workspace=e,!0)),N(e,t)};n(w,e=>{r().platform===`opencode-sdk`?e(E,-1):e(T)}),F(f),F(d);var O=v(d,2),k=s(O),A=v(k,2);F(O),F(c),i(`click`,o,function(...e){t.oncancel?.apply(this,e)}),i(`click`,u,function(...e){t.oncancel?.apply(this,e)}),P(m,()=>r().name,e=>r(r().name=e,!0)),I(g,()=>r().platform,e=>r(r().platform=e,!0)),i(`click`,k,function(...e){t.oncancel?.apply(this,e)}),i(`click`,A,function(...e){t.onapply?.apply(this,e)}),N(e,a),j()}p([`click`]);var Qi=[`reflect`,`distill`,`consolidate`,`validation`,`memoryInference`,`graphExtraction`,`extract`,`triage`],$i={reflect:`Propose stash updates via self-reflection`,distill:`Quality-judge and distill feedback`,consolidate:`Deduplicate and merge overlapping memories`,validation:`Third-model confidence and staleness scoring`,memoryInference:`Derive structured memories from pending files`,graphExtraction:`Extract entities and relations for graph search`,extract:`Read session logs and queue insight proposals`,triage:`Auto-review and accept/promote queued proposals`},ea={reflect:!0,distill:!0,consolidate:!1,validation:!1,memoryInference:!0,graphExtraction:!0,extract:!0,triage:!1};function ta(e){if(typeof e==`number`)return isNaN(e)?void 0:e;let t=parseFloat(e);return e.trim()===``||isNaN(t)?void 0:t}function na(e){if(typeof e==`number`)return isNaN(e)?void 0:Math.trunc(e);let t=parseInt(e,10);return e.trim()===``||isNaN(t)?void 0:t}function ra(e){return{enabled:e,mode:``,profile:``,timeoutMs:``,allowedTypes:``,qualityGate:``,contradictionDetection:``,defaultSince:``,maxTotalChars:``,maxChunkSize:``,applyMode:``,policy:``,maxAcceptsPerRun:``,maxDiffLines:``,rejectEmpty:!1,judgment:{mode:``,profile:``,timeoutMs:``},rest:{}}}var ia=e=>typeof e==`object`&&e&&`enabled`in e?e.enabled?`on`:`off`:``,aa=new Set([`enabled`,`mode`,`profile`,`timeoutMs`,`allowedTypes`,`qualityGate`,`contradictionDetection`,`defaultSince`,`maxTotalChars`,`maxChunkSize`,`applyMode`,`policy`,`maxAcceptsPerRun`,`maxDiffLines`,`rejectEmpty`,`judgment`]);function oa(e,t){let n=ra(t);if(typeof e==`boolean`)return n.enabled=e,n;if(typeof e!=`object`||!e||Array.isArray(e))return n;let r=e;if(typeof r.enabled==`boolean`&&(n.enabled=r.enabled),n.mode=r.mode??``,n.profile=r.profile??``,n.timeoutMs=r.timeoutMs==null?``:String(r.timeoutMs),n.allowedTypes=Array.isArray(r.allowedTypes)?r.allowedTypes.join(`, `):``,n.qualityGate=ia(r.qualityGate),n.contradictionDetection=ia(r.contradictionDetection),n.defaultSince=r.defaultSince??``,n.maxTotalChars=r.maxTotalChars==null?``:String(r.maxTotalChars),n.maxChunkSize=r.maxChunkSize==null?``:String(r.maxChunkSize),n.applyMode=r.applyMode??``,n.policy=r.policy??``,n.maxAcceptsPerRun=r.maxAcceptsPerRun==null?``:String(r.maxAcceptsPerRun),n.maxDiffLines=r.maxDiffLines==null?``:String(r.maxDiffLines),n.rejectEmpty=r.rejectEmpty===!0,typeof r.judgment==`object`&&r.judgment!==null){let e=r.judgment;n.judgment={mode:e.mode??``,profile:e.profile??``,timeoutMs:e.timeoutMs==null?``:String(e.timeoutMs)}}for(let[e,t]of Object.entries(r))aa.has(e)||(n.rest[e]=t);return n}function sa(e){let t={...e.rest,enabled:e.enabled};e.mode&&(t.mode=e.mode),e.profile&&(t.profile=e.profile),e.timeoutMs!==``&&(t.timeoutMs=parseInt(e.timeoutMs,10));let n=e.allowedTypes.split(`,`).map(e=>e.trim()).filter(Boolean);n.length&&(t.allowedTypes=n),e.qualityGate&&(t.qualityGate={enabled:e.qualityGate===`on`}),e.contradictionDetection&&(t.contradictionDetection={enabled:e.contradictionDetection===`on`}),e.defaultSince&&(t.defaultSince=e.defaultSince);let r=na(e.maxTotalChars);r!==void 0&&(t.maxTotalChars=r);let i=na(e.maxChunkSize);i!==void 0&&(t.maxChunkSize=i),e.applyMode&&(t.applyMode=e.applyMode),e.policy&&(t.policy=e.policy);let a=na(e.maxAcceptsPerRun);a!==void 0&&(t.maxAcceptsPerRun=a);let o=na(e.maxDiffLines);o!==void 0&&(t.maxDiffLines=o),e.rejectEmpty&&(t.rejectEmpty=!0);let s={};return e.judgment.mode&&(s.mode=e.judgment.mode),e.judgment.profile&&(s.profile=e.judgment.profile),e.judgment.timeoutMs!==``&&(s.timeoutMs=parseInt(e.judgment.timeoutMs,10)),Object.keys(s).length&&(t.judgment=s),t}var ca=M(`<option></option>`),la=M(`<label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Quality gate</span> <select class="control-input svelte-1ndbe78"><option>Default</option><option>Enabled</option><option>Disabled</option></select></label>`),ua=M(`<label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Contradiction detection</span> <select class="control-input svelte-1ndbe78"><option>Default</option><option>Enabled</option><option>Disabled</option></select></label>`),da=M(`<label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Default since</span> <input class="control-input svelte-1ndbe78" type="text" spellcheck="false" placeholder="e.g. 7d, 2026-01-01"/></label> <label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Max total chars</span> <input class="control-input control-input--narrow svelte-1ndbe78" type="number" min="1"/></label> <label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Max chunk size (1–50)</span> <input class="control-input control-input--narrow svelte-1ndbe78" type="number" min="1" max="50"/></label>`,1),fa=M(`<label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Apply mode</span> <select class="control-input svelte-1ndbe78"><option>Default</option><option>Queue</option><option>Promote</option></select></label> <label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Policy</span> <input class="control-input svelte-1ndbe78" type="text" spellcheck="false" placeholder="policy name/ref"/></label> <label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Max accepts per run</span> <input class="control-input control-input--narrow svelte-1ndbe78" type="number" min="1"/></label> <label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Max diff lines</span> <input class="control-input control-input--narrow svelte-1ndbe78" type="number" min="1"/></label> <label class="adv-field adv-field--check svelte-1ndbe78"><input type="checkbox"/> <span class="svelte-1ndbe78">Reject empty diffs</span></label> <div class="adv-field adv-field--wide svelte-1ndbe78"><span class="adv-sublabel svelte-1ndbe78">Judgment (overrides for the accept/reject decision)</span> <div class="proc-adv-grid svelte-1ndbe78"><label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Mode</span> <select class="control-input svelte-1ndbe78"><option>Default</option><option>LLM</option><option>Agent</option><option>SDK</option></select></label> <label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Profile</span> <input class="control-input svelte-1ndbe78" type="text" spellcheck="false" list="llm-profiles-list"/></label> <label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Timeout (ms)</span> <input class="control-input control-input--narrow svelte-1ndbe78" type="number" min="1"/></label></div></div>`,1),pa=M(`<div class="proc-card svelte-1ndbe78"><div class="proc-head svelte-1ndbe78"><input type="checkbox" class="svelte-1ndbe78"/> <div class="proc-name svelte-1ndbe78"><span class="feat-name svelte-1ndbe78"> </span><span class="feat-hint svelte-1ndbe78"> </span></div> <select class="control-input svelte-1ndbe78"><option>Default mode</option><option>LLM (direct call)</option><option>Agent (subprocess)</option><option>SDK (programmatic)</option></select> <input class="control-input svelte-1ndbe78" type="text" spellcheck="false" list="llm-profiles-list" placeholder="— default profile —"/> <input class="control-input control-input--narrow svelte-1ndbe78" type="number" min="1" placeholder="timeout ms"/></div> <details class="proc-adv svelte-1ndbe78"><summary class="svelte-1ndbe78">Advanced</summary> <div class="proc-adv-grid svelte-1ndbe78"><label class="adv-field svelte-1ndbe78"><span class="svelte-1ndbe78">Allowed types (comma-separated)</span> <input class="control-input svelte-1ndbe78" type="text" spellcheck="false" placeholder="skill, knowledge, …"/></label> <!> <!> <!> <!></div></details></div>`),ma=M(`<datalist id="llm-profiles-list"></datalist> <div class="drawer-scrim svelte-1ndbe78" role="presentation"></div> <div class="drawer svelte-1ndbe78" role="dialog" aria-modal="true" aria-label="Edit profile"><div class="drawer-header svelte-1ndbe78"><h3 class="drawer-title svelte-1ndbe78">Improve Profile</h3> <button class="drawer-close svelte-1ndbe78" aria-label="Close">✕</button></div> <div class="drawer-body svelte-1ndbe78"><div class="controls controls--grid svelte-1ndbe78"><div class="control-group svelte-1ndbe78"><label class="control-label svelte-1ndbe78" for="d-imp-name">Profile Name</label> <input id="d-imp-name" class="control-input svelte-1ndbe78" type="text" spellcheck="false" placeholder="e.g. default"/></div> <div class="control-group control-group--wide svelte-1ndbe78"><label class="control-label svelte-1ndbe78" for="d-imp-desc">Description</label> <input id="d-imp-desc" class="control-input svelte-1ndbe78" type="text" spellcheck="false" placeholder="Optional description"/></div> <div class="control-group svelte-1ndbe78"><label class="control-label svelte-1ndbe78" for="d-imp-limit">Max proposals per run</label> <input id="d-imp-limit" class="control-input control-input--narrow svelte-1ndbe78" type="number" min="1" max="100"/></div> <div class="control-group svelte-1ndbe78"><label class="control-label svelte-1ndbe78" for="d-imp-autoacc">Auto-accept threshold (0 = manual)</label> <input id="d-imp-autoacc" class="control-input control-input--narrow svelte-1ndbe78" type="number" min="0" max="1" step="0.05"/></div></div> <div class="proc-list svelte-1ndbe78"></div> <div class="controls controls--grid svelte-1ndbe78"><div class="control-group svelte-1ndbe78"><label class="control-label svelte-1ndbe78" for="d-imp-sync">Git sync after run</label> <select id="d-imp-sync" class="control-input svelte-1ndbe78"><option>Default</option><option>Enabled</option><option>Disabled</option></select></div> <div class="control-group svelte-1ndbe78"><label class="control-label svelte-1ndbe78" for="d-imp-syncpush">Push to remote</label> <select id="d-imp-syncpush" class="control-input svelte-1ndbe78"><option>Default</option><option>Enabled</option><option>Disabled</option></select></div> <div class="control-group control-group--wide svelte-1ndbe78"><label class="control-label svelte-1ndbe78" for="d-imp-syncmsg">Commit message</label> <input id="d-imp-syncmsg" class="control-input svelte-1ndbe78" type="text" spellcheck="false" placeholder="Optional commit message"/></div></div></div> <div class="drawer-footer svelte-1ndbe78"><button class="btn btn-secondary">Cancel</button> <button class="btn btn-primary">Apply</button></div></div>`,1);function ha(e,t){C(t,!0);let a=S(t,`draft`,15);var c=ma(),u=y(c);g(u,21,()=>t.llmProfileNames,r,(e,t)=>{var n=ca(),r={};o(()=>{r!==(r=l(t))&&(n.value=(n.__value=l(t))??``)}),N(e,n)}),F(u);var d=v(u,2),p=v(d,2),m=s(p),h=v(s(m),2);F(m);var _=v(m,2),b=s(_),x=s(b),w=v(s(x),2);U(w),F(x);var O=v(x,2),k=v(s(O),2);U(k),F(O);var A=v(O,2),M=v(s(A),2);U(M),F(A);var L=v(A,2),R=v(s(L),2);U(R),F(L),F(b);var z=v(b,2);g(z,20,()=>Qi,e=>e,(e,t)=>{let r=H(()=>a().processes[t]);var i=pa(),c=s(i),u=s(c);U(u);var d=v(u,2),p=s(d),m=s(p,!0);F(p);var h=v(p),g=s(h,!0);F(h),F(d);var _=v(d,2),b=s(_);b.value=b.__value=``;var x=v(b);x.value=x.__value=`llm`;var S=v(x);S.value=S.__value=`agent`;var C=v(S);C.value=C.__value=`sdk`,F(_);var w=v(_,2);U(w);var O=v(w,2);U(O),F(c);var k=v(c,2),A=v(s(k),2),j=s(A),M=v(s(j),2);U(M),F(j);var L=v(j,2),R=e=>{var t=la(),n=v(s(t),2),i=s(n);i.value=i.__value=``;var a=v(i);a.value=a.__value=`on`;var o=v(a);o.value=o.__value=`off`,F(n),F(t),I(n,()=>l(r).qualityGate,e=>l(r).qualityGate=e),N(e,t)};n(L,e=>{(t===`reflect`||t===`distill`)&&e(R)});var z=v(L,2),B=e=>{var t=ua(),n=v(s(t),2),i=s(n);i.value=i.__value=``;var a=v(i);a.value=a.__value=`on`;var o=v(a);o.value=o.__value=`off`,F(n),F(t),I(n,()=>l(r).contradictionDetection,e=>l(r).contradictionDetection=e),N(e,t)};n(z,e=>{t===`consolidate`&&e(B)});var V=v(z,2),W=e=>{var t=da(),n=y(t),i=v(s(n),2);U(i),F(n);var a=v(n,2),o=v(s(a),2);U(o),F(a);var c=v(a,2),u=v(s(c),2);U(u),F(c),P(i,()=>l(r).defaultSince,e=>l(r).defaultSince=e),P(o,()=>l(r).maxTotalChars,e=>l(r).maxTotalChars=e),P(u,()=>l(r).maxChunkSize,e=>l(r).maxChunkSize=e),N(e,t)};n(V,e=>{t===`extract`&&e(W)});var G=v(V,2),K=e=>{var t=fa(),n=y(t),i=v(s(n),2),a=s(i);a.value=a.__value=``;var o=v(a);o.value=o.__value=`queue`;var c=v(o);c.value=c.__value=`promote`,F(i),F(n);var u=v(n,2),d=v(s(u),2);U(d),F(u);var f=v(u,2),p=v(s(f),2);U(p),F(f);var m=v(f,2),h=v(s(m),2);U(h),F(m);var g=v(m,2),_=s(g);U(_),E(2),F(g);var b=v(g,2),x=v(s(b),2),S=s(x),C=v(s(S),2),w=s(C);w.value=w.__value=``;var D=v(w);D.value=D.__value=`llm`;var O=v(D);O.value=O.__value=`agent`;var k=v(O);k.value=k.__value=`sdk`,F(C),F(S);var A=v(S,2),j=v(s(A),2);U(j),F(A);var M=v(A,2),L=v(s(M),2);U(L),F(M),F(x),F(b),I(i,()=>l(r).applyMode,e=>l(r).applyMode=e),P(d,()=>l(r).policy,e=>l(r).policy=e),P(p,()=>l(r).maxAcceptsPerRun,e=>l(r).maxAcceptsPerRun=e),P(h,()=>l(r).maxDiffLines,e=>l(r).maxDiffLines=e),T(_,()=>l(r).rejectEmpty,e=>l(r).rejectEmpty=e),I(C,()=>l(r).judgment.mode,e=>l(r).judgment.mode=e),P(j,()=>l(r).judgment.profile,e=>l(r).judgment.profile=e),P(L,()=>l(r).judgment.timeoutMs,e=>l(r).judgment.timeoutMs=e),N(e,t)};n(G,e=>{t===`triage`&&e(K)}),F(A),F(k),F(i),o(()=>{D(u,`aria-label`,`${t??``} enabled`),f(m,t),f(g,$i[t]),D(_,`aria-label`,`${t??``} mode`),D(w,`aria-label`,`${t??``} profile`),D(O,`aria-label`,`${t??``} timeout`)}),T(u,()=>l(r).enabled,e=>l(r).enabled=e),I(_,()=>l(r).mode,e=>l(r).mode=e),P(w,()=>l(r).profile,e=>l(r).profile=e),P(O,()=>l(r).timeoutMs,e=>l(r).timeoutMs=e),P(M,()=>l(r).allowedTypes,e=>l(r).allowedTypes=e),N(e,i)}),F(z);var B=v(z,2),V=s(B),W=v(s(V),2),G=s(W);G.value=G.__value=``;var K=v(G);K.value=K.__value=`on`;var ee=v(K);ee.value=ee.__value=`off`,F(W),F(V);var te=v(V,2),ne=v(s(te),2),q=s(ne);q.value=q.__value=``;var J=v(q);J.value=J.__value=`on`;var re=v(J);re.value=re.__value=`off`,F(ne),F(te);var Y=v(te,2),X=v(s(Y),2);U(X),F(Y),F(B),F(_);var Z=v(_,2),ie=s(Z),ae=v(ie,2);F(Z),F(p),i(`click`,d,function(...e){t.oncancel?.apply(this,e)}),i(`click`,h,function(...e){t.oncancel?.apply(this,e)}),P(w,()=>a().name,e=>a(a().name=e,!0)),P(k,()=>a().description,e=>a(a().description=e,!0)),P(M,()=>a().limit,e=>a(a().limit=e,!0)),P(R,()=>a().autoAccept,e=>a(a().autoAccept=e,!0)),I(W,()=>a().syncEnabled,e=>a(a().syncEnabled=e,!0)),I(ne,()=>a().syncPush,e=>a(a().syncPush=e,!0)),P(X,()=>a().syncMessage,e=>a(a().syncMessage=e,!0)),i(`click`,ie,function(...e){t.oncancel?.apply(this,e)}),i(`click`,ae,function(...e){t.onapply?.apply(this,e)}),N(e,c),j()}p([`click`]);var ga=M(`<div class="error-banner svelte-19wb2va"><span> </span></div>`),_a=M(`<p class="section-note section-note--lead svelte-19wb2va">The AI services your assistant uses to build and search its memory — the language models that organize memories, the embedding provider for semantic search, and the maintenance pipeline.</p> <!> <!> <!> <!>`,1),va=M(`<div class="panel" role="tabpanel"><div class="panel-header svelte-19wb2va"><h2 class="svelte-19wb2va">Knowledge</h2> <div class="panel-header-actions svelte-19wb2va"><button class="btn btn-secondary btn-sm"><!> Refresh</button> <button class="btn btn-primary btn-sm"><!> Save</button></div></div> <!> <div class="panel-body svelte-19wb2va"><div class="k-tabs svelte-19wb2va" role="tablist" aria-label="Knowledge sections"><button role="tab">AI Services</button> <button role="tab">Behavior</button></div> <!> <!></div> <!></div>`);function ya(t,r){C(r,!0);let a=e(!1),c=e(!1),u=e(``),d=e(b([])),p=e(``),h=e(b([])),g=e(``),_=e(b([])),x=e(``),S=e(``),w=e(``),T=e(``),O=e(``),k=e(1536),A=e(``),M=e(``),P=e(``),I=e(``),L=e(``),R=e(`auto`),z=e(`json`),V=e(`brief`),U=e(``),G=e(``),K=e(``),ee=e(``),te=e(``),ne=e(``),q=e(``),J=e(``),Y=e(`ai-services`),X=e(null),Z=e(null),ie=e(null),ae=e(null),oe=H(()=>l(d).map(e=>e.name).filter(e=>e));function se(){return{id:crypto.randomUUID(),name:``,endpoint:``,model:``,provider:``,apiKey:``,showApiKey:!1,temperature:``,maxTokens:``,timeoutMs:``,concurrency:``,contextLength:``,judgeModel:``,supportsJsonSchema:!1,enableThinking:!1,structuredOutput:!1,extraParams:``}}function ce(){return{id:crypto.randomUUID(),name:``,platform:`opencode`,bin:``,args:``,workspace:``,model:``}}function le(){let e={};for(let t of Qi)e[t]=ra(ea[t]);return{id:crypto.randomUUID(),name:``,description:``,limit:25,autoAccept:0,processes:e,syncEnabled:``,syncPush:``,syncMessage:``}}function ue(e){return{endpoint:e.endpoint??``,model:e.model??``,provider:e.provider??``,apiKey:e.apiKey??``,showApiKey:!1,temperature:e.temperature==null?``:String(e.temperature),maxTokens:e.maxTokens==null?``:String(e.maxTokens),timeoutMs:e.timeoutMs==null?``:String(e.timeoutMs),concurrency:e.concurrency==null?``:String(e.concurrency),contextLength:e.contextLength==null?``:String(e.contextLength),judgeModel:e.judgeModel??``,supportsJsonSchema:e.supportsJsonSchema??!1,enableThinking:e.enableThinking??!1,structuredOutput:e.capabilities?.structuredOutput??!1,extraParams:e.extraParams&&typeof e.extraParams==`object`?JSON.stringify(e.extraParams,null,2):``}}function de(e){let t={endpoint:e.endpoint,model:e.model};e.provider&&(t.provider=e.provider),e.apiKey&&(t.apiKey=e.apiKey);let n=ta(e.temperature);n!==void 0&&(t.temperature=n);let r=na(e.maxTokens);r!==void 0&&(t.maxTokens=r);let i=na(e.timeoutMs);i!==void 0&&(t.timeoutMs=i);let a=na(e.concurrency);a!==void 0&&(t.concurrency=a);let o=na(e.contextLength);if(o!==void 0&&(t.contextLength=o),e.judgeModel&&(t.judgeModel=e.judgeModel),e.supportsJsonSchema&&(t.supportsJsonSchema=!0),e.enableThinking&&(t.enableThinking=!0),e.structuredOutput&&(t.capabilities={structuredOutput:!0}),e.extraParams.trim()){let n;try{n=JSON.parse(e.extraParams)}catch{throw Error(`LLM profile "${e.name}": extraParams must be valid JSON`)}if(typeof n!=`object`||!n||Array.isArray(n))throw Error(`LLM profile "${e.name}": extraParams must be a JSON object`);t.extraParams=n}return t}function pe(e,t){let n=t.processes??{},r={};for(let e of Qi)r[e]=oa(n[e],ea[e]);let i=t.sync;return{id:crypto.randomUUID(),name:e,description:t.description??``,limit:typeof t.limit==`number`?t.limit:25,autoAccept:typeof t.autoAccept==`number`?t.autoAccept:0,processes:r,syncEnabled:ia(i?{enabled:i.enabled}:void 0),syncPush:ia(i?{enabled:i.push}:void 0),syncMessage:i?.message??``}}function me(e){m(Z,{...e},!0),m(X,`llm`)}function he(e){m(ie,{...e},!0),m(X,`agent`)}function ge(e){let t={};for(let n of Qi){let r=e.processes[n];t[n]={...r,judgment:{...r.judgment},rest:{...r.rest}}}m(ae,{...e,processes:t},!0),m(X,`improve`)}function _e(){if(l(X)===`llm`&&l(Z)){let e={...l(Z)},t=l(d).findIndex(t=>t.id===e.id),n=t>=0?l(d)[t].name:``;m(d,t>=0?l(d).map((n,r)=>r===t?e:n):[...l(d),e],!0),l(p)===n&&m(p,e.name,!0)}else if(l(X)===`agent`&&l(ie)){let e={...l(ie)},t=l(h).findIndex(t=>t.id===e.id),n=t>=0?l(h)[t].name:``;m(h,t>=0?l(h).map((n,r)=>r===t?e:n):[...l(h),e],!0),l(g)===n&&m(g,e.name,!0)}else if(l(X)===`improve`&&l(ae)){let e={...l(ae),processes:{...l(ae).processes}},t=l(_).findIndex(t=>t.id===e.id),n=t>=0?l(_)[t].name:``;m(_,t>=0?l(_).map((n,r)=>r===t?e:n):[...l(_),e],!0),l(x)===n&&m(x,e.name,!0)}ve()}function ve(){m(X,null),m(Z,null),m(ie,null),m(ae,null)}function ye(e,t){if(e===`llm`){let e=l(d).find(e=>e.id===t)?.name??``;l(p)===e&&m(p,``),m(d,l(d).filter(e=>e.id!==t),!0)}else if(e===`agent`){let e=l(h).find(e=>e.id===t)?.name??``;l(g)===e&&m(g,``),m(h,l(h).filter(e=>e.id!==t),!0)}else{let e=l(_).find(e=>e.id===t)?.name??``;l(x)===e&&m(x,``),m(_,l(_).filter(e=>e.id!==t),!0)}l(X)===e&&ve()}async function be(){m(a,!0),m(u,``);try{let{config:e}=await fe(),t=e.profiles,n=t?.llm;m(d,n?Object.entries(n).map(([e,t])=>({id:crypto.randomUUID(),name:e,...ue(t)})):[],!0);let r=t?.agent;m(h,r?Object.entries(r).map(([e,t])=>{let n=t;return{id:crypto.randomUUID(),name:e,platform:n.platform??`opencode`,bin:n.bin??``,args:Array.isArray(n.args)?n.args.join(` `):``,workspace:n.workspace??``,model:n.model??``}}):[],!0);let i=t?.improve;m(_,i?Object.entries(i).map(([e,t])=>pe(e,t)):[],!0);let a=e.defaults;m(p,a?.llm??``,!0),m(g,a?.agent??``,!0),m(x,a?.improve??``,!0);let o=e.embedding;m(S,o?.endpoint??``,!0),m(w,o?.model??``,!0),m(T,o?.provider??``,!0),m(O,o?.apiKey??``,!0),m(k,typeof o?.dimension==`number`?o.dimension:1536,!0),m(A,o?.localModel??``,!0),m(M,o?.batchSize==null?``:String(o.batchSize),!0),m(P,o?.chunkSize==null?``:String(o.chunkSize),!0),m(I,o?.contextLength==null?``:String(o.contextLength),!0);let s=o?.ollamaOptions;m(L,s?.num_ctx==null?``:String(s.num_ctx),!0),m(R,e.semanticSearchMode??`auto`,!0);let c=e.output;m(z,c?.format??`json`,!0),m(V,c?.detail??`brief`,!0);let l=e=>typeof e==`number`?String(e):``,u=e=>e&&typeof e==`object`&&`enabled`in e?e.enabled?`on`:`off`:``,f=e.improve,v=f?.utilityDecay;m(U,l(v?.halfLifeDays),!0),m(G,l(v?.feedbackStabilityBoost),!0),m(K,l(f?.eventRetentionDays),!0);let y=e.search;m(ee,l(y?.minScore),!0),m(te,u(y?.curateRerank),!0);let b=e.feedback;m(ne,typeof b?.requireReason==`boolean`?b.requireReason?`on`:`off`:``,!0),m(q,Array.isArray(b?.allowedFailureModes)?b.allowedFailureModes.join(`, `):``,!0),m(J,e.index&&typeof e.index==`object`?JSON.stringify(e.index,null,2):``,!0)}catch(e){m(u,e instanceof Error?e.message:`Failed to load AKM config.`,!0)}finally{m(a,!1)}}async function xe(){m(c,!0),m(u,``);try{let e={};for(let t of l(d))t.name.trim()&&(e[t.name.trim()]=de(t));let t={};for(let e of l(h)){if(!e.name.trim())continue;let n={platform:e.platform};e.bin&&(n.bin=e.bin),e.args&&(n.args=e.args.split(/\s+/).filter(Boolean)),e.workspace&&(n.workspace=e.workspace),e.model&&(n.model=e.model),t[e.name.trim()]=n}let n={};for(let e of l(_)){if(!e.name.trim())continue;let t={};for(let n of Qi)t[n]=sa(e.processes[n]);let r={limit:e.limit,processes:t};e.description&&(r.description=e.description),e.autoAccept>0&&(r.autoAccept=e.autoAccept);let i={};e.syncEnabled&&(i.enabled=e.syncEnabled===`on`),e.syncPush&&(i.push=e.syncPush===`on`),e.syncMessage.trim()&&(i.message=e.syncMessage.trim()),Object.keys(i).length&&(r.sync=i),n[e.name.trim()]=r}let r={endpoint:l(S),model:l(w),dimension:l(k)};l(T)&&(r.provider=l(T)),l(O)&&(r.apiKey=l(O)),l(A)&&(r.localModel=l(A));let i=na(l(M));i!==void 0&&(r.batchSize=i);let a=na(l(P));a!==void 0&&(r.chunkSize=a);let o=na(l(I));o!==void 0&&(r.contextLength=o);let s=na(l(L));s!==void 0&&(r.ollamaOptions={num_ctx:s});let c={};l(p)&&(c.llm=l(p)),l(g)&&(c.agent=l(g)),l(x)&&(c.improve=l(x));let u={},f={},m=ta(l(U));m!==void 0&&(f.halfLifeDays=m);let v=ta(l(G));v!==void 0&&(f.feedbackStabilityBoost=v),Object.keys(f).length&&(u.utilityDecay=f);let y=ta(l(K));y!==void 0&&(u.eventRetentionDays=y);let b={},C=ta(l(ee));C!==void 0&&(b.minScore=C),l(te)&&(b.curateRerank={enabled:l(te)===`on`});let E={};l(ne)&&(E.requireReason=l(ne)===`on`);let D=l(q).split(`,`).map(e=>e.trim()).filter(Boolean);D.length&&(E.allowedFailureModes=D);let j;if(l(J).trim()){let e;try{e=JSON.parse(l(J))}catch{throw Error(`Index config must be valid JSON`)}if(typeof e!=`object`||!e||Array.isArray(e))throw Error(`Index config must be a JSON object keyed by pass name`);j=e}await re({profiles:{llm:e,agent:t,improve:n},defaults:c,embedding:r,semanticSearchMode:l(R),output:{format:l(z),detail:l(V)},...Object.keys(u).length?{improve:u}:{},...Object.keys(b).length?{search:b}:{},...Object.keys(E).length?{feedback:E}:{},...j===void 0?{}:{index:j}}),Q.push(`success`,`AKM config saved.`)}catch(e){let t=e instanceof Error?e.message:`Failed to save AKM config.`;Q.push(`error`,t)}finally{m(c,!1)}}B(()=>{r.tokenStored&&be()});var Se=va(),Ce=s(Se),we=v(s(Ce),2),Te=s(we),Ee=s(Te),De=e=>{$(e,{})};n(Ee,e=>{l(a)&&e(De)}),E(),F(Te);var Oe=v(Te,2),ke=s(Oe),Ae=e=>{$(e,{})};n(ke,e=>{l(c)&&e(Ae)}),E(),F(Oe),F(we),F(Ce);var je=v(Ce,2),Me=e=>{var t=ga(),n=s(t),r=s(n,!0);F(n),F(t),o(()=>f(r,l(u))),N(e,t)};n(je,e=>{l(u)&&e(Me)});var Ne=v(je,2),Pe=s(Ne),Fe=s(Pe);let Ie;var Le=v(Fe,2);let Re;F(Pe);var ze=v(Pe,2),Be=e=>{var t=_a(),n=v(y(t),2);{let e=H(()=>l(a)||l(c));Fi(n,{get disabled(){return l(e)},onedit:e=>me(e),onadd:()=>{m(Z,se(),!0),m(X,`llm`)},onremove:e=>ye(`llm`,e),get profiles(){return l(d)},set profiles(e){m(d,e,!0)},get defaultName(){return l(p)},set defaultName(e){m(p,e,!0)}})}var r=v(n,2);{let e=H(()=>l(a)||l(c));Bi(r,{get disabled(){return l(e)},onedit:e=>he(e),onadd:()=>{m(ie,ce(),!0),m(X,`agent`)},onremove:e=>ye(`agent`,e),get profiles(){return l(h)},set profiles(e){m(h,e,!0)},get defaultName(){return l(g)},set defaultName(e){m(g,e,!0)}})}var i=v(r,2);{let e=H(()=>l(a)||l(c));Gi(i,{get disabled(){return l(e)},onedit:e=>ge(e),onadd:()=>{m(ae,le(),!0),m(X,`improve`)},onremove:e=>ye(`improve`,e),get profiles(){return l(_)},set profiles(e){m(_,e,!0)},get defaultName(){return l(x)},set defaultName(e){m(x,e,!0)}})}var o=v(i,2);{let e=H(()=>l(a)||l(c));Ti(o,{get disabled(){return l(e)},get endpoint(){return l(S)},set endpoint(e){m(S,e,!0)},get model(){return l(w)},set model(e){m(w,e,!0)},get provider(){return l(T)},set provider(e){m(T,e,!0)},get apiKey(){return l(O)},set apiKey(e){m(O,e,!0)},get dimension(){return l(k)},set dimension(e){m(k,e,!0)},get localModel(){return l(A)},set localModel(e){m(A,e,!0)},get batchSize(){return l(M)},set batchSize(e){m(M,e,!0)},get chunkSize(){return l(P)},set chunkSize(e){m(P,e,!0)},get contextLength(){return l(I)},set contextLength(e){m(I,e,!0)},get ollamaNumCtx(){return l(L)},set ollamaNumCtx(e){m(L,e,!0)}})}N(e,t)};n(ze,e=>{l(Y)===`ai-services`&&e(Be)});var Ve=v(ze,2),He=e=>{{let t=H(()=>l(a)||l(c));Di(e,{get disabled(){return l(t)},get semanticSearchMode(){return l(R)},set semanticSearchMode(e){m(R,e,!0)},get outputFormat(){return l(z)},set outputFormat(e){m(z,e,!0)},get outputDetail(){return l(V)},set outputDetail(e){m(V,e,!0)},get imHalfLife(){return l(U)},set imHalfLife(e){m(U,e,!0)},get imFeedbackBoost(){return l(G)},set imFeedbackBoost(e){m(G,e,!0)},get imEventRetention(){return l(K)},set imEventRetention(e){m(K,e,!0)},get searchMinScore(){return l(ee)},set searchMinScore(e){m(ee,e,!0)},get searchCurateRerank(){return l(te)},set searchCurateRerank(e){m(te,e,!0)},get fbRequireReason(){return l(ne)},set fbRequireReason(e){m(ne,e,!0)},get fbFailureModes(){return l(q)},set fbFailureModes(e){m(q,e,!0)},get indexJson(){return l(J)},set indexJson(e){m(J,e,!0)}})}};n(Ve,e=>{l(Y)===`behavior`&&e(He)}),F(Ne);var Ue=v(Ne,2),We=e=>{qi(e,{oncancel:ve,onapply:_e,get draft(){return l(Z)},set draft(e){m(Z,e,!0)}})},Ge=e=>{Zi(e,{oncancel:ve,onapply:_e,get draft(){return l(ie)},set draft(e){m(ie,e,!0)}})},Ke=e=>{ha(e,{get llmProfileNames(){return l(oe)},oncancel:ve,onapply:_e,get draft(){return l(ae)},set draft(e){m(ae,e,!0)}})};n(Ue,e=>{l(X)===`llm`&&l(Z)?e(We):l(X)===`agent`&&l(ie)?e(Ge,1):l(X)===`improve`&&l(ae)&&e(Ke,2)}),F(Se),o(()=>{Te.disabled=l(a)||l(c)||!r.tokenStored,Oe.disabled=l(a)||l(c)||!r.tokenStored,Ie=W(Fe,1,`k-tab svelte-19wb2va`,null,Ie,{"k-tab--active":l(Y)===`ai-services`}),D(Fe,`aria-selected`,l(Y)===`ai-services`),Re=W(Le,1,`k-tab svelte-19wb2va`,null,Re,{"k-tab--active":l(Y)===`behavior`}),D(Le,`aria-selected`,l(Y)===`behavior`)}),i(`click`,Te,()=>void be()),i(`click`,Oe,()=>void xe()),i(`click`,Fe,()=>{m(Y,`ai-services`)}),i(`click`,Le,()=>{m(Y,`behavior`)}),N(t,Se),j()}p([`click`]);var ba=M(`<div class="hs-loading svelte-fv9i73"><!> Checking host stash…</div>`),xa=M(`<p class="section-note svelte-fv9i73">Host AKM sharing isn't available on this deployment.</p>`),Sa=M(`<p class="section-note svelte-fv9i73"><span class="badge badge-neutral">Not detected</span> No personal AKM was found on this host (<code>~/.config/akm/config.json</code>).
14
- Run <code>akm init</code> on this machine to enable sharing.</p>`),Ca=M(`<code class="host-akm-path svelte-fv9i73"> </code>`),wa=M(`<div class="control-group control-group--wide svelte-fv9i73"><label class="control-label control-label--checkbox svelte-fv9i73"><input type="checkbox"/> Also import host LLM/agent profiles (read-only snapshot)</label></div>`),Ta=M(`<button class="btn btn-secondary btn-sm">Re-import host profiles</button>`),Ea=M(`<div class="controls controls--grid svelte-fv9i73"><div class="control-group control-group--wide svelte-fv9i73"><span class="control-label svelte-fv9i73">Status</span> <div class="host-akm-status svelte-fv9i73"><span> </span> <!></div></div> <!> <div class="control-group control-group--wide host-akm-actions svelte-fv9i73"><button class="btn btn-secondary btn-sm"><!> </button> <!></div></div>`),Da=M(`<section class="config-section svelte-fv9i73"><p class="section-note svelte-fv9i73">Let the assistant read (and, on explicit request, contribute back to) your
15
- personal AKM stash on this machine (<code>~/akm</code>). Each side keeps its own
16
- primary stash, database, and cache — only the knowledge files are shared, as a
17
- writable secondary source. Your files' ownership and primary stash are never changed.</p> <p class="hs-restart svelte-fv9i73">⚠ Changes take effect after the next stack restart.</p> <!></section>`),Oa=M(`<div class="panel" role="tabpanel"><div class="panel-header svelte-fv9i73"><h2 class="svelte-fv9i73">Host knowledge sharing</h2></div> <div class="panel-body"><!></div></div>`);function ka(t,r){C(r,!0);let a=e(null),c=e(!0),u=e(!1),d=e(!0);async function p(){m(c,!0);try{m(a,await be(),!0)}catch{m(a,null)}finally{m(c,!1)}}async function h(){if(!l(u)){m(u,!0);try{if(l(a)?.sharing.enabled)m(a,await _e(),!0),Q.push(`success`,`Host AKM sharing disabled. Restart the stack to apply.`);else{let e=await de({writable:!0,importProfiles:l(d)});m(a,e,!0);let t=e.profilesImported?.length?` Imported: ${e.profilesImported.join(`, `)}.`:``;Q.push(`success`,`Host AKM sharing enabled.${t} Takes effect on the assistant's next AKM run / stack restart.`)}}catch(e){Q.push(`error`,e instanceof Error?e.message:`Failed to update host AKM sharing.`)}finally{m(u,!1)}}}async function g(){if(!l(u)){m(u,!0);try{let e=await de({writable:!0,importProfiles:!0});m(a,e,!0);let t=e.profilesImported?.length?e.profilesImported.join(`, `):`none`;Q.push(`success`,`Re-imported host profiles: ${t}.`)}catch(e){Q.push(`error`,e instanceof Error?e.message:`Failed to re-import host profiles.`)}finally{m(u,!1)}}}B(()=>{r.tokenStored&&p()});var _=Oa(),y=v(s(_),2),b=s(y),x=e=>{var t=ba();$(s(t),{}),E(),F(t),N(e,t)},S=e=>{N(e,xa())},w=e=>{var t=Da(),c=v(s(t),4),p=e=>{N(e,Sa())},_=e=>{var t=Ea(),c=s(t),p=v(s(c),2),_=s(p),y=s(_,!0);F(_);var b=v(_,2),x=e=>{var t=Ca(),n=s(t,!0);F(t),o(()=>f(n,l(a).sharing.hostStashPath)),N(e,t)};n(b,e=>{l(a).sharing.hostStashPath&&e(x)}),F(p),F(c);var S=v(c,2),C=e=>{var t=wa(),n=s(t),r=s(n);U(r),E(),F(n),F(t),o(()=>r.disabled=l(u)),T(r,()=>l(d),e=>m(d,e)),N(e,t)};n(S,e=>{l(a).sharing.enabled||e(C)});var w=v(S,2),D=s(w),O=s(D),k=e=>{$(e,{})};n(O,e=>{l(u)&&e(k)});var A=v(O);F(D);var j=v(D,2),M=e=>{var t=Ta();o(()=>t.disabled=l(u)||!r.tokenStored),i(`click`,t,()=>void g()),N(e,t)};n(j,e=>{l(a).sharing.enabled&&e(M)}),F(w),F(t),o(()=>{W(_,1,`badge ${l(a).sharing.enabled?`badge-enabled`:`badge-disabled`}`),f(y,l(a).sharing.enabled?`Enabled`:`Disabled`),D.disabled=l(u)||!r.tokenStored,f(A,` ${l(a).sharing.enabled?`Disable host sharing`:`Enable host sharing`}`)}),i(`click`,D,()=>void h()),N(e,t)};n(c,e=>{l(a).sharing.available?e(_,-1):e(p)}),F(t),N(e,t)};n(b,e=>{l(c)?e(x):l(a)===null?e(S,1):e(w,-1)}),F(y),F(_),N(t,_),j()}p([`click`]);var Aa=M(`<span class="test-result test-result--ok svelte-1b9l1t7" aria-live="polite"><svg aria-hidden="true" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg> Working</span>`),ja=M(`<span class="test-result test-result--err svelte-1b9l1t7" aria-live="polite"><svg aria-hidden="true" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg> </span>`),Ma=M(`<div class="tts-extras svelte-1b9l1t7"><div class="test-voice-row svelte-1b9l1t7"><button type="button" class="btn btn-secondary btn-sm"><!> Test voice</button> <!></div> <label class="auto-speak-toggle svelte-1b9l1t7"><input type="checkbox" class="svelte-1b9l1t7"/> <span>Speak assistant replies aloud automatically</span></label></div>`),Na=M(`<section class="engine-section svelte-1b9l1t7"><h3 class="engine-heading svelte-1b9l1t7">Text-to-Speech</h3> <p class="engine-subheading svelte-1b9l1t7">How your assistant speaks</p> <!> <!></section>`);function Pa(e,t){C(t,!0);var r=Na(),a=v(s(r),4);Pe(a,{kind:`tts`,get value(){return t.value},get onchange(){return t.onchange},get engineOptions(){return t.engineOptions},get engineConfigs(){return t.engineConfigs},get reachable(){return t.reachable},reachabilityEngineId:`remote`,get hiddenEngines(){return t.hiddenEngines}});var c=v(a,2),l=e=>{var r=Ma(),a=s(r),c=s(a),l=s(c),u=e=>{$(e,{size:12})};n(l,e=>{t.testingVoice&&e(u)}),E(),F(c);var d=v(c,2),p=e=>{N(e,Aa())},m=e=>{var n=ja(),r=v(s(n));F(n),o(()=>f(r,` ${(t.testError||`Failed`)??``}`)),N(e,n)};n(d,e=>{t.testResult===`success`?e(p):t.testResult===`error`&&e(m,1)}),F(a);var h=v(a,2),g=s(h);U(g),E(2),F(h),F(r),o(()=>{c.disabled=t.testingVoice||t.busy,O(g,t.ttsAutoEnabled)}),i(`click`,c,()=>t.onTest()),i(`change`,g,e=>t.onAutoEnabledChange(e.currentTarget.checked)),N(e,r)};n(c,e=>{t.engineSelected&&e(l)}),F(r),N(e,r),j()}p([`click`,`change`]);var Fa=M(`<section class="engine-section svelte-1qwlk8j"><h3 class="engine-heading svelte-1qwlk8j">Speech-to-Text</h3> <p class="engine-subheading svelte-1qwlk8j">How your assistant listens</p> <!></section>`);function Ia(e,t){var n=Fa();Pe(v(s(n),4),{kind:`stt`,get value(){return t.value},get onchange(){return t.onchange},get engineOptions(){return t.engineOptions},get engineConfigs(){return t.engineConfigs},get reachable(){return t.reachable},reachabilityEngineId:`remote`,get disabledEngines(){return t.disabledEngines},get hiddenEngines(){return t.hiddenEngines}}),F(n),N(e,n)}var La=M(`<section class="engine-section svelte-1r7l91t"><h3 class="engine-heading svelte-1r7l91t">Hardware profile</h3> <!></section>`);function Ra(e,t){var n=La();Fe(v(s(n),2),{get profiles(){return t.profiles},get selectedProfile(){return t.selectedProfile},get onchange(){return t.onchange}}),F(n),N(e,n)}var za=M(`<div class="error-banner svelte-nokcxu"><span> </span></div>`),Ba=M(`<div class="panel" role="tabpanel"><div class="panel-header svelte-nokcxu"><h2 class="svelte-nokcxu">Voice</h2> <div class="panel-header-actions svelte-nokcxu"><button class="btn btn-secondary btn-sm"><!> Refresh</button> <button class="btn btn-primary btn-sm"><!> Save</button></div></div> <!> <div class="panel-body svelte-nokcxu"><p class="section-desc svelte-nokcxu">Configure how the assistant listens and speaks. Choose an engine for each;
18
- the in-app mic uses STT and the optional auto-speak toggle uses TTS.</p> <!> <!> <!></div></div>`);function Va(t,r){C(r,!0);let a=[{id:`openpalm-voice`,name:`OpenPalm Voice`,type:`local`,recommended:!0,desc:`Local Kokoro TTS + Whisper STT bundled together.`},{id:`remote`,name:`Remote (OpenAI-compatible)`,type:`cloud`,desc:`Point at any /v1/audio/speech endpoint (OpenAI, Kokoro, Piper, …).`},{id:`browser`,name:`Browser`,type:`builtin`,desc:`Web Speech API on this device. No setup, voice quality varies.`}],c=[{id:`openpalm-voice`,name:`OpenPalm Voice`,type:`local`,recommended:!0,desc:`Local Kokoro TTS + Whisper STT bundled together.`},{id:`remote`,name:`Remote (OpenAI-compatible)`,type:`cloud`,desc:`Point at any /v1/audio/transcriptions endpoint (Whisper, …).`},{id:`browser`,name:`Browser`,type:`builtin`,desc:`Web Speech API on this device. Chrome/Edge only on desktop.`}],u={"openpalm-voice":{id:`openpalm-voice`,fields:[]},remote:{id:`remote`,fields:[{key:`baseURL`,label:`Endpoint URL`,placeholder:`http://host.docker.internal:8880/v1`,hint:`OpenAI-compatible /v1/audio/speech endpoint.`},{key:`model`,label:`Model`,placeholder:`tts-1`},{key:`voice`,label:`Voice`,placeholder:`alloy`}]},browser:{id:`browser`,fields:[]}},d={"openpalm-voice":{id:`openpalm-voice`,fields:[]},remote:{id:`remote`,fields:[{key:`baseURL`,label:`Endpoint URL`,placeholder:`http://host.docker.internal:9000/v1`,hint:`OpenAI-compatible /v1/audio/transcriptions endpoint.`},{key:`model`,label:`Model`,placeholder:`whisper-1`},{key:`language`,label:`Language`,placeholder:`en`,hint:"A code like `en` or `fr`, or leave blank to detect."}]},browser:{id:`browser`,fields:[{key:`language`,label:`Language`,placeholder:`en-US`}]}},p=()=>({engine:``,baseURL:``,model:``,voice:``,language:``}),h=e(!1),g=e(!1),_=e(``),y=e(b(p())),x=e(b(p())),S=e(b({stt:{remoteConfigured:!1,remoteReachable:!1},tts:{remoteConfigured:!1,remoteReachable:!1}})),w=e(b([])),T=e(``),D=H(()=>l(y).engine===`openpalm-voice`||l(x).engine===`openpalm-voice`),O=e(!1),k=e(!1),A=e(!1),M=e(null),P=e(``);function I(e){return{engine:e.engine,...e.baseURL?{baseURL:e.baseURL}:{},...e.model?{model:e.model}:{},...e.voice?{voice:e.voice}:{},...e.language?{language:e.language}:{}}}function L(e){l(y).engine=e.engine||``,l(y).baseURL=e.baseURL??``,l(y).model=e.model??``,l(y).voice=e.voice??``}function R(e){l(x).engine=e.engine||``,l(x).baseURL=e.baseURL??``,l(x).model=e.model??``,l(x).language=e.language??``}let z=H(()=>{let e={};return l(O)&&Te.browserSttUnsupportedReason&&(e.browser={disabled:!0,reason:Te.browserSttUnsupportedReason}),e}),V=H(()=>l(k)?void 0:new Set([`browser`])),U=H(()=>l(O)?void 0:new Set([`browser`]));function W(e,t){return typeof e==`string`?e===`openpalm-voice`?`openpalm-voice`:e===`browser`||e===(t===`tts`?`browser-tts`:`browser-stt`)?`browser`:!e||e.startsWith(`skip-`)?``:`remote`:``}function G(e,t){let n=p();return!e||typeof e!=`object`?n:(n.engine=W(e.engine,t),typeof e.baseURL==`string`&&(n.baseURL=e.baseURL),typeof e.model==`string`&&(n.model=e.model),t===`tts`&&typeof e.voice==`string`&&(n.voice=e.voice),t===`stt`&&typeof e.language==`string`&&(n.language=e.language),n)}async function K(){m(h,!0),m(_,``);try{let e=await Ae();m(y,G(e.tts,`tts`),!0),m(x,G(e.stt,`stt`),!0);let t=e.availability;if(t&&m(S,t,!0),e.addon){m(w,e.addon.profiles??[],!0);let t=e=>!!e&&e.available!==!1,n=e.addon.selectedProfile??``,r=l(w).find(e=>e.id===n);if(t(r))m(T,n,!0);else{let e=l(w).find(e=>e.id===`addon.voice.cpu`&&t(e))??l(w).find(e=>e.default&&t(e))??l(w).find(e=>t(e));m(T,e?.id??``,!0),r&&e&&n!==e.id&&Q.push(`info`,`"${r.label??n}" profile isn't available on this host${r.reason?` (${r.reason})`:``}. Using "${e.label??e.id}" instead.`)}}}catch(e){m(_,e instanceof Error?e.message:`Failed to load voice settings.`,!0)}finally{m(h,!1)}}function ee(e,t){if(!e.engine)return;let n={enabled:!0,engine:e.engine};return e.engine===`remote`?(e.baseURL&&(n.baseURL=e.baseURL),e.model&&(n.model=e.model),t===`tts`&&e.voice&&(n.voice=e.voice),t===`stt`&&e.language&&(n.language=e.language)):e.engine===`browser`&&t===`stt`&&e.language&&(n.language=e.language),n}async function te(){m(g,!0),m(_,``);let e=l(y).engine===`openpalm-voice`||l(x).engine===`openpalm-voice`,t=null,n=null;e&&(t=Q.push(`info`,`Enabling voice addon…`,{sticky:!0}),n=setTimeout(()=>{t&&Q.push(`info`,`Starting voice addon — this may take a moment…`,{sticky:!0,replaceId:t})},1500));try{let r=await X({tts:ee(l(y),`tts`),stt:ee(l(x),`stt`),...l(D)&&l(T)?{profile:l(T)}:{}});if(n&&=(clearTimeout(n),null),e&&t){let e=r.voiceAddon;r.status===202&&e?(Q.push(`info`,e.message??`Voice image is downloading — this can take several minutes.`,{sticky:!0,replaceId:t}),ne(t),t=null):r.ok&&e?Q.push(`success`,e.wasAlreadyEnabled?`Voice addon ready — let's chat!`:`Voice addon started, let's chat!`,{replaceId:t}):e?Q.push(`error`,e.error??`Voice addon failed to start.`,{replaceId:t}):Q.push(`success`,`Voice settings saved.`,{replaceId:t})}e||Q.push(`success`,`Voice settings saved.`),await K()}catch(r){n&&=(clearTimeout(n),null);let i=r instanceof Error?r.message:`Failed to save voice settings.`;m(_,i,!0),t?Q.push(`error`,i,{replaceId:t}):e&&Q.push(`error`,i)}finally{m(g,!1)}}async function ne(e){let t=Date.now()+30*6e4,n=`pulling`;for(;Date.now()<t;){await new Promise(e=>setTimeout(e,3e3));try{let t=(await Ae()).addon?.activeJob;if(!t){Q.push(`success`,`Voice addon ready — let's chat!`,{replaceId:e}),await K();return}if(t.state===`healthy`){Q.push(`success`,`Voice addon ready — let's chat!`,{replaceId:e}),await K();return}if(t.state===`error`){Q.push(`error`,t.error??`Voice addon failed to start.`,{replaceId:e}),await K();return}if(t.state!==n){n=t.state;let r=t.state===`starting`?`Voice container started — warming up models…`:`Voice image still downloading…`;Q.push(`info`,r,{sticky:!0,replaceId:e})}}catch{}}Q.push(`error`,`Voice addon is taking longer than 30 minutes. Check Docker logs for openpalm-voice.`,{replaceId:e}),await K()}async function q(){if(!l(A)){m(A,!0),m(M,null),m(P,``);try{Te.errorMessage=``,await Se(`Hello! Your voice is working.`),Te.errorMessage?(m(M,`error`),m(P,Te.errorMessage,!0)):m(M,`success`)}catch(e){m(M,`error`),m(P,e instanceof Error?e.message:`Voice test failed.`,!0)}finally{m(A,!1),setTimeout(()=>{m(M,null),m(P,``)},5e3)}}}B(()=>{m(O,`SpeechRecognition`in window||`webkitSpeechRecognition`in window,!0),m(k,`speechSynthesis`in window),r.tokenStored&&K()});var J=Ba(),re=s(J),Y=v(s(re),2),Z=s(Y),ie=s(Z),ae=e=>{$(e,{size:12})};n(ie,e=>{l(h)&&e(ae)}),E(),F(Z);var oe=v(Z,2),se=s(oe),ce=e=>{$(e,{size:12})};n(se,e=>{l(g)&&e(ce)}),E(),F(oe),F(Y),F(re);var le=v(re,2),ue=e=>{var t=za(),n=s(t),r=s(n,!0);F(n),F(t),o(()=>f(r,l(_))),N(e,t)};n(le,e=>{l(_)&&e(ue)});var de=v(le,2),fe=v(s(de),2);{let e=H(()=>I(l(y))),t=H(()=>!!l(y).engine),n=H(()=>l(g)||l(h));Pa(fe,{get value(){return l(e)},onchange:L,get engineOptions(){return a},get engineConfigs(){return u},get reachable(){return l(S).tts},get hiddenEngines(){return l(V)},get engineSelected(){return l(t)},get ttsAutoEnabled(){return Te.ttsAutoEnabled},onAutoEnabledChange:e=>ge(e),get testingVoice(){return l(A)},get testResult(){return l(M)},get testError(){return l(P)},onTest:()=>void q(),get busy(){return l(n)}})}var pe=v(fe,2);{let e=H(()=>I(l(x)));Ia(pe,{get value(){return l(e)},onchange:R,get engineOptions(){return c},get engineConfigs(){return d},get reachable(){return l(S).stt},get disabledEngines(){return l(z)},get hiddenEngines(){return l(U)}})}var me=v(pe,2),he=e=>{Ra(e,{get profiles(){return l(w)},get selectedProfile(){return l(T)},onchange:e=>m(T,e,!0)})};n(me,e=>{l(D)&&l(w).length>0&&e(he)}),F(de),F(J),o(()=>{Z.disabled=l(h)||l(g)||!r.tokenStored,oe.disabled=l(h)||l(g)||!r.tokenStored}),i(`click`,Z,()=>void K()),i(`click`,oe,()=>void te()),N(t,J),j()}p([`click`]);var Ha=M(`<!> <main class="svelte-1jef3w8"><!> <!> <!></main>`,1);function Ua(r,i){C(i,!0);let a=e(!0),o=e(!1),c=e(``),u=e(null),d=e(null),f=e(``),p=e(!1),h=e(!1),g=e(!1),x=e(!1),S=e(!1),T=e(``),E=e(`info`),D=e(null),O=e(``),k=e(null),A=e(null),M=e(``),P=e(null),I=e(`overview`),R=e(!1),V=e(``),U=e(!1),W=e(!1),G=e(!1),K=e(!1),te=e(`latest`),q=e(``),J=e(b([])),re=e(!1),Y=e(b([])),X=e(!1),Z=null;function oe(){ce(),Z=setInterval(()=>{!l(a)&&l(D)&&Q()},1e4)}function ce(){Z!==null&&(clearInterval(Z),Z=null)}L(()=>{ce()});let le=H(()=>l(h)||l(g)),de=H(()=>{if(!l(D))return new Map;let e=new Map;if(l(D).containers)for(let[t,n]of Object.entries(l(D).containers))e.set(t,n);if(l(D).dockerContainers)for(let t of l(D).dockerContainers)e.set(t.Service,t.State);return e}),fe=H(()=>{if(!l(D))return[];let e=new Map;if(l(D).containers)for(let[t,n]of Object.entries(l(D).containers))e.set(t,{id:t,service:t,state:n,docker:null});if(l(D).dockerContainers)for(let t of l(D).dockerContainers){let n=e.get(t.Service);n?(n.state=t.State,n.docker=t,n.id=t.ID):e.set(t.Service,{id:t.ID,service:t.Service||t.Name,state:t.State,docker:t})}return[...e.values()].sort((e,t)=>e.state===`running`&&t.state!==`running`?-1:e.state!==`running`&&t.state===`running`?1:e.service.localeCompare(t.service))});function me(){m(a,!0),m(c,`Invalid password.`),m(f,`Invalid password.`)}async function ge(e){if(l(o))return!1;m(o,!0),m(c,``);try{return(await fetch(`/admin/auth/login`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({password:e}),credentials:`include`})).ok?(m(a,!1),m(c,``),m(f,``),oe(),await _e(),Q(),be(),Se(),Ce(),!0):(me(),!1)}catch(e){return console.warn(`[page] Auth failed:`,e),m(c,`Unable to reach admin API.`),!1}finally{m(o,!1)}}async function _e(){m(p,!0);try{let e=await ee();m(u,e.admin,!0),m(d,e.guardian,!0)}catch(e){console.warn(`[page] Health check failed:`,e),m(u,{status:`error`,service:`admin`},!0),m(d,{status:`error`,service:`guardian`},!0)}m(p,!1)}async function Q(){m(x,!0),m(O,``);try{m(D,await se(),!0)}catch(e){m(D,null);let t=e;t.status===401?(m(O,`Invalid password.`),me()):m(O,`Failed to load containers: ${t.message??e}`)}m(x,!1),l(D)&&m(k,new Date().toLocaleTimeString(),!0)}async function be(){m(S,!0),m(M,``);try{m(A,await ne(),!0)}catch(e){m(A,null);let t=e;t.status===401?(m(M,`Invalid password.`),me()):m(M,`Failed to load automations: ${t.message??e}`)}m(S,!1)}async function Se(){try{let e=await ue();m(V,e.imageTag,!0),m(U,e.inElectron,!0)}catch{}}async function Ce(){m(re,!0),m(X,!0);try{let[e,t]=await Promise.all([ae(),ie()]);if(m(J,e.releases,!0),m(Y,t.versions,!0),!l(q)){let e=t.versions.find(e=>e.distTag===`next`||e.distTag===`latest`)??t.versions[0];e&&m(q,e.version,!0)}}catch{}m(re,!1),m(X,!1)}async function we(){if(!l(le)){m(h,!0);try{let e=await ye();if(e.overallSuccess)m(T,e.restarted.length>0?`Changes applied successfully. Restarted: ${e.restarted.join(`, `)}.`:`Changes applied successfully.`,!0),m(E,`success`);else if(e.failed.length>0){let t=e.failed.map(e=>`${e.service}: ${e.reason}`).join(`; `),n=e.restarted.length>0?` (other services restarted: ${e.restarted.join(`, `)})`:``;m(T,`Apply failed for ${e.failed.length} service(s): ${t}${n}`),m(E,`error`)}else e.dockerAvailable?(m(T,`Apply failed: ${e.error??`unknown error`}`),m(E,`error`)):(m(T,`Config written, but Docker is unavailable — services were not restarted.`),m(E,`error`))}catch(e){let t=e;t.status===401?me():(m(T,`Error applying changes: ${t.message??e}`),m(E,`error`))}m(h,!1)}}async function Te(){if(!l(le)){m(g,!0);try{let e=await ve();m(T,`Upgrade complete (image: ${e.imageTag}). ${e.assetsUpdated.length} asset(s) updated, ${e.restarted.length} service(s) restarted.`),m(E,`success`)}catch(e){let t=e;t.status===401?me():(m(T,`Error upgrading stack: ${t.message??e}`),m(E,`error`))}m(g,!1)}}async function Ee(e){if(!l(W)){m(W,!0);try{let t=await he(e);m(V,t.imageTag,!0),m(te,t.imageTag,!0),m(T,`Image tag set to ${t.imageTag}. Restarted: ${t.restarted.join(`, `)||`none`}.`),m(E,`success`)}catch(e){m(T,`Failed to apply image tag: ${e.message??e}`),m(E,`error`)}m(W,!1)}}async function De(e){if(!l(G)){m(G,!0),m(K,!1);try{await Oe(e),m(q,e,!0),m(K,!0)}catch(e){m(T,`Failed to download UI version: ${e.message??e}`),m(E,`error`)}m(G,!1)}}function ke(){window.openpalm?.restart?.()}async function Ae(e,t){try{await xe(e,t),await Q()}catch(e){let t=e;t.status===401?me():m(O,`Action failed: ${t.message??e}`)}}function Me(e){m(P,l(P)===e?null:e,!0)}let $=H(()=>{if(!l(D))return[];let e=new Set;if(l(D).containers)for(let t of Object.keys(l(D).containers))e.add(t);if(l(D).dockerContainers)for(let t of l(D).dockerContainers)t.Service&&e.add(t.Service);return[...e].sort()});async function Pe(){m(R,!0);try{await pe(),await Q()}catch(e){let t=e;t.status===401?me():m(O,`Pull failed: ${t.message??e}`)}finally{m(R,!1)}}function Fe(e){m(I,e,!0),e===`containers`&&!l(D)&&Q(),e===`automations`&&!l(A)&&be()}function Ie(){me()}B(()=>{(async()=>{m(o,!0);try{let e=await fetch(`/admin/health`,{credentials:`include`});if(e.status===401||e.status===503){m(a,!0),m(o,!1);return}m(a,!1),m(c,``),m(f,``),oe(),_e(),Q(),be(),Se(),Ce()}catch(e){console.warn(`[page] Session probe on mount failed:`,e),m(a,!0),m(c,`Unable to reach admin API.`)}finally{m(o,!1)}})()});var Le=t();w(`1jef3w8`,e=>{_(()=>{z.title=`OpenPalm Console`})});var Re=y(Le),ze=e=>{Ne(e,{onSuccess:ge,get loading(){return l(o)},get error(){return l(c)}})},Ve=e=>{var t=Ha(),r=y(t);je(r,{});var i=v(r,2),a=s(i);Be(a,{get active(){return l(I)},onSelect:Fe});var o=v(a,2),c=e=>{dt(e,{get adminHealth(){return l(u)},get operationResult(){return l(T)},get operationResultType(){return l(E)},tokenStored:!0,get healthLoading(){return l(p)},get applyLoading(){return l(h)},get anyDangerousLoading(){return l(le)},get automationsData(){return l(A)},get mergedServices(){return l(de)},onCheckHealth:_e,onApplyChanges:we,onDismissResult:()=>{m(T,``),m(E,`info`)},onNavigate:Fe})},d=e=>{Dt(e,{get currentImageTag(){return l(V)},get selectedImageTag(){return l(te)},get tagChangeLoading(){return l(W)},get anyDangerousLoading(){return l(le)},tokenStored:!0,get upgradeLoading(){return l(g)},get inElectron(){return l(U)},get uiVersions(){return l(Y)},get uiVersionsLoading(){return l(X)},get selectedUiTag(){return l(q)},get uiDownloadLoading(){return l(G)},get uiDownloadReady(){return l(K)},get releases(){return l(J)},get releasesLoading(){return l(re)},onSetImageTag:Ee,onSelectedImageTagChange:e=>{m(te,e,!0)},onUpgradeStack:Te,onSelectedUiTagChange:e=>{m(q,e,!0)},onDownloadUiVersion:De,onRestartApp:ke})},f=e=>{an(e,{onAuthError:Ie,onNavigate:Fe})},_=e=>{Wn(e,{get containerData(){return l(D)},get serviceEntries(){return l(fe)},get loading(){return l(x)},get error(){return l(O)},tokenStored:!0,get selectedContainerId(){return l(P)},onToggleContainer:Me,onStart:e=>Ae(`start`,e),onStop:e=>Ae(`stop`,e),onRestart:e=>Ae(`restart`,e),onRefresh:Q,onPullImages:Pe,get lastUpdated(){return l(k)},get pullLoading(){return l(R)}})},b=e=>{nr(e,{get data(){return l(A)},get loading(){return l(S)},get error(){return l(M)},tokenStored:!0,onRefresh:be})},C=e=>{ai(e,{})},w=e=>{xi(e,{tokenStored:!0})};n(o,e=>{l(I)===`overview`?e(c):l(I)===`updates`?e(d,1):l(I)===`addons`?e(f,2):l(I)===`containers`?e(_,3):l(I)===`automations`?e(b,4):l(I)===`connections`?e(C,5):l(I)===`secrets`&&e(w,6)});var j=v(o,2),L=e=>{Va(e,{tokenStored:!0})},z=e=>{ya(e,{tokenStored:!0})},B=e=>{ka(e,{tokenStored:!0})},H=e=>{mi(e,{tokenStored:!0,get services(){return l($)}})};n(j,e=>{l(I)===`voice`?e(L):l(I)===`akm`?e(z,1):l(I)===`host-sharing`?e(B,2):l(I)===`logs`&&e(H,3)}),F(i),N(e,t)};n(Re,e=>{l(a)?e(ze):e(Ve,-1)}),N(r,Le),j()}export{Ua as component};
@@ -1,9 +0,0 @@
1
- const index = 1;
2
- let component_cache;
3
- const component = async () => component_cache ??= (await import('./error.svelte-CcHm-30A.js')).default;
4
- const imports = ["_app/immutable/nodes/1.B-z3blIe.js","_app/immutable/chunks/0swOyi-5.js","_app/immutable/chunks/BPh8tqAg.js","_app/immutable/chunks/E7W0MQkU.js","_app/immutable/chunks/BuFlayix.js","_app/immutable/chunks/xihTtKlq.js"];
5
- const stylesheets = [];
6
- const fonts = [];
7
-
8
- export { component, fonts, imports, index, stylesheets };
9
- //# sourceMappingURL=1-BDxTrwG3.js.map
@@ -1,9 +0,0 @@
1
- const index = 4;
2
- let component_cache;
3
- const component = async () => component_cache ??= (await import('./_page.svelte-CEjRvc8B.js')).default;
4
- const imports = ["_app/immutable/nodes/4.DOO_QIq1.js","_app/immutable/chunks/0swOyi-5.js","_app/immutable/chunks/xihTtKlq.js","_app/immutable/chunks/BBdT9Cjm.js","_app/immutable/chunks/B1uQvvlv.js","_app/immutable/chunks/BPh8tqAg.js","_app/immutable/chunks/E7W0MQkU.js","_app/immutable/chunks/BuFlayix.js","_app/immutable/chunks/BQ0vnNWj.js","_app/immutable/chunks/BQrb5YOM.js"];
5
- const stylesheets = ["_app/immutable/assets/Spinner.BtzHSsat.css","_app/immutable/assets/AuthGate._tqG1OIX.css","_app/immutable/assets/VoiceProfileSelector.B8FTffwl.css","_app/immutable/assets/4.j3F-W7h_.css"];
6
- const fonts = [];
7
-
8
- export { component, fonts, imports, index, stylesheets };
9
- //# sourceMappingURL=4-CBgm4iSo.js.map
@@ -1,9 +0,0 @@
1
- const index = 5;
2
- let component_cache;
3
- const component = async () => component_cache ??= (await import('./_page.svelte-Cy4kcLwu.js')).default;
4
- const imports = ["_app/immutable/nodes/5.BrAtimvQ.js","_app/immutable/chunks/0swOyi-5.js","_app/immutable/chunks/xihTtKlq.js","_app/immutable/chunks/BBdT9Cjm.js","_app/immutable/chunks/B1uQvvlv.js","_app/immutable/chunks/BPh8tqAg.js","_app/immutable/chunks/E7W0MQkU.js","_app/immutable/chunks/BuFlayix.js","_app/immutable/chunks/BQ0vnNWj.js"];
5
- const stylesheets = ["_app/immutable/assets/Spinner.BtzHSsat.css","_app/immutable/assets/AuthGate._tqG1OIX.css","_app/immutable/assets/5.Cj0Mk9Gn.css"];
6
- const fonts = [];
7
-
8
- export { component, fonts, imports, index, stylesheets };
9
- //# sourceMappingURL=5-CD1fuYOe.js.map
@@ -1,9 +0,0 @@
1
- const index = 6;
2
- let component_cache;
3
- const component = async () => component_cache ??= (await import('./_page.svelte-DrWHHwCU.js')).default;
4
- const imports = ["_app/immutable/nodes/6.CDpI1TrW.js","_app/immutable/chunks/0swOyi-5.js","_app/immutable/chunks/xihTtKlq.js","_app/immutable/chunks/B1uQvvlv.js","_app/immutable/chunks/BPh8tqAg.js","_app/immutable/chunks/E7W0MQkU.js","_app/immutable/chunks/BuFlayix.js","_app/immutable/chunks/BBdT9Cjm.js","_app/immutable/chunks/BQ0vnNWj.js","_app/immutable/chunks/CrcMJfbz.js"];
5
- const stylesheets = ["_app/immutable/assets/Spinner.BtzHSsat.css","_app/immutable/assets/AuthGate._tqG1OIX.css","_app/immutable/assets/ModeSwitch.DVIv_V4C.css","_app/immutable/assets/6.B0Z8tVIH.css"];
6
- const fonts = [];
7
-
8
- export { component, fonts, imports, index, stylesheets };
9
- //# sourceMappingURL=6-B6tmbcQ8.js.map
@@ -1,9 +0,0 @@
1
- const index = 7;
2
- let component_cache;
3
- const component = async () => component_cache ??= (await import('./_page.svelte-WWZsjJuR.js')).default;
4
- const imports = ["_app/immutable/nodes/7.B5KYnWwU.js","_app/immutable/chunks/0swOyi-5.js","_app/immutable/chunks/xihTtKlq.js","_app/immutable/chunks/BBdT9Cjm.js","_app/immutable/chunks/B1uQvvlv.js","_app/immutable/chunks/BPh8tqAg.js","_app/immutable/chunks/E7W0MQkU.js","_app/immutable/chunks/BuFlayix.js","_app/immutable/chunks/BQ0vnNWj.js","_app/immutable/chunks/CrcMJfbz.js"];
5
- const stylesheets = ["_app/immutable/assets/Spinner.BtzHSsat.css","_app/immutable/assets/AuthGate._tqG1OIX.css","_app/immutable/assets/ModeSwitch.DVIv_V4C.css","_app/immutable/assets/7.CzC8JVIO.css"];
6
- const fonts = [];
7
-
8
- export { component, fonts, imports, index, stylesheets };
9
- //# sourceMappingURL=7-m4KLf_Gx.js.map