@hotmeshio/long-tail 0.3.1 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. package/build/api/agents.d.ts +1 -1
  2. package/build/api/agents.js +1 -1
  3. package/build/api/controlplane.d.ts +33 -0
  4. package/build/api/controlplane.js +46 -0
  5. package/build/bin/ltc.js +16 -0
  6. package/build/lib/cli/commands/streams.d.ts +20 -0
  7. package/build/lib/cli/commands/streams.js +134 -0
  8. package/build/lib/db/schemas/001_schema.sql +3 -3
  9. package/build/lib/db/schemas/003_agents.sql +1 -2
  10. package/build/lib/db/schemas/004_agent_subscriptions.sql +1 -1
  11. package/build/lib/db/schemas/006_agent_sub_unique.sql +1 -0
  12. package/build/routes/agents.js +3 -3
  13. package/build/routes/controlplane.js +28 -0
  14. package/build/sdk/index.d.ts +1 -0
  15. package/build/sdk/index.js +1 -0
  16. package/build/services/agent/index.d.ts +2 -3
  17. package/build/services/agent/index.js +5 -12
  18. package/build/services/agent/sql.d.ts +3 -4
  19. package/build/services/agent/sql.js +16 -20
  20. package/build/services/agent/subscription-sql.d.ts +1 -1
  21. package/build/services/agent/subscription-sql.js +1 -1
  22. package/build/services/agent/trigger-registry.js +1 -1
  23. package/build/services/controlplane/index.d.ts +9 -1
  24. package/build/services/controlplane/index.js +39 -0
  25. package/build/services/controlplane/stream-messages-sql.d.ts +21 -0
  26. package/build/services/controlplane/stream-messages-sql.js +109 -0
  27. package/build/services/controlplane/types.d.ts +44 -0
  28. package/build/services/cron/index.js +5 -5
  29. package/build/services/export/post-process.js +14 -6
  30. package/build/services/mcp-runs/execution-builder.js +9 -4
  31. package/build/services/topics/index.js +1 -4
  32. package/build/services/topics/sql.d.ts +2 -2
  33. package/build/services/topics/sql.js +9 -2
  34. package/build/services/topics/system-topics.js +2 -3
  35. package/build/start/workers.js +11 -14
  36. package/build/tsconfig.tsbuildinfo +1 -1
  37. package/build/types/agent.d.ts +1 -1
  38. package/dashboard/dist/assets/{AdminDashboard-CbeSejVX.js → AdminDashboard-BBWJAsjl.js} +2 -2
  39. package/dashboard/dist/assets/{AdminDashboard-CbeSejVX.js.map → AdminDashboard-BBWJAsjl.js.map} +1 -1
  40. package/dashboard/dist/assets/{AgentConfigPage-CFJNOrlg.js → AgentConfigPage-Br2O6NDa.js} +3 -3
  41. package/dashboard/dist/assets/AgentConfigPage-Br2O6NDa.js.map +1 -0
  42. package/dashboard/dist/assets/AgentDetailPage-DjgOR62z.js +4 -0
  43. package/dashboard/dist/assets/AgentDetailPage-DjgOR62z.js.map +1 -0
  44. package/dashboard/dist/assets/AgentsPage-CASVGEvY.js +2 -0
  45. package/dashboard/dist/assets/AgentsPage-CASVGEvY.js.map +1 -0
  46. package/dashboard/dist/assets/AvailableEscalationsPage-Dl9ZmjKA.js +2 -0
  47. package/dashboard/dist/assets/{AvailableEscalationsPage-DdrzePy4.js.map → AvailableEscalationsPage-Dl9ZmjKA.js.map} +1 -1
  48. package/dashboard/dist/assets/{BotPicker-kKBifD1w.js → BotPicker-wEoqL3HR.js} +2 -2
  49. package/dashboard/dist/assets/{BotPicker-kKBifD1w.js.map → BotPicker-wEoqL3HR.js.map} +1 -1
  50. package/dashboard/dist/assets/CapabilitiesPage-DYkx5aa4.js +2 -0
  51. package/dashboard/dist/assets/{CapabilitiesPage-Ch5qY0I7.js.map → CapabilitiesPage-DYkx5aa4.js.map} +1 -1
  52. package/dashboard/dist/assets/{CollapsibleSection-kYTBL7dT.js → CollapsibleSection-DN1aF5HO.js} +2 -2
  53. package/dashboard/dist/assets/{CollapsibleSection-kYTBL7dT.js.map → CollapsibleSection-DN1aF5HO.js.map} +1 -1
  54. package/dashboard/dist/assets/{ConfirmDeleteModal-CcaAapMl.js → ConfirmDeleteModal-v8ufrnX5.js} +2 -2
  55. package/dashboard/dist/assets/{ConfirmDeleteModal-CcaAapMl.js.map → ConfirmDeleteModal-v8ufrnX5.js.map} +1 -1
  56. package/dashboard/dist/assets/{CopyableId-B4CL12pv.js → CopyableId-D94R2n6C.js} +2 -2
  57. package/dashboard/dist/assets/{CopyableId-B4CL12pv.js.map → CopyableId-D94R2n6C.js.map} +1 -1
  58. package/dashboard/dist/assets/{CredentialsPage-D1VAlwid.js → CredentialsPage-CSSjAEx6.js} +2 -2
  59. package/dashboard/dist/assets/{CredentialsPage-D1VAlwid.js.map → CredentialsPage-CSSjAEx6.js.map} +1 -1
  60. package/dashboard/dist/assets/{CronLabel-DRmO5rH0.js → CronLabel-fYpkTnEd.js} +2 -2
  61. package/dashboard/dist/assets/{CronLabel-DRmO5rH0.js.map → CronLabel-fYpkTnEd.js.map} +1 -1
  62. package/dashboard/dist/assets/{CustomDurationPicker-C06QDDir.js → CustomDurationPicker-CSarfbO1.js} +2 -2
  63. package/dashboard/dist/assets/{CustomDurationPicker-C06QDDir.js.map → CustomDurationPicker-CSarfbO1.js.map} +1 -1
  64. package/dashboard/dist/assets/{DataTable-J5R6mepB.js → DataTable-VKt4pvC-.js} +2 -2
  65. package/dashboard/dist/assets/{DataTable-J5R6mepB.js.map → DataTable-VKt4pvC-.js.map} +1 -1
  66. package/dashboard/dist/assets/{DropZone-DwNj3GiG.js → DropZone-Bl4j-AID.js} +2 -2
  67. package/dashboard/dist/assets/{DropZone-DwNj3GiG.js.map → DropZone-Bl4j-AID.js.map} +1 -1
  68. package/dashboard/dist/assets/{ElapsedCell-ChyMzl9n.js → ElapsedCell-Y4UmrII0.js} +2 -2
  69. package/dashboard/dist/assets/{ElapsedCell-ChyMzl9n.js.map → ElapsedCell-Y4UmrII0.js.map} +1 -1
  70. package/dashboard/dist/assets/{EmptyState-BXGvOADa.js → EmptyState-Di6_NfbP.js} +2 -2
  71. package/dashboard/dist/assets/{EmptyState-BXGvOADa.js.map → EmptyState-Di6_NfbP.js.map} +1 -1
  72. package/dashboard/dist/assets/{EscalationsOverview-DM6zmE4g.js → EscalationsOverview-D0Ry84FE.js} +2 -2
  73. package/dashboard/dist/assets/{EscalationsOverview-DM6zmE4g.js.map → EscalationsOverview-D0Ry84FE.js.map} +1 -1
  74. package/dashboard/dist/assets/{EventTable-CvJ98E8s.js → EventTable-BzPleN3Y.js} +2 -2
  75. package/dashboard/dist/assets/{EventTable-CvJ98E8s.js.map → EventTable-BzPleN3Y.js.map} +1 -1
  76. package/dashboard/dist/assets/{EventTopicPill-CB_rIGlL.js → EventTopicPill-DCqcr7N7.js} +2 -2
  77. package/dashboard/dist/assets/{EventTopicPill-CB_rIGlL.js.map → EventTopicPill-DCqcr7N7.js.map} +1 -1
  78. package/dashboard/dist/assets/{FilterBar-Bdssa-Xn.js → FilterBar-BoRQss2J.js} +2 -2
  79. package/dashboard/dist/assets/{FilterBar-Bdssa-Xn.js.map → FilterBar-BoRQss2J.js.map} +1 -1
  80. package/dashboard/dist/assets/HomePage-CGH_dYSo.js +2 -0
  81. package/dashboard/dist/assets/HomePage-CGH_dYSo.js.map +1 -0
  82. package/dashboard/dist/assets/{ListToolbar-jy8NL6ll.js → ListToolbar-BMWttsi2.js} +2 -2
  83. package/dashboard/dist/assets/{ListToolbar-jy8NL6ll.js.map → ListToolbar-BMWttsi2.js.map} +1 -1
  84. package/dashboard/dist/assets/{McpOverview-xkaKuHbX.js → McpOverview-DpC-BbBV.js} +2 -2
  85. package/dashboard/dist/assets/{McpOverview-xkaKuHbX.js.map → McpOverview-DpC-BbBV.js.map} +1 -1
  86. package/dashboard/dist/assets/{McpQueryDetailPage-D5ICn6cR.js → McpQueryDetailPage-CZSzX-cI.js} +2 -2
  87. package/dashboard/dist/assets/{McpQueryDetailPage-D5ICn6cR.js.map → McpQueryDetailPage-CZSzX-cI.js.map} +1 -1
  88. package/dashboard/dist/assets/{McpQueryPage-C46fzfm5.js → McpQueryPage-B4KsvBGo.js} +2 -2
  89. package/dashboard/dist/assets/{McpQueryPage-C46fzfm5.js.map → McpQueryPage-B4KsvBGo.js.map} +1 -1
  90. package/dashboard/dist/assets/{McpRunDetailPage-Znsl4Yc-.js → McpRunDetailPage-_owlNUzp.js} +2 -2
  91. package/dashboard/dist/assets/{McpRunDetailPage-Znsl4Yc-.js.map → McpRunDetailPage-_owlNUzp.js.map} +1 -1
  92. package/dashboard/dist/assets/McpRunsPage-C3A1fU3h.js +2 -0
  93. package/dashboard/dist/assets/McpRunsPage-C3A1fU3h.js.map +1 -0
  94. package/dashboard/dist/assets/{Modal-C6k6_5KB.js → Modal-IsEbA4rW.js} +2 -2
  95. package/dashboard/dist/assets/{Modal-C6k6_5KB.js.map → Modal-IsEbA4rW.js.map} +1 -1
  96. package/dashboard/dist/assets/OperatorDashboard-B8MOtt_p.js +2 -0
  97. package/dashboard/dist/assets/{OperatorDashboard-e5N3_dVl.js.map → OperatorDashboard-B8MOtt_p.js.map} +1 -1
  98. package/dashboard/dist/assets/{PageHeader-COcgWWf-.js → PageHeader-C4DNgZKA.js} +2 -2
  99. package/dashboard/dist/assets/{PageHeader-COcgWWf-.js.map → PageHeader-C4DNgZKA.js.map} +1 -1
  100. package/dashboard/dist/assets/{PageHeaderWithStats-C0PCY3aJ.js → PageHeaderWithStats-Fy6tGBaa.js} +2 -2
  101. package/dashboard/dist/assets/{PageHeaderWithStats-C0PCY3aJ.js.map → PageHeaderWithStats-Fy6tGBaa.js.map} +1 -1
  102. package/dashboard/dist/assets/{PriorityBadge-BQCsYMpM.js → PriorityBadge-kSpsF-Zm.js} +2 -2
  103. package/dashboard/dist/assets/{PriorityBadge-BQCsYMpM.js.map → PriorityBadge-kSpsF-Zm.js.map} +1 -1
  104. package/dashboard/dist/assets/{ProcessDetailPage-C03LOgI0.js → ProcessDetailPage-CZjjs4jE.js} +2 -2
  105. package/dashboard/dist/assets/{ProcessDetailPage-C03LOgI0.js.map → ProcessDetailPage-CZjjs4jE.js.map} +1 -1
  106. package/dashboard/dist/assets/{ProcessesListPage-iyPsmlhm.js → ProcessesListPage-Ds7y71o8.js} +2 -2
  107. package/dashboard/dist/assets/{ProcessesListPage-iyPsmlhm.js.map → ProcessesListPage-Ds7y71o8.js.map} +1 -1
  108. package/dashboard/dist/assets/{RolePill-CHwys1f9.js → RolePill-DmdF9L9Q.js} +2 -2
  109. package/dashboard/dist/assets/{RolePill-CHwys1f9.js.map → RolePill-DmdF9L9Q.js.map} +1 -1
  110. package/dashboard/dist/assets/{RolesPage-Bmc3XaUk.js → RolesPage-CCmK38yn.js} +2 -2
  111. package/dashboard/dist/assets/{RolesPage-Bmc3XaUk.js.map → RolesPage-CCmK38yn.js.map} +1 -1
  112. package/dashboard/dist/assets/{RowActions-Bs4PF-Gd.js → RowActions-uGuPBEWb.js} +2 -2
  113. package/dashboard/dist/assets/{RowActions-Bs4PF-Gd.js.map → RowActions-uGuPBEWb.js.map} +1 -1
  114. package/dashboard/dist/assets/{RunAsSelector-DXzAr2WW.js → RunAsSelector-BsO-uSh9.js} +2 -2
  115. package/dashboard/dist/assets/{RunAsSelector-DXzAr2WW.js.map → RunAsSelector-BsO-uSh9.js.map} +1 -1
  116. package/dashboard/dist/assets/{ServerName-BIdLC1Ay.js → ServerName-BHl8nLOV.js} +2 -2
  117. package/dashboard/dist/assets/{ServerName-BIdLC1Ay.js.map → ServerName-BHl8nLOV.js.map} +1 -1
  118. package/dashboard/dist/assets/{StatCard-OKzRSSx4.js → StatCard-DI4ZQ-Zi.js} +2 -2
  119. package/dashboard/dist/assets/{StatCard-OKzRSSx4.js.map → StatCard-DI4ZQ-Zi.js.map} +1 -1
  120. package/dashboard/dist/assets/{StatusBadge-CQlF46RR.js → StatusBadge-TV20Ulgl.js} +2 -2
  121. package/dashboard/dist/assets/{StatusBadge-CQlF46RR.js.map → StatusBadge-TV20Ulgl.js.map} +1 -1
  122. package/dashboard/dist/assets/{StepIndicator-CP7eycjI.js → StepIndicator-ziIED3Pz.js} +2 -2
  123. package/dashboard/dist/assets/{StepIndicator-CP7eycjI.js.map → StepIndicator-ziIED3Pz.js.map} +1 -1
  124. package/dashboard/dist/assets/{StickyPagination-CGk8VAKt.js → StickyPagination-CXBDS1ka.js} +2 -2
  125. package/dashboard/dist/assets/{StickyPagination-CGk8VAKt.js.map → StickyPagination-CXBDS1ka.js.map} +1 -1
  126. package/dashboard/dist/assets/{SwimlaneTimeline-MEUPc3yJ.js → SwimlaneTimeline-Dc_a4-D5.js} +2 -2
  127. package/dashboard/dist/assets/{SwimlaneTimeline-MEUPc3yJ.js.map → SwimlaneTimeline-Dc_a4-D5.js.map} +1 -1
  128. package/dashboard/dist/assets/{TagInput-BGxXKiWD.js → TagInput-BYEjEPsa.js} +2 -2
  129. package/dashboard/dist/assets/{TagInput-BGxXKiWD.js.map → TagInput-BYEjEPsa.js.map} +1 -1
  130. package/dashboard/dist/assets/{TaskDetailPage-pN5BXzYA.js → TaskDetailPage-Cu0XLEA4.js} +2 -2
  131. package/dashboard/dist/assets/{TaskDetailPage-pN5BXzYA.js.map → TaskDetailPage-Cu0XLEA4.js.map} +1 -1
  132. package/dashboard/dist/assets/{TaskQueuePill-bw8ieKsf.js → TaskQueuePill-yBqQ-piu.js} +2 -2
  133. package/dashboard/dist/assets/{TaskQueuePill-bw8ieKsf.js.map → TaskQueuePill-yBqQ-piu.js.map} +1 -1
  134. package/dashboard/dist/assets/{TasksListPage-D1INzcrA.js → TasksListPage-Dl0quVgM.js} +2 -2
  135. package/dashboard/dist/assets/{TasksListPage-D1INzcrA.js.map → TasksListPage-Dl0quVgM.js.map} +1 -1
  136. package/dashboard/dist/assets/{TimeAgo-CywLVIBA.js → TimeAgo-BAs-HL55.js} +2 -2
  137. package/dashboard/dist/assets/{TimeAgo-CywLVIBA.js.map → TimeAgo-BAs-HL55.js.map} +1 -1
  138. package/dashboard/dist/assets/{TimestampCell-B4Pc6f3A.js → TimestampCell-zFm6ze1U.js} +2 -2
  139. package/dashboard/dist/assets/{TimestampCell-B4Pc6f3A.js.map → TimestampCell-zFm6ze1U.js.map} +1 -1
  140. package/dashboard/dist/assets/ToolPill-DiM3hgAB.js +2 -0
  141. package/dashboard/dist/assets/{ToolPill-DdLN3JOT.js.map → ToolPill-DiM3hgAB.js.map} +1 -1
  142. package/dashboard/dist/assets/{ToolTestPanel-DusbUka5.js → ToolTestPanel-C3vWUW2p.js} +2 -2
  143. package/dashboard/dist/assets/{ToolTestPanel-DusbUka5.js.map → ToolTestPanel-C3vWUW2p.js.map} +1 -1
  144. package/dashboard/dist/assets/TopicDetailPage-wjwRE5eI.js +9 -0
  145. package/dashboard/dist/assets/TopicDetailPage-wjwRE5eI.js.map +1 -0
  146. package/dashboard/dist/assets/{TopicsPage-DbtrnQON.js → TopicsPage-D3AONwHP.js} +2 -2
  147. package/dashboard/dist/assets/{TopicsPage-DbtrnQON.js.map → TopicsPage-D3AONwHP.js.map} +1 -1
  148. package/dashboard/dist/assets/{UserName-CLbusknU.js → UserName-0vrAWvND.js} +2 -2
  149. package/dashboard/dist/assets/{UserName-CLbusknU.js.map → UserName-0vrAWvND.js.map} +1 -1
  150. package/dashboard/dist/assets/{WorkflowExecutionPage-C61R-3Gg.js → WorkflowExecutionPage-CBbWToVN.js} +2 -2
  151. package/dashboard/dist/assets/{WorkflowExecutionPage-C61R-3Gg.js.map → WorkflowExecutionPage-CBbWToVN.js.map} +1 -1
  152. package/dashboard/dist/assets/{WorkflowPill-7vt2F6wR.js → WorkflowPill-C7jE0e1g.js} +2 -2
  153. package/dashboard/dist/assets/{WorkflowPill-7vt2F6wR.js.map → WorkflowPill-C7jE0e1g.js.map} +1 -1
  154. package/dashboard/dist/assets/WorkflowsDashboard-1GVHYLlw.js +2 -0
  155. package/dashboard/dist/assets/{WorkflowsDashboard-BWiUNvyl.js.map → WorkflowsDashboard-1GVHYLlw.js.map} +1 -1
  156. package/dashboard/dist/assets/{WorkflowsOverview-DA2ZOs7D.js → WorkflowsOverview-2POOJzat.js} +2 -2
  157. package/dashboard/dist/assets/{WorkflowsOverview-DA2ZOs7D.js.map → WorkflowsOverview-2POOJzat.js.map} +1 -1
  158. package/dashboard/dist/assets/YamlWorkflowsPage-BcRKxz3P.js +2 -0
  159. package/dashboard/dist/assets/{YamlWorkflowsPage-CLebf2eL.js.map → YamlWorkflowsPage-BcRKxz3P.js.map} +1 -1
  160. package/dashboard/dist/assets/{agents-Dga6NU7U.js → agents-Bd6SNUID.js} +2 -2
  161. package/dashboard/dist/assets/agents-Bd6SNUID.js.map +1 -0
  162. package/dashboard/dist/assets/{bots-CtU4i4OQ.js → bots-DEsg-T8t.js} +2 -2
  163. package/dashboard/dist/assets/{bots-CtU4i4OQ.js.map → bots-DEsg-T8t.js.map} +1 -1
  164. package/dashboard/dist/assets/{controlplane-BVoALhbL.js → controlplane-B3m1kIWb.js} +2 -2
  165. package/dashboard/dist/assets/{controlplane-BVoALhbL.js.map → controlplane-B3m1kIWb.js.map} +1 -1
  166. package/dashboard/dist/assets/{escalation-_N5GfuIi.js → escalation-CJQPC0gm.js} +2 -2
  167. package/dashboard/dist/assets/{escalation-_N5GfuIi.js.map → escalation-CJQPC0gm.js.map} +1 -1
  168. package/dashboard/dist/assets/{escalation-columns-CoTmTpHp.js → escalation-columns-DEE62U3_.js} +2 -2
  169. package/dashboard/dist/assets/{escalation-columns-CoTmTpHp.js.map → escalation-columns-DEE62U3_.js.map} +1 -1
  170. package/dashboard/dist/assets/{helpers-Dz2U3Ctb.js → helpers-BveI_035.js} +2 -2
  171. package/dashboard/dist/assets/{helpers-Dz2U3Ctb.js.map → helpers-BveI_035.js.map} +1 -1
  172. package/dashboard/dist/assets/index-B7zv_NKJ.js +2 -0
  173. package/dashboard/dist/assets/index-B7zv_NKJ.js.map +1 -0
  174. package/dashboard/dist/assets/index-BVVdr9s0.js +2 -0
  175. package/dashboard/dist/assets/{index-6Kd78p_v.js.map → index-BVVdr9s0.js.map} +1 -1
  176. package/dashboard/dist/assets/{index-D_H_Prht.js → index-BXIwxi_u.js} +2 -2
  177. package/dashboard/dist/assets/{index-D_H_Prht.js.map → index-BXIwxi_u.js.map} +1 -1
  178. package/dashboard/dist/assets/{index-B9ealjkt.js → index-CEPo8tn_.js} +2 -2
  179. package/dashboard/dist/assets/{index-B9ealjkt.js.map → index-CEPo8tn_.js.map} +1 -1
  180. package/dashboard/dist/assets/{index-BYwPVJv0.js → index-CTKfvoGj.js} +2 -2
  181. package/dashboard/dist/assets/{index-BYwPVJv0.js.map → index-CTKfvoGj.js.map} +1 -1
  182. package/dashboard/dist/assets/{index-Dpjguclc.js → index-CZVprWC6.js} +2 -2
  183. package/dashboard/dist/assets/{index-Dpjguclc.js.map → index-CZVprWC6.js.map} +1 -1
  184. package/dashboard/dist/assets/{index-CtbG3UN-.js → index-ChNwlMdo.js} +2 -2
  185. package/dashboard/dist/assets/{index-CtbG3UN-.js.map → index-ChNwlMdo.js.map} +1 -1
  186. package/dashboard/dist/assets/{index-QicYdUsl.js → index-Cpq83bZq.js} +2 -2
  187. package/dashboard/dist/assets/{index-QicYdUsl.js.map → index-Cpq83bZq.js.map} +1 -1
  188. package/dashboard/dist/assets/{index-CS61sh5q.js → index-Csts1D-x.js} +2 -2
  189. package/dashboard/dist/assets/{index-CS61sh5q.js.map → index-Csts1D-x.js.map} +1 -1
  190. package/dashboard/dist/assets/{index-dM-OgCY3.js → index-D4v-EUTe.js} +2 -2
  191. package/dashboard/dist/assets/{index-dM-OgCY3.js.map → index-D4v-EUTe.js.map} +1 -1
  192. package/dashboard/dist/assets/{index-DWUunWxh.js → index-DI36hw6W.js} +2 -2
  193. package/dashboard/dist/assets/{index-DWUunWxh.js.map → index-DI36hw6W.js.map} +1 -1
  194. package/dashboard/dist/assets/{index-CCOSf1PY.js → index-MnRuwfHN.js} +59 -59
  195. package/dashboard/dist/assets/index-MnRuwfHN.js.map +1 -0
  196. package/dashboard/dist/assets/index-dp_Q2Hha.css +1 -0
  197. package/dashboard/dist/assets/{index-BWHDW_CF.js → index-wQaJXZYX.js} +2 -2
  198. package/dashboard/dist/assets/{index-BWHDW_CF.js.map → index-wQaJXZYX.js.map} +1 -1
  199. package/dashboard/dist/assets/{knowledge-DJlebU82.js → knowledge-krdvn5bg.js} +2 -2
  200. package/dashboard/dist/assets/{knowledge-DJlebU82.js.map → knowledge-krdvn5bg.js.map} +1 -1
  201. package/dashboard/dist/assets/{mcp-CsLJ5SRm.js → mcp-BTZ2ex4x.js} +2 -2
  202. package/dashboard/dist/assets/{mcp-CsLJ5SRm.js.map → mcp-BTZ2ex4x.js.map} +1 -1
  203. package/dashboard/dist/assets/{mcp-query-WNK1ItRV.js → mcp-query-BzqJu709.js} +2 -2
  204. package/dashboard/dist/assets/{mcp-query-WNK1ItRV.js.map → mcp-query-BzqJu709.js.map} +1 -1
  205. package/dashboard/dist/assets/{mcp-runs-DtTTsuPH.js → mcp-runs-BBUaY28a.js} +2 -2
  206. package/dashboard/dist/assets/{mcp-runs-DtTTsuPH.js.map → mcp-runs-BBUaY28a.js.map} +1 -1
  207. package/dashboard/dist/assets/{namespaces-iRejH3_A.js → namespaces-DJVfgGst.js} +2 -2
  208. package/dashboard/dist/assets/{namespaces-iRejH3_A.js.map → namespaces-DJVfgGst.js.map} +1 -1
  209. package/dashboard/dist/assets/{roles-3Jm5KtKc.js → roles-DogkRzK2.js} +2 -2
  210. package/dashboard/dist/assets/{roles-3Jm5KtKc.js.map → roles-DogkRzK2.js.map} +1 -1
  211. package/dashboard/dist/assets/{settings-DmN2I-c6.js → settings-D2sLRpie.js} +2 -2
  212. package/dashboard/dist/assets/{settings-DmN2I-c6.js.map → settings-D2sLRpie.js.map} +1 -1
  213. package/dashboard/dist/assets/{tasks-Cc-QoITQ.js → tasks-CIuWkHLG.js} +2 -2
  214. package/dashboard/dist/assets/{tasks-Cc-QoITQ.js.map → tasks-CIuWkHLG.js.map} +1 -1
  215. package/dashboard/dist/assets/{topics-p8anbgi0.js → topics-DxMDwZFs.js} +2 -2
  216. package/dashboard/dist/assets/topics-DxMDwZFs.js.map +1 -0
  217. package/dashboard/dist/assets/{useEventHooks-VaJ52jMm.js → useEventHooks-xXspN8_9.js} +2 -2
  218. package/dashboard/dist/assets/{useEventHooks-VaJ52jMm.js.map → useEventHooks-xXspN8_9.js.map} +1 -1
  219. package/dashboard/dist/assets/{useYamlActivityEvents-BU4Uhksl.js → useYamlActivityEvents-2hdnnML7.js} +2 -2
  220. package/dashboard/dist/assets/{useYamlActivityEvents-BU4Uhksl.js.map → useYamlActivityEvents-2hdnnML7.js.map} +1 -1
  221. package/dashboard/dist/assets/{users-oXOlnold.js → users-DWQ-ojf9.js} +2 -2
  222. package/dashboard/dist/assets/{users-oXOlnold.js.map → users-DWQ-ojf9.js.map} +1 -1
  223. package/dashboard/dist/assets/{vendor-icons-CBOM6Es0.js → vendor-icons-YdqUbzg6.js} +110 -100
  224. package/dashboard/dist/assets/vendor-icons-YdqUbzg6.js.map +1 -0
  225. package/dashboard/dist/assets/{workflows-Yq7cK-vR.js → workflows-BvGU8_fj.js} +2 -2
  226. package/dashboard/dist/assets/{workflows-Yq7cK-vR.js.map → workflows-BvGU8_fj.js.map} +1 -1
  227. package/dashboard/dist/assets/{yaml-workflows-Ch53yD43.js → yaml-workflows-DNgb7krQ.js} +2 -2
  228. package/dashboard/dist/assets/{yaml-workflows-Ch53yD43.js.map → yaml-workflows-DNgb7krQ.js.map} +1 -1
  229. package/dashboard/dist/index.html +3 -3
  230. package/docs/agents.md +1 -1
  231. package/docs/api/http/agents.md +5 -7
  232. package/docs/api/http/controlplane.md +193 -0
  233. package/docs/api/sdk/agents.md +5 -5
  234. package/docs/api/sdk/controlplane.md +36 -0
  235. package/docs/dashboard.md +13 -0
  236. package/package.json +2 -2
  237. package/dashboard/dist/assets/AgentConfigPage-CFJNOrlg.js.map +0 -1
  238. package/dashboard/dist/assets/AgentDetailPage-Dbx2t-Uk.js +0 -4
  239. package/dashboard/dist/assets/AgentDetailPage-Dbx2t-Uk.js.map +0 -1
  240. package/dashboard/dist/assets/AgentsPage-Bz61Nl-x.js +0 -2
  241. package/dashboard/dist/assets/AgentsPage-Bz61Nl-x.js.map +0 -1
  242. package/dashboard/dist/assets/AvailableEscalationsPage-DdrzePy4.js +0 -2
  243. package/dashboard/dist/assets/CapabilitiesPage-Ch5qY0I7.js +0 -2
  244. package/dashboard/dist/assets/HomePage-BuZkdXZt.js +0 -2
  245. package/dashboard/dist/assets/HomePage-BuZkdXZt.js.map +0 -1
  246. package/dashboard/dist/assets/McpRunsPage-DT-armx5.js +0 -2
  247. package/dashboard/dist/assets/McpRunsPage-DT-armx5.js.map +0 -1
  248. package/dashboard/dist/assets/OperatorDashboard-e5N3_dVl.js +0 -2
  249. package/dashboard/dist/assets/ToolPill-DdLN3JOT.js +0 -2
  250. package/dashboard/dist/assets/TopicDetailPage-DadwM52Y.js +0 -9
  251. package/dashboard/dist/assets/TopicDetailPage-DadwM52Y.js.map +0 -1
  252. package/dashboard/dist/assets/WorkflowsDashboard-BWiUNvyl.js +0 -2
  253. package/dashboard/dist/assets/YamlWorkflowsPage-CLebf2eL.js +0 -2
  254. package/dashboard/dist/assets/agents-Dga6NU7U.js.map +0 -1
  255. package/dashboard/dist/assets/index-6Kd78p_v.js +0 -2
  256. package/dashboard/dist/assets/index-BIUHY2Jz.css +0 -1
  257. package/dashboard/dist/assets/index-CCOSf1PY.js.map +0 -1
  258. package/dashboard/dist/assets/topics-p8anbgi0.js.map +0 -1
  259. package/dashboard/dist/assets/vendor-icons-CBOM6Es0.js.map +0 -1
