@hotmeshio/long-tail 0.16.2 → 0.16.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 (200) hide show
  1. package/build/api/exports.d.ts +15 -0
  2. package/build/api/exports.js +35 -0
  3. package/build/bin/ltc.js +4 -0
  4. package/build/lib/cli/commands/workflows.d.ts +3 -0
  5. package/build/lib/cli/commands/workflows.js +22 -0
  6. package/build/routes/exports.js +11 -0
  7. package/build/sdk/index.d.ts +1 -0
  8. package/build/sdk/index.js +1 -0
  9. package/build/services/export/index.d.ts +19 -0
  10. package/build/services/export/index.js +53 -33
  11. package/build/shared/form-validation/field-validator.d.ts +8 -6
  12. package/build/shared/form-validation/field-validator.js +23 -15
  13. package/build/shared/form-validation/x-lt-options.js +35 -21
  14. package/build/system/mcp-servers/admin/exports.js +15 -0
  15. package/build/system/mcp-servers/admin/schemas.d.ts +7 -0
  16. package/build/system/mcp-servers/admin/schemas.js +5 -2
  17. package/build/system/seed/tool-manifests-admin.js +1 -0
  18. package/dashboard/dist/assets/{AdminDashboard-BrOvvDHF.js → AdminDashboard-Csq-oxmY.js} +2 -2
  19. package/dashboard/dist/assets/{AdminDashboard-BrOvvDHF.js.map → AdminDashboard-Csq-oxmY.js.map} +1 -1
  20. package/dashboard/dist/assets/{AgentConfigPage-CtVq8J0L.js → AgentConfigPage-Bnr5zbyJ.js} +2 -2
  21. package/dashboard/dist/assets/{AgentConfigPage-CtVq8J0L.js.map → AgentConfigPage-Bnr5zbyJ.js.map} +1 -1
  22. package/dashboard/dist/assets/{AgentDetailPage-DTfTQDug.js → AgentDetailPage-DgRu-Fhg.js} +2 -2
  23. package/dashboard/dist/assets/{AgentDetailPage-DTfTQDug.js.map → AgentDetailPage-DgRu-Fhg.js.map} +1 -1
  24. package/dashboard/dist/assets/{AgentsPage-vCTc3Qvj.js → AgentsPage-BuyXKkP3.js} +2 -2
  25. package/dashboard/dist/assets/{AgentsPage-vCTc3Qvj.js.map → AgentsPage-BuyXKkP3.js.map} +1 -1
  26. package/dashboard/dist/assets/{AvailableEscalationsPage-DJODShd7.js → AvailableEscalationsPage-BIzTjUMG.js} +2 -2
  27. package/dashboard/dist/assets/{AvailableEscalationsPage-DJODShd7.js.map → AvailableEscalationsPage-BIzTjUMG.js.map} +1 -1
  28. package/dashboard/dist/assets/{BotPicker-GU44inXA.js → BotPicker-xpPjRnkf.js} +2 -2
  29. package/dashboard/dist/assets/{BotPicker-GU44inXA.js.map → BotPicker-xpPjRnkf.js.map} +1 -1
  30. package/dashboard/dist/assets/{BulkAssignModal-ChqzG6FY.js → BulkAssignModal-CQ3k-7rO.js} +2 -2
  31. package/dashboard/dist/assets/{BulkAssignModal-ChqzG6FY.js.map → BulkAssignModal-CQ3k-7rO.js.map} +1 -1
  32. package/dashboard/dist/assets/{CapabilitiesPage-Y2hycdPY.js → CapabilitiesPage-DCkEJ0In.js} +2 -2
  33. package/dashboard/dist/assets/{CapabilitiesPage-Y2hycdPY.js.map → CapabilitiesPage-DCkEJ0In.js.map} +1 -1
  34. package/dashboard/dist/assets/{CollapsibleSection-CmCwt_Rs.js → CollapsibleSection-10sJSNNF.js} +2 -2
  35. package/dashboard/dist/assets/{CollapsibleSection-CmCwt_Rs.js.map → CollapsibleSection-10sJSNNF.js.map} +1 -1
  36. package/dashboard/dist/assets/{CountdownTimer-Bx2XXJOd.js → CountdownTimer-BFy9Joxb.js} +2 -2
  37. package/dashboard/dist/assets/{CountdownTimer-Bx2XXJOd.js.map → CountdownTimer-BFy9Joxb.js.map} +1 -1
  38. package/dashboard/dist/assets/{CredentialsPage-CoX_PNBe.js → CredentialsPage-DIR-fUoF.js} +2 -2
  39. package/dashboard/dist/assets/{CredentialsPage-CoX_PNBe.js.map → CredentialsPage-DIR-fUoF.js.map} +1 -1
  40. package/dashboard/dist/assets/{CronLabel-CVYKRipP.js → CronLabel-C66ASvgE.js} +2 -2
  41. package/dashboard/dist/assets/{CronLabel-CVYKRipP.js.map → CronLabel-C66ASvgE.js.map} +1 -1
  42. package/dashboard/dist/assets/{ElapsedCell-jRURiCRW.js → ElapsedCell-RWvrCHn7.js} +2 -2
  43. package/dashboard/dist/assets/{ElapsedCell-jRURiCRW.js.map → ElapsedCell-RWvrCHn7.js.map} +1 -1
  44. package/dashboard/dist/assets/{EntityTimelinePanel-G6nzvgpl.js → EntityTimelinePanel-CNaYs3nA.js} +2 -2
  45. package/dashboard/dist/assets/{EntityTimelinePanel-G6nzvgpl.js.map → EntityTimelinePanel-CNaYs3nA.js.map} +1 -1
  46. package/dashboard/dist/assets/{EscalationListSchemaPage-D-rVTQ1m.js → EscalationListSchemaPage-BsRQtDDc.js} +2 -2
  47. package/dashboard/dist/assets/{EscalationListSchemaPage-D-rVTQ1m.js.map → EscalationListSchemaPage-BsRQtDDc.js.map} +1 -1
  48. package/dashboard/dist/assets/{EscalationSchemaPage-CV0R_xY9.js → EscalationSchemaPage-BMYQmwGA.js} +2 -2
  49. package/dashboard/dist/assets/{EscalationSchemaPage-CV0R_xY9.js.map → EscalationSchemaPage-BMYQmwGA.js.map} +1 -1
  50. package/dashboard/dist/assets/{EscalationsOverview-DMdx15CQ.js → EscalationsOverview-yv4Yn6zl.js} +2 -2
  51. package/dashboard/dist/assets/{EscalationsOverview-DMdx15CQ.js.map → EscalationsOverview-yv4Yn6zl.js.map} +1 -1
  52. package/dashboard/dist/assets/{EventTable-CIvsdt-q.js → EventTable-ebZK7vXl.js} +2 -2
  53. package/dashboard/dist/assets/{EventTable-CIvsdt-q.js.map → EventTable-ebZK7vXl.js.map} +1 -1
  54. package/dashboard/dist/assets/{FilterBar-DWYGkVRH.js → FilterBar-D6JDMSHi.js} +2 -2
  55. package/dashboard/dist/assets/{FilterBar-DWYGkVRH.js.map → FilterBar-D6JDMSHi.js.map} +1 -1
  56. package/dashboard/dist/assets/{GraphInvokePage-BGHlXh4r.js → GraphInvokePage-BFntNMop.js} +2 -2
  57. package/dashboard/dist/assets/{GraphInvokePage-BGHlXh4r.js.map → GraphInvokePage-BFntNMop.js.map} +1 -1
  58. package/dashboard/dist/assets/{HomePage-BHOnp8SK.js → HomePage-B24GH9Ga.js} +2 -2
  59. package/dashboard/dist/assets/{HomePage-BHOnp8SK.js.map → HomePage-B24GH9Ga.js.map} +1 -1
  60. package/dashboard/dist/assets/{ListToolbar-iOgn_db5.js → ListToolbar-DlGreUpP.js} +2 -2
  61. package/dashboard/dist/assets/{ListToolbar-iOgn_db5.js.map → ListToolbar-DlGreUpP.js.map} +1 -1
  62. package/dashboard/dist/assets/{McpOverview-Be9sMKCA.js → McpOverview-D0G2vACW.js} +2 -2
  63. package/dashboard/dist/assets/{McpOverview-Be9sMKCA.js.map → McpOverview-D0G2vACW.js.map} +1 -1
  64. package/dashboard/dist/assets/{McpQueryDetailPage-BIgpmGJN.js → McpQueryDetailPage-LZO04PEB.js} +2 -2
  65. package/dashboard/dist/assets/{McpQueryDetailPage-BIgpmGJN.js.map → McpQueryDetailPage-LZO04PEB.js.map} +1 -1
  66. package/dashboard/dist/assets/{McpQueryPage-Okcxw_Um.js → McpQueryPage-BIwSDHgB.js} +2 -2
  67. package/dashboard/dist/assets/{McpQueryPage-Okcxw_Um.js.map → McpQueryPage-BIwSDHgB.js.map} +1 -1
  68. package/dashboard/dist/assets/{McpRunDetailPage-DT8kOfih.js → McpRunDetailPage-DjYWJLWh.js} +2 -2
  69. package/dashboard/dist/assets/{McpRunDetailPage-DT8kOfih.js.map → McpRunDetailPage-DjYWJLWh.js.map} +1 -1
  70. package/dashboard/dist/assets/{McpRunsPage-BXhoP77D.js → McpRunsPage-CTT7B-pf.js} +2 -2
  71. package/dashboard/dist/assets/{McpRunsPage-BXhoP77D.js.map → McpRunsPage-CTT7B-pf.js.map} +1 -1
  72. package/dashboard/dist/assets/{OperationsPage-rVhC8JPv.js → OperationsPage-Dd0WxAwH.js} +2 -2
  73. package/dashboard/dist/assets/{OperationsPage-rVhC8JPv.js.map → OperationsPage-Dd0WxAwH.js.map} +1 -1
  74. package/dashboard/dist/assets/{OperatorDashboard-CIt061hu.js → OperatorDashboard-BfKMaVzV.js} +2 -2
  75. package/dashboard/dist/assets/{OperatorDashboard-CIt061hu.js.map → OperatorDashboard-BfKMaVzV.js.map} +1 -1
  76. package/dashboard/dist/assets/{PersonaDetailPage-r46uNF4E.js → PersonaDetailPage-B48MX4lq.js} +2 -2
  77. package/dashboard/dist/assets/{PersonaDetailPage-r46uNF4E.js.map → PersonaDetailPage-B48MX4lq.js.map} +1 -1
  78. package/dashboard/dist/assets/{PersonasPage-CayYv9-j.js → PersonasPage-dGX6E96g.js} +2 -2
  79. package/dashboard/dist/assets/{PersonasPage-CayYv9-j.js.map → PersonasPage-dGX6E96g.js.map} +1 -1
  80. package/dashboard/dist/assets/{ProcessDetailPage-dn7lkM4c.js → ProcessDetailPage-Co5oCg31.js} +2 -2
  81. package/dashboard/dist/assets/{ProcessDetailPage-dn7lkM4c.js.map → ProcessDetailPage-Co5oCg31.js.map} +1 -1
  82. package/dashboard/dist/assets/{ProcessesListPage-DOp5J6Be.js → ProcessesListPage-CrB4VAS6.js} +2 -2
  83. package/dashboard/dist/assets/{ProcessesListPage-DOp5J6Be.js.map → ProcessesListPage-CrB4VAS6.js.map} +1 -1
  84. package/dashboard/dist/assets/{RoleDetailPage-DOlNoiAK.js → RoleDetailPage-C4UTNx0p.js} +2 -2
  85. package/dashboard/dist/assets/{RoleDetailPage-DOlNoiAK.js.map → RoleDetailPage-C4UTNx0p.js.map} +1 -1
  86. package/dashboard/dist/assets/{RolesPage-DPppT6Zl.js → RolesPage-BXo5RirX.js} +2 -2
  87. package/dashboard/dist/assets/{RolesPage-DPppT6Zl.js.map → RolesPage-BXo5RirX.js.map} +1 -1
  88. package/dashboard/dist/assets/{RunAsSelector-BgntKfSA.js → RunAsSelector-BRQiGv2-.js} +2 -2
  89. package/dashboard/dist/assets/{RunAsSelector-BgntKfSA.js.map → RunAsSelector-BRQiGv2-.js.map} +1 -1
  90. package/dashboard/dist/assets/{ScanCodesPage-DPm1lG79.js → ScanCodesPage-BUT5wjzC.js} +2 -2
  91. package/dashboard/dist/assets/{ScanCodesPage-DPm1lG79.js.map → ScanCodesPage-BUT5wjzC.js.map} +1 -1
  92. package/dashboard/dist/assets/{ScanSchemeDetailPage-CuoG89q1.js → ScanSchemeDetailPage-CkzoOyjd.js} +2 -2
  93. package/dashboard/dist/assets/{ScanSchemeDetailPage-CuoG89q1.js.map → ScanSchemeDetailPage-CkzoOyjd.js.map} +1 -1
  94. package/dashboard/dist/assets/{ScanStationPage-2SLXqqs0.js → ScanStationPage-DYamACNZ.js} +2 -2
  95. package/dashboard/dist/assets/{ScanStationPage-2SLXqqs0.js.map → ScanStationPage-DYamACNZ.js.map} +1 -1
  96. package/dashboard/dist/assets/{StickyPagination-Bc_Mzu_R.js → StickyPagination-B3yiAcrs.js} +2 -2
  97. package/dashboard/dist/assets/{StickyPagination-Bc_Mzu_R.js.map → StickyPagination-B3yiAcrs.js.map} +1 -1
  98. package/dashboard/dist/assets/{StreamMessageDetail-S1cnLGkf.js → StreamMessageDetail-C56PtZSb.js} +2 -2
  99. package/dashboard/dist/assets/{StreamMessageDetail-S1cnLGkf.js.map → StreamMessageDetail-C56PtZSb.js.map} +1 -1
  100. package/dashboard/dist/assets/{SwimlaneTimeline-BUu2sPmY.js → SwimlaneTimeline-D64ep5KY.js} +2 -2
  101. package/dashboard/dist/assets/{SwimlaneTimeline-BUu2sPmY.js.map → SwimlaneTimeline-D64ep5KY.js.map} +1 -1
  102. package/dashboard/dist/assets/{TaskDetailPage-BMfNNtbN.js → TaskDetailPage-C2V7BcgB.js} +2 -2
  103. package/dashboard/dist/assets/{TaskDetailPage-BMfNNtbN.js.map → TaskDetailPage-C2V7BcgB.js.map} +1 -1
  104. package/dashboard/dist/assets/{TasksListPage-BmNnopOU.js → TasksListPage-C4ctoAa0.js} +2 -2
  105. package/dashboard/dist/assets/{TasksListPage-BmNnopOU.js.map → TasksListPage-C4ctoAa0.js.map} +1 -1
  106. package/dashboard/dist/assets/{TimeAgo-Dip7gQQx.js → TimeAgo-BpJ7In27.js} +2 -2
  107. package/dashboard/dist/assets/{TimeAgo-Dip7gQQx.js.map → TimeAgo-BpJ7In27.js.map} +1 -1
  108. package/dashboard/dist/assets/{TimestampCell-DRAYnIrx.js → TimestampCell-BKrIaU_R.js} +2 -2
  109. package/dashboard/dist/assets/{TimestampCell-DRAYnIrx.js.map → TimestampCell-BKrIaU_R.js.map} +1 -1
  110. package/dashboard/dist/assets/{ToolTestPanel-CQVYC3Ba.js → ToolTestPanel-CdTXWPqn.js} +2 -2
  111. package/dashboard/dist/assets/{ToolTestPanel-CQVYC3Ba.js.map → ToolTestPanel-CdTXWPqn.js.map} +1 -1
  112. package/dashboard/dist/assets/{TopicDetailPage-Bmtwuksg.js → TopicDetailPage-B6tb1RG4.js} +2 -2
  113. package/dashboard/dist/assets/{TopicDetailPage-Bmtwuksg.js.map → TopicDetailPage-B6tb1RG4.js.map} +1 -1
  114. package/dashboard/dist/assets/{TopicsPage-DIgF7-mJ.js → TopicsPage-DgdOKjwE.js} +2 -2
  115. package/dashboard/dist/assets/{TopicsPage-DIgF7-mJ.js.map → TopicsPage-DgdOKjwE.js.map} +1 -1
  116. package/dashboard/dist/assets/{UserName-DNKFz7X9.js → UserName-A-ET2GnX.js} +2 -2
  117. package/dashboard/dist/assets/{UserName-DNKFz7X9.js.map → UserName-A-ET2GnX.js.map} +1 -1
  118. package/dashboard/dist/assets/{WorkflowExecutionPage-DraIBNpl.js → WorkflowExecutionPage-CzhoRsis.js} +2 -2
  119. package/dashboard/dist/assets/{WorkflowExecutionPage-DraIBNpl.js.map → WorkflowExecutionPage-CzhoRsis.js.map} +1 -1
  120. package/dashboard/dist/assets/{WorkflowsDashboard-BH7kmFjM.js → WorkflowsDashboard-B_tCYLei.js} +2 -2
  121. package/dashboard/dist/assets/{WorkflowsDashboard-BH7kmFjM.js.map → WorkflowsDashboard-B_tCYLei.js.map} +1 -1
  122. package/dashboard/dist/assets/{WorkflowsOverview-C98pCjQX.js → WorkflowsOverview-B4Bh8MIo.js} +2 -2
  123. package/dashboard/dist/assets/{WorkflowsOverview-C98pCjQX.js.map → WorkflowsOverview-B4Bh8MIo.js.map} +1 -1
  124. package/dashboard/dist/assets/{YamlWorkflowDetailPage-BWQjXenZ.js → YamlWorkflowDetailPage-zRrcxk0e.js} +2 -2
  125. package/dashboard/dist/assets/{YamlWorkflowDetailPage-BWQjXenZ.js.map → YamlWorkflowDetailPage-zRrcxk0e.js.map} +1 -1
  126. package/dashboard/dist/assets/{YamlWorkflowsPage-BGTI_sdP.js → YamlWorkflowsPage-DMK3ojp3.js} +2 -2
  127. package/dashboard/dist/assets/{YamlWorkflowsPage-BGTI_sdP.js.map → YamlWorkflowsPage-DMK3ojp3.js.map} +1 -1
  128. package/dashboard/dist/assets/{agents-DfMrlw54.js → agents-B67yyE1z.js} +2 -2
  129. package/dashboard/dist/assets/{agents-DfMrlw54.js.map → agents-B67yyE1z.js.map} +1 -1
  130. package/dashboard/dist/assets/{bots-B9zS0z7D.js → bots-pSLFdOm-.js} +2 -2
  131. package/dashboard/dist/assets/{bots-B9zS0z7D.js.map → bots-pSLFdOm-.js.map} +1 -1
  132. package/dashboard/dist/assets/{capabilities-DkLM1xgH.js → capabilities-B2Dem6zw.js} +2 -2
  133. package/dashboard/dist/assets/{capabilities-DkLM1xgH.js.map → capabilities-B2Dem6zw.js.map} +1 -1
  134. package/dashboard/dist/assets/{controlplane-SJK1yvbm.js → controlplane-DGdaM9f3.js} +2 -2
  135. package/dashboard/dist/assets/{controlplane-SJK1yvbm.js.map → controlplane-DGdaM9f3.js.map} +1 -1
  136. package/dashboard/dist/assets/{escalation-columns-BvAylNM1.js → escalation-columns-BM7vp-hY.js} +2 -2
  137. package/dashboard/dist/assets/{escalation-columns-BvAylNM1.js.map → escalation-columns-BM7vp-hY.js.map} +1 -1
  138. package/dashboard/dist/assets/{index-DamcWcqG.js → index-5eRsj758.js} +2 -2
  139. package/dashboard/dist/assets/{index-DamcWcqG.js.map → index-5eRsj758.js.map} +1 -1
  140. package/dashboard/dist/assets/{index-CLxuBb17.js → index-BD6nhSOu.js} +2 -2
  141. package/dashboard/dist/assets/{index-CLxuBb17.js.map → index-BD6nhSOu.js.map} +1 -1
  142. package/dashboard/dist/assets/{index-DvmyIGeZ.js → index-Baf-tOnA.js} +2 -2
  143. package/dashboard/dist/assets/{index-DvmyIGeZ.js.map → index-Baf-tOnA.js.map} +1 -1
  144. package/dashboard/dist/assets/{index-ClVNU3G3.js → index-Brf_fpE4.js} +2 -2
  145. package/dashboard/dist/assets/{index-ClVNU3G3.js.map → index-Brf_fpE4.js.map} +1 -1
  146. package/dashboard/dist/assets/{index-CXe2d5kg.js → index-CGoXyPlO.js} +2 -2
  147. package/dashboard/dist/assets/{index-CXe2d5kg.js.map → index-CGoXyPlO.js.map} +1 -1
  148. package/dashboard/dist/assets/{index-DazfFRUx.js → index-CKt5YK2z.js} +2 -2
  149. package/dashboard/dist/assets/{index-DazfFRUx.js.map → index-CKt5YK2z.js.map} +1 -1
  150. package/dashboard/dist/assets/index-CLq228E2.js +3 -0
  151. package/dashboard/dist/assets/index-CLq228E2.js.map +1 -0
  152. package/dashboard/dist/assets/{index-DKXOIcO3.js → index-Cd2RdpOx.js} +2 -2
  153. package/dashboard/dist/assets/{index-DKXOIcO3.js.map → index-Cd2RdpOx.js.map} +1 -1
  154. package/dashboard/dist/assets/{index-Cw-V0VhS.js → index-Cn__VdSf.js} +2 -2
  155. package/dashboard/dist/assets/{index-Cw-V0VhS.js.map → index-Cn__VdSf.js.map} +1 -1
  156. package/dashboard/dist/assets/{index-DSfY8oDp.js → index-CunrdEfT.js} +2 -2
  157. package/dashboard/dist/assets/{index-DSfY8oDp.js.map → index-CunrdEfT.js.map} +1 -1
  158. package/dashboard/dist/assets/{index-D2IRxjSf.js → index-DajlugVw.js} +2 -2
  159. package/dashboard/dist/assets/{index-D2IRxjSf.js.map → index-DajlugVw.js.map} +1 -1
  160. package/dashboard/dist/assets/{index-PjiXOVdw.js → index-DbLOvfv5.js} +2 -2
  161. package/dashboard/dist/assets/{index-PjiXOVdw.js.map → index-DbLOvfv5.js.map} +1 -1
  162. package/dashboard/dist/assets/{index-zrTQcPjB.js → index-zqoZDL5j.js} +3 -3
  163. package/dashboard/dist/assets/{index-zrTQcPjB.js.map → index-zqoZDL5j.js.map} +1 -1
  164. package/dashboard/dist/assets/{knowledge-BNp6MH-4.js → knowledge-BExXJ0Ib.js} +2 -2
  165. package/dashboard/dist/assets/{knowledge-BNp6MH-4.js.map → knowledge-BExXJ0Ib.js.map} +1 -1
  166. package/dashboard/dist/assets/{mcp-Bb1k5rv-.js → mcp-D2WA-SHc.js} +2 -2
  167. package/dashboard/dist/assets/{mcp-Bb1k5rv-.js.map → mcp-D2WA-SHc.js.map} +1 -1
  168. package/dashboard/dist/assets/{mcp-query-QVakMQnS.js → mcp-query-4Tsojk-z.js} +2 -2
  169. package/dashboard/dist/assets/{mcp-query-QVakMQnS.js.map → mcp-query-4Tsojk-z.js.map} +1 -1
  170. package/dashboard/dist/assets/{personas-DV2JUjVj.js → personas-Dy_XSYfJ.js} +2 -2
  171. package/dashboard/dist/assets/{personas-DV2JUjVj.js.map → personas-Dy_XSYfJ.js.map} +1 -1
  172. package/dashboard/dist/assets/{pipelines-BkVB7Q0p.js → pipelines-yDHgNtdx.js} +2 -2
  173. package/dashboard/dist/assets/{pipelines-BkVB7Q0p.js.map → pipelines-yDHgNtdx.js.map} +1 -1
  174. package/dashboard/dist/assets/{tasks-DvYWcASM.js → tasks-CGoPhQyw.js} +2 -2
  175. package/dashboard/dist/assets/{tasks-DvYWcASM.js.map → tasks-CGoPhQyw.js.map} +1 -1
  176. package/dashboard/dist/assets/{topics-B9zXFuVG.js → topics-DA1MHDwJ.js} +2 -2
  177. package/dashboard/dist/assets/{topics-B9zXFuVG.js.map → topics-DA1MHDwJ.js.map} +1 -1
  178. package/dashboard/dist/assets/{useEventHooks-JDpifqGZ.js → useEventHooks-onx-Z6IY.js} +2 -2
  179. package/dashboard/dist/assets/{useEventHooks-JDpifqGZ.js.map → useEventHooks-onx-Z6IY.js.map} +1 -1
  180. package/dashboard/dist/assets/{useNamespace-Bqr-LdWx.js → useNamespace-BkuU0SeK.js} +2 -2
  181. package/dashboard/dist/assets/{useNamespace-Bqr-LdWx.js.map → useNamespace-BkuU0SeK.js.map} +1 -1
  182. package/dashboard/dist/assets/{useYamlActivityEvents-n3naCEbw.js → useYamlActivityEvents-XXS3wg6-.js} +2 -2
  183. package/dashboard/dist/assets/{useYamlActivityEvents-n3naCEbw.js.map → useYamlActivityEvents-XXS3wg6-.js.map} +1 -1
  184. package/dashboard/dist/assets/{users-BNXLRVTS.js → users-B_9mC6D_.js} +2 -2
  185. package/dashboard/dist/assets/{users-BNXLRVTS.js.map → users-B_9mC6D_.js.map} +1 -1
  186. package/dashboard/dist/assets/{workflows-D8uMBPvQ.js → workflows-5sds1Ko8.js} +2 -2
  187. package/dashboard/dist/assets/{workflows-D8uMBPvQ.js.map → workflows-5sds1Ko8.js.map} +1 -1
  188. package/dashboard/dist/assets/{yaml-workflows-DVDOQM3Y.js → yaml-workflows-CjNa2u3I.js} +2 -2
  189. package/dashboard/dist/assets/{yaml-workflows-DVDOQM3Y.js.map → yaml-workflows-CjNa2u3I.js.map} +1 -1
  190. package/dashboard/dist/index.html +1 -1
  191. package/docs/api/http/workflows.md +35 -0
  192. package/docs/api/mcp/admin.md +14 -0
  193. package/docs/api/sdk/workflows.md +21 -0
  194. package/docs/hitl/lookups.md +10 -0
  195. package/docs/hitl/x-lt-validation.md +2 -1
  196. package/docs/hitl/x-lt-widget.md +1 -1
  197. package/docs/hitl-guide.md +2 -2
  198. package/package.json +2 -2
  199. package/dashboard/dist/assets/index-DTZxHZJO.js +0 -3
  200. package/dashboard/dist/assets/index-DTZxHZJO.js.map +0 -1
