@hotmeshio/long-tail 0.19.1 → 0.20.0

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 (244) hide show
  1. package/build/api/workflows/config.d.ts +3 -0
  2. package/build/api/workflows/config.js +15 -0
  3. package/build/api/workflows/index.d.ts +1 -0
  4. package/build/api/workflows/index.js +3 -1
  5. package/build/api/workflows/input-lookups.d.ts +16 -0
  6. package/build/api/workflows/input-lookups.js +69 -0
  7. package/build/api/workflows/input-validation.d.ts +4 -3
  8. package/build/api/workflows/input-validation.js +7 -4
  9. package/build/api/workflows/invocable.js +1 -0
  10. package/build/api/workflows/invocation.js +1 -1
  11. package/build/lib/db/schemas/035_workflow_input_lookups.sql +9 -0
  12. package/build/routes/workflows/config.js +10 -0
  13. package/build/services/config/cache.js +1 -0
  14. package/build/services/config/read.js +2 -0
  15. package/build/services/config/sql.d.ts +2 -2
  16. package/build/services/config/sql.js +6 -5
  17. package/build/services/config/write.js +10 -1
  18. package/build/services/knowledge/index.d.ts +1 -0
  19. package/build/services/knowledge/index.js +1 -0
  20. package/build/services/knowledge/lookup-refs.d.ts +7 -0
  21. package/build/services/knowledge/lookup-refs.js +26 -0
  22. package/build/services/mcp/db-server/schemas.d.ts +2 -2
  23. package/build/shared/form-validation/field-validator.d.ts +1 -0
  24. package/build/shared/form-validation/field-validator.js +94 -6
  25. package/build/shared/form-validation/invoke-context.d.ts +4 -3
  26. package/build/shared/form-validation/invoke-context.js +5 -4
  27. package/build/shared/form-validation/x-lt-options.d.ts +3 -3
  28. package/build/shared/form-validation/x-lt-options.js +19 -5
  29. package/build/shared/form-validation/x-lt-show-if.d.ts +5 -0
  30. package/build/shared/form-validation/x-lt-show-if.js +10 -0
  31. package/build/start/workers.js +10 -0
  32. package/build/system/mcp-servers/admin/schemas.d.ts +64 -20
  33. package/build/system/mcp-servers/admin/schemas.js +19 -3
  34. package/build/system/mcp-servers/admin/workflow-config.js +54 -9
  35. package/build/system/mcp-servers/admin/workflows.js +9 -7
  36. package/build/system/mcp-servers/db-query/schemas.d.ts +2 -2
  37. package/build/system/seed/tool-manifests-admin.d.ts +517 -54
  38. package/build/system/seed/tool-manifests-admin.js +4 -3
  39. package/build/tsconfig.tsbuildinfo +1 -1
  40. package/build/types/config.d.ts +4 -0
  41. package/build/types/startup.d.ts +6 -0
  42. package/dashboard/dist/assets/{AdminDashboard-Drs-9TRM.js → AdminDashboard-DplvDBti.js} +2 -2
  43. package/dashboard/dist/assets/{AdminDashboard-Drs-9TRM.js.map → AdminDashboard-DplvDBti.js.map} +1 -1
  44. package/dashboard/dist/assets/{AgentConfigPage-BDPDZ7-v.js → AgentConfigPage-D8Bf6YxO.js} +2 -2
  45. package/dashboard/dist/assets/{AgentConfigPage-BDPDZ7-v.js.map → AgentConfigPage-D8Bf6YxO.js.map} +1 -1
  46. package/dashboard/dist/assets/{AgentDetailPage-CGBulM4_.js → AgentDetailPage-BN8g0Y2G.js} +2 -2
  47. package/dashboard/dist/assets/{AgentDetailPage-CGBulM4_.js.map → AgentDetailPage-BN8g0Y2G.js.map} +1 -1
  48. package/dashboard/dist/assets/{AgentsPage-D77JeViQ.js → AgentsPage-7JJBHku8.js} +2 -2
  49. package/dashboard/dist/assets/{AgentsPage-D77JeViQ.js.map → AgentsPage-7JJBHku8.js.map} +1 -1
  50. package/dashboard/dist/assets/{AvailableEscalationsPage-CqM_MOMy.js → AvailableEscalationsPage-lz5qwSjg.js} +2 -2
  51. package/dashboard/dist/assets/{AvailableEscalationsPage-CqM_MOMy.js.map → AvailableEscalationsPage-lz5qwSjg.js.map} +1 -1
  52. package/dashboard/dist/assets/{BotPicker-CC5vI_Sv.js → BotPicker-CGCnIz8I.js} +2 -2
  53. package/dashboard/dist/assets/{BotPicker-CC5vI_Sv.js.map → BotPicker-CGCnIz8I.js.map} +1 -1
  54. package/dashboard/dist/assets/{BulkAssignModal-BXiJnlqt.js → BulkAssignModal-NJBcoj-f.js} +2 -2
  55. package/dashboard/dist/assets/{BulkAssignModal-BXiJnlqt.js.map → BulkAssignModal-NJBcoj-f.js.map} +1 -1
  56. package/dashboard/dist/assets/{CapabilitiesPage-D9TC2iKy.js → CapabilitiesPage-F8dpNn9B.js} +2 -2
  57. package/dashboard/dist/assets/{CapabilitiesPage-D9TC2iKy.js.map → CapabilitiesPage-F8dpNn9B.js.map} +1 -1
  58. package/dashboard/dist/assets/{CollapsibleSection-D10lGw_u.js → CollapsibleSection-BZW6VpCU.js} +2 -2
  59. package/dashboard/dist/assets/{CollapsibleSection-D10lGw_u.js.map → CollapsibleSection-BZW6VpCU.js.map} +1 -1
  60. package/dashboard/dist/assets/{ConfirmDeleteModal-BJdLN6No.js → ConfirmDeleteModal-64adXLdq.js} +2 -2
  61. package/dashboard/dist/assets/{ConfirmDeleteModal-BJdLN6No.js.map → ConfirmDeleteModal-64adXLdq.js.map} +1 -1
  62. package/dashboard/dist/assets/{CountdownTimer-D9B-BjQ7.js → CountdownTimer-BxDub9d2.js} +2 -2
  63. package/dashboard/dist/assets/{CountdownTimer-D9B-BjQ7.js.map → CountdownTimer-BxDub9d2.js.map} +1 -1
  64. package/dashboard/dist/assets/{CredentialsPage-hniUAFBK.js → CredentialsPage-CnLzopLL.js} +2 -2
  65. package/dashboard/dist/assets/{CredentialsPage-hniUAFBK.js.map → CredentialsPage-CnLzopLL.js.map} +1 -1
  66. package/dashboard/dist/assets/{CronLabel-v9DCD2FX.js → CronLabel-CAD5UYDT.js} +2 -2
  67. package/dashboard/dist/assets/{CronLabel-v9DCD2FX.js.map → CronLabel-CAD5UYDT.js.map} +1 -1
  68. package/dashboard/dist/assets/{ElapsedCell-_xvVTK8N.js → ElapsedCell-CwO4ufd0.js} +2 -2
  69. package/dashboard/dist/assets/{ElapsedCell-_xvVTK8N.js.map → ElapsedCell-CwO4ufd0.js.map} +1 -1
  70. package/dashboard/dist/assets/{EntityTimelinePanel-1lT3jkCM.js → EntityTimelinePanel-CkF-oW-m.js} +2 -2
  71. package/dashboard/dist/assets/{EntityTimelinePanel-1lT3jkCM.js.map → EntityTimelinePanel-CkF-oW-m.js.map} +1 -1
  72. package/dashboard/dist/assets/{EscalationListSchemaPage-BeQUTUEO.js → EscalationListSchemaPage-h9JO_q5f.js} +2 -2
  73. package/dashboard/dist/assets/{EscalationListSchemaPage-BeQUTUEO.js.map → EscalationListSchemaPage-h9JO_q5f.js.map} +1 -1
  74. package/dashboard/dist/assets/{EscalationListView-uuZRMSLB.js → EscalationListView-AHW2xtlr.js} +2 -2
  75. package/dashboard/dist/assets/{EscalationListView-uuZRMSLB.js.map → EscalationListView-AHW2xtlr.js.map} +1 -1
  76. package/dashboard/dist/assets/{EscalationSchemaPage-D4VlEwyS.js → EscalationSchemaPage-mJFL5_Se.js} +2 -2
  77. package/dashboard/dist/assets/{EscalationSchemaPage-D4VlEwyS.js.map → EscalationSchemaPage-mJFL5_Se.js.map} +1 -1
  78. package/dashboard/dist/assets/{EscalationsOverview-Bx6Zrzm-.js → EscalationsOverview-DlXUFqWJ.js} +2 -2
  79. package/dashboard/dist/assets/{EscalationsOverview-Bx6Zrzm-.js.map → EscalationsOverview-DlXUFqWJ.js.map} +1 -1
  80. package/dashboard/dist/assets/{EventTable-KEC3YWBf.js → EventTable-Ike2xchn.js} +2 -2
  81. package/dashboard/dist/assets/{EventTable-KEC3YWBf.js.map → EventTable-Ike2xchn.js.map} +1 -1
  82. package/dashboard/dist/assets/{FilterBar-xwN_b5fj.js → FilterBar-DMOR-O1c.js} +2 -2
  83. package/dashboard/dist/assets/{FilterBar-xwN_b5fj.js.map → FilterBar-DMOR-O1c.js.map} +1 -1
  84. package/dashboard/dist/assets/{GraphInvokePage-DV7Y0fe2.js → GraphInvokePage-CKtvWowP.js} +2 -2
  85. package/dashboard/dist/assets/{GraphInvokePage-DV7Y0fe2.js.map → GraphInvokePage-CKtvWowP.js.map} +1 -1
  86. package/dashboard/dist/assets/{HomePage-G785SWcW.js → HomePage-BQ3Q791Q.js} +2 -2
  87. package/dashboard/dist/assets/{HomePage-G785SWcW.js.map → HomePage-BQ3Q791Q.js.map} +1 -1
  88. package/dashboard/dist/assets/{ListToolbar-zPVYPg3W.js → ListToolbar-DdJzj472.js} +2 -2
  89. package/dashboard/dist/assets/{ListToolbar-zPVYPg3W.js.map → ListToolbar-DdJzj472.js.map} +1 -1
  90. package/dashboard/dist/assets/{McpOverview-CMGUq8hx.js → McpOverview-BbtrduWn.js} +2 -2
  91. package/dashboard/dist/assets/{McpOverview-CMGUq8hx.js.map → McpOverview-BbtrduWn.js.map} +1 -1
  92. package/dashboard/dist/assets/{McpQueryDetailPage-CdhLhaKn.js → McpQueryDetailPage-C1L4T-Wt.js} +2 -2
  93. package/dashboard/dist/assets/{McpQueryDetailPage-CdhLhaKn.js.map → McpQueryDetailPage-C1L4T-Wt.js.map} +1 -1
  94. package/dashboard/dist/assets/{McpQueryPage-CNSNMagY.js → McpQueryPage-CfJy7HZ7.js} +2 -2
  95. package/dashboard/dist/assets/{McpQueryPage-CNSNMagY.js.map → McpQueryPage-CfJy7HZ7.js.map} +1 -1
  96. package/dashboard/dist/assets/{McpRunDetailPage-DBm8hUaW.js → McpRunDetailPage-CA9yv7he.js} +2 -2
  97. package/dashboard/dist/assets/{McpRunDetailPage-DBm8hUaW.js.map → McpRunDetailPage-CA9yv7he.js.map} +1 -1
  98. package/dashboard/dist/assets/{McpRunsPage-B6rb5QBf.js → McpRunsPage-D7QXjW9z.js} +2 -2
  99. package/dashboard/dist/assets/{McpRunsPage-B6rb5QBf.js.map → McpRunsPage-D7QXjW9z.js.map} +1 -1
  100. package/dashboard/dist/assets/{OperationsPage-Dxk1fAMg.js → OperationsPage-aLHHAP2X.js} +2 -2
  101. package/dashboard/dist/assets/{OperationsPage-Dxk1fAMg.js.map → OperationsPage-aLHHAP2X.js.map} +1 -1
  102. package/dashboard/dist/assets/{OperatorDashboard-DBOscDnf.js → OperatorDashboard-sXNDh1Ph.js} +2 -2
  103. package/dashboard/dist/assets/{OperatorDashboard-DBOscDnf.js.map → OperatorDashboard-sXNDh1Ph.js.map} +1 -1
  104. package/dashboard/dist/assets/{PersonaDetailPage-BGRdGpeR.js → PersonaDetailPage-NeHD-Gra.js} +2 -2
  105. package/dashboard/dist/assets/{PersonaDetailPage-BGRdGpeR.js.map → PersonaDetailPage-NeHD-Gra.js.map} +1 -1
  106. package/dashboard/dist/assets/{PersonasPage-DRzOZcVa.js → PersonasPage-DavKXRWX.js} +2 -2
  107. package/dashboard/dist/assets/{PersonasPage-DRzOZcVa.js.map → PersonasPage-DavKXRWX.js.map} +1 -1
  108. package/dashboard/dist/assets/{ProcessDetailPage-BLGjZXpM.js → ProcessDetailPage-DkdKJGe6.js} +2 -2
  109. package/dashboard/dist/assets/{ProcessDetailPage-BLGjZXpM.js.map → ProcessDetailPage-DkdKJGe6.js.map} +1 -1
  110. package/dashboard/dist/assets/{ProcessesListPage-5NnysKFC.js → ProcessesListPage-CjwVKe32.js} +2 -2
  111. package/dashboard/dist/assets/{ProcessesListPage-5NnysKFC.js.map → ProcessesListPage-CjwVKe32.js.map} +1 -1
  112. package/dashboard/dist/assets/ResolverForm-Bk-wDkN-.js +3 -0
  113. package/dashboard/dist/assets/ResolverForm-Bk-wDkN-.js.map +1 -0
  114. package/dashboard/dist/assets/{RoleDetailPage-C_LIoe1j.js → RoleDetailPage-WQt0y5l7.js} +3 -3
  115. package/dashboard/dist/assets/{RoleDetailPage-C_LIoe1j.js.map → RoleDetailPage-WQt0y5l7.js.map} +1 -1
  116. package/dashboard/dist/assets/{RolesPage-BmW1LzkU.js → RolesPage-OM9KM8Pg.js} +2 -2
  117. package/dashboard/dist/assets/{RolesPage-BmW1LzkU.js.map → RolesPage-OM9KM8Pg.js.map} +1 -1
  118. package/dashboard/dist/assets/{RunAsSelector-BwZTJ4Yj.js → RunAsSelector-fFMt1bGe.js} +2 -2
  119. package/dashboard/dist/assets/{RunAsSelector-BwZTJ4Yj.js.map → RunAsSelector-fFMt1bGe.js.map} +1 -1
  120. package/dashboard/dist/assets/ScanCodesPage-AujH-pPQ.js +2 -0
  121. package/dashboard/dist/assets/{ScanCodesPage-FiYIYB-m.js.map → ScanCodesPage-AujH-pPQ.js.map} +1 -1
  122. package/dashboard/dist/assets/{ScanSchemeDetailPage-BiAqtD-a.js → ScanSchemeDetailPage-eKQpmsC_.js} +2 -2
  123. package/dashboard/dist/assets/{ScanSchemeDetailPage-BiAqtD-a.js.map → ScanSchemeDetailPage-eKQpmsC_.js.map} +1 -1
  124. package/dashboard/dist/assets/{ScanStationPage-8CdOtbCD.js → ScanStationPage-C1_ppDoZ.js} +2 -2
  125. package/dashboard/dist/assets/{ScanStationPage-8CdOtbCD.js.map → ScanStationPage-C1_ppDoZ.js.map} +1 -1
  126. package/dashboard/dist/assets/{StickyPagination-DRuqKhZt.js → StickyPagination-B91Pk9xh.js} +2 -2
  127. package/dashboard/dist/assets/{StickyPagination-DRuqKhZt.js.map → StickyPagination-B91Pk9xh.js.map} +1 -1
  128. package/dashboard/dist/assets/{StreamMessageDetail-JwlbRiMn.js → StreamMessageDetail-C7SPqaJt.js} +2 -2
  129. package/dashboard/dist/assets/{StreamMessageDetail-JwlbRiMn.js.map → StreamMessageDetail-C7SPqaJt.js.map} +1 -1
  130. package/dashboard/dist/assets/{SwimlaneTimeline-hu3c4bCJ.js → SwimlaneTimeline-BcHR8ylf.js} +2 -2
  131. package/dashboard/dist/assets/{SwimlaneTimeline-hu3c4bCJ.js.map → SwimlaneTimeline-BcHR8ylf.js.map} +1 -1
  132. package/dashboard/dist/assets/{TaskDetailPage-NqVZF3jW.js → TaskDetailPage-Bqj0I_I0.js} +2 -2
  133. package/dashboard/dist/assets/{TaskDetailPage-NqVZF3jW.js.map → TaskDetailPage-Bqj0I_I0.js.map} +1 -1
  134. package/dashboard/dist/assets/{TasksListPage-BQNaSzCn.js → TasksListPage-BB1f79lL.js} +2 -2
  135. package/dashboard/dist/assets/{TasksListPage-BQNaSzCn.js.map → TasksListPage-BB1f79lL.js.map} +1 -1
  136. package/dashboard/dist/assets/{TimeAgo-Cv35DOiI.js → TimeAgo-BFnODmNe.js} +2 -2
  137. package/dashboard/dist/assets/{TimeAgo-Cv35DOiI.js.map → TimeAgo-BFnODmNe.js.map} +1 -1
  138. package/dashboard/dist/assets/{TimestampCell-DHUXey9s.js → TimestampCell-BXgLOBsr.js} +2 -2
  139. package/dashboard/dist/assets/{TimestampCell-DHUXey9s.js.map → TimestampCell-BXgLOBsr.js.map} +1 -1
  140. package/dashboard/dist/assets/{ToolTestPanel-DvuLFWqQ.js → ToolTestPanel-Bwe3J5lj.js} +2 -2
  141. package/dashboard/dist/assets/{ToolTestPanel-DvuLFWqQ.js.map → ToolTestPanel-Bwe3J5lj.js.map} +1 -1
  142. package/dashboard/dist/assets/{TopicDetailPage-TXX3QNSo.js → TopicDetailPage-DAF07vZ9.js} +2 -2
  143. package/dashboard/dist/assets/{TopicDetailPage-TXX3QNSo.js.map → TopicDetailPage-DAF07vZ9.js.map} +1 -1
  144. package/dashboard/dist/assets/{TopicsPage-h-oyTeEJ.js → TopicsPage-C1gxBUap.js} +2 -2
  145. package/dashboard/dist/assets/{TopicsPage-h-oyTeEJ.js.map → TopicsPage-C1gxBUap.js.map} +1 -1
  146. package/dashboard/dist/assets/{UserName-BceRCeDF.js → UserName-BzXJUE6q.js} +2 -2
  147. package/dashboard/dist/assets/{UserName-BceRCeDF.js.map → UserName-BzXJUE6q.js.map} +1 -1
  148. package/dashboard/dist/assets/{WorkflowExecutionPage-CmHGcaN9.js → WorkflowExecutionPage-SkRU5cRX.js} +2 -2
  149. package/dashboard/dist/assets/{WorkflowExecutionPage-CmHGcaN9.js.map → WorkflowExecutionPage-SkRU5cRX.js.map} +1 -1
  150. package/dashboard/dist/assets/{WorkflowsDashboard-B0r2lQXk.js → WorkflowsDashboard-CZAqRk1N.js} +2 -2
  151. package/dashboard/dist/assets/{WorkflowsDashboard-B0r2lQXk.js.map → WorkflowsDashboard-CZAqRk1N.js.map} +1 -1
  152. package/dashboard/dist/assets/{WorkflowsOverview-BTMc2PJ_.js → WorkflowsOverview-BoN44VTE.js} +2 -2
  153. package/dashboard/dist/assets/{WorkflowsOverview-BTMc2PJ_.js.map → WorkflowsOverview-BoN44VTE.js.map} +1 -1
  154. package/dashboard/dist/assets/{YamlWorkflowDetailPage-DUiCVnZp.js → YamlWorkflowDetailPage-CqjhtdJf.js} +2 -2
  155. package/dashboard/dist/assets/{YamlWorkflowDetailPage-DUiCVnZp.js.map → YamlWorkflowDetailPage-CqjhtdJf.js.map} +1 -1
  156. package/dashboard/dist/assets/{YamlWorkflowsPage-BAuXfwi0.js → YamlWorkflowsPage-CwnJkzyb.js} +2 -2
  157. package/dashboard/dist/assets/{YamlWorkflowsPage-BAuXfwi0.js.map → YamlWorkflowsPage-CwnJkzyb.js.map} +1 -1
  158. package/dashboard/dist/assets/{agents-BvmLCk4h.js → agents-gV0Ys-sY.js} +2 -2
  159. package/dashboard/dist/assets/{agents-BvmLCk4h.js.map → agents-gV0Ys-sY.js.map} +1 -1
  160. package/dashboard/dist/assets/{bots-f_tyhl4I.js → bots-B97itB3I.js} +2 -2
  161. package/dashboard/dist/assets/{bots-f_tyhl4I.js.map → bots-B97itB3I.js.map} +1 -1
  162. package/dashboard/dist/assets/{capabilities-DNo5bqLx.js → capabilities-CR9xZgGd.js} +2 -2
  163. package/dashboard/dist/assets/{capabilities-DNo5bqLx.js.map → capabilities-CR9xZgGd.js.map} +1 -1
  164. package/dashboard/dist/assets/{controlplane-Dyyj2Irb.js → controlplane-YxvP1KCa.js} +2 -2
  165. package/dashboard/dist/assets/{controlplane-Dyyj2Irb.js.map → controlplane-YxvP1KCa.js.map} +1 -1
  166. package/dashboard/dist/assets/{escalation-columns-DIigeTOK.js → escalation-columns-uq-IV2aj.js} +2 -2
  167. package/dashboard/dist/assets/{escalation-columns-DIigeTOK.js.map → escalation-columns-uq-IV2aj.js.map} +1 -1
  168. package/dashboard/dist/assets/index-3ezfWLkE.js +6 -0
  169. package/dashboard/dist/assets/index-3ezfWLkE.js.map +1 -0
  170. package/dashboard/dist/assets/{index-CsKiRyhy.js → index-B9BBCqLI.js} +2 -2
  171. package/dashboard/dist/assets/{index-CsKiRyhy.js.map → index-B9BBCqLI.js.map} +1 -1
  172. package/dashboard/dist/assets/{index-DL83W7Gu.js → index-BQpV-DTG.js} +2 -2
  173. package/dashboard/dist/assets/{index-DL83W7Gu.js.map → index-BQpV-DTG.js.map} +1 -1
  174. package/dashboard/dist/assets/index-Bp9KBLT5.js +2 -0
  175. package/dashboard/dist/assets/{index-D7ESqn22.js.map → index-Bp9KBLT5.js.map} +1 -1
  176. package/dashboard/dist/assets/{index-DvxxrFBo.js → index-CFbo9FU9.js} +2 -2
  177. package/dashboard/dist/assets/{index-DvxxrFBo.js.map → index-CFbo9FU9.js.map} +1 -1
  178. package/dashboard/dist/assets/{index-e2X-s0EQ.js → index-CIpHj4di.js} +2 -2
  179. package/dashboard/dist/assets/{index-e2X-s0EQ.js.map → index-CIpHj4di.js.map} +1 -1
  180. package/dashboard/dist/assets/{index-BMlQYOE1.js → index-CIwlVfvV.js} +10 -10
  181. package/dashboard/dist/assets/index-CIwlVfvV.js.map +1 -0
  182. package/dashboard/dist/assets/{index-BNZknxFY.js → index-CUZ6LYye.js} +2 -2
  183. package/dashboard/dist/assets/{index-BNZknxFY.js.map → index-CUZ6LYye.js.map} +1 -1
  184. package/dashboard/dist/assets/index-Cfvkl2J0.js +13 -0
  185. package/dashboard/dist/assets/index-Cfvkl2J0.js.map +1 -0
  186. package/dashboard/dist/assets/{index-DWse7ERF.js → index-DMeaiKgf.js} +2 -2
  187. package/dashboard/dist/assets/{index-DWse7ERF.js.map → index-DMeaiKgf.js.map} +1 -1
  188. package/dashboard/dist/assets/{index-C-Xr2V3F.js → index-DwOnWeu8.js} +2 -2
  189. package/dashboard/dist/assets/{index-C-Xr2V3F.js.map → index-DwOnWeu8.js.map} +1 -1
  190. package/dashboard/dist/assets/index-SGyrXGp8.js +3 -0
  191. package/dashboard/dist/assets/{index-CegPUKpc.js.map → index-SGyrXGp8.js.map} +1 -1
  192. package/dashboard/dist/assets/{index-PcyGjmBm.js → index-ipqwPavs.js} +2 -2
  193. package/dashboard/dist/assets/{index-PcyGjmBm.js.map → index-ipqwPavs.js.map} +1 -1
  194. package/dashboard/dist/assets/invoke-context-DrVyUEfs.js +2 -0
  195. package/dashboard/dist/assets/invoke-context-DrVyUEfs.js.map +1 -0
  196. package/dashboard/dist/assets/{knowledge-Coo6CKzo.js → knowledge-XX6cW4Ob.js} +2 -2
  197. package/dashboard/dist/assets/{knowledge-Coo6CKzo.js.map → knowledge-XX6cW4Ob.js.map} +1 -1
  198. package/dashboard/dist/assets/{mcp-Cz5eFnP_.js → mcp-CH13hNH2.js} +2 -2
  199. package/dashboard/dist/assets/{mcp-Cz5eFnP_.js.map → mcp-CH13hNH2.js.map} +1 -1
  200. package/dashboard/dist/assets/{mcp-query-BtnuO4LF.js → mcp-query-Duydd3JA.js} +2 -2
  201. package/dashboard/dist/assets/{mcp-query-BtnuO4LF.js.map → mcp-query-Duydd3JA.js.map} +1 -1
  202. package/dashboard/dist/assets/{personas-C2-LgpHQ.js → personas-mDk4lLQS.js} +2 -2
  203. package/dashboard/dist/assets/{personas-C2-LgpHQ.js.map → personas-mDk4lLQS.js.map} +1 -1
  204. package/dashboard/dist/assets/{pipelines-TuXQvUA-.js → pipelines-B5GcgCeF.js} +2 -2
  205. package/dashboard/dist/assets/{pipelines-TuXQvUA-.js.map → pipelines-B5GcgCeF.js.map} +1 -1
  206. package/dashboard/dist/assets/{resolver-payload-C1dXB3n6.js → resolver-payload-m9AGKZ3a.js} +2 -2
  207. package/dashboard/dist/assets/{resolver-payload-C1dXB3n6.js.map → resolver-payload-m9AGKZ3a.js.map} +1 -1
  208. package/dashboard/dist/assets/{tasks-OUzpu__z.js → tasks-CItmNsRp.js} +2 -2
  209. package/dashboard/dist/assets/{tasks-OUzpu__z.js.map → tasks-CItmNsRp.js.map} +1 -1
  210. package/dashboard/dist/assets/{topics-B8bdrBaW.js → topics-CJYG7BX5.js} +2 -2
  211. package/dashboard/dist/assets/{topics-B8bdrBaW.js.map → topics-CJYG7BX5.js.map} +1 -1
  212. package/dashboard/dist/assets/{useDebouncedValue-Cp5ZOtVE.js → useDebouncedValue-BrwgXcp8.js} +2 -2
  213. package/dashboard/dist/assets/{useDebouncedValue-Cp5ZOtVE.js.map → useDebouncedValue-BrwgXcp8.js.map} +1 -1
  214. package/dashboard/dist/assets/{useNamespace-DtQe3wZ5.js → useNamespace-CHty0HAS.js} +2 -2
  215. package/dashboard/dist/assets/{useNamespace-DtQe3wZ5.js.map → useNamespace-CHty0HAS.js.map} +1 -1
  216. package/dashboard/dist/assets/{useYamlActivityEvents-CS22c15X.js → useYamlActivityEvents-CoTsia7t.js} +2 -2
  217. package/dashboard/dist/assets/{useYamlActivityEvents-CS22c15X.js.map → useYamlActivityEvents-CoTsia7t.js.map} +1 -1
  218. package/dashboard/dist/assets/{yaml-workflows-HQIki3hI.js → yaml-workflows-CiWwx5rM.js} +2 -2
  219. package/dashboard/dist/assets/{yaml-workflows-HQIki3hI.js.map → yaml-workflows-CiWwx5rM.js.map} +1 -1
  220. package/dashboard/dist/index.html +1 -1
  221. package/docs/api/http/workflows.md +28 -1
  222. package/docs/api/mcp/admin.md +40 -4
  223. package/docs/code-owned-configuration.md +1 -1
  224. package/docs/dashboard.md +1 -1
  225. package/docs/design-principles.md +6 -5
  226. package/docs/hitl/form.md +12 -7
  227. package/docs/hitl/invoke-form.md +6 -3
  228. package/docs/hitl/lookups.md +21 -0
  229. package/docs/hitl/x-lt-validation.md +50 -3
  230. package/docs/hitl/x-lt-widget.md +21 -0
  231. package/docs/hitl-guide.md +5 -2
  232. package/package.json +1 -1
  233. package/dashboard/dist/assets/ResolverForm-Dy0yirtP.js +0 -2
  234. package/dashboard/dist/assets/ResolverForm-Dy0yirtP.js.map +0 -1
  235. package/dashboard/dist/assets/ScanCodesPage-FiYIYB-m.js +0 -2
  236. package/dashboard/dist/assets/index-BMlQYOE1.js.map +0 -1
  237. package/dashboard/dist/assets/index-CegPUKpc.js +0 -3
  238. package/dashboard/dist/assets/index-D7ESqn22.js +0 -2
  239. package/dashboard/dist/assets/index-DPLssnMW.js +0 -6
  240. package/dashboard/dist/assets/index-DPLssnMW.js.map +0 -1
  241. package/dashboard/dist/assets/index-DoETPlJP.js +0 -11
  242. package/dashboard/dist/assets/index-DoETPlJP.js.map +0 -1
  243. package/dashboard/dist/assets/seed-form-json-DvPsISxD.js +0 -2
  244. package/dashboard/dist/assets/seed-form-json-DvPsISxD.js.map +0 -1
