agent-relay-server 0.94.5 → 0.95.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 (146) hide show
  1. package/docs/openapi.json +1 -1
  2. package/package.json +2 -2
  3. package/public/assets/MessageBubble-CkPnAwxJ.js +3 -0
  4. package/public/assets/{MessageBubble-g4NKZBDI.js.map → MessageBubble-CkPnAwxJ.js.map} +1 -1
  5. package/public/assets/{PlanGraphPanel-Chydc7yG.js → PlanGraphPanel-DPgW_Ohe.js} +2 -2
  6. package/public/assets/{PlanGraphPanel-Chydc7yG.js.map → PlanGraphPanel-DPgW_Ohe.js.map} +1 -1
  7. package/public/assets/{activity-BXLw6f9y.js → activity-CRebaL8O.js} +2 -2
  8. package/public/assets/{activity-BXLw6f9y.js.map → activity-CRebaL8O.js.map} +1 -1
  9. package/public/assets/{agent-profiles-B6PsZZmM.js → agent-profiles-BFpEQHKo.js} +2 -2
  10. package/public/assets/{agent-profiles-B6PsZZmM.js.map → agent-profiles-BFpEQHKo.js.map} +1 -1
  11. package/public/assets/{agents-B0POygaD.js → agents-7WtV1Pf3.js} +2 -2
  12. package/public/assets/{agents-B0POygaD.js.map → agents-7WtV1Pf3.js.map} +1 -1
  13. package/public/assets/{analytics-B50LtRMU.js → analytics-DpnJh9UQ.js} +3 -3
  14. package/public/assets/{analytics-B50LtRMU.js.map → analytics-DpnJh9UQ.js.map} +1 -1
  15. package/public/assets/{automation-CeYilS-s.js → automation-CjQNCXlO.js} +2 -2
  16. package/public/assets/{automation-CeYilS-s.js.map → automation-CjQNCXlO.js.map} +1 -1
  17. package/public/assets/{badge-CcTIPkUa.js → badge-BbfOskRI.js} +2 -2
  18. package/public/assets/{badge-CcTIPkUa.js.map → badge-BbfOskRI.js.map} +1 -1
  19. package/public/assets/branch-state-badge-BcObk0ca.js +2 -0
  20. package/public/assets/{branch-state-badge-T6t16OU5.js.map → branch-state-badge-BcObk0ca.js.map} +1 -1
  21. package/public/assets/{button-Dvz6HZ1j.js → button-DWiw--lT.js} +2 -2
  22. package/public/assets/{button-Dvz6HZ1j.js.map → button-DWiw--lT.js.map} +1 -1
  23. package/public/assets/{card-xVEUTFuh.js → card-BeqvuYTT.js} +2 -2
  24. package/public/assets/{card-xVEUTFuh.js.map → card-BeqvuYTT.js.map} +1 -1
  25. package/public/assets/channels-B2bftzgH.js +2 -0
  26. package/public/assets/{channels-C0J-VHEa.js.map → channels-B2bftzgH.js.map} +1 -1
  27. package/public/assets/chat-Dcwua_5V.js +2 -0
  28. package/public/assets/chat-Dcwua_5V.js.map +1 -0
  29. package/public/assets/{connectors-P5V_DlvA.js → connectors-CJOJirYT.js} +2 -2
  30. package/public/assets/{connectors-P5V_DlvA.js.map → connectors-CJOJirYT.js.map} +1 -1
  31. package/public/assets/copy-button-CIXy8ks6.js +2 -0
  32. package/public/assets/{copy-button-gB8Wc3dh.js.map → copy-button-CIXy8ks6.js.map} +1 -1
  33. package/public/assets/display-DRiGi1zj.js.map +1 -1
  34. package/public/assets/{dist-DbJ0cYxd.js → dist-BQXmO19g.js} +2 -2
  35. package/public/assets/{dist-DbJ0cYxd.js.map → dist-BQXmO19g.js.map} +1 -1
  36. package/public/assets/{dist-CE9yg7LH.js → dist-BufB2Xy_.js} +2 -2
  37. package/public/assets/{dist-CE9yg7LH.js.map → dist-BufB2Xy_.js.map} +1 -1
  38. package/public/assets/dist-CXkmW1Od.js +2 -0
  39. package/public/assets/{dist-4Joy6mhT.js.map → dist-CXkmW1Od.js.map} +1 -1
  40. package/public/assets/{dist-DoHTwsqW.js → dist-CbxR2pzD.js} +2 -2
  41. package/public/assets/{dist-DoHTwsqW.js.map → dist-CbxR2pzD.js.map} +1 -1
  42. package/public/assets/{dist-Cu5eOAWz.js → dist-CtuS_3Jl.js} +2 -2
  43. package/public/assets/{dist-Cu5eOAWz.js.map → dist-CtuS_3Jl.js.map} +1 -1
  44. package/public/assets/{dist-CVWxY_y8.js → dist-Du_bcq-z.js} +2 -2
  45. package/public/assets/{dist-CVWxY_y8.js.map → dist-Du_bcq-z.js.map} +1 -1
  46. package/public/assets/{dist-BkHh9GoG.js → dist-KxiSP9h9.js} +2 -2
  47. package/public/assets/{dist-BkHh9GoG.js.map → dist-KxiSP9h9.js.map} +1 -1
  48. package/public/assets/dist-LFuRypZd.js +2 -0
  49. package/public/assets/{dist-4O7O9HEE.js.map → dist-LFuRypZd.js.map} +1 -1
  50. package/public/assets/dist-Q6OOS84U.js +2 -0
  51. package/public/assets/{dist-B2WymQRX.js.map → dist-Q6OOS84U.js.map} +1 -1
  52. package/public/assets/{dist-B5OjWLDL.js → dist-eG_93I3z.js} +2 -2
  53. package/public/assets/{dist-B5OjWLDL.js.map → dist-eG_93I3z.js.map} +1 -1
  54. package/public/assets/{dist-XUy-xPl6.js → dist-zTw85jD8.js} +2 -2
  55. package/public/assets/{dist-XUy-xPl6.js.map → dist-zTw85jD8.js.map} +1 -1
  56. package/public/assets/{es2015-Dv7v8EgR.js → es2015-ibwCE_JR.js} +2 -2
  57. package/public/assets/{es2015-Dv7v8EgR.js.map → es2015-ibwCE_JR.js.map} +1 -1
  58. package/public/assets/{formatted-body-impl-B8xoPLk0.js → formatted-body-impl-CGACmUqI.js} +2 -2
  59. package/public/assets/{formatted-body-impl-B8xoPLk0.js.map → formatted-body-impl-CGACmUqI.js.map} +1 -1
  60. package/public/assets/index-CKPsJqiW.css +2 -0
  61. package/public/assets/index-CwhhpGgX.js +23 -0
  62. package/public/assets/index-CwhhpGgX.js.map +1 -0
  63. package/public/assets/{input-CWYjJ4Bn.js → input-DUdtS3nG.js} +2 -2
  64. package/public/assets/{input-CWYjJ4Bn.js.map → input-DUdtS3nG.js.map} +1 -1
  65. package/public/assets/{insights-O02aG6Fa.js → insights-DqXjTYai.js} +2 -2
  66. package/public/assets/{insights-O02aG6Fa.js.map → insights-DqXjTYai.js.map} +1 -1
  67. package/public/assets/{integrations-COYT1FSR.js → integrations-DEgLatDv.js} +2 -2
  68. package/public/assets/{integrations-COYT1FSR.js.map → integrations-DEgLatDv.js.map} +1 -1
  69. package/public/assets/{lib-C6ShgLFg.js → lib-Gp69YB9e.js} +3 -3
  70. package/public/assets/{lib-C6ShgLFg.js.map → lib-Gp69YB9e.js.map} +1 -1
  71. package/public/assets/lucide-react-uFIMC7W7.js +9 -0
  72. package/public/assets/{lucide-react-BMjjWU36.js.map → lucide-react-uFIMC7W7.js.map} +1 -1
  73. package/public/assets/{maintenance-CsaxFb2K.js → maintenance-CcFJlNxt.js} +2 -2
  74. package/public/assets/{maintenance-CsaxFb2K.js.map → maintenance-CcFJlNxt.js.map} +1 -1
  75. package/public/assets/{managed-agents-BkMSa35M.js → managed-agents-CHR4Hx1O.js} +4 -4
  76. package/public/assets/{managed-agents-BkMSa35M.js.map → managed-agents-CHR4Hx1O.js.map} +1 -1
  77. package/public/assets/{markdown-preview-impl-CPUObdGL.js → markdown-preview-impl-BHaUcnfn.js} +2 -2
  78. package/public/assets/{markdown-preview-impl-CPUObdGL.js.map → markdown-preview-impl-BHaUcnfn.js.map} +1 -1
  79. package/public/assets/{memory-Bc9b5aFW.js → memory-Uk0VfqnC.js} +2 -2
  80. package/public/assets/{memory-Bc9b5aFW.js.map → memory-Uk0VfqnC.js.map} +1 -1
  81. package/public/assets/{messages-DDUpkDDo.js → messages-D_juCBfr.js} +2 -2
  82. package/public/assets/{messages-DDUpkDDo.js.map → messages-D_juCBfr.js.map} +1 -1
  83. package/public/assets/{orchestrators-CTiypI_B.js → orchestrators-8IrmgeHV.js} +2 -2
  84. package/public/assets/{orchestrators-CTiypI_B.js.map → orchestrators-8IrmgeHV.js.map} +1 -1
  85. package/public/assets/{overview-DT05JmLC.js → overview-D_DM0QHJ.js} +2 -2
  86. package/public/assets/{overview-DT05JmLC.js.map → overview-D_DM0QHJ.js.map} +1 -1
  87. package/public/assets/{pairs-VlxzegP3.js → pairs-jciDuPLn.js} +2 -2
  88. package/public/assets/{pairs-VlxzegP3.js.map → pairs-jciDuPLn.js.map} +1 -1
  89. package/public/assets/{projects-5xutbu4r.js → projects-C-QHyuMD.js} +2 -2
  90. package/public/assets/{projects-5xutbu4r.js.map → projects-C-QHyuMD.js.map} +1 -1
  91. package/public/assets/{react-dom-D1K8FBqJ.js → react-dom-DF2cuNaf.js} +2 -2
  92. package/public/assets/{react-dom-D1K8FBqJ.js.map → react-dom-DF2cuNaf.js.map} +1 -1
  93. package/public/assets/{registry-dClAc8d-.js → registry-D1EIvc8U.js} +2 -2
  94. package/public/assets/{registry-dClAc8d-.js.map → registry-D1EIvc8U.js.map} +1 -1
  95. package/public/assets/{security-sGs_RWhJ.js → security-C0_Df9yI.js} +2 -2
  96. package/public/assets/{security-sGs_RWhJ.js.map → security-C0_Df9yI.js.map} +1 -1
  97. package/public/assets/{select-AzzgLRfk.js → select-CXFXPZ7Z.js} +2 -2
  98. package/public/assets/{select-AzzgLRfk.js.map → select-CXFXPZ7Z.js.map} +1 -1
  99. package/public/assets/settings-DGPpdFoq.js +6 -0
  100. package/public/assets/{settings-A0LUC7z3.js.map → settings-DGPpdFoq.js.map} +1 -1
  101. package/public/assets/store-d-IbqTaD.js +9 -0
  102. package/public/assets/store-d-IbqTaD.js.map +1 -0
  103. package/public/assets/{tasks-QfihaEd7.js → tasks-B_epVa5b.js} +2 -2
  104. package/public/assets/{tasks-QfihaEd7.js.map → tasks-B_epVa5b.js.map} +1 -1
  105. package/public/assets/teams-D2hATpCD.js +2 -0
  106. package/public/assets/{teams-yi_-_mib.js.map → teams-D2hATpCD.js.map} +1 -1
  107. package/public/assets/{terminal-viewer-impl-BuXn1PG3.js → terminal-viewer-impl-CefeetWa.js} +3 -3
  108. package/public/assets/{terminal-viewer-impl-BuXn1PG3.js.map → terminal-viewer-impl-CefeetWa.js.map} +1 -1
  109. package/public/assets/types-Tv67voFu.js.map +1 -1
  110. package/public/assets/{use-keyboard-viewport-BAtKHKT6.js → use-keyboard-viewport-CeLM-PeW.js} +2 -2
  111. package/public/assets/{use-keyboard-viewport-BAtKHKT6.js.map → use-keyboard-viewport-CeLM-PeW.js.map} +1 -1
  112. package/public/assets/{user-avatar-D5hoY3pJ.js → user-avatar-BOGZ21O8.js} +2 -2
  113. package/public/assets/{user-avatar-D5hoY3pJ.js.map → user-avatar-BOGZ21O8.js.map} +1 -1
  114. package/public/assets/{work-queue-pZe5uRpJ.js → work-queue-C9wBOivX.js} +2 -2
  115. package/public/assets/{work-queue-pZe5uRpJ.js.map → work-queue-C9wBOivX.js.map} +1 -1
  116. package/public/assets/{workspaces-DVh1TmHX.js → workspaces-DKFmnOF8.js} +3 -3
  117. package/public/assets/{workspaces-DVh1TmHX.js.map → workspaces-DKFmnOF8.js.map} +1 -1
  118. package/public/index.html +21 -21
  119. package/runner/plugins/claude/.claude-plugin/plugin.json +1 -1
  120. package/src/agent-busy-health.ts +12 -1
  121. package/src/codex-wham-quota.ts +4 -1
  122. package/src/config-store.ts +16 -5
  123. package/src/db/provider-quotas.ts +45 -15
  124. package/src/maintenance/jobs.ts +0 -1
  125. package/src/mcp/index.ts +22 -0
  126. package/src/notification-router.ts +4 -0
  127. package/src/notification-rules.ts +87 -6
  128. package/src/notification-types.ts +12 -0
  129. package/src/runtime-tokens.ts +3 -1
  130. package/public/assets/MessageBubble-g4NKZBDI.js +0 -3
  131. package/public/assets/branch-state-badge-T6t16OU5.js +0 -2
  132. package/public/assets/channels-C0J-VHEa.js +0 -2
  133. package/public/assets/chat-KKQrWEE_.js +0 -2
  134. package/public/assets/chat-KKQrWEE_.js.map +0 -1
  135. package/public/assets/copy-button-gB8Wc3dh.js +0 -2
  136. package/public/assets/dist-4Joy6mhT.js +0 -2
  137. package/public/assets/dist-4O7O9HEE.js +0 -2
  138. package/public/assets/dist-B2WymQRX.js +0 -2
  139. package/public/assets/index-D9oZL47o.js +0 -23
  140. package/public/assets/index-D9oZL47o.js.map +0 -1
  141. package/public/assets/index-DcyinRQU.css +0 -2
  142. package/public/assets/lucide-react-BMjjWU36.js +0 -9
  143. package/public/assets/settings-A0LUC7z3.js +0 -6
  144. package/public/assets/store-Bfl3XVmS.js +0 -9
  145. package/public/assets/store-Bfl3XVmS.js.map +0 -1
  146. package/public/assets/teams-yi_-_mib.js +0 -2
