@hotmeshio/long-tail 0.10.11 → 0.10.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (336) hide show
  1. package/README.md +2 -4
  2. package/build/api/escalations/list.d.ts +1 -0
  3. package/build/api/escalations/list.js +1 -0
  4. package/build/api/escalations/metadata.d.ts +11 -0
  5. package/build/api/escalations/metadata.js +28 -8
  6. package/build/api/escalations/resolve.js +4 -4
  7. package/build/api/scan-codes/config.d.ts +22 -0
  8. package/build/api/scan-codes/config.js +136 -0
  9. package/build/api/scan-codes/execute.d.ts +9 -0
  10. package/build/api/scan-codes/execute.js +372 -0
  11. package/build/api/scan-codes/index.d.ts +2 -0
  12. package/build/api/scan-codes/index.js +14 -0
  13. package/build/lib/db/schemas/026_scan_codes.sql +51 -0
  14. package/build/lib/db/schemas/027_scan_codes_reindex.sql +23 -0
  15. package/build/lib/events/system-events.js +4 -0
  16. package/build/modules/features.d.ts +8 -0
  17. package/build/modules/features.js +1 -0
  18. package/build/routes/escalations/list.js +1 -0
  19. package/build/routes/index.js +2 -0
  20. package/build/routes/scan-codes.d.ts +2 -0
  21. package/build/routes/scan-codes.js +138 -0
  22. package/build/sdk/index.d.ts +4 -0
  23. package/build/services/escalation/crud.d.ts +1 -1
  24. package/build/services/escalation/crud.js +4 -2
  25. package/build/services/escalation/queries.d.ts +1 -0
  26. package/build/services/escalation/queries.js +2 -0
  27. package/build/services/escalation/resolver-validation.d.ts +1 -1
  28. package/build/services/escalation/resolver-validation.js +12 -5
  29. package/build/services/escalation/sql.d.ts +11 -6
  30. package/build/services/escalation/sql.js +20 -20
  31. package/build/services/escalation/submit-guard.d.ts +29 -0
  32. package/build/services/escalation/submit-guard.js +57 -0
  33. package/build/services/scan-code/index.d.ts +4 -0
  34. package/build/services/scan-code/index.js +21 -0
  35. package/build/services/scan-code/parse.d.ts +35 -0
  36. package/build/services/scan-code/parse.js +108 -0
  37. package/build/services/scan-code/read.d.ts +5 -0
  38. package/build/services/scan-code/read.js +50 -0
  39. package/build/services/scan-code/sql.d.ts +10 -0
  40. package/build/services/scan-code/sql.js +57 -0
  41. package/build/services/scan-code/validate.d.ts +12 -0
  42. package/build/services/scan-code/validate.js +78 -0
  43. package/build/services/scan-code/write.d.ts +26 -0
  44. package/build/services/scan-code/write.js +71 -0
  45. package/build/shared/form-validation/index.d.ts +5 -0
  46. package/build/shared/form-validation/index.js +5 -0
  47. package/build/shared/form-validation/x-lt-labels.d.ts +28 -0
  48. package/build/shared/form-validation/x-lt-labels.js +42 -0
  49. package/build/shared/form-validation/x-lt-query.d.ts +56 -0
  50. package/build/shared/form-validation/x-lt-query.js +49 -0
  51. package/build/shared/form-validation/x-lt-submit-guard.d.ts +46 -0
  52. package/build/shared/form-validation/x-lt-submit-guard.js +25 -0
  53. package/build/shared/form-validation/x-lt-submit-on-claim.d.ts +22 -0
  54. package/build/shared/form-validation/x-lt-submit-on-claim.js +28 -0
  55. package/build/shared/form-validation/x-lt-transition.d.ts +47 -0
  56. package/build/shared/form-validation/x-lt-transition.js +65 -0
  57. package/build/system/mcp-servers/admin/index.d.ts +1 -0
  58. package/build/system/mcp-servers/admin/index.js +5 -2
  59. package/build/system/mcp-servers/admin/scan-codes.d.ts +10 -0
  60. package/build/system/mcp-servers/admin/scan-codes.js +111 -0
  61. package/build/system/mcp-servers/admin/schemas.d.ts +232 -14
  62. package/build/system/mcp-servers/admin/schemas.js +50 -0
  63. package/build/system/seed/tool-manifests-admin.d.ts +1380 -0
  64. package/build/system/seed/tool-manifests-admin.js +6 -0
  65. package/build/tsconfig.tsbuildinfo +1 -1
  66. package/build/types/events.d.ts +9 -0
  67. package/build/types/index.d.ts +2 -0
  68. package/build/types/index.js +10 -1
  69. package/build/types/scan-code.d.ts +183 -0
  70. package/build/types/scan-code.js +80 -0
  71. package/build/types/startup.d.ts +6 -0
  72. package/dashboard/dist/assets/{AdminDashboard-CkTbRfY9.js → AdminDashboard-Chg69wlx.js} +2 -2
  73. package/dashboard/dist/assets/{AdminDashboard-CkTbRfY9.js.map → AdminDashboard-Chg69wlx.js.map} +1 -1
  74. package/dashboard/dist/assets/{AgentConfigPage-Cm8FRpXi.js → AgentConfigPage-DRTFwbfC.js} +6 -6
  75. package/dashboard/dist/assets/{AgentConfigPage-Cm8FRpXi.js.map → AgentConfigPage-DRTFwbfC.js.map} +1 -1
  76. package/dashboard/dist/assets/{AgentDetailPage-sQ1-UT46.js → AgentDetailPage-JKByfFIi.js} +3 -3
  77. package/dashboard/dist/assets/{AgentDetailPage-sQ1-UT46.js.map → AgentDetailPage-JKByfFIi.js.map} +1 -1
  78. package/dashboard/dist/assets/AgentsPage-BlgEmKhA.js +2 -0
  79. package/dashboard/dist/assets/{AgentsPage-bSx_mdae.js.map → AgentsPage-BlgEmKhA.js.map} +1 -1
  80. package/dashboard/dist/assets/{AutoGrowTextarea-y-oNY51_.js → AutoGrowTextarea-DgEQeRQw.js} +2 -2
  81. package/dashboard/dist/assets/{AutoGrowTextarea-y-oNY51_.js.map → AutoGrowTextarea-DgEQeRQw.js.map} +1 -1
  82. package/dashboard/dist/assets/AvailableEscalationsPage-C_7y692Q.js +2 -0
  83. package/dashboard/dist/assets/{AvailableEscalationsPage-8pMC7Xv6.js.map → AvailableEscalationsPage-C_7y692Q.js.map} +1 -1
  84. package/dashboard/dist/assets/BotPicker-CCVcz4Cq.js +2 -0
  85. package/dashboard/dist/assets/{BotPicker-C4uGH2x9.js.map → BotPicker-CCVcz4Cq.js.map} +1 -1
  86. package/dashboard/dist/assets/{CapabilitiesPage-BRoOeKcc.js → CapabilitiesPage-Czi9jUwD.js} +2 -2
  87. package/dashboard/dist/assets/{CapabilitiesPage-BRoOeKcc.js.map → CapabilitiesPage-Czi9jUwD.js.map} +1 -1
  88. package/dashboard/dist/assets/{CollapsibleSection-CIj8Adc9.js → CollapsibleSection-8YE965QX.js} +2 -2
  89. package/dashboard/dist/assets/{CollapsibleSection-CIj8Adc9.js.map → CollapsibleSection-8YE965QX.js.map} +1 -1
  90. package/dashboard/dist/assets/{ConfirmDeleteModal-Ugi_9Ukq.js → ConfirmDeleteModal-CQsJUzEa.js} +2 -2
  91. package/dashboard/dist/assets/{ConfirmDeleteModal-Ugi_9Ukq.js.map → ConfirmDeleteModal-CQsJUzEa.js.map} +1 -1
  92. package/dashboard/dist/assets/{CopyableId-GUEdiiL5.js → CopyableId-4Lqlc5cU.js} +2 -2
  93. package/dashboard/dist/assets/{CopyableId-GUEdiiL5.js.map → CopyableId-4Lqlc5cU.js.map} +1 -1
  94. package/dashboard/dist/assets/CountdownTimer-Bxvq3D7j.js +2 -0
  95. package/dashboard/dist/assets/CountdownTimer-Bxvq3D7j.js.map +1 -0
  96. package/dashboard/dist/assets/{CredentialsPage-B73Si6K1.js → CredentialsPage-Bn7_SX6-.js} +2 -2
  97. package/dashboard/dist/assets/{CredentialsPage-B73Si6K1.js.map → CredentialsPage-Bn7_SX6-.js.map} +1 -1
  98. package/dashboard/dist/assets/{CronLabel-Ca1aHolt.js → CronLabel-Bn4mX_Yn.js} +2 -2
  99. package/dashboard/dist/assets/{CronLabel-Ca1aHolt.js.map → CronLabel-Bn4mX_Yn.js.map} +1 -1
  100. package/dashboard/dist/assets/{CustomDurationPicker-_9E9x1YN.js → CustomDurationPicker-pMcrFyW6.js} +2 -2
  101. package/dashboard/dist/assets/{CustomDurationPicker-_9E9x1YN.js.map → CustomDurationPicker-pMcrFyW6.js.map} +1 -1
  102. package/dashboard/dist/assets/{DataTable-BTu2AaEl.js → DataTable-Bir0Xs1p.js} +2 -2
  103. package/dashboard/dist/assets/{DataTable-BTu2AaEl.js.map → DataTable-Bir0Xs1p.js.map} +1 -1
  104. package/dashboard/dist/assets/{DropZone-NYn6TWHz.js → DropZone-zCEGjjk-.js} +2 -2
  105. package/dashboard/dist/assets/{DropZone-NYn6TWHz.js.map → DropZone-zCEGjjk-.js.map} +1 -1
  106. package/dashboard/dist/assets/{ElapsedCell-karxia93.js → ElapsedCell-BGO7IXEg.js} +2 -2
  107. package/dashboard/dist/assets/{ElapsedCell-karxia93.js.map → ElapsedCell-BGO7IXEg.js.map} +1 -1
  108. package/dashboard/dist/assets/{EmptyState-BcsfPq9T.js → EmptyState-lpUFYfun.js} +2 -2
  109. package/dashboard/dist/assets/{EmptyState-BcsfPq9T.js.map → EmptyState-lpUFYfun.js.map} +1 -1
  110. package/dashboard/dist/assets/{EscalationListSchemaPage-CDaNmbUA.js → EscalationListSchemaPage-CFDxbd50.js} +3 -3
  111. package/dashboard/dist/assets/{EscalationListSchemaPage-CDaNmbUA.js.map → EscalationListSchemaPage-CFDxbd50.js.map} +1 -1
  112. package/dashboard/dist/assets/{EscalationSchemaPage-k-2hFT2t.js → EscalationSchemaPage-DnXPnDkz.js} +3 -3
  113. package/dashboard/dist/assets/{EscalationSchemaPage-k-2hFT2t.js.map → EscalationSchemaPage-DnXPnDkz.js.map} +1 -1
  114. package/dashboard/dist/assets/{EscalationsOverview-C1e7IPn_.js → EscalationsOverview-BZMVXrkK.js} +2 -2
  115. package/dashboard/dist/assets/{EscalationsOverview-C1e7IPn_.js.map → EscalationsOverview-BZMVXrkK.js.map} +1 -1
  116. package/dashboard/dist/assets/EventTable-Bfi-f8as.js +2 -0
  117. package/dashboard/dist/assets/EventTable-Bfi-f8as.js.map +1 -0
  118. package/dashboard/dist/assets/FilterBar-Do7yR4xM.js +2 -0
  119. package/dashboard/dist/assets/FilterBar-Do7yR4xM.js.map +1 -0
  120. package/dashboard/dist/assets/{GraphInvokePage-LMpWw8z1.js → GraphInvokePage-d1ie4T7f.js} +2 -2
  121. package/dashboard/dist/assets/{GraphInvokePage-LMpWw8z1.js.map → GraphInvokePage-d1ie4T7f.js.map} +1 -1
  122. package/dashboard/dist/assets/{HomePage-Kl2DBG6l.js → HomePage-BEeodImU.js} +2 -2
  123. package/dashboard/dist/assets/{HomePage-Kl2DBG6l.js.map → HomePage-BEeodImU.js.map} +1 -1
  124. package/dashboard/dist/assets/ListToolbar-CLtw-1QN.js +2 -0
  125. package/dashboard/dist/assets/{ListToolbar-B2fub0DY.js.map → ListToolbar-CLtw-1QN.js.map} +1 -1
  126. package/dashboard/dist/assets/{McpOverview-odYnCZCC.js → McpOverview-DIsy9TB3.js} +2 -2
  127. package/dashboard/dist/assets/{McpOverview-odYnCZCC.js.map → McpOverview-DIsy9TB3.js.map} +1 -1
  128. package/dashboard/dist/assets/{McpQueryDetailPage-BtqwHUAg.js → McpQueryDetailPage-6PomdsyD.js} +3 -3
  129. package/dashboard/dist/assets/{McpQueryDetailPage-BtqwHUAg.js.map → McpQueryDetailPage-6PomdsyD.js.map} +1 -1
  130. package/dashboard/dist/assets/McpQueryPage-YMdQCXm9.js +2 -0
  131. package/dashboard/dist/assets/{McpQueryPage-CPkVwNIK.js.map → McpQueryPage-YMdQCXm9.js.map} +1 -1
  132. package/dashboard/dist/assets/McpRunDetailPage-DsD1Gm2o.js +2 -0
  133. package/dashboard/dist/assets/McpRunDetailPage-DsD1Gm2o.js.map +1 -0
  134. package/dashboard/dist/assets/{McpRunsPage-rdpZ2yMh.js → McpRunsPage--a5Jgb33.js} +2 -2
  135. package/dashboard/dist/assets/{McpRunsPage-rdpZ2yMh.js.map → McpRunsPage--a5Jgb33.js.map} +1 -1
  136. package/dashboard/dist/assets/{Modal-Dr1Xy0j0.js → Modal-BU7No9NH.js} +2 -2
  137. package/dashboard/dist/assets/{Modal-Dr1Xy0j0.js.map → Modal-BU7No9NH.js.map} +1 -1
  138. package/dashboard/dist/assets/{NamespacePill-GwO-WfhX.js → NamespacePill-wV6L4VW1.js} +2 -2
  139. package/dashboard/dist/assets/{NamespacePill-GwO-WfhX.js.map → NamespacePill-wV6L4VW1.js.map} +1 -1
  140. package/dashboard/dist/assets/OperationsPage-B2v9k3DT.js +2 -0
  141. package/dashboard/dist/assets/{OperationsPage-DlyGLPAs.js.map → OperationsPage-B2v9k3DT.js.map} +1 -1
  142. package/dashboard/dist/assets/{OperatorDashboard-Csei5vj-.js → OperatorDashboard-CkLfbxEh.js} +2 -2
  143. package/dashboard/dist/assets/{OperatorDashboard-Csei5vj-.js.map → OperatorDashboard-CkLfbxEh.js.map} +1 -1
  144. package/dashboard/dist/assets/{PageHeader-Bo9BU9pK.js → PageHeader-BtIr6r-8.js} +2 -2
  145. package/dashboard/dist/assets/{PageHeader-Bo9BU9pK.js.map → PageHeader-BtIr6r-8.js.map} +1 -1
  146. package/dashboard/dist/assets/{PageHeaderWithStats-8_5cOSKL.js → PageHeaderWithStats-C2sGqFQG.js} +2 -2
  147. package/dashboard/dist/assets/{PageHeaderWithStats-8_5cOSKL.js.map → PageHeaderWithStats-C2sGqFQG.js.map} +1 -1
  148. package/dashboard/dist/assets/{PersonaDetailPage--ZL6Or6v.js → PersonaDetailPage-CCmOgKQb.js} +2 -2
  149. package/dashboard/dist/assets/{PersonaDetailPage--ZL6Or6v.js.map → PersonaDetailPage-CCmOgKQb.js.map} +1 -1
  150. package/dashboard/dist/assets/{PersonasPage-Bdcoay3P.js → PersonasPage-BJkSuDTN.js} +2 -2
  151. package/dashboard/dist/assets/{PersonasPage-Bdcoay3P.js.map → PersonasPage-BJkSuDTN.js.map} +1 -1
  152. package/dashboard/dist/assets/{PriorityBadge-CCERr9vQ.js → PriorityBadge-BETdj4M-.js} +2 -2
  153. package/dashboard/dist/assets/{PriorityBadge-CCERr9vQ.js.map → PriorityBadge-BETdj4M-.js.map} +1 -1
  154. package/dashboard/dist/assets/{ProcessDetailPage-HrmVQq7S.js → ProcessDetailPage-DT9BlJXK.js} +2 -2
  155. package/dashboard/dist/assets/{ProcessDetailPage-HrmVQq7S.js.map → ProcessDetailPage-DT9BlJXK.js.map} +1 -1
  156. package/dashboard/dist/assets/{ProcessesListPage-_xmj6Bo-.js → ProcessesListPage-DgSGzTDT.js} +2 -2
  157. package/dashboard/dist/assets/{ProcessesListPage-_xmj6Bo-.js.map → ProcessesListPage-DgSGzTDT.js.map} +1 -1
  158. package/dashboard/dist/assets/{RoleDetailPage-C0ju2-4K.js → RoleDetailPage-DMphTvro.js} +3 -3
  159. package/dashboard/dist/assets/{RoleDetailPage-C0ju2-4K.js.map → RoleDetailPage-DMphTvro.js.map} +1 -1
  160. package/dashboard/dist/assets/{RolePill-CQlnEWkK.js → RolePill-BBYjhAPj.js} +2 -2
  161. package/dashboard/dist/assets/{RolePill-CQlnEWkK.js.map → RolePill-BBYjhAPj.js.map} +1 -1
  162. package/dashboard/dist/assets/{RolesPage-CKluVSpB.js → RolesPage-gi_kaot1.js} +2 -2
  163. package/dashboard/dist/assets/{RolesPage-CKluVSpB.js.map → RolesPage-gi_kaot1.js.map} +1 -1
  164. package/dashboard/dist/assets/{RowActions-BA9L9djf.js → RowActions-eYrzgQSj.js} +2 -2
  165. package/dashboard/dist/assets/{RowActions-BA9L9djf.js.map → RowActions-eYrzgQSj.js.map} +1 -1
  166. package/dashboard/dist/assets/RunAsSelector-CateuvcC.js +2 -0
  167. package/dashboard/dist/assets/{RunAsSelector-DdfecQ1U.js.map → RunAsSelector-CateuvcC.js.map} +1 -1
  168. package/dashboard/dist/assets/ScanCodesPage-CQ8RxMug.js +2 -0
  169. package/dashboard/dist/assets/ScanCodesPage-CQ8RxMug.js.map +1 -0
  170. package/dashboard/dist/assets/ScanSchemeDetailPage-puSbuxcV.js +2 -0
  171. package/dashboard/dist/assets/ScanSchemeDetailPage-puSbuxcV.js.map +1 -0
  172. package/dashboard/dist/assets/{ScopeBadge-BBYkevuR.js → ScopeBadge-xs2Nhjy4.js} +2 -2
  173. package/dashboard/dist/assets/{ScopeBadge-BBYkevuR.js.map → ScopeBadge-xs2Nhjy4.js.map} +1 -1
  174. package/dashboard/dist/assets/SegmentedTabs-DXNzY05q.js +2 -0
  175. package/dashboard/dist/assets/SegmentedTabs-DXNzY05q.js.map +1 -0
  176. package/dashboard/dist/assets/{StatCard-Ca-ngCaD.js → StatCard-BXQ8dD9Y.js} +2 -2
  177. package/dashboard/dist/assets/{StatCard-Ca-ngCaD.js.map → StatCard-BXQ8dD9Y.js.map} +1 -1
  178. package/dashboard/dist/assets/{StatusBadge-BwUvykDo.js → StatusBadge-DkgllZHv.js} +2 -2
  179. package/dashboard/dist/assets/{StatusBadge-BwUvykDo.js.map → StatusBadge-DkgllZHv.js.map} +1 -1
  180. package/dashboard/dist/assets/StickyPagination-Cg-QdYWL.js +2 -0
  181. package/dashboard/dist/assets/StickyPagination-Cg-QdYWL.js.map +1 -0
  182. package/dashboard/dist/assets/{StreamMessageDetail-CZXWDawC.js → StreamMessageDetail-DEeuh4_-.js} +2 -2
  183. package/dashboard/dist/assets/{StreamMessageDetail-CZXWDawC.js.map → StreamMessageDetail-DEeuh4_-.js.map} +1 -1
  184. package/dashboard/dist/assets/{SwimlaneTimeline-fWY0gaf3.js → SwimlaneTimeline-DMY0jL2F.js} +2 -2
  185. package/dashboard/dist/assets/{SwimlaneTimeline-fWY0gaf3.js.map → SwimlaneTimeline-DMY0jL2F.js.map} +1 -1
  186. package/dashboard/dist/assets/{TagInput-CDKbslLx.js → TagInput-BMmiV-MD.js} +2 -2
  187. package/dashboard/dist/assets/{TagInput-CDKbslLx.js.map → TagInput-BMmiV-MD.js.map} +1 -1
  188. package/dashboard/dist/assets/{TaskDetailPage-BjE4G2yn.js → TaskDetailPage-CPbkIvfF.js} +2 -2
  189. package/dashboard/dist/assets/{TaskDetailPage-BjE4G2yn.js.map → TaskDetailPage-CPbkIvfF.js.map} +1 -1
  190. package/dashboard/dist/assets/{TaskQueuePill-G3RuYRNZ.js → TaskQueuePill-DLgYaw1x.js} +2 -2
  191. package/dashboard/dist/assets/{TaskQueuePill-G3RuYRNZ.js.map → TaskQueuePill-DLgYaw1x.js.map} +1 -1
  192. package/dashboard/dist/assets/{TasksListPage-KAhmCWB2.js → TasksListPage-CtHudKhQ.js} +2 -2
  193. package/dashboard/dist/assets/{TasksListPage-KAhmCWB2.js.map → TasksListPage-CtHudKhQ.js.map} +1 -1
  194. package/dashboard/dist/assets/TimeAgo-BdHOizWg.js +2 -0
  195. package/dashboard/dist/assets/{TimeAgo-C_H2TyZw.js.map → TimeAgo-BdHOizWg.js.map} +1 -1
  196. package/dashboard/dist/assets/{TimestampCell-COG_4Flg.js → TimestampCell-FVukzKRe.js} +2 -2
  197. package/dashboard/dist/assets/{TimestampCell-COG_4Flg.js.map → TimestampCell-FVukzKRe.js.map} +1 -1
  198. package/dashboard/dist/assets/{ToolPill-ChSyRJZC.js → ToolPill-BvS53hxP.js} +2 -2
  199. package/dashboard/dist/assets/{ToolPill-ChSyRJZC.js.map → ToolPill-BvS53hxP.js.map} +1 -1
  200. package/dashboard/dist/assets/{ToolTestPanel-BPdJECW0.js → ToolTestPanel-HN0OCYTL.js} +2 -2
  201. package/dashboard/dist/assets/{ToolTestPanel-BPdJECW0.js.map → ToolTestPanel-HN0OCYTL.js.map} +1 -1
  202. package/dashboard/dist/assets/{TopicDetailPage-DAqx5JqA.js → TopicDetailPage-DHdSpN61.js} +4 -4
  203. package/dashboard/dist/assets/{TopicDetailPage-DAqx5JqA.js.map → TopicDetailPage-DHdSpN61.js.map} +1 -1
  204. package/dashboard/dist/assets/TopicsPage-Clr6Tl5P.js +2 -0
  205. package/dashboard/dist/assets/{TopicsPage-DoGqAdPm.js.map → TopicsPage-Clr6Tl5P.js.map} +1 -1
  206. package/dashboard/dist/assets/UserName-BUVYyIAS.js +2 -0
  207. package/dashboard/dist/assets/{UserName-CKO_rk1R.js.map → UserName-BUVYyIAS.js.map} +1 -1
  208. package/dashboard/dist/assets/WorkflowExecutionPage-kncWFfe5.js +2 -0
  209. package/dashboard/dist/assets/WorkflowExecutionPage-kncWFfe5.js.map +1 -0
  210. package/dashboard/dist/assets/{WorkflowPill-CNbwug5p.js → WorkflowPill-BPC_Dc_I.js} +2 -2
  211. package/dashboard/dist/assets/{WorkflowPill-CNbwug5p.js.map → WorkflowPill-BPC_Dc_I.js.map} +1 -1
  212. package/dashboard/dist/assets/WorkflowsDashboard-4ypPDGKx.js +2 -0
  213. package/dashboard/dist/assets/{WorkflowsDashboard-DdJ86We6.js.map → WorkflowsDashboard-4ypPDGKx.js.map} +1 -1
  214. package/dashboard/dist/assets/{WorkflowsOverview-ZfFBzePp.js → WorkflowsOverview-CeQlZkkd.js} +2 -2
  215. package/dashboard/dist/assets/{WorkflowsOverview-ZfFBzePp.js.map → WorkflowsOverview-CeQlZkkd.js.map} +1 -1
  216. package/dashboard/dist/assets/{YamlWorkflowDetailPage-4bd5yXdA.js → YamlWorkflowDetailPage-DLAlEzwT.js} +13 -13
  217. package/dashboard/dist/assets/{YamlWorkflowDetailPage-4bd5yXdA.js.map → YamlWorkflowDetailPage-DLAlEzwT.js.map} +1 -1
  218. package/dashboard/dist/assets/{YamlWorkflowsPage-iHPNXjQj.js → YamlWorkflowsPage-DQhenKFT.js} +2 -2
  219. package/dashboard/dist/assets/{YamlWorkflowsPage-iHPNXjQj.js.map → YamlWorkflowsPage-DQhenKFT.js.map} +1 -1
  220. package/dashboard/dist/assets/{agents-DjD5U3Wb.js → agents-s3feet3W.js} +2 -2
  221. package/dashboard/dist/assets/{agents-DjD5U3Wb.js.map → agents-s3feet3W.js.map} +1 -1
  222. package/dashboard/dist/assets/{bots-DiljVapH.js → bots-CkSd2rn9.js} +2 -2
  223. package/dashboard/dist/assets/{bots-DiljVapH.js.map → bots-CkSd2rn9.js.map} +1 -1
  224. package/dashboard/dist/assets/capabilities-DA_r09tM.js +2 -0
  225. package/dashboard/dist/assets/{capabilities-DV_5ghHT.js.map → capabilities-DA_r09tM.js.map} +1 -1
  226. package/dashboard/dist/assets/{controlplane-BKMvfWCB.js → controlplane-C9c25q21.js} +2 -2
  227. package/dashboard/dist/assets/{controlplane-BKMvfWCB.js.map → controlplane-C9c25q21.js.map} +1 -1
  228. package/dashboard/dist/assets/{escalation-columns-BQpCaJId.js → escalation-columns-Cp3UrT48.js} +2 -2
  229. package/dashboard/dist/assets/{escalation-columns-BQpCaJId.js.map → escalation-columns-Cp3UrT48.js.map} +1 -1
  230. package/dashboard/dist/assets/{index-BO-7S9Xw.js → index--7Vdkzwd.js} +2 -2
  231. package/dashboard/dist/assets/{index-BO-7S9Xw.js.map → index--7Vdkzwd.js.map} +1 -1
  232. package/dashboard/dist/assets/index--DG-qQBT.js +65 -0
  233. package/dashboard/dist/assets/index--DG-qQBT.js.map +1 -0
  234. package/dashboard/dist/assets/{index-BaV3l0UE.js → index-BIcYbDVf.js} +2 -2
  235. package/dashboard/dist/assets/{index-BaV3l0UE.js.map → index-BIcYbDVf.js.map} +1 -1
  236. package/dashboard/dist/assets/index-BU5FFAJo.js +2 -0
  237. package/dashboard/dist/assets/{index-CItsikDw.js.map → index-BU5FFAJo.js.map} +1 -1
  238. package/dashboard/dist/assets/{index-BsOxMMmb.js → index-Bo5TtX9l.js} +2 -2
  239. package/dashboard/dist/assets/{index-BsOxMMmb.js.map → index-Bo5TtX9l.js.map} +1 -1
  240. package/dashboard/dist/assets/{index-Tx_ETzcH.js → index-C-MmR-jf.js} +2 -2
  241. package/dashboard/dist/assets/{index-Tx_ETzcH.js.map → index-C-MmR-jf.js.map} +1 -1
  242. package/dashboard/dist/assets/index-C7ABSOU2.js +6 -0
  243. package/dashboard/dist/assets/index-C7ABSOU2.js.map +1 -0
  244. package/dashboard/dist/assets/index-Cmxzk4ay.js +5 -0
  245. package/dashboard/dist/assets/{index-nIrYejxe.js.map → index-Cmxzk4ay.js.map} +1 -1
  246. package/dashboard/dist/assets/{index-CI8rrKjx.js → index-Cw9poaez.js} +2 -2
  247. package/dashboard/dist/assets/{index-CI8rrKjx.js.map → index-Cw9poaez.js.map} +1 -1
  248. package/dashboard/dist/assets/index-DEbY57_c.js +3 -0
  249. package/dashboard/dist/assets/index-DEbY57_c.js.map +1 -0
  250. package/dashboard/dist/assets/index-DnV6LSeY.css +1 -0
  251. package/dashboard/dist/assets/{index-xZqQxqu2.js → index-DvoMXQqO.js} +2 -2
  252. package/dashboard/dist/assets/{index-xZqQxqu2.js.map → index-DvoMXQqO.js.map} +1 -1
  253. package/dashboard/dist/assets/{index-DhATO1cS.js → index-S13oPvuS.js} +2 -2
  254. package/dashboard/dist/assets/{index-DhATO1cS.js.map → index-S13oPvuS.js.map} +1 -1
  255. package/dashboard/dist/assets/index-WxE3ONia.js +2 -0
  256. package/dashboard/dist/assets/{index-CStR4uIU.js.map → index-WxE3ONia.js.map} +1 -1
  257. package/dashboard/dist/assets/{knowledge-BocTnSiA.js → knowledge-Bpln0zy_.js} +2 -2
  258. package/dashboard/dist/assets/{knowledge-BocTnSiA.js.map → knowledge-Bpln0zy_.js.map} +1 -1
  259. package/dashboard/dist/assets/{mcp-C1KBjKQ_.js → mcp-BqDq3RZH.js} +2 -2
  260. package/dashboard/dist/assets/{mcp-C1KBjKQ_.js.map → mcp-BqDq3RZH.js.map} +1 -1
  261. package/dashboard/dist/assets/{mcp-query-B3cjukkA.js → mcp-query-DGue75R6.js} +2 -2
  262. package/dashboard/dist/assets/{mcp-query-B3cjukkA.js.map → mcp-query-DGue75R6.js.map} +1 -1
  263. package/dashboard/dist/assets/{personas-DiA2bJaX.js → personas-B8z_sTiJ.js} +2 -2
  264. package/dashboard/dist/assets/{personas-DiA2bJaX.js.map → personas-B8z_sTiJ.js.map} +1 -1
  265. package/dashboard/dist/assets/{pipelines-Dt2d2EFR.js → pipelines-DYgNd9nB.js} +2 -2
  266. package/dashboard/dist/assets/{pipelines-Dt2d2EFR.js.map → pipelines-DYgNd9nB.js.map} +1 -1
  267. package/dashboard/dist/assets/{tasks-cDh2hNml.js → tasks-CJdjjhgO.js} +2 -2
  268. package/dashboard/dist/assets/{tasks-cDh2hNml.js.map → tasks-CJdjjhgO.js.map} +1 -1
  269. package/dashboard/dist/assets/{topics-yFlGF-u1.js → topics-DPrL8Dtq.js} +2 -2
  270. package/dashboard/dist/assets/{topics-yFlGF-u1.js.map → topics-DPrL8Dtq.js.map} +1 -1
  271. package/dashboard/dist/assets/{useDebouncedValue-BA5S7V54.js → useDebouncedValue-C4P2jQuh.js} +2 -2
  272. package/dashboard/dist/assets/{useDebouncedValue-BA5S7V54.js.map → useDebouncedValue-C4P2jQuh.js.map} +1 -1
  273. package/dashboard/dist/assets/{useEventHooks-D2R_ckS8.js → useEventHooks-DXCgDgiu.js} +2 -2
  274. package/dashboard/dist/assets/{useEventHooks-D2R_ckS8.js.map → useEventHooks-DXCgDgiu.js.map} +1 -1
  275. package/dashboard/dist/assets/{useFilterParams-B7suPsIK.js → useFilterParams-crmlBw_l.js} +2 -2
  276. package/dashboard/dist/assets/{useFilterParams-B7suPsIK.js.map → useFilterParams-crmlBw_l.js.map} +1 -1
  277. package/dashboard/dist/assets/{useNamespace-u-V1GVUD.js → useNamespace-DnFZfy7N.js} +2 -2
  278. package/dashboard/dist/assets/{useNamespace-u-V1GVUD.js.map → useNamespace-DnFZfy7N.js.map} +1 -1
  279. package/dashboard/dist/assets/{useYamlActivityEvents-BhOZeqgE.js → useYamlActivityEvents-kx5CLENv.js} +2 -2
  280. package/dashboard/dist/assets/{useYamlActivityEvents-BhOZeqgE.js.map → useYamlActivityEvents-kx5CLENv.js.map} +1 -1
  281. package/dashboard/dist/assets/{users-BoXPwdee.js → users-DKng7vAG.js} +2 -2
  282. package/dashboard/dist/assets/{users-BoXPwdee.js.map → users-DKng7vAG.js.map} +1 -1
  283. package/dashboard/dist/assets/{vendor-icons-D71XjkNy.js → vendor-icons-CN-bAo9U.js} +144 -134
  284. package/dashboard/dist/assets/vendor-icons-CN-bAo9U.js.map +1 -0
  285. package/dashboard/dist/assets/{vendor-query-B2UbickB.js → vendor-query-RUZdMvN6.js} +2 -2
  286. package/dashboard/dist/assets/{vendor-query-B2UbickB.js.map → vendor-query-RUZdMvN6.js.map} +1 -1
  287. package/dashboard/dist/assets/{vendor-react-C1YOyCSV.js → vendor-react-CdqEC2zv.js} +2 -2
  288. package/dashboard/dist/assets/{vendor-react-C1YOyCSV.js.map → vendor-react-CdqEC2zv.js.map} +1 -1
  289. package/dashboard/dist/assets/{workflows-mCoyKuLZ.js → workflows-C4V0rMkM.js} +2 -2
  290. package/dashboard/dist/assets/{workflows-mCoyKuLZ.js.map → workflows-C4V0rMkM.js.map} +1 -1
  291. package/dashboard/dist/assets/{yaml-workflows-CWxXGDpn.js → yaml-workflows-D3PAiJ9d.js} +2 -2
  292. package/dashboard/dist/assets/{yaml-workflows-CWxXGDpn.js.map → yaml-workflows-D3PAiJ9d.js.map} +1 -1
  293. package/dashboard/dist/index.html +5 -5
  294. package/docs/design-principles.md +9 -7
  295. package/docs/hitl/x-lt-embed.md +8 -4
  296. package/docs/hitl/x-lt-footer.md +68 -0
  297. package/docs/hitl/x-lt-list-schema.md +10 -3
  298. package/docs/hitl/x-lt-transition.md +105 -0
  299. package/docs/hitl-guide.md +9 -0
  300. package/docs/scan-codes.md +243 -0
  301. package/package.json +2 -2
  302. package/dashboard/dist/assets/AgentsPage-bSx_mdae.js +0 -2
  303. package/dashboard/dist/assets/AvailableEscalationsPage-8pMC7Xv6.js +0 -2
  304. package/dashboard/dist/assets/BotPicker-C4uGH2x9.js +0 -2
  305. package/dashboard/dist/assets/CountdownTimer-D3t0XMhE.js +0 -2
  306. package/dashboard/dist/assets/CountdownTimer-D3t0XMhE.js.map +0 -1
  307. package/dashboard/dist/assets/EventTable-CIrrtL7_.js +0 -2
  308. package/dashboard/dist/assets/EventTable-CIrrtL7_.js.map +0 -1
  309. package/dashboard/dist/assets/FilterBar-CzjtH74v.js +0 -2
  310. package/dashboard/dist/assets/FilterBar-CzjtH74v.js.map +0 -1
  311. package/dashboard/dist/assets/ListToolbar-B2fub0DY.js +0 -2
  312. package/dashboard/dist/assets/McpQueryPage-CPkVwNIK.js +0 -2
  313. package/dashboard/dist/assets/McpRunDetailPage-D-Rz9MRw.js +0 -2
  314. package/dashboard/dist/assets/McpRunDetailPage-D-Rz9MRw.js.map +0 -1
  315. package/dashboard/dist/assets/OperationsPage-DlyGLPAs.js +0 -2
  316. package/dashboard/dist/assets/RunAsSelector-DdfecQ1U.js +0 -2
  317. package/dashboard/dist/assets/StickyPagination-cLddIdtT.js +0 -2
  318. package/dashboard/dist/assets/StickyPagination-cLddIdtT.js.map +0 -1
  319. package/dashboard/dist/assets/TimeAgo-C_H2TyZw.js +0 -2
  320. package/dashboard/dist/assets/TopicsPage-DoGqAdPm.js +0 -2
  321. package/dashboard/dist/assets/UserName-CKO_rk1R.js +0 -2
  322. package/dashboard/dist/assets/WorkflowExecutionPage-D3VQ9iQV.js +0 -2
  323. package/dashboard/dist/assets/WorkflowExecutionPage-D3VQ9iQV.js.map +0 -1
  324. package/dashboard/dist/assets/WorkflowsDashboard-DdJ86We6.js +0 -2
  325. package/dashboard/dist/assets/capabilities-DV_5ghHT.js +0 -2
  326. package/dashboard/dist/assets/index-B-WkiNRN.js +0 -6
  327. package/dashboard/dist/assets/index-B-WkiNRN.js.map +0 -1
  328. package/dashboard/dist/assets/index-CItsikDw.js +0 -2
  329. package/dashboard/dist/assets/index-CStR4uIU.js +0 -2
  330. package/dashboard/dist/assets/index-DbTD-dio.js +0 -63
  331. package/dashboard/dist/assets/index-DbTD-dio.js.map +0 -1
  332. package/dashboard/dist/assets/index-DnlsDaAw.css +0 -1
  333. package/dashboard/dist/assets/index-kzIIeVbx.js +0 -5
  334. package/dashboard/dist/assets/index-kzIIeVbx.js.map +0 -1
  335. package/dashboard/dist/assets/index-nIrYejxe.js +0 -5
  336. package/dashboard/dist/assets/vendor-icons-D71XjkNy.js.map +0 -1