@@ -1,7 +1,8 @@
1
1
  import type { ResolverValidationContext } from './validate-resolver-payload';
2
2
  /**
3
3
  * The context an invoke form validates and renders against. The pass itself
4
- * supplies the live values under `input` and `resolver`; the envelope
5
- * metadata is the only other domain an invoke form can reference.
4
+ * supplies the live values under `input` and `resolver`; `metadata` is the
5
+ * envelope metadata and `lookup` holds resolved versioned knowledge editions
6
+ * keyed by `as ?? key`. The lookup domain is present only when supplied.
6
7
  */
7
- export declare function buildInvokeFormContext(metadata: Record<string, unknown> | null | undefined): ResolverValidationContext;
8
+ export declare function buildInvokeFormContext(metadata: Record<string, unknown> | null | undefined, lookup?: Record<string, unknown> | null): ResolverValidationContext;
@@ -3,9 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildInvokeFormContext = buildInvokeFormContext;
4
4
  /**
5
5
  * The context an invoke form validates and renders against. The pass itself
6
- * supplies the live values under `input` and `resolver`; the envelope
7
- * metadata is the only other domain an invoke form can reference.
6
+ * supplies the live values under `input` and `resolver`; `metadata` is the
7
+ * envelope metadata and `lookup` holds resolved versioned knowledge editions
8
+ * keyed by `as ?? key`. The lookup domain is present only when supplied.
8
9
  */
