@hotmeshio/long-tail 0.1.3 → 0.1.5

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 (615) hide show
  1. package/README.md +118 -173
  2. package/build/examples/seed.js +1 -1
  3. package/build/examples/workflows/basic-echo/activities.d.ts +2 -2
  4. package/build/examples/workflows/basic-echo/activities.js +7 -7
  5. package/build/examples/workflows/basic-echo/index.js +1 -1
  6. package/build/examples/workflows/kitchen-sink/index.js +2 -2
  7. package/build/index.d.ts +12 -10
  8. package/build/index.js +15 -12
  9. package/build/lib/db/index.d.ts +18 -0
  10. package/build/{services → lib}/db/index.js +9 -0
  11. package/build/{services → lib}/db/migrate.js +3 -3
  12. package/build/{services → lib}/telemetry/honeycomb.d.ts +2 -2
  13. package/build/{services → lib}/telemetry/honeycomb.js +2 -2
  14. package/build/modules/defaults.d.ts +2 -0
  15. package/build/modules/defaults.js +3 -1
  16. package/build/routes/controlplane.js +1 -1
  17. package/build/routes/dba.js +4 -0
  18. package/build/routes/docs.d.ts +2 -0
  19. package/build/routes/docs.js +87 -0
  20. package/build/routes/escalations/bulk.js +120 -202
  21. package/build/routes/escalations/resolve.js +1 -1
  22. package/build/routes/escalations/single.js +1 -1
  23. package/build/routes/files.js +1 -1
  24. package/build/routes/index.js +2 -0
  25. package/build/routes/insight.js +2 -1
  26. package/build/routes/mcp.js +3 -2
  27. package/build/routes/oauth.js +1 -1
  28. package/build/routes/settings.js +4 -4
  29. package/build/routes/workflows/discovery.js +3 -3
  30. package/build/routes/workflows/invocation.js +1 -1
  31. package/build/routes/yaml-workflows/crud.js +1 -1
  32. package/build/routes/yaml-workflows/deployment.js +25 -0
  33. package/build/services/auth/bot-api-key.js +1 -1
  34. package/build/services/auth/index.d.ts +4 -0
  35. package/build/services/auth/index.js +17 -0
  36. package/build/services/auth/service-token.js +1 -1
  37. package/build/services/config/provider.js +1 -1
  38. package/build/services/config/read.js +1 -1
  39. package/build/services/config/write.js +1 -1
  40. package/build/services/controlplane/index.js +3 -4
  41. package/build/services/controlplane/quorum-bridge.js +2 -2
  42. package/build/services/cron/index.js +4 -5
  43. package/build/services/dba.d.ts +4 -0
  44. package/build/services/dba.js +3 -6
  45. package/build/services/escalation/bulk.js +1 -1
  46. package/build/services/escalation/crud.js +1 -1
  47. package/build/services/escalation/queries.js +1 -1
  48. package/build/services/export/client.js +2 -5
  49. package/build/services/export/index.js +14 -2
  50. package/build/services/hotmesh-utils.js +1 -1
  51. package/build/services/iam/bots.js +6 -12
  52. package/build/services/iam/context.d.ts +1 -1
  53. package/build/services/iam/context.js +5 -5
  54. package/build/services/iam/credentials.js +1 -1
  55. package/build/services/iam/ephemeral.js +8 -15
  56. package/build/services/iam/principal.js +3 -10
  57. package/build/services/iam/resolve.js +1 -1
  58. package/build/services/iam/sql.d.ts +10 -0
  59. package/build/services/iam/sql.js +42 -0
  60. package/build/services/insight/index.d.ts +1 -0
  61. package/build/services/insight/index.js +4 -6
  62. package/build/services/interceptor/activities/escalation.js +1 -1
  63. package/build/services/interceptor/activities/task.js +9 -6
  64. package/build/services/interceptor/activities/workflow.js +4 -5
  65. package/build/services/interceptor/activity-interceptor.d.ts +1 -1
  66. package/build/services/interceptor/activity-interceptor.js +5 -5
  67. package/build/services/interceptor/completion.js +1 -1
  68. package/build/services/interceptor/escalation.js +1 -1
  69. package/build/services/interceptor/index.js +4 -4
  70. package/build/services/interceptor/lifecycle.js +1 -1
  71. package/build/services/maintenance/index.js +4 -5
  72. package/build/services/mcp/adapter.js +1 -16
  73. package/build/services/mcp/client/connection.d.ts +1 -1
  74. package/build/services/mcp/client/connection.js +2 -2
  75. package/build/services/mcp/client/tools.js +1 -1
  76. package/build/services/mcp/db-server/index.js +1 -1
  77. package/build/services/mcp/db-server/tools.js +17 -4
  78. package/build/services/mcp/db.js +1 -1
  79. package/build/services/mcp/playwright-server/index.js +1 -1
  80. package/build/services/mcp/playwright-server/lifecycle.js +1 -1
  81. package/build/services/mcp/playwright-server/schemas.d.ts +2 -2
  82. package/build/services/mcp/playwright-server/tools.js +1 -1
  83. package/build/services/mcp/register-tool.d.ts +11 -0
  84. package/build/services/mcp/register-tool.js +15 -0
  85. package/build/services/mcp/server.js +1 -1
  86. package/build/services/mcp/sql.d.ts +6 -0
  87. package/build/services/mcp/sql.js +34 -1
  88. package/build/services/mcp/workflow-compiler-server.js +1 -1
  89. package/build/services/mcp/workflow-server.js +1 -1
  90. package/build/services/mcp-runs/execution-builder.js +8 -6
  91. package/build/services/mcp-runs/queries.js +2 -2
  92. package/build/services/mcp-runs/sql.d.ts +4 -1
  93. package/build/services/mcp-runs/sql.js +23 -2
  94. package/build/services/namespace/index.js +1 -1
  95. package/build/services/oauth/db.js +9 -37
  96. package/build/services/oauth/index.js +1 -1
  97. package/build/services/oauth/providers/registry.js +1 -1
  98. package/build/services/oauth/sql.d.ts +7 -0
  99. package/build/services/oauth/sql.js +32 -0
  100. package/build/services/orchestrator/index.js +3 -3
  101. package/build/services/role/index.js +1 -1
  102. package/build/services/task/crud.js +1 -1
  103. package/build/services/task/process.js +1 -1
  104. package/build/services/task/resolve.js +1 -1
  105. package/build/services/user/auth.js +1 -1
  106. package/build/services/user/crud.js +1 -1
  107. package/build/services/user/rbac.js +1 -1
  108. package/build/services/user/roles.js +1 -1
  109. package/build/services/user/sql.d.ts +2 -0
  110. package/build/services/user/sql.js +3 -1
  111. package/build/services/yaml-workflow/db-utils.js +1 -1
  112. package/build/services/yaml-workflow/db.js +1 -1
  113. package/build/services/yaml-workflow/deployer-helpers.js +1 -1
  114. package/build/services/yaml-workflow/deployer.js +4 -4
  115. package/build/services/yaml-workflow/generator.js +1 -1
  116. package/build/services/yaml-workflow/input-analyzer-helpers.d.ts +6 -0
  117. package/build/services/yaml-workflow/input-analyzer-helpers.js +36 -7
  118. package/build/services/yaml-workflow/input-analyzer.js +16 -3
  119. package/build/services/yaml-workflow/pipeline/analyze.js +1 -1
  120. package/build/services/yaml-workflow/pipeline/build/dag.js +10 -5
  121. package/build/services/yaml-workflow/pipeline/compile/llm-call.js +1 -1
  122. package/build/services/yaml-workflow/pipeline/extract.js +5 -3
  123. package/build/services/yaml-workflow/pipeline/index.d.ts +5 -0
  124. package/build/services/yaml-workflow/pipeline/index.js +22 -0
  125. package/build/services/yaml-workflow/pipeline/validate.js +2 -2
  126. package/build/services/yaml-workflow/workers/callbacks.js +1 -1
  127. package/build/services/yaml-workflow/workers/events.js +2 -2
  128. package/build/services/yaml-workflow/workers/register.js +8 -8
  129. package/build/start/adapters.js +7 -7
  130. package/build/start/index.js +4 -4
  131. package/build/start/server.js +1 -1
  132. package/build/start/workers.d.ts +1 -2
  133. package/build/start/workers.js +8 -7
  134. package/build/system/activities/claude-code.js +1 -1
  135. package/build/system/activities/file-storage.js +1 -1
  136. package/build/system/activities/knowledge.d.ts +58 -0
  137. package/build/system/activities/knowledge.js +128 -0
  138. package/build/system/activities/sql.d.ts +9 -0
  139. package/build/system/activities/sql.js +41 -0
  140. package/build/system/activities/triage/context.js +1 -1
  141. package/build/system/activities/triage/discovery.d.ts +2 -14
  142. package/build/system/activities/triage/discovery.js +5 -161
  143. package/build/system/activities/triage/llm.d.ts +1 -8
  144. package/build/system/activities/triage/llm.js +2 -28
  145. package/build/system/activities/triage/tools.d.ts +1 -17
  146. package/build/system/activities/triage/tools.js +8 -167
  147. package/build/system/index.js +5 -4
  148. package/build/system/mcp-servers/admin/escalations.d.ts +5 -0
  149. package/build/system/mcp-servers/admin/escalations.js +149 -0
  150. package/build/system/mcp-servers/admin/index.d.ts +31 -0
  151. package/build/system/mcp-servers/admin/index.js +80 -0
  152. package/build/system/mcp-servers/admin/maintenance.d.ts +5 -0
  153. package/build/system/mcp-servers/admin/maintenance.js +58 -0
  154. package/build/system/mcp-servers/admin/mcp-servers.d.ts +5 -0
  155. package/build/system/mcp-servers/admin/mcp-servers.js +146 -0
  156. package/build/system/mcp-servers/admin/schemas.d.ts +411 -0
  157. package/build/system/mcp-servers/admin/schemas.js +177 -0
  158. package/build/system/mcp-servers/admin/tasks.d.ts +5 -0
  159. package/build/system/mcp-servers/admin/tasks.js +112 -0
  160. package/build/system/mcp-servers/admin/users.d.ts +5 -0
  161. package/build/system/mcp-servers/admin/users.js +167 -0
  162. package/build/system/mcp-servers/admin/workflow-config.d.ts +9 -0
  163. package/build/system/mcp-servers/admin/workflow-config.js +118 -0
  164. package/build/system/mcp-servers/admin/workflows.d.ts +6 -0
  165. package/build/system/mcp-servers/admin/workflows.js +138 -0
  166. package/build/system/mcp-servers/admin/yaml-workflows.d.ts +8 -0
  167. package/build/system/mcp-servers/admin/yaml-workflows.js +237 -0
  168. package/build/system/mcp-servers/claude-code.js +1 -1
  169. package/build/system/mcp-servers/db-query/index.js +1 -1
  170. package/build/system/mcp-servers/db-query/tools.js +17 -4
  171. package/build/system/mcp-servers/docs.d.ts +5 -0
  172. package/build/system/mcp-servers/docs.js +147 -0
  173. package/build/system/mcp-servers/file-storage.js +1 -1
  174. package/build/system/mcp-servers/http-fetch.js +1 -1
  175. package/build/system/mcp-servers/human-queue.js +1 -1
  176. package/build/system/mcp-servers/knowledge.d.ts +4 -0
  177. package/build/system/mcp-servers/knowledge.js +137 -0
  178. package/build/system/mcp-servers/oauth.js +1 -1
  179. package/build/system/mcp-servers/playwright/browser-lifecycle.js +1 -1
  180. package/build/system/mcp-servers/playwright/index.js +1 -1
  181. package/build/system/mcp-servers/playwright/schemas.d.ts +19 -8
  182. package/build/system/mcp-servers/playwright/schemas.js +3 -0
  183. package/build/system/mcp-servers/playwright/tools-navigation.js +22 -9
  184. package/build/system/mcp-servers/playwright/tools-run-script.js +20 -3
  185. package/build/system/mcp-servers/playwright/vision-helper.d.ts +12 -0
  186. package/build/system/mcp-servers/playwright/vision-helper.js +81 -0
  187. package/build/system/mcp-servers/playwright-cli/helpers.js +2 -2
  188. package/build/system/mcp-servers/playwright-cli/index.js +1 -1
  189. package/build/system/mcp-servers/playwright-cli/schemas.d.ts +28 -28
  190. package/build/system/mcp-servers/playwright-cli/schemas.js +1 -1
  191. package/build/system/mcp-servers/playwright-cli/tools-auth.js +1 -1
  192. package/build/system/mcp-servers/playwright-cli/tools-capture.js +4 -2
  193. package/build/system/mcp-servers/translation.d.ts +14 -0
  194. package/build/system/mcp-servers/translation.js +130 -0
  195. package/build/system/mcp-servers/vision-prompts.d.ts +2 -0
  196. package/build/system/mcp-servers/vision-prompts.js +9 -0
  197. package/build/system/mcp-servers/{document-vision.d.ts → vision.d.ts} +3 -4
  198. package/build/system/mcp-servers/vision.js +221 -0
  199. package/build/system/mcp-servers/workflow-compiler.js +1 -1
  200. package/build/system/mcp-servers/workflow.js +1 -1
  201. package/build/system/seed/index.js +13 -2
  202. package/build/system/seed/server-definitions.d.ts +1954 -322
  203. package/build/system/seed/server-definitions.js +65 -34
  204. package/build/system/seed/tool-manifests-admin.d.ts +1645 -0
  205. package/build/system/seed/tool-manifests-admin.js +45 -0
  206. package/build/system/seed/tool-manifests-browser.d.ts +1 -1
  207. package/build/system/seed/tool-manifests-browser.js +3 -3
  208. package/build/system/seed/tool-manifests-data.d.ts +62 -21
  209. package/build/system/seed/tool-manifests-data.js +55 -17
  210. package/build/system/seed/tool-manifests-knowledge.d.ts +171 -0
  211. package/build/system/seed/tool-manifests-knowledge.js +94 -0
  212. package/build/system/workflows/mcp-deterministic/index.js +1 -1
  213. package/build/system/workflows/mcp-query/activities/discovery.d.ts +2 -20
  214. package/build/system/workflows/mcp-query/activities/discovery.js +5 -163
  215. package/build/system/workflows/mcp-query/activities/llm.d.ts +1 -7
  216. package/build/system/workflows/mcp-query/activities/llm.js +2 -27
  217. package/build/system/workflows/mcp-query/activities/tool-executor.d.ts +0 -4
  218. package/build/system/workflows/mcp-query/activities/tool-executor.js +2 -106
  219. package/build/system/workflows/mcp-query/activities/tool-loader.d.ts +0 -9
  220. package/build/system/workflows/mcp-query/activities/tool-loader.js +2 -87
  221. package/build/system/workflows/mcp-query/index.js +55 -5
  222. package/build/system/workflows/mcp-query/prompts.d.ts +1 -2
  223. package/build/system/workflows/mcp-query/prompts.js +5 -32
  224. package/build/system/workflows/mcp-query/strategy-advisors.d.ts +3 -14
  225. package/build/system/workflows/mcp-query/strategy-advisors.js +4 -107
  226. package/build/system/workflows/mcp-query/types.d.ts +2 -10
  227. package/build/system/workflows/mcp-query/types.js +0 -1
  228. package/build/system/workflows/mcp-query-router/index.js +1 -1
  229. package/build/system/workflows/mcp-triage/index.d.ts +2 -2
  230. package/build/system/workflows/mcp-triage/index.js +39 -7
  231. package/build/system/workflows/mcp-triage/prompts.js +7 -14
  232. package/build/system/workflows/mcp-triage-deterministic/index.js +1 -1
  233. package/build/system/workflows/mcp-triage-router/index.js +1 -1
  234. package/build/system/workflows/shared/discovery.d.ts +35 -0
  235. package/build/system/workflows/shared/discovery.js +175 -0
  236. package/build/system/workflows/shared/index.d.ts +7 -0
  237. package/build/system/workflows/shared/index.js +18 -0
  238. package/build/system/workflows/shared/llm-caller.d.ts +8 -0
  239. package/build/system/workflows/shared/llm-caller.js +31 -0
  240. package/build/system/workflows/shared/prompts.d.ts +2 -0
  241. package/build/system/workflows/shared/prompts.js +32 -0
  242. package/build/system/workflows/shared/strategy-advisors.d.ts +14 -0
  243. package/build/system/workflows/shared/strategy-advisors.js +109 -0
  244. package/build/system/workflows/shared/tool-executor.d.ts +11 -0
  245. package/build/system/workflows/shared/tool-executor.js +111 -0
  246. package/build/system/workflows/shared/tool-loader.d.ts +19 -0
  247. package/build/system/workflows/shared/tool-loader.js +94 -0
  248. package/build/system/workflows/shared/types.d.ts +9 -0
  249. package/build/system/workflows/shared/types.js +2 -0
  250. package/build/system/workflows/tool-result-guard.d.ts +14 -0
  251. package/build/system/workflows/tool-result-guard.js +78 -0
  252. package/build/tsconfig.tsbuildinfo +1 -1
  253. package/build/types/user.d.ts +2 -0
  254. package/build/vitest.config.d.ts +1 -1
  255. package/build/vitest.integration.config.d.ts +1 -1
  256. package/build/workers/index.js +2 -8
  257. package/dashboard/dist/assets/AdminDashboard-CTyAMUJR.js +2 -0
  258. package/dashboard/dist/assets/AdminDashboard-CTyAMUJR.js.map +1 -0
  259. package/dashboard/dist/assets/AvailableEscalationsPage-BMXV3Q4l.js +2 -0
  260. package/dashboard/dist/assets/AvailableEscalationsPage-BMXV3Q4l.js.map +1 -0
  261. package/dashboard/dist/assets/BotPicker-C51nKFEu.js +2 -0
  262. package/dashboard/dist/assets/{BotPicker-D6FYW1Gt.js.map → BotPicker-C51nKFEu.js.map} +1 -1
  263. package/dashboard/dist/assets/CollapsibleSection-BSyfd8uL.js +2 -0
  264. package/dashboard/dist/assets/{CollapsibleSection-Cxk4wvjT.js.map → CollapsibleSection-BSyfd8uL.js.map} +1 -1
  265. package/dashboard/dist/assets/ConfirmDeleteModal-CBdhia5T.js +2 -0
  266. package/dashboard/dist/assets/{ConfirmDeleteModal-FSXyKjaB.js.map → ConfirmDeleteModal-CBdhia5T.js.map} +1 -1
  267. package/dashboard/dist/assets/CopyableId-dGlewBCS.js +2 -0
  268. package/dashboard/dist/assets/{CopyableId-CBdxWfp8.js.map → CopyableId-dGlewBCS.js.map} +1 -1
  269. package/dashboard/dist/assets/CredentialsPage-CoBNFSAu.js +2 -0
  270. package/dashboard/dist/assets/{CredentialsPage-Ikzsot0w.js.map → CredentialsPage-CoBNFSAu.js.map} +1 -1
  271. package/dashboard/dist/assets/CustomDurationPicker-BataWFj8.js +2 -0
  272. package/dashboard/dist/assets/{CustomDurationPicker-CAninCbl.js.map → CustomDurationPicker-BataWFj8.js.map} +1 -1
  273. package/dashboard/dist/assets/DataTable-B3uf5CCo.js +2 -0
  274. package/dashboard/dist/assets/DataTable-B3uf5CCo.js.map +1 -0
  275. package/dashboard/dist/assets/ElapsedCell-G5oSwTpT.js +2 -0
  276. package/dashboard/dist/assets/ElapsedCell-G5oSwTpT.js.map +1 -0
  277. package/dashboard/dist/assets/EmptyState-BChBJNGS.js +2 -0
  278. package/dashboard/dist/assets/{EmptyState-2CmV-IaS.js.map → EmptyState-BChBJNGS.js.map} +1 -1
  279. package/dashboard/dist/assets/EscalationsOverview-CxUv8xjG.js +2 -0
  280. package/dashboard/dist/assets/{EscalationsOverview-GXYFPASS.js.map → EscalationsOverview-CxUv8xjG.js.map} +1 -1
  281. package/dashboard/dist/assets/EventTable-CVt8B0BZ.js +2 -0
  282. package/dashboard/dist/assets/{EventTable-B01oJf6Y.js.map → EventTable-CVt8B0BZ.js.map} +1 -1
  283. package/dashboard/dist/assets/FilterBar-CShf0oe7.js +2 -0
  284. package/dashboard/dist/assets/{FilterBar-Ck4K4rzu.js.map → FilterBar-CShf0oe7.js.map} +1 -1
  285. package/dashboard/dist/assets/McpOverview-CbaZRnJl.js +2 -0
  286. package/dashboard/dist/assets/{McpOverview-JkvRcX2e.js.map → McpOverview-CbaZRnJl.js.map} +1 -1
  287. package/dashboard/dist/assets/McpQueryDetailPage-CGoR9XK6.js +5 -0
  288. package/dashboard/dist/assets/McpQueryDetailPage-CGoR9XK6.js.map +1 -0
  289. package/dashboard/dist/assets/McpQueryPage-BjXoYQuU.js +2 -0
  290. package/dashboard/dist/assets/McpQueryPage-BjXoYQuU.js.map +1 -0
  291. package/dashboard/dist/assets/McpRunDetailPage-DLkA5Aar.js +2 -0
  292. package/dashboard/dist/assets/McpRunDetailPage-DLkA5Aar.js.map +1 -0
  293. package/dashboard/dist/assets/McpRunsPage-DCh9n11D.js +2 -0
  294. package/dashboard/dist/assets/McpRunsPage-DCh9n11D.js.map +1 -0
  295. package/dashboard/dist/assets/Modal-CI5RBPOQ.js +2 -0
  296. package/dashboard/dist/assets/{Modal-B4rbIVAn.js.map → Modal-CI5RBPOQ.js.map} +1 -1
  297. package/dashboard/dist/assets/OperatorDashboard-Dc80suXd.js +2 -0
  298. package/dashboard/dist/assets/OperatorDashboard-Dc80suXd.js.map +1 -0
  299. package/dashboard/dist/assets/PageHeader-SMD9qtOO.js +2 -0
  300. package/dashboard/dist/assets/PageHeader-SMD9qtOO.js.map +1 -0
  301. package/dashboard/dist/assets/PageHeaderWithStats-TikLQsTp.js +2 -0
  302. package/dashboard/dist/assets/PageHeaderWithStats-TikLQsTp.js.map +1 -0
  303. package/dashboard/dist/assets/PriorityBadge-CQ0EsLTA.js +2 -0
  304. package/dashboard/dist/assets/{PriorityBadge-DfQY9St9.js.map → PriorityBadge-CQ0EsLTA.js.map} +1 -1
  305. package/dashboard/dist/assets/ProcessDetailPage-B2GKuGzk.js +2 -0
  306. package/dashboard/dist/assets/ProcessDetailPage-B2GKuGzk.js.map +1 -0
  307. package/dashboard/dist/assets/ProcessesListPage-CTjI3Wn6.js +2 -0
  308. package/dashboard/dist/assets/ProcessesListPage-CTjI3Wn6.js.map +1 -0
  309. package/dashboard/dist/assets/RefreshButton-BcQDObrv.js +2 -0
  310. package/dashboard/dist/assets/RefreshButton-BcQDObrv.js.map +1 -0
  311. package/dashboard/dist/assets/RolePill-Crj4TH5p.js +2 -0
  312. package/dashboard/dist/assets/{RolePill-BTPa8L-P.js.map → RolePill-Crj4TH5p.js.map} +1 -1
  313. package/dashboard/dist/assets/RolesPage-C_RInUwS.js +2 -0
  314. package/dashboard/dist/assets/RolesPage-C_RInUwS.js.map +1 -0
  315. package/dashboard/dist/assets/RowActions-Cp5HyK_w.js +2 -0
  316. package/dashboard/dist/assets/{RowActions-Dg-Fsm5O.js.map → RowActions-Cp5HyK_w.js.map} +1 -1
  317. package/dashboard/dist/assets/RunAsSelector-BhyWtofX.js +2 -0
  318. package/dashboard/dist/assets/RunAsSelector-BhyWtofX.js.map +1 -0
  319. package/dashboard/dist/assets/StatCard-BKZLSgNV.js +2 -0
  320. package/dashboard/dist/assets/{StatCard-DlgF0CJC.js.map → StatCard-BKZLSgNV.js.map} +1 -1
  321. package/dashboard/dist/assets/StatusBadge-BYNGGZK5.js +2 -0
  322. package/dashboard/dist/assets/StatusBadge-BYNGGZK5.js.map +1 -0
  323. package/dashboard/dist/assets/StickyPagination-CTosgiU2.js +2 -0
  324. package/dashboard/dist/assets/{StickyPagination-F9FZsRy9.js.map → StickyPagination-CTosgiU2.js.map} +1 -1
  325. package/dashboard/dist/assets/SwimlaneTimeline-ylG5Ps1s.js +2 -0
  326. package/dashboard/dist/assets/SwimlaneTimeline-ylG5Ps1s.js.map +1 -0
  327. package/dashboard/dist/assets/TaskDetailPage-C9pDGdD2.js +2 -0
  328. package/dashboard/dist/assets/TaskDetailPage-C9pDGdD2.js.map +1 -0
  329. package/dashboard/dist/assets/TaskQueuePill-BtJbZTT0.js +2 -0
  330. package/dashboard/dist/assets/{TaskQueuePill-awmtb0qw.js.map → TaskQueuePill-BtJbZTT0.js.map} +1 -1
  331. package/dashboard/dist/assets/TasksListPage-DtFLUEhg.js +2 -0
  332. package/dashboard/dist/assets/{TasksListPage-C_QF23c1.js.map → TasksListPage-DtFLUEhg.js.map} +1 -1
  333. package/dashboard/dist/assets/TimeAgo-WuM6xImZ.js +2 -0
  334. package/dashboard/dist/assets/TimeAgo-WuM6xImZ.js.map +1 -0
  335. package/dashboard/dist/assets/TimestampCell-IVL_-Upy.js +2 -0
  336. package/dashboard/dist/assets/TimestampCell-IVL_-Upy.js.map +1 -0
  337. package/dashboard/dist/assets/UserName-DU9qeg13.js +2 -0
  338. package/dashboard/dist/assets/{UserName-DaP4YAKr.js.map → UserName-DU9qeg13.js.map} +1 -1
  339. package/dashboard/dist/assets/WorkflowExecutionPage-DOocX81f.js +2 -0
  340. package/dashboard/dist/assets/WorkflowExecutionPage-DOocX81f.js.map +1 -0
  341. package/dashboard/dist/assets/WorkflowPill-Diw8iWBP.js +2 -0
  342. package/dashboard/dist/assets/WorkflowPill-Diw8iWBP.js.map +1 -0
  343. package/dashboard/dist/assets/WorkflowsDashboard-DDtUIrTy.js +2 -0
  344. package/dashboard/dist/assets/WorkflowsDashboard-DDtUIrTy.js.map +1 -0
  345. package/dashboard/dist/assets/WorkflowsOverview-CPuvA4t3.js +2 -0
  346. package/dashboard/dist/assets/{WorkflowsOverview-D9OzzQqw.js.map → WorkflowsOverview-CPuvA4t3.js.map} +1 -1
  347. package/dashboard/dist/assets/YamlWorkflowsPage-DlwwkluN.js +2 -0
  348. package/dashboard/dist/assets/YamlWorkflowsPage-DlwwkluN.js.map +1 -0
  349. package/dashboard/dist/assets/{bots-BkKVMbUW.js → bots-BPiZXf2h.js} +2 -2
  350. package/dashboard/dist/assets/{bots-BkKVMbUW.js.map → bots-BPiZXf2h.js.map} +1 -1
  351. package/dashboard/dist/assets/constants-BHkpVaqx.js +2 -0
  352. package/dashboard/dist/assets/constants-BHkpVaqx.js.map +1 -0
  353. package/dashboard/dist/assets/escalation-DTY_OKRh.js +2 -0
  354. package/dashboard/dist/assets/escalation-DTY_OKRh.js.map +1 -0
  355. package/dashboard/dist/assets/escalation-columns-C91fHSkp.js +2 -0
  356. package/dashboard/dist/assets/{escalation-columns-D6aqStaY.js.map → escalation-columns-C91fHSkp.js.map} +1 -1
  357. package/dashboard/dist/assets/helpers-DBUZ9pnG.js +2 -0
  358. package/dashboard/dist/assets/helpers-DBUZ9pnG.js.map +1 -0
  359. package/dashboard/dist/assets/index-BOeA-gfK.js +17 -0
  360. package/dashboard/dist/assets/{index-X85K5bHC.js.map → index-BOeA-gfK.js.map} +1 -1
  361. package/dashboard/dist/assets/index-BZ6K_kmL.js +3 -0
  362. package/dashboard/dist/assets/index-BZ6K_kmL.js.map +1 -0
  363. package/dashboard/dist/assets/index-Bpm0yeoi.js +2 -0
  364. package/dashboard/dist/assets/index-Bpm0yeoi.js.map +1 -0
  365. package/dashboard/dist/assets/index-BtOwLI0K.js +2 -0
  366. package/dashboard/dist/assets/{index-DTPzZr_X.js.map → index-BtOwLI0K.js.map} +1 -1
  367. package/dashboard/dist/assets/index-CBF3ZvRZ.js +6 -0
  368. package/dashboard/dist/assets/index-CBF3ZvRZ.js.map +1 -0
  369. package/dashboard/dist/assets/index-CDWOfCmi.js +2 -0
  370. package/dashboard/dist/assets/index-CDWOfCmi.js.map +1 -0
  371. package/dashboard/dist/assets/index-Ce6sL__n.js +2 -0
  372. package/dashboard/dist/assets/index-Ce6sL__n.js.map +1 -0
  373. package/dashboard/dist/assets/index-DSzSoku1.js +283 -0
  374. package/dashboard/dist/assets/index-DSzSoku1.js.map +1 -0
  375. package/dashboard/dist/assets/index-D_qEAYrg.js +2 -0
  376. package/dashboard/dist/assets/index-D_qEAYrg.js.map +1 -0
  377. package/dashboard/dist/assets/index-gCy9XX3W.css +1 -0
  378. package/dashboard/dist/assets/mcp-BzVpaaKF.js +2 -0
  379. package/dashboard/dist/assets/{mcp-blCW6IL7.js.map → mcp-BzVpaaKF.js.map} +1 -1
  380. package/dashboard/dist/assets/mcp-query-wTuxTTCV.js +2 -0
  381. package/dashboard/dist/assets/mcp-query-wTuxTTCV.js.map +1 -0
  382. package/dashboard/dist/assets/{mcp-runs-ChPbpvXK.js → mcp-runs-DmXYJD19.js} +2 -2
  383. package/dashboard/dist/assets/{mcp-runs-ChPbpvXK.js.map → mcp-runs-DmXYJD19.js.map} +1 -1
  384. package/dashboard/dist/assets/namespaces-DoGa7jc7.js +2 -0
  385. package/dashboard/dist/assets/{namespaces-BgbaC3ow.js.map → namespaces-DoGa7jc7.js.map} +1 -1
  386. package/dashboard/dist/assets/{roles-ZNrqqnQl.js → roles-wCdQ2Z7k.js} +2 -2
  387. package/dashboard/dist/assets/{roles-ZNrqqnQl.js.map → roles-wCdQ2Z7k.js.map} +1 -1
  388. package/dashboard/dist/assets/settings-DDe_L7JT.js +2 -0
  389. package/dashboard/dist/assets/{settings-eBRSE0mQ.js.map → settings-DDe_L7JT.js.map} +1 -1
  390. package/dashboard/dist/assets/tasks-3Hih8Bt7.js +2 -0
  391. package/dashboard/dist/assets/{tasks-tRqClPns.js.map → tasks-3Hih8Bt7.js.map} +1 -1
  392. package/dashboard/dist/assets/{useFilterParams-BaXUAkYK.js → useFilterParams-BUyLHcx_.js} +2 -2
  393. package/dashboard/dist/assets/{useFilterParams-BaXUAkYK.js.map → useFilterParams-BUyLHcx_.js.map} +1 -1
  394. package/dashboard/dist/assets/{useNatsEvents-Xr43X1fG.js → useNatsEvents-DeGKHFTX.js} +2 -2
  395. package/dashboard/dist/assets/{useNatsEvents-Xr43X1fG.js.map → useNatsEvents-DeGKHFTX.js.map} +1 -1
  396. package/dashboard/dist/assets/{useYamlActivityEvents-BO51u8tm.js → useYamlActivityEvents-B5dHec6Y.js} +2 -2
  397. package/dashboard/dist/assets/{useYamlActivityEvents-BO51u8tm.js.map → useYamlActivityEvents-B5dHec6Y.js.map} +1 -1
  398. package/dashboard/dist/assets/{users-tMvNyOo8.js → users-BTagPmGW.js} +2 -2
  399. package/dashboard/dist/assets/{users-tMvNyOo8.js.map → users-BTagPmGW.js.map} +1 -1
  400. package/dashboard/dist/assets/{vendor-icons-ZTAKVwGc.js → vendor-icons-DCLlGYO9.js} +112 -57
  401. package/dashboard/dist/assets/vendor-icons-DCLlGYO9.js.map +1 -0
  402. package/dashboard/dist/assets/vendor-query-DLp59M9_.js +35 -0
  403. package/dashboard/dist/assets/vendor-query-DLp59M9_.js.map +1 -0
  404. package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js +26 -0
  405. package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js.map +1 -0
  406. package/dashboard/dist/assets/{workflows-Cc4VHcrp.js → workflows-B20dR3NE.js} +2 -2
  407. package/dashboard/dist/assets/{workflows-Cc4VHcrp.js.map → workflows-B20dR3NE.js.map} +1 -1
  408. package/dashboard/dist/assets/yaml-workflows-CaLPMQha.js +2 -0
  409. package/dashboard/dist/assets/yaml-workflows-CaLPMQha.js.map +1 -0
  410. package/dashboard/dist/index.html +5 -5
  411. package/docs/api/dba.md +81 -0
  412. package/docs/api/escalations.md +575 -0
  413. package/docs/api/exports.md +170 -0
  414. package/docs/api/maintenance.md +93 -0
  415. package/docs/api/mcp-runs.md +128 -0
  416. package/docs/api/mcp-servers.md +195 -0
  417. package/docs/api/namespaces.md +48 -0
  418. package/docs/api/roles.md +390 -0
  419. package/docs/api/service-accounts.md +188 -0
  420. package/docs/api/settings.md +33 -0
  421. package/docs/api/tasks.md +167 -0
  422. package/docs/api/users.md +180 -0
  423. package/docs/api/workflows.md +616 -0
  424. package/docs/api/yaml-workflows.md +312 -0
  425. package/docs/architecture.md +221 -0
  426. package/docs/auth.md +181 -0
  427. package/docs/cloud.md +272 -0
  428. package/docs/compilation.md +136 -0
  429. package/docs/contributing.md +56 -0
  430. package/docs/dashboard.md +145 -0
  431. package/docs/data.md +478 -0
  432. package/docs/escalation-strategies.md +264 -0
  433. package/docs/events.md +251 -0
  434. package/docs/iam.md +222 -0
  435. package/docs/img/01-login.png +0 -0
  436. package/docs/img/02-dashboard-home.png +0 -0
  437. package/docs/img/03-processes-list.png +0 -0
  438. package/docs/img/04-escalations-list.png +0 -0
  439. package/docs/img/05-mcp-servers.png +0 -0
  440. package/docs/img/06-mcp-pipelines.png +0 -0
  441. package/docs/img/07-workflows-list.png +0 -0
  442. package/docs/img/compilation/01-query-submit.png +0 -0
  443. package/docs/img/compilation/02-mcp-servers.png +0 -0
  444. package/docs/img/compilation/03-query-completed.png +0 -0
  445. package/docs/img/compilation/04-wizard-original.png +0 -0
  446. package/docs/img/compilation/05-wizard-timeline.png +0 -0
  447. package/docs/img/compilation/06-wizard-profile.png +0 -0
  448. package/docs/img/compilation/07-wizard-deploy.png +0 -0
  449. package/docs/img/compilation/08-wizard-test-modal.png +0 -0
  450. package/docs/img/compilation/09-wizard-test-compare.png +0 -0
  451. package/docs/img/compilation/10-wizard-verify.png +0 -0
  452. package/docs/logging.md +110 -0
  453. package/docs/maintenance.md +221 -0
  454. package/docs/mcp.md +715 -0
  455. package/docs/oauth-and-delegation.md +469 -0
  456. package/docs/telemetry.md +144 -0
  457. package/docs/workflows.md +695 -0
  458. package/lib/db/schemas/015_knowledge.sql +23 -0
  459. package/package.json +8 -9
  460. package/build/services/db/index.d.ts +0 -3
  461. package/build/services/mcp/vision-server.d.ts +0 -15
  462. package/build/services/mcp/vision-server.js +0 -214
  463. package/build/system/mcp-servers/document-vision.js +0 -228
  464. package/build/system/mcp-servers/prompts.d.ts +0 -4
  465. package/build/system/mcp-servers/prompts.js +0 -10
  466. package/dashboard/dist/assets/AdminDashboard-jfacvOC7.js +0 -2
  467. package/dashboard/dist/assets/AdminDashboard-jfacvOC7.js.map +0 -1
  468. package/dashboard/dist/assets/AvailableEscalationsPage-BglLDoT8.js +0 -2
  469. package/dashboard/dist/assets/AvailableEscalationsPage-BglLDoT8.js.map +0 -1
  470. package/dashboard/dist/assets/BotPicker-D6FYW1Gt.js +0 -2
  471. package/dashboard/dist/assets/CollapsibleSection-Cxk4wvjT.js +0 -2
  472. package/dashboard/dist/assets/ConfirmDeleteModal-FSXyKjaB.js +0 -2
  473. package/dashboard/dist/assets/CopyableId-CBdxWfp8.js +0 -2
  474. package/dashboard/dist/assets/CredentialsPage-Ikzsot0w.js +0 -2
  475. package/dashboard/dist/assets/CustomDurationPicker-CAninCbl.js +0 -2
  476. package/dashboard/dist/assets/DataTable-BDn1WBHS.js +0 -2
  477. package/dashboard/dist/assets/DataTable-BDn1WBHS.js.map +0 -1
  478. package/dashboard/dist/assets/EmptyState-2CmV-IaS.js +0 -2
  479. package/dashboard/dist/assets/EscalationsOverview-GXYFPASS.js +0 -2
  480. package/dashboard/dist/assets/EventTable-B01oJf6Y.js +0 -2
  481. package/dashboard/dist/assets/Field-DuFBAYhu.js +0 -2
  482. package/dashboard/dist/assets/Field-DuFBAYhu.js.map +0 -1
  483. package/dashboard/dist/assets/FilterBar-Ck4K4rzu.js +0 -2
  484. package/dashboard/dist/assets/McpOverview-JkvRcX2e.js +0 -2
  485. package/dashboard/dist/assets/McpQueryDetailPage-CUMqhQdS.js +0 -2
  486. package/dashboard/dist/assets/McpQueryDetailPage-CUMqhQdS.js.map +0 -1
  487. package/dashboard/dist/assets/McpQueryPage-DRRhw4nN.js +0 -2
  488. package/dashboard/dist/assets/McpQueryPage-DRRhw4nN.js.map +0 -1
  489. package/dashboard/dist/assets/McpRunDetailPage-CmPs5EvE.js +0 -2
  490. package/dashboard/dist/assets/McpRunDetailPage-CmPs5EvE.js.map +0 -1
  491. package/dashboard/dist/assets/McpRunsPage-Dl5Y2u6k.js +0 -2
  492. package/dashboard/dist/assets/McpRunsPage-Dl5Y2u6k.js.map +0 -1
  493. package/dashboard/dist/assets/Modal-B4rbIVAn.js +0 -2
  494. package/dashboard/dist/assets/OperatorDashboard-B56il28q.js +0 -2
  495. package/dashboard/dist/assets/OperatorDashboard-B56il28q.js.map +0 -1
  496. package/dashboard/dist/assets/PageHeader-CpWFly5S.js +0 -2
  497. package/dashboard/dist/assets/PageHeader-CpWFly5S.js.map +0 -1
  498. package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js +0 -2
  499. package/dashboard/dist/assets/ProcessDetailPage-CMLq4M7D.js +0 -2
  500. package/dashboard/dist/assets/ProcessDetailPage-CMLq4M7D.js.map +0 -1
  501. package/dashboard/dist/assets/ProcessesListPage-CZ_HF06v.js +0 -2
  502. package/dashboard/dist/assets/ProcessesListPage-CZ_HF06v.js.map +0 -1
  503. package/dashboard/dist/assets/RolePill-BTPa8L-P.js +0 -2
  504. package/dashboard/dist/assets/RolesPage-9grZW7yR.js +0 -2
  505. package/dashboard/dist/assets/RolesPage-9grZW7yR.js.map +0 -1
  506. package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js +0 -2
  507. package/dashboard/dist/assets/SimpleMarkdown-CBlvaWP4.js +0 -4
  508. package/dashboard/dist/assets/SimpleMarkdown-CBlvaWP4.js.map +0 -1
  509. package/dashboard/dist/assets/StatCard-DlgF0CJC.js +0 -2
  510. package/dashboard/dist/assets/StatusBadge-TlC4jiig.js +0 -2
  511. package/dashboard/dist/assets/StatusBadge-TlC4jiig.js.map +0 -1
  512. package/dashboard/dist/assets/StickyPagination-F9FZsRy9.js +0 -2
  513. package/dashboard/dist/assets/SwimlaneTimeline-7SiwATsZ.js +0 -2
  514. package/dashboard/dist/assets/SwimlaneTimeline-7SiwATsZ.js.map +0 -1
  515. package/dashboard/dist/assets/TaskDetailPage-CbPVTakt.js +0 -2
  516. package/dashboard/dist/assets/TaskDetailPage-CbPVTakt.js.map +0 -1
  517. package/dashboard/dist/assets/TaskQueuePill-awmtb0qw.js +0 -2
  518. package/dashboard/dist/assets/TasksListPage-C_QF23c1.js +0 -2
  519. package/dashboard/dist/assets/TimeAgo-UPG6DoH8.js +0 -2
  520. package/dashboard/dist/assets/TimeAgo-UPG6DoH8.js.map +0 -1
  521. package/dashboard/dist/assets/TimestampCell-DoWMKg6w.js +0 -2
  522. package/dashboard/dist/assets/TimestampCell-DoWMKg6w.js.map +0 -1
  523. package/dashboard/dist/assets/UserName-DaP4YAKr.js +0 -2
  524. package/dashboard/dist/assets/VersionHistory-Bt7WBr6m.js +0 -5
  525. package/dashboard/dist/assets/VersionHistory-Bt7WBr6m.js.map +0 -1
  526. package/dashboard/dist/assets/WorkflowExecutionPage-DjtAQ3hy.js +0 -2
  527. package/dashboard/dist/assets/WorkflowExecutionPage-DjtAQ3hy.js.map +0 -1
  528. package/dashboard/dist/assets/WorkflowPill-CCDSVaQj.js +0 -2
  529. package/dashboard/dist/assets/WorkflowPill-CCDSVaQj.js.map +0 -1
  530. package/dashboard/dist/assets/WorkflowsDashboard-D8z9uBNB.js +0 -2
  531. package/dashboard/dist/assets/WorkflowsDashboard-D8z9uBNB.js.map +0 -1
  532. package/dashboard/dist/assets/WorkflowsOverview-D9OzzQqw.js +0 -2
  533. package/dashboard/dist/assets/YamlWorkflowDetailPage-DrDvvP62.js +0 -3
  534. package/dashboard/dist/assets/YamlWorkflowDetailPage-DrDvvP62.js.map +0 -1
  535. package/dashboard/dist/assets/YamlWorkflowsPage-COqiNCQK.js +0 -2
  536. package/dashboard/dist/assets/YamlWorkflowsPage-COqiNCQK.js.map +0 -1
  537. package/dashboard/dist/assets/constants-CgaZfe5d.js +0 -2
  538. package/dashboard/dist/assets/constants-CgaZfe5d.js.map +0 -1
  539. package/dashboard/dist/assets/escalation-columns-D6aqStaY.js +0 -2
  540. package/dashboard/dist/assets/escalation-qalymbKB.js +0 -2
  541. package/dashboard/dist/assets/escalation-qalymbKB.js.map +0 -1
  542. package/dashboard/dist/assets/format-gXZXQ-HJ.js +0 -2
  543. package/dashboard/dist/assets/format-gXZXQ-HJ.js.map +0 -1
  544. package/dashboard/dist/assets/helpers-0gSleuzT.js +0 -2
  545. package/dashboard/dist/assets/helpers-0gSleuzT.js.map +0 -1
  546. package/dashboard/dist/assets/index-BWvMHed7.js +0 -6
  547. package/dashboard/dist/assets/index-BWvMHed7.js.map +0 -1
  548. package/dashboard/dist/assets/index-BaszoPO_.css +0 -1
  549. package/dashboard/dist/assets/index-Cn2jyj9A.js +0 -2
  550. package/dashboard/dist/assets/index-Cn2jyj9A.js.map +0 -1
  551. package/dashboard/dist/assets/index-D8VH6K8B.js +0 -54
  552. package/dashboard/dist/assets/index-D8VH6K8B.js.map +0 -1
  553. package/dashboard/dist/assets/index-D9SYwJsi.js +0 -3
  554. package/dashboard/dist/assets/index-D9SYwJsi.js.map +0 -1
  555. package/dashboard/dist/assets/index-DTPzZr_X.js +0 -2
  556. package/dashboard/dist/assets/index-D_6AB5BE.js +0 -2
  557. package/dashboard/dist/assets/index-D_6AB5BE.js.map +0 -1
  558. package/dashboard/dist/assets/index-S9Ks2Lj2.js +0 -2
  559. package/dashboard/dist/assets/index-S9Ks2Lj2.js.map +0 -1
  560. package/dashboard/dist/assets/index-X85K5bHC.js +0 -17
  561. package/dashboard/dist/assets/index-rjmgHlSH.js +0 -2
  562. package/dashboard/dist/assets/index-rjmgHlSH.js.map +0 -1
  563. package/dashboard/dist/assets/mcp-blCW6IL7.js +0 -2
  564. package/dashboard/dist/assets/mcp-query-DoAyPbjC.js +0 -2
  565. package/dashboard/dist/assets/mcp-query-DoAyPbjC.js.map +0 -1
  566. package/dashboard/dist/assets/namespaces-BgbaC3ow.js +0 -2
  567. package/dashboard/dist/assets/settings-eBRSE0mQ.js +0 -2
  568. package/dashboard/dist/assets/tasks-tRqClPns.js +0 -2
  569. package/dashboard/dist/assets/vendor-icons-ZTAKVwGc.js.map +0 -1
  570. package/dashboard/dist/assets/vendor-query-B2UbickB.js +0 -18
  571. package/dashboard/dist/assets/vendor-query-B2UbickB.js.map +0 -1
  572. package/dashboard/dist/assets/vendor-react-Cw8Gy8NJ.js +0 -22
  573. package/dashboard/dist/assets/vendor-react-Cw8Gy8NJ.js.map +0 -1
  574. package/dashboard/dist/assets/yaml-workflows-BL4V5CQy.js +0 -2
  575. package/dashboard/dist/assets/yaml-workflows-BL4V5CQy.js.map +0 -1
  576. /package/build/{services → lib}/db/migrate.d.ts +0 -0
  577. /package/build/{services → lib}/events/index.d.ts +0 -0
  578. /package/build/{services → lib}/events/index.js +0 -0
  579. /package/build/{services → lib}/events/memory.d.ts +0 -0
  580. /package/build/{services → lib}/events/memory.js +0 -0
  581. /package/build/{services → lib}/events/nats.d.ts +0 -0
  582. /package/build/{services → lib}/events/nats.js +0 -0
  583. /package/build/{services → lib}/events/publish.d.ts +0 -0
  584. /package/build/{services → lib}/events/publish.js +0 -0
  585. /package/build/{services → lib}/events/socketio.d.ts +0 -0
  586. /package/build/{services → lib}/events/socketio.js +0 -0
  587. /package/build/{services → lib}/logger/index.d.ts +0 -0
  588. /package/build/{services → lib}/logger/index.js +0 -0
  589. /package/build/{services → lib}/logger/pino.d.ts +0 -0
  590. /package/build/{services → lib}/logger/pino.js +0 -0
  591. /package/build/{services → lib}/storage/index.d.ts +0 -0
  592. /package/build/{services → lib}/storage/index.js +0 -0
  593. /package/build/{services → lib}/storage/local.d.ts +0 -0
  594. /package/build/{services → lib}/storage/local.js +0 -0
  595. /package/build/{services → lib}/storage/s3.d.ts +0 -0
  596. /package/build/{services → lib}/storage/s3.js +0 -0
  597. /package/build/{services → lib}/storage/types.d.ts +0 -0
  598. /package/build/{services → lib}/storage/types.js +0 -0
  599. /package/build/{services → lib}/telemetry/index.d.ts +0 -0
  600. /package/build/{services → lib}/telemetry/index.js +0 -0
  601. /package/{services → lib}/db/README.md +0 -0
  602. /package/{services → lib}/db/schemas/001_schema.sql +0 -0
  603. /package/{services → lib}/db/schemas/002_seed.sql +0 -0
  604. /package/{services → lib}/db/schemas/003_workflow_discovery.sql +0 -0
  605. /package/{services → lib}/db/schemas/004_query_router.sql +0 -0
  606. /package/{services → lib}/db/schemas/005_triage_router.sql +0 -0
  607. /package/{services → lib}/db/schemas/006_oauth.sql +0 -0
  608. /package/{services → lib}/db/schemas/007_security.sql +0 -0
  609. /package/{services → lib}/db/schemas/008_bot_accounts.sql +0 -0
  610. /package/{services → lib}/db/schemas/009_audit_trail.sql +0 -0
  611. /package/{services → lib}/db/schemas/010_credential_providers.sql +0 -0
  612. /package/{services → lib}/db/schemas/011_system_workflow_configs.sql +0 -0
  613. /package/{services → lib}/db/schemas/012_drop_modality.sql +0 -0
  614. /package/{services → lib}/db/schemas/013_execute_as.sql +0 -0
  615. /package/{services → lib}/db/schemas/014_ephemeral_credentials.sql +0 -0
