@hotmeshio/long-tail 0.10.13 → 0.11.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 (373) hide show
  1. package/README.md +2 -4
  2. package/build/api/escalations/analytics.d.ts +6 -0
  3. package/build/api/escalations/analytics.js +123 -0
  4. package/build/api/escalations/index.d.ts +1 -0
  5. package/build/api/escalations/index.js +4 -1
  6. package/build/api/escalations/metadata.js +1 -1
  7. package/build/api/escalations/resolve.js +4 -4
  8. package/build/api/roles.d.ts +4 -0
  9. package/build/api/roles.js +8 -0
  10. package/build/api/scan-codes/choice.d.ts +11 -0
  11. package/build/api/scan-codes/choice.js +136 -0
  12. package/build/api/scan-codes/context.d.ts +24 -0
  13. package/build/api/scan-codes/context.js +86 -0
  14. package/build/api/scan-codes/execute.d.ts +1 -0
  15. package/build/api/scan-codes/execute.js +49 -244
  16. package/build/api/scan-codes/identity.d.ts +18 -0
  17. package/build/api/scan-codes/identity.js +116 -0
  18. package/build/api/scan-codes/index.d.ts +2 -0
  19. package/build/api/scan-codes/index.js +6 -1
  20. package/build/api/scan-codes/locate.d.ts +14 -0
  21. package/build/api/scan-codes/locate.js +127 -0
  22. package/build/api/scan-codes/present.d.ts +9 -0
  23. package/build/api/scan-codes/present.js +59 -0
  24. package/build/api/scan-codes/verbs.d.ts +15 -0
  25. package/build/api/scan-codes/verbs.js +205 -0
  26. package/build/bin/ltc.js +33 -0
  27. package/build/lib/cli/commands/escalations.d.ts +31 -0
  28. package/build/lib/cli/commands/escalations.js +88 -0
  29. package/build/lib/db/schemas/028_role_entity_facet.sql +18 -0
  30. package/build/lib/db/schemas/029_scan_scheme_kind.sql +31 -0
  31. package/build/modules/config.d.ts +5 -0
  32. package/build/modules/config.js +12 -0
  33. package/build/routes/escalations/acting.d.ts +12 -0
  34. package/build/routes/escalations/acting.js +25 -0
  35. package/build/routes/escalations/analytics.d.ts +8 -0
  36. package/build/routes/escalations/analytics.js +63 -0
  37. package/build/routes/escalations/index.js +3 -0
  38. package/build/routes/escalations/resolve.js +8 -1
  39. package/build/routes/escalations/single.js +13 -4
  40. package/build/routes/roles.js +1 -1
  41. package/build/routes/scan-codes.js +28 -2
  42. package/build/scripts/ortho-populate.js +14 -0
  43. package/build/scripts/printer-cycle.d.ts +25 -0
  44. package/build/scripts/printer-cycle.js +169 -0
  45. package/build/scripts/twin-farm.js +19 -5
  46. package/build/sdk/index.d.ts +2 -0
  47. package/build/sdk/index.js +3 -0
  48. package/build/services/escalation/aggregate-sql.d.ts +36 -0
  49. package/build/services/escalation/aggregate-sql.js +253 -0
  50. package/build/services/escalation/aggregate-validate.d.ts +57 -0
  51. package/build/services/escalation/aggregate-validate.js +218 -0
  52. package/build/services/escalation/aggregates.d.ts +26 -0
  53. package/build/services/escalation/aggregates.js +204 -0
  54. package/build/services/escalation/client.js +57 -21
  55. package/build/services/escalation/facet-sql.js +17 -0
  56. package/build/services/escalation/index.d.ts +2 -0
  57. package/build/services/escalation/index.js +8 -1
  58. package/build/services/escalation/metrics-cache.d.ts +18 -0
  59. package/build/services/escalation/metrics-cache.js +47 -1
  60. package/build/services/escalation/queries.js +2 -0
  61. package/build/services/escalation/resolver-validation.d.ts +1 -1
  62. package/build/services/escalation/resolver-validation.js +12 -5
  63. package/build/services/escalation/submit-guard.d.ts +29 -0
  64. package/build/services/escalation/submit-guard.js +57 -0
  65. package/build/services/iam/acting-identity.d.ts +16 -0
  66. package/build/services/iam/acting-identity.js +60 -0
  67. package/build/services/role/index.js +2 -0
  68. package/build/services/role/sql.d.ts +10 -2
  69. package/build/services/role/sql.js +14 -1
  70. package/build/services/role/types.d.ts +16 -0
  71. package/build/services/scan-code/read.js +4 -0
  72. package/build/services/scan-code/sql.d.ts +4 -4
  73. package/build/services/scan-code/sql.js +14 -8
  74. package/build/services/scan-code/validate.d.ts +2 -0
  75. package/build/services/scan-code/validate.js +86 -0
  76. package/build/services/scan-code/write.d.ts +4 -0
  77. package/build/services/scan-code/write.js +16 -2
  78. package/build/services/user/crud.d.ts +6 -0
  79. package/build/services/user/crud.js +16 -0
  80. package/build/services/user/index.d.ts +1 -1
  81. package/build/services/user/index.js +2 -1
  82. package/build/services/user/sql.d.ts +8 -0
  83. package/build/services/user/sql.js +9 -1
  84. package/build/shared/form-validation/index.d.ts +4 -0
  85. package/build/shared/form-validation/index.js +4 -0
  86. package/build/shared/form-validation/x-lt-labels.d.ts +28 -0
  87. package/build/shared/form-validation/x-lt-labels.js +42 -0
  88. package/build/shared/form-validation/x-lt-query.d.ts +56 -0
  89. package/build/shared/form-validation/x-lt-query.js +49 -0
  90. package/build/shared/form-validation/x-lt-submit-guard.d.ts +46 -0
  91. package/build/shared/form-validation/x-lt-submit-guard.js +25 -0
  92. package/build/shared/form-validation/x-lt-submit-on-claim.d.ts +22 -0
  93. package/build/shared/form-validation/x-lt-submit-on-claim.js +28 -0
  94. package/build/system/mcp-servers/admin/escalations.js +34 -0
  95. package/build/system/mcp-servers/admin/scan-codes.js +17 -1
  96. package/build/system/mcp-servers/admin/schemas.d.ts +643 -25
  97. package/build/system/mcp-servers/admin/schemas.js +127 -19
  98. package/build/system/mcp-servers/admin/users.js +3 -1
  99. package/build/system/mcp-servers/human-queue-schemas.d.ts +2 -2
  100. package/build/system/seed/tool-manifests-admin.d.ts +2283 -0
  101. package/build/system/seed/tool-manifests-admin.js +8 -5
  102. package/build/tsconfig.tsbuildinfo +1 -1
  103. package/build/types/analytics.d.ts +154 -0
  104. package/build/types/analytics.js +14 -0
  105. package/build/types/facets.d.ts +13 -0
  106. package/build/types/index.d.ts +5 -2
  107. package/build/types/index.js +5 -1
  108. package/build/types/scan-choice.d.ts +49 -0
  109. package/build/types/scan-choice.js +9 -0
  110. package/build/types/scan-code.d.ts +72 -1
  111. package/build/types/scan-code.js +30 -1
  112. package/dashboard/dist/assets/{AdminDashboard-Bv3pHBzn.js → AdminDashboard-DJ3LJQ09.js} +2 -2
  113. package/dashboard/dist/assets/{AdminDashboard-Bv3pHBzn.js.map → AdminDashboard-DJ3LJQ09.js.map} +1 -1
  114. package/dashboard/dist/assets/{AgentConfigPage-Dk2zlvDb.js → AgentConfigPage-BMMvaD0z.js} +2 -2
  115. package/dashboard/dist/assets/{AgentConfigPage-Dk2zlvDb.js.map → AgentConfigPage-BMMvaD0z.js.map} +1 -1
  116. package/dashboard/dist/assets/{AgentDetailPage-DUno6EGs.js → AgentDetailPage-C6wfsnRe.js} +2 -2
  117. package/dashboard/dist/assets/{AgentDetailPage-DUno6EGs.js.map → AgentDetailPage-C6wfsnRe.js.map} +1 -1
  118. package/dashboard/dist/assets/AgentsPage-Cwqka7nE.js +2 -0
  119. package/dashboard/dist/assets/{AgentsPage-CToVu1qj.js.map → AgentsPage-Cwqka7nE.js.map} +1 -1
  120. package/dashboard/dist/assets/AvailableEscalationsPage-CVlG_AVC.js +2 -0
  121. package/dashboard/dist/assets/AvailableEscalationsPage-CVlG_AVC.js.map +1 -0
  122. package/dashboard/dist/assets/{BotPicker-DQOpVB4M.js → BotPicker-BBkJBXZB.js} +2 -2
  123. package/dashboard/dist/assets/{BotPicker-DQOpVB4M.js.map → BotPicker-BBkJBXZB.js.map} +1 -1
  124. package/dashboard/dist/assets/{CapabilitiesPage-Dmf46PUJ.js → CapabilitiesPage-wxmE4917.js} +2 -2
  125. package/dashboard/dist/assets/{CapabilitiesPage-Dmf46PUJ.js.map → CapabilitiesPage-wxmE4917.js.map} +1 -1
  126. package/dashboard/dist/assets/{CollapsibleSection-CDADefUY.js → CollapsibleSection-B3FsrHwH.js} +2 -2
  127. package/dashboard/dist/assets/{CollapsibleSection-CDADefUY.js.map → CollapsibleSection-B3FsrHwH.js.map} +1 -1
  128. package/dashboard/dist/assets/CountdownTimer-B3nCqJdC.js +2 -0
  129. package/dashboard/dist/assets/CountdownTimer-B3nCqJdC.js.map +1 -0
  130. package/dashboard/dist/assets/{CredentialsPage-8LIEvomi.js → CredentialsPage-Bv875IHe.js} +2 -2
  131. package/dashboard/dist/assets/{CredentialsPage-8LIEvomi.js.map → CredentialsPage-Bv875IHe.js.map} +1 -1
  132. package/dashboard/dist/assets/{CronLabel-CK3WSsM5.js → CronLabel-CSzjWuwj.js} +2 -2
  133. package/dashboard/dist/assets/{CronLabel-CK3WSsM5.js.map → CronLabel-CSzjWuwj.js.map} +1 -1
  134. package/dashboard/dist/assets/{CustomDurationPicker-FPmlA6cE.js → CustomDurationPicker-CCpqf3e4.js} +2 -2
  135. package/dashboard/dist/assets/{CustomDurationPicker-FPmlA6cE.js.map → CustomDurationPicker-CCpqf3e4.js.map} +1 -1
  136. package/dashboard/dist/assets/{DropZone-CL9gA7pu.js → DropZone-CJkk-U3o.js} +2 -2
  137. package/dashboard/dist/assets/{DropZone-CL9gA7pu.js.map → DropZone-CJkk-U3o.js.map} +1 -1
  138. package/dashboard/dist/assets/{ElapsedCell-BZVkVxE0.js → ElapsedCell-WV6pUaKo.js} +2 -2
  139. package/dashboard/dist/assets/{ElapsedCell-BZVkVxE0.js.map → ElapsedCell-WV6pUaKo.js.map} +1 -1
  140. package/dashboard/dist/assets/EntityTimelinePanel-DrL86Yrf.js +2 -0
  141. package/dashboard/dist/assets/EntityTimelinePanel-DrL86Yrf.js.map +1 -0
  142. package/dashboard/dist/assets/{EscalationListSchemaPage-kYLdUtZX.js → EscalationListSchemaPage-CTQCALw4.js} +3 -3
  143. package/dashboard/dist/assets/{EscalationListSchemaPage-kYLdUtZX.js.map → EscalationListSchemaPage-CTQCALw4.js.map} +1 -1
  144. package/dashboard/dist/assets/{EscalationSchemaPage-kUmCDivo.js → EscalationSchemaPage-D_UgP0pv.js} +3 -3
  145. package/dashboard/dist/assets/{EscalationSchemaPage-kUmCDivo.js.map → EscalationSchemaPage-D_UgP0pv.js.map} +1 -1
  146. package/dashboard/dist/assets/{EscalationsOverview-D17auO-m.js → EscalationsOverview-DuIUyxr0.js} +2 -2
  147. package/dashboard/dist/assets/{EscalationsOverview-D17auO-m.js.map → EscalationsOverview-DuIUyxr0.js.map} +1 -1
  148. package/dashboard/dist/assets/EventTable-BV6unphX.js +2 -0
  149. package/dashboard/dist/assets/EventTable-BV6unphX.js.map +1 -0
  150. package/dashboard/dist/assets/FilterBar-DYFgzXNB.js +2 -0
  151. package/dashboard/dist/assets/FilterBar-DYFgzXNB.js.map +1 -0
  152. package/dashboard/dist/assets/{GraphInvokePage-D11uOnZi.js → GraphInvokePage-BGHVUipJ.js} +2 -2
  153. package/dashboard/dist/assets/{GraphInvokePage-D11uOnZi.js.map → GraphInvokePage-BGHVUipJ.js.map} +1 -1
  154. package/dashboard/dist/assets/HomePage-B-S2cK3E.js +2 -0
  155. package/dashboard/dist/assets/{HomePage-Bcq10Bxx.js.map → HomePage-B-S2cK3E.js.map} +1 -1
  156. package/dashboard/dist/assets/ListToolbar-Bl7F3A28.js +2 -0
  157. package/dashboard/dist/assets/{ListToolbar-IPXsTb3Q.js.map → ListToolbar-Bl7F3A28.js.map} +1 -1
  158. package/dashboard/dist/assets/{McpOverview-Dx2j0KkF.js → McpOverview-_T9IsCD_.js} +2 -2
  159. package/dashboard/dist/assets/{McpOverview-Dx2j0KkF.js.map → McpOverview-_T9IsCD_.js.map} +1 -1
  160. package/dashboard/dist/assets/{McpQueryDetailPage-CzF_bna8.js → McpQueryDetailPage-DtsVqKPw.js} +2 -2
  161. package/dashboard/dist/assets/{McpQueryDetailPage-CzF_bna8.js.map → McpQueryDetailPage-DtsVqKPw.js.map} +1 -1
  162. package/dashboard/dist/assets/McpQueryPage-DX5u-1bx.js +2 -0
  163. package/dashboard/dist/assets/{McpQueryPage-CNsuiw_q.js.map → McpQueryPage-DX5u-1bx.js.map} +1 -1
  164. package/dashboard/dist/assets/McpRunDetailPage-BhcqqtYS.js +2 -0
  165. package/dashboard/dist/assets/McpRunDetailPage-BhcqqtYS.js.map +1 -0
  166. package/dashboard/dist/assets/{McpRunsPage-CK96s3Nt.js → McpRunsPage-L-1y8wnX.js} +2 -2
  167. package/dashboard/dist/assets/{McpRunsPage-CK96s3Nt.js.map → McpRunsPage-L-1y8wnX.js.map} +1 -1
  168. package/dashboard/dist/assets/{NamespacePill-B9Vc_Pz2.js → NamespacePill-in1SLd0W.js} +2 -2
  169. package/dashboard/dist/assets/{NamespacePill-B9Vc_Pz2.js.map → NamespacePill-in1SLd0W.js.map} +1 -1
  170. package/dashboard/dist/assets/OperationsPage-i8KcDpKo.js +3 -0
  171. package/dashboard/dist/assets/OperationsPage-i8KcDpKo.js.map +1 -0
  172. package/dashboard/dist/assets/OperatorDashboard-CIbDzOlh.js +2 -0
  173. package/dashboard/dist/assets/{OperatorDashboard-C-jE0IRA.js.map → OperatorDashboard-CIbDzOlh.js.map} +1 -1
  174. package/dashboard/dist/assets/{PageHeader-Ce4GcIYo.js → PageHeader-BJgWMZtw.js} +2 -2
  175. package/dashboard/dist/assets/{PageHeader-Ce4GcIYo.js.map → PageHeader-BJgWMZtw.js.map} +1 -1
  176. package/dashboard/dist/assets/{PageHeaderWithStats-Ck0KZvXD.js → PageHeaderWithStats-Ccio4vyG.js} +2 -2
  177. package/dashboard/dist/assets/{PageHeaderWithStats-Ck0KZvXD.js.map → PageHeaderWithStats-Ccio4vyG.js.map} +1 -1
  178. package/dashboard/dist/assets/{PersonaDetailPage-CJ6jqo7h.js → PersonaDetailPage-BOaf0TW1.js} +2 -2
  179. package/dashboard/dist/assets/{PersonaDetailPage-CJ6jqo7h.js.map → PersonaDetailPage-BOaf0TW1.js.map} +1 -1
  180. package/dashboard/dist/assets/{PersonasPage-D8hL3kL5.js → PersonasPage-DSdRb90f.js} +2 -2
  181. package/dashboard/dist/assets/{PersonasPage-D8hL3kL5.js.map → PersonasPage-DSdRb90f.js.map} +1 -1
  182. package/dashboard/dist/assets/{ProcessDetailPage-Vnx8Z5_y.js → ProcessDetailPage-DN9NqfeP.js} +2 -2
  183. package/dashboard/dist/assets/{ProcessDetailPage-Vnx8Z5_y.js.map → ProcessDetailPage-DN9NqfeP.js.map} +1 -1
  184. package/dashboard/dist/assets/{ProcessesListPage-DRYtvS3N.js → ProcessesListPage-CfQEWaD4.js} +2 -2
  185. package/dashboard/dist/assets/{ProcessesListPage-DRYtvS3N.js.map → ProcessesListPage-CfQEWaD4.js.map} +1 -1
  186. package/dashboard/dist/assets/RoleDetailPage-BC5HL7ls.js +8 -0
  187. package/dashboard/dist/assets/RoleDetailPage-BC5HL7ls.js.map +1 -0
  188. package/dashboard/dist/assets/{RolePill-CnuBPhPw.js → RolePill-BNAP-uK6.js} +2 -2
  189. package/dashboard/dist/assets/{RolePill-CnuBPhPw.js.map → RolePill-BNAP-uK6.js.map} +1 -1
  190. package/dashboard/dist/assets/RolesPage-DCnW0VmD.js +2 -0
  191. package/dashboard/dist/assets/RolesPage-DCnW0VmD.js.map +1 -0
  192. package/dashboard/dist/assets/RunAsSelector-twbuX7fB.js +2 -0
  193. package/dashboard/dist/assets/{RunAsSelector-CS3KQ-BF.js.map → RunAsSelector-twbuX7fB.js.map} +1 -1
  194. package/dashboard/dist/assets/ScanCodesPage-CPNg6K--.js +2 -0
  195. package/dashboard/dist/assets/ScanCodesPage-CPNg6K--.js.map +1 -0
  196. package/dashboard/dist/assets/ScanSchemeDetailPage-DyLmCamO.js +2 -0
  197. package/dashboard/dist/assets/ScanSchemeDetailPage-DyLmCamO.js.map +1 -0
  198. package/dashboard/dist/assets/ScanStationPage-DoZccU5B.js +2 -0
  199. package/dashboard/dist/assets/ScanStationPage-DoZccU5B.js.map +1 -0
  200. package/dashboard/dist/assets/{ScopeBadge-BUpYpS3x.js → ScopeBadge-BG7KkZ8Q.js} +2 -2
  201. package/dashboard/dist/assets/{ScopeBadge-BUpYpS3x.js.map → ScopeBadge-BG7KkZ8Q.js.map} +1 -1
  202. package/dashboard/dist/assets/SegmentedTabs-DXNzY05q.js +2 -0
  203. package/dashboard/dist/assets/SegmentedTabs-DXNzY05q.js.map +1 -0
  204. package/dashboard/dist/assets/StickyPagination-DIeYMPPd.js +2 -0
  205. package/dashboard/dist/assets/StickyPagination-DIeYMPPd.js.map +1 -0
  206. package/dashboard/dist/assets/{StreamMessageDetail-DyJyZwBl.js → StreamMessageDetail-gU4CUeQI.js} +2 -2
  207. package/dashboard/dist/assets/{StreamMessageDetail-DyJyZwBl.js.map → StreamMessageDetail-gU4CUeQI.js.map} +1 -1
  208. package/dashboard/dist/assets/{SwimlaneTimeline-BlzV74V5.js → SwimlaneTimeline-Br-nBA4l.js} +2 -2
  209. package/dashboard/dist/assets/{SwimlaneTimeline-BlzV74V5.js.map → SwimlaneTimeline-Br-nBA4l.js.map} +1 -1
  210. package/dashboard/dist/assets/{TagInput-BbZ25nNe.js → TagInput-CvM5n6ww.js} +2 -2
  211. package/dashboard/dist/assets/{TagInput-BbZ25nNe.js.map → TagInput-CvM5n6ww.js.map} +1 -1
  212. package/dashboard/dist/assets/{TaskDetailPage-B0p_Z4J_.js → TaskDetailPage-_9cr_R0u.js} +2 -2
  213. package/dashboard/dist/assets/{TaskDetailPage-B0p_Z4J_.js.map → TaskDetailPage-_9cr_R0u.js.map} +1 -1
  214. package/dashboard/dist/assets/{TaskQueuePill-D0QKBrN3.js → TaskQueuePill-D4JPHXOq.js} +2 -2
  215. package/dashboard/dist/assets/{TaskQueuePill-D0QKBrN3.js.map → TaskQueuePill-D4JPHXOq.js.map} +1 -1
  216. package/dashboard/dist/assets/{TasksListPage-CiGR2QiQ.js → TasksListPage-DVENC9Jp.js} +2 -2
  217. package/dashboard/dist/assets/{TasksListPage-CiGR2QiQ.js.map → TasksListPage-DVENC9Jp.js.map} +1 -1
  218. package/dashboard/dist/assets/{TimeAgo-D_DA9ucC.js → TimeAgo-C9yYnOui.js} +2 -2
  219. package/dashboard/dist/assets/{TimeAgo-D_DA9ucC.js.map → TimeAgo-C9yYnOui.js.map} +1 -1
  220. package/dashboard/dist/assets/{TimestampCell-C7rkC9nh.js → TimestampCell-DoB8cYgw.js} +2 -2
  221. package/dashboard/dist/assets/{TimestampCell-C7rkC9nh.js.map → TimestampCell-DoB8cYgw.js.map} +1 -1
  222. package/dashboard/dist/assets/{ToolPill-8xY9rkoc.js → ToolPill-BUjbC-Tj.js} +2 -2
  223. package/dashboard/dist/assets/{ToolPill-8xY9rkoc.js.map → ToolPill-BUjbC-Tj.js.map} +1 -1
  224. package/dashboard/dist/assets/{ToolTestPanel-E8efYGYs.js → ToolTestPanel-CBtsIP8K.js} +2 -2
  225. package/dashboard/dist/assets/{ToolTestPanel-E8efYGYs.js.map → ToolTestPanel-CBtsIP8K.js.map} +1 -1
  226. package/dashboard/dist/assets/{TopicDetailPage-B455XrRc.js → TopicDetailPage-mR4Jaz83.js} +4 -4
  227. package/dashboard/dist/assets/{TopicDetailPage-B455XrRc.js.map → TopicDetailPage-mR4Jaz83.js.map} +1 -1
  228. package/dashboard/dist/assets/TopicsPage-CP7HFxIC.js +2 -0
  229. package/dashboard/dist/assets/{TopicsPage-1VAc29Qw.js.map → TopicsPage-CP7HFxIC.js.map} +1 -1
  230. package/dashboard/dist/assets/{UserName-DikzjQHJ.js → UserName-BnLF6yhz.js} +2 -2
  231. package/dashboard/dist/assets/{UserName-DikzjQHJ.js.map → UserName-BnLF6yhz.js.map} +1 -1
  232. package/dashboard/dist/assets/WorkflowExecutionPage-xL956RZi.js +2 -0
  233. package/dashboard/dist/assets/WorkflowExecutionPage-xL956RZi.js.map +1 -0
  234. package/dashboard/dist/assets/{WorkflowPill-Da406nEj.js → WorkflowPill-tXU0-eXu.js} +2 -2
  235. package/dashboard/dist/assets/{WorkflowPill-Da406nEj.js.map → WorkflowPill-tXU0-eXu.js.map} +1 -1
  236. package/dashboard/dist/assets/WorkflowsDashboard-B-u7zFKM.js +2 -0
  237. package/dashboard/dist/assets/{WorkflowsDashboard-BMQd_0tW.js.map → WorkflowsDashboard-B-u7zFKM.js.map} +1 -1
  238. package/dashboard/dist/assets/{WorkflowsOverview-CdxjVifp.js → WorkflowsOverview-CqZVarK-.js} +2 -2
  239. package/dashboard/dist/assets/{WorkflowsOverview-CdxjVifp.js.map → WorkflowsOverview-CqZVarK-.js.map} +1 -1
  240. package/dashboard/dist/assets/{YamlWorkflowDetailPage-DNVffIXa.js → YamlWorkflowDetailPage-DiFLavW0.js} +10 -10
  241. package/dashboard/dist/assets/{YamlWorkflowDetailPage-DNVffIXa.js.map → YamlWorkflowDetailPage-DiFLavW0.js.map} +1 -1
  242. package/dashboard/dist/assets/{YamlWorkflowsPage-BGP8wuos.js → YamlWorkflowsPage-BuQM6uZA.js} +2 -2
  243. package/dashboard/dist/assets/{YamlWorkflowsPage-BGP8wuos.js.map → YamlWorkflowsPage-BuQM6uZA.js.map} +1 -1
  244. package/dashboard/dist/assets/{agents-BZJLIJ4h.js → agents-DU9GPovp.js} +2 -2
  245. package/dashboard/dist/assets/{agents-BZJLIJ4h.js.map → agents-DU9GPovp.js.map} +1 -1
  246. package/dashboard/dist/assets/{bots-ClLcDGJb.js → bots-Cy-Hmg7w.js} +2 -2
  247. package/dashboard/dist/assets/{bots-ClLcDGJb.js.map → bots-Cy-Hmg7w.js.map} +1 -1
  248. package/dashboard/dist/assets/capabilities-sSJJqrp-.js +2 -0
  249. package/dashboard/dist/assets/{capabilities-IaCcS7ge.js.map → capabilities-sSJJqrp-.js.map} +1 -1
  250. package/dashboard/dist/assets/{controlplane-Zi4m_MSx.js → controlplane-TVCjDHQ-.js} +2 -2
  251. package/dashboard/dist/assets/{controlplane-Zi4m_MSx.js.map → controlplane-TVCjDHQ-.js.map} +1 -1
  252. package/dashboard/dist/assets/escalation-columns-BpkjKYGd.js +2 -0
  253. package/dashboard/dist/assets/escalation-columns-BpkjKYGd.js.map +1 -0
  254. package/dashboard/dist/assets/index-5TblaCXQ.css +1 -0
  255. package/dashboard/dist/assets/index-7BP6FaCZ.js +2 -0
  256. package/dashboard/dist/assets/{index-Dldi3Q3M.js.map → index-7BP6FaCZ.js.map} +1 -1
  257. package/dashboard/dist/assets/{index-BzkE48xJ.js → index-B7IaBPBg.js} +4 -4
  258. package/dashboard/dist/assets/{index-BzkE48xJ.js.map → index-B7IaBPBg.js.map} +1 -1
  259. package/dashboard/dist/assets/index-BE0phFw0.js +2 -0
  260. package/dashboard/dist/assets/{index-CLmZaNTK.js.map → index-BE0phFw0.js.map} +1 -1
  261. package/dashboard/dist/assets/{index-BqGnhkh0.js → index-BYNN9N1T.js} +2 -2
  262. package/dashboard/dist/assets/{index-BqGnhkh0.js.map → index-BYNN9N1T.js.map} +1 -1
  263. package/dashboard/dist/assets/{index-kiKZresb.js → index-CLPVqbVY.js} +2 -2
  264. package/dashboard/dist/assets/{index-kiKZresb.js.map → index-CLPVqbVY.js.map} +1 -1
  265. package/dashboard/dist/assets/{index-C3o4OisO.js → index-Cfv86_L9.js} +2 -2
  266. package/dashboard/dist/assets/{index-C3o4OisO.js.map → index-Cfv86_L9.js.map} +1 -1
  267. package/dashboard/dist/assets/{index-yGNt29V9.js → index-CtwbQ_-m.js} +2 -2
  268. package/dashboard/dist/assets/{index-yGNt29V9.js.map → index-CtwbQ_-m.js.map} +1 -1
  269. package/dashboard/dist/assets/index-DOai950R.js +3 -0
  270. package/dashboard/dist/assets/index-DOai950R.js.map +1 -0
  271. package/dashboard/dist/assets/index-DTtHNC-D.js +5 -0
  272. package/dashboard/dist/assets/{index-CvNBdkB1.js.map → index-DTtHNC-D.js.map} +1 -1
  273. package/dashboard/dist/assets/{index-CJu2PBNx.js → index-DsWnVyVN.js} +2 -2
  274. package/dashboard/dist/assets/{index-CJu2PBNx.js.map → index-DsWnVyVN.js.map} +1 -1
  275. package/dashboard/dist/assets/{index-D0zFReGL.js → index-Dy-MMYti.js} +2 -2
  276. package/dashboard/dist/assets/{index-D0zFReGL.js.map → index-Dy-MMYti.js.map} +1 -1
  277. package/dashboard/dist/assets/index-errgQT5x.js +65 -0
  278. package/dashboard/dist/assets/index-errgQT5x.js.map +1 -0
  279. package/dashboard/dist/assets/{index-CmnNqpWg.js → index-fgBDhnI6.js} +2 -2
  280. package/dashboard/dist/assets/{index-CmnNqpWg.js.map → index-fgBDhnI6.js.map} +1 -1
  281. package/dashboard/dist/assets/{knowledge-DWLxGTib.js → knowledge-arh4NfmL.js} +2 -2
  282. package/dashboard/dist/assets/{knowledge-DWLxGTib.js.map → knowledge-arh4NfmL.js.map} +1 -1
  283. package/dashboard/dist/assets/{mcp-B6AARZ2I.js → mcp-QGf5jHCo.js} +2 -2
  284. package/dashboard/dist/assets/{mcp-B6AARZ2I.js.map → mcp-QGf5jHCo.js.map} +1 -1
  285. package/dashboard/dist/assets/{mcp-query-DrkvBU3a.js → mcp-query-BEJN1nMZ.js} +2 -2
  286. package/dashboard/dist/assets/{mcp-query-DrkvBU3a.js.map → mcp-query-BEJN1nMZ.js.map} +1 -1
  287. package/dashboard/dist/assets/{personas-Cmz2SAEU.js → personas-DYtw1COf.js} +2 -2
  288. package/dashboard/dist/assets/{personas-Cmz2SAEU.js.map → personas-DYtw1COf.js.map} +1 -1
  289. package/dashboard/dist/assets/{pipelines-CSgfVCMy.js → pipelines-Byi6PnbE.js} +2 -2
  290. package/dashboard/dist/assets/{pipelines-CSgfVCMy.js.map → pipelines-Byi6PnbE.js.map} +1 -1
  291. package/dashboard/dist/assets/{tasks-UOtUkDk-.js → tasks-D0SQdENz.js} +2 -2
  292. package/dashboard/dist/assets/{tasks-UOtUkDk-.js.map → tasks-D0SQdENz.js.map} +1 -1
  293. package/dashboard/dist/assets/{topics-Df5hGh6o.js → topics-DgDv5ZXP.js} +2 -2
  294. package/dashboard/dist/assets/{topics-Df5hGh6o.js.map → topics-DgDv5ZXP.js.map} +1 -1
  295. package/dashboard/dist/assets/useEventHooks-DZaYzE7s.js +2 -0
  296. package/dashboard/dist/assets/{useEventHooks-PDbuSJ12.js.map → useEventHooks-DZaYzE7s.js.map} +1 -1
  297. package/dashboard/dist/assets/{useNamespace-tZSOlge3.js → useNamespace-C1OqiNXN.js} +2 -2
  298. package/dashboard/dist/assets/{useNamespace-tZSOlge3.js.map → useNamespace-C1OqiNXN.js.map} +1 -1
  299. package/dashboard/dist/assets/{useYamlActivityEvents-CINLzE32.js → useYamlActivityEvents-CkmXDm-Z.js} +2 -2
  300. package/dashboard/dist/assets/{useYamlActivityEvents-CINLzE32.js.map → useYamlActivityEvents-CkmXDm-Z.js.map} +1 -1
  301. package/dashboard/dist/assets/{users-G8qwyZKS.js → users-D4DCFPH1.js} +2 -2
  302. package/dashboard/dist/assets/{users-G8qwyZKS.js.map → users-D4DCFPH1.js.map} +1 -1
  303. package/dashboard/dist/assets/{vendor-icons-BpZiWH2f.js → vendor-icons-BxuyFxH2.js} +156 -136
  304. package/dashboard/dist/assets/vendor-icons-BxuyFxH2.js.map +1 -0
  305. package/dashboard/dist/assets/{workflows-DbPqi1TW.js → workflows-qyc0ku_5.js} +2 -2
  306. package/dashboard/dist/assets/{workflows-DbPqi1TW.js.map → workflows-qyc0ku_5.js.map} +1 -1
  307. package/dashboard/dist/assets/{yaml-workflows-DozD8hpR.js → yaml-workflows-DWFww9Xn.js} +2 -2
  308. package/dashboard/dist/assets/{yaml-workflows-DozD8hpR.js.map → yaml-workflows-DWFww9Xn.js.map} +1 -1
  309. package/dashboard/dist/index.html +3 -3
  310. package/docs/api/http/escalations.md +133 -0
  311. package/docs/api/http/roles.md +6 -0
  312. package/docs/api/mcp/admin.md +53 -0
  313. package/docs/api/sdk/escalations.md +58 -0
  314. package/docs/cli.md +11 -0
  315. package/docs/dashboard.md +22 -20
  316. package/docs/data.md +12 -4
  317. package/docs/design-principles.md +9 -7
  318. package/docs/escalation-analytics.md +251 -0
  319. package/docs/hitl/roles.md +1 -1
  320. package/docs/hitl/x-lt-embed.md +8 -4
  321. package/docs/hitl/x-lt-footer.md +67 -0
  322. package/docs/hitl/x-lt-list-schema.md +10 -3
  323. package/docs/hitl-guide.md +11 -2
  324. package/docs/iam.md +12 -0
  325. package/docs/operations.md +17 -0
  326. package/docs/scan-codes.md +112 -0
  327. package/docs/sdk.md +1 -1
  328. package/package.json +2 -1
  329. package/dashboard/dist/assets/AgentsPage-CToVu1qj.js +0 -2
  330. package/dashboard/dist/assets/AvailableEscalationsPage-DldboL4W.js +0 -2
  331. package/dashboard/dist/assets/AvailableEscalationsPage-DldboL4W.js.map +0 -1
  332. package/dashboard/dist/assets/CountdownTimer-DPjIkerB.js +0 -2
  333. package/dashboard/dist/assets/CountdownTimer-DPjIkerB.js.map +0 -1
  334. package/dashboard/dist/assets/EventTable-CwPWl163.js +0 -2
  335. package/dashboard/dist/assets/EventTable-CwPWl163.js.map +0 -1
  336. package/dashboard/dist/assets/FilterBar-D7GghUsU.js +0 -2
  337. package/dashboard/dist/assets/FilterBar-D7GghUsU.js.map +0 -1
  338. package/dashboard/dist/assets/HomePage-Bcq10Bxx.js +0 -2
  339. package/dashboard/dist/assets/ListToolbar-IPXsTb3Q.js +0 -2
  340. package/dashboard/dist/assets/McpQueryPage-CNsuiw_q.js +0 -2
  341. package/dashboard/dist/assets/McpRunDetailPage-BJguEMS0.js +0 -2
  342. package/dashboard/dist/assets/McpRunDetailPage-BJguEMS0.js.map +0 -1
  343. package/dashboard/dist/assets/OperationsPage-DvWrLuH6.js +0 -2
  344. package/dashboard/dist/assets/OperationsPage-DvWrLuH6.js.map +0 -1
  345. package/dashboard/dist/assets/OperatorDashboard-C-jE0IRA.js +0 -2
  346. package/dashboard/dist/assets/RoleDetailPage-BKkUvTO-.js +0 -8
  347. package/dashboard/dist/assets/RoleDetailPage-BKkUvTO-.js.map +0 -1
  348. package/dashboard/dist/assets/RolesPage-BHzWK9n6.js +0 -2
  349. package/dashboard/dist/assets/RolesPage-BHzWK9n6.js.map +0 -1
  350. package/dashboard/dist/assets/RunAsSelector-CS3KQ-BF.js +0 -2
  351. package/dashboard/dist/assets/ScanCodesPage-BW4P4zWf.js +0 -2
  352. package/dashboard/dist/assets/ScanCodesPage-BW4P4zWf.js.map +0 -1
  353. package/dashboard/dist/assets/ScanSchemeDetailPage-BLykA4j-.js +0 -2
  354. package/dashboard/dist/assets/ScanSchemeDetailPage-BLykA4j-.js.map +0 -1
  355. package/dashboard/dist/assets/StickyPagination-hMrnLXde.js +0 -2
  356. package/dashboard/dist/assets/StickyPagination-hMrnLXde.js.map +0 -1
  357. package/dashboard/dist/assets/TopicsPage-1VAc29Qw.js +0 -2
  358. package/dashboard/dist/assets/WorkflowExecutionPage-C15GSAoe.js +0 -2
  359. package/dashboard/dist/assets/WorkflowExecutionPage-C15GSAoe.js.map +0 -1
  360. package/dashboard/dist/assets/WorkflowsDashboard-BMQd_0tW.js +0 -2
  361. package/dashboard/dist/assets/capabilities-IaCcS7ge.js +0 -2
  362. package/dashboard/dist/assets/escalation-columns-BY2mg9DY.js +0 -2
  363. package/dashboard/dist/assets/escalation-columns-BY2mg9DY.js.map +0 -1
  364. package/dashboard/dist/assets/index-CLmZaNTK.js +0 -2
  365. package/dashboard/dist/assets/index-CfAi1OsI.js +0 -65
  366. package/dashboard/dist/assets/index-CfAi1OsI.js.map +0 -1
  367. package/dashboard/dist/assets/index-CvNBdkB1.js +0 -5
  368. package/dashboard/dist/assets/index-Dldi3Q3M.js +0 -2
  369. package/dashboard/dist/assets/index-mKcQGi2B.js +0 -3
  370. package/dashboard/dist/assets/index-mKcQGi2B.js.map +0 -1
  371. package/dashboard/dist/assets/index-zQiUPfxA.css +0 -1
  372. package/dashboard/dist/assets/useEventHooks-PDbuSJ12.js +0 -2
  373. package/dashboard/dist/assets/vendor-icons-BpZiWH2f.js.map +0 -1
