skill-creator 2.4.0 → 2.5.0

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 (58) hide show
  1. package/dist/cli.js +119 -9
  2. package/dist/cli.js.map +2 -2
  3. package/dist/daemon.js +268 -21
  4. package/dist/daemon.js.map +4 -4
  5. package/dist/package.json +1 -1
  6. package/dist/webui/_app/immutable/assets/0.DLmCZ2fP.css +2 -0
  7. package/dist/webui/_app/immutable/assets/CreatorWorkspace.CvDsme_1.css +1 -0
  8. package/dist/webui/_app/immutable/chunks/{CdjBDc_u.js → B8aGNSaH.js} +1 -1
  9. package/dist/webui/_app/immutable/chunks/{CvO5eq4f.js → BDMeqoYB.js} +1 -1
  10. package/dist/webui/_app/immutable/chunks/{BgJCuTDs.js → BTMBuftG.js} +1 -1
  11. package/dist/webui/_app/immutable/chunks/Ba9GVGQ5.js +6 -0
  12. package/dist/webui/_app/immutable/chunks/{D6s79OPW.js → BchFBl6r.js} +1 -1
  13. package/dist/webui/_app/immutable/chunks/BhCD2hsN.js +8 -0
  14. package/dist/webui/_app/immutable/chunks/{hIGXQE4_.js → Bynub5xW.js} +1 -1
  15. package/dist/webui/_app/immutable/chunks/CYhuNS_d.js +11 -0
  16. package/dist/webui/_app/immutable/chunks/{Bd1_Ly7G.js → C_mgfJl-.js} +1 -1
  17. package/dist/webui/_app/immutable/chunks/{CIxXWvxF.js → ClW_LCBS.js} +1 -1
  18. package/dist/webui/_app/immutable/chunks/{Do_MDwCJ.js → Cy5ABld-.js} +1 -1
  19. package/dist/webui/_app/immutable/chunks/CzkhJhvt.js +1 -0
  20. package/dist/webui/_app/immutable/chunks/{BTuMeN4z.js → DBNjJ5Iw.js} +1 -1
  21. package/dist/webui/_app/immutable/chunks/DC5f4JBB.js +5 -0
  22. package/dist/webui/_app/immutable/chunks/DF_TIB7n.js +1 -0
  23. package/dist/webui/_app/immutable/chunks/DH8yd93-.js +1 -0
  24. package/dist/webui/_app/immutable/chunks/DSbDiml2.js +28 -0
  25. package/dist/webui/_app/immutable/chunks/{Du6-3Tbt.js → DTzqg7c9.js} +1 -1
  26. package/dist/webui/_app/immutable/chunks/{DGJ9QIPN.js → DVv6BdWV.js} +1 -1
  27. package/dist/webui/_app/immutable/chunks/{CBFLFfGb.js → DYbgoqwH.js} +1 -1
  28. package/dist/webui/_app/immutable/chunks/DdHvRi0A.js +1 -0
  29. package/dist/webui/_app/immutable/chunks/{B0stYqX9.js → DjZ7hdjX.js} +1 -1
  30. package/dist/webui/_app/immutable/chunks/DvWG9eQi.js +1 -0
  31. package/dist/webui/_app/immutable/chunks/DzfSSVEB.js +2 -0
  32. package/dist/webui/_app/immutable/chunks/GHFnehdP.js +5 -0
  33. package/dist/webui/_app/immutable/chunks/VnziGBZO.js +2 -0
  34. package/dist/webui/_app/immutable/chunks/a0LlqeqU.js +1 -0
  35. package/dist/webui/_app/immutable/chunks/eFUKcYMv.js +1 -0
  36. package/dist/webui/_app/immutable/chunks/{DlsPNMHX.js → pd7EK5wP.js} +2 -2
  37. package/dist/webui/_app/immutable/chunks/{Dcf0klrH.js → xAjQV7BZ.js} +2 -2
  38. package/dist/webui/_app/immutable/entry/{app.SX0t6ojk.js → app.DlQ53I3_.js} +2 -2
  39. package/dist/webui/_app/immutable/entry/start.CNmXm9ox.js +1 -0
  40. package/dist/webui/_app/immutable/nodes/0.BXeEkneG.js +229 -0
  41. package/dist/webui/_app/immutable/nodes/{1.BY0DmHLP.js → 1.DzYWdh98.js} +1 -1
  42. package/dist/webui/_app/immutable/nodes/{2._osi8D6m.js → 2.Dl1DQV0d.js} +1 -1
  43. package/dist/webui/_app/version.json +1 -1
  44. package/dist/webui/index.html +23 -21
  45. package/package.json +5 -5
  46. package/dist/webui/_app/immutable/assets/0.B4ZC2KQW.css +0 -2
  47. package/dist/webui/_app/immutable/chunks/B_gnhZ39.js +0 -1
  48. package/dist/webui/_app/immutable/chunks/BcvferwH.js +0 -8
  49. package/dist/webui/_app/immutable/chunks/CD-NpLjk.js +0 -6
  50. package/dist/webui/_app/immutable/chunks/COXgCOd9.js +0 -2
  51. package/dist/webui/_app/immutable/chunks/Ccj5eiVa.js +0 -1
  52. package/dist/webui/_app/immutable/chunks/Cp0lquqA.js +0 -1
  53. package/dist/webui/_app/immutable/chunks/Crg8KRap.js +0 -5
  54. package/dist/webui/_app/immutable/chunks/D7DTLcps.js +0 -1
  55. package/dist/webui/_app/immutable/chunks/oJ4aK8PG.js +0 -1
  56. package/dist/webui/_app/immutable/chunks/vry1W47_.js +0 -7
  57. package/dist/webui/_app/immutable/entry/start.gejSBBnR.js +0 -1
  58. package/dist/webui/_app/immutable/nodes/0.BTXc1wYu.js +0 -229
