@hotmeshio/long-tail 0.10.13 → 0.10.14

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 (246) hide show
  1. package/README.md +2 -4
  2. package/build/api/escalations/metadata.js +1 -1
  3. package/build/api/escalations/resolve.js +4 -4
  4. package/build/services/escalation/resolver-validation.d.ts +1 -1
  5. package/build/services/escalation/resolver-validation.js +12 -5
  6. package/build/services/escalation/submit-guard.d.ts +29 -0
  7. package/build/services/escalation/submit-guard.js +57 -0
  8. package/build/shared/form-validation/index.d.ts +4 -0
  9. package/build/shared/form-validation/index.js +4 -0
  10. package/build/shared/form-validation/x-lt-labels.d.ts +28 -0
  11. package/build/shared/form-validation/x-lt-labels.js +42 -0
  12. package/build/shared/form-validation/x-lt-query.d.ts +56 -0
  13. package/build/shared/form-validation/x-lt-query.js +49 -0
  14. package/build/shared/form-validation/x-lt-submit-guard.d.ts +46 -0
  15. package/build/shared/form-validation/x-lt-submit-guard.js +25 -0
  16. package/build/shared/form-validation/x-lt-submit-on-claim.d.ts +22 -0
  17. package/build/shared/form-validation/x-lt-submit-on-claim.js +28 -0
  18. package/build/tsconfig.tsbuildinfo +1 -1
  19. package/dashboard/dist/assets/{AdminDashboard-Bv3pHBzn.js → AdminDashboard-Chg69wlx.js} +2 -2
  20. package/dashboard/dist/assets/{AdminDashboard-Bv3pHBzn.js.map → AdminDashboard-Chg69wlx.js.map} +1 -1
  21. package/dashboard/dist/assets/{AgentConfigPage-Dk2zlvDb.js → AgentConfigPage-DRTFwbfC.js} +2 -2
  22. package/dashboard/dist/assets/{AgentConfigPage-Dk2zlvDb.js.map → AgentConfigPage-DRTFwbfC.js.map} +1 -1
  23. package/dashboard/dist/assets/{AgentDetailPage-DUno6EGs.js → AgentDetailPage-JKByfFIi.js} +3 -3
  24. package/dashboard/dist/assets/{AgentDetailPage-DUno6EGs.js.map → AgentDetailPage-JKByfFIi.js.map} +1 -1
  25. package/dashboard/dist/assets/AgentsPage-BlgEmKhA.js +2 -0
  26. package/dashboard/dist/assets/{AgentsPage-CToVu1qj.js.map → AgentsPage-BlgEmKhA.js.map} +1 -1
  27. package/dashboard/dist/assets/AvailableEscalationsPage-C_7y692Q.js +2 -0
  28. package/dashboard/dist/assets/{AvailableEscalationsPage-DldboL4W.js.map → AvailableEscalationsPage-C_7y692Q.js.map} +1 -1
  29. package/dashboard/dist/assets/{BotPicker-DQOpVB4M.js → BotPicker-CCVcz4Cq.js} +2 -2
  30. package/dashboard/dist/assets/{BotPicker-DQOpVB4M.js.map → BotPicker-CCVcz4Cq.js.map} +1 -1
  31. package/dashboard/dist/assets/{CapabilitiesPage-Dmf46PUJ.js → CapabilitiesPage-Czi9jUwD.js} +2 -2
  32. package/dashboard/dist/assets/{CapabilitiesPage-Dmf46PUJ.js.map → CapabilitiesPage-Czi9jUwD.js.map} +1 -1
  33. package/dashboard/dist/assets/{CollapsibleSection-CDADefUY.js → CollapsibleSection-8YE965QX.js} +2 -2
  34. package/dashboard/dist/assets/{CollapsibleSection-CDADefUY.js.map → CollapsibleSection-8YE965QX.js.map} +1 -1
  35. package/dashboard/dist/assets/CountdownTimer-Bxvq3D7j.js +2 -0
  36. package/dashboard/dist/assets/CountdownTimer-Bxvq3D7j.js.map +1 -0
  37. package/dashboard/dist/assets/{CredentialsPage-8LIEvomi.js → CredentialsPage-Bn7_SX6-.js} +2 -2
  38. package/dashboard/dist/assets/{CredentialsPage-8LIEvomi.js.map → CredentialsPage-Bn7_SX6-.js.map} +1 -1
  39. package/dashboard/dist/assets/{CronLabel-CK3WSsM5.js → CronLabel-Bn4mX_Yn.js} +2 -2
  40. package/dashboard/dist/assets/{CronLabel-CK3WSsM5.js.map → CronLabel-Bn4mX_Yn.js.map} +1 -1
  41. package/dashboard/dist/assets/{CustomDurationPicker-FPmlA6cE.js → CustomDurationPicker-pMcrFyW6.js} +2 -2
  42. package/dashboard/dist/assets/{CustomDurationPicker-FPmlA6cE.js.map → CustomDurationPicker-pMcrFyW6.js.map} +1 -1
  43. package/dashboard/dist/assets/{DropZone-CL9gA7pu.js → DropZone-zCEGjjk-.js} +2 -2
  44. package/dashboard/dist/assets/{DropZone-CL9gA7pu.js.map → DropZone-zCEGjjk-.js.map} +1 -1
  45. package/dashboard/dist/assets/{ElapsedCell-BZVkVxE0.js → ElapsedCell-BGO7IXEg.js} +2 -2
  46. package/dashboard/dist/assets/{ElapsedCell-BZVkVxE0.js.map → ElapsedCell-BGO7IXEg.js.map} +1 -1
  47. package/dashboard/dist/assets/{EscalationListSchemaPage-kYLdUtZX.js → EscalationListSchemaPage-CFDxbd50.js} +3 -3
  48. package/dashboard/dist/assets/{EscalationListSchemaPage-kYLdUtZX.js.map → EscalationListSchemaPage-CFDxbd50.js.map} +1 -1
  49. package/dashboard/dist/assets/{EscalationSchemaPage-kUmCDivo.js → EscalationSchemaPage-DnXPnDkz.js} +3 -3
  50. package/dashboard/dist/assets/{EscalationSchemaPage-kUmCDivo.js.map → EscalationSchemaPage-DnXPnDkz.js.map} +1 -1
  51. package/dashboard/dist/assets/{EscalationsOverview-D17auO-m.js → EscalationsOverview-BZMVXrkK.js} +2 -2
  52. package/dashboard/dist/assets/{EscalationsOverview-D17auO-m.js.map → EscalationsOverview-BZMVXrkK.js.map} +1 -1
  53. package/dashboard/dist/assets/EventTable-Bfi-f8as.js +2 -0
  54. package/dashboard/dist/assets/EventTable-Bfi-f8as.js.map +1 -0
  55. package/dashboard/dist/assets/FilterBar-Do7yR4xM.js +2 -0
  56. package/dashboard/dist/assets/FilterBar-Do7yR4xM.js.map +1 -0
  57. package/dashboard/dist/assets/{GraphInvokePage-D11uOnZi.js → GraphInvokePage-d1ie4T7f.js} +2 -2
  58. package/dashboard/dist/assets/{GraphInvokePage-D11uOnZi.js.map → GraphInvokePage-d1ie4T7f.js.map} +1 -1
  59. package/dashboard/dist/assets/{HomePage-Bcq10Bxx.js → HomePage-BEeodImU.js} +2 -2
  60. package/dashboard/dist/assets/{HomePage-Bcq10Bxx.js.map → HomePage-BEeodImU.js.map} +1 -1
  61. package/dashboard/dist/assets/{ListToolbar-IPXsTb3Q.js → ListToolbar-CLtw-1QN.js} +2 -2
  62. package/dashboard/dist/assets/{ListToolbar-IPXsTb3Q.js.map → ListToolbar-CLtw-1QN.js.map} +1 -1
  63. package/dashboard/dist/assets/{McpOverview-Dx2j0KkF.js → McpOverview-DIsy9TB3.js} +2 -2
  64. package/dashboard/dist/assets/{McpOverview-Dx2j0KkF.js.map → McpOverview-DIsy9TB3.js.map} +1 -1
  65. package/dashboard/dist/assets/{McpQueryDetailPage-CzF_bna8.js → McpQueryDetailPage-6PomdsyD.js} +2 -2
  66. package/dashboard/dist/assets/{McpQueryDetailPage-CzF_bna8.js.map → McpQueryDetailPage-6PomdsyD.js.map} +1 -1
  67. package/dashboard/dist/assets/McpQueryPage-YMdQCXm9.js +2 -0
  68. package/dashboard/dist/assets/{McpQueryPage-CNsuiw_q.js.map → McpQueryPage-YMdQCXm9.js.map} +1 -1
  69. package/dashboard/dist/assets/McpRunDetailPage-DsD1Gm2o.js +2 -0
  70. package/dashboard/dist/assets/McpRunDetailPage-DsD1Gm2o.js.map +1 -0
  71. package/dashboard/dist/assets/{McpRunsPage-CK96s3Nt.js → McpRunsPage--a5Jgb33.js} +2 -2
  72. package/dashboard/dist/assets/{McpRunsPage-CK96s3Nt.js.map → McpRunsPage--a5Jgb33.js.map} +1 -1
  73. package/dashboard/dist/assets/{NamespacePill-B9Vc_Pz2.js → NamespacePill-wV6L4VW1.js} +2 -2
  74. package/dashboard/dist/assets/{NamespacePill-B9Vc_Pz2.js.map → NamespacePill-wV6L4VW1.js.map} +1 -1
  75. package/dashboard/dist/assets/OperationsPage-B2v9k3DT.js +2 -0
  76. package/dashboard/dist/assets/{OperationsPage-DvWrLuH6.js.map → OperationsPage-B2v9k3DT.js.map} +1 -1
  77. package/dashboard/dist/assets/OperatorDashboard-CkLfbxEh.js +2 -0
  78. package/dashboard/dist/assets/{OperatorDashboard-C-jE0IRA.js.map → OperatorDashboard-CkLfbxEh.js.map} +1 -1
  79. package/dashboard/dist/assets/{PageHeader-Ce4GcIYo.js → PageHeader-BtIr6r-8.js} +2 -2
  80. package/dashboard/dist/assets/{PageHeader-Ce4GcIYo.js.map → PageHeader-BtIr6r-8.js.map} +1 -1
  81. package/dashboard/dist/assets/{PageHeaderWithStats-Ck0KZvXD.js → PageHeaderWithStats-C2sGqFQG.js} +2 -2
  82. package/dashboard/dist/assets/{PageHeaderWithStats-Ck0KZvXD.js.map → PageHeaderWithStats-C2sGqFQG.js.map} +1 -1
  83. package/dashboard/dist/assets/{PersonaDetailPage-CJ6jqo7h.js → PersonaDetailPage-CCmOgKQb.js} +2 -2
  84. package/dashboard/dist/assets/{PersonaDetailPage-CJ6jqo7h.js.map → PersonaDetailPage-CCmOgKQb.js.map} +1 -1
  85. package/dashboard/dist/assets/{PersonasPage-D8hL3kL5.js → PersonasPage-BJkSuDTN.js} +2 -2
  86. package/dashboard/dist/assets/{PersonasPage-D8hL3kL5.js.map → PersonasPage-BJkSuDTN.js.map} +1 -1
  87. package/dashboard/dist/assets/{ProcessDetailPage-Vnx8Z5_y.js → ProcessDetailPage-DT9BlJXK.js} +2 -2
  88. package/dashboard/dist/assets/{ProcessDetailPage-Vnx8Z5_y.js.map → ProcessDetailPage-DT9BlJXK.js.map} +1 -1
  89. package/dashboard/dist/assets/{ProcessesListPage-DRYtvS3N.js → ProcessesListPage-DgSGzTDT.js} +2 -2
  90. package/dashboard/dist/assets/{ProcessesListPage-DRYtvS3N.js.map → ProcessesListPage-DgSGzTDT.js.map} +1 -1
  91. package/dashboard/dist/assets/{RoleDetailPage-BKkUvTO-.js → RoleDetailPage-DMphTvro.js} +2 -2
  92. package/dashboard/dist/assets/{RoleDetailPage-BKkUvTO-.js.map → RoleDetailPage-DMphTvro.js.map} +1 -1
  93. package/dashboard/dist/assets/{RolePill-CnuBPhPw.js → RolePill-BBYjhAPj.js} +2 -2
  94. package/dashboard/dist/assets/{RolePill-CnuBPhPw.js.map → RolePill-BBYjhAPj.js.map} +1 -1
  95. package/dashboard/dist/assets/{RolesPage-BHzWK9n6.js → RolesPage-gi_kaot1.js} +2 -2
  96. package/dashboard/dist/assets/{RolesPage-BHzWK9n6.js.map → RolesPage-gi_kaot1.js.map} +1 -1
  97. package/dashboard/dist/assets/RunAsSelector-CateuvcC.js +2 -0
  98. package/dashboard/dist/assets/{RunAsSelector-CS3KQ-BF.js.map → RunAsSelector-CateuvcC.js.map} +1 -1
  99. package/dashboard/dist/assets/{ScanCodesPage-BW4P4zWf.js → ScanCodesPage-CQ8RxMug.js} +2 -2
  100. package/dashboard/dist/assets/{ScanCodesPage-BW4P4zWf.js.map → ScanCodesPage-CQ8RxMug.js.map} +1 -1
  101. package/dashboard/dist/assets/{ScanSchemeDetailPage-BLykA4j-.js → ScanSchemeDetailPage-puSbuxcV.js} +2 -2
  102. package/dashboard/dist/assets/{ScanSchemeDetailPage-BLykA4j-.js.map → ScanSchemeDetailPage-puSbuxcV.js.map} +1 -1
  103. package/dashboard/dist/assets/{ScopeBadge-BUpYpS3x.js → ScopeBadge-xs2Nhjy4.js} +2 -2
  104. package/dashboard/dist/assets/{ScopeBadge-BUpYpS3x.js.map → ScopeBadge-xs2Nhjy4.js.map} +1 -1
  105. package/dashboard/dist/assets/SegmentedTabs-DXNzY05q.js +2 -0
  106. package/dashboard/dist/assets/SegmentedTabs-DXNzY05q.js.map +1 -0
  107. package/dashboard/dist/assets/StickyPagination-Cg-QdYWL.js +2 -0
  108. package/dashboard/dist/assets/StickyPagination-Cg-QdYWL.js.map +1 -0
  109. package/dashboard/dist/assets/{StreamMessageDetail-DyJyZwBl.js → StreamMessageDetail-DEeuh4_-.js} +2 -2
  110. package/dashboard/dist/assets/{StreamMessageDetail-DyJyZwBl.js.map → StreamMessageDetail-DEeuh4_-.js.map} +1 -1
  111. package/dashboard/dist/assets/{SwimlaneTimeline-BlzV74V5.js → SwimlaneTimeline-DMY0jL2F.js} +2 -2
  112. package/dashboard/dist/assets/{SwimlaneTimeline-BlzV74V5.js.map → SwimlaneTimeline-DMY0jL2F.js.map} +1 -1
  113. package/dashboard/dist/assets/{TagInput-BbZ25nNe.js → TagInput-BMmiV-MD.js} +2 -2
  114. package/dashboard/dist/assets/{TagInput-BbZ25nNe.js.map → TagInput-BMmiV-MD.js.map} +1 -1
  115. package/dashboard/dist/assets/{TaskDetailPage-B0p_Z4J_.js → TaskDetailPage-CPbkIvfF.js} +2 -2
  116. package/dashboard/dist/assets/{TaskDetailPage-B0p_Z4J_.js.map → TaskDetailPage-CPbkIvfF.js.map} +1 -1
  117. package/dashboard/dist/assets/{TaskQueuePill-D0QKBrN3.js → TaskQueuePill-DLgYaw1x.js} +2 -2
  118. package/dashboard/dist/assets/{TaskQueuePill-D0QKBrN3.js.map → TaskQueuePill-DLgYaw1x.js.map} +1 -1
  119. package/dashboard/dist/assets/{TasksListPage-CiGR2QiQ.js → TasksListPage-CtHudKhQ.js} +2 -2
  120. package/dashboard/dist/assets/{TasksListPage-CiGR2QiQ.js.map → TasksListPage-CtHudKhQ.js.map} +1 -1
  121. package/dashboard/dist/assets/{TimeAgo-D_DA9ucC.js → TimeAgo-BdHOizWg.js} +2 -2
  122. package/dashboard/dist/assets/{TimeAgo-D_DA9ucC.js.map → TimeAgo-BdHOizWg.js.map} +1 -1
  123. package/dashboard/dist/assets/{TimestampCell-C7rkC9nh.js → TimestampCell-FVukzKRe.js} +2 -2
  124. package/dashboard/dist/assets/{TimestampCell-C7rkC9nh.js.map → TimestampCell-FVukzKRe.js.map} +1 -1
  125. package/dashboard/dist/assets/{ToolPill-8xY9rkoc.js → ToolPill-BvS53hxP.js} +2 -2
  126. package/dashboard/dist/assets/{ToolPill-8xY9rkoc.js.map → ToolPill-BvS53hxP.js.map} +1 -1
  127. package/dashboard/dist/assets/{ToolTestPanel-E8efYGYs.js → ToolTestPanel-HN0OCYTL.js} +2 -2
  128. package/dashboard/dist/assets/{ToolTestPanel-E8efYGYs.js.map → ToolTestPanel-HN0OCYTL.js.map} +1 -1
  129. package/dashboard/dist/assets/{TopicDetailPage-B455XrRc.js → TopicDetailPage-DHdSpN61.js} +4 -4
  130. package/dashboard/dist/assets/{TopicDetailPage-B455XrRc.js.map → TopicDetailPage-DHdSpN61.js.map} +1 -1
  131. package/dashboard/dist/assets/{TopicsPage-1VAc29Qw.js → TopicsPage-Clr6Tl5P.js} +2 -2
  132. package/dashboard/dist/assets/{TopicsPage-1VAc29Qw.js.map → TopicsPage-Clr6Tl5P.js.map} +1 -1
  133. package/dashboard/dist/assets/{UserName-DikzjQHJ.js → UserName-BUVYyIAS.js} +2 -2
  134. package/dashboard/dist/assets/{UserName-DikzjQHJ.js.map → UserName-BUVYyIAS.js.map} +1 -1
  135. package/dashboard/dist/assets/WorkflowExecutionPage-kncWFfe5.js +2 -0
  136. package/dashboard/dist/assets/WorkflowExecutionPage-kncWFfe5.js.map +1 -0
  137. package/dashboard/dist/assets/{WorkflowPill-Da406nEj.js → WorkflowPill-BPC_Dc_I.js} +2 -2
  138. package/dashboard/dist/assets/{WorkflowPill-Da406nEj.js.map → WorkflowPill-BPC_Dc_I.js.map} +1 -1
  139. package/dashboard/dist/assets/WorkflowsDashboard-4ypPDGKx.js +2 -0
  140. package/dashboard/dist/assets/{WorkflowsDashboard-BMQd_0tW.js.map → WorkflowsDashboard-4ypPDGKx.js.map} +1 -1
  141. package/dashboard/dist/assets/{WorkflowsOverview-CdxjVifp.js → WorkflowsOverview-CeQlZkkd.js} +2 -2
  142. package/dashboard/dist/assets/{WorkflowsOverview-CdxjVifp.js.map → WorkflowsOverview-CeQlZkkd.js.map} +1 -1
  143. package/dashboard/dist/assets/{YamlWorkflowDetailPage-DNVffIXa.js → YamlWorkflowDetailPage-DLAlEzwT.js} +10 -10
  144. package/dashboard/dist/assets/{YamlWorkflowDetailPage-DNVffIXa.js.map → YamlWorkflowDetailPage-DLAlEzwT.js.map} +1 -1
  145. package/dashboard/dist/assets/{YamlWorkflowsPage-BGP8wuos.js → YamlWorkflowsPage-DQhenKFT.js} +2 -2
  146. package/dashboard/dist/assets/{YamlWorkflowsPage-BGP8wuos.js.map → YamlWorkflowsPage-DQhenKFT.js.map} +1 -1
  147. package/dashboard/dist/assets/{agents-BZJLIJ4h.js → agents-s3feet3W.js} +2 -2
  148. package/dashboard/dist/assets/{agents-BZJLIJ4h.js.map → agents-s3feet3W.js.map} +1 -1
  149. package/dashboard/dist/assets/{bots-ClLcDGJb.js → bots-CkSd2rn9.js} +2 -2
  150. package/dashboard/dist/assets/{bots-ClLcDGJb.js.map → bots-CkSd2rn9.js.map} +1 -1
  151. package/dashboard/dist/assets/capabilities-DA_r09tM.js +2 -0
  152. package/dashboard/dist/assets/{capabilities-IaCcS7ge.js.map → capabilities-DA_r09tM.js.map} +1 -1
  153. package/dashboard/dist/assets/{controlplane-Zi4m_MSx.js → controlplane-C9c25q21.js} +2 -2
  154. package/dashboard/dist/assets/{controlplane-Zi4m_MSx.js.map → controlplane-C9c25q21.js.map} +1 -1
  155. package/dashboard/dist/assets/{escalation-columns-BY2mg9DY.js → escalation-columns-Cp3UrT48.js} +2 -2
  156. package/dashboard/dist/assets/{escalation-columns-BY2mg9DY.js.map → escalation-columns-Cp3UrT48.js.map} +1 -1
  157. package/dashboard/dist/assets/{index-CJu2PBNx.js → index--7Vdkzwd.js} +2 -2
  158. package/dashboard/dist/assets/{index-CJu2PBNx.js.map → index--7Vdkzwd.js.map} +1 -1
  159. package/dashboard/dist/assets/{index-CfAi1OsI.js → index--DG-qQBT.js} +26 -26
  160. package/dashboard/dist/assets/index--DG-qQBT.js.map +1 -0
  161. package/dashboard/dist/assets/{index-CmnNqpWg.js → index-BIcYbDVf.js} +2 -2
  162. package/dashboard/dist/assets/{index-CmnNqpWg.js.map → index-BIcYbDVf.js.map} +1 -1
  163. package/dashboard/dist/assets/index-BU5FFAJo.js +2 -0
  164. package/dashboard/dist/assets/{index-CLmZaNTK.js.map → index-BU5FFAJo.js.map} +1 -1
  165. package/dashboard/dist/assets/{index-yGNt29V9.js → index-Bo5TtX9l.js} +2 -2
  166. package/dashboard/dist/assets/{index-yGNt29V9.js.map → index-Bo5TtX9l.js.map} +1 -1
  167. package/dashboard/dist/assets/{index-BqGnhkh0.js → index-C-MmR-jf.js} +2 -2
  168. package/dashboard/dist/assets/{index-BqGnhkh0.js.map → index-C-MmR-jf.js.map} +1 -1
  169. package/dashboard/dist/assets/{index-BzkE48xJ.js → index-C7ABSOU2.js} +2 -2
  170. package/dashboard/dist/assets/{index-BzkE48xJ.js.map → index-C7ABSOU2.js.map} +1 -1
  171. package/dashboard/dist/assets/index-Cmxzk4ay.js +5 -0
  172. package/dashboard/dist/assets/{index-CvNBdkB1.js.map → index-Cmxzk4ay.js.map} +1 -1
  173. package/dashboard/dist/assets/{index-C3o4OisO.js → index-Cw9poaez.js} +2 -2
  174. package/dashboard/dist/assets/{index-C3o4OisO.js.map → index-Cw9poaez.js.map} +1 -1
  175. package/dashboard/dist/assets/index-DEbY57_c.js +3 -0
  176. package/dashboard/dist/assets/index-DEbY57_c.js.map +1 -0
  177. package/dashboard/dist/assets/index-DnV6LSeY.css +1 -0
  178. package/dashboard/dist/assets/{index-D0zFReGL.js → index-DvoMXQqO.js} +2 -2
  179. package/dashboard/dist/assets/{index-D0zFReGL.js.map → index-DvoMXQqO.js.map} +1 -1
  180. package/dashboard/dist/assets/{index-kiKZresb.js → index-S13oPvuS.js} +2 -2
  181. package/dashboard/dist/assets/{index-kiKZresb.js.map → index-S13oPvuS.js.map} +1 -1
  182. package/dashboard/dist/assets/index-WxE3ONia.js +2 -0
  183. package/dashboard/dist/assets/{index-Dldi3Q3M.js.map → index-WxE3ONia.js.map} +1 -1
  184. package/dashboard/dist/assets/{knowledge-DWLxGTib.js → knowledge-Bpln0zy_.js} +2 -2
  185. package/dashboard/dist/assets/{knowledge-DWLxGTib.js.map → knowledge-Bpln0zy_.js.map} +1 -1
  186. package/dashboard/dist/assets/{mcp-B6AARZ2I.js → mcp-BqDq3RZH.js} +2 -2
  187. package/dashboard/dist/assets/{mcp-B6AARZ2I.js.map → mcp-BqDq3RZH.js.map} +1 -1
  188. package/dashboard/dist/assets/{mcp-query-DrkvBU3a.js → mcp-query-DGue75R6.js} +2 -2
  189. package/dashboard/dist/assets/{mcp-query-DrkvBU3a.js.map → mcp-query-DGue75R6.js.map} +1 -1
  190. package/dashboard/dist/assets/{personas-Cmz2SAEU.js → personas-B8z_sTiJ.js} +2 -2
  191. package/dashboard/dist/assets/{personas-Cmz2SAEU.js.map → personas-B8z_sTiJ.js.map} +1 -1
  192. package/dashboard/dist/assets/{pipelines-CSgfVCMy.js → pipelines-DYgNd9nB.js} +2 -2
  193. package/dashboard/dist/assets/{pipelines-CSgfVCMy.js.map → pipelines-DYgNd9nB.js.map} +1 -1
  194. package/dashboard/dist/assets/{tasks-UOtUkDk-.js → tasks-CJdjjhgO.js} +2 -2
  195. package/dashboard/dist/assets/{tasks-UOtUkDk-.js.map → tasks-CJdjjhgO.js.map} +1 -1
  196. package/dashboard/dist/assets/{topics-Df5hGh6o.js → topics-DPrL8Dtq.js} +2 -2
  197. package/dashboard/dist/assets/{topics-Df5hGh6o.js.map → topics-DPrL8Dtq.js.map} +1 -1
  198. package/dashboard/dist/assets/{useEventHooks-PDbuSJ12.js → useEventHooks-DXCgDgiu.js} +2 -2
  199. package/dashboard/dist/assets/{useEventHooks-PDbuSJ12.js.map → useEventHooks-DXCgDgiu.js.map} +1 -1
  200. package/dashboard/dist/assets/{useNamespace-tZSOlge3.js → useNamespace-DnFZfy7N.js} +2 -2
  201. package/dashboard/dist/assets/{useNamespace-tZSOlge3.js.map → useNamespace-DnFZfy7N.js.map} +1 -1
  202. package/dashboard/dist/assets/{useYamlActivityEvents-CINLzE32.js → useYamlActivityEvents-kx5CLENv.js} +2 -2
  203. package/dashboard/dist/assets/{useYamlActivityEvents-CINLzE32.js.map → useYamlActivityEvents-kx5CLENv.js.map} +1 -1
  204. package/dashboard/dist/assets/{users-G8qwyZKS.js → users-DKng7vAG.js} +2 -2
  205. package/dashboard/dist/assets/{users-G8qwyZKS.js.map → users-DKng7vAG.js.map} +1 -1
  206. package/dashboard/dist/assets/{vendor-icons-BpZiWH2f.js → vendor-icons-CN-bAo9U.js} +138 -133
  207. package/dashboard/dist/assets/vendor-icons-CN-bAo9U.js.map +1 -0
  208. package/dashboard/dist/assets/{workflows-DbPqi1TW.js → workflows-C4V0rMkM.js} +2 -2
  209. package/dashboard/dist/assets/{workflows-DbPqi1TW.js.map → workflows-C4V0rMkM.js.map} +1 -1
  210. package/dashboard/dist/assets/{yaml-workflows-DozD8hpR.js → yaml-workflows-D3PAiJ9d.js} +2 -2
  211. package/dashboard/dist/assets/{yaml-workflows-DozD8hpR.js.map → yaml-workflows-D3PAiJ9d.js.map} +1 -1
  212. package/dashboard/dist/index.html +3 -3
  213. package/docs/design-principles.md +9 -7
  214. package/docs/hitl/x-lt-embed.md +8 -4
  215. package/docs/hitl/x-lt-footer.md +68 -0
  216. package/docs/hitl/x-lt-list-schema.md +10 -3
  217. package/docs/hitl-guide.md +9 -0
  218. package/package.json +1 -1
  219. package/dashboard/dist/assets/AgentsPage-CToVu1qj.js +0 -2
  220. package/dashboard/dist/assets/AvailableEscalationsPage-DldboL4W.js +0 -2
  221. package/dashboard/dist/assets/CountdownTimer-DPjIkerB.js +0 -2
  222. package/dashboard/dist/assets/CountdownTimer-DPjIkerB.js.map +0 -1
  223. package/dashboard/dist/assets/EventTable-CwPWl163.js +0 -2
  224. package/dashboard/dist/assets/EventTable-CwPWl163.js.map +0 -1
  225. package/dashboard/dist/assets/FilterBar-D7GghUsU.js +0 -2
  226. package/dashboard/dist/assets/FilterBar-D7GghUsU.js.map +0 -1
  227. package/dashboard/dist/assets/McpQueryPage-CNsuiw_q.js +0 -2
  228. package/dashboard/dist/assets/McpRunDetailPage-BJguEMS0.js +0 -2
  229. package/dashboard/dist/assets/McpRunDetailPage-BJguEMS0.js.map +0 -1
  230. package/dashboard/dist/assets/OperationsPage-DvWrLuH6.js +0 -2
  231. package/dashboard/dist/assets/OperatorDashboard-C-jE0IRA.js +0 -2
  232. package/dashboard/dist/assets/RunAsSelector-CS3KQ-BF.js +0 -2
  233. package/dashboard/dist/assets/StickyPagination-hMrnLXde.js +0 -2
  234. package/dashboard/dist/assets/StickyPagination-hMrnLXde.js.map +0 -1
  235. package/dashboard/dist/assets/WorkflowExecutionPage-C15GSAoe.js +0 -2
  236. package/dashboard/dist/assets/WorkflowExecutionPage-C15GSAoe.js.map +0 -1
  237. package/dashboard/dist/assets/WorkflowsDashboard-BMQd_0tW.js +0 -2
  238. package/dashboard/dist/assets/capabilities-IaCcS7ge.js +0 -2
  239. package/dashboard/dist/assets/index-CLmZaNTK.js +0 -2
  240. package/dashboard/dist/assets/index-CfAi1OsI.js.map +0 -1
  241. package/dashboard/dist/assets/index-CvNBdkB1.js +0 -5
  242. package/dashboard/dist/assets/index-Dldi3Q3M.js +0 -2
  243. package/dashboard/dist/assets/index-mKcQGi2B.js +0 -3
  244. package/dashboard/dist/assets/index-mKcQGi2B.js.map +0 -1
  245. package/dashboard/dist/assets/index-zQiUPfxA.css +0 -1
  246. package/dashboard/dist/assets/vendor-icons-BpZiWH2f.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{j as e}from"./vendor-query-RUZdMvN6.js";import{d as c}from"./tasks-UOtUkDk-.js";import{S as x}from"./StatusBadge-DkgllZHv.js";import{P as m}from"./PriorityBadge-BETdj4M-.js";import{S as i,J as r}from"./index-CfAi1OsI.js";import{P as p}from"./PageHeader-Ce4GcIYo.js";import{e as j,L as u}from"./vendor-react-CdqEC2zv.js";import"./vendor-icons-BpZiWH2f.js";function a({label:t,value:s}){return e.jsxs("div",{children:[e.jsx(i,{className:"mb-1",children:t}),e.jsx("div",{className:"text-sm text-text-primary",children:s??"—"})]})}function f({items:t}){return t.length===0?null:e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute left-[7px] top-3 bottom-3 w-px bg-surface-border"}),e.jsx("div",{className:"space-y-0",children:t.map(s=>e.jsxs("div",{className:"relative flex gap-4 py-3",children:[e.jsx("div",{className:"relative z-10 mt-1",children:e.jsx("div",{className:`w-[15px] h-[15px] rounded-full border-2 ${s.category==="system"?"border-accent-muted bg-surface-raised":"border-accent bg-accent"}`})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-baseline gap-3",children:[e.jsx("p",{className:"text-sm text-text-primary",children:s.label}),s.timestamp&&e.jsx("time",{className:"text-2xs text-text-tertiary font-mono shrink-0",children:new Date(s.timestamp).toLocaleTimeString()})]}),s.detail&&e.jsx("div",{className:"mt-1",children:s.detail})]})]},s.id))})]})}function S(){const{id:t}=j(),{data:s,isLoading:o}=c(t);if(o)return e.jsxs("div",{className:"animate-pulse space-y-4",children:[e.jsx("div",{className:"h-8 bg-surface-sunken rounded w-48"}),e.jsx("div",{className:"h-40 bg-surface-sunken rounded"})]});if(!s)return e.jsx("p",{className:"text-sm text-text-secondary",children:"Task not found."});const n=(s.milestones??[]).map((l,d)=>({id:d,label:l.name,timestamp:l.created_at,detail:e.jsx("span",{className:"text-xs text-text-secondary font-mono",children:typeof l.value=="object"?JSON.stringify(l.value):String(l.value)}),category:"user"}));return e.jsxs("div",{children:[e.jsx(p,{title:"Task Detail"}),e.jsxs("div",{className:"grid grid-cols-1 @wall:grid-cols-3 gap-12",children:[e.jsxs("div",{className:"lg:col-span-2 space-y-10",children:[e.jsxs("div",{className:"grid grid-cols-2 sm:grid-cols-3 gap-6",children:[e.jsx(a,{label:"Status",value:e.jsx(x,{status:s.status})}),e.jsx(a,{label:"Priority",value:e.jsx(m,{priority:s.priority})}),e.jsx(a,{label:"Workflow Type",value:e.jsx("span",{className:"font-mono text-xs",children:s.workflow_type})}),e.jsx(a,{label:"LT Type",value:e.jsx("span",{className:"font-mono text-xs",children:s.lt_type})}),e.jsx(a,{label:"Task Queue",value:e.jsx("span",{className:"font-mono text-xs",children:s.task_queue})}),e.jsx(a,{label:"Workflow ID",value:e.jsx("span",{className:"font-mono text-xs break-all",children:s.workflow_id})}),e.jsx(a,{label:"Started",value:s.started_at?new Date(s.started_at).toLocaleString():"—"}),e.jsx(a,{label:"Completed",value:s.completed_at?new Date(s.completed_at).toLocaleString():"—"}),e.jsx(a,{label:"Signal ID",value:e.jsx("span",{className:"font-mono text-xs break-all",children:s.signal_id})})]}),s.error&&e.jsxs("div",{children:[e.jsx(i,{className:"mb-2 text-status-error",children:"Error"}),e.jsx("p",{className:"text-sm text-text-primary font-mono",children:s.error})]}),n.length>0&&e.jsxs("div",{children:[e.jsx(i,{className:"mb-4",children:"Milestones"}),e.jsx(f,{items:n})]}),e.jsx(u,{to:`/workflows/executions/${s.workflow_id}`,className:"btn-secondary inline-block text-xs",children:"View Workflow Execution"})]}),e.jsxs("div",{className:"space-y-8",children:[e.jsx(r,{data:s.envelope,label:"Envelope"}),s.metadata&&e.jsx(r,{data:s.metadata,label:"Metadata"}),s.data&&e.jsx(r,{data:s.data,label:"Result Data"})]})]})]})}export{S as TaskDetailPage};