@@ -77,6 +77,21 @@ export declare function exportWorkflowExecution(input: {
77
77
  export declare function getWorkflowStatus(input: {
78
78
  workflowId: string;
79
79
  }): Promise<LTApiResult>;
80
+ /**
81
+ * Get a workflow's input and output envelopes — the effortless read.
82
+ *
83
+ * Two narrow lookups (no event stream, no full export): the input is
84
+ * available for the life of the job; the output is null with
85
+ * `status: 'running'` until the workflow completes, making this the natural
86
+ * polling body. A failed run answers `status: 'failed'` with the workflow's
87
+ * error message.
88
+ *
89
+ * @param input.workflowId — the workflow's unique identifier
90
+ * @returns `{ status: 200, data: { workflow_id, status, input, output, error? } }`
91
+ */
92
+ export declare function getWorkflowEnvelopes(input: {
93
+ workflowId: string;
94
+ }): Promise<LTApiResult>;
80
95
  /**
81
96
  * Get the current state data of a workflow.
82
97
  *
@@ -37,6 +37,7 @@ exports.listJobs = listJobs;
37
37
  exports.exportWorkflowState = exportWorkflowState;
38
38
  exports.exportWorkflowExecution = exportWorkflowExecution;
39
39
  exports.getWorkflowStatus = getWorkflowStatus;
40
+ exports.getWorkflowEnvelopes = getWorkflowEnvelopes;
40
41
  exports.getWorkflowState = getWorkflowState;
41
42
  const exportService = __importStar(require("../services/export"));
42
43
  const resolve_1 = require("../services/task/resolve");
@@ -171,6 +172,40 @@ async function getWorkflowStatus(input) {
171
172
  };
172
173
  }
173
174
  }
175
+ /**
176
+ * Get a workflow's input and output envelopes — the effortless read.
177
+ *
178
+ * Two narrow lookups (no event stream, no full export): the input is
179
+ * available for the life of the job; the output is null with
180
+ * `status: 'running'` until the workflow completes, making this the natural
181
+ * polling body. A failed run answers `status: 'failed'` with the workflow's
182
+ * error message.
183
+ *
184
+ * @param input.workflowId — the workflow's unique identifier
185
+ * @returns `{ status: 200, data: { workflow_id, status, input, output, error? } }`
186
+ */
187
+ async function getWorkflowEnvelopes(input) {
188
+ try {
189
+ let resolved;
190
+ try {
191
+ resolved = await (0, resolve_1.resolveWorkflowHandle)(input.workflowId);
192
+ }
193
+ catch {
194
+ return { status: 404, error: 'Workflow not found' };
195
+ }
196
+ const result = await exportService.getWorkflowEnvelopes(input.workflowId, resolved.taskQueue, resolved.workflowName);
197
+ return { status: 200, data: result };
198
+ }
199
+ catch (err) {
200
+ const status = err.status === 404 || err.message?.includes('Not Found') ? 404 : 500;
201
+ return {
202
+ status,
203
+ error: status === 404
204
+ ? 'Workflow data is no longer available (job may have expired)'
205
+ : err.message,
206
+ };
207
+ }
208
+ }
174
209
  /**
175
210
  * Get the current state data of a workflow.
176
211
  *
package/build/bin/ltc.js CHANGED
@@ -259,6 +259,10 @@ wfCmd.command('status <id>')
259
259
  wfCmd.command('result <id>')
260
260
  .option('--json', 'JSON output')
261
261
  .action(wrap(wf.getWorkflowResult));
262
+ wfCmd.command('envelopes <id>')
263
+ .description('The workflow\'s input and output envelopes — light, never blocks')
264
+ .option('--json', 'JSON output')
265
+ .action(wrap(wf.getWorkflowEnvelopes));
262
266
  wfCmd.command('terminate <id>')
263
267
  .action(wrap(wf.terminateWorkflow));
264
268
  // ── Pipelines (YAML Workflows) ──────────────────────────────────────────
@@ -13,4 +13,7 @@ export declare function getWorkflowStatus(id: string, opts: {
13
13
  export declare function getWorkflowResult(id: string, opts: {
14
14
  json?: boolean;
15
15
  }): Promise<void>;
16
+ export declare function getWorkflowEnvelopes(id: string, opts: {
17
+ json?: boolean;
18
+ }): Promise<void>;
16
19
  export declare function terminateWorkflow(id: string): Promise<void>;
@@ -40,6 +40,7 @@ exports.listWorkflows = listWorkflows;
40
40
  exports.invokeWorkflow = invokeWorkflow;
41
41
  exports.getWorkflowStatus = getWorkflowStatus;
42
42
  exports.getWorkflowResult = getWorkflowResult;
43
+ exports.getWorkflowEnvelopes = getWorkflowEnvelopes;
43
44
  exports.terminateWorkflow = terminateWorkflow;
44
45
  const picocolors_1 = __importDefault(require("picocolors"));
45
46
  const client_1 = require("../client");
@@ -98,6 +99,27 @@ async function getWorkflowResult(id, opts) {
98
99
  console.log();
99
100
  }
100
101
  }
102
+ async function getWorkflowEnvelopes(id, opts) {
103
+ const data = await (0, client_1.apiFetch)(`/workflow-states/${id}/envelopes`);
104
+ if (opts.json) {
105
+ console.log(JSON.stringify(data, null, 2));
106
+ return;
107
+ }
108
+ const status = data.status === 'completed' ? picocolors_1.default.green(data.status)
109
+ : data.status === 'failed' ? picocolors_1.default.red(data.status)
110
+ : picocolors_1.default.blue(data.status);
111
+ console.log(`\n ${picocolors_1.default.dim(data.workflow_id)} ${status}`);
112
+ console.log(`\n ${picocolors_1.default.bold('Input')}`);
113
+ console.log(JSON.stringify(data.input, null, 2));
114
+ console.log(`\n ${picocolors_1.default.bold('Output')}`);
115
+ if (data.error) {
116
+ console.log(picocolors_1.default.red(data.error));
117
+ }
118
+ else {
119
+ console.log(data.output === null ? picocolors_1.default.dim('(not yet — still running)') : JSON.stringify(data.output, null, 2));
120
+ }
121
+ console.log();
122
+ }
101
123
  async function terminateWorkflow(id) {
102
124
  await (0, client_1.apiFetch)(`/workflows/terminate/${id}`, { method: 'POST' });
103
125
  console.log(`\n ${picocolors_1.default.green('✓')} Terminated ${picocolors_1.default.dim(id)}\n`);
@@ -95,6 +95,17 @@ router.get('/:workflowId/execution', async (req, res) => {
95
95
  });
96
96
  res.status(result.status).json(result.data ?? { error: result.error });
97
97
  });
98
+ /**
99
+ * GET /api/workflow-states/:workflowId/envelopes
100
+ * The workflow's input and output envelopes — two narrow lookups, no event
101
+ * stream. Output is null with status 'running' until the workflow completes.
102
+ */
103
+ router.get('/:workflowId/envelopes', async (req, res) => {
104
+ const result = await api.getWorkflowEnvelopes({
105
+ workflowId: req.params.workflowId,
106
+ });
107
+ res.status(result.status).json(result.data ?? { error: result.error });
108
+ });
98
109
  /**
99
110
  * GET /api/workflow-states/:workflowId/status
100
111
  * Return only the numeric status semaphore.
@@ -247,6 +247,7 @@ export declare function createClient(options?: LTClientOptions): {
247
247
  options?: Record<string, any>;
248
248
  }, auth?: LTApiAuth) => Promise<LTApiResult<any>>;
249
249
  getStatus: typeof workflowsApi.getWorkflowStatus;
250
+ getEnvelopes: typeof exportsApi.getWorkflowEnvelopes;
250
251
  getResult: typeof workflowsApi.getWorkflowResult;
251
252
  terminate: typeof workflowsApi.terminateWorkflow;
252
253
  export: typeof workflowsApi.exportWorkflow;
@@ -155,6 +155,7 @@ function createClient(options = {}) {
155
155
  workflows: {
156
156
  invoke: bindAuth(workflowsApi.invokeWorkflow, auth),
157
157
  getStatus: workflowsApi.getWorkflowStatus,
158
+ getEnvelopes: exportsApi.getWorkflowEnvelopes,
158
159
  getResult: workflowsApi.getWorkflowResult,
159
160
  terminate: workflowsApi.terminateWorkflow,
160
161
  export: workflowsApi.exportWorkflow,
@@ -24,6 +24,25 @@ export declare function getWorkflowStatus(workflowId: string, taskQueue: string,
24
24
  * system/user classification, and a summary.
25
25
  */
26
26
  export declare function exportWorkflowExecution(workflowId: string, taskQueue: string, workflowName: string, options?: ExecutionExportOptions): Promise<WorkflowExecution>;
27
+ /** The input/output envelope pair plus the derived run status. */
28
+ export interface WorkflowEnvelopes {
29
+ workflow_id: string;
30
+ status: 'running' | 'completed' | 'failed';
31
+ /** The workflow's input — the single LTEnvelope for one-arg workflows, else the args array. */
32
+ input: unknown;
33
+ /** The workflow's return envelope, or null while it is still running or when it failed. */
34
+ output: unknown;
35
+ /** The workflow's error message, present only when status is 'failed'. */
36
+ error?: string;
37
+ }
38
+ /**
39
+ * The effortless read: what went in, what came out. Two narrow lookups —
40
+ * `handle.input()` (one field read, available for the life of the job) and
41
+ * `handle.output()` (one state read, never blocks) — no event stream, no
42
+ * full export. While the workflow runs, `output` is null and `status` says
43
+ * so, making this the natural polling body.
44
+ */
45
+ export declare function getWorkflowEnvelopes(workflowId: string, taskQueue: string, workflowName: string): Promise<WorkflowEnvelopes>;
27
46
  /**
28
47
  * Return the current job state of a workflow.
29
48
  * If the workflow is complete this is also the output.
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.exportWorkflow = exportWorkflow;
4
4
  exports.getWorkflowStatus = getWorkflowStatus;
5
5
  exports.exportWorkflowExecution = exportWorkflowExecution;
6
+ exports.getWorkflowEnvelopes = getWorkflowEnvelopes;
6
7
  exports.getWorkflowState = getWorkflowState;
7
8
  exports.listJobs = listJobs;
8
9
  const db_1 = require("../../lib/db");
@@ -66,21 +67,14 @@ async function getWorkflowStatus(workflowId, taskQueue, workflowName) {
66
67
  async function exportWorkflowExecution(workflowId, taskQueue, workflowName, options) {
67
68
  try {
68
69
  const handle = await (0, client_1.getHandle)(taskQueue, workflowName, workflowId);
69
- const [execution, raw] = await Promise.all([
70
- handle.exportExecution({ ...options, enrich_inputs: true }),
71
- handle.export({ allow: ['state'], values: true }),
72
- ]);
73
- const processed = (0, post_process_1.postProcessExecution)(execution);
74
- // Extract parent_workflow_id from the raw state metadata (HotMesh's `pj` field).
75
- // The SDK's WorkflowExecution doesn't surface this yet; when it does,
76
- // the SDK value takes precedence (defensive: only set if absent).
77
- if (!processed.parent_workflow_id) {
78
- const pj = extractParentJobId(raw);
79
- if (pj && pj !== workflowId) {
80
- processed.parent_workflow_id = pj;
81
- }
82
- }
83
- return processed;
70
+ // include_lineage populates parent_workflow_id/origin_id from the jobs
71
+ // table in one indexed lookup — no second export call.
72
+ const execution = await handle.exportExecution({
73
+ ...options,
74
+ enrich_inputs: true,
75
+ include_lineage: true,
76
+ });
77
+ return (0, post_process_1.postProcessExecution)(execution);
84
78
  }
85
79
  catch (err) {
86
80
  if (err instanceof WorkflowNotFoundError)
@@ -89,25 +83,51 @@ async function exportWorkflowExecution(workflowId, taskQueue, workflowName, opti
89
83
  }
90
84
  }
91
85
  /**
92
- * Walk the raw export state looking for the `pj` (parent job ID) field.
93
- * HotMesh stores it at `state.output.metadata.pj` after symbol inflation.
94
- * Returns undefined if not found (workflow has no parent).
86
+ * The effortless read: what went in, what came out. Two narrow lookups
87
+ * `handle.input()` (one field read, available for the life of the job) and
88
+ * `handle.output()` (one state read, never blocks) no event stream, no
89
+ * full export. While the workflow runs, `output` is null and `status` says
90
+ * so, making this the natural polling body.
95
91
  */
96
- function extractParentJobId(raw) {
97
- const state = raw?.state;
98
- if (!state || typeof state !== 'object')
99
- return undefined;
100
- // Typical path: state.output.metadata.pj
101
- const output = state.output ?? state;
102
- const metadata = output?.metadata;
103
- if (metadata?.pj && typeof metadata.pj === 'string') {
104
- return metadata.pj;
105
- }
106
- // Fallback: walk top-level state keys (older export shapes)
107
- if (state.pj && typeof state.pj === 'string') {
108
- return state.pj;
109
- }
110
- return undefined;
92
+ async function getWorkflowEnvelopes(workflowId, taskQueue, workflowName) {
93
+ let handle;
94
+ try {
95
+ handle = await (0, client_1.getHandle)(taskQueue, workflowName, workflowId);
96
+ }
97
+ catch {
98
+ throw new WorkflowNotFoundError(workflowId);
99
+ }
100
+ const [statusCode, args] = await Promise.all([
101
+ handle.status(),
102
+ handle.input().catch(() => undefined),
103
+ ]).catch(() => {
104
+ throw new WorkflowNotFoundError(workflowId);
105
+ });
106
+ // Long-tail workflows take a single LTEnvelope argument — unwrap it;
107
+ // multi-arg workflows keep the args array verbatim.
108
+ const input = Array.isArray(args) && args.length === 1 ? args[0] : args ?? null;
109
+ if (statusCode > 0) {
110
+ return { workflow_id: workflowId, status: 'running', input, output: null };
111
+ }
112
+ try {
113
+ const output = await handle.output();
114
+ return {
115
+ workflow_id: workflowId,
116
+ status: statusCode === 0 ? 'completed' : 'failed',
117
+ input,
118
+ output: output ?? null,
119
+ };
120
+ }
121
+ catch (err) {
122
+ // output() throws the workflow's own error for failed runs — that IS the outcome.
123
+ return {
124
+ workflow_id: workflowId,
125
+ status: 'failed',
126
+ input,
127
+ output: null,
128
+ error: err?.message ?? String(err),
129
+ };
130
+ }
111
131
  }
112
132
  /**
113
133
  * Return the current job state of a workflow.
@@ -8,13 +8,15 @@ interface ChecklistItem {
8
8
  required?: boolean;
9
9
  }
10
10
  /**
11
- * Resolve a checklist widget's item definitions from its `x-lt-source`
12
- * "domain.path" against the escalation context. Paths may embed
13
- * `{{domain.path}}` interpolation segments (cascading sources). Missing
14
- * domain/path, an unresolved segment, or a non-array value yields an empty
15
- * list.
11
+ * Resolve a checklist widget's item definitions from its `x-lt-source`
12
+ * a "domain.path" or an ORDERED array of paths — against the escalation
13
+ * context. With an array, the first entry that resolves to a non-empty item
14
+ * list wins, so lookup-backed and envelope-embedded rows render the same
15
+ * shared schema interchangeably. Paths may embed `{{domain.path}}`
16
+ * interpolation segments (cascading sources); an entry that cannot resolve
17
+ * falls through to the next. Nothing resolvable yields an empty list.
16
18
  */
17
- export declare function resolveChecklistItems(sourcePath: unknown, ctx: Record<string, unknown> | undefined): ChecklistItem[];
19
+ export declare function resolveChecklistItems(source: unknown, ctx: Record<string, unknown> | undefined): ChecklistItem[];
18
20
  export declare const X_LT_DEFAULT_CHECKED = "x-lt-default-checked";
19
21
  /**
20
22
  * The checklist's first-load default (`x-lt-default-checked`): every resolved
@@ -10,24 +10,32 @@ exports.validateField = validateField;
10
10
  const x_lt_options_1 = require("./x-lt-options");
11
11
  const ctx_path_1 = require("./ctx-path");
12
12
  /**
13
- * Resolve a checklist widget's item definitions from its `x-lt-source`
14
- * "domain.path" against the escalation context. Paths may embed
15
- * `{{domain.path}}` interpolation segments (cascading sources). Missing
16
- * domain/path, an unresolved segment, or a non-array value yields an empty
17
- * list.
13
+ * Resolve a checklist widget's item definitions from its `x-lt-source`
14
+ * a "domain.path" or an ORDERED array of paths — against the escalation
15
+ * context. With an array, the first entry that resolves to a non-empty item
16
+ * list wins, so lookup-backed and envelope-embedded rows render the same
17
+ * shared schema interchangeably. Paths may embed `{{domain.path}}`
18
+ * interpolation segments (cascading sources); an entry that cannot resolve
19
+ * falls through to the next. Nothing resolvable yields an empty list.
18
20
  */
19
- function resolveChecklistItems(sourcePath, ctx) {
20
- if (typeof sourcePath !== 'string' || !ctx)
21
+ function resolveChecklistItems(source, ctx) {
22
+ const paths = (typeof source === 'string' ? [source] : Array.isArray(source) ? source : [])
23
+ .filter((p) => typeof p === 'string' && p.length > 0);
24
+ if (paths.length === 0 || !ctx)
21
25
  return [];
22
- let concrete = sourcePath;
23
- if ((0, ctx_path_1.hasInterpolation)(sourcePath)) {
24
- const resolved = (0, ctx_path_1.interpolatePath)(sourcePath, ctx);
25
- if (resolved === null)
26
- return [];
27
- concrete = resolved;
26
+ for (const sourcePath of paths) {
27
+ let concrete = sourcePath;
28
+ if ((0, ctx_path_1.hasInterpolation)(sourcePath)) {
29
+ const resolved = (0, ctx_path_1.interpolatePath)(sourcePath, ctx);
30
+ if (resolved === null)
31
+ continue;
32
+ concrete = resolved;
33
+ }
34
+ const cur = (0, ctx_path_1.resolveCtxPath)(concrete, ctx);
35
+ if (Array.isArray(cur) && cur.length > 0)
36
+ return cur;
28
37
  }
29
- const cur = (0, ctx_path_1.resolveCtxPath)(concrete, ctx);
30
- return Array.isArray(cur) ? cur : [];
38
+ return [];
31
39
  }
32
40
  exports.X_LT_DEFAULT_CHECKED = 'x-lt-default-checked';
33
41
  /**
@@ -10,10 +10,18 @@ exports.resolveFieldOptions = resolveFieldOptions;
10
10
  * offer a different legal set per escalation (e.g. `[1..N]` where N rides the
11
11
  * envelope, or a versioned knowledge lookup under the `lookup` domain).
12
12
  *
13
- * x-lt-options "domain.path" — e.g. "envelope.left_quantity_options"
14
- * paths may embed {{domain.path}} interpolation segments —
13
+ * x-lt-options "domain.path" or an ORDERED array of paths — e.g.
14
+ * "envelope.left_quantity_options" or
15
+ * ["lookup.reasons.items", "envelope.reject_reason_items"].
16
+ * With an array, the first entry that resolves to options
17
+ * wins, so lookup-backed and envelope-embedded rows render
18
+ * the same shared schema interchangeably (a parked row
19
+ * falls through to the envelope it already carries).
20
+ * Paths may embed {{domain.path}} interpolation segments —
15
21
  * e.g. "lookup.geo.regions.{{resolver.country}}" — making
16
- * the option list follow another answer (cascading selects)
22
+ * the option list follow another answer (cascading selects);
23
+ * an entry whose interpolation cannot resolve falls through
24
+ * to the next entry.
17
25
  *
18
26
  * Object entries separate what the submitter SEES from what the payload
19
27
  * STORES: the select renders the label and emits the value (a DB-backed pick
@@ -62,24 +70,30 @@ function resolveFieldOptions(fieldSchema, ctx) {
62
70
  if (Array.isArray(staticEnum) && staticEnum.length > 0) {
63
71
  return staticEnum.map((v) => ({ value: v, label: String(v) }));
64
72
  }
65
- const sourcePath = fieldSchema[exports.X_LT_OPTIONS];
66
- if (typeof sourcePath !== 'string')
73
+ const token = fieldSchema[exports.X_LT_OPTIONS];
74
+ const paths = (typeof token === 'string' ? [token] : Array.isArray(token) ? token : [])
75
+ .filter((p) => typeof p === 'string' && p.length > 0);
76
+ if (paths.length === 0)
67
77
  return undefined;
68
- // Interpolated tokens are a standing contract: even unresolvable, the field
69
- // stays a (disabled) select and fails closed. Plain paths keep the legacy
70
- // undefined-on-miss reading.
71
- const dynamic = (0, ctx_path_1.hasInterpolation)(sourcePath);
72
- const miss = dynamic ? [] : undefined;
73
- let concrete = sourcePath;
74
- if (dynamic) {
75
- const resolved = (0, ctx_path_1.interpolatePath)(sourcePath, ctx);
76
- if (resolved === null)
77
- return miss;
78
- concrete = resolved;
78
+ // Interpolated entries are a standing contract: when nothing resolves, the
79
+ // field stays a (disabled) select and fails closed a cascade child never
80
+ // becomes free text. All-plain-path tokens keep the legacy undefined-on-miss
81
+ // reading (the field falls back to its typed plain input).
82
+ const miss = paths.some(ctx_path_1.hasInterpolation) ? [] : undefined;
83
+ for (const sourcePath of paths) {
84
+ let concrete = sourcePath;
85
+ if ((0, ctx_path_1.hasInterpolation)(sourcePath)) {
86
+ const resolved = (0, ctx_path_1.interpolatePath)(sourcePath, ctx);
87
+ if (resolved === null)
88
+ continue;
89
+ concrete = resolved;
90
+ }
91
+ const cur = (0, ctx_path_1.resolveCtxPath)(concrete, ctx);
92
+ if (!Array.isArray(cur))
93
+ continue;
94
+ const options = cur.map(toOption).filter((o) => o !== null);
95
+ if (options.length > 0)
96
+ return options;
79
97
  }
80
- const cur = (0, ctx_path_1.resolveCtxPath)(concrete, ctx);
81
- if (!Array.isArray(cur))
82
- return miss;
83
- const options = cur.map(toOption).filter((o) => o !== null);
84
- return options.length > 0 ? options : miss;
98
+ return miss;
85
99
  }
@@ -89,6 +89,21 @@ function registerExportTools(server) {
89
89
  }
90
90
  return { content: [{ type: 'text', text: JSON.stringify((0, pick_1.pickPaths)(result.data, args.select)) }] };
91
91
  });
92
+ // mirrors GET /api/workflow-states/:workflowId/envelopes
93
+ server.registerTool('get_workflow_envelopes', {
94
+ title: 'Get Workflow Envelopes',
95
+ description: 'The workflow\'s input and output envelopes — two narrow lookups, no event ' +
96
+ 'stream. Output is null with status running until the workflow completes; a ' +
97
+ 'failed run carries its error message. The token-cheap read when you only ' +
98
+ 'need what went in and what came out.',
99
+ inputSchema: schemas_1.getWorkflowEnvelopesSchema,
100
+ }, async (args) => {
101
+ const result = await api.getWorkflowEnvelopes({ workflowId: args.workflow_id });
102
+ if (result.error) {
103
+ return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
104
+ }
105
+ return { content: [{ type: 'text', text: JSON.stringify(result.data) }] };
106
+ });
92
107
  // mirrors GET /api/workflow-states/:workflowId/status
93
108
  server.registerTool('get_export_status', {
94
109
  title: 'Get Workflow Status',
@@ -1420,6 +1420,13 @@ export declare const getExportStatusSchema: z.ZodObject<{
1420
1420
  }, {
1421
1421
  workflow_id: string;
1422
1422
  }>;
1423
+ export declare const getWorkflowEnvelopesSchema: z.ZodObject<{
1424
+ workflow_id: z.ZodString;
1425
+ }, "strip", z.ZodTypeAny, {
1426
+ workflow_id: string;
1427
+ }, {
1428
+ workflow_id: string;
1429
+ }>;
1423
1430
  export declare const diagnoseJobSchema: z.ZodObject<{
1424
1431
  workflow_id: z.ZodString;
1425
1432
  app_id: z.ZodDefault<z.ZodOptional<z.ZodString>>;
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.assignPersonaSchema = exports.unlinkPersonaRoleSchema = exports.linkPersonaRoleSchema = exports.deletePersonaSchema = exports.updatePersonaSchema = exports.createPersonaSchema = exports.getPersonaSchema = exports.listPersonasSchema = exports.listRoleSchemaVersionsSchema = exports.getRoleSchemaSchema = exports.updateRoleSchema = exports.addEscalationChainSchema = exports.createRoleSchema = exports.listRolesSchema = exports.removeUserRoleSchema = exports.addUserRoleSchema = exports.createUserSchema = exports.listUsersSchema = exports.invokeYamlWorkflowSchema = exports.deployYamlWorkflowSchema = exports.createYamlWorkflowSchema = exports.getYamlWorkflowSchema = exports.listYamlWorkflowsSchema = exports.disconnectMcpServerSchema = exports.connectMcpServerSchema = exports.updateMcpServerSchema = exports.listMcpServersSchema = exports.getDomainContextSchema = exports.terminateWorkflowSchema = exports.getWorkflowStatusSchema = exports.invokeWorkflowSchema = exports.listDiscoveredWorkflowsSchema = exports.deleteWorkflowConfigSchema = exports.upsertWorkflowConfigSchema = exports.listWorkflowConfigsSchema = exports.bulkTriageSchema = exports.releaseExpiredClaimsSchema = exports.bulkCancelSchema = exports.cancelEscalationSchema = exports.escalateEscalationSchema = exports.resolveBySignalKeySchema = exports.resolveEscalationSchema = exports.releaseEscalationSchema = exports.claimEscalationSchema = exports.getEscalationStatsSchema = exports.getEscalationsByWorkflowSchema = exports.getEscalationSchema = exports.findEscalationsSchema = exports.getProcessDetailSchema = exports.findTasksSchema = void 0;
4
- exports.resolveByIdsSchema = exports.facetQuerySchema = exports.findOrphanedSignalsSchema = exports.findStalledJobsSchema = exports.diagnoseJobSchema = exports.getExportStatusSchema = exports.exportWorkflowExecutionSchema = exports.exportWorkflowStateSchema = exports.listExportJobsSchema = exports.getSettingsSchema = exports.updatePrioritySchema = exports.bulkEscalateSchema = exports.bulkUnassignSchema = exports.bulkAssignSchema = exports.bulkClaimSchema = exports.resolveByMetadataSchema = exports.claimByMetadataSchema = exports.findByMetadataSchema = exports.deleteTopicSchema = exports.updateTopicSchema = exports.createTopicSchema = exports.getTopicSchema = exports.listTopicsSchema = exports.interruptJobSchema = exports.getJobExecutionSchema = exports.listPipelineJobsSchema = exports.listPipelineEntitiesSchema = exports.listStreamMessagesSchema = exports.getStreamStatsSchema = exports.applyThrottleSchema = exports.rollCallSchema = exports.listAppsSchema = exports.revokeBotKeySchema = exports.createBotApiKeySchema = exports.deleteBotSchema = exports.updateBotSchema = exports.createBotSchema = exports.getBotSchema = exports.listBotsSchema = exports.deleteAgentSubscriptionSchema = exports.createAgentSubscriptionSchema = exports.listAgentSubscriptionsSchema = exports.deleteAgentSchema = exports.updateAgentSchema = exports.createAgentSchema = exports.getAgentSchema = exports.listAgentsSchema = exports.pruneSchema = exports.getUserPersonasSchema = exports.unassignPersonaSchema = void 0;
5
- exports.deleteScanRuleSchema = exports.upsertScanRuleSchema = exports.upsertScanSchemeSchema = exports.listScanSchemesSchema = exports.executeScanChoiceSchema = exports.executeScanCodeSchema = exports.timelineByFacetSchema = exports.aggregateByFacetsSchema = exports.claimByFacetsSchema = exports.claimGroupsSchema = exports.searchByFacetsSchema = void 0;
4
+ exports.facetQuerySchema = exports.findOrphanedSignalsSchema = exports.findStalledJobsSchema = exports.diagnoseJobSchema = exports.getWorkflowEnvelopesSchema = exports.getExportStatusSchema = exports.exportWorkflowExecutionSchema = exports.exportWorkflowStateSchema = exports.listExportJobsSchema = exports.getSettingsSchema = exports.updatePrioritySchema = exports.bulkEscalateSchema = exports.bulkUnassignSchema = exports.bulkAssignSchema = exports.bulkClaimSchema = exports.resolveByMetadataSchema = exports.claimByMetadataSchema = exports.findByMetadataSchema = exports.deleteTopicSchema = exports.updateTopicSchema = exports.createTopicSchema = exports.getTopicSchema = exports.listTopicsSchema = exports.interruptJobSchema = exports.getJobExecutionSchema = exports.listPipelineJobsSchema = exports.listPipelineEntitiesSchema = exports.listStreamMessagesSchema = exports.getStreamStatsSchema = exports.applyThrottleSchema = exports.rollCallSchema = exports.listAppsSchema = exports.revokeBotKeySchema = exports.createBotApiKeySchema = exports.deleteBotSchema = exports.updateBotSchema = exports.createBotSchema = exports.getBotSchema = exports.listBotsSchema = exports.deleteAgentSubscriptionSchema = exports.createAgentSubscriptionSchema = exports.listAgentSubscriptionsSchema = exports.deleteAgentSchema = exports.updateAgentSchema = exports.createAgentSchema = exports.getAgentSchema = exports.listAgentsSchema = exports.pruneSchema = exports.getUserPersonasSchema = exports.unassignPersonaSchema = void 0;
5
+ exports.deleteScanRuleSchema = exports.upsertScanRuleSchema = exports.upsertScanSchemeSchema = exports.listScanSchemesSchema = exports.executeScanChoiceSchema = exports.executeScanCodeSchema = exports.timelineByFacetSchema = exports.aggregateByFacetsSchema = exports.claimByFacetsSchema = exports.claimGroupsSchema = exports.searchByFacetsSchema = exports.resolveByIdsSchema = void 0;
6
6
  /**
7
7
  * Zod schemas for the admin MCP server tools.
8
8
  *
@@ -579,6 +579,9 @@ exports.exportWorkflowExecutionSchema = zod_1.z.object({
579
579
  exports.getExportStatusSchema = zod_1.z.object({
580
580
  workflow_id: zod_1.z.string().describe('Workflow ID to check export status'),
581
581
  });
582
+ exports.getWorkflowEnvelopesSchema = zod_1.z.object({
583
+ workflow_id: zod_1.z.string().describe('Workflow ID whose input/output envelopes to fetch'),
584
+ });
582
585
  // ── Diagnostics ───────────────────────────────────────────────────────────────
583
586
  exports.diagnoseJobSchema = zod_1.z.object({
584
587
  workflow_id: zod_1.z.string().describe('Workflow ID to diagnose'),
@@ -124,6 +124,7 @@ exports.ADMIN_TOOLS = [
124
124
  { name: 'list_export_jobs', description: 'List workflow jobs with optional filtering and pagination.', read_safe: true, inputSchema: { type: 'object', properties: { limit: { type: 'integer' }, offset: { type: 'integer' }, entity: { type: 'string' }, search: { type: 'string' }, status: { type: 'string' }, sort_by: { type: 'string' }, order: { type: 'string', enum: ['asc', 'desc'] } } } },
125
125
  { name: 'export_workflow_state', description: 'Export the full workflow state using HotMesh durable export. allow/block filter which sections the engine fetches; select (dot paths) projects the returned JSON.', read_safe: true, inputSchema: { type: 'object', properties: { workflow_id: { type: 'string' }, allow: { type: 'array', items: { type: 'string' } }, block: { type: 'array', items: { type: 'string' } }, values: { type: 'object' }, select: { type: 'array', items: { type: 'string' } } }, required: ['workflow_id'] } },
126
126
  { name: 'export_workflow_execution', description: 'Export workflow state as a structured execution event history. Histories run large — pass select (dot paths) to return only what you need.', read_safe: true, inputSchema: { type: 'object', properties: { workflow_id: { type: 'string' }, excludeSystem: { type: 'boolean' }, omitResults: { type: 'boolean' }, mode: { type: 'string' }, maxDepth: { type: 'integer' }, select: { type: 'array', items: { type: 'string' } } }, required: ['workflow_id'] } },
127
+ { name: 'get_workflow_envelopes', description: 'The workflow\'s input and output envelopes — two narrow lookups, no event stream. Output is null with status running until the workflow completes; a failed run carries its error message.', read_safe: true, inputSchema: { type: 'object', properties: { workflow_id: { type: 'string' } }, required: ['workflow_id'] } },
127
128
  { name: 'get_export_status', description: 'Return the numeric status semaphore for a workflow.', read_safe: true, inputSchema: { type: 'object', properties: { workflow_id: { type: 'string' } }, required: ['workflow_id'] } },
128
129
  // ── overview.ts ─────────────────────────────────────────────────────────
129
130
  { name: 'get_system_overview', description: 'Triage-ready system dashboard: escalation queue pressure, task throughput, hourly trends, infrastructure status, and process summary. One call for complete system state.', read_safe: true, inputSchema: { type: 'object', properties: { period: { type: 'string', enum: ['1h', '24h', '7d'], description: 'Time window (default: 24h)' } } } },
@@ -1,2 +1,2 @@
1
- import{j as o}from"./vendor-query-RUZdMvN6.js";import{c as n}from"./tasks-DvYWcASM.js";import{T as m}from"./index-zrTQcPjB.js";import{f as c}from"./useEventHooks-JDpifqGZ.js";import{u}from"./mcp-Bb1k5rv-.js";import{P as d}from"./PageHeaderWithStats-D9tQxILm.js";import"./vendor-react-CdqEC2zv.js";import"./vendor-icons-h-jlRSb9.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-BrOvvDHF.js.map
1
+ import{j as o}from"./vendor-query-RUZdMvN6.js";import{c as n}from"./tasks-CGoPhQyw.js";import{T as m}from"./index-zqoZDL5j.js";import{f as c}from"./useEventHooks-onx-Z6IY.js";import{u}from"./mcp-D2WA-SHc.js";import{P as d}from"./PageHeaderWithStats-D9tQxILm.js";import"./vendor-react-CdqEC2zv.js";import"./vendor-icons-h-jlRSb9.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-Csq-oxmY.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AdminDashboard-BrOvvDHF.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-Csq-oxmY.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"}