@@ -0,0 +1,3 @@
1
+ import{j as e,h as $,J as W,c as Q,C as xe,k as be,t as Ne,e as he,g as fe,v as ve}from"./index-DSzSoku1.js";import{a as p}from"./vendor-query-DLp59M9_.js";import{a as ge}from"./roles-wCdQ2Z7k.js";import{P as Ee}from"./PageHeader-SMD9qtOO.js";import{C as K}from"./CollapsibleSection-BSyfd8uL.js";import{C as ae,i as De,a as je}from"./escalation-DTY_OKRh.js";import{u as Ve}from"./workflows-B20dR3NE.js";import{u as ye}from"./settings-DDe_L7JT.js";import{e as Ce}from"./useNatsEvents-DeGKHFTX.js";import{L as se,e as Re,c as we}from"./vendor-react-Co3Y8ikm.js";import{U as te}from"./UserName-DU9qeg13.js";import{u as ke,C as Se}from"./CustomDurationPicker-BataWFj8.js";import{S as _e}from"./StatusBadge-BYNGGZK5.js";import{R as Ae}from"./RolePill-Crj4TH5p.js";import{C as R}from"./CopyableId-dGlewBCS.js";import{D as Te,U as Be,K as X}from"./vendor-icons-DCLlGYO9.js";import"./users-BTagPmGW.js";import"./constants-BHkpVaqx.js";function q({children:a}){return e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1.5",children:a},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:17,columnNumber:5},this)}function Pe({payload:a,isTerminal:t,resolverPayload:o,onRetryTriage:s,isRetrying:n}){const r=a.title,u=a.summary,m=a.diagnosis,c=a.tool_calls_made,d=a.result,l=o==null?void 0:o._lt,g=(l==null?void 0:l.triaged)===!0,E=l==null?void 0:l.triageWorkflowId,x=t&&g,[N,h]=p.useState(!1);return x?e.jsxDEV("div",{className:"rounded-md border border-status-success/30 bg-surface-raised",children:[e.jsxDEV("div",{className:"flex items-center justify-between px-4 py-3 border-b border-surface-border",children:[e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("svg",{className:"w-4 h-4 text-status-success shrink-0",viewBox:"0 0 16 16",fill:"currentColor",children:e.jsxDEV("path",{d:"M8 1a7 7 0 110 14A7 7 0 018 1zm3.36 4.65a.5.5 0 00-.72 0L7 9.29 5.36 7.65a.5.5 0 10-.72.7l2 2a.5.5 0 00.72 0l4-4a.5.5 0 000-.7z"},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:44,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:43,columnNumber:13},this),e.jsxDEV("span",{className:"text-xs font-medium text-status-success",children:"Resolved by AI Triage"},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:46,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:42,columnNumber:11},this),typeof c=="number"&&e.jsxDEV("span",{className:"text-[10px] font-mono px-2 py-0.5 rounded-full bg-status-success/10 text-status-success",children:[c," tool calls used"]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:49,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:41,columnNumber:9},this),e.jsxDEV("div",{className:"px-4 py-4 space-y-4",children:[r&&e.jsxDEV("p",{className:"text-sm font-medium text-text-primary",children:r},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:58,columnNumber:13},this),m&&e.jsxDEV("div",{children:[e.jsxDEV(q,{children:"Triage diagnosis"},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:63,columnNumber:15},this),e.jsxDEV("div",{className:"text-xs text-text-primary leading-relaxed",children:e.jsxDEV($,{content:m},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:65,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:64,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:62,columnNumber:13},this),e.jsxDEV("div",{className:"flex items-center gap-3",children:E&&e.jsxDEV(se,{to:`/workflows/executions/${E}`,className:"text-[10px] text-accent hover:underline",children:"View triage execution"},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:72,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:70,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:56,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:39,columnNumber:7},this):e.jsxDEV("div",{className:"rounded-md border border-status-warning/30 bg-surface-raised",children:[e.jsxDEV("div",{className:"flex items-center justify-between px-4 py-3 border-b border-surface-border",children:[e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("svg",{className:"w-4 h-4 text-status-warning shrink-0",viewBox:"0 0 16 16",fill:"currentColor",children:e.jsxDEV("path",{d:"M8 1a7 7 0 110 14A7 7 0 018 1zm0 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 4zm0 7a.75.75 0 100-1.5.75.75 0 000 1.5z"},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:92,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:91,columnNumber:11},this),e.jsxDEV("span",{className:"text-xs font-medium text-status-warning",children:"Tool Rounds Exhausted"},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:94,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:90,columnNumber:9},this),typeof c=="number"&&e.jsxDEV("span",{className:"text-[10px] font-mono px-2 py-0.5 rounded-full bg-status-warning/10 text-status-warning",children:[c," tool calls used"]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:97,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:89,columnNumber:7},this),e.jsxDEV("div",{className:"px-4 py-4 space-y-4",children:[r&&e.jsxDEV("p",{className:"text-sm font-medium text-text-primary",children:r},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:106,columnNumber:11},this),u&&e.jsxDEV("div",{children:[e.jsxDEV(q,{children:"What happened"},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:111,columnNumber:13},this),e.jsxDEV("div",{className:"text-xs text-text-secondary leading-relaxed",children:e.jsxDEV($,{content:u},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:113,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:112,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:110,columnNumber:11},this),m&&e.jsxDEV("div",{children:[e.jsxDEV(q,{children:"What went wrong"},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:120,columnNumber:13},this),e.jsxDEV("div",{className:"text-xs text-text-primary leading-relaxed",children:e.jsxDEV($,{content:m},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:122,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:121,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:119,columnNumber:11},this),d!=null&&e.jsxDEV("div",{children:[e.jsxDEV("button",{onClick:()=>h(!N),className:"flex items-center gap-1 text-[10px] font-semibold uppercase tracking-widest text-text-tertiary hover:text-text-secondary transition-colors",children:[e.jsxDEV("svg",{className:`w-3 h-3 transition-transform ${N?"rotate-90":""}`,viewBox:"0 0 12 12",fill:"currentColor",children:e.jsxDEV("path",{d:"M4.5 2l4 4-4 4"},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:134,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:133,columnNumber:15},this),"Partial results"]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:129,columnNumber:13},this),N&&e.jsxDEV("div",{className:"mt-2",children:e.jsxDEV(W,{data:d,defaultMode:"tree"},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:140,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:139,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:128,columnNumber:11},this),s&&!t&&e.jsxDEV("div",{className:"pt-2",children:e.jsxDEV("button",{onClick:s,disabled:n,className:"inline-flex items-center gap-2 px-4 py-2 text-xs font-medium bg-accent text-text-inverse rounded-md hover:bg-accent/90 disabled:opacity-50 disabled:cursor-not-allowed transition-colors",children:[e.jsxDEV("svg",{className:"w-3.5 h-3.5",viewBox:"0 0 14 14",fill:"currentColor",children:e.jsxDEV("path",{d:"M7 1a6 6 0 100 12A6 6 0 007 1zm2.5 6.5l-3.5 2V5.5l3.5 2z"},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:154,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:153,columnNumber:15},this),n?"Sending to triage...":"Retry with AI Triage"]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:148,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:147,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:104,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/RoundsExhaustedContext.tsx",lineNumber:87,columnNumber:5},this)}function Fe({triage:a,payload:t}){const o=a.confidence??0,s=o>=.8?"text-status-success":o>=.5?"text-status-pending":"text-status-error",n=He(a.originalData,t);return e.jsxDEV("div",{className:"space-y-5",children:[a.diagnosis&&e.jsxDEV("p",{className:"text-sm text-text-primary leading-relaxed",children:a.diagnosis},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:37,columnNumber:9},this),e.jsxDEV("div",{className:"flex flex-wrap items-center gap-3 text-xs text-text-tertiary",children:[a.tool_calls_made!=null&&e.jsxDEV("span",{children:[a.tool_calls_made," tool call",a.tool_calls_made!==1?"s":""]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:44,columnNumber:11},this),a.tool_calls_made!=null&&e.jsxDEV("span",{className:"text-text-quaternary",children:"·"},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:46,columnNumber:44},this),e.jsxDEV("span",{className:`font-medium ${s}`,children:[Math.round(o*100),"% confidence"]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:47,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:42,columnNumber:7},this),a.actions_taken&&a.actions_taken.length>0&&e.jsxDEV("div",{className:"flex flex-wrap gap-1.5",children:a.actions_taken.map((r,u)=>e.jsxDEV("span",{className:`inline-flex items-center gap-1.5 px-2 py-0.5 text-[11px]
2
+ text-text-secondary`,children:[e.jsxDEV("svg",{className:"w-3 h-3 text-status-success shrink-0",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2.5,children:e.jsxDEV("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M5 13l4 4L19 7"},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:61,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:60,columnNumber:15},this),r]},u,!0,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:55,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:53,columnNumber:9},this),a.recommendation&&e.jsxDEV("p",{className:"text-[11px] text-text-tertiary italic",children:a.recommendation},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:70,columnNumber:9},this),n.length>0&&e.jsxDEV("div",{className:"space-y-4 pt-2",children:n.map(r=>e.jsxDEV(Me,{diff:r},r.key,!1,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:79,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:77,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:34,columnNumber:5},this)}function He(a,t){if(!a)return[];const o=[];for(const s of Object.keys(a)){if(s.startsWith("_"))continue;const n=a[s],r=t[s];r!==void 0&&JSON.stringify(n)!==JSON.stringify(r)&&o.push({key:s,label:s.replace(/[_-]/g," "),original:n,corrected:r})}return o}function Me({diff:a}){const t=Z(a.original),o=Z(a.corrected);return t!==null&&o!==null?e.jsxDEV("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-x-8 gap-y-3",children:[e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:[a.label," ",e.jsxDEV("span",{className:"normal-case font-normal",children:"(original)"},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:130,columnNumber:26},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:129,columnNumber:11},this),e.jsxDEV("p",{className:"text-sm text-text-tertiary leading-relaxed line-through decoration-text-tertiary/30",children:t},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:132,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:128,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:[a.label," ",e.jsxDEV("span",{className:"normal-case font-normal text-status-success",children:"(corrected)"},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:138,columnNumber:26},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:137,columnNumber:11},this),e.jsxDEV("p",{className:"text-sm text-text-primary leading-relaxed",children:o},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:140,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:136,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:127,columnNumber:7},this):e.jsxDEV("div",{className:"space-y-3",children:[e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:[a.label," ",e.jsxDEV("span",{className:"normal-case font-normal",children:"(original)"},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:153,columnNumber:24},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:152,columnNumber:9},this),e.jsxDEV("pre",{className:"text-xs text-text-tertiary font-mono whitespace-pre-wrap leading-relaxed",children:typeof a.original=="object"?JSON.stringify(a.original,null,2):String(a.original)},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:155,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:151,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:[a.label," ",e.jsxDEV("span",{className:"normal-case font-normal text-status-success",children:"(corrected)"},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:161,columnNumber:24},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:160,columnNumber:9},this),e.jsxDEV("pre",{className:"text-xs text-text-primary font-mono whitespace-pre-wrap leading-relaxed",children:typeof a.corrected=="object"?JSON.stringify(a.corrected,null,2):String(a.corrected)},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:163,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:159,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/TriageContext.tsx",lineNumber:150,columnNumber:5},this)}function Z(a){return a==null?"null":typeof a=="string"?a:typeof a=="number"||typeof a=="boolean"?String(a):null}function Ie(a){const{mode:t,activeView:o,onActiveViewChange:s,onClaim:n,claimPending:r,workflowType:u,json:m,onResolve:c,resolvePending:d,resolveError:l,requestTriage:g,triageNotes:E,currentRole:x,escalationTargets:N,onEscalate:h,escalatePending:D,escalateError:j,onRelease:w,releasePending:k,assignedTo:P,assignedUntil:O}=a,J=ke(),[F,L]=p.useState("30"),[f,S]=p.useState(0),[H,_]=p.useState(""),[A,M]=p.useState(""),v=F==="custom",U=p.useCallback(i=>S(i),[]);if(t==="terminal")return null;const T=()=>{const i=v?f:parseInt(F);!i||i<=0||n(i)},V=()=>{if(_(""),g){const I={_lt:{needsTriage:!0}};E.trim()&&(I.notes=E.trim()),c(I);return}let i;try{i=JSON.parse(m)}catch{_("Invalid JSON");return}c(i)},y=i=>`text-xs transition-colors ${i?"text-accent font-medium":"text-text-tertiary hover:text-accent"}`;return e.jsxDEV("div",{className:"sticky h-[80px] bg-surface/95 backdrop-blur-sm border-t border-surface-border -mx-10 px-10 pt-3 pb-5 z-10",style:{bottom:"calc(var(--feed-height, 0px) - 8px)"},"data-testid":"escalation-action-bar",children:[t==="available"&&e.jsxDEV("div",{"data-testid":"claim-bar",children:[e.jsxDEV("div",{className:"flex items-center gap-4 mb-2",children:[J.map(i=>e.jsxDEV("button",{onClick:()=>{L(i.value),S(0)},className:y(!v&&F===i.value),children:i.label},i.value,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:120,columnNumber:17},this)),e.jsxDEV("button",{onClick:()=>L("custom"),className:y(v),children:"Other"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:128,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:118,columnNumber:13},this),e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV("div",{className:"flex-1"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:137,columnNumber:15},this),v&&e.jsxDEV(Se,{onChange:U,compact:!0,autoFocus:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:139,columnNumber:17},this),e.jsxDEV("button",{onClick:T,disabled:r||v&&f<=0,className:"btn-primary text-xs",children:r?"Claiming...":"Claim"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:141,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:136,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:116,columnNumber:11},this),t==="claimed_by_other"&&e.jsxDEV("div",{className:"flex items-center gap-4","data-testid":"claimed-other-bar",children:[e.jsxDEV("p",{className:"text-sm text-text-secondary",children:["Claimed by ",e.jsxDEV("span",{className:"font-medium text-text-primary",children:P?e.jsxDEV(te,{userId:P},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:156,columnNumber:88},this):"unknown"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:156,columnNumber:26},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:155,columnNumber:13},this),O&&e.jsxDEV(ae,{until:O},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:158,columnNumber:31},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:154,columnNumber:11},this),t==="claimed_by_me"&&e.jsxDEV("div",{"data-testid":"action-bar",children:[e.jsxDEV("div",{className:"flex items-center gap-4 mb-2",children:[e.jsxDEV("button",{onClick:()=>s("resolve"),className:y(o==="resolve"),children:u?"Resolve":"Acknowledge"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:167,columnNumber:15},this),N.length>0&&e.jsxDEV("button",{onClick:()=>s("escalate"),className:y(o==="escalate"),children:"Escalate"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:174,columnNumber:17},this),e.jsxDEV("button",{onClick:()=>s("release"),className:`text-xs transition-colors ${o==="release"?"text-status-error font-medium":"text-text-tertiary hover:text-status-error"}`,children:"Release"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:181,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:166,columnNumber:13},this),o==="resolve"&&(u?e.jsxDEV("div",{className:"flex items-center gap-4",children:[e.jsxDEV("div",{className:"flex-1"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:193,columnNumber:19},this),H&&e.jsxDEV("span",{className:"text-xs text-status-error",children:H},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:195,columnNumber:34},this),l&&e.jsxDEV("span",{className:"text-xs text-status-error",children:l.message},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:196,columnNumber:36},this),e.jsxDEV("button",{onClick:V,disabled:d,className:"btn-primary text-xs",children:d?"Submitting...":g?"Send to Triage":"Submit"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:198,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:192,columnNumber:17},this):e.jsxDEV("div",{className:"flex items-center",children:[e.jsxDEV("span",{className:"text-xs text-text-secondary",children:"Notification — acknowledge to resolve"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:208,columnNumber:19},this),e.jsxDEV("div",{className:"flex-1"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:209,columnNumber:19},this),l&&e.jsxDEV("span",{className:"text-xs text-status-error mr-3",children:l.message},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:210,columnNumber:36},this),e.jsxDEV("button",{onClick:()=>c({acknowledged:!0}),disabled:d,className:"btn-primary text-xs",children:d?"Acknowledging...":"Acknowledge"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:211,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:207,columnNumber:17},this)),o==="escalate"&&e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV("span",{className:"text-xs text-text-secondary",children:["From ",e.jsxDEV("span",{className:"font-medium text-text-primary",children:x},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:226,columnNumber:24},this)," to"]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:225,columnNumber:17},this),e.jsxDEV("select",{value:A,onChange:i=>M(i.target.value),className:"select text-xs","data-testid":"escalate-select",children:[e.jsxDEV("option",{value:"",children:"Select role..."},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:234,columnNumber:19},this),N.map(i=>e.jsxDEV("option",{value:i,children:i},i,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:236,columnNumber:21},this))]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:228,columnNumber:17},this),e.jsxDEV("div",{className:"flex-1"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:239,columnNumber:17},this),j&&e.jsxDEV("span",{className:"text-xs text-status-error",children:j.message},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:240,columnNumber:35},this),e.jsxDEV("button",{onClick:()=>h(A),disabled:!A||D,className:"btn-primary text-xs",children:D?"Escalating...":"Escalate"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:241,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:224,columnNumber:15},this),o==="release"&&e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV("span",{className:"text-xs text-text-secondary",children:"Release back to pool?"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:254,columnNumber:17},this),e.jsxDEV("div",{className:"flex-1"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:255,columnNumber:17},this),e.jsxDEV("button",{onClick:()=>s("resolve"),className:"btn-secondary text-xs",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:256,columnNumber:17},this),e.jsxDEV("button",{onClick:w,disabled:k,className:"btn-primary text-xs bg-status-error hover:bg-status-error/80",children:k?"Releasing...":"Yes, Release"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:259,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:253,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:164,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationActionBar.tsx",lineNumber:112,columnNumber:5},this)}function Oe({esc:a,claimedByMe:t,claimed:o,isTerminal:s,traceUrl:n}){const[r,u]=p.useState(!1),m=De(a);return e.jsxDEV(e.Fragment,{children:[e.jsxDEV("div",{className:"flex items-center gap-3 mb-2",children:[m&&e.jsxDEV(Te,{className:"w-5 h-5 text-text-tertiary shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:33,columnNumber:19},this),e.jsxDEV("p",{className:"text-[1.5rem] leading-snug font-light text-text-secondary",children:[a.type,a.subtype?` / ${a.subtype}`:""]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:34,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:32,columnNumber:7},this),a.description&&e.jsxDEV("p",{className:"text-sm leading-relaxed text-text-tertiary mb-4",children:a.description},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:41,columnNumber:9},this),e.jsxDEV("div",{className:"flex flex-wrap items-end gap-x-6 gap-y-3 mt-4 mb-2",children:[e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1.5",children:"Status"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:50,columnNumber:11},this),e.jsxDEV("span",{className:"mb-1 inline-block",children:e.jsxDEV(_e,{status:a.status},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:51,columnNumber:47},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:51,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:49,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1.5",children:"Role"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:56,columnNumber:11},this),e.jsxDEV(Ae,{role:a.role,size:"md"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:57,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:55,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1.5",children:"Created"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:62,columnNumber:11},this),e.jsxDEV("span",{className:"inline-flex items-center mb-1 text-xs text-text-secondary",children:e.jsxDEV(Q,{date:a.created_at},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:64,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:63,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:61,columnNumber:9},this),a.assigned_to&&e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1.5",children:"Claimed by"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:71,columnNumber:13},this),e.jsxDEV("span",{className:"inline-flex items-center gap-1.5 text-xs font-medium text-text-primary",children:[e.jsxDEV(Be,{className:"w-3 h-3 shrink-0 text-accent/75"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:73,columnNumber:15},this),e.jsxDEV(te,{userId:a.assigned_to},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:74,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:72,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:70,columnNumber:11},this),o&&!s&&a.assigned_until&&e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1.5",children:"Time left"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:82,columnNumber:13},this),e.jsxDEV("span",{className:"inline-flex items-center h-5",children:e.jsxDEV(ae,{until:a.assigned_until},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:83,columnNumber:60},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:83,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:81,columnNumber:11},this),a.resolved_at&&e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1.5",children:"Resolved"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:90,columnNumber:13},this),e.jsxDEV("span",{className:"inline-flex items-center h-5 text-xs text-text-secondary",children:e.jsxDEV(Q,{date:a.resolved_at},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:92,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:91,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:89,columnNumber:11},this),e.jsxDEV("div",{children:e.jsxDEV("button",{onClick:()=>u(!r),className:"inline-flex items-center gap-1 h-5 text-xs text-text-tertiary hover:text-accent transition-colors",children:["Details",e.jsxDEV("svg",{className:`w-3 h-3 transition-transform duration-200 ${r?"rotate-180":""}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:e.jsxDEV("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:108,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:104,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:99,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:98,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:47,columnNumber:7},this),e.jsxDEV(xe,{open:r,children:e.jsxDEV("div",{className:"mt-4 bg-surface-raised border border-surface-border rounded-md p-4 flex flex-wrap gap-x-8 gap-y-4",children:[e.jsxDEV("div",{className:"text-left",children:[e.jsxDEV("span",{className:"text-[11px] font-medium text-text-secondary uppercase tracking-wide",children:"Priority"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:117,columnNumber:13},this),e.jsxDEV("p",{className:"text-[12px] text-text-primary mt-0.5",children:["P",a.priority]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:118,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:116,columnNumber:11},this),e.jsxDEV(R,{label:"Escalation ID",value:a.id},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:120,columnNumber:11},this),a.task_id&&e.jsxDEV(R,{label:"Task",value:a.task_id,href:`/workflows/tasks/detail/${a.task_id}`},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:122,columnNumber:13},this),e.jsxDEV(R,{label:"Workflow",value:a.workflow_type},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:124,columnNumber:11},this),e.jsxDEV(R,{label:"Workflow ID",value:a.workflow_id},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:125,columnNumber:11},this),e.jsxDEV(R,{label:"Task Queue",value:a.task_queue},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:126,columnNumber:11},this),a.origin_id&&a.origin_id!==a.workflow_id&&e.jsxDEV(R,{label:"Origin",value:a.origin_id},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:128,columnNumber:13},this),a.trace_id&&e.jsxDEV(R,{label:"Trace",value:a.trace_id,href:n?n.replace("{traceId}",a.trace_id):void 0,external:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:131,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:115,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:114,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationHero.tsx",lineNumber:30,columnNumber:5},this)}function Je({value:a,onChange:t}){const[o,s]=p.useState({}),[n,r]=p.useState({}),[u,m]=p.useState(null),[c,d]=p.useState(!1);p.useEffect(()=>{try{const x=JSON.parse(a);if(typeof x=="object"&&x!==null&&!Array.isArray(x)){const N={},h={};for(const[D,j]of Object.entries(x))D.startsWith("_")?h[D]=j:N[D]=j;s(N),r(h),m(h._form_schema&&typeof h._form_schema=="object"?h._form_schema:null),d(!1)}}catch{d(!0)}},[a]);const l=p.useCallback(x=>{s(x),t(JSON.stringify({...x,...n},null,2))},[n,t]),g=p.useCallback((x,N)=>{l({...o,[x]:N})},[o,l]);if(c)return e.jsxDEV("p",{className:"text-xs text-status-error",children:"Unable to parse resolver data as form. Use the JSON editor below."},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:66,columnNumber:7},this);const E=Object.entries(o);return E.length===0?e.jsxDEV("p",{className:"text-xs text-text-tertiary italic",children:"No resolver fields defined."},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:75,columnNumber:7},this):e.jsxDEV("div",{className:"space-y-4",children:E.map(([x,N])=>e.jsxDEV(oe,{fieldKey:x,value:N,onChange:h=>g(x,h),schema:u},x,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:84,columnNumber:9},this))},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:82,columnNumber:5},this)}function oe({fieldKey:a,value:t,onChange:o,schema:s}){var u;const n=a.replace(/[_-]/g," "),r=(u=s==null?void 0:s.properties)==null?void 0:u[a];if(typeof t=="boolean")return e.jsxDEV("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsxDEV("input",{type:"checkbox",checked:t,onChange:m=>o(m.target.checked),className:"w-3.5 h-3.5 rounded accent-accent"},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:113,columnNumber:9},this),e.jsxDEV("span",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:n},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:119,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:112,columnNumber:7},this);if(typeof t=="number")return e.jsxDEV("div",{children:[e.jsxDEV(C,{children:n},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:130,columnNumber:9},this),e.jsxDEV("input",{type:"number",value:t,onChange:m=>o(parseFloat(m.target.value)||0),step:"any",className:"input text-sm w-full mt-1"},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:131,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:129,columnNumber:7},this);if(typeof t=="string"){const m=(r==null?void 0:r.format)==="password",c=r==null?void 0:r.enum,d=r==null?void 0:r.description;return c!=null&&c.length?e.jsxDEV("div",{children:[e.jsxDEV(C,{children:n},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:151,columnNumber:11},this),d&&e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-0.5",children:d},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:152,columnNumber:26},this),e.jsxDEV("select",{value:t,onChange:l=>o(l.target.value),className:"input text-sm w-full mt-1",children:c.map(l=>e.jsxDEV("option",{value:l,children:l},l,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:159,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:153,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:150,columnNumber:9},this):m?e.jsxDEV("div",{children:[e.jsxDEV(C,{children:n},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:169,columnNumber:11},this),d&&e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-0.5",children:d},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:170,columnNumber:26},this),e.jsxDEV("input",{type:"password",value:t,onChange:l=>o(l.target.value),className:"input text-sm w-full mt-1",autoComplete:"off"},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:171,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:168,columnNumber:9},this):t.length>80?e.jsxDEV("div",{children:[e.jsxDEV(C,{children:n},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:185,columnNumber:11},this),d&&e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-0.5",children:d},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:186,columnNumber:26},this),e.jsxDEV("textarea",{value:t,onChange:l=>o(l.target.value),className:"input text-sm w-full mt-1 leading-relaxed",rows:Math.min(6,Math.ceil(t.length/60))},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:187,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:184,columnNumber:9},this):e.jsxDEV("div",{children:[e.jsxDEV(C,{children:n},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:198,columnNumber:9},this),d&&e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-0.5",children:d},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:199,columnNumber:24},this),e.jsxDEV("input",{type:"text",value:t,onChange:l=>o(l.target.value),className:"input text-sm w-full mt-1"},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:200,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:197,columnNumber:7},this)}if(t===null)return e.jsxDEV("div",{children:[e.jsxDEV(C,{children:n},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:214,columnNumber:9},this),e.jsxDEV("p",{className:"text-xs text-text-tertiary italic mt-1",children:"null"},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:215,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:213,columnNumber:7},this);if(Array.isArray(t))return e.jsxDEV("div",{children:[e.jsxDEV(C,{children:n},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:224,columnNumber:9},this),e.jsxDEV("div",{className:"flex flex-wrap gap-1.5 mt-1",children:t.map((m,c)=>e.jsxDEV("span",{className:"px-2 py-0.5 text-[11px] font-mono bg-surface-sunken rounded text-text-secondary",children:String(m)},c,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:227,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:225,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:223,columnNumber:7},this);if(typeof t=="object"){const m=Object.entries(t);return e.jsxDEV("div",{children:[e.jsxDEV(C,{children:n},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:244,columnNumber:9},this),e.jsxDEV("div",{className:"ml-4 mt-2 pl-4 border-l border-accent-faint space-y-3",children:m.map(([c,d])=>e.jsxDEV(oe,{fieldKey:c,value:d,onChange:l=>o({...t,[c]:l})},c,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:247,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:245,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:243,columnNumber:7},this)}return null}function C({children:a}){return e.jsxDEV("label",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:a},void 0,!1,{fileName:"/app/dashboard/src/components/escalation/ResolverForm.tsx",lineNumber:264,columnNumber:5},this)}function Le({json:a,onJsonChange:t,requestTriage:o,onRequestTriageChange:s,triageNotes:n,onTriageNotesChange:r}){const[u,m]=p.useState("form");return e.jsxDEV(e.Fragment,{children:[e.jsxDEV("div",{className:"flex items-center justify-between mb-3",children:[o?e.jsxDEV("button",{onClick:()=>s(!1),className:"group flex items-center gap-2 text-left","data-testid":"triage-cancel",children:[e.jsxDEV("span",{className:"flex items-center justify-center w-5 h-5 rounded-full bg-accent/10 text-accent shrink-0",children:e.jsxDEV("svg",{className:"w-3 h-3",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:e.jsxDEV("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/ResolverSection.tsx",lineNumber:33,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/ResolverSection.tsx",lineNumber:32,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/ResolverSection.tsx",lineNumber:31,columnNumber:13},this),e.jsxDEV("span",{className:"text-xs text-text-secondary group-hover:text-text-primary transition-colors",children:["AI Triage active."," ",e.jsxDEV("span",{className:"text-accent group-hover:underline",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/ResolverSection.tsx",lineNumber:38,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/ResolverSection.tsx",lineNumber:36,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/ResolverSection.tsx",lineNumber:26,columnNumber:11},this):e.jsxDEV("button",{onClick:()=>s(!0),className:"group flex items-center gap-2.5 text-left my-4","data-testid":"triage-callout",children:[e.jsxDEV("span",{className:"flex items-center justify-center w-6 h-6 rounded-full bg-accent/10 text-accent shrink-0 animate-[triage-glow_6s_ease-in-out_infinite]",children:e.jsxDEV("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:e.jsxDEV("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.663 17h4.674M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/ResolverSection.tsx",lineNumber:49,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/ResolverSection.tsx",lineNumber:48,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/ResolverSection.tsx",lineNumber:47,columnNumber:13},this),e.jsxDEV("span",{className:"text-[13px] text-text-secondary group-hover:text-text-primary transition-colors",children:["This form doesn't capture the issue?"," ",e.jsxDEV("span",{className:"text-accent group-hover:underline",children:"Request AI Triage"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/ResolverSection.tsx",lineNumber:54,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/ResolverSection.tsx",lineNumber:52,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/ResolverSection.tsx",lineNumber:42,columnNumber:11},this),!o&&e.jsxDEV("button",{onClick:()=>m(u==="form"?"json":"form"),className:"text-[10px] text-text-tertiary hover:text-accent transition-colors",children:u==="form"?"Raw JSON":"Form"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/ResolverSection.tsx",lineNumber:60,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/ResolverSection.tsx",lineNumber:24,columnNumber:7},this),e.jsxDEV("div",{className:"relative min-h-[200px]",children:[e.jsxDEV("div",{className:o?"pointer-events-none select-none":"",children:u==="form"?e.jsxDEV(Je,{value:a,onChange:t},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/ResolverSection.tsx",lineNumber:73,columnNumber:13},this):e.jsxDEV("textarea",{value:a,onChange:c=>t(c.target.value),className:"input font-mono text-xs w-full",rows:8,spellCheck:!1,"data-testid":"resolve-json"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/ResolverSection.tsx",lineNumber:75,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/ResolverSection.tsx",lineNumber:71,columnNumber:9},this),o&&e.jsxDEV("div",{className:"absolute inset-0 z-10 flex flex-col bg-surface/90 backdrop-blur-[2px] rounded-md border border-accent/20 p-5","data-testid":"triage-overlay",children:[e.jsxDEV("p",{className:"text-xs text-text-secondary mb-3 leading-relaxed",children:"The resolution form will not be submitted. Describe the issue so AI triage can diagnose and fix it using available tools. The corrected result will come back as a new escalation for your review."},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/ResolverSection.tsx",lineNumber:92,columnNumber:13},this),e.jsxDEV("textarea",{value:n,onChange:c=>r(c.target.value),placeholder:"e.g. Content is in Spanish — needs translation to English before review...",className:"input text-xs w-full flex-1 min-h-[80px] resize-none",autoFocus:!0,"data-testid":"triage-notes"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/ResolverSection.tsx",lineNumber:98,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/ResolverSection.tsx",lineNumber:88,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/ResolverSection.tsx",lineNumber:69,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/ResolverSection.tsx",lineNumber:22,columnNumber:5},this)}function ee(a){if(!a)return null;try{return JSON.parse(a)}catch{return a}}function ze(a){if(!a)return!1;try{const t=JSON.parse(a);return!!(t&&typeof t=="object"&&t._triage)}catch{return!1}}function na(){var Y,G;const{id:a}=Re(),{user:t}=be(),o=we(),{data:s,isLoading:n}=Ne(a);Ce(a);const r=he(),u=fe(),m=ve(),{data:c}=ge((s==null?void 0:s.role)??""),{data:d}=Ve(),{data:l}=ye(),g=d==null?void 0:d.find(b=>b.workflow_type===(s==null?void 0:s.workflow_type)),E=((Y=l==null?void 0:l.telemetry)==null?void 0:Y.traceUrl)??null,[x,N]=p.useState("resolve"),[h,D]=p.useState("{}"),[j,w]=p.useState({context:!1}),k=b=>w(B=>({...B,[b]:!B[b]})),[P,O]=p.useState(!1),[J,F]=p.useState(""),L=(g==null?void 0:g.resolver_schema)??null,f=((G=s==null?void 0:s.metadata)==null?void 0:G.form_schema)??null,S=f??L;p.useEffect(()=>{if(f){const b={_form_schema:f},B=f.properties;if(B&&typeof B=="object")for(const[de,ue]of Object.entries(B)){const pe=ue;b[de]=pe.default??""}D(JSON.stringify(b,null,2))}else D(S?JSON.stringify(S,null,2):"{}")},[S,f]);const H=ze(s==null?void 0:s.escalation_payload),_=(s==null?void 0:s.subtype)==="rounds_exhausted",A=(s==null?void 0:s.subtype)==="wait_for_human";if(p.useEffect(()=>{(H||_)&&w(b=>({...b,context:!0})),A&&f&&w(b=>({...b,context:!0,resolver:!1}))},[H,_,A,f]),n)return e.jsxDEV("div",{className:"animate-pulse space-y-8",children:[e.jsxDEV("div",{className:"h-8 bg-surface-sunken rounded w-64"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:113,columnNumber:9},this),e.jsxDEV("div",{className:"h-32 bg-surface-sunken rounded w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:114,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:112,columnNumber:7},this);if(!s)return e.jsxDEV("p",{className:"text-sm text-text-secondary",children:"Escalation not found."},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:120,columnNumber:12},this);const M=je(s),v=M&&s.assigned_to===(t==null?void 0:t.userId),U=M&&!v,T=s.status==="resolved"||s.status==="cancelled",V=ee(s.escalation_payload),y=ee(s.resolver_payload),i=typeof V=="object"&&V!==null&&!Array.isArray(V)?V:null,I=i==null?void 0:i._triage,re=T?"terminal":v?"claimed_by_me":U?"claimed_by_other":"available",ie=b=>{r.mutate({id:s.id,durationMinutes:b}),w({context:!0,triage:!0,resolver:!1})},z=()=>o(-1),le=async b=>{await u.mutateAsync({id:s.id,resolverPayload:b}),z()},ne=async b=>{b&&(await m.mutateAsync({id:s.id,targetRole:b}),z())},ce=async()=>{v||await r.mutateAsync({id:s.id,durationMinutes:30});const b=(i==null?void 0:i.diagnosis)||s.description||"";await u.mutateAsync({id:s.id,resolverPayload:{_lt:{needsTriage:!0},notes:b}}),z()},me=async()=>{await r.mutateAsync({id:s.id,durationMinutes:0}),z()};return e.jsxDEV("div",{className:"min-h-[calc(100vh-9rem)] flex flex-col",children:[e.jsxDEV(Ee,{title:"Escalation"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:183,columnNumber:7},this),e.jsxDEV(Oe,{esc:s,claimedByMe:v,claimed:M,isTerminal:T,traceUrl:E},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:185,columnNumber:7},this),_&&i&&e.jsxDEV("div",{className:"mt-8",children:e.jsxDEV(Pe,{payload:i,isTerminal:T,resolverPayload:y,onRetryTriage:ce,isRetrying:r.isPending||u.isPending},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:196,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:195,columnNumber:9},this),(i==null?void 0:i.category)==="missing_credential"&&e.jsxDEV("div",{className:"mt-8 bg-status-warning/10 border border-status-warning/30 rounded-md px-5 py-4 flex items-start gap-3",children:[e.jsxDEV(X,{size:20,className:"text-status-warning mt-0.5 shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:209,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-sm font-medium text-text-primary mb-1",children:"Missing Credential"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:211,columnNumber:13},this),e.jsxDEV("p",{className:"text-xs text-text-secondary mb-3",children:["This workflow requires a ",e.jsxDEV("span",{className:"font-medium capitalize",children:String(i.provider)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:213,columnNumber:40},this)," credential to continue. Register one and then resolve this escalation to retry."]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:212,columnNumber:13},this),e.jsxDEV(se,{to:"/credentials",className:"btn-primary text-xs inline-flex items-center gap-1.5",children:[e.jsxDEV(X,{size:12},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:220,columnNumber:15},this),"Go to Credentials"]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:216,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:210,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:208,columnNumber:9},this),e.jsxDEV("div",{className:"mt-8 space-y-6",children:[e.jsxDEV(K,{title:"Input / Output",sectionKey:"context",isCollapsed:j.context??!0,onToggle:k,contentClassName:"mt-4 ml-9",children:e.jsxDEV("div",{className:"space-y-6",children:[e.jsxDEV("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[s.envelope&&e.jsxDEV("div",{children:e.jsxDEV(W,{data:s.envelope,label:"Input Envelope"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:242,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:241,columnNumber:17},this),V!=null&&e.jsxDEV("div",{children:e.jsxDEV(W,{data:V,label:"Escalation Context"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:247,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:246,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:239,columnNumber:13},this),y!=null&&e.jsxDEV("div",{className:"max-w-xl",children:e.jsxDEV(W,{data:y,label:"Resolver Payload"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:254,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:253,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:238,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:231,columnNumber:9},this),I&&i&&e.jsxDEV(K,{title:"AI Triage",sectionKey:"triage",isCollapsed:!!j.triage,onToggle:k,contentClassName:"mt-4 ml-9",children:e.jsxDEV(Fe,{triage:I,payload:i},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:269,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:262,columnNumber:11},this),!T&&v&&x==="resolve"&&(s.workflow_type||f)&&e.jsxDEV(K,{title:"Submit Your Resolution",sectionKey:"resolver",isCollapsed:!!j.resolver,onToggle:k,contentClassName:"mt-4 ml-9",children:e.jsxDEV(Le,{json:h,onJsonChange:D,requestTriage:P,onRequestTriageChange:O,triageNotes:J,onTriageNotesChange:F},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:282,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:275,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:228,columnNumber:7},this),e.jsxDEV("div",{className:"flex-1"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:294,columnNumber:7},this),e.jsxDEV(Ie,{mode:re,activeView:x,onActiveViewChange:N,onClaim:ie,claimPending:r.isPending,workflowType:s.workflow_type,json:h,onResolve:le,resolvePending:u.isPending,resolveError:u.error,requestTriage:P,triageNotes:J,currentRole:s.role,escalationTargets:(c==null?void 0:c.targets)??[],onEscalate:ne,escalatePending:m.isPending,escalateError:m.error,onRelease:me,releasePending:r.isPending,assignedTo:s.assigned_to,assignedUntil:s.assigned_until},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:296,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/escalation-detail/EscalationDetailPage.tsx",lineNumber:182,columnNumber:5},this)}export{na as EscalationDetailPage};
3
+ //# sourceMappingURL=index-BZ6K_kmL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-BZ6K_kmL.js","sources":["../../src/components/escalation/RoundsExhaustedContext.tsx","../../src/components/escalation/TriageContext.tsx","../../src/pages/operator/escalation-detail/EscalationActionBar.tsx","../../src/pages/operator/escalation-detail/EscalationHero.tsx","../../src/components/escalation/ResolverForm.tsx","../../src/pages/operator/escalation-detail/ResolverSection.tsx","../../src/pages/operator/escalation-detail/EscalationDetailPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { JsonViewer } from '../common/data/JsonViewer';\nimport { SimpleMarkdown } from '../common/display/SimpleMarkdown';\n\ninterface RoundsExhaustedContextProps {\n payload: Record<string, unknown>;\n isTerminal?: boolean;\n resolverPayload?: Record<string, unknown> | null;\n onRetryTriage?: () => void;\n isRetrying?: boolean;\n}\n\nfunction SectionLabel({ children }: { children: React.ReactNode }) {\n return (\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1.5\">{children}</p>\n );\n}\n\nexport function RoundsExhaustedContext({ payload, isTerminal, resolverPayload, onRetryTriage, isRetrying }: RoundsExhaustedContextProps) {\n const title = payload.title as string | undefined;\n const summary = payload.summary as string | undefined;\n const diagnosis = payload.diagnosis as string | undefined;\n const toolCalls = payload.tool_calls_made as number | undefined;\n const result = payload.result as Record<string, unknown> | null | undefined;\n\n // Detect triage resolution\n const ltMeta = resolverPayload?._lt as Record<string, unknown> | undefined;\n const wasTriaged = ltMeta?.triaged === true;\n const triageWorkflowId = ltMeta?.triageWorkflowId as string | undefined;\n const isResolvedByTriage = isTerminal && wasTriaged;\n\n const [showResult, setShowResult] = useState(false);\n\n // Resolved by triage — show success state\n if (isResolvedByTriage) {\n return (\n <div className=\"rounded-md border border-status-success/30 bg-surface-raised\">\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-surface-border\">\n <div className=\"flex items-center gap-2\">\n <svg className=\"w-4 h-4 text-status-success shrink-0\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M8 1a7 7 0 110 14A7 7 0 018 1zm3.36 4.65a.5.5 0 00-.72 0L7 9.29 5.36 7.65a.5.5 0 10-.72.7l2 2a.5.5 0 00.72 0l4-4a.5.5 0 000-.7z\" />\n </svg>\n <span className=\"text-xs font-medium text-status-success\">Resolved by AI Triage</span>\n </div>\n {typeof toolCalls === 'number' && (\n <span className=\"text-[10px] font-mono px-2 py-0.5 rounded-full bg-status-success/10 text-status-success\">\n {toolCalls} tool calls used\n </span>\n )}\n </div>\n\n {/* Body */}\n <div className=\"px-4 py-4 space-y-4\">\n {title && (\n <p className=\"text-sm font-medium text-text-primary\">{title}</p>\n )}\n\n {diagnosis && (\n <div>\n <SectionLabel>Triage diagnosis</SectionLabel>\n <div className=\"text-xs text-text-primary leading-relaxed\">\n <SimpleMarkdown content={diagnosis} />\n </div>\n </div>\n )}\n\n <div className=\"flex items-center gap-3\">\n {triageWorkflowId && (\n <Link\n to={`/workflows/executions/${triageWorkflowId}`}\n className=\"text-[10px] text-accent hover:underline\"\n >\n View triage execution\n </Link>\n )}\n </div>\n </div>\n </div>\n );\n }\n\n // Default: warning state\n return (\n <div className=\"rounded-md border border-status-warning/30 bg-surface-raised\">\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-surface-border\">\n <div className=\"flex items-center gap-2\">\n <svg className=\"w-4 h-4 text-status-warning shrink-0\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M8 1a7 7 0 110 14A7 7 0 018 1zm0 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 4zm0 7a.75.75 0 100-1.5.75.75 0 000 1.5z\" />\n </svg>\n <span className=\"text-xs font-medium text-status-warning\">Tool Rounds Exhausted</span>\n </div>\n {typeof toolCalls === 'number' && (\n <span className=\"text-[10px] font-mono px-2 py-0.5 rounded-full bg-status-warning/10 text-status-warning\">\n {toolCalls} tool calls used\n </span>\n )}\n </div>\n\n {/* Body */}\n <div className=\"px-4 py-4 space-y-4\">\n {title && (\n <p className=\"text-sm font-medium text-text-primary\">{title}</p>\n )}\n\n {summary && (\n <div>\n <SectionLabel>What happened</SectionLabel>\n <div className=\"text-xs text-text-secondary leading-relaxed\">\n <SimpleMarkdown content={summary} />\n </div>\n </div>\n )}\n\n {diagnosis && (\n <div>\n <SectionLabel>What went wrong</SectionLabel>\n <div className=\"text-xs text-text-primary leading-relaxed\">\n <SimpleMarkdown content={diagnosis} />\n </div>\n </div>\n )}\n\n {result != null && (\n <div>\n <button\n onClick={() => setShowResult(!showResult)}\n className=\"flex items-center gap-1 text-[10px] font-semibold uppercase tracking-widest text-text-tertiary hover:text-text-secondary transition-colors\"\n >\n <svg className={`w-3 h-3 transition-transform ${showResult ? 'rotate-90' : ''}`} viewBox=\"0 0 12 12\" fill=\"currentColor\">\n <path d=\"M4.5 2l4 4-4 4\" />\n </svg>\n Partial results\n </button>\n {showResult && (\n <div className=\"mt-2\">\n <JsonViewer data={result} defaultMode=\"tree\" />\n </div>\n )}\n </div>\n )}\n\n {onRetryTriage && !isTerminal && (\n <div className=\"pt-2\">\n <button\n onClick={onRetryTriage}\n disabled={isRetrying}\n className=\"inline-flex items-center gap-2 px-4 py-2 text-xs font-medium bg-accent text-text-inverse rounded-md hover:bg-accent/90 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n >\n <svg className=\"w-3.5 h-3.5\" viewBox=\"0 0 14 14\" fill=\"currentColor\">\n <path d=\"M7 1a6 6 0 100 12A6 6 0 007 1zm2.5 6.5l-3.5 2V5.5l3.5 2z\" />\n </svg>\n {isRetrying ? 'Sending to triage...' : 'Retry with AI Triage'}\n </button>\n </div>\n )}\n </div>\n </div>\n );\n}\n","interface TriageData {\n diagnosis?: string;\n actions_taken?: string[];\n tool_calls_made?: number;\n confidence?: number;\n recommendation?: string;\n correctedData?: Record<string, unknown>;\n originalData?: Record<string, unknown>;\n}\n\ntype Diff = { key: string; label: string; original: unknown; corrected: unknown };\n\n/**\n * Renders a triage summary when escalation payload contains `_triage`.\n *\n * Fully generic — no knowledge of workflow types or field semantics.\n * Diffs `_triage.originalData` against the payload to detect changes.\n * Follows the unboxed section pattern used throughout the dashboard.\n */\nexport function TriageContext({ triage, payload }: {\n triage: TriageData;\n payload: Record<string, unknown>;\n}) {\n const confidence = triage.confidence ?? 0;\n const confidenceColor =\n confidence >= 0.8 ? 'text-status-success' :\n confidence >= 0.5 ? 'text-status-pending' :\n 'text-status-error';\n\n // Generic diff: compare originalData fields to current payload\n const diffs = computeDiffs(triage.originalData, payload);\n\n return (\n <div className=\"space-y-5\">\n {/* Diagnosis + metadata — unboxed, natural flow */}\n {triage.diagnosis && (\n <p className=\"text-sm text-text-primary leading-relaxed\">\n {triage.diagnosis}\n </p>\n )}\n\n <div className=\"flex flex-wrap items-center gap-3 text-xs text-text-tertiary\">\n {triage.tool_calls_made != null && (\n <span>{triage.tool_calls_made} tool call{triage.tool_calls_made !== 1 ? 's' : ''}</span>\n )}\n {triage.tool_calls_made != null && <span className=\"text-text-quaternary\">&middot;</span>}\n <span className={`font-medium ${confidenceColor}`}>\n {Math.round(confidence * 100)}% confidence\n </span>\n </div>\n\n {triage.actions_taken && triage.actions_taken.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5\">\n {triage.actions_taken.map((action, i) => (\n <span\n key={i}\n className=\"inline-flex items-center gap-1.5 px-2 py-0.5 text-[11px]\n text-text-secondary\"\n >\n <svg className=\"w-3 h-3 text-status-success shrink-0\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2.5}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n {action}\n </span>\n ))}\n </div>\n )}\n\n {triage.recommendation && (\n <p className=\"text-[11px] text-text-tertiary italic\">\n {triage.recommendation}\n </p>\n )}\n\n {/* Generic before/after diffs — separated by subtle dividers */}\n {diffs.length > 0 && (\n <div className=\"space-y-4 pt-2\">\n {diffs.map((diff) => (\n <DiffRow key={diff.key} diff={diff} />\n ))}\n </div>\n )}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Generic diff computation\n// ---------------------------------------------------------------------------\n\nfunction computeDiffs(\n original: Record<string, unknown> | undefined,\n current: Record<string, unknown>,\n): Diff[] {\n if (!original) return [];\n\n const diffs: Diff[] = [];\n for (const key of Object.keys(original)) {\n if (key.startsWith('_')) continue;\n const origVal = original[key];\n const currVal = current[key];\n if (currVal === undefined) continue;\n\n if (JSON.stringify(origVal) !== JSON.stringify(currVal)) {\n diffs.push({\n key,\n label: key.replace(/[_-]/g, ' '),\n original: origVal,\n corrected: currVal,\n });\n }\n }\n return diffs;\n}\n\n// ---------------------------------------------------------------------------\n// Diff row — clean, unboxed before/after\n// ---------------------------------------------------------------------------\n\nfunction DiffRow({ diff }: { diff: Diff }) {\n const origStr = renderValue(diff.original);\n const corrStr = renderValue(diff.corrected);\n\n // Both are primitives — side by side with subtle separator\n if (origStr !== null && corrStr !== null) {\n return (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-x-8 gap-y-3\">\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n {diff.label} <span className=\"normal-case font-normal\">(original)</span>\n </p>\n <p className=\"text-sm text-text-tertiary leading-relaxed line-through decoration-text-tertiary/30\">\n {origStr}\n </p>\n </div>\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n {diff.label} <span className=\"normal-case font-normal text-status-success\">(corrected)</span>\n </p>\n <p className=\"text-sm text-text-primary leading-relaxed\">\n {corrStr}\n </p>\n </div>\n </div>\n );\n }\n\n // Complex values — stacked\n return (\n <div className=\"space-y-3\">\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n {diff.label} <span className=\"normal-case font-normal\">(original)</span>\n </p>\n <pre className=\"text-xs text-text-tertiary font-mono whitespace-pre-wrap leading-relaxed\">\n {typeof diff.original === 'object' ? JSON.stringify(diff.original, null, 2) : String(diff.original)}\n </pre>\n </div>\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n {diff.label} <span className=\"normal-case font-normal text-status-success\">(corrected)</span>\n </p>\n <pre className=\"text-xs text-text-primary font-mono whitespace-pre-wrap leading-relaxed\">\n {typeof diff.corrected === 'object' ? JSON.stringify(diff.corrected, null, 2) : String(diff.corrected)}\n </pre>\n </div>\n </div>\n );\n}\n\n/** Render a value as a string if it's a primitive, null otherwise */\nfunction renderValue(val: unknown): string | null {\n if (val === null || val === undefined) return 'null';\n if (typeof val === 'string') return val;\n if (typeof val === 'number' || typeof val === 'boolean') return String(val);\n return null;\n}\n","import { useState, useCallback } from 'react';\nimport { CountdownTimer } from '../../../components/common/display/CountdownTimer';\nimport { UserName } from '../../../components/common/display/UserName';\nimport { CustomDurationPicker } from '../../../components/common/form/CustomDurationPicker';\nimport { useClaimDurations } from '../../../hooks/useClaimDurations';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type ActionBarMode =\n | 'available' // unclaimed — show claim controls\n | 'claimed_by_me' // I own it — show resolve/escalate/release\n | 'claimed_by_other'// someone else has it\n | 'terminal'; // resolved or cancelled — nothing to do\n\nexport type ActiveView = 'resolve' | 'escalate' | 'release';\n\nexport interface EscalationActionBarProps {\n mode: ActionBarMode;\n // Active view (controlled by parent)\n activeView: ActiveView;\n onActiveViewChange: (view: ActiveView) => void;\n // Claim\n onClaim: (minutes: number) => void;\n claimPending: boolean;\n // Resolve — JSON lives in viewport, bar reads it for submit\n workflowType: string | null;\n json: string;\n onResolve: (payload: Record<string, unknown>) => void;\n resolvePending: boolean;\n resolveError: Error | null;\n // Triage (controlled by parent — callout + overlay render in page body)\n requestTriage: boolean;\n triageNotes: string;\n // Escalate\n currentRole: string;\n escalationTargets: string[];\n onEscalate: (role: string) => void;\n escalatePending: boolean;\n escalateError: Error | null;\n // Release\n onRelease: () => void;\n releasePending: boolean;\n // Other user\n assignedTo?: string | null;\n assignedUntil?: string | null;\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function EscalationActionBar(props: EscalationActionBarProps) {\n const {\n mode, activeView, onActiveViewChange,\n onClaim, claimPending,\n workflowType, json, onResolve, resolvePending, resolveError,\n requestTriage, triageNotes,\n currentRole, escalationTargets, onEscalate, escalatePending, escalateError,\n onRelease, releasePending,\n assignedTo, assignedUntil,\n } = props;\n\n const claimDurations = useClaimDurations();\n const [duration, setDuration] = useState('30');\n const [customMinutes, setCustomMinutes] = useState(0);\n const [parseError, setParseError] = useState('');\n const [escalateTarget, setEscalateTarget] = useState('');\n\n const isCustom = duration === 'custom';\n const onCustomChange = useCallback((m: number) => setCustomMinutes(m), []);\n\n if (mode === 'terminal') return null;\n\n const handleClaim = () => {\n const minutes = isCustom ? customMinutes : parseInt(duration);\n if (!minutes || minutes <= 0) return;\n onClaim(minutes);\n };\n\n const handleSubmitResolve = () => {\n setParseError('');\n\n // When triage is requested, ignore the form payload entirely.\n // Only the triage flag and notes matter — the form data (e.g.\n // approved: true) must NOT leak through, as it would confuse\n // the triage workflow into thinking the issue is already resolved.\n if (requestTriage) {\n const payload: Record<string, unknown> = {\n _lt: { needsTriage: true },\n };\n if (triageNotes.trim()) payload.notes = triageNotes.trim();\n onResolve(payload);\n return;\n }\n\n let payload: Record<string, unknown>;\n try {\n payload = JSON.parse(json);\n } catch {\n setParseError('Invalid JSON');\n return;\n }\n onResolve(payload);\n };\n\n const tabClass = (active: boolean) =>\n `text-xs transition-colors ${active ? 'text-accent font-medium' : 'text-text-tertiary hover:text-accent'}`;\n\n return (\n <div className=\"sticky h-[80px] bg-surface/95 backdrop-blur-sm border-t border-surface-border -mx-10 px-10 pt-3 pb-5 z-10\" style={{ bottom: 'calc(var(--feed-height, 0px) - 8px)' }} data-testid=\"escalation-action-bar\">\n\n {/* ── Available: claim ── */}\n {mode === 'available' && (\n <div data-testid=\"claim-bar\">\n {/* Duration tab row */}\n <div className=\"flex items-center gap-4 mb-2\">\n {claimDurations.map((opt) => (\n <button\n key={opt.value}\n onClick={() => { setDuration(opt.value); setCustomMinutes(0); }}\n className={tabClass(!isCustom && duration === opt.value)}\n >\n {opt.label}\n </button>\n ))}\n <button\n onClick={() => setDuration('custom')}\n className={tabClass(isCustom)}\n >\n Other\n </button>\n </div>\n {/* Action row — right-aligned */}\n <div className=\"flex items-center gap-3\">\n <div className=\"flex-1\" />\n {isCustom && (\n <CustomDurationPicker onChange={onCustomChange} compact autoFocus />\n )}\n <button\n onClick={handleClaim}\n disabled={claimPending || (isCustom && customMinutes <= 0)}\n className=\"btn-primary text-xs\"\n >\n {claimPending ? 'Claiming...' : 'Claim'}\n </button>\n </div>\n </div>\n )}\n\n {/* ── Claimed by other ── */}\n {mode === 'claimed_by_other' && (\n <div className=\"flex items-center gap-4\" data-testid=\"claimed-other-bar\">\n <p className=\"text-sm text-text-secondary\">\n Claimed by <span className=\"font-medium text-text-primary\">{assignedTo ? <UserName userId={assignedTo} /> : 'unknown'}</span>\n </p>\n {assignedUntil && <CountdownTimer until={assignedUntil} />}\n </div>\n )}\n\n {/* ── Claimed by me ── */}\n {mode === 'claimed_by_me' && (\n <div data-testid=\"action-bar\">\n {/* Tab row */}\n <div className=\"flex items-center gap-4 mb-2\">\n <button\n onClick={() => onActiveViewChange('resolve')}\n className={tabClass(activeView === 'resolve')}\n >\n {workflowType ? 'Resolve' : 'Acknowledge'}\n </button>\n {escalationTargets.length > 0 && (\n <button\n onClick={() => onActiveViewChange('escalate')}\n className={tabClass(activeView === 'escalate')}\n >\n Escalate\n </button>\n )}\n <button\n onClick={() => onActiveViewChange('release')}\n className={`text-xs transition-colors ${activeView === 'release' ? 'text-status-error font-medium' : 'text-text-tertiary hover:text-status-error'}`}\n >\n Release\n </button>\n </div>\n\n {/* ── Resolve controls ── */}\n {activeView === 'resolve' && (\n workflowType ? (\n <div className=\"flex items-center gap-4\">\n <div className=\"flex-1\" />\n\n {parseError && <span className=\"text-xs text-status-error\">{parseError}</span>}\n {resolveError && <span className=\"text-xs text-status-error\">{resolveError.message}</span>}\n\n <button\n onClick={handleSubmitResolve}\n disabled={resolvePending}\n className=\"btn-primary text-xs\"\n >\n {resolvePending ? 'Submitting...' : requestTriage ? 'Send to Triage' : 'Submit'}\n </button>\n </div>\n ) : (\n <div className=\"flex items-center\">\n <span className=\"text-xs text-text-secondary\">Notification — acknowledge to resolve</span>\n <div className=\"flex-1\" />\n {resolveError && <span className=\"text-xs text-status-error mr-3\">{resolveError.message}</span>}\n <button\n onClick={() => onResolve({ acknowledged: true })}\n disabled={resolvePending}\n className=\"btn-primary text-xs\"\n >\n {resolvePending ? 'Acknowledging...' : 'Acknowledge'}\n </button>\n </div>\n )\n )}\n\n {/* ── Escalate controls ── */}\n {activeView === 'escalate' && (\n <div className=\"flex items-center gap-3\">\n <span className=\"text-xs text-text-secondary\">\n From <span className=\"font-medium text-text-primary\">{currentRole}</span> to\n </span>\n <select\n value={escalateTarget}\n onChange={(e) => setEscalateTarget(e.target.value)}\n className=\"select text-xs\"\n data-testid=\"escalate-select\"\n >\n <option value=\"\">Select role...</option>\n {escalationTargets.map((role) => (\n <option key={role} value={role}>{role}</option>\n ))}\n </select>\n <div className=\"flex-1\" />\n {escalateError && <span className=\"text-xs text-status-error\">{escalateError.message}</span>}\n <button\n onClick={() => onEscalate(escalateTarget)}\n disabled={!escalateTarget || escalatePending}\n className=\"btn-primary text-xs\"\n >\n {escalatePending ? 'Escalating...' : 'Escalate'}\n </button>\n </div>\n )}\n\n {/* ── Release controls ── */}\n {activeView === 'release' && (\n <div className=\"flex items-center gap-3\">\n <span className=\"text-xs text-text-secondary\">Release back to pool?</span>\n <div className=\"flex-1\" />\n <button onClick={() => onActiveViewChange('resolve')} className=\"btn-secondary text-xs\">\n Cancel\n </button>\n <button\n onClick={onRelease}\n disabled={releasePending}\n className=\"btn-primary text-xs bg-status-error hover:bg-status-error/80\"\n >\n {releasePending ? 'Releasing...' : 'Yes, Release'}\n </button>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { useState } from 'react';\nimport { Bell, User } from 'lucide-react';\nimport { StatusBadge } from '../../../components/common/display/StatusBadge';\nimport { RolePill } from '../../../components/common/display/RolePill';\nimport { CountdownTimer } from '../../../components/common/display/CountdownTimer';\nimport { Collapsible } from '../../../components/common/layout/Collapsible';\nimport { DateValue } from '../../../components/common/display/DateValue';\nimport { CopyableId } from '../../../components/common/display/CopyableId';\nimport { UserName } from '../../../components/common/display/UserName';\nimport { isAckEscalation } from '../../../lib/escalation';\nimport type { LTEscalationRecord } from '../../../api/types';\n\nexport function EscalationHero({\n esc,\n claimedByMe: _claimedByMe,\n claimed,\n isTerminal,\n traceUrl,\n}: {\n esc: LTEscalationRecord;\n claimedByMe: boolean;\n claimed: boolean;\n isTerminal: boolean;\n traceUrl: string | null;\n}) {\n const [showDetails, setShowDetails] = useState(false);\n const isAck = isAckEscalation(esc);\n\n return (\n <>\n {/* Title */}\n <div className=\"flex items-center gap-3 mb-2\">\n {isAck && <Bell className=\"w-5 h-5 text-text-tertiary shrink-0\" />}\n <p className=\"text-[1.5rem] leading-snug font-light text-text-secondary\">\n {esc.type}{esc.subtype ? ` / ${esc.subtype}` : ''}\n </p>\n </div>\n\n {/* Description */}\n {esc.description && (\n <p className=\"text-sm leading-relaxed text-text-tertiary mb-4\">\n {esc.description}\n </p>\n )}\n\n {/* Meta bar — labeled sections, baseline-aligned values */}\n <div className=\"flex flex-wrap items-end gap-x-6 gap-y-3 mt-4 mb-2\">\n {/* Status */}\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1.5\">Status</p>\n <span className=\"mb-1 inline-block\"><StatusBadge status={esc.status} /></span>\n </div>\n\n {/* Role */}\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1.5\">Role</p>\n <RolePill role={esc.role} size=\"md\" />\n </div>\n\n {/* Created */}\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1.5\">Created</p>\n <span className=\"inline-flex items-center mb-1 text-xs text-text-secondary\">\n <DateValue date={esc.created_at} />\n </span>\n </div>\n\n {/* Claimed by */}\n {esc.assigned_to && (\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1.5\">Claimed by</p>\n <span className=\"inline-flex items-center gap-1.5 text-xs font-medium text-text-primary\">\n <User className=\"w-3 h-3 shrink-0 text-accent/75\" />\n <UserName userId={esc.assigned_to} />\n </span>\n </div>\n )}\n\n {/* Time left */}\n {claimed && !isTerminal && esc.assigned_until && (\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1.5\">Time left</p>\n <span className=\"inline-flex items-center h-5\"><CountdownTimer until={esc.assigned_until} /></span>\n </div>\n )}\n\n {/* Resolved */}\n {esc.resolved_at && (\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1.5\">Resolved</p>\n <span className=\"inline-flex items-center h-5 text-xs text-text-secondary\">\n <DateValue date={esc.resolved_at} />\n </span>\n </div>\n )}\n\n {/* Details toggle */}\n <div>\n <button\n onClick={() => setShowDetails(!showDetails)}\n className=\"inline-flex items-center gap-1 h-5 text-xs text-text-tertiary hover:text-accent transition-colors\"\n >\n Details\n <svg\n className={`w-3 h-3 transition-transform duration-200 ${showDetails ? 'rotate-180' : ''}`}\n fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n </div>\n </div>\n\n <Collapsible open={showDetails}>\n <div className=\"mt-4 bg-surface-raised border border-surface-border rounded-md p-4 flex flex-wrap gap-x-8 gap-y-4\">\n <div className=\"text-left\">\n <span className=\"text-[11px] font-medium text-text-secondary uppercase tracking-wide\">Priority</span>\n <p className=\"text-[12px] text-text-primary mt-0.5\">P{esc.priority}</p>\n </div>\n <CopyableId label=\"Escalation ID\" value={esc.id} />\n {esc.task_id && (\n <CopyableId label=\"Task\" value={esc.task_id} href={`/workflows/tasks/detail/${esc.task_id}`} />\n )}\n <CopyableId label=\"Workflow\" value={esc.workflow_type} />\n <CopyableId label=\"Workflow ID\" value={esc.workflow_id} />\n <CopyableId label=\"Task Queue\" value={esc.task_queue} />\n {esc.origin_id && esc.origin_id !== esc.workflow_id && (\n <CopyableId label=\"Origin\" value={esc.origin_id} />\n )}\n {esc.trace_id && (\n <CopyableId\n label=\"Trace\"\n value={esc.trace_id}\n href={traceUrl ? traceUrl.replace('{traceId}', esc.trace_id) : undefined}\n external\n />\n )}\n </div>\n </Collapsible>\n </>\n );\n}\n","import { useState, useEffect, useCallback } from 'react';\n\ntype JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue };\n\n/**\n * Renders a JSON object as an editable form with typed inputs.\n *\n * - Strings → text input (textarea if > 80 chars)\n * - Booleans → toggle switch\n * - Numbers → number input\n * - Null → disabled placeholder\n * - Objects → nested section\n * - Arrays of strings → tag display\n * - Keys starting with `_` → hidden (preserved in output)\n *\n * Calls `onChange` with the full JSON string on every edit.\n */\nexport function ResolverForm({ value, onChange }: {\n value: string;\n onChange: (json: string) => void;\n}) {\n const [data, setData] = useState<Record<string, JsonValue>>({});\n const [hidden, setHidden] = useState<Record<string, JsonValue>>({});\n const [formSchema, setFormSchema] = useState<Record<string, any> | null>(null);\n const [parseError, setParseError] = useState(false);\n\n // Parse incoming JSON\n useEffect(() => {\n try {\n const parsed = JSON.parse(value);\n if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {\n const visible: Record<string, JsonValue> = {};\n const internal: Record<string, JsonValue> = {};\n for (const [k, v] of Object.entries(parsed)) {\n if (k.startsWith('_')) {\n internal[k] = v as JsonValue;\n } else {\n visible[k] = v as JsonValue;\n }\n }\n setData(visible);\n setHidden(internal);\n setFormSchema(\n internal._form_schema && typeof internal._form_schema === 'object'\n ? internal._form_schema as Record<string, any>\n : null,\n );\n setParseError(false);\n }\n } catch {\n setParseError(true);\n }\n }, [value]);\n\n const emitChange = useCallback((updated: Record<string, JsonValue>) => {\n setData(updated);\n onChange(JSON.stringify({ ...updated, ...hidden }, null, 2));\n }, [hidden, onChange]);\n\n const updateField = useCallback((key: string, val: JsonValue) => {\n emitChange({ ...data, [key]: val });\n }, [data, emitChange]);\n\n if (parseError) {\n return (\n <p className=\"text-xs text-status-error\">\n Unable to parse resolver data as form. Use the JSON editor below.\n </p>\n );\n }\n\n const entries = Object.entries(data);\n if (entries.length === 0) {\n return (\n <p className=\"text-xs text-text-tertiary italic\">\n No resolver fields defined.\n </p>\n );\n }\n\n return (\n <div className=\"space-y-4\">\n {entries.map(([key, val]) => (\n <FieldRow\n key={key}\n fieldKey={key}\n value={val}\n onChange={(v) => updateField(key, v)}\n schema={formSchema}\n />\n ))}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Field row — renders appropriate input per type\n// ---------------------------------------------------------------------------\n\nfunction FieldRow({ fieldKey, value, onChange, schema }: {\n fieldKey: string;\n value: JsonValue;\n onChange: (v: JsonValue) => void;\n schema?: Record<string, any> | null;\n}) {\n const label = fieldKey.replace(/[_-]/g, ' ');\n const fieldSchema = schema?.properties?.[fieldKey] as Record<string, any> | undefined;\n\n // Boolean → checkbox\n if (typeof value === 'boolean') {\n return (\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={value}\n onChange={(e) => onChange(e.target.checked)}\n className=\"w-3.5 h-3.5 rounded accent-accent\"\n />\n <span className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n {label}\n </span>\n </label>\n );\n }\n\n // Number\n if (typeof value === 'number') {\n return (\n <div>\n <FieldLabel>{label}</FieldLabel>\n <input\n type=\"number\"\n value={value}\n onChange={(e) => onChange(parseFloat(e.target.value) || 0)}\n step=\"any\"\n className=\"input text-sm w-full mt-1\"\n />\n </div>\n );\n }\n\n // String\n if (typeof value === 'string') {\n const isPassword = fieldSchema?.format === 'password';\n const enumValues = fieldSchema?.enum as string[] | undefined;\n const helperText = fieldSchema?.description as string | undefined;\n\n if (enumValues?.length) {\n return (\n <div>\n <FieldLabel>{label}</FieldLabel>\n {helperText && <p className=\"text-[10px] text-text-tertiary mt-0.5\">{helperText}</p>}\n <select\n value={value}\n onChange={(e) => onChange(e.target.value)}\n className=\"input text-sm w-full mt-1\"\n >\n {enumValues.map((opt) => (\n <option key={opt} value={opt}>{opt}</option>\n ))}\n </select>\n </div>\n );\n }\n\n if (isPassword) {\n return (\n <div>\n <FieldLabel>{label}</FieldLabel>\n {helperText && <p className=\"text-[10px] text-text-tertiary mt-0.5\">{helperText}</p>}\n <input\n type=\"password\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n className=\"input text-sm w-full mt-1\"\n autoComplete=\"off\"\n />\n </div>\n );\n }\n\n if (value.length > 80) {\n return (\n <div>\n <FieldLabel>{label}</FieldLabel>\n {helperText && <p className=\"text-[10px] text-text-tertiary mt-0.5\">{helperText}</p>}\n <textarea\n value={value}\n onChange={(e) => onChange(e.target.value)}\n className=\"input text-sm w-full mt-1 leading-relaxed\"\n rows={Math.min(6, Math.ceil(value.length / 60))}\n />\n </div>\n );\n }\n return (\n <div>\n <FieldLabel>{label}</FieldLabel>\n {helperText && <p className=\"text-[10px] text-text-tertiary mt-0.5\">{helperText}</p>}\n <input\n type=\"text\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n className=\"input text-sm w-full mt-1\"\n />\n </div>\n );\n }\n\n // Null\n if (value === null) {\n return (\n <div>\n <FieldLabel>{label}</FieldLabel>\n <p className=\"text-xs text-text-tertiary italic mt-1\">null</p>\n </div>\n );\n }\n\n // Array of primitives\n if (Array.isArray(value)) {\n return (\n <div>\n <FieldLabel>{label}</FieldLabel>\n <div className=\"flex flex-wrap gap-1.5 mt-1\">\n {value.map((item, i) => (\n <span\n key={i}\n className=\"px-2 py-0.5 text-[11px] font-mono bg-surface-sunken rounded text-text-secondary\"\n >\n {String(item)}\n </span>\n ))}\n </div>\n </div>\n );\n }\n\n // Nested object → recursive\n if (typeof value === 'object') {\n const entries = Object.entries(value);\n return (\n <div>\n <FieldLabel>{label}</FieldLabel>\n <div className=\"ml-4 mt-2 pl-4 border-l border-accent-faint space-y-3\">\n {entries.map(([k, v]) => (\n <FieldRow\n key={k}\n fieldKey={k}\n value={v}\n onChange={(updated) => onChange({ ...value, [k]: updated })}\n />\n ))}\n </div>\n </div>\n );\n }\n\n return null;\n}\n\nfunction FieldLabel({ children }: { children: React.ReactNode }) {\n return (\n <label className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n {children}\n </label>\n );\n}\n","import { useState } from 'react';\nimport { ResolverForm } from '../../../components/escalation/ResolverForm';\n\nexport function ResolverSection({\n json,\n onJsonChange,\n requestTriage,\n onRequestTriageChange,\n triageNotes,\n onTriageNotesChange,\n}: {\n json: string;\n onJsonChange: (v: string) => void;\n requestTriage: boolean;\n onRequestTriageChange: (v: boolean) => void;\n triageNotes: string;\n onTriageNotesChange: (v: string) => void;\n}) {\n const [resolverView, setResolverView] = useState<'form' | 'json'>('form');\n\n return (\n <>\n {/* Toolbar row: form/JSON toggle + triage callout */}\n <div className=\"flex items-center justify-between mb-3\">\n {requestTriage ? (\n <button\n onClick={() => onRequestTriageChange(false)}\n className=\"group flex items-center gap-2 text-left\"\n data-testid=\"triage-cancel\"\n >\n <span className=\"flex items-center justify-center w-5 h-5 rounded-full bg-accent/10 text-accent shrink-0\">\n <svg className=\"w-3 h-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </span>\n <span className=\"text-xs text-text-secondary group-hover:text-text-primary transition-colors\">\n AI Triage active.{' '}\n <span className=\"text-accent group-hover:underline\">Cancel</span>\n </span>\n </button>\n ) : (\n <button\n onClick={() => onRequestTriageChange(true)}\n className=\"group flex items-center gap-2.5 text-left my-4\"\n data-testid=\"triage-callout\"\n >\n <span className=\"flex items-center justify-center w-6 h-6 rounded-full bg-accent/10 text-accent shrink-0 animate-[triage-glow_6s_ease-in-out_infinite]\">\n <svg className=\"w-3.5 h-3.5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9.663 17h4.674M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z\" />\n </svg>\n </span>\n <span className=\"text-[13px] text-text-secondary group-hover:text-text-primary transition-colors\">\n This form doesn&apos;t capture the issue?{' '}\n <span className=\"text-accent group-hover:underline\">Request AI Triage</span>\n </span>\n </button>\n )}\n\n {!requestTriage && (\n <button\n onClick={() => setResolverView(resolverView === 'form' ? 'json' : 'form')}\n className=\"text-[10px] text-text-tertiary hover:text-accent transition-colors\"\n >\n {resolverView === 'form' ? 'Raw JSON' : 'Form'}\n </button>\n )}\n </div>\n\n <div className=\"relative min-h-[200px]\">\n {/* Form controls */}\n <div className={requestTriage ? 'pointer-events-none select-none' : ''}>\n {resolverView === 'form' ? (\n <ResolverForm value={json} onChange={onJsonChange} />\n ) : (\n <textarea\n value={json}\n onChange={(e) => onJsonChange(e.target.value)}\n className=\"input font-mono text-xs w-full\"\n rows={8}\n spellCheck={false}\n data-testid=\"resolve-json\"\n />\n )}\n </div>\n\n {/* Triage overlay — occludes the form when AI Triage is checked */}\n {requestTriage && (\n <div\n className=\"absolute inset-0 z-10 flex flex-col bg-surface/90 backdrop-blur-[2px] rounded-md border border-accent/20 p-5\"\n data-testid=\"triage-overlay\"\n >\n <p className=\"text-xs text-text-secondary mb-3 leading-relaxed\">\n The resolution form will not be submitted. Describe the issue\n so AI triage can diagnose and fix it using available tools.\n The corrected result will come back as a new escalation for\n your review.\n </p>\n <textarea\n value={triageNotes}\n onChange={(e) => onTriageNotesChange(e.target.value)}\n placeholder=\"e.g. Content is in Spanish — needs translation to English before review...\"\n className=\"input text-xs w-full flex-1 min-h-[80px] resize-none\"\n autoFocus\n data-testid=\"triage-notes\"\n />\n </div>\n )}\n </div>\n </>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { useParams, useNavigate, Link } from 'react-router-dom';\nimport { KeyRound } from 'lucide-react';\nimport { useAuth } from '../../../hooks/useAuth';\nimport {\n useEscalation,\n useClaimEscalation,\n useResolveEscalation,\n useEscalateToRole,\n} from '../../../api/escalations';\nimport { useEscalationTargets } from '../../../api/roles';\nimport { JsonViewer } from '../../../components/common/data/JsonViewer';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { CollapsibleSection } from '../../../components/common/layout/CollapsibleSection';\nimport { isEffectivelyClaimed } from '../../../lib/escalation';\nimport { useWorkflowConfigs } from '../../../api/workflows';\nimport { useSettings } from '../../../api/settings';\nimport { useEscalationDetailEvents } from '../../../hooks/useNatsEvents';\nimport { RoundsExhaustedContext } from '../../../components/escalation/RoundsExhaustedContext';\nimport { TriageContext } from '../../../components/escalation/TriageContext';\nimport { EscalationActionBar } from './EscalationActionBar';\nimport { EscalationHero } from './EscalationHero';\nimport { ResolverSection } from './ResolverSection';\nimport type { ActionBarMode, ActiveView } from './EscalationActionBar';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction safeParse(value: string | null | undefined): unknown {\n if (!value) return null;\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n}\n\nfunction hasTriageData(payload: string | null | undefined): boolean {\n if (!payload) return false;\n try {\n const p = JSON.parse(payload);\n return !!(p && typeof p === 'object' && p._triage);\n } catch { return false; }\n}\n\n// ---------------------------------------------------------------------------\n// Main page\n// ---------------------------------------------------------------------------\n\nexport function EscalationDetailPage() {\n const { id } = useParams<{ id: string }>();\n const { user } = useAuth();\n const navigate = useNavigate();\n const { data: esc, isLoading } = useEscalation(id!);\n useEscalationDetailEvents(id);\n const claim = useClaimEscalation();\n const resolve = useResolveEscalation();\n const escalate = useEscalateToRole();\n const { data: escalationTargets } = useEscalationTargets(esc?.role ?? '');\n const { data: workflowConfigs } = useWorkflowConfigs();\n const { data: settings } = useSettings();\n\n const wfConfig = workflowConfigs?.find((c) => c.workflow_type === esc?.workflow_type);\n const traceUrl = settings?.telemetry?.traceUrl ?? null;\n const [activeView, setActiveView] = useState<ActiveView>('resolve');\n const [json, setJson] = useState('{}');\n\n // Section collapse state\n const [collapsed, setCollapsed] = useState<Record<string, boolean>>({ context: false });\n const toggleSection = (key: string) =>\n setCollapsed((prev) => ({ ...prev, [key]: !prev[key] }));\n\n const [requestTriage, setRequestTriage] = useState(false);\n const [triageNotes, setTriageNotes] = useState('');\n const resolverSchema = wfConfig?.resolver_schema ?? null;\n const metadataFormSchema = (esc?.metadata as any)?.form_schema ?? null;\n const effectiveSchema = metadataFormSchema ?? resolverSchema;\n useEffect(() => {\n if (metadataFormSchema) {\n // waitFor escalation: build initial form from form_schema and include _form_schema for ResolverForm\n const initial: Record<string, any> = { _form_schema: metadataFormSchema };\n const props = metadataFormSchema.properties;\n if (props && typeof props === 'object') {\n for (const [key, def] of Object.entries(props)) {\n const fieldDef = def as Record<string, any>;\n initial[key] = fieldDef.default ?? '';\n }\n }\n setJson(JSON.stringify(initial, null, 2));\n } else {\n setJson(effectiveSchema ? JSON.stringify(effectiveSchema, null, 2) : '{}');\n }\n }, [effectiveSchema, metadataFormSchema]);\n\n // When triage or rounds-exhausted data is present, collapse Input/Output so structured context is central\n const hasTriage = hasTriageData(esc?.escalation_payload);\n const isRoundsExhausted = esc?.subtype === 'rounds_exhausted';\n const isWaitForHuman = esc?.subtype === 'wait_for_human';\n useEffect(() => {\n if (hasTriage || isRoundsExhausted) {\n setCollapsed((prev) => ({ ...prev, context: true }));\n }\n // waitFor escalations: auto-expand resolver, collapse context\n if (isWaitForHuman && metadataFormSchema) {\n setCollapsed((prev) => ({ ...prev, context: true, resolver: false }));\n }\n }, [hasTriage, isRoundsExhausted, isWaitForHuman, metadataFormSchema]);\n\n if (isLoading) {\n return (\n <div className=\"animate-pulse space-y-8\">\n <div className=\"h-8 bg-surface-sunken rounded w-64\" />\n <div className=\"h-32 bg-surface-sunken rounded w-full\" />\n </div>\n );\n }\n\n if (!esc) {\n return <p className=\"text-sm text-text-secondary\">Escalation not found.</p>;\n }\n\n const claimed = isEffectivelyClaimed(esc);\n const claimedByMe = claimed && esc.assigned_to === user?.userId;\n const claimedByOther = claimed && !claimedByMe;\n const isTerminal = esc.status === 'resolved' || esc.status === 'cancelled';\n\n const escalationPayload = safeParse(esc.escalation_payload);\n const resolverPayload = safeParse(esc.resolver_payload);\n\n // Detect triage context in escalation payload\n const payloadObj = (typeof escalationPayload === 'object' && escalationPayload !== null && !Array.isArray(escalationPayload))\n ? escalationPayload as Record<string, unknown>\n : null;\n const triageData = payloadObj?._triage as Record<string, unknown> | undefined;\n\n // Derive action bar mode\n const actionBarMode: ActionBarMode = isTerminal\n ? 'terminal'\n : claimedByMe\n ? 'claimed_by_me'\n : claimedByOther\n ? 'claimed_by_other'\n : 'available';\n\n const handleClaim = (durationMinutes: number) => {\n claim.mutate({ id: esc.id, durationMinutes });\n setCollapsed({ context: true, triage: true, resolver: false });\n };\n\n const goBack = () => navigate(-1);\n\n const handleResolve = async (payload: Record<string, unknown>) => {\n await resolve.mutateAsync({ id: esc.id, resolverPayload: payload });\n goBack();\n };\n\n const handleEscalate = async (targetRole: string) => {\n if (!targetRole) return;\n await escalate.mutateAsync({ id: esc.id, targetRole });\n goBack();\n };\n\n const handleRetryTriage = async () => {\n if (!claimedByMe) {\n await claim.mutateAsync({ id: esc.id, durationMinutes: 30 });\n }\n const diagnosis = (payloadObj?.diagnosis as string) || esc.description || '';\n await resolve.mutateAsync({\n id: esc.id,\n resolverPayload: { _lt: { needsTriage: true }, notes: diagnosis },\n });\n goBack();\n };\n\n const handleRelease = async () => {\n await claim.mutateAsync({ id: esc.id, durationMinutes: 0 });\n goBack();\n };\n\n return (\n <div className=\"min-h-[calc(100vh-9rem)] flex flex-col\">\n <PageHeader title=\"Escalation\" />\n\n <EscalationHero\n esc={esc}\n claimedByMe={claimedByMe}\n claimed={claimed}\n isTerminal={isTerminal}\n traceUrl={traceUrl}\n />\n\n {/* Rounds-exhausted structured context */}\n {isRoundsExhausted && payloadObj && (\n <div className=\"mt-8\">\n <RoundsExhaustedContext\n payload={payloadObj}\n isTerminal={isTerminal}\n resolverPayload={resolverPayload as Record<string, unknown> | null}\n onRetryTriage={handleRetryTriage}\n isRetrying={claim.isPending || resolve.isPending}\n />\n </div>\n )}\n\n {/* Missing credential context */}\n {payloadObj?.category === 'missing_credential' && (\n <div className=\"mt-8 bg-status-warning/10 border border-status-warning/30 rounded-md px-5 py-4 flex items-start gap-3\">\n <KeyRound size={20} className=\"text-status-warning mt-0.5 shrink-0\" />\n <div>\n <p className=\"text-sm font-medium text-text-primary mb-1\">Missing Credential</p>\n <p className=\"text-xs text-text-secondary mb-3\">\n This workflow requires a <span className=\"font-medium capitalize\">{String(payloadObj.provider)}</span> credential\n to continue. Register one and then resolve this escalation to retry.\n </p>\n <Link\n to=\"/credentials\"\n className=\"btn-primary text-xs inline-flex items-center gap-1.5\"\n >\n <KeyRound size={12} />\n Go to Credentials\n </Link>\n </div>\n </div>\n )}\n\n {/* Collapsible sections */}\n <div className=\"mt-8 space-y-6\">\n\n {/* Input/Output */}\n <CollapsibleSection\n title=\"Input / Output\"\n sectionKey=\"context\"\n isCollapsed={collapsed.context ?? true}\n onToggle={toggleSection}\n contentClassName=\"mt-4 ml-9\"\n >\n <div className=\"space-y-6\">\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {esc.envelope && (\n <div>\n <JsonViewer data={esc.envelope} label=\"Input Envelope\" />\n </div>\n )}\n {escalationPayload != null && (\n <div>\n <JsonViewer data={escalationPayload} label=\"Escalation Context\" />\n </div>\n )}\n </div>\n\n {resolverPayload != null && (\n <div className=\"max-w-xl\">\n <JsonViewer data={resolverPayload} label=\"Resolver Payload\" />\n </div>\n )}\n </div>\n </CollapsibleSection>\n\n {/* Triage context — only when present */}\n {triageData && payloadObj && (\n <CollapsibleSection\n title=\"AI Triage\"\n sectionKey=\"triage\"\n isCollapsed={!!collapsed.triage}\n onToggle={toggleSection}\n contentClassName=\"mt-4 ml-9\"\n >\n <TriageContext triage={triageData} payload={payloadObj} />\n </CollapsibleSection>\n )}\n\n {/* Resolver form — when claimed and resolving */}\n {!isTerminal && claimedByMe && activeView === 'resolve' && (esc.workflow_type || metadataFormSchema) && (\n <CollapsibleSection\n title=\"Submit Your Resolution\"\n sectionKey=\"resolver\"\n isCollapsed={!!collapsed.resolver}\n onToggle={toggleSection}\n contentClassName=\"mt-4 ml-9\"\n >\n <ResolverSection\n json={json}\n onJsonChange={setJson}\n requestTriage={requestTriage}\n onRequestTriageChange={setRequestTriage}\n triageNotes={triageNotes}\n onTriageNotesChange={setTriageNotes}\n />\n </CollapsibleSection>\n )}\n </div>\n\n <div className=\"flex-1\" />\n\n <EscalationActionBar\n mode={actionBarMode}\n activeView={activeView}\n onActiveViewChange={setActiveView}\n onClaim={handleClaim}\n claimPending={claim.isPending}\n workflowType={esc.workflow_type}\n json={json}\n onResolve={handleResolve}\n resolvePending={resolve.isPending}\n resolveError={resolve.error as Error | null}\n requestTriage={requestTriage}\n triageNotes={triageNotes}\n currentRole={esc.role}\n escalationTargets={escalationTargets?.targets ?? []}\n onEscalate={handleEscalate}\n escalatePending={escalate.isPending}\n escalateError={escalate.error as Error | null}\n onRelease={handleRelease}\n releasePending={claim.isPending}\n assignedTo={esc.assigned_to}\n assignedUntil={esc.assigned_until}\n />\n </div>\n );\n}\n"],"names":["SectionLabel","children","jsxDEV","RoundsExhaustedContext","payload","isTerminal","resolverPayload","onRetryTriage","isRetrying","title","summary","diagnosis","toolCalls","result","ltMeta","wasTriaged","triageWorkflowId","isResolvedByTriage","showResult","setShowResult","useState","SimpleMarkdown","Link","JsonViewer","TriageContext","triage","confidence","confidenceColor","diffs","computeDiffs","action","i","diff","DiffRow","original","current","key","origVal","currVal","origStr","renderValue","corrStr","val","EscalationActionBar","props","mode","activeView","onActiveViewChange","onClaim","claimPending","workflowType","json","onResolve","resolvePending","resolveError","requestTriage","triageNotes","currentRole","escalationTargets","onEscalate","escalatePending","escalateError","onRelease","releasePending","assignedTo","assignedUntil","claimDurations","useClaimDurations","duration","setDuration","customMinutes","setCustomMinutes","parseError","setParseError","escalateTarget","setEscalateTarget","isCustom","onCustomChange","useCallback","m","handleClaim","minutes","handleSubmitResolve","tabClass","active","opt","CustomDurationPicker","UserName","CountdownTimer","e","role","EscalationHero","esc","_claimedByMe","claimed","traceUrl","showDetails","setShowDetails","isAck","isAckEscalation","Fragment","Bell","StatusBadge","RolePill","DateValue","User","Collapsible","CopyableId","ResolverForm","value","onChange","data","setData","hidden","setHidden","formSchema","setFormSchema","useEffect","parsed","visible","internal","k","v","emitChange","updated","updateField","entries","FieldRow","fieldKey","schema","label","fieldSchema","_a","FieldLabel","isPassword","enumValues","helperText","item","ResolverSection","onJsonChange","onRequestTriageChange","onTriageNotesChange","resolverView","setResolverView","safeParse","hasTriageData","p","EscalationDetailPage","id","useParams","user","useAuth","navigate","useNavigate","isLoading","useEscalation","useEscalationDetailEvents","claim","useClaimEscalation","resolve","useResolveEscalation","escalate","useEscalateToRole","useEscalationTargets","workflowConfigs","useWorkflowConfigs","settings","useSettings","wfConfig","c","setActiveView","setJson","collapsed","setCollapsed","toggleSection","prev","setRequestTriage","setTriageNotes","resolverSchema","metadataFormSchema","_b","effectiveSchema","initial","def","fieldDef","hasTriage","isRoundsExhausted","isWaitForHuman","isEffectivelyClaimed","claimedByMe","claimedByOther","escalationPayload","payloadObj","triageData","actionBarMode","durationMinutes","goBack","handleResolve","handleEscalate","targetRole","handleRetryTriage","handleRelease","PageHeader","KeyRound","CollapsibleSection"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{b as O,j as e,u as Ve,C as W,J as je}from"./index-DSzSoku1.js";import{u as G,c as ne,b as De,a as l}from"./vendor-query-DLp59M9_.js";import{P as ke}from"./PageHeaderWithStats-TikLQsTp.js";import{D as le}from"./DataTable-B3uf5CCo.js";import{C as U}from"./CollapsibleSection-BSyfd8uL.js";import{F as we,b as Qe}from"./FilterBar-CShf0oe7.js";import{u as Se}from"./useFilterParams-BUyLHcx_.js";import{R as oe,a as L}from"./RowActions-Cp5HyK_w.js";import{a3 as J,a4 as z,R as Te,S as Pe,a5 as Fe,E as Me,h as Re,A as _e,z as $e,a6 as Ae,P as Oe,Q as Ie}from"./vendor-icons-DCLlGYO9.js";import{M as Be}from"./Modal-CI5RBPOQ.js";import{T as We}from"./TaskQueuePill-BtJbZTT0.js";import"./vendor-react-Co3Y8ikm.js";import"./EmptyState-BChBJNGS.js";function Le(){return O("/controlplane/apps")}function Je(t){return O(`/controlplane/rollcall?app_id=${encodeURIComponent(t)}`)}function qe(t){return O("/controlplane/throttle",{method:"POST",body:JSON.stringify(t)})}function Ke(t){return O("/controlplane/subscribe",{method:"POST",body:JSON.stringify(t)})}function Ue(t,a,s){let r=`/controlplane/streams?app_id=${encodeURIComponent(t)}&duration=${encodeURIComponent(a)}`;return O(r)}function ie(){return G({queryKey:["controlplane","apps"],queryFn:Le,staleTime:6e4})}function ze(t,a){return G({queryKey:["controlplane","rollcall",t],queryFn:()=>Je(t),enabled:!!t,refetchInterval:a})}function me(){const t=De();return ne({mutationFn:qe,onSuccess:()=>{setTimeout(()=>{t.invalidateQueries({queryKey:["controlplane","rollcall"]})},1500)}})}function Ge(t,a,s,r){return G({queryKey:["controlplane","streams",t,a,""],queryFn:()=>Ue(t,a),enabled:!!t,staleTime:15e3,refetchInterval:r})}function He(){return ne({mutationFn:Ke})}const Ye=[{label:"15m",value:"15m"},{label:"30m",value:"30m"},{label:"1h",value:"1h"},{label:"1d",value:"1d"},{label:"7d",value:"7d"}],Xe={pong:"text-status-success",ping:"text-accent",throttle:"text-status-warning",job:"text-purple-400",work:"text-text-secondary",activate:"text-status-error",cron:"text-text-tertiary",user:"text-text-secondary"},Ze=250;function $(t){return!!t.worker_topic}function A(t){return typeof t.throttle=="number"&&t.throttle!==0}function H(t){return t===void 0||t===0?"Normal":t===-1?"Paused":t>=864e5?`${(t/864e5).toFixed(0)}d`:t>=36e5?`${(t/36e5).toFixed(1)}h`:t>=6e4?`${(t/6e4).toFixed(1)}m`:t>=1e3?`${(t/1e3).toFixed(1)}s`:`${t}ms`}function ce(t,a){if(!t||!a)return"—";const s=parseFloat(t),r=parseFloat(a);return isNaN(s)||isNaN(r)?"—":`${(s-r).toFixed(1)} / ${s.toFixed(1)} GB`}function ue(t){return t.replace(/^hmsh:[^:]+:x:/,"")||"(engine)"}const de=[{key:"pong",label:"Pong",description:"Roll call responses"},{key:"ping",label:"Ping",description:"Roll call broadcasts"},{key:"throttle",label:"Throttle",description:"Throttle commands"},{key:"job",label:"Job",description:"Job lifecycle events"},{key:"work",label:"Work",description:"Worker dispatch events"},{key:"activate",label:"Activate",description:"Worker activation"},{key:"cron",label:"Cron",description:"Cron schedule triggers"},{key:"user",label:"User",description:"User-defined messages"}];function k(t){return`${t.engine_id}-${t.worker_topic||"engine"}`}function et(t){const a=new Map;for(const s of t){if(!s.worker_topic)continue;const r=s.worker_topic;a.has(r)||a.set(r,[]),a.get(r).push(s)}return a}function tt(t){let a=0,s=0,r=0;for(const o of t)if(o.counts)for(const[n,h]of Object.entries(o.counts))a+=h,n==="200"?s+=h:n==="500"&&(r+=h);return{total:a,success:s,errors:r}}function at(){return{key:"throttle",label:"Throttle",render:t=>{const a=t.throttle;return a===-1?e.jsxDEV("span",{className:"text-xs text-status-error font-medium",children:"Paused"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:23,columnNumber:28},this):a&&a>0?e.jsxDEV("span",{className:"text-xs text-status-warning font-medium",children:H(a)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:24,columnNumber:30},this):e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"0"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:25,columnNumber:14},this)},className:"w-24"}}function st(){return{key:"memory",label:"Memory",render:t=>{var a,s;return e.jsxDEV("span",{className:"text-xs font-mono text-text-tertiary",children:ce((a=t.system)==null?void 0:a.TotalMemoryGB,(s=t.system)==null?void 0:s.FreeMemoryGB)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:36,columnNumber:7},this)},className:"w-36"}}function rt(t,a){return{key:"actions",label:"",render:s=>e.jsxDEV(oe,{children:[A(s)&&e.jsxDEV(L,{icon:z,title:"Resume (remove throttle)",onClick:()=>a(s),colorClass:"text-text-tertiary hover:text-status-success"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:54,columnNumber:11},this),e.jsxDEV(L,{icon:J,title:"Adjust throttle",onClick:()=>t(s)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:61,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:52,columnNumber:7},this),className:"w-16"}}function nt(t){const a=t.profiles.some(s=>t.selectedIds.has(k(s)));return[{key:"select",label:e.jsxDEV("span",{className:"inline-flex items-center gap-2",children:[e.jsxDEV("input",{type:"checkbox",checked:t.profiles.length>0&&t.profiles.every(s=>t.selectedIds.has(k(s))),onChange:t.toggleAll,className:"rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:76,columnNumber:11},this),a&&t.onBulkThrottle&&e.jsxDEV(J,{className:"w-[14px] h-[14px] text-text-tertiary hover:text-accent cursor-pointer",strokeWidth:1.5,onClick:s=>{s.stopPropagation(),t.onBulkThrottle()}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:83,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:75,columnNumber:9},this),render:s=>e.jsxDEV("input",{type:"checkbox",checked:t.selectedIds.has(k(s)),onChange:r=>{r.stopPropagation(),t.toggleCheckbox(s)},onClick:r=>r.stopPropagation(),className:"rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:92,columnNumber:9},this),className:"w-16"},{key:"engine_id",label:"Engine ID",render:s=>e.jsxDEV("span",{className:"text-xs font-mono text-text-tertiary",children:s.engine_id},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:106,columnNumber:9},this),className:"w-48"},at(),{key:"processed",label:"Processed",render:s=>{const r=tt([s]);return e.jsxDEV("span",{className:"text-xs font-mono text-text-tertiary",children:r.total.toLocaleString()},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:116,columnNumber:16},this)},className:"w-24"},st(),rt(t.onRowThrottle,t.onResumeThrottle)]}function lt({activeAppId:t,allProfiles:a,profiles:s}){const r=me(),[o,n]=l.useState(new Set),[h,i]=l.useState(!1),[f,m]=l.useState([]);l.useEffect(()=>{n(new Set)},[t]);const V=l.useCallback(p=>{n(w=>{const E=new Set(w),Q=k(p);return E.has(Q)?E.delete(Q):E.add(Q),E})},[]),y=l.useCallback(()=>{o.size===s.length?n(new Set):n(new Set(s.map(k)))},[s,o.size]),d=l.useMemo(()=>{const p=s.filter(g=>o.has(k(g)));if(p.length===0)return[];if(p.length===a.length)return[{label:"Entire Mesh"}];const w=p.filter(g=>!$(g)),E=p.filter($),Q=[];for(const g of w)Q.push({label:`Engine ${g.engine_id}`,guid:g.engine_id});const T=new Map;for(const g of E){const S=g.worker_topic;T.has(S)||T.set(S,[]),T.get(S).push(g)}for(const[g,S]of T){const R=a.filter(F=>F.worker_topic===g);if(S.length===R.length)Q.push({label:g,topic:g});else for(const F of S)Q.push({label:`${g} ${F.engine_id}`,guid:F.engine_id})}return Q},[s,a,o]);return{selectedIds:o,setSelectedIds:n,toggleCheckbox:V,toggleAll:y,throttleModalOpen:h,throttleTargets:f,selectedThrottleTargets:d,throttleMutation:r,handleBulkThrottle:p=>{const w=f.length>0?f:d;for(const E of w)r.mutate({appId:t,throttle:p,...E.topic?{topic:E.topic}:{},...E.guid?{guid:E.guid}:{}});i(!1),m([])},handleRowClick:p=>{const w=$(p)?`${p.worker_topic} ${p.engine_id}`:`Engine ${p.engine_id}`;m([{label:w,guid:p.engine_id}]),i(!0)},handleBulkThrottleOpen:()=>{m(d),i(!0)},handleResumeThrottle:p=>{r.mutate({appId:t,throttle:0,guid:p.engine_id})},handleResumeQueue:p=>{r.mutate({appId:t,throttle:0,topic:p})},handleQueueThrottle:p=>{m([{label:p,topic:p}]),i(!0)},closeThrottleModal:()=>{i(!1),m([])}}}const ot=[{label:"Resume",ms:0},{label:"0.5s",ms:500},{label:"1s",ms:1e3},{label:"5s",ms:5e3},{label:"30s",ms:3e4},{label:"Pause",ms:-1}];function it({target:t}){const a=t.label==="Entire Mesh",s=t.label==="All Engines"||t.label.startsWith("Engine "),r=a?"bg-status-error/10 text-status-error":s?"bg-blue-500/10 text-blue-500":"bg-accent/[0.06] text-text-secondary",o=t.guid?"guid":t.topic?"topic":"mesh";return e.jsxDEV("span",{className:`inline-flex items-center gap-1.5 px-2 py-0.5 text-[10px] font-medium rounded-lg ${r}`,children:[t.label,e.jsxDEV("span",{className:"text-[8px] opacity-50",children:o},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:35,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:33,columnNumber:5},this)}function mt({open:t,onClose:a,targets:s,onApply:r,isPending:o}){const[n,h]=l.useState("0");return e.jsxDEV(Be,{open:t,onClose:a,title:"Adjust Throttle",children:e.jsxDEV("div",{className:"space-y-4",children:[e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Targets"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:47,columnNumber:11},this),e.jsxDEV("div",{className:"flex flex-wrap gap-1.5",children:s.map((i,f)=>e.jsxDEV(it,{target:i},i.guid||i.topic||f,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:50,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:48,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:46,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Presets"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:56,columnNumber:11},this),e.jsxDEV("div",{className:"flex flex-wrap gap-2",children:ot.map(i=>e.jsxDEV("button",{onClick:()=>{h(i.ms===-1?"-1":String(i.ms/1e3)),r(i.ms)},disabled:o,className:`px-3 py-1.5 text-xs rounded transition-colors ${i.ms===-1?"bg-status-error/10 text-status-error hover:bg-status-error/20":i.ms===0?"bg-status-success/10 text-status-success hover:bg-status-success/20":"bg-surface-sunken text-text-secondary hover:bg-surface-hover"} disabled:opacity-50`,children:i.label},i.label,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:59,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:57,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:55,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Custom (seconds between messages)"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:78,columnNumber:11},this),e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV("input",{type:"number",step:"0.1",min:"-1",value:n,onChange:i=>h(i.target.value),className:"input text-xs py-1.5 px-3 w-28"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:82,columnNumber:13},this),e.jsxDEV("button",{onClick:()=>{const i=parseFloat(n);isNaN(i)||r(i===-1?-1:Math.round(i*1e3))},disabled:o,className:"btn-primary text-xs py-1.5 px-4 disabled:opacity-50",children:"Apply"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:90,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:81,columnNumber:11},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-1",children:"0 = resume, -1 = pause indefinitely"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:102,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:77,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:45,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:44,columnNumber:5},this)}function ct({byStream:t,onNodeFilter:a}){const[s,r]=l.useState(!1);if(l.useEffect(()=>{r(!1);const m=requestAnimationFrame(()=>r(!0));return()=>cancelAnimationFrame(m)},[t]),t.length===0)return e.jsxDEV("p",{className:"text-xs text-text-tertiary py-4 text-center",children:"No activity in this period"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:26,columnNumber:12},this);const o=t.filter(m=>m.stream_type==="engine"),n=t.filter(m=>m.stream_type==="worker"),h=Math.max(...t.map(m=>m.count)),i=m=>{const V=h>0?m.count/h*100:0,y=m.stream_type==="engine",d=y?"(all engines)":ue(m.stream_name),x=y?"bg-blue-500/70":"bg-accent/60",C=y?"text-blue-500":"text-text-tertiary";return e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV("span",{className:`text-[9px] font-mono ${C} w-36 truncate text-right shrink-0`,title:m.stream_name,children:d},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:41,columnNumber:9},this),e.jsxDEV("div",{className:"flex-1 h-4 bg-surface-sunken rounded overflow-hidden",children:e.jsxDEV("div",{className:`h-full ${x} rounded transition-all duration-500 ease-out`,style:{width:s?`${V}%`:"0%"}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:48,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:47,columnNumber:9},this),e.jsxDEV("span",{className:"text-[10px] font-mono tabular-nums text-text-secondary w-12 text-right shrink-0",children:m.count.toLocaleString()},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:53,columnNumber:9},this)]},`${m.stream_type}-${m.stream_name}`,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:40,columnNumber:7},this)},f="text-[9px] uppercase tracking-widest font-semibold mb-1 cursor-pointer hover:underline";return e.jsxDEV("div",{className:"space-y-1.5",children:[o.length>0&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV("p",{className:`${f} text-blue-500/70 hover:text-blue-500`,onClick:()=>a==null?void 0:a("engines"),children:"Engine Message Volume"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:66,columnNumber:11},this),o.map(i),n.length>0&&e.jsxDEV("div",{className:"h-2"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:73,columnNumber:40},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:65,columnNumber:9},this),n.length>0&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV("p",{className:`${f} text-accent/70 hover:text-accent`,onClick:()=>a==null?void 0:a("workers"),children:"Worker Message Volume"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:78,columnNumber:11},this),n.map(i)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:77,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:63,columnNumber:5},this)}let ut=0;function dt({event:t}){var r,o,n;const[a,s]=l.useState(!1);return e.jsxDEV("div",{className:"border-b border-surface-border/50 last:border-b-0",children:[e.jsxDEV("button",{onClick:()=>s(!a),className:"flex items-center gap-2 py-1.5 w-full text-left hover:bg-surface-hover/50 transition-colors",children:[e.jsxDEV("span",{className:"text-[9px] font-mono text-text-tertiary whitespace-nowrap tabular-nums shrink-0",children:new Date(t.timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:27,columnNumber:9},this),e.jsxDEV("span",{className:`text-[9px] font-medium px-1 py-0.5 rounded ${Xe[t.type]||"text-text-tertiary"} bg-surface-sunken whitespace-nowrap shrink-0`,children:t.type},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:30,columnNumber:9},this),e.jsxDEV("span",{className:"text-[9px] text-text-tertiary font-mono flex-1 min-w-0 break-all",children:[(r=t.data)!=null&&r.guid?String(t.data.guid):"",(o=t.data)!=null&&o.topic?` ${String(t.data.topic)}`:"",t.type==="throttle"?` → ${H((n=t.data)==null?void 0:n.throttle)}`:""]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:33,columnNumber:9},this),e.jsxDEV("svg",{className:`w-2.5 h-2.5 text-text-tertiary shrink-0 transition-transform duration-150 ${a?"rotate-180":""}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:e.jsxDEV("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:42,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:38,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:23,columnNumber:7},this),e.jsxDEV(W,{open:a,children:e.jsxDEV("div",{className:"pb-2",children:e.jsxDEV(je,{data:t.data},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:47,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:46,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:45,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:22,columnNumber:5},this)}function pt({channels:t,onToggle:a,customFilter:s,onCustomFilterChange:r}){return e.jsxDEV("div",{className:"space-y-3 pb-3 border-b border-surface-border mb-3",children:[e.jsxDEV("div",{className:"flex items-center gap-2 mb-1",children:[e.jsxDEV("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Channels"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:67,columnNumber:9},this),e.jsxDEV("p",{className:"text-[9px] text-text-tertiary",children:"Unchecked channels are dropped before buffering"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:70,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:66,columnNumber:7},this),e.jsxDEV("div",{className:"grid grid-cols-2 gap-1",children:de.map(o=>e.jsxDEV("label",{className:"flex items-center gap-2 cursor-pointer py-0.5",children:[e.jsxDEV("input",{type:"checkbox",checked:t.has(o.key),onChange:()=>a(o.key),className:"w-3 h-3 rounded border-border accent-accent"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:77,columnNumber:13},this),e.jsxDEV("span",{className:"text-[10px] text-text-secondary",title:o.description,children:o.label},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:83,columnNumber:13},this)]},o.key,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:76,columnNumber:11},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:74,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Text Filter"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:90,columnNumber:9},this),e.jsxDEV("input",{type:"text",value:s,onChange:o=>r(o.target.value),placeholder:"pong",className:"input text-[10px] font-mono py-1 px-2 w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:93,columnNumber:9},this),e.jsxDEV("p",{className:"text-[9px] text-text-tertiary mt-1",children:["Filter by event type, e.g. ",e.jsxDEV("span",{className:"font-mono",children:"pong"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:101,columnNumber:38},this),", ",e.jsxDEV("span",{className:"font-mono",children:"throttle"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:101,columnNumber:79},this),", or any text in the event data."]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:100,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:89,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:65,columnNumber:5},this)}function ht({bridgeActive:t}){const[a,s]=l.useState(!1),[r,o]=l.useState(!1),[n,h]=l.useState([]),[i,f]=l.useState(()=>new Set(de.map(u=>u.key))),[m,V]=l.useState(""),y=l.useRef(i);l.useEffect(()=>{y.current=i},[i]);const d=l.useRef(m);l.useEffect(()=>{d.current=m},[m]);const x=u=>{f(N=>{const D=new Set(N);return D.has(u)?D.delete(u):D.add(u),D})};Ve("lt.events.mesh.>",l.useCallback(u=>{var j;const N=((j=u.type)==null?void 0:j.replace("mesh.",""))||"unknown";if(!y.current.has(N))return;const D=d.current;D&&!`${N} ${JSON.stringify(u.data||u)}`.toLowerCase().includes(D.toLowerCase())||h(P=>[{id:++ut,type:N,timestamp:u.timestamp||new Date().toISOString(),data:u.data||u},...P].slice(0,Ze))},[]));const C=()=>h([]);return e.jsxDEV("div",{className:"border-l border-surface-border pl-6 pt-4 min-h-[300px] sticky top-14 self-start max-h-[calc(100vh-8rem)] flex flex-col",children:[e.jsxDEV("div",{className:"flex items-center gap-2 mb-3",children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Event Stream"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:169,columnNumber:9},this),e.jsxDEV(Te,{className:`w-3 h-3 ${t?"text-status-success animate-pulse":"text-text-tertiary"}`},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:172,columnNumber:9},this),e.jsxDEV("span",{className:"text-[9px] text-text-tertiary",children:t?"Live":"..."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:173,columnNumber:9},this),e.jsxDEV("span",{className:"ml-auto flex items-center gap-1",children:[e.jsxDEV("button",{onClick:()=>{s(u=>!u),o(!1)},className:`p-1 rounded transition-colors ${a?"text-accent bg-accent/10":"text-text-tertiary hover:text-text-primary"}`,title:"Configure channels",children:e.jsxDEV(Pe,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:183,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:178,columnNumber:11},this),e.jsxDEV("button",{onClick:()=>{o(u=>!u),s(!1)},className:`p-1 rounded transition-colors ${r?"text-accent bg-accent/10":"text-text-tertiary hover:text-text-primary"}`,title:"View raw JSON",children:e.jsxDEV(Fe,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:190,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:185,columnNumber:11},this),n.length>0&&e.jsxDEV("button",{onClick:C,className:"p-1 rounded text-text-tertiary hover:text-text-primary transition-colors",title:"Clear events",children:e.jsxDEV(Me,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:198,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:193,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:177,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:168,columnNumber:7},this),e.jsxDEV(W,{open:a,children:e.jsxDEV(pt,{channels:i,onToggle:x,customFilter:m,onCustomFilterChange:V},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:206,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:205,columnNumber:7},this),e.jsxDEV(W,{open:r,children:e.jsxDEV("div",{className:"pb-3 border-b border-surface-border mb-3",children:e.jsxDEV("pre",{className:"text-[9px] font-mono text-text-tertiary bg-surface-sunken rounded-lg p-3 max-h-[50vh] overflow-auto whitespace-pre-wrap",children:JSON.stringify(n.slice(0,50),null,2)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:217,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:216,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:215,columnNumber:7},this),n.length>0&&e.jsxDEV("p",{className:"text-[9px] text-text-tertiary mb-2",children:[n.length," events"]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:225,columnNumber:9},this),e.jsxDEV("div",{className:"flex-1 overflow-y-auto",children:n.length===0?e.jsxDEV("p",{className:"text-xs text-text-tertiary py-6 text-center",children:t?"Waiting for events...":"Subscribing..."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:233,columnNumber:11},this):n.map(u=>e.jsxDEV(dt,{event:u},u.id,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:238,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:231,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:166,columnNumber:5},this)}function bt({queue:t,workers:a,expanded:s,onToggle:r,onWorkerClick:o,onResumeThrottle:n,onQueueThrottle:h,onResumeQueue:i,byStream:f,activeDuration:m}){const V=l.useMemo(()=>{const d=f.find(x=>x.stream_type==="worker"&&ue(x.stream_name)===t);return(d==null?void 0:d.count)??0},[f,t]),y=l.useMemo(()=>[{key:"engine_id",label:"Worker ID",render:d=>e.jsxDEV("span",{className:"text-xs font-mono text-text-tertiary",children:d.engine_id},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:55,columnNumber:9},this),className:"w-48"},{key:"throttle",label:"Throttle",render:d=>{const x=d.throttle;return x===-1?e.jsxDEV("span",{className:"text-xs text-status-error font-medium",children:"Paused"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:66,columnNumber:30},this):x&&x>0?e.jsxDEV("span",{className:"text-xs text-status-warning font-medium",children:H(x)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:67,columnNumber:32},this):e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"0"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:68,columnNumber:16},this)},className:"w-24"},{key:"memory",label:"Memory",render:d=>{var x,C;return e.jsxDEV("span",{className:"text-xs font-mono text-text-tertiary",children:ce((x=d.system)==null?void 0:x.TotalMemoryGB,(C=d.system)==null?void 0:C.FreeMemoryGB)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:76,columnNumber:9},this)},className:"w-36"},{key:"actions",label:"",render:d=>e.jsxDEV(oe,{children:[A(d)&&e.jsxDEV(L,{icon:z,title:"Resume (remove throttle)",onClick:()=>n(d),colorClass:"text-text-tertiary hover:text-status-success"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:88,columnNumber:13},this),e.jsxDEV(L,{icon:J,title:"Adjust throttle",onClick:()=>o(d)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:95,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:86,columnNumber:9},this),className:"w-16"}],[o,n]);return e.jsxDEV("div",{children:[e.jsxDEV("button",{onClick:()=>r(t),className:"group/row relative flex items-center gap-3 w-full py-2 hover:bg-surface-hover transition-colors text-left rounded",children:[e.jsxDEV(Re,{className:`w-3.5 h-3.5 text-text-tertiary/50 transition-transform duration-200 ${s?"rotate-90":""}`,strokeWidth:2},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:112,columnNumber:9},this),e.jsxDEV(We,{queue:t,size:"sm"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:116,columnNumber:9},this),e.jsxDEV("span",{className:"flex-1"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:118,columnNumber:9},this),e.jsxDEV("span",{className:`flex items-center gap-1 text-xs w-24 ${a.some(A)?"text-status-warning":"text-text-tertiary"}`,children:[e.jsxDEV(_e,{className:"w-3 h-3 shrink-0",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:121,columnNumber:11},this),e.jsxDEV("span",{className:"font-mono tabular-nums",children:a.length},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:122,columnNumber:11},this),e.jsxDEV("span",{children:"workers"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:123,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:120,columnNumber:9},this),e.jsxDEV("span",{className:"flex items-center gap-1 text-xs font-mono text-text-tertiary w-28 justify-end mr-16",children:V>0?e.jsxDEV(e.Fragment,{children:[e.jsxDEV($e,{className:"w-3 h-3 shrink-0",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:129,columnNumber:15},this),V.toLocaleString()," in ",m]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:128,columnNumber:13},this):e.jsxDEV("span",{className:"text-text-tertiary/40",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:133,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:126,columnNumber:9},this),e.jsxDEV("span",{className:"absolute right-3 top-1/2 -translate-y-1/2 opacity-0 group-hover/row:opacity-100 transition-opacity flex items-center gap-2",children:[a.some(A)&&e.jsxDEV(z,{className:"w-4 h-4 text-text-tertiary hover:text-status-success",strokeWidth:1.5,onClick:d=>{d.stopPropagation(),i(t)}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:139,columnNumber:13},this),e.jsxDEV(J,{className:"w-4 h-4 text-text-tertiary hover:text-accent",strokeWidth:1.5,onClick:d=>{d.stopPropagation(),h(t)}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:148,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:137,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:108,columnNumber:7},this),e.jsxDEV(W,{open:s,children:e.jsxDEV("div",{className:"ml-6",children:e.jsxDEV(le,{columns:y,data:a,keyFn:k,onRowClick:o,emptyMessage:"No workers",inline:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:161,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:160,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:159,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:107,columnNumber:5},this)}function xt(){const{data:t}=ie(),a=me(),[s,r]=l.useState(!1),o=(t==null?void 0:t.apps)??[],n=h=>{for(const i of o)a.mutate({appId:i.appId,throttle:h});r(!1)};return s?e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("span",{className:"text-xs text-status-error",children:"Pause all queues?"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:22,columnNumber:9},this),e.jsxDEV("button",{onClick:()=>n(-1),className:"px-2.5 py-1 text-xs rounded-md bg-status-error text-white hover:bg-status-error/90 transition-colors",children:"Confirm"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:23,columnNumber:9},this),e.jsxDEV("button",{onClick:()=>r(!1),className:"px-2.5 py-1 text-xs text-text-tertiary hover:text-text-primary transition-colors",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:29,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:21,columnNumber:7},this):e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("button",{onClick:()=>r(!0),className:"flex items-center gap-1.5 px-2.5 py-1 text-xs rounded-md text-status-error/80 hover:text-status-error hover:bg-status-error/10 transition-colors",title:"Pause all queues",children:[e.jsxDEV(Ae,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:46,columnNumber:9},this),"Pause All"]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:41,columnNumber:7},this),e.jsxDEV("button",{onClick:()=>n(0),className:"flex items-center gap-1.5 px-2.5 py-1 text-xs rounded-md text-status-success/80 hover:text-status-success hover:bg-status-success/10 transition-colors",title:"Resume all queues",children:[e.jsxDEV(Oe,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:54,columnNumber:9},this),"Resume All"]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:49,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:40,columnNumber:5},this)}function St(){var re;const{data:t}=ie(),a=(t==null?void 0:t.apps)??[],{filters:s,setFilter:r}=Se({filters:{app_id:"",duration:"1h"}}),o=((re=a[0])==null?void 0:re.appId)??"durable",n=s.app_id||o,h=s.duration||"1h",i=He(),f=6e4,{data:m,isLoading:V,error:y,refetch:d,isFetching:x}=ze(n,f),{data:C}=Ge(n,h,void 0,f),u=l.useMemo(()=>[...(m==null?void 0:m.profiles)??[]].sort((b,v)=>{const _=b.worker_topic||b.stream||"",B=v.worker_topic||v.stream||"";return!b.worker_topic&&v.worker_topic?-1:b.worker_topic&&!v.worker_topic?1:_.localeCompare(B)}),[m==null?void 0:m.profiles]),N=l.useMemo(()=>u.filter(c=>!$(c)),[u]),D=l.useMemo(()=>u.filter($),[u]),j=l.useMemo(()=>et(u),[u]),P=u.filter(A).length,p=l.useMemo(()=>{const c=new Set(a.map(b=>b.appId));return n&&c.add(n),[...c].sort().map(b=>({value:b,label:b}))},[a,n]),[w,E]=l.useState(new Set),Q=l.useCallback(c=>{E(b=>{const v=new Set(b);return v.has(c)?v.delete(c):v.add(c),v})},[]),T=j.size>0&&[...j.keys()].every(c=>w.has(c)),g=l.useCallback(()=>{E(T?new Set:new Set(j.keys()))},[T,j]),S="lt:controlplane:collapsed",[R,F]=l.useState(()=>{try{return JSON.parse(localStorage.getItem(S)||"{}")}catch{return{}}}),q=l.useCallback(c=>{F(b=>{const v={...b,[c]:!b[c]};return localStorage.setItem(S,JSON.stringify(v)),v})},[]),{selectedIds:M,setSelectedIds:Y,toggleCheckbox:X,throttleModalOpen:pe,throttleTargets:Z,selectedThrottleTargets:he,throttleMutation:be,handleBulkThrottle:xe,handleRowClick:I,handleBulkThrottleOpen:ee,handleResumeThrottle:K,handleResumeQueue:Ne,handleQueueThrottle:fe,closeThrottleModal:ge}=lt({activeAppId:n,allProfiles:u,profiles:u}),te=l.useCallback(()=>{const c=new Set(N.map(k)),b=N.length>0&&N.every(v=>M.has(k(v)));Y(v=>{const _=new Set(v);for(const B of c)b?_.delete(B):_.add(B);return _})},[N,M,Y]),ae=l.useCallback(()=>{N.filter(b=>M.has(k(b))).length!==0&&ee()},[N,M,ee]),ve=l.useMemo(()=>nt({profiles:N,selectedIds:M,toggleAll:te,toggleCheckbox:X,onRowThrottle:I,onResumeThrottle:K,onBulkThrottle:ae}),[N,M,te,X,I,K,ae]),Ee=l.useMemo(()=>{const c=[{label:"Engines",value:N.length,dotClass:"bg-blue-500"},{label:"Workers",value:D.length,dotClass:"bg-text-secondary"},{label:"Queues",value:j.size}];return P>0&&c.push({label:"Throttled",value:P,dotClass:"bg-status-warning"}),c},[N.length,D.length,j.size,P]),[se,ye]=l.useState(!1),Ce=l.useCallback(()=>{i.mutate({appId:n},{onSuccess:()=>ye(!0)})},[n,i]);return l.useEffect(()=>{!se&&n&&Ce()},[n]),e.jsxDEV("div",{children:[e.jsxDEV(ke,{title:"Task Queues",stats:Ee,actions:e.jsxDEV(xt,{},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:190,columnNumber:18},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:187,columnNumber:7},this),e.jsxDEV(we,{actions:e.jsxDEV("div",{className:"flex items-center gap-1",children:Ye.map(c=>e.jsxDEV("button",{onClick:()=>r("duration",c.value),className:`px-3 py-1 text-xs rounded-full transition-colors ${h===c.value?"bg-accent text-text-inverse":"text-text-tertiary hover:text-text-primary hover:bg-surface-hover"}`,children:c.label},c.value,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:197,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:195,columnNumber:11},this),children:[e.jsxDEV(Qe,{label:"Application",value:s.app_id,onChange:c=>r("app_id",c),options:p},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:212,columnNumber:9},this),e.jsxDEV("button",{onClick:()=>d(),disabled:x,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs text-text-tertiary hover:text-text-primary transition-colors disabled:opacity-50",children:[e.jsxDEV(Ie,{className:`w-3.5 h-3.5 ${x?"animate-spin":""}`},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:223,columnNumber:11},this),"Roll Call"]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:218,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:193,columnNumber:7},this),y&&e.jsxDEV("div",{className:"mb-6 px-4 py-3 rounded bg-status-error/10 border border-status-error/20",children:e.jsxDEV("p",{className:"text-xs text-status-error font-medium",children:y.message==="Session expired"?"Session expired — please log in again.":`Failed to load mesh data: ${y.message}`},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:231,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:230,columnNumber:9},this),e.jsxDEV("div",{className:"grid grid-cols-1 lg:grid-cols-[1fr_340px] gap-6",children:[e.jsxDEV("div",{className:"flex flex-col gap-12 mt-10",children:[e.jsxDEV(U,{title:`Stream Volume (${h})`,sectionKey:"volume",isCollapsed:!!R.volume,onToggle:q,contentClassName:"mt-4 ml-7",children:e.jsxDEV(ct,{byStream:(C==null?void 0:C.byStream)??[],onNodeFilter:()=>{},onQueueFilter:()=>{}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:250,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:243,columnNumber:11},this),e.jsxDEV(U,{title:"Worker Queues",sectionKey:"queues",isCollapsed:!!R.queues,onToggle:q,contentClassName:"mt-4 ml-7 flex flex-col gap-0",children:V?e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"Discovering mesh nodes..."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:266,columnNumber:15},this):j.size===0?e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:'No worker queues found. Click "Roll Call" to discover.'},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:268,columnNumber:15},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV("div",{className:"flex justify-end mb-2",children:e.jsxDEV("button",{onClick:g,className:"text-[10px] text-accent hover:underline",children:T?"Collapse all":"Expand all"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:272,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:271,columnNumber:17},this),[...j.entries()].sort(([c],[b])=>c.localeCompare(b)).map(([c,b])=>e.jsxDEV(bt,{queue:c,workers:b,expanded:w.has(c),onToggle:Q,onWorkerClick:I,onResumeThrottle:K,onQueueThrottle:fe,onResumeQueue:Ne,byStream:(C==null?void 0:C.byStream)??[],activeDuration:h},c,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:279,columnNumber:21},this))]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:270,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:258,columnNumber:11},this),e.jsxDEV(U,{title:"Engines",sectionKey:"engines",isCollapsed:!!R.engines,onToggle:q,contentClassName:"mt-4 ml-7",children:e.jsxDEV(le,{columns:ve,data:N,keyFn:k,onRowClick:I,isLoading:V,emptyMessage:V?"Discovering engines...":"No engines found.",inline:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:305,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:298,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:241,columnNumber:9},this),e.jsxDEV(ht,{bridgeActive:se},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:317,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:240,columnNumber:7},this),e.jsxDEV(mt,{open:pe,onClose:ge,targets:Z.length>0?Z:he,onApply:xe,isPending:be.isPending},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:320,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:186,columnNumber:5},this)}export{St as ControlPlanePage};
2
+ //# sourceMappingURL=index-Bpm0yeoi.js.map