@@ -0,0 +1,6 @@
1
+ import{A as e,At as t,B as n,Ct as r,D as i,F as a,G as o,H as s,K as c,M as l,Mt as u,N as d,O as f,Q as p,R as m,St as h,U as g,W as _,X as v,_ as y,a as b,at as x,b as S,c as C,ct as w,d as T,f as E,ft as D,gt as O,j as k,jt as A,kt as j,l as ee,lt as M,m as N,mt as P,nt as F,o as I,ot as L,p as R,rt as te,s as z,st as B,ut as V,v as H,x as U,z as W}from"./CmCJ0SKP.js";import{t as G}from"./DjZ7hdjX.js";import"./xihTtKlq.js";import"./eFUKcYMv.js";import{t as K}from"./BkEnd9_Z.js";import{a as q}from"./DF_TIB7n.js";import{A as J,C as Y,D as X,a as ne,f as re,g as ie,o as ae,p as oe,r as Z,t as se,w as ce}from"./pd7EK5wP.js";import{a as Q,c as le,d as ue,f as de,h as fe,i as pe,l as me,m as he,n as ge,o as _e,p as ve,s as ye,t as be,u as xe}from"./CzkhJhvt.js";import"./B8aGNSaH.js";import{n as Se}from"./1aUphu7Y.js";import{C as Ce,F as we,I as Te,K as Ee,L as De,N as Oe,P as ke,R as Ae,Z as je,q as Me,w as Ne,z as Pe}from"./DC5f4JBB.js";import"./DZ_Kltd5.js";import{t as Fe}from"./DdHvRi0A.js";import{i as Ie,n as Le}from"./DnPeA-9c.js";import{t as Re}from"./DOjT7y5f.js";import{E as ze,H as Be,R as Ve,a as He,f as Ue,l as We,p as Ge,r as $,u as Ke,w as qe,y as Je}from"./DvWG9eQi.js";import{n as Ye,t as Xe}from"./DovL68qD.js";import{n as Ze,t as Qe}from"./Bynub5xW.js";var $e=Te({component:`switch`,parts:[`root`,`thumb`]}),et=new Ee(`Switch.Root`),tt=class e{static create(t){return et.set(new e(t))}opts;attachment;constructor(e){this.opts=e,this.attachment=Pe(e.ref),this.onkeydown=this.onkeydown.bind(this),this.onclick=this.onclick.bind(this)}#e(){this.opts.checked.current=!this.opts.checked.current}onkeydown(e){e.key!==`Enter`&&e.key!==` `||this.opts.disabled.current||(e.preventDefault(),this.#e())}onclick(e){this.opts.disabled.current||this.#e()}#t=O(()=>({"data-disabled":Oe(this.opts.disabled.current),"data-state":Ae(this.opts.checked.current),"data-required":Oe(this.opts.required.current)}));get sharedProps(){return v(this.#t)}set sharedProps(e){D(this.#t,e)}#n=O(()=>({checked:this.opts.checked.current}));get snippetProps(){return v(this.#n)}set snippetProps(e){D(this.#n,e)}#r=O(()=>({...this.sharedProps,id:this.opts.id.current,role:`switch`,disabled:we(this.opts.disabled.current),"aria-checked":De(this.opts.checked.current,!1),"aria-required":ke(this.opts.required.current),[$e.root]:``,onclick:this.onclick,onkeydown:this.onkeydown,...this.attachment}));get props(){return v(this.#r)}set props(e){D(this.#r,e)}},nt=class e{static create(){return new e(et.get())}root;#e=O(()=>this.root.opts.name.current!==void 0);get shouldRender(){return v(this.#e)}set shouldRender(e){D(this.#e,e)}constructor(e){this.root=e}#t=O(()=>({type:`checkbox`,name:this.root.opts.name.current,value:this.root.opts.value.current,checked:this.root.opts.checked.current,disabled:this.root.opts.disabled.current,required:this.root.opts.required.current}));get props(){return v(this.#t)}set props(e){D(this.#t,e)}},rt=class e{static create(t){return new e(t,et.get())}opts;root;attachment;constructor(e,t){this.opts=e,this.root=t,this.attachment=Pe(e.ref)}#e=O(()=>({checked:this.root.opts.checked.current}));get snippetProps(){return v(this.#e)}set snippetProps(e){D(this.#e,e)}#t=O(()=>({...this.root.sharedProps,id:this.opts.id.current,[$e.thumb]:``,...this.attachment}));get props(){return v(this.#t)}set props(e){D(this.#t,e)}};function it(e,t){r(t,!1);let n=nt.create();C();var i=W(),a=B(i),o=e=>{Fe(e,z(()=>n.props))};d(a,e=>{n.shouldRender&&e(o)}),m(e,i),h()}var at=new Set([`$$slots`,`$$events`,`$$legacy`,`child`,`children`,`ref`,`id`,`disabled`,`required`,`checked`,`value`,`name`,`type`,`onCheckedChange`]),ot=n(`<button><!></button>`),st=n(`<!> <!>`,1);function ct(e,n){let i=s();r(n,!0);let a=b(n,`ref`,15,null),o=b(n,`id`,19,()=>Ce(i)),c=b(n,`disabled`,3,!1),l=b(n,`required`,3,!1),u=b(n,`checked`,15,!1),p=b(n,`value`,3,`on`),g=b(n,`name`,3,void 0),_=b(n,`type`,3,`button`),y=b(n,`onCheckedChange`,3,Ne),x=I(n,at),S=tt.create({checked:je(()=>u(),e=>{u(e),y()?.(e)}),disabled:je(()=>c()??!1),required:je(()=>l()),value:je(()=>p()),name:je(()=>g()),id:je(()=>o()),ref:je(()=>a(),e=>a(e))}),C=O(()=>Me(x,S.props,{type:_()}));var w=st(),T=B(w),D=e=>{var t=W(),r=B(t);{let e=O(()=>({props:v(C),...S.snippetProps}));f(r,()=>n.child,()=>v(e))}m(e,t)},k=e=>{var r=ot();E(r,()=>({...v(C)}));var i=L(r);f(i,()=>n.children??A,()=>S.snippetProps),t(r),m(e,r)};d(T,e=>{n.child?e(D):e(k,-1)}),it(M(T,2),{}),m(e,w),h()}var lt=new Set([`$$slots`,`$$events`,`$$legacy`,`child`,`children`,`ref`,`id`]),ut=n(`<span><!></span>`);function dt(e,n){let i=s();r(n,!0);let a=b(n,`ref`,15,null),o=b(n,`id`,19,()=>Ce(i)),c=I(n,lt),l=rt.create({id:je(()=>o()),ref:je(()=>a(),e=>a(e))}),u=O(()=>Me(c,l.props));var p=W(),g=B(p),_=e=>{var t=W(),r=B(t);{let e=O(()=>({props:v(u),...l.snippetProps}));f(r,()=>n.child,()=>v(e))}m(e,t)},y=e=>{var r=ut();E(r,()=>({...v(u)}));var i=L(r);f(i,()=>n.children??A,()=>l.snippetProps),t(r),m(e,r)};d(g,e=>{n.child?e(_):e(y,-1)}),m(e,p),h()}var ft=n(`<button><span class="flex items-center gap-1 font-medium"> </span> <span class="mt-0.5 block text-[10px] leading-snug text-muted-foreground"> </span></button>`),pt=n(`<button> </button>`),mt=n(`<button> <span class="ml-1 text-[9px] text-muted-foreground"> </span></button>`),ht=n(`<section class="space-y-1.5" aria-label="Default mode"><span class="text-[11px] font-medium text-muted-foreground">Default mode</span> <div class="grid grid-cols-2 gap-1.5"></div></section> <section class="space-y-1.5" aria-label="Behavior"><span class="text-[11px] font-medium text-muted-foreground">Behavior</span> <div class="space-y-1"><span class="text-[10px] text-muted-foreground">LLM preset</span> <div class="flex gap-1.5"></div></div> <div class="space-y-1"><span class="text-[10px] text-muted-foreground">Approval policy</span> <div class="flex gap-1.5"></div></div> <div class="space-y-1" aria-label="Busy Enter"><span class="text-[10px] text-muted-foreground">Busy Enter — what a plain Enter does while the agent is working</span> <div class="flex gap-1.5"></div></div></section>`,1),gt=n(`<div class="text-xs text-muted-foreground">Loading…</div>`),_t=n(`<div class="flex items-center justify-between gap-2 text-xs text-muted-foreground">Agent settings unavailable <!></div>`),vt=n(`<div class="text-xs text-destructive" role="alert"> </div>`),yt=n(`<div class="space-y-4"><div><h3 class="text-sm font-medium">Agent</h3> <p class="mt-0.5 text-[11px] text-muted-foreground">Defaults for new sessions; the panel header switches an existing session's mode.</p></div> <!> <!></div>`);function bt(n,i){r(i,!0);let s=P(null),c=[`deterministic`,`live`],l=[`ask`,`never`],u=[{mode:`queue`,label:`Queue`,hint:`after the current turn`},{mode:`steer`,label:`Steer`,hint:`into the current turn`}],f=O(()=>$.view);async function p(e){let t=await ze(e);t&&(t.outcome===`rejected`?D(s,`${t.code}: ${t.detail}`):t.outcome===`error`?D(s,t.message,!0):D(s,null))}var _=yt(),y=M(L(_),2),b=n=>{var r=ht(),i=B(r),s=M(L(i),2);e(s,21,()=>re,e=>e.id,(e,n)=>{var r=ft(),i=L(r),s=w(i,!0),c=M(i,2),l=w(c,!0);t(r),F(()=>{U(r,1,`rounded-md border p-2 text-left transition-colors ${v(f).settings.defaultMode===v(n).id?`border-primary bg-primary/10`:`border-border hover:bg-muted`}`),N(r,`aria-pressed`,v(f).settings.defaultMode===v(n).id),r.disabled=$.updating,a(s,v(n).label),a(l,v(n).description)}),o(`click`,r,()=>void p({defaultMode:v(n).id})),m(e,r)}),t(s),t(i);var d=M(i,2),h=M(L(d),2),g=M(L(h),2);e(g,20,()=>c,e=>e,(e,t)=>{var n=pt(),r=w(n,!0);F(()=>{U(n,1,`flex-1 rounded-md border px-2 py-1 transition-colors ${v(f).settings.preset===t?`border-primary bg-primary/10 text-primary`:`border-border hover:bg-muted`}`),N(n,`aria-pressed`,v(f).settings.preset===t),n.disabled=$.updating,a(r,t)}),o(`click`,n,()=>void p({preset:t})),m(e,n)}),t(g),t(h);var _=M(h,2),y=M(L(_),2);e(y,20,()=>l,e=>e,(e,t)=>{var n=pt(),r=w(n,!0);F(()=>{U(n,1,`flex-1 rounded-md border px-2 py-1 transition-colors ${v(f).settings.permissions.approvalPolicy===t?`border-primary bg-primary/10 text-primary`:`border-border hover:bg-muted`}`),N(n,`aria-pressed`,v(f).settings.permissions.approvalPolicy===t),n.disabled=$.updating,a(r,t)}),o(`click`,n,()=>void p({permissions:{approvalPolicy:t}})),m(e,n)}),t(y),t(_);var b=M(_,2),x=M(L(b),2);e(x,21,()=>u,e=>e.mode,(e,n)=>{var r=mt(),i=L(r),s=M(i),c=w(s,!0);t(r),F(()=>{U(r,1,`flex-1 rounded-md border px-2 py-1 transition-colors ${Ve.mode===v(n).mode?`border-primary bg-primary/10 text-primary`:`border-border hover:bg-muted`}`),N(r,`aria-pressed`,Ve.mode===v(n).mode),a(i,`${v(n).label??``} `),a(c,v(n).hint)}),o(`click`,r,()=>Be(v(n).mode)),m(e,r)}),t(x),t(b),t(d),m(n,r)},x=e=>{var t=gt();m(e,t)},S=e=>{var n=_t(),r=M(L(n));Le(r,{size:`sm`,class:`h-7 px-2.5 text-xs`,onclick:()=>void Ge(),children:(e,t)=>{j();var n=g(`Retry`);m(e,n)},$$slots:{default:!0}}),t(n),m(e,n)};d(y,e=>{v(f)?e(b):$.loading?e(x,1):e(S,-1)});var C=M(y,2),T=e=>{var t=vt(),n=w(t,!0);F(()=>a(n,v(s))),m(e,t)};d(C,e=>{v(s)&&e(T)}),t(_),m(n,_),h()}_([`click`]);var xt=new Set([`$$slots`,`$$events`,`$$legacy`,`ref`,`class`,`checked`,`size`]);function St(e,t){r(t,!0);let n=b(t,`ref`,15,null),a=b(t,`checked`,15,!1),o=b(t,`size`,3,`default`),s=I(t,xt);var c=W(),l=B(c);{let e=O(()=>Ie(`data-checked:bg-primary data-unchecked:bg-input focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 dark:data-unchecked:bg-input/80 shrink-0 rounded-full border border-transparent focus-visible:ring-2 aria-invalid:ring-2 data-[size=default]:h-[16.6px] data-[size=default]:w-[28px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] peer group/switch relative inline-flex items-center transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 data-disabled:cursor-not-allowed data-disabled:opacity-50`,t.class));i(l,()=>ct,(t,r)=>{r(t,z({"data-slot":`switch`,get"data-size"(){return o()},get class(){return v(e)}},()=>s,{get ref(){return n()},set ref(e){n(e)},get checked(){return a()},set checked(e){a(e)},children:(e,t)=>{var n=W(),r=B(n);i(r,()=>dt,(e,t)=>{t(e,{"data-slot":`switch-thumb`,class:`bg-background dark:data-unchecked:bg-foreground dark:data-checked:bg-primary-foreground rounded-full group-data-[size=default]/switch:size-3.5 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 pointer-events-none block ring-0 transition-transform rtl:data-[state=checked]:translate-x-[calc(-100%)]`})}),m(e,n)},$$slots:{default:!0}}))})}m(e,c),h()}var Ct=new Set([`$$slots`,`$$events`,`$$legacy`]);function wt(e,t){let n=I(t,Ct),r=[[`path`,{d:`M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z`}],[`path`,{d:`m2 22 3-3`}],[`path`,{d:`M7.5 13.5 10 11`}],[`path`,{d:`M10.5 16.5 13 14`}],[`path`,{d:`m18 3-4 4h6l-4 4`}]];K(e,z({name:`plug-zap`},()=>n,{get iconNode(){return r}}))}var Tt=new Set([`$$slots`,`$$events`,`$$legacy`]);function Et(e,t){let n=I(t,Tt),r=[[`path`,{d:`M12 22v-5`}],[`path`,{d:`M15 8V2`}],[`path`,{d:`M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z`}],[`path`,{d:`M9 8V2`}]];K(e,z({name:`plug`},()=>n,{get iconNode(){return r}}))}var Dt=n(`<p class="text-[10px] text-destructive" role="alert"> </p>`),Ot=n(`<p class="text-[10px] text-muted-foreground">The panel reconnects automatically; keep the daemon running via the tray or the <code class="rounded bg-muted px-1 font-mono">skill-creator start</code> command.</p>`),kt=n(`<div class="space-y-4"><div><h3 class="text-sm font-medium">General</h3> <p class="mt-0.5 text-[11px] text-muted-foreground">Shell-level state of this Skill Creator instance.</p></div> <section class="space-y-1.5" aria-label="Daemon connection"><span class="text-[11px] font-medium text-muted-foreground">Daemon connection</span> <div class="flex items-center gap-2 rounded-md border border-border bg-background/60 p-2.5"><!> <span> </span></div> <!></section> <section class="space-y-1.5" aria-label="Appearance"><span class="text-[11px] font-medium text-muted-foreground">Appearance</span> <div class="flex items-center justify-between rounded-md border border-border bg-background/60 p-2.5"><div><p class="text-xs font-medium">Theme</p> <p class="text-[10px] text-muted-foreground">System follows your OS color scheme; applies immediately.</p></div> <div class="inline-flex overflow-hidden rounded-md border border-border" role="group" aria-label="Theme preference"></div></div> <div class="flex items-center justify-between rounded-md border border-border bg-background/60 p-2.5"><div><p class="text-xs font-medium">Collapse sidebar by default</p> <p class="text-[10px] text-muted-foreground">Icon-only rail; expand anytime from the sidebar's bottom toggle.</p></div> <!></div></section></div>`);function At(n,i){r(i,!0);let o=O(()=>{switch(Z.status){case`connected`:return`Connected`;case`connecting`:return`Connecting…`;case`disconnected`:return`Disconnected`;default:return`Idle`}}),s=O(de),c=O(ue),l=[{value:`light`,label:`Light`},{value:`dark`,label:`Dark`},{value:`system`,label:`System`}];var u=kt(),f=M(L(u),2),p=M(L(f),2),_=L(p),y=e=>{wt(e,{class:`h-4 w-4 text-primary`})},b=e=>{{let t=O(()=>Z.status===`disconnected`?`text-destructive`:`text-muted-foreground`);Et(e,{get class(){return`h-4 w-4 ${v(t)??``}`}})}};d(_,e=>{Z.status===`connected`?e(y):e(b,-1)});var x=M(_,2),S=w(x,!0);t(p);var C=M(p,2),T=e=>{var t=Dt(),n=w(t,!0);F(()=>a(n,Z.error)),m(e,t)},E=e=>{var t=Ot();m(e,t)};d(C,e=>{Z.status===`disconnected`?e(T):e(E,-1)}),t(f);var D=M(f,2),k=M(L(D),2),A=M(L(k),2);e(A,21,()=>l,e=>e.value,(e,t)=>{{let n=O(()=>v(s)===v(t).value?`bg-accent text-primary`:`text-muted-foreground`),r=O(()=>v(s)===v(t).value);Le(e,{variant:`ghost`,size:`sm`,get class(){return`h-7 rounded-none px-2.5 text-xs ${v(n)??``}`},get"aria-pressed"(){return v(r)},onclick:()=>ve(v(t).value),children:(e,n)=>{j();var r=g();F(()=>a(r,v(t).label)),m(e,r)},$$slots:{default:!0}})}}),t(A),t(k);var ee=M(k,2);St(M(L(ee),2),{get checked(){return v(c)},onCheckedChange:()=>he(),"aria-label":`Collapse sidebar by default`}),t(ee),t(D),t(u),F(()=>{U(x,1,`text-xs ${Z.status===`connected`?`text-primary`:Z.status===`disconnected`?`text-destructive`:`text-muted-foreground`}`),a(S,v(o))}),m(n,u),h()}var jt=new Set([`$$slots`,`$$events`,`$$legacy`]);function Mt(e,t){let n=I(t,jt),r=[[`path`,{d:`M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49`}],[`path`,{d:`M14.084 14.158a3 3 0 0 1-4.242-4.242`}],[`path`,{d:`M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143`}],[`path`,{d:`m2 2 20 20`}]];K(e,z({name:`eye-off`},()=>n,{get iconNode(){return r}}))}var Nt=new Set([`$$slots`,`$$events`,`$$legacy`]);function Pt(e,t){let n=I(t,Nt),r=[[`path`,{d:`M12 3v12`}],[`path`,{d:`m17 8-5-5-5 5`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`}]];K(e,z({name:`upload`},()=>n,{get iconNode(){return r}}))}var Ft=n(`<img alt=""/>`),It=n(`<span class="flex h-5 w-5 items-center justify-center rounded text-[10px] font-semibold text-white" aria-hidden="true"> </span>`),Lt=n(`<span class="flex h-12 w-12 shrink-0 items-center justify-center rounded-md text-base font-semibold text-white" aria-hidden="true"> </span>`),Rt=n(`<button type="button"><span class="flex h-4 w-4 items-center justify-center rounded" aria-hidden="true"><img alt="" class="h-3.5 w-3.5 object-contain dark:invert"/></span></button>`),zt=n(`<p class="text-[9px] text-muted-foreground">Duplicate catalog icons are merged; hover shows sharing providers.</p>`),Bt=n(`<div class="space-y-1"><span class="text-[10px] font-medium text-muted-foreground">Icon</span> <div class="grid grid-cols-7 place-items-center gap-1"><button type="button" title="No icon — letter avatar with the color below (suppresses the catalog icon)" aria-label="No icon (letter avatar)"><span class="flex h-4 w-4 items-center justify-center rounded text-[8px] font-semibold text-white" aria-hidden="true"> </span></button> <!></div> <!></div>`),Vt=n(`<button type="button" title="No icon — letter avatar with the color below" aria-label="No icon (letter avatar)"><span class="flex h-4 w-4 shrink-0 items-center justify-center rounded text-[8px] font-semibold text-white" aria-hidden="true"> </span> No icon — use the letter avatar</button>`),Ht=n(`<button type="button"><span class="h-4 w-4 rounded" aria-hidden="true"></span></button>`),Ut=n(`<span class="text-[9px] text-destructive" role="alert">invalid hex</span>`),Wt=n(`<div class="space-y-1 border-t border-border pt-1.5"><span class="text-[10px] font-medium text-muted-foreground">Avatar color</span> <div class="flex flex-wrap items-center gap-1"><button type="button" title="Auto — deterministic hue from the route name" aria-label="Auto avatar color"><span class="flex h-4 w-4 items-center justify-center rounded text-[8px] font-semibold text-white" aria-hidden="true"> </span></button> <!></div> <div class="flex items-center gap-1"><input aria-label="Avatar color hex" placeholder="#3b82f6"/> <!></div></div>`),Gt=n(`<div class="space-y-1 border-t border-border pt-1.5"><span class="text-[10px] font-medium text-muted-foreground">Letter</span> <div class="flex items-center gap-1.5"><input class="h-6 w-12 rounded border border-border bg-background px-1.5 text-center text-[11px] font-semibold uppercase outline-none focus:border-primary/60" aria-label="Avatar letter" maxlength="2"/> <button type="button" class="rounded px-1.5 py-0.5 text-[10px] text-muted-foreground transition-colors hover:bg-muted hover:text-foreground" title="Reset to the first letter of the display name">Reset</button></div></div>`),Kt=n(`<div class="absolute left-0 top-[calc(100%+4px)] z-30 w-[280px] space-y-2 rounded-lg border border-border bg-popover p-2 text-popover-foreground shadow-md" role="dialog" aria-label="Route icon and avatar choices"><div class="flex items-center gap-2"><!> <div class="min-w-0"><p class="truncate text-xs font-medium"> </p> <p class="text-[10px] text-muted-foreground"> </p></div></div> <!> <div class="flex items-center justify-between gap-2 border-t border-border pt-1.5"><span class="text-[10px] text-muted-foreground">Custom image · ≤64 KiB</span> <button type="button" class="flex h-6 items-center gap-1 rounded px-1.5 text-[10px] hover:bg-muted"><!> Upload</button></div> <input type="file" accept=".svg,.png,.webp" class="hidden" aria-label="Upload custom icon"/> <!> <!></div>`),qt=n(`<div class="relative shrink-0"><button type="button" aria-label="Change route icon"><!> <span class="absolute bottom-0 right-0 hidden bg-background p-px text-foreground group-hover:block" aria-hidden="true"><!></span></button> <!></div>`);function Jt(n,i){r(i,!0);let s=b(i,`icon`,3,null),l=b(i,`label`,3,``),u=b(i,`catalogIcons`,19,()=>[]),f=b(i,`disabled`,3,!1),p=[`#ef4444`,`#f59e0b`,`#10b981`,`#06b6d4`,`#3b82f6`,`#8b5cf6`,`#f43f5e`,`#64748b`],g=/^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i,_=P(!1),y=P(null),C=P(null),E=P(``),k=P(``),A=P(!1);te(()=>{D(E,i.letter,!0)});let I=O(()=>{let e=new Map;for(let t of u()){let n=e.get(t.icon);n?n.providers.push(t.provider):e.set(t.icon,{icon:t.icon,providers:[t.provider]})}let t=[...e.values()];return t.sort((e,t)=>+!e.providers.includes(i.provider)-!t.providers.includes(i.provider)||e.providers[0].localeCompare(t.providers[0])),t}),z=O(()=>u().some(e=>e.provider===i.provider));function B(e){f()||(i.onPick(e),D(_,!1))}function V(){if(i.onLetter===void 0||f())return;let e=v(E).trim();if(e.length===0||e===i.letter){D(E,i.letter,!0);return}i.onLetter(e.slice(0,2))}function H(){i.onLetter===void 0||f()||(i.onLetter(void 0),D(E,i.letter,!0))}function W(){if(i.onColor===void 0||f())return;let e=v(k).trim();if(e.length===0){D(A,!1);return}if(!g.test(e)){D(A,!0);return}D(A,!1),D(k,``),i.onColor(e.toLowerCase())}function G(e){let t=e.currentTarget;if(!(t instanceof HTMLInputElement))return;let n=t.files?.[0];if(t.value=``,!n)return;let r=n.name.split(`.`).pop()?.toLowerCase()??``,i=ge[r]??``;if(i.length===0){Se(`Unsupported icon type “${n.type||r||n.name}” — use .svg, .png or .webp.`);return}let a=new FileReader;a.onerror=()=>{Se(`Could not read “${n.name}” — try another file.`)},a.onload=()=>{let e=typeof a.result==`string`?a.result:``;if(e.length===0){Se(`Could not read “${n.name}” — try another file.`);return}let t=e.startsWith(`data:${i}`)?e:me(e,i);if(t===null){Se(`Could not read “${n.name}” as an image.`);return}if(t.length>65536){Se(`Icon too large — pick an image under 64 KiB.`);return}B(t)},a.readAsDataURL(n)}var K=qt();c(`keydown`,x,e=>{v(_)&&e.key===`Escape`&&D(_,!1)}),c(`pointerdown`,x,e=>{v(_)&&v(y)&&!v(y).contains(e.target)&&D(_,!1)});var q=L(K),J=L(q),Y=e=>{var t=Ft();F(e=>{N(t,`src`,s()),U(t,1,`h-5 w-5 object-contain ${e??``}`)},[()=>Q(s())?``:`dark:invert`]),m(e,t)},X=e=>{var t=It(),n=w(t,!0);F(()=>{S(t,`background: ${i.color??``}`),a(n,i.letter)}),m(e,t)};d(J,e=>{s()?e(Y):e(X,-1)});var ne=M(J,2),re=L(ne);be(re,{class:`h-2.5 w-2.5`}),t(ne),t(q);var ie=M(q,2),ae=n=>{var r=Kt(),u=L(r),h=L(u),g=e=>{var t=Ft();F(e=>{N(t,`src`,s()),U(t,1,`h-12 w-12 shrink-0 object-contain ${e??``}`)},[()=>Q(s())?``:`dark:invert`]),m(e,t)},y=e=>{var t=Lt(),n=w(t,!0);F(()=>{S(t,`background: ${i.color??``}`),a(n,i.letter)}),m(e,t)};d(h,e=>{s()?e(g):e(y,-1)});var b=M(h,2),x=L(b),O=w(x,!0),P=M(x,2),te=w(P,!0);t(b),t(u);var K=M(u,2),q=n=>{var r=Bt(),c=M(L(r),2),l=L(c),u=L(l),f=w(u,!0);t(l);var p=M(l,2);e(p,17,()=>v(I),e=>e.icon,(e,n)=>{var r=Rt(),a=L(r),c=w(a);t(r),F((e,t)=>{U(r,1,`flex h-6 w-6 items-center justify-center rounded ${s()===v(n).icon?`border border-primary/60 bg-primary/5`:`hover:bg-muted`}`),N(r,`title`,e),N(r,`aria-label`,`Use icon shared by ${t??``}`),S(a,`background: color-mix(in srgb, ${i.color??``} 18%, transparent)`),N(c,`src`,v(n).icon)},[()=>v(n).providers.join(`, `),()=>v(n).providers.length>1?v(n).providers.join(`, `):v(n).providers[0]]),o(`click`,r,()=>B(v(n).icon)),m(e,r)}),t(c);var h=M(c,2),g=e=>{var t=zt();m(e,t)};d(h,e=>{v(z)&&e(g)}),t(r),F(e=>{U(l,1,`flex h-6 w-6 items-center justify-center rounded border ${s()===null?`border-primary/50 bg-primary/5`:`border-border hover:bg-muted`}`),S(u,`background: ${i.color??``}`),a(f,e)},[()=>i.letter.slice(0,1)]),o(`click`,l,()=>{if(i.onSuppress!==void 0){i.onSuppress(),D(_,!1);return}B(void 0)}),m(n,r)},J=e=>{var n=Vt(),r=L(n),c=w(r,!0);j(),t(n),F(e=>{U(n,1,`flex w-full items-center gap-2 rounded px-1 py-0.5 text-[10px] transition-colors hover:bg-muted ${s()===null?`text-primary`:`text-muted-foreground`}`),S(r,`background: ${i.color??``}`),a(c,e)},[()=>i.letter.slice(0,1)]),o(`click`,n,()=>B(void 0)),m(e,n)};d(K,e=>{v(I).length>0?e(q):e(J,-1)});var Y=M(K,2),X=M(L(Y),2);Pt(L(X),{class:`h-3 w-3`}),j(),t(X),t(Y);var ne=M(Y,2);ee(ne,e=>D(C,e),()=>v(C));var re=M(ne,2),ie=n=>{var r=Wt(),s=M(L(r),2),l=L(s),u=L(l),h=w(u,!0);t(l);var g=M(l,2);e(g,16,()=>p,e=>e,(e,t)=>{var n=Ht(),r=w(n);F(e=>{U(n,1,`flex h-6 w-6 items-center justify-center rounded border ${e??``}`),N(n,`title`,t),N(n,`aria-label`,`Avatar color ${t??``}`),S(r,`background: ${t??``}`)},[()=>i.color.toLowerCase()===t?`border-primary/60 bg-primary/5`:`border-border hover:bg-muted`]),o(`click`,n,()=>i.onColor?.(t)),m(e,n)}),t(s);var _=M(s,2),y=L(_);R(y);var b=M(y,2),x=e=>{var t=Ut();m(e,t)};d(b,e=>{v(A)&&e(x)}),t(_),t(r),F((e,t,n)=>{U(l,1,`flex h-6 w-6 items-center justify-center rounded border ${e??``}`),S(u,`background: ${t??``}`),a(h,n),U(y,1,`h-6 w-24 rounded border bg-background px-1.5 font-mono text-[10px] outline-none focus:border-primary/60 ${v(A)?`border-destructive`:`border-border`}`),y.disabled=f()},[()=>i.color===pe(i.provider)?`border-primary/50 bg-primary/5`:`border-border hover:bg-muted`,()=>pe(i.provider),()=>i.letter.slice(0,1)]),o(`click`,l,()=>i.onColor?.(void 0)),c(`blur`,y,()=>W()),o(`keydown`,y,e=>{e.key===`Enter`&&W()}),T(y,()=>v(k),e=>D(k,e)),m(n,r)};d(re,e=>{i.onColor!==void 0&&e(ie)});var ae=M(re,2),oe=e=>{var n=Gt(),r=M(L(n),2),i=L(r);R(i);var a=M(i,2);t(r),t(n),F(()=>i.disabled=f()),c(`blur`,i,()=>V()),o(`keydown`,i,e=>{e.key===`Enter`&&V()}),T(i,()=>v(E),e=>D(E,e)),o(`click`,a,H),m(e,n)};d(ae,e=>{i.onLetter!==void 0&&e(oe)}),t(r),F(e=>{a(O,l()||i.provider),a(te,e)},[()=>s()?Q(s())?`Legacy letter avatar`:`Icon override`:`Letter avatar`]),o(`click`,X,()=>v(C)?.click()),o(`change`,ne,G),m(n,r)};d(ie,e=>{v(_)&&e(ae)}),t(K),ee(K,e=>D(y,e),()=>v(y)),F(()=>{U(q,1,`group relative flex h-7 w-7 items-center justify-center overflow-hidden rounded-md border border-border bg-background transition-colors hover:border-primary/50 ${f()?`pointer-events-none opacity-50`:``}`),N(q,`aria-expanded`,v(_)),q.disabled=f()}),o(`click`,q,()=>D(_,!v(_))),m(n,K),h()}_([`click`,`change`,`keydown`]);var Yt=n(`<span class="flex items-center gap-1 rounded bg-muted px-1.5 py-0.5 text-[10px]"> <button type="button" class="rounded px-0.5 text-muted-foreground hover:text-destructive">×</button></span>`),Xt=n(`<span class="shrink-0 rounded bg-primary/10 px-1 text-[9px] text-primary">vision</span>`),Zt=n(`<li><button role="option"><span class="min-w-0 flex-1 truncate"> <span class="text-muted-foreground"> </span></span> <!></button></li>`),Qt=n(`<ul class="absolute z-10 mt-1 max-h-44 w-full overflow-y-auto rounded-md border border-border bg-popover p-1 text-xs shadow-md" role="listbox" aria-label="Model suggestions"></ul>`),$t=n(`<div class="relative"><div class="flex min-h-8 flex-wrap items-center gap-1 rounded-md border border-border bg-background px-1.5 py-1 text-xs focus-within:border-primary/60" role="group" aria-label="Model ids"><input class="order-last h-6 min-w-24 flex-1 bg-transparent text-xs outline-none"/> <!></div> <!></div>`);function en(n,i){r(i,!0);let s=b(i,`placeholder`,3,`Add model…`),l=b(i,`disabled`,3,!1),u=P(``),f=P(!1),p=P(0),g=O(()=>{let e=v(u).trim().toLowerCase(),t=i.candidates.filter(e=>!i.selected.includes(e.id));return e.length===0?t.slice(0,8):t.filter(t=>t.id.toLowerCase().includes(e)||(t.name??``).toLowerCase().includes(e)).slice(0,8)});function _(e){let t=e.trim();if(t.length===0||i.selected.includes(t)){D(u,``);return}i.onchange([...i.selected,t]),D(u,``),D(f,!1)}function y(e){i.onchange(i.selected.filter(t=>t!==e))}function x(e){if(e.key===`Escape`){D(f,!1);return}if(e.key===`ArrowDown`&&v(g).length>0){e.preventDefault(),D(f,!0),D(p,Math.min(v(p)+1,v(g).length-1),!0);return}if(e.key===`ArrowUp`&&v(g).length>0){e.preventDefault(),D(p,Math.max(v(p)-1,0),!0);return}if(e.key===`Enter`||e.key===`,`){e.preventDefault(),v(f)&&v(g)[v(p)]&&v(u).trim().length>0?_(v(g)[v(p)].id):v(u).trim().length>0&&_(v(u));return}e.key===`Backspace`&&v(u).length===0&&i.selected.length>0&&i.onchange(i.selected.slice(0,-1))}var S=$t(),C=L(S),E=L(C);R(E);var k=M(E,2);e(k,16,()=>i.selected,e=>e,(e,n)=>{var r=Yt(),i=L(r),s=M(i);t(r),F(()=>{a(i,`${n??``} `),N(s,`aria-label`,`Remove ${n??``}`),s.disabled=l()}),o(`click`,s,()=>y(n)),m(e,r)}),t(C);var A=M(C,2),j=n=>{var r=Qt();e(r,23,()=>v(g),e=>e.id,(e,n,r)=>{var i=Zt(),s=L(i),l=L(s),u=L(l),f=M(u),h=w(f);t(l);var g=M(l,2),y=e=>{var t=Xt();m(e,t)};d(g,e=>{v(n).image&&e(y)}),t(s),t(i),F(()=>{U(s,1,`flex w-full items-center gap-2 rounded px-1.5 py-1 text-left ${v(r)===v(p)?`bg-accent`:``} hover:bg-accent`),N(s,`aria-selected`,v(r)===v(p)),a(u,`${v(n).name??v(n).id??``} `),a(h,`(${v(n).id??``})`)}),o(`mousedown`,s,e=>e.preventDefault()),o(`click`,s,()=>_(v(n).id)),c(`focus`,s,()=>D(p,v(r),!0)),m(e,i)}),t(r),m(n,r)};d(A,e=>{v(f)&&v(g).length>0&&e(j)}),t(S),F(()=>{N(E,`placeholder`,s()),E.disabled=l()}),o(`keydown`,E,x),c(`focus`,E,()=>{D(f,!0),D(p,0)}),o(`input`,E,()=>{D(f,!0),D(p,0)}),c(`blur`,E,()=>setTimeout(()=>D(f,!1),120)),T(E,()=>v(u),e=>D(u,e)),m(n,S),h()}_([`keydown`,`input`,`click`,`mousedown`]);function tn(e){return e.split(/[-_]+/).filter(e=>e.length>0).map(e=>/^[a-z]{1,3}$/.test(e)?e.toUpperCase():e.slice(0,1).toUpperCase()+e.slice(1)).join(` `)}function nn(e){if(!Number.isSafeInteger(e)||e<=0)return String(e);if(e%1048576==0)return`${e/1048576}M`;if(e>=1024){let t=e/1024;return`${Number.isInteger(t)?t.toString():t.toFixed(1)}k`}return String(e)}function rn(e){return e.includes(`/`)||e.includes(`@`)}function an(e){return{id:e.id,...e.name===void 0?{}:{name:e.name},image:e.image,...e.contextWindow===void 0?{}:{contextWindow:e.contextWindow},...e.supportsReasoningEffort===void 0?{}:{supportsReasoningEffort:e.supportsReasoningEffort},...e.inputTypes===void 0?{}:{inputTypes:[...e.inputTypes]},...e.maxOutputTokens===void 0?{}:{maxOutputTokens:e.maxOutputTokens},...e.effortTiers===void 0?{}:{effortTiers:[...e.effortTiers]}}}var on=(e,t)=>e.id<t.id?-1:+(e.id>t.id);function sn(e,t=``){let n=new Map,r=new Map;for(let i of e?.providers??[]){let e=i.provider===t;for(let t of i.models)if(e)n.has(t.id)||n.set(t.id,an(t)),r.delete(t.id);else if(!n.has(t.id)&&!r.has(t.id)){if(rn(t.id))continue;r.set(t.id,an(t))}}return[...n.values()].sort(on).concat([...r.values()].sort(on))}var cn=[`minimal`,`low`,`medium`,`high`,`xhigh`,`max`],ln=[`low`,`high`,`max`],un=`Catalog marks this model as not supporting reasoning effort`;function dn(e,t){if(t?.supportsReasoningEffort===!1)return{candidates:[],hint:un};let n=new Set(cn);for(let e of t?.effortTiers??[]){let t=e.trim();t.length>0&&n.add(t)}for(let t of e)for(let e of t.efforts??[]){let t=e.trim();t.length>0&&n.add(t)}return{candidates:[...n].sort((e,t)=>e<t?-1:+(e>t)),hint:null}}function fn(e){return{id:e.id,...e.name===void 0?{}:{name:e.name},...e.contextWindow===void 0?{}:{contextWindow:e.contextWindow},...e.maxOutputTokens===void 0?{}:{maxOutputTokens:e.maxOutputTokens},inputTypes:e.inputTypes??(e.image?[`text`,`image`]:[`text`]),outputTypes:[`text`],efforts:[...ln]}}var pn=n(`<span class="h-1.5 w-1.5 shrink-0 rounded-full bg-amber-500" title="Unsaved changes" aria-label="Unsaved changes"></span>`),mn=n(`<span data-header-status="true"><!></span>`),hn=n(`<option> </option>`),gn=n(`<p class="text-[10px] text-muted-foreground" role="note"> </p>`),_n=n(`<p class="text-[10px] text-destructive" role="alert">Invalid token value — use numbers, or shorthand like 253k / 0.5M.</p>`),vn=n(`<button type="button"> </button>`),yn=n(`<div class="grid grid-cols-2 gap-1.5"><label class="min-w-0 space-y-0.5"><span class="text-[10px] text-muted-foreground">Model id</span> <!> <datalist></datalist></label> <label class="min-w-0 space-y-0.5"><span class="text-[10px] text-muted-foreground">Name</span> <!></label></div> <div class="block space-y-0.5"><span class="text-[10px] text-muted-foreground">Efforts</span> <!> <!></div> <div class="grid grid-cols-2 gap-1.5"><label class="min-w-0 space-y-0.5"><span class="text-[10px] text-muted-foreground">Context window</span> <!></label> <label class="min-w-0 space-y-0.5"><span class="text-[10px] text-muted-foreground">Max output tokens</span> <!></label></div> <!> <div class="flex flex-wrap items-center justify-between gap-2"><div class="flex flex-wrap items-center gap-1"><span class="text-[10px] text-muted-foreground">Inputs:</span> <span class="rounded bg-primary px-1.5 py-0.5 text-[10px] font-medium text-primary-foreground" title="Text is always required" data-input-chip="text">text</span> <!></div> <div class="flex items-center gap-1"><span class="text-[10px] text-muted-foreground">Outputs:</span> <span class="rounded bg-primary px-1.5 py-0.5 text-[10px] font-medium text-primary-foreground" title="Text output is always required" data-output-chip="text">text</span> <button type="button" title="Image output (image-generation models)" data-output-chip="image">image</button></div></div> <div class="flex items-center justify-between gap-2 border-t border-border pt-1.5"><span data-form-status="true"><!></span> <span class="flex shrink-0 items-center gap-1.5"><!> <!></span></div>`,1),bn=n(`<div class="space-y-1.5 rounded-md border border-border p-2"><div class="flex items-center justify-between gap-2"><div class="flex min-w-0 flex-1 items-center gap-1.5"><!> <span class="min-w-0 truncate text-xs font-medium" data-header-name="true"> </span> <!></div> <div class="flex shrink-0 items-center"><button type="button" class="flex h-11 w-11 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:pointer-events-none disabled:opacity-50"><!></button> <button type="button" class="flex h-11 w-11 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground disabled:pointer-events-none disabled:opacity-50"><!></button> <button type="button" class="flex h-11 w-11 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-destructive disabled:pointer-events-none disabled:opacity-50" title="Remove model"><!></button></div></div> <!></div>`);function xn(n,i){r(i,!0);let s=b(i,`routeModels`,19,()=>[]),c=b(i,`provider`,3,``),l=b(i,`formKey`,3,``),u=b(i,`disabled`,3,!1),f=b(i,`dirty`,3,!1),p=b(i,`initialExpanded`,3,!1),_=O(()=>l().trim().length>0),y=[`image`,`video`,`pdf`],x=`model-id-candidates-${crypto.randomUUID()}`,S=P(V(i.model.id)),C=P(V(i.model.name??tn(i.model.id))),T=P(V(i.model.contextWindow===void 0?``:nn(i.model.contextWindow))),E=P(V(i.model.maxOutputTokens===void 0?``:nn(i.model.maxOutputTokens))),k=P(!1),A=P(!1),ee=P(V((i.model.outputTypes??[]).includes(`image`))),I=P(!1),R=P(!1),z=P(!1),H=P(!1),W=P(!1),G=P(!1),K=P(null),q=P(V(i.model.id)),J=P(``),Y=P(V(p())),X=O(()=>v(S).trim().length>0),ne=O(()=>v(X)&&!v(H)&&!v(W)),re=O(()=>new Set(i.model.inputTypes??[`text`])),ae=O(()=>i.candidates.find(e=>e.id===v(S).trim())??null),oe=O(()=>dn(s(),v(ae))),Z=O(()=>v(J).trim()),se=O(()=>i.model.name??(i.model.id.length>0?tn(i.model.id):`New model`)),ce=O(()=>u()||!v(X)||v(G)||i.api.length===0||i.baseURL.length===0||!v(_)&&!i.apiKeyConfigured&&v(Z).length===0);te(()=>{i.onvalidity(v(ne))});function Q(e){i.onchange({...i.model,...e})}function le(e){D(S,e,!0);let t=e.trim(),n=i.candidates.find(e=>e.id===t),r={id:t};n===void 0?(D(q,null),v(k)||(D(C,tn(t),!0),i.model.name!==void 0&&(r.name=void 0)),!v(I)&&i.model.contextWindow!==void 0&&(D(T,``),r.contextWindow=void 0),!v(R)&&i.model.maxOutputTokens!==void 0&&(D(E,``),r.maxOutputTokens=void 0),!v(A)&&i.model.inputTypes!==void 0&&(r.inputTypes=void 0),!v(ee)&&i.model.outputTypes!==void 0&&(r.outputTypes=void 0)):(t!==v(q)&&(D(k,!1),D(I,!1),D(R,!1),D(A,!1),D(ee,!1),D(z,!1),D(q,t,!0)),v(k)||(D(C,n.name??tn(n.id),!0),r.name=v(C)),v(I)||(n.contextWindow===void 0?i.model.contextWindow!==void 0&&(D(T,``),r.contextWindow=void 0):(D(T,nn(n.contextWindow),!0),r.contextWindow=n.contextWindow)),v(R)||(n.maxOutputTokens===void 0?i.model.maxOutputTokens!==void 0&&(D(E,``),r.maxOutputTokens=void 0):(D(E,nn(n.maxOutputTokens),!0),r.maxOutputTokens=n.maxOutputTokens)),v(A)||(r.inputTypes=n.inputTypes??(n.image?[`text`,`image`]:[`text`])),v(ee)||(r.outputTypes=[`text`]),!v(z)&&i.model.efforts===void 0&&(r.efforts=[...ln])),Q(r)}function ue(e){D(C,e,!0),D(k,!0),Q(e.trim().length>0?{name:e.trim()}:{name:void 0})}function de(e){let t=v(e===`contextWindow`?T:E).trim(),n=t=>{D(e===`contextWindow`?H:W,t,!0)};if(t.length===0){n(!1),Q(e===`contextWindow`?{contextWindow:void 0}:{maxOutputTokens:void 0});return}let r=ie(t);if(r===null){n(!0);return}n(!1),e===`contextWindow`?(D(T,nn(r),!0),D(I,!0)):(D(E,nn(r),!0),D(R,!0)),Q(e===`contextWindow`?{contextWindow:r}:{maxOutputTokens:r})}function fe(e){D(A,!0);let t=new Set(v(re));t.has(e)?t.delete(e):t.add(e),t.add(`text`),Q({inputTypes:[`text`,...y.filter(e=>t.has(e))]})}let pe=O(()=>new Set(i.model.outputTypes??[`text`]));function me(e){D(ee,!0);let t=new Set(v(pe));t.has(e)?t.delete(e):t.add(e),t.add(`text`),Q({outputTypes:[`text`,`image`].filter(e=>t.has(e))})}async function he(){if(v(G)||!v(X)||!v(_)&&!i.apiKeyConfigured&&v(Z).length===0)return;let e=v(_)?l().trim():i.apiKeyConfigured?null:v(Z);D(G,!0),D(K,null);let t=await qe({api:i.api,baseURL:i.baseURL,modelId:v(S).trim(),...e===null?c().length>0?{provider:c()}:{}:{apiKey:e}});D(G,!1),t!==null&&D(K,t,!0)}var ge=bn(),_e=L(ge),ve=L(_e),ye=L(ve),xe=e=>{var t=pn();m(e,t)};d(ye,e=>{f()&&e(xe)});var Se=M(ye,2),Ce=w(Se,!0),we=M(Se,2),Te=e=>{var n=mn(),r=L(n),i=e=>{var t=g(`testing…`);m(e,t)},o=e=>{var t=g();F(()=>a(t,`ok · ${v(K).latencyMs??``} ms`)),m(e,t)},s=e=>{var t=g();F(()=>a(t,`failed · ${v(K).detail??``}`)),m(e,t)};d(r,e=>{v(G)?e(i):v(K)?.outcome===`ok`?e(o,1):v(K)?.outcome===`failed`&&e(s,2)}),t(n),F(()=>U(n,1,`min-w-0 shrink-0 truncate text-[10px] ${v(K)?.outcome===`ok`?`text-primary`:v(K)?.outcome===`failed`?`text-destructive`:`text-muted-foreground`}`)),m(e,n)};d(we,e=>{v(Y)||e(Te)}),t(ve);var Ee=M(ve,2),De=L(Ee);wt(L(De),{class:`h-4 w-4`,"aria-hidden":`true`}),t(De);var Oe=M(De,2),ke=L(Oe);be(ke,{class:`h-4 w-4`,"aria-hidden":`true`}),t(Oe);var Ae=M(Oe,2),je=L(Ae);Qe(je,{class:`h-4 w-4`,"aria-hidden":`true`}),t(Ae),t(Ee),t(_e);var Me=M(_e,2),Ne=n=>{var r=yn(),s=B(r),c=L(s),l=M(L(c),2);Re(l,{class:`h-8 font-mono text-xs`,"aria-label":`Model id`,placeholder:`glm-5.3-flash`,get list(){return x},get disabled(){return u()},oninput:e=>le(e.currentTarget.value),get value(){return v(S)},set value(e){D(S,e,!0)}});var f=M(l,2);e(f,21,()=>i.candidates.slice(0,200),e=>e.id,(e,t)=>{var n=hn(),r=w(n,!0),i={};F(()=>{a(r,v(t).name??``),i!==(i=v(t).id)&&(n.value=(n.__value=i)??``)}),m(e,n)}),t(f),t(c);var p=M(c,2),h=M(L(p),2);{let e=O(()=>tn(v(S).trim()||i.model.id));Re(h,{class:`h-8 text-xs`,"aria-label":`Model name`,get placeholder(){return v(e)},get disabled(){return u()},oninput:e=>ue(e.currentTarget.value),get value(){return v(C)},set value(e){D(C,e,!0)}})}t(p),t(s);var b=M(s,2),k=M(L(b),2);{let e=O(()=>i.model.efforts??[]),t=O(()=>v(oe).candidates.map(e=>({id:e})));en(k,{get selected(){return v(e)},get candidates(){return v(t)},placeholder:`Add effort (e.g. low)…`,get disabled(){return u()},onchange:e=>{D(z,!0),Q(e.length>0?{efforts:e}:{efforts:void 0})}})}var A=M(k,2),ee=e=>{var t=gn(),n=w(t,!0);F(()=>a(n,v(oe).hint)),m(e,t)};d(A,e=>{v(oe).hint!==null&&e(ee)}),t(b);var P=M(b,2),I=L(P),R=M(L(I),2);{let e=O(()=>v(H)?`border-destructive focus-visible:ring-destructive`:``);Re(R,{get class(){return`h-8 text-xs ${v(e)??``}`},"aria-label":`Context window (tokens)`,placeholder:`200k / 0.5M / 131072`,get disabled(){return u()},onblur:()=>de(`contextWindow`),onkeydown:e=>{e.key===`Enter`&&de(`contextWindow`)},get value(){return v(T)},set value(e){D(T,e,!0)}})}t(I);var te=M(I,2),V=M(L(te),2);{let e=O(()=>v(W)?`border-destructive focus-visible:ring-destructive`:``);Re(V,{get class(){return`h-8 text-xs ${v(e)??``}`},"aria-label":`Max output tokens`,placeholder:`32k / 131072`,get disabled(){return u()},onblur:()=>de(`maxOutputTokens`),onkeydown:e=>{e.key===`Enter`&&de(`maxOutputTokens`)},get value(){return v(E)},set value(e){D(E,e,!0)}})}t(te),t(P);var q=M(P,2),Y=e=>{var t=_n();m(e,t)};d(q,e=>{(v(H)||v(W))&&e(Y)});var X=M(q,2),ne=L(X),ie=M(L(ne),4);e(ie,16,()=>y,e=>e,(e,t)=>{var n=vn(),r=w(n,!0);F((e,i)=>{U(n,1,`rounded border px-1.5 py-0.5 text-[10px] transition-colors ${e??``}`),N(n,`aria-pressed`,i),n.disabled=u(),a(r,t)},[()=>v(re).has(t)?`border-primary bg-primary text-primary-foreground`:`border-border bg-background text-muted-foreground hover:bg-muted`,()=>v(re).has(t)]),o(`click`,n,()=>fe(t)),m(e,n)}),t(ne);var ae=M(ne,2),Z=M(L(ae),4);t(ae),t(X);var se=M(X,2),ge=L(se),_e=L(ge),ve=e=>{var t=g();F(()=>a(t,`ok · ${v(K).latencyMs??``} ms`)),m(e,t)},ye=e=>{var t=g();F(()=>a(t,`failed · ${v(K).detail??``}`)),m(e,t)},be=e=>{var t=g(`Probing with the route key above (saved on add).`);m(e,t)},xe=e=>{var t=g(`No saved key for this route — paste one to test (never stored).`);m(e,t)},Se=e=>{var t=g(`Probe this endpoint with a minimal request.`);m(e,t)};d(_e,e=>{v(K)?.outcome===`ok`?e(ve):v(K)?.outcome===`failed`?e(ye,1):v(_)?e(be,2):i.apiKeyConfigured?e(Se,-1):e(xe,3)}),t(ge);var Ce=M(ge,2),we=L(Ce),Te=e=>{Re(e,{type:`password`,class:`h-6 w-44 font-mono text-[10px]`,"aria-label":`API key (test only)`,placeholder:`API key (test only)`,autocomplete:`off`,get disabled(){return u()},get value(){return v(J)},set value(e){D(J,e,!0)}})};d(we,e=>{!i.apiKeyConfigured&&!v(_)&&e(Te)});var Ee=M(we,2);{let e=O(()=>v(_)?`Send a minimal probe with the route key above (saved on add)`:i.apiKeyConfigured?`Send a minimal probe request`:`Send a minimal probe with the pasted key (not saved)`);Le(Ee,{size:`sm`,variant:`outline`,class:`h-6 shrink-0 px-2 text-[10px]`,get disabled(){return v(ce)},get title(){return v(e)},onclick:()=>void he(),children:(e,t)=>{j();var n=g();F(()=>a(n,v(G)?`Testing…`:`Test connection`)),m(e,n)},$$slots:{default:!0}})}t(Ce),t(se),F((e,t)=>{N(f,`id`,x),U(Z,1,`rounded border px-1.5 py-0.5 text-[10px] transition-colors ${e??``}`),N(Z,`aria-pressed`,t),Z.disabled=u(),U(ge,1,`min-w-0 truncate text-[10px] ${v(K)?.outcome===`ok`?`text-primary`:v(K)?.outcome===`failed`?`text-destructive`:`text-muted-foreground`}`)},[()=>v(pe).has(`image`)?`border-primary bg-primary text-primary-foreground`:`border-border bg-background text-muted-foreground hover:bg-muted`,()=>v(pe).has(`image`)]),o(`click`,Z,()=>me(`image`)),m(n,r)};d(Me,e=>{v(Y)&&e(Ne)}),t(ge),F(()=>{N(ge,`aria-label`,`Model ${i.model.id??``}`),N(Se,`title`,i.model.id),a(Ce,v(se)),N(De,`aria-label`,`Test connection for ${(i.model.id||`new model`)??``}`),N(De,`title`,v(_)?`Send a minimal probe with the route key (saved on add)`:i.apiKeyConfigured?`Send a minimal probe request`:`Expand and paste a key to test (not saved)`),De.disabled=v(ce),N(Oe,`aria-label`,`Edit model ${(i.model.id||`new model`)??``}`),N(Oe,`title`,v(Y)?`Collapse model form`:`Edit model fields`),Oe.disabled=u(),N(Ae,`aria-label`,`Remove model ${i.model.id??``}`),Ae.disabled=u()}),o(`click`,De,()=>void he()),o(`click`,Oe,()=>D(Y,!v(Y))),o(`click`,Ae,()=>i.onremove()),m(n,ge),h()}_([`click`]);var Sn=/^(.*)-(\d+)$/;function Cn(e,t){let n=new Set(t.map(e=>e.provider));if(!n.has(e))return e;let r=1;for(let t of n){if(t===e)continue;let n=Sn.exec(t);if(n===null||n[1]!==e)continue;let i=Number(n[2]);Number.isInteger(i)&&i>r&&(r=i)}return`${e}-${r+1}`}function wn(e){let t=Sn.exec(e);if(t===null)return null;let n=Number(t[2]);return!Number.isInteger(n)||n<2?null:{base:t[1],n}}function Tn(e,t){let n=wn(e.provider);if(n!==null){let e=t?.providers.find(e=>e.provider===n.base);if(e)return`${e.label} (${n.n-1})`}return t?.providers.find(t=>t.provider===e.provider)?.label??e.provider}var En=`skill-creator.providerPresets.v1`,Dn=X({provider:J().min(1),label:J().min(1),api:J().min(1).optional(),baseURL:J().min(1),models:Y(J().min(1)).min(1),icon:J().min(1).optional(),iconLetter:J().min(1).max(2).optional(),iconColor:J().min(1).optional(),iconSuppressed:ce().optional()}),On=V({list:[]});function kn(){if(typeof localStorage>`u`)return[];let e=null;try{e=localStorage.getItem(En)}catch{return[]}if(e===null)return[];let t;try{t=JSON.parse(e)}catch{return[]}if(!Array.isArray(t))return[];let n=[];for(let e of t){let t=Dn.safeParse(e);t.success&&n.push(t.data)}return n}function An(e){if(!(typeof localStorage>`u`))try{localStorage.setItem(En,JSON.stringify(e))}catch{}}function jn(){return On.list=kn(),On.list}function Mn(e){let t=On.list.filter(t=>t.provider!==e);On.list=t,An(t)}var Nn=n(`<p class="text-xs text-destructive" role="alert"> </p>`),Pn=n(`<p class="text-[10px] text-destructive" role="alert"> </p>`),Fn=n(`<p class="py-3 text-center text-[10px] text-muted-foreground"> </p>`),In=n(`<img alt="" class="h-7 w-7 shrink-0 rounded-md bg-background object-contain p-0.5 dark:invert"/>`),Ln=n(`<span class="flex h-7 w-7 shrink-0 items-center justify-center rounded-md text-[11px] font-semibold text-white" aria-hidden="true"> </span>`),Rn=n(`<div class="group relative"><button type="button" class="flex w-full items-center gap-2 rounded-md border border-border p-2 text-left transition-colors hover:border-primary/50 hover:bg-primary/5"><!> <span class="min-w-0 flex-1"><span class="block truncate text-xs font-medium"> </span> <span class="block truncate text-[10px] text-muted-foreground"> </span></span> <span class="mr-0.5 shrink-0 rounded bg-muted px-1 text-[9px] text-muted-foreground"> </span></button> <button type="button" class="absolute right-1 top-1 hidden rounded bg-popover/80 p-0.5 text-muted-foreground hover:text-destructive group-hover:block">×</button></div>`),zn=n(`<div class="space-y-1"><span class="text-[10px] font-medium text-muted-foreground">Your presets</span> <div class="grid grid-cols-1 gap-1.5 min-[520px]:grid-cols-2"></div></div>`),Bn=n(`<span class="rounded bg-primary/10 px-1 text-[9px] text-primary"> </span>`),Vn=n(`<button type="button" class="flex w-full items-center gap-2 rounded-md border border-border p-2 text-left transition-colors hover:border-primary/50 hover:bg-primary/5"><!> <span class="min-w-0 flex-1"><span class="block truncate text-xs font-medium"> </span> <span class="block truncate text-[10px] text-muted-foreground"> </span></span> <span class="mr-0.5 flex shrink-0 items-center gap-1"><!> <span class="rounded bg-muted px-1 text-[9px] text-muted-foreground"> </span></span></button>`),Hn=n(`<p class="col-span-full py-3 text-center text-[10px] text-muted-foreground"> </p>`),Un=n(`<div class="space-y-2"><!> <div class="space-y-1"><span class="text-[10px] font-medium text-muted-foreground"> </span> <div class="grid grid-cols-1 gap-1.5 min-[520px]:grid-cols-2"><!> <!></div></div></div>`),Wn=n(`<div class="space-y-2"><div class="flex items-center gap-2"><!> <!> <!></div> <!> <!></div>`),Gn=n(`<p class="text-[10px] text-amber-700" role="alert"> </p>`),Kn=n(`<p class="text-[10px] text-amber-700" role="alert">Custom route needs a name.</p>`),qn=n(`<p class="text-[10px] text-amber-700" role="alert">Custom route needs an http(s) base URL.</p>`),Jn=n(`<option> </option>`),Yn=n(`<p class="rounded-md border border-dashed p-2 text-center text-[10px] text-muted-foreground">No models yet — add one to enable the route.</p>`),Xn=n(`<div class="space-y-3"><div class="flex items-center gap-2"><!> <label class="min-w-0 flex-1 space-y-0.5"><span class="text-[10px] text-muted-foreground">Route name</span> <!></label></div> <!> <label class="block space-y-0.5"><span class="text-[10px] text-muted-foreground">Base URL</span> <!></label> <!> <label class="block space-y-0.5"><span class="text-[10px] text-muted-foreground">API protocol</span> <select class="h-8 w-full rounded-md border border-border bg-background px-2 text-xs" aria-label="API protocol"></select></label> <div class="block space-y-0.5"><span class="text-[10px] text-muted-foreground">API key</span> <div class="relative"><!> <button type="button" class="absolute right-1.5 top-1/2 flex h-6 w-6 -translate-y-1/2 items-center justify-center rounded text-muted-foreground transition-colors after:absolute after:-inset-2.5 after:content-[''] hover:text-foreground disabled:pointer-events-none disabled:opacity-50"><!></button></div></div> <div class="space-y-1.5"><div class="flex items-center justify-between"><span class="text-[10px] font-medium text-muted-foreground">Models</span> <!></div> <!> <div class="space-y-1.5"></div></div> <!> <div class="flex items-center justify-between border-t border-border pt-2"><!> <!></div></div>`);function Zn(n,i){r(i,!0);let s=b(i,`seed`,3,null),c=`anthropic-messages`,l=P(V(i.initialMode)),u=P(``),f=P(V(s()?.provider??``)),p=P(void 0),_=P(void 0),x=P(void 0),C=P(void 0),T=P(``),E=P(``),A=P(!1),ee=O(()=>v(E).trim()),I=P(c),R=P(V(s()?.models?s().models.map(e=>_e(e)):[])),z=P(V(s()?.models?s().models.map(()=>!0):[])),U=P(!1),G=P(!1),K=P(null),q=O(()=>$.view),J=O(()=>v(q)?.settings.modelRoutes??[]),Y=O(()=>(i.catalog?.providers??[]).flatMap(e=>e.icon?[{provider:e.provider,icon:e.icon}]:[])),X=O(()=>v(f).trim()),ne=O(()=>sn(i.catalog,wn(v(X))?.base??v(X))),re=O(()=>Tn({provider:v(X)},i.catalog)),ie=O(()=>le({provider:v(X),iconLetter:v(x)},v(re))),ae=O(()=>v(_)??pe(v(X)||`route`)),Z=O(()=>{if(v(C)===!0)return null;if(v(p)!==void 0)return v(p);let e=wn(v(X))?.base??v(X);return i.catalog?.providers.find(t=>t.provider===e)?.icon??null}),se=O(()=>[...v(J).flatMap(e=>e.models),...v(R)]),ce=O(()=>v(X).length>0&&v(J).some(e=>e.provider===v(X))),Q=O(()=>/^https?:\/\//.test(v(T).trim())),ue=O(()=>v(z).length===v(R).length&&v(z).every(e=>e)),de=O(()=>v(X).length>0&&!v(ce)&&v(Q)&&v(R).length>0&&v(ue)&&!$.updating),fe=O(()=>v(q)?.providers.some(e=>e.provider===v(X)&&e.configured)??!1),me=O(()=>{let e=v(u).trim().toLowerCase(),t=i.catalog?.providers??[];return e.length===0?t:t.filter(t=>t.label.toLowerCase().includes(e)||t.provider.toLowerCase().includes(e)||t.baseURL.toLowerCase().includes(e))}),he=O(()=>{let e=v(u).trim().toLowerCase();return e.length===0?On.list:On.list.filter(t=>t.label.toLowerCase().includes(e)||t.provider.toLowerCase().includes(e)||t.baseURL.toLowerCase().includes(e))});function ge(e){return v(J).filter(t=>t.provider===e||wn(t.provider)?.base===e).length}function _e(e){let t=wn(s()?.provider??``)?.base??s()?.provider??``,n=i.catalog?.providers.find(e=>e.provider===t)?.models.find(t=>t.id===e);return n===void 0?{id:e,efforts:[...ln]}:fn(n)}jn(),te(()=>{v(l)});function ve(){D(f,``),D(p,void 0),D(_,void 0),D(x,void 0),D(C,void 0),D(T,``),D(I,c),D(R,[],!0),D(z,[],!0),D(l,`form`),D(U,!1),D(G,!1),D(K,null)}async function ye(e){let t=await ze({modelRoutes:[...v(J),e]});if(t){if(t.outcome===`rejected`){D(K,`${t.code}: ${t.detail}`);return}if(t.outcome===`error`){D(K,t.message,!0);return}i.onadded(e.provider)}}async function be(e){$.updating||await ye({provider:Cn(e.provider,v(J)),baseURL:e.baseURL,api:e.api,models:[...e.models].sort((e,t)=>Number(t.image)-Number(e.image)).slice(0,4).map(e=>fn(e)),...e.icon?{icon:e.icon}:{}})}async function xe(e){$.updating||await ye({provider:Cn(e.provider,v(J)),baseURL:e.baseURL,api:e.api??c,models:e.models.map(e=>({id:e,efforts:[...ln]})),...e.icon?{icon:e.icon}:{},...e.iconColor?{iconColor:e.iconColor}:{},...e.iconLetter?{iconLetter:e.iconLetter}:{},...e.iconSuppressed?{iconSuppressed:!0}:{}})}function Se(e,t){D(R,v(R).map((n,r)=>r===e?t:n),!0)}function Ce(e,t){v(z)[e]!==t&&D(z,v(z).map((n,r)=>r===e?t:n),!0)}function we(e){D(R,v(R).filter((t,n)=>n!==e),!0),D(z,v(z).filter((t,n)=>n!==e),!0)}function Te(){D(R,[...v(R),{id:``,efforts:[...ln]}],!0),D(z,[...v(z),!1],!0)}async function Ee(){if(v(de)){if(v(ee).length>0){let e=await Je(v(X),v(ee));if(e==null||e.outcome===`rejected`){D(K,e==null?`Could not save the API key — connection unavailable. The route was not created.`:`${e.code}: ${e.detail}`,!0);return}}await ye({provider:v(X),baseURL:v(T).trim(),api:v(I),models:v(R).map(e=>({...e})),...v(p)?{icon:v(p)}:{},...v(_)?{iconColor:v(_)}:{},...v(x)?{iconLetter:v(x)}:{},...v(C)?{iconSuppressed:!0}:{}})}}var De=W(),Oe=B(De),ke=n=>{var r=Wn(),s=L(r),c=L(s);Re(c,{class:`h-8 flex-1 text-xs`,"aria-label":`Search providers`,placeholder:`Search providers…`,ref:null,get value(){return v(u)},set value(e){D(u,e,!0)}});var l=M(c,2),f=e=>{Le(e,{size:`sm`,variant:`ghost`,class:`h-8 shrink-0 px-2 text-[11px]`,onclick:()=>i.onclose?.(),children:(e,t)=>{j();var n=g(`Cancel`);m(e,n)},$$slots:{default:!0}})};d(l,e=>{v(J).length===0&&i.onclose&&e(f)});var p=M(l,2);Le(p,{size:`sm`,variant:`ghost`,class:`h-8 shrink-0 px-2 text-[11px]`,onclick:ve,children:(e,t)=>{j();var n=g(`Start from scratch →`);m(e,n)},$$slots:{default:!0}}),t(s);var h=M(s,2),_=e=>{var t=Nn(),n=w(t,!0);F(()=>a(n,v(K))),m(e,t)};d(h,e=>{v(K)&&e(_)});var y=M(h,2),b=e=>{var t=Pn(),n=w(t,!0);F(()=>a(n,i.catalogError)),m(e,t)},x=e=>{var t=Fn(),n=w(t,!0);F(()=>a(n,i.catalogLoading?`Loading catalog…`:`Catalog unavailable.`)),m(e,t)},C=n=>{var r=Un(),s=L(r),c=n=>{var r=zn(),i=M(L(r),2);e(i,21,()=>v(he),e=>e.provider,(e,n)=>{var r=Rn(),i=L(r),s=L(i),c=e=>{var t=In();F(()=>N(t,`src`,v(n).icon)),m(e,t)},l=e=>{var t=Ln(),r=w(t,!0);F((e,n)=>{S(t,`background: ${e??``}`),a(r,n)},[()=>v(n).iconColor??pe(v(n).provider),()=>le({provider:v(n).provider,iconLetter:v(n).iconLetter},v(n).label)]),m(e,t)};d(s,e=>{v(n).icon?e(c):e(l,-1)});var u=M(s,2),f=L(u),p=w(f,!0),h=M(f,2),g=w(h,!0);t(u);var _=M(u,2),y=w(_,!0);t(i);var b=M(i,2);t(r),F(e=>{N(i,`title`,v(n).baseURL),i.disabled=$.updating,a(p,v(n).label),a(g,e),N(_,`title`,`${v(n).models.length??``} saved models`),a(y,v(n).models.length),N(b,`aria-label`,`Delete preset ${v(n).label??``}`)},[()=>v(n).baseURL.replace(/^https?:\/\//,``)]),o(`click`,i,()=>void xe(v(n))),o(`click`,b,()=>Mn(v(n).provider)),m(e,r)}),t(i),t(r),m(n,r)};d(s,e=>{v(he).length>0&&e(c)});var l=M(s,2),f=L(l),p=w(f),h=M(f,2),g=L(h);e(g,17,()=>v(me),e=>e.provider,(e,n)=>{let r=O(()=>ge(v(n).provider)),i=O(()=>v(r)>0?`${v(n).baseURL} · ${v(n).api} · ${v(r)} copies added — click to add another`:`${v(n).baseURL} · ${v(n).api}`);var s=Vn(),c=L(s),l=e=>{var t=In();F(()=>N(t,`src`,v(n).icon)),m(e,t)},u=e=>{var t=Ln(),r=w(t,!0);F((e,n)=>{S(t,`background: ${e??``}`),a(r,n)},[()=>pe(v(n).provider),()=>v(n).label.slice(0,1).toUpperCase()]),m(e,t)};d(c,e=>{v(n).icon?e(l):e(u,-1)});var f=M(c,2),p=L(f),h=w(p,!0),g=M(p,2),_=w(g,!0);t(f);var y=M(f,2),b=L(y),x=e=>{var t=Bn(),n=w(t);F(()=>{N(t,`title`,`${v(r)??``} cop${v(r)===1?`y`:`ies`} of this provider already added — you can add another`),a(n,`Added ✓${v(r)>1?` ×${v(r)}`:``}`)}),m(e,t)};d(b,e=>{v(r)>0&&e(x)});var C=M(b,2),T=w(C,!0);t(y),t(s),F(e=>{N(s,`title`,v(i)),s.disabled=$.updating,a(h,v(n).label),a(_,e),N(C,`title`,`${v(n).models.length??``} models in catalog`),a(T,v(n).models.length)},[()=>v(n).baseURL.replace(/^https?:\/\//,``)]),o(`click`,s,()=>void be(v(n))),m(e,s)});var _=M(g,2),y=e=>{var t=Hn(),n=w(t);F(()=>a(n,`No providers match “${v(u)??``}”.`)),m(e,t)};d(_,e=>{v(me).length===0&&e(y)}),t(h),t(l),t(r),F(()=>a(p,`Catalog (${i.catalog.providers.length??``} providers, from zcode Registry)`)),m(n,r)};d(y,e=>{i.catalogError?e(b):i.catalog===null?e(x,1):e(C,-1)}),t(r),m(n,r)},Ae=n=>{var r=Xn(),i=L(r),s=L(i);{let e=O(()=>v(X)||`route`);Jt(s,{get icon(){return v(Z)},get letter(){return v(ie)},get color(){return v(ae)},get provider(){return v(e)},get label(){return v(re)},get catalogIcons(){return v(Y)},get disabled(){return $.updating},onPick:e=>{D(p,e,!0),D(C,void 0)},onSuppress:()=>D(C,!0),onColor:e=>D(_,e,!0),onLetter:e=>D(x,e,!0)})}var c=M(s,2),u=M(L(c),2);Re(u,{class:`h-8 text-xs`,"aria-label":`Route name`,placeholder:`my-provider`,get disabled(){return $.updating},onblur:()=>D(G,!0),get value(){return v(f)},set value(e){D(f,e,!0)}}),t(c),t(i);var h=M(i,2),b=e=>{var t=Gn(),n=w(t);F(()=>a(n,`Route “${v(X)??``}” already exists.`)),m(e,t)},S=e=>{var t=Kn();m(e,t)};d(h,e=>{v(ce)?e(b):v(G)&&v(X).length===0&&e(S,1)});var P=M(h,2),te=M(L(P),2);Re(te,{class:`h-8 font-mono text-xs`,"aria-label":`Base URL`,placeholder:`https://api.example.com/v1`,get disabled(){return $.updating},onblur:()=>D(U,!0),get value(){return v(T)},set value(e){D(T,e,!0)}}),t(P);var z=M(P,2),B=e=>{var t=qn();m(e,t)};d(z,e=>{v(U)&&!v(Q)&&e(B)});var V=M(z,2),W=M(L(V),2);e(W,20,()=>oe,e=>e,(e,t)=>{var n=Jn(),r=w(n,!0),i={};F(()=>{a(r,t),i!==(i=t)&&(n.value=(n.__value=i)??``)}),m(e,n)}),t(W),H(W),t(V);var q=M(V,2),J=M(L(q),2),le=L(J);{let e=O(()=>v(A)?`text`:`password`),t=O(()=>v(fe)?`stored — this key overrides for add & test`:`API key`);Re(le,{class:`h-8 pr-9 text-xs`,get type(){return v(e)},autocomplete:`off`,"aria-label":`API key`,get placeholder(){return v(t)},get disabled(){return $.updating},get value(){return v(E)},set value(e){D(E,e,!0)}})}var ue=M(le,2),pe=L(ue),me=e=>{Mt(e,{class:`h-3.5 w-3.5`,"aria-hidden":`true`})},he=e=>{Xe(e,{class:`h-3.5 w-3.5`,"aria-hidden":`true`})};d(pe,e=>{v(A)?e(me):e(he,-1)}),t(ue),t(J),t(q);var ge=M(q,2),_e=L(ge),ve=M(L(_e),2);Le(ve,{size:`sm`,variant:`ghost`,class:`h-6 px-2 text-[11px]`,get disabled(){return $.updating},onclick:Te,children:(e,t)=>{j();var n=g(`+ Add model`);m(e,n)},$$slots:{default:!0}}),t(_e);var ye=M(_e,2),be=e=>{var t=Yn();m(e,t)};d(ye,e=>{v(R).length===0&&e(be)});var xe=M(ye,2);e(xe,21,()=>v(R),k,(e,t,n)=>{{let r=O(()=>v(T).trim()),i=O(()=>v(t).id===``);xn(e,{get model(){return v(t)},get candidates(){return v(ne)},get routeModels(){return v(se)},get api(){return v(I)},get baseURL(){return v(r)},get provider(){return v(X)},get apiKeyConfigured(){return v(fe)},get formKey(){return v(ee)},get disabled(){return $.updating},get initialExpanded(){return v(i)},onchange:e=>Se(n,e),onremove:()=>we(n),onvalidity:e=>Ce(n,e)})}}),t(xe),t(ge);var De=M(ge,2),Oe=e=>{var t=Nn(),n=w(t,!0);F(()=>a(n,v(K))),m(e,t)};d(De,e=>{v(K)&&e(Oe)});var ke=M(De,2),Ae=L(ke);Le(Ae,{size:`sm`,variant:`ghost`,class:`h-7 px-2 text-xs`,onclick:()=>D(l,`pick`),children:(e,t)=>{j();var n=g(`Back`);m(e,n)},$$slots:{default:!0}});var je=M(Ae,2);{let e=O(()=>!v(de));Le(je,{size:`sm`,class:`h-7 px-2.5 text-xs`,get disabled(){return v(e)},onclick:()=>void Ee(),children:(e,t)=>{j();var n=g(`Create route`);m(e,n)},$$slots:{default:!0}})}t(ke),t(r),F(()=>{W.disabled=$.updating,N(ue,`aria-label`,v(A)?`Hide API key`:`Show API key`),N(ue,`aria-pressed`,v(A)),N(ue,`title`,v(A)?`Hide API key`:`Show API key`),ue.disabled=$.updating}),y(W,()=>v(I),e=>D(I,e)),o(`mousedown`,ue,e=>e.preventDefault()),o(`click`,ue,()=>D(A,!v(A))),m(n,r)};d(Oe,e=>{v(l)===`pick`?e(ke):e(Ae,-1)}),m(n,De),h()}_([`click`,`mousedown`]);var Qn=n(`<option> </option>`),$n=n(`<p class="text-[11px] font-medium text-primary"> </p>`),er=n(`<span class="text-[10px] text-amber-700">A route needs at least one model id.</span>`),tr=n(`<div><!></div>`),nr=n(`<p class="text-xs text-destructive" role="alert"> </p>`),rr=n(`<div class="space-y-3"><div class="flex items-start gap-2"><!> <div class="flex min-w-0 flex-1 items-center justify-between gap-2.5" data-route-titlebar="true"><div class="min-w-0"><p class="truncate text-sm font-semibold"> </p> <p class="mt-0.5 truncate text-[10px] text-muted-foreground"> </p></div> <div class="flex shrink-0 items-center gap-2.5"><button type="button" class="relative flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground transition-colors after:absolute after:-inset-2 after:content-[''] hover:bg-destructive/10 hover:text-destructive disabled:pointer-events-none disabled:opacity-50" aria-label="Remove route" title="Remove route"><!></button> <!></div></div></div> <section class="space-y-1.5 rounded-md border border-border p-2" aria-label="Endpoint"><span class="text-[11px] font-medium text-muted-foreground">Endpoint</span> <div class="flex gap-1.5"><!></div> <label class="block space-y-0.5"><span class="text-[10px] text-muted-foreground">API protocol</span> <select class="h-8 w-full rounded-md border border-border bg-background px-2 text-xs" aria-label="API protocol"></select></label></section> <section class="space-y-1.5 rounded-md border border-border p-2" aria-label="Credential"><!> <div class="flex gap-1.5"><div class="relative min-w-0 flex-1"><!> <button type="button" class="absolute right-1.5 top-1/2 flex h-6 w-6 -translate-y-1/2 items-center justify-center rounded text-muted-foreground transition-colors after:absolute after:-inset-2.5 after:content-[''] hover:text-foreground disabled:pointer-events-none disabled:opacity-50"><!></button></div> <!></div> <span class="text-[10px] text-muted-foreground">Stored locally (0600), shown as typed (password-masked), applies on blur/Enter.</span></section> <section class="space-y-1.5" aria-label="Models"><div class="flex items-center justify-between"><span class="text-[11px] font-medium text-muted-foreground">Models</span> <div class="flex items-center gap-1.5"><!> <!></div></div> <div class="space-y-1.5"></div></section> <!></div>`);function ir(n,i){r(i,!0);let s=b(i,`autoFocusCredential`,3,!1),c=`anthropic-messages`,l=O(()=>$.view),u=O(()=>v(l)?.settings.modelRoutes??[]),f=O(()=>v(u).flatMap(e=>e.models.map(e=>({id:e.id,efforts:e.efforts})))),_=O(()=>i.catalog?.providers.find(e=>e.provider===i.route.provider)),x=O(()=>(i.catalog?.providers??[]).flatMap(e=>e.icon?[{provider:e.provider,icon:e.icon}]:[])),S=O(()=>sn(i.catalog,wn(i.route.provider)?.base??i.route.provider)),C=O(()=>_e(i.route,v(_))),T=O(()=>Tn(i.route,i.catalog)),E=O(()=>le(i.route,v(T))),A=O(()=>ye(i.route)),I=O(()=>v(l)?.providers.some(e=>e.provider===i.route.provider&&e.configured)??!1),R=P(V(i.route.baseURL)),z=P(V(i.route.api??v(_)?.api??c)),B=P(V(i.route.models.map(e=>({...e})))),U=P(V(i.route.models.map(()=>!0))),W=O(()=>v(l)?.providers.find(e=>e.provider===i.route.provider)?.apiKey??null),G=P(V(v(W)??``)),K=P(!1),q=P(V(s())),J=P(null),Y=P(null),X=P(!1),ne=null,re=[],ie=O(()=>v(R).trim()!==i.route.baseURL||v(z)!==(i.route.api??v(_)?.api??c)),ae=O(()=>JSON.stringify(v(B))!==JSON.stringify(i.route.models)),Z=O(()=>v(U).every(e=>e)),se=O(()=>!(v(ie)||v(ae))||!v(Z)||v(B).length===0||$.updating);te(()=>{s()&&v(J)!==null&&(v(J).focus(),i.onCredentialFocused?.())}),te(()=>()=>{ne!==null&&clearTimeout(ne)});async function ce(e){if(v(l)===null)return!1;let t=await ze({modelRoutes:v(u).map(t=>t.provider===i.route.provider?e:t)});return t?t.outcome===`rejected`?(D(Y,`${t.code}: ${t.detail}`),!1):t.outcome===`error`?(D(Y,t.message,!0),!1):(D(Y,null),!0):!1}async function Q(e){await ce({...i.route,...e})}async function ue(){let e=v(R).trim();if(!/^https?:\/\//.test(e)){D(Y,`Custom route needs an http(s) base URL.`);return}await ce({...i.route,baseURL:e,api:v(z),models:v(B).map(e=>({...e}))})&&(D(X,!0),ne!==null&&clearTimeout(ne),ne=setTimeout(()=>D(X,!1),1500))}function de(e,t){D(B,v(B).map((n,r)=>r===e?t:n),!0)}function fe(e,t){v(U)[e]!==t&&D(U,v(U).map((n,r)=>r===e?t:n),!0)}function pe(e){D(B,v(B).filter((t,n)=>n!==e),!0),D(U,v(U).filter((t,n)=>n!==e),!0)}function me(e){let t=v(B)[e],n=i.route.models[e];return t===void 0||n===void 0||JSON.stringify(t)!==JSON.stringify(n)}async function he(){D(B,[...v(B),{id:``,efforts:[...ln]}],!0),D(U,[...v(U),!1],!0),await p(),re[re.length-1]?.scrollIntoView({block:`nearest`,behavior:`smooth`})}async function ge(){let e=v(G).trim();if(e.length===0)return;let t=await Je(i.route.provider,e);if(t){if(t.outcome===`rejected`){D(Y,`${t.code}: ${t.detail}`);return}D(Y,null),D(q,!1)}}async function ve(){await Ke(i.route.provider),D(G,``)}var be=rr(),xe=L(be),Se=L(xe);Jt(Se,{get icon(){return v(C)},get letter(){return v(E)},get color(){return v(A)},get provider(){return i.route.provider},get label(){return v(T)},get catalogIcons(){return v(x)},get disabled(){return $.updating},onPick:e=>void Q({icon:e,iconSuppressed:!1}),onSuppress:()=>void Q({icon:void 0,iconSuppressed:!0}),onColor:e=>void Q({iconColor:e}),onLetter:e=>void Q({iconLetter:e})});var Ce=M(Se,2),we=L(Ce),Te=L(we),Ee=w(Te,!0),De=M(Te,2),Oe=w(De);t(we);var ke=M(we,2),Ae=L(ke),je=L(Ae);Qe(je,{class:`h-4 w-4`,"aria-hidden":`true`}),t(Ae);var Me=M(Ae,2);Le(Me,{size:`sm`,class:`relative h-9 px-3 text-xs after:absolute after:-top-1 after:-bottom-1 after:left-0 after:right-0 after:content-[''] disabled:opacity-100 disabled:bg-muted disabled:text-muted-foreground`,"data-route-save":`true`,get disabled(){return v(se)},onclick:()=>void ue(),children:(e,t)=>{j();var n=g();F(()=>a(n,v(X)?`Saved ✓`:`Save`)),m(e,n)},$$slots:{default:!0}}),t(ke),t(Ce),t(xe);var Ne=M(xe,2),Pe=M(L(Ne),2),Fe=L(Pe);Re(Fe,{class:`h-8 flex-1 font-mono text-xs`,"aria-label":`Base URL`,placeholder:`https://api.example.com/v1`,get disabled(){return $.updating},get value(){return v(R)},set value(e){D(R,e,!0)}}),t(Pe);var Ie=M(Pe,2),Be=M(L(Ie),2);e(Be,20,()=>oe,e=>e,(e,t)=>{var n=Qn(),r=w(n,!0),i={};F(()=>{a(r,t),i!==(i=t)&&(n.value=(n.__value=i)??``)}),m(e,n)}),t(Be),H(Be),t(Ie),t(Ne);var Ve=M(Ne,2),He=L(Ve),Ue=e=>{var t=$n(),n=w(t);F(()=>a(n,`Route “${i.route.provider??``}” added — paste its API key to finish connecting.`)),m(e,t)};d(He,e=>{v(q)&&e(Ue)});var We=M(He,2),Ge=L(We),qe=L(Ge);{let e=O(()=>v(K)?`text`:`password`);Re(qe,{class:`h-8 pr-9 font-mono text-xs`,get type(){return v(e)},autocomplete:`off`,"aria-label":`API key`,placeholder:`API key`,get disabled(){return $.updating},onblur:()=>void ge(),onkeydown:e=>{e.key===`Enter`&&(e.preventDefault(),ge())},get ref(){return v(J)},set ref(e){D(J,e,!0)},get value(){return v(G)},set value(e){D(G,e,!0)}})}var Ye=M(qe,2),Ze=L(Ye),$e=e=>{Mt(e,{class:`h-3.5 w-3.5`,"aria-hidden":`true`})},et=e=>{Xe(e,{class:`h-3.5 w-3.5`,"aria-hidden":`true`})};d(Ze,e=>{v(K)?e($e):e(et,-1)}),t(Ye),t(Ge);var tt=M(Ge,2),nt=e=>{Le(e,{size:`sm`,variant:`outline`,class:`relative h-9 px-2.5 text-xs after:absolute after:-top-1 after:-bottom-1 after:left-0 after:right-0 after:content-['']`,get disabled(){return $.updating},onclick:()=>void ve(),children:(e,t)=>{j();var n=g(`Clear`);m(e,n)},$$slots:{default:!0}})};d(tt,e=>{v(I)&&e(nt)}),t(We),j(2),t(Ve);var rt=M(Ve,2),it=L(rt),at=M(L(it),2),ot=L(at),st=e=>{var t=er();m(e,t)};d(ot,e=>{v(B).length===0&&e(st)});var ct=M(ot,2);Le(ct,{size:`sm`,variant:`ghost`,class:`h-6 px-2 text-[11px]`,get disabled(){return $.updating},onclick:()=>void he(),children:(e,t)=>{j();var n=g(`+ Add model`);m(e,n)},$$slots:{default:!0}}),t(at),t(it);var lt=M(it,2);e(lt,21,()=>v(B),k,(e,n,r)=>{var a=tr(),o=L(a);{let e=O(()=>v(R).trim()),t=O(()=>me(r)),a=O(()=>v(n).id===``);xn(o,{get model(){return v(n)},get candidates(){return v(S)},get routeModels(){return v(f)},get api(){return v(z)},get baseURL(){return v(e)},get provider(){return i.route.provider},get apiKeyConfigured(){return v(I)},get disabled(){return $.updating},get dirty(){return v(t)},get initialExpanded(){return v(a)},onchange:e=>de(r,e),onremove:()=>pe(r),onvalidity:e=>fe(r,e)})}t(a),ee(a,(e,t)=>re[t]=e,e=>re?.[e],()=>[r]),m(e,a)}),t(lt),t(rt);var ut=M(rt,2),dt=e=>{var t=nr(),n=w(t,!0);F(()=>a(n,v(Y))),m(e,t)};d(ut,e=>{v(Y)&&e(dt)}),t(be),F(e=>{N(Te,`title`,`${v(T)??``} (${i.route.provider??``}) — route name keys the credential mapping; duplicate this route to rename it.`),a(Ee,v(T)),N(De,`title`,i.route.baseURL),a(Oe,`${i.route.provider??``} · ${e??``} · ${i.route.models.length??``}
2
+ ${i.route.models.length===1?`model`:`models`}`),Ae.disabled=$.updating,Be.disabled=$.updating,N(Ye,`aria-label`,v(K)?`Hide API key`:`Show API key`),N(Ye,`aria-pressed`,v(K)),N(Ye,`title`,v(K)?`Hide API key`:`Show API key`),Ye.disabled=$.updating},[()=>i.route.baseURL.replace(/^https?:\/\//,``)]),o(`click`,Ae,()=>i.onremove?.()),y(Be,()=>v(z),e=>D(z,e)),o(`mousedown`,Ye,e=>e.preventDefault()),o(`click`,Ye,()=>D(K,!v(K))),m(n,be),h()}_([`click`,`mousedown`]);var ar=n(`<button type="button" class="mt-0.5 shrink-0 rounded bg-amber-500/15 px-1.5 py-0.5 text-[10px] text-amber-700 transition-colors hover:bg-amber-500/25">active outside tabs</button>`),or=n(`<p class="text-[10px] text-amber-700"> </p>`),sr=n(`<span class="absolute -right-1 -top-0.5 h-1 w-1 rounded-full bg-amber-500" title="API key missing"></span>`),cr=n(`<span class="relative inline-flex shrink-0"><span class="flex h-4 w-4 items-center justify-center rounded" aria-hidden="true"><img alt=""/></span> <!></span>`),lr=n(`<span class="relative inline-flex h-4 w-4 shrink-0 items-center justify-center rounded text-[8px] font-semibold text-white" aria-hidden="true"> <!></span>`),ur=n(`<span class="rounded bg-primary/10 px-1 py-px text-[9px] font-medium leading-tight text-primary" title="Active model's route">active</span>`),dr=n(`<button type="button" role="tab"><!> <span class="max-w-[120px] truncate"> </span> <!></button>`),fr=n(`<span class="pointer-events-none absolute inset-y-0 left-0 w-2 bg-gradient-to-r from-background to-transparent" aria-hidden="true"></span>`),pr=n(`<span class="pointer-events-none absolute inset-y-0 right-0 w-2 bg-gradient-to-l from-background to-transparent" aria-hidden="true"></span>`),mr=n(`<div class="flex flex-col items-center gap-2.5 rounded-md border border-dashed p-6 text-center"><p class="text-xs font-medium">Add your first model route</p> <p class="max-w-[320px] text-[10px] leading-snug text-muted-foreground">Pick a provider from the catalog (zcode Registry) with its models, or point at any
3
+ custom OpenAI/Anthropic-compatible endpoint.</p> <div class="mt-1 flex gap-2"><!> <!></div></div>`),hr=n(`<div class="flex items-stretch gap-1 border-b border-border"><div class="relative min-w-0 flex-1"><div class="tab-scroll flex h-9 items-stretch overflow-x-auto svelte-1bhnjqt" role="tablist" aria-label="Model routes"></div> <!> <!></div> <button type="button">+ New</button></div> <div class="min-h-0 flex-1 overflow-y-auto pr-0.5"><!></div>`,1),gr=n(`<div class="text-xs text-muted-foreground">Loading…</div>`),_r=n(`<div class="text-xs text-muted-foreground">Model settings unavailable</div>`),vr=n(`<div class="text-xs text-destructive" role="alert"> </div>`),yr=n(`<div class="flex h-full min-h-0 flex-col space-y-3"><div class="flex items-start justify-between gap-2"><div><h3 class="text-sm font-medium">Model</h3> <p class="mt-0.5 text-[11px] text-muted-foreground">Changes apply immediately to your agent sessions — no restart needed.</p></div> <!></div> <!> <!> <!> <!></div> <!>`,1);function br(n,i){r(i,!0);let s=P(null),u=P(!1),f=P(`pick`),_=P(null),y=P(0),b=P(null),x=P(null),C=P(!1),T=P(!1),E=P(null),k=P(null),A=P(null),I=P(!1),R=se(ne),z=O(()=>$.view),H=O(()=>v(z)?.settings.modelRoutes??[]),G=O(()=>v(H).find(e=>e.provider===v(s))),K=O(()=>v(z)!==null&&!v(H).some(e=>e.provider===v(z).settings.model.provider));te(()=>{v(u)||(v(s)!==null&&!v(H).some(e=>e.provider===v(s))&&D(s,null),v(s)===null&&v(H).length>0&&D(s,v(H)[0].provider,!0))}),te(()=>{v(k)===null&&v(A)===null&&!v(I)&&q()});async function q(){let e=R.issue();D(I,!0);try{let t=ae();if(!t){D(A,`daemon not connected`);return}let n=await t.agent.models.catalog({});if(!e.isCurrent())return;D(k,n,!0),D(A,null)}catch(t){if(!e.isCurrent())return;D(A,t instanceof Error?t.message:String(t),!0)}finally{e.isCurrent()&&D(I,!1)}}async function J(e){let t=await ze(e);return t?t.outcome===`rejected`?(D(E,`${t.code}: ${t.detail}`),!1):t.outcome===`error`?(D(E,t.message,!0),!1):(D(E,null),!0):!1}function Y(e,t=null){D(_,t,!0),D(f,e,!0),D(y,v(y)+1),D(u,!0),D(s,null)}async function X(e){D(u,!1),D(s,e,!0),D(b,e,!0),await p(),de[e]?.scrollIntoView({block:`nearest`,inline:`nearest`,behavior:`smooth`})}function re(){v(z)&&Y(`form`,{provider:v(z).settings.model.provider,models:[v(z).settings.model.model]})}function ie(e){e&&(D(x,e,!0),D(C,!0))}async function oe(){let e=v(x);if(e===null)return;D(T,!0);let t=await J({modelRoutes:v(H).filter(t=>t.provider!==e)});D(T,!1),t&&(D(C,!1),D(x,null))}let Z=P(null),ce=P(!1),ue=P(!1),de=V({});function fe(){let e=v(Z);if(!e){D(ce,!1),D(ue,!1);return}D(ce,e.scrollLeft>0),D(ue,e.scrollLeft+e.clientWidth<e.scrollWidth-1)}te(()=>{let e=v(Z);if(!e)return;let t=t=>{Math.abs(t.deltaY)<=Math.abs(t.deltaX)||e.scrollWidth<=e.clientWidth||(e.scrollLeft+=t.deltaY,t.preventDefault())};e.addEventListener(`wheel`,t,{passive:!1});let n=new ResizeObserver(()=>fe());return n.observe(e),fe(),()=>{e.removeEventListener(`wheel`,t),n.disconnect()}}),te(()=>{v(H).length,v(k),fe()});function pe(e,t){if(v(H).length!==0){if(e.key===`ArrowLeft`||e.key===`ArrowRight`){e.preventDefault();let n=(t+(e.key===`ArrowLeft`?-1:1)+v(H).length)%v(H).length;de[v(H)[n].provider]?.focus()}else e.key===`Delete`&&(e.preventDefault(),ie(v(H)[t]?.provider))}}var me=yr(),he=B(me),ge=L(he),ve=M(L(ge),2),be=e=>{var t=ar();F(()=>N(t,`title`,`The active model (${v(z).settings.model.provider??``}) rides an env-provided route with no tab — click to add it as a route.`)),o(`click`,t,re),m(e,t)};d(ve,e=>{v(K)&&v(z)&&e(be)}),t(ge);var xe=M(ge,2),Se=e=>{var t=or(),n=w(t);F(()=>a(n,`${v(z).settings.model.provider??``} · ${v(z).settings.model.model??``} (outside Routes) — env-provided; add
4
+ it as a route to manage it here.`)),m(e,t)};d(xe,e=>{v(K)&&v(z)&&e(Se)});var Ce=M(xe,2),we=n=>{var r=hr(),i=B(r),p=L(i),h=L(p);e(h,23,()=>v(H),e=>e.provider,(e,n,r)=>{let i=O(()=>v(k)?.providers.find(e=>e.provider===v(n).provider)),c=O(()=>_e(v(n),v(i))),l=O(()=>Tn(v(n),v(k))),f=O(()=>le(v(n),v(l))),p=O(()=>v(z).providers.some(e=>e.provider===v(n).provider&&e.configured)),h=O(()=>v(z).settings.model.provider===v(n).provider);var g=dr(),_=L(g),y=e=>{var r=cr(),i=L(r),a=w(i),o=M(i,2),s=e=>{var t=sr();m(e,t)};d(o,e=>{v(p)||e(s)}),t(r),F((e,t)=>{S(i,`background: color-mix(in srgb, ${e??``} 18%, transparent)`),N(a,`src`,v(c)),U(a,1,`h-3.5 w-3.5 object-contain ${t??``}`)},[()=>ye(v(n)),()=>Q(v(c))?``:`dark:invert`]),m(e,r)},b=e=>{var r=lr(),i=L(r),o=M(i),s=e=>{var t=sr();m(e,t)};d(o,e=>{v(p)||e(s)}),t(r),F(e=>{S(r,`background: ${e??``}`),a(i,`${v(f)??``} `)},[()=>ye(v(n))]),m(e,r)};d(_,e=>{v(c)?e(y):e(b,-1)});var x=M(_,2),C=w(x,!0),T=M(x,2),E=e=>{var t=ur();m(e,t)};d(T,e=>{v(h)&&e(E)}),t(g),ee(g,(e,t)=>de[t.provider]=e,e=>de?.[e.provider],()=>[v(n)]),F(()=>{N(g,`aria-selected`,!v(u)&&v(s)===v(n).provider),U(g,1,`relative flex h-9 shrink-0 items-center gap-1.5 px-2 text-xs font-medium transition-colors hover:bg-muted/50 ${!v(u)&&v(s)===v(n).provider?`text-foreground`:`text-muted-foreground hover:text-foreground`}`),N(g,`title`,`${v(l)??``} (${v(n).provider??``})${v(h)?` · active route`:``}`),a(C,v(l))}),o(`click`,g,()=>{D(s,v(n).provider,!0),D(u,!1)}),o(`keydown`,g,e=>pe(e,v(r))),m(e,g)}),t(h),ee(h,e=>D(Z,e),()=>v(Z));var x=M(h,2),C=e=>{var t=fr();m(e,t)};d(x,e=>{v(ce)&&e(C)});var T=M(x,2),E=e=>{var t=pr();m(e,t)};d(T,e=>{v(ue)&&e(E)}),t(p);var P=M(p,2);t(i);var R=M(i,2),te=L(R),V=e=>{var t=W(),n=B(t);l(n,()=>v(y),e=>{Zn(e,{get catalog(){return v(k)},get catalogError(){return v(A)},get catalogLoading(){return v(I)},get initialMode(){return v(f)},get seed(){return v(_)},onadded:X,onclose:()=>D(u,!1)})}),m(e,t)},K=e=>{var t=W(),n=B(t);l(n,()=>v(G).provider,e=>{{let t=O(()=>v(b)===v(G).provider);ir(e,{get route(){return v(G)},get catalog(){return v(k)},get autoFocusCredential(){return v(t)},onCredentialFocused:()=>D(b,null),onremove:()=>ie(v(G)?.provider)})}}),m(e,t)},q=e=>{var n=mr(),r=M(L(n),4),i=L(r);Le(i,{size:`sm`,variant:`outline`,class:`h-8 px-3 text-xs`,onclick:()=>Y(`pick`),children:(e,t)=>{j();var n=g(`Browse providers`);m(e,n)},$$slots:{default:!0}});var a=M(i,2);Le(a,{size:`sm`,class:`h-8 px-3 text-xs`,onclick:()=>Y(`form`),children:(e,t)=>{j();var n=g(`Custom endpoint`);m(e,n)},$$slots:{default:!0}}),t(r),t(n),m(e,n)};d(te,e=>{v(u)?e(V):v(G)?e(K,1):e(q,-1)}),t(R),F(()=>U(P,1,`h-7 shrink-0 self-center rounded px-2 text-[11px] font-medium transition-colors ${v(u)?`bg-primary/10 text-primary`:`text-muted-foreground hover:bg-muted hover:text-foreground`}`)),c(`scroll`,h,fe),o(`click`,P,()=>v(H).length===0?Y(`form`):Y(`pick`)),m(n,r)},Te=e=>{var t=gr();m(e,t)},Ee=e=>{var t=_r();m(e,t)};d(Ce,e=>{v(z)?e(we):$.loading?e(Te,1):e(Ee,-1)});var De=M(Ce,2),Oe=e=>{var t=vr(),n=w(t,!0);F(()=>a(n,$.error)),m(e,t)};d(De,e=>{$.error&&e(Oe)});var ke=M(De,2),Ae=e=>{var t=vr(),n=w(t,!0);F(()=>a(n,v(E))),m(e,t)};d(ke,e=>{v(E)&&e(Ae)}),t(he);var je=M(he,2);{let e=O(()=>v(x)??``);Ze(je,{title:`Remove route`,get description(){return`Remove the “${v(e)??``}” route? Its stored key is kept; if it held the active model, that reference is left outside Routes.`},get busy(){return v(T)},onConfirm:()=>void oe(),get open(){return v(C)},set open(e){D(C,e,!0)}})}m(n,me),h()}_([`click`,`keydown`]);var xr=n(`<p class="text-[10px] text-destructive" role="alert"> </p>`),Sr=n(`<p class="text-[10px] text-primary" role="status"> </p>`),Cr=n(`<div class="text-xs text-muted-foreground">Loading…</div>`),wr=n(`<div class="flex items-center justify-between gap-2 text-xs text-muted-foreground"><span class="text-destructive" role="alert"> </span> <!></div>`),Tr=n(`<p class="rounded-md border border-dashed border-border p-3 text-xs text-muted-foreground">No sessions yet. Sessions you start from the agent panel are listed here and can be reviewed
5
+ or removed individually.</p>`),Er=n(`<span class="shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground" title="Kernel/steward session without a product transcript — managed by the kernel, not deletable here">kernel-only</span>`),Dr=n(`<li class="flex items-center gap-2 rounded-md border border-border bg-background/60 px-2.5 py-1.5"><span class="min-w-0 flex-1 truncate text-xs"> </span> <span class="shrink-0 text-[10px] tabular-nums text-muted-foreground"> </span> <span class="shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground"> </span> <span> </span> <!> <!></li>`),Or=n(`<div class="space-y-1"><span class="text-[10px] font-medium text-muted-foreground"> </span> <ul class="space-y-1"></ul></div>`),kr=n(`<div class="text-xs text-destructive" role="alert"> </div>`),Ar=n(`<div class="space-y-4"><div><h3 class="text-sm font-medium">Sessions</h3> <p class="mt-0.5 text-[11px] text-muted-foreground">Manage agent panel sessions and transcript retention.</p></div> <section class="space-y-1.5" aria-label="Cleanup policy"><span class="text-[11px] font-medium text-muted-foreground">Cleanup policy</span> <div class="flex items-end gap-1.5"><label class="flex-1 space-y-1"><span class="block text-[10px] text-muted-foreground">Delete transcripts older than (days)</span> <!></label> <!></div> <p class="text-[10px] text-muted-foreground">Sessions older than this are cleaned automatically when the daemon starts (default 30 days).
6
+ Kernel-side session logs are not touched.</p> <!></section> <section class="space-y-1.5" aria-label="Session list"><div class="flex items-center justify-between"><span class="text-[11px] font-medium text-muted-foreground">Session list</span> <!></div> <!> <!></section> <!></div> <!>`,1);function jr(n,i){r(i,!0);let o=P(30),s=P(!1),c=P(!1),l=P(null),f=P(null),p=P(null),_=P(!1),y=P(!1),b=P(null),x=P(!1),S=!1;te(()=>{S||(S=!0,Ue())}),te(()=>{let e=$.view?.settings.session.sessionCleanupDays;e!==void 0&&!v(s)&&D(o,e,!0)});let C=O(()=>{let e=[...He.sessions].sort((e,t)=>e.createdAt<t.createdAt?1:-1),t=new Map;for(let n of e){let e=T(n.createdAt),r=t.get(e)??[];r.push(n),t.set(e,r)}return[...t.entries()]});function T(e){let t=new Date(e);return Number.isNaN(t.getTime())?`Unknown date`:`${String(t.getFullYear()).padStart(4,`0`)}-${String(t.getMonth()+1).padStart(2,`0`)}-${String(t.getDate()).padStart(2,`0`)}`}function E(e){let t=new Date(e);return Number.isNaN(t.getTime())?``:`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`}function k(e){return re.find(t=>t.id===e)?.label??e}function A(){let e=Number(v(o));return!Number.isInteger(e)||e<1||e>365?null:e}async function ee(){let e=A();if(e===null){D(l,`Retention must be a whole number of days between 1 and 365.`);return}D(l,null),D(c,!0);try{let t=await ze({session:{sessionCleanupDays:e}});if(!t)return;t.outcome===`rejected`?D(f,`${t.code}: ${t.detail}`):t.outcome===`error`?D(f,t.message,!0):(D(f,null),D(s,!1))}finally{D(c,!1)}}async function I(){let e=A();if(e===null){D(l,`Retention must be a whole number of days between 1 and 365.`);return}D(l,null),D(_,!0),D(p,null);try{let t=await We({beforeDays:e});if(!t)return;if(`error`in t){D(f,t.error,!0);return}D(f,null),D(p,`Deleted ${t.deleted} session${t.deleted===1?``:`s`} · kept ${t.kept}`)}finally{D(_,!1)}}function R(e){D(b,e,!0),D(y,!0)}async function z(){let e=v(b);if(e){D(x,!0);try{let t=await We({sessionIds:[e.sessionId]});if(!t)return;if(`error`in t){D(f,t.error,!0);return}D(f,null),t.deleted===0&&D(f,`Session ${e.sessionId} was not removed (running or already gone).`),D(y,!1)}finally{D(x,!1)}}}var V=Ar(),H=B(V),G=M(L(H),2),K=M(L(G),2),q=L(K),J=M(L(q),2);Re(J,{type:`number`,min:1,max:365,step:1,oninput:()=>D(s,!0),get disabled(){return v(c)},"aria-label":`Session retention days`,get value(){return v(o)},set value(e){D(o,e,!0)}}),t(q);var Y=M(q,2);{let e=O(()=>v(c)||!v(s)||A()===null);Le(Y,{size:`sm`,class:`h-8 px-2.5 text-xs`,get disabled(){return v(e)},onclick:()=>void ee(),children:(e,t)=>{j();var n=g();F(()=>a(n,v(c)?`Saving…`:`Save`)),m(e,n)},$$slots:{default:!0}})}t(K);var X=M(K,4),ne=e=>{var t=xr(),n=w(t,!0);F(()=>a(n,v(l))),m(e,t)};d(X,e=>{v(l)&&e(ne)}),t(G);var ie=M(G,2),ae=L(ie),oe=M(L(ae),2);{let e=O(()=>v(_)||A()===null);Le(oe,{size:`sm`,variant:`outline`,class:`h-7 px-2.5 text-xs`,get disabled(){return v(e)},onclick:()=>void I(),children:(e,t)=>{j();var n=g();F(()=>a(n,v(_)?`Cleaning…`:`Clean now`)),m(e,n)},$$slots:{default:!0}})}t(ae);var Z=M(ae,2),se=e=>{var t=Sr(),n=w(t,!0);F(()=>a(n,v(p))),m(e,t)};d(Z,e=>{v(p)&&e(se)});var ce=M(Z,2),Q=e=>{var t=Cr();m(e,t)},le=e=>{var n=wr(),r=L(n),i=w(r,!0),o=M(r,2);Le(o,{size:`sm`,class:`h-7 px-2.5 text-xs`,onclick:()=>void Ue(),children:(e,t)=>{j();var n=g(`Retry`);m(e,n)},$$slots:{default:!0}}),t(n),F(()=>a(i,He.error)),m(e,n)},ue=e=>{var t=Tr();m(e,t)},de=n=>{var r=W(),i=B(r);e(i,17,()=>v(C),([e,t])=>e,(n,r)=>{var i=O(()=>u(v(r),2));let o=()=>v(i)[0],s=()=>v(i)[1];var c=Or(),l=L(c),f=w(l,!0),p=M(l,2);e(p,21,s,e=>e.sessionId,(e,n)=>{var r=Dr(),i=L(r),o=w(i,!0),s=M(i,2),c=w(s,!0),l=M(s,2),u=w(l,!0),f=M(l,2),p=w(f,!0),h=M(f,2),g=e=>{var t=Er();m(e,t)};d(h,e=>{v(n).hasTranscript===!1&&e(g)});var _=M(h,2);{let e=O(()=>v(n).title||v(n).sessionId),t=O(()=>v(n).status===`running`?`Running sessions cannot be deleted`:v(n).hasTranscript===!1?`Kernel-only session — nothing to clean in the product layer`:`Delete session`),r=O(()=>v(n).status===`running`||v(n).hasTranscript===!1||v(x));Le(_,{size:`icon`,variant:`ghost`,class:`h-6 w-6 shrink-0`,get"aria-label"(){return`Delete session ${v(e)??``}`},get title(){return v(t)},get disabled(){return v(r)},onclick:()=>R(v(n)),children:(e,t)=>{Qe(e,{class:`h-3.5 w-3.5`})},$$slots:{default:!0}})}t(r),F((e,t)=>{N(i,`title`,v(n).title||v(n).sessionId),a(o,v(n).title||`Untitled session`),a(c,e),a(u,t),U(f,1,`shrink-0 text-[10px] ${v(n).status===`running`?`text-primary`:`text-muted-foreground`}`),a(p,v(n).status)},[()=>E(v(n).createdAt),()=>k(v(n).mode)]),m(e,r)}),t(p),t(c),F(()=>a(f,o())),m(n,c)}),m(n,r)};d(ce,e=>{He.loading&&!He.loaded?e(Q):He.error?e(le,1):v(C).length===0?e(ue,2):e(de,-1)}),t(ie);var fe=M(ie,2),pe=e=>{var t=kr(),n=w(t,!0);F(()=>a(n,v(f))),m(e,t)};d(fe,e=>{v(f)&&e(pe)}),t(H);var me=M(H,2);{let e=O(()=>v(b)?.title||(v(b)?.sessionId??``));Ze(me,{title:`Delete session`,get description(){return`Delete the transcript of “${v(e)??``}”? This cannot be undone.`},get busy(){return v(x)},onConfirm:()=>void z(),get open(){return v(y)},set open(e){D(y,e,!0)}})}m(n,V),h()}var Mr=new Set([`$$slots`,`$$events`,`$$legacy`]);function Nr(e,t){let n=I(t,Mr),r=[[`path`,{d:`M14 17H5`}],[`path`,{d:`M19 7h-9`}],[`circle`,{cx:`17`,cy:`17`,r:`3`}],[`circle`,{cx:`7`,cy:`7`,r:`3`}]];K(e,z({name:`settings-2`},()=>n,{get iconNode(){return r}}))}var Pr=new Set([`$$slots`,`$$events`,`$$legacy`]);function Fr(e,t){let n=I(t,Pr),r=[[`path`,{d:`M12 20v2`}],[`path`,{d:`M12 2v2`}],[`path`,{d:`M17 20v2`}],[`path`,{d:`M17 2v2`}],[`path`,{d:`M2 12h2`}],[`path`,{d:`M2 17h2`}],[`path`,{d:`M2 7h2`}],[`path`,{d:`M20 12h2`}],[`path`,{d:`M20 17h2`}],[`path`,{d:`M20 7h2`}],[`path`,{d:`M7 20v2`}],[`path`,{d:`M7 2v2`}],[`rect`,{x:`4`,y:`4`,width:`16`,height:`16`,rx:`2`}],[`rect`,{x:`8`,y:`8`,width:`8`,height:`8`,rx:`1`}]];K(e,z({name:`cpu`},()=>n,{get iconNode(){return r}}))}var Ir=n(`<button><!> </button>`),Lr=n(`<div class="flex h-full min-h-0 flex-col"><header class="flex shrink-0 items-start justify-between gap-3 border-b border-border px-5 pb-4 pt-5"><div><h1 class="text-lg font-semibold">Settings</h1> <p class="mt-0.5 text-xs text-muted-foreground">General, model routes, agent defaults, and session retention.</p></div></header> <div class="grid min-h-0 flex-1 grid-cols-[176px_1fr] max-[720px]:grid-cols-1 max-[720px]:grid-rows-[auto_minmax(0,1fr)]"><div class="flex min-h-0 flex-col border-r border-border bg-muted/30 max-[720px]:min-h-0 max-[720px]:border-r-0 max-[720px]:border-b"><nav class="no-scrollbar flex flex-col gap-0.5 p-2 max-[720px]:flex-row max-[720px]:gap-1 max-[720px]:overflow-x-auto max-[720px]:[mask-image:linear-gradient(to_right,black_calc(100%-14px),transparent)]" aria-label="Settings sections"></nav></div> <div><!></div></div></div>`);function Rr(n,s){r(s,!0);let c=[{id:`general`,label:`General`,icon:Nr},{id:`model`,label:`Model`,icon:Fr},{id:`agent`,label:`Agent`,icon:xe},{id:`sessions`,label:`Sessions`,icon:Ye}],l=q(),u=O(()=>{let e=l?.()?.section;return fe.includes(e)?e:`general`});te(()=>{Ge()});function f(e){G(`/settings/${e}`)}var p=Lr(),g=M(L(p),2),_=L(g),y=L(_);e(y,21,()=>c,e=>e.id,(e,n)=>{let r=O(()=>v(n).icon);var s=Ir(),c=L(s);i(c,()=>v(r),(e,t)=>{t(e,{class:`h-3.5 w-3.5`})});var l=M(c);t(s),F(()=>{U(s,1,`flex h-8 items-center gap-2 rounded-md px-2 text-xs transition-colors max-[720px]:h-11 max-[720px]:shrink-0 max-[720px]:px-3 ${v(u)===v(n).id?`bg-primary/10 text-primary`:`text-muted-foreground hover:bg-muted hover:text-foreground`}`),N(s,`aria-label`,v(n).label),N(s,`aria-current`,v(u)===v(n).id?`true`:void 0),a(l,` ${v(n).label??``}`)}),o(`click`,s,()=>f(v(n).id)),m(e,s)}),t(y),t(_);var b=M(_,2),x=L(b),S=e=>{At(e,{})},C=e=>{br(e,{})},w=e=>{jr(e,{})},T=e=>{bt(e,{})};d(x,e=>{v(u)===`general`?e(S):v(u)===`model`?e(C,1):v(u)===`sessions`?e(w,2):e(T,-1)}),t(b),t(g),t(p),F(()=>U(b,1,`min-w-0 p-4 ${v(u)===`model`?`overflow-hidden`:`overflow-y-auto`}`)),m(n,p),h()}_([`click`]);export{Rr as default};
@@ -1 +1 @@
1
- import{A as e,At as t,B as n,Ct as r,F as i,G as a,N as o,R as s,S as c,St as l,W as u,X as d,ct as f,d as p,ft as m,gt as h,kt as g,lt as _,m as v,mt as y,nt as b,o as x,ot as S,p as C,rt as w,s as T,st as E,x as D}from"./CmCJ0SKP.js";import{t as O}from"./B0stYqX9.js";import"./xihTtKlq.js";import"./oJ4aK8PG.js";import{t as k}from"./BkEnd9_Z.js";import{i as ee}from"./D7DTLcps.js";import{n as A}from"./1aUphu7Y.js";import{i as j}from"./DnPeA-9c.js";import{n as M,t as N}from"./hIGXQE4_.js";import{a as P,i as F,n as I,o as te,s as L,t as R}from"./Du6-3Tbt.js";var z=new Set([`$$slots`,`$$events`,`$$legacy`]);function B(e,t){let n=x(t,z),r=[[`path`,{d:`M15 3h6v6`}],[`path`,{d:`M10 14 21 3`}],[`path`,{d:`M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6`}]];k(e,T({name:`external-link`},()=>n,{get iconNode(){return r}}))}var V=n(`<span class="text-amber-600 dark:text-amber-400">stale · rescan for latest</span>`),H=n(`<span> </span> <span class="font-mono"> </span> <!>`,1),U=n(`<span class="italic">Not scanned yet</span>`),W=n(`<a target="_blank" rel="noreferrer noopener" class="inline-flex h-7 items-center gap-1 rounded-md border border-border px-2 text-[11px] text-muted-foreground transition-colors hover:bg-muted/50"><!> Home</a>`),G=n(`<button type="button" class="ml-auto inline-flex h-7 items-center gap-1 rounded-md px-2 text-[11px] text-muted-foreground transition-colors hover:bg-destructive/10 hover:text-destructive"><!></button>`),ne=n(`<article class="flex h-full flex-col gap-2 rounded-lg border border-border bg-card p-3 text-left transition-colors hover:border-primary/40"><header class="flex items-start gap-2"><div class="min-w-0 flex-1"><div class="flex items-center gap-1.5"><h3 class="truncate text-sm font-medium text-foreground"> </h3> <span> </span></div> <p class="mt-0.5 line-clamp-2 text-[11px] leading-4 text-muted-foreground"> </p></div></header> <dl class="mt-auto flex flex-wrap items-center gap-x-3 gap-y-0.5 text-[11px] text-muted-foreground"><!></dl> <footer class="flex shrink-0 items-center gap-2"><button type="button" class="inline-flex h-7 items-center rounded-md bg-primary px-2.5 text-[11px] font-medium text-primary-foreground transition-colors hover:bg-primary/90">Scan</button> <!> <!></footer></article>`);function re(e,n){r(n,!0);var u=ne(),d=S(u),p=S(d),m=S(p),h=S(m),y=f(h,!0),x=_(h,2),C=f(x,!0);t(m);var w=_(m,2),T=f(w,!0);t(p),t(d);var O=_(d,2),k=S(O),ee=e=>{var t=H(),r=E(t),a=f(r),c=_(r,2),l=f(c,!0),u=_(c,2),d=e=>{var t=V();s(e,t)};o(u,e=>{n.stale&&e(d)}),b(()=>{i(a,`${n.scanSummary.skillCount??``} skills`),i(l,n.scanSummary.commitPrefix)}),s(e,t)},A=e=>{var t=U();s(e,t)};o(k,e=>{n.scanSummary?e(ee):e(A,-1)}),t(O);var M=_(O,2),P=S(M),F=_(P,2),I=e=>{var r=W();B(S(r),{class:`h-3 w-3`}),g(),t(r),b(()=>{v(r,`href`,n.homepage),v(r,`aria-label`,`Open ${n.label} homepage`)}),s(e,r)};o(F,e=>{n.homepage&&e(I)});var te=_(F,2),L=e=>{var r=G(),i=S(r);N(i,{class:`h-3.5 w-3.5`}),t(r),b(()=>v(r,`aria-label`,`Remove ${n.label}`)),a(`click`,r,function(...e){n.onremove?.apply(this,e)}),s(e,r)};o(te,e=>{!n.builtIn&&n.onremove&&e(L)}),t(M),t(u),b(e=>{i(y,n.label),D(x,1,e),i(C,n.builtIn?`Built-in`:`Custom`),i(T,n.description||n.gitUrl)},[()=>c(j(`shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium`,n.builtIn?`bg-primary/10 text-primary`:`bg-muted text-muted-foreground`))]),a(`click`,P,function(...e){n.onscan?.apply(this,e)}),s(e,u),l()}u([`click`]);var ie=n(`<p class="py-8 text-center text-xs text-muted-foreground">Loading sources…</p>`),ae=n(`<p class="py-8 text-center text-xs text-destructive"> </p>`),oe=n(`<p class="py-8 text-center text-xs text-muted-foreground"> </p>`),se=n(`<div class="grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3"></div>`),ce=n(`<li><button type="button" class="flex w-full items-center justify-between rounded px-2 py-1 text-left text-xs transition-colors hover:bg-muted/60"><span class="truncate font-medium text-foreground"> </span> <span class="ml-2 shrink-0 text-muted-foreground"> </span></button></li>`),le=n(`<section class="rounded-lg border border-border bg-muted/20 p-3"><h2 class="text-xs font-medium text-muted-foreground">Recent scans</h2> <ul class="mt-2 space-y-1"></ul></section>`),ue=n(`<p class="text-xs text-destructive"> </p>`),de=n(`<div class="fixed inset-0 z-50 flex items-center justify-center bg-black/40 p-4"><div class="w-full max-w-md rounded-lg border border-border bg-background p-4 shadow-lg"><h2 class="text-sm font-semibold">Add custom source</h2> <p class="mt-0.5 text-xs text-muted-foreground">Paste an <code class="font-mono">https</code> Git URL. It persists across restarts.</p> <div class="mt-3 space-y-2"><label class="block text-xs"><span class="text-muted-foreground">Label</span> <input class="mt-1 h-8 w-full rounded-md border border-border bg-background px-2 text-sm" placeholder="My skills repo"/></label> <label class="block text-xs"><span class="text-muted-foreground">Git URL (https only)</span> <input class="mt-1 h-8 w-full rounded-md border border-border bg-background px-2 font-mono text-xs" placeholder="https://github.com/me/skills.git"/></label> <label class="block text-xs"><span class="text-muted-foreground">Description (optional)</span> <input class="mt-1 h-8 w-full rounded-md border border-border bg-background px-2 text-sm" placeholder="What kind of skills?"/></label> <!></div> <div class="mt-4 flex justify-end gap-2"><button type="button" class="h-8 rounded-md border border-border px-3 text-xs hover:bg-muted/50">Cancel</button> <button type="button" class="h-8 rounded-md bg-primary px-3 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50"> </button></div></div></div>`),fe=n(`<div class="flex h-full flex-col overflow-y-auto p-5"><header class="flex shrink-0 items-center gap-3 border-b border-border pb-4"><div class="min-w-0 flex-1"><h1 class="text-lg font-semibold">Discover skills</h1> <p class="mt-0.5 text-xs text-muted-foreground">Browse curated and custom skill repositories, then scan to install.</p></div> <button type="button" class="inline-flex h-8 shrink-0 items-center rounded-md border border-border px-3 text-xs font-medium transition-colors hover:bg-muted/50">Add source</button></header> <div class="mx-auto mt-4 w-full max-w-4xl flex-1 space-y-4"><div class="flex items-center gap-2"><input type="search" placeholder="Filter sources by name or description…" class="h-9 w-full rounded-md border border-border bg-background px-3 text-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" aria-label="Filter sources"/></div> <!> <!></div></div> <!> <!>`,1);function K(n,c){r(c,!0);let u=ee(),g=h(()=>u?.()?.q?.trim()??``),v=y(``);w(()=>{m(v,d(g),!0)}),w(()=>{P()});let x=h(()=>[...L.builtIn.map(e=>({id:e.id,label:e.label,description:e.description,gitUrl:e.gitUrl,homepage:e.homepage,builtIn:!0})),...L.user.map(e=>({id:e.id,label:e.label,description:e.description,gitUrl:e.gitUrl,homepage:void 0,builtIn:!1}))]),T=h(()=>{let e=d(g).toLowerCase();return e?d(x).filter(t=>t.label.toLowerCase().includes(e)||t.description.toLowerCase().includes(e)):d(x)}),D=h(()=>{let e=[];for(let t of d(x)){let n=R(t.id);n&&e.push({id:t.id,label:t.label,summary:n})}return e.sort((e,t)=>(t.summary?.scannedAt??0)-(e.summary?.scannedAt??0)),e.slice(0,5)}),k=y(!1),j=y(``),N=y(``),z=y(``),B=y(null),V=y(!1);function H(e){let t=e.trim(),n=`/repository${t?`?q=${encodeURIComponent(t)}`:``}`;O(n,{replaceState:!0})}function U(){let e=d(v).trim(),t=e?`?q=${encodeURIComponent(e)}`:``;O(`/repository${t}`)}function W(e){O(`/repository/scan/${encodeURIComponent(e)}`)}function G(){m(k,!0),m(j,``),m(N,``),m(z,``),m(B,null)}async function ne(){let e=d(j).trim(),t=d(N).trim();if(!e||!t){m(B,`Label and Git URL are required.`);return}m(V,!0),m(B,null);try{await F({label:e,gitUrl:t,description:d(z).trim()||void 0})&&m(k,!1)}catch(e){m(B,e instanceof Error?e.message:String(e),!0)}finally{m(V,!1)}}let K=y(null),q=y(!1),J=y(!1);function pe(e,t){m(K,{id:e,label:t},!0),m(q,!0)}w(()=>{d(q)||m(K,null)});async function me(){let e=d(K);if(e){m(J,!0);try{await te(e.id)&&(m(q,!1),A(`Removed source ${e.label}.`))}catch(e){A(e instanceof Error?e.message:String(e))}finally{m(J,!1)}}}var Y=fe(),X=E(Y),Z=S(X),he=_(S(Z),2);t(Z);var ge=_(Z,2),Q=S(ge),$=S(Q);C($),t(Q);var _e=_(Q,2),ve=e=>{var t=ie();s(e,t)},ye=e=>{var t=ae(),n=f(t,!0);b(()=>i(n,L.error)),s(e,t)},be=e=>{var t=oe(),n=f(t);b(()=>i(n,`No sources match “${d(g)??``}”.`)),s(e,t)},xe=n=>{var r=se();e(r,21,()=>d(T),e=>e.id,(e,t)=>{{let n=h(()=>R(d(t).id)),r=h(()=>I(R(d(t).id))),i=h(()=>d(t).builtIn?void 0:()=>pe(d(t).id,d(t).label));re(e,{get label(){return d(t).label},get description(){return d(t).description},get gitUrl(){return d(t).gitUrl},get homepage(){return d(t).homepage},get builtIn(){return d(t).builtIn},get scanSummary(){return d(n)},get stale(){return d(r)},onscan:()=>W(d(t).id),get onremove(){return d(i)}})}}),t(r),s(n,r)};o(_e,e=>{L.loading?e(ve):L.error?e(ye,1):d(T).length===0?e(be,2):e(xe,-1)});var Se=_(_e,2),Ce=n=>{var r=le(),o=_(S(r),2);e(o,21,()=>d(D),e=>e.id,(e,n)=>{var r=ce(),o=S(r),c=S(o),l=f(c,!0),u=_(c,2),p=f(u);t(o),t(r),b(()=>{i(l,d(n).label),i(p,`${d(n).summary?.skillCount??0??``} skills`)}),a(`click`,o,()=>W(d(n).id)),s(e,r)}),t(o),t(r),s(n,r)};o(Se,e=>{d(D).length>0&&e(Ce)}),t(ge),t(X);var we=_(X,2),Te=e=>{var n=de(),r=S(n),c=_(S(r),4),l=S(c),u=_(S(l),2);C(u),t(l);var h=_(l,2),g=_(S(h),2);C(g),t(h);var v=_(h,2),y=_(S(v),2);C(y),t(v);var x=_(v,2),w=e=>{var t=ue(),n=f(t,!0);b(()=>i(n,d(B))),s(e,t)};o(x,e=>{d(B)&&e(w)}),t(c);var T=_(c,2),E=S(T),D=_(E,2),O=f(D,!0);t(T),t(r),t(n),b(()=>{D.disabled=d(V),i(O,d(V)?`Adding…`:`Add`)}),p(u,()=>d(j),e=>m(j,e)),p(g,()=>d(N),e=>m(N,e)),p(y,()=>d(z),e=>m(z,e)),a(`click`,E,()=>m(k,!1)),a(`click`,D,ne),s(e,n)};o(we,e=>{d(k)&&e(Te)});var Ee=_(we,2);{let e=h(()=>d(K)?`Remove ${d(K).label} from your Discover feed? Installed skills stay on disk.`:``);M(Ee,{title:`Remove custom source`,get description(){return d(e)},confirmLabel:`Remove`,get busy(){return d(J)},onConfirm:()=>void me(),get open(){return d(q)},set open(e){m(q,e,!0)}})}a(`click`,he,G),a(`input`,$,()=>H(d(v))),a(`keydown`,$,e=>{e.key===`Enter`&&U()}),p($,()=>d(v),e=>m(v,e)),s(n,Y),l()}u([`click`,`input`,`keydown`]);export{K as default};
1
+ import{A as e,At as t,B as n,Ct as r,F as i,G as a,N as o,R as s,S as c,St as l,W as u,X as d,ct as f,d as p,ft as m,gt as h,kt as g,lt as _,m as v,mt as y,nt as b,o as x,ot as S,p as C,rt as w,s as T,st as E,x as D}from"./CmCJ0SKP.js";import{t as O}from"./DjZ7hdjX.js";import"./xihTtKlq.js";import"./eFUKcYMv.js";import{t as k}from"./BkEnd9_Z.js";import{o as ee}from"./DF_TIB7n.js";import{n as A}from"./1aUphu7Y.js";import{i as j}from"./DnPeA-9c.js";import{n as M,t as N}from"./Bynub5xW.js";import{a as P,i as F,n as I,o as te,s as L,t as R}from"./DTzqg7c9.js";var z=new Set([`$$slots`,`$$events`,`$$legacy`]);function B(e,t){let n=x(t,z),r=[[`path`,{d:`M15 3h6v6`}],[`path`,{d:`M10 14 21 3`}],[`path`,{d:`M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6`}]];k(e,T({name:`external-link`},()=>n,{get iconNode(){return r}}))}var V=n(`<span class="text-amber-600 dark:text-amber-400">stale · rescan for latest</span>`),H=n(`<span> </span> <span class="font-mono"> </span> <!>`,1),U=n(`<span class="italic">Not scanned yet</span>`),W=n(`<a target="_blank" rel="noreferrer noopener" class="inline-flex h-7 items-center gap-1 rounded-md border border-border px-2 text-[11px] text-muted-foreground transition-colors hover:bg-muted/50"><!> Home</a>`),G=n(`<button type="button" class="ml-auto inline-flex h-7 items-center gap-1 rounded-md px-2 text-[11px] text-muted-foreground transition-colors hover:bg-destructive/10 hover:text-destructive"><!></button>`),ne=n(`<article class="flex h-full flex-col gap-2 rounded-lg border border-border bg-card p-3 text-left transition-colors hover:border-primary/40"><header class="flex items-start gap-2"><div class="min-w-0 flex-1"><div class="flex items-center gap-1.5"><h3 class="truncate text-sm font-medium text-foreground"> </h3> <span> </span></div> <p class="mt-0.5 line-clamp-2 text-[11px] leading-4 text-muted-foreground"> </p></div></header> <dl class="mt-auto flex flex-wrap items-center gap-x-3 gap-y-0.5 text-[11px] text-muted-foreground"><!></dl> <footer class="flex shrink-0 items-center gap-2"><button type="button" class="inline-flex h-7 items-center rounded-md bg-primary px-2.5 text-[11px] font-medium text-primary-foreground transition-colors hover:bg-primary/90">Scan</button> <!> <!></footer></article>`);function re(e,n){r(n,!0);var u=ne(),d=S(u),p=S(d),m=S(p),h=S(m),y=f(h,!0),x=_(h,2),C=f(x,!0);t(m);var w=_(m,2),T=f(w,!0);t(p),t(d);var O=_(d,2),k=S(O),ee=e=>{var t=H(),r=E(t),a=f(r),c=_(r,2),l=f(c,!0),u=_(c,2),d=e=>{var t=V();s(e,t)};o(u,e=>{n.stale&&e(d)}),b(()=>{i(a,`${n.scanSummary.skillCount??``} skills`),i(l,n.scanSummary.commitPrefix)}),s(e,t)},A=e=>{var t=U();s(e,t)};o(k,e=>{n.scanSummary?e(ee):e(A,-1)}),t(O);var M=_(O,2),P=S(M),F=_(P,2),I=e=>{var r=W();B(S(r),{class:`h-3 w-3`}),g(),t(r),b(()=>{v(r,`href`,n.homepage),v(r,`aria-label`,`Open ${n.label} homepage`)}),s(e,r)};o(F,e=>{n.homepage&&e(I)});var te=_(F,2),L=e=>{var r=G(),i=S(r);N(i,{class:`h-3.5 w-3.5`}),t(r),b(()=>v(r,`aria-label`,`Remove ${n.label}`)),a(`click`,r,function(...e){n.onremove?.apply(this,e)}),s(e,r)};o(te,e=>{!n.builtIn&&n.onremove&&e(L)}),t(M),t(u),b(e=>{i(y,n.label),D(x,1,e),i(C,n.builtIn?`Built-in`:`Custom`),i(T,n.description||n.gitUrl)},[()=>c(j(`shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium`,n.builtIn?`bg-primary/10 text-primary`:`bg-muted text-muted-foreground`))]),a(`click`,P,function(...e){n.onscan?.apply(this,e)}),s(e,u),l()}u([`click`]);var ie=n(`<p class="py-8 text-center text-xs text-muted-foreground">Loading sources…</p>`),ae=n(`<p class="py-8 text-center text-xs text-destructive"> </p>`),oe=n(`<p class="py-8 text-center text-xs text-muted-foreground"> </p>`),se=n(`<div class="grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3"></div>`),ce=n(`<li><button type="button" class="flex w-full items-center justify-between rounded px-2 py-1 text-left text-xs transition-colors hover:bg-muted/60"><span class="truncate font-medium text-foreground"> </span> <span class="ml-2 shrink-0 text-muted-foreground"> </span></button></li>`),le=n(`<section class="rounded-lg border border-border bg-muted/20 p-3"><h2 class="text-xs font-medium text-muted-foreground">Recent scans</h2> <ul class="mt-2 space-y-1"></ul></section>`),ue=n(`<p class="text-xs text-destructive"> </p>`),de=n(`<div class="fixed inset-0 z-50 flex items-center justify-center bg-black/40 p-4"><div class="w-full max-w-md rounded-lg border border-border bg-background p-4 shadow-lg"><h2 class="text-sm font-semibold">Add custom source</h2> <p class="mt-0.5 text-xs text-muted-foreground">Paste an <code class="font-mono">https</code> Git URL. It persists across restarts.</p> <div class="mt-3 space-y-2"><label class="block text-xs"><span class="text-muted-foreground">Label</span> <input class="mt-1 h-8 w-full rounded-md border border-border bg-background px-2 text-sm" placeholder="My skills repo"/></label> <label class="block text-xs"><span class="text-muted-foreground">Git URL (https only)</span> <input class="mt-1 h-8 w-full rounded-md border border-border bg-background px-2 font-mono text-xs" placeholder="https://github.com/me/skills.git"/></label> <label class="block text-xs"><span class="text-muted-foreground">Description (optional)</span> <input class="mt-1 h-8 w-full rounded-md border border-border bg-background px-2 text-sm" placeholder="What kind of skills?"/></label> <!></div> <div class="mt-4 flex justify-end gap-2"><button type="button" class="h-8 rounded-md border border-border px-3 text-xs hover:bg-muted/50">Cancel</button> <button type="button" class="h-8 rounded-md bg-primary px-3 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50"> </button></div></div></div>`),fe=n(`<div class="flex h-full flex-col overflow-y-auto p-5"><header class="flex shrink-0 items-center gap-3 border-b border-border pb-4"><div class="min-w-0 flex-1"><h1 class="text-lg font-semibold">Discover skills</h1> <p class="mt-0.5 text-xs text-muted-foreground">Browse curated and custom skill repositories, then scan to install.</p></div> <button type="button" class="inline-flex h-8 shrink-0 items-center rounded-md border border-border px-3 text-xs font-medium transition-colors hover:bg-muted/50">Add source</button></header> <div class="mx-auto mt-4 w-full max-w-4xl flex-1 space-y-4"><div class="flex items-center gap-2"><input type="search" placeholder="Filter sources by name or description…" class="h-9 w-full rounded-md border border-border bg-background px-3 text-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" aria-label="Filter sources"/></div> <!> <!></div></div> <!> <!>`,1);function K(n,c){r(c,!0);let u=ee(),g=h(()=>u?.()?.q?.trim()??``),v=y(``);w(()=>{m(v,d(g),!0)}),w(()=>{P()});let x=h(()=>[...L.builtIn.map(e=>({id:e.id,label:e.label,description:e.description,gitUrl:e.gitUrl,homepage:e.homepage,builtIn:!0})),...L.user.map(e=>({id:e.id,label:e.label,description:e.description,gitUrl:e.gitUrl,homepage:void 0,builtIn:!1}))]),T=h(()=>{let e=d(g).toLowerCase();return e?d(x).filter(t=>t.label.toLowerCase().includes(e)||t.description.toLowerCase().includes(e)):d(x)}),D=h(()=>{let e=[];for(let t of d(x)){let n=R(t.id);n&&e.push({id:t.id,label:t.label,summary:n})}return e.sort((e,t)=>(t.summary?.scannedAt??0)-(e.summary?.scannedAt??0)),e.slice(0,5)}),k=y(!1),j=y(``),N=y(``),z=y(``),B=y(null),V=y(!1);function H(e){let t=e.trim(),n=`/repository${t?`?q=${encodeURIComponent(t)}`:``}`;O(n,{replaceState:!0})}function U(){let e=d(v).trim(),t=e?`?q=${encodeURIComponent(e)}`:``;O(`/repository${t}`)}function W(e){O(`/repository/scan/${encodeURIComponent(e)}`)}function G(){m(k,!0),m(j,``),m(N,``),m(z,``),m(B,null)}async function ne(){let e=d(j).trim(),t=d(N).trim();if(!e||!t){m(B,`Label and Git URL are required.`);return}m(V,!0),m(B,null);try{await F({label:e,gitUrl:t,description:d(z).trim()||void 0})&&m(k,!1)}catch(e){m(B,e instanceof Error?e.message:String(e),!0)}finally{m(V,!1)}}let K=y(null),q=y(!1),J=y(!1);function pe(e,t){m(K,{id:e,label:t},!0),m(q,!0)}w(()=>{d(q)||m(K,null)});async function me(){let e=d(K);if(e){m(J,!0);try{await te(e.id)&&(m(q,!1),A(`Removed source ${e.label}.`))}catch(e){A(e instanceof Error?e.message:String(e))}finally{m(J,!1)}}}var Y=fe(),X=E(Y),Z=S(X),he=_(S(Z),2);t(Z);var ge=_(Z,2),Q=S(ge),$=S(Q);C($),t(Q);var _e=_(Q,2),ve=e=>{var t=ie();s(e,t)},ye=e=>{var t=ae(),n=f(t,!0);b(()=>i(n,L.error)),s(e,t)},be=e=>{var t=oe(),n=f(t);b(()=>i(n,`No sources match “${d(g)??``}”.`)),s(e,t)},xe=n=>{var r=se();e(r,21,()=>d(T),e=>e.id,(e,t)=>{{let n=h(()=>R(d(t).id)),r=h(()=>I(R(d(t).id))),i=h(()=>d(t).builtIn?void 0:()=>pe(d(t).id,d(t).label));re(e,{get label(){return d(t).label},get description(){return d(t).description},get gitUrl(){return d(t).gitUrl},get homepage(){return d(t).homepage},get builtIn(){return d(t).builtIn},get scanSummary(){return d(n)},get stale(){return d(r)},onscan:()=>W(d(t).id),get onremove(){return d(i)}})}}),t(r),s(n,r)};o(_e,e=>{L.loading?e(ve):L.error?e(ye,1):d(T).length===0?e(be,2):e(xe,-1)});var Se=_(_e,2),Ce=n=>{var r=le(),o=_(S(r),2);e(o,21,()=>d(D),e=>e.id,(e,n)=>{var r=ce(),o=S(r),c=S(o),l=f(c,!0),u=_(c,2),p=f(u);t(o),t(r),b(()=>{i(l,d(n).label),i(p,`${d(n).summary?.skillCount??0??``} skills`)}),a(`click`,o,()=>W(d(n).id)),s(e,r)}),t(o),t(r),s(n,r)};o(Se,e=>{d(D).length>0&&e(Ce)}),t(ge),t(X);var we=_(X,2),Te=e=>{var n=de(),r=S(n),c=_(S(r),4),l=S(c),u=_(S(l),2);C(u),t(l);var h=_(l,2),g=_(S(h),2);C(g),t(h);var v=_(h,2),y=_(S(v),2);C(y),t(v);var x=_(v,2),w=e=>{var t=ue(),n=f(t,!0);b(()=>i(n,d(B))),s(e,t)};o(x,e=>{d(B)&&e(w)}),t(c);var T=_(c,2),E=S(T),D=_(E,2),O=f(D,!0);t(T),t(r),t(n),b(()=>{D.disabled=d(V),i(O,d(V)?`Adding…`:`Add`)}),p(u,()=>d(j),e=>m(j,e)),p(g,()=>d(N),e=>m(N,e)),p(y,()=>d(z),e=>m(z,e)),a(`click`,E,()=>m(k,!1)),a(`click`,D,ne),s(e,n)};o(we,e=>{d(k)&&e(Te)});var Ee=_(we,2);{let e=h(()=>d(K)?`Remove ${d(K).label} from your Discover feed? Installed skills stay on disk.`:``);M(Ee,{title:`Remove custom source`,get description(){return d(e)},confirmLabel:`Remove`,get busy(){return d(J)},onConfirm:()=>void me(),get open(){return d(q)},set open(e){m(q,e,!0)}})}a(`click`,he,G),a(`input`,$,()=>H(d(v))),a(`keydown`,$,e=>{e.key===`Enter`&&U()}),p($,()=>d(v),e=>m(v,e)),s(n,Y),l()}u([`click`,`input`,`keydown`]);export{K as default};
@@ -0,0 +1,8 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./VnziGBZO.js","./CYhuNS_d.js","./DSbDiml2.js"])))=>i.map(i=>d[i]);
2
+ import{A as e,At as t,B as n,Ct as r,D as i,F as a,G as o,Mt as s,N as c,R as l,St as u,U as d,W as f,X as p,_t as m,a as h,bt as g,ct as _,d as v,ft as y,gt as b,j as x,k as S,kt as C,l as w,lt as T,m as E,mt as D,nt as O,o as k,ot as A,r as j,rt as M,s as N,st as P,ut as F,wt as I,x as L,xt as R,z}from"./CmCJ0SKP.js";import{t as B}from"./DjZ7hdjX.js";import{t as V}from"./HclGiUj8.js";import"./xihTtKlq.js";import{t as H}from"./BDMeqoYB.js";import"./eFUKcYMv.js";import{t as U}from"./BkEnd9_Z.js";import{a as ee,o as W}from"./DF_TIB7n.js";import{_ as te,a as G,b as K,l as ne,s as re,t as ie,x as ae}from"./pd7EK5wP.js";import{g as oe,h as se,m as ce}from"./B8aGNSaH.js";import{n as q}from"./1aUphu7Y.js";import{n as J,t as Y}from"./DnPeA-9c.js";import{t as le}from"./DOjT7y5f.js";import{h as ue}from"./DvWG9eQi.js";import{n as de,t as fe}from"./ChvFFUWR.js";import{t as pe}from"./C67g-p2T.js";import{t as me}from"./BYNWtKcf.js";import{n as he,t as ge}from"./DovL68qD.js";import{n as _e,t as ve}from"./Bynub5xW.js";import{t as ye}from"./s48N5eaK.js";import{t as be}from"./CeR4do8T.js";var xe=new Set([`$$slots`,`$$events`,`$$legacy`]);function Se(e,t){let n=k(t,xe),r=[[`path`,{d:`M21.801 10A10 10 0 1 1 17 3.335`}],[`path`,{d:`m9 11 3 3L22 4`}]];U(e,N({name:`circle-check-big`},()=>n,{get iconNode(){return r}}))}var Ce=new Set([`$$slots`,`$$events`,`$$legacy`]);function we(e,t){let n=k(t,Ce),r=[[`path`,{d:`M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2`}],[`path`,{d:`M6.453 15h11.094`}],[`path`,{d:`M8.5 2h7`}]];U(e,N({name:`flask-conical`},()=>n,{get iconNode(){return r}}))}var Te=n(`<button><!> </button>`),Ee=n(`<div class="flex shrink-0 items-center gap-1 border-b border-border px-2"></div>`);function De(n,s){r(s,!0);let c=[{id:`file`,label:`File`,icon:de},{id:`log`,label:`History`,icon:he},{id:`preview`,label:`Preview`,icon:ge},{id:`validate`,label:`Validate`,icon:Se},{id:`test`,label:`Test`,icon:we}],d=W(),f=b(()=>d?.()?.subview??`file`);function m(e){let t=new URLSearchParams(H.url.search);t.set(`subview`,e),B(`${H.url.pathname}?${t.toString()}`)}var h=Ee();e(h,21,()=>c,e=>e.id,(e,n)=>{var r=Te(),s=A(r);i(s,()=>p(n).icon,(e,t)=>{t(e,{class:`h-3.5 w-3.5`})});var c=T(s);t(r),O(()=>{L(r,1,`flex items-center gap-1.5 px-3 py-2 text-xs font-medium transition-colors ${p(f)===p(n).id?`border-b-2 border-primary text-primary`:`text-muted-foreground hover:text-foreground`}`),a(c,` ${p(n).label??``}`)}),o(`click`,r,()=>m(p(n).id)),l(e,r)}),t(h),l(n,h),u()}f([`click`]);function Oe(e,t=``){return{mode:`new`,target:e,skillId:null,name:``,description:``,body:``,revision:null,extraFrontmatter:{},directoryName:t}}var ke={workspaceId:ae.parse(`~`),providerId:K.parse(`user`)};function Ae(){return{mode:`new`,target:ke,skillId:null,name:``,description:``,body:``,revision:null,extraFrontmatter:{},directoryName:``}}function je(e,t){return{mode:`edit`,target:e,skillId:t,name:``,description:``,body:``,revision:null,extraFrontmatter:{},directoryName:``}}function Me(e){return{...e.extraFrontmatter,name:e.name,description:e.description}}var Ne={directoryName:null,name:null,description:null};function Pe(e){return e.mode===`new`?{directoryName:ne.safeParse(e.directoryName).success?null:`Use lowercase letters, numbers, and hyphens.`,name:e.name.trim().length>0?null:`Name is required.`,description:e.description.trim().length>0?null:`Description is required.`}:Ne}function Fe(e){return e.directoryName!==null||e.name!==null||e.description!==null}var Ie=Symbol(`skill-creator:creator-editor`);function Le(e){let t=F(e),n={get draft(){return t},hydrateFromDocument(e){t.skillId=e.skillId,t.name=String(e.frontmatter.name??``),t.description=String(e.frontmatter.description??``),t.body=e.body,t.revision=e.revision,t.directoryName=e.directoryName;let{name:n,description:r,...i}=e.frontmatter;t.extraFrontmatter=i},advanceRevision(e){t.revision=e}};return I(Ie,n),n}function X(){if(!R(Ie))throw Error(`[creator-editor] useCreatorEditor 必须在 <CreatorWorkspace> 内调用`);return g(Ie)}function Z(e,t,n){return e?`${t}:${e.workspaceId}/${e.providerId}${n===null?``:`/${n}`}`:null}var Re=new Map,ze=new Set;function Be(e){return{...e,target:{...e.target},extraFrontmatter:{...e.extraFrontmatter}}}function Ve(e,t){Re.set(e,Be(t))}function He(e){let t=Re.get(e);return t===void 0?null:Be(t)}function Ue(e){Re.delete(e)}function We(e){ze.add(e)}function Ge(e){return ze.has(e)}function Ke(e){ze.delete(e)}var qe=null;function Je(){return qe??=V(()=>import(`./VnziGBZO.js`),__vite__mapDeps([0,1]),import.meta.url),qe}var Q=null,Ye=n(`<span class="sr-only">Loading editor…</span>`),Xe=n(`<textarea spellcheck="false" class="w-full min-h-0 flex-1 resize-y rounded-md border border-input bg-input/20 px-2 py-1.5 font-mono text-xs leading-5 outline-none focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30"></textarea> <!>`,1),Ze=n(`<div></div> <!>`,1);function Qe(e,t){r(t,!0);let n=h(t,`value`,15,``),i=h(t,`placeholder`,3,``),a=D(null),o=D(!1),s=D(!1),d=!1;j(()=>{let e=p(a);if(e)return(async()=>{try{let[{basicSetup:t,EditorView:r},{markdown:i}]=await Promise.all([Je(),V(()=>import(`./DSbDiml2.js`),__vite__mapDeps([2,1]),import.meta.url)]);Q=new r({doc:n(),extensions:[t,i(),r.updateListener.of(e=>{e.docChanged&&(d=!0,n(e.state.doc.toString()))})],parent:e}),y(o,!0)}catch{y(s,!0)}})(),()=>{Q?.destroy(),Q=null}}),M(()=>{if(Q===null)return;let e=n(),t=Q.state.doc.toString();if(d){d=!1;return}e!==t&&Q.dispatch({changes:{from:0,to:t.length,insert:e}})});var f=Ze(),g=P(f);let _;w(g,e=>y(a,e),()=>p(a));var b=T(g,2),x=e=>{var t=Xe(),r=P(t);m(r);var a=T(r,2),o=e=>{var t=Ye();l(e,t)};c(a,e=>{p(s)||e(o)}),O(()=>E(r,`placeholder`,i())),v(r,n),l(e,t)};c(b,e=>{p(o)||e(x)}),O(()=>_=L(g,1,`cm-host min-h-0 flex-1 overflow-hidden svelte-13gbnsa`,null,_,{"cm-hidden":!p(o)})),l(e,f),u()}var $e=new Set([`$$slots`,`$$events`,`$$legacy`]);function et(e,t){let n=k(t,$e),r=[[`path`,{d:`M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z`}],[`path`,{d:`M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7`}],[`path`,{d:`M7 3v4a1 1 0 0 0 1 1h7`}]];U(e,N({name:`save`},()=>n,{get iconNode(){return r}}))}var tt=new Set([`$$slots`,`$$events`,`$$legacy`]);function nt(e,t){let n=k(t,tt),r=[[`path`,{d:`M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8`}],[`path`,{d:`M21 3v5h-5`}]];U(e,N({name:`rotate-cw`},()=>n,{get iconNode(){return r}}))}var rt=n(`<!> Reload`,1),it=n(`<!> <span class="hidden sm:inline">Delete</span>`,1),at=n(`<!> `,1),ot=n(`<div class="flex flex-1 items-center justify-center gap-2 text-xs text-muted-foreground"><!> Loading…</div>`),st=n(`<div class="flex flex-1 flex-col items-center justify-center gap-2 px-8 text-center"><p class="text-xs text-destructive"> </p> <!></div>`),ct=n(`<span class="text-[11px] text-destructive">Use lowercase letters, numbers, and hyphens.</span>`),lt=n(`<label class="block space-y-1"><span class="text-[11px] font-medium text-muted-foreground">Directory name</span> <!> <!></label>`),ut=n(`<span class="text-[11px] text-destructive"> </span>`),dt=n(`<div class="min-h-0 flex-1 space-y-3 overflow-y-auto p-4"><!> <label class="block space-y-1"><span class="text-[11px] font-medium text-muted-foreground">Name</span> <!> <!></label> <label class="block space-y-1"><span class="text-[11px] font-medium text-muted-foreground">Description</span> <textarea rows="2" class="w-full resize-y rounded-md border border-input bg-input/20 px-2 py-1 text-xs leading-5 outline-none focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/30" placeholder="What this skill does"></textarea> <!></label> <label class="block flex min-h-0 flex-1 flex-col space-y-1"><span class="text-[11px] font-medium text-muted-foreground">Body (Markdown)</span> <!></label></div>`),ft=n(`<div class="flex h-full flex-col"><div class="flex shrink-0 items-center justify-between border-b border-border px-4 py-2"><span class="text-xs font-medium"> </span> <div class="flex items-center gap-1.5"><!> <!> <!></div></div> <!></div> <!>`,1);function pt(e,n){r(n,!0);let i=X(),o=i.draft,s=ie(G),f=D(!1),h=D(null),g=D(!1);M(()=>{if(o.mode!==`edit`||o.skillId===null)return;let e=Z(o.target,`edit`,o.skillId);e!==null&&Ge(e)||x(o.target,o.skillId)});async function x(e,t){let n=s.issue();y(f,!0),y(h,null);try{let r=await ce(e,t);if(!n.isCurrent())return;i.hydrateFromDocument(r);let a=Z(e,`edit`,t);a!==null&&We(a)}catch(e){if(!n.isCurrent())return;y(h,e instanceof Error?e.message:String(e),!0)}finally{n.isLatest()&&y(f,!1)}}function S(){if(o.mode===`edit`&&o.skillId){let e=Z(o.target,`edit`,o.skillId);e!==null&&Ke(e),x(o.target,o.skillId)}}let w=b(()=>Pe(o)),E=b(()=>o.mode!==`new`||p(w).directoryName===null),k=b(()=>!p(g)&&o.name.trim().length>0&&o.description.trim().length>0&&(o.mode===`edit`||!Fe(p(w)))&&o.revision!==null==(o.mode===`edit`));async function j(){if(o.mode===`edit`){if(o.skillId===null||o.revision===null)return;y(g,!0);try{let e=await oe({mode:`update`,workspaceId:o.target.workspaceId,providerId:o.target.providerId,skillId:o.skillId,expectedRevision:o.revision,frontmatter:Me(o),body:o.body});i.advanceRevision(e.document.revision),q(`Saved.`)}catch(e){N(e)}finally{y(g,!1)}return}let e=ne.safeParse(o.directoryName);if(!e.success){q(`Directory name must be lowercase letters, numbers, and hyphens.`);return}y(g,!0);try{let t=await oe({mode:`create`,workspaceId:o.target.workspaceId,providerId:o.target.providerId,directoryName:e.data,frontmatter:Me(o),body:o.body});i.hydrateFromDocument(t.document);let n=Z(o.target,`edit`,t.document.skillId);n!==null&&We(n),q(`Skill created.`)}catch(e){N(e)}finally{y(g,!1)}}function N(e){if(e instanceof te&&e.code===`CONFLICT`){q(`This skill changed elsewhere. Reload to view the latest.`,{label:`Reload`,run:S});return}q(e instanceof Error?e.message:String(e))}let F=D(!1),I=D(!1),L=b(()=>o.mode===`edit`&&o.skillId!==null&&o.revision!==null);async function R(){if(!p(L)||p(I))return;let e=o.skillId,t=o.revision;if(e!==null&&t!==null){y(I,!0);try{await se({target:o.target,skillId:e,expectedRevision:t}),y(F,!1),q(`Skill deleted.`);let n=Z(o.target,`edit`,e);n!==null&&(Ue(n),Ke(n)),await B(`/creator`)}catch(e){e instanceof te&&e.code===`CONFLICT`?(y(F,!1),q(`This skill changed elsewhere. Reload before deleting.`,{label:`Reload`,run:S})):q(e instanceof Error?e.message:String(e))}finally{y(I,!1)}}}var z=ft(),V=P(z),H=A(V),U=A(H),ee=_(U,!0),W=T(U,2),K=A(W),re=e=>{J(e,{variant:`outline`,size:`sm`,class:`h-7 gap-1.5`,onclick:S,get disabled(){return p(f)},children:(e,t)=>{var n=rt();nt(P(n),{class:`h-3.5 w-3.5`}),C(),l(e,n)},$$slots:{default:!0}})};c(K,e=>{o.mode===`edit`&&o.skillId&&e(re)});var ae=T(K,2),ue=e=>{{let t=b(()=>!p(L)||p(I));J(e,{variant:`ghost`,size:`sm`,class:`h-7 gap-1.5 px-2 text-destructive hover:text-destructive`,title:`Delete this skill`,get disabled(){return p(t)},onclick:()=>y(F,!0),children:(e,t)=>{var n=it(),r=P(n);ve(r,{class:`h-3.5 w-3.5`}),C(2),l(e,n)},$$slots:{default:!0}})}};c(ae,e=>{o.mode===`edit`&&e(ue)});var de=T(ae,2);{let e=b(()=>!p(k));J(de,{size:`sm`,class:`h-7 gap-1.5`,onclick:j,get disabled(){return p(e)},children:(e,t)=>{var n=at(),r=P(n),i=e=>{Y(e,{class:`h-3.5 w-3.5 animate-spin`})},s=e=>{et(e,{class:`h-3.5 w-3.5`})};c(r,e=>{p(g)?e(i):e(s,-1)});var u=T(r);O(()=>a(u,` ${o.mode===`new`?`Create`:`Save`}`)),l(e,n)},$$slots:{default:!0}})}t(W),t(H);var fe=T(H,2),pe=e=>{var n=ot(),r=A(n);Y(r,{class:`h-4 w-4 animate-spin`}),C(),t(n),l(e,n)},me=e=>{var n=st(),r=A(n),i=_(r,!0),s=T(r,2),u=e=>{J(e,{variant:`outline`,size:`sm`,onclick:S,children:(e,t)=>{C();var n=d(`Retry`);l(e,n)},$$slots:{default:!0}})};c(s,e=>{o.mode===`edit`&&o.skillId&&e(u)}),t(n),O(()=>a(i,p(h))),l(e,n)},he=e=>{var n=dt(),r=A(n),i=e=>{var n=lt(),r=T(A(n),2);le(r,{class:`h-8 font-mono text-xs`,placeholder:`my-skill`,get value(){return o.directoryName},set value(e){o.directoryName=e}});var i=T(r,2),a=e=>{var t=ct();l(e,t)};c(i,e=>{p(E)||e(a)}),t(n),l(e,n)};c(r,e=>{o.mode===`new`&&e(i)});var s=T(r,2),u=T(A(s),2);le(u,{class:`h-8 text-sm`,placeholder:`Skill name`,get value(){return o.name},set value(e){o.name=e}});var d=T(u,2),f=e=>{var t=ut(),n=_(t,!0);O(()=>a(n,p(w).name)),l(e,t)};c(d,e=>{o.mode===`new`&&p(w).name&&e(f)}),t(s);var h=T(s,2),g=T(A(h),2);m(g);var y=T(g,2),b=e=>{var t=ut(),n=_(t,!0);O(()=>a(n,p(w).description)),l(e,t)};c(y,e=>{o.mode===`new`&&p(w).description&&e(b)}),t(h);var x=T(h,2);Qe(T(A(x),2),{placeholder:`## When to Use
3
+
4
+ Describe when this skill should be invoked.`,get value(){return o.body},set value(e){o.body=e}}),t(x),t(n),v(g,()=>o.description,e=>o.description=e),l(e,n)};c(fe,e=>{p(f)?e(pe):p(h)?e(me,1):e(he,-1)}),t(V);var ge=T(V,2);{let e=b(()=>`Delete this skill from ${o.target.providerId}? Its SKILL.md directory is removed from disk.`);_e(ge,{title:`Delete skill`,get description(){return p(e)},confirmLabel:`Delete`,get busy(){return p(I)},onConfirm:()=>void R(),get open(){return p(F)},set open(e){y(F,e,!0)}})}O(()=>a(ee,o.mode===`new`?`New SKILL.md`:`SKILL.md`)),l(e,z),u()}var mt=n(`<!> Refresh`,1),ht=n(`<div class="flex flex-1 items-center justify-center px-8 text-center text-xs text-muted-foreground">Save the skill first to see its change history.</div>`),gt=n(`<div class="flex flex-1 items-center justify-center gap-2 text-xs text-muted-foreground"><!> Loading history…</div>`),_t=n(`<div class="flex flex-1 flex-col items-center justify-center gap-2 px-8 text-center"><p class="text-xs text-destructive"> </p> <!></div>`),vt=n(`<div class="flex flex-1 items-center justify-center px-8 text-center text-xs text-muted-foreground">No revisions recorded yet.</div>`),yt=n(`<span class="rounded-sm bg-emerald-500/10 px-1.5 py-0.5 text-[10px] font-medium text-emerald-700 dark:text-emerald-300">latest</span>`),bt=n(`<span class="text-[10px] text-muted-foreground/70">snapshot pruned</span>`),xt=n(`<div><p class="mb-1 text-[10px] font-medium uppercase tracking-wide text-muted-foreground">Diff vs previous</p> <pre class="overflow-x-auto rounded-md border border-border bg-muted/30 p-2 font-mono text-[10px] leading-4"> </pre></div>`),St=n(`<div><p class="mb-1 text-[10px] font-medium uppercase tracking-wide text-muted-foreground">Full snapshot</p> <pre class="max-h-72 overflow-auto rounded-md border border-border bg-muted/30 p-2 font-mono text-[10px] leading-4"> </pre></div>`),Ct=n(`<p class="text-[10px] text-muted-foreground/70">Initial revision — no diff and no persisted snapshot.</p>`),wt=n(`<div class="mt-2 space-y-2 pl-5"><!> <!> <!></div>`),Tt=n(`<li class="px-4 py-3"><button type="button" class="flex w-full items-start gap-2 text-left"><!> <div class="min-w-0 flex-1"><div class="flex items-center gap-2"><span class="text-xs font-medium"> </span> <!> <!></div> <p class="mt-0.5 truncate font-mono text-[10px] text-muted-foreground"> </p></div></button> <!></li>`),Et=n(`<ol class="min-h-0 flex-1 divide-y divide-border overflow-y-auto"></ol>`),Dt=n(`<div class="flex h-full flex-col"><div class="flex shrink-0 items-center justify-between border-b border-border px-4 py-2"><span class="text-xs font-medium">Change history</span> <!></div> <!></div>`);function Ot(n,i){r(i,!0);let s=X().draft,f=ie(G),m=D(!1),h=D(null),g=D(F([])),v=F({});M(()=>{s.mode===`edit`&&s.skillId!==null&&x(s.skillId)});async function x(e){let t=f.issue();y(m,!0),y(h,null);try{let n=await re().creator.revisions({workspaceId:s.target.workspaceId,providerId:s.target.providerId,skillId:e});if(!t.isCurrent())return;y(g,[...n.revisions].sort((e,t)=>t.timestamp-e.timestamp),!0)}catch(e){if(!t.isCurrent())return;y(h,e instanceof Error?e.message:String(e),!0)}finally{t.isLatest()&&y(m,!1)}}function S(e){v[e]=!v[e]}function w(){s.mode===`edit`&&s.skillId&&x(s.skillId)}function E(e){try{return new Date(e).toLocaleString()}catch{return String(e)}}var k=Dt(),j=A(k),N=T(A(j),2),I=e=>{J(e,{variant:`outline`,size:`sm`,class:`h-7 gap-1.5`,onclick:w,get disabled(){return p(m)},children:(e,t)=>{var n=mt();nt(P(n),{class:`h-3.5 w-3.5`}),C(),l(e,n)},$$slots:{default:!0}})};c(N,e=>{s.mode===`edit`&&s.skillId&&e(I)}),t(j);var L=T(j,2),R=e=>{var t=ht();l(e,t)},z=e=>{var n=gt(),r=A(n);Y(r,{class:`h-4 w-4 animate-spin`}),C(),t(n),l(e,n)},B=e=>{var n=_t(),r=A(n),i=_(r,!0),o=T(r,2),u=e=>{J(e,{variant:`outline`,size:`sm`,onclick:w,children:(e,t)=>{C();var n=d(`Retry`);l(e,n)},$$slots:{default:!0}})};c(o,e=>{s.skillId&&e(u)}),t(n),O(()=>a(i,p(h))),l(e,n)},V=e=>{var t=vt();l(e,t)},H=n=>{var r=Et();e(r,23,()=>p(g),e=>e.revision,(e,n,r)=>{var i=Tt(),s=A(i),u=A(s);{let e=b(()=>v[p(n).revision]?`rotate-90`:``);pe(u,{get class(){return`mt-0.5 h-3.5 w-3.5 shrink-0 text-muted-foreground transition-transform ${p(e)??``}`}})}var d=T(u,2),f=A(d),m=A(f),h=_(m,!0),g=T(m,2),y=e=>{var t=yt();l(e,t)};c(g,e=>{p(r)===0&&e(y)});var x=T(g,2),C=e=>{var t=bt();l(e,t)};c(x,e=>{p(n).content===null&&e(C)}),t(f);var w=T(f,2),D=_(w);t(d),t(s);var k=T(s,2),j=e=>{var r=wt(),i=A(r),o=e=>{var r=xt(),i=T(A(r),2),o=_(i,!0);t(r),O(()=>a(o,p(n).diff)),l(e,r)};c(i,e=>{p(n).diff&&e(o)});var s=T(i,2),u=e=>{var r=St(),i=T(A(r),2),o=_(i,!0);t(r),O(()=>a(o,p(n).content)),l(e,r)};c(s,e=>{p(n).content!==null&&e(u)});var d=T(s,2),f=e=>{var t=Ct();l(e,t)};c(d,e=>{p(n).diff===null&&p(n).content===null&&e(f)}),t(r),l(e,r)};c(k,e=>{v[p(n).revision]&&e(j)}),t(i),O((e,t)=>{a(h,e),a(D,`${t??``}…`)},[()=>E(p(n).timestamp),()=>p(n).revision.slice(0,16)]),o(`click`,s,()=>S(p(n).revision)),l(e,i)}),t(r),l(n,r)};c(L,e=>{s.mode===`new`?e(R):p(m)?e(z,1):p(h)?e(B,2):p(g).length===0?e(V,3):e(H,-1)}),t(k),l(n,k),u()}f([`click`]);var kt=n(`<p class="text-[11px] text-muted-foreground/70">Only name and description — no additional metadata.</p>`),At=n(`<div><dt class="bg-muted/40 px-2 py-1 text-[11px] font-medium text-muted-foreground"> </dt> <dd class="break-words px-2 py-1 text-[11px]"> </dd></div>`),jt=n(`<dl class="overflow-x-auto rounded-md border border-border"></dl>`),Mt=n(`<p class="text-xs text-muted-foreground/70">Nothing to preview yet.</p>`),Nt=n(`<div class="prose prose-sm max-w-none overflow-x-auto"></div>`),Pt=n(`<div class="flex h-full flex-col overflow-y-auto p-4"><section class="mb-4"><h1 class="text-base font-semibold"> </h1> <p class="mt-0.5 text-xs leading-5 text-muted-foreground"> </p></section> <section class="mb-4"><h2 class="mb-2 text-[11px] font-medium text-muted-foreground">Frontmatter</h2> <!></section> <section class="min-h-0 flex-1"><h2 class="mb-2 text-[11px] font-medium text-muted-foreground">Body</h2> <!></section></div>`);function Ft(n,i){r(i,!0);let o=X().draft,d=b(()=>Me(o)),f=b(()=>ye(o.body)),m=b(()=>Object.entries(p(d)).filter(([e])=>e!==`name`&&e!==`description`));var h=Pt(),g=A(h),v=A(g),y=_(v,!0),x=T(v,2),C=_(x,!0);t(g);var w=T(g,2),E=T(A(w),2),D=e=>{var t=kt();l(e,t)},k=n=>{var r=jt();e(r,23,()=>p(m),([e,t])=>e,(e,n,r)=>{var i=b(()=>s(p(n),2));let o=()=>p(i)[0],c=()=>p(i)[1];var u=At(),d=A(u),f=_(d,!0),m=T(d,2),h=_(m,!0);t(u),O(e=>{L(u,1,`grid grid-cols-[120px_minmax(0,1fr)] ${p(r)>0?`border-t border-border`:``}`),a(f,o()),a(h,e)},[()=>c()===null?`null`:String(c())]),l(e,u)}),t(r),l(n,r)};c(E,e=>{p(m).length===0?e(D):e(k,-1)}),t(w);var j=T(w,2),M=T(A(j),2),N=e=>{var t=Mt();l(e,t)},P=b(()=>o.body.trim().length===0),F=e=>{var n=Nt();S(n,()=>p(f),!0),t(n),l(e,n)};c(M,e=>{p(P)?e(N):e(F,-1)}),t(j),t(h),O(()=>{a(y,o.name||`Untitled skill`),a(C,o.description||`No description yet.`)}),l(n,h),u()}var It=n(`<!> Re-validate`,1),Lt=n(`<div class="flex flex-1 items-center justify-center px-8 text-center text-xs text-muted-foreground">Save the skill first to validate it.</div>`),Rt=n(`<div class="flex flex-1 items-center justify-center gap-2 text-xs text-muted-foreground"><!> Validating…</div>`),zt=n(`<div class="flex flex-1 flex-col items-center justify-center gap-2 px-8 text-center"><p class="text-xs text-destructive"> </p> <!></div>`),Bt=n(`<div class="flex items-center gap-2 text-xs text-emerald-700 dark:text-emerald-300"><!> Skill passes all checks.</div>`),Vt=n(`<li class="flex gap-2 rounded-md bg-destructive/10 px-2 py-1.5 text-xs text-destructive"><!> <span class="break-words"> </span></li>`),Ht=n(`<section><h3 class="mb-1.5 text-[11px] font-medium uppercase tracking-wide text-destructive"> </h3> <ul class="space-y-1"></ul></section>`),Ut=n(`<li class="flex gap-2 rounded-md bg-amber-500/10 px-2 py-1.5 text-xs text-amber-700 dark:text-amber-300"><!> <span class="break-words"> </span></li>`),Wt=n(`<section><h3 class="mb-1.5 text-[11px] font-medium uppercase tracking-wide text-amber-700 dark:text-amber-300"> </h3> <ul class="space-y-1"></ul></section>`),Gt=n(`<!> <!>`,1),Kt=n(`<div class="min-h-0 flex-1 space-y-3 overflow-y-auto p-4"><!></div>`),qt=n(`<div class="flex h-full flex-col"><div class="flex shrink-0 items-center justify-between border-b border-border px-4 py-2"><span class="text-xs font-medium">Validation</span> <!></div> <!></div>`);function Jt(n,i){r(i,!0);let o=X().draft,s=ie(G),f=D(!1),m=D(null),h=D(null);M(()=>{o.mode===`edit`&&o.skillId!==null&&g(o.skillId)});async function g(e){let t=s.issue();y(f,!0),y(m,null);try{let n=await re().skills.validate({workspaceId:o.target.workspaceId,providerId:o.target.providerId,skillId:e});if(!t.isCurrent())return;y(h,n,!0)}catch(e){if(!t.isCurrent())return;y(m,e instanceof Error?e.message:String(e),!0),y(h,null)}finally{t.isLatest()&&y(f,!1)}}function v(){o.mode===`edit`&&o.skillId&&g(o.skillId)}var b=qt(),S=A(b),w=T(A(S),2),E=e=>{J(e,{variant:`outline`,size:`sm`,class:`h-7 gap-1.5`,onclick:v,get disabled(){return p(f)},children:(e,t)=>{var n=It(),r=P(n),i=e=>{Y(e,{class:`h-3.5 w-3.5 animate-spin`})},a=e=>{be(e,{class:`h-3.5 w-3.5`})};c(r,e=>{p(f)?e(i):e(a,-1)}),C(),l(e,n)},$$slots:{default:!0}})};c(w,e=>{o.mode===`edit`&&o.skillId&&e(E)}),t(S);var k=T(S,2),j=e=>{var t=Lt();l(e,t)},N=e=>{var n=Rt(),r=A(n);Y(r,{class:`h-4 w-4 animate-spin`}),C(),t(n),l(e,n)},F=e=>{var n=zt(),r=A(n),i=_(r,!0),s=T(r,2),u=e=>{J(e,{variant:`outline`,size:`sm`,onclick:v,children:(e,t)=>{C();var n=d(`Retry`);l(e,n)},$$slots:{default:!0}})};c(s,e=>{o.skillId&&e(u)}),t(n),O(()=>a(i,p(m))),l(e,n)},I=n=>{var r=Kt(),i=A(r),o=e=>{var n=Bt(),r=A(n);fe(r,{class:`h-4 w-4`}),C(),t(n),l(e,n)},s=n=>{var r=Gt(),i=P(r),o=n=>{var r=Ht(),i=A(r),o=_(i),s=T(i,2);e(s,21,()=>p(h).errors,x,(e,n)=>{var r=Vt(),i=A(r);be(i,{class:`mt-0.5 h-3.5 w-3.5 shrink-0`});var o=T(i,2),s=_(o,!0);t(r),O(()=>a(s,p(n))),l(e,r)}),t(s),t(r),O(()=>a(o,`Errors (${p(h).errors.length??``})`)),l(n,r)};c(i,e=>{p(h).errors.length>0&&e(o)});var s=T(i,2),u=n=>{var r=Wt(),i=A(r),o=_(i),s=T(i,2);e(s,21,()=>p(h).warnings,x,(e,n)=>{var r=Ut(),i=A(r);be(i,{class:`mt-0.5 h-3.5 w-3.5 shrink-0`});var o=T(i,2),s=_(o,!0);t(r),O(()=>a(s,p(n))),l(e,r)}),t(s),t(r),O(()=>a(o,`Warnings (${p(h).warnings.length??``})`)),l(n,r)};c(s,e=>{p(h).warnings.length>0&&e(u)}),l(n,r)};c(i,e=>{p(h).success&&p(h).errors.length===0&&p(h).warnings.length===0?e(o):e(s,-1)}),t(r),l(n,r)};c(k,e=>{o.mode===`new`?e(j):p(f)&&p(h)===null?e(N,1):p(m)?e(F,2):p(h)&&e(I,3)}),t(b),l(n,b),u()}var $={id:`probe-recall-v1`,version:1,render(e){return`请阅读引用的技能文档($${e} 芯片)。然后:
5
+ 1. 复述该技能的触发条件与适用场景;
6
+ 2. 列出它声明提供的工具与参考文件;
7
+ 3. 给出一个你会使用它的典型任务示例。`}},Yt=n(`<!> Run in Agent panel`,1),Xt=n(`<div class="flex h-full flex-col gap-3 p-4"><div class="flex items-center gap-2 text-sm font-medium"><!> Test run <span class="text-xs font-normal text-muted-foreground"> </span></div> <p class="text-xs text-muted-foreground">在 Agent 面板打开一个携带 <code class="rounded bg-muted px-1"> </code> 技能引用的试跑会话——发送后由 daemon 展开技能文档,你可以编辑最终指令。</p> <textarea class="min-h-0 flex-1 resize-none rounded-md border border-border bg-background p-3 font-mono text-xs leading-relaxed focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring" aria-label="Test run prompt" spellcheck="false"></textarea> <div class="flex shrink-0 items-center justify-end gap-2"><!> <!></div></div>`),Zt=n(`<!> Go save`,1),Qt=n(`<div class="flex h-full items-center justify-center p-6 text-center text-xs text-muted-foreground"><div class="space-y-2"><p class="font-medium text-foreground">Test run</p> <p>Save the skill first to test it — the run needs a stable skill identity.</p> <!></div></div>`);function $t(e,n){r(n,!0);let i=X().draft,s=D(!1),f=D(``);M(()=>{let e=i.name;p(s)||y(f,$.render(e.length>0?e:`skill`),!0)});let h=b(()=>i.mode===`edit`&&i.skillId!==null&&i.revision!==null);function g(){p(h)&&i.skillId!==null&&i.revision!==null&&ue({text:p(f).trim().length>0?p(f):$.render(i.name),skill:{workspaceId:i.target.workspaceId,providerId:i.target.providerId,skillId:i.skillId},skillName:i.name.length>0?i.name:i.skillId,revision:i.revision,templateId:$.id,templateVersion:$.version})}function x(){let e=new URLSearchParams(H.url.searchParams);e.set(`subview`,`file`),B(`${H.url.pathname}?${e.toString()}`)}var S=z(),w=P(S),E=e=>{var n=Xt(),r=A(n),c=A(r);we(c,{class:`size-4 text-muted-foreground`});var u=T(c,2),h=_(u);t(r);var b=T(r,2),x=T(A(b)),S=_(x);C(),t(b);var w=T(b,2);m(w);var E=T(w,2),D=A(E);J(D,{size:`sm`,variant:`secondary`,onclick:()=>y(s,!1),children:(e,t)=>{C();var n=d(`Reset probe`);l(e,n)},$$slots:{default:!0}});var k=T(D,2);J(k,{size:`sm`,onclick:g,children:(e,t)=>{var n=Yt();we(P(n),{class:`size-4`}),C(),l(e,n)},$$slots:{default:!0}}),t(E),t(n),O(e=>{a(h,`probe ${$.id??``} v${$.version??``} · revision
8
+ ${e??``}…`),a(S,`$${i.name??``}`)},[()=>i.revision?.slice(0,14)]),o(`input`,w,()=>y(s,!0)),v(w,()=>p(f),e=>y(f,e)),l(e,n)},k=e=>{var n=Qt(),r=A(n),i=T(A(r),4);J(i,{size:`sm`,variant:`secondary`,onclick:x,children:(e,t)=>{var n=Zt();et(P(n),{class:`size-4`}),C(),l(e,n)},$$slots:{default:!0}}),t(r),t(n),l(e,n)};c(w,e=>{p(h)?e(E):e(k,-1)}),l(e,S),u()}f([`input`]);var en=n(`<div class="flex flex-1 items-center justify-center p-4 text-center text-xs text-muted-foreground">Invalid workspace target.</div>`),tn=n(`<!> <div class="min-h-0 flex-1 overflow-hidden"><!></div>`,1),nn=n(`<div class="flex h-full flex-col overflow-hidden"><header class="flex shrink-0 items-center gap-2 border-b border-border px-4 py-2"><span class="text-sm font-medium"> </span> <span class="text-xs text-muted-foreground"> </span></header> <div class="flex min-h-0 flex-1 flex-col"><!></div></div>`);function rn(e,n){r(n,!0);let i=ee(),o=b(()=>i?.()),s=b(()=>p(o)?.mode),d=b(()=>p(o)?.wsId),f=b(()=>p(o)?.providerId),m=b(()=>p(o)?.skillId),h=W(),g=b(()=>h?.()??{}),v=b(()=>p(g).subview??`file`),y=b(()=>!p(d)||!p(f)?null:{workspaceId:p(d),providerId:p(f)}),x=b(()=>{if(!p(y))return Ae();if(p(s)===`edit`&&p(m))return je(p(y),p(m));let e=p(g).template?me.find(e=>e.id===p(g).template):void 0,t=Oe(p(y),e?e.name:``);return e&&(t.name=e.name,t.description=e.description,t.body=e.body),t}),S=Le(Ae()),C=b(()=>Z(p(y),p(s)===`edit`?`edit`:`new`,p(m)??null));M(()=>{let e=p(C),t=p(x),n=e===null?null:He(e),r=n??t;S.draft.mode=r.mode,S.draft.target=r.target,S.draft.skillId=r.skillId,S.draft.name=r.name,S.draft.description=r.description,S.draft.body=r.body,S.draft.revision=r.revision,S.draft.extraFrontmatter=r.extraFrontmatter,S.draft.directoryName=r.directoryName,n!==null&&e!==null&&We(e)}),M(()=>()=>{let e=S.draft;if(e.target.workspaceId===`~`)return;let t=Z(e.target,e.mode,e.skillId);t!==null&&Ve(t,e)});var w=nn(),E=A(w),D=A(E),k=_(D,!0),j=T(D,2),N=_(j);t(E);var F=T(E,2),I=A(F),L=e=>{var t=en();l(e,t)},R=e=>{var n=tn(),r=P(n);De(r,{});var i=T(r,2),a=A(i),o=e=>{pt(e,{})},s=e=>{Ot(e,{})},u=e=>{Ft(e,{})},d=e=>{Jt(e,{})},f=e=>{$t(e,{})},m=e=>{pt(e,{})};c(a,e=>{p(v)===`file`?e(o):p(v)===`log`?e(s,1):p(v)===`preview`?e(u,2):p(v)===`validate`?e(d,3):p(v)===`test`?e(f,4):e(m,-1)}),t(i),l(e,n)};c(I,e=>{p(y)?e(R,-1):e(L)}),t(F),t(w),O(e=>{a(k,e),a(N,`${p(d)??``} / ${p(f)??``}`)},[()=>p(s)===`new`?`New skill`:p(m)?`Edit: ${p(m).slice(0,12)}…`:`Editor`]),l(e,w),u()}export{rn as default};
@@ -1 +1 @@
1
- import{B as e,Ct as t,D as n,F as r,N as i,R as a,St as o,U as s,a as c,kt as l,lt as u,nt as d,o as f,s as p,st as m,z as h}from"./CmCJ0SKP.js";import"./xihTtKlq.js";import{t as g}from"./BkEnd9_Z.js";import{a as _,i as v,n as y,o as b,r as x,t as S}from"./Crg8KRap.js";import{n as C,t as w}from"./DnPeA-9c.js";import{t as T}from"./Bs27XW8_.js";var E=e(`<!> `,1),D=e(`<!> <!>`,1);function O(e,f){t(f,!0);let p=c(f,`open`,15,!1),g=c(f,`confirmLabel`,3,`Remove`),O=c(f,`busy`,3,!1);var k=h(),A=m(k);n(A,()=>b,(e,t)=>{t(e,{get open(){return p()},set open(e){p(e)},children:(e,t)=>{var o=h(),c=m(o);n(c,()=>y,(e,t)=>{t(e,{class:`sm:max-w-[420px]`,children:(e,t)=>{var o=D(),c=m(o);n(c,()=>x,(e,t)=>{t(e,{children:(e,t)=>{var i=D(),o=m(i);n(o,()=>_,(e,t)=>{t(e,{class:`flex items-center gap-2`,children:(e,t)=>{var n=E(),i=m(n);T(i,{class:`h-4 w-4 text-destructive`});var o=u(i);d(()=>r(o,` ${f.title??``}`)),a(e,n)},$$slots:{default:!0}})});var c=u(o,2);n(c,()=>S,(e,t)=>{t(e,{children:(e,t)=>{l();var n=s();d(()=>r(n,f.description)),a(e,n)},$$slots:{default:!0}})}),a(e,i)},$$slots:{default:!0}})});var h=u(c,2);n(h,()=>v,(e,t)=>{t(e,{children:(e,t)=>{var n=D(),o=m(n);C(o,{variant:`outline`,get disabled(){return O()},onclick:()=>p(!1),children:(e,t)=>{l();var n=s(`Cancel`);a(e,n)},$$slots:{default:!0}});var c=u(o,2);C(c,{variant:`destructive`,get disabled(){return O()},onclick:()=>f.onConfirm(),children:(e,t)=>{var n=E(),o=m(n),s=e=>{w(e,{class:`h-4 w-4 animate-spin`})};i(o,e=>{O()&&e(s)});var c=u(o);d(()=>r(c,` ${g()??``}`)),a(e,n)},$$slots:{default:!0}}),a(e,n)},$$slots:{default:!0}})}),a(e,o)},$$slots:{default:!0}})}),a(e,o)},$$slots:{default:!0}})}),a(e,k),o()}var k=new Set([`$$slots`,`$$events`,`$$legacy`]);function A(e,t){let n=f(t,k),r=[[`path`,{d:`M10 11v6`}],[`path`,{d:`M14 11v6`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`}],[`path`,{d:`M3 6h18`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`}]];g(e,p({name:`trash`},()=>n,{get iconNode(){return r}}))}export{O as n,A as t};
1
+ import{B as e,Ct as t,D as n,F as r,N as i,R as a,St as o,U as s,a as c,kt as l,lt as u,nt as d,o as f,s as p,st as m,z as h}from"./CmCJ0SKP.js";import"./xihTtKlq.js";import{t as g}from"./BkEnd9_Z.js";import{a as _,i as v,n as y,o as b,r as x,t as S}from"./DC5f4JBB.js";import{n as C,t as w}from"./DnPeA-9c.js";import{t as T}from"./Bs27XW8_.js";var E=e(`<!> `,1),D=e(`<!> <!>`,1);function O(e,f){t(f,!0);let p=c(f,`open`,15,!1),g=c(f,`confirmLabel`,3,`Remove`),O=c(f,`busy`,3,!1);var k=h(),A=m(k);n(A,()=>b,(e,t)=>{t(e,{get open(){return p()},set open(e){p(e)},children:(e,t)=>{var o=h(),c=m(o);n(c,()=>y,(e,t)=>{t(e,{class:`sm:max-w-[420px]`,children:(e,t)=>{var o=D(),c=m(o);n(c,()=>x,(e,t)=>{t(e,{children:(e,t)=>{var i=D(),o=m(i);n(o,()=>_,(e,t)=>{t(e,{class:`flex items-center gap-2`,children:(e,t)=>{var n=E(),i=m(n);T(i,{class:`h-4 w-4 text-destructive`});var o=u(i);d(()=>r(o,` ${f.title??``}`)),a(e,n)},$$slots:{default:!0}})});var c=u(o,2);n(c,()=>S,(e,t)=>{t(e,{children:(e,t)=>{l();var n=s();d(()=>r(n,f.description)),a(e,n)},$$slots:{default:!0}})}),a(e,i)},$$slots:{default:!0}})});var h=u(c,2);n(h,()=>v,(e,t)=>{t(e,{children:(e,t)=>{var n=D(),o=m(n);C(o,{variant:`outline`,get disabled(){return O()},onclick:()=>p(!1),children:(e,t)=>{l();var n=s(`Cancel`);a(e,n)},$$slots:{default:!0}});var c=u(o,2);C(c,{variant:`destructive`,get disabled(){return O()},onclick:()=>f.onConfirm(),children:(e,t)=>{var n=E(),o=m(n),s=e=>{w(e,{class:`h-4 w-4 animate-spin`})};i(o,e=>{O()&&e(s)});var c=u(o);d(()=>r(c,` ${g()??``}`)),a(e,n)},$$slots:{default:!0}}),a(e,n)},$$slots:{default:!0}})}),a(e,o)},$$slots:{default:!0}})}),a(e,o)},$$slots:{default:!0}})}),a(e,k),o()}var k=new Set([`$$slots`,`$$events`,`$$legacy`]);function A(e,t){let n=f(t,k),r=[[`path`,{d:`M10 11v6`}],[`path`,{d:`M14 11v6`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`}],[`path`,{d:`M3 6h18`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`}]];g(e,p({name:`trash`},()=>n,{get iconNode(){return r}}))}export{O as n,A as t};