package/README.md CHANGED
@@ -4,9 +4,7 @@
4
4
 
5
5
  Durable platforms are built around determinism — that is their strength and their blind spot. They give you rich, first-class queues for deterministic work (retry, timeout, `backoffCoefficient`, exactly-once) and an `await condition()` to park a workflow until a signal arrives. All of it assumes the thing you are waiting on will, eventually, behave.
6
6
 
7
- Most of the work that decides an outcome behaves on its own schedule: an approval, a person, a shipment, a machine that needs service. You cannot set a `backoffCoefficient` on a person retrying someone who has not answered just asks twice. This is why "human-in-the-loop" keeps getting bolted on as a feature: the platform perfected the deterministic queue and left the non-deterministic one for you to improvise.
8
-
9
- Long Tail makes it a primitive. The same `condition()` wait — except the act of waiting mints a row that is searchable, claimable, deadlined, and role-gated on a shared metadata surface. Machines answer some rows, people answer others; the workflow resumes either way, exactly where it paused.
7
+ Long Tail makes non-determinism a primitive. The same `condition()` wait except the act of waiting mints a row that is searchable, claimable, deadlined, and role-gated on a shared metadata surface. Machines answer some rows, people answer others; the workflow resumes either way, exactly where it paused.
10
8
 
11
9
  ```bash
12
10
  npm install @hotmeshio/long-tail
@@ -14,7 +12,7 @@ npm install @hotmeshio/long-tail
14
12
 
15
13
  ## How it works
16
14
 
17
- One workflow, both queues: `proxyActivities` for the deterministic one, `condition()` for the one reality answers.
15
+ One workflow, both queues: `proxyActivities` for the deterministic one, `condition()` for non-determinism.
18
16
 
19
17
  ```typescript