@@ -0,0 +1,28 @@
1
+ /**
2
+ * x-lt-labels — configurable copy for the standard escalation footer. A
3
+ * form_schema may declare, at its schema root, an object that renames the
4
+ * footer's action controls. Each key is a standard target; its value is the
5
+ * label to render in place of the default.
6
+ *
7
+ * x-lt-labels object — { claim, cancel, submit, escalate, release }
8
+ *
9
+ * ```jsonc
10
+ * { "x-lt-labels": { "claim": "Claim and Submit", "submit": "Approve" } }
11
+ * ```
12
+ *
13
+ * Only the five known targets are read; unknown keys and non-string values are
14
+ * ignored. Any target the schema omits keeps its default label, so a schema
15
+ * overrides just the controls it cares about.
16
+ */
17
+ export declare const X_LT_LABELS = "x-lt-labels";
18
+ /** The footer controls a schema may rename. */
19
+ export declare const FOOTER_LABEL_TARGETS: readonly ["claim", "cancel", "submit", "escalate", "release"];
20
+ export type FooterLabelTarget = (typeof FOOTER_LABEL_TARGETS)[number];
21
+ /** A partial map of target → override label. Absent targets keep their default. */
22
+ export type FooterLabels = Partial<Record<FooterLabelTarget, string>>;
23
+ /**
24
+ * The schema's footer label overrides, or an empty map when none are declared.
25
+ * Reads only the known targets; a non-object `x-lt-labels`, unknown keys, and
26
+ * blank or non-string values are dropped.
27
+ */
28
+ export declare function readFooterLabels(schema: Record<string, unknown> | null | undefined): FooterLabels;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ /**
3
+ * x-lt-labels — configurable copy for the standard escalation footer. A
4
+ * form_schema may declare, at its schema root, an object that renames the
5
+ * footer's action controls. Each key is a standard target; its value is the
6
+ * label to render in place of the default.
7
+ *
8
+ * x-lt-labels object — { claim, cancel, submit, escalate, release }
9
+ *
10
+ * ```jsonc
11
+ * { "x-lt-labels": { "claim": "Claim and Submit", "submit": "Approve" } }
12
+ * ```
13
+ *
14
+ * Only the five known targets are read; unknown keys and non-string values are
15
+ * ignored. Any target the schema omits keeps its default label, so a schema
16
+ * overrides just the controls it cares about.
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.FOOTER_LABEL_TARGETS = exports.X_LT_LABELS = void 0;
20
+ exports.readFooterLabels = readFooterLabels;
21
+ exports.X_LT_LABELS = 'x-lt-labels';
22
+ /** The footer controls a schema may rename. */
23
+ exports.FOOTER_LABEL_TARGETS = ['claim', 'cancel', 'submit', 'escalate', 'release'];
24
+ /**
25
+ * The schema's footer label overrides, or an empty map when none are declared.
26
+ * Reads only the known targets; a non-object `x-lt-labels`, unknown keys, and
27
+ * blank or non-string values are dropped.
28
+ */
29
+ function readFooterLabels(schema) {
30
+ const raw = schema?.[exports.X_LT_LABELS];
31
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw))
32
+ return {};
33
+ const source = raw;
34
+ const labels = {};
35
+ for (const target of exports.FOOTER_LABEL_TARGETS) {
36
+ const value = source[target];
37
+ if (typeof value === 'string' && value.trim().length > 0) {
38
+ labels[target] = value.trim();
39
+ }
40
+ }
41
+ return labels;
42
+ }
@@ -0,0 +1,56 @@
1
+ import type { ShowIfContext } from './x-lt-show-if';
2
+ /**
3
+ * The embedded escalation query shape shared by `x-lt-query` (escalation-list
4
+ * widget) and `x-lt-submit-guard.query` (form-level submit gate). String
5
+ * values inside `facets` support `{{domain.path}}` token interpolation against
6
+ * the host escalation's context. Isomorphic: the dashboard renders embeds from
7
+ * it, and the API layer enforces the submit gate from the identical mapping.
8
+ *
9
+ * `assigned` is the ownership scope. Ownership is not a separate list — it is
10
+ * one more dimension of the same faceted query language the escalation API
11
+ * composes server-side ("claimed" is the implied status: pending, held, claim
12
+ * window live):
13
+ * - `"me"` — rows claimed by the viewing user (the walk case: I walk what I own)
14
+ * - `"any"` — all matching rows regardless of claim state
15
+ * - omitted — available rows only (unclaimed, or claim window lapsed)
16
+ */
17
+ export interface EmbedQuery {
18
+ role?: string;
19
+ status?: string;
20
+ facets?: Record<string, string>;
21
+ limit?: number;
22
+ assigned?: 'me' | 'any';
23
+ /** Superseded by `assigned`; honored only when `assigned` is omitted. */
24
+ available?: boolean;
25
+ }
26
+ /** Interpolate `{{domain.path}}` tokens in every string value of the facets map. */
27
+ export declare function resolveQueryFacets(facets: Record<string, string> | undefined, ctx: ShowIfContext): Record<string, unknown>;
28
+ /** The escalation-query params an EmbedQuery resolves to — the exact input
29
+ * shape of `useEscalations`, so every embed surface queries identically. */
30
+ export interface ScopedQueryParams {
31
+ role?: string;
32
+ status: string;
33
+ facets: Record<string, unknown>;
34
+ assigned_to?: string;
35
+ available?: boolean;
36
+ limit?: number;
37
+ enabled: boolean;
38
+ }
39
+ /**
40
+ * Resolve an EmbedQuery into concrete escalation-query params — the ONE
41
+ * mapping every embed surface (escalation-list, x-lt-actions, x-lt-submit-guard)
42
+ * consumes, so the visible rows and any count derived from the same query can
43
+ * never disagree.
44
+ *
45
+ * Ownership scope translates into the faceted query language:
46
+ * - `assigned: "me"` → `assigned_to = viewer AND available = false` — the
47
+ * implied "claimed" status (pending + live claim window held by the viewer)
48
+ * - `assigned: "any"` → no ownership constraint
49
+ * - omitted → `available = true` (the unclaimed pool; a declared
50
+ * legacy `available` value is honored)
51
+ *
52
+ * When `assigned: "me"` and no viewer id is supplied (a surface with no
53
+ * resolving user, e.g. an MCP resolve), the scope cannot be evaluated —
54
+ * `enabled` is false rather than silently widening to another scope.
55
+ */
56
+ export declare function resolveScopedQuery(query: EmbedQuery, ctx: ShowIfContext, viewerId: string | undefined): ScopedQueryParams;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveQueryFacets = resolveQueryFacets;
4
+ exports.resolveScopedQuery = resolveScopedQuery;
5
+ const x_lt_help_1 = require("./x-lt-help");
6
+ /** Interpolate `{{domain.path}}` tokens in every string value of the facets map. */
7
+ function resolveQueryFacets(facets, ctx) {
8
+ if (!facets)
9
+ return {};
10
+ const resolved = {};
11
+ for (const [k, v] of Object.entries(facets)) {
12
+ resolved[k] = typeof v === 'string' ? (0, x_lt_help_1.interpolateHelp)(v, ctx) : v;
13
+ }
14
+ return resolved;
15
+ }
16
+ /**
17
+ * Resolve an EmbedQuery into concrete escalation-query params — the ONE
18
+ * mapping every embed surface (escalation-list, x-lt-actions, x-lt-submit-guard)
19
+ * consumes, so the visible rows and any count derived from the same query can
20
+ * never disagree.
21
+ *
22
+ * Ownership scope translates into the faceted query language:
23
+ * - `assigned: "me"` → `assigned_to = viewer AND available = false` — the
24
+ * implied "claimed" status (pending + live claim window held by the viewer)
25
+ * - `assigned: "any"` → no ownership constraint
26
+ * - omitted → `available = true` (the unclaimed pool; a declared
27
+ * legacy `available` value is honored)
28
+ *
29
+ * When `assigned: "me"` and no viewer id is supplied (a surface with no
30
+ * resolving user, e.g. an MCP resolve), the scope cannot be evaluated —
31
+ * `enabled` is false rather than silently widening to another scope.
32
+ */
33
+ function resolveScopedQuery(query, ctx, viewerId) {
34
+ const facets = resolveQueryFacets(query.facets, ctx);
35
+ const base = {
36
+ role: query.role,
37
+ status: query.status ?? 'pending',
38
+ facets,
39
+ limit: query.limit,
40
+ enabled: !!(query.role || Object.keys(facets).length),
41
+ };
42
+ if (query.assigned === 'me') {
43
+ return { ...base, assigned_to: viewerId, available: false, enabled: base.enabled && !!viewerId };
44
+ }
45
+ if (query.assigned === 'any') {
46
+ return base;
47
+ }
48
+ return { ...base, available: query.available ?? true };
49
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * x-lt-submit-guard — a query precondition on the resolve. A form_schema may
3
+ * declare, at its root, that the escalation cannot be resolved while an embedded
4
+ * escalation query still returns rows: the parent references a set of children
5
+ * (commonly claimed by the same person) that must all be completed first, a
6
+ * to-do list that empties as children resolve.
7
+ *
8
+ * "x-lt-submit-guard": {
9
+ * "query": { "role": "print-harvest", "status": "pending",
10
+ * "assigned": "me",
11
+ * "facets": { "walkId": "{{metadata.walkId}}" } },
12
+ * "mustBeEmpty": true, // the only mode today; defaults true
13
+ * "message": "{{count}} plates still pending — bag them before closing.",
14
+ * "autoResolveWhenEmpty": true // auto-submit the parent once empty
15
+ * }
16
+ *
17
+ * The gate is isomorphic. The dashboard disables the submit while the query
18
+ * returns rows (UI honesty), and the API layer enforces the same precondition
19
+ * for `enforce_schema` roles so a raw-API resolve is rejected too. Only a
20
+ * confirmed empty result (a successful read with zero rows) clears the gate — a
21
+ * 403 or any error never does.
22
+ *
23
+ * `autoResolveWhenEmpty` closes the loop: the moment the query is confirmed
24
+ * empty, the claimed parent auto-submits — checked on page-load and after each
25
+ * inline child-resolve — so a set of escalations completes with no extra click.
26
+ */
27
+ import type { EmbedQuery } from './x-lt-query';
28
+ export declare const X_LT_SUBMIT_GUARD = "x-lt-submit-guard";
29
+ export interface SubmitGuardDef {
30
+ query: EmbedQuery;
31
+ /** The gate condition; defaults to true (the only supported mode today). */
32
+ mustBeEmpty?: boolean;
33
+ /** Shown beside the disabled submit. `{{count}}` and `{{domain.path}}` tokens interpolate. */
34
+ message?: string;
35
+ /** When true, auto-submit the claimed parent the moment the query is confirmed empty. */
36
+ autoResolveWhenEmpty?: boolean;
37
+ }
38
+ export declare const SUBMIT_GUARD_DEFAULT_MESSAGE = "{{count}} related items are still pending";
39
+ /** The schema's submit-guard, or undefined when it declares none. */
40
+ export declare function readSubmitGuard(schema: Record<string, unknown> | null | undefined): SubmitGuardDef | undefined;
41
+ /**
42
+ * Whether a guard blocks the resolve given the query's row count. `mustBeEmpty`
43
+ * defaults to true, so any matching row blocks. A pure decision — the caller
44
+ * supplies the count from a confirmed read (never an error/loading state).
45
+ */
46
+ export declare function guardBlocks(count: number, guard: SubmitGuardDef | undefined): boolean;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SUBMIT_GUARD_DEFAULT_MESSAGE = exports.X_LT_SUBMIT_GUARD = void 0;
4
+ exports.readSubmitGuard = readSubmitGuard;
5
+ exports.guardBlocks = guardBlocks;
6
+ exports.X_LT_SUBMIT_GUARD = 'x-lt-submit-guard';
7
+ exports.SUBMIT_GUARD_DEFAULT_MESSAGE = '{{count}} related items are still pending';
8
+ /** The schema's submit-guard, or undefined when it declares none. */
9
+ function readSubmitGuard(schema) {
10
+ const raw = schema?.[exports.X_LT_SUBMIT_GUARD];
11
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw))
12
+ return undefined;
13
+ const guard = raw;
14
+ if (!guard.query || typeof guard.query !== 'object')
15
+ return undefined;
16
+ return guard;
17
+ }
18
+ /**
19
+ * Whether a guard blocks the resolve given the query's row count. `mustBeEmpty`
20
+ * defaults to true, so any matching row blocks. A pure decision — the caller
21
+ * supplies the count from a confirmed read (never an error/loading state).
22
+ */
23
+ function guardBlocks(count, guard) {
24
+ return !!guard && guard.mustBeEmpty !== false && count > 0;
25
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * x-lt-submit-on-claim — a one-gesture claim. A form_schema may declare, at its
3
+ * schema root, that claiming one of its escalations should also resolve it in
4
+ * the same gesture, submitting whatever the form currently holds (its seeded
5
+ * defaults). The person clicks Claim once and the work item advances — no
6
+ * second Submit step.
7
+ *
8
+ * x-lt-submit-on-claim boolean — opt in to claim-and-submit
9
+ *
10
+ * It is opt-in and defaults off. Pair it with `x-lt-labels` to rename the Claim
11
+ * button ("Claim and Submit") so the single gesture reads honestly. When the
12
+ * seeded defaults fail validation the claim still lands; the page drops into the
13
+ * normal claimed state with the field errors surfaced, so the person finishes
14
+ * the form by hand.
15
+ */
16
+ export declare const X_LT_SUBMIT_ON_CLAIM = "x-lt-submit-on-claim";
17
+ /**
18
+ * Whether the schema opts into claim-and-submit. Truthy `x-lt-submit-on-claim`
19
+ * turns it on; anything else (absent, false) leaves the standard two-step claim
20
+ * then submit.
21
+ */
22
+ export declare function readSubmitOnClaim(schema: Record<string, unknown> | null | undefined): boolean;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ /**
3
+ * x-lt-submit-on-claim — a one-gesture claim. A form_schema may declare, at its
4
+ * schema root, that claiming one of its escalations should also resolve it in
5
+ * the same gesture, submitting whatever the form currently holds (its seeded
6
+ * defaults). The person clicks Claim once and the work item advances — no
7
+ * second Submit step.
8
+ *
9
+ * x-lt-submit-on-claim boolean — opt in to claim-and-submit
10
+ *
11
+ * It is opt-in and defaults off. Pair it with `x-lt-labels` to rename the Claim
12
+ * button ("Claim and Submit") so the single gesture reads honestly. When the
13
+ * seeded defaults fail validation the claim still lands; the page drops into the
14
+ * normal claimed state with the field errors surfaced, so the person finishes
15
+ * the form by hand.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.X_LT_SUBMIT_ON_CLAIM = void 0;
19
+ exports.readSubmitOnClaim = readSubmitOnClaim;
20
+ exports.X_LT_SUBMIT_ON_CLAIM = 'x-lt-submit-on-claim';
21
+ /**
22
+ * Whether the schema opts into claim-and-submit. Truthy `x-lt-submit-on-claim`
23
+ * turns it on; anything else (absent, false) leaves the standard two-step claim
24
+ * then submit.
25
+ */
26
+ function readSubmitOnClaim(schema) {
27
+ return !!schema?.[exports.X_LT_SUBMIT_ON_CLAIM];
28
+ }
@@ -259,6 +259,40 @@ function registerEscalationTools(server) {
259
259
  }
260
260
  return { content: [{ type: 'text', text: JSON.stringify(result.data) }] };
261
261
  });