2
- //# sourceMappingURL=TaskDetailPage-B0p_Z4J_.js.map
1
+ import{j as e}from"./vendor-query-RUZdMvN6.js";import{d as c}from"./tasks-CJdjjhgO.js";import{S as x}from"./StatusBadge-DkgllZHv.js";import{P as m}from"./PriorityBadge-BETdj4M-.js";import{S as i,J as r}from"./index--DG-qQBT.js";import{P as p}from"./PageHeader-BtIr6r-8.js";import{e as j,L as u}from"./vendor-react-CdqEC2zv.js";import"./vendor-icons-CN-bAo9U.js";function a({label:t,value:s}){return e.jsxs("div",{children:[e.jsx(i,{className:"mb-1",children:t}),e.jsx("div",{className:"text-sm text-text-primary",children:s??"—"})]})}function f({items:t}){return t.length===0?null:e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute left-[7px] top-3 bottom-3 w-px bg-surface-border"}),e.jsx("div",{className:"space-y-0",children:t.map(s=>e.jsxs("div",{className:"relative flex gap-4 py-3",children:[e.jsx("div",{className:"relative z-10 mt-1",children:e.jsx("div",{className:`w-[15px] h-[15px] rounded-full border-2 ${s.category==="system"?"border-accent-muted bg-surface-raised":"border-accent bg-accent"}`})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-baseline gap-3",children:[e.jsx("p",{className:"text-sm text-text-primary",children:s.label}),s.timestamp&&e.jsx("time",{className:"text-2xs text-text-tertiary font-mono shrink-0",children:new Date(s.timestamp).toLocaleTimeString()})]}),s.detail&&e.jsx("div",{className:"mt-1",children:s.detail})]})]},s.id))})]})}function S(){const{id:t}=j(),{data:s,isLoading:o}=c(t);if(o)return e.jsxs("div",{className:"animate-pulse space-y-4",children:[e.jsx("div",{className:"h-8 bg-surface-sunken rounded w-48"}),e.jsx("div",{className:"h-40 bg-surface-sunken rounded"})]});if(!s)return e.jsx("p",{className:"text-sm text-text-secondary",children:"Task not found."});const n=(s.milestones??[]).map((l,d)=>({id:d,label:l.name,timestamp:l.created_at,detail:e.jsx("span",{className:"text-xs text-text-secondary font-mono",children:typeof l.value=="object"?JSON.stringify(l.value):String(l.value)}),category:"user"}));return e.jsxs("div",{children:[e.jsx(p,{title:"Task Detail"}),e.jsxs("div",{className:"grid grid-cols-1 @wall:grid-cols-3 gap-12",children:[e.jsxs("div",{className:"lg:col-span-2 space-y-10",children:[e.jsxs("div",{className:"grid grid-cols-2 sm:grid-cols-3 gap-6",children:[e.jsx(a,{label:"Status",value:e.jsx(x,{status:s.status})}),e.jsx(a,{label:"Priority",value:e.jsx(m,{priority:s.priority})}),e.jsx(a,{label:"Workflow Type",value:e.jsx("span",{className:"font-mono text-xs",children:s.workflow_type})}),e.jsx(a,{label:"LT Type",value:e.jsx("span",{className:"font-mono text-xs",children:s.lt_type})}),e.jsx(a,{label:"Task Queue",value:e.jsx("span",{className:"font-mono text-xs",children:s.task_queue})}),e.jsx(a,{label:"Workflow ID",value:e.jsx("span",{className:"font-mono text-xs break-all",children:s.workflow_id})}),e.jsx(a,{label:"Started",value:s.started_at?new Date(s.started_at).toLocaleString():"—"}),e.jsx(a,{label:"Completed",value:s.completed_at?new Date(s.completed_at).toLocaleString():"—"}),e.jsx(a,{label:"Signal ID",value:e.jsx("span",{className:"font-mono text-xs break-all",children:s.signal_id})})]}),s.error&&e.jsxs("div",{children:[e.jsx(i,{className:"mb-2 text-status-error",children:"Error"}),e.jsx("p",{className:"text-sm text-text-primary font-mono",children:s.error})]}),n.length>0&&e.jsxs("div",{children:[e.jsx(i,{className:"mb-4",children:"Milestones"}),e.jsx(f,{items:n})]}),e.jsx(u,{to:`/workflows/executions/${s.workflow_id}`,className:"btn-secondary inline-block text-xs",children:"View Workflow Execution"})]}),e.jsxs("div",{className:"space-y-8",children:[e.jsx(r,{data:s.envelope,label:"Envelope"}),s.metadata&&e.jsx(r,{data:s.metadata,label:"Metadata"}),s.data&&e.jsx(r,{data:s.data,label:"Result Data"})]})]})]})}export{S as TaskDetailPage};
2
+ //# sourceMappingURL=TaskDetailPage-CPbkIvfF.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TaskDetailPage-B0p_Z4J_.js","sources":["../../src/components/common/data/Field.tsx","../../src/components/common/display/Timeline.tsx","../../src/pages/workflows/TaskDetailPage.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { SectionLabel } from '../layout/SectionLabel';\n\ninterface FieldProps {\n label: string;\n value: ReactNode;\n}\n\nexport function Field({ label, value }: FieldProps) {\n return (\n <div>\n <SectionLabel className=\"mb-1\">{label}</SectionLabel>\n <div className=\"text-sm text-text-primary\">{value ?? '—'}</div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nexport interface TimelineItem {\n id: string | number;\n label: string;\n timestamp?: string;\n detail?: ReactNode;\n category?: 'system' | 'user';\n}\n\nexport function Timeline({ items }: { items: TimelineItem[] }) {\n if (items.length === 0) return null;\n\n return (\n <div className=\"relative\">\n {/* Vertical line */}\n <div className=\"absolute left-[7px] top-3 bottom-3 w-px bg-surface-border\" />\n\n <div className=\"space-y-0\">\n {items.map((item) => (\n <div key={item.id} className=\"relative flex gap-4 py-3\">\n {/* Dot */}\n <div className=\"relative z-10 mt-1\">\n <div\n className={`w-[15px] h-[15px] rounded-full border-2 ${\n item.category === 'system'\n ? 'border-accent-muted bg-surface-raised'\n : 'border-accent bg-accent'\n }`}\n />\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-baseline gap-3\">\n <p className=\"text-sm text-text-primary\">{item.label}</p>\n {item.timestamp && (\n <time className=\"text-2xs text-text-tertiary font-mono shrink-0\">\n {new Date(item.timestamp).toLocaleTimeString()}\n </time>\n )}\n </div>\n {item.detail && <div className=\"mt-1\">{item.detail}</div>}\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import { useParams, Link } from 'react-router-dom';\nimport { useTask } from '../../api/tasks';\nimport { StatusBadge } from '../../components/common/display/StatusBadge';\nimport { PriorityBadge } from '../../components/common/display/PriorityBadge';\nimport { Field } from '../../components/common/data/Field';\nimport { JsonViewer } from '../../components/common/data/JsonViewer';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { SectionLabel } from '../../components/common/layout/SectionLabel';\nimport { Timeline, type TimelineItem } from '../../components/common/display/Timeline';\n\nexport function TaskDetailPage() {\n const { id } = useParams<{ id: string }>();\n const { data: task, isLoading } = useTask(id!);\n\n if (isLoading) {\n return (\n <div className=\"animate-pulse space-y-4\">\n <div className=\"h-8 bg-surface-sunken rounded w-48\" />\n <div className=\"h-40 bg-surface-sunken rounded\" />\n </div>\n );\n }\n\n if (!task) {\n return <p className=\"text-sm text-text-secondary\">Task not found.</p>;\n }\n\n const milestoneItems: TimelineItem[] = (task.milestones ?? []).map((m, i) => ({\n id: i,\n label: m.name,\n timestamp: m.created_at,\n detail: (\n <span className=\"text-xs text-text-secondary font-mono\">\n {typeof m.value === 'object' ? JSON.stringify(m.value) : String(m.value)}\n </span>\n ),\n category: 'user' as const,\n }));\n\n return (\n <div>\n <PageHeader title=\"Task Detail\" />\n\n <div className=\"grid grid-cols-1 @wall:grid-cols-3 gap-12\">\n {/* Left column — metadata */}\n <div className=\"lg:col-span-2 space-y-10\">\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-6\">\n <Field label=\"Status\" value={<StatusBadge status={task.status} />} />\n <Field label=\"Priority\" value={<PriorityBadge priority={task.priority} />} />\n <Field label=\"Workflow Type\" value={<span className=\"font-mono text-xs\">{task.workflow_type}</span>} />\n <Field label=\"LT Type\" value={<span className=\"font-mono text-xs\">{task.lt_type}</span>} />\n <Field label=\"Task Queue\" value={<span className=\"font-mono text-xs\">{task.task_queue}</span>} />\n <Field label=\"Workflow ID\" value={<span className=\"font-mono text-xs break-all\">{task.workflow_id}</span>} />\n <Field label=\"Started\" value={task.started_at ? new Date(task.started_at).toLocaleString() : '—'} />\n <Field label=\"Completed\" value={task.completed_at ? new Date(task.completed_at).toLocaleString() : '—'} />\n <Field label=\"Signal ID\" value={<span className=\"font-mono text-xs break-all\">{task.signal_id}</span>} />\n </div>\n\n {task.error && (\n <div>\n <SectionLabel className=\"mb-2 text-status-error\">Error</SectionLabel>\n <p className=\"text-sm text-text-primary font-mono\">{task.error}</p>\n </div>\n )}\n\n {milestoneItems.length > 0 && (\n <div>\n <SectionLabel className=\"mb-4\">Milestones</SectionLabel>\n <Timeline items={milestoneItems} />\n </div>\n )}\n\n <Link\n to={`/workflows/executions/${task.workflow_id}`}\n className=\"btn-secondary inline-block text-xs\"\n >\n View Workflow Execution\n </Link>\n </div>\n\n {/* Right column — payloads */}\n <div className=\"space-y-8\">\n <JsonViewer data={task.envelope} label=\"Envelope\" />\n {task.metadata && <JsonViewer data={task.metadata} label=\"Metadata\" />}\n {task.data && <JsonViewer data={task.data} label=\"Result Data\" />}\n </div>\n </div>\n </div>\n );\n}\n"],"names":["Field","label","value","jsx","SectionLabel","Timeline","items","jsxs","item","TaskDetailPage","id","useParams","task","isLoading","useTask","milestoneItems","m","i","PageHeader","StatusBadge","PriorityBadge","Link","JsonViewer"],"mappings":"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"}
1
+ {"version":3,"file":"TaskDetailPage-CPbkIvfF.js","sources":["../../src/components/common/data/Field.tsx","../../src/components/common/display/Timeline.tsx","../../src/pages/workflows/TaskDetailPage.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { SectionLabel } from '../layout/SectionLabel';\n\ninterface FieldProps {\n label: string;\n value: ReactNode;\n}\n\nexport function Field({ label, value }: FieldProps) {\n return (\n <div>\n <SectionLabel className=\"mb-1\">{label}</SectionLabel>\n <div className=\"text-sm text-text-primary\">{value ?? '—'}</div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nexport interface TimelineItem {\n id: string | number;\n label: string;\n timestamp?: string;\n detail?: ReactNode;\n category?: 'system' | 'user';\n}\n\nexport function Timeline({ items }: { items: TimelineItem[] }) {\n if (items.length === 0) return null;\n\n return (\n <div className=\"relative\">\n {/* Vertical line */}\n <div className=\"absolute left-[7px] top-3 bottom-3 w-px bg-surface-border\" />\n\n <div className=\"space-y-0\">\n {items.map((item) => (\n <div key={item.id} className=\"relative flex gap-4 py-3\">\n {/* Dot */}\n <div className=\"relative z-10 mt-1\">\n <div\n className={`w-[15px] h-[15px] rounded-full border-2 ${\n item.category === 'system'\n ? 'border-accent-muted bg-surface-raised'\n : 'border-accent bg-accent'\n }`}\n />\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-baseline gap-3\">\n <p className=\"text-sm text-text-primary\">{item.label}</p>\n {item.timestamp && (\n <time className=\"text-2xs text-text-tertiary font-mono shrink-0\">\n {new Date(item.timestamp).toLocaleTimeString()}\n </time>\n )}\n </div>\n {item.detail && <div className=\"mt-1\">{item.detail}</div>}\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import { useParams, Link } from 'react-router-dom';\nimport { useTask } from '../../api/tasks';\nimport { StatusBadge } from '../../components/common/display/StatusBadge';\nimport { PriorityBadge } from '../../components/common/display/PriorityBadge';\nimport { Field } from '../../components/common/data/Field';\nimport { JsonViewer } from '../../components/common/data/JsonViewer';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { SectionLabel } from '../../components/common/layout/SectionLabel';\nimport { Timeline, type TimelineItem } from '../../components/common/display/Timeline';\n\nexport function TaskDetailPage() {\n const { id } = useParams<{ id: string }>();\n const { data: task, isLoading } = useTask(id!);\n\n if (isLoading) {\n return (\n <div className=\"animate-pulse space-y-4\">\n <div className=\"h-8 bg-surface-sunken rounded w-48\" />\n <div className=\"h-40 bg-surface-sunken rounded\" />\n </div>\n );\n }\n\n if (!task) {\n return <p className=\"text-sm text-text-secondary\">Task not found.</p>;\n }\n\n const milestoneItems: TimelineItem[] = (task.milestones ?? []).map((m, i) => ({\n id: i,\n label: m.name,\n timestamp: m.created_at,\n detail: (\n <span className=\"text-xs text-text-secondary font-mono\">\n {typeof m.value === 'object' ? JSON.stringify(m.value) : String(m.value)}\n </span>\n ),\n category: 'user' as const,\n }));\n\n return (\n <div>\n <PageHeader title=\"Task Detail\" />\n\n <div className=\"grid grid-cols-1 @wall:grid-cols-3 gap-12\">\n {/* Left column — metadata */}\n <div className=\"lg:col-span-2 space-y-10\">\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-6\">\n <Field label=\"Status\" value={<StatusBadge status={task.status} />} />\n <Field label=\"Priority\" value={<PriorityBadge priority={task.priority} />} />\n <Field label=\"Workflow Type\" value={<span className=\"font-mono text-xs\">{task.workflow_type}</span>} />\n <Field label=\"LT Type\" value={<span className=\"font-mono text-xs\">{task.lt_type}</span>} />\n <Field label=\"Task Queue\" value={<span className=\"font-mono text-xs\">{task.task_queue}</span>} />\n <Field label=\"Workflow ID\" value={<span className=\"font-mono text-xs break-all\">{task.workflow_id}</span>} />\n <Field label=\"Started\" value={task.started_at ? new Date(task.started_at).toLocaleString() : '—'} />\n <Field label=\"Completed\" value={task.completed_at ? new Date(task.completed_at).toLocaleString() : '—'} />\n <Field label=\"Signal ID\" value={<span className=\"font-mono text-xs break-all\">{task.signal_id}</span>} />\n </div>\n\n {task.error && (\n <div>\n <SectionLabel className=\"mb-2 text-status-error\">Error</SectionLabel>\n <p className=\"text-sm text-text-primary font-mono\">{task.error}</p>\n </div>\n )}\n\n {milestoneItems.length > 0 && (\n <div>\n <SectionLabel className=\"mb-4\">Milestones</SectionLabel>\n <Timeline items={milestoneItems} />\n </div>\n )}\n\n <Link\n to={`/workflows/executions/${task.workflow_id}`}\n className=\"btn-secondary inline-block text-xs\"\n >\n View Workflow Execution\n </Link>\n </div>\n\n {/* Right column — payloads */}\n <div className=\"space-y-8\">\n <JsonViewer data={task.envelope} label=\"Envelope\" />\n {task.metadata && <JsonViewer data={task.metadata} label=\"Metadata\" />}\n {task.data && <JsonViewer data={task.data} label=\"Result Data\" />}\n </div>\n </div>\n </div>\n );\n}\n"],"names":["Field","label","value","jsx","SectionLabel","Timeline","items","jsxs","item","TaskDetailPage","id","useParams","task","isLoading","useTask","milestoneItems","m","i","PageHeader","StatusBadge","PriorityBadge","Link","JsonViewer"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{j as e}from"./vendor-query-RUZdMvN6.js";import{R as a}from"./vendor-icons-BpZiWH2f.js";function c({queue:t,size:s="sm"}){const r=s==="md"?"px-2.5 py-0.5 text-2xs gap-1.5":"px-2 py-0.5 text-2xs gap-1",o=s==="md"?"w-3 h-3":"w-2.5 h-2.5";return e.jsxs("span",{className:`inline-flex items-center ${r} font-mono border-y border-surface-border/50 text-text-secondary`,children:[e.jsx(a,{className:`${o} shrink-0 text-accent/75`}),t]})}export{c as T};
2
- //# sourceMappingURL=TaskQueuePill-D0QKBrN3.js.map
1
+ import{j as e}from"./vendor-query-RUZdMvN6.js";import{R as a}from"./vendor-icons-CN-bAo9U.js";function c({queue:t,size:s="sm"}){const r=s==="md"?"px-2.5 py-0.5 text-2xs gap-1.5":"px-2 py-0.5 text-2xs gap-1",o=s==="md"?"w-3 h-3":"w-2.5 h-2.5";return e.jsxs("span",{className:`inline-flex items-center ${r} font-mono border-y border-surface-border/50 text-text-secondary`,children:[e.jsx(a,{className:`${o} shrink-0 text-accent/75`}),t]})}export{c as T};
2
+ //# sourceMappingURL=TaskQueuePill-DLgYaw1x.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TaskQueuePill-D0QKBrN3.js","sources":["../../src/components/common/display/TaskQueuePill.tsx"],"sourcesContent":["import { Radio } from 'lucide-react';\n\ninterface TaskQueuePillProps {\n queue: string;\n size?: 'sm' | 'md';\n}\n\nexport function TaskQueuePill({ queue, size = 'sm' }: TaskQueuePillProps) {\n const sizeClass = size === 'md'\n ? 'px-2.5 py-0.5 text-2xs gap-1.5'\n : 'px-2 py-0.5 text-2xs gap-1';\n const iconClass = size === 'md' ? 'w-3 h-3' : 'w-2.5 h-2.5';\n\n return (\n <span className={`inline-flex items-center ${sizeClass} font-mono border-y border-surface-border/50 text-text-secondary`}>\n <Radio className={`${iconClass} shrink-0 text-accent/75`} />\n {queue}\n </span>\n );\n}\n"],"names":["TaskQueuePill","queue","size","sizeClass","iconClass","jsxs","jsx","Radio"],"mappings":"8FAOO,SAASA,EAAc,CAAE,MAAAC,EAAO,KAAAC,EAAO,MAA4B,CACxE,MAAMC,EAAYD,IAAS,KACvB,iCACA,6BACEE,EAAYF,IAAS,KAAO,UAAY,cAE9C,OACEG,EAAAA,KAAC,OAAA,CAAK,UAAW,4BAA4BF,CAAS,mEACpD,SAAA,CAAAG,EAAAA,IAACC,EAAA,CAAM,UAAW,GAAGH,CAAS,2BAA4B,EACzDH,CAAA,EACH,CAEJ"}
1
+ {"version":3,"file":"TaskQueuePill-DLgYaw1x.js","sources":["../../src/components/common/display/TaskQueuePill.tsx"],"sourcesContent":["import { Radio } from 'lucide-react';\n\ninterface TaskQueuePillProps {\n queue: string;\n size?: 'sm' | 'md';\n}\n\nexport function TaskQueuePill({ queue, size = 'sm' }: TaskQueuePillProps) {\n const sizeClass = size === 'md'\n ? 'px-2.5 py-0.5 text-2xs gap-1.5'\n : 'px-2 py-0.5 text-2xs gap-1';\n const iconClass = size === 'md' ? 'w-3 h-3' : 'w-2.5 h-2.5';\n\n return (\n <span className={`inline-flex items-center ${sizeClass} font-mono border-y border-surface-border/50 text-text-secondary`}>\n <Radio className={`${iconClass} shrink-0 text-accent/75`} />\n {queue}\n </span>\n );\n}\n"],"names":["TaskQueuePill","queue","size","sizeClass","iconClass","jsxs","jsx","Radio"],"mappings":"8FAOO,SAASA,EAAc,CAAE,MAAAC,EAAO,KAAAC,EAAO,MAA4B,CACxE,MAAMC,EAAYD,IAAS,KACvB,iCACA,6BACEE,EAAYF,IAAS,KAAO,UAAY,cAE9C,OACEG,EAAAA,KAAC,OAAA,CAAK,UAAW,4BAA4BF,CAAS,mEACpD,SAAA,CAAAG,EAAAA,IAACC,EAAA,CAAM,UAAW,GAAGH,CAAS,2BAA4B,EACzDH,CAAA,EACH,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{j as t}from"./vendor-query-RUZdMvN6.js";import{c as u}from"./tasks-UOtUkDk-.js";import{u as g}from"./workflows-DbPqi1TW.js";import{u as w}from"./useFilterParams-crmlBw_l.js";import{D as y}from"./DataTable-Bir0Xs1p.js";import{S as k}from"./StatusBadge-DkgllZHv.js";import{P as c}from"./PriorityBadge-BETdj4M-.js";import{T as n}from"./TimeAgo-D_DA9ucC.js";import{S as x}from"./StickyPagination-hMrnLXde.js";import{F as P,b as p}from"./FilterBar-D7GghUsU.js";import{P as b}from"./PageHeader-Ce4GcIYo.js";import{W as _}from"./WorkflowPill-Da406nEj.js";import{u as j}from"./vendor-react-CdqEC2zv.js";import"./index-CfAi1OsI.js";import"./vendor-icons-BpZiWH2f.js";import"./EmptyState-lpUFYfun.js";const v=[{value:"pending",label:"Pending"},{value:"in_progress",label:"In Progress"},{value:"completed",label:"Completed"},{value:"needs_intervention",label:"Needs Intervention"},{value:"cancelled",label:"Cancelled"}],S=[{key:"status",label:"Status",render:e=>t.jsx(k,{status:e.status}),className:"w-40"},{key:"workflow_type",label:"Workflow Type",render:e=>t.jsx(_,{type:e.workflow_type})},{key:"lt_type",label:"LT Type",render:e=>t.jsx("span",{className:"text-text-secondary text-xs",children:e.lt_type})},{key:"priority",label:"Priority",render:e=>t.jsx(c,{priority:e.priority}),className:"w-20"},{key:"started_at",label:"Started",render:e=>t.jsx(n,{date:e.started_at}),className:"w-28"},{key:"updated_at",label:"Updated",render:e=>t.jsx(n,{date:e.updated_at}),className:"w-28"}];function O(){const e=j(),{filters:r,setFilter:l,pagination:s}=w({filters:{status:"",workflow_type:""}}),{data:m}=g(),d=[...new Set((m??[]).map(a=>a.workflow_type))].sort(),{data:o,isLoading:f}=u({status:r.status||void 0,workflow_type:r.workflow_type||void 0,limit:s.pageSize,offset:s.offset}),i=(o==null?void 0:o.total)??0;return t.jsxs("div",{children:[t.jsx(b,{title:"Tasks"}),t.jsxs(P,{children:[t.jsx(p,{label:"Status",value:r.status,onChange:a=>l("status",a),options:v}),t.jsx(p,{label:"Workflow Type",value:r.workflow_type,onChange:a=>l("workflow_type",a),options:d.map(a=>({value:a,label:a}))})]}),t.jsx(y,{columns:S,data:(o==null?void 0:o.tasks)??[],keyFn:a=>a.id,onRowClick:a=>e(`/workflows/tasks/detail/${a.id}`),isLoading:f,emptyMessage:"No tasks found"}),t.jsx(x,{page:s.page,totalPages:s.totalPages(i),onPageChange:s.setPage,total:i,pageSize:s.pageSize,onPageSizeChange:s.setPageSize})]})}export{O as TasksListPage};
2
- //# sourceMappingURL=TasksListPage-CiGR2QiQ.js.map
1
+ import{j as t}from"./vendor-query-RUZdMvN6.js";import{c as u}from"./tasks-CJdjjhgO.js";import{u as g}from"./workflows-C4V0rMkM.js";import{u as w}from"./useFilterParams-crmlBw_l.js";import{D as y}from"./DataTable-Bir0Xs1p.js";import{S as k}from"./StatusBadge-DkgllZHv.js";import{P as c}from"./PriorityBadge-BETdj4M-.js";import{T as n}from"./TimeAgo-BdHOizWg.js";import{S as x}from"./StickyPagination-Cg-QdYWL.js";import{F as P,b as p}from"./FilterBar-Do7yR4xM.js";import{P as b}from"./PageHeader-BtIr6r-8.js";import{W as _}from"./WorkflowPill-BPC_Dc_I.js";import{u as j}from"./vendor-react-CdqEC2zv.js";import"./index--DG-qQBT.js";import"./vendor-icons-CN-bAo9U.js";import"./EmptyState-lpUFYfun.js";const v=[{value:"pending",label:"Pending"},{value:"in_progress",label:"In Progress"},{value:"completed",label:"Completed"},{value:"needs_intervention",label:"Needs Intervention"},{value:"cancelled",label:"Cancelled"}],S=[{key:"status",label:"Status",render:e=>t.jsx(k,{status:e.status}),className:"w-40"},{key:"workflow_type",label:"Workflow Type",render:e=>t.jsx(_,{type:e.workflow_type})},{key:"lt_type",label:"LT Type",render:e=>t.jsx("span",{className:"text-text-secondary text-xs",children:e.lt_type})},{key:"priority",label:"Priority",render:e=>t.jsx(c,{priority:e.priority}),className:"w-20"},{key:"started_at",label:"Started",render:e=>t.jsx(n,{date:e.started_at}),className:"w-28"},{key:"updated_at",label:"Updated",render:e=>t.jsx(n,{date:e.updated_at}),className:"w-28"}];function O(){const e=j(),{filters:r,setFilter:l,pagination:s}=w({filters:{status:"",workflow_type:""}}),{data:m}=g(),d=[...new Set((m??[]).map(a=>a.workflow_type))].sort(),{data:o,isLoading:f}=u({status:r.status||void 0,workflow_type:r.workflow_type||void 0,limit:s.pageSize,offset:s.offset}),i=(o==null?void 0:o.total)??0;return t.jsxs("div",{children:[t.jsx(b,{title:"Tasks"}),t.jsxs(P,{children:[t.jsx(p,{label:"Status",value:r.status,onChange:a=>l("status",a),options:v}),t.jsx(p,{label:"Workflow Type",value:r.workflow_type,onChange:a=>l("workflow_type",a),options:d.map(a=>({value:a,label:a}))})]}),t.jsx(y,{columns:S,data:(o==null?void 0:o.tasks)??[],keyFn:a=>a.id,onRowClick:a=>e(`/workflows/tasks/detail/${a.id}`),isLoading:f,emptyMessage:"No tasks found"}),t.jsx(x,{page:s.page,totalPages:s.totalPages(i),onPageChange:s.setPage,total:i,pageSize:s.pageSize,onPageSizeChange:s.setPageSize})]})}export{O as TasksListPage};
2
+ //# sourceMappingURL=TasksListPage-CtHudKhQ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TasksListPage-CiGR2QiQ.js","sources":["../../src/pages/workflows/TasksListPage.tsx"],"sourcesContent":["import { useNavigate } from 'react-router-dom';\nimport { useTasks } from '../../api/tasks';\nimport { useWorkflowConfigs } from '../../api/workflows';\nimport { useFilterParams } from '../../hooks/useFilterParams';\nimport { DataTable, type Column } from '../../components/common/data/DataTable';\nimport { StatusBadge } from '../../components/common/display/StatusBadge';\nimport { PriorityBadge } from '../../components/common/display/PriorityBadge';\nimport { TimeAgo } from '../../components/common/display/TimeAgo';\nimport { StickyPagination } from '../../components/common/data/StickyPagination';\nimport { FilterBar, FilterSelect } from '../../components/common/data/FilterBar';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { WorkflowPill } from '../../components/common/display/WorkflowPill';\nimport type { LTTaskRecord } from '../../api/types';\n\nconst statusOptions = [\n { value: 'pending', label: 'Pending' },\n { value: 'in_progress', label: 'In Progress' },\n { value: 'completed', label: 'Completed' },\n { value: 'needs_intervention', label: 'Needs Intervention' },\n { value: 'cancelled', label: 'Cancelled' },\n];\n\nconst columns: Column<LTTaskRecord>[] = [\n {\n key: 'status',\n label: 'Status',\n render: (row) => <StatusBadge status={row.status} />,\n className: 'w-40',\n },\n {\n key: 'workflow_type',\n label: 'Workflow Type',\n render: (row) => <WorkflowPill type={row.workflow_type} />,\n },\n {\n key: 'lt_type',\n label: 'LT Type',\n render: (row) => (\n <span className=\"text-text-secondary text-xs\">{row.lt_type}</span>\n ),\n },\n {\n key: 'priority',\n label: 'Priority',\n render: (row) => <PriorityBadge priority={row.priority} />,\n className: 'w-20',\n },\n {\n key: 'started_at',\n label: 'Started',\n render: (row) => <TimeAgo date={row.started_at} />,\n className: 'w-28',\n },\n {\n key: 'updated_at',\n label: 'Updated',\n render: (row) => <TimeAgo date={row.updated_at} />,\n className: 'w-28',\n },\n];\n\nexport function TasksListPage() {\n const navigate = useNavigate();\n const { filters, setFilter, pagination } = useFilterParams({\n filters: { status: '', workflow_type: '' },\n });\n\n const { data: configs } = useWorkflowConfigs();\n const workflowTypes = [...new Set((configs ?? []).map((c) => c.workflow_type))].sort();\n\n const { data, isLoading } = useTasks({\n status: filters.status || undefined,\n workflow_type: filters.workflow_type || undefined,\n limit: pagination.pageSize,\n offset: pagination.offset,\n });\n\n const total = data?.total ?? 0;\n\n return (\n <div>\n <PageHeader title=\"Tasks\" />\n\n <FilterBar>\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={statusOptions}\n />\n <FilterSelect\n label=\"Workflow Type\"\n value={filters.workflow_type}\n onChange={(v) => setFilter('workflow_type', v)}\n options={workflowTypes.map((t) => ({ value: t, label: t }))}\n />\n </FilterBar>\n\n <DataTable\n columns={columns}\n data={data?.tasks ?? []}\n keyFn={(row) => row.id}\n onRowClick={(row) => navigate(`/workflows/tasks/detail/${row.id}`)}\n isLoading={isLoading}\n emptyMessage=\"No tasks found\"\n />\n\n <StickyPagination\n page={pagination.page}\n totalPages={pagination.totalPages(total)}\n onPageChange={pagination.setPage}\n total={total}\n pageSize={pagination.pageSize}\n onPageSizeChange={pagination.setPageSize}\n />\n </div>\n );\n}\n"],"names":["statusOptions","columns","row","StatusBadge","WorkflowPill","jsx","PriorityBadge","TimeAgo","TasksListPage","navigate","useNavigate","filters","setFilter","pagination","useFilterParams","configs","useWorkflowConfigs","workflowTypes","c","data","isLoading","useTasks","total","PageHeader","FilterBar","FilterSelect","v","t","DataTable","StickyPagination"],"mappings":"0rBAcA,MAAMA,EAAgB,CACpB,CAAE,MAAO,UAAW,MAAO,SAAA,EAC3B,CAAE,MAAO,cAAe,MAAO,aAAA,EAC/B,CAAE,MAAO,YAAa,MAAO,WAAA,EAC7B,CAAE,MAAO,qBAAsB,MAAO,oBAAA,EACtC,CAAE,MAAO,YAAa,MAAO,WAAA,CAC/B,EAEMC,EAAkC,CACtC,CACE,IAAK,SACL,MAAO,SACP,OAASC,SAASC,EAAA,CAAY,OAAQD,EAAI,OAAQ,EAClD,UAAW,MAAA,EAEb,CACE,IAAK,gBACL,MAAO,gBACP,OAASA,SAASE,EAAA,CAAa,KAAMF,EAAI,aAAA,CAAe,CAAA,EAE1D,CACE,IAAK,UACL,MAAO,UACP,OAASA,GACPG,EAAAA,IAAC,QAAK,UAAU,8BAA+B,WAAI,OAAA,CAAQ,CAAA,EAG/D,CACE,IAAK,WACL,MAAO,WACP,OAASH,SAASI,EAAA,CAAc,SAAUJ,EAAI,SAAU,EACxD,UAAW,MAAA,EAEb,CACE,IAAK,aACL,MAAO,UACP,OAASA,SAASK,EAAA,CAAQ,KAAML,EAAI,WAAY,EAChD,UAAW,MAAA,EAEb,CACE,IAAK,aACL,MAAO,UACP,OAASA,SAASK,EAAA,CAAQ,KAAML,EAAI,WAAY,EAChD,UAAW,MAAA,CAEf,EAEO,SAASM,GAAgB,CAC9B,MAAMC,EAAWC,EAAA,EACX,CAAE,QAAAC,EAAS,UAAAC,EAAW,WAAAC,CAAA,EAAeC,EAAgB,CACzD,QAAS,CAAE,OAAQ,GAAI,cAAe,EAAA,CAAG,CAC1C,EAEK,CAAE,KAAMC,CAAA,EAAYC,EAAA,EACpBC,EAAgB,CAAC,GAAG,IAAI,KAAKF,GAAW,CAAA,GAAI,IAAKG,GAAMA,EAAE,aAAa,CAAC,CAAC,EAAE,KAAA,EAE1E,CAAE,KAAAC,EAAM,UAAAC,CAAA,EAAcC,EAAS,CACnC,OAAQV,EAAQ,QAAU,OAC1B,cAAeA,EAAQ,eAAiB,OACxC,MAAOE,EAAW,SAClB,OAAQA,EAAW,MAAA,CACpB,EAEKS,GAAQH,GAAA,YAAAA,EAAM,QAAS,EAE7B,cACG,MAAA,CACC,SAAA,CAAAd,EAAAA,IAACkB,EAAA,CAAW,MAAM,OAAA,CAAQ,SAEzBC,EAAA,CACC,SAAA,CAAAnB,EAAAA,IAACoB,EAAA,CACC,MAAM,SACN,MAAOd,EAAQ,OACf,SAAWe,GAAMd,EAAU,SAAUc,CAAC,EACtC,QAAS1B,CAAA,CAAA,EAEXK,EAAAA,IAACoB,EAAA,CACC,MAAM,gBACN,MAAOd,EAAQ,cACf,SAAWe,GAAMd,EAAU,gBAAiBc,CAAC,EAC7C,QAAST,EAAc,IAAKU,IAAO,CAAE,MAAOA,EAAG,MAAOA,GAAI,CAAA,CAAA,CAC5D,EACF,EAEAtB,EAAAA,IAACuB,EAAA,CACC,QAAA3B,EACA,MAAMkB,GAAA,YAAAA,EAAM,QAAS,CAAA,EACrB,MAAQjB,GAAQA,EAAI,GACpB,WAAaA,GAAQO,EAAS,2BAA2BP,EAAI,EAAE,EAAE,EACjE,UAAAkB,EACA,aAAa,gBAAA,CAAA,EAGff,EAAAA,IAACwB,EAAA,CACC,KAAMhB,EAAW,KACjB,WAAYA,EAAW,WAAWS,CAAK,EACvC,aAAcT,EAAW,QACzB,MAAAS,EACA,SAAUT,EAAW,SACrB,iBAAkBA,EAAW,WAAA,CAAA,CAC/B,EACF,CAEJ"}
1
+ {"version":3,"file":"TasksListPage-CtHudKhQ.js","sources":["../../src/pages/workflows/TasksListPage.tsx"],"sourcesContent":["import { useNavigate } from 'react-router-dom';\nimport { useTasks } from '../../api/tasks';\nimport { useWorkflowConfigs } from '../../api/workflows';\nimport { useFilterParams } from '../../hooks/useFilterParams';\nimport { DataTable, type Column } from '../../components/common/data/DataTable';\nimport { StatusBadge } from '../../components/common/display/StatusBadge';\nimport { PriorityBadge } from '../../components/common/display/PriorityBadge';\nimport { TimeAgo } from '../../components/common/display/TimeAgo';\nimport { StickyPagination } from '../../components/common/data/StickyPagination';\nimport { FilterBar, FilterSelect } from '../../components/common/data/FilterBar';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { WorkflowPill } from '../../components/common/display/WorkflowPill';\nimport type { LTTaskRecord } from '../../api/types';\n\nconst statusOptions = [\n { value: 'pending', label: 'Pending' },\n { value: 'in_progress', label: 'In Progress' },\n { value: 'completed', label: 'Completed' },\n { value: 'needs_intervention', label: 'Needs Intervention' },\n { value: 'cancelled', label: 'Cancelled' },\n];\n\nconst columns: Column<LTTaskRecord>[] = [\n {\n key: 'status',\n label: 'Status',\n render: (row) => <StatusBadge status={row.status} />,\n className: 'w-40',\n },\n {\n key: 'workflow_type',\n label: 'Workflow Type',\n render: (row) => <WorkflowPill type={row.workflow_type} />,\n },\n {\n key: 'lt_type',\n label: 'LT Type',\n render: (row) => (\n <span className=\"text-text-secondary text-xs\">{row.lt_type}</span>\n ),\n },\n {\n key: 'priority',\n label: 'Priority',\n render: (row) => <PriorityBadge priority={row.priority} />,\n className: 'w-20',\n },\n {\n key: 'started_at',\n label: 'Started',\n render: (row) => <TimeAgo date={row.started_at} />,\n className: 'w-28',\n },\n {\n key: 'updated_at',\n label: 'Updated',\n render: (row) => <TimeAgo date={row.updated_at} />,\n className: 'w-28',\n },\n];\n\nexport function TasksListPage() {\n const navigate = useNavigate();\n const { filters, setFilter, pagination } = useFilterParams({\n filters: { status: '', workflow_type: '' },\n });\n\n const { data: configs } = useWorkflowConfigs();\n const workflowTypes = [...new Set((configs ?? []).map((c) => c.workflow_type))].sort();\n\n const { data, isLoading } = useTasks({\n status: filters.status || undefined,\n workflow_type: filters.workflow_type || undefined,\n limit: pagination.pageSize,\n offset: pagination.offset,\n });\n\n const total = data?.total ?? 0;\n\n return (\n <div>\n <PageHeader title=\"Tasks\" />\n\n <FilterBar>\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={statusOptions}\n />\n <FilterSelect\n label=\"Workflow Type\"\n value={filters.workflow_type}\n onChange={(v) => setFilter('workflow_type', v)}\n options={workflowTypes.map((t) => ({ value: t, label: t }))}\n />\n </FilterBar>\n\n <DataTable\n columns={columns}\n data={data?.tasks ?? []}\n keyFn={(row) => row.id}\n onRowClick={(row) => navigate(`/workflows/tasks/detail/${row.id}`)}\n isLoading={isLoading}\n emptyMessage=\"No tasks found\"\n />\n\n <StickyPagination\n page={pagination.page}\n totalPages={pagination.totalPages(total)}\n onPageChange={pagination.setPage}\n total={total}\n pageSize={pagination.pageSize}\n onPageSizeChange={pagination.setPageSize}\n />\n </div>\n );\n}\n"],"names":["statusOptions","columns","row","StatusBadge","WorkflowPill","jsx","PriorityBadge","TimeAgo","TasksListPage","navigate","useNavigate","filters","setFilter","pagination","useFilterParams","configs","useWorkflowConfigs","workflowTypes","c","data","isLoading","useTasks","total","PageHeader","FilterBar","FilterSelect","v","t","DataTable","StickyPagination"],"mappings":"0rBAcA,MAAMA,EAAgB,CACpB,CAAE,MAAO,UAAW,MAAO,SAAA,EAC3B,CAAE,MAAO,cAAe,MAAO,aAAA,EAC/B,CAAE,MAAO,YAAa,MAAO,WAAA,EAC7B,CAAE,MAAO,qBAAsB,MAAO,oBAAA,EACtC,CAAE,MAAO,YAAa,MAAO,WAAA,CAC/B,EAEMC,EAAkC,CACtC,CACE,IAAK,SACL,MAAO,SACP,OAASC,SAASC,EAAA,CAAY,OAAQD,EAAI,OAAQ,EAClD,UAAW,MAAA,EAEb,CACE,IAAK,gBACL,MAAO,gBACP,OAASA,SAASE,EAAA,CAAa,KAAMF,EAAI,aAAA,CAAe,CAAA,EAE1D,CACE,IAAK,UACL,MAAO,UACP,OAASA,GACPG,EAAAA,IAAC,QAAK,UAAU,8BAA+B,WAAI,OAAA,CAAQ,CAAA,EAG/D,CACE,IAAK,WACL,MAAO,WACP,OAASH,SAASI,EAAA,CAAc,SAAUJ,EAAI,SAAU,EACxD,UAAW,MAAA,EAEb,CACE,IAAK,aACL,MAAO,UACP,OAASA,SAASK,EAAA,CAAQ,KAAML,EAAI,WAAY,EAChD,UAAW,MAAA,EAEb,CACE,IAAK,aACL,MAAO,UACP,OAASA,SAASK,EAAA,CAAQ,KAAML,EAAI,WAAY,EAChD,UAAW,MAAA,CAEf,EAEO,SAASM,GAAgB,CAC9B,MAAMC,EAAWC,EAAA,EACX,CAAE,QAAAC,EAAS,UAAAC,EAAW,WAAAC,CAAA,EAAeC,EAAgB,CACzD,QAAS,CAAE,OAAQ,GAAI,cAAe,EAAA,CAAG,CAC1C,EAEK,CAAE,KAAMC,CAAA,EAAYC,EAAA,EACpBC,EAAgB,CAAC,GAAG,IAAI,KAAKF,GAAW,CAAA,GAAI,IAAKG,GAAMA,EAAE,aAAa,CAAC,CAAC,EAAE,KAAA,EAE1E,CAAE,KAAAC,EAAM,UAAAC,CAAA,EAAcC,EAAS,CACnC,OAAQV,EAAQ,QAAU,OAC1B,cAAeA,EAAQ,eAAiB,OACxC,MAAOE,EAAW,SAClB,OAAQA,EAAW,MAAA,CACpB,EAEKS,GAAQH,GAAA,YAAAA,EAAM,QAAS,EAE7B,cACG,MAAA,CACC,SAAA,CAAAd,EAAAA,IAACkB,EAAA,CAAW,MAAM,OAAA,CAAQ,SAEzBC,EAAA,CACC,SAAA,CAAAnB,EAAAA,IAACoB,EAAA,CACC,MAAM,SACN,MAAOd,EAAQ,OACf,SAAWe,GAAMd,EAAU,SAAUc,CAAC,EACtC,QAAS1B,CAAA,CAAA,EAEXK,EAAAA,IAACoB,EAAA,CACC,MAAM,gBACN,MAAOd,EAAQ,cACf,SAAWe,GAAMd,EAAU,gBAAiBc,CAAC,EAC7C,QAAST,EAAc,IAAKU,IAAO,CAAE,MAAOA,EAAG,MAAOA,GAAI,CAAA,CAAA,CAC5D,EACF,EAEAtB,EAAAA,IAACuB,EAAA,CACC,QAAA3B,EACA,MAAMkB,GAAA,YAAAA,EAAM,QAAS,CAAA,EACrB,MAAQjB,GAAQA,EAAI,GACpB,WAAaA,GAAQO,EAAS,2BAA2BP,EAAI,EAAE,EAAE,EACjE,UAAAkB,EACA,aAAa,gBAAA,CAAA,EAGff,EAAAA,IAACwB,EAAA,CACC,KAAMhB,EAAW,KACjB,WAAYA,EAAW,WAAWS,CAAK,EACvC,aAAcT,EAAW,QACzB,MAAAS,EACA,SAAUT,EAAW,SACrB,iBAAkBA,EAAW,WAAA,CAAA,CAC/B,EACF,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{j as o}from"./vendor-query-RUZdMvN6.js";import{b as e}from"./index-CfAi1OsI.js";function i({date:r,className:t=""}){return o.jsx(e,{date:r,format:"relative",className:t})}export{i as T};
2
- //# sourceMappingURL=TimeAgo-D_DA9ucC.js.map
1
+ import{j as o}from"./vendor-query-RUZdMvN6.js";import{b as e}from"./index--DG-qQBT.js";function i({date:r,className:t=""}){return o.jsx(e,{date:r,format:"relative",className:t})}export{i as T};
2
+ //# sourceMappingURL=TimeAgo-BdHOizWg.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TimeAgo-D_DA9ucC.js","sources":["../../src/components/common/display/TimeAgo.tsx"],"sourcesContent":["import { DateValue } from './DateValue';\n\n/**\n * Relative time display (\"5 minutes ago\").\n * Thin wrapper around DateValue for backward compatibility.\n */\nexport function TimeAgo({ date, className = '' }: { date: string; className?: string }) {\n return <DateValue date={date} format=\"relative\" className={className} />;\n}\n"],"names":["TimeAgo","date","className","jsx","DateValue"],"mappings":"uFAMO,SAASA,EAAQ,CAAE,KAAAC,EAAM,UAAAC,EAAY,IAA4C,CACtF,OAAOC,EAAAA,IAACC,EAAA,CAAU,KAAAH,EAAY,OAAO,WAAW,UAAAC,EAAsB,CACxE"}
1
+ {"version":3,"file":"TimeAgo-BdHOizWg.js","sources":["../../src/components/common/display/TimeAgo.tsx"],"sourcesContent":["import { DateValue } from './DateValue';\n\n/**\n * Relative time display (\"5 minutes ago\").\n * Thin wrapper around DateValue for backward compatibility.\n */\nexport function TimeAgo({ date, className = '' }: { date: string; className?: string }) {\n return <DateValue date={date} format=\"relative\" className={className} />;\n}\n"],"names":["TimeAgo","date","className","jsx","DateValue"],"mappings":"uFAMO,SAASA,EAAQ,CAAE,KAAAC,EAAM,UAAAC,EAAY,IAA4C,CACtF,OAAOC,EAAAA,IAACC,EAAA,CAAU,KAAAH,EAAY,OAAO,WAAW,UAAAC,EAAsB,CACxE"}
@@ -1,2 +1,2 @@
1
- import{j as e}from"./vendor-query-RUZdMvN6.js";import{b as s}from"./index-CfAi1OsI.js";function o({date:t}){return e.jsxs("div",{children:[e.jsx(s,{date:t,format:"relative"}),e.jsxs("p",{className:"text-2xs font-mono text-text-secondary mt-0.5 whitespace-nowrap",children:[new Date(t).toISOString().replace("T"," ").slice(0,19)," UTC"]})]})}export{o as T};
2
- //# sourceMappingURL=TimestampCell-C7rkC9nh.js.map
1
+ import{j as e}from"./vendor-query-RUZdMvN6.js";import{b as s}from"./index--DG-qQBT.js";function o({date:t}){return e.jsxs("div",{children:[e.jsx(s,{date:t,format:"relative"}),e.jsxs("p",{className:"text-2xs font-mono text-text-secondary mt-0.5 whitespace-nowrap",children:[new Date(t).toISOString().replace("T"," ").slice(0,19)," UTC"]})]})}export{o as T};
2
+ //# sourceMappingURL=TimestampCell-FVukzKRe.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TimestampCell-C7rkC9nh.js","sources":["../../src/components/common/display/TimestampCell.tsx"],"sourcesContent":["import { DateValue } from './DateValue';\n\ninterface TimestampCellProps {\n date: string;\n}\n\n/**\n * Standard timestamp cell for data tables.\n * Shows friendly \"ago\" text with UTC timestamp below.\n */\nexport function TimestampCell({ date }: TimestampCellProps) {\n return (\n <div>\n <DateValue date={date} format=\"relative\" />\n <p className=\"text-2xs font-mono text-text-secondary mt-0.5 whitespace-nowrap\">\n {new Date(date).toISOString().replace('T', ' ').slice(0, 19)} UTC\n </p>\n </div>\n );\n}\n"],"names":["TimestampCell","date","jsx","DateValue","jsxs"],"mappings":"uFAUO,SAASA,EAAc,CAAE,KAAAC,GAA4B,CAC1D,cACG,MAAA,CACC,SAAA,CAAAC,EAAAA,IAACC,EAAA,CAAU,KAAAF,EAAY,OAAO,UAAA,CAAW,EACzCG,EAAAA,KAAC,IAAA,CAAE,UAAU,kEACV,SAAA,CAAA,IAAI,KAAKH,CAAI,EAAE,cAAc,QAAQ,IAAK,GAAG,EAAE,MAAM,EAAG,EAAE,EAAE,MAAA,CAAA,CAC/D,CAAA,EACF,CAEJ"}
1
+ {"version":3,"file":"TimestampCell-FVukzKRe.js","sources":["../../src/components/common/display/TimestampCell.tsx"],"sourcesContent":["import { DateValue } from './DateValue';\n\ninterface TimestampCellProps {\n date: string;\n}\n\n/**\n * Standard timestamp cell for data tables.\n * Shows friendly \"ago\" text with UTC timestamp below.\n */\nexport function TimestampCell({ date }: TimestampCellProps) {\n return (\n <div>\n <DateValue date={date} format=\"relative\" />\n <p className=\"text-2xs font-mono text-text-secondary mt-0.5 whitespace-nowrap\">\n {new Date(date).toISOString().replace('T', ' ').slice(0, 19)} UTC\n </p>\n </div>\n );\n}\n"],"names":["TimestampCell","date","jsx","DateValue","jsxs"],"mappings":"uFAUO,SAASA,EAAc,CAAE,KAAAC,GAA4B,CAC1D,cACG,MAAA,CACC,SAAA,CAAAC,EAAAA,IAACC,EAAA,CAAU,KAAAF,EAAY,OAAO,UAAA,CAAW,EACzCG,EAAAA,KAAC,IAAA,CAAE,UAAU,kEACV,SAAA,CAAA,IAAI,KAAKH,CAAI,EAAE,cAAc,QAAQ,IAAK,GAAG,EAAE,MAAM,EAAG,EAAE,EAAE,MAAA,CAAA,CAC/D,CAAA,EACF,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{j as t}from"./vendor-query-RUZdMvN6.js";import{ay as r}from"./vendor-icons-BpZiWH2f.js";function m({name:e,size:s="sm"}){const n=s==="md"?"px-2 py-0.5 text-xs gap-1.5":"px-1.5 py-px text-2xs gap-1",o=s==="md"?"w-2.5 h-2.5":"w-2 h-2";return t.jsxs("span",{className:`inline-flex items-center ${n} font-mono text-text-secondary bg-surface-sunken/50 rounded-md`,children:[t.jsx(r,{className:`${o} shrink-0 text-text-quaternary`,strokeWidth:1.5}),e]})}export{m as T};
2
- //# sourceMappingURL=ToolPill-8xY9rkoc.js.map
1
+ import{j as t}from"./vendor-query-RUZdMvN6.js";import{aA as r}from"./vendor-icons-CN-bAo9U.js";function m({name:e,size:s="sm"}){const n=s==="md"?"px-2 py-0.5 text-xs gap-1.5":"px-1.5 py-px text-2xs gap-1",o=s==="md"?"w-2.5 h-2.5":"w-2 h-2";return t.jsxs("span",{className:`inline-flex items-center ${n} font-mono text-text-secondary bg-surface-sunken/50 rounded-md`,children:[t.jsx(r,{className:`${o} shrink-0 text-text-quaternary`,strokeWidth:1.5}),e]})}export{m as T};
2
+ //# sourceMappingURL=ToolPill-BvS53hxP.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ToolPill-8xY9rkoc.js","sources":["../../src/components/common/display/ToolPill.tsx"],"sourcesContent":["import { Wrench } from 'lucide-react';\n\ninterface ToolPillProps {\n name: string;\n size?: 'sm' | 'md';\n}\n\n/**\n * Universal MCP tool pill — displays a tool name with a subtle wrench icon.\n * Used across Capabilities page, MCP Server Tools, Pipeline Tools, etc.\n */\nexport function ToolPill({ name, size = 'sm' }: ToolPillProps) {\n const sizeClass = size === 'md'\n ? 'px-2 py-0.5 text-xs gap-1.5'\n : 'px-1.5 py-px text-2xs gap-1';\n const iconClass = size === 'md' ? 'w-2.5 h-2.5' : 'w-2 h-2';\n\n return (\n <span className={`inline-flex items-center ${sizeClass} font-mono text-text-secondary bg-surface-sunken/50 rounded-md`}>\n <Wrench className={`${iconClass} shrink-0 text-text-quaternary`} strokeWidth={1.5} />\n {name}\n </span>\n );\n}\n"],"names":["ToolPill","name","size","sizeClass","iconClass","jsxs","jsx","Wrench"],"mappings":"+FAWO,SAASA,EAAS,CAAE,KAAAC,EAAM,KAAAC,EAAO,MAAuB,CAC7D,MAAMC,EAAYD,IAAS,KACvB,8BACA,8BACEE,EAAYF,IAAS,KAAO,cAAgB,UAElD,OACEG,EAAAA,KAAC,OAAA,CAAK,UAAW,4BAA4BF,CAAS,iEACpD,SAAA,CAAAG,MAACC,GAAO,UAAW,GAAGH,CAAS,iCAAkC,YAAa,IAAK,EAClFH,CAAA,EACH,CAEJ"}
1
+ {"version":3,"file":"ToolPill-BvS53hxP.js","sources":["../../src/components/common/display/ToolPill.tsx"],"sourcesContent":["import { Wrench } from 'lucide-react';\n\ninterface ToolPillProps {\n name: string;\n size?: 'sm' | 'md';\n}\n\n/**\n * Universal MCP tool pill — displays a tool name with a subtle wrench icon.\n * Used across Capabilities page, MCP Server Tools, Pipeline Tools, etc.\n */\nexport function ToolPill({ name, size = 'sm' }: ToolPillProps) {\n const sizeClass = size === 'md'\n ? 'px-2 py-0.5 text-xs gap-1.5'\n : 'px-1.5 py-px text-2xs gap-1';\n const iconClass = size === 'md' ? 'w-2.5 h-2.5' : 'w-2 h-2';\n\n return (\n <span className={`inline-flex items-center ${sizeClass} font-mono text-text-secondary bg-surface-sunken/50 rounded-md`}>\n <Wrench className={`${iconClass} shrink-0 text-text-quaternary`} strokeWidth={1.5} />\n {name}\n </span>\n );\n}\n"],"names":["ToolPill","name","size","sizeClass","iconClass","jsxs","jsx","Wrench"],"mappings":"+FAWO,SAASA,EAAS,CAAE,KAAAC,EAAM,KAAAC,EAAO,MAAuB,CAC7D,MAAMC,EAAYD,IAAS,KACvB,8BACA,8BACEE,EAAYF,IAAS,KAAO,cAAgB,UAElD,OACEG,EAAAA,KAAC,OAAA,CAAK,UAAW,4BAA4BF,CAAS,iEACpD,SAAA,CAAAG,MAACC,GAAO,UAAW,GAAGH,CAAS,iCAAkC,YAAa,IAAK,EAClFH,CAAA,EACH,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{j as e,a as m}from"./vendor-query-RUZdMvN6.js";import{h as P}from"./mcp-B6AARZ2I.js";import{J as L}from"./index-CfAi1OsI.js";import{R as z}from"./RunAsSelector-CS3KQ-BF.js";import{T as F}from"./ToolPill-8xY9rkoc.js";import{A as k,as as S,X as M,ax as W,h as _,at as $}from"./vendor-icons-BpZiWH2f.js";import{u as B,L as E}from"./vendor-react-CdqEC2zv.js";import{b as D}from"./helpers-DzO-OGPe.js";function I({name:t,serverId:n,short:a=!0}){const x=B(),r=a?t.replace(/^long-tail-/,""):t;return n?e.jsxs("button",{onClick:c=>{c.stopPropagation(),x(`/mcp/servers/${n}`)},className:"group/srv inline-flex items-center gap-1 text-2xs font-mono text-text-tertiary hover:text-accent transition-colors",title:t,children:[e.jsx(k,{className:"w-2.5 h-2.5 shrink-0 text-text-quaternary group-hover/srv:text-accent",strokeWidth:1.5}),r,e.jsx(S,{className:"w-2 h-2 shrink-0 invisible group-hover/srv:visible text-accent",strokeWidth:1.5})]}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-2xs font-mono text-text-tertiary",title:t,children:[e.jsx(k,{className:"w-2.5 h-2.5 shrink-0 text-text-quaternary",strokeWidth:1.5}),r]})}function U({error:t}){const n=t instanceof Error?t.message:"";return n.startsWith("No credential found for provider")?e.jsxs("div",{className:"bg-status-warning/10 border border-status-warning/30 rounded-md px-3 py-2 flex items-start gap-2",children:[e.jsx($,{size:14,className:"text-status-warning mt-0.5 shrink-0"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-medium text-text-primary mb-0.5",children:"Credential required"}),e.jsx("p",{className:"text-2xs text-text-secondary mb-1",children:n}),e.jsxs(E,{to:"/credentials",className:"text-2xs text-accent hover:underline inline-flex items-center gap-1",children:["Go to Credentials ",e.jsx(S,{size:10})]})]})]}):e.jsx("div",{className:"bg-status-error/10 border border-status-error/20 rounded-md px-3 py-2",children:e.jsx("p",{className:"text-2xs text-status-error",children:n||"Tool call failed"})})}function K({data:t}){const n=t==null?void 0:t.result,a=n==null?void 0:n.job_id,x=(n==null?void 0:n.namespace)||"";return a?e.jsxs(E,{to:`/mcp/executions/${encodeURIComponent(a)}?namespace=${encodeURIComponent(x)}`,className:"inline-flex items-center gap-1.5 text-xs text-accent hover:underline",children:[e.jsx(S,{size:12}),"View Execution"]}):null}const N="input text-xs",J="label";function V({value:t,onChange:n,className:a}){const[x,r]=m.useState(t.join(", ")),c=()=>n(x.split(",").map(o=>o.trim()).filter(Boolean));return m.useEffect(()=>{r(t.join(", "))},[JSON.stringify(t)]),e.jsx("input",{type:"text",value:x,onChange:o=>r(o.target.value),onBlur:c,onKeyDown:o=>{o.key==="Enter"&&(o.preventDefault(),c())},placeholder:"comma-separated values",className:a})}function te({serverId:t,serverName:n,tool:a,onClose:x}){const r=P(),[c,o]=m.useState(!1),[d,p]=m.useState({}),[g,b]=m.useState(""),[C,y]=m.useState(""),[v,q]=m.useState("");m.useEffect(()=>{const s=D(a.inputSchema);p(s),b(JSON.stringify(s,null,2)),o(!1),y(""),r.reset()},[a.name,t]);const O=!!r.data||!!r.error,T=()=>{if(!c)b(JSON.stringify(d,null,2));else try{p(JSON.parse(g))}catch{}o(!c)},A=()=>{y(""),r.reset();let s;if(c)try{s=JSON.parse(g)}catch{y("Invalid JSON");return}else s={...d};r.mutate({serverId:t,toolName:a.name,arguments:s,...v?{execute_as:v}:{}})};return e.jsxs("div",{className:"border-l border-surface-border bg-surface-raised",children:[e.jsxs("div",{className:"flex items-start justify-between px-4 py-3 border-b border-surface-border/50 shrink-0",children:[e.jsxs("div",{className:"min-w-0 space-y-1",children:[e.jsx(I,{name:n,serverId:t,short:!1}),e.jsx("div",{children:e.jsx(F,{name:a.name,size:"md"})})]}),e.jsx("button",{onClick:x,className:"p-1 text-text-quaternary hover:text-text-primary shrink-0 ml-2",children:e.jsx(M,{className:"w-3.5 h-3.5"})})]}),e.jsxs("div",{className:"px-4 py-4 space-y-5",children:[a.description&&e.jsx("div",{className:"border-l-2 border-accent/30 pl-3 py-1",children:e.jsx("p",{className:"text-2xs text-text-secondary leading-relaxed italic",children:a.description})}),e.jsxs("div",{children:[e.jsx("label",{className:J,children:"run as"}),e.jsx(z,{selected:v,onChange:q})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("span",{className:"text-2xs text-text-quaternary",children:"Parameters"}),e.jsx("button",{onClick:T,className:"text-2xs text-accent/70 hover:text-accent transition-colors",children:c?"Form view":"JSON view"})]}),c?e.jsx("textarea",{value:g,onChange:s=>b(s.target.value),className:"input-json w-full",rows:6,spellCheck:!1}):e.jsxs("div",{className:"space-y-3",children:[Object.entries(d).sort(([s],[i])=>{var f;const l=((f=a.inputSchema)==null?void 0:f.required)??[],h=l.indexOf(s),j=l.indexOf(i);return h!==-1&&j!==-1?h-j:h!==-1?-1:j!==-1?1:s.localeCompare(i)}).map(([s,i])=>{var f,w,R;const l=(w=(f=a.inputSchema)==null?void 0:f.properties)==null?void 0:w[s],h=l==null?void 0:l.description,j=(((R=a.inputSchema)==null?void 0:R.required)??[]).includes(s);return e.jsxs("div",{children:[e.jsxs("label",{className:J,children:[s,j&&e.jsx("span",{className:"text-accent/50 ml-0.5",children:"*"})]}),typeof i=="boolean"?e.jsxs("select",{value:String(i),onChange:u=>p({...d,[s]:u.target.value==="true"}),className:N,children:[e.jsx("option",{value:"true",children:"true"}),e.jsx("option",{value:"false",children:"false"})]}):Array.isArray(i)?e.jsx(V,{value:i,onChange:u=>p({...d,[s]:u}),className:N}):typeof i=="object"&&i!==null?e.jsx("textarea",{value:JSON.stringify(i,null,2),onChange:u=>{try{p({...d,[s]:JSON.parse(u.target.value)})}catch{}},className:`${N} min-h-[48px] font-mono resize-y`}):e.jsx("input",{type:typeof i=="number"?"number":"text",value:String(i??""),onChange:u=>p({...d,[s]:typeof i=="number"?Number(u.target.value):u.target.value}),className:N,placeholder:(l==null?void 0:l.type)==="string"&&(l==null?void 0:l.example)||""}),h&&e.jsx("p",{className:"text-2xs text-text-quaternary/70 mt-0.5 leading-snug",children:h})]},s)}),Object.keys(d).length===0&&e.jsx("p",{className:"text-2xs text-text-quaternary",children:"No parameters"})]}),C&&e.jsx("p",{className:"text-2xs text-status-error mt-1",children:C})]}),e.jsx("button",{onClick:A,disabled:r.isPending,className:"btn-primary text-xs disabled:opacity-50 inline-flex items-center gap-1.5",children:r.isPending?"Running...":O?e.jsxs(e.Fragment,{children:[e.jsx(W,{size:12})," Re-run"]}):e.jsxs(e.Fragment,{children:[e.jsx(_,{size:12})," Run"]})}),r.isPending&&e.jsxs("div",{className:"animate-pulse",children:[e.jsx("p",{className:"text-2xs text-text-quaternary mb-1",children:"Response"}),e.jsx("div",{className:"h-20 bg-surface-sunken/50 rounded-md"})]}),r.data?e.jsxs("div",{className:"space-y-2",children:[e.jsx(L,{data:r.data,label:"Response",defaultCollapsed:!0}),e.jsx(K,{data:r.data})]}):null,r.error?e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs text-text-quaternary mb-1",children:"Response"}),e.jsx(U,{error:r.error})]}):null]})]})}export{I as S,te as T};
2
- //# sourceMappingURL=ToolTestPanel-E8efYGYs.js.map
1
+ import{j as e,a as m}from"./vendor-query-RUZdMvN6.js";import{h as P}from"./mcp-BqDq3RZH.js";import{J as z}from"./index--DG-qQBT.js";import{R as L}from"./RunAsSelector-CateuvcC.js";import{T as F}from"./ToolPill-BvS53hxP.js";import{A as k,av as S,X as M,az as W,h as _,ax as $}from"./vendor-icons-CN-bAo9U.js";import{u as B,L as E}from"./vendor-react-CdqEC2zv.js";import{b as D}from"./helpers-DzO-OGPe.js";function I({name:t,serverId:n,short:a=!0}){const x=B(),r=a?t.replace(/^long-tail-/,""):t;return n?e.jsxs("button",{onClick:c=>{c.stopPropagation(),x(`/mcp/servers/${n}`)},className:"group/srv inline-flex items-center gap-1 text-2xs font-mono text-text-tertiary hover:text-accent transition-colors",title:t,children:[e.jsx(k,{className:"w-2.5 h-2.5 shrink-0 text-text-quaternary group-hover/srv:text-accent",strokeWidth:1.5}),r,e.jsx(S,{className:"w-2 h-2 shrink-0 invisible group-hover/srv:visible text-accent",strokeWidth:1.5})]}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-2xs font-mono text-text-tertiary",title:t,children:[e.jsx(k,{className:"w-2.5 h-2.5 shrink-0 text-text-quaternary",strokeWidth:1.5}),r]})}function U({error:t}){const n=t instanceof Error?t.message:"";return n.startsWith("No credential found for provider")?e.jsxs("div",{className:"bg-status-warning/10 border border-status-warning/30 rounded-md px-3 py-2 flex items-start gap-2",children:[e.jsx($,{size:14,className:"text-status-warning mt-0.5 shrink-0"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-medium text-text-primary mb-0.5",children:"Credential required"}),e.jsx("p",{className:"text-2xs text-text-secondary mb-1",children:n}),e.jsxs(E,{to:"/credentials",className:"text-2xs text-accent hover:underline inline-flex items-center gap-1",children:["Go to Credentials ",e.jsx(S,{size:10})]})]})]}):e.jsx("div",{className:"bg-status-error/10 border border-status-error/20 rounded-md px-3 py-2",children:e.jsx("p",{className:"text-2xs text-status-error",children:n||"Tool call failed"})})}function K({data:t}){const n=t==null?void 0:t.result,a=n==null?void 0:n.job_id,x=(n==null?void 0:n.namespace)||"";return a?e.jsxs(E,{to:`/mcp/executions/${encodeURIComponent(a)}?namespace=${encodeURIComponent(x)}`,className:"inline-flex items-center gap-1.5 text-xs text-accent hover:underline",children:[e.jsx(S,{size:12}),"View Execution"]}):null}const N="input text-xs",J="label";function V({value:t,onChange:n,className:a}){const[x,r]=m.useState(t.join(", ")),c=()=>n(x.split(",").map(o=>o.trim()).filter(Boolean));return m.useEffect(()=>{r(t.join(", "))},[JSON.stringify(t)]),e.jsx("input",{type:"text",value:x,onChange:o=>r(o.target.value),onBlur:c,onKeyDown:o=>{o.key==="Enter"&&(o.preventDefault(),c())},placeholder:"comma-separated values",className:a})}function te({serverId:t,serverName:n,tool:a,onClose:x}){const r=P(),[c,o]=m.useState(!1),[d,p]=m.useState({}),[g,b]=m.useState(""),[C,y]=m.useState(""),[v,q]=m.useState("");m.useEffect(()=>{const s=D(a.inputSchema);p(s),b(JSON.stringify(s,null,2)),o(!1),y(""),r.reset()},[a.name,t]);const O=!!r.data||!!r.error,T=()=>{if(!c)b(JSON.stringify(d,null,2));else try{p(JSON.parse(g))}catch{}o(!c)},A=()=>{y(""),r.reset();let s;if(c)try{s=JSON.parse(g)}catch{y("Invalid JSON");return}else s={...d};r.mutate({serverId:t,toolName:a.name,arguments:s,...v?{execute_as:v}:{}})};return e.jsxs("div",{className:"border-l border-surface-border bg-surface-raised",children:[e.jsxs("div",{className:"flex items-start justify-between px-4 py-3 border-b border-surface-border/50 shrink-0",children:[e.jsxs("div",{className:"min-w-0 space-y-1",children:[e.jsx(I,{name:n,serverId:t,short:!1}),e.jsx("div",{children:e.jsx(F,{name:a.name,size:"md"})})]}),e.jsx("button",{onClick:x,className:"p-1 text-text-quaternary hover:text-text-primary shrink-0 ml-2",children:e.jsx(M,{className:"w-3.5 h-3.5"})})]}),e.jsxs("div",{className:"px-4 py-4 space-y-5",children:[a.description&&e.jsx("div",{className:"border-l-2 border-accent/30 pl-3 py-1",children:e.jsx("p",{className:"text-2xs text-text-secondary leading-relaxed italic",children:a.description})}),e.jsxs("div",{children:[e.jsx("label",{className:J,children:"run as"}),e.jsx(L,{selected:v,onChange:q})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("span",{className:"text-2xs text-text-quaternary",children:"Parameters"}),e.jsx("button",{onClick:T,className:"text-2xs text-accent/70 hover:text-accent transition-colors",children:c?"Form view":"JSON view"})]}),c?e.jsx("textarea",{value:g,onChange:s=>b(s.target.value),className:"input-json w-full",rows:6,spellCheck:!1}):e.jsxs("div",{className:"space-y-3",children:[Object.entries(d).sort(([s],[i])=>{var f;const l=((f=a.inputSchema)==null?void 0:f.required)??[],h=l.indexOf(s),j=l.indexOf(i);return h!==-1&&j!==-1?h-j:h!==-1?-1:j!==-1?1:s.localeCompare(i)}).map(([s,i])=>{var f,w,R;const l=(w=(f=a.inputSchema)==null?void 0:f.properties)==null?void 0:w[s],h=l==null?void 0:l.description,j=(((R=a.inputSchema)==null?void 0:R.required)??[]).includes(s);return e.jsxs("div",{children:[e.jsxs("label",{className:J,children:[s,j&&e.jsx("span",{className:"text-accent/50 ml-0.5",children:"*"})]}),typeof i=="boolean"?e.jsxs("select",{value:String(i),onChange:u=>p({...d,[s]:u.target.value==="true"}),className:N,children:[e.jsx("option",{value:"true",children:"true"}),e.jsx("option",{value:"false",children:"false"})]}):Array.isArray(i)?e.jsx(V,{value:i,onChange:u=>p({...d,[s]:u}),className:N}):typeof i=="object"&&i!==null?e.jsx("textarea",{value:JSON.stringify(i,null,2),onChange:u=>{try{p({...d,[s]:JSON.parse(u.target.value)})}catch{}},className:`${N} min-h-[48px] font-mono resize-y`}):e.jsx("input",{type:typeof i=="number"?"number":"text",value:String(i??""),onChange:u=>p({...d,[s]:typeof i=="number"?Number(u.target.value):u.target.value}),className:N,placeholder:(l==null?void 0:l.type)==="string"&&(l==null?void 0:l.example)||""}),h&&e.jsx("p",{className:"text-2xs text-text-quaternary/70 mt-0.5 leading-snug",children:h})]},s)}),Object.keys(d).length===0&&e.jsx("p",{className:"text-2xs text-text-quaternary",children:"No parameters"})]}),C&&e.jsx("p",{className:"text-2xs text-status-error mt-1",children:C})]}),e.jsx("button",{onClick:A,disabled:r.isPending,className:"btn-primary text-xs disabled:opacity-50 inline-flex items-center gap-1.5",children:r.isPending?"Running...":O?e.jsxs(e.Fragment,{children:[e.jsx(W,{size:12})," Re-run"]}):e.jsxs(e.Fragment,{children:[e.jsx(_,{size:12})," Run"]})}),r.isPending&&e.jsxs("div",{className:"animate-pulse",children:[e.jsx("p",{className:"text-2xs text-text-quaternary mb-1",children:"Response"}),e.jsx("div",{className:"h-20 bg-surface-sunken/50 rounded-md"})]}),r.data?e.jsxs("div",{className:"space-y-2",children:[e.jsx(z,{data:r.data,label:"Response",defaultCollapsed:!0}),e.jsx(K,{data:r.data})]}):null,r.error?e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs text-text-quaternary mb-1",children:"Response"}),e.jsx(U,{error:r.error})]}):null]})]})}export{I as S,te as T};
2
+ //# sourceMappingURL=ToolTestPanel-HN0OCYTL.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ToolTestPanel-E8efYGYs.js","sources":["../../src/components/common/display/ServerName.tsx","../../src/components/common/test/ToolTestPanel.tsx"],"sourcesContent":["import { useNavigate } from 'react-router-dom';\nimport { Server, ExternalLink } from 'lucide-react';\n\ninterface ServerNameProps {\n name: string;\n serverId?: string;\n /** Strip the common \"long-tail-\" prefix for display */\n short?: boolean;\n}\n\n/**\n * Universal MCP server name display. Monospace with a subtle Server icon.\n * When `serverId` is provided, hovering reveals a nav icon and clicking\n * navigates to the server config page.\n */\nexport function ServerName({ name, serverId, short = true }: ServerNameProps) {\n const navigate = useNavigate();\n const display = short ? name.replace(/^long-tail-/, '') : name;\n\n if (serverId) {\n return (\n <button\n onClick={(e) => { e.stopPropagation(); navigate(`/mcp/servers/${serverId}`); }}\n className=\"group/srv inline-flex items-center gap-1 text-2xs font-mono text-text-tertiary hover:text-accent transition-colors\"\n title={name}\n >\n <Server className=\"w-2.5 h-2.5 shrink-0 text-text-quaternary group-hover/srv:text-accent\" strokeWidth={1.5} />\n {display}\n <ExternalLink className=\"w-2 h-2 shrink-0 invisible group-hover/srv:visible text-accent\" strokeWidth={1.5} />\n </button>\n );\n }\n\n return (\n <span className=\"inline-flex items-center gap-1 text-2xs font-mono text-text-tertiary\" title={name}>\n <Server className=\"w-2.5 h-2.5 shrink-0 text-text-quaternary\" strokeWidth={1.5} />\n {display}\n </span>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { Link } from 'react-router-dom';\nimport { X, RotateCcw, Play, ExternalLink, KeyRound } from 'lucide-react';\nimport { useCallMcpTool } from '../../../api/mcp';\nimport { JsonViewer } from '../data/JsonViewer';\nimport { RunAsSelector } from '../form/RunAsSelector';\nimport { ToolPill } from '../display/ToolPill';\nimport { ServerName } from '../display/ServerName';\nimport type { McpToolManifest } from '../../../api/types';\nimport { buildSkeleton } from '../../../pages/mcp/mcp-query-detail/helpers';\n\nfunction ToolErrorDisplay({ error }: { error: Error | null }) {\n const msg = error instanceof Error ? error.message : '';\n if (msg.startsWith('No credential found for provider')) {\n return (\n <div className=\"bg-status-warning/10 border border-status-warning/30 rounded-md px-3 py-2 flex items-start gap-2\">\n <KeyRound size={14} className=\"text-status-warning mt-0.5 shrink-0\" />\n <div>\n <p className=\"text-2xs font-medium text-text-primary mb-0.5\">Credential required</p>\n <p className=\"text-2xs text-text-secondary mb-1\">{msg}</p>\n <Link to=\"/credentials\" className=\"text-2xs text-accent hover:underline inline-flex items-center gap-1\">\n Go to Credentials <ExternalLink size={10} />\n </Link>\n </div>\n </div>\n );\n }\n return (\n <div className=\"bg-status-error/10 border border-status-error/20 rounded-md px-3 py-2\">\n <p className=\"text-2xs text-status-error\">{msg || 'Tool call failed'}</p>\n </div>\n );\n}\n\nfunction ExecutionLink({ data }: { data: unknown }) {\n const res = (data as any)?.result;\n const jobId = res?.job_id;\n const ns = res?.namespace || '';\n if (!jobId) return null;\n return (\n <Link\n to={`/mcp/executions/${encodeURIComponent(jobId)}?namespace=${encodeURIComponent(ns)}`}\n className=\"inline-flex items-center gap-1.5 text-xs text-accent hover:underline\"\n >\n <ExternalLink size={12} />\n View Execution\n </Link>\n );\n}\n\ninterface ToolTestPanelProps {\n serverId: string;\n serverName: string;\n tool: McpToolManifest;\n onClose: () => void;\n}\n\nconst INPUT_CLS = 'input text-xs';\nconst LABEL_CLS = 'label';\n\n/** Text input for array fields — commits on blur or Enter, allows commas while typing */\nfunction ArrayInput({ value, onChange, className }: { value: any[]; onChange: (v: string[]) => void; className: string }) {\n const [raw, setRaw] = useState(value.join(', '));\n const commit = () => onChange(raw.split(',').map((s) => s.trim()).filter(Boolean));\n // Sync if parent value changes externally\n useEffect(() => { setRaw(value.join(', ')); }, [JSON.stringify(value)]); // eslint-disable-line\n return (\n <input\n type=\"text\"\n value={raw}\n onChange={(e) => setRaw(e.target.value)}\n onBlur={commit}\n onKeyDown={(e) => { if (e.key === 'Enter') { e.preventDefault(); commit(); } }}\n placeholder=\"comma-separated values\"\n className={className}\n />\n );\n}\n\nexport function ToolTestPanel({ serverId, serverName, tool, onClose }: ToolTestPanelProps) {\n const callTool = useCallMcpTool();\n const [jsonMode, setJsonMode] = useState(false);\n const [fields, setFields] = useState<Record<string, any>>({});\n const [argsJson, setArgsJson] = useState('');\n const [jsonError, setJsonError] = useState('');\n const [executeAs, setExecuteAs] = useState('');\n\n useEffect(() => {\n const skeleton = buildSkeleton(tool.inputSchema);\n setFields(skeleton);\n setArgsJson(JSON.stringify(skeleton, null, 2));\n setJsonMode(false);\n setJsonError('');\n callTool.reset();\n }, [tool.name, serverId]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const hasResult = !!callTool.data || !!callTool.error;\n\n const toggleMode = () => {\n if (!jsonMode) {\n setArgsJson(JSON.stringify(fields, null, 2));\n } else {\n try { setFields(JSON.parse(argsJson)); } catch { /* keep fields */ }\n }\n setJsonMode(!jsonMode);\n };\n\n const handleRun = () => {\n setJsonError('');\n callTool.reset();\n let parsed: Record<string, unknown>;\n if (jsonMode) {\n try { parsed = JSON.parse(argsJson); } catch { setJsonError('Invalid JSON'); return; }\n } else {\n parsed = { ...fields };\n }\n callTool.mutate({\n serverId,\n toolName: tool.name,\n arguments: parsed,\n ...(executeAs ? { execute_as: executeAs } : {}),\n });\n };\n\n return (\n <div className=\"border-l border-surface-border bg-surface-raised\">\n {/* Header */}\n <div className=\"flex items-start justify-between px-4 py-3 border-b border-surface-border/50 shrink-0\">\n <div className=\"min-w-0 space-y-1\">\n <ServerName name={serverName} serverId={serverId} short={false} />\n <div><ToolPill name={tool.name} size=\"md\" /></div>\n </div>\n <button onClick={onClose} className=\"p-1 text-text-quaternary hover:text-text-primary shrink-0 ml-2\">\n <X className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n\n {/* Scrollable body */}\n <div className=\"px-4 py-4 space-y-5\">\n {tool.description && (\n <div className=\"border-l-2 border-accent/30 pl-3 py-1\">\n <p className=\"text-2xs text-text-secondary leading-relaxed italic\">{tool.description}</p>\n </div>\n )}\n\n {/* Run as */}\n <div>\n <label className={LABEL_CLS}>run as</label>\n <RunAsSelector selected={executeAs} onChange={setExecuteAs} />\n </div>\n\n {/* Form / JSON toggle input */}\n <div>\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-2xs text-text-quaternary\">Parameters</span>\n <button onClick={toggleMode} className=\"text-2xs text-accent/70 hover:text-accent transition-colors\">\n {jsonMode ? 'Form view' : 'JSON view'}\n </button>\n </div>\n\n {jsonMode ? (\n <textarea\n value={argsJson}\n onChange={(e) => setArgsJson(e.target.value)}\n className=\"input-json w-full\"\n rows={6}\n spellCheck={false}\n />\n ) : (\n <div className=\"space-y-3\">\n {Object.entries(fields).sort(([a], [b]) => {\n const req = (tool.inputSchema?.required ?? []) as string[];\n const ai = req.indexOf(a);\n const bi = req.indexOf(b);\n if (ai !== -1 && bi !== -1) return ai - bi;\n if (ai !== -1) return -1;\n if (bi !== -1) return 1;\n return a.localeCompare(b);\n }).map(([key, value]) => {\n const propSchema = tool.inputSchema?.properties?.[key];\n const hint = propSchema?.description;\n const isRequired = (tool.inputSchema?.required ?? []).includes(key);\n return (\n <div key={key}>\n <label className={LABEL_CLS}>\n {key}\n {isRequired && <span className=\"text-accent/50 ml-0.5\">*</span>}\n </label>\n {typeof value === 'boolean' ? (\n <select\n value={String(value)}\n onChange={(e) => setFields({ ...fields, [key]: e.target.value === 'true' })}\n className={INPUT_CLS}\n >\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : Array.isArray(value) ? (\n <ArrayInput\n value={value as any[]}\n onChange={(v) => setFields({ ...fields, [key]: v })}\n className={INPUT_CLS}\n />\n ) : typeof value === 'object' && value !== null ? (\n <textarea\n value={JSON.stringify(value, null, 2)}\n onChange={(e) => { try { setFields({ ...fields, [key]: JSON.parse(e.target.value) }); } catch { /* invalid */ } }}\n className={`${INPUT_CLS} min-h-[48px] font-mono resize-y`}\n />\n ) : (\n <input\n type={typeof value === 'number' ? 'number' : 'text'}\n value={String(value ?? '')}\n onChange={(e) => setFields({ ...fields, [key]: typeof value === 'number' ? Number(e.target.value) : e.target.value })}\n className={INPUT_CLS}\n placeholder={propSchema?.type === 'string' ? propSchema?.example || '' : ''}\n />\n )}\n {hint && <p className=\"text-2xs text-text-quaternary/70 mt-0.5 leading-snug\">{hint}</p>}\n </div>\n );\n })}\n {Object.keys(fields).length === 0 && (\n <p className=\"text-2xs text-text-quaternary\">No parameters</p>\n )}\n </div>\n )}\n {jsonError && <p className=\"text-2xs text-status-error mt-1\">{jsonError}</p>}\n </div>\n\n {/* Run button */}\n <button\n onClick={handleRun}\n disabled={callTool.isPending}\n className=\"btn-primary text-xs disabled:opacity-50 inline-flex items-center gap-1.5\"\n >\n {callTool.isPending ? (\n 'Running...'\n ) : hasResult ? (\n <><RotateCcw size={12} /> Re-run</>\n ) : (\n <><Play size={12} /> Run</>\n )}\n </button>\n\n {/* Response */}\n {callTool.isPending && (\n <div className=\"animate-pulse\">\n <p className=\"text-2xs text-text-quaternary mb-1\">Response</p>\n <div className=\"h-20 bg-surface-sunken/50 rounded-md\" />\n </div>\n )}\n {callTool.data ? (\n <div className=\"space-y-2\">\n <JsonViewer data={callTool.data as Record<string, unknown>} label=\"Response\" defaultCollapsed />\n <ExecutionLink data={callTool.data} />\n </div>\n ) : null}\n {callTool.error ? (\n <div>\n <p className=\"text-2xs text-text-quaternary mb-1\">Response</p>\n <ToolErrorDisplay error={callTool.error as Error | null} />\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n"],"names":["ServerName","name","serverId","short","navigate","useNavigate","display","jsxs","e","jsx","Server","ExternalLink","ToolErrorDisplay","error","msg","KeyRound","Link","ExecutionLink","data","res","jobId","ns","INPUT_CLS","LABEL_CLS","ArrayInput","value","onChange","className","raw","setRaw","useState","commit","s","useEffect","ToolTestPanel","serverName","tool","onClose","callTool","useCallMcpTool","jsonMode","setJsonMode","fields","setFields","argsJson","setArgsJson","jsonError","setJsonError","executeAs","setExecuteAs","skeleton","buildSkeleton","hasResult","toggleMode","handleRun","parsed","ToolPill","X","RunAsSelector","a","b","req","_a","ai","bi","key","propSchema","_b","hint","isRequired","_c","v","Fragment","RotateCcw","Play","JsonViewer"],"mappings":"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"}
1
+ {"version":3,"file":"ToolTestPanel-HN0OCYTL.js","sources":["../../src/components/common/display/ServerName.tsx","../../src/components/common/test/ToolTestPanel.tsx"],"sourcesContent":["import { useNavigate } from 'react-router-dom';\nimport { Server, ExternalLink } from 'lucide-react';\n\ninterface ServerNameProps {\n name: string;\n serverId?: string;\n /** Strip the common \"long-tail-\" prefix for display */\n short?: boolean;\n}\n\n/**\n * Universal MCP server name display. Monospace with a subtle Server icon.\n * When `serverId` is provided, hovering reveals a nav icon and clicking\n * navigates to the server config page.\n */\nexport function ServerName({ name, serverId, short = true }: ServerNameProps) {\n const navigate = useNavigate();\n const display = short ? name.replace(/^long-tail-/, '') : name;\n\n if (serverId) {\n return (\n <button\n onClick={(e) => { e.stopPropagation(); navigate(`/mcp/servers/${serverId}`); }}\n className=\"group/srv inline-flex items-center gap-1 text-2xs font-mono text-text-tertiary hover:text-accent transition-colors\"\n title={name}\n >\n <Server className=\"w-2.5 h-2.5 shrink-0 text-text-quaternary group-hover/srv:text-accent\" strokeWidth={1.5} />\n {display}\n <ExternalLink className=\"w-2 h-2 shrink-0 invisible group-hover/srv:visible text-accent\" strokeWidth={1.5} />\n </button>\n );\n }\n\n return (\n <span className=\"inline-flex items-center gap-1 text-2xs font-mono text-text-tertiary\" title={name}>\n <Server className=\"w-2.5 h-2.5 shrink-0 text-text-quaternary\" strokeWidth={1.5} />\n {display}\n </span>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { Link } from 'react-router-dom';\nimport { X, RotateCcw, Play, ExternalLink, KeyRound } from 'lucide-react';\nimport { useCallMcpTool } from '../../../api/mcp';\nimport { JsonViewer } from '../data/JsonViewer';\nimport { RunAsSelector } from '../form/RunAsSelector';\nimport { ToolPill } from '../display/ToolPill';\nimport { ServerName } from '../display/ServerName';\nimport type { McpToolManifest } from '../../../api/types';\nimport { buildSkeleton } from '../../../pages/mcp/mcp-query-detail/helpers';\n\nfunction ToolErrorDisplay({ error }: { error: Error | null }) {\n const msg = error instanceof Error ? error.message : '';\n if (msg.startsWith('No credential found for provider')) {\n return (\n <div className=\"bg-status-warning/10 border border-status-warning/30 rounded-md px-3 py-2 flex items-start gap-2\">\n <KeyRound size={14} className=\"text-status-warning mt-0.5 shrink-0\" />\n <div>\n <p className=\"text-2xs font-medium text-text-primary mb-0.5\">Credential required</p>\n <p className=\"text-2xs text-text-secondary mb-1\">{msg}</p>\n <Link to=\"/credentials\" className=\"text-2xs text-accent hover:underline inline-flex items-center gap-1\">\n Go to Credentials <ExternalLink size={10} />\n </Link>\n </div>\n </div>\n );\n }\n return (\n <div className=\"bg-status-error/10 border border-status-error/20 rounded-md px-3 py-2\">\n <p className=\"text-2xs text-status-error\">{msg || 'Tool call failed'}</p>\n </div>\n );\n}\n\nfunction ExecutionLink({ data }: { data: unknown }) {\n const res = (data as any)?.result;\n const jobId = res?.job_id;\n const ns = res?.namespace || '';\n if (!jobId) return null;\n return (\n <Link\n to={`/mcp/executions/${encodeURIComponent(jobId)}?namespace=${encodeURIComponent(ns)}`}\n className=\"inline-flex items-center gap-1.5 text-xs text-accent hover:underline\"\n >\n <ExternalLink size={12} />\n View Execution\n </Link>\n );\n}\n\ninterface ToolTestPanelProps {\n serverId: string;\n serverName: string;\n tool: McpToolManifest;\n onClose: () => void;\n}\n\nconst INPUT_CLS = 'input text-xs';\nconst LABEL_CLS = 'label';\n\n/** Text input for array fields — commits on blur or Enter, allows commas while typing */\nfunction ArrayInput({ value, onChange, className }: { value: any[]; onChange: (v: string[]) => void; className: string }) {\n const [raw, setRaw] = useState(value.join(', '));\n const commit = () => onChange(raw.split(',').map((s) => s.trim()).filter(Boolean));\n // Sync if parent value changes externally\n useEffect(() => { setRaw(value.join(', ')); }, [JSON.stringify(value)]); // eslint-disable-line\n return (\n <input\n type=\"text\"\n value={raw}\n onChange={(e) => setRaw(e.target.value)}\n onBlur={commit}\n onKeyDown={(e) => { if (e.key === 'Enter') { e.preventDefault(); commit(); } }}\n placeholder=\"comma-separated values\"\n className={className}\n />\n );\n}\n\nexport function ToolTestPanel({ serverId, serverName, tool, onClose }: ToolTestPanelProps) {\n const callTool = useCallMcpTool();\n const [jsonMode, setJsonMode] = useState(false);\n const [fields, setFields] = useState<Record<string, any>>({});\n const [argsJson, setArgsJson] = useState('');\n const [jsonError, setJsonError] = useState('');\n const [executeAs, setExecuteAs] = useState('');\n\n useEffect(() => {\n const skeleton = buildSkeleton(tool.inputSchema);\n setFields(skeleton);\n setArgsJson(JSON.stringify(skeleton, null, 2));\n setJsonMode(false);\n setJsonError('');\n callTool.reset();\n }, [tool.name, serverId]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const hasResult = !!callTool.data || !!callTool.error;\n\n const toggleMode = () => {\n if (!jsonMode) {\n setArgsJson(JSON.stringify(fields, null, 2));\n } else {\n try { setFields(JSON.parse(argsJson)); } catch { /* keep fields */ }\n }\n setJsonMode(!jsonMode);\n };\n\n const handleRun = () => {\n setJsonError('');\n callTool.reset();\n let parsed: Record<string, unknown>;\n if (jsonMode) {\n try { parsed = JSON.parse(argsJson); } catch { setJsonError('Invalid JSON'); return; }\n } else {\n parsed = { ...fields };\n }\n callTool.mutate({\n serverId,\n toolName: tool.name,\n arguments: parsed,\n ...(executeAs ? { execute_as: executeAs } : {}),\n });\n };\n\n return (\n <div className=\"border-l border-surface-border bg-surface-raised\">\n {/* Header */}\n <div className=\"flex items-start justify-between px-4 py-3 border-b border-surface-border/50 shrink-0\">\n <div className=\"min-w-0 space-y-1\">\n <ServerName name={serverName} serverId={serverId} short={false} />\n <div><ToolPill name={tool.name} size=\"md\" /></div>\n </div>\n <button onClick={onClose} className=\"p-1 text-text-quaternary hover:text-text-primary shrink-0 ml-2\">\n <X className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n\n {/* Scrollable body */}\n <div className=\"px-4 py-4 space-y-5\">\n {tool.description && (\n <div className=\"border-l-2 border-accent/30 pl-3 py-1\">\n <p className=\"text-2xs text-text-secondary leading-relaxed italic\">{tool.description}</p>\n </div>\n )}\n\n {/* Run as */}\n <div>\n <label className={LABEL_CLS}>run as</label>\n <RunAsSelector selected={executeAs} onChange={setExecuteAs} />\n </div>\n\n {/* Form / JSON toggle input */}\n <div>\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-2xs text-text-quaternary\">Parameters</span>\n <button onClick={toggleMode} className=\"text-2xs text-accent/70 hover:text-accent transition-colors\">\n {jsonMode ? 'Form view' : 'JSON view'}\n </button>\n </div>\n\n {jsonMode ? (\n <textarea\n value={argsJson}\n onChange={(e) => setArgsJson(e.target.value)}\n className=\"input-json w-full\"\n rows={6}\n spellCheck={false}\n />\n ) : (\n <div className=\"space-y-3\">\n {Object.entries(fields).sort(([a], [b]) => {\n const req = (tool.inputSchema?.required ?? []) as string[];\n const ai = req.indexOf(a);\n const bi = req.indexOf(b);\n if (ai !== -1 && bi !== -1) return ai - bi;\n if (ai !== -1) return -1;\n if (bi !== -1) return 1;\n return a.localeCompare(b);\n }).map(([key, value]) => {\n const propSchema = tool.inputSchema?.properties?.[key];\n const hint = propSchema?.description;\n const isRequired = (tool.inputSchema?.required ?? []).includes(key);\n return (\n <div key={key}>\n <label className={LABEL_CLS}>\n {key}\n {isRequired && <span className=\"text-accent/50 ml-0.5\">*</span>}\n </label>\n {typeof value === 'boolean' ? (\n <select\n value={String(value)}\n onChange={(e) => setFields({ ...fields, [key]: e.target.value === 'true' })}\n className={INPUT_CLS}\n >\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : Array.isArray(value) ? (\n <ArrayInput\n value={value as any[]}\n onChange={(v) => setFields({ ...fields, [key]: v })}\n className={INPUT_CLS}\n />\n ) : typeof value === 'object' && value !== null ? (\n <textarea\n value={JSON.stringify(value, null, 2)}\n onChange={(e) => { try { setFields({ ...fields, [key]: JSON.parse(e.target.value) }); } catch { /* invalid */ } }}\n className={`${INPUT_CLS} min-h-[48px] font-mono resize-y`}\n />\n ) : (\n <input\n type={typeof value === 'number' ? 'number' : 'text'}\n value={String(value ?? '')}\n onChange={(e) => setFields({ ...fields, [key]: typeof value === 'number' ? Number(e.target.value) : e.target.value })}\n className={INPUT_CLS}\n placeholder={propSchema?.type === 'string' ? propSchema?.example || '' : ''}\n />\n )}\n {hint && <p className=\"text-2xs text-text-quaternary/70 mt-0.5 leading-snug\">{hint}</p>}\n </div>\n );\n })}\n {Object.keys(fields).length === 0 && (\n <p className=\"text-2xs text-text-quaternary\">No parameters</p>\n )}\n </div>\n )}\n {jsonError && <p className=\"text-2xs text-status-error mt-1\">{jsonError}</p>}\n </div>\n\n {/* Run button */}\n <button\n onClick={handleRun}\n disabled={callTool.isPending}\n className=\"btn-primary text-xs disabled:opacity-50 inline-flex items-center gap-1.5\"\n >\n {callTool.isPending ? (\n 'Running...'\n ) : hasResult ? (\n <><RotateCcw size={12} /> Re-run</>\n ) : (\n <><Play size={12} /> Run</>\n )}\n </button>\n\n {/* Response */}\n {callTool.isPending && (\n <div className=\"animate-pulse\">\n <p className=\"text-2xs text-text-quaternary mb-1\">Response</p>\n <div className=\"h-20 bg-surface-sunken/50 rounded-md\" />\n </div>\n )}\n {callTool.data ? (\n <div className=\"space-y-2\">\n <JsonViewer data={callTool.data as Record<string, unknown>} label=\"Response\" defaultCollapsed />\n <ExecutionLink data={callTool.data} />\n </div>\n ) : null}\n {callTool.error ? (\n <div>\n <p className=\"text-2xs text-text-quaternary mb-1\">Response</p>\n <ToolErrorDisplay error={callTool.error as Error | null} />\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n"],"names":["ServerName","name","serverId","short","navigate","useNavigate","display","jsxs","e","jsx","Server","ExternalLink","ToolErrorDisplay","error","msg","KeyRound","Link","ExecutionLink","data","res","jobId","ns","INPUT_CLS","LABEL_CLS","ArrayInput","value","onChange","className","raw","setRaw","useState","commit","s","useEffect","ToolTestPanel","serverName","tool","onClose","callTool","useCallMcpTool","jsonMode","setJsonMode","fields","setFields","argsJson","setArgsJson","jsonError","setJsonError","executeAs","setExecuteAs","skeleton","buildSkeleton","hasResult","toggleMode","handleRun","parsed","ToolPill","X","RunAsSelector","a","b","req","_a","ai","bi","key","propSchema","_b","hint","isRequired","_c","v","Fragment","RotateCcw","Play","JsonViewer"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import{a,j as e}from"./vendor-query-RUZdMvN6.js";import{a as pe,b as he,c as be,d as fe}from"./topics-Df5hGh6o.js";import{u as ge,b as y,J as G}from"./index-CfAi1OsI.js";import{L as je}from"./ListToolbar-IPXsTb3Q.js";import{R as N,B as ve,a2 as ye,T as Ne,bc as ke,X as we,aK as Se,o as Ce,bd as Pe,d as H,ao as Ee,x as Te}from"./vendor-icons-BpZiWH2f.js";import{e as We,u as _e}from"./vendor-react-CdqEC2zv.js";const qe={task:"bg-status-active/10 text-status-active",workflow:"bg-accent/15 text-accent",escalation:"bg-status-warning/10 text-status-warning",activity:"bg-status-active/10 text-status-active",knowledge:"bg-accent/10 text-accent",agent:"bg-status-success/10 text-status-success",app:"bg-status-error/10 text-status-error",milestone:"bg-accent/10 text-accent"};function k({icon:x,color:p,children:d}){return e.jsxs("div",{className:"flex items-center gap-2 mb-3 pb-2 border-b border-surface-border",children:[e.jsx(x,{className:`w-4 h-4 ${p}`,strokeWidth:1.5}),e.jsx("h2",{className:"section-h2",children:d})]})}function Me(){var Q,z,K,V;const{topic:x}=We(),p=x?decodeURIComponent(x):null,d=_e(),{data:t,isLoading:X,refetch:h,isFetching:Y}=pe(p),{data:b}=ge(),Z=(Q=b==null?void 0:b.ai)!=null&&Q.enabled?"agents":"automations",w=he(),ee=be(),r=fe(),[l,f]=a.useState(!1),[o,S]=a.useState(""),[C,P]=a.useState(()=>`evt-${Date.now()}-${Math.random().toString(16).slice(2,6)}`),[g,E]=a.useState(""),[T,te]=a.useState("myWorkflow"),[W,se]=a.useState("wf-001"),[_,ae]=a.useState("default"),[q,ce]=a.useState(""),[I,ie]=a.useState("esc-001"),[D,ne]=a.useState("myActivity"),[O,J]=a.useState(""),[$,R]=a.useState(""),[j,A]=a.useState(""),[M,u]=a.useState("");if(X)return e.jsxs("div",{className:"animate-pulse space-y-4",children:[e.jsx("div",{className:"h-8 bg-surface-sunken rounded w-48"}),e.jsx("div",{className:"h-40 bg-surface-sunken rounded"})]});if(!t)return e.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-center",children:[e.jsx(N,{className:"w-12 h-12 text-text-quaternary mb-4",strokeWidth:1}),e.jsx("h2",{className:"heading-3 mb-2",children:"Topic not found"})]});const le=t.source==="system",L=!t.managed,re=qe[t.category]??"bg-surface-sunken text-text-tertiary",m=t.example_payload?JSON.stringify(t.example_payload,null,2):(z=t.payload_schema)!=null&&z.properties?JSON.stringify(Object.fromEntries(Object.keys(t.payload_schema.properties).map(s=>[s,""])),null,2):"{}",i=t.topic.startsWith("system.workflow.")||t.topic.startsWith("system.task.")?"workflow":t.topic.startsWith("system.escalation.")?"escalation":t.topic.startsWith("system.activity.")?"activity":"none",B=i==="workflow"||i==="escalation"||i==="activity",U=i==="workflow"||i==="escalation",v=(o||t.topic).split(".").pop()??"",F=()=>{let s={};try{s=JSON.parse(g||m)}catch{}const n=(o||t.topic)!==t.topic?o||t.topic:void 0,c={id:C||void 0,source:"dashboard",data:s};return n&&(c.subject=n),B&&(c.workflowName=T,c.workflowId=W,c.taskQueue=_),U&&(c.status=q||v),i==="escalation"&&(c.escalationId=I),i==="activity"&&(c.activityName=D),c},oe=(()=>{const{subject:s,...n}=F();return JSON.stringify({type:s||t.topic,timestamp:"<minted>",...n},null,2)})();!g&&m!=="{}"&&E(m),o||S(t.topic);const xe=()=>{J(t.description??""),R((t.tags??[]).join(", ")),A(t.payload_schema?JSON.stringify(t.payload_schema,null,2):""),u(""),f(!0)},de=()=>f(!1),ue=()=>{const s=$.split(",").map(c=>c.trim()).filter(Boolean);let n;if(j.trim())try{n=JSON.parse(j),u("")}catch{u("Invalid JSON");return}w.mutate({topic:t.topic,description:O,tags:s,...n!==void 0?{payload_schema:n}:{}},{onSuccess:()=>{f(!1),h()}})},me=()=>{confirm(`Delete topic "${t.topic}"?
1
+ import{a,j as e}from"./vendor-query-RUZdMvN6.js";import{a as pe,b as he,c as be,d as fe}from"./topics-DPrL8Dtq.js";import{u as ge,b as y,J as H}from"./index--DG-qQBT.js";import{L as je}from"./ListToolbar-CLtw-1QN.js";import{R as N,B as ve,a7 as ye,T as Ne,bd as ke,X as we,aM as Se,o as Ce,be as Pe,d as K,J as Ee,x as Te}from"./vendor-icons-CN-bAo9U.js";import{e as We,u as _e}from"./vendor-react-CdqEC2zv.js";const qe={task:"bg-status-active/10 text-status-active",workflow:"bg-accent/15 text-accent",escalation:"bg-status-warning/10 text-status-warning",activity:"bg-status-active/10 text-status-active",knowledge:"bg-accent/10 text-accent",agent:"bg-status-success/10 text-status-success",app:"bg-status-error/10 text-status-error",milestone:"bg-accent/10 text-accent"};function k({icon:x,color:p,children:d}){return e.jsxs("div",{className:"flex items-center gap-2 mb-3 pb-2 border-b border-surface-border",children:[e.jsx(x,{className:`w-4 h-4 ${p}`,strokeWidth:1.5}),e.jsx("h2",{className:"section-h2",children:d})]})}function Ae(){var Q,z,V,G;const{topic:x}=We(),p=x?decodeURIComponent(x):null,d=_e(),{data:t,isLoading:X,refetch:h,isFetching:Y}=pe(p),{data:b}=ge(),Z=(Q=b==null?void 0:b.ai)!=null&&Q.enabled?"agents":"automations",w=he(),ee=be(),r=fe(),[l,f]=a.useState(!1),[o,S]=a.useState(""),[C,P]=a.useState(()=>`evt-${Date.now()}-${Math.random().toString(16).slice(2,6)}`),[g,E]=a.useState(""),[T,te]=a.useState("myWorkflow"),[W,se]=a.useState("wf-001"),[_,ae]=a.useState("default"),[q,ce]=a.useState(""),[I,ie]=a.useState("esc-001"),[D,ne]=a.useState("myActivity"),[O,J]=a.useState(""),[$,M]=a.useState(""),[j,R]=a.useState(""),[A,u]=a.useState("");if(X)return e.jsxs("div",{className:"animate-pulse space-y-4",children:[e.jsx("div",{className:"h-8 bg-surface-sunken rounded w-48"}),e.jsx("div",{className:"h-40 bg-surface-sunken rounded"})]});if(!t)return e.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-center",children:[e.jsx(N,{className:"w-12 h-12 text-text-quaternary mb-4",strokeWidth:1}),e.jsx("h2",{className:"heading-3 mb-2",children:"Topic not found"})]});const le=t.source==="system",L=!t.managed,re=qe[t.category]??"bg-surface-sunken text-text-tertiary",m=t.example_payload?JSON.stringify(t.example_payload,null,2):(z=t.payload_schema)!=null&&z.properties?JSON.stringify(Object.fromEntries(Object.keys(t.payload_schema.properties).map(s=>[s,""])),null,2):"{}",i=t.topic.startsWith("system.workflow.")||t.topic.startsWith("system.task.")?"workflow":t.topic.startsWith("system.escalation.")?"escalation":t.topic.startsWith("system.activity.")?"activity":"none",B=i==="workflow"||i==="escalation"||i==="activity",U=i==="workflow"||i==="escalation",v=(o||t.topic).split(".").pop()??"",F=()=>{let s={};try{s=JSON.parse(g||m)}catch{}const n=(o||t.topic)!==t.topic?o||t.topic:void 0,c={id:C||void 0,source:"dashboard",data:s};return n&&(c.subject=n),B&&(c.workflowName=T,c.workflowId=W,c.taskQueue=_),U&&(c.status=q||v),i==="escalation"&&(c.escalationId=I),i==="activity"&&(c.activityName=D),c},oe=(()=>{const{subject:s,...n}=F();return JSON.stringify({type:s||t.topic,timestamp:"<minted>",...n},null,2)})();!g&&m!=="{}"&&E(m),o||S(t.topic);const xe=()=>{J(t.description??""),M((t.tags??[]).join(", ")),R(t.payload_schema?JSON.stringify(t.payload_schema,null,2):""),u(""),f(!0)},de=()=>f(!1),ue=()=>{const s=$.split(",").map(c=>c.trim()).filter(Boolean);let n;if(j.trim())try{n=JSON.parse(j),u("")}catch{u("Invalid JSON");return}w.mutate({topic:t.topic,description:O,tags:s,...n!==void 0?{payload_schema:n}:{}},{onSuccess:()=>{f(!1),h()}})},me=()=>{confirm(`Delete topic "${t.topic}"?
2
2
 
3
- This removes it from the catalog. Active subscriptions are not affected.`)&&ee.mutate(t.topic,{onSuccess:()=>d("/topics")})};return e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-start justify-between mb-4",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-3 mb-1",children:[e.jsx(N,{className:"w-5 h-5 text-accent",strokeWidth:1.5}),e.jsx("h1",{className:"text-lg font-mono font-medium text-text-primary",children:t.topic}),e.jsx("button",{onClick:()=>{window.location.hash="#docs:topics.md"},className:"text-text-quaternary hover:text-accent transition-colors",title:"Topic docs",children:e.jsx(ve,{className:"w-4 h-4",strokeWidth:1.5})})]}),!l&&t.description?e.jsx("p",{className:"text-sm text-text-secondary leading-relaxed",children:t.description}):l?null:e.jsx("p",{className:"text-sm text-text-quaternary italic",children:"No description"})]}),e.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[!l&&L&&e.jsxs("button",{onClick:xe,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors",children:[e.jsx(ye,{className:"w-3 h-3"})," Edit"]}),!l&&!le&&L&&e.jsxs("button",{onClick:me,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-status-error/60 hover:text-status-error hover:bg-status-error/10 transition-colors",children:[e.jsx(Ne,{className:"w-3 h-3"})," Delete"]}),l&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{onClick:ue,disabled:w.isPending,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors",children:[e.jsx(ke,{className:"w-3 h-3"})," Save"]}),e.jsxs("button",{onClick:de,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-text-tertiary hover:text-text-primary hover:bg-surface-hover transition-colors",children:[e.jsx(we,{className:"w-3 h-3"})," Cancel"]})]})]})]}),e.jsxs("div",{className:"bg-surface-sunken/50 rounded-md px-5 py-3 flex flex-wrap gap-x-6 gap-y-3 items-start mb-5 relative",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Category"}),e.jsx("span",{className:`inline-flex items-center px-2 py-0.5 rounded text-2xs font-medium ${re}`,children:t.category})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Source"}),e.jsx("span",{className:"text-xs font-mono text-text-secondary",children:t.source})]}),((K=t.tags)==null?void 0:K.length)>0&&e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Tags"}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(Se,{className:"w-2.5 h-2.5 text-text-quaternary",strokeWidth:1.5}),t.tags.map(s=>e.jsx("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded text-2xs font-mono text-text-tertiary bg-surface-sunken",children:s},s))]})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Created"}),e.jsx("span",{className:"text-xs text-text-secondary",children:e.jsx(y,{date:t.created_at})})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Updated"}),e.jsx("span",{className:"text-xs text-text-secondary",children:e.jsx(y,{date:t.updated_at})})]}),t.last_seen_at&&e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Last Seen"}),e.jsx("span",{className:"text-xs text-text-secondary",children:e.jsx(y,{date:t.last_seen_at})})]}),e.jsx("div",{className:"ml-auto self-center",children:e.jsx(je,{onRefresh:()=>h(),isFetching:Y,apiPath:`/topics/by-name/${encodeURIComponent(t.topic)}`})})]}),!l&&e.jsxs("div",{className:"grid grid-cols-3 gap-5",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx(k,{icon:N,color:"text-accent",children:"Payload Schema"}),t.payload_schema?e.jsx(G,{data:t.payload_schema}):e.jsx("p",{className:"text-2xs text-text-quaternary",children:"No schema defined. Click Edit to add one."})]}),e.jsxs("div",{className:"min-w-0",children:[e.jsx(k,{icon:Ce,color:"text-accent",children:"Example Payload"}),t.example_payload?e.jsx(G,{data:t.example_payload}):e.jsx("p",{className:"text-2xs text-text-quaternary",children:"No example defined. Click Edit to add one."})]}),e.jsxs("div",{className:"min-w-0 space-y-4 animate-page-enter",children:[e.jsx(k,{icon:Pe,color:"text-accent",children:"Test"}),e.jsxs("div",{className:"bg-surface-sunken/30 rounded-md px-4 py-3",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(H,{className:"w-3.5 h-3.5 text-status-success",strokeWidth:1.5}),e.jsx("h2",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary",children:"Target Subscribers"}),e.jsxs("span",{className:"relative group ml-auto",children:[e.jsx(Ee,{className:"w-3 h-3 text-text-quaternary cursor-help",strokeWidth:1.5}),e.jsx("span",{className:"absolute right-0 top-full mt-1 w-48 p-2 rounded bg-surface-raised border border-surface-border shadow-lg text-2xs text-text-secondary leading-relaxed hidden group-hover:block z-[100]",children:"Publishing a test event is live — these subscribers will receive and process the payload."})]})]}),(V=t.subscribers)!=null&&V.length?e.jsx("div",{className:"space-y-0.5",children:t.subscribers.map(s=>e.jsxs("button",{onClick:()=>d(`/agents/${s.agent_id}`),className:"flex items-center gap-2 w-full text-left py-1 rounded hover:bg-surface-hover/50 transition-colors",children:[e.jsx(H,{className:"w-2.5 h-2.5 text-status-success shrink-0",strokeWidth:1.5}),e.jsx("span",{className:"text-2xs text-text-primary hover:text-accent transition-colors truncate",children:s.agent_name}),e.jsx("span",{className:"text-2xs font-mono text-text-quaternary ml-auto shrink-0",children:s.reaction_type})]},s.id))}):e.jsxs("p",{className:"text-2xs text-text-quaternary",children:["No ",Z," subscribed."]})]}),e.jsxs("div",{className:"sticky top-16 bg-surface-sunken/40 rounded-md p-4",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx(Te,{className:"w-3.5 h-3.5 text-accent",strokeWidth:1.5}),e.jsx("h2",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary",children:"Publish"})]}),e.jsx("label",{className:"block text-2xs text-text-quaternary uppercase tracking-wide mb-1",children:"Event ID"}),e.jsx("input",{value:C,onChange:s=>P(s.target.value),className:"input w-full text-2xs font-mono mb-3",spellCheck:!1,placeholder:"evt-1720368000000-a3f2"}),e.jsx("label",{className:"block text-2xs text-text-quaternary uppercase tracking-wide mb-1",children:"Subject"}),e.jsx("input",{value:o||t.topic,onChange:s=>S(s.target.value),className:"input w-full text-2xs font-mono mb-3",spellCheck:!1}),B&&e.jsxs("div",{className:"grid grid-cols-2 gap-x-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-2xs text-text-quaternary uppercase tracking-wide mb-1",children:"Workflow Name"}),e.jsx("input",{value:T,onChange:s=>te(s.target.value),className:"input w-full text-2xs font-mono mb-3",spellCheck:!1,placeholder:"myWorkflow"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-2xs text-text-quaternary uppercase tracking-wide mb-1",children:"Workflow ID"}),e.jsx("input",{value:W,onChange:s=>se(s.target.value),className:"input w-full text-2xs font-mono mb-3",spellCheck:!1,placeholder:"wf-001"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-2xs text-text-quaternary uppercase tracking-wide mb-1",children:"Task Queue"}),e.jsx("input",{value:_,onChange:s=>ae(s.target.value),className:"input w-full text-2xs font-mono mb-3",spellCheck:!1,placeholder:"default"})]}),U&&e.jsxs("div",{children:[e.jsx("label",{className:"block text-2xs text-text-quaternary uppercase tracking-wide mb-1",children:"Status"}),e.jsx("input",{value:q||v,onChange:s=>ce(s.target.value),className:"input w-full text-2xs font-mono mb-3",spellCheck:!1,placeholder:v})]}),i==="escalation"&&e.jsxs("div",{children:[e.jsx("label",{className:"block text-2xs text-text-quaternary uppercase tracking-wide mb-1",children:"Escalation ID"}),e.jsx("input",{value:I,onChange:s=>ie(s.target.value),className:"input w-full text-2xs font-mono mb-3",spellCheck:!1,placeholder:"esc-001"})]}),i==="activity"&&e.jsxs("div",{children:[e.jsx("label",{className:"block text-2xs text-text-quaternary uppercase tracking-wide mb-1",children:"Activity Name"}),e.jsx("input",{value:D,onChange:s=>ne(s.target.value),className:"input w-full text-2xs font-mono mb-3",spellCheck:!1,placeholder:"myActivity"})]})]}),e.jsx("label",{className:"block text-2xs text-text-quaternary uppercase tracking-wide mb-1",children:"Payload"}),e.jsx("textarea",{value:g||m,onChange:s=>E(s.target.value),className:"input-json w-full text-2xs",rows:6,spellCheck:!1,placeholder:'{ "key": "value" }'}),e.jsx("label",{className:"block text-2xs text-text-quaternary uppercase tracking-wide mb-1 mt-3",children:"Event Preview"}),e.jsx("pre",{className:"bg-surface-sunken/60 rounded px-2 py-2 text-2xs font-mono text-text-tertiary overflow-auto max-h-44 whitespace-pre",children:oe}),e.jsx("div",{className:"mt-3",children:e.jsx("button",{onClick:()=>{r.mutate({topic:t.topic,event:F()},{onSuccess:()=>{h(),P(`evt-${Date.now()}-${Math.random().toString(16).slice(2,6)}`)}})},disabled:r.isPending,className:"btn-primary text-xs w-full",children:r.isPending?"Publishing…":"Publish"})}),r.isSuccess&&e.jsx("p",{className:"text-2xs text-status-success mt-2 animate-page-enter",children:"Event published"}),r.isError&&e.jsx("p",{className:"text-2xs text-status-error mt-2",children:r.error.message})]})]})]}),l&&e.jsxs("div",{className:"space-y-6 max-w-3xl",children:[e.jsxs("div",{children:[e.jsx("label",{className:"section-header",children:"Description"}),e.jsx("textarea",{value:O,onChange:s=>J(s.target.value),rows:3,className:"input resize-none",placeholder:"What this topic represents"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"section-header",children:"Tags"}),e.jsx("input",{type:"text",value:$,onChange:s=>R(s.target.value),placeholder:"lifecycle, core, error",className:"input font-mono"}),e.jsx("p",{className:"hint",children:"Comma-separated. Used for filtering in the catalog."})]}),e.jsxs("div",{children:[e.jsx("label",{className:"section-header",children:"Payload Schema"}),e.jsx("textarea",{value:j,onChange:s=>{A(s.target.value),u("")},rows:12,className:"input-json w-full",placeholder:`{
3
+ This removes it from the catalog. Active subscriptions are not affected.`)&&ee.mutate(t.topic,{onSuccess:()=>d("/topics")})};return e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-start justify-between mb-4",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-3 mb-1",children:[e.jsx(N,{className:"w-5 h-5 text-accent",strokeWidth:1.5}),e.jsx("h1",{className:"text-lg font-mono font-medium text-text-primary",children:t.topic}),e.jsx("button",{onClick:()=>{window.location.hash="#docs:topics.md"},className:"text-text-quaternary hover:text-accent transition-colors",title:"Topic docs",children:e.jsx(ve,{className:"w-4 h-4",strokeWidth:1.5})})]}),!l&&t.description?e.jsx("p",{className:"text-sm text-text-secondary leading-relaxed",children:t.description}):l?null:e.jsx("p",{className:"text-sm text-text-quaternary italic",children:"No description"})]}),e.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[!l&&L&&e.jsxs("button",{onClick:xe,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors",children:[e.jsx(ye,{className:"w-3 h-3"})," Edit"]}),!l&&!le&&L&&e.jsxs("button",{onClick:me,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-status-error/60 hover:text-status-error hover:bg-status-error/10 transition-colors",children:[e.jsx(Ne,{className:"w-3 h-3"})," Delete"]}),l&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{onClick:ue,disabled:w.isPending,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors",children:[e.jsx(ke,{className:"w-3 h-3"})," Save"]}),e.jsxs("button",{onClick:de,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-text-tertiary hover:text-text-primary hover:bg-surface-hover transition-colors",children:[e.jsx(we,{className:"w-3 h-3"})," Cancel"]})]})]})]}),e.jsxs("div",{className:"bg-surface-sunken/50 rounded-md px-5 py-3 flex flex-wrap gap-x-6 gap-y-3 items-start mb-5 relative",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Category"}),e.jsx("span",{className:`inline-flex items-center px-2 py-0.5 rounded text-2xs font-medium ${re}`,children:t.category})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Source"}),e.jsx("span",{className:"text-xs font-mono text-text-secondary",children:t.source})]}),((V=t.tags)==null?void 0:V.length)>0&&e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Tags"}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(Se,{className:"w-2.5 h-2.5 text-text-quaternary",strokeWidth:1.5}),t.tags.map(s=>e.jsx("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded text-2xs font-mono text-text-tertiary bg-surface-sunken",children:s},s))]})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Created"}),e.jsx("span",{className:"text-xs text-text-secondary",children:e.jsx(y,{date:t.created_at})})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Updated"}),e.jsx("span",{className:"text-xs text-text-secondary",children:e.jsx(y,{date:t.updated_at})})]}),t.last_seen_at&&e.jsxs("div",{children:[e.jsx("p",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Last Seen"}),e.jsx("span",{className:"text-xs text-text-secondary",children:e.jsx(y,{date:t.last_seen_at})})]}),e.jsx("div",{className:"ml-auto self-center",children:e.jsx(je,{onRefresh:()=>h(),isFetching:Y,apiPath:`/topics/by-name/${encodeURIComponent(t.topic)}`})})]}),!l&&e.jsxs("div",{className:"grid grid-cols-3 gap-5",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx(k,{icon:N,color:"text-accent",children:"Payload Schema"}),t.payload_schema?e.jsx(H,{data:t.payload_schema}):e.jsx("p",{className:"text-2xs text-text-quaternary",children:"No schema defined. Click Edit to add one."})]}),e.jsxs("div",{className:"min-w-0",children:[e.jsx(k,{icon:Ce,color:"text-accent",children:"Example Payload"}),t.example_payload?e.jsx(H,{data:t.example_payload}):e.jsx("p",{className:"text-2xs text-text-quaternary",children:"No example defined. Click Edit to add one."})]}),e.jsxs("div",{className:"min-w-0 space-y-4 animate-page-enter",children:[e.jsx(k,{icon:Pe,color:"text-accent",children:"Test"}),e.jsxs("div",{className:"bg-surface-sunken/30 rounded-md px-4 py-3",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(K,{className:"w-3.5 h-3.5 text-status-success",strokeWidth:1.5}),e.jsx("h2",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary",children:"Target Subscribers"}),e.jsxs("span",{className:"relative group ml-auto",children:[e.jsx(Ee,{className:"w-3 h-3 text-text-quaternary cursor-help",strokeWidth:1.5}),e.jsx("span",{className:"absolute right-0 top-full mt-1 w-48 p-2 rounded bg-surface-raised border border-surface-border shadow-lg text-2xs text-text-secondary leading-relaxed hidden group-hover:block z-[100]",children:"Publishing a test event is live — these subscribers will receive and process the payload."})]})]}),(G=t.subscribers)!=null&&G.length?e.jsx("div",{className:"space-y-0.5",children:t.subscribers.map(s=>e.jsxs("button",{onClick:()=>d(`/agents/${s.agent_id}`),className:"flex items-center gap-2 w-full text-left py-1 rounded hover:bg-surface-hover/50 transition-colors",children:[e.jsx(K,{className:"w-2.5 h-2.5 text-status-success shrink-0",strokeWidth:1.5}),e.jsx("span",{className:"text-2xs text-text-primary hover:text-accent transition-colors truncate",children:s.agent_name}),e.jsx("span",{className:"text-2xs font-mono text-text-quaternary ml-auto shrink-0",children:s.reaction_type})]},s.id))}):e.jsxs("p",{className:"text-2xs text-text-quaternary",children:["No ",Z," subscribed."]})]}),e.jsxs("div",{className:"sticky top-16 bg-surface-sunken/40 rounded-md p-4",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx(Te,{className:"w-3.5 h-3.5 text-accent",strokeWidth:1.5}),e.jsx("h2",{className:"text-2xs font-semibold uppercase tracking-widest text-text-tertiary",children:"Publish"})]}),e.jsx("label",{className:"block text-2xs text-text-quaternary uppercase tracking-wide mb-1",children:"Event ID"}),e.jsx("input",{value:C,onChange:s=>P(s.target.value),className:"input w-full text-2xs font-mono mb-3",spellCheck:!1,placeholder:"evt-1720368000000-a3f2"}),e.jsx("label",{className:"block text-2xs text-text-quaternary uppercase tracking-wide mb-1",children:"Subject"}),e.jsx("input",{value:o||t.topic,onChange:s=>S(s.target.value),className:"input w-full text-2xs font-mono mb-3",spellCheck:!1}),B&&e.jsxs("div",{className:"grid grid-cols-2 gap-x-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-2xs text-text-quaternary uppercase tracking-wide mb-1",children:"Workflow Name"}),e.jsx("input",{value:T,onChange:s=>te(s.target.value),className:"input w-full text-2xs font-mono mb-3",spellCheck:!1,placeholder:"myWorkflow"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-2xs text-text-quaternary uppercase tracking-wide mb-1",children:"Workflow ID"}),e.jsx("input",{value:W,onChange:s=>se(s.target.value),className:"input w-full text-2xs font-mono mb-3",spellCheck:!1,placeholder:"wf-001"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-2xs text-text-quaternary uppercase tracking-wide mb-1",children:"Task Queue"}),e.jsx("input",{value:_,onChange:s=>ae(s.target.value),className:"input w-full text-2xs font-mono mb-3",spellCheck:!1,placeholder:"default"})]}),U&&e.jsxs("div",{children:[e.jsx("label",{className:"block text-2xs text-text-quaternary uppercase tracking-wide mb-1",children:"Status"}),e.jsx("input",{value:q||v,onChange:s=>ce(s.target.value),className:"input w-full text-2xs font-mono mb-3",spellCheck:!1,placeholder:v})]}),i==="escalation"&&e.jsxs("div",{children:[e.jsx("label",{className:"block text-2xs text-text-quaternary uppercase tracking-wide mb-1",children:"Escalation ID"}),e.jsx("input",{value:I,onChange:s=>ie(s.target.value),className:"input w-full text-2xs font-mono mb-3",spellCheck:!1,placeholder:"esc-001"})]}),i==="activity"&&e.jsxs("div",{children:[e.jsx("label",{className:"block text-2xs text-text-quaternary uppercase tracking-wide mb-1",children:"Activity Name"}),e.jsx("input",{value:D,onChange:s=>ne(s.target.value),className:"input w-full text-2xs font-mono mb-3",spellCheck:!1,placeholder:"myActivity"})]})]}),e.jsx("label",{className:"block text-2xs text-text-quaternary uppercase tracking-wide mb-1",children:"Payload"}),e.jsx("textarea",{value:g||m,onChange:s=>E(s.target.value),className:"input-json w-full text-2xs",rows:6,spellCheck:!1,placeholder:'{ "key": "value" }'}),e.jsx("label",{className:"block text-2xs text-text-quaternary uppercase tracking-wide mb-1 mt-3",children:"Event Preview"}),e.jsx("pre",{className:"bg-surface-sunken/60 rounded px-2 py-2 text-2xs font-mono text-text-tertiary overflow-auto max-h-44 whitespace-pre",children:oe}),e.jsx("div",{className:"mt-3",children:e.jsx("button",{onClick:()=>{r.mutate({topic:t.topic,event:F()},{onSuccess:()=>{h(),P(`evt-${Date.now()}-${Math.random().toString(16).slice(2,6)}`)}})},disabled:r.isPending,className:"btn-primary text-xs w-full",children:r.isPending?"Publishing…":"Publish"})}),r.isSuccess&&e.jsx("p",{className:"text-2xs text-status-success mt-2 animate-page-enter",children:"Event published"}),r.isError&&e.jsx("p",{className:"text-2xs text-status-error mt-2",children:r.error.message})]})]})]}),l&&e.jsxs("div",{className:"space-y-6 max-w-3xl",children:[e.jsxs("div",{children:[e.jsx("label",{className:"section-header",children:"Description"}),e.jsx("textarea",{value:O,onChange:s=>J(s.target.value),rows:3,className:"input resize-none",placeholder:"What this topic represents"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"section-header",children:"Tags"}),e.jsx("input",{type:"text",value:$,onChange:s=>M(s.target.value),placeholder:"lifecycle, core, error",className:"input font-mono"}),e.jsx("p",{className:"hint",children:"Comma-separated. Used for filtering in the catalog."})]}),e.jsxs("div",{children:[e.jsx("label",{className:"section-header",children:"Payload Schema"}),e.jsx("textarea",{value:j,onChange:s=>{R(s.target.value),u("")},rows:12,className:"input-json w-full",placeholder:`{
4
4
  "type": "object",
5
5
  "properties": {
6
6
  "orderId": { "type": "string" }
7
7
  }
8
- }`}),M&&e.jsx("p",{className:"text-2xs text-status-error mt-1",children:M}),e.jsx("p",{className:"hint",children:"JSON Schema describing the event.data shape."})]})]})]})}export{Me as TopicDetailPage};
9
- //# sourceMappingURL=TopicDetailPage-B455XrRc.js.map
8
+ }`}),A&&e.jsx("p",{className:"text-2xs text-status-error mt-1",children:A}),e.jsx("p",{className:"hint",children:"JSON Schema describing the event.data shape."})]})]})]})}export{Ae as TopicDetailPage};
9
+ //# sourceMappingURL=TopicDetailPage-DHdSpN61.js.map