@@ -0,0 +1,193 @@
1
+ # Control Plane API
2
+
3
+ Admin-only endpoints for application discovery, worker health, throttling, stream statistics, and stream message browsing.
4
+
5
+ All endpoints require admin or superadmin role.
6
+
7
+ ---
8
+
9
+ ## List applications
10
+
11
+ ```
12
+ GET /api/controlplane/apps
13
+ ```
14
+
15
+ List all registered HotMesh application namespaces.
16
+
17
+ **Response 200:**
18
+
19
+ ```json
20
+ { "apps": [{ "appId": "durable", "version": "1.0.0" }] }
21
+ ```
22
+
23
+ ---
24
+
25
+ ## Roll call
26
+
27
+ ```
28
+ GET /api/controlplane/rollcall?app_id=durable&delay=2000
29
+ ```
30
+
31
+ Discover all running engines and workers for an application by broadcasting a ping.
32
+
33
+ **Query parameters:**
34
+
35
+ | Parameter | Type | Required | Description |
36
+ |-----------|------|----------|-------------|
37
+ | `app_id` | `string` | No | Application namespace (default: `durable`) |
38
+ | `delay` | `number` | No | Milliseconds to wait for responses |
39
+
40
+ **Response 200:**
41
+
42
+ ```json
43
+ { "profiles": [{ "engine_id": "...", "worker_topic": "...", "throttle": 0 }] }
44
+ ```
45
+
46
+ ---
47
+
48
+ ## Throttle
49
+
50
+ ```
51
+ POST /api/controlplane/throttle
52
+ ```
53
+
54
+ Apply a throttle rate to workflow execution across the mesh.
55
+
56
+ **Request body:**
57
+
58
+ | Field | Type | Required | Description |
59
+ |-------|------|----------|-------------|
60
+ | `appId` | `string` | No | Application namespace (default: `durable`) |
61
+ | `throttle` | `number` | Yes | Delay in ms per message (`-1` = pause, `0` = resume) |
62
+ | `topic` | `string` | No | Scope throttle to a specific worker topic |
63
+ | `guid` | `string` | No | Scope throttle to a specific engine/worker GUID |
64
+
65
+ **Response 200:**
66
+
67
+ ```json
68
+ { "success": true }
69
+ ```
70
+
71
+ ---
72
+
73
+ ## Stream statistics
74
+
75
+ ```
76
+ GET /api/controlplane/streams?app_id=durable&duration=1h&stream=hmsh:durable:w:
77
+ ```
78
+
79
+ Throughput and backlog metrics for engine and worker streams.
80
+
81
+ **Query parameters:**
82
+
83
+ | Parameter | Type | Required | Description |
84
+ |-----------|------|----------|-------------|
85
+ | `app_id` | `string` | No | Application namespace (default: `durable`) |
86
+ | `duration` | `string` | No | Time window: `15m`, `30m`, `1h`, `1d`, `7d` (default: `1h`) |
87
+ | `stream` | `string` | No | Filter to a specific stream name |
88
+
89
+ **Response 200:**
90
+
91
+ ```json
92
+ {
93
+ "pending": 12,
94
+ "processed": 340,
95
+ "byStream": [
96
+ { "stream_type": "engine", "stream_name": "hmsh:durable:x:", "count": 88 },
97
+ { "stream_type": "worker", "stream_name": "hmsh:durable:w:default", "count": 16 }
98
+ ]
99
+ }
100
+ ```
101
+
102
+ ---
103
+
104
+ ## Browse stream messages
105
+
106
+ ```
107
+ GET /api/controlplane/stream-messages?namespace=durable&source=worker
108
+ &limit=25&offset=0&sort_by=created_at&order=desc
109
+ &status=pending&stream_name=hmsh:durable:w:&msg_type=WORKER
110
+ ```
111
+
112
+ Browse messages from a single stream table. Engine and worker streams are separate tables with different schemas and must never be commingled in a single query. Both `namespace` and `source` are required.
113
+
114
+ **Query parameters:**
115
+
116
+ | Parameter | Type | Required | Description |
117
+ |-----------|------|----------|-------------|
118
+ | `namespace` | `string` | **Yes** | Postgres schema / application namespace |
119
+ | `source` | `string` | **Yes** | Stream type: `engine` or `worker` |
120
+ | `limit` | `number` | No | Page size, 1–100 (default: `25`) |
121
+ | `offset` | `number` | No | Pagination offset (default: `0`) |
122
+ | `sort_by` | `string` | No | Sort column: `created_at`, `stream_name`, `priority`, `id` (default: `created_at`) |
123
+ | `order` | `string` | No | Sort direction: `asc` or `desc` (default: `desc`) |
124
+ | `status` | `string` | No | Filter: `pending`, `claimed`, `processed`, `dead_lettered` |
125
+ | `stream_name` | `string` | No | Partial match on stream name (ILIKE) |
126
+ | `msg_type` | `string` | No | Filter by message type (worker streams only) |
127
+
128
+ **Status derivation:**
129
+
130
+ Messages have no explicit status column. Status is derived from timestamps:
131
+
132
+ | Status | Condition |
133
+ |--------|-----------|
134
+ | `dead_lettered` | `dead_lettered_at IS NOT NULL` |
135
+ | `processed` | `expired_at IS NOT NULL` |
136
+ | `claimed` | `reserved_at IS NOT NULL` |
137
+ | `pending` | All timestamps NULL |
138
+
139
+ **Response 200:**
140
+
141
+ ```json
142
+ {
143
+ "messages": [
144
+ {
145
+ "id": "42",
146
+ "source": "worker",
147
+ "stream_name": "hmsh:durable:w:default",
148
+ "message": "{\"type\":\"WORKER\",\"metadata\":{...}}",
149
+ "status": "processed",
150
+ "created_at": "2026-05-23T14:30:00.000Z",
151
+ "reserved_at": "2026-05-23T14:30:01.000Z",
152
+ "reserved_by": "worker-abc",
153
+ "expired_at": "2026-05-23T14:30:02.000Z",
154
+ "dead_lettered_at": null,
155
+ "priority": 0,
156
+ "visible_at": "2026-05-23T14:30:00.000Z",
157
+ "retry_attempt": 0,
158
+ "max_retry_attempts": 3,
159
+ "workflow_name": "my-workflow",
160
+ "jid": "job-123",
161
+ "aid": "greet",
162
+ "dad": "",
163
+ "msg_type": "WORKER",
164
+ "topic": "default"
165
+ }
166
+ ],
167
+ "total": 1247
168
+ }
169
+ ```
170
+
171
+ Engine messages have `null` for worker-only fields (`workflow_name`, `jid`, `aid`, `dad`, `msg_type`, `topic`).
172
+
173
+ ---
174
+
175
+ ## Subscribe to mesh events
176
+
177
+ ```
178
+ POST /api/controlplane/subscribe
179
+ ```
180
+
181
+ Start the quorum-to-NATS bridge for an application so mesh events are forwarded to the dashboard.
182
+
183
+ **Request body:**
184
+
185
+ | Field | Type | Required | Description |
186
+ |-------|------|----------|-------------|
187
+ | `appId` | `string` | No | Application namespace (default: `durable`) |
188
+
189
+ **Response 200:**
190
+
191
+ ```json
192
+ { "subscribed": true, "appId": "durable" }
193
+ ```
@@ -26,18 +26,18 @@ Each agent includes `subscription_count` and `sub_topics[]` from a JOIN on `lt_a
26
26
  Get a single agent with stats.
27
27
 
28
28
  ```typescript
