agent-relay-server 0.60.0 → 0.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/docs/openapi.json +516 -1
  2. package/package.json +3 -2
  3. package/public/assets/MessageBubble-CX63ZV4X.js +2 -0
  4. package/public/assets/MessageBubble-CX63ZV4X.js.map +1 -0
  5. package/public/assets/{PlanGraphPanel-CXix1C-H.js → PlanGraphPanel-Dby7wq9c.js} +2 -2
  6. package/public/assets/{PlanGraphPanel-CXix1C-H.js.map → PlanGraphPanel-Dby7wq9c.js.map} +1 -1
  7. package/public/assets/{activity-CRafQ1Je.js → activity-2xPOScu_.js} +2 -2
  8. package/public/assets/{activity-CRafQ1Je.js.map → activity-2xPOScu_.js.map} +1 -1
  9. package/public/assets/{agent-profiles-DW4o5-ND.js → agent-profiles-BfGTTbeY.js} +2 -2
  10. package/public/assets/{agent-profiles-DW4o5-ND.js.map → agent-profiles-BfGTTbeY.js.map} +1 -1
  11. package/public/assets/agents-Bg3WOBRV.js +2 -0
  12. package/public/assets/{agents-Cbegv0Hm.js.map → agents-Bg3WOBRV.js.map} +1 -1
  13. package/public/assets/{analytics-DX6T7JX3.js → analytics-De0cEZGx.js} +3 -3
  14. package/public/assets/{analytics-DX6T7JX3.js.map → analytics-De0cEZGx.js.map} +1 -1
  15. package/public/assets/{automation-CzSBv4gg.js → automation-CHxhzq2t.js} +2 -2
  16. package/public/assets/{automation-CzSBv4gg.js.map → automation-CHxhzq2t.js.map} +1 -1
  17. package/public/assets/{badge-Cy6qO_Jz.js → badge-DhLyCPag.js} +2 -2
  18. package/public/assets/{badge-Cy6qO_Jz.js.map → badge-DhLyCPag.js.map} +1 -1
  19. package/public/assets/branch-state-badge-DSyWKluD.js +2 -0
  20. package/public/assets/{branch-state-badge-CRA50r81.js.map → branch-state-badge-DSyWKluD.js.map} +1 -1
  21. package/public/assets/{button-73wpRw65.js → button-K20wAZG1.js} +2 -2
  22. package/public/assets/{button-73wpRw65.js.map → button-K20wAZG1.js.map} +1 -1
  23. package/public/assets/card-CcZ9hLI7.js +2 -0
  24. package/public/assets/{card-BU6PvVHv.js.map → card-CcZ9hLI7.js.map} +1 -1
  25. package/public/assets/{channels-B1MQCPCT.js → channels-BG0Nib7y.js} +2 -2
  26. package/public/assets/{channels-B1MQCPCT.js.map → channels-BG0Nib7y.js.map} +1 -1
  27. package/public/assets/chat-CjP_crSl.js +2 -0
  28. package/public/assets/{chat-BqIaFYGJ.js.map → chat-CjP_crSl.js.map} +1 -1
  29. package/public/assets/{connectors-C9aFJIrh.js → connectors-DWh7MwV_.js} +2 -2
  30. package/public/assets/{connectors-C9aFJIrh.js.map → connectors-DWh7MwV_.js.map} +1 -1
  31. package/public/assets/{copy-button-HRopUwui.js → copy-button-eF3cKp4Q.js} +2 -2
  32. package/public/assets/{copy-button-HRopUwui.js.map → copy-button-eF3cKp4Q.js.map} +1 -1
  33. package/public/assets/display-DzNvOu1j.js +3 -0
  34. package/public/assets/{display-CketawEF.js.map → display-DzNvOu1j.js.map} +1 -1
  35. package/public/assets/{dist-Kkpnjx_M.js → dist-1dhfdhm9.js} +2 -2
  36. package/public/assets/{dist-Kkpnjx_M.js.map → dist-1dhfdhm9.js.map} +1 -1
  37. package/public/assets/dist-BLBF7qqr.js +2 -0
  38. package/public/assets/{dist-De2oguBm.js.map → dist-BLBF7qqr.js.map} +1 -1
  39. package/public/assets/{dist-T7u7IZGJ.js → dist-BrQsqBbc.js} +2 -2
  40. package/public/assets/{dist-T7u7IZGJ.js.map → dist-BrQsqBbc.js.map} +1 -1
  41. package/public/assets/{dist-Cko2KPW8.js → dist-COQuunEv.js} +2 -2
  42. package/public/assets/{dist-Cko2KPW8.js.map → dist-COQuunEv.js.map} +1 -1
  43. package/public/assets/{dist-CLHMeXYi.js → dist-Ci5Y37nj.js} +2 -2
  44. package/public/assets/{dist-CLHMeXYi.js.map → dist-Ci5Y37nj.js.map} +1 -1
  45. package/public/assets/{dist-Ci1MM51P.js → dist-CoROafNg.js} +2 -2
  46. package/public/assets/{dist-Ci1MM51P.js.map → dist-CoROafNg.js.map} +1 -1
  47. package/public/assets/{dist-CC5f7oYw.js → dist-I-MFUv51.js} +2 -2
  48. package/public/assets/{dist-CC5f7oYw.js.map → dist-I-MFUv51.js.map} +1 -1
  49. package/public/assets/{dist-DFLciw0h.js → dist-UQGKwqZH.js} +2 -2
  50. package/public/assets/{dist-DFLciw0h.js.map → dist-UQGKwqZH.js.map} +1 -1
  51. package/public/assets/dist-YpHfnnIA.js +2 -0
  52. package/public/assets/{dist-DUoZnlB2.js.map → dist-YpHfnnIA.js.map} +1 -1
  53. package/public/assets/dist-qd198ib9.js +2 -0
  54. package/public/assets/{dist-D41tzJYg.js.map → dist-qd198ib9.js.map} +1 -1
  55. package/public/assets/{dist-DmN94rc8.js → dist-yGOq6sB3.js} +2 -2
  56. package/public/assets/{dist-DmN94rc8.js.map → dist-yGOq6sB3.js.map} +1 -1
  57. package/public/assets/{es2015-Df08Opjx.js → es2015-CRxz9lOj.js} +2 -2
  58. package/public/assets/{es2015-Df08Opjx.js.map → es2015-CRxz9lOj.js.map} +1 -1
  59. package/public/assets/{formatted-body-impl-DOXH7oDF.js → formatted-body-impl-u0W_hWYA.js} +2 -2
  60. package/public/assets/{formatted-body-impl-DOXH7oDF.js.map → formatted-body-impl-u0W_hWYA.js.map} +1 -1
  61. package/public/assets/index-BwfVOzUG.js +21 -0
  62. package/public/assets/{index-br_Y6Cvt.js.map → index-BwfVOzUG.js.map} +1 -1
  63. package/public/assets/index-Dn_GDXbi.css +2 -0
  64. package/public/assets/{input-B2EDz-BE.js → input-BHYNpXAG.js} +2 -2
  65. package/public/assets/{input-B2EDz-BE.js.map → input-BHYNpXAG.js.map} +1 -1
  66. package/public/assets/{insights-B1edq5lk.js → insights-CAF9Hi5D.js} +2 -2
  67. package/public/assets/{insights-B1edq5lk.js.map → insights-CAF9Hi5D.js.map} +1 -1
  68. package/public/assets/{integrations-Cm4fjp7_.js → integrations-CG9qyHUf.js} +2 -2
  69. package/public/assets/{integrations-Cm4fjp7_.js.map → integrations-CG9qyHUf.js.map} +1 -1
  70. package/public/assets/{lib-BZrjIp-o.js → lib-Df4aph5u.js} +2 -2
  71. package/public/assets/{lib-BZrjIp-o.js.map → lib-Df4aph5u.js.map} +1 -1
  72. package/public/assets/lucide-react-L2UxFDic.js +9 -0
  73. package/public/assets/lucide-react-L2UxFDic.js.map +1 -0
  74. package/public/assets/{maintenance-D6zvw0fU.js → maintenance-DgHA35ve.js} +2 -2
  75. package/public/assets/{maintenance-D6zvw0fU.js.map → maintenance-DgHA35ve.js.map} +1 -1
  76. package/public/assets/{managed-agents-CzfEznM1.js → managed-agents-Rk6ghKR9.js} +2 -2
  77. package/public/assets/{managed-agents-CzfEznM1.js.map → managed-agents-Rk6ghKR9.js.map} +1 -1
  78. package/public/assets/{markdown-preview-impl-DZlCaTHQ.js → markdown-preview-impl-NWMtJdYz.js} +2 -2
  79. package/public/assets/{markdown-preview-impl-DZlCaTHQ.js.map → markdown-preview-impl-NWMtJdYz.js.map} +1 -1
  80. package/public/assets/memory-DamwWa9A.js +2 -0
  81. package/public/assets/{memory-CUUAzJDc.js.map → memory-DamwWa9A.js.map} +1 -1
  82. package/public/assets/{messages-6QZH46LG.js → messages--NU-YIL6.js} +2 -2
  83. package/public/assets/{messages-6QZH46LG.js.map → messages--NU-YIL6.js.map} +1 -1
  84. package/public/assets/{orchestrators-CrcqkPuc.js → orchestrators-DQnIn6qx.js} +2 -2
  85. package/public/assets/{orchestrators-CrcqkPuc.js.map → orchestrators-DQnIn6qx.js.map} +1 -1
  86. package/public/assets/{overview-418xXZO_.js → overview-DCmNgXDf.js} +2 -2
  87. package/public/assets/{overview-418xXZO_.js.map → overview-DCmNgXDf.js.map} +1 -1
  88. package/public/assets/{pairs-CnedATgT.js → pairs-DNELeC9P.js} +2 -2
  89. package/public/assets/{pairs-CnedATgT.js.map → pairs-DNELeC9P.js.map} +1 -1
  90. package/public/assets/{react-dom-WI6TjVe7.js → react-dom-CrP_AtcL.js} +2 -2
  91. package/public/assets/{react-dom-WI6TjVe7.js.map → react-dom-CrP_AtcL.js.map} +1 -1
  92. package/public/assets/{security-DS13pbag.js → security-Dd3Kh0oC.js} +2 -2
  93. package/public/assets/{security-DS13pbag.js.map → security-Dd3Kh0oC.js.map} +1 -1
  94. package/public/assets/{select-BOprGZDS.js → select-DQbeJZX0.js} +2 -2
  95. package/public/assets/{select-BOprGZDS.js.map → select-DQbeJZX0.js.map} +1 -1
  96. package/public/assets/settings-BMAJrBIH.js +4 -0
  97. package/public/assets/settings-BMAJrBIH.js.map +1 -0
  98. package/public/assets/store-B8xP6z6T.js +9 -0
  99. package/public/assets/store-B8xP6z6T.js.map +1 -0
  100. package/public/assets/tasks-BYR4L9GP.js +2 -0
  101. package/public/assets/{tasks-B-4oCPuv.js.map → tasks-BYR4L9GP.js.map} +1 -1
  102. package/public/assets/teams-CoTifrq_.js +2 -0
  103. package/public/assets/{teams-sCQAs_QA.js.map → teams-CoTifrq_.js.map} +1 -1
  104. package/public/assets/{terminal-viewer-impl-BhqS2XpS.js → terminal-viewer-impl-B1YzfpE6.js} +3 -3
  105. package/public/assets/{terminal-viewer-impl-BhqS2XpS.js.map → terminal-viewer-impl-B1YzfpE6.js.map} +1 -1
  106. package/public/assets/{use-keyboard-viewport-fOL_3RHB.js → use-keyboard-viewport-DrRH_QzG.js} +2 -2
  107. package/public/assets/{use-keyboard-viewport-fOL_3RHB.js.map → use-keyboard-viewport-DrRH_QzG.js.map} +1 -1
  108. package/public/assets/{work-queue-BDhjlwUH.js → work-queue-x57vlgyZ.js} +2 -2
  109. package/public/assets/{work-queue-BDhjlwUH.js.map → work-queue-x57vlgyZ.js.map} +1 -1
  110. package/public/assets/{workspaces-6I-C69nf.js → workspaces-CYm5bLg9.js} +3 -3
  111. package/public/assets/{workspaces-6I-C69nf.js.map → workspaces-CYm5bLg9.js.map} +1 -1
  112. package/public/index.html +22 -22
  113. package/runner/src/config.ts +66 -2
  114. package/src/automations.ts +3 -4
  115. package/src/cli/index.ts +11 -0
  116. package/src/cli/merges.ts +89 -0
  117. package/src/config-store.ts +5 -6
  118. package/src/config.ts +4 -0
  119. package/src/connectors.ts +5 -0
  120. package/src/db/merge-lease.ts +95 -1
  121. package/src/db/migrations.ts +21 -0
  122. package/src/db/schema.ts +1 -1
  123. package/src/index.ts +5 -2
  124. package/src/maintenance.ts +8 -8
  125. package/src/mcp-merge-tools.ts +66 -0
  126. package/src/mcp-provider-catalog.ts +9 -0
  127. package/src/mcp.ts +7 -8
  128. package/src/merge-pause-maintenance.ts +13 -0
  129. package/src/provider-catalog-store.ts +33 -4
  130. package/src/provider-config-store.ts +216 -0
  131. package/src/recipe-runner.ts +2 -1
  132. package/src/recipe-validator.ts +4 -3
  133. package/src/routes/agent-sessions.ts +4 -2
  134. package/src/routes/agents-spawn.ts +2 -2
  135. package/src/routes/commands.ts +20 -0
  136. package/src/routes/index.ts +19 -2
  137. package/src/routes/insights.ts +4 -3
  138. package/src/routes/merges.ts +95 -0
  139. package/src/routes/provider-config.ts +89 -41
  140. package/src/routes/settings.ts +127 -0
  141. package/src/routes/steward.ts +5 -5
  142. package/src/routes/tokens.ts +32 -1
  143. package/src/security.ts +36 -37
  144. package/src/services/merge-pause.ts +37 -0
  145. package/src/services/spawn-agent.ts +10 -8
  146. package/src/settings/modules.ts +149 -0
  147. package/src/settings/registry.ts +397 -0
  148. package/src/spawn-command.ts +5 -1
  149. package/src/team-template-config.ts +2 -2
  150. package/src/token-db.ts +20 -0
  151. package/src/workspace-pr-completion.ts +70 -0
  152. package/public/assets/MessageBubble-BrEKymoV.js +0 -2
  153. package/public/assets/MessageBubble-BrEKymoV.js.map +0 -1
  154. package/public/assets/agents-Cbegv0Hm.js +0 -2
  155. package/public/assets/branch-state-badge-CRA50r81.js +0 -2
  156. package/public/assets/card-BU6PvVHv.js +0 -2
  157. package/public/assets/chat-BqIaFYGJ.js +0 -2
  158. package/public/assets/display-CketawEF.js +0 -3
  159. package/public/assets/dist-D41tzJYg.js +0 -2
  160. package/public/assets/dist-DUoZnlB2.js +0 -2
  161. package/public/assets/dist-De2oguBm.js +0 -2
  162. package/public/assets/index-DaNOQJci.css +0 -2
  163. package/public/assets/index-br_Y6Cvt.js +0 -21
  164. package/public/assets/lucide-react-H_-8G79A.js +0 -9
  165. package/public/assets/lucide-react-H_-8G79A.js.map +0 -1
  166. package/public/assets/memory-CUUAzJDc.js +0 -2
  167. package/public/assets/settings-BgInn_f3.js +0 -10
  168. package/public/assets/settings-BgInn_f3.js.map +0 -1
  169. package/public/assets/store-DHO_a8BD.js +0 -9
  170. package/public/assets/store-DHO_a8BD.js.map +0 -1
  171. package/public/assets/tasks-B-4oCPuv.js +0 -2
  172. package/public/assets/teams-sCQAs_QA.js +0 -2