262
+ // mirrors POST /api/escalations/aggregate-by-facets
263
+ server.registerTool('aggregate_by_facets', {
264
+ title: 'Aggregate by Facets',
265
+ description: 'Grouped analytics over the escalation intervals. Every escalation is one open ' +
266
+ 'interval [created_at, ended_at); this tool reads it two ways: membership (rows or, ' +
267
+ 'with distinctBy, distinct entities open at an instant — a past asOf reconstructs the ' +
268
+ 'live set then) and dwell (open-seconds per group within a half-open [from,to) window). ' +
269
+ 'Group by role/subtype/status columns plus metadata facet keys; optional states[] label ' +
270
+ 'each group. One call replaces N per-filter count round-trips. The filter takes the WHAT ' +
271
+ 'fields only — status/available/jeopardy are rejected (liveness derives from the measure).',
272
+ inputSchema: schemas_1.aggregateByFacetsSchema,
273
+ }, async (args) => {
274
+ const result = await escalationApi.aggregateByFacets(args, await systemAuth());
275
+ if (result.error) {
276
+ return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
277
+ }
278
+ return { content: [{ type: 'text', text: JSON.stringify(result.data) }] };
279
+ });
280
+ // mirrors POST /api/escalations/timeline-by-facet
281
+ server.registerTool('timeline_by_facet', {
282
+ title: 'Timeline by Facet',
283
+ description: 'One entity\'s ordered interval sequence — every escalation the entity facet ' +
284
+ '(e.g. a machine id) appeared in, as [startedAt, endedAt) spans with durations, in ' +
285
+ 'created_at order. Open intervals report endedAt: null. Gaps between consecutive ' +
286
+ 'intervals are untracked time and are preserved, not filled. The entity facet value ' +
287
+ 'must be stored as a JSON string (GIN containment match).',
288
+ inputSchema: schemas_1.timelineByFacetSchema,
289
+ }, async (args) => {
290
+ const result = await escalationApi.timelineByFacet(args, await systemAuth());
291
+ if (result.error) {
292
+ return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
293
+ }
294
+ return { content: [{ type: 'text', text: JSON.stringify(result.data) }] };
295
+ });
262
296
  // mirrors POST /api/escalations/claim-groups
