agent-relay-server 0.61.2 → 0.62.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 +479 -1
- package/package.json +2 -2
- package/public/assets/{MessageBubble-DVvlvi4B.js → MessageBubble-DRrxfjyT.js} +2 -2
- package/public/assets/{MessageBubble-DVvlvi4B.js.map → MessageBubble-DRrxfjyT.js.map} +1 -1
- package/public/assets/PlanGraphPanel-Dp2eYazz.js +2 -0
- package/public/assets/PlanGraphPanel-Dp2eYazz.js.map +1 -0
- package/public/assets/{activity-IYl3MEXC.js → activity--t0U2yzq.js} +2 -2
- package/public/assets/{activity-IYl3MEXC.js.map → activity--t0U2yzq.js.map} +1 -1
- package/public/assets/{agent-profiles-BfGTTbeY.js → agent-profiles-BMtJYzxn.js} +2 -2
- package/public/assets/{agent-profiles-BfGTTbeY.js.map → agent-profiles-BMtJYzxn.js.map} +1 -1
- package/public/assets/{agents-BquvREQr.js → agents-Ck9AePlc.js} +2 -2
- package/public/assets/{agents-BquvREQr.js.map → agents-Ck9AePlc.js.map} +1 -1
- package/public/assets/{analytics-De0cEZGx.js → analytics-CzfK387L.js} +3 -3
- package/public/assets/{analytics-De0cEZGx.js.map → analytics-CzfK387L.js.map} +1 -1
- package/public/assets/automation-Cgw8vtE8.js +2 -0
- package/public/assets/automation-Cgw8vtE8.js.map +1 -0
- package/public/assets/{badge-DhLyCPag.js → badge-CZhIdlTJ.js} +2 -2
- package/public/assets/{badge-DhLyCPag.js.map → badge-CZhIdlTJ.js.map} +1 -1
- package/public/assets/{branch-state-badge-DSyWKluD.js → branch-state-badge-DnEEPtOP.js} +2 -2
- package/public/assets/{branch-state-badge-DSyWKluD.js.map → branch-state-badge-DnEEPtOP.js.map} +1 -1
- package/public/assets/{button-K20wAZG1.js → button-2taQeNHW.js} +2 -2
- package/public/assets/{button-K20wAZG1.js.map → button-2taQeNHW.js.map} +1 -1
- package/public/assets/card-DzIsAI41.js +2 -0
- package/public/assets/{card-CcZ9hLI7.js.map → card-DzIsAI41.js.map} +1 -1
- package/public/assets/channels-Dc3L2MQs.js +2 -0
- package/public/assets/{channels-BG0Nib7y.js.map → channels-Dc3L2MQs.js.map} +1 -1
- package/public/assets/chat-Fc6iJ7sa.js +2 -0
- package/public/assets/{chat-Dx6qWNxb.js.map → chat-Fc6iJ7sa.js.map} +1 -1
- package/public/assets/{connectors-DWh7MwV_.js → connectors-Dc2ttGWs.js} +2 -2
- package/public/assets/{connectors-DWh7MwV_.js.map → connectors-Dc2ttGWs.js.map} +1 -1
- package/public/assets/copy-button-HEkwi6xX.js +2 -0
- package/public/assets/{copy-button-eF3cKp4Q.js.map → copy-button-HEkwi6xX.js.map} +1 -1
- package/public/assets/display-DzNvOu1j.js.map +1 -1
- package/public/assets/dist-1rXN5FN9.js +2 -0
- package/public/assets/{dist-YpHfnnIA.js.map → dist-1rXN5FN9.js.map} +1 -1
- package/public/assets/{dist-1dhfdhm9.js → dist-AbEQuFoK.js} +2 -2
- package/public/assets/{dist-1dhfdhm9.js.map → dist-AbEQuFoK.js.map} +1 -1
- package/public/assets/{dist-COQuunEv.js → dist-B7p1zkvf.js} +2 -2
- package/public/assets/{dist-COQuunEv.js.map → dist-B7p1zkvf.js.map} +1 -1
- package/public/assets/{dist-Ci5Y37nj.js → dist-CG10hM1-.js} +2 -2
- package/public/assets/{dist-Ci5Y37nj.js.map → dist-CG10hM1-.js.map} +1 -1
- package/public/assets/dist-Cfm5_zPB.js +2 -0
- package/public/assets/{dist-qd198ib9.js.map → dist-Cfm5_zPB.js.map} +1 -1
- package/public/assets/{dist-BrQsqBbc.js → dist-Cgw85UcE.js} +2 -2
- package/public/assets/{dist-BrQsqBbc.js.map → dist-Cgw85UcE.js.map} +1 -1
- package/public/assets/{dist-CoROafNg.js → dist-D3_TJKTC.js} +2 -2
- package/public/assets/{dist-CoROafNg.js.map → dist-D3_TJKTC.js.map} +1 -1
- package/public/assets/{dist-I-MFUv51.js → dist-DQkLq0hs.js} +2 -2
- package/public/assets/{dist-I-MFUv51.js.map → dist-DQkLq0hs.js.map} +1 -1
- package/public/assets/{dist-UQGKwqZH.js → dist-D_sl7u_f.js} +2 -2
- package/public/assets/{dist-UQGKwqZH.js.map → dist-D_sl7u_f.js.map} +1 -1
- package/public/assets/{dist-yGOq6sB3.js → dist-Ilb3r1im.js} +2 -2
- package/public/assets/{dist-yGOq6sB3.js.map → dist-Ilb3r1im.js.map} +1 -1
- package/public/assets/dist-Pf_3Gf38.js +2 -0
- package/public/assets/{dist-BLBF7qqr.js.map → dist-Pf_3Gf38.js.map} +1 -1
- package/public/assets/{es2015-CRxz9lOj.js → es2015-GSepNaIS.js} +2 -2
- package/public/assets/{es2015-CRxz9lOj.js.map → es2015-GSepNaIS.js.map} +1 -1
- package/public/assets/{formatted-body-impl-DMm6jeqi.js → formatted-body-impl-Bg-gx7rG.js} +2 -2
- package/public/assets/{formatted-body-impl-DMm6jeqi.js.map → formatted-body-impl-Bg-gx7rG.js.map} +1 -1
- package/public/assets/index-BeDncjN4.js +22 -0
- package/public/assets/index-BeDncjN4.js.map +1 -0
- package/public/assets/index-DiR-fqy_.css +2 -0
- package/public/assets/{input-BHYNpXAG.js → input-BsNqlONJ.js} +2 -2
- package/public/assets/{input-BHYNpXAG.js.map → input-BsNqlONJ.js.map} +1 -1
- package/public/assets/{insights-C7wKt1_l.js → insights-c08aW-7n.js} +2 -2
- package/public/assets/{insights-C7wKt1_l.js.map → insights-c08aW-7n.js.map} +1 -1
- package/public/assets/{integrations-CG9qyHUf.js → integrations-BwpgcqnF.js} +2 -2
- package/public/assets/{integrations-CG9qyHUf.js.map → integrations-BwpgcqnF.js.map} +1 -1
- package/public/assets/{lib-Df4aph5u.js → lib-bXPu6xCL.js} +2 -2
- package/public/assets/{lib-Df4aph5u.js.map → lib-bXPu6xCL.js.map} +1 -1
- package/public/assets/lucide-react-DWYjU-AF.js +9 -0
- package/public/assets/{lucide-react-L2UxFDic.js.map → lucide-react-DWYjU-AF.js.map} +1 -1
- package/public/assets/{maintenance-CjpvnV_U.js → maintenance-CTKP0kWB.js} +2 -2
- package/public/assets/{maintenance-CjpvnV_U.js.map → maintenance-CTKP0kWB.js.map} +1 -1
- package/public/assets/{managed-agents-CdfuBKJA.js → managed-agents-BofCxo8d.js} +2 -2
- package/public/assets/{managed-agents-CdfuBKJA.js.map → managed-agents-BofCxo8d.js.map} +1 -1
- package/public/assets/{markdown-preview-impl-Cf4xCmWt.js → markdown-preview-impl-CQ-6BIb8.js} +2 -2
- package/public/assets/{markdown-preview-impl-Cf4xCmWt.js.map → markdown-preview-impl-CQ-6BIb8.js.map} +1 -1
- package/public/assets/memory-DvfXjMoi.js +2 -0
- package/public/assets/{memory-xKWduhyr.js.map → memory-DvfXjMoi.js.map} +1 -1
- package/public/assets/{messages-BpZYOUtJ.js → messages-C9VsPzZ_.js} +2 -2
- package/public/assets/{messages-BpZYOUtJ.js.map → messages-C9VsPzZ_.js.map} +1 -1
- package/public/assets/orchestrators-MffVueeE.js +2 -0
- package/public/assets/{orchestrators-BrJvGIOc.js.map → orchestrators-MffVueeE.js.map} +1 -1
- package/public/assets/{overview-BUORwePi.js → overview-BSVajefM.js} +2 -2
- package/public/assets/{overview-BUORwePi.js.map → overview-BSVajefM.js.map} +1 -1
- package/public/assets/pairs-B5711-Cs.js +2 -0
- package/public/assets/{pairs-DR0GizDN.js.map → pairs-B5711-Cs.js.map} +1 -1
- package/public/assets/{react-dom-CrP_AtcL.js → react-dom-CPghDLpB.js} +2 -2
- package/public/assets/{react-dom-CrP_AtcL.js.map → react-dom-CPghDLpB.js.map} +1 -1
- package/public/assets/{security-DLwSqTc_.js → security-DkUwK9Vj.js} +2 -2
- package/public/assets/{security-DLwSqTc_.js.map → security-DkUwK9Vj.js.map} +1 -1
- package/public/assets/{select-pEru111r.js → select-DrM2RRiT.js} +2 -2
- package/public/assets/{select-pEru111r.js.map → select-DrM2RRiT.js.map} +1 -1
- package/public/assets/{settings-B-ueGvwV.js → settings-DdKCb-vy.js} +3 -3
- package/public/assets/{settings-B-ueGvwV.js.map → settings-DdKCb-vy.js.map} +1 -1
- package/public/assets/store-iTiheuTD.js +9 -0
- package/public/assets/store-iTiheuTD.js.map +1 -0
- package/public/assets/tasks-e1y1PFfO.js +2 -0
- package/public/assets/{tasks-C2rRQm6E.js.map → tasks-e1y1PFfO.js.map} +1 -1
- package/public/assets/teams-BUcxoGC_.js +2 -0
- package/public/assets/teams-BUcxoGC_.js.map +1 -0
- package/public/assets/{terminal-viewer-impl-BM_3qoeN.js → terminal-viewer-impl-CmZjQOB2.js} +3 -3
- package/public/assets/{terminal-viewer-impl-BM_3qoeN.js.map → terminal-viewer-impl-CmZjQOB2.js.map} +1 -1
- package/public/assets/{use-keyboard-viewport-DrRH_QzG.js → use-keyboard-viewport-NKw1O5gC.js} +2 -2
- package/public/assets/{use-keyboard-viewport-DrRH_QzG.js.map → use-keyboard-viewport-NKw1O5gC.js.map} +1 -1
- package/public/assets/{work-queue-CkIYDAZD.js → work-queue-CXBQx43n.js} +2 -2
- package/public/assets/{work-queue-CkIYDAZD.js.map → work-queue-CXBQx43n.js.map} +1 -1
- package/public/assets/{workspaces-CYm5bLg9.js → workspaces-D2EfZh9a.js} +3 -3
- package/public/assets/{workspaces-CYm5bLg9.js.map → workspaces-D2EfZh9a.js.map} +1 -1
- package/public/index.html +21 -21
- package/src/automations.ts +40 -7
- package/src/branch-landed.ts +5 -0
- package/src/bus.ts +6 -1
- package/src/cli/workspace.ts +9 -17
- package/src/db/activity.ts +191 -3
- package/src/db/agents.ts +14 -5
- package/src/db/integrations.ts +1 -0
- package/src/db/issue-associations.ts +128 -0
- package/src/db/issue-lifecycle.ts +187 -0
- package/src/db/issue-refs.ts +254 -0
- package/src/db/mappers.ts +2 -0
- package/src/db/migrations.ts +53 -0
- package/src/db/schema.ts +3 -2
- package/src/issue-tracker/adapter.ts +24 -0
- package/src/issue-tracker/github.ts +136 -0
- package/src/issue-tracker/index.ts +13 -0
- package/src/issue-tracker/registry.ts +26 -0
- package/src/maintenance.ts +22 -169
- package/src/mcp-issue-activity-tools.ts +114 -0
- package/src/mcp-issue-association-tools.ts +130 -0
- package/src/mcp-issue-lifecycle-tools.ts +55 -0
- package/src/mcp-issue-ref-tools.ts +174 -0
- package/src/mcp-team-tools.ts +1 -1
- package/src/mcp.ts +3 -3
- package/src/provider-config-store.ts +30 -8
- package/src/routes/activity.ts +6 -1
- package/src/routes/commands.ts +29 -0
- package/src/routes/index.ts +19 -0
- package/src/routes/issue-activity.ts +78 -0
- package/src/routes/issue-associations.ts +76 -0
- package/src/routes/issue-lifecycle.ts +34 -0
- package/src/routes/issue-refs.ts +137 -0
- package/src/routes/orchestrator-bootstrap.ts +2 -1
- package/src/routes/orchestrator.ts +42 -1
- package/src/routes/tokens.ts +1 -1
- package/src/runtime-tokens.ts +15 -11
- package/src/security.ts +51 -3
- package/src/services/issue-activity.ts +30 -0
- package/src/services/issue-associations.ts +72 -0
- package/src/services/issue-lifecycle.ts +308 -0
- package/src/services/issue-refs.ts +32 -0
- package/src/services/plan-graph.ts +40 -2
- package/src/services/team.ts +4 -0
- package/src/token-db.ts +27 -7
- package/src/workspace-actions.ts +8 -1
- package/src/workspace-auto-merge.ts +228 -0
- package/src/workspace-probe.ts +125 -0
- package/public/assets/PlanGraphPanel-Dby7wq9c.js +0 -2
- package/public/assets/PlanGraphPanel-Dby7wq9c.js.map +0 -1
- package/public/assets/automation-Ddbermbi.js +0 -2
- package/public/assets/automation-Ddbermbi.js.map +0 -1
- package/public/assets/card-CcZ9hLI7.js +0 -2
- package/public/assets/channels-BG0Nib7y.js +0 -2
- package/public/assets/chat-Dx6qWNxb.js +0 -2
- package/public/assets/copy-button-eF3cKp4Q.js +0 -2
- package/public/assets/dist-BLBF7qqr.js +0 -2
- package/public/assets/dist-YpHfnnIA.js +0 -2
- package/public/assets/dist-qd198ib9.js +0 -2
- package/public/assets/index-B3wOeAPO.js +0 -21
- package/public/assets/index-B3wOeAPO.js.map +0 -1
- package/public/assets/index-Dn_GDXbi.css +0 -2
- package/public/assets/lucide-react-L2UxFDic.js +0 -9
- package/public/assets/memory-xKWduhyr.js +0 -2
- package/public/assets/orchestrators-BrJvGIOc.js +0 -2
- package/public/assets/pairs-DR0GizDN.js +0 -2
- package/public/assets/store-B8xP6z6T.js +0 -9
- package/public/assets/store-B8xP6z6T.js.map +0 -1
- package/public/assets/tasks-C2rRQm6E.js +0 -2
- package/public/assets/teams-Bo0sdBTp.js +0 -2
- package/public/assets/teams-Bo0sdBTp.js.map +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./chunk-CilyBKbf.js";import{D as t,E as n,In as r,Jn as i,L as a,N as ee,Ut as te,V as ne,m as re,vn as o}from"./lucide-react-L2UxFDic.js";import{o as s,t as c}from"./store-B8xP6z6T.js";import{U as l,d as ie,h as u}from"./display-DzNvOu1j.js";import{t as d}from"./badge-DhLyCPag.js";import{t as f}from"./button-K20wAZG1.js";import{t as p}from"./input-BHYNpXAG.js";import{M as ae,r as oe,s as se}from"./index-B3wOeAPO.js";import{a as m,o as h,r as g,t as _}from"./card-CcZ9hLI7.js";var v=e(i(),1),y=r(),b=[`organization`,`role`,`project`,`task`,`interaction`,`agent`],ce=[`private`,`project`,`org`,`public`],le=[`public`,`normal`,`sensitive`,`secret`],ue=[`reported`,`inferred`,`verified`];function x(){return{type:`project`,scope:`default`,title:``,content:``,tags:``,visibility:`project`,sensitivity:`normal`,confidence:`reported`,relevanceScore:`0.7`}}function S(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 C(e){return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function de(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=C(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 w(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 T(e){return e>=.8?`text-emerald-400`:e>=.5?`text-yellow-400`:`text-zinc-400`}function fe(e){return e?Object.entries(e).map(([e,t])=>`${e}=${Array.isArray(t)?t.join(` `):String(t)}`).join(` `):`default`}function pe(e){return e.filter(e=>![`system`,`user`,`channel`].includes(e.kind||``))}function E(){let e=s(),r=c(e=>e.agents),i=c(e=>e.memories),E=c(e=>e.memoryTotal),O=c(e=>e.memoryStats),k=c(e=>e.memoryBrokerInfo),A=c(e=>e.memoryFilters),j=c(e=>e.selectedMemoryId),he=c(e=>e.memoryLoading),M=c(e=>e.set),N=c(e=>e.fetchMemories),P=c(e=>e.refreshMemory),F=c(e=>e.saveMemory),I=c(e=>e.deleteMemory),L=c(e=>e.injectMemory),R=i.find(e=>e.id===j),[z,B]=(0,v.useState)(`create`),[V,H]=(0,v.useState)(x),[U,W]=(0,v.useState)(``),[G,ge]=(0,v.useState)(`manual`),[K,_e]=(0,v.useState)(`1600`),[q,ve]=(0,v.useState)(`8`),[J,ye]=(0,v.useState)(``),Y=(0,v.useMemo)(()=>pe(r),[r]);(0,v.useEffect)(()=>{!U&&Y[0]&&W(Y[0].id)},[Y,U]),(0,v.useEffect)(()=>{R&&z===`edit`&&H(S(R))},[R?.id,z]);let X=(0,v.useMemo)(()=>{let e=A.search.trim().toLowerCase();return e?i.filter(t=>[t.id,t.type,t.scope,t.title,t.content,...t.tags].some(t=>String(t).toLowerCase().includes(e))):i},[i,A.search]);function Z(e){M({memoryFilters:{...A,...e}})}async function be(){let e=Number(V.relevanceScore),t={title:V.title.trim(),content:V.content.trim(),tags:C(V.tags),visibility:V.visibility,sensitivity:V.sensitivity,confidence:V.confidence,relevanceScore:Number.isFinite(e)?Math.max(0,Math.min(1,e)):.7};if(z===`edit`&&R){await F(t,R.id);return}await F({...t,type:V.type,scope:V.scope.trim()}),B(`create`),H(x())}async function Q(e){if(!U)return;let t=await L({agentId:U,memoryIds:e,query:e?.length?void 0:de(A),reason:G.trim()||`manual`,budget:{maxTokens:Math.max(200,Number(K)||1600),maxMemories:Math.max(1,Number(q)||8),priorityCutoff:3}});t?.command?.id&&ye(t.command.id)}function xe(){B(`create`),H(x())}function Se(){R&&(B(`edit`),H(S(R)))}let Ce=V.title.trim()&&V.content.trim()&&(z===`edit`||V.scope.trim()),$=fe(k?.config);return(0,y.jsxs)(`div`,{className:`space-y-4`,children:[(0,y.jsxs)(`div`,{className:`flex items-center justify-between gap-3 flex-wrap`,children:[(0,y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,y.jsx)(o,{className:`w-5 h-5 text-muted-foreground`}),(0,y.jsx)(`h2`,{className:`text-lg font-semibold`,children:`Memory`}),(0,y.jsx)(d,{variant:`secondary`,children:O?.total??E}),k&&(0,y.jsx)(d,{className:k.external?`bg-blue-500/15 text-blue-400 border-blue-500/30`:`bg-emerald-500/15 text-emerald-400 border-emerald-500/30`,children:k.type})]}),(0,y.jsxs)(f,{size:`sm`,variant:`outline`,className:`gap-1.5`,onClick:()=>P(),children:[(0,y.jsx)(ee,{className:`w-3.5 h-3.5 ${he?`animate-spin`:``}`}),`Refresh`]})]}),(0,y.jsxs)(`div`,{className:`grid gap-3 xl:grid-cols-[1.2fr_0.8fr]`,children:[(0,y.jsxs)(_,{children:[(0,y.jsx)(m,{className:`py-3 px-4`,children:(0,y.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,y.jsxs)(h,{className:`text-sm font-medium flex items-center gap-2`,children:[(0,y.jsx)(te,{className:`w-4 h-4 text-muted-foreground`}),`Broker`]}),k?.capabilities&&(0,y.jsx)(`div`,{className:`flex flex-wrap gap-1 justify-end`,children:Object.entries(k.capabilities).filter(([,e])=>!!e).map(([e])=>(0,y.jsx)(d,{variant:`outline`,className:`text-[10px] px-1.5 py-0`,children:e},e))})]})}),(0,y.jsxs)(g,{className:`px-4 pb-4 space-y-3`,children:[(0,y.jsxs)(`div`,{className:`grid grid-cols-2 md:grid-cols-5 gap-2`,children:[(0,y.jsx)(D,{label:`total`,value:O?.total??E}),(0,y.jsx)(D,{label:`project`,value:O?.byType?.project??0}),(0,y.jsx)(D,{label:`task`,value:O?.byType?.task??0}),(0,y.jsx)(D,{label:`agent`,value:O?.byType?.agent??0}),(0,y.jsx)(D,{label:`sensitive`,value:(O?.bySensitivity?.sensitive??0)+(O?.bySensitivity?.secret??0)})]}),(0,y.jsx)(`div`,{className:`font-mono text-xs text-muted-foreground truncate`,title:$,children:$})]})]}),(0,y.jsxs)(_,{children:[(0,y.jsx)(m,{className:`py-3 px-4`,children:(0,y.jsx)(h,{className:`text-sm font-medium`,children:`Inject`})}),(0,y.jsxs)(g,{className:`px-4 pb-4 space-y-2`,children:[(0,y.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 gap-2`,children:[(0,y.jsxs)(`select`,{className:`rounded-md border border-input bg-background px-2 py-1.5 text-sm`,value:U,onChange:e=>W(e.target.value),children:[(0,y.jsx)(`option`,{value:``,children:`Agent`}),Y.map(e=>(0,y.jsx)(`option`,{value:e.id,children:ie(e)},e.id))]}),(0,y.jsx)(p,{value:G,onChange:e=>ge(e.target.value),placeholder:`reason`}),(0,y.jsx)(p,{value:K,onChange:e=>_e(e.target.value),inputMode:`numeric`,placeholder:`tokens`}),(0,y.jsx)(p,{value:q,onChange:e=>ve(e.target.value),inputMode:`numeric`,placeholder:`memories`})]}),(0,y.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,y.jsxs)(f,{size:`sm`,className:`gap-1.5`,disabled:!U||!R,onClick:()=>R&&Q([R.id]),children:[(0,y.jsx)(n,{className:`w-3.5 h-3.5`}),`Selected`]}),(0,y.jsxs)(f,{size:`sm`,variant:`outline`,className:`gap-1.5`,disabled:!U,onClick:()=>Q(),children:[(0,y.jsx)(t,{className:`w-3.5 h-3.5`}),`Filtered`]}),J&&(0,y.jsx)(d,{variant:`outline`,className:`font-mono text-[10px]`,children:J})]})]})]})]}),(0,y.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[minmax(0,1fr)_420px]`,children:[(0,y.jsxs)(`div`,{className:`space-y-3`,children:[(0,y.jsx)(_,{children:(0,y.jsx)(g,{className:`p-3`,children:(0,y.jsxs)(`div`,{className:`grid grid-cols-2 lg:grid-cols-6 gap-2`,children:[(0,y.jsx)(p,{className:`lg:col-span-2`,value:A.search,onChange:e=>Z({search:e.target.value}),placeholder:`Search visible memories`}),(0,y.jsxs)(`select`,{className:`rounded-md border border-input bg-background px-2 py-1.5 text-sm`,value:A.type,onChange:e=>Z({type:e.target.value}),children:[(0,y.jsx)(`option`,{value:``,children:`All types`}),b.map(e=>(0,y.jsx)(`option`,{value:e,children:e},e))]}),(0,y.jsx)(p,{value:A.scope,onChange:e=>Z({scope:e.target.value}),placeholder:`scope`}),(0,y.jsx)(p,{value:A.tags,onChange:e=>Z({tags:e.target.value}),placeholder:`tags`}),(0,y.jsxs)(`div`,{className:`flex gap-2`,children:[(0,y.jsx)(p,{value:A.minRelevance,onChange:e=>Z({minRelevance:e.target.value}),placeholder:`score`}),(0,y.jsx)(f,{size:`sm`,variant:`outline`,className:`h-8 px-2`,onClick:()=>N(),children:(0,y.jsx)(t,{className:`w-4 h-4`})})]})]})})}),(0,y.jsx)(se,{className:`h-[calc(100dvh-24rem)] min-h-[360px]`,children:(0,y.jsxs)(`div`,{className:`space-y-2 pr-2`,children:[X.length===0&&(0,y.jsx)(`div`,{className:`text-center text-sm text-muted-foreground py-16`,children:`No memories`}),X.map(t=>(0,y.jsx)(me,{memory:t,selected:t.id===j,now:e,onSelect:()=>M({selectedMemoryId:t.id})},t.id))]})})]}),(0,y.jsxs)(_,{children:[(0,y.jsx)(m,{className:`py-3 px-4`,children:(0,y.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,y.jsx)(h,{className:`text-sm font-medium`,children:z===`edit`?`Edit Memory`:`New Memory`}),(0,y.jsxs)(`div`,{className:`flex gap-1`,children:[(0,y.jsx)(f,{size:`sm`,variant:`ghost`,className:`h-7 px-2`,onClick:xe,title:`New memory`,children:(0,y.jsx)(a,{className:`w-3.5 h-3.5`})}),(0,y.jsx)(f,{size:`sm`,variant:`ghost`,className:`h-7 px-2`,onClick:Se,disabled:!R,title:`Edit selected`,children:(0,y.jsx)(ne,{className:`w-3.5 h-3.5`})}),(0,y.jsx)(f,{size:`sm`,variant:`ghost`,className:`h-7 px-2 text-red-400 hover:text-red-300`,disabled:!R,onClick:()=>R&&I(R.id),title:`Delete selected`,children:(0,y.jsx)(re,{className:`w-3.5 h-3.5`})})]})]})}),(0,y.jsxs)(g,{className:`px-4 pb-4 space-y-3`,children:[R&&(0,y.jsxs)(y.Fragment,{children:[(0,y.jsxs)(`div`,{className:`space-y-2`,children:[(0,y.jsxs)(`div`,{className:`flex flex-wrap gap-1`,children:[(0,y.jsx)(d,{variant:`secondary`,children:R.type}),(0,y.jsx)(d,{variant:`outline`,children:R.scope}),(0,y.jsx)(d,{className:w(R.sensitivity),children:R.sensitivity}),(0,y.jsx)(d,{variant:`outline`,className:T(R.relevanceScore),children:R.relevanceScore.toFixed(2)})]}),(0,y.jsxs)(`div`,{className:`text-xs text-muted-foreground`,title:u(R.updatedAt),children:[`updated `,l(e,R.updatedAt)]}),(0,y.jsx)(`p`,{className:`text-sm font-medium`,children:R.title}),(0,y.jsx)(`p`,{className:`text-xs text-muted-foreground whitespace-pre-wrap max-h-24 overflow-auto`,children:R.content})]}),(0,y.jsx)(ae,{})]}),(0,y.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,y.jsx)(`select`,{className:`rounded-md border border-input bg-background px-2 py-1.5 text-sm`,disabled:z===`edit`,value:V.type,onChange:e=>H({...V,type:e.target.value}),children:b.map(e=>(0,y.jsx)(`option`,{value:e,children:e},e))}),(0,y.jsx)(p,{disabled:z===`edit`,value:V.scope,onChange:e=>H({...V,scope:e.target.value}),placeholder:`scope`}),(0,y.jsx)(p,{className:`col-span-2`,value:V.title,onChange:e=>H({...V,title:e.target.value}),placeholder:`title`}),(0,y.jsx)(oe,{className:`col-span-2 min-h-32`,value:V.content,onChange:e=>H({...V,content:e.target.value}),placeholder:`content`}),(0,y.jsx)(p,{className:`col-span-2`,value:V.tags,onChange:e=>H({...V,tags:e.target.value}),placeholder:`tags`}),(0,y.jsx)(`select`,{className:`rounded-md border border-input bg-background px-2 py-1.5 text-sm`,value:V.visibility,onChange:e=>H({...V,visibility:e.target.value}),children:ce.map(e=>(0,y.jsx)(`option`,{value:e,children:e},e))}),(0,y.jsx)(`select`,{className:`rounded-md border border-input bg-background px-2 py-1.5 text-sm`,value:V.sensitivity,onChange:e=>H({...V,sensitivity:e.target.value}),children:le.map(e=>(0,y.jsx)(`option`,{value:e,children:e},e))}),(0,y.jsx)(`select`,{className:`rounded-md border border-input bg-background px-2 py-1.5 text-sm`,value:V.confidence,onChange:e=>H({...V,confidence:e.target.value}),children:ue.map(e=>(0,y.jsx)(`option`,{value:e,children:e},e))}),(0,y.jsx)(p,{value:V.relevanceScore,onChange:e=>H({...V,relevanceScore:e.target.value}),inputMode:`decimal`,placeholder:`score`})]}),(0,y.jsx)(f,{size:`sm`,className:`w-full`,disabled:!Ce,onClick:be,children:z===`edit`?`Save memory`:`Create memory`})]})]})]})]})}function D({label:e,value:t}){return(0,y.jsxs)(`div`,{className:`rounded-md border border-border bg-muted/20 px-3 py-2`,children:[(0,y.jsx)(`div`,{className:`text-lg font-semibold tabular-nums`,children:t}),(0,y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:e})]})}function me({memory:e,selected:t,now:n,onSelect:r}){return(0,y.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,y.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,y.jsxs)(`div`,{className:`min-w-0`,children:[(0,y.jsxs)(`div`,{className:`flex items-center gap-1.5 flex-wrap`,children:[(0,y.jsx)(d,{variant:`secondary`,className:`text-[10px]`,children:e.type}),(0,y.jsx)(d,{variant:`outline`,className:`text-[10px] font-mono`,children:e.scope}),(0,y.jsx)(d,{className:`text-[10px] ${w(e.sensitivity)}`,children:e.sensitivity})]}),(0,y.jsx)(`div`,{className:`font-medium text-sm mt-2 truncate`,children:e.title}),(0,y.jsx)(`div`,{className:`text-xs text-muted-foreground line-clamp-2 mt-1`,children:e.content}),e.tags.length>0&&(0,y.jsx)(`div`,{className:`flex gap-1 flex-wrap mt-2`,children:e.tags.slice(0,8).map(e=>(0,y.jsxs)(d,{variant:`outline`,className:`text-[10px] text-zinc-400`,children:[`#`,e]},e))})]}),(0,y.jsxs)(`div`,{className:`text-right shrink-0 space-y-1`,children:[(0,y.jsx)(`div`,{className:`text-sm font-semibold tabular-nums ${T(e.relevanceScore)}`,children:e.relevanceScore.toFixed(2)}),(0,y.jsx)(`div`,{className:`text-[10px] text-muted-foreground`,title:u(e.updatedAt),children:l(n,e.updatedAt)}),e.accessCount>0&&(0,y.jsxs)(`div`,{className:`text-[10px] text-muted-foreground`,children:[e.accessCount,` hits`]})]})]})})}export{E as MemoryView};
|
|
2
|
-
//# sourceMappingURL=memory-xKWduhyr.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{F as e,In as t,L as n,Wt as r,in as i,k as a,p as o,w as s}from"./lucide-react-L2UxFDic.js";import{o as c,t as l}from"./store-B8xP6z6T.js";import{N as u,P as d,U as f}from"./display-DzNvOu1j.js";import{t as p}from"./badge-DhLyCPag.js";import{t as m}from"./button-K20wAZG1.js";import{M as h}from"./index-B3wOeAPO.js";import{a as g,o as _,r as v,t as y}from"./card-CcZ9hLI7.js";var b=t();function x({agent:t,orch:n}){let i=l(e=>e.orchestratorAction),o=l(e=>e.openFilesAt);return(0,b.jsxs)(`div`,{className:`flex items-center gap-2 py-1.5`,children:[(0,b.jsx)(r,{className:`w-3.5 h-3.5 text-muted-foreground shrink-0`}),(0,b.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,b.jsx)(`div`,{className:`text-xs font-medium truncate`,children:t.label||t.agentId.slice(-12)}),(0,b.jsxs)(`button`,{type:`button`,className:`max-w-full truncate text-left text-[10px] text-muted-foreground hover:text-foreground`,title:`Open ${t.cwd||n.baseDir} in Files`,onClick:e=>{e.stopPropagation(),o({orchestratorId:n.id,path:t.cwd||n.baseDir})},children:[t.provider,` · `,t.cwd||`~`]})]}),(0,b.jsxs)(`div`,{className:`flex gap-1`,children:[(0,b.jsx)(m,{size:`icon`,variant:`ghost`,className:`h-6 w-6`,title:`Restart agent`,onClick:e=>{e.stopPropagation(),i(n.id,`restart`,t.agentId,`orchestrators`)},children:(0,b.jsx)(a,{className:`w-3 h-3`})}),(0,b.jsx)(m,{size:`icon`,variant:`ghost`,className:`h-6 w-6 text-red-400 hover:text-red-300`,title:`Shutdown agent`,onClick:e=>{e.stopPropagation(),i(n.id,`shutdown`,t.agentId,`orchestrators`)},children:(0,b.jsx)(e,{className:`w-3 h-3`})})]})]})}function S({orch:t}){let r=c(),S=l(e=>e.orchestratorAction),C=l(e=>e.upgradeOrchestrator),w=l(e=>e.stats.version),T=l(e=>e.openOrchestratorSpawnFor),E=l(e=>e.openFilesAt),D=l(e=>e.deleteOrchestrator),O=l(e=>e.refreshOrchestratorProviders),k=d(t),A=u(t),j=t.status===`online`,M=t.package?.version||t.version,N=t.upgrade,P=N?.status===`pending`,F=j&&!!t.version&&!!w&&t.version!==w,I=j&&!P&&(F||N?.status===`failed`),L=Object.entries(t.contracts||{}).filter(([,e])=>typeof e==`number`),R=t.providerStatus||t.providers.map(e=>({name:e,available:!0,checkedAt:Number(t.lastSeen)||Date.now()})),z=t.managedAgents.map(e=>e.workspace?{agent:e,workspace:e.workspace}:null).filter(e=>!!(e?.workspace?.id||e?.workspace?.worktreePath));return(0,b.jsxs)(y,{className:`${j?``:`opacity-60`}`,children:[(0,b.jsx)(g,{className:`pb-2 pt-4 px-4`,children:(0,b.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,b.jsx)(`div`,{className:`p-1.5 rounded-md ${j?`bg-emerald-500/10`:`bg-zinc-800`}`,children:(0,b.jsx)(s,{className:`w-4 h-4 ${j?`text-emerald-400`:`text-zinc-500`}`})}),(0,b.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,b.jsx)(_,{className:`text-sm font-medium truncate`,children:t.hostname}),(0,b.jsxs)(`div`,{className:`text-xs text-muted-foreground mt-0.5`,children:[t.id.slice(0,16),`…`]})]}),(0,b.jsx)(p,{className:`text-[10px] shrink-0 ${A}`,children:k})]})}),(0,b.jsxs)(v,{className:`px-4 pb-4 space-y-3`,children:[(0,b.jsxs)(`div`,{className:`flex flex-wrap gap-x-4 gap-y-1 text-xs text-muted-foreground`,children:[(0,b.jsx)(`span`,{className:j?`text-emerald-400`:`text-zinc-500`,children:t.status}),M&&(0,b.jsxs)(`span`,{children:[t.package?.name||`orchestrator`,` v`,M]}),P&&(0,b.jsxs)(p,{className:`text-[10px] bg-amber-500/10 text-amber-400 border-amber-500/20 gap-1`,children:[(0,b.jsx)(i,{className:`w-3 h-3 animate-pulse`}),`upgrading → v`,N.desiredVersion]}),!P&&N?.status===`failed`&&(0,b.jsxs)(p,{className:`text-[10px] bg-red-500/10 text-red-400 border-red-500/20 gap-1`,title:N.error,children:[(0,b.jsx)(o,{className:`w-3 h-3`}),`upgrade failed`]}),!P&&F&&(0,b.jsxs)(p,{className:`text-[10px] bg-blue-500/10 text-blue-400 border-blue-500/20`,children:[`→ v`,w,` available`]}),(0,b.jsx)(`span`,{className:`ml-auto`,children:f(r,t.lastSeen)})]}),R.length>0&&(0,b.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:R.map(e=>(0,b.jsx)(p,{variant:`secondary`,title:e.available?`version`in e&&e.version?e.version:e.name:`reason`in e&&e.reason?e.reason:`${e.name} unavailable`,className:`text-[10px] ${e.available?`bg-emerald-500/10 text-emerald-400 border-emerald-500/20`:`bg-red-500/10 text-red-400 border-red-500/20`}`,children:e.name},e.name))}),L.length>0&&(0,b.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:L.map(([e,t])=>(0,b.jsxs)(p,{variant:`secondary`,className:`text-[10px]`,children:[e,`=`,t]},e))}),t.managedAgents.length>0&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(h,{}),(0,b.jsxs)(`div`,{children:[(0,b.jsxs)(`div`,{className:`text-xs font-medium text-muted-foreground mb-1.5`,children:[`Managed agents (`,t.managedAgents.length,`)`]}),(0,b.jsx)(`div`,{className:`space-y-0`,children:t.managedAgents.map(e=>(0,b.jsx)(x,{agent:e,orch:t},e.agentId))})]})]}),z.length>0&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(h,{}),(0,b.jsxs)(`div`,{children:[(0,b.jsxs)(`div`,{className:`text-xs font-medium text-muted-foreground mb-1.5`,children:[`Workspaces (`,z.length,`)`]}),(0,b.jsx)(`div`,{className:`space-y-1`,children:z.map(({agent:e,workspace:n})=>(0,b.jsxs)(`button`,{type:`button`,className:`block w-full min-w-0 rounded border border-border/60 px-2 py-1.5 text-left hover:bg-accent/40`,onClick:()=>n.worktreePath&&void E({orchestratorId:t.id,path:n.worktreePath}),children:[(0,b.jsxs)(`div`,{className:`flex items-center gap-2 text-xs`,children:[(0,b.jsx)(`span`,{className:`truncate font-medium`,children:n.branch||e.label||e.agentId.slice(-12)}),n.status&&(0,b.jsx)(p,{variant:`outline`,className:`h-4 shrink-0 text-[10px]`,children:n.status})]}),(0,b.jsx)(`div`,{className:`truncate text-[10px] text-muted-foreground`,children:n.worktreePath||n.repoRoot})]},n.id||n.worktreePath))})]})]}),(0,b.jsx)(h,{}),(0,b.jsxs)(`div`,{className:`flex flex-wrap gap-1.5`,children:[j&&(0,b.jsxs)(m,{size:`sm`,variant:`outline`,className:`h-7 text-xs gap-1`,onClick:()=>T(t.id),children:[(0,b.jsx)(n,{className:`w-3 h-3`}),`Spawn agent`]}),j&&(0,b.jsxs)(m,{size:`sm`,variant:`outline`,className:`h-7 text-xs gap-1`,onClick:()=>O(t.id),children:[(0,b.jsx)(a,{className:`w-3 h-3`}),`Refresh providers`]}),(I||P)&&(0,b.jsxs)(m,{size:`sm`,variant:`outline`,disabled:P,className:`h-7 text-xs gap-1 text-blue-400 hover:text-blue-300 border-blue-500/30 disabled:opacity-60`,title:P?`Upgrading to v${N.desiredVersion}…`:`Upgrade to v${w}`,onClick:()=>C(t.id),children:[(0,b.jsx)(i,{className:`w-3 h-3 ${P?`animate-pulse`:``}`}),P?`Upgrading…`:`Upgrade`]}),j&&(0,b.jsxs)(m,{size:`sm`,variant:`outline`,className:`h-7 text-xs gap-1`,onClick:()=>S(t.id,`restart`,void 0,`orchestrators`),children:[(0,b.jsx)(a,{className:`w-3 h-3`}),`Restart all`]}),j&&(0,b.jsxs)(m,{size:`sm`,variant:`outline`,className:`h-7 text-xs gap-1 text-red-400 hover:text-red-300 border-red-500/30`,onClick:()=>S(t.id,`shutdown`,void 0,`orchestrators`),children:[(0,b.jsx)(e,{className:`w-3 h-3`}),`Shutdown all`]}),(0,b.jsx)(m,{size:`sm`,variant:`ghost`,className:`h-7 text-xs text-muted-foreground hover:text-red-400`,onClick:()=>D(t.id),children:`Remove`})]})]})]})}function C(){let e=l(e=>e.orchestrators),t=l(e=>e.openOrchestratorSpawn),r=l(e=>e.openOrchestratorInstall),i=e.filter(e=>e.status===`online`).length;return(0,b.jsxs)(`div`,{className:`space-y-4`,children:[(0,b.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,b.jsxs)(`div`,{children:[(0,b.jsx)(`h2`,{className:`text-base font-semibold`,children:`Orchestrators`}),(0,b.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Multi-host agent lifecycle managers`})]}),(0,b.jsxs)(`div`,{className:`flex items-center gap-2 ml-auto`,children:[(0,b.jsxs)(p,{variant:`outline`,className:`text-xs`,children:[i,` online`]}),(0,b.jsxs)(m,{size:`sm`,variant:`outline`,className:`gap-1`,onClick:r,children:[(0,b.jsx)(s,{className:`w-3.5 h-3.5`}),`Add`]}),(0,b.jsxs)(m,{size:`sm`,className:`gap-1`,onClick:t,children:[(0,b.jsx)(n,{className:`w-3.5 h-3.5`}),`Spawn`]})]})]}),e.length===0?(0,b.jsx)(`div`,{className:`text-center py-16 text-muted-foreground text-sm`,children:`No orchestrators registered.`}):(0,b.jsx)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4`,children:e.map(e=>(0,b.jsx)(S,{orch:e},e.id))})]})}export{C as OrchestratorsView};
|
|
2
|
-
//# sourceMappingURL=orchestrators-BrJvGIOc.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{En as e,In as t,d as n,dt as r,lt as i,tt as a}from"./lucide-react-L2UxFDic.js";import{o,t as s}from"./store-B8xP6z6T.js";import{U as c,d as l,h as u,lt as d}from"./display-DzNvOu1j.js";import{t as f}from"./badge-DhLyCPag.js";import{t as p}from"./button-K20wAZG1.js";import{s as m}from"./index-B3wOeAPO.js";import{a as h,r as g,t as _}from"./card-CcZ9hLI7.js";var v=t(),y=[{value:`open`,label:`Active & Pending`},{value:`active`,label:`Active`},{value:`pending`,label:`Pending`},{value:`ended`,label:`Ended`},{value:`rejected`,label:`Rejected`},{value:`expired`,label:`Expired`},{value:``,label:`All`}];function b(){let e=o(),t=s(e=>e.pairs),r=s(e=>e.agentsById),a=s(e=>e.pairStatusFilter),c=s(e=>e.set),u=s(e=>e.fetchPairs),d=s(e=>e.openPairInvite),h=s(e=>e.openPairMessage),g=s(e=>e.doAcceptPair),_=s(e=>e.doRejectPair),b=s(e=>e.doHangupPair),S=t.filter(e=>e.status===`pending`).length;function C(e){c({pairStatusFilter:e}),setTimeout(()=>u(),0)}function w(e){return r[e]?l(r[e]):e.slice(-10)}return(0,v.jsxs)(`div`,{className:`space-y-4`,children:[(0,v.jsxs)(`div`,{className:`flex items-center justify-between flex-wrap gap-2`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,v.jsx)(i,{className:`w-5 h-5 text-muted-foreground`}),(0,v.jsx)(`h2`,{className:`text-lg font-semibold`,children:`Pair Sessions`}),S>0&&(0,v.jsxs)(f,{className:`bg-yellow-500/20 text-yellow-400 border-yellow-500/30 border`,children:[S,` pending`]})]}),(0,v.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,v.jsx)(`select`,{className:`rounded-md border border-input bg-background px-3 py-1.5 text-sm`,value:a,onChange:e=>C(e.target.value),children:y.map(e=>(0,v.jsx)(`option`,{value:e.value,children:e.label},e.value))}),(0,v.jsxs)(p,{size:`sm`,onClick:()=>d(),children:[(0,v.jsx)(n,{className:`w-4 h-4 mr-1`}),` Pair agents`]})]})]}),(0,v.jsx)(m,{className:`h-[calc(100dvh-11rem)]`,children:(0,v.jsxs)(`div`,{className:`space-y-3 pr-2`,children:[t.length===0&&(0,v.jsx)(`div`,{className:`text-center text-muted-foreground py-16 text-sm`,children:`No pair sessions`}),t.map(t=>(0,v.jsx)(x,{pair:t,now:e,agentName:w,onAccept:()=>g(t),onReject:()=>_(t),onMessage:()=>h(t),onHangup:()=>b(t)},t.id))]})})]})}function x({pair:t,now:n,agentName:i,onAccept:o,onReject:s,onMessage:l,onHangup:m}){let y=d[t.status]||`bg-zinc-500/20 text-zinc-400`,b=t.status===`pending`,x=t.status===`active`;return(0,v.jsxs)(_,{children:[(0,v.jsx)(h,{className:`py-3 px-4 pb-0`,children:(0,v.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap flex-1 min-w-0`,children:[(0,v.jsx)(f,{className:`${y} border text-xs`,children:t.status}),(0,v.jsxs)(`div`,{className:`flex items-center gap-1.5 text-sm min-w-0`,children:[(0,v.jsx)(`span`,{className:`font-medium truncate max-w-[120px]`,title:t.requesterId,children:i(t.requesterId)}),(0,v.jsx)(e,{className:`w-3.5 h-3.5 text-muted-foreground shrink-0`}),(0,v.jsx)(`span`,{className:`font-medium truncate max-w-[120px]`,title:t.targetId,children:i(t.targetId)})]})]}),(0,v.jsxs)(`div`,{className:`text-right shrink-0`,children:[(0,v.jsx)(`div`,{className:`text-xs font-mono text-muted-foreground/60 truncate max-w-[100px]`,children:t.id.slice(-10)}),(0,v.jsx)(`div`,{className:`text-xs text-muted-foreground`,title:u(t.updatedAt),children:c(n,t.updatedAt)})]})]})}),(0,v.jsxs)(g,{className:`px-4 py-3`,children:[t.objective&&(0,v.jsx)(`p`,{className:`text-xs text-muted-foreground mb-3 line-clamp-2`,children:t.objective}),(0,v.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[b&&(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(p,{size:`sm`,className:`bg-emerald-600 hover:bg-emerald-700 text-white h-7 text-xs`,onClick:o,children:`Accept`}),(0,v.jsx)(p,{size:`sm`,variant:`outline`,className:`h-7 text-xs text-red-400 hover:text-red-300`,onClick:s,children:`Reject`})]}),x&&(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(p,{size:`sm`,variant:`outline`,className:`h-7 text-xs`,onClick:l,children:[(0,v.jsx)(a,{className:`w-3.5 h-3.5 mr-1`}),` Message`]}),(0,v.jsxs)(p,{size:`sm`,variant:`outline`,className:`h-7 text-xs text-red-400 hover:text-red-300`,onClick:m,children:[(0,v.jsx)(r,{className:`w-3.5 h-3.5 mr-1`}),` Hang up`]})]})]})]})]})}export{b as PairsView};
|
|
2
|
-
//# sourceMappingURL=pairs-DR0GizDN.js.map
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./chunk-CilyBKbf.js";import{Bn as t,Gn as n,Jn as r,Kn as i,Ln as a,Un as o,qn as s,zn as c}from"./lucide-react-L2UxFDic.js";import{B as l,C as u,D as d,I as f,O as p,Q as m,W as h,Y as g,Z as ee,_,at as v,b as y,d as te,it as b,j as x,nt as S,ot as C,p as w,rt as T,st as E,tt as D,w as ne}from"./display-DzNvOu1j.js";var O=e(r(),1),re=e=>{let t,n=new Set,r=(e,r)=>{let i=typeof e==`function`?e(t):e;if(!Object.is(i,t)){let e=t;t=r??(typeof i!=`object`||!i)?i:Object.assign({},t,i),n.forEach(n=>n(t,e))}},i=()=>t,a={setState:r,getState:i,getInitialState:()=>o,subscribe:e=>(n.add(e),()=>n.delete(e))},o=t=e(r,i,a);return a},ie=(e=>e?re(e):re),ae=e=>e;function oe(e,t=ae){let n=O.useSyncExternalStore(e.subscribe,O.useCallback(()=>t(e.getState()),[e,t]),O.useCallback(()=>t(e.getInitialState()),[e,t]));return O.useDebugValue(n),n}var se=e=>{let t=ie(e),n=e=>oe(t,e);return Object.assign(n,t),n},ce=(e=>e?se(e):se);function le(e,t){let n;try{n=e()}catch{return}return{getItem:e=>{let r=e=>e===null?null:JSON.parse(e,t?.reviver),i=n.getItem(e)??null;return i instanceof Promise?i.then(r):r(i)},setItem:(e,r)=>n.setItem(e,JSON.stringify(r,t?.replacer)),removeItem:e=>n.removeItem(e)}}var k=e=>t=>{try{let n=e(t);return n instanceof Promise?n:{then(e){return k(e)(n)},catch(e){return this}}}catch(e){return{then(e){return this},catch(t){return k(t)(e)}}}},ue=(e,t)=>(n,r,i)=>{let a={storage:le(()=>window.localStorage),partialize:e=>e,version:0,merge:(e,t)=>({...t,...e}),...t},o=!1,s=0,c=new Set,l=new Set,u=a.storage;if(!u)return e((...e)=>{console.warn(`[zustand persist middleware] Unable to update item '${a.name}', the given storage is currently unavailable.`),n(...e)},r,i);let d=()=>{let e=a.partialize({...r()});return u.setItem(a.name,{state:e,version:a.version})},f=i.setState;i.setState=(e,t)=>(f(e,t),d());let p=e((...e)=>(n(...e),d()),r,i);i.getInitialState=()=>p;let m,h=()=>{if(!u)return;let e=++s;o=!1,c.forEach(e=>e(r()??p));let t=a.onRehydrateStorage?.call(a,r()??p)||void 0;return k(u.getItem.bind(u))(a.name).then(e=>{if(e)if(typeof e.version==`number`&&e.version!==a.version){if(a.migrate){let t=a.migrate(e.state,e.version);return t instanceof Promise?t.then(e=>[!0,e]):[!0,t]}console.error(`State loaded from storage couldn't be migrated since no migrate function was provided`)}else return[!1,e.state];return[!1,void 0]}).then(t=>{if(e!==s)return;let[i,o]=t;if(m=a.merge(o,r()??p),n(m,!0),i)return d()}).then(()=>{e===s&&(t?.(r(),void 0),m=r(),o=!0,l.forEach(e=>e(m)))}).catch(n=>{e===s&&t?.(void 0,n)})};return i.persist={setOptions:e=>{a={...a,...e},e.storage&&(u=e.storage)},clearStorage:()=>{u?.removeItem(a.name)},getOptions:()=>a,rehydrate:()=>h(),hasHydrated:()=>o,onHydrate:e=>(c.add(e),()=>{c.delete(e)}),onFinishHydration:e=>(l.add(e),()=>{l.delete(e)})},a.skipHydration||h(),m||p};function de(e){if(!e)return``;let t=e.replace(/\r\n/g,`
|
|
2
|
-
`);return t=t.replace(/```[^\n]*\n([\s\S]*?)```/g,(e,t)=>{let n=t.replace(/\n+$/,``).split(`
|
|
3
|
-
`).length;return` code block, ${n} ${n===1?`line`:`lines`}. `}),t=t.replace(/```[^\n]*/g,` code block. `),t=he(t),t=t.replace(/^#{1,6}\s+/gm,``),t=t.replace(/^\s*[-*+]\s+/gm,`. `),t=t.replace(/^\s*\d+\.\s+/gm,`. `),t=t.replace(/`([^`]+)`/g,`$1`),t=t.replace(/\[([^\]]+)\]\([^)]+\)/g,`$1`),t=t.replace(/(\*\*|__|\*|_)(.*?)\1/g,`$2`),t=t.replace(/[ \t]+/g,` `),t=t.replace(/\n{2,}/g,`. `),t=t.replace(/\s*\.\s*\.\s*(\.\s*)+/g,`. `),t.trim()}function fe(e){return/\|/.test(e)&&e.trim().length>0}function pe(e){return/^\s*\|?\s*:?-{2,}:?\s*(\|\s*:?-{2,}:?\s*)+\|?\s*$/.test(e)}function me(e){return e.trim().replace(/^\||\|$/g,``).split(`|`).map(e=>e.trim()).filter(e=>e.length>0)}function he(e){let t=e.split(`
|
|
4
|
-
`),n=[],r=0;for(;r<t.length;){if(fe(t[r])&&r+1<t.length&&pe(t[r+1])){let e=me(t[r]),i=r+2,a=0;for(;i<t.length&&fe(t[i])&&!pe(t[i]);)a++,i++;let o=e.length?`with columns ${e.join(`, `)}`:``,s=`${a} ${a===1?`row`:`rows`}`;n.push(`table ${o?`${o}, `:``}${s}.`.replace(/\s+/g,` `).trim()),r=i;continue}n.push(t[r]),r++}return n.join(`
|
|
5
|
-
`)}var A={ms:`milliseconds`,s:`seconds`,kb:`kilobytes`,mb:`megabytes`,gb:`gigabytes`,tb:`terabytes`};function ge(e){return e.split(``).join(` `)}function _e(e){return e.split(``).map(e=>/[0-9]/.test(e)?e:e.toUpperCase()).join(` `)}var ve=[{name:`url`,pattern:/\bhttps?:\/\/\S+/gi,replace:` link `},{name:`path`,pattern:/(?:\/[A-Za-z0-9._-]+){2,}\/?/g,replace:e=>` `+e.replace(/[/._-]+/g,` `).trim()+` `},{name:`slash`,pattern:/(?<=[A-Za-z0-9])\/(?=[A-Za-z0-9])/g,replace:` `},{name:`func-call`,pattern:/\b([A-Za-z_$][\w$]*)\(\)/g,replace:`$1`},{name:`approx`,pattern:/~(?=\s*[\d.])/g,replace:`approximately `},{name:`range`,pattern:/(\d)\s*[-–—]\s*(?=\d)/g,replace:`$1 to `},{name:`version`,pattern:/\b(v?)(\d+(?:\.\d+){2,})\b/gi,replace:(e,t,n)=>`${t?`version `:``}${n.replace(/\./g,` dot `)}`},{name:`decimal`,pattern:/\b(\d+)\.(\d+)\b/g,replace:(e,t,n)=>`${t} point ${ge(n)}`},{name:`hash`,pattern:/\b(?=[0-9a-f]{7,40}\b)(?=[0-9a-f]*[a-f])(?=[0-9a-f]*\d)[0-9a-f]{7,40}\b/gi,replace:e=>_e(e)},{name:`id-camel`,pattern:/([a-z])(Id|ID)(s)?\b/g,replace:(e,t,n,r)=>`${t} I D${r?`s`:``}`},{name:`id-word`,pattern:/\b(?:id|Id|ID)(s)?\b/g,replace:(e,t)=>`I D${t?`s`:``}`},{name:`byte-unit`,pattern:/\b(\d+)\s?(kb|mb|gb|tb)\b/gi,replace:(e,t,n)=>`${t} ${A[n.toLowerCase()]}`},{name:`ms-unit`,pattern:/\b(\d{1,5})\s?ms\b/g,replace:(e,t)=>`${t} ${A.ms}`},{name:`s-unit`,pattern:/\b(\d{1,3})\s?s\b/g,replace:(e,t)=>`${t} ${A.s}`},{name:`live-adjective`,pattern:/\b(is|are|was|were|be|been|being|now|and|stays?|staying|went|go|goes|going|deployed|it's|that's|here's|there's|we're|you're|they're)\s+live\b/gi,replace:(e,t)=>`${t} lyve`},{name:`interior-dot`,pattern:/\.(?=[A-Za-z0-9])/g,replace:` dot `}];function ye(e){if(!e)return``;let t=e;for(let e of ve)t=t.replace(e.pattern,e.replace);return t.replace(/[ \t]{2,}/g,` `).trim()}function be(e){return ye(de(e))}var xe=[{id:`am_michael`,label:`Michael (US ♂)`},{id:`am_adam`,label:`Adam (US ♂)`},{id:`af_heart`,label:`Heart (US ♀)`},{id:`af_bella`,label:`Bella (US ♀)`},{id:`af_nicole`,label:`Nicole (US ♀)`},{id:`af_sarah`,label:`Sarah (US ♀)`},{id:`bm_george`,label:`George (UK ♂)`},{id:`bf_emma`,label:`Emma (UK ♀)`}],j=220;function Se(e){let t=e.match(/[^.!?]+[.!?]*\s*/g)?.map(e=>e.trim()).filter(Boolean)??[e],n=[];for(let e of t){if(e.length<=j){n.push(e);continue}let t=e;for(;t.length>j;){let e=t.lastIndexOf(` `,j);e<=0&&(e=j),n.push(t.slice(0,e).trim()),t=t.slice(e).trim()}t&&n.push(t)}return n}var M=typeof window<`u`&&`speechSynthesis`in window,N=new class{enabled=!1;lang=`en-US`;mode=`kokoro`;kokoroVoice=`am_michael`;browserVoice=``;active=null;queue=[];currentChat=null;speaking=!1;gen=0;audioEl=null;audioUrl=null;playingKey=null;manual=!1;listeners=new Set;get available(){return M||typeof Audio<`u`}isEnabled(){return this.enabled}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}getPlayingKey(){return this.playingKey}setPlayingKey(e){if(e!==this.playingKey){this.playingKey=e;for(let e of this.listeners)e()}}setEnabled(e){e!==this.enabled&&(this.enabled=e,e||this.reset())}setLang(e){this.lang=e}setMode(e){e!==this.mode&&(this.mode=e,this.reset())}setKokoroVoice(e){this.kokoroVoice=e}setBrowserVoice(e){this.browserVoice=e}setActiveChat(e){e!==this.active&&(this.active=e,this.queue=this.queue.filter(t=>t.chatId===e))}onResponse(e,t){if(!this.enabled||!this.available||!e||e!==this.active)return;let n=be(t);n&&(this.speaking&&(this.manual||this.currentChat&&this.currentChat!==e)&&(this.queue=[],this.cancel()),this.queue.push({chatId:e,text:n}),this.pump())}speak(e,t){if(!this.available)return;let n=be(e);if(!n)return;this.reset(),this.manual=!0,this.speaking=!0,this.currentChat=null,this.setPlayingKey(t??null);let r=++this.gen,i=Se(n),a=()=>{r===this.gen&&(this.speaking=!1,this.manual=!1,this.setPlayingKey(null))};this.mode===`kokoro`?this.speakKokoro(i,0,r,a):this.speakBrowser(i,0,r,a)}bargeIn(){this.reset()}reset(){this.queue=[],this.cancel()}cancel(){this.gen++,this.currentChat=null,this.speaking=!1,this.manual=!1,this.setPlayingKey(null);try{window.speechSynthesis.cancel()}catch{}this.stopAudio()}stopAudio(){if(this.audioEl)try{this.audioEl.pause(),this.audioEl.src=``}catch{}if(this.audioUrl){try{URL.revokeObjectURL(this.audioUrl)}catch{}this.audioUrl=null}}pump(){if(this.speaking)return;let e=this.queue.shift();if(!e)return;this.speaking=!0,this.manual=!1,this.currentChat=e.chatId;let t=++this.gen,n=Se(e.text),r=()=>{t===this.gen&&(this.speaking=!1,this.currentChat=null,this.pump())};this.mode===`kokoro`?this.speakKokoro(n,0,t,r):this.speakBrowser(n,0,t,r)}speakBrowser(e,t,n,r){if(n!==this.gen)return;if(!M||t>=e.length)return r();let i=new SpeechSynthesisUtterance(e[t]),a=this.browserVoice?window.speechSynthesis.getVoices().find(e=>e.voiceURI===this.browserVoice):void 0;a?(i.voice=a,i.lang=a.lang):i.lang=this.lang||navigator.language||`en-US`,i.onend=()=>this.speakBrowser(e,t+1,n,r),i.onerror=()=>this.speakBrowser(e,t+1,n,r),window.speechSynthesis.speak(i)}speakKokoro(e,t,n,r,i){if(n!==this.gen)return;let a=e[t];if(a===void 0)return r();let o=i??this.fetchSpeech(a),s=e[t+1],c=s===void 0?void 0:this.fetchSpeech(s);o.then(i=>{n===this.gen&&this.playBlob(i,n,()=>this.speakKokoro(e,t+1,n,r,c),()=>{this.speakBrowser(e,t,n,r)})}).catch(()=>{n===this.gen&&this.speakBrowser(e,t,n,r)})}fetchSpeech(e){return t(`/connectors/voice/call/speak`,{text:e,voice:this.kokoroVoice})}playBlob(e,t,n,r){if(t!==this.gen)return;if(typeof Audio>`u`)return r();this.stopAudio(),this.audioEl||=new Audio;let i=URL.createObjectURL(e);this.audioUrl=i;let a=this.audioEl;a.src=i,a.onended=()=>{t===this.gen&&n()},a.onerror=()=>{t===this.gen&&r()},a.play().catch(()=>{t===this.gen&&r()})}};function Ce(){if(!M)return[];try{return window.speechSynthesis.getVoices().map(e=>({uri:e.voiceURI,label:`${e.name} (${e.lang})`,lang:e.lang})).sort((e,t)=>e.lang.localeCompare(t.lang)||e.label.localeCompare(t.label))}catch{return[]}}var we=typeof navigator<`u`&&!!navigator.mediaDevices?.getUserMedia&&typeof window<`u`&&`MediaRecorder`in window;function Te(){for(let e of[`audio/webm;codecs=opus`,`audio/webm`,`audio/ogg;codecs=opus`,`audio/mp4`])if(typeof MediaRecorder<`u`&&MediaRecorder.isTypeSupported?.(e))return e}var Ee=class{rec=null;chunks=[];stream=null;async start(){this.stream=await navigator.mediaDevices.getUserMedia({audio:!0}),this.chunks=[];let e=Te();this.rec=new MediaRecorder(this.stream,e?{mimeType:e}:void 0),this.rec.ondataavailable=e=>{e.data.size&&this.chunks.push(e.data)},this.rec.start()}async stop(){let e=this.rec;if(!e)return this.teardown(),null;let t=new Promise(t=>{e.onstop=()=>t()});try{e.stop()}catch{}await t;let n=e.mimeType||`audio/webm`,r=new Blob(this.chunks,{type:n});return this.teardown(),r.size?r:null}cancel(){try{this.rec?.stop()}catch{}this.teardown()}teardown(){this.stream?.getTracks().forEach(e=>e.stop()),this.rec=null,this.stream=null,this.chunks=[]}};async function De(e){return((await c(`/connectors/voice/call/transcribe`,e))?.text??``).trim()}var P=ce((e,t)=>({now:Date.now(),_timer:null,start(){t()._timer||e({_timer:setInterval(()=>e({now:Date.now()}),1e3)})},stop(){let n=t()._timer;n&&(clearInterval(n),e({_timer:null}))}}));function Oe(){return P(e=>e.now)}function ke(e=3e4){return P(t=>Math.floor(t.now/e))}var F=[`low`,`medium`,`high`,`max`],I=[`low`,`medium`,`high`,`xhigh`,`max`],L=[`low`,`medium`,`high`,`xhigh`],R={value:2e5,source:`catalog`,confidence:`declared`},z={value:1e6,source:`catalog`,confidence:`declared`},Ae={modalities:{input:{text:!0,image:!0},output:{text:!0}},tools:{code:!0,review:!0,debug:!0,refactor:!0},source:`catalog`,confidence:`declared`};function B(e){return{...e?{limits:e}:{},capabilities:Ae}}var V={claude:{provider:`claude`,label:`Claude Code`,defaultModel:`sonnet-4.6`,models:[{alias:`fable-5`,label:`Fable 5`,providerModel:`claude-fable-5`,efforts:I,defaultEffort:`medium`,...B({contextWindowTokens:z})},{alias:`opus-4.8`,label:`Opus 4.8`,providerModel:`claude-opus-4-8`,efforts:I,defaultEffort:`medium`,...B({contextWindowTokens:R})},{alias:`opus-4.8[1m]`,label:`Opus 4.8 1M`,providerModel:`claude-opus-4-8[1m]`,efforts:I,defaultEffort:`medium`,...B({contextWindowTokens:z})},{alias:`opus-4.7`,label:`Opus 4.7`,providerModel:`claude-opus-4-7`,efforts:I,defaultEffort:`medium`,...B({contextWindowTokens:R})},{alias:`opus-4.7[1m]`,label:`Opus 4.7 1M`,providerModel:`claude-opus-4-7[1m]`,efforts:I,defaultEffort:`medium`,...B({contextWindowTokens:z})},{alias:`opus-4.6`,label:`Opus 4.6`,providerModel:`claude-opus-4-6`,efforts:F,defaultEffort:`medium`,...B({contextWindowTokens:R})},{alias:`opus-4.6[1m]`,label:`Opus 4.6 1M`,providerModel:`claude-opus-4-6[1m]`,efforts:F,defaultEffort:`medium`,...B({contextWindowTokens:z})},{alias:`sonnet-4.6`,label:`Sonnet 4.6`,providerModel:`claude-sonnet-4-6`,efforts:F,defaultEffort:`medium`,...B({contextWindowTokens:R})},{alias:`sonnet-4.6[1m]`,label:`Sonnet 4.6 1M`,providerModel:`claude-sonnet-4-6[1m]`,efforts:F,defaultEffort:`medium`,...B({contextWindowTokens:z})},{alias:`haiku`,label:`Haiku`,providerModel:`haiku`,efforts:[],...B()}]},codex:{provider:`codex`,label:`Codex`,defaultModel:`gpt-5.5`,models:[{alias:`gpt-5.5`,label:`GPT-5.5`,providerModel:`gpt-5.5`,efforts:L,defaultEffort:`medium`,...B({contextWindowTokens:R})},{alias:`gpt-5.4`,label:`GPT-5.4`,providerModel:`gpt-5.4`,efforts:L,defaultEffort:`medium`,...B({contextWindowTokens:R})},{alias:`gpt-5.4-mini`,label:`GPT-5.4 Mini`,providerModel:`gpt-5.4-mini`,efforts:L,defaultEffort:`medium`,...B({contextWindowTokens:R})},{alias:`gpt-5.3-codex`,label:`GPT-5.3 Codex`,providerModel:`gpt-5.3-codex`,efforts:L,defaultEffort:`medium`,...B({contextWindowTokens:R})},{alias:`gpt-5.3-codex-spark`,label:`GPT-5.3 Codex Spark`,providerModel:`gpt-5.3-codex-spark`,efforts:L,defaultEffort:`high`,...B({contextWindowTokens:R})},{alias:`gpt-5.2`,label:`GPT-5.2`,providerModel:`gpt-5.2`,efforts:L,defaultEffort:`medium`,...B({contextWindowTokens:R})}]}};function H(e){return e?.providers[0]??`claude`}function U(e){return V[e]?.defaultModel??``}function je(e,t){return e.filter(e=>e.status===`online`&&f(t,e.baseDir)).sort((e,t)=>x(t.baseDir).length-x(e.baseDir).length)[0]}function Me(e,t){let n=e.find(e=>e.managedAgents.some(e=>e.agentId===t.id));if(n)return n;let r=typeof t.meta?.cwd==`string`?t.meta.cwd:``;return r?je(e,r):void 0}function Ne(e){let t={};for(let n of e)t[n.id]=n;return t}function W(e,t){let n=e.findIndex(e=>e.id===t.id),r=[...e];return n>=0?r[n]=t:r.push(t),r}var Pe=3e3;function G(e,t,n,r=Date.now(),i){if(!t||!n)return e;let a=[...e[t]||[]],o=i||`s-${n}-${r}`;return a.some(e=>e.id===o)||a.some(e=>e.status===n&&Math.abs(e.timestamp-r)<=Pe)?e:(a.push({id:o,status:n,timestamp:r}),a.length>200&&a.splice(0,a.length-200),{...e,[t]:a})}function Fe(e,t){if(!(!e||e.status===t.status)){if((e.status===`offline`||e.status===`stale`)&&(t.status===`online`||t.status===`idle`||t.status===`busy`))return`online`;if(t.status===`offline`)return`offline`}}var Ie=new Set([`compacting`,`compacted`,`clearing-context`,`context-cleared`]);function Le(e){let t=e.meta?.timelineEvent;if(!t||typeof t!=`object`||Array.isArray(t))return;let n=t.status;if(typeof n!=`string`||!n)return;let r=t.id,i=t.timestamp;return{status:n,...typeof r==`string`?{id:r}:{},...typeof i==`number`&&Number.isFinite(i)?{timestamp:i}:{}}}function Re(e){let t=e.params?.agentId;return typeof t==`string`&&t?t:typeof e.target==`string`&&e.target?e.target:void 0}function ze(e,t){if(t===`command.dispatched`)return e.type===`agent.compact`?`compaction-requested`:e.type===`agent.clearContext`?`clear-requested`:e.type===`agent.shutdown`?`shutting-down`:void 0;if(t===`command.succeeded`){if(e.type===`agent.shutdown`)return`shutdown`;if(e.type===`agent.restart`)return`restarted`}}function Be(e){return JSON.stringify(e)}function Ve(e,t){let n=new Map(e.map(e=>[e.id,e])),r=!(e.length===t.length&&e.every((e,n)=>e.id===t[n]?.id)),i=t.map(e=>{let t=n.get(e.id);return t&&Be(t)===Be(e)?t:(r=!0,e)});return r?i:e}function K(e,t){let n=[...new Map(t.map(e=>[e.id,e])).values()],r=new Map(e.map(e=>[e.id,e])),i=!(e.length===n.length&&e.every((e,t)=>e.id===n[t]?.id)),a=n.map(e=>{let t=r.get(e.id);return t&&JSON.stringify(t)===JSON.stringify(e)?t:(i=!0,e)});return i?a:e}function He(){return typeof document>`u`?!0:document.hidden}function q(e,t){return!!(e&&t.view===`chat`&&t.selectedInboxThread===e&&!He())}function Ue(e){return e.threadPeer||e.agentId||``}function We(e,t){return q(Ue(e),t)}function Ge(e){return e.filter(e=>e.to===`user`&&e.from!==`user`&&y(e)).reduce((e,t)=>Math.max(e,t.id),0)}var Ke={enabled:!0,browserEnabled:!1,messages:!0,replies:!0,errors:!0};function qe(e,t){return t.enabled?e.kind===`message`?t.messages:e.kind===`reply`?t.replies:t.errors:!1}function Je(){return typeof window<`u`&&`Notification`in window}function J(){return Je()?window.Notification.permission:`unsupported`}function Ye(e,t){return!qe(e,t.notificationSettings)||!t.notificationSettings.browserEnabled||J()!==`granted`||We(e,t)?!1:He()||t.view!==`chat`}function Xe(e,t){if(J()===`granted`)try{let n=new window.Notification(e.title,{body:e.body,tag:e.id,icon:`icons/agent-relay-192.png`,data:{view:e.view,threadPeer:e.threadPeer,agentId:e.agentId,messageId:e.messageId}});n.onclick=()=>{window.focus(),t(),n.close()}}catch{}}var Ze=(e,t)=>({notification:null,toastNotification:null,notifications:[],notificationUnread:0,notificationSettings:{...Ke},notificationPermission:J(),confirmModal:{show:!1,title:``,message:``,action:null},errorModal:{show:!1,title:``,message:``},openConfirm(t,n,r){e({confirmModal:{show:!0,title:t,message:n,action:r}})},showError(t,n){e({errorModal:{show:!0,title:t,message:n}})},showNotification(t){e({notification:t,toastNotification:null}),setTimeout(()=>e({notification:null}),3e3)},handleRelayNotification(n){let r=t();if(!qe(n,r.notificationSettings)||r.notifications.some(e=>e.id===n.id))return;let i=We(n,r),a=`${n.title}: ${n.body}`;e({notifications:[n,...r.notifications].slice(0,100),notificationUnread:i?r.notificationUnread:Math.min(99,r.notificationUnread+1),notification:i?r.notification:a,toastNotification:i?r.toastNotification:n}),i||setTimeout(()=>{t().toastNotification?.id===n.id&&e({notification:null,toastNotification:null})},4500),Ye(n,r)&&Xe(n,()=>t().openNotification(n)),i&&n.threadPeer&&n.messageId&&t().markInboxThreadReadTo(n.threadPeer,n.messageId)},async openNotification(n){if(e({notificationUnread:0}),n.threadPeer&&(t().openInboxThread(n.threadPeer),n.messageId&&t().markInboxThreadReadTo(n.threadPeer,n.messageId)),n.view&&await t().switchView(n.view),n.agentId&&n.view===`agents`){let e=t().agentsById[n.agentId];e&&t().openAgentDetail(e)}},dismissToast(){e({notification:null,toastNotification:null})},markNotificationsRead(){e({notificationUnread:0})},clearNotifications(){e({notifications:[],notificationUnread:0})},async requestBrowserNotifications(){if(!Je()){e({notificationPermission:`unsupported`,notificationSettings:{...t().notificationSettings,browserEnabled:!1}}),t().showNotification(`Browser notifications are not supported here`);return}let n=await window.Notification.requestPermission();e({notificationPermission:n,notificationSettings:{...t().notificationSettings,browserEnabled:n===`granted`}}),t().showNotification(n===`granted`?`Browser notifications enabled`:`Browser notifications not enabled`)}}),Qe=e=>({voiceTtsEnabled:!1,voiceTtsLang:`en-US`,voiceTtsMode:`kokoro`,voiceTtsKokoroVoice:`am_michael`,voiceTtsBrowserVoice:``,voiceInputMode:`compose`,setVoiceTtsEnabled(t){N.setEnabled(t),e({voiceTtsEnabled:t})},setVoiceTtsLang(t){N.setLang(t),e({voiceTtsLang:t})},setVoiceTtsMode(t){N.setMode(t),e({voiceTtsMode:t})},setVoiceTtsKokoroVoice(t){N.setKokoroVoice(t),e({voiceTtsKokoroVoice:t})},setVoiceTtsBrowserVoice(t){N.setBrowserVoice(t),e({voiceTtsBrowserVoice:t})},setVoiceInputMode(t){e({voiceInputMode:t})}}),$e=null;function et(e){let t=e.voiceTtsEnabled&&e.view===`chat`&&e.selectedInboxThread||null;t!==$e&&($e=t,N.setActiveChat(t))}var tt=(e,t)=>({theme:`dark`,view:`overview`,autoRefresh:!0,mobileMenuOpen:!1,commandPaletteOpen:!1,commandQuery:``,connected:!1,connectionError:!1,authNeeded:!1,authToken:``,stats:{},fileOrchestratorId:``,filePath:``,fileSelectedPath:``,fileSelectedLine:0,fileOverlayOpen:!1,_es:null,_refreshTimer:null,_refreshInFlight:!1,set:t=>e(t),async init(){$.persist.hasHydrated()||await new Promise(e=>{let t=$.persist.onFinishHydration(()=>{t(),e()})});let r=t().authToken;r&&n(r),s(t().view),N.setEnabled(t().voiceTtsEnabled),N.setLang(t().voiceTtsLang),N.setMode(t().voiceTtsMode),N.setKokoroVoice(t().voiceTtsKokoroVoice),N.setBrowserVoice(t().voiceTtsBrowserVoice),et(t()),i(()=>{t().authNeeded||e({authNeeded:!0,connectionError:!1})}),e({notificationPermission:J()}),t().startClock();try{e({stats:await a(`GET`,`/stats`)})}catch(t){if(t.status===401){e({authNeeded:!0});return}}await t().refresh(),t().connectSSE(),t().startAutoRefresh()},async switchView(n){s(n),e({view:n,mobileMenuOpen:!1});let r=t();[`chat`,`messages`].includes(n)&&await Promise.all([r.fetchMessages(),r.fetchChatHistoryImports()]),n===`activity`&&await Promise.all([r.fetchMessages(),r.fetchPairs(),r.fetchTasks(),r.fetchActivityEvents()]),n===`work`&&await Promise.all([r.fetchMessages(),r.fetchTasks()]),n===`pairs`&&await r.fetchPairs(),n===`channels`&&await r.fetchChannels(),n===`connectors`&&await r.fetchConnectors(),n===`integrations`&&await r.fetchIntegrations(),n===`memory`&&await r.refreshMemory(),n===`tasks`&&await r.fetchTasks(),n===`teams`&&await Promise.all([r.fetchTeams(),r.fetchTeamOutcomeAggregates()]),n===`automation`&&await Promise.all([r.fetchAutomations(),r.fetchAutomationRuns()]),n===`maintenance`&&await r.fetchMaintenanceJobs(),n===`workspaces`&&await Promise.all([r.fetchWorkspaces(),r.fetchOrchestrators(),r.fetchAgents()]),n===`files`&&await r.fetchOrchestrators(),n===`analytics`&&await r.fetchAnalytics()},startClock(){P.getState().start()},stopClock(){P.getState().stop()},startAutoRefresh(){t().stopAutoRefresh(),t().autoRefresh&&e({_refreshTimer:setInterval(()=>t().refreshLiveData(),E)})},stopAutoRefresh(){let n=t();n._refreshTimer&&(clearInterval(n._refreshTimer),e({_refreshTimer:null}))},async apiCall(e,t,n){return a(e,t,n)},async openFilesAt(n){let r=t();e({fileOrchestratorId:n.orchestratorId||je(r.orchestrators,n.selectedPath||n.path)?.id||r.orchestrators.find(e=>e.status===`online`)?.id||``,filePath:n.path,fileSelectedPath:n.selectedPath||``,fileSelectedLine:n.line||0,fileOverlayOpen:n.overlay===!0}),n.overlay||await t().switchView(`files`)},async openFilesForAgent(e,n=!1){let r=typeof e.meta?.cwd==`string`?e.meta.cwd:``;if(!r){t().showNotification(`Agent has no cwd`);return}let i=Me(t().orchestrators,e);if(!i){t().showNotification(`No online orchestrator covers that cwd`);return}await t().openFilesAt({orchestratorId:i.id,path:r,overlay:n})},closeFileOverlay(){e({fileOverlayOpen:!1})},async refresh(){let e=t();await Promise.all([e.fetchStats(),e.fetchHealth(),e.fetchAgents(),e.fetchOrchestrators(),e.fetchPairs(),e.fetchMessages(),e.fetchTasks(),e.fetchChannels(),e.fetchConnectors(),e.fetchIntegrations(),e.fetchAutomations(),e.fetchAutomationRuns(),e.fetchManagedPolicies(),e.fetchAgentProfiles(),e.fetchMaintenanceJobs(),e.fetchWorkspaces(),e.fetchInboxState(),e.fetchActivityEvents(),e.fetchChatHistoryImports()])},async refreshLiveData(){if(!(t()._refreshInFlight||t().authNeeded)){e({_refreshInFlight:!0});try{try{let n=await a(`GET`,`/stats`);e(t().connectionError?{stats:n,connectionError:!1}:{stats:n})}catch(n){if(n.status===401)return;t().connectionError||e({connectionError:!0});return}let n=t(),r=[n.fetchHealth(),n.fetchAgents(),n.fetchOrchestrators(),n.fetchPairs(),n.fetchMessages(),n.fetchTasks(),n.fetchManagedPolicies(),n.fetchInboxState()],i=n.view;[`chat`,`messages`].includes(i)&&r.push(n.fetchChatHistoryImports()),i===`activity`&&r.push(n.fetchActivityEvents()),i===`memory`&&r.push(n.refreshMemory()),i===`automation`&&r.push(n.fetchAutomations(),n.fetchAutomationRuns()),i===`channels`&&r.push(n.fetchChannels()),i===`connectors`&&r.push(n.fetchConnectors()),i===`integrations`&&r.push(n.fetchIntegrations()),i===`maintenance`&&r.push(n.fetchMaintenanceJobs()),i===`profiles`&&r.push(n.fetchAgentProfiles()),i===`workspaces`&&r.push(n.fetchWorkspaces()),i===`analytics`&&r.push(n.fetchAnalytics()),i===`teams`&&r.push(n.fetchTeams(),n.fetchTeamOutcomeAggregates()),await Promise.all(r)}finally{e({_refreshInFlight:!1})}}},async fetchStats(){try{e({stats:await a(`GET`,`/stats`)})}catch{}},connectSSE(){t().disconnectSSE(),e({_es:o(t().authToken,{connected:()=>{e(t().connectionError?{connected:!0,connectionError:!1}:{connected:!0}),t().refreshLiveData();let n=Object.entries(t().agentChatByAgent).filter(([,e])=>e.loadedInitial).map(([e])=>e);Promise.all(n.map(e=>t().gapFillAgentChat(e))),t().refreshPlans()},disconnected:()=>e({connected:!1}),message:(n,r)=>{if(n!==`connected`){if(n===`message.new`){let n=JSON.parse(r);if(n.kind===`session`&&n.from!==`user`){let e=n.payload?.session;e?.type===`response`&&e?.origin===`provider`&&N.onResponse(_(n),n.body)}let i=t();if(!i.messages.some(e=>e.id===n.id)){let t=[...i.messages,n];t.length>500&&t.splice(0,t.length-500),e({messages:t})}let a=_(n);for(let e of Object.keys(t().agentChatByAgent))t().appendChatTail(e,[n]);u(n)&&y(n)&&q(a,i)&&t().markInboxThreadReadTo(a,n.id);return}if(n===`message.queued`||n===`message.expired`||n===`message.delivery_updated`||n===`message.reaction_updated`){let n=JSON.parse(r);e({messages:W(t().messages,n)}),t().applyChatMessageUpdate(n);return}if(n===`notification.created`){t().handleRelayNotification(JSON.parse(r));return}if(n===`plan.created`||n===`plan.changed`){let e=JSON.parse(r),n=e.plan??e.data?.plan;n&&t().upsertPlan(n);return}if(n===`plan.deleted`){let e=JSON.parse(r),n=e.plan??e.data?.plan,i=n?.id??e.planId??e.id??e.data?.planId??e.data?.id;(n||i)&&t().removePlan(n??i);return}if(n===`team.dissolved`){let e=JSON.parse(r);e.teamId&&t().markTeamDissolved({teamId:e.teamId,outcomeStatus:e.outcomeStatus,reason:e.reason}),Promise.all([t().fetchTeams(),t().fetchTeamOutcomeAggregates()]);return}if(n===`activity.created`){let n=JSON.parse(r);e({activityEvents:W(t().activityEvents,n)});return}if(n===`agent.status`){let n=JSON.parse(r),i=t(),a=i.agentsById[n.id];if(e({agents:W(i.agents,n),agentsById:{...i.agentsById,[n.id]:n}}),i.livenessMismatches[n.id]&&n.status!==`offline`){let t={...i.livenessMismatches};delete t[n.id],e({livenessMismatches:t})}let o=i.commandStalls[n.id];if(o){let t=Le(n);if(t?.status&&Ie.has(t.status)&&(t.timestamp??0)>o.ts){let t={...i.commandStalls};delete t[n.id],e({commandStalls:t})}}let s=Le(n),c=s?.status??Fe(a,n);if(c){let t=s?.timestamp??Date.now(),r=s?.id||`agent-status:${n.id}:${c}:${t}`;e({chatStatusEvents:G(i.chatStatusEvents,n.id,c,t,r)})}return}if(n===`liveness.mismatch`){let n=JSON.parse(r);n.agentId&&e({livenessMismatches:{...t().livenessMismatches,[n.agentId]:{agentId:n.agentId,detail:n.detail??`Process reported running but relay marked it offline`,ts:Date.now(),policyName:n.policyName,spawnRequestId:n.spawnRequestId}}});return}if(n===`command.stalled`){let n=JSON.parse(r);if(n.agentId){let r=Date.now(),i=n.kind??`compact`,a=i===`clear`?`clear-stalled`:`compaction-stalled`;e({commandStalls:{...t().commandStalls,[n.agentId]:{agentId:n.agentId,kind:i,detail:n.detail??`A context command was requested but never started — the session may need manual intervention.`,ts:r,commandId:n.commandId}},chatStatusEvents:G(t().chatStatusEvents,n.agentId,a,r,`command-stalled:${n.agentId}:${n.commandId??r}`)})}return}if(n===`agent.removed`){let n=JSON.parse(r),i=t(),a={...i.agentsById};delete a[n.id];let o={...i.livenessMismatches};delete o[n.id];let s={...i.commandStalls};delete s[n.id],e({livenessMismatches:o,commandStalls:s}),e({agents:i.agents.filter(e=>e.id!==n.id),agentsById:a});return}if(n===`message.claimed`){let n=JSON.parse(r);e({messages:t().messages.map(e=>e.id===n.messageId?{...e,claimedBy:n.claimedBy,claimExpiresAt:n.claimExpiresAt}:e)});return}if(n===`message.claim_released`){let n=JSON.parse(r);e({messages:t().messages.map(e=>e.id===n.messageId?{...e,claimedBy:void 0,claimedAt:void 0,claimExpiresAt:void 0}:e)});return}if(n===`message.deleted`){let n=JSON.parse(r);e({messages:t().messages.filter(e=>e.id!==n.messageId)});return}if(n===`orchestrator.status`){let n=JSON.parse(r);e({orchestrators:W(t().orchestrators,n)});return}if(n===`orchestrator.removed`){let n=JSON.parse(r);e({orchestrators:t().orchestrators.filter(e=>e.id!==n.id)});return}if(n===`policy.state.changed`||n===`config.changed`){t().fetchManagedPolicies();return}if(n===`command.dispatched`||n===`command.succeeded`){let i=JSON.parse(r).command;if(i){let r=ze(i,n);if(r){let n=typeof i.updatedAt==`number`?i.updatedAt:typeof i.createdAt==`number`?i.createdAt:Date.now();e({chatStatusEvents:G(t().chatStatusEvents,Re(i),r,n,i.id?`command:${i.id}:${r}`:void 0)})}}return}if([`task.created`,`task.updated`,`task.claimed`,`task.status`].includes(n)){let n=JSON.parse(r);e({tasks:W(t().tasks,n)})}}}})})},disconnectSSE(){let n=t()._es;n&&(n.close(),e({_es:null}))},openCommandPalette(){e({commandQuery:``,commandPaletteOpen:!0})},closeCommandPalette(){e({commandPaletteOpen:!1,commandQuery:``})},async runCommand(n){let{action:r,payload:i}=n;if(t().closeCommandPalette(),r===`openView`)await t().switchView(i.view);else if(r===`agentPreset`)e({showOffline:!0,agentPresetFilter:i.preset||``}),await t().switchView(`agents`);else if(r===`copy`)try{await navigator.clipboard?.writeText(i.value||``)}catch{}else if(r===`messageAgent`){let e=t().agentsById[i.agentId];e&&t().openComposeToAgent(e)}else r===`pairAgent`?t().openPairInvite(i.agentId):r===`filterTag`?(e({agentTagFilter:i.tag||``,tagFilter:i.tag||``}),await t().switchView(`agents`)):r===`exportActivity`&&t().exportActivity(i.format||`markdown`)},async saveTokenAndRefresh(){let r=t().authToken;n(r);try{await a(`GET`,`/stats`)}catch(t){if(t.status===401){e({authNeeded:!0});return}}e({authNeeded:!1,connectionError:!1}),t().connectSSE(),await t().refresh(),t().startAutoRefresh()},destroy(){i(null),t().disconnectSSE(),t().stopAutoRefresh(),t().stopClock()}}),nt=(e,t)=>({agents:[],agentsById:{},showOffline:!1,showBuiltIns:!1,agentSort:`status`,agentSortDir:`asc`,agentPresetFilter:``,agentStatusFilter:``,agentTagFilter:``,agentHostFilter:``,selectedAgent:``,agentDetailOpen:!1,agentDetailId:``,livenessMismatches:{},commandStalls:{},channelDetailOpen:!1,channelDetailId:``,renameModal:{show:!1,agentId:``,label:``},tagFilter:``,async fetchAgents(){try{let n=await a(`GET`,`/agents`),r=K(t().agents,n);if(r===t().agents)return;e({agents:r,agentsById:Ne(r)})}catch{}},openAgentDetail(t){e({agentDetailId:t.id,agentDetailOpen:!0})},closeAgentDetail(){e({agentDetailOpen:!1})},openChannelDetail(t){e({channelDetailId:t.id,channelDetailOpen:!0})},closeChannelDetail(){e({channelDetailOpen:!1})},openRename(t){e({renameModal:{show:!0,agentId:t.id,label:t.label||``}})},async doRename(){let n=t(),r=n.renameModal.label.trim()||null;try{await a(`PATCH`,`/agents/`+n.renameModal.agentId+`/label`,{label:r}),e({renameModal:{...n.renameModal,show:!1}})}catch(e){t().showError(`Rename Failed`,e.message)}},async doDeleteAgent(n){try{await a(`DELETE`,`/agents/`+n);let r=t(),i={...r.agentsById};delete i[n],e({agents:r.agents.filter(e=>e.id!==n),agentsById:i,selectedAgent:r.selectedAgent===n?``:r.selectedAgent})}catch(e){t().showError(`Delete Failed`,e.message)}},async doAgentAction(e,n,r){try{await a(`POST`,`/agents/`+encodeURIComponent(e.id)+`/actions`,{action:n,...r?{surface:{component:r}}:{}});let i=n===`restart`?`Restart`:n===`resume`?`Resume`:n===`shutdown`?`Shutdown`:n===`compact`?`Compact`:n===`clearContext`?`Clear context`:n;t().showNotification(`${i} command sent to ${te(e)}`),await Promise.all([t().fetchMessages(),t().fetchActivityEvents()])}catch(e){t().showError(`Action Failed`,e.message)}}}),Y=300,X={messages:[],oldestLoadedId:null,hasMore:!0,loading:!1,loadedInitial:!1};function rt(e,t){let n=new URLSearchParams;for(let[e,r]of Object.entries(t))n.set(e,String(r));return`/agents/${encodeURIComponent(e)}/chat?${n.toString()}`}function it(e,t){return t.filter(t=>p(e,t)&&!ne(t)).sort((e,t)=>e.id-t.id)}function at(e,t){return K(e,[...e,...t].sort((e,t)=>e.id-t.id))}function ot(e){return e[0]?.id??null}var st=(e,t)=>({messages:[],agentChatByAgent:{},threadHistory:{},threadMessages:[],threadOpen:!1,chatHistoryImports:[],selectedInboxThread:``,replyTo:null,composeOpen:!1,showReasoning:!1,chatAgentSearch:``,chatAgentProviderFilter:``,chatAgentStatusFilter:``,chatAgentTagFilter:``,chatAgentCapFilter:``,chatAgentHostFilter:``,chatAgentSort:`status`,chatAgentSortDir:`asc`,chatAgentGroupBy:``,chatAgentFiltersCollapsed:!0,chatStatusEvents:{},chatStickToBottom:!0,chatHasNewItems:!1,inboxReadCursors:{},inboxArchivedThreads:{},inboxDrafts:{},chatSending:!1,inboxSearch:``,inboxSort:`attention`,inboxSortDir:`desc`,inboxShowArchived:!1,channelFilter:``,compose:{...D},inboxCompose:{...S},async fetchMessages(){try{let n=t(),r=`/messages?limit=100`;n.view===`messages`&&n.selectedAgent&&(r+=`&for=`+encodeURIComponent(n.selectedAgent)),n.view===`messages`&&n.channelFilter&&(r+=`&channel=`+encodeURIComponent(n.channelFilter));let i=await a(`GET`,r),o=Ve(t().messages,i);e({messages:o});let s=t(),c=s.selectedInboxThread;if(q(c,s)){let e=0;for(let t of o)t.id>e&&_(t)===c&&u(t)&&y(t)&&(e=t.id);e&&t().markInboxThreadReadTo(c,e)}}catch{}},async loadAgentChat(n){if(n&&!t().agentChatByAgent[n]?.loading){e(e=>({agentChatByAgent:{...e.agentChatByAgent,[n]:{...e.agentChatByAgent[n]??X,loading:!0}}}));try{let r=await a(`GET`,rt(n,{limit:Y})),i=it(n,r),o=t().agentChatByAgent[n]??X,s=o.loadedInitial?at(o.messages,i):K([],i);e(e=>({agentChatByAgent:{...e.agentChatByAgent,[n]:{messages:s,oldestLoadedId:ot(s),hasMore:r.length===Y,loading:!1,loadedInitial:!0}}}))}catch(r){e(e=>({agentChatByAgent:{...e.agentChatByAgent,[n]:{...e.agentChatByAgent[n]??X,loading:!1}}})),t().showError(`Chat Load Failed`,r.message)}}},async loadOlder(n){if(!n)return;let r=t().agentChatByAgent[n];if(!r?.loadedInitial){await t().loadAgentChat(n);return}if(!(r.loading||!r.hasMore||r.oldestLoadedId===null)){e(e=>({agentChatByAgent:{...e.agentChatByAgent,[n]:{...r,loading:!0}}}));try{let i=await a(`GET`,rt(n,{before:r.oldestLoadedId,limit:Y})),o=it(n,i),s=t().agentChatByAgent[n]??r,c=K(s.messages,[...o,...s.messages].sort((e,t)=>e.id-t.id));e(e=>({agentChatByAgent:{...e.agentChatByAgent,[n]:{messages:c,oldestLoadedId:ot(c),hasMore:i.length===Y,loading:!1,loadedInitial:!0}}}))}catch(i){e(e=>({agentChatByAgent:{...e.agentChatByAgent,[n]:{...e.agentChatByAgent[n]??r,loading:!1}}})),t().showError(`Chat Load Failed`,i.message)}}},async gapFillAgentChat(e){if(!e)return;let n=t().agentChatByAgent[e];if(!n?.loadedInitial||n.messages.length===0)return;let r=n.messages[n.messages.length-1].id;try{for(;;){let i=r,o=await a(`GET`,rt(e,{since:r,limit:Y}));if(o.length===0||(t().appendChatTail(e,o.filter(e=>e.id>i)),r=o[o.length-1].id,r<=i)||o.length<Y)return;n=t().agentChatByAgent[e];let s=n?.messages[n.messages.length-1]?.id;s&&s>r&&(r=s)}}catch(e){t().showError(`Chat Gap Fill Failed`,e.message)}},appendChatTail(n,r){if(!n||r.length===0)return;let i=it(n,r);if(i.length===0)return;let a=t().agentChatByAgent[n]??X,o=at(a.messages,i);e({agentChatByAgent:{...t().agentChatByAgent,[n]:{...a,messages:o,oldestLoadedId:ot(o)}}})},async fetchThreadHistory(n){if(n)try{let r=await a(`GET`,`/messages?for=`+encodeURIComponent(n)+`&limit=500`);e({threadHistory:{...t().threadHistory,[n]:r}})}catch{}},async fetchChatHistoryImports(){try{e({chatHistoryImports:await a(`GET`,`/chat/history-imports?limit=500`)})}catch{}},async fetchInboxState(){try{let n=await a(`GET`,`/inbox/state?operatorId=user`),r={},i={},o={};for(let e of n?.threads||[])e.readCursorMessageId&&(r[e.peerId]=e.readCursorMessageId),e.archivedAtMessageId&&(i[e.peerId]=e.archivedAtMessageId);for(let e of n?.drafts||[])e.body&&(o[e.peerId]=e.body);let s=t().inboxDrafts;e({inboxReadCursors:r,inboxArchivedThreads:i,...Object.keys(s).length>0?{}:{inboxDrafts:o}})}catch{}},openCompose(){e({composeOpen:!0,compose:{...D,from:v}})},openComposeToAgent(t){e({replyTo:null,compose:{...D,from:v,to:t.id},composeOpen:!0})},async doSend(){let n=t();if(!n.compose.from||!n.compose.to||!n.compose.body){t().showError(`Validation`,`From, To, and Message are required.`);return}try{let r={from:n.compose.from,to:n.compose.to,body:n.compose.body};n.compose.channel&&(r.channel=n.compose.channel),n.compose.subject&&(r.subject=n.compose.subject),n.replyTo&&(r.replyTo=n.replyTo.id),n.compose.claimable&&(r.claimable=!0,r.kind=`task`,r.payload={title:n.compose.subject||`Claimable task`}),await a(`POST`,`/messages`,r),e({composeOpen:!1,replyTo:null,compose:{...D,from:v}}),await t().fetchMessages()}catch(e){t().showError(`Send Failed`,e.message)}},async doClaim(e){let n=t(),r=n.compose.from||n.selectedAgent;if(!r){t().showError(`Validation`,`Select an agent first.`);return}try{let n=await a(`POST`,`/messages/`+e+`/claim`,{agentId:r});n.ok||t().showError(`Claim Failed`,n.error||`unknown`),n.ok&&await Promise.all([t().fetchMessages(),t().fetchTasks()])}catch(e){t().showError(`Claim Failed`,e.message)}},async doDeliveryAction(e,n,r){try{await a(`POST`,`/messages/`+e+`/delivery/actions`,{action:n,reason:r,agentId:t().compose.from||t().selectedAgent||`user`}),await t().fetchMessages()}catch(e){t().showError(`Delivery Update Failed`,e.message)}},async doDeleteMessage(n){try{await a(`DELETE`,`/messages/`+n),e({messages:t().messages.filter(e=>e.id!==n)})}catch(e){t().showError(`Delete Failed`,e.message)}},applyChatMessageUpdate(n){let r=t().agentChatByAgent,i={};for(let[e,t]of Object.entries(r))t.messages.some(e=>e.id===n.id)&&(i[e]={...t,messages:t.messages.map(e=>e.id===n.id?n:e)});Object.keys(i).length!==0&&e({agentChatByAgent:{...r,...i}})},async reactToMessage(n,r){try{let i=(n.reactions||[]).some(e=>e.actorId===`user`&&e.emoji===r),o=await a(`POST`,`/messages/`+n.id+`/reactions`,{actorId:v,emoji:r,action:i?`remove`:`add`});e({messages:W(t().messages,o)}),t().applyChatMessageUpdate(o)}catch(e){t().showError(`Reaction Failed`,e.message)}},startReply(t){let n=t.from===`user`?t.to:t.from;e({replyTo:{id:t.id,from:t.from},compose:{...D,from:v,to:n,channel:t.channel||``},composeOpen:!0})},cancelReply(){e({replyTo:null})},async openThread(n){e({threadMessages:[],threadOpen:!0});try{e({threadMessages:await a(`GET`,`/messages/`+n+`/thread`)})}catch(e){t().showError(`Thread Load Failed`,e.message)}},openInboxThread(n,r=[]){e({selectedInboxThread:n}),r.length&&t().markInboxThreadRead(n,r),t().loadAgentChat(n)},async sendChatMessage(n,r,i=[]){if(!(!n.trim()&&i.length===0||t().chatSending)){e({chatSending:!0});try{if(t().agentsById[r.peer]?.providerCapabilities?.liveSession?.inject)await a(`POST`,`/agents/`+encodeURIComponent(r.peer)+`/prompt`,{body:n.trim()||`Attachment`,...i.length?{attachments:i}:{}});else{let e={from:v,to:r.peer,body:n.trim()||`Attachment`};r.lastMessage?.channel&&(e.channel=r.lastMessage.channel),r.lastMessage?.id&&(e.replyTo=r.lastMessage.id),i.length&&(e.payload={attachments:i}),await a(`POST`,`/messages`,e)}let o={...t().inboxDrafts};delete o[r.peer],e({inboxDrafts:o}),a(`DELETE`,`/inbox/drafts?operatorId=`+encodeURIComponent(C)+`&peerId=`+encodeURIComponent(r.peer)).catch(()=>{}),await Promise.all([t().fetchMessages(),t().loadAgentChat(r.peer)])}catch(e){t().showError(`Send Failed`,e.message)}e({chatSending:!1})}},async sendPermissionDecision(e,n,r,i){try{await a(`POST`,`/agents/`+encodeURIComponent(e)+`/permission-decision`,{approvalId:n,decision:r,...i?{answers:i}:{}});let o=r===`approve`?`Approved`:r===`approve-session`?`Approved for session`:r===`abort`?`Aborted`:r===`answer`?`Answer sent for`:`Denied`;t().showNotification(`${o} ${r===`answer`?`Claude's question`:`permission request`}`),await t().fetchAgents()}catch(e){t().showError(`Permission Failed`,e.message)}},markInboxThreadReadTo(n,r){!n||r<=(t().inboxReadCursors[n]||0)||(e({inboxReadCursors:{...t().inboxReadCursors,[n]:r}}),a(`PATCH`,`/inbox/threads`,{operatorId:C,peerId:n,readCursorMessageId:r}).catch(()=>{}))},markInboxThreadRead(e,n){!e||!n.length||t().markInboxThreadReadTo(e,Ge(n))},markInboxThreadUnread(n){let r={...t().inboxReadCursors};delete r[n],e({inboxReadCursors:r}),a(`PATCH`,`/inbox/threads`,{operatorId:C,peerId:n,readCursorMessageId:null}).catch(()=>{})},archiveInboxThread(n,r){e({inboxArchivedThreads:{...t().inboxArchivedThreads,[n]:r}}),t().selectedInboxThread===n&&e({selectedInboxThread:``}),a(`PATCH`,`/inbox/threads`,{operatorId:C,peerId:n,archivedAtMessageId:r}).catch(()=>{})},unarchiveInboxThread(n){let r={...t().inboxArchivedThreads};delete r[n],e({inboxArchivedThreads:r}),a(`PATCH`,`/inbox/threads`,{operatorId:C,peerId:n,archivedAtMessageId:null}).catch(()=>{})},setReplyDraft(n,r){let i={...t().inboxDrafts};r?i[n]=r:delete i[n],e({inboxDrafts:i}),r?a(`PUT`,`/inbox/drafts`,{operatorId:C,peerId:n,body:r}).catch(()=>{}):a(`DELETE`,`/inbox/drafts?operatorId=`+encodeURIComponent(C)+`&peerId=`+encodeURIComponent(n)).catch(()=>{})},async sendInboxReply(n,r){let i=(t().inboxDrafts[n]||``).trim();if(!i||t().chatSending){i||t().showError(`Validation`,`Reply body is required.`);return}e({chatSending:!0});try{let o={from:v,to:n,body:i};r?.channel&&(o.channel=r.channel),r?.id&&(o.replyTo=r.id),await a(`POST`,`/messages`,o);let s={...t().inboxDrafts};delete s[n],e({inboxDrafts:s}),a(`DELETE`,`/inbox/drafts?operatorId=`+encodeURIComponent(C)+`&peerId=`+encodeURIComponent(n)).catch(()=>{}),await t().fetchMessages()}catch(e){t().showError(`Reply Failed`,e.message)}e({chatSending:!1})},async doSendInboxCompose(){let n=t().inboxCompose,r=n.to;if(r){if(n.toMode===`tag`?r=`tag:`+r:n.toMode===`cap`&&(r=`cap:`+r),!n.body){t().showError(`Validation`,`Message is required.`);return}try{let i={from:v,to:r,body:n.body};n.channel&&(i.channel=n.channel),n.subject&&(i.subject=n.subject),n.claimable&&(i.claimable=!0,i.kind=`task`,i.payload={title:n.subject||`Claimable task`}),await a(`POST`,`/messages`,i),e({inboxCompose:{...S,toMode:n.toMode,to:n.to}}),await t().fetchMessages()}catch(e){t().showError(`Send Failed`,e.message)}}}});function Z(e,t){return JSON.stringify([String(e),t||``])}function Q(e,t){return JSON.stringify([`team`,e,t||``])}function ct(e){return{threadId:String(e.threadId),...e.channel?{channel:e.channel}:{}}}function lt(e){return e.teamId?{teamId:e.teamId,...e.channel?{channel:e.channel}:{}}:null}function ut(e){return`teamId`in e?Q(e.teamId,e.channel):Z(e.threadId,e.channel)}function dt(e){let t=new URLSearchParams(`teamId`in e?{teamId:e.teamId}:{threadId:String(e.threadId)});return e.channel&&t.set(`channel`,e.channel),`/plans?${t.toString()}`}var ft=(e,t)=>({plansById:{},plansByThread:{},plansByTeam:{},planLookups:{},planLoading:{},planCollapsed:null,setPlanCollapsed(t){e({planCollapsed:t})},async fetchPlan(n){let r=`teamId`in n?{teamId:n.teamId,...n.channel?{channel:n.channel}:{}}:{threadId:String(n.threadId),...n.channel?{channel:n.channel}:{}},i=ut(r);e({planLookups:{...t().planLookups,[i]:r},planLoading:{...t().planLoading,[i]:!0}});try{let n=await a(`GET`,dt(r)),o=ct(n),s=Z(o.threadId,o.channel),c=lt(n),l=c?Q(c.teamId,c.channel):``,u=!(`teamId`in r),d=`teamId`in r;e({plansById:{...t().plansById,[n.id]:n},plansByThread:{...t().plansByThread,...u?{[i]:n}:{},[s]:n},plansByTeam:c?{...t().plansByTeam,...d?{[i]:n}:{},[l]:n}:t().plansByTeam,planLookups:{...t().planLookups,[i]:r,[s]:o,...c?{[l]:c}:{}},planLoading:{...t().planLoading,[i]:!1,[s]:!1,...c?{[l]:!1}:{}}})}catch(n){let a=typeof n.status==`number`?n.status:0;e({plansByThread:a===404&&!(`teamId`in r)?{...t().plansByThread,[i]:null}:t().plansByThread,plansByTeam:a===404&&`teamId`in r?{...t().plansByTeam,[i]:null}:t().plansByTeam,planLoading:{...t().planLoading,[i]:!1}}),a&&a!==404&&t().showError(`Plan Load Failed`,n.message)}},async refreshPlans(){let e=Object.values(t().planLookups);await Promise.all(e.map(e=>t().fetchPlan(e)))},upsertPlan(n){let r=ct(n),i=Z(r.threadId,r.channel),a=lt(n),o=a?Q(a.teamId,a.channel):``;e({plansById:{...t().plansById,[n.id]:n},plansByThread:{...t().plansByThread,[i]:n},plansByTeam:a?{...t().plansByTeam,[o]:n}:t().plansByTeam,planLookups:{...t().planLookups,[i]:r,...a?{[o]:a}:{}},planLoading:{...t().planLoading,[i]:!1,...a?{[o]:!1}:{}}})},removePlan(n){let r=typeof n==`string`?n:n.id,i={...t().plansById};delete i[r],e({plansById:i,plansByThread:Object.fromEntries(Object.entries(t().plansByThread).filter(([,e])=>e?.id!==r)),plansByTeam:Object.fromEntries(Object.entries(t().plansByTeam).filter(([,e])=>e?.id!==r)),planLookups:Object.fromEntries(Object.entries(t().planLookups).filter(([e])=>t().plansByThread[e]?.id!==r&&t().plansByTeam[e]?.id!==r))})}}),pt=(e,t)=>({teams:[],teamsLoading:!1,teamsError:null,teamOutcomeAggregates:null,teamOutcomeAggregatesLoading:!1,teamOutcomeAggregatesError:null,async fetchTeams(){e({teamsLoading:!0,teamsError:null});try{let n=await a(`GET`,`/teams`),r=K(t().teams,n.teams);return e({teams:r,teamsLoading:!1,teamsError:null}),r}catch(n){return e({teamsLoading:!1,teamsError:g(n)}),t().teams}},async fetchTeamOutcomeAggregates(){e({teamOutcomeAggregatesLoading:!0,teamOutcomeAggregatesError:null});try{let t=await a(`GET`,`/teams/outcomes`);return e({teamOutcomeAggregates:t,teamOutcomeAggregatesLoading:!1,teamOutcomeAggregatesError:null}),t}catch(n){return e({teamOutcomeAggregatesLoading:!1,teamOutcomeAggregatesError:g(n)}),t().teamOutcomeAggregates}},upsertTeam(n){let r=W(t().teams,n);r!==t().teams&&e({teams:r})},markTeamDissolved(n){let r=Date.now();e({teams:t().teams.map(e=>e.id===n.teamId?{...e,status:`dissolved`,updatedAt:r,dissolvedAt:e.dissolvedAt??r,zeroMembersSince:void 0,...n.outcomeStatus?{outcomeStatus:n.outcomeStatus}:{},...n.reason?{outcomeSummary:n.reason}:{}}:e)})},async dissolveTeam(e){try{let n=await a(`POST`,`/teams/${encodeURIComponent(e)}/dissolve`,{});t().upsertTeam(n),t().showNotification(`Team dissolved`),await Promise.all([t().fetchTeams(),t().fetchTeamOutcomeAggregates(),t().fetchActivityEvents()])}catch(e){t().showError(`Dissolve Failed`,g(e))}}}),mt=(e,t)=>({pairs:[],tasks:[],taskEvents:[],taskEventCache:{},taskEventsOpen:!1,pairInviteOpen:!1,pairMessageOpen:!1,pairInvite:{...T},pairMessage:{...b},pairStatusFilter:`open`,taskStatusFilter:``,taskSourceFilter:``,async fetchPairs(){try{let n=t(),r;if(n.view===`activity`)r=await a(`GET`,`/pairs`);else if(n.pairStatusFilter===`open`){let[e,t]=await Promise.all([a(`GET`,`/pairs?status=active`),a(`GET`,`/pairs?status=pending`)]);r=[...e,...t]}else r=n.pairStatusFilter?await a(`GET`,`/pairs?status=`+encodeURIComponent(n.pairStatusFilter)):await a(`GET`,`/pairs`);let i=r.sort((e,t)=>new Date(t.updatedAt).getTime()-new Date(e.updatedAt).getTime()),o=K(t().pairs,i);o!==t().pairs&&e({pairs:o})}catch{}},async fetchTasks(){try{let n=t(),r=new URLSearchParams({limit:`100`});n.taskStatusFilter&&r.set(`status`,n.taskStatusFilter),n.taskSourceFilter&&r.set(`source`,n.taskSourceFilter);let i=K(t().tasks,await a(`GET`,`/tasks?`+r.toString()));i!==t().tasks&&e({tasks:i})}catch{}},async doClaimTask(e){let n=t(),r=n.compose.from||n.selectedAgent;if(!r){t().showError(`Validation`,`Select an agent first.`);return}try{let n=await a(`POST`,`/tasks/`+e+`/claim`,{agentId:r});n.ok?await Promise.all([t().fetchTasks(),t().fetchMessages()]):t().showError(`Claim Failed`,n.error||`unknown`)}catch(e){t().showError(`Claim Failed`,e.message)}},async doUpdateTaskStatus(n,r){if(!(!n||!r||r===n.status))try{let i={status:r},o=n.claimedBy||t().compose.from||t().selectedAgent;o&&(i.agentId=o);let s=await a(`PATCH`,`/tasks/`+n.id+`/status`,i),c=s.task||s;if(e({tasks:t().tasks.map(e=>e.id===n.id?c:e)}),s.memoryEvent){let r=t().taskEventCache[n.id]||[];e({taskEventCache:{...t().taskEventCache,[n.id]:[...r,s.memoryEvent]},...t().taskEventsOpen?{taskEvents:[...t().taskEvents,s.memoryEvent]}:{}})}s.memory&&t().showNotification(`Memory captured: ${s.memory.title}`)}catch(e){t().showError(`Status Update Failed`,e.message),await t().fetchTasks()}},async openTaskEvents(n){e({taskEvents:[],taskEventsOpen:!0});try{let r=await a(`GET`,`/tasks/`+n.id+`/events`);e({taskEvents:r,taskEventCache:{...t().taskEventCache,[n.id]:r}})}catch(e){t().showError(`Task Events Failed`,e.message)}},openPairInvite(n){e({pairInvite:{...T,requesterId:n||t().selectedAgent||``},pairInviteOpen:!0})},closePairInvite(){e({pairInviteOpen:!1,pairInvite:{...T}})},async doCreatePair(){let n=t();if(!n.pairInvite.requesterId||!n.pairInvite.targetId){t().showError(`Validation`,`Requester and Target are required.`);return}if(n.pairInvite.requesterId===n.pairInvite.targetId){t().showError(`Validation`,`Requester and Target must be different.`);return}try{let r={from:n.pairInvite.requesterId,target:n.pairInvite.targetId};n.pairInvite.objective&&(r.objective=n.pairInvite.objective),await a(`POST`,`/pairs`,r),e({pairInviteOpen:!1,pairInvite:{...T}}),await Promise.all([t().fetchPairs(),t().fetchMessages()])}catch(e){t().showError(`Pair Invite Failed`,e.message)}},openPairMessage(t,n){e({pairMessage:{...b,pairId:t.id,from:n||t.requesterId},pairMessageOpen:!0})},closePairMessage(){e({pairMessageOpen:!1,pairMessage:{...b}})},async doSendPairMessage(){let n=t();if(!n.pairMessage.pairId||!n.pairMessage.from||!n.pairMessage.body){t().showError(`Validation`,`Pair, From, and Message are required.`);return}try{let r={from:n.pairMessage.from,body:n.pairMessage.body};n.pairMessage.subject&&(r.subject=n.pairMessage.subject),await a(`POST`,`/pairs/`+encodeURIComponent(n.pairMessage.pairId)+`/messages`,r),e({pairMessageOpen:!1,pairMessage:{...b}}),await Promise.all([t().fetchPairs(),t().fetchMessages()])}catch(e){t().showError(`Pair Message Failed`,e.message)}},async doAcceptPair(e){try{await a(`POST`,`/pairs/`+encodeURIComponent(e.id)+`/accept`,{agentId:e.targetId}),await Promise.all([t().fetchPairs(),t().fetchMessages()])}catch(e){t().showError(`Accept Failed`,e.message)}},async doRejectPair(e){try{await a(`POST`,`/pairs/`+encodeURIComponent(e.id)+`/reject`,{agentId:e.targetId}),await Promise.all([t().fetchPairs(),t().fetchMessages()])}catch(e){t().showError(`Reject Failed`,e.message)}},async doHangupPair(e,n){try{await a(`POST`,`/pairs/`+encodeURIComponent(e.id)+`/hangup`,{agentId:n||e.requesterId}),await Promise.all([t().fetchPairs(),t().fetchMessages()])}catch(e){t().showError(`Hang Up Failed`,e.message)}}}),ht=(e,t)=>({orchestrators:[],orchestratorSpawnOpen:!1,orchestratorInstallOpen:!1,spawnOrchId:``,spawnProvider:`claude`,spawnModel:U(`claude`),spawnEffort:``,spawnProfile:`default-relay`,spawnCwd:``,spawnLabel:``,spawnApproval:`guarded`,spawnWorkspaceMode:`inherit`,spawnPrompt:``,spawnSystemPromptAppend:``,spawnCount:1,spawnCwdHistory:[],isSpawning:!1,spawnDirBrowser:{open:!1,loading:!1,path:``,parent:``,baseDir:``,entries:[],error:``},pendingForkImport:null,async fetchOrchestrators(){try{let n=K(t().orchestrators,await a(`GET`,`/orchestrators`));n!==t().orchestrators&&e({orchestrators:n})}catch{}},async refreshOrchestratorProviders(e){try{await a(`GET`,`/orchestrators/`+encodeURIComponent(e)+`/providers?refresh=1`),await t().fetchOrchestrators(),t().showNotification(`Provider status refreshed`)}catch(e){t().showError(`Provider Refresh Failed`,e.message)}},openAgentSpawn(){t().openOrchestratorSpawn()},closeAgentSpawn(){e({orchestratorSpawnOpen:!1})},async doSpawnAgent(){await t().submitOrchestratorSpawn()},openOrchestratorSpawn(){t().openOrchestratorSpawnAt()},openOrchestratorSpawnAt(n={}){let r=t().orchestrators.filter(e=>e.status===`online`);if(!r.length){t().showError(`No Orchestrators`,`No orchestrators are currently online.`);return}let i=t(),a=n.orchestratorId?r.find(e=>e.id===n.orchestratorId):void 0;if(n.orchestratorId&&!a){t().showError(`Orchestrator Offline`,`The selected orchestrator is not online.`);return}let o=n.cwd?.trim()||i.spawnCwd,s=o?r.find(e=>f(o,e.baseDir)):void 0,c=i.spawnOrchId?r.find(e=>e.id===i.spawnOrchId):void 0,l=a?.id||s?.id||c?.id||r[0].id,u=r.find(e=>e.id===l),d=i.spawnProvider&&u.providers.includes(i.spawnProvider)?i.spawnProvider:H(u),p=i.spawnProvider===d&&i.spawnModel?i.spawnModel:U(d),m=o&&f(o,u.baseDir)?o:u.baseDir||``;e({spawnOrchId:l,spawnProvider:d,spawnModel:p,spawnEffort:i.spawnProvider===d&&i.spawnModel===p?i.spawnEffort:``,spawnProfile:i.spawnProfile||`default-relay`,spawnCwd:m,spawnLabel:``,spawnWorkspaceMode:`inherit`,spawnPrompt:``,spawnSystemPromptAppend:``,spawnCount:1,pendingForkImport:null,orchestratorSpawnOpen:!0})},forkFromAgent(n,r){let i=t(),a=i.agentsById[n];if(!a){t().showError(`Fork`,`Agent not found.`);return}let o=i.orchestrators.filter(e=>e.status===`online`);if(!o.length){t().showError(`No Orchestrators`,`No orchestrators are currently online.`);return}let s=a.providerCapabilities,c=s?.model?.provider||(typeof a.meta?.provider==`string`?a.meta.provider:``),l=s?.model?.alias||s?.model?.id||``,u=(c?V[c]:void 0)?.models.find(e=>e.alias===l||e.providerModel===l)?.alias||``,p=s?.model?.effort||``,h=a.meta?.workspace,g=ee(h)?h:{},_=m(g.repoRoot)||m(g.sourceCwd)||(typeof a.meta?.cwd==`string`?a.meta.cwd:``),v=m(g.mode),y=v===`isolated`?`isolated`:v===`shared`?`shared`:`inherit`,b=s?.session?.approvalMode||(typeof a.meta?.approvalMode==`string`?a.meta.approvalMode:`guarded`),x=a.label?`${a.label} (fork)`:``,S=o.find(e=>e.hostname===a.machine)||o.find(e=>f(_,e.baseDir))||o[0],C=te(a),w=[];for(let e of r){let t=d(e).trim();if(!t)continue;let n=e.from===`user`?`user`:`agent`;w.push(`[${n}]: ${t}`)}let T=w.join(`
|
|
6
|
-
`),E=14e3,D=`You are continuing work from a previous agent session (${C}). Below is the conversation history. Treat it as context for your work, not as your own actions.\n\n${T.length>E?`...
|
|
7
|
-
`+T.slice(T.length-E):T}`,ne=r.filter(e=>typeof e.id==`number`&&e.id>0).map(e=>e.id);e({spawnOrchId:S.id,spawnProvider:c||H(S),spawnModel:u||U(c||H(S)),spawnEffort:p,spawnProfile:i.spawnProfile||`default-relay`,spawnCwd:_||S.baseDir||``,spawnLabel:x,spawnApproval:b,spawnWorkspaceMode:y,spawnPrompt:`Continue from this previous session.`,spawnSystemPromptAppend:D,spawnCount:1,pendingForkImport:{sourcePeerId:a.id,sourceAgentId:a.id,sourceThreadId:a.id,sourceAgentLabel:C,messageIds:ne},orchestratorSpawnOpen:!0})},openOrchestratorInstall(){e({orchestratorInstallOpen:!0})},openOrchestratorSpawnFor(n){let r=t(),i=r.orchestrators.find(e=>e.id===n),a=H(i),o=U(a),s=r.spawnProvider===a&&r.spawnModel===o?r.spawnEffort:``,c=r.spawnCwd&&f(r.spawnCwd,i?.baseDir)?r.spawnCwd:i?.baseDir||``;e({spawnOrchId:n,spawnProvider:a,spawnModel:o,spawnEffort:s,spawnProfile:r.spawnProfile||`default-relay`,spawnCwd:c,spawnLabel:``,spawnWorkspaceMode:`inherit`,spawnPrompt:``,spawnSystemPromptAppend:``,spawnCount:1,pendingForkImport:null,orchestratorSpawnOpen:!0})},selectSpawnHistory(n,r){let i=t(),a=i.orchestrators.find(e=>e.id===n&&e.status===`online`);if(!a){t().showError(`Unavailable`,`That orchestrator is no longer online.`);return}if(n===i.spawnOrchId){e({spawnCwd:r});return}let o=i.spawnProvider&&a.providers.includes(i.spawnProvider)?i.spawnProvider:H(a),s=i.spawnProvider===o&&i.spawnModel?i.spawnModel:U(o);e({spawnOrchId:n,spawnProvider:o,spawnModel:s,spawnEffort:i.spawnProvider===o&&i.spawnModel===s?i.spawnEffort:``,spawnCwd:r})},async submitOrchestratorSpawn(){let n=t();if(n.isSpawning)return;if(!n.spawnOrchId){t().showError(`Validation`,`Select an orchestrator.`);return}let r=n.orchestrators.find(e=>e.id===n.spawnOrchId);if(!r){t().showError(`Validation`,`Selected orchestrator is not available.`);return}let i=n.spawnCwd.trim();if(!i){t().showError(`Validation`,`Select a working directory.`);return}if(!f(i,r.baseDir)){t().showError(`Validation`,`Working directory must be under ${r.baseDir}.`);return}let o=n.pendingForkImport,s=o?1:Math.max(1,Math.min(10,Math.round(n.spawnCount)||1));e({isSpawning:!0});try{for(let e=0;e<s;e++){let t={provider:n.spawnProvider,orchestratorId:n.spawnOrchId,approvalMode:n.spawnApproval,workspaceMode:n.spawnWorkspaceMode||`inherit`};n.spawnModel&&(t.model=n.spawnModel),n.spawnEffort&&(t.effort=n.spawnEffort),n.spawnProfile&&(t.profile=n.spawnProfile),t.cwd=i,n.spawnLabel&&(t.label=s>1?`${n.spawnLabel} ${e+1}`:n.spawnLabel),n.spawnPrompt&&(t.prompt=n.spawnPrompt),n.spawnSystemPromptAppend&&(t.systemPromptAppend=n.spawnSystemPromptAppend);let r=(await a(`POST`,`/agents/spawn`,t)).command?.params?.spawnRequestId;o&&r&&o.messageIds.length>0&&await a(`POST`,`/chat/history-imports`,{targetSpawnRequestId:r,sourcePeerId:o.sourcePeerId,sourceAgentId:o.sourceAgentId,sourceThreadId:o.sourceThreadId,sourceAgentLabel:o.sourceAgentLabel,importedBy:C,messageIds:o.messageIds})}e({orchestratorSpawnOpen:!1,pendingForkImport:null,isSpawning:!1,spawnCwdHistory:[{orchId:n.spawnOrchId,cwd:i},...n.spawnCwdHistory.filter(e=>!(e.orchId===n.spawnOrchId&&e.cwd===i))].slice(0,5)}),await Promise.all([t().fetchAgents(),t().fetchOrchestrators(),t().fetchActivityEvents(),t().fetchChatHistoryImports()])}catch(n){e({isSpawning:!1}),t().showError(`Spawn Failed`,n.message)}},orchestratorAction(e,n,r,i){let o=n===`restart`?`Restart`:`Shutdown`,s=r?`agent "${r}"`:`all agents`;t().openConfirm(`${o} Agent`,`${o} ${s} on orchestrator "${e}"?`,async()=>{try{await a(`POST`,`/orchestrators/`+encodeURIComponent(e)+`/actions`,{action:n,agentId:r,...i?{surface:{component:i}}:{}}),await Promise.all([t().fetchOrchestrators(),t().fetchActivityEvents()])}catch(e){t().showError(`${o} Failed`,e.message)}})},upgradeOrchestrator(e,n){let r=n?` to v${n}`:` to match the relay`;t().openConfirm(`Upgrade Orchestrator`,`Upgrade "${e}"${r}? It will install the new version and restart itself.`,async()=>{try{await a(`POST`,`/orchestrators/`+encodeURIComponent(e)+`/actions`,{action:`upgrade`,...n?{targetVersion:n}:{}}),await Promise.all([t().fetchOrchestrators(),t().fetchActivityEvents()])}catch(e){t().showError(`Upgrade Failed`,e.message)}})},deleteOrchestrator(e){t().openConfirm(`Remove Orchestrator`,`Remove orchestrator "${e}"?`,async()=>{try{await a(`DELETE`,`/orchestrators/`+encodeURIComponent(e)),await Promise.all([t().fetchOrchestrators(),t().fetchActivityEvents()])}catch(e){t().showError(`Delete Failed`,e.message)}})},async browseSpawnDirectory(n){let r=t().spawnOrchId;if(!r)return;let i=t().spawnDirBrowser;e({spawnDirBrowser:{...i,loading:!0,error:``}});try{let i=n?`?path=`+encodeURIComponent(n):``,o=await a(`GET`,`/orchestrators/`+encodeURIComponent(r)+`/directories`+i);e({spawnDirBrowser:{open:!0,loading:!1,path:o.path||``,parent:o.parent||``,baseDir:o.baseDir||``,entries:o.entries||[],error:``},spawnCwd:o.path||t().spawnCwd})}catch(n){e({spawnDirBrowser:{...t().spawnDirBrowser,loading:!1,error:n.message}})}},selectSpawnDirectory(n){e({spawnCwd:n||t().spawnDirBrowser.path,spawnDirBrowser:{...t().spawnDirBrowser,open:!1}})}}),gt=(e,t)=>({managedPolicies:[],policyModal:{open:!1,editing:``,name:``,description:``,orchestratorId:``,cwd:``,enabled:void 0,provider:`claude`,rig:``,model:U(`claude`),effort:``,profile:`default-relay`,providerArgs:``,prompt:``,tags:``,capabilities:``,label:``,mode:`always-on`,permissionMode:`guarded`,restartOnUpdate:!0,scheduledDailyRestart:!1,keepaliveSeconds:`300`,backoffSchedule:`5,15,60,300`,backoffResetAfterSeconds:`600`,channelId:``},policyDirBrowser:{open:!1,loading:!1,path:``,parent:``,baseDir:``,entries:[],error:``},agentProfiles:[],profileModal:{open:!1,mode:`create`,profile:{name:``,description:``,provider:`any`,base:`host`,instructions:{system:``,append:[],repoInstructions:`allow`,globalInstructions:`allow`},relay:{context:!0,skills:!0,plugins:!0,statusLine:!0,mcp:!0},skills:[],plugins:[],mcp:{mode:`host`},hooks:{mode:`host`},permissions:{filesystem:`host`},env:{},providerOptions:{}}},async fetchManagedPolicies(){try{e({managedPolicies:await a(`GET`,`/spawn-policies/health`)})}catch{}},async fetchAgentProfiles(){try{e({agentProfiles:(await a(`GET`,`/agent-profiles`)).map(e=>e.value)})}catch{}},openPolicyCreate(){let n=t().orchestrators.filter(e=>e.status===`online`);if(!n.length){t().showError(`No Orchestrators`,`No orchestrators are currently online.`);return}e({policyModal:{open:!0,editing:``,name:``,description:``,orchestratorId:n[0].id,cwd:``,enabled:void 0,provider:H(n[0]),rig:``,model:U(H(n[0])),effort:``,profile:`default-relay`,providerArgs:``,prompt:``,tags:``,capabilities:``,label:``,mode:`always-on`,permissionMode:`guarded`,restartOnUpdate:!0,scheduledDailyRestart:!1,keepaliveSeconds:`300`,backoffSchedule:`5,15,60,300`,backoffResetAfterSeconds:`600`,channelId:``},policyDirBrowser:{open:!1,loading:!1,path:``,parent:``,baseDir:``,entries:[],error:``}})},openPolicyEdit(t){e({policyModal:{open:!0,editing:t.name,name:t.name,enabled:t.enabled,description:t.description||``,orchestratorId:t.orchestratorId,cwd:t.cwd,provider:t.provider,rig:t.rig||``,model:t.model||U(t.provider),effort:t.effort||``,profile:t.profile||`default-relay`,providerArgs:(t.providerArgs||[]).join(` `),prompt:t.prompt||``,tags:(t.tags||[]).join(`, `),capabilities:(t.capabilities||[]).join(`, `),label:t.label||``,mode:t.mode,permissionMode:t.permissionMode,restartOnUpdate:t.restartOnUpdate,scheduledDailyRestart:t.scheduledDailyRestart,keepaliveSeconds:String(t.onDemand?.keepaliveSeconds??300),backoffSchedule:(t.backoff?.schedule||[5,15,60,300]).join(`, `),backoffResetAfterSeconds:String(t.backoff?.resetAfterSeconds??600),channelId:t.binding?.channelId||``},policyDirBrowser:{open:!1,loading:!1,path:``,parent:``,baseDir:``,entries:[],error:``}})},async submitPolicy(){let n=t().policyModal;if(!n.name.trim()){t().showError(`Validation`,`Policy name is required.`);return}if(!n.orchestratorId){t().showError(`Validation`,`Select an orchestrator.`);return}if(!n.cwd.trim()){t().showError(`Validation`,`Working directory is required.`);return}let r=e=>e.split(/[,\s]+/).map(e=>e.trim()).filter(Boolean),i={name:n.name.trim(),...n.description.trim()?{description:n.description.trim()}:{},...n.enabled===void 0?{}:{enabled:n.enabled},orchestratorId:n.orchestratorId,cwd:n.cwd.trim(),provider:n.provider,...n.rig.trim()?{rig:n.rig.trim()}:{},...n.model?{model:n.model}:{},...n.effort?{effort:n.effort}:{},...n.profile?{profile:n.profile}:{},providerArgs:n.providerArgs.trim()?n.providerArgs.trim().split(/\s+/):[],...n.prompt.trim()?{prompt:n.prompt.trim()}:{},tags:r(n.tags),capabilities:r(n.capabilities),...n.label.trim()?{label:n.label.trim()}:{},mode:n.mode,permissionMode:n.permissionMode,restartOnUpdate:n.restartOnUpdate,scheduledDailyRestart:n.scheduledDailyRestart,...n.mode===`on-demand`?{onDemand:{keepaliveSeconds:Number(n.keepaliveSeconds)||300,idleDefinition:`no-activity`}}:{},backoff:{schedule:r(n.backoffSchedule).map(Number).filter(e=>e>0),resetAfterSeconds:Number(n.backoffResetAfterSeconds)||600},...n.channelId.trim()?{binding:{type:`channel`,channelId:n.channelId.trim()}}:{}};i.backoff.schedule.length||(i.backoff.schedule=[5,15,60,300]);try{await a(`PUT`,`/spawn-policy/`+encodeURIComponent(i.name),i),e({policyModal:{...n,open:!1}}),await t().fetchManagedPolicies()}catch(e){t().showError(`Save Failed`,e.message)}},deletePolicy(e){t().openConfirm(`Delete Policy`,`Delete managed agent policy "${e}"? This will stop any running agent.`,async()=>{try{await a(`DELETE`,`/spawn-policy/`+encodeURIComponent(e)),await t().fetchManagedPolicies()}catch(e){t().showError(`Delete Failed`,e.message)}})},async browsePolicyDirectory(n){let r=t().policyModal.orchestratorId;if(!r)return;let i=t().policyDirBrowser;e({policyDirBrowser:{...i,loading:!0,error:``}});try{let i=n?`?path=`+encodeURIComponent(n):``,o=await a(`GET`,`/orchestrators/`+encodeURIComponent(r)+`/directories`+i);e({policyDirBrowser:{open:!0,loading:!1,path:o.path||``,parent:o.parent||``,baseDir:o.baseDir||``,entries:o.entries||[],error:``},policyModal:{...t().policyModal,cwd:o.path||t().policyModal.cwd}})}catch(n){e({policyDirBrowser:{...t().policyDirBrowser,loading:!1,error:n.message}})}},selectPolicyDirectory(n){e({policyModal:{...t().policyModal,cwd:n||t().policyDirBrowser.path},policyDirBrowser:{...t().policyDirBrowser,open:!1}})},openProfileModal(t,n){let r={name:``,description:``,provider:`any`,base:`host`,instructions:{system:``,append:[],repoInstructions:`allow`,globalInstructions:`allow`},relay:{context:!0,skills:!0,plugins:!0,statusLine:!0,mcp:!0},skills:[],plugins:[],mcp:{mode:`host`},hooks:{mode:`host`},permissions:{filesystem:`host`},env:{},providerOptions:{}},i;n&&t===`duplicate`?(i=JSON.parse(JSON.stringify(n)),i.name=n.name+`-copy`,delete i.builtIn):i=n&&(t===`edit`||t===`view`)?JSON.parse(JSON.stringify(n)):r,e({profileModal:{open:!0,mode:t,profile:i}})},closeProfileModal(){e({profileModal:{...t().profileModal,open:!1}})},updateProfileModal(n){let r=t().profileModal.profile;e({profileModal:{...t().profileModal,profile:{...r,...n}}})},async saveProfile(){let{mode:n,profile:r}=t().profileModal;if(!r.name.trim()){t().showError(`Validation`,`Profile name is required.`);return}if(n!==`view`)try{await a(`PUT`,`/agent-profiles/`+encodeURIComponent(r.name.trim()),r),e({profileModal:{...t().profileModal,open:!1}}),await t().fetchAgentProfiles(),t().showNotification(`Profile "${r.name}" saved`)}catch(e){t().showError(`Save Failed`,e.message)}},deleteProfile(e){t().openConfirm(`Delete Profile`,`Delete agent profile "${e}"?`,async()=>{try{await a(`DELETE`,`/agent-profiles/`+encodeURIComponent(e)),await t().fetchAgentProfiles(),t().showNotification(`Profile "${e}" deleted`)}catch(e){t().showError(`Delete Failed`,e.message)}})}}),_t=(e,t)=>({operatorActivity:[],recordOperatorActivity(n){let r={id:Date.now(),kind:`operator`,title:n.title||`Activity`,body:n.body,meta:n.meta,icon:n.icon,view:n.view,peer:n.peer,messageId:n.messageId,pairId:n.pairId,taskId:n.taskId,agentId:n.agentId,ts:Date.now(),clientId:`op-`+Date.now(),createdAt:Date.now()};e({operatorActivity:[r,...t().operatorActivity.slice(0,79)]}),a(`POST`,`/activity`,{operatorId:C,clientId:r.clientId,kind:r.kind,title:r.title,body:r.body,meta:r.meta,icon:r.icon,view:r.view,peer:r.peer,messageId:r.messageId,pairId:r.pairId,taskId:r.taskId,agentId:r.agentId}).catch(()=>{})},async openActivityItem(e){if(e.view&&await t().switchView(e.view===`inbox`?`chat`:e.view),e.peer&&t().openInboxThread(e.peer),e.agentId){let n=t().agentsById[e.agentId];n&&t().openAgentDetail(n)}if(e.taskId){let n=t().tasks.find(t=>t.id===e.taskId);n&&await t().openTaskEvents(n)}}});function vt(e){return h(e.createdAt??e.ts)}function yt(e,t){let n=[`# Agent Relay Timeline`,``,`Exported: ${t}`,`Events: ${e.length}`,``];for(let t of e){let e=new Date(vt(t)).toISOString();n.push(`## ${t.title||t.kind||`Event`}`),n.push(`- When: ${e}`),t.kind&&n.push(`- Kind: ${t.kind}`),t.agentId&&n.push(`- Agent: ${t.agentId}`),t.peer&&n.push(`- Peer: ${t.peer}`),t.body&&n.push(``,t.body),n.push(``)}return n.join(`
|
|
8
|
-
`)}var bt=(e,t)=>({activityEvents:[],activityFilter:``,async fetchActivityEvents(){try{e({activityEvents:await a(`GET`,`/activity?limit=200`)})}catch{}},exportActivity(e){let n=t(),r=[...n.operatorActivity,...n.activityEvents].sort((e,t)=>vt(t)-vt(e)),i=new Date().toISOString(),a=`agent-relay-timeline-${i.slice(0,10)}.${e===`json`?`json`:`md`}`;e===`json`?w(a,JSON.stringify({title:`Agent Relay Timeline`,exportedAt:i,events:r},null,2),`application/json`):w(a,yt(r,i),`text/markdown`)},exportThread(e,t){let n=`agent-relay-thread-${l(e.peer)}.${t===`json`?`json`:`md`}`,r={title:`Thread: `+e.peer,importedHistory:e.importedHistory||[],messages:e.messages,exportedAt:new Date().toISOString()};w(n,JSON.stringify(r,null,2),t===`json`?`application/json`:`text/markdown`)},exportPair(e,t){let n=`agent-relay-pair-${l(e.id)}.${t===`json`?`json`:`md`}`,r={title:`Pair: `+e.id,pair:e,exportedAt:new Date().toISOString()};w(n,JSON.stringify(r,null,2),t===`json`?`application/json`:`text/markdown`)},async exportTask(n,r){let i=t().taskEventCache[n.id]||[];if(!i.length)try{i=await a(`GET`,`/tasks/`+n.id+`/events`),e({taskEventCache:{...t().taskEventCache,[n.id]:i}})}catch{}let o=`agent-relay-task-${n.id}.${r===`json`?`json`:`md`}`,s={title:`Task: `+(n.title||`#`+n.id),task:n,events:i,exportedAt:new Date().toISOString()};w(o,JSON.stringify(s,null,2),r===`json`?`application/json`:`text/markdown`)}}),xt=(e,t)=>({channels:[],connectors:[],integrations:[],automations:[],automationRuns:[],health:null,maintenanceJobs:[],analyticsPeriod:`24h`,analyticsData:null,async fetchChannels(){try{e({channels:await a(`GET`,`/channels`)})}catch{}},async fetchConnectors(){try{e({connectors:await a(`GET`,`/connectors`)})}catch{}},async fetchIntegrations(){try{e({integrations:await a(`GET`,`/integrations`)})}catch{}},async fetchAutomations(){try{e({automations:await a(`GET`,`/automations`)})}catch{}},async fetchAutomationRuns(t){try{let n=new URLSearchParams({limit:`100`});t&&n.set(`automationId`,t),e({automationRuns:await a(`GET`,`/automation-runs?`+n.toString())})}catch{}},async fetchHealth(){try{e({health:await a(`GET`,`/health`)})}catch{}},async fetchMaintenanceJobs(){try{e({maintenanceJobs:await a(`GET`,`/maintenance/jobs`)})}catch{}},async runMaintenanceJob(n){try{let r=await a(`POST`,`/maintenance/jobs/`+encodeURIComponent(n)+`/run`,{});return e({maintenanceJobs:r.jobs}),t().showNotification(r.run.status===`succeeded`?`Maintenance job completed`:`Maintenance job skipped`),r.run}catch(e){return t().showError(`Maintenance Job Failed`,e.message),await t().fetchMaintenanceJobs(),null}},async runHealthAction(n){if(n.preset&&e({agentPresetFilter:n.preset,showOffline:!0}),n.api&&n.path&&(await a(n.api,n.path),await t().refreshLiveData()),n.view&&await t().switchView(n.view),n.copy)try{await navigator.clipboard?.writeText(n.copy)}catch{}},async runConnectorAction(e,n){try{let r=await a(`POST`,`/connectors/`+encodeURIComponent(e)+`/actions`,{action:n});if(await t().fetchConnectors(),!r.ok)throw Error(r.stderr||`${n} failed`);return r}catch(e){throw t().showError(`Connector Action Failed`,e.message),e}},async fetchAnalytics(){try{e({analyticsData:await a(`GET`,`/stats/analytics?period=`+t().analyticsPeriod)})}catch{}},setAnalyticsPeriod(n){e({analyticsPeriod:n}),t().fetchAnalytics()}}),St=(e,t)=>({workspaces:[],workspaceFocusId:null,workspaceGitState:{},workspaceMergePreview:{},workspaceDiff:{},workspaceOrphans:[],async openWorkspaceFocus(n){e({workspaceFocusId:n}),await t().switchView(`workspaces`)},async fetchWorkspaces(){try{e({workspaces:await a(`GET`,`/workspaces`)})}catch{}},async fetchWorkspaceGitState(t){try{let n=await a(`GET`,`/workspaces/`+encodeURIComponent(t)+`/git-state`);e(e=>({workspaceGitState:{...e.workspaceGitState,[t]:n}}))}catch(n){e(e=>({workspaceGitState:{...e.workspaceGitState,[t]:{available:!1,reason:n.message}}}))}},async fetchWorkspaceMergePreview(t){try{let n=await a(`GET`,`/workspaces/`+encodeURIComponent(t)+`/merge-preview`);e(e=>({workspaceMergePreview:{...e.workspaceMergePreview,[t]:n}}))}catch(n){e(e=>({workspaceMergePreview:{...e.workspaceMergePreview,[t]:{available:!1,reason:n.message}}}))}},async fetchWorkspaceDiff(t){try{let n=await a(`GET`,`/workspaces/`+encodeURIComponent(t)+`/diff`);e(e=>({workspaceDiff:{...e.workspaceDiff,[t]:n}}))}catch(n){e(e=>({workspaceDiff:{...e.workspaceDiff,[t]:{available:!1,reason:n.message}}}))}},async fetchWorkspaceOrphans(){try{e({workspaceOrphans:(await a(`GET`,`/workspaces/orphans`)).orphans??[]})}catch{}},async reclaimWorkspaceOrphan(e){t().openConfirm(`Reclaim Orphan Worktree`,`Remove the orphaned worktree "${e.branch||e.worktreePath}" from disk? It has no live agent.`,async()=>{try{await a(`POST`,`/workspaces/orphans/reclaim`,{worktreePath:e.worktreePath,repoRoot:e.repoRoot,branch:e.branch}),t().showNotification(`Orphan reclaim dispatched`),await Promise.all([t().fetchWorkspaceOrphans(),t().fetchActivityEvents()])}catch(e){t().showError(`Reclaim Failed`,e.message)}})},async workspaceAction(e,n){let r=n===`ready`?`Mark ready`:n===`request-review`?`Request review`:n===`merge-plan`?`Mark merge planned`:n===`merge`?`Merge`:n===`abandon`?`Abandon`:`Cleanup`,i=async()=>{try{await a(`POST`,`/workspaces/`+encodeURIComponent(e)+`/actions`,{action:n}),t().showNotification(n===`cleanup`?`Workspace cleanup requested`:n===`merge`?`Workspace merge dispatched`:`Workspace updated: ${r}`),await Promise.all([t().fetchWorkspaces(),t().fetchOrchestrators(),t().fetchActivityEvents()])}catch(e){t().showError(`Workspace Action Failed`,e.message)}};if(n===`cleanup`||n===`abandon`||n===`merge`){let r=t().workspaces.find(t=>t.id===e),a=r?.branch||r?.worktreePath||e;if(n===`merge`){let n=t().workspaceMergePreview[e],r=n&&n.available!==!1?` — ${n.strategy===`pr`?`opens a PR`:`rebases & fast-forwards into ${n.baseRef||`base`}, then deletes the branch`}.`:` — lands the work and deletes the branch.`;t().openConfirm(`Merge Workspace`,`Merge workspace "${a}"?${r}`,i);return}if(n===`cleanup`){await t().fetchWorkspaceGitState(e);let n=t().workspaceGitState[e],r=``;if(n&&n.available!==!1&&!n.missing){let e=n.ahead??0,t=n.dirtyCount??0;(e>0||t>0)&&(r=` ⚠ This destroys ${[e>0?`${e} unmerged commit(s)`:``,t>0?`${t} uncommitted change(s)`:``].filter(Boolean).join(` and `)}.`)}t().openConfirm(`Cleanup Workspace`,`Remove the worktree for "${a}" on the host?${r}`,i);return}t().openConfirm(`Abandon Workspace`,`Abandon workspace "${a}"?`,i);return}await i()},async purgeWorkspace(e){let n=t().workspaces.find(t=>t.id===e),r=n?.branch||n?.worktreePath||e;t().openConfirm(`Purge Workspace Record`,`Permanently remove the record for "${r}"? This only clears the dashboard row — it does not touch disk.`,async()=>{try{await a(`DELETE`,`/workspaces/`+encodeURIComponent(e)),t().showNotification(`Workspace record purged`),await Promise.all([t().fetchWorkspaces(),t().fetchActivityEvents()])}catch(e){t().showError(`Purge Failed`,e.message)}})}}),Ct=(e,t)=>({memories:[],memoryTotal:0,memoryBrokerInfo:null,memoryStats:null,memoryFilters:{search:``,type:``,scope:``,tags:``,visibility:``,minRelevance:`0`},selectedMemoryId:``,memoryLoading:!1,async refreshMemory(){await Promise.all([t().fetchMemoryBroker(),t().fetchMemoryStats(),t().fetchMemories()])},async fetchMemoryBroker(){try{e({memoryBrokerInfo:await a(`GET`,`/memories/broker`)})}catch(e){t().showError(`Memory Broker Failed`,e.message)}},async fetchMemoryStats(){try{e({memoryStats:await a(`GET`,`/memories/stats`)})}catch{}},async fetchMemories(){let n=t().memoryFilters,r={limit:100};if(n.type&&(r.type=n.type),n.scope.trim()&&(r.scope=n.scope.trim()),n.visibility&&(r.visibility=n.visibility),n.tags.trim()&&(r.tags=n.tags.split(`,`).map(e=>e.trim()).filter(Boolean)),n.minRelevance.trim()!==``){let e=Number(n.minRelevance);Number.isFinite(e)&&(r.minRelevance=Math.max(0,Math.min(1,e)))}e({memoryLoading:!0});try{let n=await a(`POST`,`/memories/search`,r),i=n.memories.some(e=>e.id===t().selectedMemoryId)?t().selectedMemoryId:n.memories[0]?.id||``;e({memories:n.memories,memoryTotal:n.total,selectedMemoryId:i})}catch(e){t().showError(`Memory Search Failed`,e.message)}finally{e({memoryLoading:!1})}},async saveMemory(n,r){try{e({selectedMemoryId:(r?await a(`PATCH`,`/memories/`+encodeURIComponent(r),n):await a(`POST`,`/memories`,n)).id}),await Promise.all([t().fetchMemories(),t().fetchMemoryStats()]),t().showNotification(r?`Memory updated`:`Memory created`)}catch(e){t().showError(`Memory Save Failed`,e.message)}},deleteMemory(n){t().openConfirm(`Delete Memory`,`Delete memory "${n}"?`,async()=>{try{await a(`DELETE`,`/memories/`+encodeURIComponent(n)),e({selectedMemoryId:``}),await Promise.all([t().fetchMemories(),t().fetchMemoryStats()]),t().showNotification(`Memory deleted`)}catch(e){t().showError(`Delete Failed`,e.message)}})},async injectMemory(e){try{let n=await a(`POST`,`/memories/inject`,e);return t().showNotification(`Memory inject command sent to ${e.agentId}`),n}catch(e){return t().showError(`Memory Inject Failed`,e.message),null}}}),$=ce()(ue((...e)=>({...tt(...e),...nt(...e),...st(...e),...ft(...e),...pt(...e),...mt(...e),...ht(...e),...gt(...e),...Ze(...e),..._t(...e),...bt(...e),...Qe(...e),...xt(...e),...St(...e),...Ct(...e)}),{name:`agent-relay-dashboard`,partialize:e=>({theme:e.theme,view:e.view,showOffline:e.showOffline,showBuiltIns:e.showBuiltIns,showReasoning:e.showReasoning,autoRefresh:e.autoRefresh,voiceTtsEnabled:e.voiceTtsEnabled,voiceTtsLang:e.voiceTtsLang,voiceTtsMode:e.voiceTtsMode,voiceTtsKokoroVoice:e.voiceTtsKokoroVoice,voiceTtsBrowserVoice:e.voiceTtsBrowserVoice,voiceInputMode:e.voiceInputMode,agentSort:e.agentSort,agentSortDir:e.agentSortDir,agentPresetFilter:e.agentPresetFilter,agentStatusFilter:e.agentStatusFilter,agentTagFilter:e.agentTagFilter,agentHostFilter:e.agentHostFilter,pairStatusFilter:e.pairStatusFilter,inboxSort:e.inboxSort,inboxSortDir:e.inboxSortDir,inboxShowArchived:e.inboxShowArchived,chatAgentProviderFilter:e.chatAgentProviderFilter,chatAgentStatusFilter:e.chatAgentStatusFilter,chatAgentTagFilter:e.chatAgentTagFilter,chatAgentCapFilter:e.chatAgentCapFilter,chatAgentHostFilter:e.chatAgentHostFilter,chatAgentSort:e.chatAgentSort,chatAgentSortDir:e.chatAgentSortDir,chatAgentGroupBy:e.chatAgentGroupBy,chatAgentFiltersCollapsed:e.chatAgentFiltersCollapsed,planCollapsed:e.planCollapsed,activityFilter:e.activityFilter,analyticsPeriod:e.analyticsPeriod,memoryFilters:e.memoryFilters,authToken:e.authToken,inboxReadCursors:e.inboxReadCursors,inboxArchivedThreads:e.inboxArchivedThreads,inboxDrafts:e.inboxDrafts,chatStatusEvents:e.chatStatusEvents,operatorActivity:e.operatorActivity,notifications:e.notifications,notificationUnread:e.notificationUnread,notificationSettings:e.notificationSettings,spawnOrchId:e.spawnOrchId,spawnProvider:e.spawnProvider,spawnModel:e.spawnModel,spawnEffort:e.spawnEffort,spawnProfile:e.spawnProfile,spawnCwd:e.spawnCwd,spawnApproval:e.spawnApproval,spawnWorkspaceMode:e.spawnWorkspaceMode,spawnCwdHistory:e.spawnCwdHistory})}));$.subscribe(et);export{P as a,xe as c,we as d,De as f,V as i,Ee as l,Z as n,Oe as o,N as p,Q as r,ke as s,$ as t,Ce as u};
|
|
9
|
-
//# sourceMappingURL=store-B8xP6z6T.js.map
|