9
- function buildInvokeFormContext(metadata) {
10
- return { metadata: metadata ?? {} };
10
+ function buildInvokeFormContext(metadata, lookup) {
11
+ return { metadata: metadata ?? {}, ...(lookup ? { lookup } : {}) };
11
12
  }
@@ -1,12 +1,12 @@
1
1
  export declare const X_LT_OPTIONS = "x-lt-options";
2
- export type OptionValue = string | number;
2
+ export type OptionValue = string | number | boolean;
3
3
  /** One resolved option: the payload value and the rendered label. */
4
4
  export interface ResolvedOption {
5
5
  value: OptionValue;
6
6
  label: string;
7
7
  }
8
8
  /**
9
- * The field's effective option list: the static `enum` when present, else the
10
- * entries at the token's `"domain.path"`.
9
+ * The field's effective option list: the static `enum` when present, else an
10
+ * inline literal list, else the entries at the token's `"domain.path"`.
11
11
  */
12
12
  export declare function resolveFieldOptions(fieldSchema: Record<string, unknown> | null | undefined, ctx: Record<string, unknown> | undefined): ResolvedOption[] | undefined;
@@ -10,7 +10,9 @@ 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" or an ORDERED array of paths e.g.
13
+ * x-lt-options "domain.path", an ORDERED array of paths, or an inline
14
+ * literal list (an array with no string entries: `{ value,
15
+ * label }` objects, numbers, or booleans) — e.g.
14
16
  * "envelope.left_quantity_options" or
15
17
  * ["lookup.reasons.items", "envelope.reject_reason_items"].
16
18
  * With an array, the first entry that resolves to options
@@ -42,7 +44,15 @@ exports.resolveFieldOptions = resolveFieldOptions;
42
44
  const ctx_path_1 = require("./ctx-path");
43
45
  exports.X_LT_OPTIONS = 'x-lt-options';
44
46
  function isScalar(v) {
45
- return typeof v === 'string' || (typeof v === 'number' && Number.isFinite(v));
47
+ return typeof v === 'string' || typeof v === 'boolean' || (typeof v === 'number' && Number.isFinite(v));
48
+ }
49
+ /**
50
+ * An array token with no string entries is the option list itself, written
51
+ * inline. A bare string is always a context path, so a literal string value
52
+ * is written as `{ value, label }`.
53
+ */
54
+ function isLiteralList(token) {
55
+ return Array.isArray(token) && token.length > 0 && !token.some((e) => typeof e === 'string');
46
56
  }
47
57
  /** Normalize one array entry, mixed arrays resolving each entry independently. */
48
58
  function toOption(entry) {
@@ -58,19 +68,23 @@ function toOption(entry) {
58
68
  return null;
59
69
  }
60
70
  /**
61
- * The field's effective option list: the static `enum` when present, else the
62
- * entries at the token's `"domain.path"`.
71
+ * The field's effective option list: the static `enum` when present, else an
72
+ * inline literal list, else the entries at the token's `"domain.path"`.
63
73
  */
64
74
  function resolveFieldOptions(fieldSchema, ctx) {
65
75
  if (!fieldSchema)
66
76
  return undefined;
67
77
  // Enum entries pass through verbatim as values (whatever their type), each
68
- // labeled by its string form — the legacy membership contract is unchanged.
78
+ // labeled by its string form.
69
79
  const staticEnum = fieldSchema.enum;
70
80
  if (Array.isArray(staticEnum) && staticEnum.length > 0) {
71
81
  return staticEnum.map((v) => ({ value: v, label: String(v) }));
72
82
  }
73
83
  const token = fieldSchema[exports.X_LT_OPTIONS];
84
+ if (isLiteralList(token)) {
85
+ const options = token.map(toOption).filter((o) => o !== null);
86
+ return options.length > 0 ? options : undefined;
87
+ }
74
88
  const paths = (typeof token === 'string' ? [token] : Array.isArray(token) ? token : [])
75
89
  .filter((p) => typeof p === 'string' && p.length > 0);
76
90
  if (paths.length === 0)
@@ -6,3 +6,8 @@ export type ShowIfContext = HelpTokenContext;
6
6
  * An array of conditions shows the field only when every one holds.
7
7
  */
8
8
  export declare function evaluateShowIf(condition: unknown, ctx: ShowIfContext | null | undefined): boolean;
9
+ /**
10
+ * `x-lt-hide-if-empty`: the field is suppressed while its value is empty
11
+ * (null, undefined, '', false, or 0). Render and validation share this test.
12
+ */
13
+ export declare function isHiddenIfEmpty(fieldSchema: Record<string, unknown> | undefined, value: unknown): boolean;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.evaluateShowIf = evaluateShowIf;
4
+ exports.isHiddenIfEmpty = isHiddenIfEmpty;
4
5
  /**
5
6
  * x-lt-showIf — conditional field visibility. A form_schema property may
6
7
  * declare `x-lt-showIf: "domain.path"` to show the field only when the value
@@ -85,3 +86,12 @@ function evaluateShowIf(condition, ctx) {
85
86
  return true;
86
87
  return negate ? !isTruthy(value) : isTruthy(value);
87
88
  }
89
+ /**
90
+ * `x-lt-hide-if-empty`: the field is suppressed while its value is empty
91
+ * (null, undefined, '', false, or 0). Render and validation share this test.
92
+ */
93
+ function isHiddenIfEmpty(fieldSchema, value) {
94
+ if (fieldSchema?.['x-lt-hide-if-empty'] !== true)
95
+ return false;
96
+ return value === null || value === undefined || value === '' || value === false || value === 0;
97
+ }
@@ -51,6 +51,8 @@ const mcp_1 = require("../services/mcp");
51
51
  const yamlWorkflowWorkers = __importStar(require("../services/yaml-workflow/workers"));
52
52
  const migrate_1 = require("../lib/db/migrate");
53
53
  const apply_report_1 = require("./apply-report");
54
+ const escalation_2 = require("../types/escalation");
55
+ const lookup_refs_1 = require("../services/knowledge/lookup-refs");
54
56
  /**
55
57
  * Create a named no-op workflow function for readonly/observer workers.
56
58
  * The function name is used by `registerWorker` for discovery.
@@ -221,6 +223,13 @@ async function startWorkers(startConfig, workers, builtinMcpServerFactories) {
221
223
  for (const w of workersWithConfig) {
222
224
  const workflowType = w.workflow.name;
223
225
  const c = w.config;
226
+ if (c.inputLookups !== undefined) {
227
+ (0, escalation_2.assertLookupRefs)(c.inputLookups);
228
+ // Editions may be seeded after registration; a missing pin warns here and surfaces on the Invoke Tool page.
229
+ for (const problem of await (0, lookup_refs_1.describeMissingLookupRefs)(c.inputLookups)) {
230
+ logger_1.loggerRegistry.warn(`[long-tail] ${workflowType}: ${problem}`);
231
+ }
232
+ }
224
233
  const declaration = {
225
234
  workflow_type: workflowType,
226
235
  task_queue: w.taskQueue,
@@ -235,6 +244,7 @@ async function startWorkers(startConfig, workers, builtinMcpServerFactories) {
235
244
  envelope_schema: c.envelopeSchema ?? null,
236
245
  input_schema: c.inputSchema ?? null,
237
246
  icon: c.icon ?? null,
247
+ input_lookups: c.inputLookups ?? null,
238
248
  resolver_schema: c.resolverSchema ?? null,
239
249
  cron_schedule: c.cronSchedule ?? null,
240
250
  execute_as: c.executeAs ?? null,
@@ -87,7 +87,7 @@ export declare const findEscalationsSchema: z.ZodObject<{
87
87
  offset: number;
88
88
  role?: string | undefined;
89
89
  subtype?: string | undefined;
90
- status?: "pending" | "cancelled" | "resolved" | "expired" | undefined;
90
+ status?: "pending" | "resolved" | "cancelled" | "expired" | undefined;
91
91
  available?: boolean | undefined;
92
92
  roles?: string[] | undefined;
93
93
  type?: string | undefined;
@@ -112,7 +112,7 @@ export declare const findEscalationsSchema: z.ZodObject<{
112
112
  }, {
113
113
  role?: string | undefined;
114
114
  subtype?: string | undefined;
115
- status?: "pending" | "cancelled" | "resolved" | "expired" | undefined;
115
+ status?: "pending" | "resolved" | "cancelled" | "expired" | undefined;
116
116
  available?: boolean | undefined;
117
117
  roles?: string[] | undefined;
118
118
  type?: string | undefined;
@@ -231,6 +231,13 @@ export declare const bulkTriageSchema: z.ZodObject<{
231
231
  hint?: string | undefined;
232
232
  }>;
233
233
  export declare const listWorkflowConfigsSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
234
+ export declare const getWorkflowConfigSchema: z.ZodObject<{
235
+ workflow_type: z.ZodString;
236
+ }, "strip", z.ZodTypeAny, {
237
+ workflow_type: string;
238
+ }, {
239
+ workflow_type: string;
240
+ }>;
234
241
  export declare const upsertWorkflowConfigSchema: z.ZodObject<{
235
242
  workflow_type: z.ZodString;
236
243
  invocable: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
@@ -246,6 +253,25 @@ export declare const upsertWorkflowConfigSchema: z.ZodObject<{
246
253
  envelope_schema: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodAny>>>>;
247
254
  resolver_schema: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodAny>>>>;
248
255
  cron_schedule: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
256
+ input_schema: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodAny>>>>;
257
+ input_lookups: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{
258
+ domain: z.ZodString;
259
+ key: z.ZodString;
260
+ version: z.ZodNumber;
261
+ as: z.ZodOptional<z.ZodString>;
262
+ }, "strip", z.ZodTypeAny, {
263
+ domain: string;
264
+ key: string;
265
+ version: number;
266
+ as?: string | undefined;
267
+ }, {
268
+ domain: string;
269
+ key: string;
270
+ version: number;
271
+ as?: string | undefined;
272
+ }>, "many">>>>;
273
+ icon: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
274
+ read_safe: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
249
275
  }, "strip", z.ZodTypeAny, {
250
276
  workflow_type: string;
251
277
  invocable: boolean;
@@ -257,9 +283,18 @@ export declare const upsertWorkflowConfigSchema: z.ZodObject<{
257
283
  consumes: string[];
258
284
  tool_tags: string[];
259
285
  envelope_schema: Record<string, any> | null;
286
+ input_schema: Record<string, any> | null;
287
+ icon: string | null;
288
+ input_lookups: {
289
+ domain: string;
290
+ key: string;
291
+ version: number;
292
+ as?: string | undefined;
293
+ }[] | null;
260
294
  resolver_schema: Record<string, any> | null;
261
295
  cron_schedule: string | null;
262
296
  execute_as: string | null;
297
+ read_safe: boolean;
263
298
  certified?: boolean | undefined;
264
299
  }, {
265
300
  workflow_type: string;
@@ -273,9 +308,18 @@ export declare const upsertWorkflowConfigSchema: z.ZodObject<{
273
308
  consumes?: string[] | undefined;
274
309
  tool_tags?: string[] | undefined;
275
310
  envelope_schema?: Record<string, any> | null | undefined;
311
+ input_schema?: Record<string, any> | null | undefined;
312
+ icon?: string | null | undefined;
313
+ input_lookups?: {
314
+ domain: string;
315
+ key: string;
316
+ version: number;
317
+ as?: string | undefined;
318
+ }[] | null | undefined;
276
319
  resolver_schema?: Record<string, any> | null | undefined;
277
320
  cron_schedule?: string | null | undefined;
278
321
  execute_as?: string | null | undefined;
322
+ read_safe?: boolean | undefined;
279
323
  }>;
280
324
  export declare const deleteWorkflowConfigSchema: z.ZodObject<{
281
325
  workflow_type: z.ZodString;
@@ -1253,14 +1297,14 @@ export declare const findByMetadataSchema: z.ZodObject<{
1253
1297
  limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
1254
1298
  offset: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
1255
1299
  }, "strip", z.ZodTypeAny, {
1256
- value: string;
1257
1300
  key: string;
1301
+ value: string;
1258
1302
  limit: number;
1259
1303
  offset: number;
1260
1304
  status?: string | undefined;
1261
1305
  }, {
1262
- value: string;
1263
1306
  key: string;
1307
+ value: string;
1264
1308
  status?: string | undefined;
1265
1309
  limit?: number | undefined;
1266
1310
  offset?: number | undefined;
@@ -1272,14 +1316,14 @@ export declare const claimByMetadataSchema: z.ZodObject<{
1272
1316
  assignee: z.ZodOptional<z.ZodString>;
1273
1317
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
1274
1318
  }, "strip", z.ZodTypeAny, {
1275
- value: string;
1276
1319
  key: string;
1320
+ value: string;
1277
1321
  metadata?: Record<string, any> | undefined;
1278
1322
  durationMinutes?: number | undefined;
1279
1323
  assignee?: string | undefined;
1280
1324
  }, {
1281
- value: string;
1282
1325
  key: string;
1326
+ value: string;
1283
1327
  metadata?: Record<string, any> | undefined;
1284
1328
  durationMinutes?: number | undefined;
1285
1329
  assignee?: string | undefined;
@@ -1291,14 +1335,14 @@ export declare const resolveByMetadataSchema: z.ZodObject<{
1291
1335
  assignee: z.ZodOptional<z.ZodString>;
1292
1336
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
1293
1337
  }, "strip", z.ZodTypeAny, {
1294
- value: string;
1295
1338
  key: string;
1339
+ value: string;
1296
1340
  resolverPayload: Record<string, any>;
1297
1341
  metadata?: Record<string, any> | undefined;
1298
1342
  assignee?: string | undefined;
1299
1343
  }, {
1300
- value: string;
1301
1344
  key: string;
1345
+ value: string;
1302
1346
  resolverPayload: Record<string, any>;
1303
1347
  metadata?: Record<string, any> | undefined;
1304
1348
  assignee?: string | undefined;
@@ -1996,11 +2040,11 @@ export declare const timelineByFacetSchema: z.ZodObject<{
1996
2040
  key: z.ZodString;
1997
2041
  value: z.ZodString;
1998
2042
  }, "strip", z.ZodTypeAny, {
1999
- value: string;
2000
2043
  key: string;
2001
- }, {
2002
2044
  value: string;
2045
+ }, {
2003
2046
  key: string;
2047
+ value: string;
2004
2048
  }>;
2005
2049
  query: z.ZodOptional<z.ZodObject<{
2006
2050
  role: z.ZodOptional<z.ZodString>;
@@ -2079,8 +2123,8 @@ export declare const timelineByFacetSchema: z.ZodObject<{
2079
2123
  limit: z.ZodOptional<z.ZodNumber>;
2080
2124
  }, "strip", z.ZodTypeAny, {
2081
2125
  facet: {
2082
- value: string;
2083
2126
  key: string;
2127
+ value: string;
2084
2128
  };
2085
2129
  query?: {
2086
2130
  entity?: string | undefined;
@@ -2111,8 +2155,8 @@ export declare const timelineByFacetSchema: z.ZodObject<{
2111
2155
  liveStatuses?: string[] | undefined;
2112
2156
  }, {
2113
2157
  facet: {
2114
- value: string;
2115
2158
  key: string;
2159
+ value: string;
2116
2160
  };
2117
2161
  query?: {
2118
2162
  entity?: string | undefined;
@@ -2191,8 +2235,8 @@ export declare const upsertScanSchemeSchema: z.ZodObject<{
2191
2235
  grant_max_uses: z.ZodOptional<z.ZodNumber>;
2192
2236
  enabled: z.ZodOptional<z.ZodBoolean>;
2193
2237
  }, "strip", z.ZodTypeAny, {
2194
- name: string;
2195
2238
  version: number;
2239
+ name: string;
2196
2240
  target_facet: string;
2197
2241
  description?: string | undefined;
2198
2242
  enabled?: boolean | undefined;
@@ -2203,8 +2247,8 @@ export declare const upsertScanSchemeSchema: z.ZodObject<{
2203
2247
  grant_ttl_seconds?: number | undefined;
2204
2248
  grant_max_uses?: number | undefined;
2205
2249
  }, {
2206
- name: string;
2207
2250
  version: number;
2251
+ name: string;
2208
2252
  target_facet: string;
2209
2253
  description?: string | undefined;
2210
2254
  enabled?: boolean | undefined;
@@ -2226,12 +2270,12 @@ export declare const upsertScanRuleSchema: z.ZodObject<{
2226
2270
  availability: z.ZodOptional<z.ZodEnum<["available", "claimed", "mine", "any"]>>;
2227
2271
  facets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
2228
2272
  }, "strip", z.ZodTypeAny, {
2229
- status?: "pending" | "cancelled" | "resolved" | undefined;
2273
+ status?: "pending" | "resolved" | "cancelled" | undefined;
2230
2274
  roles?: string[] | undefined;
2231
2275
  facets?: Record<string, any> | undefined;
2232
2276
  availability?: "available" | "claimed" | "mine" | "any" | undefined;
2233
2277
  }, {
2234
- status?: "pending" | "cancelled" | "resolved" | undefined;
2278
+ status?: "pending" | "resolved" | "cancelled" | undefined;
2235
2279
  roles?: string[] | undefined;
2236
2280
  facets?: Record<string, any> | undefined;
2237
2281
  availability?: "available" | "claimed" | "mine" | "any" | undefined;
@@ -2346,7 +2390,7 @@ export declare const upsertScanRuleSchema: z.ZodObject<{
2346
2390
  autoSelectSingle: z.ZodOptional<z.ZodBoolean>;
2347
2391
  }, "strip", z.ZodTypeAny, {
2348
2392
  query: {
2349
- status?: "pending" | "cancelled" | "resolved" | undefined;
2393
+ status?: "pending" | "resolved" | "cancelled" | undefined;
2350
2394
  roles?: string[] | undefined;
2351
2395
  facets?: Record<string, any> | undefined;
2352
2396
  availability?: "available" | "claimed" | "mine" | "any" | undefined;
@@ -2387,7 +2431,7 @@ export declare const upsertScanRuleSchema: z.ZodObject<{
2387
2431
  autoSelectSingle?: boolean | undefined;
2388
2432
  }, {
2389
2433
  query: {
2390
- status?: "pending" | "cancelled" | "resolved" | undefined;
2434
+ status?: "pending" | "resolved" | "cancelled" | undefined;
2391
2435
  roles?: string[] | undefined;
2392
2436
  facets?: Record<string, any> | undefined;
2393
2437
  availability?: "available" | "claimed" | "mine" | "any" | undefined;
@@ -2454,7 +2498,7 @@ export declare const upsertScanRuleSchema: z.ZodObject<{
2454
2498
  scheme_version: number;
2455
2499
  steps: {
2456
2500
  query: {
2457
- status?: "pending" | "cancelled" | "resolved" | undefined;
2501
+ status?: "pending" | "resolved" | "cancelled" | undefined;
2458
2502
  roles?: string[] | undefined;
2459
2503
  facets?: Record<string, any> | undefined;
2460
2504
  availability?: "available" | "claimed" | "mine" | "any" | undefined;
@@ -2509,7 +2553,7 @@ export declare const upsertScanRuleSchema: z.ZodObject<{
2509
2553
  scheme_version: number;
2510
2554
  steps: {
2511
2555
  query: {
2512
- status?: "pending" | "cancelled" | "resolved" | undefined;
2556
+ status?: "pending" | "resolved" | "cancelled" | undefined;
2513
2557
  roles?: string[] | undefined;
2514
2558
  facets?: Record<string, any> | undefined;
2515
2559
  availability?: "available" | "claimed" | "mine" | "any" | undefined;
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- 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.patchUserPropertiesSchema = 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.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 = exports.assignPersonaSchema = 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 = exports.facetQuerySchema = void 0;
3
+ 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.patchUserPropertiesSchema = 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.getWorkflowConfigSchema = 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.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 = exports.assignPersonaSchema = exports.unlinkPersonaRoleSchema = 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 = exports.facetQuerySchema = exports.findOrphanedSignalsSchema = void 0;
6
6
  /**
7
7
  * Zod schemas for the admin MCP server tools.
8
8
  *
@@ -101,6 +101,9 @@ exports.bulkTriageSchema = zod_1.z.object({
101
101
  });
102
102
  // ── workflow config (routes/workflows/config.ts) ────────────────────────────
103
103
  exports.listWorkflowConfigsSchema = zod_1.z.object({});
104
+ exports.getWorkflowConfigSchema = zod_1.z.object({
105
+ workflow_type: zod_1.z.string().describe('Registered workflow type name'),
106
+ });
104
107
  exports.upsertWorkflowConfigSchema = zod_1.z.object({
105
108
  workflow_type: zod_1.z.string().describe('Workflow function name'),
106
109
  invocable: zod_1.z.boolean().optional().default(false),
@@ -120,6 +123,19 @@ exports.upsertWorkflowConfigSchema = zod_1.z.object({
120
123
  .describe('DEPRECATED: the escalation form is a versioned schema owned by the target role. Legacy fallback only.')
121
124
  .default(null),
122
125
  cron_schedule: zod_1.z.string().nullable().optional().default(null),
126
+ input_schema: zod_1.z.record(zod_1.z.any()).nullable().optional().default(null)
127
+ .describe('x-lt-* JSON Schema for the invoke form; invoke validates data against it'),
128
+ input_lookups: zod_1.z.array(zod_1.z.object({
129
+ domain: zod_1.z.string(),
130
+ key: zod_1.z.string(),
131
+ version: zod_1.z.number().int().min(1),
132
+ as: zod_1.z.string().optional(),
133
+ })).nullable().optional().default(null)
134
+ .describe('Versioned knowledge refs the invoke form reads as lookup.<as ?? key>'),
135
+ icon: zod_1.z.string().nullable().optional().default(null)
136
+ .describe('Curated icon name (WORKFLOW_ICONS); unknown names are refused'),
137
+ read_safe: zod_1.z.boolean().optional().default(false)
138
+ .describe('Side-effect-free; eligible for invoke_workflow_read_safe'),
123
139
  });
124
140
  exports.deleteWorkflowConfigSchema = zod_1.z.object({
125
141
  workflow_type: zod_1.z.string().describe('Workflow type to unregister (deletes the registration row)'),
@@ -35,15 +35,25 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.registerWorkflowConfigTools = registerWorkflowConfigTools;
37
37
  const configService = __importStar(require("../../../services/config"));
38
+ const lookup_cache_1 = require("../../../services/knowledge/lookup-cache");
39
+ const lookup_refs_1 = require("../../../services/knowledge/lookup-refs");
38
40
  const ltconfig_1 = require("../../../modules/ltconfig");
39
41
  const cron_1 = require("../../../services/cron");
42
+ const invocable_1 = require("../../../api/workflows/invocable");
43
+ const workflow_icons_1 = require("../../../types/workflow-icons");
44
+ const escalation_1 = require("../../../types/escalation");
40
45
  const schemas_1 = require("./schemas");
46
+ const errorResult = (error) => ({
47
+ content: [{ type: 'text', text: JSON.stringify({ error }) }],
48
+ isError: true,
49
+ });
41
50
  function registerWorkflowConfigTools(server) {
42
51
  // mirrors GET /api/workflows/config
43
52
  server.registerTool('list_workflow_configs', {
44
53
  title: 'List Workflow Configs',
45
54
  description: 'List all certified workflow configurations. Shows workflow type, ' +
46
- 'task queue, roles, invocable flag, and description.',
55
+ 'task queue, roles, invocable flag, and description. Call ' +
56
+ 'get_workflow_config for the full row including input_schema.',
47
57
  inputSchema: schemas_1.listWorkflowConfigsSchema,
48
58
  }, async (_args) => {
49
59
  const configs = await configService.listWorkflowConfigs();
@@ -64,15 +74,49 @@ function registerWorkflowConfigTools(server) {
64
74
  }],
65
75
  };
66
76
  });
77
+ // mirrors GET /api/workflows/:type/config, plus the resolved lookup data the form reads
78
+ server.registerTool('get_workflow_config', {
79
+ title: 'Get Workflow Config',
80
+ description: 'The full configuration row for one workflow: input_schema (the x-lt-* form ' +
81
+ 'an invoke payload must satisfy), envelope_schema (its metadata is the base ' +
82
+ 'of every run), input_lookups, roles, and tier. input_lookup_data carries the ' +
83
+ 'resolved knowledge editions keyed as the form reads them (lookup.<as ?? key>).',
84
+ inputSchema: schemas_1.getWorkflowConfigSchema,
85
+ }, async (args) => {
86
+ const config = await configService.getWorkflowConfig(args.workflow_type);
87
+ if (!config)
88
+ return errorResult('Workflow config not found');
89
+ const tier = config.certified ? invocable_1.WORKFLOW_TIERS.CERTIFIED : invocable_1.WORKFLOW_TIERS.REGISTERED;
90
+ const input_lookup_data = await (0, lookup_cache_1.resolveLookupContext)(config.input_lookups);
91
+ return {
92
+ content: [{ type: 'text', text: JSON.stringify({ ...config, tier, input_lookup_data }) }],
93
+ };
94
+ });
67
95
  // mirrors PUT /api/workflows/:type/config
68
96
  server.registerTool('upsert_workflow_config', {
69
97
  title: 'Upsert Workflow Config',
70
98
  description: 'Create or replace a workflow configuration (certify). Activates the ' +
71
99
  'interceptor for task tracking, escalation chains, and invocation controls. ' +
100
+ 'Full replace, matching PUT /api/workflows/:type/config: omitted fields clear ' +
101
+ 'to their defaults, so send the whole profile (start from get_workflow_config). ' +
72
102
  'Invalidates the config cache and restarts cron if schedule changes.',
73
103
  inputSchema: schemas_1.upsertWorkflowConfigSchema,
74
104
  }, async (args) => {
75
- const config = await configService.upsertWorkflowConfig({
105
+ if (args.icon && !(0, workflow_icons_1.isWorkflowIcon)(args.icon)) {
106
+ return errorResult(`Unknown workflow icon "${args.icon}"; choose one of WORKFLOW_ICONS`);
107
+ }
108
+ if (args.input_lookups != null) {
109
+ try {
110
+ (0, escalation_1.assertLookupRefs)(args.input_lookups);
111
+ }
112
+ catch (err) {
113
+ return errorResult(err.message);
114
+ }
115
+ const missing = await (0, lookup_refs_1.describeMissingLookupRefs)(args.input_lookups);
116
+ if (missing.length)
117
+ return errorResult(missing.join('; '));
118
+ }
119
+ const declaration = {
76
120
  workflow_type: args.workflow_type,
77
121
  invocable: args.invocable,
78
122
  certified: args.certified,
@@ -85,9 +129,14 @@ function registerWorkflowConfigTools(server) {
85
129
  consumes: args.consumes,
86
130
  tool_tags: args.tool_tags,
87
131
  envelope_schema: args.envelope_schema,
132
+ input_schema: args.input_schema,
133
+ input_lookups: args.input_lookups,
134
+ icon: args.icon,
135
+ read_safe: args.read_safe,
88
136
  resolver_schema: args.resolver_schema,
89
137
  cron_schedule: args.cron_schedule,
90
- });
138
+ };
139
+ const config = await configService.upsertWorkflowConfig(declaration);
91
140
  ltconfig_1.ltConfig.invalidate();
92
141
  await cron_1.cronRegistry.restartCron(config);
93
142
  return {
@@ -102,12 +151,8 @@ function registerWorkflowConfigTools(server) {
102
151
  inputSchema: schemas_1.deleteWorkflowConfigSchema,
103
152
  }, async (args) => {
104
153
  const deleted = await configService.deleteWorkflowConfig(args.workflow_type);
105
- if (!deleted) {
106
- return {
107
- content: [{ type: 'text', text: JSON.stringify({ error: 'Workflow config not found' }) }],
108
- isError: true,
109
- };
110
- }
154
+ if (!deleted)
155
+ return errorResult('Workflow config not found');
111
156
  ltconfig_1.ltConfig.invalidate();
112
157
  return {
113
158
  content: [{
@@ -85,9 +85,8 @@ function registerWorkflowTools(server) {
85
85
  };
86
86
  });
87
87
  // The invoke input gate: data is validated against input_schema when declared.
88
- const inputSchemaRejection = async (args) => {
89
- const config = await configService.getWorkflowConfig(args.workflow_type);
90
- const body = workflowApi.checkInvokeInput(config, args.data ?? {}, args.metadata);
88
+ const inputSchemaRejection = async (config, args) => {
89
+ const body = await workflowApi.checkInvokeInput(config, args.data ?? {}, args.metadata);
91
90
  return body ? { content: [{ type: 'text', text: JSON.stringify(body) }], isError: true } : null;
92
91
  };
93
92
  // mirrors POST /api/workflows/:type/invoke
@@ -95,11 +94,13 @@ function registerWorkflowTools(server) {
95
94
  title: 'Invoke Workflow',
96
95
  description: 'Start a certified workflow by type. The workflow must have invocable=true ' +
97
96
  'in its config. Data is validated against the config input_schema when one ' +
98
- 'is declared (422-shaped error). Returns the workflow ID immediately; the ' +
97
+ 'is declared (422-shaped error). Call get_workflow_config for the input_schema ' +
98
+ 'the payload must satisfy. Returns the workflow ID immediately; the ' +
99
99
  'workflow runs durably in the background.',
100
100
  inputSchema: schemas_1.invokeWorkflowSchema,
101
101
  }, async (args) => {
102
- const rejected = await inputSchemaRejection(args);
102
+ const config = await configService.getWorkflowConfig(args.workflow_type);
103
+ const rejected = await inputSchemaRejection(config, args);
103
104
  if (rejected)
104
105
  return rejected;
105
106
  const result = await (0, workflow_invocation_1.invokeWorkflow)({
@@ -127,7 +128,8 @@ function registerWorkflowTools(server) {
127
128
  description: 'Start a workflow registered read-safe (side-effect-free). Same contract ' +
128
129
  'as invoke_workflow, gated to configs carrying read_safe=true — the ' +
129
130
  'variant exposed to read-scoped MCP callers. A workflow without the ' +
130
- 'flag fails with a clear error.',
131
+ 'flag fails with a clear error. Call get_workflow_config for the ' +
132
+ 'input_schema the payload must satisfy.',
131
133
  inputSchema: schemas_1.invokeWorkflowSchema,
132
134
  }, async (args) => {
133
135
  const config = await configService.getWorkflowConfig(args.workflow_type);
@@ -149,7 +151,7 @@ function registerWorkflowTools(server) {
149
151
  isError: true,
150
152
  };
151
153
  }
152
- const rejected = await inputSchemaRejection(args);
154
+ const rejected = await inputSchemaRejection(config, args);
153
155
  if (rejected)
154
156
  return rejected;
155
157
  const result = await (0, workflow_invocation_1.invokeWorkflow)({
@@ -7,12 +7,12 @@ export declare const findTasksSchema: z.ZodObject<{
7
7
  limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
8
8
  }, "strip", z.ZodTypeAny, {
9
9
  limit: number;
10
- status?: "pending" | "in_progress" | "completed" | "needs_intervention" | "failed" | undefined;
10
+ status?: "completed" | "pending" | "in_progress" | "needs_intervention" | "failed" | undefined;
11
11
  workflow_type?: string | undefined;
12
12
  workflow_id?: string | undefined;
13
13
  origin_id?: string | undefined;
14
14
  }, {
15
- status?: "pending" | "in_progress" | "completed" | "needs_intervention" | "failed" | undefined;
15
+ status?: "completed" | "pending" | "in_progress" | "needs_intervention" | "failed" | undefined;
16
16
  workflow_type?: string | undefined;
17
17
  workflow_id?: string | undefined;
18
18
  origin_id?: string | undefined;