263
297
  server.registerTool('claim_groups', {
264
298
  title: 'Claim Groups',
@@ -56,7 +56,23 @@ function registerScanCodeTools(server) {
56
56
  'no_match_fallback, unconfigured, invalid_code, forbidden, conflict).',
57
57
  inputSchema: schemas_1.executeScanCodeSchema,
58
58
  }, async (args) => {
59
- const result = await scanCodesApi.executeScanCode({ code: args.code }, await systemAuth());
59
+ const result = await scanCodesApi.executeScanCode({
60
+ code: args.code,
61
+ actingToken: args.actingToken,
62
+ previousActingToken: args.previousActingToken,
63
+ }, await systemAuth());
64
+ return asText(result.data ?? { error: result.error });
65
+ });
66
+ // mirrors POST /api/scan-codes/execute-choice
67
+ server.registerTool('execute_scan_choice', {
68
+ title: 'Execute Scan Choice',
69
+ description: 'Execute one choice presented by a PRESENT step (the info-choice screen). ' +
70
+ 'The pointer (scheme/category/step/choice + escalationId) is re-validated ' +
71
+ 'against live config, the row\'s current state, the acting-identity gate, ' +
72
+ 'and RBAC before the verb runs.',
73
+ inputSchema: schemas_1.executeScanChoiceSchema,
74
+ }, async (args) => {
75
+ const result = await scanCodesApi.executeScanChoice(args, await systemAuth());
60
76
  return asText(result.data ?? { error: result.error });
61
77
  });
62
78
  // mirrors GET /api/scan-codes/schemes