@@ -1,2 +0,0 @@
1
- import{r as e}from"./chunk-CilyBKbf.js";import{F as t,Gn as n,Jn as r,bn as i,et as a,h as o,l as s,or as c,qn as l}from"./lucide-react-BMjjWU36.js";import{i as ee,n as te,t as u}from"./store-Bfl3XVmS.js";import{G as ne,K as d,d as f,h as p}from"./display-DRiGi1zj.js";import{a as m}from"./types-Tv67voFu.js";import{a as re,i as ie,n as ae,r as oe,t as se}from"./select-AzzgLRfk.js";import{t as h}from"./badge-CcTIPkUa.js";import{t as g}from"./button-Dvz6HZ1j.js";import{t as ce}from"./input-CWYjJ4Bn.js";import{f as le,s as _}from"./index-D9oZL47o.js";import{a as v,o as y,r as b,t as x}from"./card-xVEUTFuh.js";import{t as ue}from"./PlanGraphPanel-Chydc7yG.js";var S=e(c(),1),C=l();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 de({data:e,loading:t,error:n}){let r=e?.totals.byOutcomeStatus,a=e?.compositionShapes.slice(0,6)??[],o=e?.recent.slice(0,8)??[];return(0,C.jsxs)(x,{children:[(0,C.jsx)(v,{children:(0,C.jsxs)(y,{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)(i,{className:`size-4 text-primary`}),` Outcomes`]}),(0,C.jsxs)(h,{variant:`secondary`,children:[e?.totals.total??0,` dissolved`]})]})}),(0,C.jsxs)(b,{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:a.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:o.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 fe=[],pe=[{value:`all`,label:`All kinds`},{value:`decision`,label:`Decisions`},{value:`fact`,label:`Facts`},{value:`ruled_out`,label:`Ruled out`}],me={decision:`decision`,fact:`fact`,ruled_out:`ruled out`};function he(e){return e.runtimeState?e.runtimeState:e.status===`dissolved`?`dissolved`:e.zeroMembersSince==null?`active`:`orphaned`}var ge={busy:`bg-blue-500/10 text-blue-400 border-blue-500/20`,idle:`bg-emerald-500/10 text-emerald-400 border-emerald-500/20`,degraded:`bg-orange-500/10 text-orange-400 border-orange-500/20`,stalled:`bg-amber-500/10 text-amber-400 border-amber-500/20`,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`},_e={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`},ve={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 D(e){return e?e.slice(0,12):`-`}function ye(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 be(e){if(!e.composition)return null;try{let t=JSON.parse(e.composition);return Array.isArray(t)?t.length:null}catch{return null}}function xe(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 Se(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 O(){let[e,i]=(0,S.useState)(null),[c,l]=(0,S.useState)([]),[w,T]=(0,S.useState)(null),[E,O]=(0,S.useState)(`all`),[k,Ce]=(0,S.useState)(``),[A,j]=(0,S.useState)(!1),[we,M]=(0,S.useState)(!1),[N,P]=(0,S.useState)(null),[F,Te]=(0,S.useState)(()=>Date.now()),I=u(e=>e.teams),L=e??I[0]?.id??null,R=L?te(`team`,L):``,z=u(e=>e.teamsLoading),B=u(e=>e.teamsError),Ee=u(e=>e.fetchTeams),V=u(e=>(L?e.issuesByEntity[R]:void 0)??fe),H=u(e=>e.issueRefsById),De=u(e=>R?!!e.issueLoading[R]:!1),U=u(e=>R?e.issueErrors[R]??null:null),W=u(e=>e.fetchIssuesForEntity),Oe=u(e=>e.teamOutcomeAggregates),ke=u(e=>e.teamOutcomeAggregatesLoading),Ae=u(e=>e.teamOutcomeAggregatesError),je=u(e=>e.fetchTeamOutcomeAggregates),G=u(e=>e.fetchPlan),Me=u(e=>e.dissolveTeam),Ne=u(e=>e.openConfirm),K=u(e=>e.agentsById),Pe=u(e=>e.switchView),Fe=u(e=>e.openInboxThread),Ie=u(e=>L?e.plansByTeam[ee(L)]??null:null),Le=e=>{let t=K[e];return t?f(t):e.slice(-8)};async function q(e,t=E){M(!0),P(null);try{let n=new URLSearchParams({team:e});t!==`all`&&n.set(`kind`,t),l((await r(`GET`,`/blackboard?${n.toString()}`)).entries),T(e)}catch(t){P(m(t)),l([]),T(e)}finally{M(!1)}}async function J(){j(!0),P(null);try{let[t]=await Promise.all([Ee(),je()]);Te(Date.now());let n=e??t[0]?.id;n?(G({teamId:n}),await Promise.all([q(n,E),W(`team`,n)])):(l([]),T(null))}catch(e){P(m(e))}finally{j(!1)}}(0,S.useEffect)(()=>{J()},[]),(0,S.useEffect)(()=>{w&&q(w,E)},[E]);let Y=(0,S.useMemo)(()=>I.filter(e=>xe(e,k)),[I,k]),X=I.find(e=>e.id===L)??null,Z=w===L?c:[],Q=(0,S.useMemo)(()=>V.map(e=>({...e,issueRef:H[e.issueRef.id]??e.issueRef})),[H,V]),$=(0,S.useMemo)(()=>L?Object.values(K).filter(e=>e.teamId===L).sort((e,t)=>f(e).localeCompare(f(t))||e.id.localeCompare(t.id)):[],[K,L]),Re=(0,S.useMemo)(()=>{let e={decision:[],fact:[],ruled_out:[]};for(let t of Z)e[t.kind].push(t);return e},[Z]),ze=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:A||z,children:[(0,C.jsx)(t,{className:n(`size-4`,(A||z)&&`animate-spin`)}),` Refresh`]})]}),(N||B)&&(0,C.jsx)(`div`,{className:`rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2 text-sm text-destructive`,children:N||B}),(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:I.length})]}),(0,C.jsx)(ce,{value:k,onChange:e=>Ce(e.target.value),placeholder:`Filter teams`,className:`h-8`})]}),(0,C.jsx)(`div`,{children:(A||z)&&I.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:I.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 t=e.id===L,r=be(e),o=he(e),s=e.coordinatorId,c=()=>{i(e.id),G({teamId:e.id}),W(`team`,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:n(`transition-colors hover:border-primary/50`,t&&`border-primary/60 bg-primary/5`),children:(0,C.jsxs)(b,{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||D(e.id)}),(0,C.jsx)(`div`,{className:`truncate text-xs text-muted-foreground`,children:e.id})]}),(0,C.jsx)(h,{variant:`outline`,className:ge[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(),Fe(s),Pe(`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:Le(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:p(e.createdAt),children:d(F,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:p(e.dissolvedAt),children:d(F,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:p(e.zeroMembersSince),children:(0,C.jsxs)(`span`,{children:[`No live members since `,d(F,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:_e[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:ye(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)(de,{data:Oe,loading:ke,error:Ae}),X?(0,C.jsxs)(x,{children:[(0,C.jsx)(v,{children:(0,C.jsxs)(y,{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:`Issues`}),(0,C.jsxs)(`span`,{className:`ml-2 text-xs font-normal text-muted-foreground`,children:[Q.length,` associated`]})]}),De?(0,C.jsx)(h,{variant:`secondary`,children:`loading`}):null]})}),(0,C.jsx)(b,{children:U?(0,C.jsx)(`div`,{className:`text-xs text-destructive`,children:U}):Q.length===0?(0,C.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`No associated issues`}):(0,C.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:Q.map(({association:e,issueRef:t})=>(0,C.jsx)(le,{issueRef:t,now:F,showSync:!0},`${e.issueRefId}:${e.createdAt}`))})})]}):null,X&&Ie?(0,C.jsx)(x,{className:`p-0`,children:(0,C.jsx)(ue,{teamId:X.id})}):null,(0,C.jsxs)(x,{children:[(0,C.jsx)(v,{children:(0,C.jsxs)(y,{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`]})]}),X&&X.status!==`dissolved`?(0,C.jsxs)(g,{variant:`destructive`,size:`sm`,onClick:()=>Ne(`Dissolve Team`,`Dissolve "${X.title||X.id}"? This closes the team working set but keeps its records visible.`,()=>void Me(X.id)),children:[(0,C.jsx)(o,{className:`size-4`}),` Dissolve`]}):null]})}),(0,C.jsx)(b,{children:X?$.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:n(`h-2 w-2 shrink-0 rounded-full`,ne(e,F))}),(0,C.jsxs)(`div`,{className:`min-w-0`,children:[(0,C.jsx)(`div`,{className:`truncate text-sm font-medium`,children:f(e)}),(0,C.jsx)(`div`,{className:`truncate text-xs text-muted-foreground`,children:e.id})]})]}),(0,C.jsx)(h,{variant:`outline`,className:Se(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)(v,{children:(0,C.jsxs)(y,{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`}),X?(0,C.jsx)(`span`,{className:`ml-2 text-xs font-normal text-muted-foreground`,children:X.title||X.id}):null]}),(0,C.jsxs)(se,{value:E,onValueChange:e=>O(e),children:[(0,C.jsx)(ie,{size:`sm`,className:`w-36`,children:(0,C.jsx)(re,{})}),(0,C.jsx)(ae,{children:pe.map(e=>(0,C.jsx)(oe,{value:e.value,children:e.label},e.value))})]})]})}),(0,C.jsx)(b,{children:X?we&&Z.length===0?(0,C.jsx)(`div`,{className:`py-16 text-center text-sm text-muted-foreground`,children:`Loading blackboard…`}):Z.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:ze.map(e=>{let t=Re[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:me[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 `,D(e.authorId),` · `,d(F,e.updatedAt||e.createdAt)]})]}),(0,C.jsxs)(`div`,{className:`flex flex-wrap justify-end gap-1`,children:[(0,C.jsx)(h,{variant:`outline`,className:ve[e.status],children:e.status}),e.supersedes?(0,C.jsxs)(h,{variant:`outline`,children:[`supersedes `,D(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{O as TeamsView};
2
- //# sourceMappingURL=teams-yi_-_mib.js.map