@hotmeshio/long-tail 0.8.2 → 0.8.3

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 (162) hide show
  1. package/build/scripts/twin-farm.d.ts +45 -0
  2. package/build/scripts/twin-farm.js +441 -0
  3. package/build/tsconfig.tsbuildinfo +1 -1
  4. package/dashboard/dist/assets/{AdminDashboard-Nvja-XIJ.js → AdminDashboard-Dhr7sUq6.js} +2 -2
  5. package/dashboard/dist/assets/{AdminDashboard-Nvja-XIJ.js.map → AdminDashboard-Dhr7sUq6.js.map} +1 -1
  6. package/dashboard/dist/assets/{AgentConfigPage-Sf2god7q.js → AgentConfigPage-CUPm8FjH.js} +2 -2
  7. package/dashboard/dist/assets/{AgentConfigPage-Sf2god7q.js.map → AgentConfigPage-CUPm8FjH.js.map} +1 -1
  8. package/dashboard/dist/assets/{AgentDetailPage-DtgDeZJR.js → AgentDetailPage-C9Tmmhhc.js} +2 -2
  9. package/dashboard/dist/assets/{AgentDetailPage-DtgDeZJR.js.map → AgentDetailPage-C9Tmmhhc.js.map} +1 -1
  10. package/dashboard/dist/assets/{AgentsPage-C6zqP_xC.js → AgentsPage-Pj47ZJ2U.js} +2 -2
  11. package/dashboard/dist/assets/{AgentsPage-C6zqP_xC.js.map → AgentsPage-Pj47ZJ2U.js.map} +1 -1
  12. package/dashboard/dist/assets/{AvailableEscalationsPage-D61kC7Is.js → AvailableEscalationsPage-BxakNqha.js} +2 -2
  13. package/dashboard/dist/assets/{AvailableEscalationsPage-D61kC7Is.js.map → AvailableEscalationsPage-BxakNqha.js.map} +1 -1
  14. package/dashboard/dist/assets/{BotPicker-ChgljKHj.js → BotPicker-CCIo5ic0.js} +2 -2
  15. package/dashboard/dist/assets/{BotPicker-ChgljKHj.js.map → BotPicker-CCIo5ic0.js.map} +1 -1
  16. package/dashboard/dist/assets/{CapabilitiesPage-DeybKoZM.js → CapabilitiesPage-XFVq4iPX.js} +2 -2
  17. package/dashboard/dist/assets/{CapabilitiesPage-DeybKoZM.js.map → CapabilitiesPage-XFVq4iPX.js.map} +1 -1
  18. package/dashboard/dist/assets/{CollapsibleSection-BPiTuPBk.js → CollapsibleSection-CBKICsCu.js} +2 -2
  19. package/dashboard/dist/assets/{CollapsibleSection-BPiTuPBk.js.map → CollapsibleSection-CBKICsCu.js.map} +1 -1
  20. package/dashboard/dist/assets/{CredentialsPage-DXOcPWtd.js → CredentialsPage-BN_d7ybc.js} +2 -2
  21. package/dashboard/dist/assets/{CredentialsPage-DXOcPWtd.js.map → CredentialsPage-BN_d7ybc.js.map} +1 -1
  22. package/dashboard/dist/assets/{CronLabel-D3411N8x.js → CronLabel-4V_EXMUg.js} +2 -2
  23. package/dashboard/dist/assets/{CronLabel-D3411N8x.js.map → CronLabel-4V_EXMUg.js.map} +1 -1
  24. package/dashboard/dist/assets/{CustomDurationPicker-WG2tPSbV.js → CustomDurationPicker-BdurQj-B.js} +2 -2
  25. package/dashboard/dist/assets/{CustomDurationPicker-WG2tPSbV.js.map → CustomDurationPicker-BdurQj-B.js.map} +1 -1
  26. package/dashboard/dist/assets/{ElapsedCell-BFWEGSD7.js → ElapsedCell-CO8XMSJX.js} +2 -2
  27. package/dashboard/dist/assets/{ElapsedCell-BFWEGSD7.js.map → ElapsedCell-CO8XMSJX.js.map} +1 -1
  28. package/dashboard/dist/assets/{EscalationSchemaPage-D2Y5Yeqn.js → EscalationSchemaPage-hzFtuyha.js} +2 -2
  29. package/dashboard/dist/assets/{EscalationSchemaPage-D2Y5Yeqn.js.map → EscalationSchemaPage-hzFtuyha.js.map} +1 -1
  30. package/dashboard/dist/assets/{EscalationsOverview-VlLcX2YM.js → EscalationsOverview-qlo0mxxa.js} +2 -2
  31. package/dashboard/dist/assets/{EscalationsOverview-VlLcX2YM.js.map → EscalationsOverview-qlo0mxxa.js.map} +1 -1
  32. package/dashboard/dist/assets/{EventTable-3MJw14jp.js → EventTable-D9RjAT_a.js} +2 -2
  33. package/dashboard/dist/assets/{EventTable-3MJw14jp.js.map → EventTable-D9RjAT_a.js.map} +1 -1
  34. package/dashboard/dist/assets/{GraphInvokePage-QaUUrPnh.js → GraphInvokePage-CU3r2tzN.js} +2 -2
  35. package/dashboard/dist/assets/{GraphInvokePage-QaUUrPnh.js.map → GraphInvokePage-CU3r2tzN.js.map} +1 -1
  36. package/dashboard/dist/assets/{HomePage-Br0A3iOp.js → HomePage-B7pb4-Gx.js} +2 -2
  37. package/dashboard/dist/assets/{HomePage-Br0A3iOp.js.map → HomePage-B7pb4-Gx.js.map} +1 -1
  38. package/dashboard/dist/assets/{ListToolbar-d4MGQefV.js → ListToolbar-C_64Y22Z.js} +2 -2
  39. package/dashboard/dist/assets/{ListToolbar-d4MGQefV.js.map → ListToolbar-C_64Y22Z.js.map} +1 -1
  40. package/dashboard/dist/assets/{McpOverview-CUzJD5Z5.js → McpOverview-D-4eSOTc.js} +2 -2
  41. package/dashboard/dist/assets/{McpOverview-CUzJD5Z5.js.map → McpOverview-D-4eSOTc.js.map} +1 -1
  42. package/dashboard/dist/assets/{McpQueryDetailPage-pYSZmV3M.js → McpQueryDetailPage-BYwDb8LC.js} +2 -2
  43. package/dashboard/dist/assets/{McpQueryDetailPage-pYSZmV3M.js.map → McpQueryDetailPage-BYwDb8LC.js.map} +1 -1
  44. package/dashboard/dist/assets/{McpQueryPage-CA5C5dss.js → McpQueryPage-CIijB5t2.js} +2 -2
  45. package/dashboard/dist/assets/{McpQueryPage-CA5C5dss.js.map → McpQueryPage-CIijB5t2.js.map} +1 -1
  46. package/dashboard/dist/assets/{McpRunDetailPage-CrRkXwAe.js → McpRunDetailPage-CQmhfgju.js} +2 -2
  47. package/dashboard/dist/assets/{McpRunDetailPage-CrRkXwAe.js.map → McpRunDetailPage-CQmhfgju.js.map} +1 -1
  48. package/dashboard/dist/assets/{McpRunsPage-BqRBDbkn.js → McpRunsPage-CdDyeOdi.js} +2 -2
  49. package/dashboard/dist/assets/{McpRunsPage-BqRBDbkn.js.map → McpRunsPage-CdDyeOdi.js.map} +1 -1
  50. package/dashboard/dist/assets/OperationsPage-Cz_0K8tj.js +2 -0
  51. package/dashboard/dist/assets/{OperationsPage--uVJxzmP.js.map → OperationsPage-Cz_0K8tj.js.map} +1 -1
  52. package/dashboard/dist/assets/{OperatorDashboard-D-UMrTqI.js → OperatorDashboard-DFORmS46.js} +2 -2
  53. package/dashboard/dist/assets/{OperatorDashboard-D-UMrTqI.js.map → OperatorDashboard-DFORmS46.js.map} +1 -1
  54. package/dashboard/dist/assets/{ProcessDetailPage-BV6D_wuR.js → ProcessDetailPage-DwypVFE2.js} +2 -2
  55. package/dashboard/dist/assets/{ProcessDetailPage-BV6D_wuR.js.map → ProcessDetailPage-DwypVFE2.js.map} +1 -1
  56. package/dashboard/dist/assets/{ProcessesListPage-BAalEHpx.js → ProcessesListPage-tNLvALwT.js} +2 -2
  57. package/dashboard/dist/assets/{ProcessesListPage-BAalEHpx.js.map → ProcessesListPage-tNLvALwT.js.map} +1 -1
  58. package/dashboard/dist/assets/{RoleDetailPage-ClE7rUoo.js → RoleDetailPage-BPsrUqIa.js} +2 -2
  59. package/dashboard/dist/assets/{RoleDetailPage-ClE7rUoo.js.map → RoleDetailPage-BPsrUqIa.js.map} +1 -1
  60. package/dashboard/dist/assets/{RolesPage-DMsgZioQ.js → RolesPage-txueySPI.js} +2 -2
  61. package/dashboard/dist/assets/{RolesPage-DMsgZioQ.js.map → RolesPage-txueySPI.js.map} +1 -1
  62. package/dashboard/dist/assets/{RunAsSelector-VCnEYIwj.js → RunAsSelector-Bvefon9B.js} +2 -2
  63. package/dashboard/dist/assets/{RunAsSelector-VCnEYIwj.js.map → RunAsSelector-Bvefon9B.js.map} +1 -1
  64. package/dashboard/dist/assets/{StickyPagination-3eCY2-_V.js → StickyPagination-CeQCzVIA.js} +2 -2
  65. package/dashboard/dist/assets/{StickyPagination-3eCY2-_V.js.map → StickyPagination-CeQCzVIA.js.map} +1 -1
  66. package/dashboard/dist/assets/{StreamMessageDetail-70kDFH4o.js → StreamMessageDetail-6wEm6o6t.js} +2 -2
  67. package/dashboard/dist/assets/{StreamMessageDetail-70kDFH4o.js.map → StreamMessageDetail-6wEm6o6t.js.map} +1 -1
  68. package/dashboard/dist/assets/{SwimlaneTimeline-BOXRit6t.js → SwimlaneTimeline-C97Rldf5.js} +2 -2
  69. package/dashboard/dist/assets/{SwimlaneTimeline-BOXRit6t.js.map → SwimlaneTimeline-C97Rldf5.js.map} +1 -1
  70. package/dashboard/dist/assets/{TaskDetailPage-YxGQE9Qg.js → TaskDetailPage-B09mLOCE.js} +2 -2
  71. package/dashboard/dist/assets/{TaskDetailPage-YxGQE9Qg.js.map → TaskDetailPage-B09mLOCE.js.map} +1 -1
  72. package/dashboard/dist/assets/{TasksListPage-DuLJQN7Q.js → TasksListPage-CQhiSGkN.js} +2 -2
  73. package/dashboard/dist/assets/{TasksListPage-DuLJQN7Q.js.map → TasksListPage-CQhiSGkN.js.map} +1 -1
  74. package/dashboard/dist/assets/{TimeAgo-dnc1ZjKc.js → TimeAgo-BkyeBcMF.js} +2 -2
  75. package/dashboard/dist/assets/{TimeAgo-dnc1ZjKc.js.map → TimeAgo-BkyeBcMF.js.map} +1 -1
  76. package/dashboard/dist/assets/{TimestampCell-CDR6cTyq.js → TimestampCell-DVp_UdEB.js} +2 -2
  77. package/dashboard/dist/assets/{TimestampCell-CDR6cTyq.js.map → TimestampCell-DVp_UdEB.js.map} +1 -1
  78. package/dashboard/dist/assets/{ToolTestPanel-CfwGdRdz.js → ToolTestPanel-CZOuRP_i.js} +2 -2
  79. package/dashboard/dist/assets/{ToolTestPanel-CfwGdRdz.js.map → ToolTestPanel-CZOuRP_i.js.map} +1 -1
  80. package/dashboard/dist/assets/{TopicDetailPage-f2qaeGFz.js → TopicDetailPage-0mvQde8R.js} +2 -2
  81. package/dashboard/dist/assets/{TopicDetailPage-f2qaeGFz.js.map → TopicDetailPage-0mvQde8R.js.map} +1 -1
  82. package/dashboard/dist/assets/{TopicsPage-CwYdVmyK.js → TopicsPage-DkvsHLLe.js} +2 -2
  83. package/dashboard/dist/assets/{TopicsPage-CwYdVmyK.js.map → TopicsPage-DkvsHLLe.js.map} +1 -1
  84. package/dashboard/dist/assets/{UserName-CRE7EZPU.js → UserName-EaD_Tz9y.js} +2 -2
  85. package/dashboard/dist/assets/{UserName-CRE7EZPU.js.map → UserName-EaD_Tz9y.js.map} +1 -1
  86. package/dashboard/dist/assets/{WorkflowExecutionPage-BjNBu-Zt.js → WorkflowExecutionPage-CjMSQ9Bb.js} +2 -2
  87. package/dashboard/dist/assets/{WorkflowExecutionPage-BjNBu-Zt.js.map → WorkflowExecutionPage-CjMSQ9Bb.js.map} +1 -1
  88. package/dashboard/dist/assets/{WorkflowsDashboard-DfpvbzNt.js → WorkflowsDashboard-BgUz_jO6.js} +2 -2
  89. package/dashboard/dist/assets/{WorkflowsDashboard-DfpvbzNt.js.map → WorkflowsDashboard-BgUz_jO6.js.map} +1 -1
  90. package/dashboard/dist/assets/{WorkflowsOverview-BwD2lQwj.js → WorkflowsOverview-BzUjUfAz.js} +2 -2
  91. package/dashboard/dist/assets/{WorkflowsOverview-BwD2lQwj.js.map → WorkflowsOverview-BzUjUfAz.js.map} +1 -1
  92. package/dashboard/dist/assets/{YamlWorkflowDetailPage-BhHb7j2s.js → YamlWorkflowDetailPage-C48Ui513.js} +2 -2
  93. package/dashboard/dist/assets/{YamlWorkflowDetailPage-BhHb7j2s.js.map → YamlWorkflowDetailPage-C48Ui513.js.map} +1 -1
  94. package/dashboard/dist/assets/{YamlWorkflowsPage-SBRpY2dI.js → YamlWorkflowsPage-CQ-dk84N.js} +2 -2
  95. package/dashboard/dist/assets/{YamlWorkflowsPage-SBRpY2dI.js.map → YamlWorkflowsPage-CQ-dk84N.js.map} +1 -1
  96. package/dashboard/dist/assets/{agents-VbkdqWCr.js → agents-O1GlQE9p.js} +2 -2
  97. package/dashboard/dist/assets/{agents-VbkdqWCr.js.map → agents-O1GlQE9p.js.map} +1 -1
  98. package/dashboard/dist/assets/{bots-CsgYcYU_.js → bots-DB5Z7MEk.js} +2 -2
  99. package/dashboard/dist/assets/{bots-CsgYcYU_.js.map → bots-DB5Z7MEk.js.map} +1 -1
  100. package/dashboard/dist/assets/{capabilities-CMhFyoDl.js → capabilities-Du9EfNdT.js} +2 -2
  101. package/dashboard/dist/assets/{capabilities-CMhFyoDl.js.map → capabilities-Du9EfNdT.js.map} +1 -1
  102. package/dashboard/dist/assets/{controlplane-BstXtPbV.js → controlplane-ku4V2nVk.js} +2 -2
  103. package/dashboard/dist/assets/{controlplane-BstXtPbV.js.map → controlplane-ku4V2nVk.js.map} +1 -1
  104. package/dashboard/dist/assets/{escalation-columns-DajPgfuV.js → escalation-columns-C-xaR_Qg.js} +2 -2
  105. package/dashboard/dist/assets/{escalation-columns-DajPgfuV.js.map → escalation-columns-C-xaR_Qg.js.map} +1 -1
  106. package/dashboard/dist/assets/{escalation-C0BNAeIG.js → escalation-oVVz7Lw2.js} +2 -2
  107. package/dashboard/dist/assets/{escalation-C0BNAeIG.js.map → escalation-oVVz7Lw2.js.map} +1 -1
  108. package/dashboard/dist/assets/{index-D_6JFBiM.js → index-61yKjTkk.js} +2 -2
  109. package/dashboard/dist/assets/{index-D_6JFBiM.js.map → index-61yKjTkk.js.map} +1 -1
  110. package/dashboard/dist/assets/{index-Cl1vY8Lg.js → index-Bcgsf2yD.js} +2 -2
  111. package/dashboard/dist/assets/{index-Cl1vY8Lg.js.map → index-Bcgsf2yD.js.map} +1 -1
  112. package/dashboard/dist/assets/{index-BY5m8rhE.js → index-BwXtXaw8.js} +2 -2
  113. package/dashboard/dist/assets/{index-BY5m8rhE.js.map → index-BwXtXaw8.js.map} +1 -1
  114. package/dashboard/dist/assets/{index-BcaQ_hCz.js → index-CAzFU1rn.js} +2 -2
  115. package/dashboard/dist/assets/{index-BcaQ_hCz.js.map → index-CAzFU1rn.js.map} +1 -1
  116. package/dashboard/dist/assets/{index-fqU_l4dC.js → index-CxlsLEr1.js} +2 -2
  117. package/dashboard/dist/assets/{index-fqU_l4dC.js.map → index-CxlsLEr1.js.map} +1 -1
  118. package/dashboard/dist/assets/{index-DWlPFH3T.js → index-CyXilW90.js} +2 -2
  119. package/dashboard/dist/assets/{index-DWlPFH3T.js.map → index-CyXilW90.js.map} +1 -1
  120. package/dashboard/dist/assets/{index-BYf0oNSQ.js → index-D0bDVU2a.js} +2 -2
  121. package/dashboard/dist/assets/{index-BYf0oNSQ.js.map → index-D0bDVU2a.js.map} +1 -1
  122. package/dashboard/dist/assets/{index-CSixdp5W.js → index-DcZDyLHC.js} +2 -2
  123. package/dashboard/dist/assets/{index-CSixdp5W.js.map → index-DcZDyLHC.js.map} +1 -1
  124. package/dashboard/dist/assets/{index-CXnSqSFH.js → index-DgAmkmtv.js} +2 -2
  125. package/dashboard/dist/assets/{index-CXnSqSFH.js.map → index-DgAmkmtv.js.map} +1 -1
  126. package/dashboard/dist/assets/{index-CvFQtPWA.js → index-DkZnXWTA.js} +2 -2
  127. package/dashboard/dist/assets/{index-CvFQtPWA.js.map → index-DkZnXWTA.js.map} +1 -1
  128. package/dashboard/dist/assets/{index-BWLVqWLU.js → index-DsKK1fCc.js} +2 -2
  129. package/dashboard/dist/assets/{index-BWLVqWLU.js.map → index-DsKK1fCc.js.map} +1 -1
  130. package/dashboard/dist/assets/{index-C8k3Z2su.js → index-MbEPoyTe.js} +3 -3
  131. package/dashboard/dist/assets/{index-C8k3Z2su.js.map → index-MbEPoyTe.js.map} +1 -1
  132. package/dashboard/dist/assets/{index-CaSMWhLU.js → index-aHhMmZ0W.js} +2 -2
  133. package/dashboard/dist/assets/{index-CaSMWhLU.js.map → index-aHhMmZ0W.js.map} +1 -1
  134. package/dashboard/dist/assets/{knowledge-Bskl1MbC.js → knowledge-CTjJVvIG.js} +2 -2
  135. package/dashboard/dist/assets/{knowledge-Bskl1MbC.js.map → knowledge-CTjJVvIG.js.map} +1 -1
  136. package/dashboard/dist/assets/{mcp-C_qz25AB.js → mcp-CsHkygRS.js} +2 -2
  137. package/dashboard/dist/assets/{mcp-C_qz25AB.js.map → mcp-CsHkygRS.js.map} +1 -1
  138. package/dashboard/dist/assets/{mcp-query-CJx58s1A.js → mcp-query-BCt4tpjO.js} +2 -2
  139. package/dashboard/dist/assets/{mcp-query-CJx58s1A.js.map → mcp-query-BCt4tpjO.js.map} +1 -1
  140. package/dashboard/dist/assets/{pipelines-B6GzpgtG.js → pipelines-BpGmuS5V.js} +2 -2
  141. package/dashboard/dist/assets/{pipelines-B6GzpgtG.js.map → pipelines-BpGmuS5V.js.map} +1 -1
  142. package/dashboard/dist/assets/{roles-D8lPvFgG.js → roles-lHLgLwOY.js} +2 -2
  143. package/dashboard/dist/assets/{roles-D8lPvFgG.js.map → roles-lHLgLwOY.js.map} +1 -1
  144. package/dashboard/dist/assets/{tasks-BWHakSYf.js → tasks-BHfimh-E.js} +2 -2
  145. package/dashboard/dist/assets/{tasks-BWHakSYf.js.map → tasks-BHfimh-E.js.map} +1 -1
  146. package/dashboard/dist/assets/{topics-0dXzPX8t.js → topics-BW2cS79q.js} +2 -2
  147. package/dashboard/dist/assets/{topics-0dXzPX8t.js.map → topics-BW2cS79q.js.map} +1 -1
  148. package/dashboard/dist/assets/{useEventHooks-Dpixlgp-.js → useEventHooks-CeOIM1Ix.js} +2 -2
  149. package/dashboard/dist/assets/{useEventHooks-Dpixlgp-.js.map → useEventHooks-CeOIM1Ix.js.map} +1 -1
  150. package/dashboard/dist/assets/{useNamespace-DQMc77ok.js → useNamespace-CEVLPGGY.js} +2 -2
  151. package/dashboard/dist/assets/{useNamespace-DQMc77ok.js.map → useNamespace-CEVLPGGY.js.map} +1 -1
  152. package/dashboard/dist/assets/{useYamlActivityEvents-DO5bHOVE.js → useYamlActivityEvents-DdRNcy7s.js} +2 -2
  153. package/dashboard/dist/assets/{useYamlActivityEvents-DO5bHOVE.js.map → useYamlActivityEvents-DdRNcy7s.js.map} +1 -1
  154. package/dashboard/dist/assets/{users-B_LVbnUk.js → users-CAih5Fty.js} +2 -2
  155. package/dashboard/dist/assets/{users-B_LVbnUk.js.map → users-CAih5Fty.js.map} +1 -1
  156. package/dashboard/dist/assets/{workflows-WmmGDAvo.js → workflows-C_gCwB9q.js} +2 -2
  157. package/dashboard/dist/assets/{workflows-WmmGDAvo.js.map → workflows-C_gCwB9q.js.map} +1 -1
  158. package/dashboard/dist/assets/{yaml-workflows-BS7KHhU1.js → yaml-workflows-CPabf8Sf.js} +2 -2
  159. package/dashboard/dist/assets/{yaml-workflows-BS7KHhU1.js.map → yaml-workflows-CPabf8Sf.js.map} +1 -1
  160. package/dashboard/dist/index.html +1 -1
  161. package/package.json +2 -1
  162. package/dashboard/dist/assets/OperationsPage--uVJxzmP.js +0 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hotmeshio/long-tail",
