@hotmeshio/long-tail 0.8.3 → 0.8.4

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 (193) hide show
  1. package/build/api/escalations/create.js +19 -60
  2. package/build/api/escalations/resolve.js +12 -4
  3. package/build/api/escalations/single.js +8 -4
  4. package/build/api/roles.d.ts +1 -0
  5. package/build/scripts/twin-farm.d.ts +12 -13
  6. package/build/scripts/twin-farm.js +61 -75
  7. package/build/services/escalation/queries.d.ts +13 -0
  8. package/build/services/escalation/queries.js +27 -0
  9. package/build/services/orchestrator/condition.d.ts +18 -12
  10. package/build/services/orchestrator/condition.js +11 -8
  11. package/build/services/role/index.d.ts +1 -2
  12. package/build/services/role/index.js +1 -2
  13. package/build/services/role/schema-validator.d.ts +9 -0
  14. package/build/services/role/schema-validator.js +42 -0
  15. package/build/services/role/sql.d.ts +1 -1
  16. package/build/services/role/sql.js +2 -2
  17. package/build/services/role/types.d.ts +8 -6
  18. package/build/system/mcp-servers/admin/schemas.js +4 -2
  19. package/build/system/mcp-servers/human-queue-schemas.js +6 -2
  20. package/build/system/mcp-servers/human-queue.js +11 -3
  21. package/build/tsconfig.tsbuildinfo +1 -1
  22. package/build/types/config.d.ts +2 -0
  23. package/build/types/startup.d.ts +5 -1
  24. package/dashboard/dist/assets/{AdminDashboard-Dhr7sUq6.js → AdminDashboard-B-JptT54.js} +2 -2
  25. package/dashboard/dist/assets/{AdminDashboard-Dhr7sUq6.js.map → AdminDashboard-B-JptT54.js.map} +1 -1
  26. package/dashboard/dist/assets/{AgentConfigPage-CUPm8FjH.js → AgentConfigPage-B1Jc6iJk.js} +2 -2
  27. package/dashboard/dist/assets/{AgentConfigPage-CUPm8FjH.js.map → AgentConfigPage-B1Jc6iJk.js.map} +1 -1
  28. package/dashboard/dist/assets/{AgentDetailPage-C9Tmmhhc.js → AgentDetailPage-CWpclCOY.js} +2 -2
  29. package/dashboard/dist/assets/{AgentDetailPage-C9Tmmhhc.js.map → AgentDetailPage-CWpclCOY.js.map} +1 -1
  30. package/dashboard/dist/assets/{AgentsPage-Pj47ZJ2U.js → AgentsPage-DyAf5GA2.js} +2 -2
  31. package/dashboard/dist/assets/{AgentsPage-Pj47ZJ2U.js.map → AgentsPage-DyAf5GA2.js.map} +1 -1
  32. package/dashboard/dist/assets/{AvailableEscalationsPage-BxakNqha.js → AvailableEscalationsPage-DDwAgklw.js} +2 -2
  33. package/dashboard/dist/assets/{AvailableEscalationsPage-BxakNqha.js.map → AvailableEscalationsPage-DDwAgklw.js.map} +1 -1
  34. package/dashboard/dist/assets/{BotPicker-CCIo5ic0.js → BotPicker-B1RdaNuY.js} +2 -2
  35. package/dashboard/dist/assets/{BotPicker-CCIo5ic0.js.map → BotPicker-B1RdaNuY.js.map} +1 -1
  36. package/dashboard/dist/assets/{CapabilitiesPage-XFVq4iPX.js → CapabilitiesPage-CxHDnyjX.js} +2 -2
  37. package/dashboard/dist/assets/{CapabilitiesPage-XFVq4iPX.js.map → CapabilitiesPage-CxHDnyjX.js.map} +1 -1
  38. package/dashboard/dist/assets/{CollapsibleSection-CBKICsCu.js → CollapsibleSection-Ds0e8cCO.js} +2 -2
  39. package/dashboard/dist/assets/{CollapsibleSection-CBKICsCu.js.map → CollapsibleSection-Ds0e8cCO.js.map} +1 -1
  40. package/dashboard/dist/assets/{CredentialsPage-BN_d7ybc.js → CredentialsPage-D8UVO-3A.js} +2 -2
  41. package/dashboard/dist/assets/{CredentialsPage-BN_d7ybc.js.map → CredentialsPage-D8UVO-3A.js.map} +1 -1
  42. package/dashboard/dist/assets/{CronLabel-4V_EXMUg.js → CronLabel-ZesYXxCH.js} +2 -2
  43. package/dashboard/dist/assets/{CronLabel-4V_EXMUg.js.map → CronLabel-ZesYXxCH.js.map} +1 -1
  44. package/dashboard/dist/assets/{CustomDurationPicker-BdurQj-B.js → CustomDurationPicker-OKlwH5a_.js} +2 -2
  45. package/dashboard/dist/assets/{CustomDurationPicker-BdurQj-B.js.map → CustomDurationPicker-OKlwH5a_.js.map} +1 -1
  46. package/dashboard/dist/assets/{ElapsedCell-CO8XMSJX.js → ElapsedCell-CO8S6vdb.js} +2 -2
  47. package/dashboard/dist/assets/{ElapsedCell-CO8XMSJX.js.map → ElapsedCell-CO8S6vdb.js.map} +1 -1
  48. package/dashboard/dist/assets/{EscalationSchemaPage-hzFtuyha.js → EscalationSchemaPage-Br5sD8-N.js} +2 -2
  49. package/dashboard/dist/assets/{EscalationSchemaPage-hzFtuyha.js.map → EscalationSchemaPage-Br5sD8-N.js.map} +1 -1
  50. package/dashboard/dist/assets/{EscalationsOverview-qlo0mxxa.js → EscalationsOverview-DMpRvVql.js} +2 -2
  51. package/dashboard/dist/assets/{EscalationsOverview-qlo0mxxa.js.map → EscalationsOverview-DMpRvVql.js.map} +1 -1
  52. package/dashboard/dist/assets/{EventTable-D9RjAT_a.js → EventTable-BARJeiS2.js} +2 -2
  53. package/dashboard/dist/assets/{EventTable-D9RjAT_a.js.map → EventTable-BARJeiS2.js.map} +1 -1
  54. package/dashboard/dist/assets/{GraphInvokePage-CU3r2tzN.js → GraphInvokePage-CTuul-av.js} +2 -2
  55. package/dashboard/dist/assets/{GraphInvokePage-CU3r2tzN.js.map → GraphInvokePage-CTuul-av.js.map} +1 -1
  56. package/dashboard/dist/assets/{HomePage-B7pb4-Gx.js → HomePage-BKFpOaHX.js} +2 -2
  57. package/dashboard/dist/assets/{HomePage-B7pb4-Gx.js.map → HomePage-BKFpOaHX.js.map} +1 -1
  58. package/dashboard/dist/assets/{ListToolbar-C_64Y22Z.js → ListToolbar-Dz2_neVF.js} +2 -2
  59. package/dashboard/dist/assets/{ListToolbar-C_64Y22Z.js.map → ListToolbar-Dz2_neVF.js.map} +1 -1
  60. package/dashboard/dist/assets/{McpOverview-D-4eSOTc.js → McpOverview-Do-vaEqV.js} +2 -2
  61. package/dashboard/dist/assets/{McpOverview-D-4eSOTc.js.map → McpOverview-Do-vaEqV.js.map} +1 -1
  62. package/dashboard/dist/assets/{McpQueryDetailPage-BYwDb8LC.js → McpQueryDetailPage-HwDGNSbN.js} +2 -2
  63. package/dashboard/dist/assets/{McpQueryDetailPage-BYwDb8LC.js.map → McpQueryDetailPage-HwDGNSbN.js.map} +1 -1
  64. package/dashboard/dist/assets/{McpQueryPage-CIijB5t2.js → McpQueryPage-DxMUpQ7R.js} +2 -2
  65. package/dashboard/dist/assets/{McpQueryPage-CIijB5t2.js.map → McpQueryPage-DxMUpQ7R.js.map} +1 -1
  66. package/dashboard/dist/assets/{McpRunDetailPage-CQmhfgju.js → McpRunDetailPage-BzzZIXIk.js} +2 -2
  67. package/dashboard/dist/assets/{McpRunDetailPage-CQmhfgju.js.map → McpRunDetailPage-BzzZIXIk.js.map} +1 -1
  68. package/dashboard/dist/assets/{McpRunsPage-CdDyeOdi.js → McpRunsPage-D3J42d2i.js} +2 -2
  69. package/dashboard/dist/assets/{McpRunsPage-CdDyeOdi.js.map → McpRunsPage-D3J42d2i.js.map} +1 -1
  70. package/dashboard/dist/assets/{OperationsPage-Cz_0K8tj.js → OperationsPage-BaM-QDhy.js} +2 -2
  71. package/dashboard/dist/assets/{OperationsPage-Cz_0K8tj.js.map → OperationsPage-BaM-QDhy.js.map} +1 -1
  72. package/dashboard/dist/assets/{OperatorDashboard-DFORmS46.js → OperatorDashboard-BqJn8wEZ.js} +2 -2
  73. package/dashboard/dist/assets/{OperatorDashboard-DFORmS46.js.map → OperatorDashboard-BqJn8wEZ.js.map} +1 -1
  74. package/dashboard/dist/assets/{ProcessDetailPage-DwypVFE2.js → ProcessDetailPage-C8sT2xuE.js} +2 -2
  75. package/dashboard/dist/assets/{ProcessDetailPage-DwypVFE2.js.map → ProcessDetailPage-C8sT2xuE.js.map} +1 -1
  76. package/dashboard/dist/assets/{ProcessesListPage-tNLvALwT.js → ProcessesListPage-eA8buUgd.js} +2 -2
  77. package/dashboard/dist/assets/{ProcessesListPage-tNLvALwT.js.map → ProcessesListPage-eA8buUgd.js.map} +1 -1
  78. package/dashboard/dist/assets/{RoleDetailPage-BPsrUqIa.js → RoleDetailPage-aR-ror5v.js} +2 -2
  79. package/dashboard/dist/assets/{RoleDetailPage-BPsrUqIa.js.map → RoleDetailPage-aR-ror5v.js.map} +1 -1
  80. package/dashboard/dist/assets/{RolesPage-txueySPI.js → RolesPage-BQNQxsMY.js} +2 -2
  81. package/dashboard/dist/assets/{RolesPage-txueySPI.js.map → RolesPage-BQNQxsMY.js.map} +1 -1
  82. package/dashboard/dist/assets/{RunAsSelector-Bvefon9B.js → RunAsSelector-mhusrlYE.js} +2 -2
  83. package/dashboard/dist/assets/{RunAsSelector-Bvefon9B.js.map → RunAsSelector-mhusrlYE.js.map} +1 -1
  84. package/dashboard/dist/assets/{StickyPagination-CeQCzVIA.js → StickyPagination-CqT9Q1I6.js} +2 -2
  85. package/dashboard/dist/assets/{StickyPagination-CeQCzVIA.js.map → StickyPagination-CqT9Q1I6.js.map} +1 -1
  86. package/dashboard/dist/assets/{StreamMessageDetail-6wEm6o6t.js → StreamMessageDetail-jOJaoupp.js} +2 -2
  87. package/dashboard/dist/assets/{StreamMessageDetail-6wEm6o6t.js.map → StreamMessageDetail-jOJaoupp.js.map} +1 -1
  88. package/dashboard/dist/assets/{SwimlaneTimeline-C97Rldf5.js → SwimlaneTimeline-BrfmWgAj.js} +2 -2
  89. package/dashboard/dist/assets/{SwimlaneTimeline-C97Rldf5.js.map → SwimlaneTimeline-BrfmWgAj.js.map} +1 -1
  90. package/dashboard/dist/assets/{TaskDetailPage-B09mLOCE.js → TaskDetailPage-Cus_JHIC.js} +2 -2
  91. package/dashboard/dist/assets/{TaskDetailPage-B09mLOCE.js.map → TaskDetailPage-Cus_JHIC.js.map} +1 -1
  92. package/dashboard/dist/assets/{TasksListPage-CQhiSGkN.js → TasksListPage-B7GK8AoX.js} +2 -2
  93. package/dashboard/dist/assets/{TasksListPage-CQhiSGkN.js.map → TasksListPage-B7GK8AoX.js.map} +1 -1
  94. package/dashboard/dist/assets/{TimeAgo-BkyeBcMF.js → TimeAgo-C606LzT3.js} +2 -2
  95. package/dashboard/dist/assets/{TimeAgo-BkyeBcMF.js.map → TimeAgo-C606LzT3.js.map} +1 -1
  96. package/dashboard/dist/assets/{TimestampCell-DVp_UdEB.js → TimestampCell-hfh6zvH-.js} +2 -2
  97. package/dashboard/dist/assets/{TimestampCell-DVp_UdEB.js.map → TimestampCell-hfh6zvH-.js.map} +1 -1
  98. package/dashboard/dist/assets/{ToolTestPanel-CZOuRP_i.js → ToolTestPanel-CsPsyvQq.js} +2 -2
  99. package/dashboard/dist/assets/{ToolTestPanel-CZOuRP_i.js.map → ToolTestPanel-CsPsyvQq.js.map} +1 -1
  100. package/dashboard/dist/assets/{TopicDetailPage-0mvQde8R.js → TopicDetailPage-Diz6r7zr.js} +2 -2
  101. package/dashboard/dist/assets/{TopicDetailPage-0mvQde8R.js.map → TopicDetailPage-Diz6r7zr.js.map} +1 -1
  102. package/dashboard/dist/assets/{TopicsPage-DkvsHLLe.js → TopicsPage-B6fn7fFh.js} +2 -2
  103. package/dashboard/dist/assets/{TopicsPage-DkvsHLLe.js.map → TopicsPage-B6fn7fFh.js.map} +1 -1
  104. package/dashboard/dist/assets/{UserName-EaD_Tz9y.js → UserName-Cc-5QH5q.js} +2 -2
  105. package/dashboard/dist/assets/{UserName-EaD_Tz9y.js.map → UserName-Cc-5QH5q.js.map} +1 -1
  106. package/dashboard/dist/assets/{WorkflowExecutionPage-CjMSQ9Bb.js → WorkflowExecutionPage-BFq7UdhA.js} +2 -2
  107. package/dashboard/dist/assets/{WorkflowExecutionPage-CjMSQ9Bb.js.map → WorkflowExecutionPage-BFq7UdhA.js.map} +1 -1
  108. package/dashboard/dist/assets/{WorkflowsDashboard-BgUz_jO6.js → WorkflowsDashboard-CHCM6hUa.js} +2 -2
  109. package/dashboard/dist/assets/{WorkflowsDashboard-BgUz_jO6.js.map → WorkflowsDashboard-CHCM6hUa.js.map} +1 -1
  110. package/dashboard/dist/assets/{WorkflowsOverview-BzUjUfAz.js → WorkflowsOverview-WeOvl8-_.js} +2 -2
  111. package/dashboard/dist/assets/{WorkflowsOverview-BzUjUfAz.js.map → WorkflowsOverview-WeOvl8-_.js.map} +1 -1
  112. package/dashboard/dist/assets/{YamlWorkflowDetailPage-C48Ui513.js → YamlWorkflowDetailPage-6GfhVDpv.js} +2 -2
  113. package/dashboard/dist/assets/{YamlWorkflowDetailPage-C48Ui513.js.map → YamlWorkflowDetailPage-6GfhVDpv.js.map} +1 -1
  114. package/dashboard/dist/assets/{YamlWorkflowsPage-CQ-dk84N.js → YamlWorkflowsPage-DqcY3ocP.js} +2 -2
  115. package/dashboard/dist/assets/{YamlWorkflowsPage-CQ-dk84N.js.map → YamlWorkflowsPage-DqcY3ocP.js.map} +1 -1
  116. package/dashboard/dist/assets/{agents-O1GlQE9p.js → agents-DlzvjNxE.js} +2 -2
  117. package/dashboard/dist/assets/{agents-O1GlQE9p.js.map → agents-DlzvjNxE.js.map} +1 -1
  118. package/dashboard/dist/assets/{bots-DB5Z7MEk.js → bots-CWMN-KUI.js} +2 -2
  119. package/dashboard/dist/assets/{bots-DB5Z7MEk.js.map → bots-CWMN-KUI.js.map} +1 -1
  120. package/dashboard/dist/assets/{capabilities-Du9EfNdT.js → capabilities-_WSZ7cxO.js} +2 -2
  121. package/dashboard/dist/assets/{capabilities-Du9EfNdT.js.map → capabilities-_WSZ7cxO.js.map} +1 -1
  122. package/dashboard/dist/assets/{controlplane-ku4V2nVk.js → controlplane-_k9nWZy3.js} +2 -2
  123. package/dashboard/dist/assets/{controlplane-ku4V2nVk.js.map → controlplane-_k9nWZy3.js.map} +1 -1
  124. package/dashboard/dist/assets/{escalation-oVVz7Lw2.js → escalation-CK8ElYzD.js} +2 -2
  125. package/dashboard/dist/assets/{escalation-oVVz7Lw2.js.map → escalation-CK8ElYzD.js.map} +1 -1
  126. package/dashboard/dist/assets/{escalation-columns-C-xaR_Qg.js → escalation-columns-Dyrf6Tdp.js} +2 -2
  127. package/dashboard/dist/assets/{escalation-columns-C-xaR_Qg.js.map → escalation-columns-Dyrf6Tdp.js.map} +1 -1
  128. package/dashboard/dist/assets/{index-DsKK1fCc.js → index-BiApvBEz.js} +2 -2
  129. package/dashboard/dist/assets/{index-DsKK1fCc.js.map → index-BiApvBEz.js.map} +1 -1
  130. package/dashboard/dist/assets/{index-61yKjTkk.js → index-C3h0qGzG.js} +2 -2
  131. package/dashboard/dist/assets/{index-61yKjTkk.js.map → index-C3h0qGzG.js.map} +1 -1
  132. package/dashboard/dist/assets/{index-CxlsLEr1.js → index-C5Yc3TT7.js} +2 -2
  133. package/dashboard/dist/assets/{index-CxlsLEr1.js.map → index-C5Yc3TT7.js.map} +1 -1
  134. package/dashboard/dist/assets/{index-Bcgsf2yD.js → index-C7VXLKJs.js} +2 -2
  135. package/dashboard/dist/assets/{index-Bcgsf2yD.js.map → index-C7VXLKJs.js.map} +1 -1
  136. package/dashboard/dist/assets/{index-DkZnXWTA.js → index-D8GcHxNJ.js} +2 -2
  137. package/dashboard/dist/assets/{index-DkZnXWTA.js.map → index-D8GcHxNJ.js.map} +1 -1
  138. package/dashboard/dist/assets/{index-DcZDyLHC.js → index-Dc-Ye2wk.js} +2 -2
  139. package/dashboard/dist/assets/{index-DcZDyLHC.js.map → index-Dc-Ye2wk.js.map} +1 -1
  140. package/dashboard/dist/assets/{index-CyXilW90.js → index-Dd4Si1Rl.js} +2 -2
  141. package/dashboard/dist/assets/{index-CyXilW90.js.map → index-Dd4Si1Rl.js.map} +1 -1
  142. package/dashboard/dist/assets/{index-MbEPoyTe.js → index-DwWP-Z_c.js} +3 -3
  143. package/dashboard/dist/assets/{index-MbEPoyTe.js.map → index-DwWP-Z_c.js.map} +1 -1
  144. package/dashboard/dist/assets/index-Ex5tEte8.js +5 -0
  145. package/dashboard/dist/assets/index-Ex5tEte8.js.map +1 -0
  146. package/dashboard/dist/assets/index-OV1JoB_P.js +6 -0
  147. package/dashboard/dist/assets/index-OV1JoB_P.js.map +1 -0
  148. package/dashboard/dist/assets/{index-BwXtXaw8.js → index-ZBj6Xgim.js} +2 -2
  149. package/dashboard/dist/assets/{index-BwXtXaw8.js.map → index-ZBj6Xgim.js.map} +1 -1
  150. package/dashboard/dist/assets/{index-DgAmkmtv.js → index-kKufOPLo.js} +2 -2
  151. package/dashboard/dist/assets/{index-DgAmkmtv.js.map → index-kKufOPLo.js.map} +1 -1
  152. package/dashboard/dist/assets/{index-aHhMmZ0W.js → index-uUYXmvFf.js} +2 -2
  153. package/dashboard/dist/assets/{index-aHhMmZ0W.js.map → index-uUYXmvFf.js.map} +1 -1
  154. package/dashboard/dist/assets/{knowledge-CTjJVvIG.js → knowledge-fYoEF4Lx.js} +2 -2
  155. package/dashboard/dist/assets/{knowledge-CTjJVvIG.js.map → knowledge-fYoEF4Lx.js.map} +1 -1
  156. package/dashboard/dist/assets/{mcp-CsHkygRS.js → mcp-1lzlgtS8.js} +2 -2
  157. package/dashboard/dist/assets/{mcp-CsHkygRS.js.map → mcp-1lzlgtS8.js.map} +1 -1
  158. package/dashboard/dist/assets/{mcp-query-BCt4tpjO.js → mcp-query-nlrAz7m_.js} +2 -2
  159. package/dashboard/dist/assets/{mcp-query-BCt4tpjO.js.map → mcp-query-nlrAz7m_.js.map} +1 -1
  160. package/dashboard/dist/assets/{pipelines-BpGmuS5V.js → pipelines-Ihi7EKXi.js} +2 -2
  161. package/dashboard/dist/assets/{pipelines-BpGmuS5V.js.map → pipelines-Ihi7EKXi.js.map} +1 -1
  162. package/dashboard/dist/assets/{roles-lHLgLwOY.js → roles-D4Wn7kE9.js} +2 -2
  163. package/dashboard/dist/assets/{roles-lHLgLwOY.js.map → roles-D4Wn7kE9.js.map} +1 -1
  164. package/dashboard/dist/assets/{tasks-BHfimh-E.js → tasks-Crk9Y3C4.js} +2 -2
  165. package/dashboard/dist/assets/{tasks-BHfimh-E.js.map → tasks-Crk9Y3C4.js.map} +1 -1
  166. package/dashboard/dist/assets/{topics-BW2cS79q.js → topics-CtfcCyw9.js} +2 -2
  167. package/dashboard/dist/assets/{topics-BW2cS79q.js.map → topics-CtfcCyw9.js.map} +1 -1
  168. package/dashboard/dist/assets/{useEventHooks-CeOIM1Ix.js → useEventHooks-Dn_vN2xE.js} +2 -2
  169. package/dashboard/dist/assets/{useEventHooks-CeOIM1Ix.js.map → useEventHooks-Dn_vN2xE.js.map} +1 -1
  170. package/dashboard/dist/assets/{useNamespace-CEVLPGGY.js → useNamespace-Cfs3vKWk.js} +2 -2
  171. package/dashboard/dist/assets/{useNamespace-CEVLPGGY.js.map → useNamespace-Cfs3vKWk.js.map} +1 -1
  172. package/dashboard/dist/assets/{useYamlActivityEvents-DdRNcy7s.js → useYamlActivityEvents-ymobxH47.js} +2 -2
  173. package/dashboard/dist/assets/{useYamlActivityEvents-DdRNcy7s.js.map → useYamlActivityEvents-ymobxH47.js.map} +1 -1
  174. package/dashboard/dist/assets/{users-CAih5Fty.js → users-DngGIiC_.js} +2 -2
  175. package/dashboard/dist/assets/{users-CAih5Fty.js.map → users-DngGIiC_.js.map} +1 -1
  176. package/dashboard/dist/assets/{workflows-C_gCwB9q.js → workflows-DuUspMAl.js} +2 -2
  177. package/dashboard/dist/assets/{workflows-C_gCwB9q.js.map → workflows-DuUspMAl.js.map} +1 -1
  178. package/dashboard/dist/assets/{yaml-workflows-CPabf8Sf.js → yaml-workflows-DXQCiOsP.js} +2 -2
  179. package/dashboard/dist/assets/{yaml-workflows-CPabf8Sf.js.map → yaml-workflows-DXQCiOsP.js.map} +1 -1
  180. package/dashboard/dist/index.html +1 -1
  181. package/docs/api/http/escalations.md +8 -4
  182. package/docs/api/http/roles.md +1 -1
  183. package/docs/api/http/workflows.md +1 -1
  184. package/docs/api/sdk/escalations.md +3 -3
  185. package/docs/api/sdk/workflows.md +1 -1
  186. package/docs/dashboard.md +2 -2
  187. package/docs/data.md +1 -1
  188. package/docs/hitl-guide.md +2 -3
  189. package/package.json +1 -1
  190. package/dashboard/dist/assets/index-CAzFU1rn.js +0 -9
  191. package/dashboard/dist/assets/index-CAzFU1rn.js.map +0 -1
  192. package/dashboard/dist/assets/index-D0bDVU2a.js +0 -6
  193. package/dashboard/dist/assets/index-D0bDVU2a.js.map +0 -1
