tracer-sh 0.2.0 → 0.2.2

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.
@@ -1 +1 @@
1
- import{a as q,r as s,j as r}from"./index-CFCII-7S.js";var P=q();function $(c){const n=c?`tracer:starred:${c}`:null,[i,S]=s.useState(()=>{if(!n)return new Set;try{const a=localStorage.getItem(n);return a?new Set(JSON.parse(a)):new Set}catch{return new Set}});return[i,a=>{S(u=>{const t=new Set(u);return t.has(a)?t.delete(a):t.add(a),n&&localStorage.setItem(n,JSON.stringify([...t])),t})}]}function I({options:c,value:n,onChange:i,placeholder:S="Select...",storageKey:v,fitContent:a,disabled:u}){const[t,l]=s.useState(!1),[w,y]=s.useState(""),f=s.useRef(null),j=s.useRef(null),N=s.useRef(null),g=s.useRef(null),[x,C]=$(v),[m,L]=s.useState({top:0,left:0,minWidth:0});s.useEffect(()=>{if(!t)return;const e=d=>{f.current?.contains(d.target)||j.current?.contains(d.target)||l(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[t]);const R=s.useCallback(()=>{if(!f.current)return;const e=f.current.getBoundingClientRect();L({top:e.bottom+4,left:e.left,minWidth:e.width})},[]);s.useEffect(()=>{t&&(R(),y(""),requestAnimationFrame(()=>N.current?.focus()))},[t,R]);const h=c.find(e=>e.value===n),p=s.useMemo(()=>{const e=w.toLowerCase();return[...e?c.filter(o=>o.label.toLowerCase().includes(e)||o.value.toLowerCase().includes(e)):c].sort((o,b)=>{const k=x.has(o.value)?0:1,E=x.has(b.value)?0:1;return k!==E?k-E:o.label.localeCompare(b.label)})},[c,w,x]);s.useEffect(()=>{if(t&&n&&g.current){const e=g.current.querySelector(`[data-value="${CSS.escape(n)}"]`);e&&e.scrollIntoView({block:"nearest"})}},[t,n]);const W=t?P.createPortal(r.jsxs("div",{ref:j,className:"fixed z-[100] bg-white border border-[#d4d2cd] rounded shadow-lg",style:{top:m.top,left:m.left,minWidth:m.minWidth,width:a?"max-content":m.minWidth},children:[r.jsx("div",{className:"p-1.5 border-b border-[#e8e6e1]",children:r.jsx("input",{ref:N,type:"text",value:w,onChange:e=>y(e.target.value),placeholder:"Search...",className:"w-full px-2 py-1.5 text-xs text-[#2c2c2c] font-sans bg-[#f5f4f0] border border-[#e8e6e1] rounded focus:outline-none focus:border-[#2b5ea7] placeholder:text-[#9c9890]",onKeyDown:e=>{e.key==="Escape"&&l(!1),e.key==="Enter"&&p.length>0&&(i(p[0].value),l(!1))}})}),r.jsx("div",{ref:g,className:"max-h-[280px] overflow-y-auto",children:p.length===0?r.jsx("div",{className:"px-3 py-3 text-xs text-[#9c9890] text-center",children:"No projects found"}):p.map(e=>{const d=e.value===n,o=x.has(e.value);return r.jsxs("div",{"data-value":e.value,className:`flex items-center gap-1.5 px-2 py-1.5 text-xs font-sans cursor-pointer transition-colors ${d?"bg-[#2b5ea7]/10 text-[#2b5ea7]":"text-[#2c2c2c] hover:bg-[#f5f4f0]"}`,onClick:()=>{i(e.value),l(!1)},children:[r.jsx("button",{type:"button",onClick:b=>{b.stopPropagation(),C(e.value)},className:`shrink-0 w-4 h-4 flex items-center justify-center text-[10px] transition-colors ${o?"text-[#d4a017]":"text-[#d4d2cd] hover:text-[#9c9890]"}`,title:o?"Unstar":"Star to pin to top",children:o?"★":"☆"}),r.jsx("span",{className:a?"whitespace-nowrap":"truncate flex-1",children:e.label})]},e.value)})})]}),document.body):null;return r.jsxs(r.Fragment,{children:[r.jsxs("button",{ref:f,type:"button",onClick:()=>!u&&l(!t),disabled:u,className:"w-full bg-white border border-[#d4d2cd] rounded px-3 py-2 text-xs text-[#2c2c2c] font-sans text-left flex items-center justify-between focus:outline-none focus:border-[#2b5ea7] hover:border-[#b0ada6] transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:[r.jsx("span",{className:h?"text-[#2c2c2c] truncate":"text-[#9c9890]",children:h?h.displayLabel??h.label:S}),r.jsx("span",{className:"text-[#9c9890] text-[10px] ml-2 shrink-0 transition-transform duration-200",style:{transform:t?"rotate(180deg)":"rotate(0deg)"},children:"▾"})]}),W]})}export{I as S,P as r,$ as u};
1
+ import{a as q,r as s,j as r}from"./index-_7TPlTNo.js";var P=q();function $(c){const n=c?`tracer:starred:${c}`:null,[i,S]=s.useState(()=>{if(!n)return new Set;try{const a=localStorage.getItem(n);return a?new Set(JSON.parse(a)):new Set}catch{return new Set}});return[i,a=>{S(u=>{const t=new Set(u);return t.has(a)?t.delete(a):t.add(a),n&&localStorage.setItem(n,JSON.stringify([...t])),t})}]}function I({options:c,value:n,onChange:i,placeholder:S="Select...",storageKey:v,fitContent:a,disabled:u}){const[t,l]=s.useState(!1),[w,y]=s.useState(""),f=s.useRef(null),j=s.useRef(null),N=s.useRef(null),g=s.useRef(null),[x,C]=$(v),[m,L]=s.useState({top:0,left:0,minWidth:0});s.useEffect(()=>{if(!t)return;const e=d=>{f.current?.contains(d.target)||j.current?.contains(d.target)||l(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[t]);const R=s.useCallback(()=>{if(!f.current)return;const e=f.current.getBoundingClientRect();L({top:e.bottom+4,left:e.left,minWidth:e.width})},[]);s.useEffect(()=>{t&&(R(),y(""),requestAnimationFrame(()=>N.current?.focus()))},[t,R]);const h=c.find(e=>e.value===n),p=s.useMemo(()=>{const e=w.toLowerCase();return[...e?c.filter(o=>o.label.toLowerCase().includes(e)||o.value.toLowerCase().includes(e)):c].sort((o,b)=>{const k=x.has(o.value)?0:1,E=x.has(b.value)?0:1;return k!==E?k-E:o.label.localeCompare(b.label)})},[c,w,x]);s.useEffect(()=>{if(t&&n&&g.current){const e=g.current.querySelector(`[data-value="${CSS.escape(n)}"]`);e&&e.scrollIntoView({block:"nearest"})}},[t,n]);const W=t?P.createPortal(r.jsxs("div",{ref:j,className:"fixed z-[100] bg-white border border-[#d4d2cd] rounded shadow-lg",style:{top:m.top,left:m.left,minWidth:m.minWidth,width:a?"max-content":m.minWidth},children:[r.jsx("div",{className:"p-1.5 border-b border-[#e8e6e1]",children:r.jsx("input",{ref:N,type:"text",value:w,onChange:e=>y(e.target.value),placeholder:"Search...",className:"w-full px-2 py-1.5 text-xs text-[#2c2c2c] font-sans bg-[#f5f4f0] border border-[#e8e6e1] rounded focus:outline-none focus:border-[#2b5ea7] placeholder:text-[#9c9890]",onKeyDown:e=>{e.key==="Escape"&&l(!1),e.key==="Enter"&&p.length>0&&(i(p[0].value),l(!1))}})}),r.jsx("div",{ref:g,className:"max-h-[280px] overflow-y-auto",children:p.length===0?r.jsx("div",{className:"px-3 py-3 text-xs text-[#9c9890] text-center",children:"No projects found"}):p.map(e=>{const d=e.value===n,o=x.has(e.value);return r.jsxs("div",{"data-value":e.value,className:`flex items-center gap-1.5 px-2 py-1.5 text-xs font-sans cursor-pointer transition-colors ${d?"bg-[#2b5ea7]/10 text-[#2b5ea7]":"text-[#2c2c2c] hover:bg-[#f5f4f0]"}`,onClick:()=>{i(e.value),l(!1)},children:[r.jsx("button",{type:"button",onClick:b=>{b.stopPropagation(),C(e.value)},className:`shrink-0 w-4 h-4 flex items-center justify-center text-[10px] transition-colors ${o?"text-[#d4a017]":"text-[#d4d2cd] hover:text-[#9c9890]"}`,title:o?"Unstar":"Star to pin to top",children:o?"★":"☆"}),r.jsx("span",{className:a?"whitespace-nowrap":"truncate flex-1",children:e.label})]},e.value)})})]}),document.body):null;return r.jsxs(r.Fragment,{children:[r.jsxs("button",{ref:f,type:"button",onClick:()=>!u&&l(!t),disabled:u,className:"w-full bg-white border border-[#d4d2cd] rounded px-3 py-2 text-xs text-[#2c2c2c] font-sans text-left flex items-center justify-between focus:outline-none focus:border-[#2b5ea7] hover:border-[#b0ada6] transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:[r.jsx("span",{className:h?"text-[#2c2c2c] truncate":"text-[#9c9890]",children:h?h.displayLabel??h.label:S}),r.jsx("span",{className:"text-[#9c9890] text-[10px] ml-2 shrink-0 transition-transform duration-200",style:{transform:t?"rotate(180deg)":"rotate(0deg)"},children:"▾"})]}),W]})}export{I as S,P as r,$ as u};
@@ -1 +1 @@
1
- import{t as p,r as g,j as e,S as T,c as _,b as i,C as K,A as B,u as ee,d as se,W as q,M as te}from"./index-CFCII-7S.js";import{S as ne}from"./SearchableSelect-Dguq3D_c.js";function Z({type:s,label:n}){const o=p.useUtils(),{data:a,isLoading:c}=p.settings.getApiKey.useQuery(s),m=p.settings.saveApiKey.useMutation({onSuccess:()=>o.settings.getApiKey.invalidate(s)}),x=p.settings.removeApiKey.useMutation({onSuccess:()=>o.settings.getApiKey.invalidate(s)}),[d,r]=g.useState(!1),[h,l]=g.useState(""),[f,v]=g.useState(!1);async function N(){await m.mutateAsync({type:s,apiKey:h}),l(""),r(!1)}async function u(){await x.mutateAsync(s),r(!1),v(!1)}return c?e.jsx("div",{className:"px-4 py-3",children:e.jsx(T,{size:"sm"})}):e.jsxs("div",{className:"px-4 py-3",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("span",{className:"text-sm font-medium w-24 shrink-0",children:n}),e.jsx("span",{className:i.maskedKey+" flex-1 truncate",style:a?{color:_.success}:void 0,children:a?a.maskedApiKey:"Not configured"}),!d&&e.jsx("button",{onClick:()=>{l(""),r(!0)},className:i.secondaryBtn+" text-xs px-3 py-1",children:a?"Edit":"Add"})]}),d&&e.jsxs("div",{className:"mt-3 pt-3 border-t border-[#e8e6e1] space-y-2",children:[e.jsx("input",{type:h?"password":"text",value:h,onChange:b=>l(b.target.value),placeholder:a?.maskedApiKey??"Enter API key",className:i.input}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:N,disabled:!h||m.isPending,className:i.primaryBtn+" text-xs px-3 py-1",children:m.isPending?e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx(T,{size:"sm"})," Saving..."]}):"Save"}),e.jsx("button",{onClick:()=>r(!1),disabled:m.isPending,className:i.secondaryBtn+" text-xs px-3 py-1",children:"Cancel"}),a&&e.jsx("button",{onClick:()=>v(!0),disabled:x.isPending,className:i.dangerBtn+" text-xs px-3 py-1",children:"Remove"})]})]}),e.jsx(K,{open:f,title:"Remove API key",message:`Remove the ${n} API key?`,confirmLabel:"Remove",onConfirm:u,onCancel:()=>v(!1)})]})}function ie({configuredProviders:s}){return e.jsx("div",{className:"border-t border-[#e8e6e1]",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:i.tableHeaderRow,children:[e.jsx("th",{className:i.tableHeaderCell+" text-xs py-2",children:"Model"}),e.jsx("th",{className:i.tableHeaderCell+" text-xs py-2",children:"Provider"}),e.jsx("th",{className:i.tableHeaderCell+" text-xs py-2 text-right",children:"Input ($/M)"}),e.jsx("th",{className:i.tableHeaderCell+" text-xs py-2 text-right",children:"Output ($/M)"})]})}),e.jsx("tbody",{className:"divide-y divide-[#e8e6e1]",children:B.map(n=>{const o=s.has(n.provider);return e.jsxs("tr",{style:o?{color:_.success}:{color:_.inkFaint},children:[e.jsx("td",{className:"px-4 py-2 font-mono text-xs",children:n.modelId}),e.jsx("td",{className:"px-4 py-2 capitalize",children:n.provider}),e.jsxs("td",{className:"px-4 py-2 text-right font-mono text-xs",children:["$",n.inputPrice.toFixed(2)]}),e.jsxs("td",{className:"px-4 py-2 text-right font-mono text-xs",children:["$",n.outputPrice.toFixed(2)]})]},n.modelId)})})]})})}function ae(){const[s,n]=g.useState(!1),o=ee();return e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"max-w-lg bg-white border border-[#d4d2cd] rounded divide-y divide-[#e8e6e1] overflow-hidden",children:[e.jsx(Z,{type:"anthropic",label:"Anthropic"}),e.jsx(Z,{type:"google",label:"Google AI"})]}),e.jsxs("div",{className:"bg-white border border-[#d4d2cd] rounded overflow-hidden",children:[e.jsxs("button",{onClick:()=>n(!s),className:"w-full flex items-center justify-between px-4 py-3 text-sm text-[#666666] hover:bg-[#f5f4f0] transition-colors font-sans",children:[e.jsx("span",{className:"font-medium",children:"Model Pricing"}),e.jsx("span",{className:"text-xs transition-transform duration-200",style:{transform:s?"rotate(180deg)":"rotate(0deg)"},children:"▾"})]}),s&&e.jsx(ie,{configuredProviders:o})]})]})}function oe({status:s,label:n}){return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:`inline-block h-2 w-2 rounded-full ${i.statusDot[s]}`}),n&&e.jsx("span",{className:i.statusLabel,children:n})]})}const U=`${B[1]?.provider??B[0].provider}:${B[1]?.modelId??B[0].modelId}`;function le({providerType:s}){const n=p.useUtils(),{data:o,isLoading:a}=p.settings.getSubAgentModel.useQuery(s),c=p.settings.saveSubAgentModel.useMutation({onSuccess:()=>n.settings.getSubAgentModel.invalidate(s)}),m=se(),x=o?`${o.provider}:${o.modelId}`:U,d=m.some(l=>`${l.provider}:${l.modelId}`===x),r=d?x:`${m[0].provider}:${m[0].modelId}`;if(g.useEffect(()=>{!a&&o&&!d&&c.mutate({providerType:s,model:null})},[a,d]),a)return null;function h(l){if(l===U&&!o)return;const f=m.find(v=>`${v.provider}:${v.modelId}`===l);f&&(l===U?c.mutate({providerType:s,model:null}):c.mutate({providerType:s,model:{provider:f.provider,modelId:f.modelId}}))}return e.jsxs("div",{className:"flex items-center gap-3 mt-3 pt-3 border-t border-[#d4d2cd]",children:[e.jsx("span",{className:"text-xs text-[#666666] whitespace-nowrap w-14",children:"Model"}),e.jsxs("div",{className:"relative flex-1",children:[e.jsx("select",{value:r,onChange:l=>h(l.target.value),disabled:c.isPending,className:"w-full appearance-none bg-white border border-[#d4d2cd] rounded px-3 py-2 pr-7 text-xs text-[#2c2c2c] focus:outline-none focus:border-[#2b5ea7] font-sans disabled:opacity-50 disabled:cursor-not-allowed",children:m.map(l=>e.jsx("option",{value:`${l.provider}:${l.modelId}`,children:l.modelId},`${l.provider}:${l.modelId}`))}),e.jsx("span",{className:"pointer-events-none absolute right-2 top-1/2 -translate-y-1/2 text-[#9c9890] text-[10px]",children:"▾"})]})]})}function re({existingConfig:s}){const n=p.useUtils(),{data:o,isLoading:a}=p.provider.listGcpProjects.useQuery(void 0,{staleTime:q.updateCheckStaleTimeMs}),c=p.provider.saveConfig.useMutation({onSuccess:()=>{n.provider.getConfigs.invalidate(),n.provider.list.invalidate()}}),m=g.useMemo(()=>(o??[]).map(r=>({value:r.projectId,label:r.name?`${r.name} (${r.projectId})`:r.projectId,displayLabel:r.name||r.projectId})),[o]),x=s.projectId??"";function d(r){r!==x&&c.mutate({type:"gcp",config:{...s,projectId:r}})}return e.jsxs("div",{className:"flex items-center gap-3 mt-3 pt-3 border-t border-[#d4d2cd]",children:[e.jsx("span",{className:"text-xs text-[#666666] whitespace-nowrap w-14",children:"Project"}),e.jsx("div",{className:"flex-1",children:e.jsx(ne,{options:m,value:x,onChange:d,placeholder:a?"Loading...":"Select project...",storageKey:"gcp-projectId",fitContent:!0,disabled:a||c.isPending})})]})}function ce({checked:s,onChange:n,disabled:o,"aria-label":a}){return e.jsx("button",{type:"button",role:"switch","aria-checked":s,"aria-label":a,disabled:o,onClick:()=>n(!s),className:`relative inline-flex h-5 w-9 items-center rounded-full transition-colors ${s?"bg-[#2b5ea7]":"bg-[#d4d2cd]"} ${o?"opacity-50 cursor-not-allowed":"cursor-pointer"}`,children:e.jsx("span",{className:`inline-block h-3.5 w-3.5 rounded-full bg-white transition-transform ${s?"translate-x-[18px]":"translate-x-[3px]"}`})})}function de({type:s,label:n,connected:o,configured:a,onConfigure:c,onToggle:m,togglePending:x,toggleError:d,pingError:r,hasConfigFields:h,existingConfig:l}){const f=a||o;return e.jsxs("div",{className:i.settingsCard+" w-80",children:[e.jsxs("div",{className:"flex items-center justify-between gap-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ce,{checked:a,onChange:v=>{v&&h?c():m(v)},disabled:x}),e.jsx("span",{className:"font-medium",children:n}),f?e.jsx(oe,{status:o?"connected":"disconnected"}):e.jsx("span",{className:"text-xs opacity-40",children:"Not configured"})]}),e.jsx("button",{onClick:c,className:`${i.secondaryBtn} ${a&&h?"":"invisible"}`,children:"Edit"})]}),f&&e.jsx(le,{providerType:s}),f&&s==="gcp"&&l&&e.jsx(re,{existingConfig:l}),r&&!o&&e.jsx("p",{className:i.warnText+" mt-2",children:r}),d&&e.jsx("p",{className:i.errorText+" mt-2",children:d})]})}function H(s,n){return!!s&&!!n&&s===n}function ue({open:s,label:n,configFields:o,formValues:a,onFormChange:c,existingConfig:m,saveResult:x,savePending:d,configured:r,onSave:h,onClose:l,onRemove:f}){const v=o.some(u=>u.required!==!1&&u.type==="password"&&H(a[u.key],m?.[u.key])),N=o.some(u=>u.required!==!1&&!a[u.key]);return e.jsxs(te,{open:s,onClose:l,children:[e.jsxs("div",{className:i.dialogTitle+" text-base mb-4",children:["Configure ",n]}),e.jsx("div",{className:"space-y-3",children:o.map(u=>{const b=u.type==="password"&&H(a[u.key],m?.[u.key]);return e.jsxs("div",{children:[e.jsxs("label",{className:i.sectionTitle,children:[u.label,u.required===!1&&e.jsx("span",{className:"text-xs opacity-40 ml-1",children:"(optional)"})]}),e.jsx("input",{type:u.type==="password"&&a[u.key]&&!b?"password":"text",value:a[u.key]??"",onChange:S=>c(u.key,S.target.value),onFocus:S=>{b&&S.target.select()},placeholder:`Enter ${u.label.toLowerCase()}`,className:`${i.input} ${b?"!text-[#999] !border-l-2 !border-l-amber-400":""}`})]},u.key)})}),e.jsxs("div",{className:"flex items-center gap-2 mt-4 pt-4 border-t border-[#d4d2cd]",children:[e.jsx("button",{onClick:h,disabled:N||v||d,className:i.primaryBtn,children:d?e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx(T,{size:"sm"})," Saving..."]}):"Save & Test"}),e.jsx("button",{onClick:l,disabled:d,className:i.secondaryBtn,children:"Cancel"}),r&&e.jsx("button",{onClick:f,disabled:d,className:i.dangerBtn,children:"Remove"})]}),v&&!d&&!x&&e.jsx("p",{className:"mt-2 text-xs text-amber-600",children:"Re-enter highlighted fields to save"}),x&&e.jsx("div",{className:`mt-3 ${x.success?i.successText:i.errorText}`,children:x.success?"Connected successfully":x.error||"Connection failed"})]})}function me(s,n){const o={};for(const a of s)o[a.key]=n?.[a.key]??"";return o}function xe(){const s=p.useUtils(),{data:n,isLoading:o}=p.provider.list.useQuery(),{data:a,isLoading:c}=p.provider.getConfigs.useQuery(),{data:m,isLoading:x}=p.provider.getRegisteredTypes.useQuery(),{data:d}=p.provider.ping.useQuery(void 0,{staleTime:q.sessionStaleTimeMs,refetchOnMount:"always"}),r=p.provider.saveConfig.useMutation({onSuccess:()=>{s.provider.list.invalidate(),s.provider.getConfigs.invalidate(),s.provider.ping.invalidate()}}),h=p.provider.removeConfig.useMutation({onSuccess:()=>{s.provider.list.invalidate(),s.provider.getConfigs.invalidate(),s.provider.ping.invalidate()}}),[l,f]=g.useState(null),[v,N]=g.useState({}),[u,b]=g.useState(null),[S,A]=g.useState(null),[k,j]=g.useState({});function P(t){const y=a?.find(w=>w.type===t),C=m?.find(w=>w.type===t);N(me(C?.configFields??[],y?.config)),b(null),f(t)}function E(){f(null),N({}),b(null)}async function R(t){b(null);try{const y=await r.mutateAsync({type:t,config:v});b(y),y.success&&(f(null),N({}))}catch{b({success:!1,error:"Failed to save configuration"})}}async function z(t,y){if(y){j(C=>{const w={...C};return delete w[t],w});try{const C=await r.mutateAsync({type:t,config:{}});C.success||j(w=>({...w,[t]:C.error??"Connection failed"}))}catch{j(C=>({...C,[t]:"Failed to save configuration"}))}}else A(t)}async function F(t){await h.mutateAsync(t),f(null),N({}),b(null),A(null)}const O=o||c||x,$=m??[];if(O)return e.jsx(T,{size:"lg",centered:!0});const M=l?$.find(t=>t.type===l):null,D=l?a?.find(t=>t.type===l):null;return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"flex flex-wrap gap-3",children:$.map(({type:t,label:y,configFields:C})=>{const w=n?.find(I=>I.type===t),Q=a?.find(I=>I.type===t),W=!!Q,L=d?.find(I=>I.type===t),Y=L?L.ok:!!w?.connected,J=C.length>0,X=L&&!L.ok?L.error:void 0;return e.jsx(de,{type:t,label:y,connected:Y,configured:W,onConfigure:()=>P(t),onToggle:I=>z(t,I),togglePending:r.isPending||h.isPending,toggleError:k[t],pingError:X,hasConfigFields:J,existingConfig:Q?.config},t)})}),l&&M&&e.jsx(ue,{open:!0,label:M.label,configFields:M.configFields,formValues:v,onFormChange:(t,y)=>N(C=>({...C,[t]:y})),existingConfig:D?.config??null,saveResult:u,savePending:r.isPending,configured:!!D,onSave:()=>R(l),onClose:E,onRemove:()=>A(l)}),e.jsx(K,{open:S!==null,title:"Disable provider",message:`Disable ${$.find(t=>t.type===S)?.label??S}?`,confirmLabel:"Disable",onConfirm:()=>{S&&F(S)},onCancel:()=>A(null)})]})}function pe({memory:s,editingId:n,editNote:o,setEditNote:a,onUpdate:c,onCancelEdit:m,onStartEdit:x,onDelete:d,updatePending:r,removePending:h}){return e.jsxs("li",{className:"flex items-start justify-between gap-3 py-1.5 border-b border-[#d4d2cd] last:border-b-0",children:[e.jsx("div",{className:"flex-1 min-w-0",children:n===s.id?e.jsxs("div",{className:"space-y-2",children:[e.jsx("input",{type:"text",value:o,onChange:l=>a(l.target.value),className:i.input}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:()=>c(s.id),disabled:!o||r,className:i.primaryBtn,children:"Save"}),e.jsx("button",{onClick:m,disabled:r,className:i.secondaryBtn,children:"Cancel"})]})]}):e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-sm text-[#444444]",children:s.note}),s.reviewNote&&e.jsx("p",{className:"text-xs text-[#9c9890] italic mt-0.5",children:s.reviewNote}),e.jsx("p",{className:"text-xs text-[#666666] mt-0.5",children:new Date(s.createdAt*1e3).toLocaleDateString()})]})}),n!==s.id&&e.jsxs("div",{className:"flex items-center gap-1 shrink-0",children:[e.jsx("button",{onClick:()=>x(s.id,s.note),className:i.secondaryBtn,children:"Edit"}),e.jsx("button",{onClick:()=>d(s.id),disabled:h,className:i.dangerBtn,children:"Delete"})]})]})}function ge(){const s=p.useUtils(),{data:n,isLoading:o}=p.memory.list.useQuery(),{data:a}=p.provider.getRegisteredTypes.useQuery(),c=p.memory.create.useMutation({onSuccess:()=>{s.memory.list.invalidate(),E(""),j("unified"),A(!1)}}),m=p.memory.update.useMutation({onSuccess:()=>s.memory.list.invalidate()}),x=p.memory.remove.useMutation({onSuccess:()=>s.memory.list.invalidate()}),[d,r]=g.useState(null),h=p.memory.optimize.useMutation({onSuccess:t=>{s.memory.list.invalidate(),r(t.stats)}}),[l,f]=g.useState(null),[v,N]=g.useState(""),[u,b]=g.useState(null),[S,A]=g.useState(!1),[k,j]=g.useState("unified"),[P,E]=g.useState("");function R(t,y){f(t),N(y)}async function z(t){await m.mutateAsync({id:t,note:v}),f(null),N("")}function F(){f(null),N("")}const O=[{value:"unified",label:"Unified"},...(a??[]).map(t=>({value:t.type,label:t.label}))],$=5;if(o)return e.jsx(T,{size:"lg",centered:!0});const M=new Map;if(n)for(const t of n){const y=M.get(t.toolName)??[];y.push(t),M.set(t.toolName,y)}const D={editingId:l,editNote:v,setEditNote:N,onUpdate:z,onCancelEdit:F,onStartEdit:R,onDelete:t=>b(t),updatePending:m.isPending,removePending:x.isPending};return e.jsxs("div",{className:"space-y-4",children:[S?e.jsxs("div",{className:i.settingsCard+" space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("label",{className:"text-sm font-medium text-[#666666] font-sans",children:"Provider"}),e.jsx("select",{value:k,onChange:t=>{j(t.target.value),t.target.blur()},className:"bg-white border border-[#d4d2cd] rounded px-3 py-2 pr-8 text-sm text-[#2c2c2c] focus:outline-none focus:border-[#2b5ea7] font-sans appearance-none bg-[length:16px_16px] bg-[right_8px_center] bg-no-repeat",style:{backgroundImage:`url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23666666' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E")`},children:O.map(t=>e.jsx("option",{value:t.value,children:t.label},t.value))})]}),e.jsxs("div",{children:[e.jsx("label",{className:i.sectionTitle,children:"Note"}),e.jsx("input",{type:"text",value:P,onChange:t=>E(t.target.value),onKeyDown:t=>{t.key==="Enter"&&P.trim()&&!c.isPending&&c.mutate({toolName:k,note:P})},placeholder:"Reusable lesson or pattern...",className:i.input})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:()=>c.mutate({toolName:k,note:P}),disabled:!P.trim()||c.isPending,className:i.primaryBtn,children:c.isPending?e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx(T,{size:"sm"})," Saving..."]}):"Save"}),e.jsx("button",{onClick:()=>{A(!1),E(""),j("unified")},disabled:c.isPending,className:i.secondaryBtn,children:"Cancel"})]})]}):e.jsx("button",{onClick:()=>A(!0),className:i.secondaryBtn,children:"+ Add Memory"}),M.size===0&&e.jsx("div",{className:i.settingsCard,children:e.jsx("p",{className:"text-sm text-[#666666]",children:"No memories yet. The agent will save notes here as it learns from tool usage."})}),[...M.entries()].map(([t,y])=>{const C=y.length>$;return e.jsxs("div",{className:i.settingsCard,children:[e.jsxs("div",{className:"mb-3 flex items-center gap-2",children:[e.jsx("span",{className:`${i.badge} ${i.badgeVariants.info}`,children:t}),C&&e.jsxs("span",{className:"text-xs text-[#666666]",children:[y.length," memories"]}),e.jsx("button",{onClick:()=>h.mutate({toolName:t}),disabled:h.isPending||y.length===0,className:`ml-auto ${i.outlineBtn}`,title:"Optimize memories with AI",children:h.isPending&&h.variables?.toolName===t?e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(T,{size:"sm"})," Optimizing..."]}):"Optimize"})]}),e.jsx("ul",{className:`space-y-2${C?" max-h-64 overflow-y-auto":""}`,children:y.map(w=>e.jsx(pe,{memory:w,...D},w.id))})]},t)}),e.jsx(K,{open:u!==null,title:"Delete memory",message:"Delete this agent memory?",onConfirm:()=>{u!==null&&x.mutate({id:u}),b(null)},onCancel:()=>b(null)}),e.jsx(K,{open:d!==null,title:"Optimization Complete",message:d&&e.jsxs("div",{className:"space-y-1.5 text-sm text-[#444444]",children:[e.jsxs("p",{children:["Kept: ",e.jsx("span",{className:"font-medium",children:d.kept})]}),e.jsxs("p",{children:["Updated: ",e.jsx("span",{className:"font-medium",children:d.updated})]}),e.jsxs("p",{children:["Deleted: ",e.jsx("span",{className:"font-medium",children:d.deleted})]})]}),confirmLabel:"OK",cancelLabel:null,confirmStyle:"primary",onConfirm:()=>r(null),onCancel:()=>r(null)})]})}const G=["Pacific/Auckland","Australia/Sydney","Asia/Tokyo","Asia/Shanghai","Asia/Kolkata","Asia/Dubai","Europe/Moscow","Europe/Berlin","UTC","Europe/London","America/Sao_Paulo","America/New_York","America/Chicago","America/Denver","America/Los_Angeles","Pacific/Honolulu"];function V(s){try{const n=new Intl.DateTimeFormat("en-US",{timeZone:s,timeZoneName:"short"}).formatToParts(new Date).find(a=>a.type==="timeZoneName")?.value??"",o=new Intl.DateTimeFormat("en-US",{timeZone:s,timeZoneName:"shortOffset"}).formatToParts(new Date).find(a=>a.type==="timeZoneName")?.value??"";return`${n} (${o})`}catch{return s}}const he=new Map(G.map(s=>[s,V(s)]));function fe(){const s=p.useUtils(),{data:n,isLoading:o}=p.settings.getAgentConfig.useQuery(),a=p.settings.saveAgentConfig.useMutation({onSuccess:()=>{s.settings.getAgentConfig.invalidate(),b(!1)}}),[c,m]=g.useState(""),[x,d]=g.useState(100),[r,h]=g.useState(50),[l,f]=g.useState(1024),[v,N]=g.useState(1e4),[u,b]=g.useState(!1);if(g.useEffect(()=>{n&&(m(n.timezone),d(n.directModeMaxSteps),h(n.subAgentMaxSteps),f(n.thinkingBudgetGoogle),N(n.thinkingBudgetAnthropic),b(!1))},[n]),o||!n)return null;const S=u&&(c!==n.timezone||x!==n.directModeMaxSteps||r!==n.subAgentMaxSteps||l!==n.thinkingBudgetGoogle||v!==n.thinkingBudgetAnthropic);function A(){a.mutate({timezone:c,directModeMaxSteps:x,subAgentMaxSteps:r,thinkingBudgetGoogle:l,thinkingBudgetAnthropic:v})}function k(){b(!0)}return e.jsx("div",{className:"max-w-lg",children:e.jsxs("div",{className:i.settingsCard,children:[e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("label",{className:"text-xs text-[#666666] w-44 shrink-0",children:"Timezone"}),e.jsxs("select",{value:c,onChange:j=>{m(j.target.value),k()},className:"appearance-none bg-white border border-[#d4d2cd] rounded px-3 py-1.5 text-xs text-[#2c2c2c] focus:outline-none focus:border-[#2b5ea7] font-sans",children:[G.map(j=>e.jsx("option",{value:j,children:he.get(j)??j},j)),!G.includes(c)&&e.jsx("option",{value:c,children:V(c)})]})]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("label",{className:"text-xs text-[#666666] w-44 shrink-0",children:"Direct mode max steps"}),e.jsx("input",{type:"number",min:1,max:500,value:x,onChange:j=>{d(Number(j.target.value)),k()},className:"w-20 bg-white border border-[#d4d2cd] rounded px-3 py-1.5 text-xs text-[#2c2c2c] focus:outline-none focus:border-[#2b5ea7] font-mono"})]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("label",{className:"text-xs text-[#666666] w-44 shrink-0",children:"Sub-agent max steps"}),e.jsx("input",{type:"number",min:1,max:500,value:r,onChange:j=>{h(Number(j.target.value)),k()},className:"w-20 bg-white border border-[#d4d2cd] rounded px-3 py-1.5 text-xs text-[#2c2c2c] focus:outline-none focus:border-[#2b5ea7] font-mono"})]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("label",{className:"text-xs text-[#666666] w-44 shrink-0",children:"Google thinking budget"}),e.jsx("input",{type:"number",min:0,max:1e5,step:256,value:l,onChange:j=>{f(Number(j.target.value)),k()},className:"w-24 bg-white border border-[#d4d2cd] rounded px-3 py-1.5 text-xs text-[#2c2c2c] focus:outline-none focus:border-[#2b5ea7] font-mono"}),e.jsx("span",{className:"text-[10px] text-[#9c9890]",children:"tokens"})]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("label",{className:"text-xs text-[#666666] w-44 shrink-0",children:"Anthropic thinking budget"}),e.jsx("input",{type:"number",min:0,max:1e5,step:1e3,value:v,onChange:j=>{N(Number(j.target.value)),k()},className:"w-24 bg-white border border-[#d4d2cd] rounded px-3 py-1.5 text-xs text-[#2c2c2c] focus:outline-none focus:border-[#2b5ea7] font-mono"}),e.jsx("span",{className:"text-[10px] text-[#9c9890]",children:"tokens"})]})]}),e.jsxs("div",{className:"flex items-center gap-3 mt-4 pt-3 border-t border-[#e8e6e1]",children:[e.jsx("button",{onClick:A,disabled:!S||a.isPending,className:i.primaryBtn,children:a.isPending?"Saving...":"Save"}),a.isSuccess&&!u&&e.jsx("span",{className:i.successText,children:"Saved"})]})]})})}function be(){return e.jsxs("div",{className:i.page,children:[e.jsxs("div",{children:[e.jsx("h3",{className:i.sectionTitle,children:"LLM API Keys"}),e.jsx(ae,{})]}),e.jsxs("div",{children:[e.jsx("h3",{className:i.sectionTitle,children:"Data Providers"}),e.jsx(xe,{})]}),e.jsxs("div",{children:[e.jsx("h3",{className:i.sectionTitle,children:"Agent Configuration"}),e.jsx(fe,{})]}),e.jsxs("div",{children:[e.jsx("h3",{className:i.sectionTitle,children:"Agent Memory"}),e.jsx(ge,{})]})]})}export{be as Settings};
1
+ import{t as p,r as g,j as e,S as T,c as _,b as i,C as K,A as B,u as ee,d as se,W as q,M as te}from"./index-_7TPlTNo.js";import{S as ne}from"./SearchableSelect-CGq3RJiX.js";function Z({type:s,label:n}){const o=p.useUtils(),{data:a,isLoading:c}=p.settings.getApiKey.useQuery(s),m=p.settings.saveApiKey.useMutation({onSuccess:()=>o.settings.getApiKey.invalidate(s)}),x=p.settings.removeApiKey.useMutation({onSuccess:()=>o.settings.getApiKey.invalidate(s)}),[d,r]=g.useState(!1),[h,l]=g.useState(""),[f,v]=g.useState(!1);async function N(){await m.mutateAsync({type:s,apiKey:h}),l(""),r(!1)}async function u(){await x.mutateAsync(s),r(!1),v(!1)}return c?e.jsx("div",{className:"px-4 py-3",children:e.jsx(T,{size:"sm"})}):e.jsxs("div",{className:"px-4 py-3",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("span",{className:"text-sm font-medium w-24 shrink-0",children:n}),e.jsx("span",{className:i.maskedKey+" flex-1 truncate",style:a?{color:_.success}:void 0,children:a?a.maskedApiKey:"Not configured"}),!d&&e.jsx("button",{onClick:()=>{l(""),r(!0)},className:i.secondaryBtn+" text-xs px-3 py-1",children:a?"Edit":"Add"})]}),d&&e.jsxs("div",{className:"mt-3 pt-3 border-t border-[#e8e6e1] space-y-2",children:[e.jsx("input",{type:h?"password":"text",value:h,onChange:b=>l(b.target.value),placeholder:a?.maskedApiKey??"Enter API key",className:i.input}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:N,disabled:!h||m.isPending,className:i.primaryBtn+" text-xs px-3 py-1",children:m.isPending?e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx(T,{size:"sm"})," Saving..."]}):"Save"}),e.jsx("button",{onClick:()=>r(!1),disabled:m.isPending,className:i.secondaryBtn+" text-xs px-3 py-1",children:"Cancel"}),a&&e.jsx("button",{onClick:()=>v(!0),disabled:x.isPending,className:i.dangerBtn+" text-xs px-3 py-1",children:"Remove"})]})]}),e.jsx(K,{open:f,title:"Remove API key",message:`Remove the ${n} API key?`,confirmLabel:"Remove",onConfirm:u,onCancel:()=>v(!1)})]})}function ie({configuredProviders:s}){return e.jsx("div",{className:"border-t border-[#e8e6e1]",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:i.tableHeaderRow,children:[e.jsx("th",{className:i.tableHeaderCell+" text-xs py-2",children:"Model"}),e.jsx("th",{className:i.tableHeaderCell+" text-xs py-2",children:"Provider"}),e.jsx("th",{className:i.tableHeaderCell+" text-xs py-2 text-right",children:"Input ($/M)"}),e.jsx("th",{className:i.tableHeaderCell+" text-xs py-2 text-right",children:"Output ($/M)"})]})}),e.jsx("tbody",{className:"divide-y divide-[#e8e6e1]",children:B.map(n=>{const o=s.has(n.provider);return e.jsxs("tr",{style:o?{color:_.success}:{color:_.inkFaint},children:[e.jsx("td",{className:"px-4 py-2 font-mono text-xs",children:n.modelId}),e.jsx("td",{className:"px-4 py-2 capitalize",children:n.provider}),e.jsxs("td",{className:"px-4 py-2 text-right font-mono text-xs",children:["$",n.inputPrice.toFixed(2)]}),e.jsxs("td",{className:"px-4 py-2 text-right font-mono text-xs",children:["$",n.outputPrice.toFixed(2)]})]},n.modelId)})})]})})}function ae(){const[s,n]=g.useState(!1),o=ee();return e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"max-w-lg bg-white border border-[#d4d2cd] rounded divide-y divide-[#e8e6e1] overflow-hidden",children:[e.jsx(Z,{type:"anthropic",label:"Anthropic"}),e.jsx(Z,{type:"google",label:"Google AI"})]}),e.jsxs("div",{className:"bg-white border border-[#d4d2cd] rounded overflow-hidden",children:[e.jsxs("button",{onClick:()=>n(!s),className:"w-full flex items-center justify-between px-4 py-3 text-sm text-[#666666] hover:bg-[#f5f4f0] transition-colors font-sans",children:[e.jsx("span",{className:"font-medium",children:"Model Pricing"}),e.jsx("span",{className:"text-xs transition-transform duration-200",style:{transform:s?"rotate(180deg)":"rotate(0deg)"},children:"▾"})]}),s&&e.jsx(ie,{configuredProviders:o})]})]})}function oe({status:s,label:n}){return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:`inline-block h-2 w-2 rounded-full ${i.statusDot[s]}`}),n&&e.jsx("span",{className:i.statusLabel,children:n})]})}const U=`${B[1]?.provider??B[0].provider}:${B[1]?.modelId??B[0].modelId}`;function le({providerType:s}){const n=p.useUtils(),{data:o,isLoading:a}=p.settings.getSubAgentModel.useQuery(s),c=p.settings.saveSubAgentModel.useMutation({onSuccess:()=>n.settings.getSubAgentModel.invalidate(s)}),m=se(),x=o?`${o.provider}:${o.modelId}`:U,d=m.some(l=>`${l.provider}:${l.modelId}`===x),r=d?x:`${m[0].provider}:${m[0].modelId}`;if(g.useEffect(()=>{!a&&o&&!d&&c.mutate({providerType:s,model:null})},[a,d]),a)return null;function h(l){if(l===U&&!o)return;const f=m.find(v=>`${v.provider}:${v.modelId}`===l);f&&(l===U?c.mutate({providerType:s,model:null}):c.mutate({providerType:s,model:{provider:f.provider,modelId:f.modelId}}))}return e.jsxs("div",{className:"flex items-center gap-3 mt-3 pt-3 border-t border-[#d4d2cd]",children:[e.jsx("span",{className:"text-xs text-[#666666] whitespace-nowrap w-14",children:"Model"}),e.jsxs("div",{className:"relative flex-1",children:[e.jsx("select",{value:r,onChange:l=>h(l.target.value),disabled:c.isPending,className:"w-full appearance-none bg-white border border-[#d4d2cd] rounded px-3 py-2 pr-7 text-xs text-[#2c2c2c] focus:outline-none focus:border-[#2b5ea7] font-sans disabled:opacity-50 disabled:cursor-not-allowed",children:m.map(l=>e.jsx("option",{value:`${l.provider}:${l.modelId}`,children:l.modelId},`${l.provider}:${l.modelId}`))}),e.jsx("span",{className:"pointer-events-none absolute right-2 top-1/2 -translate-y-1/2 text-[#9c9890] text-[10px]",children:"▾"})]})]})}function re({existingConfig:s}){const n=p.useUtils(),{data:o,isLoading:a}=p.provider.listGcpProjects.useQuery(void 0,{staleTime:q.updateCheckStaleTimeMs}),c=p.provider.saveConfig.useMutation({onSuccess:()=>{n.provider.getConfigs.invalidate(),n.provider.list.invalidate()}}),m=g.useMemo(()=>(o??[]).map(r=>({value:r.projectId,label:r.name?`${r.name} (${r.projectId})`:r.projectId,displayLabel:r.name||r.projectId})),[o]),x=s.projectId??"";function d(r){r!==x&&c.mutate({type:"gcp",config:{...s,projectId:r}})}return e.jsxs("div",{className:"flex items-center gap-3 mt-3 pt-3 border-t border-[#d4d2cd]",children:[e.jsx("span",{className:"text-xs text-[#666666] whitespace-nowrap w-14",children:"Project"}),e.jsx("div",{className:"flex-1",children:e.jsx(ne,{options:m,value:x,onChange:d,placeholder:a?"Loading...":"Select project...",storageKey:"gcp-projectId",fitContent:!0,disabled:a||c.isPending})})]})}function ce({checked:s,onChange:n,disabled:o,"aria-label":a}){return e.jsx("button",{type:"button",role:"switch","aria-checked":s,"aria-label":a,disabled:o,onClick:()=>n(!s),className:`relative inline-flex h-5 w-9 items-center rounded-full transition-colors ${s?"bg-[#2b5ea7]":"bg-[#d4d2cd]"} ${o?"opacity-50 cursor-not-allowed":"cursor-pointer"}`,children:e.jsx("span",{className:`inline-block h-3.5 w-3.5 rounded-full bg-white transition-transform ${s?"translate-x-[18px]":"translate-x-[3px]"}`})})}function de({type:s,label:n,connected:o,configured:a,onConfigure:c,onToggle:m,togglePending:x,toggleError:d,pingError:r,hasConfigFields:h,existingConfig:l}){const f=a||o;return e.jsxs("div",{className:i.settingsCard+" w-80",children:[e.jsxs("div",{className:"flex items-center justify-between gap-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ce,{checked:a,onChange:v=>{v&&h?c():m(v)},disabled:x}),e.jsx("span",{className:"font-medium",children:n}),f?e.jsx(oe,{status:o?"connected":"disconnected"}):e.jsx("span",{className:"text-xs opacity-40",children:"Not configured"})]}),e.jsx("button",{onClick:c,className:`${i.secondaryBtn} ${a&&h?"":"invisible"}`,children:"Edit"})]}),f&&e.jsx(le,{providerType:s}),f&&s==="gcp"&&l&&e.jsx(re,{existingConfig:l}),r&&!o&&e.jsx("p",{className:i.warnText+" mt-2",children:r}),d&&e.jsx("p",{className:i.errorText+" mt-2",children:d})]})}function H(s,n){return!!s&&!!n&&s===n}function ue({open:s,label:n,configFields:o,formValues:a,onFormChange:c,existingConfig:m,saveResult:x,savePending:d,configured:r,onSave:h,onClose:l,onRemove:f}){const v=o.some(u=>u.required!==!1&&u.type==="password"&&H(a[u.key],m?.[u.key])),N=o.some(u=>u.required!==!1&&!a[u.key]);return e.jsxs(te,{open:s,onClose:l,children:[e.jsxs("div",{className:i.dialogTitle+" text-base mb-4",children:["Configure ",n]}),e.jsx("div",{className:"space-y-3",children:o.map(u=>{const b=u.type==="password"&&H(a[u.key],m?.[u.key]);return e.jsxs("div",{children:[e.jsxs("label",{className:i.sectionTitle,children:[u.label,u.required===!1&&e.jsx("span",{className:"text-xs opacity-40 ml-1",children:"(optional)"})]}),e.jsx("input",{type:u.type==="password"&&a[u.key]&&!b?"password":"text",value:a[u.key]??"",onChange:S=>c(u.key,S.target.value),onFocus:S=>{b&&S.target.select()},placeholder:`Enter ${u.label.toLowerCase()}`,className:`${i.input} ${b?"!text-[#999] !border-l-2 !border-l-amber-400":""}`})]},u.key)})}),e.jsxs("div",{className:"flex items-center gap-2 mt-4 pt-4 border-t border-[#d4d2cd]",children:[e.jsx("button",{onClick:h,disabled:N||v||d,className:i.primaryBtn,children:d?e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx(T,{size:"sm"})," Saving..."]}):"Save & Test"}),e.jsx("button",{onClick:l,disabled:d,className:i.secondaryBtn,children:"Cancel"}),r&&e.jsx("button",{onClick:f,disabled:d,className:i.dangerBtn,children:"Remove"})]}),v&&!d&&!x&&e.jsx("p",{className:"mt-2 text-xs text-amber-600",children:"Re-enter highlighted fields to save"}),x&&e.jsx("div",{className:`mt-3 ${x.success?i.successText:i.errorText}`,children:x.success?"Connected successfully":x.error||"Connection failed"})]})}function me(s,n){const o={};for(const a of s)o[a.key]=n?.[a.key]??"";return o}function xe(){const s=p.useUtils(),{data:n,isLoading:o}=p.provider.list.useQuery(),{data:a,isLoading:c}=p.provider.getConfigs.useQuery(),{data:m,isLoading:x}=p.provider.getRegisteredTypes.useQuery(),{data:d}=p.provider.ping.useQuery(void 0,{staleTime:q.sessionStaleTimeMs,refetchOnMount:"always"}),r=p.provider.saveConfig.useMutation({onSuccess:()=>{s.provider.list.invalidate(),s.provider.getConfigs.invalidate(),s.provider.ping.invalidate()}}),h=p.provider.removeConfig.useMutation({onSuccess:()=>{s.provider.list.invalidate(),s.provider.getConfigs.invalidate(),s.provider.ping.invalidate()}}),[l,f]=g.useState(null),[v,N]=g.useState({}),[u,b]=g.useState(null),[S,A]=g.useState(null),[k,j]=g.useState({});function P(t){const y=a?.find(w=>w.type===t),C=m?.find(w=>w.type===t);N(me(C?.configFields??[],y?.config)),b(null),f(t)}function E(){f(null),N({}),b(null)}async function R(t){b(null);try{const y=await r.mutateAsync({type:t,config:v});b(y),y.success&&(f(null),N({}))}catch{b({success:!1,error:"Failed to save configuration"})}}async function z(t,y){if(y){j(C=>{const w={...C};return delete w[t],w});try{const C=await r.mutateAsync({type:t,config:{}});C.success||j(w=>({...w,[t]:C.error??"Connection failed"}))}catch{j(C=>({...C,[t]:"Failed to save configuration"}))}}else A(t)}async function F(t){await h.mutateAsync(t),f(null),N({}),b(null),A(null)}const O=o||c||x,$=m??[];if(O)return e.jsx(T,{size:"lg",centered:!0});const M=l?$.find(t=>t.type===l):null,D=l?a?.find(t=>t.type===l):null;return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"flex flex-wrap gap-3",children:$.map(({type:t,label:y,configFields:C})=>{const w=n?.find(I=>I.type===t),Q=a?.find(I=>I.type===t),W=!!Q,L=d?.find(I=>I.type===t),Y=L?L.ok:!!w?.connected,J=C.length>0,X=L&&!L.ok?L.error:void 0;return e.jsx(de,{type:t,label:y,connected:Y,configured:W,onConfigure:()=>P(t),onToggle:I=>z(t,I),togglePending:r.isPending||h.isPending,toggleError:k[t],pingError:X,hasConfigFields:J,existingConfig:Q?.config},t)})}),l&&M&&e.jsx(ue,{open:!0,label:M.label,configFields:M.configFields,formValues:v,onFormChange:(t,y)=>N(C=>({...C,[t]:y})),existingConfig:D?.config??null,saveResult:u,savePending:r.isPending,configured:!!D,onSave:()=>R(l),onClose:E,onRemove:()=>A(l)}),e.jsx(K,{open:S!==null,title:"Disable provider",message:`Disable ${$.find(t=>t.type===S)?.label??S}?`,confirmLabel:"Disable",onConfirm:()=>{S&&F(S)},onCancel:()=>A(null)})]})}function pe({memory:s,editingId:n,editNote:o,setEditNote:a,onUpdate:c,onCancelEdit:m,onStartEdit:x,onDelete:d,updatePending:r,removePending:h}){return e.jsxs("li",{className:"flex items-start justify-between gap-3 py-1.5 border-b border-[#d4d2cd] last:border-b-0",children:[e.jsx("div",{className:"flex-1 min-w-0",children:n===s.id?e.jsxs("div",{className:"space-y-2",children:[e.jsx("input",{type:"text",value:o,onChange:l=>a(l.target.value),className:i.input}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:()=>c(s.id),disabled:!o||r,className:i.primaryBtn,children:"Save"}),e.jsx("button",{onClick:m,disabled:r,className:i.secondaryBtn,children:"Cancel"})]})]}):e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-sm text-[#444444]",children:s.note}),s.reviewNote&&e.jsx("p",{className:"text-xs text-[#9c9890] italic mt-0.5",children:s.reviewNote}),e.jsx("p",{className:"text-xs text-[#666666] mt-0.5",children:new Date(s.createdAt*1e3).toLocaleDateString()})]})}),n!==s.id&&e.jsxs("div",{className:"flex items-center gap-1 shrink-0",children:[e.jsx("button",{onClick:()=>x(s.id,s.note),className:i.secondaryBtn,children:"Edit"}),e.jsx("button",{onClick:()=>d(s.id),disabled:h,className:i.dangerBtn,children:"Delete"})]})]})}function ge(){const s=p.useUtils(),{data:n,isLoading:o}=p.memory.list.useQuery(),{data:a}=p.provider.getRegisteredTypes.useQuery(),c=p.memory.create.useMutation({onSuccess:()=>{s.memory.list.invalidate(),E(""),j("unified"),A(!1)}}),m=p.memory.update.useMutation({onSuccess:()=>s.memory.list.invalidate()}),x=p.memory.remove.useMutation({onSuccess:()=>s.memory.list.invalidate()}),[d,r]=g.useState(null),h=p.memory.optimize.useMutation({onSuccess:t=>{s.memory.list.invalidate(),r(t.stats)}}),[l,f]=g.useState(null),[v,N]=g.useState(""),[u,b]=g.useState(null),[S,A]=g.useState(!1),[k,j]=g.useState("unified"),[P,E]=g.useState("");function R(t,y){f(t),N(y)}async function z(t){await m.mutateAsync({id:t,note:v}),f(null),N("")}function F(){f(null),N("")}const O=[{value:"unified",label:"Unified"},...(a??[]).map(t=>({value:t.type,label:t.label}))],$=5;if(o)return e.jsx(T,{size:"lg",centered:!0});const M=new Map;if(n)for(const t of n){const y=M.get(t.toolName)??[];y.push(t),M.set(t.toolName,y)}const D={editingId:l,editNote:v,setEditNote:N,onUpdate:z,onCancelEdit:F,onStartEdit:R,onDelete:t=>b(t),updatePending:m.isPending,removePending:x.isPending};return e.jsxs("div",{className:"space-y-4",children:[S?e.jsxs("div",{className:i.settingsCard+" space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("label",{className:"text-sm font-medium text-[#666666] font-sans",children:"Provider"}),e.jsx("select",{value:k,onChange:t=>{j(t.target.value),t.target.blur()},className:"bg-white border border-[#d4d2cd] rounded px-3 py-2 pr-8 text-sm text-[#2c2c2c] focus:outline-none focus:border-[#2b5ea7] font-sans appearance-none bg-[length:16px_16px] bg-[right_8px_center] bg-no-repeat",style:{backgroundImage:`url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23666666' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E")`},children:O.map(t=>e.jsx("option",{value:t.value,children:t.label},t.value))})]}),e.jsxs("div",{children:[e.jsx("label",{className:i.sectionTitle,children:"Note"}),e.jsx("input",{type:"text",value:P,onChange:t=>E(t.target.value),onKeyDown:t=>{t.key==="Enter"&&P.trim()&&!c.isPending&&c.mutate({toolName:k,note:P})},placeholder:"Reusable lesson or pattern...",className:i.input})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:()=>c.mutate({toolName:k,note:P}),disabled:!P.trim()||c.isPending,className:i.primaryBtn,children:c.isPending?e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx(T,{size:"sm"})," Saving..."]}):"Save"}),e.jsx("button",{onClick:()=>{A(!1),E(""),j("unified")},disabled:c.isPending,className:i.secondaryBtn,children:"Cancel"})]})]}):e.jsx("button",{onClick:()=>A(!0),className:i.secondaryBtn,children:"+ Add Memory"}),M.size===0&&e.jsx("div",{className:i.settingsCard,children:e.jsx("p",{className:"text-sm text-[#666666]",children:"No memories yet. The agent will save notes here as it learns from tool usage."})}),[...M.entries()].map(([t,y])=>{const C=y.length>$;return e.jsxs("div",{className:i.settingsCard,children:[e.jsxs("div",{className:"mb-3 flex items-center gap-2",children:[e.jsx("span",{className:`${i.badge} ${i.badgeVariants.info}`,children:t}),C&&e.jsxs("span",{className:"text-xs text-[#666666]",children:[y.length," memories"]}),e.jsx("button",{onClick:()=>h.mutate({toolName:t}),disabled:h.isPending||y.length===0,className:`ml-auto ${i.outlineBtn}`,title:"Optimize memories with AI",children:h.isPending&&h.variables?.toolName===t?e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(T,{size:"sm"})," Optimizing..."]}):"Optimize"})]}),e.jsx("ul",{className:`space-y-2${C?" max-h-64 overflow-y-auto":""}`,children:y.map(w=>e.jsx(pe,{memory:w,...D},w.id))})]},t)}),e.jsx(K,{open:u!==null,title:"Delete memory",message:"Delete this agent memory?",onConfirm:()=>{u!==null&&x.mutate({id:u}),b(null)},onCancel:()=>b(null)}),e.jsx(K,{open:d!==null,title:"Optimization Complete",message:d&&e.jsxs("div",{className:"space-y-1.5 text-sm text-[#444444]",children:[e.jsxs("p",{children:["Kept: ",e.jsx("span",{className:"font-medium",children:d.kept})]}),e.jsxs("p",{children:["Updated: ",e.jsx("span",{className:"font-medium",children:d.updated})]}),e.jsxs("p",{children:["Deleted: ",e.jsx("span",{className:"font-medium",children:d.deleted})]})]}),confirmLabel:"OK",cancelLabel:null,confirmStyle:"primary",onConfirm:()=>r(null),onCancel:()=>r(null)})]})}const G=["Pacific/Auckland","Australia/Sydney","Asia/Tokyo","Asia/Shanghai","Asia/Kolkata","Asia/Dubai","Europe/Moscow","Europe/Berlin","UTC","Europe/London","America/Sao_Paulo","America/New_York","America/Chicago","America/Denver","America/Los_Angeles","Pacific/Honolulu"];function V(s){try{const n=new Intl.DateTimeFormat("en-US",{timeZone:s,timeZoneName:"short"}).formatToParts(new Date).find(a=>a.type==="timeZoneName")?.value??"",o=new Intl.DateTimeFormat("en-US",{timeZone:s,timeZoneName:"shortOffset"}).formatToParts(new Date).find(a=>a.type==="timeZoneName")?.value??"";return`${n} (${o})`}catch{return s}}const he=new Map(G.map(s=>[s,V(s)]));function fe(){const s=p.useUtils(),{data:n,isLoading:o}=p.settings.getAgentConfig.useQuery(),a=p.settings.saveAgentConfig.useMutation({onSuccess:()=>{s.settings.getAgentConfig.invalidate(),b(!1)}}),[c,m]=g.useState(""),[x,d]=g.useState(100),[r,h]=g.useState(50),[l,f]=g.useState(1024),[v,N]=g.useState(1e4),[u,b]=g.useState(!1);if(g.useEffect(()=>{n&&(m(n.timezone),d(n.directModeMaxSteps),h(n.subAgentMaxSteps),f(n.thinkingBudgetGoogle),N(n.thinkingBudgetAnthropic),b(!1))},[n]),o||!n)return null;const S=u&&(c!==n.timezone||x!==n.directModeMaxSteps||r!==n.subAgentMaxSteps||l!==n.thinkingBudgetGoogle||v!==n.thinkingBudgetAnthropic);function A(){a.mutate({timezone:c,directModeMaxSteps:x,subAgentMaxSteps:r,thinkingBudgetGoogle:l,thinkingBudgetAnthropic:v})}function k(){b(!0)}return e.jsx("div",{className:"max-w-lg",children:e.jsxs("div",{className:i.settingsCard,children:[e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("label",{className:"text-xs text-[#666666] w-44 shrink-0",children:"Timezone"}),e.jsxs("select",{value:c,onChange:j=>{m(j.target.value),k()},className:"appearance-none bg-white border border-[#d4d2cd] rounded px-3 py-1.5 text-xs text-[#2c2c2c] focus:outline-none focus:border-[#2b5ea7] font-sans",children:[G.map(j=>e.jsx("option",{value:j,children:he.get(j)??j},j)),!G.includes(c)&&e.jsx("option",{value:c,children:V(c)})]})]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("label",{className:"text-xs text-[#666666] w-44 shrink-0",children:"Direct mode max steps"}),e.jsx("input",{type:"number",min:1,max:500,value:x,onChange:j=>{d(Number(j.target.value)),k()},className:"w-20 bg-white border border-[#d4d2cd] rounded px-3 py-1.5 text-xs text-[#2c2c2c] focus:outline-none focus:border-[#2b5ea7] font-mono"})]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("label",{className:"text-xs text-[#666666] w-44 shrink-0",children:"Sub-agent max steps"}),e.jsx("input",{type:"number",min:1,max:500,value:r,onChange:j=>{h(Number(j.target.value)),k()},className:"w-20 bg-white border border-[#d4d2cd] rounded px-3 py-1.5 text-xs text-[#2c2c2c] focus:outline-none focus:border-[#2b5ea7] font-mono"})]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("label",{className:"text-xs text-[#666666] w-44 shrink-0",children:"Google thinking budget"}),e.jsx("input",{type:"number",min:0,max:1e5,step:256,value:l,onChange:j=>{f(Number(j.target.value)),k()},className:"w-24 bg-white border border-[#d4d2cd] rounded px-3 py-1.5 text-xs text-[#2c2c2c] focus:outline-none focus:border-[#2b5ea7] font-mono"}),e.jsx("span",{className:"text-[10px] text-[#9c9890]",children:"tokens"})]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("label",{className:"text-xs text-[#666666] w-44 shrink-0",children:"Anthropic thinking budget"}),e.jsx("input",{type:"number",min:0,max:1e5,step:1e3,value:v,onChange:j=>{N(Number(j.target.value)),k()},className:"w-24 bg-white border border-[#d4d2cd] rounded px-3 py-1.5 text-xs text-[#2c2c2c] focus:outline-none focus:border-[#2b5ea7] font-mono"}),e.jsx("span",{className:"text-[10px] text-[#9c9890]",children:"tokens"})]})]}),e.jsxs("div",{className:"flex items-center gap-3 mt-4 pt-3 border-t border-[#e8e6e1]",children:[e.jsx("button",{onClick:A,disabled:!S||a.isPending,className:i.primaryBtn,children:a.isPending?"Saving...":"Save"}),a.isSuccess&&!u&&e.jsx("span",{className:i.successText,children:"Saved"})]})]})})}function be(){return e.jsxs("div",{className:i.page,children:[e.jsxs("div",{children:[e.jsx("h3",{className:i.sectionTitle,children:"LLM API Keys"}),e.jsx(ae,{})]}),e.jsxs("div",{children:[e.jsx("h3",{className:i.sectionTitle,children:"Data Providers"}),e.jsx(xe,{})]}),e.jsxs("div",{children:[e.jsx("h3",{className:i.sectionTitle,children:"Agent Configuration"}),e.jsx(fe,{})]}),e.jsxs("div",{children:[e.jsx("h3",{className:i.sectionTitle,children:"Agent Memory"}),e.jsx(ge,{})]})]})}export{be as Settings};
@@ -1 +1 @@
1
- import{R as p,L as x,A as d}from"./mermaid-GHXKKRXX-ga384H0G.js";import{r,j as f}from"./index-CFCII-7S.js";import"./SearchableSelect-Dguq3D_c.js";var j=({code:i,language:e,raw:t,className:m,startLine:u,lineNumbers:n,...g})=>{let{shikiTheme:o}=r.useContext(p),a=x(),[h,s]=r.useState(t);return r.useEffect(()=>{if(!a){s(t);return}let l=a.highlight({code:i,language:e,themes:o},c=>{s(c)});l&&s(l)},[i,e,o,a,t]),f.jsx(d,{className:m,language:e,lineNumbers:n,result:h,startLine:u,...g})};export{j as HighlightedCodeBlockBody};
1
+ import{R as p,L as x,A as d}from"./mermaid-GHXKKRXX-D9p_GS3a.js";import{r,j as f}from"./index-_7TPlTNo.js";import"./SearchableSelect-CGq3RJiX.js";var j=({code:i,language:e,raw:t,className:m,startLine:u,lineNumbers:n,...g})=>{let{shikiTheme:o}=r.useContext(p),a=x(),[h,s]=r.useState(t);return r.useEffect(()=>{if(!a){s(t);return}let l=a.highlight({code:i,language:e,themes:o},c=>{s(c)});l&&s(l)},[i,e,o,a,t]),f.jsx(d,{className:m,language:e,lineNumbers:n,result:h,startLine:u,...g})};export{j as HighlightedCodeBlockBody};