3
- "version": "0.8.2",
3
+ "version": "0.8.3",
4
4
  "description": "Long Tail Workflows — Durable AI workflows with human-in-the-loop escalation. Powered by PostgreSQL.",
5
5
  "main": "./build/index.js",
6
6
  "types": "./build/index.d.ts",
@@ -44,6 +44,7 @@
44
44
  "process": "tsx scripts/process.ts",
45
45
  "demo": "bash scripts/demo.sh",
46
46
  "ortho:populate": "ts-node scripts/ortho-populate.ts",
47
+ "twin:farm": "ts-node scripts/twin-farm.ts",
47
48
  "dashboard:install": "cd dashboard && npm install",
48
49
  "dashboard:dev": "cd dashboard && npm run dev",
49
50
  "dashboard:build": "cd dashboard && npm run build",
@@ -1,2 +0,0 @@
1
- import{a as w,j as e}from"./vendor-query-B2UbickB.js";import{b as Me}from"./roles-D8lPvFgG.js";import{O as ye}from"./index-C8k3Z2su.js";import{i as Se}from"./useEventHooks-Dpixlgp-.js";import{P as Ce}from"./PageHeader-DJo7yMUR.js";import{X as Le,ae as ie,av as qe,ar as Fe}from"./vendor-icons-DOIDKgo6.js";import{L as U,f as Oe,c as Ae}from"./vendor-react-CXumBFUA.js";const ge=800,je=270,I=40,Ee=76,ce=24,We=72,oe=ge-I-Ee,be=je-ce-We,$=ce+be,he=I+oe,j="0.5s cubic-bezier(0.4, 0, 0.2, 1)",me=9;function ve(t){return`M ${(t.x-me).toFixed(1)} ${t.y.toFixed(1)} L ${(t.x+me).toFixed(1)} ${t.y.toFixed(1)}`}function Ie(t){return t.length===0?"":t.length===1?ve(t[0]):t.map((n,o)=>`${o===0?"M":"L"} ${n.x.toFixed(1)} ${n.y.toFixed(1)}`).join(" ")}function Q(t){if(t.length===0)return"";if(t.length===1)return ve(t[0]);const n=[];for(let o=0;o<t.length-1;o++){const i=t[Math.max(0,o-1)],c=t[o],p=t[o+1],a=t[Math.min(t.length-1,o+2)],d=(c.x+(p.x-i.x)/6).toFixed(1),u=(c.y+(p.y-i.y)/6).toFixed(1),l=(p.x-(a.x-c.x)/6).toFixed(1),x=(p.y-(a.y-c.y)/6).toFixed(1);o===0&&n.push(`M ${c.x.toFixed(1)} ${c.y.toFixed(1)}`),n.push(`C ${d} ${u}, ${l} ${x}, ${p.x.toFixed(1)} ${p.y.toFixed(1)}`)}return n.join(" ")}function Te(t,n){if(t.length<2||n.length<2)return"";const o=Q(t),i=[...n].reverse(),c=Q(i),p=c.slice(c.indexOf("C"));return`${o} L ${i[0].x.toFixed(1)} ${i[0].y.toFixed(1)} ${p} Z`}function De(t){return t>=1e4?`${Math.round(t/1e3)}k`:t>=1e3?`${(t/1e3).toFixed(1)}k`:String(t)}function ne(t){return t.length>0?t[t.length-1]:void 0}const O="#6366f1",T="#0ea5e9",q="#1E3A8A",X="#059669",Ne="#b0e0e6",A="#5b93ad",Be=13;function ze(t,n){const o=[...t].sort((a,d)=>a.y-d.y);let i=-1/0;const c=o.map(a=>{const d=Math.max(a.y+3,i+Be);return i=d,{...a,labelY:d}}),p=c.length>0?c[c.length-1].labelY-n:0;if(p>0)for(const a of c)a.labelY-=p;return c}function He({stations:t,selectedRole:n,onSelect:o,onUpstreamSelect:i,onPrioritySelect:c,periodHours:p}){const[a,d]=w.useState(null),u=t.length;if(u===0)return null;const l=s=>u===1?I+oe/2:I+s/(u-1)*oe,x=new Map(t.map((s,h)=>[s.role,l(h)])),y=t.map((s,h)=>{var R,Y,V,G;const f=s.target_per_hour??null,S=f!=null?f*p:null;return{idx:h,x:l(h),expected:S,actual:((R=s.metric)==null?void 0:R.resolved)??0,active:((Y=s.metric)==null?void 0:Y.claimed)??0,pending:((V=s.metric)==null?void 0:V.pending)??0,priorityCount:((G=s.metric)==null?void 0:G.priority_count)??0}}),b=y.some(s=>s.expected!=null),v=Math.max(1,...y.map(s=>s.expected??0),...y.map(s=>s.actual),...y.map(s=>s.expected!=null?s.pending:0))*1.15,M=s=>ce+be*(1-Math.max(0,Math.min(s,v))/v),N=y.filter(s=>s.expected!=null),C=N.map(s=>({...s,y:M(s.expected)})),_=N.map(s=>({...s,y:M(s.actual)})),P=N.map(s=>({...s,y:M(s.active)})),k=N.map(s=>({...s,y:M(s.pending)})),D=Ie(C),B=Q(_),z=Q(P),Z=Q(k),F=ne(_),K=ne(C),E=ne(P),J=ne(k),ee=_.length>=2&&F?`${B} L ${F.x.toFixed(1)} ${$} L ${_[0].x.toFixed(1)} ${$} Z`:"",W=N.some(s=>s.pending>0||s.active>0),te=W&&P.length>=2&&E?`${z} L ${E.x.toFixed(1)} ${$} L ${P[0].x.toFixed(1)} ${$} Z`:"",H=W?Te(k,P):"",r=N.some(s=>s.active>0),m=N.some(s=>s.pending>s.active),L=ze([K?{key:"target",text:"Target",color:X,y:K.y}:null,F?{key:"actual",text:"Resolved",color:q,y:F.y}:null,r&&E?{key:"active",text:"Claimed",color:O,y:E.y}:null,m&&J?{key:"queued",text:"Pending",color:T,y:J.y}:null].filter(Boolean),$+4);return e.jsxs("svg",{viewBox:`0 0 ${ge} ${je}`,className:"w-full h-full",preserveAspectRatio:"xMidYMid meet",style:{display:"block"},children:[t.map(s=>{if(!s.parent_role)return null;const h=x.get(s.parent_role);if(h==null)return null;const f=l(t.findIndex(S=>S.role===s.role));return e.jsx("line",{x1:h,y1:$,x2:f,y2:$,stroke:"#e2e8f0",strokeWidth:.75},`dep-${s.role}`)}),ee&&e.jsx("path",{d:ee,fill:q,opacity:.05,style:{transition:`d ${j}`}}),te&&e.jsx("path",{d:te,fill:O,opacity:.12,style:{transition:`d ${j}`}}),H&&e.jsx("path",{d:H,fill:T,opacity:.12,style:{transition:`d ${j}`}}),D&&e.jsx("path",{d:D,fill:"none",stroke:X,strokeWidth:.5,strokeLinejoin:"round",opacity:.9,style:{transition:`d ${j}`}}),C.map(s=>e.jsx("text",{x:s.x,y:s.y-3.5,textAnchor:"middle",fontSize:6.5,fill:X,fontFamily:"ui-monospace, monospace",fontWeight:"500",opacity:.7,style:{transition:`y ${j}`},children:Math.round(s.expected)},`tval-${s.idx}`)),W&&Z&&e.jsx("path",{d:Z,fill:"none",stroke:T,strokeWidth:.75,strokeDasharray:"2 3",strokeLinecap:"round",opacity:.55,style:{transition:`d ${j}`}}),z&&e.jsx("path",{d:z,fill:"none",stroke:O,strokeWidth:.75,strokeDasharray:"2 3",strokeLinecap:"round",opacity:.5,style:{transition:`d ${j}`}}),B&&e.jsx("path",{d:B,fill:"none",stroke:q,strokeWidth:.6,strokeLinejoin:"round",strokeLinecap:"round",opacity:.65,style:{transition:`d ${j}`}}),P.map((s,h)=>{if(s.pending<=0&&s.active<=0)return null;const f=Math.max(2.5,Math.min(5,2.5+s.active/10)),S=s.pending>s.active,R=Math.min(k[h].y-4,s.y-f-4);return e.jsxs("g",{children:[s.pending>0&&e.jsx("text",{x:s.x,y:R,textAnchor:"middle",fontSize:7.5,fill:S?T:"#64748b",fontFamily:"ui-monospace, monospace",fontWeight:"600",style:{transition:`y ${j}`},children:s.pending}),e.jsxs("g",{transform:`translate(${s.x} ${s.y})`,style:{transition:`transform ${j}`},children:[e.jsx("circle",{r:f,fill:O,opacity:.85}),s.active>0&&e.jsx("text",{y:f+9,textAnchor:"middle",fontSize:7.5,fill:O,fontFamily:"ui-monospace, monospace",fontWeight:"600",children:s.active})]})]},`active-${s.idx}`)}),y.map(s=>{var ue;const h=t[s.idx],f=s.x,S=s.expected!=null?M(s.actual):$,R=Math.max(2.25,Math.min(4,2.25+s.actual/160)),Y=h.role===n,V=a===s.idx,G=s.expected==null?"idle · set a target rate to plot pace":`${s.actual} resolved · target ${Math.round(s.expected)}`+(s.pending>s.active?` · ${s.pending-s.active} pending`:"")+(s.active>0?` · ${s.active} claimed`:"")+(s.priorityCount>0?` · ${s.priorityCount} priority`:""),se=G.length*5.5+20,de=Math.max(I+se/2+4,Math.min(he-se/2-4,f)),pe=S-R-10;return e.jsxs("g",{onClick:()=>o(h.role),onMouseEnter:()=>d(s.idx),onMouseLeave:()=>d(null),style:{cursor:"pointer"},children:[e.jsxs("g",{transform:`translate(${f} ${S})`,style:{transition:`transform ${j}`},children:[e.jsx("circle",{r:22,fill:"transparent"}),e.jsx("circle",{r:R,fill:q,opacity:.9,style:{transition:`r ${j}`}}),s.expected!=null&&e.jsx("text",{y:-R-5,textAnchor:"middle",fontSize:9.5,fill:q,fontFamily:"ui-monospace, monospace",fontWeight:"500",children:De(s.actual)}),V&&!Y&&e.jsx("circle",{r:R+3,fill:"none",stroke:q,strokeWidth:1,opacity:.4}),Y&&e.jsx("circle",{r:R+4,fill:"none",stroke:"#6366f1",strokeWidth:2})]}),s.priorityCount>0&&e.jsxs("g",{transform:`translate(${f+15} ${Math.max(S-15,12)})`,onClick:le=>{le.stopPropagation(),c==null||c(h.role)},style:{cursor:"pointer",transition:`transform ${j}`},children:[e.jsx("title",{children:`${s.priorityCount} past the priority threshold — click to pull oldest first`}),e.jsx("circle",{r:6.5+(String(s.priorityCount).length-1)*2,fill:Ne,opacity:.9}),e.jsx("text",{y:2.5,textAnchor:"middle",fontSize:7,fill:A,fontFamily:"ui-monospace, monospace",fontWeight:"700",children:s.priorityCount})]}),(((ue=h.upstream_roles)==null?void 0:ue.length)??0)>0&&e.jsxs("g",{transform:`translate(${f-20} ${$})`,onClick:le=>{le.stopPropagation(),i==null||i(h.upstream_roles[0])},style:{cursor:"pointer"},children:[e.jsx("title",{children:`Fed by ${h.upstream_roles.join(", ")} — click to view that sequence`}),e.jsx("circle",{r:9,cy:-6,fill:"transparent"}),e.jsx("path",{d:"M -7 -14 C -3 -14 -1 -9 0 -2",fill:"none",stroke:"#94a3b8",strokeWidth:1,strokeDasharray:"2 2",strokeLinecap:"round"}),e.jsx("path",{d:"M 0 -2 L 8 -2",stroke:"#94a3b8",strokeWidth:1,strokeLinecap:"round"}),e.jsx("path",{d:"M 8 -2 l -3.5 -2 v 4 z",fill:"#94a3b8"})]}),e.jsx("text",{x:f,y:$+14,textAnchor:"middle",fontSize:9.5,fill:"#475569",fontFamily:"ui-sans-serif, sans-serif",fontWeight:"500",children:h.title??h.role}),e.jsx("text",{x:f,y:$+26,textAnchor:"middle",fontSize:8,fill:"#94a3b8",fontFamily:"ui-monospace, monospace",children:h.role}),V&&e.jsxs("g",{children:[e.jsx("rect",{x:de-se/2,y:pe-16,width:se,height:19,rx:3,fill:"#0f172a",opacity:.88}),e.jsx("text",{x:de,y:pe-3,textAnchor:"middle",fontSize:8.5,fill:"white",fontFamily:"ui-monospace, monospace",children:G})]})]},h.role)}),!b&&e.jsx("text",{x:I+oe/2,y:$+48,textAnchor:"middle",fontSize:8.5,fill:"#94a3b8",fontFamily:"ui-sans-serif, sans-serif",children:"Set target_per_hour on each role in Admin → Roles to enable the pace chart"}),L.map(s=>e.jsx("text",{x:he+6,y:s.labelY,fontSize:8,fill:s.color,fontFamily:"ui-sans-serif, sans-serif",fontWeight:s.key==="actual"?700:500,opacity:s.key==="active"?.85:1,style:{transition:`y ${j}`},children:s.text},s.key))]})}function xe(t){const n=`/escalations/available?role=${encodeURIComponent(t.role)}`;if(t.priority_facet){const o=JSON.stringify([{field:`metadata.${t.priority_facet}`,direction:"asc"}]);return`${n}&orderBy=${encodeURIComponent(o)}`}return`${n}&sort_by=created_at&order=asc`}const ke=["15m","1h","24h","7d","30d"],Ye=t=>ke.includes(t);function ae(t){if(t==null)return"—";if(t<1){const n=Math.round(t*60);return n<=0?"< 1s":`${n}s`}return t<60?`${t.toFixed(0)}m`:`${(t/60).toFixed(1)}h`}function re({label:t,value:n}){return e.jsxs("div",{className:"flex items-center justify-between py-1",children:[e.jsx("span",{className:"text-[10px] text-text-tertiary uppercase tracking-wider",children:t}),e.jsx("span",{className:"text-xs font-mono font-medium text-text-primary tabular-nums",children:n})]})}function Ve({period:t,onChange:n}){return e.jsx("div",{className:"flex items-center gap-1 mb-4",children:ke.map(o=>e.jsx("button",{onClick:()=>n(o),className:`px-2 py-0.5 text-[10px] font-mono rounded transition-colors ${t===o?"bg-accent/10 text-accent font-semibold":"text-text-quaternary hover:text-text-secondary"}`,children:o},o))})}function Ge({role:t,globalPeriod:n,onClose:o}){const[i,c]=w.useState(Ye(n)?n:"24h"),{data:p}=ye(i),a=p==null?void 0:p.stations.find(x=>x.role===t.role),d=t.sla_minutes??void 0,u=t.target_per_hour??void 0,l=t.worker_count??void 0;return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex items-start justify-between mb-1",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex items-baseline gap-1.5 flex-wrap",children:[e.jsx("span",{className:"text-sm font-mono font-bold text-text-primary",children:t.role}),t.title&&e.jsx("span",{className:"text-[10px] text-text-secondary",children:t.title})]}),t.description&&e.jsx("p",{className:"text-[10px] text-text-tertiary mt-0.5 line-clamp-2 leading-relaxed",children:t.description})]}),e.jsx("button",{onClick:o,className:"text-text-quaternary hover:text-text-secondary transition-colors mt-0.5 shrink-0 ml-2",children:e.jsx(Le,{className:"w-4 h-4"})})]}),e.jsxs(U,{to:`/admin/roles/${encodeURIComponent(t.role)}`,className:"flex items-center gap-1 text-[10px] text-accent hover:underline mb-4",children:[e.jsx(ie,{className:"w-2.5 h-2.5"}),"Edit in Roles"]}),e.jsx(Ve,{period:i,onChange:c}),(u||d||l)&&e.jsxs("div",{className:"flex items-center gap-4 mb-4 text-[10px]",children:[u&&e.jsxs("div",{children:[e.jsxs("div",{className:"font-mono font-semibold text-text-primary",children:[u,"/h"]}),e.jsx("div",{className:"text-text-quaternary uppercase tracking-wider text-[8.5px]",children:"target"})]}),d&&e.jsxs("div",{children:[e.jsxs("div",{className:"font-mono font-semibold text-text-primary",children:[d,"m"]}),e.jsx("div",{className:"text-text-quaternary uppercase tracking-wider text-[8.5px]",children:"SLA"})]}),l&&e.jsxs("div",{children:[e.jsx("div",{className:"font-mono font-semibold text-text-primary",children:l}),e.jsx("div",{className:"text-text-quaternary uppercase tracking-wider text-[8.5px]",children:"workers"})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-x-3",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[9px] text-text-quaternary uppercase tracking-wider mb-1.5",children:"Wait (queue)"}),e.jsx(re,{label:"P99",value:ae((a==null?void 0:a.wait.p99)??null)}),e.jsx(re,{label:"avg",value:ae((a==null?void 0:a.wait.avg)??null)})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[9px] text-text-quaternary uppercase tracking-wider mb-1.5",children:"Work (proc.)"}),e.jsx(re,{label:"P99",value:ae((a==null?void 0:a.work.p99)??null)}),e.jsx(re,{label:"avg",value:ae((a==null?void 0:a.work.avg)??null)})]})]}),e.jsxs("div",{className:"border-t border-surface-border/40 pt-2 mt-3 space-y-1.5",children:[d&&e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-[10px] text-text-tertiary",children:"SLA target"}),e.jsxs("span",{className:"text-xs font-mono text-text-secondary",children:[d,"m"]})]}),a&&a.priority_count>0&&e.jsxs(U,{to:xe(t),className:"flex items-center justify-between group",children:[e.jsxs("span",{className:"text-[10px]",style:{color:A},children:[a.priority_count," priority — pull oldest first"]}),e.jsx(ie,{className:"w-3 h-3 transition-colors",style:{color:A}})]})]}),e.jsx("div",{className:"mt-4 border-t border-surface-border/40 pt-3",children:e.jsxs(U,{to:`/escalations/available?role=${encodeURIComponent(t.role)}`,className:"flex items-center gap-1.5 text-[10px] text-accent hover:underline",children:["View full queue",e.jsx(ie,{className:"w-2.5 h-2.5"})]})})]})}function Ue({allMetrics:t,orderedRoles:n,period:o}){const i=t.reduce((l,x)=>l+x.pending,0),c=t.reduce((l,x)=>l+x.resolved,0),p=t.reduce((l,x)=>l+x.priority_count,0),a=new Map(t.map(l=>[l.role,l])),d=t.filter(l=>l.priority_count>0).length,u=t.filter(l=>l.pending>0).length;return e.jsxs(e.Fragment,{children:[e.jsxs("p",{className:"text-[9px] text-text-quaternary uppercase tracking-wider mb-3",children:["Pipeline · ",o]}),e.jsx("div",{className:"mb-4",children:d>0?e.jsxs("p",{className:"text-[11px]",style:{color:A},children:[d," station",d>1?"s":""," with priority items"]}):u>0?e.jsxs("p",{className:"text-[11px] text-status-warning",children:[u," station",u>1?"s":""," with backlog"]}):c>0?e.jsx("p",{className:"text-[11px] text-status-success",children:"Flowing — queue clear"}):e.jsx("p",{className:"text-[11px] text-text-quaternary",children:"Quiet — awaiting work"})}),e.jsxs("div",{className:"space-y-1.5 mb-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-[9px] text-text-quaternary uppercase tracking-wider",children:"Pending"}),e.jsx("span",{className:`text-xs font-mono tabular-nums ${i>0?"text-text-primary font-semibold":"text-text-quaternary"}`,children:i})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("span",{className:"text-[9px] text-text-quaternary uppercase tracking-wider",children:["Resolved · ",o]}),e.jsx("span",{className:"text-xs font-mono tabular-nums text-text-secondary",children:c})]}),p>0&&e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-[9px] text-text-quaternary uppercase tracking-wider",children:"Priority"}),e.jsx("span",{className:"text-xs font-mono tabular-nums font-semibold",style:{color:A},children:p})]})]}),e.jsx("div",{className:"border-t border-surface-border/40 pt-2 mb-1",children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-[8px] text-text-quaternary uppercase tracking-wider flex-1",children:"Station"}),e.jsx("span",{className:"text-[8px] text-text-quaternary uppercase tracking-wider w-8 text-right shrink-0",children:"pend"}),e.jsx("span",{className:"text-[8px] text-text-quaternary uppercase tracking-wider w-8 text-right shrink-0",children:"clmd"}),e.jsx("span",{className:"text-[8px] text-text-quaternary uppercase tracking-wider w-8 text-right shrink-0",children:"res"})]})}),e.jsx("div",{className:"space-y-0.5",children:n.map(l=>{const x=a.get(l.role),y=(x==null?void 0:x.pending)??0,b=(x==null?void 0:x.claimed)??0,g=(x==null?void 0:x.resolved)??0,v=(x==null?void 0:x.priority_count)??0,M=l.title||l.role,N=v>0,C=y>0;return e.jsxs("div",{className:"flex items-center gap-2 py-0.5",children:[e.jsxs("span",{className:`text-[10px] font-mono flex-1 truncate ${C?"text-text-primary":"text-text-quaternary"}`,children:[M,N&&e.jsxs("span",{className:"ml-1 text-[8px] font-semibold",style:{color:A},children:[v," PRIORITY"]})]}),e.jsx("span",{className:`text-[10px] font-mono tabular-nums w-8 text-right shrink-0 ${C?"text-text-primary font-semibold":"text-text-quaternary"}`,children:y>0?y:"—"}),e.jsx("span",{className:`text-[10px] font-mono tabular-nums w-8 text-right shrink-0 ${b>0?"text-accent":"text-text-quaternary"}`,children:b>0?b:"—"}),e.jsx("span",{className:`text-[10px] font-mono tabular-nums w-8 text-right shrink-0 ${g>0?"text-text-secondary":"text-text-quaternary"}`,children:g>0?g:"—"})]},l.role)})}),e.jsx("p",{className:"text-[9px] text-text-quaternary mt-5",children:"Select a station for queue detail."})]})}function Qe({role:t,allMetrics:n,orderedRoles:o,globalPeriod:i,onClose:c}){return e.jsx("div",{className:"w-[280px] shrink-0 px-6 py-8 flex flex-col overflow-y-auto min-h-0",children:t?e.jsx(Ge,{role:t,globalPeriod:i,onClose:c}):e.jsx(Ue,{allMetrics:n,orderedRoles:o,period:i})})}const $e=`${X}14`,we=`${T}14`,_e=`${O}14`,Pe=`${q}14`,Xe=["15m","1h","24h","7d","30d"],Ze={"15m":.25,"1h":1,"24h":24,"7d":168,"30d":720};function Re(t){const n=t.filter(a=>a.ops_visible),o=new Map(n.map(a=>[a.role,a])),i=new Set,p=n.filter(a=>!a.parent_role||!o.has(a.parent_role)).map(a=>{const d=[],u=[{role:a,depth:0}];for(;u.length>0;){const l=u.shift();i.has(l.role.role)||(i.add(l.role.role),d.push(l),n.filter(x=>x.parent_role===l.role.role&&!i.has(x.role)).forEach(x=>u.push({role:x,depth:l.depth+1})))}return{origin:a,stations:d}});return n.filter(a=>!i.has(a.role)).forEach(a=>p.push({origin:a,stations:[{role:a,depth:0}]})),p.sort((a,d)=>d.stations.length-a.stations.length||a.origin.role.localeCompare(d.origin.role))}function fe(t){if(t==null)return"—";if(t<1){const n=Math.round(t*60);return n<=0?"< 1s":`${n}s`}return t<60?`${t.toFixed(0)}m`:`${(t/60).toFixed(1)}h`}function Ke(t,n){if(!n||t===0)return{pct:null,color:"bg-surface-border"};const o=t/n,i=Math.round(o*100),c=o>1?"bg-status-warning":o<.2?"bg-status-draft":"bg-status-success";return{pct:i,color:c}}function Je({role:t,metric:n,selected:o,onClick:i}){var b;const c=(n==null?void 0:n.pending)??0,p=(n==null?void 0:n.claimed)??0,a=(n==null?void 0:n.resolved)??0,d=(n==null?void 0:n.priority_count)??0,u=t.target_per_hour??null,{pct:l,color:x}=Ke(c,u),y=l!=null?Math.min(100,l):0;return e.jsxs(e.Fragment,{children:[e.jsxs("div",{role:"button",tabIndex:0,onClick:i,onKeyDown:g=>{g.key==="Enter"&&i()},className:`grid items-center gap-4 pr-3 cursor-pointer transition-colors ${o?"border-l-2 !border-l-accent pl-2.5":"pl-3"}`,style:{gridTemplateColumns:"1fr 64px 56px 56px 60px 72px 72px 104px"},children:[e.jsxs("div",{className:"flex items-center gap-1.5 min-w-0 py-1.5",children:[e.jsx("span",{className:"font-mono font-bold text-text-primary truncate text-[11px]",children:t.role}),t.title&&e.jsx("span",{className:"text-[10px] text-text-tertiary truncate",children:t.title}),(((b=t.upstream_roles)==null?void 0:b.length)??0)>0&&e.jsx("span",{title:`Fed by ${t.upstream_roles.join(", ")}`,className:"shrink-0 leading-none",children:e.jsx(Fe,{className:"w-3 h-3 text-text-quaternary"})})]}),e.jsx("div",{className:"self-stretch flex items-center justify-end px-1.5",style:{backgroundColor:$e},children:e.jsx("span",{className:`text-xs font-mono tabular-nums ${u!=null?"text-text-secondary":"text-text-quaternary"}`,children:u??"—"})}),e.jsx("div",{className:"self-stretch flex items-center justify-end px-1.5",style:{backgroundColor:we},children:e.jsx("span",{className:`text-xs font-mono tabular-nums ${c>0?"text-text-primary font-semibold":"text-text-quaternary"}`,children:c})}),e.jsx("div",{className:"self-stretch flex items-center justify-end px-1.5",style:{backgroundColor:_e},children:e.jsx("span",{className:`text-xs font-mono tabular-nums ${p>0?"text-accent font-semibold":"text-text-quaternary"}`,children:p})}),e.jsx("div",{className:"self-stretch flex items-center justify-end px-1.5",style:{backgroundColor:Pe},children:e.jsx("span",{className:"text-xs font-mono tabular-nums text-text-quaternary",children:a})}),e.jsx("span",{className:"text-xs font-mono tabular-nums text-right py-1.5 text-text-secondary",children:fe((n==null?void 0:n.wait.p99)??null)}),e.jsx("span",{className:"text-xs font-mono tabular-nums text-right py-1.5 text-text-secondary",children:fe((n==null?void 0:n.work.p99)??null)}),e.jsxs("div",{className:"flex items-center gap-2 py-1.5",children:[e.jsx("div",{className:"w-12 h-1.5 bg-surface-sunken rounded-full overflow-hidden shrink-0",children:e.jsx("div",{className:`h-full rounded-full ${x}`,style:{width:`${y}%`}})}),e.jsx("span",{className:`text-[10px] font-mono tabular-nums ${l!=null&&l>100?"text-status-warning font-semibold":"text-text-quaternary"}`,children:l!=null?`${l}%`:"—"})]})]}),d>0&&e.jsxs("div",{className:"flex items-center gap-1.5 pb-2 pl-3.5",children:[e.jsx("span",{className:"w-2.5 h-2.5 rounded-full dot-ring shrink-0",style:{backgroundColor:Ne}}),e.jsxs(U,{to:xe(t),className:"text-[10px] hover:underline",style:{color:A},onClick:g=>g.stopPropagation(),children:[d," priority — pull oldest first →"]})]})]})}function et(){const t=[{label:"ROLE"},{label:"TARGET/H",band:$e,hue:X},{label:"PENDING",band:we,hue:T},{label:"CLAIMED",band:_e,hue:O},{label:"RESOLVED",band:Pe,hue:q},{label:"P99 WAIT"},{label:"P99 WORK"},{label:"TREND"}];return e.jsx("div",{className:"grid items-center gap-4 px-3 border-b border-surface-border mb-0.5",style:{gridTemplateColumns:"1fr 64px 56px 56px 60px 72px 72px 104px"},children:t.map((n,o)=>n.band?e.jsx("div",{className:"self-stretch flex items-center justify-end px-1.5",style:{backgroundColor:n.band},children:e.jsx("span",{className:"text-[9px] font-semibold uppercase tracking-wider",style:{color:n.hue},children:n.label})},n.label):e.jsx("span",{className:`text-[9px] font-semibold uppercase tracking-wider text-text-quaternary py-1.5 ${o>0&&o<7?"text-right":""}`,children:n.label},n.label))})}function tt(){var H;const[t,n]=w.useState("1h"),[o,i]=w.useState(null),[c,p]=w.useState(!1);Se();const{data:a,isLoading:d,refetch:u}=Me(),{data:l,isLoading:x,refetch:y}=ye(t),b=(a==null?void 0:a.roles)??[],g=(l==null?void 0:l.stations)??[],v=w.useMemo(()=>Re(b),[b]),[M,N]=Oe(),C=M.get("fragment"),_=v.find(r=>r.origin.role===C)??v[0]??null,P=w.useCallback(r=>{i(null),N(m=>{const L=new URLSearchParams(m);return L.set("fragment",r),L})},[N]),k=(_==null?void 0:_.stations)??[],D=w.useMemo(()=>new Set(k.map(({role:r})=>r.role)),[k]),B=w.useMemo(()=>g.filter(r=>D.has(r.role)),[g,D]),z=w.useMemo(()=>k.map(({role:r})=>({role:r.role,title:r.title,parent_role:r.parent_role,target_per_hour:r.target_per_hour??null,upstream_roles:r.upstream_roles??[],metric:g.find(m=>m.role===r.role)})),[k,g]),Z=w.useCallback(r=>{const m=v.find(L=>L.stations.some(({role:s})=>s.role===r));m&&P(m.origin.role)},[v,P]),F=Ae(),K=w.useCallback(r=>{const m=b.find(L=>L.role===r);m&&F(xe(m))},[b,F]),E=((H=k.find(({role:r})=>r.role===o))==null?void 0:H.role)??null,J=d||x,ee=async()=>{p(!0),await Promise.all([u(),y()]),p(!1)},W=r=>i(m=>m===r?null:r),te=e.jsx("div",{className:"flex items-center gap-0.5",children:Xe.map(r=>e.jsx("button",{onClick:()=>n(r),className:`px-2.5 py-1 text-[10px] font-mono rounded transition-colors ${t===r?"bg-accent/10 text-accent font-semibold":"text-text-quaternary hover:text-text-secondary"}`,children:r},r))});return e.jsxs("div",{className:"flex flex-col flex-1 min-h-0",children:[e.jsx(Ce,{title:"Pace Board",docsHash:"#docs:dashboard.md:pace-board",center:te,actions:e.jsx("button",{onClick:ee,disabled:c,className:"text-text-quaternary hover:text-text-secondary transition-colors disabled:opacity-40",children:e.jsx(qe,{className:`w-3.5 h-3.5 ${c?"animate-spin":""}`})})}),J?e.jsxs("div",{className:"animate-pulse space-y-6 mt-4",children:[e.jsx("div",{className:"h-8 bg-surface-sunken rounded w-64"}),e.jsx("div",{className:"h-64 bg-surface-sunken rounded w-full"}),e.jsx("div",{className:"space-y-3",children:[1,2,3].map(r=>e.jsx("div",{className:"h-8 bg-surface-sunken rounded w-full"},r))})]}):v.length===0?e.jsxs("div",{className:"mt-8",children:[e.jsx("p",{className:"text-sm text-text-secondary mb-2",children:"Stations appear here once roles are marked visible in Operations."}),e.jsxs("p",{className:"text-xs text-text-tertiary",children:["Go to"," ",e.jsx(U,{to:"/admin/roles",className:"text-accent hover:underline",children:"Roles"})," ","and enable ",e.jsx("strong",{children:"Visible in Operations"})," on roles that represent pipeline stations."]})]}):e.jsxs("div",{className:"flex flex-col flex-1 min-h-0",children:[v.length>1&&e.jsx("div",{className:"flex items-center gap-0.5 px-4 pt-2",children:v.map(r=>{const m=r.origin.role===(_==null?void 0:_.origin.role);return e.jsxs("button",{onClick:()=>P(r.origin.role),className:`px-2.5 py-1 text-[10px] font-mono rounded transition-colors ${m?"bg-accent/10 text-accent font-semibold":"text-text-quaternary hover:text-text-secondary"}`,children:[r.origin.title??r.origin.role,e.jsx("span",{className:`ml-1.5 tabular-nums ${m?"text-accent/60":"text-text-quaternary/60"}`,children:r.stations.length})]},r.origin.role)})}),e.jsxs("div",{className:"flex-1 min-h-0 flex items-stretch overflow-hidden",children:[e.jsx("div",{className:"flex-1 min-w-0 min-h-0 flex flex-col justify-center overflow-hidden p-4",children:e.jsx(He,{stations:z,selectedRole:o,onSelect:W,onUpstreamSelect:Z,onPrioritySelect:K,periodHours:Ze[t]})}),e.jsx("div",{className:"w-px bg-surface-border shrink-0 self-stretch"}),e.jsx(Qe,{role:E,allMetrics:B,orderedRoles:k.map(r=>r.role),globalPeriod:t,onClose:()=>i(null)})]}),e.jsxs("div",{className:"max-h-[45vh] flex-none flex flex-col border-t border-surface-border overflow-hidden",children:[e.jsx(et,{}),e.jsx("div",{className:"flex-1 min-h-0 overflow-y-auto divide-y divide-surface-border/30",children:k.map(({role:r})=>e.jsx(Je,{role:r,metric:g.find(m=>m.role===r.role),selected:o===r.role,onClick:()=>W(r.role)},r.role))})]})]})]})}const ct=Object.freeze(Object.defineProperty({__proto__:null,OperationsPage:tt,buildFragments:Re},Symbol.toStringTag,{value:"Module"}));export{ct as O,He as P,Re as b,xe as p};
2
- //# sourceMappingURL=OperationsPage--uVJxzmP.js.map