29
- const result = await lt.agents.get({ id: 'uuid' });
29
+ const result = await lt.agents.get({ id: 'health-monitor' });
30
30
  ```
31
31
 
32
32
  **Returns:** `LTApiResult<LTAgent & { stats: LTAgentStats }>`
33
33
 
34
34
  ## create
35
35
 
36
- Create an agent.
36
+ Create an agent. The `id` is the agent's human-readable name (kebab-case, URL-safe) and serves as the primary key.
37
37
 
38
38
  ```typescript
39
39
  const result = await lt.agents.create({
40
- name: 'health-monitor',
40
+ id: 'health-monitor',
41
41
  description: 'Watches for workflow failures',
42
42
  goals: 'Detect failures early',
43
43
  rules: 'Never auto-restart',
@@ -58,7 +58,7 @@ const result = await lt.agents.create({
58
58
  Partial update. Changing `status` or `behaviors` automatically restarts event subscriptions and cron schedules.
59
59
 
60
60
  ```typescript
61
- await lt.agents.update({ id: 'uuid', status: 'paused' });
61
+ await lt.agents.update({ id: 'health-monitor', status: 'paused' });
62
62
  ```
63
63
 
64
64
  **Returns:** `LTApiResult<LTAgent>`
@@ -68,7 +68,7 @@ await lt.agents.update({ id: 'uuid', status: 'paused' });
68
68
  Delete an agent. Stops subscriptions and schedules. Knowledge and workflow history preserved.
69
69
 
70
70
  ```typescript
71
- await lt.agents.delete({ id: 'uuid' });
71
+ await lt.agents.delete({ id: 'health-monitor' });
72
72
  ```
73
73
 
74
74
  **Returns:** `LTApiResult<{ deleted: true }>`
@@ -84,6 +84,42 @@ const result = await lt.controlplane.getStreamStats({ app_id: 'durable', duratio
84
84
 
85
85
  ---
86
86
 
87
+ ## listStreamMessages
88
+
89
+ Browse messages from a single stream table. Engine and worker streams are separate tables with different schemas — both `namespace` and `source` are required.
90
+
91
+ ```typescript
92
+ const result = await lt.controlplane.listStreamMessages({
93
+ namespace: 'durable',
94
+ source: 'worker',
95
+ limit: 25,
96
+ offset: 0,
97
+ sort_by: 'created_at',
98
+ order: 'desc',
99
+ status: 'pending',
100
+ });
101
+ ```
102
+
103
+ **Parameters:**
104
+
105
+ | Field | Type | Required | Description |
106
+ |-------|------|----------|-------------|
107
+ | `namespace` | `string` | **Yes** | Postgres schema / application namespace |
108
+ | `source` | `string` | **Yes** | Stream type: `engine` or `worker` |
109
+ | `limit` | `number` | No | Page size, 1–100 (default `25`) |
110
+ | `offset` | `number` | No | Pagination offset (default `0`) |
111
+ | `sort_by` | `string` | No | Sort column: `created_at`, `stream_name`, `priority`, `id` |
112
+ | `order` | `string` | No | Sort direction: `asc` or `desc` (default `desc`) |
113
+ | `status` | `string` | No | Filter: `pending`, `claimed`, `processed`, `dead_lettered` |
114
+ | `stream_name` | `string` | No | Partial match on stream name |
115
+ | `msg_type` | `string` | No | Filter by message type (worker streams only) |
116
+
117
+ **Returns:** `LTApiResult<{ messages: StreamMessage[], total: number }>`
118
+
119
+ **Auth:** Not required
120
+
121
+ ---
122
+
87
123
  ## subscribe
88
124
 
89
125
  Subscribe to mesh events for an application so they are captured and forwarded.
package/docs/dashboard.md CHANGED
@@ -226,6 +226,19 @@ This page is useful for verifying that workers started correctly after deploymen
226
226
 
227
227
  **API:** `GET /api/workers` lists active workers. `GET /api/workers/queues` lists queue statistics.
228
228
 
229
+ ### Messages
230
+
231
+ Browse individual stream messages from the Postgres engine and worker stream tables. Messages are schema-isolated by namespace and separated by source (engine or worker).
232
+
233
+ - **Namespace & Source** — required filters. Engine streams carry internal orchestration messages; worker streams carry task messages with workflow metadata (job ID, activity, message type).
234
+ - **Filters** — narrow by status (pending, claimed, processed, dead-lettered) and stream name (partial match).
235
+ - **Message detail** — click any row to open the inspector panel. Shows timestamps, retry info, worker metadata, and the full JSON payload with expandable tree view.
236
+ - **Pagination & sorting** — standard controls. Sort by created time, stream name, or priority.
237
+
238
+ Messages are read-only. Status is derived from timestamps: pending (no timestamps set), claimed (reserved), processed (expired), or dead-lettered.
239
+
240
+ **API:** `GET /api/controlplane/stream-messages?namespace=durable&source=worker` with optional `status`, `stream_name`, `sort_by`, `order`, `limit`, `offset` parameters.
241
+
229
242
  ### All Escalations
230
243
 
231
244
  The central queue for all escalation activity across every workflow.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hotmeshio/long-tail",
3
- "version": "0.3.1",
3
+ "version": "0.3.3",
4
4
  "description": "Long Tail Workflows — Durable AI workflows with human-in-the-loop escalation. Powered by PostgreSQL.",
5
5
  "main": "./build/index.js",
6
6
  "types": "./build/index.d.ts",
@@ -70,7 +70,7 @@
70
70
  "@anthropic-ai/sdk": "^0.92.0",
71
71
  "@aws-sdk/client-s3": "^3.1017.0",
72
72
  "@aws-sdk/s3-request-presigner": "^3.1045.0",
73
- "@hotmeshio/hotmesh": "^0.17.1",
73
+ "@hotmeshio/hotmesh": "^0.17.5",
74
74
  "@modelcontextprotocol/sdk": "^1.27.1",
75
75
  "@opentelemetry/exporter-trace-otlp-proto": "^0.215.0",
76
76
  "@opentelemetry/resources": "^2.5.1",
@@ -1 +0,0 @@
1
- {"version":3,"file":"AgentConfigPage-CFJNOrlg.js","sources":["../../src/pages/agents/detail/agent-form-types.ts","../../src/pages/agents/detail/IdentityStep.tsx","../../src/pages/agents/detail/MotivationStep.tsx","../../src/pages/agents/detail/KnowledgeStep.tsx","../../src/pages/agents/detail/SubscriptionsStep.tsx","../../src/pages/agents/detail/ScheduleStep.tsx","../../src/pages/agents/detail/ReviewStep.tsx","../../src/pages/agents/detail/AgentConfigPage.tsx"],"sourcesContent":["import type { Agent, AgentBehaviors } from '../../../api/agents';\nimport type { AgentSubscription } from '../../../api/agent-subscriptions';\n\nexport interface SubscriptionFormState {\n id?: string;\n topic: string;\n filter: string;\n reaction_type: 'durable' | 'pipeline' | 'mcp_query';\n workflow_type: string;\n pipeline_id: string;\n mcp_prompt: string;\n input_mapping: string;\n execute_as: string;\n enabled: boolean;\n}\n\nexport interface ScheduleFormState {\n cron: string;\n reaction_type: 'durable' | 'pipeline';\n workflow_type: string;\n pipeline_id: string;\n envelope: string; // JSON string\n execute_as: string;\n}\n\nexport interface AgentFormState {\n name: string;\n description: string;\n goals: string;\n rules: string;\n user_id: string;\n knowledge_domain: string;\n subscriptions: SubscriptionFormState[];\n schedules: ScheduleFormState[];\n}\n\nexport const EMPTY_FORM: AgentFormState = {\n name: '',\n description: '',\n goals: '',\n rules: '',\n user_id: '',\n knowledge_domain: '',\n subscriptions: [],\n schedules: [],\n};\n\nexport const STEP_LABELS = ['Identity', 'Motivation', 'Knowledge', 'Subscriptions', 'Schedule', 'Review'];\n\nexport const EMPTY_SUBSCRIPTION: SubscriptionFormState = {\n topic: '',\n filter: '',\n reaction_type: 'durable',\n workflow_type: '',\n pipeline_id: '',\n mcp_prompt: '',\n input_mapping: '{}',\n execute_as: '',\n enabled: true,\n};\n\nexport const EMPTY_SCHEDULE: ScheduleFormState = {\n cron: '0 * * * *',\n reaction_type: 'durable',\n workflow_type: '',\n pipeline_id: '',\n envelope: '{}',\n execute_as: '',\n};\n\nexport function isStepValid(step: number, form: AgentFormState): boolean {\n switch (step) {\n case 1: return form.name.trim().length > 0;\n case 2: return true;\n case 3: return true;\n case 4: {\n return form.subscriptions.every((s) => {\n if (!s.topic.trim()) return false;\n if (s.reaction_type === 'durable' && !s.workflow_type) return false;\n if (s.reaction_type === 'pipeline' && !s.pipeline_id) return false;\n if (s.reaction_type === 'mcp_query' && !s.mcp_prompt) return false;\n return true;\n });\n }\n case 5: {\n return form.schedules.every((s) => {\n if (!s.cron) return false;\n if (s.reaction_type === 'pipeline') return !!s.pipeline_id;\n return !!s.workflow_type;\n });\n }\n case 6: return true;\n default: return true;\n }\n}\n\nexport function agentToForm(\n agent: Agent,\n subscriptions: AgentSubscription[],\n): AgentFormState {\n // Parse schedules from behaviors.schedules or fall back to legacy single cron\n const schedules: ScheduleFormState[] = agent.behaviors?.schedules?.length\n ? (agent.behaviors.schedules as any[]).map((s: any) => ({\n cron: s.cron || '',\n reaction_type: s.reaction_type || 'durable',\n workflow_type: s.workflow_type || '',\n pipeline_id: s.pipeline_id || '',\n envelope: s.envelope ? JSON.stringify(s.envelope, null, 2) : '{}',\n execute_as: s.execute_as || '',\n }))\n : agent.behaviors?.cron\n ? [{ cron: agent.behaviors.cron, reaction_type: 'durable' as const, workflow_type: agent.workflow_type ?? '', pipeline_id: '', envelope: '{}', execute_as: '' }]\n : [];\n\n return {\n name: agent.name,\n description: agent.description ?? '',\n goals: agent.goals ?? '',\n rules: agent.rules ?? '',\n user_id: agent.user_id ?? '',\n knowledge_domain: agent.knowledge_domain ?? '',\n subscriptions: subscriptions.map((s) => ({\n id: s.id,\n topic: s.topic,\n filter: s.filter ? JSON.stringify(s.filter, null, 2) : '',\n reaction_type: s.reaction_type,\n workflow_type: s.workflow_type ?? '',\n pipeline_id: s.pipeline_id ?? '',\n mcp_prompt: s.mcp_prompt ?? '',\n input_mapping: JSON.stringify(s.input_mapping ?? {}, null, 2),\n execute_as: s.execute_as ?? '',\n enabled: s.enabled,\n })),\n schedules,\n };\n}\n\nexport function formToAgentPayload(form: AgentFormState): Record<string, any> {\n const behaviors: AgentBehaviors = {};\n // Store schedules array in behaviors\n if (form.schedules.length > 0) {\n (behaviors as any).schedules = form.schedules.map((s) => ({\n cron: s.cron,\n reaction_type: s.reaction_type || 'durable',\n workflow_type: s.reaction_type === 'pipeline' ? undefined : s.workflow_type,\n pipeline_id: s.reaction_type === 'pipeline' ? s.pipeline_id : undefined,\n envelope: tryParseJson(s.envelope) ?? {},\n execute_as: s.execute_as || undefined,\n }));\n // Legacy compat: also set top-level cron from first schedule\n behaviors.cron = form.schedules[0].cron;\n }\n\n return {\n name: form.name,\n description: form.description || undefined,\n goals: form.goals || undefined,\n rules: form.rules || undefined,\n user_id: form.user_id || undefined,\n knowledge_domain: form.knowledge_domain || undefined,\n behaviors,\n workflow_type: form.schedules[0]?.workflow_type || undefined,\n pipeline_id: undefined,\n };\n}\n\nexport function formToSubscriptionPayloads(form: AgentFormState): Array<{\n id?: string;\n topic: string;\n filter?: Record<string, any>;\n reaction_type: string;\n workflow_type?: string;\n pipeline_id?: string;\n mcp_prompt?: string;\n input_mapping: Record<string, any>;\n execute_as?: string;\n enabled: boolean;\n}> {\n return form.subscriptions.map((s) => ({\n id: s.id,\n topic: s.topic,\n filter: s.filter ? tryParseJson(s.filter) : undefined,\n reaction_type: s.reaction_type,\n workflow_type: s.workflow_type || undefined,\n pipeline_id: s.pipeline_id || undefined,\n mcp_prompt: s.mcp_prompt || undefined,\n input_mapping: tryParseJson(s.input_mapping) ?? {},\n execute_as: s.execute_as || undefined,\n enabled: s.enabled,\n }));\n}\n\nfunction tryParseJson(s: string): Record<string, any> | undefined {\n if (!s.trim()) return undefined;\n try { return JSON.parse(s); } catch { return undefined; }\n}\n\nexport const sectionCls = 'section-header mt-[3em] first:mt-0';\nexport const labelCls = 'label';\nexport const hintCls = 'hint';\nexport const inputCls = 'input';\nexport const jsonCls = 'input-json w-full';\n","import { BookOpen } from 'lucide-react';\nimport type { AgentFormState } from './agent-form-types';\nimport { labelCls, hintCls, inputCls } from './agent-form-types';\n\ninterface Props {\n form: AgentFormState;\n set: (field: keyof AgentFormState, value: any) => void;\n}\n\nexport function IdentityStep({ form, set }: Props) {\n return (\n <div className=\"space-y-8\">\n <div className=\"border-l-2 border-accent/30 pl-3 py-1 flex items-start justify-between\">\n <p className=\"text-[12px] text-text-secondary italic leading-relaxed\">\n Give your agent a name and describe what it does. The name appears everywhere — in events, logs, and the dashboard.\n </p>\n <button onClick={() => { window.location.hash = '#docs:agents.md:identity'; }} className=\"text-text-quaternary hover:text-accent transition-colors shrink-0 ml-3\" title=\"Docs: Identity\"><BookOpen className=\"w-3 h-3\" strokeWidth={1.5} /></button>\n </div>\n\n <div>\n <label className={labelCls}>Name *</label>\n <input type=\"text\" value={form.name} onChange={(e) => set('name', e.target.value)} placeholder=\"health-monitor\" className={inputCls} />\n <p className={hintCls}>Lowercase, kebab-case. This appears everywhere.</p>\n </div>\n\n <div>\n <label className={labelCls}>Description</label>\n <input type=\"text\" value={form.description} onChange={(e) => set('description', e.target.value)} placeholder=\"Watches for workflow failures and captures diagnostics\" className={inputCls} />\n <p className={hintCls}>One sentence that explains what this agent does.</p>\n </div>\n </div>\n );\n}\n","import { BookOpen } from 'lucide-react';\nimport type { AgentFormState } from './agent-form-types';\nimport { labelCls, hintCls, inputCls } from './agent-form-types';\n\ninterface Props {\n form: AgentFormState;\n set: (field: keyof AgentFormState, value: any) => void;\n}\n\nexport function MotivationStep({ form, set }: Props) {\n return (\n <div className=\"space-y-8\">\n <div className=\"border-l-2 border-accent/30 pl-3 py-1 flex items-start justify-between\">\n <p className=\"text-[12px] text-text-secondary italic leading-relaxed\">\n Goals define what drives the agent. Rules define what constrains it. Together they give automation judgment.\n </p>\n <button onClick={() => { window.location.hash = '#docs:agents.md:motivation'; }} className=\"text-text-quaternary hover:text-accent transition-colors shrink-0 ml-3\" title=\"Docs: Motivation\"><BookOpen className=\"w-3 h-3\" strokeWidth={1.5} /></button>\n </div>\n\n <div className=\"grid grid-cols-2 gap-8\">\n <div>\n <label className={labelCls}>Goals</label>\n <textarea value={form.goals} onChange={(e) => set('goals', e.target.value)} placeholder=\"Detect failures early, capture diagnostics, alert before cascading\" rows={4} className={`${inputCls} resize-none`} />\n <p className={hintCls}>Primary motivation. What the agent is trying to achieve.</p>\n </div>\n <div>\n <label className={labelCls}>Rules</label>\n <textarea value={form.rules} onChange={(e) => set('rules', e.target.value)} placeholder=\"Never auto-restart failed workflows. Always escalate to humans.\" rows={4} className={`${inputCls} resize-none`} />\n <p className={hintCls}>Guardrails. What it must never do, even when goals suggest it should.</p>\n </div>\n </div>\n </div>\n );\n}\n","import { Brain, BookOpen } from 'lucide-react';\nimport { useListDomains } from '../../../api/knowledge';\nimport { DateValue } from '../../../components/common/display/DateValue';\nimport type { AgentFormState } from './agent-form-types';\nimport { labelCls, hintCls, inputCls } from './agent-form-types';\n\ninterface Props {\n form: AgentFormState;\n set: (field: keyof AgentFormState, value: any) => void;\n}\n\nexport function KnowledgeStep({ form, set }: Props) {\n const { data: domainData } = useListDomains();\n const domains = domainData?.domains ?? [];\n\n return (\n <div className=\"space-y-6\">\n <div className=\"border-l-2 border-accent/30 pl-3 py-1 flex items-start justify-between\">\n <p className=\"text-[12px] text-text-secondary italic leading-relaxed\">\n Assign a knowledge domain — the agent's memory. It stores context here over time, learning from every interaction.\n </p>\n <button onClick={() => { window.location.hash = '#docs:agents.md:knowledge'; }} className=\"text-text-quaternary hover:text-accent transition-colors shrink-0 ml-3\" title=\"Docs: Knowledge\"><BookOpen className=\"w-3 h-3\" strokeWidth={1.5} /></button>\n </div>\n\n <div>\n <label className={labelCls}>Knowledge Domain</label>\n <input\n type=\"text\"\n value={form.knowledge_domain}\n onChange={(e) => set('knowledge_domain', e.target.value)}\n placeholder=\"e.g., system-health, content-review, vendor-data\"\n className={inputCls}\n list=\"domain-suggestions\"\n />\n <datalist id=\"domain-suggestions\">\n {domains.map((d) => <option key={d.domain} value={d.domain} />)}\n </datalist>\n <p className={hintCls}>Choose an existing domain to share memory, or type a new name to create one.</p>\n </div>\n\n {domains.length > 0 && (\n <div>\n <label className={labelCls}>Existing Domains</label>\n <div className=\"space-y-0.5 mt-2\">\n {domains.map((d) => (\n <button\n key={d.domain}\n type=\"button\"\n onClick={() => set('knowledge_domain', d.domain)}\n className={`w-full flex items-center gap-3 px-3 py-2 rounded-md text-left transition-colors ${\n form.knowledge_domain === d.domain ? 'border-l-2 border-l-accent bg-accent/5' : 'hover:bg-surface-hover border-l-2 border-l-transparent'\n }`}\n >\n <Brain className=\"w-3.5 h-3.5 text-text-quaternary shrink-0\" strokeWidth={1.5} />\n <span className=\"text-sm text-text-primary flex-1\">{d.domain}</span>\n <span className=\"text-[10px] text-text-quaternary\">{d.count} entries</span>\n <span className=\"text-[9px] text-text-quaternary\"><DateValue date={d.latest} /></span>\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n}\n","import { useState, useRef, useEffect } from 'react';\nimport { Plus, Trash2, Radio, BookOpen } from 'lucide-react';\nimport { RunAsSelector } from '../../../components/common/form/RunAsSelector';\nimport { useWorkflowConfigs } from '../../../api/workflows';\nimport { useTopics, type TopicCatalogEntry } from '../../../api/topics';\nimport type { AgentFormState, SubscriptionFormState } from './agent-form-types';\nimport { EMPTY_SUBSCRIPTION, sectionCls, labelCls, hintCls, inputCls, jsonCls } from './agent-form-types';\n\nconst CATEGORY_COLORS: Record<string, string> = {\n task: 'bg-blue-400/15 text-blue-400',\n workflow: 'bg-accent/15 text-accent',\n escalation: 'bg-amber-400/15 text-amber-400',\n activity: 'bg-cyan-400/15 text-cyan-400',\n knowledge: 'bg-violet-400/15 text-violet-400',\n agent: 'bg-emerald-400/15 text-emerald-400',\n app: 'bg-rose-400/15 text-rose-400',\n milestone: 'bg-violet-400/15 text-violet-400',\n};\n\ninterface Props {\n form: AgentFormState;\n set: (field: keyof AgentFormState, value: any) => void;\n}\n\nexport function SubscriptionsStep({ form, set }: Props) {\n const { data: configs } = useWorkflowConfigs();\n const { data: topicsData } = useTopics({ limit: 200 });\n const catalogTopics = topicsData?.topics ?? [];\n\n const invocableWorkflows = (configs ?? []).filter((c: any) => c.invocable).map((c: any) => c.workflow_type);\n const [selected, setSelected] = useState(0);\n\n const updateSub = (index: number, field: keyof SubscriptionFormState, value: any) => {\n const next = [...form.subscriptions];\n next[index] = { ...next[index], [field]: value };\n set('subscriptions', next);\n };\n\n const addSub = () => {\n set('subscriptions', [...form.subscriptions, { ...EMPTY_SUBSCRIPTION }]);\n setSelected(form.subscriptions.length);\n };\n\n const removeSub = (index: number) => {\n set('subscriptions', form.subscriptions.filter((_, i) => i !== index));\n if (selected >= form.subscriptions.length - 1) setSelected(Math.max(0, form.subscriptions.length - 2));\n };\n\n const subs = form.subscriptions;\n const sub = subs[selected];\n const isComplete = (s: SubscriptionFormState) => !!s.topic && (s.reaction_type === 'durable' ? !!s.workflow_type : s.reaction_type === 'pipeline' ? !!s.pipeline_id : !!s.mcp_prompt);\n\n // Find the selected topic's catalog entry for schema preview\n const selectedCatalogEntry = sub ? catalogTopics.find((t) => t.topic === sub.topic) : undefined;\n\n if (subs.length === 0) {\n return (\n <div className=\"max-w-xl\">\n <div className=\"border-l-2 border-accent/30 pl-3 py-1 flex items-start justify-between mb-8\">\n <p className=\"text-[12px] text-text-secondary italic leading-relaxed\">\n Optional. When a matching event is published, the agent runs the configured workflow with the event payload.\n </p>\n <button onClick={() => { window.location.hash = '#docs:agents.md:subscriptions'; }} className=\"text-text-quaternary hover:text-accent transition-colors shrink-0 ml-3\" title=\"Docs: Subscriptions\"><BookOpen className=\"w-3 h-3\" strokeWidth={1.5} /></button>\n </div>\n <div className=\"flex flex-col items-center justify-center py-12 text-center\">\n <Radio className=\"w-8 h-8 text-text-quaternary/40 mb-3\" strokeWidth={1} />\n <p className=\"text-sm text-text-tertiary mb-2\">No event subscriptions yet</p>\n <p className=\"text-[11px] text-text-quaternary max-w-sm mb-6\">\n Each subscription listens for a topic pattern and runs a workflow when it matches.\n </p>\n <button onClick={addSub} className=\"flex items-center gap-2 text-xs text-accent hover:text-accent-hover transition-colors\">\n <Plus className=\"w-3.5 h-3.5\" /> Add first subscription\n </button>\n </div>\n </div>\n );\n }\n\n return (\n <div>\n <div className=\"border-l-2 border-accent/30 pl-3 py-1 flex items-start justify-between mb-6\">\n <p className=\"text-[12px] text-text-secondary italic leading-relaxed\">\n Optional. When a matching event is published, the agent runs the configured workflow with the event payload.\n </p>\n <button onClick={() => { window.location.hash = '#docs:agents.md:subscriptions'; }} className=\"text-text-quaternary hover:text-accent transition-colors shrink-0 ml-3\" title=\"Docs: Subscriptions\"><BookOpen className=\"w-3 h-3\" strokeWidth={1.5} /></button>\n </div>\n\n <div className=\"flex gap-8\">\n {/* Sub-index */}\n <div className=\"w-52 shrink-0 space-y-0.5\">\n {subs.map((s, i) => (\n <div key={i} className={`group/sub flex items-center rounded-md transition-colors ${\n selected === i ? 'bg-accent/10 text-accent' : 'text-text-tertiary hover:text-text-primary hover:bg-surface-hover'\n }`}>\n <button onClick={() => setSelected(i)} className=\"flex-1 text-left px-3 py-2 min-w-0\">\n <div className=\"flex items-center gap-1.5\">\n <span className={`w-1.5 h-1.5 rounded-full shrink-0 ${isComplete(s) ? 'bg-emerald-400' : 'bg-zinc-500'}`} />\n <span className=\"text-[11px] font-mono truncate\">{s.topic || 'new subscription'}</span>\n </div>\n <span className=\"text-[9px] text-text-quaternary ml-3\">→ {s.workflow_type || s.reaction_type}</span>\n </button>\n <button onClick={(e) => { e.stopPropagation(); if (confirm(`Remove subscription \"${s.topic || 'new'}\"?\\n\\nThis takes effect when you save.`)) removeSub(i); }} className=\"opacity-0 group-hover/sub:opacity-100 px-2 text-text-quaternary hover:text-red-400 transition-all\" title=\"Remove\">\n <Trash2 className=\"w-3 h-3\" />\n </button>\n </div>\n ))}\n <button onClick={addSub} className=\"w-full flex items-center gap-1.5 px-3 py-2 text-[11px] text-accent hover:text-accent-hover transition-colors\">\n <Plus className=\"w-3 h-3\" /> Add\n </button>\n </div>\n\n {/* Detail form */}\n {sub && (\n <div className=\"flex-1 min-w-0 space-y-12\">\n\n {/* When — topic combobox */}\n <div>\n <label className={sectionCls}>When this event fires</label>\n <TopicCombobox\n value={sub.topic}\n onChange={(v) => updateSub(selected, 'topic', v)}\n topics={catalogTopics}\n />\n\n {/* Schema preview when a catalog topic is selected */}\n {selectedCatalogEntry?.payload_schema && (\n <div className=\"mt-3 p-3 rounded-md bg-surface-sunken border border-surface-border\">\n <p className=\"text-[10px] text-text-quaternary mb-1 uppercase tracking-wider font-medium\">Payload Schema</p>\n <pre className=\"text-[11px] font-mono text-text-secondary whitespace-pre-wrap overflow-x-auto max-h-40\">\n {JSON.stringify(selectedCatalogEntry.payload_schema.properties ?? selectedCatalogEntry.payload_schema, null, 2)}\n </pre>\n {selectedCatalogEntry.description && (\n <p className=\"text-[10px] text-text-tertiary mt-2 italic\">{selectedCatalogEntry.description}</p>\n )}\n </div>\n )}\n </div>\n\n {/* Run this workflow + As identity + But only if — 3 col */}\n <div className=\"grid grid-cols-3 gap-6\">\n <div className=\"space-y-4\">\n <label className={sectionCls}>Run this workflow</label>\n <div className=\"flex gap-3\">\n {(['durable', 'pipeline', 'mcp_query'] as const).map((rt) => (\n <label key={rt} className=\"flex items-center gap-1 text-[11px] text-text-secondary cursor-pointer\">\n <input type=\"radio\" name=\"reaction\" checked={sub.reaction_type === rt} onChange={() => updateSub(selected, 'reaction_type', rt)} className=\"accent-accent w-3 h-3\" />\n {rt === 'durable' ? 'Workflow' : rt === 'pipeline' ? 'Pipeline' : 'MCP Query'}\n </label>\n ))}\n </div>\n {sub.reaction_type === 'durable' && (\n <div>\n <label className={labelCls}>Workflow *</label>\n <select value={sub.workflow_type} onChange={(e) => updateSub(selected, 'workflow_type', e.target.value)} className={inputCls}>\n <option value=\"\">Select...</option>\n {invocableWorkflows.map((wt: string) => <option key={wt} value={wt}>{wt}</option>)}\n </select>\n </div>\n )}\n {sub.reaction_type === 'pipeline' && (\n <div>\n <label className={labelCls}>Pipeline ID *</label>\n <input type=\"text\" value={sub.pipeline_id} onChange={(e) => updateSub(selected, 'pipeline_id', e.target.value)} placeholder=\"UUID\" className={`${inputCls} font-mono text-xs`} />\n </div>\n )}\n {sub.reaction_type === 'mcp_query' && (\n <div>\n <label className={labelCls}>Prompt *</label>\n <textarea value={sub.mcp_prompt} onChange={(e) => updateSub(selected, 'mcp_prompt', e.target.value)} placeholder=\"Analyze the error...\" rows={2} className={`${inputCls} resize-none`} />\n </div>\n )}\n </div>\n <div>\n <label className={sectionCls}>As identity</label>\n <RunAsSelector selected={sub.execute_as} onChange={(v) => updateSub(selected, 'execute_as', v)} />\n <p className={hintCls}>Identity used when invoking the workflow.</p>\n </div>\n <div>\n <label className={sectionCls}>But only if</label>\n <input type=\"text\" value={sub.filter} onChange={(e) => updateSub(selected, 'filter', e.target.value)} placeholder=\"No filter (all matching events)\" className={`${inputCls} font-mono text-xs`} />\n <p className={hintCls}>JSON filter against event.data, e.g. {`{\"status\": 422}`}</p>\n </div>\n </div>\n\n {/* Input Mapping full width */}\n <div>\n <label className={sectionCls}>With this data</label>\n <textarea value={sub.input_mapping} onChange={(e) => updateSub(selected, 'input_mapping', e.target.value)} rows={10} className={jsonCls} placeholder={'{\\n \"data\": {\\n \"orderId\": \"{event.data.orderId}\",\\n \"error\": \"{event.data.error}\"\\n }\\n}'} />\n <p className={hintCls}>Maps event fields to workflow input. {'{event.data.fieldName}'} resolves at runtime.</p>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n\n// ── Topic Combobox ──────────────────────────────────────────────────────────\n\nfunction TopicCombobox({ value, onChange, topics }: {\n value: string;\n onChange: (v: string) => void;\n topics: TopicCatalogEntry[];\n}) {\n const [open, setOpen] = useState(false);\n const [filter, setFilter] = useState('');\n const inputRef = useRef<HTMLInputElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Close on outside click\n useEffect(() => {\n function handleClick(e: MouseEvent) {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setOpen(false);\n }\n }\n if (open) document.addEventListener('mousedown', handleClick);\n return () => document.removeEventListener('mousedown', handleClick);\n }, [open]);\n\n const filterText = open ? filter : value;\n const filtered = topics.filter((t) =>\n t.topic.toLowerCase().includes((open ? filter : '').toLowerCase()) ||\n (t.description ?? '').toLowerCase().includes((open ? filter : '').toLowerCase()),\n );\n\n return (\n <div ref={containerRef} className=\"relative\">\n <input\n ref={inputRef}\n type=\"text\"\n value={filterText}\n onFocus={() => { setOpen(true); setFilter(value); }}\n onChange={(e) => {\n const v = e.target.value;\n setFilter(v);\n onChange(v);\n if (!open) setOpen(true);\n }}\n placeholder=\"workflow.failed or app.>\"\n className={`${inputCls} font-mono`}\n />\n\n {open && filtered.length > 0 && (\n <div className=\"absolute z-50 left-0 right-0 mt-1 max-h-64 overflow-y-auto rounded-md border border-surface-border bg-surface shadow-lg\">\n {filtered.map((t) => {\n const catCls = CATEGORY_COLORS[t.category] ?? 'bg-zinc-400/15 text-zinc-400';\n return (\n <button\n key={t.topic}\n type=\"button\"\n onClick={() => {\n onChange(t.topic);\n setFilter(t.topic);\n setOpen(false);\n }}\n className={`w-full text-left px-3 py-2 hover:bg-surface-hover transition-colors flex items-center gap-3 ${\n value === t.topic ? 'bg-accent/5' : ''\n }`}\n >\n <span className=\"text-[11px] font-mono text-text-primary shrink-0\">{t.topic}</span>\n <span className={`inline-flex items-center px-1.5 py-0.5 rounded text-[9px] font-medium shrink-0 ${catCls}`}>{t.category}</span>\n {t.description && (\n <span className=\"text-[10px] text-text-quaternary truncate\">{t.description}</span>\n )}\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n","import { useState } from 'react';\nimport { Plus, Trash2, Clock, BookOpen } from 'lucide-react';\nimport { RunAsSelector } from '../../../components/common/form/RunAsSelector';\nimport { useWorkflowConfigs } from '../../../api/workflows';\nimport { useYamlWorkflows } from '../../../api/yaml-workflows';\nimport type { AgentFormState, ScheduleFormState } from './agent-form-types';\nimport { EMPTY_SCHEDULE, sectionCls, labelCls, hintCls, inputCls, jsonCls } from './agent-form-types';\n\nconst CRON_PRESETS = [\n '*/5 * * * *',\n '*/15 * * * *',\n '0 * * * *',\n '0 */4 * * *',\n '0 7 * * *',\n '0 9 * * 1-5',\n];\n\nfunction describeCron(expr: string): string {\n const m: Record<string, string> = {\n '* * * * *': 'Every minute',\n '*/5 * * * *': 'Every 5 min',\n '*/15 * * * *': 'Every 15 min',\n '0 * * * *': 'Hourly',\n '0 */4 * * *': 'Every 4 hours',\n '0 7 * * *': 'Daily 7 AM UTC',\n '0 9 * * 1-5': 'Weekdays 9 AM UTC',\n '0 0 * * 1': 'Weekly Monday',\n };\n return m[expr] || expr;\n}\n\ninterface Props {\n form: AgentFormState;\n set: (field: keyof AgentFormState, value: any) => void;\n}\n\nexport function ScheduleStep({ form, set }: Props) {\n const { data: configs } = useWorkflowConfigs();\n const invocableWorkflows = (configs ?? []).filter((c: any) => c.invocable).map((c: any) => c.workflow_type);\n const { data: pipelineData } = useYamlWorkflows({ status: 'active' });\n const pipelines = (pipelineData?.workflows ?? []).map((w: any) => ({ id: w.id, name: w.graph_topic || w.id }));\n const [selected, setSelected] = useState(0);\n\n const updateSched = (index: number, field: keyof ScheduleFormState, value: any) => {\n const next = [...form.schedules];\n next[index] = { ...next[index], [field]: value };\n set('schedules', next);\n };\n\n const addSched = () => {\n set('schedules', [...form.schedules, { ...EMPTY_SCHEDULE }]);\n setSelected(form.schedules.length);\n };\n\n const removeSched = (index: number) => {\n set('schedules', form.schedules.filter((_: any, i: number) => i !== index));\n if (selected >= form.schedules.length - 1) setSelected(Math.max(0, form.schedules.length - 2));\n };\n\n const scheds = form.schedules;\n const sched = scheds[selected];\n\n if (scheds.length === 0) {\n return (\n <div>\n <div className=\"border-l-2 border-accent/30 pl-3 py-1 mb-8 flex items-start justify-between\">\n <p className=\"text-[12px] text-text-secondary italic leading-relaxed\">\n Optional. Each schedule runs a workflow on a cron timer.\n </p>\n <button onClick={() => { window.location.hash = '#docs:agents.md:schedule'; }} className=\"text-text-quaternary hover:text-accent transition-colors shrink-0 ml-3\" title=\"Docs: Schedule\"><BookOpen className=\"w-3 h-3\" strokeWidth={1.5} /></button>\n </div>\n <div className=\"flex flex-col items-center justify-center py-12 text-center\">\n <Clock className=\"w-8 h-8 text-text-quaternary/40 mb-3\" strokeWidth={1} />\n <p className=\"text-sm text-text-tertiary mb-2\">No schedules</p>\n <p className=\"text-[11px] text-text-quaternary max-w-sm mb-6\">\n Add a schedule to run a workflow on a recurring cron timer.\n </p>\n <button onClick={addSched} className=\"flex items-center gap-2 text-xs text-accent hover:text-accent-hover transition-colors\">\n <Plus className=\"w-3.5 h-3.5\" /> Add schedule\n </button>\n </div>\n </div>\n );\n }\n\n return (\n <div>\n <div className=\"border-l-2 border-accent/30 pl-3 py-1 mb-6 flex items-start justify-between\">\n <p className=\"text-[12px] text-text-secondary italic leading-relaxed\">\n Each schedule runs a workflow on a timer. An agent can have multiple schedules targeting different workflows.\n </p>\n <button onClick={() => { window.location.hash = '#docs:agents.md:schedule'; }} className=\"text-text-quaternary hover:text-accent transition-colors shrink-0 ml-3\" title=\"Docs: Schedule\"><BookOpen className=\"w-3 h-3\" strokeWidth={1.5} /></button>\n </div>\n\n <div className=\"flex gap-8\">\n {/* Sub-index */}\n <div className=\"w-48 shrink-0 space-y-0.5\">\n {scheds.map((s, i) => (\n <div key={i} className={`group/sched flex items-center rounded-md transition-colors ${\n selected === i ? 'bg-accent/10 text-accent' : 'text-text-tertiary hover:text-text-primary hover:bg-surface-hover'\n }`}>\n <button onClick={() => setSelected(i)} className=\"flex-1 text-left px-3 py-2 min-w-0\">\n <span className=\"text-[11px] font-mono block\">{s.cron || 'new schedule'}</span>\n <span className=\"text-[9px] text-text-quaternary\">{(s.reaction_type === 'pipeline' ? s.pipeline_id : s.workflow_type) || 'no target'} · {describeCron(s.cron)}</span>\n </button>\n <button onClick={(e) => { e.stopPropagation(); if (confirm(`Remove schedule \"${s.cron || 'new'}\"?\\n\\nThis takes effect when you save.`)) removeSched(i); }} className=\"opacity-0 group-hover/sched:opacity-100 px-2 text-text-quaternary hover:text-red-400 transition-all\" title=\"Remove\">\n <Trash2 className=\"w-3 h-3\" />\n </button>\n </div>\n ))}\n <button onClick={addSched} className=\"w-full flex items-center gap-1.5 px-3 py-2 text-[11px] text-accent hover:text-accent-hover transition-colors\">\n <Plus className=\"w-3 h-3\" /> Add\n </button>\n </div>\n\n {/* Detail form */}\n {sched && (\n <div className=\"flex-1 min-w-0 space-y-12\">\n\n {/* Every — cron + presets */}\n <div>\n <label className={sectionCls}>Run every</label>\n <input type=\"text\" value={sched.cron} onChange={(e) => updateSched(selected, 'cron', e.target.value)} placeholder=\"0 * * * *\" className={`${inputCls} font-mono`} />\n {sched.cron && <p className=\"text-[11px] text-accent/80 mt-1\">{describeCron(sched.cron)}</p>}\n <div className=\"flex gap-3 mt-2 overflow-x-auto\">\n {CRON_PRESETS.map((p) => (\n <button key={p} type=\"button\" onClick={() => updateSched(selected, 'cron', p)}\n className={`text-[10px] font-mono whitespace-nowrap transition-colors ${sched.cron === p ? 'text-accent font-medium' : 'text-accent/50 hover:text-accent'}`}\n >{describeCron(p)}</button>\n ))}\n </div>\n </div>\n\n {/* Run this workflow + As identity — 2 col */}\n <div className=\"grid grid-cols-2 gap-6\">\n <div className=\"space-y-4\">\n <label className={sectionCls}>Run this workflow</label>\n <div className=\"flex gap-3\">\n {(['durable', 'pipeline'] as const).map((rt) => (\n <label key={rt} className=\"flex items-center gap-1 text-[11px] text-text-secondary cursor-pointer\">\n <input type=\"radio\" name={`sched-reaction-${selected}`} checked={sched.reaction_type === rt} onChange={() => updateSched(selected, 'reaction_type', rt)} className=\"accent-accent w-3 h-3\" />\n {rt === 'durable' ? 'Workflow' : 'Pipeline'}\n </label>\n ))}\n </div>\n {sched.reaction_type === 'pipeline' ? (\n <div>\n <label className={labelCls}>Pipeline *</label>\n <select value={sched.pipeline_id} onChange={(e) => updateSched(selected, 'pipeline_id', e.target.value)} className={inputCls}>\n <option value=\"\">Select...</option>\n {pipelines.map((p: { id: string; name: string }) => <option key={p.id} value={p.id}>{p.name}</option>)}\n </select>\n <p className={hintCls}>YAML pipeline invoked on each cron tick.</p>\n </div>\n ) : (\n <div>\n <label className={labelCls}>Workflow *</label>\n <select value={sched.workflow_type} onChange={(e) => updateSched(selected, 'workflow_type', e.target.value)} className={inputCls}>\n <option value=\"\">Select...</option>\n {invocableWorkflows.map((wt: string) => <option key={wt} value={wt}>{wt}</option>)}\n </select>\n <p className={hintCls}>Invoked on each cron tick.</p>\n </div>\n )}\n </div>\n <div>\n <label className={sectionCls}>As identity</label>\n <RunAsSelector selected={sched.execute_as} onChange={(v) => updateSched(selected, 'execute_as', v)} />\n <p className={hintCls}>Identity used when invoking.</p>\n </div>\n </div>\n\n {/* Envelope */}\n <div>\n <label className={sectionCls}>With this data</label>\n <textarea value={sched.envelope} onChange={(e) => updateSched(selected, 'envelope', e.target.value)} rows={10} className={jsonCls} placeholder={'{\\n \"data\": { \"source\": \"cron\" }\\n}'} />\n <p className={hintCls}>Static payload passed to the workflow on each invocation.</p>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { Bot, Compass, Brain, Radio, Clock } from 'lucide-react';\nimport { EventTopicPill } from '../../../components/common/display/EventTopicPill';\nimport { CronLabel } from '../../../components/common/display/CronLabel';\nimport { WorkflowPill } from '../../../components/common/display/WorkflowPill';\nimport type { AgentFormState } from './agent-form-types';\n\ninterface Props {\n form: AgentFormState;\n}\n\nfunction Section({ icon: Icon, color, title, children }: { icon: React.ElementType; color: string; title: string; children: React.ReactNode }) {\n return (\n <div className=\"mb-10\">\n <div className=\"flex items-center gap-2 mb-2 pb-1.5 border-b border-surface-border/40\">\n <Icon className={`w-3.5 h-3.5 ${color}`} strokeWidth={1.5} />\n <h3 className=\"text-xs font-semibold uppercase tracking-widest text-accent/80\">{title}</h3>\n </div>\n <div className=\"pl-5.5\">{children}</div>\n </div>\n );\n}\n\nfunction Field({ label, children }: { label: string; children: React.ReactNode }) {\n return (\n <div className=\"flex gap-3 py-0.5\">\n <span className=\"text-[10px] text-text-quaternary w-20 shrink-0\">{label}</span>\n <span className=\"text-xs text-text-primary\">{children}</span>\n </div>\n );\n}\n\nexport function ReviewStep({ form }: Props) {\n return (\n <div>\n <Section icon={Bot} color=\"text-accent\" title=\"Identity\">\n <Field label=\"Name\">{form.name || '—'}</Field>\n {form.description && <Field label=\"Description\">{form.description}</Field>}\n </Section>\n\n {(form.goals || form.rules) && (\n <Section icon={Compass} color=\"text-rose-400\" title=\"Motivation\">\n {form.goals && <Field label=\"Goals\">{form.goals}</Field>}\n {form.rules && <Field label=\"Rules\">{form.rules}</Field>}\n </Section>\n )}\n\n <Section icon={Brain} color=\"text-emerald-400\" title=\"Knowledge\">\n <Field label=\"Domain\">{form.knowledge_domain || 'None'}</Field>\n </Section>\n\n {/* Subscriptions + Schedule side by side */}\n <div className=\"grid grid-cols-2 gap-x-10\">\n <Section icon={Radio} color=\"text-cyan-400\" title={`Subscriptions (${form.subscriptions.length})`}>\n {form.subscriptions.length === 0 ? (\n <span className=\"text-[11px] text-text-quaternary\">None configured</span>\n ) : (\n <div className=\"divide-y divide-surface-border/30\">\n {form.subscriptions.map((sub, i) => (\n <div key={i} className=\"flex items-center py-1.5\">\n <div className=\"flex-1 min-w-0\"><EventTopicPill topic={sub.topic || 'unset'} /></div>\n <div className=\"flex items-center gap-1.5 shrink-0\"><span className=\"text-text-quaternary text-[10px]\">→</span>{sub.workflow_type ? <WorkflowPill type={sub.workflow_type} /> : <span className=\"text-[11px] text-text-quaternary\">{sub.reaction_type}</span>}</div>\n </div>\n ))}\n </div>\n )}\n </Section>\n\n <Section icon={Clock} color=\"text-amber-400\" title={`Schedules (${form.schedules.length})`}>\n {form.schedules.length === 0 ? (\n <span className=\"text-[11px] text-text-quaternary\">None configured</span>\n ) : (\n <div className=\"divide-y divide-surface-border/30\">\n {form.schedules.map((s, i) => (\n <div key={i} className=\"flex items-center py-1.5\">\n <div className=\"flex-1 min-w-0\"><CronLabel cron={s.cron} /></div>\n <div className=\"flex items-center gap-1.5 shrink-0\"><span className=\"text-text-quaternary text-[10px]\">→</span>{s.workflow_type ? <WorkflowPill type={s.workflow_type} /> : <span className=\"text-[11px] text-text-quaternary\">no workflow</span>}</div>\n </div>\n ))}\n </div>\n )}\n </Section>\n </div>\n\n <div className=\"border-l-2 border-emerald-400/30 pl-3 py-2 mt-6\">\n <p className=\"text-[11px] text-text-tertiary leading-relaxed\">\n After saving, subscriptions and schedules activate immediately. You can pause the agent anytime.\n </p>\n </div>\n </div>\n );\n}\n","import { useState, useEffect, useCallback } from 'react';\nimport { useParams, useNavigate, useSearchParams } from 'react-router-dom';\nimport {\n Bot, Brain, Radio, Clock, Check, Compass,\n} from 'lucide-react';\nimport { useAgent, useCreateAgent, useUpdateAgent } from '../../../api/agents';\nimport { useAgentSubscriptions, useCreateSubscription, useUpdateSubscription, useDeleteSubscription } from '../../../api/agent-subscriptions';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport {\n EMPTY_FORM,\n agentToForm,\n formToAgentPayload,\n formToSubscriptionPayloads,\n} from './agent-form-types';\nimport type { AgentFormState } from './agent-form-types';\nimport { IdentityStep } from './IdentityStep';\nimport { MotivationStep } from './MotivationStep';\nimport { KnowledgeStep } from './KnowledgeStep';\nimport { SubscriptionsStep } from './SubscriptionsStep';\nimport { ScheduleStep } from './ScheduleStep';\nimport { ReviewStep } from './ReviewStep';\n\nconst SECTIONS = [\n { id: 1, label: 'Identity', icon: Bot },\n { id: 2, label: 'Motivation', icon: Compass },\n { id: 3, label: 'Knowledge', icon: Brain },\n { id: 4, label: 'Subscriptions', icon: Radio },\n { id: 5, label: 'Schedules', icon: Clock },\n { id: 6, label: 'Review', icon: Check },\n];\n\nexport function AgentConfigPage() {\n const { id } = useParams<{ id: string }>();\n const isNew = !id;\n const navigate = useNavigate();\n const { data: existing, isLoading } = useAgent(isNew ? null : id!);\n const { data: subsData } = useAgentSubscriptions(isNew ? null : id!);\n\n const createAgent = useCreateAgent();\n const updateAgent = useUpdateAgent();\n const createSub = useCreateSubscription();\n const updateSub = useUpdateSubscription();\n const deleteSub = useDeleteSubscription();\n\n const [form, setForm] = useState<AgentFormState>(EMPTY_FORM);\n const [initialized, setInitialized] = useState(false);\n const [saveError, setSaveError] = useState('');\n\n const [searchParams, setSearchParams] = useSearchParams();\n const section = parseInt(searchParams.get('step') || '1', 10);\n const setSection = useCallback((s: number) => {\n setSearchParams((prev) => {\n const next = new URLSearchParams(prev);\n next.set('step', String(s));\n return next;\n }, { replace: true });\n }, [setSearchParams]);\n\n useEffect(() => {\n if (initialized) return;\n if (isNew) { setForm(EMPTY_FORM); setInitialized(true); return; }\n if (existing && subsData) {\n setForm(agentToForm(existing, subsData.subscriptions ?? []));\n setInitialized(true);\n }\n }, [existing, subsData, isNew, initialized]);\n\n const set = (field: keyof AgentFormState, value: any) =>\n setForm((f) => ({ ...f, [field]: value }));\n\n const handleSave = async () => {\n setSaveError('');\n try {\n const payload = formToAgentPayload(form);\n let agentId = id;\n\n if (isNew) {\n const created = await createAgent.mutateAsync(payload as any);\n agentId = created.id;\n } else {\n await updateAgent.mutateAsync({ id: id!, ...payload } as any);\n }\n\n const subPayloads = formToSubscriptionPayloads(form);\n const existingSubs = subsData?.subscriptions ?? [];\n const existingIds = new Set(existingSubs.map((s) => s.id));\n\n for (const sub of subPayloads) {\n if (sub.id && existingIds.has(sub.id)) {\n const { id: subId, ...rest } = sub;\n await updateSub.mutateAsync({ agentId: agentId!, subId: subId!, ...rest } as any);\n existingIds.delete(subId!);\n } else {\n const { id: _ignored, ...rest } = sub;\n await createSub.mutateAsync({ agentId: agentId!, ...rest } as any);\n }\n }\n\n for (const removedId of existingIds) {\n await deleteSub.mutateAsync({ agentId: agentId!, subId: removedId });\n }\n\n navigate(`/agents/${agentId}`);\n } catch (err: any) {\n setSaveError(err.message);\n }\n };\n\n if (!isNew && isLoading) {\n return <div className=\"animate-pulse space-y-4\"><div className=\"h-8 bg-surface-sunken rounded w-48\" /><div className=\"h-60 bg-surface-sunken rounded\" /></div>;\n }\n\n const isPending = createAgent.isPending || updateAgent.isPending;\n\n return (\n <div>\n <PageHeader\n title={isNew ? 'New Agent' : `Agent: ${existing?.name ?? ''}`}\n docsHash=\"#docs:agents.md\"\n />\n\n <div className=\"flex gap-10\">\n {/* Section nav — sticky left sidebar */}\n <nav className=\"w-44 shrink-0 sticky top-0 self-start pt-2\">\n <div className=\"space-y-0.5\">\n {SECTIONS.map((s) => {\n const Icon = s.icon;\n const active = section === s.id;\n return (\n <button\n key={s.id}\n onClick={() => setSection(s.id)}\n className={`w-full flex items-center gap-2.5 px-3 py-2 rounded-md text-left transition-colors ${\n active\n ? 'bg-accent/10 text-accent'\n : 'text-text-tertiary hover:text-text-primary hover:bg-surface-hover'\n }`}\n >\n <Icon className=\"w-3.5 h-3.5 shrink-0\" strokeWidth={1.5} />\n <span className=\"text-xs font-medium\">{s.label}</span>\n </button>\n );\n })}\n </div>\n\n {/* Save / Cancel — always visible */}\n <div className=\"mt-8 pt-4 border-t border-surface-border space-y-2\">\n <button\n onClick={handleSave}\n disabled={!form.name.trim() || isPending}\n className=\"w-full btn-primary text-xs disabled:opacity-50\"\n >\n {isPending ? 'Saving...' : isNew ? 'Create Agent' : 'Save'}\n </button>\n <button\n onClick={() => navigate(isNew ? '/agents' : `/agents/${id}`)}\n className=\"w-full btn-ghost text-xs\"\n >\n Cancel\n </button>\n </div>\n\n {saveError && <p className=\"text-xs text-status-error mt-3\">{saveError}</p>}\n </nav>\n\n {/* Section content */}\n <div className=\"flex-1 min-w-0 pt-2\">\n {section === 1 && <IdentityStep form={form} set={set} />}\n {section === 2 && <MotivationStep form={form} set={set} />}\n {section === 3 && <KnowledgeStep form={form} set={set} />}\n {section === 4 && <SubscriptionsStep form={form} set={set} />}\n {section === 5 && <ScheduleStep form={form} set={set} />}\n {section === 6 && <ReviewStep form={form} />}\n </div>\n </div>\n </div>\n );\n}\n"],"names":["EMPTY_FORM","EMPTY_SUBSCRIPTION","EMPTY_SCHEDULE","agentToForm","agent","subscriptions","schedules","_b","_a","s","_c","formToAgentPayload","form","behaviors","tryParseJson","formToSubscriptionPayloads","sectionCls","labelCls","hintCls","inputCls","jsonCls","IdentityStep","set","jsxDEV","BookOpen","e","MotivationStep","KnowledgeStep","domainData","useListDomains","domains","d","Brain","DateValue","CATEGORY_COLORS","SubscriptionsStep","configs","useWorkflowConfigs","topicsData","useTopics","catalogTopics","invocableWorkflows","c","selected","setSelected","useState","updateSub","index","field","value","next","addSub","removeSub","_","i","subs","sub","isComplete","selectedCatalogEntry","Radio","Plus","Trash2","TopicCombobox","v","rt","wt","RunAsSelector","onChange","topics","open","setOpen","filter","setFilter","inputRef","useRef","containerRef","useEffect","handleClick","filterText","filtered","t","catCls","CRON_PRESETS","describeCron","expr","ScheduleStep","pipelineData","useYamlWorkflows","pipelines","w","updateSched","addSched","removeSched","scheds","sched","Clock","p","Section","Icon","color","title","children","Field","label","ReviewStep","Bot","Compass","EventTopicPill","WorkflowPill","CronLabel","SECTIONS","Check","AgentConfigPage","id","useParams","isNew","navigate","useNavigate","existing","isLoading","useAgent","subsData","useAgentSubscriptions","createAgent","useCreateAgent","updateAgent","useUpdateAgent","createSub","useCreateSubscription","useUpdateSubscription","deleteSub","useDeleteSubscription","setForm","initialized","setInitialized","saveError","setSaveError","searchParams","setSearchParams","useSearchParams","section","setSection","useCallback","prev","f","handleSave","payload","agentId","subPayloads","existingSubs","existingIds","subId","rest","_ignored","removedId","err","isPending","PageHeader","active"],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import{j as e,u as $,N as S}from"./index-CCOSf1PY.js";import{a as f}from"./vendor-query-DLp59M9_.js";import{a as q,b as _,c as T}from"./agents-Dga6NU7U.js";import{u as B,C as j}from"./CronLabel-DRmO5rH0.js";import{i as R}from"./useEventHooks-VaJ52jMm.js";import{E as V}from"./EventTopicPill-CB_rIGlL.js";import{W as D}from"./WorkflowPill-7vt2F6wR.js";import{a as W,B as L,D as z,P as I,aA as K,m as M,aB as U,R as y,a1 as F,d as H,aC as G}from"./vendor-icons-CBOM6Es0.js";import{e as J,c as O}from"./vendor-react-Co3Y8ikm.js";function X(t){return new Date(t).toLocaleTimeString("en-US",{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"})}function c({icon:t,color:n,children:a,actions:d}){return e.jsxDEV("div",{className:"flex items-center justify-between mb-3 pb-2 border-b border-surface-border",children:[e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV(t,{className:`w-4 h-4 ${n}`,strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:26,columnNumber:9},this),e.jsxDEV("h2",{className:"text-xs font-semibold uppercase tracking-widest text-accent/80",children:a},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:27,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:25,columnNumber:7},this),d]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:24,columnNumber:5},this)}function b({text:t}){return e.jsxDEV("p",{className:"text-[11px] text-text-quaternary py-2",children:t},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:35,columnNumber:10},this)}let Y=0;function Q(t){const[n,a]=f.useState([]),[d,m]=f.useState(!1),g=f.useCallback(r=>{var p,N,i;if((p=r.type)!=null&&p.startsWith("mesh.")||t&&r.workflowName!==t)return;const u=r.activityName||((N=r.data)==null?void 0:N.domain)||((i=r.workflowId)==null?void 0:i.slice(0,16))||"";a(x=>[{id:++Y,type:r.type,timestamp:r.timestamp,label:u},...x].slice(0,10)),m(!0),setTimeout(()=>m(!1),2e3)},[t]);return $(`${S}.>`,g),{events:n,pulse:d}}function oe(){var v,A,E,P;const{id:t}=J(),n=O(),{data:a,isLoading:d}=q(t??null),{data:m}=B(t??null),g=_(),r=T(),{events:u,pulse:p}=Q((a==null?void 0:a.workflow_type)??void 0);if(R(),d)return e.jsxDEV("div",{className:"animate-pulse space-y-4",children:[e.jsxDEV("div",{className:"h-8 bg-surface-sunken rounded w-48"},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:71,columnNumber:53},this),e.jsxDEV("div",{className:"h-40 bg-surface-sunken rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:71,columnNumber:107},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:71,columnNumber:12},this);if(!a)return e.jsxDEV("div",{className:"flex flex-col items-center justify-center py-20 text-center",children:[e.jsxDEV(W,{className:"w-12 h-12 text-text-quaternary mb-4",strokeWidth:1},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:77,columnNumber:9},this),e.jsxDEV("h2",{className:"text-lg font-medium text-text-primary mb-2",children:"Agent not found"},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:78,columnNumber:9},this),e.jsxDEV("button",{onClick:()=>n("/agents"),className:"text-sm text-accent hover:text-accent-hover transition-colors",children:"Back to agents"},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:79,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:76,columnNumber:7},this);const N=a.status==="active"?"bg-emerald-400":a.status==="paused"?"bg-amber-400":a.status==="error"?"bg-red-400":"bg-zinc-500",i=(m==null?void 0:m.subscriptions)??[],x=a.status==="active"?"Active":a.status==="paused"?"Paused":a.status==="error"?"Error":"Inactive",l=(v=a.behaviors)==null?void 0:v.schedules,h=(A=a.behaviors)==null?void 0:A.cron,o=(l==null?void 0:l.length)||(h?1:0),w=()=>{const s=[`Pause "${a.name}"?`,"","This will:",i.length>0?`• Stop ${i.length} event subscription${i.length!==1?"s":""}`:null,o>0?`• Stop ${o} schedule${o!==1?"s":""}`:null,"","Knowledge and workflow history are preserved. You can reactivate anytime."].filter(Boolean).join(`
2
- `);confirm(s)&&g.mutate({id:a.id,status:"paused"})},k=()=>{const s=[`Delete "${a.name}"?`,"","This permanently removes:","• The agent configuration",i.length>0?`• ${i.length} event subscription${i.length!==1?"s":""}`:null,o>0?`• ${o} schedule${o!==1?"s":""}`:null,"","Knowledge entries and workflow history are preserved."].filter(Boolean).join(`
3
- `);confirm(s)&&r.mutate(a.id,{onSuccess:()=>n("/agents")})};return e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-start justify-between mb-3",children:[e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("h1",{className:"text-3xl font-light text-text-primary",children:["Agent: ",a.name]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:123,columnNumber:11},this),e.jsxDEV("button",{onClick:()=>{window.location.hash="#docs:agents.md"},className:"text-text-quaternary hover:text-accent transition-colors mt-1",title:"Agent docs",children:e.jsxDEV(L,{className:"w-4 h-4",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:125,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:124,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:122,columnNumber:9},this),e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV("div",{className:"flex items-center gap-1.5 mr-2",children:[e.jsxDEV("span",{className:`w-2 h-2 rounded-full ${N}`},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:130,columnNumber:13},this),e.jsxDEV("span",{className:"text-xs text-text-secondary capitalize",children:x},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:131,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:129,columnNumber:11},this),e.jsxDEV("button",{onClick:()=>n(`/agents/${a.id}/edit`),className:"flex items-center gap-1.5 px-4 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors",children:[e.jsxDEV(z,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:134,columnNumber:13},this)," Edit"]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:133,columnNumber:11},this),a.status!=="active"&&e.jsxDEV("button",{onClick:()=>g.mutate({id:a.id,status:"active"}),className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-emerald-400 hover:bg-emerald-600/10 transition-colors",children:[e.jsxDEV(I,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:138,columnNumber:15},this)," Activate"]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:137,columnNumber:13},this),a.status==="active"&&e.jsxDEV("button",{onClick:w,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.jsxDEV(K,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:143,columnNumber:15},this)," Pause"]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:142,columnNumber:13},this),e.jsxDEV("button",{onClick:k,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-red-400/60 hover:text-red-400 hover:bg-red-600/10 transition-colors",children:[e.jsxDEV(M,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:147,columnNumber:13},this)," Delete"]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:146,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:128,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:121,columnNumber:7},this),a.description&&e.jsxDEV("div",{className:"border-l-2 border-accent/30 pl-4 py-1 mb-10",children:e.jsxDEV("p",{className:"text-[13px] text-text-secondary italic leading-relaxed",children:a.description},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:155,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:154,columnNumber:9},this),(a.goals||a.rules)&&e.jsxDEV("div",{className:"mb-10",children:[e.jsxDEV(c,{icon:U,color:"text-rose-400",children:"Motivation"},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:162,columnNumber:11},this),e.jsxDEV("div",{className:"grid grid-cols-2 gap-x-14 bg-surface-sunken/20 rounded-lg px-5 py-4",children:[a.goals&&e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[9px] text-text-quaternary uppercase tracking-widest mb-1.5",children:"Goals"},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:166,columnNumber:17},this),e.jsxDEV("p",{className:"text-[13px] text-text-primary leading-relaxed",children:a.goals},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:167,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:165,columnNumber:15},this),a.rules&&e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[9px] text-text-quaternary uppercase tracking-widest mb-1.5",children:"Rules"},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:172,columnNumber:17},this),e.jsxDEV("p",{className:"text-[13px] text-text-primary leading-relaxed",children:a.rules},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:173,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:171,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:163,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:161,columnNumber:9},this),e.jsxDEV("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-x-14 gap-y-10",children:[e.jsxDEV("div",{children:[e.jsxDEV(c,{icon:y,color:"text-cyan-400",children:["Subscriptions (",i.length,")"]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:185,columnNumber:11},this),i.length===0?e.jsxDEV(b,{text:"No event subscriptions"},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:189,columnNumber:13},this):e.jsxDEV("div",{className:"divide-y divide-surface-border/30",children:i.map(s=>e.jsxDEV("div",{className:"flex items-center py-2",children:[e.jsxDEV("div",{className:"flex-1 min-w-0",children:e.jsxDEV(V,{topic:s.topic},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:194,columnNumber:51},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:194,columnNumber:19},this),e.jsxDEV("div",{className:"flex items-center gap-1.5 shrink-0",children:[e.jsxDEV("span",{className:"text-text-quaternary text-[10px]",children:"→"},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:196,columnNumber:21},this),e.jsxDEV(D,{type:s.workflow_type||"mcp-query",variant:s.reaction_type==="pipeline"?"pipeline":"durable"},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:197,columnNumber:21},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:195,columnNumber:19},this)]},s.id,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:193,columnNumber:17},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:191,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:184,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV(c,{icon:F,color:"text-amber-400",children:["Schedules (",o,")"]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:207,columnNumber:11},this),l!=null&&l.length?e.jsxDEV("div",{className:"divide-y divide-surface-border/30",children:l.map((s,C)=>e.jsxDEV("div",{className:"flex items-center py-2",children:[e.jsxDEV("div",{className:"flex-1 min-w-0",children:e.jsxDEV(j,{cron:s.cron},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:212,columnNumber:51},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:212,columnNumber:19},this),e.jsxDEV("div",{className:"flex items-center gap-1.5 shrink-0",children:[e.jsxDEV("span",{className:"text-text-quaternary text-[10px]",children:"→"},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:213,columnNumber:71},this),e.jsxDEV(D,{type:s.workflow_type||"workflow"},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:213,columnNumber:130},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:213,columnNumber:19},this)]},C,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:211,columnNumber:17},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:209,columnNumber:13},this):h?e.jsxDEV("div",{className:"flex items-center py-1",children:[e.jsxDEV("div",{className:"flex-1 min-w-0",children:e.jsxDEV(j,{cron:h},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:219,columnNumber:47},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:219,columnNumber:15},this),a.workflow_type&&e.jsxDEV("div",{className:"flex items-center gap-1.5 shrink-0",children:[e.jsxDEV("span",{className:"text-text-quaternary text-[10px]",children:"→"},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:220,columnNumber:91},this),e.jsxDEV(D,{type:a.workflow_type},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:220,columnNumber:150},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:220,columnNumber:39},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:218,columnNumber:13},this):e.jsxDEV(b,{text:"No schedules configured"},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:223,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:206,columnNumber:9},this),e.jsxDEV("div",{className:"space-y-10",children:[e.jsxDEV("div",{children:[e.jsxDEV(c,{icon:H,color:"text-emerald-400",children:"Knowledge"},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:230,columnNumber:13},this),a.knowledge_domain?e.jsxDEV("button",{onClick:()=>n(`/knowledge?domain=${a.knowledge_domain}`),className:"group text-left flex items-center gap-3",children:[e.jsxDEV("span",{className:"text-sm font-mono text-text-primary group-hover:text-accent transition-colors",children:a.knowledge_domain},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:233,columnNumber:17},this),e.jsxDEV("span",{className:"text-[10px] text-text-quaternary",children:[((P=(E=a.stats)==null?void 0:E.knowledge_count)==null?void 0:P.toLocaleString())??0," entries"]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:234,columnNumber:17},this),e.jsxDEV(G,{className:"w-3 h-3 text-accent opacity-0 group-hover:opacity-100 transition-opacity"},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:235,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:232,columnNumber:15},this):e.jsxDEV(b,{text:"No knowledge domain"},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:238,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:229,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV(c,{icon:y,color:"text-cyan-400",actions:e.jsxDEV("div",{className:"flex items-center gap-1.5",children:[e.jsxDEV("span",{className:`w-1.5 h-1.5 rounded-full transition-colors duration-500 ${p?"bg-emerald-400":"bg-zinc-600"}`},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:246,columnNumber:19},this),e.jsxDEV("span",{className:"text-[10px] text-text-quaternary",children:"live"},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:247,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:245,columnNumber:17},this),children:"Activity"},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:243,columnNumber:13},this),u.length===0?e.jsxDEV(b,{text:"Events appear here as the agent runs"},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:254,columnNumber:15},this):e.jsxDEV("div",{className:"space-y-1.5",children:u.map(s=>e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-center justify-between mb-0.5",children:[e.jsxDEV("span",{className:"text-[11px] text-text-primary font-mono truncate flex-1",children:s.label||"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:260,columnNumber:23},this),e.jsxDEV("span",{className:"text-[10px] text-text-quaternary shrink-0 ml-2",children:X(s.timestamp)},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:261,columnNumber:23},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:259,columnNumber:21},this),e.jsxDEV(V,{topic:s.type},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:263,columnNumber:21},this)]},s.id,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:258,columnNumber:19},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:256,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:242,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:228,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:181,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/agents/AgentDetailPage.tsx",lineNumber:119,columnNumber:5},this)}export{oe as AgentDetailPage};
4
- //# sourceMappingURL=AgentDetailPage-Dbx2t-Uk.js.map