20
18
  import { Durable } from '@hotmeshio/hotmesh';
@@ -37,6 +37,7 @@ export declare function listEscalations(input: {
37
37
  type?: string;
38
38
  subtype?: string;
39
39
  assigned_to?: string;
40
+ parent_id?: string;
40
41
  claimed?: boolean;
41
42
  priority?: number;
42
43
  limit?: number;
@@ -115,6 +115,7 @@ async function listEscalations(input, auth) {
115
115
  type: input.type,
116
116
  subtype: input.subtype,
117
117
  assigned_to: input.assigned_to,
118
+ parent_id: input.parent_id,
118
119
  claimed: input.claimed,
119
120
  priority: input.priority,
120
121
  limit: input.limit,
@@ -1,5 +1,13 @@
1
1
  import { type ProvisionIfAbsent } from './helpers';
2
2
  import type { LTApiAuth, LTApiResult } from '../../types/sdk';
3
+ /**
4
+ * Intersect the caller's scope roles with an optional caller-supplied
5
+ * restriction (e.g. a scan step's expected queues). Global scope with no
6
+ * restriction stays unfiltered (null); a restriction always applies. An
7
+ * empty intersection returns [] — which matches nothing in the SQL filter,
8
+ * the correct fail-closed outcome.
9
+ */
10
+ export declare function restrictScopeRoles(scopeRoles: string[], global: boolean, restrictRoles?: string[]): string[] | null;
3
11
  /**
4
12
  * Find escalations by a metadata key-value pair.
5
13
  *
@@ -27,6 +35,7 @@ export declare function claimByMetadata(input: {
27
35
  assignee?: string;
28
36
  metadata?: Record<string, any>;
29
37
  provisionIfAbsent?: ProvisionIfAbsent;
38
+ restrictRoles?: string[];
30
39
  }, auth: LTApiAuth): Promise<LTApiResult>;
31
40
  /**
32
41
  * Resolve an escalation by metadata key-value pair.
@@ -46,4 +55,6 @@ export declare function resolveByMetadata(input: {
46
55
  resolverPayload: Record<string, any>;
47
56
  assignee?: string;
48
57
  metadata?: Record<string, any>;
58
+ restrictRoles?: string[];
59
+ extraFacets?: Record<string, any>;
49
60
  }, auth: LTApiAuth): Promise<LTApiResult>;
@@ -33,6 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.restrictScopeRoles = restrictScopeRoles;
36
37
  exports.findByMetadata = findByMetadata;
37
38
  exports.claimByMetadata = claimByMetadata;
38
39
  exports.resolveByMetadata = resolveByMetadata;
@@ -41,6 +42,20 @@ const helpers_1 = require("./helpers");
41
42
  const resolver_validation_1 = require("../../services/escalation/resolver-validation");
42
43
  const enforcement_cache_1 = require("../../services/role/enforcement-cache");
43
44
  const resolve_1 = require("./resolve");
45
+ /**
46
+ * Intersect the caller's scope roles with an optional caller-supplied
47
+ * restriction (e.g. a scan step's expected queues). Global scope with no
48
+ * restriction stays unfiltered (null); a restriction always applies. An
49
+ * empty intersection returns [] — which matches nothing in the SQL filter,
50
+ * the correct fail-closed outcome.
51
+ */
52
+ function restrictScopeRoles(scopeRoles, global, restrictRoles) {
53
+ if (!restrictRoles || restrictRoles.length === 0)
54
+ return global ? null : scopeRoles;
55
+ if (global)
56
+ return restrictRoles;
57
+ return scopeRoles.filter((r) => restrictRoles.includes(r));
58
+ }
44
59
  /**
45
60
  * Find escalations by a metadata key-value pair.
46
61
  *
@@ -85,9 +100,10 @@ async function claimByMetadata(input, auth) {
85
100
  // Write-scope: global → no filter; otherwise restrict to write_all roles. The
86
101
  // SDK claim-by-metadata uses a flat role filter and cannot enforce write_self
87
102
  // ownership, so self-scope members are excluded from this path (their items
88
- // are pre-claimed and acted on by id).
103
+ // are pre-claimed and acted on by id). An optional caller restriction
104
+ // (expected queues) intersects with the scope inside the same SQL filter.
89
105
  const writeScope = await (0, helpers_1.getEscalationWriteScope)(auth.userId);
90
- const allowedRoles = writeScope.global ? null : writeScope.allRoles;
106
+ const allowedRoles = restrictScopeRoles(writeScope.allRoles, writeScope.global, input.restrictRoles);
91
107
  const result = await escalationService.claimByMetadata(input.key, input.value, claimUserId, input.durationMinutes, input.metadata, allowedRoles);
92
108
  if (!result) {
93
109
  // No rows matched. Check if candidates existed (role mismatch vs no match).
@@ -129,22 +145,26 @@ async function resolveByMetadata(input, auth) {
129
145
  // Write-scope folds into the atomic resolve SQL: global → no filter; otherwise
130
146
  // write_all roles match any item, write_self roles match only items assigned
131
147
  // to the resolver. A non-global caller cannot pass a foreign assignee, so the
132
- // self-branch (assigned_to = resolveUserId) is the caller's own items.
148
+ // self-branch (assigned_to = resolveUserId) is the caller's own items. An
149
+ // optional caller restriction (expected queues) intersects with both arrays
150
+ // inside the same SQL filter.
133
151
  const writeScope = await (0, helpers_1.getEscalationWriteScope)(auth.userId);
134
- const writeAllRoles = writeScope.global ? null : writeScope.allRoles;
135
- const writeSelfRoles = writeScope.global ? null : writeScope.selfRoles;
152
+ const writeAllRoles = restrictScopeRoles(writeScope.allRoles, writeScope.global, input.restrictRoles);
153
+ const writeSelfRoles = writeScope.global
154
+ ? (input.restrictRoles?.length ? [] : null)
155
+ : restrictScopeRoles(writeScope.selfRoles, false, input.restrictRoles);
136
156
  // Schema enforcement rides the atomic statement: with the cached enforcing
137
157
  // set empty (the common case) the single-call behavior is unchanged. When
138
158
  // the picked row's role enforces, the statement returns the row WITHOUT
139
159
  // writing; the payload validates here, then a second asserted pass claims
140
160
  // + resolves the same row with pending re-checked inside the statement.
141
161
  const enforcing = await (0, enforcement_cache_1.getEnforcingRoles)();
142
- let result = await escalationService.resolveByMetadataAtomic(input.key, input.value, resolveUserId, input.resolverPayload, input.metadata, writeAllRoles, writeSelfRoles, enforcing.size > 0 ? [...enforcing] : null);
162
+ let result = await escalationService.resolveByMetadataAtomic(input.key, input.value, resolveUserId, input.resolverPayload, input.metadata, writeAllRoles, writeSelfRoles, enforcing.size > 0 ? [...enforcing] : null, null, input.extraFacets);
143
163
  if (result.outcome === 'validation_required' && result.row) {
144
- const report = await (0, resolver_validation_1.checkResolverPayload)(result.row, input.resolverPayload);
164
+ const report = await (0, resolver_validation_1.checkResolverPayload)(result.row, input.resolverPayload, undefined, resolveUserId);
145
165
  if (report)
146
166
  return (0, resolve_1.validationFailure)(report);
147
- result = await escalationService.resolveByMetadataAtomic(input.key, input.value, resolveUserId, input.resolverPayload, input.metadata, writeAllRoles, writeSelfRoles, null, result.row.id);
167
+ result = await escalationService.resolveByMetadataAtomic(input.key, input.value, resolveUserId, input.resolverPayload, input.metadata, writeAllRoles, writeSelfRoles, null, result.row.id, input.extraFacets);
148
168
  // The asserted row left pending between the two passes — a concurrent
149
169
  // resolution won the row; surface it as the conflict it is.
150
170
  if (result.outcome === 'not_found') {
@@ -98,7 +98,7 @@ async function resolveEscalation(input, auth) {
98
98
  // the escalation's resolved form schema BEFORE any resolution path runs.
99
99
  // Costs nothing when the role does not enforce (cached role set); the
100
100
  // task-fallback envelope read only happens for enforcing roles.
101
- const violation = await (0, resolver_validation_1.checkResolverPayload)(escalation, resolverPayload, () => reconstructEnvelope(escalation));
101
+ const violation = await (0, resolver_validation_1.checkResolverPayload)(escalation, resolverPayload, () => reconstructEnvelope(escalation), auth.userId);
102
102
  if (violation)
103
103
  return validationFailure(violation);
104
104
  // The resolver payload is stored exactly as submitted — its shape is the
@@ -181,7 +181,7 @@ async function resolveBySignalKey(input, auth) {
181
181
  return { status: 404, error: 'Escalation not found' };
182
182
  // Schema enforcement — the row (envelope included) is already loaded, so
183
183
  // this costs zero extra reads beyond the cached schema.
184
- const violation = await (0, resolver_validation_1.checkResolverPayload)(escalation, resolverPayload);
184
+ const violation = await (0, resolver_validation_1.checkResolverPayload)(escalation, resolverPayload, undefined, auth.userId);
185
185
  if (violation)
186
186
  return validationFailure(violation);
187
187
  // The payload is delivered as the signal the parked workflow's condition()
@@ -247,7 +247,7 @@ async function resolveByIds(input, auth) {
247
247
  const fullRows = await escalationService.getEscalationsByIds(involved);
248
248
  const failed = [];
249
249
  for (const row of fullRows) {
250
- const report = await (0, resolver_validation_1.checkResolverPayload)(row, resolverPayload);
250
+ const report = await (0, resolver_validation_1.checkResolverPayload)(row, resolverPayload, undefined, auth.userId);
251
251
  if (report)
252
252
  failed.push({ id: row.id, report });
253
253
  }
@@ -346,7 +346,7 @@ async function resolveAllOrNone(input, auth) {
346
346
  const row = rowById.get(item.id);
347
347
  if (!row || !row.role || !enforcing.has(row.role))
348
348
  continue;
349
- const report = await (0, resolver_validation_1.checkResolverPayload)(row, item.resolverPayload);
349
+ const report = await (0, resolver_validation_1.checkResolverPayload)(row, item.resolverPayload, undefined, auth.userId);
350
350
  if (report)
351
351
  failed.push({ id: item.id, report });
352
352
  }
@@ -0,0 +1,22 @@
1
+ import * as scanCodeService from '../../services/scan-code';
2
+ import type { LTApiResult } from '../../types/sdk';
3
+ export declare function listScanSchemes(): Promise<LTApiResult>;
4
+ export declare function getScanScheme(input: {
5
+ version: number;
6
+ }): Promise<LTApiResult>;
7
+ export declare function upsertScanScheme(input: scanCodeService.ScanSchemeInput): Promise<LTApiResult>;
8
+ export declare function deleteScanScheme(input: {
9
+ version: number;
10
+ }): Promise<LTApiResult>;
11
+ export declare function listScanRules(input: {
12
+ version: number;
13
+ }): Promise<LTApiResult>;
14
+ export declare function getScanRule(input: {
15
+ version: number;
16
+ category: string;
17
+ }): Promise<LTApiResult>;
18
+ export declare function upsertScanRule(input: scanCodeService.ScanRuleInput): Promise<LTApiResult>;
19
+ export declare function deleteScanRule(input: {
20
+ version: number;
21
+ category: string;
22
+ }): Promise<LTApiResult>;
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.listScanSchemes = listScanSchemes;
37
+ exports.getScanScheme = getScanScheme;
38
+ exports.upsertScanScheme = upsertScanScheme;
39
+ exports.deleteScanScheme = deleteScanScheme;
40
+ exports.listScanRules = listScanRules;
41
+ exports.getScanRule = getScanRule;
42
+ exports.upsertScanRule = upsertScanRule;
43
+ exports.deleteScanRule = deleteScanRule;
44
+ const scanCodeService = __importStar(require("../../services/scan-code"));
45
+ // ── Scheme CRUD ────────────────────────────────────────────────────────────
46
+ // Admin gating happens at the transport layer (requireAdmin on routes, admin
47
+ // MCP registration) — same convention as workflow config.
48
+ async function listScanSchemes() {
49
+ try {
50
+ const schemes = await scanCodeService.listScanSchemes();
51
+ return { status: 200, data: { schemes } };
52
+ }
53
+ catch (err) {
54
+ return { status: 500, error: err.message };
55
+ }
56
+ }
57
+ async function getScanScheme(input) {
58
+ try {
59
+ const scheme = await scanCodeService.getScanScheme(input.version);
60
+ if (!scheme)
61
+ return { status: 404, error: `No scan scheme for version ${input.version}` };
62
+ const rules = await scanCodeService.listScanRules(input.version);
63
+ return { status: 200, data: { scheme, rules } };
64
+ }
65
+ catch (err) {
66
+ return { status: 500, error: err.message };
67
+ }
68
+ }
69
+ async function upsertScanScheme(input) {
70
+ try {
71
+ const scheme = await scanCodeService.upsertScanScheme(input);
72
+ return { status: 200, data: { scheme } };
73
+ }
74
+ catch (err) {
75
+ // Write-time invariant violations are caller errors, not server faults.
76
+ return { status: 400, error: err.message };
77
+ }
78
+ }
79
+ async function deleteScanScheme(input) {
80
+ try {
81
+ const deleted = await scanCodeService.deleteScanScheme(input.version);
82
+ if (!deleted)
83
+ return { status: 404, error: `No scan scheme for version ${input.version}` };
84
+ return { status: 200, data: { deleted: true } };
85
+ }
86
+ catch (err) {
87
+ return { status: 500, error: err.message };
88
+ }
89
+ }
90
+ // ── Rule CRUD ──────────────────────────────────────────────────────────────
91
+ async function listScanRules(input) {
92
+ try {
93
+ const rules = await scanCodeService.listScanRules(input.version);
94
+ return { status: 200, data: { rules } };
95
+ }
96
+ catch (err) {
97
+ return { status: 500, error: err.message };
98
+ }
99
+ }
100
+ async function getScanRule(input) {
101
+ try {
102
+ const rule = await scanCodeService.getScanRule(input.version, input.category);
103
+ if (!rule) {
104
+ return { status: 404, error: `No scan rule for ${input.version}:${input.category}` };
105
+ }
106
+ return { status: 200, data: { rule } };
107
+ }
108
+ catch (err) {
109
+ return { status: 500, error: err.message };
110
+ }
111
+ }
112
+ async function upsertScanRule(input) {
113
+ try {
114
+ const scheme = await scanCodeService.getScanScheme(input.scheme_version);
115
+ if (!scheme) {
116
+ return { status: 404, error: `No scan scheme for version ${input.scheme_version} — create the scheme first` };
117
+ }
118
+ const rule = await scanCodeService.upsertScanRule(input);
119
+ return { status: 200, data: { rule } };
120
+ }
121
+ catch (err) {
122
+ return { status: 400, error: err.message };
123
+ }
124
+ }
125
+ async function deleteScanRule(input) {
126
+ try {
127
+ const deleted = await scanCodeService.deleteScanRule(input.version, input.category);
128
+ if (!deleted) {
129
+ return { status: 404, error: `No scan rule for ${input.version}:${input.category}` };
130
+ }
131
+ return { status: 200, data: { deleted: true } };
132
+ }
133
+ catch (err) {
134
+ return { status: 500, error: err.message };
135
+ }
136
+ }
@@ -0,0 +1,9 @@
1
+ import { type ScanExecuteRequest, type ScanExecuteResponse } from '../../types';
2
+ import type { LTApiAuth, LTApiResult } from '../../types/sdk';
3
+ /**
4
+ * Execute a raw scan code: parse → load the rule → walk its steps in order.
5
+ * The first step whose condition matches performs its verb and answers; a
6
+ * step that matches nothing falls through to the next. Every terminal state
7
+ * is a structured 200 outcome — the scan surface reports, it doesn't throw.
8
+ */
9
+ export declare function executeScanCode(input: ScanExecuteRequest, auth: LTApiAuth): Promise<LTApiResult<ScanExecuteResponse>>;