@@ -1,2 +0,0 @@
1
- import{r as e}from"./chunk-CilyBKbf.js";import{Fn as t,Rt as n,Zt as r,nn as i,qn as a}from"./lucide-react-H_-8G79A.js";import{o,t as s}from"./store-DHO_a8BD.js";import{$ as c,U as l,d as u,h as d,lt as f}from"./display-CketawEF.js";import{t as p}from"./badge-Cy6qO_Jz.js";import{t as m}from"./button-73wpRw65.js";import{s as h}from"./index-br_Y6Cvt.js";import{n as g,r as _,t as v}from"./card-BU6PvVHv.js";var y=e(a(),1),b=t(),x={open:`bg-blue-500/10 text-blue-400 border-blue-500/20`,blocked:`bg-yellow-500/10 text-yellow-400 border-yellow-500/20`,claimed:`bg-emerald-500/10 text-emerald-400 border-emerald-500/20`,in_progress:`bg-purple-500/10 text-purple-400 border-purple-500/20`,done:`bg-zinc-500/10 text-zinc-400 border-zinc-500/20`,failed:`bg-red-500/10 text-red-400 border-red-500/20`,canceled:`bg-zinc-500/10 text-zinc-400 border-zinc-500/20`},S=[`open`,`claimed`,`in_progress`,`blocked`,`done`,`failed`,`canceled`];function C(){let e=o(),t=s(e=>e.tasks),n=s(e=>e.agentsById),i=s(e=>e.taskStatusFilter),a=s(e=>e.taskSourceFilter),l=s(e=>e.set),d=s(e=>e.fetchTasks),f=s(e=>e.doClaimTask),m=s(e=>e.doUpdateTaskStatus),g=s(e=>e.openTaskEvents),_=t.filter(e=>!c.has(e.status)&&!e.claimedBy).length,v=(0,y.useMemo)(()=>[...new Set(t.map(e=>e.source).filter(Boolean))],[t]);function x(e){l(e),setTimeout(()=>d(),0)}function C(e){return n[e]?u(n[e]):e.slice(-10)}return(0,b.jsxs)(`div`,{className:`space-y-4`,children:[(0,b.jsxs)(`div`,{className:`flex items-center justify-between flex-wrap gap-2`,children:[(0,b.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,b.jsx)(r,{className:`w-5 h-5 text-muted-foreground`}),(0,b.jsx)(`h2`,{className:`text-lg font-semibold`,children:`Tasks`}),(0,b.jsx)(p,{variant:`secondary`,children:t.length}),_>0&&(0,b.jsxs)(p,{className:`bg-orange-500/20 text-orange-400 border-orange-500/30 border`,children:[_,` claimable`]})]}),(0,b.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,b.jsxs)(`select`,{className:`rounded-md border border-input bg-background px-3 py-1.5 text-sm`,value:i,onChange:e=>x({taskStatusFilter:e.target.value}),children:[(0,b.jsx)(`option`,{value:``,children:`All statuses`}),S.map(e=>(0,b.jsx)(`option`,{value:e,children:e},e))]}),(0,b.jsxs)(`select`,{className:`rounded-md border border-input bg-background px-3 py-1.5 text-sm`,value:a,onChange:e=>x({taskSourceFilter:e.target.value}),children:[(0,b.jsx)(`option`,{value:``,children:`All sources`}),v.map(e=>(0,b.jsx)(`option`,{value:e,children:e},e))]})]})]}),(0,b.jsx)(h,{className:`h-[calc(100dvh-11rem)]`,children:(0,b.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-3 pr-2`,children:[t.length===0&&(0,b.jsx)(`div`,{className:`col-span-full text-center text-muted-foreground py-16 text-sm`,children:`No tasks`}),t.map(t=>(0,b.jsx)(w,{task:t,now:e,agentName:C,onClaim:()=>f(t.id),onEvents:()=>g(t),onStatusChange:e=>m(t,e)},t.id))]})})]})}function w({task:e,now:t,agentName:r,onClaim:a,onEvents:o,onStatusChange:s}){let u=f[e.severity]||f.info,h=x[e.status]||`bg-zinc-500/10 text-zinc-400 border-zinc-500/20`,y=c.has(e.status),S=!y&&!e.claimedBy;return(0,b.jsxs)(v,{className:`flex flex-col ${S?`ring-1 ring-orange-500/20`:``} ${y?`opacity-60`:``}`,children:[(0,b.jsxs)(_,{className:`py-3 px-4 pb-0 space-y-0`,children:[(0,b.jsxs)(`div`,{className:`flex items-start gap-2 justify-between`,children:[(0,b.jsxs)(`div`,{className:`flex gap-1.5 flex-wrap`,children:[(0,b.jsx)(p,{variant:`outline`,className:`text-xs px-1.5 py-0 border ${u}`,children:e.severity}),(0,b.jsx)(p,{variant:`outline`,className:`text-xs px-1.5 py-0 border ${h}`,children:e.status})]}),(0,b.jsxs)(`span`,{className:`text-xs text-muted-foreground shrink-0`,title:d(e.createdAt),children:[`#`,e.id]})]}),(0,b.jsx)(`p`,{className:`font-medium text-sm mt-2 line-clamp-2`,children:e.title})]}),(0,b.jsxs)(g,{className:`px-4 py-3 flex-1 flex flex-col justify-between gap-3`,children:[(0,b.jsxs)(`div`,{children:[e.body&&(0,b.jsx)(`p`,{className:`text-xs text-muted-foreground line-clamp-3 mb-2`,children:e.body}),(0,b.jsxs)(`div`,{className:`flex flex-col gap-0.5 text-xs text-muted-foreground`,children:[(0,b.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,b.jsx)(`span`,{className:`text-muted-foreground/60`,children:`source`}),(0,b.jsx)(`span`,{className:`font-mono truncate`,children:e.source})]}),(0,b.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,b.jsx)(`span`,{className:`text-muted-foreground/60`,children:`target`}),(0,b.jsx)(`span`,{className:`font-mono truncate`,children:e.target})]}),e.claimedBy&&(0,b.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,b.jsx)(i,{className:`w-3 h-3 text-emerald-400`}),(0,b.jsx)(`span`,{className:`text-emerald-400`,children:r(e.claimedBy)})]}),(0,b.jsxs)(`div`,{className:`flex items-center gap-1 mt-0.5`,title:d(e.updatedAt),children:[(0,b.jsx)(`span`,{className:`text-muted-foreground/60`,children:`updated`}),(0,b.jsx)(`span`,{children:l(t,e.updatedAt)})]})]})]}),(0,b.jsxs)(`div`,{className:`flex items-center gap-1.5 flex-wrap`,children:[S&&(0,b.jsxs)(m,{size:`sm`,className:`h-7 text-xs bg-orange-600 hover:bg-orange-700 text-white`,onClick:a,children:[(0,b.jsx)(i,{className:`w-3.5 h-3.5 mr-1`}),` Claim`]}),(0,b.jsx)(m,{size:`sm`,variant:`outline`,className:`h-7 text-xs`,onClick:o,children:`Events`}),!y&&(0,b.jsx)(`select`,{className:`rounded-md border border-input bg-background px-2 py-1 text-xs h-7`,value:e.status,onChange:e=>s(e.target.value),onClick:e=>e.stopPropagation(),children:[`open`,`claimed`,`in_progress`,`blocked`,`done`,`failed`,`canceled`].map(e=>(0,b.jsx)(`option`,{value:e,children:e},e))}),e.externalUrl&&(0,b.jsx)(`a`,{href:e.externalUrl,target:`_blank`,rel:`noopener noreferrer`,className:`ml-auto`,children:(0,b.jsx)(m,{size:`sm`,variant:`ghost`,className:`h-7 px-2`,children:(0,b.jsx)(n,{className:`w-3.5 h-3.5`})})})]})]})]})}export{C as TasksView};
2
- //# sourceMappingURL=tasks-B-4oCPuv.js.map
@@ -1,2 +0,0 @@
1
- import{r as e}from"./chunk-CilyBKbf.js";import{Fn as t,In as n,N as r,Nn as i,Y as a,dn as o,l as s,m as c,qn as l}from"./lucide-react-H_-8G79A.js";import{r as ee,t as u}from"./store-DHO_a8BD.js";import{H as te,U as d,Y as f,d as p,h as m}from"./display-CketawEF.js";import{a as ne,i as re,n as ie,r as ae,t as oe}from"./select-BOprGZDS.js";import{t as h}from"./badge-Cy6qO_Jz.js";import{t as g}from"./button-73wpRw65.js";import{t as se}from"./input-B2EDz-BE.js";import{s as _}from"./index-br_Y6Cvt.js";import{i as v,n as y,r as b,t as x}from"./card-BU6PvVHv.js";import{t as ce}from"./PlanGraphPanel-CXix1C-H.js";var S=e(l(),1),C=t();function w(e){if(e==null)return`-`;let t=Math.round(e/1e3);if(t<60)return`${t}s`;let n=Math.round(t/60);if(n<60)return`${n}m`;let r=Math.round(n/60);return r<48?`${r}h`:`${Math.round(r/24)}d`}function T(e){return`${Math.round(e*100)}%`}function E(e){return e===`success`?`bg-emerald-500/10 text-emerald-400 border-emerald-500/20`:e===`partial`?`bg-yellow-500/10 text-yellow-400 border-yellow-500/20`:e===`failed`?`bg-red-500/10 text-red-400 border-red-500/20`:`bg-zinc-500/10 text-zinc-400 border-zinc-500/20`}function le({data:e,loading:t,error:n}){let r=e?.totals.byOutcomeStatus,i=e?.compositionShapes.slice(0,6)??[],a=e?.recent.slice(0,8)??[];return(0,C.jsxs)(x,{children:[(0,C.jsx)(b,{children:(0,C.jsxs)(v,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,C.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,C.jsx)(o,{className:`size-4 text-primary`}),` Outcomes`]}),(0,C.jsxs)(h,{variant:`secondary`,children:[e?.totals.total??0,` dissolved`]})]})}),(0,C.jsxs)(y,{className:`space-y-5`,children:[n?(0,C.jsx)(`div`,{className:`rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2 text-sm text-destructive`,children:n}):null,t&&!e?(0,C.jsx)(`div`,{className:`py-8 text-center text-sm text-muted-foreground`,children:`Loading outcomes…`}):!e||e.totals.total===0?(0,C.jsx)(`div`,{className:`py-8 text-center text-sm text-muted-foreground`,children:`No dissolved teams yet`}):(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`div`,{className:`flex flex-wrap gap-2 text-xs`,children:[`success`,`partial`,`failed`,`unknown`].map(e=>{let t=r?.[e]??0;return(0,C.jsxs)(h,{variant:`outline`,className:t===0?`text-muted-foreground`:E(e===`unknown`?null:e),children:[t,` `,e]},e)})}),(0,C.jsxs)(`section`,{className:`space-y-2`,children:[(0,C.jsx)(`div`,{className:`text-sm font-medium`,children:`Composition win-rate`}),(0,C.jsx)(`div`,{className:`divide-y divide-border rounded-md border border-border`,children:i.map(e=>(0,C.jsxs)(`div`,{className:`grid gap-2 px-3 py-2 text-sm md:grid-cols-[1fr_auto_auto] md:items-center`,children:[(0,C.jsxs)(`div`,{className:`min-w-0`,children:[(0,C.jsx)(`div`,{className:`break-words font-medium`,title:e.shape,children:e.shape}),(0,C.jsxs)(`div`,{className:`text-xs text-muted-foreground`,children:[e.count,` team`,e.count===1?``:`s`,` · avg `,w(e.avgWallClockMs)]})]}),(0,C.jsxs)(`span`,{className:`text-muted-foreground`,children:[e.successCount,`/`,e.count]}),(0,C.jsx)(h,{variant:`outline`,className:E(e.successRate>=.5?`success`:e.successRate>0?`partial`:`failed`),children:T(e.successRate)})]},e.shape))})]}),(0,C.jsxs)(`section`,{className:`space-y-2`,children:[(0,C.jsx)(`div`,{className:`text-sm font-medium`,children:`Recent outcomes`}),(0,C.jsx)(`div`,{className:`overflow-hidden rounded-md border border-border`,children:(0,C.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,C.jsx)(`thead`,{className:`bg-muted/40 text-xs text-muted-foreground`,children:(0,C.jsxs)(`tr`,{children:[(0,C.jsx)(`th`,{className:`px-3 py-2 text-left font-medium`,children:`Team`}),(0,C.jsx)(`th`,{className:`px-3 py-2 text-left font-medium`,children:`Outcome`}),(0,C.jsx)(`th`,{className:`px-3 py-2 text-right font-medium`,children:`Members`}),(0,C.jsx)(`th`,{className:`px-3 py-2 text-right font-medium`,children:`Duration`})]})}),(0,C.jsx)(`tbody`,{className:`divide-y divide-border`,children:a.map(e=>(0,C.jsxs)(`tr`,{children:[(0,C.jsxs)(`td`,{className:`max-w-[220px] px-3 py-2`,children:[(0,C.jsx)(`div`,{className:`truncate font-medium`,children:e.title||e.id.slice(0,12)}),(0,C.jsx)(`div`,{className:`truncate text-xs text-muted-foreground`,children:e.id})]}),(0,C.jsx)(`td`,{className:`px-3 py-2`,children:(0,C.jsx)(h,{variant:`outline`,className:E(e.outcome),children:e.outcome??`unknown`})}),(0,C.jsx)(`td`,{className:`px-3 py-2 text-right`,children:e.memberCount}),(0,C.jsx)(`td`,{className:`px-3 py-2 text-right text-muted-foreground`,children:w(e.durationMs)})]},e.id))})]})})]})]})]})]})}var ue=[{value:`all`,label:`All kinds`},{value:`decision`,label:`Decisions`},{value:`fact`,label:`Facts`},{value:`ruled_out`,label:`Ruled out`}],de={decision:`decision`,fact:`fact`,ruled_out:`ruled out`};function D(e){return e.status===`dissolved`?`dissolved`:e.zeroMembersSince==null?`active`:`orphaned`}var fe={active:`bg-emerald-500/10 text-emerald-400 border-emerald-500/20`,orphaned:`bg-amber-500/10 text-amber-400 border-amber-500/20`,dissolved:`bg-zinc-500/10 text-zinc-400 border-zinc-500/20`},O={success:`bg-emerald-500/10 text-emerald-400 border-emerald-500/20`,partial:`bg-yellow-500/10 text-yellow-400 border-yellow-500/20`,failed:`bg-red-500/10 text-red-400 border-red-500/20`},k={active:`bg-emerald-500/10 text-emerald-400 border-emerald-500/20`,superseded:`bg-yellow-500/10 text-yellow-400 border-yellow-500/20`,retracted:`bg-red-500/10 text-red-400 border-red-500/20`};function A(e){return e?e.slice(0,12):`-`}function pe(e){if(e===void 0)return`-`;let t=Math.round(e/1e3);if(t<60)return`${t}s`;let n=Math.round(t/60);if(n<60)return`${n}m`;let r=Math.round(n/60);return r<48?`${r}h`:`${Math.round(r/24)}d`}function me(e){if(!e.composition)return null;try{let t=JSON.parse(e.composition);return Array.isArray(t)?t.length:null}catch{return null}}function he(e,t){let n=t.trim().toLowerCase();return n?[e.title,e.id,e.coordinatorId,e.rootCoordinatorId,e.outcomeStatus,e.outcomeSummary].some(e=>String(e??``).toLowerCase().includes(n)):!0}function ge(e){return e.status===`offline`?`bg-zinc-500/10 text-zinc-400 border-zinc-500/20`:e.status===`busy`?`bg-yellow-500/10 text-yellow-400 border-yellow-500/20`:e.status===`stale`?`bg-red-500/10 text-red-400 border-red-500/20`:`bg-emerald-500/10 text-emerald-400 border-emerald-500/20`}function j(){let[e,t]=(0,S.useState)(null),[o,l]=(0,S.useState)([]),[w,T]=(0,S.useState)(null),[E,j]=(0,S.useState)(`all`),[M,N]=(0,S.useState)(``),[P,F]=(0,S.useState)(!1),[I,L]=(0,S.useState)(!1),[R,z]=(0,S.useState)(null),[B,_e]=(0,S.useState)(()=>Date.now()),V=u(e=>e.teams),H=u(e=>e.teamsLoading),U=u(e=>e.teamsError),ve=u(e=>e.fetchTeams),ye=u(e=>e.teamOutcomeAggregates),be=u(e=>e.teamOutcomeAggregatesLoading),xe=u(e=>e.teamOutcomeAggregatesError),Se=u(e=>e.fetchTeamOutcomeAggregates),W=u(e=>e.fetchPlan),Ce=u(e=>e.dissolveTeam),we=u(e=>e.openConfirm),G=u(e=>e.agentsById),Te=u(e=>e.switchView),K=u(e=>e.openInboxThread),Ee=u(t=>{let n=e??t.teams[0]?.id;return n?t.plansByTeam[ee(n)]??null:null}),De=e=>{let t=G[e];return t?p(t):e.slice(-8)};async function q(e,t=E){L(!0),z(null);try{let r=new URLSearchParams({team:e});t!==`all`&&r.set(`kind`,t),l((await n(`GET`,`/blackboard?${r.toString()}`)).entries),T(e)}catch(t){z(f(t)),l([]),T(e)}finally{L(!1)}}async function J(){F(!0),z(null);try{let[t]=await Promise.all([ve(),Se()]);_e(Date.now());let n=e??t[0]?.id;n?(W({teamId:n}),await q(n,E)):(l([]),T(null))}catch(e){z(f(e))}finally{F(!1)}}(0,S.useEffect)(()=>{J()},[]),(0,S.useEffect)(()=>{w&&q(w,E)},[E]);let Y=(0,S.useMemo)(()=>V.filter(e=>he(e,M)),[V,M]),X=e??V[0]?.id??null,Z=V.find(e=>e.id===X)??null,Q=w===X?o:[],$=(0,S.useMemo)(()=>X?Object.values(G).filter(e=>e.teamId===X).sort((e,t)=>p(e).localeCompare(p(t))||e.id.localeCompare(t.id)):[],[G,X]),Oe=(0,S.useMemo)(()=>{let e={decision:[],fact:[],ruled_out:[]};for(let t of Q)e[t.kind].push(t);return e},[Q]),ke=E===`all`?[`decision`,`fact`,`ruled_out`]:[E];return(0,C.jsxs)(`div`,{className:`space-y-4 p-4`,children:[(0,C.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,C.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,C.jsx)(s,{className:`size-5 text-primary`}),(0,C.jsx)(`h1`,{className:`text-lg font-semibold`,children:`Teams`}),(0,C.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`active and dissolved team working sets`})]}),(0,C.jsxs)(g,{variant:`outline`,size:`sm`,onClick:()=>void J(),disabled:P||H,children:[(0,C.jsx)(r,{className:i(`size-4`,(P||H)&&`animate-spin`)}),` Refresh`]})]}),(R||U)&&(0,C.jsx)(`div`,{className:`rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2 text-sm text-destructive`,children:R||U}),(0,C.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[minmax(320px,420px)_1fr]`,children:[(0,C.jsxs)(`div`,{className:`min-h-[520px] min-w-0 space-y-3`,children:[(0,C.jsxs)(`div`,{className:`space-y-3`,children:[(0,C.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,C.jsx)(`span`,{children:`Team list`}),(0,C.jsx)(h,{variant:`secondary`,children:V.length})]}),(0,C.jsx)(se,{value:M,onChange:e=>N(e.target.value),placeholder:`Filter teams`,className:`h-8`})]}),(0,C.jsx)(`div`,{children:(P||H)&&V.length===0?(0,C.jsx)(`div`,{className:`py-16 text-center text-sm text-muted-foreground`,children:`Loading teams…`}):Y.length===0?(0,C.jsx)(`div`,{className:`py-16 text-center text-sm text-muted-foreground`,children:V.length===0?`No teams`:`No teams match`}):(0,C.jsx)(_,{className:`h-[610px] pr-3`,children:(0,C.jsx)(`div`,{className:`space-y-2`,children:Y.map(e=>{let n=e.id===X,r=me(e),o=D(e),s=e.coordinatorId,c=()=>{t(e.id),W({teamId:e.id}),q(e.id,E)};return(0,C.jsx)(`div`,{role:`button`,tabIndex:0,onClick:c,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),c())},className:`block w-full cursor-pointer text-left`,children:(0,C.jsx)(x,{className:i(`transition-colors hover:border-primary/50`,n&&`border-primary/60 bg-primary/5`),children:(0,C.jsxs)(y,{className:`space-y-3 p-3`,children:[(0,C.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,C.jsxs)(`div`,{className:`min-w-0`,children:[(0,C.jsx)(`div`,{className:`truncate text-sm font-medium`,children:e.title||A(e.id)}),(0,C.jsx)(`div`,{className:`truncate text-xs text-muted-foreground`,children:e.id})]}),(0,C.jsx)(h,{variant:`outline`,className:fe[o],children:o})]}),(0,C.jsxs)(`div`,{className:`grid grid-cols-2 gap-x-3 gap-y-1 text-xs text-muted-foreground`,children:[(0,C.jsx)(`span`,{children:`Coordinator`}),s?(0,C.jsxs)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),K(s),Te(`chat`)},className:`flex min-w-0 items-center justify-end gap-1 text-right text-primary hover:underline`,title:`Chat with ${s}`,children:[(0,C.jsx)(a,{className:`size-3 shrink-0`}),(0,C.jsx)(`span`,{className:`truncate`,children:De(s)})]}):(0,C.jsx)(`span`,{className:`text-right text-muted-foreground`,children:`—`}),(0,C.jsx)(`span`,{children:`Members`}),(0,C.jsx)(`span`,{className:`text-right text-foreground`,children:r??`-`}),(0,C.jsx)(`span`,{children:`Created`}),(0,C.jsx)(`span`,{className:`text-right text-foreground`,title:m(e.createdAt),children:d(B,e.createdAt)}),e.dissolvedAt?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`span`,{children:`Dissolved`}),(0,C.jsx)(`span`,{className:`text-right text-foreground`,title:m(e.dissolvedAt),children:d(B,e.dissolvedAt)})]}):null]}),o===`orphaned`&&e.zeroMembersSince!=null?(0,C.jsx)(`div`,{className:`flex items-center gap-1.5 border-t border-border pt-2 text-xs text-amber-400`,title:m(e.zeroMembersSince),children:(0,C.jsxs)(`span`,{children:[`No live members since `,d(B,e.zeroMembersSince),` — auto-dissolving`]})}):null,e.status===`dissolved`?(0,C.jsxs)(`div`,{className:`space-y-1 border-t border-border pt-2`,children:[(0,C.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[e.outcomeStatus?(0,C.jsx)(h,{variant:`outline`,className:O[e.outcomeStatus],children:e.outcomeStatus}):(0,C.jsx)(h,{variant:`outline`,children:`no outcome`}),(0,C.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:pe(e.wallClockMs)})]}),e.outcomeSummary?(0,C.jsx)(`p`,{className:`line-clamp-2 text-xs text-muted-foreground`,children:e.outcomeSummary}):null]}):null]})})},e.id)})})})})]}),(0,C.jsxs)(`div`,{className:`min-h-[520px] min-w-0 space-y-4`,children:[(0,C.jsx)(le,{data:ye,loading:be,error:xe}),Z&&Ee?(0,C.jsx)(x,{className:`p-0`,children:(0,C.jsx)(ce,{teamId:Z.id})}):null,(0,C.jsxs)(x,{children:[(0,C.jsx)(b,{children:(0,C.jsxs)(v,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,C.jsxs)(`div`,{className:`min-w-0`,children:[(0,C.jsx)(`span`,{children:`Roster`}),(0,C.jsxs)(`span`,{className:`ml-2 text-xs font-normal text-muted-foreground`,children:[$.length,` member`,$.length===1?``:`s`]})]}),Z&&Z.status!==`dissolved`?(0,C.jsxs)(g,{variant:`destructive`,size:`sm`,onClick:()=>we(`Dissolve Team`,`Dissolve "${Z.title||Z.id}"? This closes the team working set but keeps its records visible.`,()=>void Ce(Z.id)),children:[(0,C.jsx)(c,{className:`size-4`}),` Dissolve`]}):null]})}),(0,C.jsx)(y,{children:Z?$.length===0?(0,C.jsx)(`div`,{className:`py-8 text-center text-sm text-muted-foreground`,children:`No members`}):(0,C.jsx)(`div`,{className:`grid gap-2 md:grid-cols-2`,children:$.map(e=>(0,C.jsxs)(`div`,{className:`flex min-w-0 items-center justify-between gap-3 rounded-md border border-border bg-background px-3 py-2`,children:[(0,C.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,C.jsx)(`span`,{className:i(`h-2 w-2 shrink-0 rounded-full`,te(e,B))}),(0,C.jsxs)(`div`,{className:`min-w-0`,children:[(0,C.jsx)(`div`,{className:`truncate text-sm font-medium`,children:p(e)}),(0,C.jsx)(`div`,{className:`truncate text-xs text-muted-foreground`,children:e.id})]})]}),(0,C.jsx)(h,{variant:`outline`,className:ge(e),children:e.status})]},e.id))}):(0,C.jsx)(`div`,{className:`py-8 text-center text-sm text-muted-foreground`,children:`No team selected`})})]}),(0,C.jsxs)(x,{children:[(0,C.jsx)(b,{children:(0,C.jsxs)(v,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,C.jsxs)(`div`,{className:`min-w-0`,children:[(0,C.jsx)(`span`,{children:`Blackboard`}),Z?(0,C.jsx)(`span`,{className:`ml-2 text-xs font-normal text-muted-foreground`,children:Z.title||Z.id}):null]}),(0,C.jsxs)(oe,{value:E,onValueChange:e=>j(e),children:[(0,C.jsx)(re,{size:`sm`,className:`w-36`,children:(0,C.jsx)(ne,{})}),(0,C.jsx)(ie,{children:ue.map(e=>(0,C.jsx)(ae,{value:e.value,children:e.label},e.value))})]})]})}),(0,C.jsx)(y,{children:Z?I&&Q.length===0?(0,C.jsx)(`div`,{className:`py-16 text-center text-sm text-muted-foreground`,children:`Loading blackboard…`}):Q.length===0?(0,C.jsx)(`div`,{className:`py-16 text-center text-sm text-muted-foreground`,children:`No blackboard entries`}):(0,C.jsx)(_,{className:`h-[640px] pr-3`,children:(0,C.jsx)(`div`,{className:`space-y-5`,children:ke.map(e=>{let t=Oe[e];return t.length===0?null:(0,C.jsxs)(`section`,{className:`space-y-2`,children:[(0,C.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,C.jsx)(h,{variant:`secondary`,children:de[e]}),(0,C.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:t.length})]}),(0,C.jsx)(`div`,{className:`space-y-2`,children:t.map(e=>(0,C.jsxs)(`div`,{className:`space-y-3 rounded-md border border-border bg-background p-3`,children:[(0,C.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-2`,children:[(0,C.jsxs)(`div`,{className:`min-w-0`,children:[(0,C.jsx)(`div`,{className:`text-sm font-medium`,children:e.title}),(0,C.jsxs)(`div`,{className:`text-xs text-muted-foreground`,children:[`by `,A(e.authorId),` · `,d(B,e.updatedAt||e.createdAt)]})]}),(0,C.jsxs)(`div`,{className:`flex flex-wrap justify-end gap-1`,children:[(0,C.jsx)(h,{variant:`outline`,className:k[e.status],children:e.status}),e.supersedes?(0,C.jsxs)(h,{variant:`outline`,children:[`supersedes `,A(e.supersedes)]}):null]})]}),e.body?(0,C.jsx)(`p`,{className:`whitespace-pre-wrap text-sm text-muted-foreground`,children:e.body}):null]},e.id))})]},e)})})}):(0,C.jsx)(`div`,{className:`py-16 text-center text-sm text-muted-foreground`,children:`No team selected`})})]})]})]})]})}export{j as TeamsView};
2
- //# sourceMappingURL=teams-sCQAs_QA.js.map