agent-relay-server 0.82.0 → 0.83.1
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.
- package/docs/openapi.json +367 -1
- package/package.json +2 -2
- package/public/assets/MessageBubble-BTBQr8uG.js +3 -0
- package/public/assets/MessageBubble-BTBQr8uG.js.map +1 -0
- package/public/assets/{PlanGraphPanel-r3aVT4uc.js → PlanGraphPanel-CoWJJVyD.js} +2 -2
- package/public/assets/{PlanGraphPanel-r3aVT4uc.js.map → PlanGraphPanel-CoWJJVyD.js.map} +1 -1
- package/public/assets/activity-XqRFu_9T.js +2 -0
- package/public/assets/{activity-DtMjjws8.js.map → activity-XqRFu_9T.js.map} +1 -1
- package/public/assets/{agent-profiles-eRlq98tp.js → agent-profiles-RFCLAgnC.js} +2 -2
- package/public/assets/{agent-profiles-eRlq98tp.js.map → agent-profiles-RFCLAgnC.js.map} +1 -1
- package/public/assets/{agents-DmbjRTA7.js → agents-BWmmWj4Q.js} +2 -2
- package/public/assets/{agents-DmbjRTA7.js.map → agents-BWmmWj4Q.js.map} +1 -1
- package/public/assets/{analytics-BW7ik_Ws.js → analytics-2H2z2UNS.js} +3 -3
- package/public/assets/{analytics-BW7ik_Ws.js.map → analytics-2H2z2UNS.js.map} +1 -1
- package/public/assets/{automation-CxwGXWC7.js → automation-DRtOENs0.js} +2 -2
- package/public/assets/{automation-CxwGXWC7.js.map → automation-DRtOENs0.js.map} +1 -1
- package/public/assets/{badge-BwaoBnNO.js → badge-CK6ejiOh.js} +2 -2
- package/public/assets/{badge-BwaoBnNO.js.map → badge-CK6ejiOh.js.map} +1 -1
- package/public/assets/branch-state-badge-DxwNcWr8.js +2 -0
- package/public/assets/{branch-state-badge-CvdKPTlV.js.map → branch-state-badge-DxwNcWr8.js.map} +1 -1
- package/public/assets/{button-CFIklTDX.js → button-BAwKuRIq.js} +2 -2
- package/public/assets/{button-CFIklTDX.js.map → button-BAwKuRIq.js.map} +1 -1
- package/public/assets/{card-Bi94xEmr.js → card-DDxxo-Fo.js} +2 -2
- package/public/assets/{card-Bi94xEmr.js.map → card-DDxxo-Fo.js.map} +1 -1
- package/public/assets/{channels-D8UY3baa.js → channels-Sh_jdB7y.js} +2 -2
- package/public/assets/{channels-D8UY3baa.js.map → channels-Sh_jdB7y.js.map} +1 -1
- package/public/assets/chat-gfUxbTus.js +2 -0
- package/public/assets/{chat-CCPukbI9.js.map → chat-gfUxbTus.js.map} +1 -1
- package/public/assets/{connectors-W2MslhQ2.js → connectors-C3C4i4Gz.js} +2 -2
- package/public/assets/{connectors-W2MslhQ2.js.map → connectors-C3C4i4Gz.js.map} +1 -1
- package/public/assets/{copy-button-A0pXLXBy.js → copy-button-D3B_s7J7.js} +2 -2
- package/public/assets/{copy-button-A0pXLXBy.js.map → copy-button-D3B_s7J7.js.map} +1 -1
- package/public/assets/display-CWMHll1J.js.map +1 -1
- package/public/assets/{dist--NYpzm4f.js → dist-CAFUEpK2.js} +2 -2
- package/public/assets/{dist--NYpzm4f.js.map → dist-CAFUEpK2.js.map} +1 -1
- package/public/assets/dist-CIbvPDQV.js +2 -0
- package/public/assets/{dist-D3jA_LvQ.js.map → dist-CIbvPDQV.js.map} +1 -1
- package/public/assets/{dist-DY3KCMIN.js → dist-CL2npVDe.js} +2 -2
- package/public/assets/{dist-DY3KCMIN.js.map → dist-CL2npVDe.js.map} +1 -1
- package/public/assets/{dist-DVorlUcA.js → dist-CnRv0y2x.js} +2 -2
- package/public/assets/{dist-DVorlUcA.js.map → dist-CnRv0y2x.js.map} +1 -1
- package/public/assets/dist-CoRABSO3.js +2 -0
- package/public/assets/{dist-rLCXIl7x.js.map → dist-CoRABSO3.js.map} +1 -1
- package/public/assets/{dist-yzKYLD10.js → dist-DLsSqk6h.js} +2 -2
- package/public/assets/{dist-yzKYLD10.js.map → dist-DLsSqk6h.js.map} +1 -1
- package/public/assets/{dist-DhEz6YNy.js → dist-Dmiv1tSO.js} +2 -2
- package/public/assets/{dist-DhEz6YNy.js.map → dist-Dmiv1tSO.js.map} +1 -1
- package/public/assets/dist-DyqEeyBI.js +2 -0
- package/public/assets/{dist-HTxIFS7t.js.map → dist-DyqEeyBI.js.map} +1 -1
- package/public/assets/{dist-_EunAAFX.js → dist-ERYvDMdt.js} +2 -2
- package/public/assets/{dist-_EunAAFX.js.map → dist-ERYvDMdt.js.map} +1 -1
- package/public/assets/{dist-C4VoXCT-.js → dist-YQVQrtnc.js} +2 -2
- package/public/assets/{dist-C4VoXCT-.js.map → dist-YQVQrtnc.js.map} +1 -1
- package/public/assets/{dist-BODiHbq1.js → dist-YjP8Gd1C.js} +2 -2
- package/public/assets/{dist-BODiHbq1.js.map → dist-YjP8Gd1C.js.map} +1 -1
- package/public/assets/{es2015-BDZowz0r.js → es2015-Yto-4EBw.js} +2 -2
- package/public/assets/{es2015-BDZowz0r.js.map → es2015-Yto-4EBw.js.map} +1 -1
- package/public/assets/{formatted-body-impl-tIjgf9Kr.js → formatted-body-impl-DpNHGXXQ.js} +2 -2
- package/public/assets/{formatted-body-impl-tIjgf9Kr.js.map → formatted-body-impl-DpNHGXXQ.js.map} +1 -1
- package/public/assets/index-D8TVUdlC.js +22 -0
- package/public/assets/index-D8TVUdlC.js.map +1 -0
- package/public/assets/index-DgZLDL0K.css +2 -0
- package/public/assets/{input-CD-ZcZIA.js → input-CLW2gDUM.js} +2 -2
- package/public/assets/{input-CD-ZcZIA.js.map → input-CLW2gDUM.js.map} +1 -1
- package/public/assets/{insights-B93PGmKq.js → insights-DPaJ5Hme.js} +2 -2
- package/public/assets/{insights-B93PGmKq.js.map → insights-DPaJ5Hme.js.map} +1 -1
- package/public/assets/{integrations-BfWMAznM.js → integrations-PqWMrPJa.js} +2 -2
- package/public/assets/{integrations-BfWMAznM.js.map → integrations-PqWMrPJa.js.map} +1 -1
- package/public/assets/{lib-BqL6WCDu.js → lib-DdCM7GfN.js} +2 -2
- package/public/assets/{lib-BqL6WCDu.js.map → lib-DdCM7GfN.js.map} +1 -1
- package/public/assets/lucide-react-CsPXvXMC.js +9 -0
- package/public/assets/{lucide-react-D78N6SwK.js.map → lucide-react-CsPXvXMC.js.map} +1 -1
- package/public/assets/{maintenance-CgRASTD0.js → maintenance-DsszLb92.js} +2 -2
- package/public/assets/{maintenance-CgRASTD0.js.map → maintenance-DsszLb92.js.map} +1 -1
- package/public/assets/{managed-agents-B1AdrEv4.js → managed-agents-DqWPxFE0.js} +2 -2
- package/public/assets/{managed-agents-B1AdrEv4.js.map → managed-agents-DqWPxFE0.js.map} +1 -1
- package/public/assets/{markdown-preview-impl-D2zEt-i-.js → markdown-preview-impl-CWR4ILHK.js} +2 -2
- package/public/assets/{markdown-preview-impl-D2zEt-i-.js.map → markdown-preview-impl-CWR4ILHK.js.map} +1 -1
- package/public/assets/memory-C2s9bJ38.js +2 -0
- package/public/assets/{memory-nUBcij_9.js.map → memory-C2s9bJ38.js.map} +1 -1
- package/public/assets/{messages-BNDs53bW.js → messages-DHRJNAvy.js} +2 -2
- package/public/assets/{messages-BNDs53bW.js.map → messages-DHRJNAvy.js.map} +1 -1
- package/public/assets/{orchestrators-BouoI90a.js → orchestrators-BGNNllJc.js} +2 -2
- package/public/assets/{orchestrators-BouoI90a.js.map → orchestrators-BGNNllJc.js.map} +1 -1
- package/public/assets/{overview-C8_hAGpC.js → overview-C1vZfyhW.js} +2 -2
- package/public/assets/{overview-C8_hAGpC.js.map → overview-C1vZfyhW.js.map} +1 -1
- package/public/assets/{pairs-BcCOB1oO.js → pairs-C1uzo8x0.js} +2 -2
- package/public/assets/{pairs-BcCOB1oO.js.map → pairs-C1uzo8x0.js.map} +1 -1
- package/public/assets/{projects-MZ6CNrYO.js → projects-B2-8Eu0e.js} +2 -2
- package/public/assets/{projects-MZ6CNrYO.js.map → projects-B2-8Eu0e.js.map} +1 -1
- package/public/assets/{react-dom-CU0WCHqq.js → react-dom-CEl58oxP.js} +2 -2
- package/public/assets/{react-dom-CU0WCHqq.js.map → react-dom-CEl58oxP.js.map} +1 -1
- package/public/assets/{security-Bh8BGpZR.js → security-XhAAP6q3.js} +2 -2
- package/public/assets/{security-Bh8BGpZR.js.map → security-XhAAP6q3.js.map} +1 -1
- package/public/assets/{select-Drdvachg.js → select-DEGUFEjx.js} +2 -2
- package/public/assets/{select-Drdvachg.js.map → select-DEGUFEjx.js.map} +1 -1
- package/public/assets/settings-DTbVUdlZ.js +4 -0
- package/public/assets/{settings-IrNBT0hy.js.map → settings-DTbVUdlZ.js.map} +1 -1
- package/public/assets/{store-CqFZmc-B.js → store-DYaQAXRv.js} +5 -5
- package/public/assets/{store-CqFZmc-B.js.map → store-DYaQAXRv.js.map} +1 -1
- package/public/assets/{tasks-heEgx7vT.js → tasks-zwGo7hon.js} +2 -2
- package/public/assets/{tasks-heEgx7vT.js.map → tasks-zwGo7hon.js.map} +1 -1
- package/public/assets/{teams-BjETr-_W.js → teams-Brc5D8ox.js} +2 -2
- package/public/assets/{teams-BjETr-_W.js.map → teams-Brc5D8ox.js.map} +1 -1
- package/public/assets/{terminal-viewer-impl-BDqmbWB3.js → terminal-viewer-impl-C6yUAL8G.js} +3 -3
- package/public/assets/{terminal-viewer-impl-BDqmbWB3.js.map → terminal-viewer-impl-C6yUAL8G.js.map} +1 -1
- package/public/assets/{use-keyboard-viewport-CichJ8Jn.js → use-keyboard-viewport-DABeIMEJ.js} +2 -2
- package/public/assets/{use-keyboard-viewport-CichJ8Jn.js.map → use-keyboard-viewport-DABeIMEJ.js.map} +1 -1
- package/public/assets/user-avatar-Bw1R011j.js +2 -0
- package/public/assets/user-avatar-Bw1R011j.js.map +1 -0
- package/public/assets/{work-queue-rgQs4Wis.js → work-queue-ge4R7keo.js} +2 -2
- package/public/assets/{work-queue-rgQs4Wis.js.map → work-queue-ge4R7keo.js.map} +1 -1
- package/public/assets/workspaces-BhblC-Nd.js +3 -0
- package/public/assets/{workspaces-hIjZicaF.js.map → workspaces-BhblC-Nd.js.map} +1 -1
- package/public/index.html +21 -21
- package/src/agent-drive-arbiter.ts +112 -0
- package/src/db/artifacts.ts +2 -3
- package/src/db/drive-leases.ts +165 -0
- package/src/db/index.ts +1 -0
- package/src/db/migrations.ts +6 -0
- package/src/db/users.ts +26 -0
- package/src/maintenance/jobs.ts +11 -0
- package/src/routes/_shared.ts +1 -1
- package/src/routes/agent-sessions.ts +97 -1
- package/src/routes/artifacts.ts +7 -3
- package/src/routes/index.ts +13 -2
- package/src/routes/users.ts +152 -6
- package/src/security.ts +2 -0
- package/src/services/user-profile.ts +69 -0
- package/src/upgrade-install-verify.ts +160 -0
- package/src/upgrade.ts +40 -11
- package/public/assets/MessageBubble-ckJ2VVgq.js +0 -3
- package/public/assets/MessageBubble-ckJ2VVgq.js.map +0 -1
- package/public/assets/activity-DtMjjws8.js +0 -2
- package/public/assets/branch-state-badge-CvdKPTlV.js +0 -2
- package/public/assets/chat-CCPukbI9.js +0 -2
- package/public/assets/dist-D3jA_LvQ.js +0 -2
- package/public/assets/dist-HTxIFS7t.js +0 -2
- package/public/assets/dist-rLCXIl7x.js +0 -2
- package/public/assets/index-BfQFX8td.js +0 -22
- package/public/assets/index-BfQFX8td.js.map +0 -1
- package/public/assets/index-D8vc380x.css +0 -2
- package/public/assets/lucide-react-D78N6SwK.js +0 -9
- package/public/assets/memory-nUBcij_9.js +0 -2
- package/public/assets/settings-IrNBT0hy.js +0 -4
- package/public/assets/workspaces-hIjZicaF.js +0 -3
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./chunk-CilyBKbf.js";import{D as t,E as n,H as r,Hn as i,Kt as ee,L as te,N as ne,Sn as re,m as ie,tr as a}from"./lucide-react-D78N6SwK.js";import{l as ae,t as o}from"./store-CqFZmc-B.js";import{K as s,d as oe,h as c}from"./display-CWMHll1J.js";import{t as l}from"./badge-BwaoBnNO.js";import{t as u}from"./button-CFIklTDX.js";import{t as d}from"./input-CD-ZcZIA.js";import{P as se,r as ce,s as le}from"./index-BfQFX8td.js";import{a as f,o as p,r as m,t as h}from"./card-Bi94xEmr.js";var g=e(a(),1),_=i(),v=[`organization`,`role`,`project`,`task`,`interaction`,`agent`],ue=[`private`,`project`,`org`,`public`],de=[`public`,`normal`,`sensitive`,`secret`],y=[`reported`,`inferred`,`verified`];function b(){return{type:`project`,scope:`default`,title:``,content:``,tags:``,visibility:`project`,sensitivity:`normal`,confidence:`reported`,relevanceScore:`0.7`}}function x(e){return{type:e.type,scope:e.scope,title:e.title,content:e.content,tags:e.tags.join(`, `),visibility:e.visibility,sensitivity:e.sensitivity,confidence:e.confidence,relevanceScore:String(e.relevanceScore)}}function S(e){return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function fe(e){let t={limit:100};e.type&&(t.type=e.type),e.scope.trim()&&(t.scope=e.scope.trim()),e.visibility&&(t.visibility=e.visibility);let n=S(e.tags);if(n.length&&(t.tags=n),e.minRelevance.trim()){let n=Number(e.minRelevance);Number.isFinite(n)&&(t.minRelevance=Math.max(0,Math.min(1,n)))}return t}function C(e){return e===`secret`?`bg-red-500/10 text-red-400 border-red-500/30`:e===`sensitive`?`bg-yellow-500/10 text-yellow-400 border-yellow-500/30`:e===`public`?`bg-blue-500/10 text-blue-400 border-blue-500/30`:`bg-zinc-500/10 text-zinc-400 border-zinc-500/30`}function w(e){return e>=.8?`text-emerald-400`:e>=.5?`text-yellow-400`:`text-zinc-400`}function pe(e){return e?Object.entries(e).map(([e,t])=>`${e}=${Array.isArray(t)?t.join(` `):String(t)}`).join(` `):`default`}function me(e){return e.filter(e=>![`system`,`user`,`channel`].includes(e.kind||``))}function T(){let e=ae(),i=o(e=>e.agents),a=o(e=>e.memories),T=o(e=>e.memoryTotal),D=o(e=>e.memoryStats),O=o(e=>e.memoryBrokerInfo),k=o(e=>e.memoryFilters),A=o(e=>e.selectedMemoryId),ge=o(e=>e.memoryLoading),j=o(e=>e.set),M=o(e=>e.fetchMemories),N=o(e=>e.refreshMemory),P=o(e=>e.saveMemory),F=o(e=>e.deleteMemory),I=o(e=>e.injectMemory),L=a.find(e=>e.id===A),[R,z]=(0,g.useState)(`create`),[B,V]=(0,g.useState)(b),[H,U]=(0,g.useState)(``),[W,_e]=(0,g.useState)(`manual`),[G,ve]=(0,g.useState)(`1600`),[K,q]=(0,g.useState)(`8`),[J,ye]=(0,g.useState)(``),Y=(0,g.useMemo)(()=>me(i),[i]);(0,g.useEffect)(()=>{!H&&Y[0]&&U(Y[0].id)},[Y,H]),(0,g.useEffect)(()=>{L&&R===`edit`&&V(x(L))},[L?.id,R]);let X=(0,g.useMemo)(()=>{let e=k.search.trim().toLowerCase();return e?a.filter(t=>[t.id,t.type,t.scope,t.title,t.content,...t.tags].some(t=>String(t).toLowerCase().includes(e))):a},[a,k.search]);function Z(e){j({memoryFilters:{...k,...e}})}async function be(){let e=Number(B.relevanceScore),t={title:B.title.trim(),content:B.content.trim(),tags:S(B.tags),visibility:B.visibility,sensitivity:B.sensitivity,confidence:B.confidence,relevanceScore:Number.isFinite(e)?Math.max(0,Math.min(1,e)):.7};if(R===`edit`&&L){await P(t,L.id);return}await P({...t,type:B.type,scope:B.scope.trim()}),z(`create`),V(b())}async function Q(e){if(!H)return;let t=await I({agentId:H,memoryIds:e,query:e?.length?void 0:fe(k),reason:W.trim()||`manual`,budget:{maxTokens:Math.max(200,Number(G)||1600),maxMemories:Math.max(1,Number(K)||8),priorityCutoff:3}});t?.command?.id&&ye(t.command.id)}function xe(){z(`create`),V(b())}function Se(){L&&(z(`edit`),V(x(L)))}let Ce=B.title.trim()&&B.content.trim()&&(R===`edit`||B.scope.trim()),$=pe(O?.config);return(0,_.jsxs)(`div`,{className:`space-y-4`,children:[(0,_.jsxs)(`div`,{className:`flex items-center justify-between gap-3 flex-wrap`,children:[(0,_.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,_.jsx)(re,{className:`w-5 h-5 text-muted-foreground`}),(0,_.jsx)(`h2`,{className:`text-lg font-semibold`,children:`Memory`}),(0,_.jsx)(l,{variant:`secondary`,children:D?.total??T}),O&&(0,_.jsx)(l,{className:O.external?`bg-blue-500/15 text-blue-400 border-blue-500/30`:`bg-emerald-500/15 text-emerald-400 border-emerald-500/30`,children:O.type})]}),(0,_.jsxs)(u,{size:`sm`,variant:`outline`,className:`gap-1.5`,onClick:()=>N(),children:[(0,_.jsx)(ne,{className:`w-3.5 h-3.5 ${ge?`animate-spin`:``}`}),`Refresh`]})]}),(0,_.jsxs)(`div`,{className:`grid gap-3 xl:grid-cols-[1.2fr_0.8fr]`,children:[(0,_.jsxs)(h,{children:[(0,_.jsx)(f,{className:`py-3 px-4`,children:(0,_.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,_.jsxs)(p,{className:`text-sm font-medium flex items-center gap-2`,children:[(0,_.jsx)(ee,{className:`w-4 h-4 text-muted-foreground`}),`Broker`]}),O?.capabilities&&(0,_.jsx)(`div`,{className:`flex flex-wrap gap-1 justify-end`,children:Object.entries(O.capabilities).filter(([,e])=>!!e).map(([e])=>(0,_.jsx)(l,{variant:`outline`,className:`text-[10px] px-1.5 py-0`,children:e},e))})]})}),(0,_.jsxs)(m,{className:`px-4 pb-4 space-y-3`,children:[(0,_.jsxs)(`div`,{className:`grid grid-cols-2 md:grid-cols-5 gap-2`,children:[(0,_.jsx)(E,{label:`total`,value:D?.total??T}),(0,_.jsx)(E,{label:`project`,value:D?.byType?.project??0}),(0,_.jsx)(E,{label:`task`,value:D?.byType?.task??0}),(0,_.jsx)(E,{label:`agent`,value:D?.byType?.agent??0}),(0,_.jsx)(E,{label:`sensitive`,value:(D?.bySensitivity?.sensitive??0)+(D?.bySensitivity?.secret??0)})]}),(0,_.jsx)(`div`,{className:`font-mono text-xs text-muted-foreground truncate`,title:$,children:$})]})]}),(0,_.jsxs)(h,{children:[(0,_.jsx)(f,{className:`py-3 px-4`,children:(0,_.jsx)(p,{className:`text-sm font-medium`,children:`Inject`})}),(0,_.jsxs)(m,{className:`px-4 pb-4 space-y-2`,children:[(0,_.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 gap-2`,children:[(0,_.jsxs)(`select`,{className:`rounded-md border border-input bg-background px-2 py-1.5 text-sm`,value:H,onChange:e=>U(e.target.value),children:[(0,_.jsx)(`option`,{value:``,children:`Agent`}),Y.map(e=>(0,_.jsx)(`option`,{value:e.id,children:oe(e)},e.id))]}),(0,_.jsx)(d,{value:W,onChange:e=>_e(e.target.value),placeholder:`reason`}),(0,_.jsx)(d,{value:G,onChange:e=>ve(e.target.value),inputMode:`numeric`,placeholder:`tokens`}),(0,_.jsx)(d,{value:K,onChange:e=>q(e.target.value),inputMode:`numeric`,placeholder:`memories`})]}),(0,_.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,_.jsxs)(u,{size:`sm`,className:`gap-1.5`,disabled:!H||!L,onClick:()=>L&&Q([L.id]),children:[(0,_.jsx)(n,{className:`w-3.5 h-3.5`}),`Selected`]}),(0,_.jsxs)(u,{size:`sm`,variant:`outline`,className:`gap-1.5`,disabled:!H,onClick:()=>Q(),children:[(0,_.jsx)(t,{className:`w-3.5 h-3.5`}),`Filtered`]}),J&&(0,_.jsx)(l,{variant:`outline`,className:`font-mono text-[10px]`,children:J})]})]})]})]}),(0,_.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[minmax(0,1fr)_420px]`,children:[(0,_.jsxs)(`div`,{className:`space-y-3`,children:[(0,_.jsx)(h,{children:(0,_.jsx)(m,{className:`p-3`,children:(0,_.jsxs)(`div`,{className:`grid grid-cols-2 lg:grid-cols-6 gap-2`,children:[(0,_.jsx)(d,{className:`lg:col-span-2`,value:k.search,onChange:e=>Z({search:e.target.value}),placeholder:`Search visible memories`}),(0,_.jsxs)(`select`,{className:`rounded-md border border-input bg-background px-2 py-1.5 text-sm`,value:k.type,onChange:e=>Z({type:e.target.value}),children:[(0,_.jsx)(`option`,{value:``,children:`All types`}),v.map(e=>(0,_.jsx)(`option`,{value:e,children:e},e))]}),(0,_.jsx)(d,{value:k.scope,onChange:e=>Z({scope:e.target.value}),placeholder:`scope`}),(0,_.jsx)(d,{value:k.tags,onChange:e=>Z({tags:e.target.value}),placeholder:`tags`}),(0,_.jsxs)(`div`,{className:`flex gap-2`,children:[(0,_.jsx)(d,{value:k.minRelevance,onChange:e=>Z({minRelevance:e.target.value}),placeholder:`score`}),(0,_.jsx)(u,{size:`sm`,variant:`outline`,className:`h-8 px-2`,onClick:()=>M(),children:(0,_.jsx)(t,{className:`w-4 h-4`})})]})]})})}),(0,_.jsx)(le,{className:`h-[calc(100dvh-24rem)] min-h-[360px]`,children:(0,_.jsxs)(`div`,{className:`space-y-2 pr-2`,children:[X.length===0&&(0,_.jsx)(`div`,{className:`text-center text-sm text-muted-foreground py-16`,children:`No memories`}),X.map(t=>(0,_.jsx)(he,{memory:t,selected:t.id===A,now:e,onSelect:()=>j({selectedMemoryId:t.id})},t.id))]})})]}),(0,_.jsxs)(h,{children:[(0,_.jsx)(f,{className:`py-3 px-4`,children:(0,_.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,_.jsx)(p,{className:`text-sm font-medium`,children:R===`edit`?`Edit Memory`:`New Memory`}),(0,_.jsxs)(`div`,{className:`flex gap-1`,children:[(0,_.jsx)(u,{size:`sm`,variant:`ghost`,className:`h-7 px-2`,onClick:xe,title:`New memory`,children:(0,_.jsx)(te,{className:`w-3.5 h-3.5`})}),(0,_.jsx)(u,{size:`sm`,variant:`ghost`,className:`h-7 px-2`,onClick:Se,disabled:!L,title:`Edit selected`,children:(0,_.jsx)(r,{className:`w-3.5 h-3.5`})}),(0,_.jsx)(u,{size:`sm`,variant:`ghost`,className:`h-7 px-2 text-red-400 hover:text-red-300`,disabled:!L,onClick:()=>L&&F(L.id),title:`Delete selected`,children:(0,_.jsx)(ie,{className:`w-3.5 h-3.5`})})]})]})}),(0,_.jsxs)(m,{className:`px-4 pb-4 space-y-3`,children:[L&&(0,_.jsxs)(_.Fragment,{children:[(0,_.jsxs)(`div`,{className:`space-y-2`,children:[(0,_.jsxs)(`div`,{className:`flex flex-wrap gap-1`,children:[(0,_.jsx)(l,{variant:`secondary`,children:L.type}),(0,_.jsx)(l,{variant:`outline`,children:L.scope}),(0,_.jsx)(l,{className:C(L.sensitivity),children:L.sensitivity}),(0,_.jsx)(l,{variant:`outline`,className:w(L.relevanceScore),children:L.relevanceScore.toFixed(2)})]}),(0,_.jsxs)(`div`,{className:`text-xs text-muted-foreground`,title:c(L.updatedAt),children:[`updated `,s(e,L.updatedAt)]}),(0,_.jsx)(`p`,{className:`text-sm font-medium`,children:L.title}),(0,_.jsx)(`p`,{className:`text-xs text-muted-foreground whitespace-pre-wrap max-h-24 overflow-auto`,children:L.content})]}),(0,_.jsx)(se,{})]}),(0,_.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,_.jsx)(`select`,{className:`rounded-md border border-input bg-background px-2 py-1.5 text-sm`,disabled:R===`edit`,value:B.type,onChange:e=>V({...B,type:e.target.value}),children:v.map(e=>(0,_.jsx)(`option`,{value:e,children:e},e))}),(0,_.jsx)(d,{disabled:R===`edit`,value:B.scope,onChange:e=>V({...B,scope:e.target.value}),placeholder:`scope`}),(0,_.jsx)(d,{className:`col-span-2`,value:B.title,onChange:e=>V({...B,title:e.target.value}),placeholder:`title`}),(0,_.jsx)(ce,{className:`col-span-2 min-h-32`,value:B.content,onChange:e=>V({...B,content:e.target.value}),placeholder:`content`}),(0,_.jsx)(d,{className:`col-span-2`,value:B.tags,onChange:e=>V({...B,tags:e.target.value}),placeholder:`tags`}),(0,_.jsx)(`select`,{className:`rounded-md border border-input bg-background px-2 py-1.5 text-sm`,value:B.visibility,onChange:e=>V({...B,visibility:e.target.value}),children:ue.map(e=>(0,_.jsx)(`option`,{value:e,children:e},e))}),(0,_.jsx)(`select`,{className:`rounded-md border border-input bg-background px-2 py-1.5 text-sm`,value:B.sensitivity,onChange:e=>V({...B,sensitivity:e.target.value}),children:de.map(e=>(0,_.jsx)(`option`,{value:e,children:e},e))}),(0,_.jsx)(`select`,{className:`rounded-md border border-input bg-background px-2 py-1.5 text-sm`,value:B.confidence,onChange:e=>V({...B,confidence:e.target.value}),children:y.map(e=>(0,_.jsx)(`option`,{value:e,children:e},e))}),(0,_.jsx)(d,{value:B.relevanceScore,onChange:e=>V({...B,relevanceScore:e.target.value}),inputMode:`decimal`,placeholder:`score`})]}),(0,_.jsx)(u,{size:`sm`,className:`w-full`,disabled:!Ce,onClick:be,children:R===`edit`?`Save memory`:`Create memory`})]})]})]})]})}function E({label:e,value:t}){return(0,_.jsxs)(`div`,{className:`rounded-md border border-border bg-muted/20 px-3 py-2`,children:[(0,_.jsx)(`div`,{className:`text-lg font-semibold tabular-nums`,children:t}),(0,_.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:e})]})}function he({memory:e,selected:t,now:n,onSelect:r}){return(0,_.jsx)(`button`,{onClick:r,className:`w-full text-left rounded-md border p-3 transition-colors ${t?`border-primary bg-primary/5`:`border-border bg-card hover:border-zinc-600`}`,children:(0,_.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,_.jsxs)(`div`,{className:`min-w-0`,children:[(0,_.jsxs)(`div`,{className:`flex items-center gap-1.5 flex-wrap`,children:[(0,_.jsx)(l,{variant:`secondary`,className:`text-[10px]`,children:e.type}),(0,_.jsx)(l,{variant:`outline`,className:`text-[10px] font-mono`,children:e.scope}),(0,_.jsx)(l,{className:`text-[10px] ${C(e.sensitivity)}`,children:e.sensitivity})]}),(0,_.jsx)(`div`,{className:`font-medium text-sm mt-2 truncate`,children:e.title}),(0,_.jsx)(`div`,{className:`text-xs text-muted-foreground line-clamp-2 mt-1`,children:e.content}),e.tags.length>0&&(0,_.jsx)(`div`,{className:`flex gap-1 flex-wrap mt-2`,children:e.tags.slice(0,8).map(e=>(0,_.jsxs)(l,{variant:`outline`,className:`text-[10px] text-zinc-400`,children:[`#`,e]},e))})]}),(0,_.jsxs)(`div`,{className:`text-right shrink-0 space-y-1`,children:[(0,_.jsx)(`div`,{className:`text-sm font-semibold tabular-nums ${w(e.relevanceScore)}`,children:e.relevanceScore.toFixed(2)}),(0,_.jsx)(`div`,{className:`text-[10px] text-muted-foreground`,title:c(e.updatedAt),children:s(n,e.updatedAt)}),e.accessCount>0&&(0,_.jsxs)(`div`,{className:`text-[10px] text-muted-foreground`,children:[e.accessCount,` hits`]})]})]})})}export{T as MemoryView};
|
|
2
|
-
//# sourceMappingURL=memory-nUBcij_9.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./chunk-CilyBKbf.js";import{Bn as t,Bt as n,Et as r,Hn as i,L as a,N as o,O as s,T as c,Un as l,V as u,Wt as d,b as f,c as p,ct as m,ln as h,m as g,q as _,sn as v,tr as y,xn as b,zt as x}from"./lucide-react-D78N6SwK.js";import{d as S,p as C,s as w,t as T}from"./store-CqFZmc-B.js";import{Q as E,tt as D}from"./display-CWMHll1J.js";import{t as ee}from"./themes-mW9zZP4O.js";import{a as O,i as k,n as A,r as j,t as M}from"./select-Drdvachg.js";import{t as N}from"./badge-BwaoBnNO.js";import{t as P}from"./button-CFIklTDX.js";import{t as F}from"./input-CD-ZcZIA.js";import{F as I,r as te}from"./index-BfQFX8td.js";import{a as L,i as R,n as z,o as B,r as V,t as H}from"./card-Bi94xEmr.js";var U=e(y(),1);function W(e){return`${e.namespace}/${e.key}`}function ne(e){return`/settings/${encodeURIComponent(e.namespace)}/${encodeURIComponent(e.key)}`}function re(e){return e.trim().toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``)||`settings`}function ie(e){let t=new Map;for(let n of e.filter(e=>e.readable)){let e=n.display?.group?.trim()||n.namespace;t.set(e,[...t.get(e)??[],n])}return[...t.entries()].map(([e,t])=>({group:e,slug:re(e),settings:t.sort(ae)})).sort((e,t)=>oe(e.settings)-oe(t.settings)||e.group.localeCompare(t.group))}function ae(e,t){return(e.display?.order??2**53-1)-(t.display?.order??2**53-1)||e.display?.label?.localeCompare(t.display?.label??``)||W(e).localeCompare(W(t))}function oe(e){return Math.min(...e.map(e=>e.display?.order??2**53-1))}function se(e){return Array.isArray(e.type)?e.type.find(e=>e!==`null`):e.type}function G(e,t,n){if(!t.length)return n;let[r,...i]=t;if(r===void 0)return n;if(typeof r==`number`){let t=Array.isArray(e)?[...e]:[];return t[r]=G(t[r],i,n),t}let a=D(e)?{...e}:{},o=G(a[r],i,n);return o===void 0?delete a[r]:a[r]=o,a}function K(e){if(e.default!==void 0)return e.default;if(e.const!==void 0)return e.const;if(e.enum?.length)return e.enum[0];switch(se(e)){case`boolean`:return!1;case`integer`:case`number`:return 0;case`array`:return[];case`object`:return{};case`string`:return``;default:return}}function ce(e){return e.split(/\r?\n|,/).map(e=>e.trim()).filter(Boolean)}function le(e){return Array.isArray(e)?e.map(e=>String(e)).join(`
|
|
2
|
-
`):``}function ue(e){return D(e)?Object.entries(e).map(([e,t])=>`${e}=${String(t??``)}`).join(`
|
|
3
|
-
`):``}function de(e){return Object.fromEntries(e.split(/\r?\n/).map(e=>e.trim()).filter(Boolean).map(e=>{let t=e.indexOf(`=`);return t>=0?[e.slice(0,t).trim(),e.slice(t+1)]:[e,``]}))}var q=i(),fe=`__unset__`;function pe(e){return e===`server-runtime`?`Server runtime`:e===`bootstrap`?`Bootstrap`:`Browser`}function me(e){return e===`server-runtime`?`Stored by Relay and mutable while the server is running.`:e===`bootstrap`?`Read from startup configuration; restart or host config changes are required.`:`Stored only in this browser profile.`}function he(e){return e===`browser`?(0,q.jsx)(_,{className:`size-3.5`}):(0,q.jsx)(c,{className:`size-3.5`})}function J(e){return e.details??[]}function ge({group:e,settings:t,onSaved:n}){let r=[...new Set(t.map(e=>e.tier))];return(0,q.jsxs)(`section`,{className:`space-y-3`,children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,q.jsx)(`h2`,{className:`text-base font-semibold`,children:e}),(0,q.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:r.map(e=>(0,q.jsxs)(N,{variant:`outline`,className:`gap-1`,title:me(e),children:[he(e),pe(e)]},e))})]}),t.length===0?(0,q.jsx)(H,{size:`sm`,children:(0,q.jsx)(V,{className:`text-sm text-muted-foreground`,children:`No settings in this group.`})}):(0,q.jsx)(`div`,{className:`space-y-3`,children:t.map(e=>(0,q.jsx)(_e,{setting:e,onSaved:n},W(e)))})]})}function _e({setting:e,onSaved:t}){let[n,r]=(0,U.useState)(()=>e.value??e.defaults??K(e.schema)),[i,a]=(0,U.useState)(!1),[o,c]=(0,U.useState)(``),[u,d]=(0,U.useState)([]),f=e.writable&&e.tier===`server-runtime`;function p(e,t){r(n=>G(n,e,t)),d([]),c(``)}async function m(){if(f){a(!0),d([]),c(``);try{let i=await l(`PUT`,ne(e),{value:n,updatedBy:`dashboard`});r(i.value),t(i),c(`Saved`)}catch(e){let t=J(e);d(t.length?t:[e.message])}finally{a(!1)}}}return(0,q.jsxs)(H,{size:`sm`,children:[(0,q.jsxs)(L,{children:[(0,q.jsxs)(B,{className:`flex flex-wrap items-center gap-2 text-sm`,children:[e.display.label,(0,q.jsxs)(N,{variant:`outline`,className:`gap-1`,title:me(e.tier),children:[he(e.tier),pe(e.tier)]}),!e.writable&&(0,q.jsx)(N,{variant:`secondary`,children:`Read only`})]}),e.display.description&&(0,q.jsx)(R,{children:e.display.description}),(0,q.jsx)(z,{children:(0,q.jsxs)(P,{size:`sm`,onClick:m,disabled:!f||i,children:[(0,q.jsx)(s,{className:`size-4`}),i?`Saving`:`Save`]})})]}),(0,q.jsxs)(V,{className:`space-y-3`,children:[(0,q.jsx)(ve,{schema:e.schema,value:n,path:[],label:e.display.label,required:!0,disabled:!f||i,onChange:p}),(0,q.jsxs)(`p`,{className:`flex flex-wrap items-center gap-x-2 text-[11px] text-muted-foreground`,children:[(0,q.jsxs)(`code`,{className:`rounded bg-muted px-1.5 py-0.5 font-mono`,children:[e.namespace,`/`,e.key]}),(0,q.jsxs)(`span`,{children:[`read `,(0,q.jsx)(`span`,{className:`text-foreground/70`,children:e.scope.read})]}),(0,q.jsx)(`span`,{"aria-hidden":!0,children:`·`}),(0,q.jsxs)(`span`,{children:[`write `,(0,q.jsx)(`span`,{className:`text-foreground/70`,children:e.scope.write})]})]}),u.length>0&&(0,q.jsxs)(`div`,{className:`rounded-md border border-destructive/40 bg-destructive/10 p-3 text-sm text-destructive`,children:[(0,q.jsxs)(`div`,{className:`mb-1 flex items-center gap-2 font-medium`,children:[(0,q.jsx)(h,{className:`size-4`}),`Save failed`]}),(0,q.jsx)(`ul`,{className:`list-disc space-y-1 pl-5`,children:u.map(e=>(0,q.jsx)(`li`,{children:e},e))})]}),o&&(0,q.jsxs)(`p`,{className:`flex items-center gap-1 text-sm text-emerald-500`,children:[(0,q.jsx)(v,{className:`size-4`}),o]})]})]})}function ve(e){let{schema:t,value:n,path:r,label:i,required:a,disabled:o,onChange:s}=e,c=se(t);if(t.enum?.length){let e=n==null||n===``?fe:String(n);return(0,q.jsx)(Y,{label:i,description:t.description,children:(0,q.jsxs)(M,{value:e,onValueChange:e=>s(r,e===`__unset__`?void 0:e),disabled:o,children:[(0,q.jsx)(k,{children:(0,q.jsx)(O,{})}),(0,q.jsxs)(A,{children:[!a&&(0,q.jsx)(j,{value:`__unset__`,children:`Not set`}),t.enum.map(e=>(0,q.jsx)(j,{value:String(e),children:String(e)},String(e)))]})]})})}if(c===`boolean`)return(0,q.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded-md border bg-muted/20 p-3`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`div`,{className:`text-sm font-medium`,children:i}),t.description&&(0,q.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:t.description})]}),(0,q.jsx)(I,{checked:!!n,onCheckedChange:e=>s(r,e),disabled:o})]});if(c===`integer`||c===`number`)return(0,q.jsx)(Y,{label:i,description:t.description,children:(0,q.jsx)(F,{type:`number`,min:typeof t.minimum==`number`?t.minimum:void 0,max:typeof t.maximum==`number`?t.maximum:void 0,step:c===`integer`?1:`any`,value:typeof n==`number`?n:``,disabled:o,onChange:e=>s(r,e.target.value===``&&!a?void 0:Number(e.target.value))})});if(c===`array`)return(0,q.jsx)(Y,{label:i,description:t.description??`One item per line.`,children:(0,q.jsx)(te,{rows:Math.min(8,Math.max(3,Array.isArray(n)?n.length+1:3)),value:le(n),disabled:o,onChange:e=>s(r,ce(e.target.value))})});if(c===`object`){let e=t.properties??{},a=new Set(t.required??[]);return Object.keys(e).length===0&&t.additionalProperties?(0,q.jsx)(Y,{label:i,description:t.description??`KEY=value, one entry per line.`,children:(0,q.jsx)(te,{rows:5,value:ue(n),disabled:o,onChange:e=>s(r,de(e.target.value))})}):(0,q.jsxs)(`div`,{className:`space-y-3`,children:[r.length>0&&(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`div`,{className:`text-sm font-medium`,children:i}),t.description&&(0,q.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:t.description})]}),(0,q.jsx)(`div`,{className:`grid gap-3 md:grid-cols-2`,children:Object.entries(e).map(([e,t])=>{let i=D(n)?n[e]:void 0;return(0,q.jsx)(ve,{schema:t,value:i===void 0&&a.has(e)?K(t):i,path:[...r,e],label:t.title||ye(e),required:a.has(e),disabled:o,onChange:s},e)})})]})}return(0,q.jsx)(Y,{label:i,description:t.description,children:(0,q.jsx)(F,{value:typeof n==`string`?n:n==null?``:String(n),disabled:o,onChange:e=>s(r,e.target.value===``&&!a?void 0:e.target.value)})})}function Y({label:e,description:t,children:n}){return(0,q.jsxs)(`label`,{className:`block space-y-1.5 text-sm`,children:[(0,q.jsx)(`span`,{className:`text-muted-foreground`,children:e}),n,t&&(0,q.jsx)(`span`,{className:`block text-xs text-muted-foreground`,children:t})]})}function ye(e){return e.replace(/([a-z0-9])([A-Z])/g,`$1 $2`).replace(/[-_]+/g,` `).replace(/^\w/,e=>e.toUpperCase())}function be(){let e=T(e=>e.theme),t=T(e=>e.showReasoning),n=T(e=>e.set);return(0,q.jsxs)(`section`,{className:`space-y-4`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`h2`,{className:`text-base font-semibold`,children:`Browser preferences`}),(0,q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`These are stored in local dashboard state, not in Relay server config.`})]}),(0,q.jsxs)(H,{size:`sm`,children:[(0,q.jsxs)(L,{children:[(0,q.jsx)(B,{className:`text-sm`,children:`Dashboard display`}),(0,q.jsx)(R,{className:`text-xs`,children:`Browser tier · persisted in this browser profile.`}),(0,q.jsx)(z,{children:(0,q.jsxs)(N,{variant:`outline`,className:`gap-1`,children:[(0,q.jsx)(_,{className:`size-3.5`}),`Browser`]})})]}),(0,q.jsxs)(V,{className:`grid gap-3 md:grid-cols-2`,children:[(0,q.jsx)(Y,{label:`Theme`,children:(0,q.jsxs)(M,{value:e,onValueChange:e=>n({theme:e}),children:[(0,q.jsx)(k,{children:(0,q.jsx)(O,{})}),(0,q.jsx)(A,{children:ee.map(e=>(0,q.jsx)(j,{value:e.id,children:e.label},e.id))})]})}),(0,q.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded-md border bg-muted/20 p-3`,children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(b,{className:`size-4`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`div`,{className:`text-sm font-medium`,children:`Show reasoning details`}),(0,q.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`Display captured reasoning/tool steps in chat. Server capture is controlled separately by provider reasoningCapture.`})]})]}),(0,q.jsx)(I,{checked:t,onCheckedChange:e=>n({showReasoning:e})})]})]})]}),(0,q.jsx)(xe,{})]})}function xe(){let e=T(e=>e.voiceTtsEnabled),t=T(e=>e.setVoiceTtsEnabled),n=T(e=>e.voiceTtsMode),r=T(e=>e.setVoiceTtsMode),i=T(e=>e.voiceTtsKokoroVoice),a=T(e=>e.setVoiceTtsKokoroVoice),o=T(e=>e.voiceTtsBrowserVoice),s=T(e=>e.setVoiceTtsBrowserVoice),c=T(e=>e.voiceInputMode),l=T(e=>e.setVoiceInputMode),[u,d]=(0,U.useState)(()=>C());(0,U.useEffect)(()=>{if(typeof window>`u`||!(`speechSynthesis`in window))return;let e=()=>d(C());return e(),window.speechSynthesis.addEventListener?.(`voiceschanged`,e),()=>window.speechSynthesis.removeEventListener?.(`voiceschanged`,e)},[]);let f=S.some(e=>e.id===i)?S:[...S,{id:i,label:i}];return(0,q.jsxs)(H,{size:`sm`,children:[(0,q.jsxs)(L,{children:[(0,q.jsxs)(B,{className:`flex items-center gap-2 text-sm`,children:[(0,q.jsx)(p,{className:`size-4`}),`Voice`]}),(0,q.jsx)(R,{className:`text-xs`,children:`Browser tier TTS and push-to-talk behavior.`}),(0,q.jsx)(z,{children:(0,q.jsx)(I,{checked:e,onCheckedChange:t})})]}),(0,q.jsxs)(V,{className:`grid gap-3 md:grid-cols-2`,children:[(0,q.jsx)(Y,{label:`Speech engine`,children:(0,q.jsxs)(M,{value:n,onValueChange:e=>r(e),children:[(0,q.jsx)(k,{children:(0,q.jsx)(O,{})}),(0,q.jsxs)(A,{children:[(0,q.jsx)(j,{value:`kokoro`,children:`Kokoro (server, fallback to browser)`}),(0,q.jsx)(j,{value:`browser`,children:`Browser Web Speech API`})]})]})}),(0,q.jsx)(Y,{label:`Kokoro voice`,children:(0,q.jsxs)(M,{value:i,onValueChange:a,children:[(0,q.jsx)(k,{children:(0,q.jsx)(O,{})}),(0,q.jsx)(A,{children:f.map(e=>(0,q.jsx)(j,{value:e.id,children:e.label},e.id))})]})}),(0,q.jsx)(Y,{label:`Browser voice`,children:(0,q.jsxs)(M,{value:o||`__unset__`,onValueChange:e=>s(e===`__unset__`?``:e),children:[(0,q.jsx)(k,{children:(0,q.jsx)(O,{})}),(0,q.jsxs)(A,{children:[(0,q.jsx)(j,{value:fe,children:`System default`}),u.map(e=>(0,q.jsx)(j,{value:e.uri,children:e.label},e.uri))]})]})}),(0,q.jsx)(Y,{label:`Push-to-talk input`,children:(0,q.jsxs)(M,{value:c,onValueChange:e=>l(e),children:[(0,q.jsx)(k,{children:(0,q.jsx)(O,{})}),(0,q.jsxs)(A,{children:[(0,q.jsx)(j,{value:`compose`,children:`Fill message box`}),(0,q.jsx)(j,{value:`autosend`,children:`Send immediately`})]})]})})]})]})}function Se({catalog:e,error:t,canWrite:r,onCatalog:i}){let o=e[0]?.provider??`codex`,[s,d]=(0,U.useState)(o),[p,m]=(0,U.useState)(()=>X(o)),[h,_]=(0,U.useState)(``),[y,b]=(0,U.useState)([]),S=e.some(e=>e.provider===s)?s:o,C=e.find(e=>e.provider===S)??e[0],w=e.map(e=>e.provider);function T(e){m(t=>({...t,...e})),b([]),_(``)}function E(e){d(e),m(X(e)),b([]),_(``)}async function D(){i((await l(`GET`,`/providers`)).catalog)}async function ee(){if(r){b([]),_(``);try{await l(`PUT`,`/providers/${encodeURIComponent(p.provider)}/models/${encodeURIComponent(p.alias)}`,{label:p.label,providerModel:p.providerModel,efforts:ce(p.efforts),defaultEffort:p.defaultEffort.trim()||void 0,limits:p.limits,capabilities:p.capabilities,contextThreshold:Ce(p),disabled:p.disabled,updatedBy:`dashboard`}),await D(),_(`${p.alias} saved`),m(X(p.provider))}catch(e){let t=J(e);b(t.length?t:[e.message])}}}async function O(e,t){if(r){b([]),_(``);try{await l(`PATCH`,`/providers/${encodeURIComponent(S)}/models/${encodeURIComponent(e.alias)}`,{disabled:t,updatedBy:`dashboard`}),await D(),_(`${e.alias} ${t?`disabled`:`enabled`}`)}catch(e){let t=J(e);b(t.length?t:[e.message])}}}async function k(e){if(r){b([]),_(``);try{await l(`DELETE`,`/providers/${encodeURIComponent(S)}/models/${encodeURIComponent(e.alias)}`),await D(),_(`${e.alias} removed`)}catch(e){let t=J(e);b(t.length?t:[e.message])}}}function A(e){m({provider:S,alias:e.alias,label:e.label,providerModel:e.providerModel,efforts:e.efforts.join(`, `),defaultEffort:e.defaultEffort??``,selfCompactUtilization:e.contextThreshold?.selfCompactUtilization?.toString()??``,warnUtilization:e.contextThreshold?.warnUtilization?.toString()??``,hardBackstopUtilization:e.contextThreshold?.hardBackstopUtilization?.toString()??``,disabled:!!e.disabled,limits:e.limits,capabilities:e.capabilities}),b([]),_(``)}return t?(0,q.jsx)(H,{size:`sm`,children:(0,q.jsxs)(V,{className:`text-sm text-muted-foreground`,children:[(0,q.jsxs)(`div`,{className:`mb-1 flex items-center gap-2 font-medium text-foreground`,children:[(0,q.jsx)(f,{className:`size-4`}),`Model catalog`]}),t]})}):(0,q.jsxs)(`section`,{className:`space-y-4`,children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-3`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`h2`,{className:`text-base font-semibold`,children:`Model catalog`}),(0,q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Add override models, disable unavailable models, or remove custom entries from the provider catalog.`})]}),!r&&(0,q.jsx)(N,{variant:`secondary`,children:`Read only: needs settings:write:provider`})]}),(0,q.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:w.map(e=>(0,q.jsx)(P,{variant:e===S?`default`:`outline`,size:`sm`,onClick:()=>E(e),children:e},e))}),(0,q.jsxs)(H,{size:`sm`,children:[(0,q.jsxs)(L,{children:[(0,q.jsx)(B,{className:`text-sm`,children:`Add or edit model`}),(0,q.jsx)(z,{children:(0,q.jsxs)(N,{variant:`outline`,className:`gap-1`,children:[(0,q.jsx)(c,{className:`size-3.5`}),`Server runtime`]})})]}),(0,q.jsxs)(V,{className:`space-y-3`,children:[(0,q.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-2`,children:[(0,q.jsx)(Y,{label:`Alias`,children:(0,q.jsx)(F,{value:p.alias,disabled:!r,placeholder:`nightly`,onChange:e=>T({alias:e.target.value.trim()})})}),(0,q.jsx)(Y,{label:`Label`,children:(0,q.jsx)(F,{value:p.label,disabled:!r,placeholder:`Nightly Codex`,onChange:e=>T({label:e.target.value})})}),(0,q.jsx)(Y,{label:`Provider model`,children:(0,q.jsx)(F,{value:p.providerModel,disabled:!r,placeholder:`codex-nightly`,onChange:e=>T({providerModel:e.target.value})})}),(0,q.jsx)(Y,{label:`Efforts`,children:(0,q.jsx)(F,{value:p.efforts,disabled:!r,placeholder:`low, medium, high`,onChange:e=>T({efforts:e.target.value})})}),(0,q.jsx)(Y,{label:`Default effort`,children:(0,q.jsx)(F,{value:p.defaultEffort,disabled:!r,placeholder:`medium`,onChange:e=>T({defaultEffort:e.target.value})})}),(0,q.jsx)(Y,{label:`Self compact utilization`,children:(0,q.jsx)(F,{value:p.selfCompactUtilization,disabled:!r,placeholder:`0.80`,inputMode:`decimal`,onChange:e=>T({selfCompactUtilization:e.target.value})})}),(0,q.jsx)(Y,{label:`Warn utilization`,children:(0,q.jsx)(F,{value:p.warnUtilization,disabled:!r,placeholder:`default: self - 0.10`,inputMode:`decimal`,onChange:e=>T({warnUtilization:e.target.value})})}),(0,q.jsx)(Y,{label:`Hard backstop utilization`,children:(0,q.jsx)(F,{value:p.hardBackstopUtilization,disabled:!r,placeholder:`0.90`,inputMode:`decimal`,onChange:e=>T({hardBackstopUtilization:e.target.value})})}),(0,q.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded-md border bg-muted/20 p-3`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`div`,{className:`text-sm font-medium`,children:`Disabled`}),(0,q.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`Keep visible but unavailable for new launches.`})]}),(0,q.jsx)(I,{checked:p.disabled,disabled:!r,onCheckedChange:e=>T({disabled:e})})]})]}),(0,q.jsxs)(P,{onClick:ee,disabled:!r||!p.alias||!p.label||!p.providerModel,children:[(0,q.jsx)(a,{className:`size-4`}),`Save model`]})]})]}),(0,q.jsxs)(`div`,{className:`space-y-2`,children:[C&&C.models.length===0&&(0,q.jsx)(H,{size:`sm`,children:(0,q.jsx)(V,{className:`text-sm text-muted-foreground`,children:`No models in this provider catalog yet.`})}),C?.models.map(e=>(0,q.jsx)(H,{size:`sm`,children:(0,q.jsxs)(V,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,q.jsxs)(`div`,{className:`min-w-0`,children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,q.jsx)(`span`,{className:`font-medium`,children:e.label}),(0,q.jsx)(`code`,{className:`rounded bg-muted px-1.5 py-0.5 font-mono text-xs`,children:e.alias}),e.disabled&&(0,q.jsx)(N,{variant:`secondary`,children:`Disabled`})]}),(0,q.jsxs)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:[e.providerModel,e.efforts.length>0?` · efforts ${e.efforts.join(`, `)}`:` · no effort levels`,e.defaultEffort?` · default ${e.defaultEffort}`:``,` · context ${we(e)}`]})]}),(0,q.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,q.jsxs)(P,{variant:`outline`,size:`sm`,onClick:()=>A(e),children:[(0,q.jsx)(u,{className:`size-4`}),`Edit`]}),(0,q.jsxs)(P,{variant:`outline`,size:`sm`,disabled:!r,onClick:()=>void O(e,!e.disabled),children:[e.disabled?(0,q.jsx)(x,{className:`size-4`}):(0,q.jsx)(n,{className:`size-4`}),e.disabled?`Enable`:`Disable`]}),(0,q.jsxs)(P,{variant:`outline`,size:`sm`,disabled:!r,onClick:()=>void k(e),children:[(0,q.jsx)(g,{className:`size-4`}),`Remove`]})]})]})},e.alias))]}),y.length>0&&(0,q.jsx)(`div`,{className:`rounded-md border border-destructive/40 bg-destructive/10 p-3 text-sm text-destructive`,children:(0,q.jsx)(`ul`,{className:`list-disc space-y-1 pl-5`,children:y.map(e=>(0,q.jsx)(`li`,{children:e},e))})}),h&&(0,q.jsxs)(`p`,{className:`flex items-center gap-1 text-sm text-emerald-500`,children:[(0,q.jsx)(v,{className:`size-4`}),h]})]})}function X(e){return{provider:e,alias:``,label:``,providerModel:``,efforts:``,defaultEffort:``,selfCompactUtilization:``,warnUtilization:``,hardBackstopUtilization:``,disabled:!1}}function Ce(e){let t=Z(e.selfCompactUtilization,`Self compact utilization`),n=Z(e.warnUtilization,`Warn utilization`),r=Z(e.hardBackstopUtilization,`Hard backstop utilization`);if(!(t===void 0&&n===void 0&&r===void 0)){if(t===void 0)throw Error(`Self compact utilization is required when setting context thresholds`);return{selfCompactUtilization:t,...n===void 0?{}:{warnUtilization:n},...r===void 0?{}:{hardBackstopUtilization:r}}}}function Z(e,t){let n=e.trim();if(!n)return;let r=Number(n);if(!Number.isFinite(r))throw Error(`${t} must be a number`);return r}function we(e){if(e.contextThreshold)return`self ${Q(e.contextThreshold.selfCompactUtilization)}, warn ${Q(e.contextThreshold.warnUtilization??Math.max(0,e.contextThreshold.selfCompactUtilization-.1))}`;let t=w(e.limits?.contextWindowTokens?.value);return`derived self ${Q(t.selfCompactUtilization)}, warn ${Q(t.warnUtilization)}`}function Q(e){return`${Math.round(e*100)}%`}var Te=5,Ee=15,De={claude:`Claude`,codex:`Codex`};function $(e){return Math.round(e/6e4)}function Oe(e){return`${$(e)} min`}function ke({canWrite:e}){let[t,n]=(0,U.useState)(null),[i,a]=(0,U.useState)(``),[o,s]=(0,U.useState)(``),[c,u]=(0,U.useState)(null);(0,U.useEffect)(()=>{let e=!1;return(async()=>{try{let t=await l(`GET`,`/providers/quota-config`);e||n(t)}catch(t){e||a(t.message)}})(),()=>{e=!0}},[]);async function d(e,t){n(n=>({...n??{},[e]:t})),s(``),u(e);try{let r=await l(`PUT`,`/providers/${e}/quota-config`,t);n(t=>({...t??{},[e]:r}))}catch(t){s(`${De[e]??e}: ${t.message}`)}finally{u(null)}}let f=t?Object.keys(t).sort():[];return(0,q.jsxs)(`section`,{className:`space-y-4`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`h2`,{className:`text-base font-semibold`,children:`Quota`}),(0,q.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Per-provider quota collection and display. `,(0,q.jsx)(`strong`,{children:`Enabled`}),` governs collection (disabled stops polling — no API calls);`,(0,q.jsx)(`strong`,{children:` Show in widget`}),` governs display only.`]})]}),i&&(0,q.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-destructive/40 bg-destructive/10 p-3 text-sm text-destructive`,children:[(0,q.jsx)(h,{className:`mt-0.5 size-4`}),(0,q.jsx)(`span`,{children:i})]}),o&&(0,q.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-destructive/40 bg-destructive/10 p-3 text-sm text-destructive`,children:[(0,q.jsx)(h,{className:`mt-0.5 size-4`}),(0,q.jsx)(`span`,{children:o})]}),!t&&!i&&(0,q.jsx)(H,{size:`sm`,children:(0,q.jsxs)(V,{className:`flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,q.jsx)(m,{className:`size-4 animate-spin`}),`Loading quota config…`]})}),f.map(i=>{let a=t[i],o=!e||c===i;return(0,q.jsxs)(H,{size:`sm`,children:[(0,q.jsxs)(L,{children:[(0,q.jsxs)(B,{className:`flex items-center gap-2 text-sm`,children:[(0,q.jsx)(r,{className:`size-4`}),De[i]??i,c===i&&(0,q.jsx)(m,{className:`size-3 animate-spin text-muted-foreground`})]}),(0,q.jsxs)(R,{className:`text-xs`,children:[a.enabled?`Polled every ${Oe(a.pollIntervalMs)}`:`Collection disabled`,a.enabled&&!a.showInWidget?` · hidden from widget`:``]})]}),(0,q.jsxs)(V,{className:`space-y-4`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded-md border bg-muted/20 p-3`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`div`,{className:`text-sm font-medium`,children:`Enabled`}),(0,q.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`Collect quota for this provider. Off stops all polling (no API calls, no token spend).`})]}),(0,q.jsx)(I,{checked:a.enabled,disabled:o,onCheckedChange:e=>void d(i,{...a,enabled:e})})]}),(0,q.jsxs)(`div`,{className:`rounded-md border bg-muted/20 p-3 space-y-2`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,q.jsx)(`div`,{className:`text-sm font-medium`,children:`Polling interval`}),(0,q.jsx)(N,{variant:`outline`,className:`tabular-nums`,children:Oe(a.pollIntervalMs)})]}),(0,q.jsx)(`input`,{type:`range`,min:Te,max:Ee,step:1,value:$(a.pollIntervalMs),disabled:o||!a.enabled,onChange:e=>{let t=Number(e.target.value)*6e4;n(e=>({...e??{},[i]:{...a,pollIntervalMs:t}}))},onPointerUp:e=>void d(i,{...a,pollIntervalMs:Number(e.target.value)*6e4}),onKeyUp:e=>void d(i,{...a,pollIntervalMs:Number(e.target.value)*6e4}),className:`w-full accent-primary disabled:opacity-50`}),(0,q.jsxs)(`div`,{className:`flex justify-between text-[10px] text-muted-foreground`,children:[(0,q.jsxs)(`span`,{children:[Te,` min`]}),(0,q.jsxs)(`span`,{children:[Ee,` min`]})]})]}),(0,q.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded-md border bg-muted/20 p-3`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`div`,{className:`text-sm font-medium`,children:`Show in quota widget`}),(0,q.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`Display only. Off hides this provider from the dashboard widget; collection continues if enabled.`})]}),(0,q.jsx)(I,{checked:a.showInWidget,disabled:o,onCheckedChange:e=>void d(i,{...a,showInWidget:e})})]})]})]},i)})]})}var Ae=`browser`,je=`models`;function Me(){if(typeof window>`u`)return``;let e=window.location.hash.replace(/^#/,``);return e.startsWith(`settings/`)?decodeURIComponent(e.slice(9)):``}function Ne(e){if(typeof window>`u`)return;let t=new URL(window.location.href);t.hash=`settings/${encodeURIComponent(e)}`,window.history.pushState({},``,t)}function Pe(){let[e,n]=(0,U.useState)([]),[r,i]=(0,U.useState)(null),[a,s]=(0,U.useState)([]),[c,u]=(0,U.useState)(()=>Me()),[f,p]=(0,U.useState)(!0),[m,g]=(0,U.useState)(``),[_,v]=(0,U.useState)(``);async function y(){p(!0),g(``),v(``);try{let[e,t,r]=await Promise.all([l(`GET`,`/settings`),l(`GET`,`/tokens/me`),l(`GET`,`/providers`).catch(e=>(v(e.message),{catalog:[]}))]);n(e.settings),i(t),s(r.catalog)}catch(e){g(e.message)}finally{p(!1)}}(0,U.useEffect)(()=>{y()},[]),(0,U.useEffect)(()=>{let e=()=>u(Me());return window.addEventListener(`hashchange`,e),window.addEventListener(`popstate`,e),()=>{window.removeEventListener(`hashchange`,e),window.removeEventListener(`popstate`,e)}},[]);let b=(0,U.useMemo)(()=>ie(e),[e]),x=(0,U.useMemo)(()=>[...b.map(e=>({slug:e.slug,label:e.group,description:`${e.settings.length} schema setting${e.settings.length===1?``:`s`}`,kind:`descriptors`,settings:e.settings})),{slug:Ae,label:`Browser`,description:`Local dashboard preferences`,kind:`browser`,settings:[]},{slug:je,label:`Models`,description:`Provider model catalog`,kind:`models`,settings:[]}],[b]),S=x.find(e=>e.slug===c)??x[0];function C(e){u(e),Ne(e)}function w(e){n(t=>t.map(t=>W(t)===W(e)?e:t))}return(0,q.jsxs)(`div`,{className:`space-y-4`,children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-3`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`h1`,{className:`text-lg font-semibold`,children:`Settings`}),(0,q.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Schema-driven Relay settings, browser preferences, and model catalog controls.`})]}),(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[r&&(0,q.jsxs)(N,{variant:`outline`,className:`gap-1`,children:[(0,q.jsx)(d,{className:`size-3`}),r.kind,`:`,r.actor]}),(0,q.jsxs)(P,{variant:`outline`,size:`sm`,onClick:()=>void y(),disabled:f,children:[(0,q.jsx)(o,{className:t(`size-4`,f&&`animate-spin`)}),`Refresh`]})]})]}),m&&(0,q.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-destructive/40 bg-destructive/10 p-3 text-sm text-destructive`,children:[(0,q.jsx)(h,{className:`mt-0.5 size-4`}),(0,q.jsx)(`span`,{children:m})]}),(0,q.jsxs)(`div`,{className:`grid gap-4 lg:grid-cols-[230px_minmax(0,1fr)]`,children:[(0,q.jsx)(`nav`,{className:`space-y-1 lg:sticky lg:top-4 lg:self-start`,children:x.map(e=>(0,q.jsxs)(`button`,{type:`button`,className:t(`w-full rounded-md border px-3 py-2 text-left text-sm transition-colors`,S?.slug===e.slug?`border-primary/50 bg-primary/10 text-foreground`:`border-transparent hover:border-border hover:bg-accent`),onClick:()=>C(e.slug),children:[(0,q.jsx)(`span`,{className:`block font-medium`,children:e.label}),(0,q.jsx)(`span`,{className:`block truncate text-xs text-muted-foreground`,children:e.description})]},e.slug))}),(0,q.jsx)(`div`,{className:`min-w-0 space-y-4`,children:f&&!e.length?(0,q.jsx)(H,{size:`sm`,children:(0,q.jsx)(V,{className:`text-sm text-muted-foreground`,children:`Loading settings…`})}):S?.kind===`descriptors`?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(ge,{group:S.label,settings:S.settings,onSaved:w}),S.label===`Providers`&&(0,q.jsx)(ke,{canWrite:E(r?.scopes,`settings:write:provider`)})]}):S?.kind===`browser`?(0,q.jsx)(be,{}):(0,q.jsx)(Se,{catalog:a,error:_,canWrite:E(r?.scopes,`settings:write:provider`),onCatalog:s})})]})]})}export{Pe as SettingsView};
|
|
4
|
-
//# sourceMappingURL=settings-IrNBT0hy.js.map
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./chunk-CilyBKbf.js";import{$t as t,An as n,At as r,Fn as i,Hn as a,It as o,K as s,N as c,Nt as l,Rn as u,Rt as d,St as f,Tt as p,dn as m,i as h,m as g,mn as _,p as v,pn as y,tr as b,wt as x,zt as S}from"./lucide-react-D78N6SwK.js";import{l as C,t as w}from"./store-CqFZmc-B.js";import{$ as T,K as E,d as D}from"./display-CWMHll1J.js";import{t as O}from"./badge-BwaoBnNO.js";import{t as k}from"./button-CFIklTDX.js";import{t as A}from"./copy-button-A0pXLXBy.js";import{a as j,o as M,r as N,t as P}from"./card-Bi94xEmr.js";var F=e(b(),1),I=a(),L=new Set([`active`,`ready`,`conflict`,`review_requested`,`merge_planned`,`cleanup_requested`]),R=new Set([`active`,`ready`,`conflict`,`review_requested`,`merge_planned`]),z=new Set([`active`,`ready`,`review_requested`,`merge_planned`,`conflict`]),B={active:`bg-blue-500/10 text-blue-400 border-blue-500/20`,ready:`bg-emerald-500/10 text-emerald-400 border-emerald-500/20`,conflict:`bg-red-500/10 text-red-400 border-red-500/20`,review_requested:`bg-yellow-500/10 text-yellow-400 border-yellow-500/20`,merge_planned:`bg-indigo-500/10 text-indigo-400 border-indigo-500/20`,merged:`bg-violet-500/10 text-violet-400 border-violet-500/20`,abandoned:`bg-zinc-500/10 text-zinc-400 border-zinc-500/20`,cleanup_requested:`bg-orange-500/10 text-orange-400 border-orange-500/20`,cleaned:`bg-zinc-500/10 text-zinc-400 border-zinc-500/20`},V={active:`active`,ready:`ready`,conflict:`conflict`,review_requested:`review`,merge_planned:`merge planned`,merged:`merged`,abandoned:`abandoned`,cleanup_requested:`cleanup`,cleaned:`cleaned`},H={conflict:0,ready:1,review_requested:2,merge_planned:3,active:4,cleanup_requested:5,merged:6,abandoned:7,cleaned:8},U=new Set(T);function W(e){let t=e.split(`/`).filter(Boolean);return t.length<=3?e||`-`:`/${t.slice(-3).join(`/`)}`}function G(e,t){return e?D(e):t||`-`}function K(e){return B[e]||`bg-zinc-500/10 text-zinc-400 border-zinc-500/20`}function q(e,t){let n=(H[e.status]??99)-(H[t.status]??99);return n===0?Number(t.updatedAt||0)-Number(e.updatedAt||0):n}function J(e){let t=new Map;for(let n of e){let e=n.repoRoot||n.sourceCwd||`unknown repo`;t.set(e,[...t.get(e)||[],n])}return[...t.entries()].map(([e,t])=>({repoRoot:e,workspaces:t.sort(q)})).sort((e,t)=>{let n=e.workspaces.some(e=>L.has(e.status));return n===t.workspaces.some(e=>L.has(e.status))?e.repoRoot.localeCompare(t.repoRoot):n?-1:1})}function Y(e,t){return t===`all`?e:t===`cleaned`?e.filter(e=>U.has(e.status)):e.filter(e=>!U.has(e.status))}function X({workspace:e,expanded:t,onToggleDetails:n}){let i=w(e=>e.workspaceAction),a=w(e=>e.purgeWorkspace),o=w(e=>e.fetchWorkspaceMergePreview),s=w(e=>e.openFilesAt),c=e.status===`cleaned`||e.status===`merged`||e.status===`abandoned`,u=c||e.status===`cleanup_requested`,d=e.worktreePath||e.sourceCwd||e.repoRoot,p=w(t=>t.workspaceGitState[e.id]),v=!!p&&p.available!==!1&&p.landed===!0,b=e.mode===`isolated`&&!!e.worktreePath&&z.has(e.status)&&!v;async function x(){await o(e.id),await i(e.id,`merge`)}return(0,I.jsxs)(`div`,{className:`flex flex-wrap justify-end gap-1.5`,children:[(0,I.jsx)(k,{size:`icon-sm`,variant:`ghost`,title:t?`Hide details`:`Show diff & timeline`,onClick:n,children:t?(0,I.jsx)(y,{className:`h-3.5 w-3.5`}):(0,I.jsx)(m,{className:`h-3.5 w-3.5`})}),(0,I.jsx)(k,{size:`icon-sm`,variant:`ghost`,title:`Open workspace`,disabled:!d||e.status===`cleaned`,onClick:()=>void s({path:d}),children:(0,I.jsx)(r,{className:`h-3.5 w-3.5`})}),(0,I.jsx)(A,{value:d,label:`Copy path`,copiedLabel:`Copied path`,size:`icon-sm`,variant:`ghost`,disabled:!d}),(0,I.jsx)(k,{size:`icon-sm`,variant:`outline`,title:`Mark ready`,disabled:u||e.status===`ready`,onClick:()=>void i(e.id,`ready`),children:(0,I.jsx)(_,{className:`h-3.5 w-3.5`})}),(0,I.jsx)(k,{size:`icon-sm`,variant:`outline`,title:`Request review`,disabled:u||e.status===`review_requested`,onClick:()=>void i(e.id,`request-review`),children:(0,I.jsx)(S,{className:`h-3.5 w-3.5`})}),(0,I.jsx)(k,{size:`icon-sm`,variant:`outline`,title:`Mark merge planned`,disabled:u||e.status===`merge_planned`,onClick:()=>void i(e.id,`merge-plan`),children:(0,I.jsx)(l,{className:`h-3.5 w-3.5`})}),(0,I.jsx)(k,{size:`icon-sm`,variant:`default`,title:v?`Already merged into base — nothing to land`:`Merge & land work`,disabled:!b,onClick:()=>void x(),children:(0,I.jsx)(f,{className:`h-3.5 w-3.5`})}),(0,I.jsx)(k,{size:`icon-sm`,variant:`outline`,title:`Request cleanup (removes the worktree on the host)`,disabled:e.status===`cleaned`||e.status===`cleanup_requested`,onClick:()=>void i(e.id,`cleanup`),children:(0,I.jsx)(g,{className:`h-3.5 w-3.5`})}),c&&(0,I.jsx)(k,{size:`icon-sm`,variant:`ghost`,title:`Purge record (clears the row, does not touch disk)`,onClick:()=>void a(e.id),children:(0,I.jsx)(h,{className:`h-3.5 w-3.5`})})]})}function Z({workspace:e,unmerged:t}){let n=w(t=>t.workspaceMergePreview[e.id]),r=w(e=>e.fetchWorkspaceMergePreview),i=t>0&&z.has(e.status);return(0,F.useEffect)(()=>{i&&n===void 0&&r(e.id)},[i,n,e.id,r]),!i||n===void 0||n.available===!1?null:n.conflict?(0,I.jsxs)(`span`,{className:`flex items-center gap-0.5 text-amber-400`,title:`Merging into ${n.baseRef||`base`} would conflict — resolve before merging`,children:[(0,I.jsx)(v,{className:`h-3 w-3`}),`conflict`]}):n.conflict===!1?(0,I.jsxs)(`span`,{className:`flex items-center gap-0.5 text-emerald-400`,title:`Clean to merge via ${n.strategy===`pr`?`PR`:`rebase + fast-forward`} into ${n.baseRef||`base`}`,children:[(0,I.jsx)(_,{className:`h-3 w-3`}),n.strategy===`pr`?`PR ready`:`clean`]}):null}function Q({workspace:e}){let t=C(),r=w(t=>t.workspaceGitState[e.id]),a=w(e=>e.fetchWorkspaceGitState),s=e.mode===`isolated`&&!!e.worktreePath&&R.has(e.status);if((0,F.useEffect)(()=>{s&&r===void 0&&a(e.id)},[s,r,e.id,a]),!s)return null;let l=(0,I.jsx)(k,{size:`icon-sm`,variant:`ghost`,className:`h-5 w-5`,title:`Refresh git state`,onClick:()=>void a(e.id),children:(0,I.jsx)(c,{className:`h-3 w-3`})});if(r===void 0)return(0,I.jsx)(`div`,{className:`flex items-center gap-1 text-[11px] text-muted-foreground`,children:`Loading git state…`});if(r.available===!1)return(0,I.jsxs)(`div`,{className:`flex items-center gap-1 text-[11px] text-muted-foreground`,title:r.reason,children:[(0,I.jsx)(`span`,{children:`git state unavailable`}),l]});if(r.missing)return(0,I.jsxs)(`div`,{className:`flex items-center gap-1 text-[11px] text-muted-foreground`,children:[`worktree gone `,l]});if(r.error)return(0,I.jsxs)(`div`,{className:`flex items-center gap-1 text-[11px] text-red-400`,title:r.error,children:[(0,I.jsx)(`span`,{children:`git error`}),l]});let u=r.ahead??0,d=r.landed===!0,f=d?0:r.unmergedAhead??u,p=r.behind??0,m=r.dirtyCount??0,h=f===0&&m===0&&!d,g=r.lastCommit;return(0,I.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-0.5 text-[11px]`,children:[h?(0,I.jsx)(`span`,{className:`text-muted-foreground`,children:`no unmerged work`}):(0,I.jsxs)(I.Fragment,{children:[d?(0,I.jsxs)(`span`,{className:`flex items-center gap-0.5 text-emerald-400`,title:`Work already landed in ${r.baseRef||`base`} via squash/cherry-pick — safe to clean up`,children:[(0,I.jsx)(_,{className:`h-3 w-3`}),`landed`]}):(0,I.jsxs)(`span`,{className:f>0?`flex items-center text-emerald-400`:`flex items-center text-muted-foreground`,title:u===f?`${f} commit(s) ahead of base`:`${f} unmerged commit(s) (${u} ahead of base)`,children:[(0,I.jsx)(n,{className:`h-3 w-3`}),f]}),(0,I.jsxs)(`span`,{className:p>0?`flex items-center text-amber-400`:`flex items-center text-muted-foreground`,title:`${p} commit(s) behind base`,children:[(0,I.jsx)(i,{className:`h-3 w-3`}),p]}),m>0&&(0,I.jsxs)(`span`,{className:`flex items-center text-orange-400`,title:`${m} uncommitted change(s)`,children:[(0,I.jsx)(o,{className:`h-3 w-3`}),m]}),!d&&(0,I.jsx)(Z,{workspace:e,unmerged:f})]}),l]}),g&&(0,I.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1 text-[11px] text-muted-foreground`,title:`${g.sha.slice(0,8)} — ${g.message}`,children:[(0,I.jsx)(x,{className:`h-3 w-3 shrink-0`}),(0,I.jsx)(`span`,{className:`truncate`,children:g.message||g.sha.slice(0,8)}),g.at?(0,I.jsxs)(`span`,{className:`shrink-0 opacity-70`,children:[`· `,E(t,g.at)]}):null]})]})}function $({workspace:e}){let n=C(),r=typeof e.metadata?.mergedAt==`number`?e.metadata.mergedAt:void 0,i=[{label:`created`,at:e.createdAt},{label:`ready`,at:e.readyAt},{label:`merged`,at:r},{label:`cleaned`,at:e.cleanedAt}].filter(e=>typeof e.at==`number`&&e.at>0);return(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px] text-muted-foreground`,children:[(0,I.jsxs)(`span`,{className:`flex items-center gap-1 font-medium text-foreground`,children:[(0,I.jsx)(t,{className:`h-3 w-3`}),`Timeline`]}),i.map((e,t)=>(0,I.jsxs)(`span`,{className:`flex items-center gap-1`,children:[t>0&&(0,I.jsx)(`span`,{className:`opacity-40`,children:`→`}),(0,I.jsx)(`span`,{className:`text-foreground`,children:e.label}),(0,I.jsx)(`span`,{title:new Date(e.at).toLocaleString(),children:E(n,e.at)})]},e.label))]})}function ee(e){return e.startsWith(`+`)&&!e.startsWith(`+++`)?`text-emerald-400`:e.startsWith(`-`)&&!e.startsWith(`---`)?`text-red-400`:e.startsWith(`@@`)?`text-cyan-400`:e.startsWith(`diff `)||e.startsWith(`index `)||e.startsWith(`+++`)||e.startsWith(`---`)?`text-muted-foreground`:``}function te({workspace:e}){let t=w(t=>t.workspaceDiff[e.id]),n=w(e=>e.fetchWorkspaceDiff),r=e.mode===`isolated`&&!!e.worktreePath;if((0,F.useEffect)(()=>{r&&t===void 0&&n(e.id)},[r,t,e.id,n]),!r)return null;if(t===void 0)return(0,I.jsx)(`div`,{className:`text-[11px] text-muted-foreground`,children:`Loading diff…`});if(t.available===!1)return(0,I.jsxs)(`div`,{className:`text-[11px] text-muted-foreground`,children:[`Diff unavailable`,t.reason?`: ${t.reason}`:``]});if(t.missing)return(0,I.jsx)(`div`,{className:`text-[11px] text-muted-foreground`,children:`Worktree no longer on disk`});if(t.error)return(0,I.jsxs)(`div`,{className:`text-[11px] text-red-400`,children:[`Diff error: `,t.error]});if(!t.files.length)return(0,I.jsxs)(`div`,{className:`text-[11px] text-muted-foreground`,children:[`No committed changes against `,t.baseRef||`base`]});let i=(0,I.jsx)(k,{size:`icon-sm`,variant:`ghost`,className:`h-5 w-5`,title:`Refresh diff`,onClick:()=>void n(e.id),children:(0,I.jsx)(c,{className:`h-3 w-3`})});return(0,I.jsxs)(`div`,{className:`space-y-1`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] font-medium`,children:[(0,I.jsx)(d,{className:`h-3 w-3`}),(0,I.jsxs)(`span`,{children:[t.files.length,` file`,t.files.length===1?``:`s`,` vs `,t.baseRef||`base`]}),i]}),(0,I.jsx)(`ul`,{className:`space-y-0.5 text-[11px]`,children:t.files.map(e=>(0,I.jsxs)(`li`,{className:`flex items-center gap-2 font-mono`,children:[(0,I.jsx)(`span`,{className:`truncate`,title:e.path,children:e.path}),e.binary?(0,I.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:`binary`}):(0,I.jsxs)(`span`,{className:`shrink-0`,children:[(0,I.jsxs)(`span`,{className:`text-emerald-400`,children:[`+`,e.additions??0]}),` `,(0,I.jsxs)(`span`,{className:`text-red-400`,children:[`−`,e.deletions??0]})]})]},e.path))}),t.patch&&(0,I.jsxs)(`pre`,{className:`max-h-80 overflow-auto rounded border border-border bg-muted/30 p-2 text-[10.5px] leading-relaxed`,children:[t.patch.split(`
|
|
2
|
-
`).map((e,t)=>(0,I.jsx)(`div`,{className:ee(e),children:e||` `},t)),t.truncated&&(0,I.jsx)(`div`,{className:`mt-1 text-muted-foreground`,children:`… patch truncated`})]})]})}function ne({workspace:e}){return(0,I.jsxs)(`div`,{className:`space-y-3 border-t border-dashed border-border bg-muted/20 px-3 py-3`,children:[(0,I.jsx)($,{workspace:e}),(0,I.jsx)(te,{workspace:e})]})}function re(){let e=w(e=>e.workspaceOrphans),t=w(e=>e.fetchWorkspaceOrphans),n=w(e=>e.reclaimWorkspaceOrphan);return(0,F.useEffect)(()=>{t()},[t]),e.length?(0,I.jsxs)(P,{className:`border-amber-500/30`,children:[(0,I.jsxs)(j,{className:`px-4 py-3`,children:[(0,I.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,I.jsx)(s,{className:`h-4 w-4 text-amber-400`}),(0,I.jsx)(M,{className:`text-sm font-medium`,children:`Orphaned worktrees`}),(0,I.jsx)(O,{variant:`outline`,className:`border-amber-500/30 text-amber-400 text-[10px]`,children:e.length}),(0,I.jsx)(k,{size:`icon-sm`,variant:`ghost`,className:`ml-auto h-6 w-6`,title:`Rescan`,onClick:()=>void t(),children:(0,I.jsx)(c,{className:`h-3.5 w-3.5`})})]}),(0,I.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:`Agent worktrees on disk with no live workspace. Reclaim removes them from the host.`})]}),(0,I.jsx)(N,{className:`p-0`,children:e.map(e=>(0,I.jsxs)(`div`,{className:`flex items-center gap-3 border-t border-border px-4 py-2 text-xs`,children:[(0,I.jsx)(p,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground`}),(0,I.jsx)(`span`,{className:`truncate font-medium`,title:e.branch,children:e.branch||`(detached)`}),(0,I.jsx)(`span`,{className:`truncate font-mono text-muted-foreground`,title:e.worktreePath,children:W(e.worktreePath)}),e.hadTerminalRow&&(0,I.jsx)(O,{variant:`outline`,className:`text-[10px]`,children:`cleanup failed`}),(0,I.jsxs)(k,{size:`sm`,variant:`outline`,className:`ml-auto h-7 text-xs`,onClick:()=>void n(e),children:[(0,I.jsx)(u,{className:`mr-1 h-3.5 w-3.5`}),`Reclaim`]})]},e.worktreePath))})]}):null}function ie(e){let t=e.match(/\/pull\/(\d+)/);return t?`PR #${t[1]}`:`View PR`}function ae({workspace:e}){let t=e.metadata?.mergeResult,n=t?.prUrl,r=t?.error||e.metadata?.mergeError;return!n&&!r?null:(0,I.jsxs)(I.Fragment,{children:[n&&(0,I.jsxs)(`a`,{href:n,target:`_blank`,rel:`noreferrer`,title:n,className:`inline-flex items-center gap-0.5 rounded border border-violet-500/30 px-1.5 py-0 text-[10px] text-violet-400 hover:text-violet-300`,children:[(0,I.jsx)(f,{className:`h-2.5 w-2.5`}),ie(n)]}),r&&(0,I.jsxs)(O,{variant:`outline`,className:`max-w-[16rem] border-amber-500/30 text-amber-400 text-[10px]`,title:r,children:[(0,I.jsx)(v,{className:`mr-0.5 h-2.5 w-2.5 shrink-0`}),(0,I.jsxs)(`span`,{className:`truncate`,children:[`merge: `,r]})]})]})}function oe({workspace:e}){let t=C(),[n,r]=(0,F.useState)(!1),i=w(e=>e.agentsById),a=w(t=>t.workspaceFocusId===e.id),o=e.ownerAgentId?i[e.ownerAgentId]:void 0,s=e.stewardAgentId?i[e.stewardAgentId]:void 0,c=e.worktreePath||e.sourceCwd||e.repoRoot,l=(0,F.useRef)(null);return(0,F.useEffect)(()=>{a&&l.current?.scrollIntoView({behavior:`smooth`,block:`center`})},[a]),(0,I.jsxs)(`div`,{ref:l,className:`border-t border-border ${a?`bg-primary/5 ring-1 ring-inset ring-primary/40`:``}`,children:[(0,I.jsxs)(`div`,{className:`grid gap-3 px-3 py-3 text-sm lg:grid-cols-[minmax(180px,1.2fr)_minmax(220px,1.5fr)_minmax(160px,1fr)_minmax(170px,auto)]`,children:[(0,I.jsxs)(`div`,{className:`min-w-0 space-y-1`,children:[(0,I.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,I.jsx)(p,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground`}),(0,I.jsx)(`span`,{className:`truncate font-medium`,title:e.branch||e.id,children:e.branch||e.id})]}),(0,I.jsxs)(`div`,{className:`flex flex-wrap gap-1`,children:[(0,I.jsx)(O,{variant:`outline`,className:`text-[10px] ${e.mode===`isolated`?`border-sky-500/30 text-sky-400`:`border-zinc-500/30 text-zinc-400`}`,children:e.mode}),e.requestedMode&&e.requestedMode!==e.mode&&(0,I.jsxs)(O,{variant:`outline`,className:`text-[10px]`,children:[`requested `,e.requestedMode]}),(0,I.jsx)(O,{variant:`outline`,className:`text-[10px] ${K(e.status)}`,children:V[e.status]||e.status}),(0,I.jsx)(ae,{workspace:e})]})]}),(0,I.jsxs)(`div`,{className:`min-w-0 space-y-1`,children:[(0,I.jsx)(`div`,{className:`truncate font-mono text-xs`,title:c,children:W(c)}),(0,I.jsx)(`div`,{className:`truncate text-xs text-muted-foreground`,title:e.sourceCwd,children:e.sourceCwd}),(0,I.jsx)(Q,{workspace:e})]}),(0,I.jsxs)(`div`,{className:`grid grid-cols-[4.5rem_minmax(0,1fr)] gap-x-2 gap-y-1 text-xs`,children:[(0,I.jsx)(`span`,{className:`text-muted-foreground`,children:`Owner`}),(0,I.jsx)(`span`,{className:`truncate`,title:e.ownerAgentId,children:G(o,e.ownerPolicyName||e.ownerAgentId)}),(0,I.jsx)(`span`,{className:`text-muted-foreground`,children:`Steward`}),(0,I.jsx)(`span`,{className:`truncate`,title:e.stewardAgentId,children:G(s,e.stewardAgentId)}),(0,I.jsx)(`span`,{className:`text-muted-foreground`,children:`Updated`}),(0,I.jsx)(`span`,{children:E(t,e.updatedAt)}),e.baseRef&&(0,I.jsxs)(I.Fragment,{children:[(0,I.jsx)(`span`,{className:`text-muted-foreground`,children:`Base`}),(0,I.jsx)(`span`,{className:`truncate`,title:e.baseSha,children:e.baseRef})]})]}),(0,I.jsx)(X,{workspace:e,expanded:n,onToggleDetails:()=>r(e=>!e)})]}),n&&(0,I.jsx)(ne,{workspace:e})]})}function se({repoRoot:e,workspaces:t}){let n=t.filter(e=>L.has(e.status)).length,r=t.filter(e=>e.status===`ready`||e.status===`review_requested`||e.status===`merge_planned`).length,i=t.filter(e=>e.status===`conflict`).length;return(0,I.jsxs)(P,{children:[(0,I.jsx)(j,{className:`px-4 py-3`,children:(0,I.jsx)(`div`,{className:`flex min-w-0 items-start gap-3`,children:(0,I.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,I.jsx)(M,{className:`truncate text-sm font-medium`,title:e,children:e}),(0,I.jsxs)(`div`,{className:`mt-1 flex flex-wrap gap-1.5`,children:[(0,I.jsxs)(O,{variant:`outline`,className:`text-[10px]`,children:[t.length,` total`]}),(0,I.jsxs)(O,{variant:`outline`,className:`text-[10px]`,children:[n,` live`]}),r>0&&(0,I.jsxs)(O,{variant:`outline`,className:`border-emerald-500/20 text-emerald-400 text-[10px]`,children:[r,` merge signal`]}),i>0&&(0,I.jsxs)(O,{variant:`outline`,className:`border-red-500/20 text-red-400 text-[10px]`,children:[i,` conflict`]})]})]})})}),(0,I.jsx)(N,{className:`p-0`,children:t.map(e=>(0,I.jsx)(oe,{workspace:e},e.id))})]})}function ce(){let[e,t]=(0,F.useState)(`active`),n=w(e=>e.workspaces),r=w(e=>e.set),i=w(e=>e.workspaceFocusId);(0,F.useEffect)(()=>{i&&t(`all`)},[i]),(0,F.useEffect)(()=>()=>{r({workspaceFocusId:null})},[r]);let a=(0,F.useMemo)(()=>Y(n,e),[n,e]),o=(0,F.useMemo)(()=>J(a),[a]),s=n.filter(e=>L.has(e.status)).length,c=n.filter(e=>e.mode===`isolated`).length,l=n.filter(e=>e.status===`ready`||e.status===`review_requested`||e.status===`merge_planned`).length,u=n.filter(e=>e.status===`conflict`).length,d=n.filter(e=>U.has(e.status)).length,f=[{key:`active`,label:`Active`,count:n.length-d},{key:`cleaned`,label:`Done`,count:d},{key:`all`,label:`All`,count:n.length}];return(0,I.jsxs)(`div`,{className:`space-y-4`,children:[(0,I.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,I.jsxs)(`div`,{children:[(0,I.jsx)(`h1`,{className:`text-2xl font-semibold`,children:`Workspaces`}),(0,I.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Agent worktrees, ownership, and merge readiness.`})]}),(0,I.jsxs)(`div`,{className:`ml-auto flex flex-wrap gap-1.5`,children:[(0,I.jsxs)(O,{variant:`outline`,children:[c,` isolated`]}),(0,I.jsxs)(O,{variant:`outline`,children:[s,` live`]}),(0,I.jsxs)(O,{variant:`outline`,children:[l,` ready`]}),u>0&&(0,I.jsxs)(O,{variant:`outline`,className:`border-red-500/20 text-red-400`,children:[u,` conflict`]})]})]}),(0,I.jsx)(re,{}),(0,I.jsx)(`div`,{className:`flex flex-wrap items-center gap-2`,children:(0,I.jsx)(`div`,{className:`flex rounded-md border border-border bg-card p-1`,children:f.map(n=>(0,I.jsxs)(k,{size:`sm`,variant:e===n.key?`secondary`:`ghost`,className:`h-7 text-xs`,onClick:()=>t(n.key),children:[n.label,(0,I.jsx)(`span`,{className:`ml-1 text-muted-foreground`,children:n.count})]},n.key))})}),o.length===0?(0,I.jsxs)(`div`,{className:`rounded-md border border-border px-3 py-12 text-center text-sm text-muted-foreground`,children:[`No `,e===`all`?``:e,` workspaces`]}):(0,I.jsx)(`div`,{className:`space-y-3`,children:o.map(e=>(0,I.jsx)(se,{repoRoot:e.repoRoot,workspaces:e.workspaces},e.repoRoot))})]})}export{ce as WorkspacesView};
|
|
3
|
-
//# sourceMappingURL=workspaces-hIjZicaF.js.map
|