@@ -75,17 +75,20 @@ function toEngineConfig(escalation) {
75
75
  * });
76
76
  * ```
77
77
  *
78
- * **Pin the role schema version (optional).** Role form/metadata schemas are
79
- * versioned (lt_role_schemas). Set `schemaVersion` when this wait depends on a
80
- * specific shape e.g. a review form that gained a field the workflow expects
81
- * back. The resolver UI renders exactly that version for this escalation;
82
- * without it, the role's latest schema always applies.
78
+ * **Pin the role form version — a compile-time literal.** A role's escalation
79
+ * form is versioned (lt_role_schemas); its first form is version 1. Pass the
80
+ * version as a literal, paired with the generic `<T>` payload type, both bumped
81
+ * together when the form evolves. The literal folds into metadata for the same
82
+ * cost as an unpinned wait. Omit it and the resolve UI renders the role's latest
83
+ * form when the escalation is fetched.
83
84
  *
84
85
  * ```typescript
85
- * const decision = await conditionLT<{ approved: boolean; lotNumber: string }>(signalId, {
86
- * role: 'reviewer',
86
+ * import { INTAKE_SCHEMA_VERSION, type IntakeResolverV1 } from './forms';
87
+ *
88
+ * const decision = await conditionLT<IntakeResolverV1>(signalId, {
89
+ * role: INTAKE_ROLE,
87
90
  * description: instructions,
88
- * schemaVersion: 3, // render role schema v3 for this row
91
+ * schemaVersion: INTAKE_SCHEMA_VERSION, // the form version this code is written for
89
92
  * });
90
93
  * ```
91
94
  *
@@ -61,8 +61,7 @@ export declare function listRoleSchemaVersions(role: string): Promise<RoleSchema
61
61
  */
62
62
  export declare function getRoleSchema(role: string, version?: number): Promise<RoleSchemaVersion | null>;
63
63
  /**
64
- * Fetch form_schema for a role (used as default escalation form when workflow
65
- * config does not specify a resolver_schema).
64
+ * Fetch a role's live form_schema the escalation form the dashboard renders.
66
65
  */
67
66
  export declare function getRoleFormSchema(role: string): Promise<Record<string, any> | null>;
68
67
  /**
@@ -185,8 +185,7 @@ async function getRoleSchema(role, version) {
185
185
  return { ...rows[0], role };
186
186
  }
187
187
  /**
188
- * Fetch form_schema for a role (used as default escalation form when workflow
189
- * config does not specify a resolver_schema).
188
+ * Fetch a role's live form_schema the escalation form the dashboard renders.
190
189
  */
191
190
  async function getRoleFormSchema(role) {
192
191
  const pool = (0, db_1.getPool)();
@@ -0,0 +1,9 @@
1
+ import { type ValidateFunction } from 'ajv';
2
+ /**
3
+ * Compile (and cache) a validator for a role schema. Throws if the stored schema
4
+ * is not a valid JSON Schema — callers surface that as a 422 (the role admin's
5
+ * bug), distinct from a 400 (the submitter's payload does not match).
6
+ */
7
+ export declare function compileSchemaValidator(cacheId: string, schema: Record<string, any>): ValidateFunction;
8
+ /** Join a validator's errors into one human-readable line (instancePath + message). */
9
+ export declare function formatValidationErrors(validate: ValidateFunction): string;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.compileSchemaValidator = compileSchemaValidator;
7
+ exports.formatValidationErrors = formatValidationErrors;
8
+ const ajv_1 = __importDefault(require("ajv"));
9
+ /**
10
+ * Cached-Ajv validator for a role's `metadata_schema` — used at escalation
11
+ * CREATE to validate the caller-supplied metadata bag against the role's
12
+ * queryable-facet contract.
13
+ *
14
+ * strict: false — role schemas carry the project's house extension keywords
15
+ * (`x-lt-widget`, `x-lt-layout`, `x-lt-order`, `x-lt-span`, `x-lt-bind`). Ajv 8's
16
+ * strict mode throws at compile on any unknown keyword, which would turn a
17
+ * validated create into a 500. These are UI/mapping hints Ajv ignores.
18
+ */
19
+ const ajv = new ajv_1.default({ allErrors: true, strict: false });
20
+ // Compiled validators cached per `role@version` (or `role@version#kind`), keyed
21
+ // by the schema's serialized form so an admin's schema edit invalidates the
22
+ // stale validator on the next use. Pinned versions are immutable; the key logic
23
+ // covers both live and pinned reads.
24
+ const validatorCache = new Map();
25
+ /**
26
+ * Compile (and cache) a validator for a role schema. Throws if the stored schema
27
+ * is not a valid JSON Schema — callers surface that as a 422 (the role admin's
28
+ * bug), distinct from a 400 (the submitter's payload does not match).
29
+ */
30
+ function compileSchemaValidator(cacheId, schema) {
31
+ const key = JSON.stringify(schema);
32
+ const cached = validatorCache.get(cacheId);
33
+ if (cached && cached.key === key)
34
+ return cached.validate;
35
+ const validate = ajv.compile(schema);
36
+ validatorCache.set(cacheId, { key, validate });
37
+ return validate;
38
+ }
39
+ /** Join a validator's errors into one human-readable line (instancePath + message). */
40
+ function formatValidationErrors(validate) {
41
+ return (validate.errors ?? []).map((e) => `${e.instancePath || '(root)'} ${e.message}`).join('; ');
42
+ }
@@ -40,7 +40,7 @@ export declare const GET_ROLE_FORM_SCHEMA = "\n SELECT form_schema FROM lt_role
40
40
  export declare const GET_ROLE_METADATA_SCHEMA = "\n SELECT metadata_schema FROM lt_roles WHERE role = $1";
41
41
  export declare const GET_ROLE_UPSTREAMS = "\n SELECT upstream_role FROM lt_role_upstreams WHERE role = $1 ORDER BY upstream_role";
42
42
  export declare const LIST_ROLE_SCHEMA_VERSIONS = "\n SELECT\n s.version,\n s.form_schema IS NOT NULL AS has_form_schema,\n s.metadata_schema IS NOT NULL AS has_metadata_schema,\n s.change_summary,\n s.created_at,\n s.version = r.current_schema_version AS is_current\n FROM lt_role_schemas s\n JOIN lt_roles r ON r.role = s.role\n WHERE s.role = $1\n ORDER BY s.version DESC";
43
- export declare const GET_ROLE_SCHEMA_VERSION = "\n SELECT s.role, s.version, s.form_schema, s.metadata_schema, s.change_summary,\n s.created_at, r.current_schema_version AS latest_version\n FROM lt_role_schemas s\n JOIN lt_roles r ON r.role = s.role\n WHERE s.role = $1 AND s.version = $2";
43
+ export declare const GET_ROLE_SCHEMA_VERSION = "\n SELECT s.role, s.version, s.form_schema, s.metadata_schema,\n s.change_summary, s.created_at, r.current_schema_version AS latest_version\n FROM lt_role_schemas s\n JOIN lt_roles r ON r.role = s.role\n WHERE s.role = $1 AND s.version = $2";
44
44
  /**
45
45
  * Latest schema resolves from the live lt_roles columns (a role that has never
46
46
  * versioned its schema still answers, with version NULL).
@@ -132,8 +132,8 @@ exports.LIST_ROLE_SCHEMA_VERSIONS = `
132
132
  WHERE s.role = $1
133
133
  ORDER BY s.version DESC`;
134
134
  exports.GET_ROLE_SCHEMA_VERSION = `
135
- SELECT s.role, s.version, s.form_schema, s.metadata_schema, s.change_summary,
136
- s.created_at, r.current_schema_version AS latest_version
135
+ SELECT s.role, s.version, s.form_schema, s.metadata_schema,
136
+ s.change_summary, s.created_at, r.current_schema_version AS latest_version
137
137
  FROM lt_role_schemas s
138
138
  JOIN lt_roles r ON r.role = s.role
139
139
  WHERE s.role = $1 AND s.version = $2`;
@@ -7,7 +7,9 @@ export interface RoleDetail {
7
7
  role: string;
8
8
  title: string | null;
9
9
  description: string | null;
10
- /** JSON Schema for the escalation resolve form. Overridden per-workflow by resolver_schema. */
10
+ /** JSON Schema for the escalation resolve FORM (the JIT UI). Versioned so the
11
+ * UI can evolve; fields may carry `x-lt-bind` to map form values to a path in
12
+ * the resolver payload the workflow consumes. */
11
13
  form_schema: Record<string, any> | null;
12
14
  /**
13
15
  * JSON Schema declaring the expected shape of lt_escalations.metadata for
@@ -38,10 +40,10 @@ export interface RoleDetail {
38
40
  */
39
41
  priority_facet: string | null;
40
42
  /**
41
- * Version of the live form_schema/metadata_schema pair. Advances whenever a
42
- * schema field changes; each version is snapshotted in lt_role_schemas so
43
- * escalations can pin the exact schema they were created against. Null until
44
- * the role first carries a schema.
43
+ * Version of the live form_schema. Advances whenever the form (or
44
+ * metadata_schema) changes; each version is snapshotted in lt_role_schemas so
45
+ * an escalation can pin the exact form it was created against. Null until the
46
+ * role first carries a schema.
45
47
  */
46
48
  current_schema_version: number | null;
47
49
  /**
@@ -55,7 +57,7 @@ export interface RoleDetail {
55
57
  chain_count: number;
56
58
  workflow_count: number;
57
59
  }
58
- /** One immutable snapshot of a role's schema pair. */
60
+ /** One immutable snapshot of a role's schema set (form + metadata). */
59
61
  export interface RoleSchemaVersion {
60
62
  role: string;
61
63
  version: number | null;
@@ -115,7 +115,9 @@ exports.upsertWorkflowConfigSchema = zod_1.z.object({
115
115
  consumes: zod_1.z.array(zod_1.z.string()).optional().default([]),
116
116
  tool_tags: zod_1.z.array(zod_1.z.string()).optional().default([]),
117
117
  envelope_schema: zod_1.z.record(zod_1.z.any()).nullable().optional().default(null),
118
- resolver_schema: zod_1.z.record(zod_1.z.any()).nullable().optional().default(null),
118
+ resolver_schema: zod_1.z.record(zod_1.z.any()).nullable().optional()
119
+ .describe('DEPRECATED: the escalation form is a versioned schema owned by the target role. Legacy fallback only.')
120
+ .default(null),
119
121
  cron_schedule: zod_1.z.string().nullable().optional().default(null),
120
122
  });
121
123
  exports.deleteWorkflowConfigSchema = zod_1.z.object({
@@ -237,7 +239,7 @@ exports.updateRoleSchema = zod_1.z.object({
237
239
  role: zod_1.z.string().describe('Role key to update'),
238
240
  title: zod_1.z.string().nullable().optional().describe('Display name shown on role cards and station views'),
239
241
  description: zod_1.z.string().nullable().optional().describe('Short description of this role\'s purpose'),
240
- form_schema: zod_1.z.record(zod_1.z.any()).nullable().optional().describe('JSON Schema for the escalation resolve form (overridden by workflow-level resolver_schema)'),
242
+ form_schema: zod_1.z.record(zod_1.z.any()).nullable().optional().describe('JSON Schema for the escalation resolve form (the JIT UI). Versioned per role; fields may carry x-lt-bind to map to the payload. Takes precedence over the deprecated workflow-level resolver_schema.'),
241
243
  metadata_schema: zod_1.z.record(zod_1.z.any()).nullable().optional().describe('JSON Schema declaring the expected shape of lt_escalations.metadata for this role. Drives creation-time validation and faceted-query key autocomplete.'),
242
244
  properties: zod_1.z.record(zod_1.z.any()).nullable().optional().describe('Free user-owned bag (icon, color, tags, etc.). No reserved keys — use the typed columns below for operational values.'),
243
245
  ops_visible: zod_1.z.boolean().optional().describe('When true, role appears as a station on the /operations view'),
@@ -21,14 +21,18 @@ exports.getAvailableWorkSchema = zod_1.z.object({
21
21
  role: zod_1.z.string().describe('Role to filter by'),
22
22
  limit: zod_1.z.number().optional().default(10).describe('Max results to return'),
23
23
  });
24
+ // The payload is stored exactly as submitted — the resolver payload IS the
25
+ // payload. Shape it to match the role form's x-lt-bind paths (see the form_schema
26
+ // check_resolution returns for a pending escalation); no server-side transform.
27
+ const RESOLVER_PAYLOAD_DESC = 'Resolution payload, stored as-is. Match the shape the workflow consumes (the form_schema\'s x-lt-bind paths).';
24
28
  exports.claimAndResolveSchema = zod_1.z.object({
25
29
  escalation_id: zod_1.z.string().describe('The escalation ID to claim and resolve'),
26
30
  resolver_id: zod_1.z.string().describe('Identifier for who/what is resolving'),
27
- payload: zod_1.z.record(zod_1.z.any()).describe('Resolution payload data'),
31
+ payload: zod_1.z.record(zod_1.z.any()).describe(RESOLVER_PAYLOAD_DESC),
28
32
  });
29
33
  exports.resolveEscalationSchema = zod_1.z.object({
30
34
  escalation_id: zod_1.z.string().describe('The escalation ID to resolve'),
31
- payload: zod_1.z.record(zod_1.z.any()).describe('Resolution payload data'),
35
+ payload: zod_1.z.record(zod_1.z.any()).describe(RESOLVER_PAYLOAD_DESC),
32
36
  });
33
37
  exports.escalateAndWaitSchema = zod_1.z.object({
34
38
  role: zod_1.z.string().describe('Target role for the escalation (e.g., "reviewer")'),
@@ -96,11 +96,14 @@ async function createHumanQueueServer(options) {
96
96
  // ── check_resolution ────────────────────────────────────────────────
97
97
  server.registerTool('check_resolution', {
98
98
  title: 'Check Escalation Resolution',
99
- description: 'Check the status of an escalation. Returns status and resolver payload if resolved.',
99
+ description: 'Check an escalation. When resolved, returns the resolver payload. When pending, returns the role\'s form_schema — the fields (and their x-lt-bind payload paths) to submit when resolving.',
100
100
  inputSchema: human_queue_schemas_1.checkResolutionSchema,
101
101
  }, async (args) => {
102
- const escalation = await escalationService.getEscalation(args.escalation_id);
103
- if (!escalation) {
102
+ // Single query: the escalation plus its role's form, resolved to the pinned
103
+ // version (or latest) — the same JOIN the HTTP GET uses, so an agent sees
104
+ // the same form the dashboard renders.
105
+ const detail = await escalationService.getEscalationWithFormSchema(args.escalation_id);
106
+ if (!detail) {
104
107
  return {
105
108
  content: [{
106
109
  type: 'text',
@@ -109,6 +112,7 @@ async function createHumanQueueServer(options) {
109
112
  isError: true,
110
113
  };
111
114
  }
115
+ const escalation = detail.escalation;
112
116
  const result = {
113
117
  escalation_id: escalation.id,
114
118
  status: escalation.status,
@@ -122,6 +126,10 @@ async function createHumanQueueServer(options) {
122
126
  }
123
127
  result.resolved_at = escalation.resolved_at;
124
128
  }
129
+ else if (escalation.status === 'pending' && detail.form_schema) {
130
+ // The shape the resolver payload should take (fields + x-lt-bind paths).
131
+ result.form_schema = detail.form_schema;
132
+ }
125
133
  return {
126
134
  content: [{ type: 'text', text: JSON.stringify(result) }],
127
135
  };
@@ -1 +1 @@
1
- {"root":["../index.ts","../vitest.config.ts","../vitest.integration.config.ts","../adapters/express.ts","../api/agent-subscriptions.ts","../api/agents.ts","../api/auth-sso.ts","../api/auth.ts","../api/bot-accounts.ts","../api/capabilities.ts","../api/controlplane.ts","../api/dba.ts","../api/diagnostics.ts","../api/exports.ts","../api/files.ts","../api/index.ts","../api/insight.ts","../api/knowledge.ts","../api/maintenance.ts","../api/namespaces.ts","../api/overview.ts","../api/pipelines.ts","../api/roles.ts","../api/settings.ts","../api/tasks.ts","../api/topics.ts","../api/users.ts","../api/workflow-sets.ts","../api/escalations/bulk.ts","../api/escalations/cancel.ts","../api/escalations/claim.ts","../api/escalations/create.ts","../api/escalations/facets.ts","../api/escalations/helpers.ts","../api/escalations/index.ts","../api/escalations/list.ts","../api/escalations/metadata.ts","../api/escalations/resolve.ts","../api/escalations/single.ts","../api/mcp/index.ts","../api/mcp/servers.ts","../api/mcp/tools.ts","../api/workflows/config.ts","../api/workflows/discovery.ts","../api/workflows/index.ts","../api/workflows/invocation.ts","../api/yaml-workflows/cron.ts","../api/yaml-workflows/crud.ts","../api/yaml-workflows/deploy.ts","../api/yaml-workflows/helpers.ts","../api/yaml-workflows/index.ts","../api/yaml-workflows/versions.ts","../bin/ltc.ts","../lib/cli/auth.ts","../lib/cli/client.ts","../lib/cli/compile.ts","../lib/cli/format.ts","../lib/cli/init.ts","../lib/cli/output.ts","../lib/cli/scanner.ts","../lib/cli/types.ts","../lib/cli/commands/escalations.ts","../lib/cli/commands/knowledge.ts","../lib/cli/commands/mcp.ts","../lib/cli/commands/pipelines.ts","../lib/cli/commands/roles.ts","../lib/cli/commands/status.ts","../lib/cli/commands/streams.ts","../lib/cli/commands/users.ts","../lib/cli/commands/workflows.ts","../lib/db/index.ts","../lib/db/migrate.ts","../lib/events/callback.ts","../lib/events/index.ts","../lib/events/matching.ts","../lib/events/memory.ts","../lib/events/nats-ws-proxy.ts","../lib/events/nats.ts","../lib/events/publish.ts","../lib/events/socketio.ts","../lib/events/system-events.ts","../lib/logger/index.ts","../lib/logger/pino.ts","../lib/storage/index.ts","../lib/storage/local.ts","../lib/storage/mime.ts","../lib/storage/s3.ts","../lib/storage/types.ts","../lib/telemetry/honeycomb.ts","../lib/telemetry/index.ts","../modules/auth.ts","../modules/config.ts","../modules/defaults.ts","../modules/features.ts","../modules/ltconfig.ts","../modules/maintenance.ts","../modules/sso.ts","../modules/utils.ts","../modules/version.ts","../routes/agents.ts","../routes/auth-sso.ts","../routes/auth.ts","../routes/bot-accounts.ts","../routes/capabilities.ts","../routes/controlplane.ts","../routes/dba.ts","../routes/delegation.ts","../routes/diagnostics.ts","../routes/docs.ts","../routes/exports.ts","../routes/file-browser.ts","../routes/files.ts","../routes/index.ts","../routes/insight.ts","../routes/knowledge.ts","../routes/maintenance.ts","../routes/mcp-endpoint.ts","../routes/mcp.ts","../routes/namespaces.ts","../routes/nats-credentials.ts","../routes/oauth.ts","../routes/overview.ts","../routes/pipelines.ts","../routes/roles.ts","../routes/settings.ts","../routes/tasks.ts","../routes/topics.ts","../routes/users.ts","../routes/workflow-sets.ts","../routes/escalations/bulk.ts","../routes/escalations/facets.ts","../routes/escalations/index.ts","../routes/escalations/list.ts","../routes/escalations/metadata.ts","../routes/escalations/resolve.ts","../routes/escalations/single.ts","../routes/workflows/config.ts","../routes/workflows/discovery.ts","../routes/workflows/index.ts","../routes/workflows/invocation.ts","../routes/yaml-workflows/cron.ts","../routes/yaml-workflows/crud.ts","../routes/yaml-workflows/deployment.ts","../routes/yaml-workflows/index.ts","../routes/yaml-workflows/versions.ts","../scripts/ortho-populate.ts","../scripts/process-helpers.ts","../scripts/process.ts","../scripts/token.ts","../scripts/twin-farm.ts","../sdk/index.ts","../services/dba.ts","../services/hotmesh-utils.ts","../services/workflow-invocation.ts","../services/agent/index.ts","../services/agent/input-mapper.ts","../services/agent/sql.ts","../services/agent/subscription-sql.ts","../services/agent/subscriptions.ts","../services/agent/trigger-registry.ts","../services/auth/bot-api-key.ts","../services/auth/delegation.ts","../services/auth/index.ts","../services/auth/service-token.ts","../services/auth/sql.ts","../services/config/cache.ts","../services/config/index.ts","../services/config/provider.ts","../services/config/read.ts","../services/config/sql.ts","../services/config/write.ts","../services/controlplane/index.ts","../services/controlplane/quorum-bridge.ts","../services/controlplane/sql.ts","../services/controlplane/stream-messages-sql.ts","../services/controlplane/types.ts","../services/cron/index.ts","../services/diagnostics/index.ts","../services/diagnostics/patterns.ts","../services/escalation/bulk.ts","../services/escalation/client.ts","../services/escalation/crud.ts","../services/escalation/facet-sql.ts","../services/escalation/facets.ts","../services/escalation/index.ts","../services/escalation/map.ts","../services/escalation/metrics-cache.ts","../services/escalation/queries.ts","../services/escalation/sql.ts","../services/escalation/types.ts","../services/escalation-strategy/default.ts","../services/escalation-strategy/index.ts","../services/escalation-strategy/mcp.ts","../services/export/client.ts","../services/export/index.ts","../services/export/post-process.ts","../services/export/types.ts","../services/iam/activity.ts","../services/iam/bots.ts","../services/iam/context.ts","../services/iam/credentials.ts","../services/iam/envelope.ts","../services/iam/ephemeral.ts","../services/iam/index.ts","../services/iam/principal.ts","../services/iam/resolve.ts","../services/iam/sql.ts","../services/insight/index.ts","../services/insight/prompts.ts","../services/interceptor/activity-interceptor.ts","../services/interceptor/completion.ts","../services/interceptor/context.ts","../services/interceptor/escalation.ts","../services/interceptor/index.ts","../services/interceptor/lifecycle.ts","../services/interceptor/state.ts","../services/interceptor/types.ts","../services/interceptor/activities/config.ts","../services/interceptor/activities/escalation.ts","../services/interceptor/activities/index.ts","../services/interceptor/activities/task.ts","../services/interceptor/activities/workflow.ts","../services/llm/detect.ts","../services/llm/index.ts","../services/llm/translate.ts","../services/llm/types.ts","../services/llm/providers/anthropic.ts","../services/llm/providers/openai.ts","../services/maintenance/index.ts","../services/mcp/adapter.ts","../services/mcp/db.ts","../services/mcp/exposure.ts","../services/mcp/external-server.ts","../services/mcp/index.ts","../services/mcp/register-tool.ts","../services/mcp/seed-service-account.ts","../services/mcp/server-lifecycle.ts","../services/mcp/server-tools.ts","../services/mcp/server.ts","../services/mcp/sql.ts","../services/mcp/types.ts","../services/mcp/workflow-compiler-server.ts","../services/mcp/workflow-server.ts","../services/mcp/client/connection-dispatch.ts","../services/mcp/client/connection-lifecycle.ts","../services/mcp/client/connection-test.ts","../services/mcp/client/connection.ts","../services/mcp/client/index.ts","../services/mcp/client/tools.ts","../services/mcp/db-server/index.ts","../services/mcp/db-server/schemas.ts","../services/mcp/db-server/tools.ts","../services/mcp/playwright-server/index.ts","../services/mcp/playwright-server/lifecycle.ts","../services/mcp/playwright-server/schemas.ts","../services/mcp/playwright-server/tools.ts","../services/namespace/index.ts","../services/namespace/sql.ts","../services/namespace/types.ts","../services/oauth/crypto.ts","../services/oauth/db.ts","../services/oauth/index.ts","../services/oauth/sql.ts","../services/oauth/state.ts","../services/oauth/providers/anthropic.ts","../services/oauth/providers/github.ts","../services/oauth/providers/google.ts","../services/oauth/providers/index.ts","../services/oauth/providers/microsoft.ts","../services/oauth/providers/mock.ts","../services/oauth/providers/registry.ts","../services/oauth/providers/types.ts","../services/orchestrator/condition.ts","../services/orchestrator/index.ts","../services/orchestrator/types.ts","../services/overview/index.ts","../services/overview/sql.ts","../services/pipelines/enrichment.ts","../services/pipelines/events.ts","../services/pipelines/execution-builder.ts","../services/pipelines/index.ts","../services/pipelines/queries.ts","../services/pipelines/sql.ts","../services/pipelines/types.ts","../services/role/index.ts","../services/role/sql.ts","../services/role/types.ts","../services/task/crud.ts","../services/task/index.ts","../services/task/process.ts","../services/task/resolve.ts","../services/task/sql.ts","../services/task/types.ts","../services/topics/index.ts","../services/topics/sql.ts","../services/topics/system-topics.ts","../services/user/auth.ts","../services/user/crud.ts","../services/user/index.ts","../services/user/rbac.ts","../services/user/roles.ts","../services/user/scope.ts","../services/user/seed-admin.ts","../services/user/sql.ts","../services/user/sso-provision.ts","../services/user/types.ts","../services/workers/registry.ts","../services/workflow-sets/db.ts","../services/workflow-sets/index.ts","../services/workflow-sets/sql.ts","../services/yaml-workflow/builder-regenerate.ts","../services/yaml-workflow/db-utils.ts","../services/yaml-workflow/db-versions.ts","../services/yaml-workflow/db.ts","../services/yaml-workflow/deployer-helpers.ts","../services/yaml-workflow/deployer.ts","../services/yaml-workflow/generator.ts","../services/yaml-workflow/index.ts","../services/yaml-workflow/input-analyzer-helpers.ts","../services/yaml-workflow/input-analyzer.ts","../services/yaml-workflow/invoke.ts","../services/yaml-workflow/pipe-validator.ts","../services/yaml-workflow/sql.ts","../services/yaml-workflow/types.ts","../services/yaml-workflow/durable-compiler/index.ts","../services/yaml-workflow/durable-compiler/parser.ts","../services/yaml-workflow/durable-compiler/prompts.ts","../services/yaml-workflow/durable-compiler/types.ts","../services/yaml-workflow/pattern-detector/array-source.ts","../services/yaml-workflow/pattern-detector/collapse.ts","../services/yaml-workflow/pattern-detector/index.ts","../services/yaml-workflow/pattern-detector/run-detection.ts","../services/yaml-workflow/pattern-detector/types.ts","../services/yaml-workflow/pipeline/analyze.ts","../services/yaml-workflow/pipeline/extract-helpers.ts","../services/yaml-workflow/pipeline/extract.ts","../services/yaml-workflow/pipeline/index.ts","../services/yaml-workflow/pipeline/prompt-templates.ts","../services/yaml-workflow/pipeline/prompts.ts","../services/yaml-workflow/pipeline/validate.ts","../services/yaml-workflow/pipeline/build/dag-assembly.ts","../services/yaml-workflow/pipeline/build/dag.ts","../services/yaml-workflow/pipeline/build/index.ts","../services/yaml-workflow/pipeline/build/iteration.ts","../services/yaml-workflow/pipeline/build/metadata.ts","../services/yaml-workflow/pipeline/build/transform.ts","../services/yaml-workflow/pipeline/build/utils.ts","../services/yaml-workflow/pipeline/build/wiring.ts","../services/yaml-workflow/pipeline/compile/index.ts","../services/yaml-workflow/pipeline/compile/llm-call.ts","../services/yaml-workflow/pipeline/compile/parse-plan.ts","../services/yaml-workflow/pipeline/compile/summarize.ts","../services/yaml-workflow/workers/callbacks.ts","../services/yaml-workflow/workers/events.ts","../services/yaml-workflow/workers/index.ts","../services/yaml-workflow/workers/register.ts","../services/yaml-workflow/workers/scope.ts","../start/adapters.ts","../start/config.ts","../start/graph-workflows.ts","../start/index.ts","../start/server.ts","../start/socket-auth.ts","../start/workers.ts","../system/index.ts","../system/activities/claude-code.ts","../system/activities/file-storage.ts","../system/activities/http.ts","../system/activities/knowledge.ts","../system/activities/oauth.ts","../system/activities/schema-exchange.ts","../system/activities/sql.ts","../system/activities/triage/cache.ts","../system/activities/triage/context.ts","../system/activities/triage/discovery.ts","../system/activities/triage/index.ts","../system/activities/triage/llm.ts","../system/activities/triage/tools.ts","../system/mcp-servers/claude-code.ts","../system/mcp-servers/docs.ts","../system/mcp-servers/events.ts","../system/mcp-servers/file-storage.ts","../system/mcp-servers/http-fetch.ts","../system/mcp-servers/human-queue-schemas.ts","../system/mcp-servers/human-queue.ts","../system/mcp-servers/knowledge.ts","../system/mcp-servers/oauth.ts","../system/mcp-servers/schema-exchange.ts","../system/mcp-servers/translation.ts","../system/mcp-servers/vision-prompts.ts","../system/mcp-servers/vision.ts","../system/mcp-servers/workflow-compiler.ts","../system/mcp-servers/workflow.ts","../system/mcp-servers/admin/agent-subscriptions.ts","../system/mcp-servers/admin/agents.ts","../system/mcp-servers/admin/bot-accounts.ts","../system/mcp-servers/admin/controlplane.ts","../system/mcp-servers/admin/diagnostics.ts","../system/mcp-servers/admin/escalations.ts","../system/mcp-servers/admin/exports.ts","../system/mcp-servers/admin/index.ts","../system/mcp-servers/admin/maintenance.ts","../system/mcp-servers/admin/mcp-servers.ts","../system/mcp-servers/admin/ortho.ts","../system/mcp-servers/admin/overview.ts","../system/mcp-servers/admin/pipelines.ts","../system/mcp-servers/admin/schemas.ts","../system/mcp-servers/admin/settings.ts","../system/mcp-servers/admin/tasks.ts","../system/mcp-servers/admin/topics.ts","../system/mcp-servers/admin/users.ts","../system/mcp-servers/admin/workflow-config.ts","../system/mcp-servers/admin/workflows.ts","../system/mcp-servers/admin/yaml-workflows.ts","../system/mcp-servers/db-query/index.ts","../system/mcp-servers/db-query/schemas.ts","../system/mcp-servers/db-query/tools.ts","../system/seed/index.ts","../system/seed/tool-manifests-admin.ts","../system/seed/tool-manifests-data.ts","../system/seed/tool-manifests-escalation.ts","../system/seed/tool-manifests-events.ts","../system/seed/tool-manifests-knowledge.ts","../system/seed/tool-manifests-workflows.ts","../system/workflows/tool-result-guard.ts","../system/workflows/capability-invoke/activities.ts","../system/workflows/capability-invoke/index.ts","../system/workflows/mcp-deterministic/activities.ts","../system/workflows/mcp-deterministic/index.ts","../system/workflows/mcp-query/index.ts","../system/workflows/mcp-query/prompts.ts","../system/workflows/mcp-query/strategy-advisors.ts","../system/workflows/mcp-query/types.ts","../system/workflows/mcp-query/activities/caches.ts","../system/workflows/mcp-query/activities/discovery.ts","../system/workflows/mcp-query/activities/index.ts","../system/workflows/mcp-query/activities/llm.ts","../system/workflows/mcp-query/activities/tool-executor.ts","../system/workflows/mcp-query/activities/tool-loader.ts","../system/workflows/mcp-query-router/activities.ts","../system/workflows/mcp-query-router/index.ts","../system/workflows/mcp-query-router/prompts.ts","../system/workflows/mcp-triage/activities-proxy.ts","../system/workflows/mcp-triage/index.ts","../system/workflows/mcp-triage/prompts.ts","../system/workflows/mcp-triage/response-builders.ts","../system/workflows/mcp-triage/response.ts","../system/workflows/mcp-triage/types.ts","../system/workflows/mcp-triage-deterministic/activities.ts","../system/workflows/mcp-triage-deterministic/index.ts","../system/workflows/mcp-triage-router/activities.ts","../system/workflows/mcp-triage-router/index.ts","../system/workflows/mcp-workflow-builder/index.ts","../system/workflows/mcp-workflow-builder/prompts.ts","../system/workflows/mcp-workflow-builder/activities/caches.ts","../system/workflows/mcp-workflow-builder/activities/index.ts","../system/workflows/mcp-workflow-builder/activities/llm.ts","../system/workflows/mcp-workflow-builder/activities/tool-loader.ts","../system/workflows/mcp-workflow-planner/index.ts","../system/workflows/mcp-workflow-planner/prompts.ts","../system/workflows/mcp-workflow-planner/activities/analyze.ts","../system/workflows/mcp-workflow-planner/activities/index.ts","../system/workflows/mcp-workflow-planner/activities/persist.ts","../system/workflows/mcp-workflow-planner/activities/plan.ts","../system/workflows/shared/discovery.ts","../system/workflows/shared/index.ts","../system/workflows/shared/llm-caller.ts","../system/workflows/shared/prompts.ts","../system/workflows/shared/strategy-advisors.ts","../system/workflows/shared/tool-executor.ts","../system/workflows/shared/tool-loader.ts","../system/workflows/shared/types.ts","../types/agent.ts","../types/auth.ts","../types/config.ts","../types/delegation.ts","../types/discovery.ts","../types/envelope.ts","../types/escalation-strategy.ts","../types/escalation.ts","../types/events.ts","../types/export.ts","../types/express.d.ts","../types/facets.ts","../types/index.ts","../types/logger.ts","../types/maintenance.ts","../types/mcp.ts","../types/oauth.ts","../types/sdk.ts","../types/startup.ts","../types/task.ts","../types/telemetry.ts","../types/tool-context.ts","../types/user.ts","../types/workflow-set.ts","../types/workflow.ts","../types/yaml-workflow.ts","../workers/index.ts"],"version":"5.9.3"}
1
+ {"root":["../index.ts","../vitest.config.ts","../vitest.integration.config.ts","../adapters/express.ts","../api/agent-subscriptions.ts","../api/agents.ts","../api/auth-sso.ts","../api/auth.ts","../api/bot-accounts.ts","../api/capabilities.ts","../api/controlplane.ts","../api/dba.ts","../api/diagnostics.ts","../api/exports.ts","../api/files.ts","../api/index.ts","../api/insight.ts","../api/knowledge.ts","../api/maintenance.ts","../api/namespaces.ts","../api/overview.ts","../api/pipelines.ts","../api/roles.ts","../api/settings.ts","../api/tasks.ts","../api/topics.ts","../api/users.ts","../api/workflow-sets.ts","../api/escalations/bulk.ts","../api/escalations/cancel.ts","../api/escalations/claim.ts","../api/escalations/create.ts","../api/escalations/facets.ts","../api/escalations/helpers.ts","../api/escalations/index.ts","../api/escalations/list.ts","../api/escalations/metadata.ts","../api/escalations/resolve.ts","../api/escalations/single.ts","../api/mcp/index.ts","../api/mcp/servers.ts","../api/mcp/tools.ts","../api/workflows/config.ts","../api/workflows/discovery.ts","../api/workflows/index.ts","../api/workflows/invocation.ts","../api/yaml-workflows/cron.ts","../api/yaml-workflows/crud.ts","../api/yaml-workflows/deploy.ts","../api/yaml-workflows/helpers.ts","../api/yaml-workflows/index.ts","../api/yaml-workflows/versions.ts","../bin/ltc.ts","../lib/cli/auth.ts","../lib/cli/client.ts","../lib/cli/compile.ts","../lib/cli/format.ts","../lib/cli/init.ts","../lib/cli/output.ts","../lib/cli/scanner.ts","../lib/cli/types.ts","../lib/cli/commands/escalations.ts","../lib/cli/commands/knowledge.ts","../lib/cli/commands/mcp.ts","../lib/cli/commands/pipelines.ts","../lib/cli/commands/roles.ts","../lib/cli/commands/status.ts","../lib/cli/commands/streams.ts","../lib/cli/commands/users.ts","../lib/cli/commands/workflows.ts","../lib/db/index.ts","../lib/db/migrate.ts","../lib/events/callback.ts","../lib/events/index.ts","../lib/events/matching.ts","../lib/events/memory.ts","../lib/events/nats-ws-proxy.ts","../lib/events/nats.ts","../lib/events/publish.ts","../lib/events/socketio.ts","../lib/events/system-events.ts","../lib/logger/index.ts","../lib/logger/pino.ts","../lib/storage/index.ts","../lib/storage/local.ts","../lib/storage/mime.ts","../lib/storage/s3.ts","../lib/storage/types.ts","../lib/telemetry/honeycomb.ts","../lib/telemetry/index.ts","../modules/auth.ts","../modules/config.ts","../modules/defaults.ts","../modules/features.ts","../modules/ltconfig.ts","../modules/maintenance.ts","../modules/sso.ts","../modules/utils.ts","../modules/version.ts","../routes/agents.ts","../routes/auth-sso.ts","../routes/auth.ts","../routes/bot-accounts.ts","../routes/capabilities.ts","../routes/controlplane.ts","../routes/dba.ts","../routes/delegation.ts","../routes/diagnostics.ts","../routes/docs.ts","../routes/exports.ts","../routes/file-browser.ts","../routes/files.ts","../routes/index.ts","../routes/insight.ts","../routes/knowledge.ts","../routes/maintenance.ts","../routes/mcp-endpoint.ts","../routes/mcp.ts","../routes/namespaces.ts","../routes/nats-credentials.ts","../routes/oauth.ts","../routes/overview.ts","../routes/pipelines.ts","../routes/roles.ts","../routes/settings.ts","../routes/tasks.ts","../routes/topics.ts","../routes/users.ts","../routes/workflow-sets.ts","../routes/escalations/bulk.ts","../routes/escalations/facets.ts","../routes/escalations/index.ts","../routes/escalations/list.ts","../routes/escalations/metadata.ts","../routes/escalations/resolve.ts","../routes/escalations/single.ts","../routes/workflows/config.ts","../routes/workflows/discovery.ts","../routes/workflows/index.ts","../routes/workflows/invocation.ts","../routes/yaml-workflows/cron.ts","../routes/yaml-workflows/crud.ts","../routes/yaml-workflows/deployment.ts","../routes/yaml-workflows/index.ts","../routes/yaml-workflows/versions.ts","../scripts/ortho-populate.ts","../scripts/process-helpers.ts","../scripts/process.ts","../scripts/token.ts","../scripts/twin-farm.ts","../sdk/index.ts","../services/dba.ts","../services/hotmesh-utils.ts","../services/workflow-invocation.ts","../services/agent/index.ts","../services/agent/input-mapper.ts","../services/agent/sql.ts","../services/agent/subscription-sql.ts","../services/agent/subscriptions.ts","../services/agent/trigger-registry.ts","../services/auth/bot-api-key.ts","../services/auth/delegation.ts","../services/auth/index.ts","../services/auth/service-token.ts","../services/auth/sql.ts","../services/config/cache.ts","../services/config/index.ts","../services/config/provider.ts","../services/config/read.ts","../services/config/sql.ts","../services/config/write.ts","../services/controlplane/index.ts","../services/controlplane/quorum-bridge.ts","../services/controlplane/sql.ts","../services/controlplane/stream-messages-sql.ts","../services/controlplane/types.ts","../services/cron/index.ts","../services/diagnostics/index.ts","../services/diagnostics/patterns.ts","../services/escalation/bulk.ts","../services/escalation/client.ts","../services/escalation/crud.ts","../services/escalation/facet-sql.ts","../services/escalation/facets.ts","../services/escalation/index.ts","../services/escalation/map.ts","../services/escalation/metrics-cache.ts","../services/escalation/queries.ts","../services/escalation/sql.ts","../services/escalation/types.ts","../services/escalation-strategy/default.ts","../services/escalation-strategy/index.ts","../services/escalation-strategy/mcp.ts","../services/export/client.ts","../services/export/index.ts","../services/export/post-process.ts","../services/export/types.ts","../services/iam/activity.ts","../services/iam/bots.ts","../services/iam/context.ts","../services/iam/credentials.ts","../services/iam/envelope.ts","../services/iam/ephemeral.ts","../services/iam/index.ts","../services/iam/principal.ts","../services/iam/resolve.ts","../services/iam/sql.ts","../services/insight/index.ts","../services/insight/prompts.ts","../services/interceptor/activity-interceptor.ts","../services/interceptor/completion.ts","../services/interceptor/context.ts","../services/interceptor/escalation.ts","../services/interceptor/index.ts","../services/interceptor/lifecycle.ts","../services/interceptor/state.ts","../services/interceptor/types.ts","../services/interceptor/activities/config.ts","../services/interceptor/activities/escalation.ts","../services/interceptor/activities/index.ts","../services/interceptor/activities/task.ts","../services/interceptor/activities/workflow.ts","../services/llm/detect.ts","../services/llm/index.ts","../services/llm/translate.ts","../services/llm/types.ts","../services/llm/providers/anthropic.ts","../services/llm/providers/openai.ts","../services/maintenance/index.ts","../services/mcp/adapter.ts","../services/mcp/db.ts","../services/mcp/exposure.ts","../services/mcp/external-server.ts","../services/mcp/index.ts","../services/mcp/register-tool.ts","../services/mcp/seed-service-account.ts","../services/mcp/server-lifecycle.ts","../services/mcp/server-tools.ts","../services/mcp/server.ts","../services/mcp/sql.ts","../services/mcp/types.ts","../services/mcp/workflow-compiler-server.ts","../services/mcp/workflow-server.ts","../services/mcp/client/connection-dispatch.ts","../services/mcp/client/connection-lifecycle.ts","../services/mcp/client/connection-test.ts","../services/mcp/client/connection.ts","../services/mcp/client/index.ts","../services/mcp/client/tools.ts","../services/mcp/db-server/index.ts","../services/mcp/db-server/schemas.ts","../services/mcp/db-server/tools.ts","../services/mcp/playwright-server/index.ts","../services/mcp/playwright-server/lifecycle.ts","../services/mcp/playwright-server/schemas.ts","../services/mcp/playwright-server/tools.ts","../services/namespace/index.ts","../services/namespace/sql.ts","../services/namespace/types.ts","../services/oauth/crypto.ts","../services/oauth/db.ts","../services/oauth/index.ts","../services/oauth/sql.ts","../services/oauth/state.ts","../services/oauth/providers/anthropic.ts","../services/oauth/providers/github.ts","../services/oauth/providers/google.ts","../services/oauth/providers/index.ts","../services/oauth/providers/microsoft.ts","../services/oauth/providers/mock.ts","../services/oauth/providers/registry.ts","../services/oauth/providers/types.ts","../services/orchestrator/condition.ts","../services/orchestrator/index.ts","../services/orchestrator/types.ts","../services/overview/index.ts","../services/overview/sql.ts","../services/pipelines/enrichment.ts","../services/pipelines/events.ts","../services/pipelines/execution-builder.ts","../services/pipelines/index.ts","../services/pipelines/queries.ts","../services/pipelines/sql.ts","../services/pipelines/types.ts","../services/role/index.ts","../services/role/schema-validator.ts","../services/role/sql.ts","../services/role/types.ts","../services/task/crud.ts","../services/task/index.ts","../services/task/process.ts","../services/task/resolve.ts","../services/task/sql.ts","../services/task/types.ts","../services/topics/index.ts","../services/topics/sql.ts","../services/topics/system-topics.ts","../services/user/auth.ts","../services/user/crud.ts","../services/user/index.ts","../services/user/rbac.ts","../services/user/roles.ts","../services/user/scope.ts","../services/user/seed-admin.ts","../services/user/sql.ts","../services/user/sso-provision.ts","../services/user/types.ts","../services/workers/registry.ts","../services/workflow-sets/db.ts","../services/workflow-sets/index.ts","../services/workflow-sets/sql.ts","../services/yaml-workflow/builder-regenerate.ts","../services/yaml-workflow/db-utils.ts","../services/yaml-workflow/db-versions.ts","../services/yaml-workflow/db.ts","../services/yaml-workflow/deployer-helpers.ts","../services/yaml-workflow/deployer.ts","../services/yaml-workflow/generator.ts","../services/yaml-workflow/index.ts","../services/yaml-workflow/input-analyzer-helpers.ts","../services/yaml-workflow/input-analyzer.ts","../services/yaml-workflow/invoke.ts","../services/yaml-workflow/pipe-validator.ts","../services/yaml-workflow/sql.ts","../services/yaml-workflow/types.ts","../services/yaml-workflow/durable-compiler/index.ts","../services/yaml-workflow/durable-compiler/parser.ts","../services/yaml-workflow/durable-compiler/prompts.ts","../services/yaml-workflow/durable-compiler/types.ts","../services/yaml-workflow/pattern-detector/array-source.ts","../services/yaml-workflow/pattern-detector/collapse.ts","../services/yaml-workflow/pattern-detector/index.ts","../services/yaml-workflow/pattern-detector/run-detection.ts","../services/yaml-workflow/pattern-detector/types.ts","../services/yaml-workflow/pipeline/analyze.ts","../services/yaml-workflow/pipeline/extract-helpers.ts","../services/yaml-workflow/pipeline/extract.ts","../services/yaml-workflow/pipeline/index.ts","../services/yaml-workflow/pipeline/prompt-templates.ts","../services/yaml-workflow/pipeline/prompts.ts","../services/yaml-workflow/pipeline/validate.ts","../services/yaml-workflow/pipeline/build/dag-assembly.ts","../services/yaml-workflow/pipeline/build/dag.ts","../services/yaml-workflow/pipeline/build/index.ts","../services/yaml-workflow/pipeline/build/iteration.ts","../services/yaml-workflow/pipeline/build/metadata.ts","../services/yaml-workflow/pipeline/build/transform.ts","../services/yaml-workflow/pipeline/build/utils.ts","../services/yaml-workflow/pipeline/build/wiring.ts","../services/yaml-workflow/pipeline/compile/index.ts","../services/yaml-workflow/pipeline/compile/llm-call.ts","../services/yaml-workflow/pipeline/compile/parse-plan.ts","../services/yaml-workflow/pipeline/compile/summarize.ts","../services/yaml-workflow/workers/callbacks.ts","../services/yaml-workflow/workers/events.ts","../services/yaml-workflow/workers/index.ts","../services/yaml-workflow/workers/register.ts","../services/yaml-workflow/workers/scope.ts","../start/adapters.ts","../start/config.ts","../start/graph-workflows.ts","../start/index.ts","../start/server.ts","../start/socket-auth.ts","../start/workers.ts","../system/index.ts","../system/activities/claude-code.ts","../system/activities/file-storage.ts","../system/activities/http.ts","../system/activities/knowledge.ts","../system/activities/oauth.ts","../system/activities/schema-exchange.ts","../system/activities/sql.ts","../system/activities/triage/cache.ts","../system/activities/triage/context.ts","../system/activities/triage/discovery.ts","../system/activities/triage/index.ts","../system/activities/triage/llm.ts","../system/activities/triage/tools.ts","../system/mcp-servers/claude-code.ts","../system/mcp-servers/docs.ts","../system/mcp-servers/events.ts","../system/mcp-servers/file-storage.ts","../system/mcp-servers/http-fetch.ts","../system/mcp-servers/human-queue-schemas.ts","../system/mcp-servers/human-queue.ts","../system/mcp-servers/knowledge.ts","../system/mcp-servers/oauth.ts","../system/mcp-servers/schema-exchange.ts","../system/mcp-servers/translation.ts","../system/mcp-servers/vision-prompts.ts","../system/mcp-servers/vision.ts","../system/mcp-servers/workflow-compiler.ts","../system/mcp-servers/workflow.ts","../system/mcp-servers/admin/agent-subscriptions.ts","../system/mcp-servers/admin/agents.ts","../system/mcp-servers/admin/bot-accounts.ts","../system/mcp-servers/admin/controlplane.ts","../system/mcp-servers/admin/diagnostics.ts","../system/mcp-servers/admin/escalations.ts","../system/mcp-servers/admin/exports.ts","../system/mcp-servers/admin/index.ts","../system/mcp-servers/admin/maintenance.ts","../system/mcp-servers/admin/mcp-servers.ts","../system/mcp-servers/admin/ortho.ts","../system/mcp-servers/admin/overview.ts","../system/mcp-servers/admin/pipelines.ts","../system/mcp-servers/admin/schemas.ts","../system/mcp-servers/admin/settings.ts","../system/mcp-servers/admin/tasks.ts","../system/mcp-servers/admin/topics.ts","../system/mcp-servers/admin/users.ts","../system/mcp-servers/admin/workflow-config.ts","../system/mcp-servers/admin/workflows.ts","../system/mcp-servers/admin/yaml-workflows.ts","../system/mcp-servers/db-query/index.ts","../system/mcp-servers/db-query/schemas.ts","../system/mcp-servers/db-query/tools.ts","../system/seed/index.ts","../system/seed/tool-manifests-admin.ts","../system/seed/tool-manifests-data.ts","../system/seed/tool-manifests-escalation.ts","../system/seed/tool-manifests-events.ts","../system/seed/tool-manifests-knowledge.ts","../system/seed/tool-manifests-workflows.ts","../system/workflows/tool-result-guard.ts","../system/workflows/capability-invoke/activities.ts","../system/workflows/capability-invoke/index.ts","../system/workflows/mcp-deterministic/activities.ts","../system/workflows/mcp-deterministic/index.ts","../system/workflows/mcp-query/index.ts","../system/workflows/mcp-query/prompts.ts","../system/workflows/mcp-query/strategy-advisors.ts","../system/workflows/mcp-query/types.ts","../system/workflows/mcp-query/activities/caches.ts","../system/workflows/mcp-query/activities/discovery.ts","../system/workflows/mcp-query/activities/index.ts","../system/workflows/mcp-query/activities/llm.ts","../system/workflows/mcp-query/activities/tool-executor.ts","../system/workflows/mcp-query/activities/tool-loader.ts","../system/workflows/mcp-query-router/activities.ts","../system/workflows/mcp-query-router/index.ts","../system/workflows/mcp-query-router/prompts.ts","../system/workflows/mcp-triage/activities-proxy.ts","../system/workflows/mcp-triage/index.ts","../system/workflows/mcp-triage/prompts.ts","../system/workflows/mcp-triage/response-builders.ts","../system/workflows/mcp-triage/response.ts","../system/workflows/mcp-triage/types.ts","../system/workflows/mcp-triage-deterministic/activities.ts","../system/workflows/mcp-triage-deterministic/index.ts","../system/workflows/mcp-triage-router/activities.ts","../system/workflows/mcp-triage-router/index.ts","../system/workflows/mcp-workflow-builder/index.ts","../system/workflows/mcp-workflow-builder/prompts.ts","../system/workflows/mcp-workflow-builder/activities/caches.ts","../system/workflows/mcp-workflow-builder/activities/index.ts","../system/workflows/mcp-workflow-builder/activities/llm.ts","../system/workflows/mcp-workflow-builder/activities/tool-loader.ts","../system/workflows/mcp-workflow-planner/index.ts","../system/workflows/mcp-workflow-planner/prompts.ts","../system/workflows/mcp-workflow-planner/activities/analyze.ts","../system/workflows/mcp-workflow-planner/activities/index.ts","../system/workflows/mcp-workflow-planner/activities/persist.ts","../system/workflows/mcp-workflow-planner/activities/plan.ts","../system/workflows/shared/discovery.ts","../system/workflows/shared/index.ts","../system/workflows/shared/llm-caller.ts","../system/workflows/shared/prompts.ts","../system/workflows/shared/strategy-advisors.ts","../system/workflows/shared/tool-executor.ts","../system/workflows/shared/tool-loader.ts","../system/workflows/shared/types.ts","../types/agent.ts","../types/auth.ts","../types/config.ts","../types/delegation.ts","../types/discovery.ts","../types/envelope.ts","../types/escalation-strategy.ts","../types/escalation.ts","../types/events.ts","../types/export.ts","../types/express.d.ts","../types/facets.ts","../types/index.ts","../types/logger.ts","../types/maintenance.ts","../types/mcp.ts","../types/oauth.ts","../types/sdk.ts","../types/startup.ts","../types/task.ts","../types/telemetry.ts","../types/tool-context.ts","../types/user.ts","../types/workflow-set.ts","../types/workflow.ts","../types/yaml-workflow.ts","../workers/index.ts"],"version":"5.9.3"}
@@ -27,6 +27,7 @@ export interface LTWorkflowConfig {
27
27
  consumes: string[];
28
28
  tool_tags?: string[];
29
29
  envelope_schema?: Record<string, any> | null;
30
+ /** @deprecated The escalation form is a versioned, role-owned schema. Legacy fallback only. */
30
31
  resolver_schema?: Record<string, any> | null;
31
32
  cron_schedule?: string | null;
32
33
  /** Bot external_id to run as. When set, workflows use this bot's identity. */
@@ -47,6 +48,7 @@ export interface LTResolvedConfig {
47
48
  consumes: string[];
48
49
  toolTags: string[];
49
50
  envelopeSchema: Record<string, any> | null;
51
+ /** @deprecated Role-owned versioned schema supersedes this. Legacy fallback only. */
50
52
  resolverSchema: Record<string, any> | null;
51
53
  cronSchedule: string | null;
52
54
  executeAs: string | null;
@@ -37,7 +37,11 @@ export interface LTWorkerConfig {
37
37
  roles?: string[];
38
38
  /** JSON template that pre-fills the dashboard invocation form. */
39
39
  envelopeSchema?: Record<string, any>;
40
- /** JSON template that pre-fills the escalation resolution form. */
40
+ /**
41
+ * @deprecated The escalation form is a versioned schema owned by the target
42
+ * role, not the workflow. Declare the form on the role; retained only as a
43
+ * legacy fallback.
44
+ */
41
45
  resolverSchema?: Record<string, any>;
42
46
  /** Upstream workflow types whose output is injected into this workflow's envelope. */
43
47
  consumes?: string[];
@@ -1,2 +1,2 @@
1
- import{j as o}from"./vendor-query-B2UbickB.js";import{c as n}from"./tasks-BHfimh-E.js";import{t as m}from"./index-MbEPoyTe.js";import{f as c}from"./useEventHooks-CeOIM1Ix.js";import{u}from"./mcp-CsHkygRS.js";import{P as d}from"./PageHeaderWithStats-W3akV6nB.js";import"./vendor-react-CXumBFUA.js";import"./vendor-icons-DOIDKgo6.js";function j(){var a;c();const{data:s}=n({limit:1}),{data:e}=m({status:"pending",limit:1}),{data:t}=u(),r=((a=t==null?void 0:t.servers)==null?void 0:a.filter(i=>i.status==="connected").length)??0,l=t?`${r}/${t.total}`:"—";return o.jsx("div",{children:o.jsx(d,{title:"Admin",stats:[{label:"Tasks",value:(s==null?void 0:s.total)??"—"},{label:"Pending Escalations",value:(e==null?void 0:e.total)??"—",dotClass:"bg-status-pending"},{label:"MCP Servers",value:l},{label:"System",value:"Healthy",dotClass:"bg-status-success"}]})})}export{j as AdminDashboard};
2
- //# sourceMappingURL=AdminDashboard-Dhr7sUq6.js.map
1
+ import{j as o}from"./vendor-query-B2UbickB.js";import{c as n}from"./tasks-Crk9Y3C4.js";import{t as m}from"./index-DwWP-Z_c.js";import{f as c}from"./useEventHooks-Dn_vN2xE.js";import{u}from"./mcp-1lzlgtS8.js";import{P as d}from"./PageHeaderWithStats-W3akV6nB.js";import"./vendor-react-CXumBFUA.js";import"./vendor-icons-DOIDKgo6.js";function j(){var a;c();const{data:s}=n({limit:1}),{data:e}=m({status:"pending",limit:1}),{data:t}=u(),r=((a=t==null?void 0:t.servers)==null?void 0:a.filter(i=>i.status==="connected").length)??0,l=t?`${r}/${t.total}`:"—";return o.jsx("div",{children:o.jsx(d,{title:"Admin",stats:[{label:"Tasks",value:(s==null?void 0:s.total)??"—"},{label:"Pending Escalations",value:(e==null?void 0:e.total)??"—",dotClass:"bg-status-pending"},{label:"MCP Servers",value:l},{label:"System",value:"Healthy",dotClass:"bg-status-success"}]})})}export{j as AdminDashboard};
2
+ //# sourceMappingURL=AdminDashboard-B-JptT54.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AdminDashboard-Dhr7sUq6.js","sources":["../../src/pages/admin/AdminDashboard.tsx"],"sourcesContent":["import { useTasks } from '../../api/tasks';\nimport { useEscalations } from '../../api/escalations';\nimport { useEscalationListEvents } from '../../hooks/useEventHooks';\nimport { useMcpServers } from '../../api/mcp';\nimport { PageHeaderWithStats } from '../../components/common/layout/PageHeaderWithStats';\n\nexport function AdminDashboard() {\n useEscalationListEvents();\n const { data: taskData } = useTasks({ limit: 1 });\n const { data: pendingEsc } = useEscalations({ status: 'pending', limit: 1 });\n const { data: mcpData } = useMcpServers();\n\n const connectedServers =\n mcpData?.servers?.filter((s) => s.status === 'connected').length ?? 0;\n const mcpLabel = mcpData ? `${connectedServers}/${mcpData.total}` : '—';\n\n return (\n <div>\n <PageHeaderWithStats\n title=\"Admin\"\n stats={[\n { label: 'Tasks', value: taskData?.total ?? '—' },\n { label: 'Pending Escalations', value: pendingEsc?.total ?? '—', dotClass: 'bg-status-pending' },\n { label: 'MCP Servers', value: mcpLabel },\n { label: 'System', value: 'Healthy', dotClass: 'bg-status-success' },\n ]}\n />\n </div>\n );\n}\n"],"names":["AdminDashboard","useEscalationListEvents","taskData","useTasks","pendingEsc","useEscalations","mcpData","useMcpServers","connectedServers","_a","s","mcpLabel","jsx","PageHeaderWithStats"],"mappings":"4UAMO,SAASA,GAAiB,OAC/BC,EAAA,EACA,KAAM,CAAE,KAAMC,CAAA,EAAaC,EAAS,CAAE,MAAO,EAAG,EAC1C,CAAE,KAAMC,CAAA,EAAeC,EAAe,CAAE,OAAQ,UAAW,MAAO,EAAG,EACrE,CAAE,KAAMC,CAAA,EAAYC,EAAA,EAEpBC,IACJC,EAAAH,GAAA,YAAAA,EAAS,UAAT,YAAAG,EAAkB,OAAQC,GAAMA,EAAE,SAAW,aAAa,SAAU,EAChEC,EAAWL,EAAU,GAAGE,CAAgB,IAAIF,EAAQ,KAAK,GAAK,IAEpE,aACG,MAAA,CACC,SAAAM,EAAAA,IAACC,EAAA,CACC,MAAM,QACN,MAAO,CACL,CAAE,MAAO,QAAS,OAAOX,GAAA,YAAAA,EAAU,QAAS,GAAA,EAC5C,CAAE,MAAO,sBAAuB,OAAOE,GAAA,YAAAA,EAAY,QAAS,IAAK,SAAU,mBAAA,EAC3E,CAAE,MAAO,cAAe,MAAOO,CAAA,EAC/B,CAAE,MAAO,SAAU,MAAO,UAAW,SAAU,mBAAA,CAAoB,CACrE,CAAA,EAEJ,CAEJ"}
1
+ {"version":3,"file":"AdminDashboard-B-JptT54.js","sources":["../../src/pages/admin/AdminDashboard.tsx"],"sourcesContent":["import { useTasks } from '../../api/tasks';\nimport { useEscalations } from '../../api/escalations';\nimport { useEscalationListEvents } from '../../hooks/useEventHooks';\nimport { useMcpServers } from '../../api/mcp';\nimport { PageHeaderWithStats } from '../../components/common/layout/PageHeaderWithStats';\n\nexport function AdminDashboard() {\n useEscalationListEvents();\n const { data: taskData } = useTasks({ limit: 1 });\n const { data: pendingEsc } = useEscalations({ status: 'pending', limit: 1 });\n const { data: mcpData } = useMcpServers();\n\n const connectedServers =\n mcpData?.servers?.filter((s) => s.status === 'connected').length ?? 0;\n const mcpLabel = mcpData ? `${connectedServers}/${mcpData.total}` : '—';\n\n return (\n <div>\n <PageHeaderWithStats\n title=\"Admin\"\n stats={[\n { label: 'Tasks', value: taskData?.total ?? '—' },\n { label: 'Pending Escalations', value: pendingEsc?.total ?? '—', dotClass: 'bg-status-pending' },\n { label: 'MCP Servers', value: mcpLabel },\n { label: 'System', value: 'Healthy', dotClass: 'bg-status-success' },\n ]}\n />\n </div>\n );\n}\n"],"names":["AdminDashboard","useEscalationListEvents","taskData","useTasks","pendingEsc","useEscalations","mcpData","useMcpServers","connectedServers","_a","s","mcpLabel","jsx","PageHeaderWithStats"],"mappings":"4UAMO,SAASA,GAAiB,OAC/BC,EAAA,EACA,KAAM,CAAE,KAAMC,CAAA,EAAaC,EAAS,CAAE,MAAO,EAAG,EAC1C,CAAE,KAAMC,CAAA,EAAeC,EAAe,CAAE,OAAQ,UAAW,MAAO,EAAG,EACrE,CAAE,KAAMC,CAAA,EAAYC,EAAA,EAEpBC,IACJC,EAAAH,GAAA,YAAAA,EAAS,UAAT,YAAAG,EAAkB,OAAQC,GAAMA,EAAE,SAAW,aAAa,SAAU,EAChEC,EAAWL,EAAU,GAAGE,CAAgB,IAAIF,EAAQ,KAAK,GAAK,IAEpE,aACG,MAAA,CACC,SAAAM,EAAAA,IAACC,EAAA,CACC,MAAM,QACN,MAAO,CACL,CAAE,MAAO,QAAS,OAAOX,GAAA,YAAAA,EAAU,QAAS,GAAA,EAC5C,CAAE,MAAO,sBAAuB,OAAOE,GAAA,YAAAA,EAAY,QAAS,IAAK,SAAU,mBAAA,EAC3E,CAAE,MAAO,cAAe,MAAOO,CAAA,EAC/B,CAAE,MAAO,SAAU,MAAO,UAAW,SAAU,mBAAA,CAAoB,CACrE,CAAA,EAEJ,CAEJ"}
@@ -1,4 +1,4 @@
1
- import{j as e,a as v}from"./vendor-query-B2UbickB.js";import{a as re,d as ce,b as le}from"./agents-O1GlQE9p.js";import{E as oe,C as de,u as pe,a as xe,b as ue,c as me}from"./CronLabel-4V_EXMUg.js";import{b as he,u as fe}from"./index-MbEPoyTe.js";import{P as ve}from"./PageHeader-DJo7yMUR.js";import{B as O,e as U,t as be,R as Y,l as T,p as Z,a6 as G,b as V,aM as ee,V as ye}from"./vendor-icons-DOIDKgo6.js";import{e as ge}from"./knowledge-CTjJVvIG.js";import{R as te}from"./RunAsSelector-Bvefon9B.js";import{u as je}from"./workflows-C_gCwB9q.js";import{u as we}from"./yaml-workflows-CPabf8Sf.js";import{u as se}from"./capabilities-Du9EfNdT.js";import{u as Ne}from"./topics-BW2cS79q.js";import{W as Q}from"./WorkflowPill-BtNBSplz.js";import{e as _e,c as ke,f as Ce}from"./vendor-react-CXumBFUA.js";import"./BotPicker-CCIo5ic0.js";import"./bots-DB5Z7MEk.js";const X={name:"",description:"",goals:"",rules:"",user_id:"",knowledge_domain:"",subscriptions:[],schedules:[]},Se={topic:"",filter:"",reaction_type:"durable",workflow_type:"",pipeline_id:"",mcp_prompt:"",server_id:"",tool_name:"",input_mapping:"{}",execute_as:"",enabled:!0},qe={cron:"0 * * * *",reaction_type:"durable",workflow_type:"",pipeline_id:"",server_id:"",tool_name:"",envelope:"{}",execute_as:""};function Re(s,a){var l,x,u;const r=(x=(l=s.behaviors)==null?void 0:l.schedules)!=null&&x.length?s.behaviors.schedules.map(n=>({cron:n.cron||"",reaction_type:n.reaction_type||"durable",workflow_type:n.workflow_type||"",pipeline_id:n.pipeline_id||"",server_id:n.server_id||"",tool_name:n.tool_name||"",envelope:n.envelope?JSON.stringify(n.envelope,null,2):"{}",execute_as:n.execute_as||""})):(u=s.behaviors)!=null&&u.cron?[{cron:s.behaviors.cron,reaction_type:"durable",workflow_type:s.workflow_type??"",pipeline_id:"",server_id:"",tool_name:"",envelope:"{}",execute_as:""}]:[];return{name:s.id,description:s.description??"",goals:s.goals??"",rules:s.rules??"",user_id:s.user_id??"",knowledge_domain:s.knowledge_domain??"",subscriptions:a.map(n=>({id:n.id,topic:n.topic,filter:n.filter?JSON.stringify(n.filter,null,2):"",reaction_type:n.reaction_type,workflow_type:n.workflow_type??"",pipeline_id:n.pipeline_id??"",mcp_prompt:n.mcp_prompt??"",server_id:n.server_id??"",tool_name:n.tool_name??"",input_mapping:JSON.stringify(n.input_mapping??{},null,2),execute_as:n.execute_as??"",enabled:n.enabled})),schedules:r}}function Ae(s){var r;const a={};return s.schedules.length>0&&(a.schedules=s.schedules.map(l=>({cron:l.cron,reaction_type:l.reaction_type||"durable",workflow_type:l.reaction_type==="pipeline"?void 0:l.workflow_type,pipeline_id:l.reaction_type==="pipeline"?l.pipeline_id:void 0,envelope:B(l.envelope)??{},execute_as:l.execute_as||void 0})),a.cron=s.schedules[0].cron),{id:s.name,description:s.description||void 0,goals:s.goals||void 0,rules:s.rules||void 0,user_id:s.user_id||void 0,knowledge_domain:s.knowledge_domain||void 0,behaviors:a,workflow_type:((r=s.schedules[0])==null?void 0:r.workflow_type)||void 0,pipeline_id:void 0}}function Oe(s){return s.subscriptions.map(a=>({id:a.id,topic:a.topic,filter:a.filter?B(a.filter):void 0,reaction_type:a.reaction_type,workflow_type:a.workflow_type||void 0,pipeline_id:a.pipeline_id||void 0,mcp_prompt:a.mcp_prompt||void 0,server_id:a.server_id||void 0,tool_name:a.tool_name||void 0,input_mapping:B(a.input_mapping)??{},execute_as:a.execute_as||void 0,enabled:a.enabled}))}function B(s){if(s.trim())try{return JSON.parse(s)}catch{return}}function Ee(s,a,r,l){let x;try{x=JSON.parse(s)}catch{x={}}const u=l.includes(a),n=r===""||r===void 0||r===null||Array.isArray(r)&&r.length===0||r==="[]";if(!u&&n){const{[a]:p,...o}=x;return JSON.stringify(o,null,2)}let h=r;if(typeof r=="string")try{const p=JSON.parse(r);Array.isArray(p)&&(h=p)}catch{}return JSON.stringify({...x,[a]:h},null,2)}const S="section-header mt-[3em] first:mt-0",$="label",_="hint",R="input",L="input-json w-full";function $e({form:s,set:a}){return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"border-l-2 border-accent/30 pl-3 py-1 flex items-start justify-between",children:[e.jsx("p",{className:"text-[12px] text-text-secondary italic leading-relaxed",children:"Give your automation a name and describe what it does. The name appears everywhere — in events, logs, and the dashboard."}),e.jsx("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",children:e.jsx(O,{className:"w-3 h-3",strokeWidth:1.5})})]}),e.jsxs("div",{children:[e.jsx("label",{className:$,children:"Name *"}),e.jsx("input",{type:"text",value:s.name,onChange:r=>a("name",r.target.value),placeholder:"health-monitor",className:R}),e.jsx("p",{className:_,children:"Lowercase, kebab-case. This appears everywhere."})]}),e.jsxs("div",{children:[e.jsx("label",{className:$,children:"Description"}),e.jsx("input",{type:"text",value:s.description,onChange:r=>a("description",r.target.value),placeholder:"Watches for workflow failures and captures diagnostics",className:R}),e.jsx("p",{className:_,children:"One sentence that explains what this automation does."})]})]})}function Pe({form:s,set:a}){return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"border-l-2 border-accent/30 pl-3 py-1 flex items-start justify-between",children:[e.jsx("p",{className:"text-[12px] text-text-secondary italic leading-relaxed",children:"Goals define what drives the automation. Rules define what constrains it."}),e.jsx("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",children:e.jsx(O,{className:"w-3 h-3",strokeWidth:1.5})})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-8",children:[e.jsxs("div",{children:[e.jsx("label",{className:$,children:"Goals"}),e.jsx("textarea",{value:s.goals,onChange:r=>a("goals",r.target.value),placeholder:"Detect failures early, capture diagnostics, alert before cascading",rows:4,className:`${R} resize-none`}),e.jsx("p",{className:_,children:"Primary motivation. What the automation is trying to achieve."})]}),e.jsxs("div",{children:[e.jsx("label",{className:$,children:"Rules"}),e.jsx("textarea",{value:s.rules,onChange:r=>a("rules",r.target.value),placeholder:"Never auto-restart failed workflows. Always escalate to humans.",rows:4,className:`${R} resize-none`}),e.jsx("p",{className:_,children:"Guardrails. What it must never do, even when goals suggest it should."})]})]})]})}function Ie({form:s,set:a}){const{data:r}=ge(),l=(r==null?void 0:r.domains)??[];return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"border-l-2 border-accent/30 pl-3 py-1 flex items-start justify-between",children:[e.jsx("p",{className:"text-[12px] text-text-secondary italic leading-relaxed",children:"Assign a knowledge domain — the automation's memory. It stores context here over time."}),e.jsx("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",children:e.jsx(O,{className:"w-3 h-3",strokeWidth:1.5})})]}),e.jsxs("div",{children:[e.jsx("label",{className:$,children:"Knowledge Domain"}),e.jsx("input",{type:"text",value:s.knowledge_domain,onChange:x=>a("knowledge_domain",x.target.value),placeholder:"e.g., system-health, content-review, vendor-data",className:R,list:"domain-suggestions"}),e.jsx("datalist",{id:"domain-suggestions",children:l.map(x=>e.jsx("option",{value:x.domain},x.domain))}),e.jsx("p",{className:_,children:"Choose an existing domain to share memory, or type a new name to create one."})]}),l.length>0&&e.jsxs("div",{children:[e.jsx("label",{className:$,children:"Existing Domains"}),e.jsx("div",{className:"space-y-0.5 mt-2",children:l.map(x=>e.jsxs("button",{type:"button",onClick:()=>a("knowledge_domain",x.domain),className:`w-full flex items-center gap-3 px-3 py-2 rounded-md text-left transition-colors ${s.knowledge_domain===x.domain?"border-l-2 border-l-accent bg-accent/5":"hover:bg-surface-hover border-l-2 border-l-transparent"}`,children:[e.jsx(U,{className:"w-3.5 h-3.5 text-text-quaternary shrink-0",strokeWidth:1.5}),e.jsx("span",{className:"text-sm text-text-primary flex-1",children:x.domain}),e.jsxs("span",{className:"text-[10px] text-text-quaternary",children:[x.count," entries"]}),e.jsx("span",{className:"text-[9px] text-text-quaternary",children:e.jsx(he,{date:x.latest})})]},x.domain))})]})]})}function We({serverId:s,toolName:a,onChange:r}){const{data:l}=se(),x=v.useMemo(()=>{var t;return((t=l==null?void 0:l.categories)==null?void 0:t.flatMap(i=>i.tools))??[]},[l]),[u,n]=v.useState(!1),[h,p]=v.useState(""),o=v.useRef(null),f=v.useRef(null);v.useEffect(()=>{if(!u)return;function t(i){f.current&&!f.current.contains(i.target)&&n(!1)}return document.addEventListener("mousedown",t),()=>document.removeEventListener("mousedown",t)},[u]);const c=a?`${a}`:"",d=u?h:c,y=v.useMemo(()=>{const t=(u?h:"").toLowerCase();return t?x.filter(i=>i.name.toLowerCase().includes(t)||i.serverName.toLowerCase().includes(t)||(i.description??"").toLowerCase().includes(t)):x},[x,h,u]),m=a?x.find(t=>t.serverId===s&&t.name===a):void 0;return e.jsxs("div",{ref:f,className:"relative",children:[e.jsx("input",{ref:o,type:"text",value:d,onFocus:()=>{n(!0),p(c)},onChange:t=>{const i=t.target.value;p(i),i||r("",""),u||n(!0)},placeholder:"Search capabilities...",className:"input font-mono text-sm w-full"}),!u&&(m==null?void 0:m.description)&&e.jsx("p",{className:"text-[10px] text-text-tertiary mt-1 italic",children:m.description}),u&&y.length>0&&e.jsx("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",children:y.map(t=>e.jsxs("button",{type:"button",onClick:()=>{r(t.serverId,t.name),p(t.name),n(!1)},className:`w-full text-left px-3 py-2 hover:bg-surface-hover transition-colors flex items-center gap-3 ${s===t.serverId&&a===t.name?"bg-accent/5":""}`,children:[e.jsx("span",{className:"text-[11px] font-mono text-text-primary shrink-0",children:t.name}),e.jsxs("span",{className:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[9px] font-medium shrink-0 bg-accent/10 text-accent",children:[e.jsx(be,{className:"w-2 h-2",strokeWidth:1.5}),t.serverName]}),t.description&&e.jsx("span",{className:"text-[10px] text-text-quaternary truncate",children:t.description})]},`${t.serverId}:${t.name}`))}),u&&y.length===0&&h&&e.jsx("div",{className:"absolute z-50 left-0 right-0 mt-1 rounded-md border border-surface-border bg-surface shadow-lg px-3 py-4 text-center",children:e.jsxs("p",{className:"text-[11px] text-text-quaternary",children:['No capabilities match "',h,'"']})})]})}const Me={durable:"Workflow",pipeline:"Pipeline",capability:"Capability",mcp_query:"MCP Query"},Te=["durable","pipeline","capability","mcp_query"];function ae({reactionType:s,onReactionTypeChange:a,workflowType:r,onWorkflowTypeChange:l,pipelineId:x,onPipelineIdChange:u,serverId:n,toolName:h,onCapabilityChange:p,mcpPrompt:o,onMcpPromptChange:f,availableTypes:c=[...Te]}){const{data:d}=je(),y=(d??[]).filter(i=>i.invocable).map(i=>i.workflow_type),{data:m}=we({status:"active"}),t=((m==null?void 0:m.workflows)??[]).map(i=>({id:i.id,name:i.graph_topic||i.id}));return e.jsxs("div",{className:"space-y-4",children:[e.jsx("div",{className:"flex gap-1",children:c.map(i=>{const b=s===i;return e.jsx("button",{type:"button",onClick:()=>a(i),className:`px-3 py-1.5 text-[11px] font-medium rounded-md transition-colors ${b?"bg-accent/10 text-accent":"text-text-tertiary hover:text-text-primary hover:bg-surface-hover"}`,children:Me[i]},i)})}),s==="durable"&&e.jsxs("div",{children:[e.jsx("label",{className:"label",children:"Workflow *"}),e.jsxs("select",{value:r,onChange:i=>l(i.target.value),className:"input",children:[e.jsx("option",{value:"",children:"Select workflow..."}),y.map(i=>e.jsx("option",{value:i,children:i},i))]})]}),s==="pipeline"&&e.jsxs("div",{children:[e.jsx("label",{className:"label",children:"Pipeline *"}),e.jsxs("select",{value:x,onChange:i=>u(i.target.value),className:"input",children:[e.jsx("option",{value:"",children:"Select pipeline..."}),t.map(i=>e.jsx("option",{value:i.id,children:i.name},i.id))]})]}),s==="capability"&&e.jsxs("div",{children:[e.jsx("label",{className:"label",children:"Capability *"}),e.jsx(We,{serverId:n,toolName:h,onChange:p})]}),s==="mcp_query"&&f&&e.jsxs("div",{children:[e.jsx("label",{className:"label",children:"Prompt *"}),e.jsx("textarea",{value:o??"",onChange:i=>f(i.target.value),placeholder:"Analyze the error and suggest remediation...",rows:3,className:"input resize-none"})]})]})}const Le={task:"bg-status-active/10 text-status-active",workflow:"bg-accent/15 text-accent",escalation:"bg-status-warning/10 text-status-warning",activity:"bg-status-active/10 text-status-active",knowledge:"bg-accent/10 text-accent",file:"bg-status-draft/10 text-status-draft",agent:"bg-status-success/10 text-status-success",app:"bg-status-error/10 text-status-error",milestone:"bg-accent/10 text-accent"};function Je({form:s,set:a}){const{data:r}=Ne({limit:200}),{data:l}=se(),x=(r==null?void 0:r.topics)??[],u=v.useMemo(()=>{var t;return((t=l==null?void 0:l.categories)==null?void 0:t.flatMap(i=>i.tools))??[]},[l]),[n,h]=v.useState(0),p=(t,i,b)=>{const g=[...s.subscriptions];g[t]={...g[t],[i]:b},a("subscriptions",g)},o=()=>{a("subscriptions",[...s.subscriptions,{...Se}]),h(s.subscriptions.length)},f=t=>{a("subscriptions",s.subscriptions.filter((i,b)=>b!==t)),n>=s.subscriptions.length-1&&h(Math.max(0,s.subscriptions.length-2))},c=s.subscriptions,d=c[n],y=t=>t.topic?t.reaction_type==="durable"?!!t.workflow_type:t.reaction_type==="pipeline"?!!t.pipeline_id:t.reaction_type==="mcp_query"?!!t.mcp_prompt:t.reaction_type==="capability"?!!t.server_id&&!!t.tool_name:!1:!1,m=d?x.find(t=>t.topic===d.topic):void 0;return c.length===0?e.jsxs("div",{className:"max-w-xl",children:[e.jsxs("div",{className:"border-l-2 border-accent/30 pl-3 py-1 flex items-start justify-between mb-8",children:[e.jsx("p",{className:"text-[12px] text-text-secondary italic leading-relaxed",children:"Optional. When a matching event is published, the automation runs the configured workflow with the event payload."}),e.jsx("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",children:e.jsx(O,{className:"w-3 h-3",strokeWidth:1.5})})]}),e.jsxs("div",{className:"flex flex-col items-center justify-center py-12 text-center",children:[e.jsx(Y,{className:"w-8 h-8 text-text-quaternary/40 mb-3",strokeWidth:1}),e.jsx("p",{className:"text-sm text-text-tertiary mb-2",children:"No event subscriptions yet"}),e.jsx("p",{className:"text-[11px] text-text-quaternary max-w-sm mb-6",children:"Each subscription listens for a topic pattern and runs a workflow when it matches."}),e.jsxs("button",{onClick:o,className:"flex items-center gap-2 text-xs text-accent hover:text-accent-hover transition-colors",children:[e.jsx(T,{className:"w-3.5 h-3.5"})," Add first subscription"]})]})]}):e.jsxs("div",{children:[e.jsxs("div",{className:"border-l-2 border-accent/30 pl-3 py-1 flex items-start justify-between mb-6",children:[e.jsx("p",{className:"text-[12px] text-text-secondary italic leading-relaxed",children:"Optional. When a matching event is published, the automation runs the configured workflow with the event payload."}),e.jsx("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",children:e.jsx(O,{className:"w-3 h-3",strokeWidth:1.5})})]}),e.jsxs("div",{className:"flex gap-8",children:[e.jsxs("div",{className:"w-52 shrink-0 space-y-0.5",children:[c.map((t,i)=>e.jsxs("div",{className:`group/sub flex items-center rounded-md transition-colors ${n===i?"bg-accent/10 text-accent":"text-text-tertiary hover:text-text-primary hover:bg-surface-hover"}`,children:[e.jsxs("button",{onClick:()=>h(i),className:"flex-1 text-left px-3 py-2 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:`w-1.5 h-1.5 rounded-full dot-ring shrink-0 ${y(t)?"bg-status-success":"bg-surface-border"}`}),e.jsx("span",{className:"text-[11px] font-mono truncate",children:t.topic||"new subscription"})]}),e.jsxs("span",{className:"text-[9px] text-text-quaternary ml-3",children:["→ ",t.workflow_type||t.tool_name||t.reaction_type]})]}),e.jsx("button",{onClick:b=>{b.stopPropagation(),confirm(`Remove subscription "${t.topic||"new"}"?
1
+ import{j as e,a as v}from"./vendor-query-B2UbickB.js";import{a as re,d as ce,b as le}from"./agents-DlzvjNxE.js";import{E as oe,C as de,u as pe,a as xe,b as ue,c as me}from"./CronLabel-ZesYXxCH.js";import{b as he,u as fe}from"./index-DwWP-Z_c.js";import{P as ve}from"./PageHeader-DJo7yMUR.js";import{B as O,e as U,t as be,R as Y,l as T,p as Z,a6 as G,b as V,aM as ee,V as ye}from"./vendor-icons-DOIDKgo6.js";import{e as ge}from"./knowledge-fYoEF4Lx.js";import{R as te}from"./RunAsSelector-mhusrlYE.js";import{u as je}from"./workflows-DuUspMAl.js";import{u as we}from"./yaml-workflows-DXQCiOsP.js";import{u as se}from"./capabilities-_WSZ7cxO.js";import{u as Ne}from"./topics-CtfcCyw9.js";import{W as Q}from"./WorkflowPill-BtNBSplz.js";import{e as _e,c as ke,f as Ce}from"./vendor-react-CXumBFUA.js";import"./BotPicker-B1RdaNuY.js";import"./bots-CWMN-KUI.js";const X={name:"",description:"",goals:"",rules:"",user_id:"",knowledge_domain:"",subscriptions:[],schedules:[]},Se={topic:"",filter:"",reaction_type:"durable",workflow_type:"",pipeline_id:"",mcp_prompt:"",server_id:"",tool_name:"",input_mapping:"{}",execute_as:"",enabled:!0},qe={cron:"0 * * * *",reaction_type:"durable",workflow_type:"",pipeline_id:"",server_id:"",tool_name:"",envelope:"{}",execute_as:""};function Re(s,a){var l,x,u;const r=(x=(l=s.behaviors)==null?void 0:l.schedules)!=null&&x.length?s.behaviors.schedules.map(n=>({cron:n.cron||"",reaction_type:n.reaction_type||"durable",workflow_type:n.workflow_type||"",pipeline_id:n.pipeline_id||"",server_id:n.server_id||"",tool_name:n.tool_name||"",envelope:n.envelope?JSON.stringify(n.envelope,null,2):"{}",execute_as:n.execute_as||""})):(u=s.behaviors)!=null&&u.cron?[{cron:s.behaviors.cron,reaction_type:"durable",workflow_type:s.workflow_type??"",pipeline_id:"",server_id:"",tool_name:"",envelope:"{}",execute_as:""}]:[];return{name:s.id,description:s.description??"",goals:s.goals??"",rules:s.rules??"",user_id:s.user_id??"",knowledge_domain:s.knowledge_domain??"",subscriptions:a.map(n=>({id:n.id,topic:n.topic,filter:n.filter?JSON.stringify(n.filter,null,2):"",reaction_type:n.reaction_type,workflow_type:n.workflow_type??"",pipeline_id:n.pipeline_id??"",mcp_prompt:n.mcp_prompt??"",server_id:n.server_id??"",tool_name:n.tool_name??"",input_mapping:JSON.stringify(n.input_mapping??{},null,2),execute_as:n.execute_as??"",enabled:n.enabled})),schedules:r}}function Ae(s){var r;const a={};return s.schedules.length>0&&(a.schedules=s.schedules.map(l=>({cron:l.cron,reaction_type:l.reaction_type||"durable",workflow_type:l.reaction_type==="pipeline"?void 0:l.workflow_type,pipeline_id:l.reaction_type==="pipeline"?l.pipeline_id:void 0,envelope:B(l.envelope)??{},execute_as:l.execute_as||void 0})),a.cron=s.schedules[0].cron),{id:s.name,description:s.description||void 0,goals:s.goals||void 0,rules:s.rules||void 0,user_id:s.user_id||void 0,knowledge_domain:s.knowledge_domain||void 0,behaviors:a,workflow_type:((r=s.schedules[0])==null?void 0:r.workflow_type)||void 0,pipeline_id:void 0}}function Oe(s){return s.subscriptions.map(a=>({id:a.id,topic:a.topic,filter:a.filter?B(a.filter):void 0,reaction_type:a.reaction_type,workflow_type:a.workflow_type||void 0,pipeline_id:a.pipeline_id||void 0,mcp_prompt:a.mcp_prompt||void 0,server_id:a.server_id||void 0,tool_name:a.tool_name||void 0,input_mapping:B(a.input_mapping)??{},execute_as:a.execute_as||void 0,enabled:a.enabled}))}function B(s){if(s.trim())try{return JSON.parse(s)}catch{return}}function Ee(s,a,r,l){let x;try{x=JSON.parse(s)}catch{x={}}const u=l.includes(a),n=r===""||r===void 0||r===null||Array.isArray(r)&&r.length===0||r==="[]";if(!u&&n){const{[a]:p,...o}=x;return JSON.stringify(o,null,2)}let h=r;if(typeof r=="string")try{const p=JSON.parse(r);Array.isArray(p)&&(h=p)}catch{}return JSON.stringify({...x,[a]:h},null,2)}const S="section-header mt-[3em] first:mt-0",$="label",_="hint",R="input",L="input-json w-full";function $e({form:s,set:a}){return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"border-l-2 border-accent/30 pl-3 py-1 flex items-start justify-between",children:[e.jsx("p",{className:"text-[12px] text-text-secondary italic leading-relaxed",children:"Give your automation a name and describe what it does. The name appears everywhere — in events, logs, and the dashboard."}),e.jsx("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",children:e.jsx(O,{className:"w-3 h-3",strokeWidth:1.5})})]}),e.jsxs("div",{children:[e.jsx("label",{className:$,children:"Name *"}),e.jsx("input",{type:"text",value:s.name,onChange:r=>a("name",r.target.value),placeholder:"health-monitor",className:R}),e.jsx("p",{className:_,children:"Lowercase, kebab-case. This appears everywhere."})]}),e.jsxs("div",{children:[e.jsx("label",{className:$,children:"Description"}),e.jsx("input",{type:"text",value:s.description,onChange:r=>a("description",r.target.value),placeholder:"Watches for workflow failures and captures diagnostics",className:R}),e.jsx("p",{className:_,children:"One sentence that explains what this automation does."})]})]})}function Pe({form:s,set:a}){return e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"border-l-2 border-accent/30 pl-3 py-1 flex items-start justify-between",children:[e.jsx("p",{className:"text-[12px] text-text-secondary italic leading-relaxed",children:"Goals define what drives the automation. Rules define what constrains it."}),e.jsx("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",children:e.jsx(O,{className:"w-3 h-3",strokeWidth:1.5})})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-8",children:[e.jsxs("div",{children:[e.jsx("label",{className:$,children:"Goals"}),e.jsx("textarea",{value:s.goals,onChange:r=>a("goals",r.target.value),placeholder:"Detect failures early, capture diagnostics, alert before cascading",rows:4,className:`${R} resize-none`}),e.jsx("p",{className:_,children:"Primary motivation. What the automation is trying to achieve."})]}),e.jsxs("div",{children:[e.jsx("label",{className:$,children:"Rules"}),e.jsx("textarea",{value:s.rules,onChange:r=>a("rules",r.target.value),placeholder:"Never auto-restart failed workflows. Always escalate to humans.",rows:4,className:`${R} resize-none`}),e.jsx("p",{className:_,children:"Guardrails. What it must never do, even when goals suggest it should."})]})]})]})}function Ie({form:s,set:a}){const{data:r}=ge(),l=(r==null?void 0:r.domains)??[];return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"border-l-2 border-accent/30 pl-3 py-1 flex items-start justify-between",children:[e.jsx("p",{className:"text-[12px] text-text-secondary italic leading-relaxed",children:"Assign a knowledge domain — the automation's memory. It stores context here over time."}),e.jsx("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",children:e.jsx(O,{className:"w-3 h-3",strokeWidth:1.5})})]}),e.jsxs("div",{children:[e.jsx("label",{className:$,children:"Knowledge Domain"}),e.jsx("input",{type:"text",value:s.knowledge_domain,onChange:x=>a("knowledge_domain",x.target.value),placeholder:"e.g., system-health, content-review, vendor-data",className:R,list:"domain-suggestions"}),e.jsx("datalist",{id:"domain-suggestions",children:l.map(x=>e.jsx("option",{value:x.domain},x.domain))}),e.jsx("p",{className:_,children:"Choose an existing domain to share memory, or type a new name to create one."})]}),l.length>0&&e.jsxs("div",{children:[e.jsx("label",{className:$,children:"Existing Domains"}),e.jsx("div",{className:"space-y-0.5 mt-2",children:l.map(x=>e.jsxs("button",{type:"button",onClick:()=>a("knowledge_domain",x.domain),className:`w-full flex items-center gap-3 px-3 py-2 rounded-md text-left transition-colors ${s.knowledge_domain===x.domain?"border-l-2 border-l-accent bg-accent/5":"hover:bg-surface-hover border-l-2 border-l-transparent"}`,children:[e.jsx(U,{className:"w-3.5 h-3.5 text-text-quaternary shrink-0",strokeWidth:1.5}),e.jsx("span",{className:"text-sm text-text-primary flex-1",children:x.domain}),e.jsxs("span",{className:"text-[10px] text-text-quaternary",children:[x.count," entries"]}),e.jsx("span",{className:"text-[9px] text-text-quaternary",children:e.jsx(he,{date:x.latest})})]},x.domain))})]})]})}function We({serverId:s,toolName:a,onChange:r}){const{data:l}=se(),x=v.useMemo(()=>{var t;return((t=l==null?void 0:l.categories)==null?void 0:t.flatMap(i=>i.tools))??[]},[l]),[u,n]=v.useState(!1),[h,p]=v.useState(""),o=v.useRef(null),f=v.useRef(null);v.useEffect(()=>{if(!u)return;function t(i){f.current&&!f.current.contains(i.target)&&n(!1)}return document.addEventListener("mousedown",t),()=>document.removeEventListener("mousedown",t)},[u]);const c=a?`${a}`:"",d=u?h:c,y=v.useMemo(()=>{const t=(u?h:"").toLowerCase();return t?x.filter(i=>i.name.toLowerCase().includes(t)||i.serverName.toLowerCase().includes(t)||(i.description??"").toLowerCase().includes(t)):x},[x,h,u]),m=a?x.find(t=>t.serverId===s&&t.name===a):void 0;return e.jsxs("div",{ref:f,className:"relative",children:[e.jsx("input",{ref:o,type:"text",value:d,onFocus:()=>{n(!0),p(c)},onChange:t=>{const i=t.target.value;p(i),i||r("",""),u||n(!0)},placeholder:"Search capabilities...",className:"input font-mono text-sm w-full"}),!u&&(m==null?void 0:m.description)&&e.jsx("p",{className:"text-[10px] text-text-tertiary mt-1 italic",children:m.description}),u&&y.length>0&&e.jsx("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",children:y.map(t=>e.jsxs("button",{type:"button",onClick:()=>{r(t.serverId,t.name),p(t.name),n(!1)},className:`w-full text-left px-3 py-2 hover:bg-surface-hover transition-colors flex items-center gap-3 ${s===t.serverId&&a===t.name?"bg-accent/5":""}`,children:[e.jsx("span",{className:"text-[11px] font-mono text-text-primary shrink-0",children:t.name}),e.jsxs("span",{className:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[9px] font-medium shrink-0 bg-accent/10 text-accent",children:[e.jsx(be,{className:"w-2 h-2",strokeWidth:1.5}),t.serverName]}),t.description&&e.jsx("span",{className:"text-[10px] text-text-quaternary truncate",children:t.description})]},`${t.serverId}:${t.name}`))}),u&&y.length===0&&h&&e.jsx("div",{className:"absolute z-50 left-0 right-0 mt-1 rounded-md border border-surface-border bg-surface shadow-lg px-3 py-4 text-center",children:e.jsxs("p",{className:"text-[11px] text-text-quaternary",children:['No capabilities match "',h,'"']})})]})}const Me={durable:"Workflow",pipeline:"Pipeline",capability:"Capability",mcp_query:"MCP Query"},Te=["durable","pipeline","capability","mcp_query"];function ae({reactionType:s,onReactionTypeChange:a,workflowType:r,onWorkflowTypeChange:l,pipelineId:x,onPipelineIdChange:u,serverId:n,toolName:h,onCapabilityChange:p,mcpPrompt:o,onMcpPromptChange:f,availableTypes:c=[...Te]}){const{data:d}=je(),y=(d??[]).filter(i=>i.invocable).map(i=>i.workflow_type),{data:m}=we({status:"active"}),t=((m==null?void 0:m.workflows)??[]).map(i=>({id:i.id,name:i.graph_topic||i.id}));return e.jsxs("div",{className:"space-y-4",children:[e.jsx("div",{className:"flex gap-1",children:c.map(i=>{const b=s===i;return e.jsx("button",{type:"button",onClick:()=>a(i),className:`px-3 py-1.5 text-[11px] font-medium rounded-md transition-colors ${b?"bg-accent/10 text-accent":"text-text-tertiary hover:text-text-primary hover:bg-surface-hover"}`,children:Me[i]},i)})}),s==="durable"&&e.jsxs("div",{children:[e.jsx("label",{className:"label",children:"Workflow *"}),e.jsxs("select",{value:r,onChange:i=>l(i.target.value),className:"input",children:[e.jsx("option",{value:"",children:"Select workflow..."}),y.map(i=>e.jsx("option",{value:i,children:i},i))]})]}),s==="pipeline"&&e.jsxs("div",{children:[e.jsx("label",{className:"label",children:"Pipeline *"}),e.jsxs("select",{value:x,onChange:i=>u(i.target.value),className:"input",children:[e.jsx("option",{value:"",children:"Select pipeline..."}),t.map(i=>e.jsx("option",{value:i.id,children:i.name},i.id))]})]}),s==="capability"&&e.jsxs("div",{children:[e.jsx("label",{className:"label",children:"Capability *"}),e.jsx(We,{serverId:n,toolName:h,onChange:p})]}),s==="mcp_query"&&f&&e.jsxs("div",{children:[e.jsx("label",{className:"label",children:"Prompt *"}),e.jsx("textarea",{value:o??"",onChange:i=>f(i.target.value),placeholder:"Analyze the error and suggest remediation...",rows:3,className:"input resize-none"})]})]})}const Le={task:"bg-status-active/10 text-status-active",workflow:"bg-accent/15 text-accent",escalation:"bg-status-warning/10 text-status-warning",activity:"bg-status-active/10 text-status-active",knowledge:"bg-accent/10 text-accent",file:"bg-status-draft/10 text-status-draft",agent:"bg-status-success/10 text-status-success",app:"bg-status-error/10 text-status-error",milestone:"bg-accent/10 text-accent"};function Je({form:s,set:a}){const{data:r}=Ne({limit:200}),{data:l}=se(),x=(r==null?void 0:r.topics)??[],u=v.useMemo(()=>{var t;return((t=l==null?void 0:l.categories)==null?void 0:t.flatMap(i=>i.tools))??[]},[l]),[n,h]=v.useState(0),p=(t,i,b)=>{const g=[...s.subscriptions];g[t]={...g[t],[i]:b},a("subscriptions",g)},o=()=>{a("subscriptions",[...s.subscriptions,{...Se}]),h(s.subscriptions.length)},f=t=>{a("subscriptions",s.subscriptions.filter((i,b)=>b!==t)),n>=s.subscriptions.length-1&&h(Math.max(0,s.subscriptions.length-2))},c=s.subscriptions,d=c[n],y=t=>t.topic?t.reaction_type==="durable"?!!t.workflow_type:t.reaction_type==="pipeline"?!!t.pipeline_id:t.reaction_type==="mcp_query"?!!t.mcp_prompt:t.reaction_type==="capability"?!!t.server_id&&!!t.tool_name:!1:!1,m=d?x.find(t=>t.topic===d.topic):void 0;return c.length===0?e.jsxs("div",{className:"max-w-xl",children:[e.jsxs("div",{className:"border-l-2 border-accent/30 pl-3 py-1 flex items-start justify-between mb-8",children:[e.jsx("p",{className:"text-[12px] text-text-secondary italic leading-relaxed",children:"Optional. When a matching event is published, the automation runs the configured workflow with the event payload."}),e.jsx("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",children:e.jsx(O,{className:"w-3 h-3",strokeWidth:1.5})})]}),e.jsxs("div",{className:"flex flex-col items-center justify-center py-12 text-center",children:[e.jsx(Y,{className:"w-8 h-8 text-text-quaternary/40 mb-3",strokeWidth:1}),e.jsx("p",{className:"text-sm text-text-tertiary mb-2",children:"No event subscriptions yet"}),e.jsx("p",{className:"text-[11px] text-text-quaternary max-w-sm mb-6",children:"Each subscription listens for a topic pattern and runs a workflow when it matches."}),e.jsxs("button",{onClick:o,className:"flex items-center gap-2 text-xs text-accent hover:text-accent-hover transition-colors",children:[e.jsx(T,{className:"w-3.5 h-3.5"})," Add first subscription"]})]})]}):e.jsxs("div",{children:[e.jsxs("div",{className:"border-l-2 border-accent/30 pl-3 py-1 flex items-start justify-between mb-6",children:[e.jsx("p",{className:"text-[12px] text-text-secondary italic leading-relaxed",children:"Optional. When a matching event is published, the automation runs the configured workflow with the event payload."}),e.jsx("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",children:e.jsx(O,{className:"w-3 h-3",strokeWidth:1.5})})]}),e.jsxs("div",{className:"flex gap-8",children:[e.jsxs("div",{className:"w-52 shrink-0 space-y-0.5",children:[c.map((t,i)=>e.jsxs("div",{className:`group/sub flex items-center rounded-md transition-colors ${n===i?"bg-accent/10 text-accent":"text-text-tertiary hover:text-text-primary hover:bg-surface-hover"}`,children:[e.jsxs("button",{onClick:()=>h(i),className:"flex-1 text-left px-3 py-2 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:`w-1.5 h-1.5 rounded-full dot-ring shrink-0 ${y(t)?"bg-status-success":"bg-surface-border"}`}),e.jsx("span",{className:"text-[11px] font-mono truncate",children:t.topic||"new subscription"})]}),e.jsxs("span",{className:"text-[9px] text-text-quaternary ml-3",children:["→ ",t.workflow_type||t.tool_name||t.reaction_type]})]}),e.jsx("button",{onClick:b=>{b.stopPropagation(),confirm(`Remove subscription "${t.topic||"new"}"?
2
2
 
3
3
  This takes effect when you save.`)&&f(i)},className:"opacity-0 group-hover/sub:opacity-100 px-2 text-text-quaternary hover:text-status-error transition-all",title:"Remove",children:e.jsx(Z,{className:"w-3 h-3"})})]},i)),e.jsxs("button",{onClick:o,className:"w-full flex items-center gap-1.5 px-3 py-2 text-[11px] text-accent hover:text-accent-hover transition-colors",children:[e.jsx(T,{className:"w-3 h-3"})," Add"]})]}),d&&e.jsxs("div",{className:"flex-1 min-w-0 space-y-12",children:[e.jsxs("div",{children:[e.jsx("label",{className:S,children:"When this event fires"}),e.jsx(ze,{value:d.topic,onChange:t=>p(n,"topic",t),topics:x}),(m==null?void 0:m.payload_schema)&&e.jsxs("div",{className:"mt-3 p-3 rounded-md bg-surface-sunken border border-surface-border",children:[e.jsx("p",{className:"text-[10px] text-text-quaternary mb-1 uppercase tracking-wider font-medium",children:"Payload Schema"}),e.jsx("pre",{className:"text-[11px] font-mono text-text-secondary whitespace-pre-wrap overflow-x-auto max-h-40",children:JSON.stringify(m.payload_schema.properties??m.payload_schema,null,2)}),m.description&&e.jsx("p",{className:"text-[10px] text-text-tertiary mt-2 italic",children:m.description})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:S,children:"Run this reaction"}),e.jsx(ae,{reactionType:d.reaction_type,onReactionTypeChange:t=>p(n,"reaction_type",t),workflowType:d.workflow_type,onWorkflowTypeChange:t=>p(n,"workflow_type",t),pipelineId:d.pipeline_id,onPipelineIdChange:t=>p(n,"pipeline_id",t),serverId:d.server_id,toolName:d.tool_name,onCapabilityChange:(t,i)=>{var A;const b=[...s.subscriptions],g={...b[n],server_id:t,tool_name:i},k=u.find(w=>w.serverId===t&&w.name===i),E=(A=k==null?void 0:k.inputSchema)==null?void 0:A.properties;if(E&&i){const w={};for(const P of Object.keys(E))P.startsWith("_")||(w[P]=`{event.data.${P}}`);g.input_mapping=JSON.stringify(w,null,2)}b[n]=g,a("subscriptions",b)},mcpPrompt:d.mcp_prompt,onMcpPromptChange:t=>p(n,"mcp_prompt",t)})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-6",children:[e.jsxs("div",{children:[e.jsx("label",{className:S,children:"As identity"}),e.jsx(te,{selected:d.execute_as,onChange:t=>p(n,"execute_as",t)}),e.jsx("p",{className:_,children:"Identity used when invoking the workflow."})]}),e.jsxs("div",{children:[e.jsx("label",{className:S,children:"But only if"}),e.jsx("input",{type:"text",value:d.filter,onChange:t=>p(n,"filter",t.target.value),placeholder:'{"extension": "png"}',className:`${R} font-mono text-xs`}),e.jsx("p",{className:_,children:"JSON filter against event.data. Click an operator to insert:"}),e.jsx("div",{className:"flex flex-wrap gap-1.5 mt-1.5",children:[{label:"equals",value:'{"key": "val"}'},{label:"not equal",value:'{"key": {"$ne": "val"}}'},{label:"in list",value:'{"key": {"$in": ["a", "b"]}}'},{label:"exists",value:'{"key": {"$exists": true}}'}].map(t=>e.jsx("button",{type:"button",onClick:()=>p(n,"filter",t.value),className:"px-2 py-0.5 text-[10px] font-mono rounded bg-accent/8 text-accent hover:bg-accent/15 transition-colors",children:t.label},t.label))})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:S,children:"With this data"}),d.reaction_type==="capability"&&d.tool_name?e.jsx(Fe,{tool:u.find(t=>t.serverId===d.server_id&&t.name===d.tool_name),value:d.input_mapping,onChange:t=>p(n,"input_mapping",t),eventSchema:m==null?void 0:m.payload_schema}):e.jsxs(e.Fragment,{children:[e.jsx("textarea",{value:d.input_mapping,onChange:t=>p(n,"input_mapping",t.target.value),rows:10,className:L,placeholder:`{
4
4
  "data": {
@@ -13,4 +13,4 @@ This takes effect when you save.`)&&f(i)},className:"opacity-0 group-hover/sub:o
13
13
  This takes effect when you save.`)&&n(f)},className:"opacity-0 group-hover/sched:opacity-100 px-2 text-text-quaternary hover:text-status-error transition-all",title:"Remove",children:e.jsx(Z,{className:"w-3 h-3"})})]},f)),e.jsxs("button",{onClick:u,className:"w-full flex items-center gap-1.5 px-3 py-2 text-[11px] text-accent hover:text-accent-hover transition-colors",children:[e.jsx(T,{className:"w-3 h-3"})," Add"]})]}),p&&e.jsxs("div",{className:"flex-1 min-w-0 space-y-12",children:[e.jsxs("div",{children:[e.jsx("label",{className:S,children:"Run every"}),e.jsx("input",{type:"text",value:p.cron,onChange:o=>x(r,"cron",o.target.value),placeholder:"0 * * * *",className:`${R} font-mono`}),p.cron&&e.jsx("p",{className:"text-[11px] text-accent/80 mt-1",children:z(p.cron)}),e.jsx("div",{className:"flex gap-3 mt-2 overflow-x-auto",children:Be.map(o=>e.jsx("button",{type:"button",onClick:()=>x(r,"cron",o),className:`text-[10px] font-mono whitespace-nowrap transition-colors ${p.cron===o?"text-accent font-medium":"text-accent/50 hover:text-accent"}`,children:z(o)},o))})]}),e.jsxs("div",{children:[e.jsx("label",{className:S,children:"Run this reaction"}),e.jsx(ae,{reactionType:p.reaction_type,onReactionTypeChange:o=>x(r,"reaction_type",o),workflowType:p.workflow_type,onWorkflowTypeChange:o=>x(r,"workflow_type",o),pipelineId:p.pipeline_id,onPipelineIdChange:o=>x(r,"pipeline_id",o),serverId:p.server_id,toolName:p.tool_name,onCapabilityChange:(o,f)=>{x(r,"server_id",o),x(r,"tool_name",f)},availableTypes:["durable","pipeline","capability"]})]}),e.jsxs("div",{children:[e.jsx("label",{className:S,children:"As identity"}),e.jsx(te,{selected:p.execute_as,onChange:o=>x(r,"execute_as",o)}),e.jsx("p",{className:_,children:"Identity used when invoking."})]}),e.jsxs("div",{children:[e.jsx("label",{className:S,children:"With this data"}),e.jsx("textarea",{value:p.envelope,onChange:o=>x(r,"envelope",o.target.value),rows:10,className:L,placeholder:`{
14
14
  "data": { "source": "cron" }
15
15
  }`}),e.jsx("p",{className:_,children:"Static payload passed to the workflow on each invocation."})]})]})]})]})}function W({icon:s,color:a,title:r,children:l}){return e.jsxs("div",{className:"mb-10",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2 pb-1.5 border-b border-surface-border/40",children:[e.jsx(s,{className:`w-3.5 h-3.5 ${a}`,strokeWidth:1.5}),e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-widest text-accent/80",children:r})]}),e.jsx("div",{className:"pl-5.5",children:l})]})}function M({label:s,children:a}){return e.jsxs("div",{className:"flex gap-3 py-0.5",children:[e.jsx("span",{className:"text-[10px] text-text-quaternary w-20 shrink-0",children:s}),e.jsx("span",{className:"text-xs text-text-primary",children:a})]})}function Ye({form:s}){return e.jsxs("div",{children:[e.jsxs(W,{icon:V,color:"text-accent",title:"Identity",children:[e.jsx(M,{label:"Name",children:s.name||"—"}),s.description&&e.jsx(M,{label:"Description",children:s.description})]}),(s.goals||s.rules)&&e.jsxs(W,{icon:ee,color:"text-accent",title:"Motivation",children:[s.goals&&e.jsx(M,{label:"Goals",children:s.goals}),s.rules&&e.jsx(M,{label:"Rules",children:s.rules})]}),e.jsx(W,{icon:U,color:"text-accent",title:"Knowledge",children:e.jsx(M,{label:"Domain",children:s.knowledge_domain||"None"})}),e.jsxs("div",{className:"grid grid-cols-2 gap-x-10",children:[e.jsx(W,{icon:Y,color:"text-accent",title:`Subscriptions (${s.subscriptions.length})`,children:s.subscriptions.length===0?e.jsx("span",{className:"text-[11px] text-text-quaternary",children:"None configured"}):e.jsx("div",{className:"divide-y divide-surface-border/30",children:s.subscriptions.map((a,r)=>e.jsxs("div",{className:"flex items-center py-1.5",children:[e.jsx("div",{className:"flex-1 min-w-0",children:e.jsx(oe,{topic:a.topic||"unset"})}),e.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[e.jsx("span",{className:"text-text-quaternary text-[10px]",children:"→"}),a.workflow_type?e.jsx(Q,{type:a.workflow_type}):e.jsx("span",{className:"text-[11px] text-text-quaternary",children:a.reaction_type})]})]},r))})}),e.jsx(W,{icon:G,color:"text-accent",title:`Schedules (${s.schedules.length})`,children:s.schedules.length===0?e.jsx("span",{className:"text-[11px] text-text-quaternary",children:"None configured"}):e.jsx("div",{className:"divide-y divide-surface-border/30",children:s.schedules.map((a,r)=>e.jsxs("div",{className:"flex items-center py-1.5",children:[e.jsx("div",{className:"flex-1 min-w-0",children:e.jsx(de,{cron:a.cron})}),e.jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[e.jsx("span",{className:"text-text-quaternary text-[10px]",children:"→"}),a.workflow_type?e.jsx(Q,{type:a.workflow_type}):e.jsx("span",{className:"text-[11px] text-text-quaternary",children:"no workflow"})]})]},r))})})]}),e.jsx("div",{className:"border-l-2 border-status-success/30 pl-3 py-2 mt-6",children:e.jsx("p",{className:"text-[11px] text-text-tertiary leading-relaxed",children:"After saving, subscriptions and schedules activate immediately. You can pause the automation anytime."})})]})}const Ge=[{id:1,label:"Identity",icon:V},{id:2,label:"Motivation",icon:ee},{id:3,label:"Knowledge",icon:U},{id:4,label:"Subscriptions",icon:Y},{id:5,label:"Schedules",icon:G},{id:6,label:"Review",icon:ye}];function dt(){var H;const{id:s}=_e(),a=!s,r=ke(),{data:l}=fe(),u=!!((H=l==null?void 0:l.ai)!=null&&H.enabled)?"Agent":"Automation",{data:n,isLoading:h}=re(a?null:s),{data:p}=pe(a?null:s),o=ce(),f=le(),c=xe(),d=ue(),y=me(),[m,t]=v.useState(X),[i,b]=v.useState(!1),[g,k]=v.useState(""),[E,A]=Ce(),w=parseInt(E.get("step")||"1",10),P=v.useCallback(j=>{A(N=>{const q=new URLSearchParams(N);return q.set("step",String(j)),q},{replace:!0})},[A]);v.useEffect(()=>{if(!i){if(a){t(X),b(!0);return}n&&p&&(t(Re(n,p.subscriptions??[])),b(!0))}},[n,p,a,i]);const I=(j,N)=>t(q=>({...q,[j]:N})),ne=async()=>{k("");try{const j=Ae(m);let N=s;a?N=(await o.mutateAsync(j)).id:await f.mutateAsync({id:s,...j});const q=Oe(m),ie=(p==null?void 0:p.subscriptions)??[],J=new Set(ie.map(C=>C.id));for(const C of q)if(C.id&&J.has(C.id)){const{id:F,...D}=C;await d.mutateAsync({agentId:N,subId:F,...D}),J.delete(F)}else{const{id:F,...D}=C;await c.mutateAsync({agentId:N,...D})}for(const C of J)await y.mutateAsync({agentId:N,subId:C});r(`/agents/${N}`)}catch(j){k(j.message)}};if(!a&&h)return e.jsxs("div",{className:"animate-pulse space-y-4",children:[e.jsx("div",{className:"h-8 bg-surface-sunken rounded w-48"}),e.jsx("div",{className:"h-60 bg-surface-sunken rounded"})]});const K=o.isPending||f.isPending;return e.jsxs("div",{children:[e.jsx(ve,{title:a?`New ${u}`:`${u}: ${(n==null?void 0:n.id)??""}`,docsHash:"#docs:agents.md"}),e.jsxs("div",{className:"flex gap-10",children:[e.jsxs("nav",{className:"w-44 shrink-0 sticky top-0 self-start pt-2",children:[e.jsx("div",{className:"space-y-0.5",children:Ge.map(j=>{const N=j.icon,q=w===j.id;return e.jsxs("button",{onClick:()=>P(j.id),className:`w-full flex items-center gap-2.5 px-3 py-2 rounded-md text-left transition-colors ${q?"bg-accent/10 text-accent":"text-text-tertiary hover:text-text-primary hover:bg-surface-hover"}`,children:[e.jsx(N,{className:"w-3.5 h-3.5 shrink-0",strokeWidth:1.5}),e.jsx("span",{className:"text-xs font-medium",children:j.label})]},j.id)})}),e.jsxs("div",{className:"mt-8 pt-4 border-t border-surface-border space-y-2",children:[e.jsx("button",{onClick:ne,disabled:!m.name.trim()||K,className:"w-full btn-primary text-xs disabled:opacity-50",children:K?"Saving...":a?`Create ${u}`:"Save"}),e.jsx("button",{onClick:()=>r(a?"/agents":`/agents/${s}`),className:"w-full btn-ghost text-xs",children:"Cancel"})]}),g&&e.jsx("p",{className:"text-xs text-status-error mt-3",children:g})]}),e.jsxs("div",{className:"flex-1 min-w-0 pt-2",children:[w===1&&e.jsx($e,{form:m,set:I}),w===2&&e.jsx(Pe,{form:m,set:I}),w===3&&e.jsx(Ie,{form:m,set:I}),w===4&&e.jsx(Je,{form:m,set:I}),w===5&&e.jsx(Ue,{form:m,set:I}),w===6&&e.jsx(Ye,{form:m})]})]})]})}export{dt as AgentConfigPage};
16
- //# sourceMappingURL=AgentConfigPage-CUPm8FjH.js.map
16
+ //# sourceMappingURL=AgentConfigPage-B1Jc6iJk.js.map