@hotmeshio/long-tail 0.22.0 → 0.22.2

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 (356) hide show
  1. package/build/api/escalations/accumulate.d.ts +10 -1
  2. package/build/api/escalations/accumulate.js +121 -34
  3. package/build/api/escalations/metadata.d.ts +5 -0
  4. package/build/api/escalations/metadata.js +6 -2
  5. package/build/api/escalations/resolve-batch.js +18 -11
  6. package/build/api/roles.js +4 -0
  7. package/build/api/scan-codes/badge-policy.d.ts +10 -0
  8. package/build/api/scan-codes/badge-policy.js +72 -0
  9. package/build/api/scan-codes/choice.js +18 -11
  10. package/build/api/scan-codes/context.d.ts +45 -1
  11. package/build/api/scan-codes/context.js +51 -3
  12. package/build/api/scan-codes/execute.js +73 -35
  13. package/build/api/scan-codes/grant.d.ts +27 -0
  14. package/build/api/scan-codes/grant.js +67 -0
  15. package/build/api/scan-codes/hold.d.ts +10 -0
  16. package/build/api/scan-codes/hold.js +98 -0
  17. package/build/api/scan-codes/identity.d.ts +5 -2
  18. package/build/api/scan-codes/identity.js +26 -8
  19. package/build/api/scan-codes/subject.d.ts +15 -0
  20. package/build/api/scan-codes/subject.js +68 -0
  21. package/build/api/scan-codes/verb-accumulate.d.ts +24 -0
  22. package/build/api/scan-codes/verb-accumulate.js +147 -0
  23. package/build/api/scan-codes/verb-fill.d.ts +6 -0
  24. package/build/api/scan-codes/verb-fill.js +152 -0
  25. package/build/api/scan-codes/verbs-subject.d.ts +14 -0
  26. package/build/api/scan-codes/verbs-subject.js +270 -0
  27. package/build/api/scan-codes/verbs.d.ts +7 -22
  28. package/build/api/scan-codes/verbs.js +35 -114
  29. package/build/api/workflows/invocation.d.ts +8 -4
  30. package/build/api/workflows/invocation.js +26 -9
  31. package/build/index.d.ts +1 -0
  32. package/build/index.js +8 -2
  33. package/build/lib/cli/commands/workflows.js +9 -4
  34. package/build/lib/db/schemas/037_scan_gtin_and_subject_grants.sql +27 -0
  35. package/build/routes/escalations/accumulate.js +13 -6
  36. package/build/routes/escalations/acting.d.ts +5 -0
  37. package/build/routes/escalations/acting.js +8 -1
  38. package/build/routes/scan-codes.js +3 -0
  39. package/build/sdk/index.d.ts +3 -0
  40. package/build/services/escalation/crud.d.ts +2 -2
  41. package/build/services/escalation/crud.js +4 -2
  42. package/build/services/escalation/facet-sql.js +8 -0
  43. package/build/services/escalation/sql.d.ts +4 -2
  44. package/build/services/escalation/sql.js +10 -2
  45. package/build/services/export/index.d.ts +8 -3
  46. package/build/services/export/index.js +15 -21
  47. package/build/services/iam/acting-identity.d.ts +29 -4
  48. package/build/services/iam/acting-identity.js +60 -17
  49. package/build/services/iam/ephemeral.d.ts +21 -0
  50. package/build/services/iam/ephemeral.js +32 -1
  51. package/build/services/iam/sql.d.ts +10 -0
  52. package/build/services/iam/sql.js +32 -3
  53. package/build/services/pipelines/events.js +2 -1
  54. package/build/services/pipelines/execution-builder.js +2 -1
  55. package/build/services/pipelines/queries.js +2 -1
  56. package/build/services/role/badge-grant.d.ts +5 -0
  57. package/build/services/role/badge-grant.js +36 -0
  58. package/build/services/role/seed.js +5 -0
  59. package/build/services/role/types.d.ts +14 -0
  60. package/build/services/role/types.js +5 -0
  61. package/build/services/scan-code/index.d.ts +3 -2
  62. package/build/services/scan-code/index.js +7 -1
  63. package/build/services/scan-code/parse.d.ts +23 -20
  64. package/build/services/scan-code/parse.js +45 -90
  65. package/build/services/scan-code/read.js +1 -0
  66. package/build/services/scan-code/sql.d.ts +3 -3
  67. package/build/services/scan-code/sql.js +11 -8
  68. package/build/services/scan-code/validate-subject.d.ts +7 -0
  69. package/build/services/scan-code/validate-subject.js +158 -0
  70. package/build/services/scan-code/validate.d.ts +7 -0
  71. package/build/services/scan-code/validate.js +111 -16
  72. package/build/services/scan-code/write.d.ts +1 -0
  73. package/build/services/scan-code/write.js +9 -3
  74. package/build/services/workflow-state.d.ts +21 -0
  75. package/build/services/workflow-state.js +39 -0
  76. package/build/shared/form-validation/field-validator.js +4 -0
  77. package/build/shared/form-validation/index.d.ts +1 -0
  78. package/build/shared/form-validation/index.js +1 -0
  79. package/build/shared/form-validation/x-lt-scan.d.ts +52 -0
  80. package/build/shared/form-validation/x-lt-scan.js +166 -0
  81. package/build/shared/scan-code/gtin.d.ts +5 -0
  82. package/build/shared/scan-code/gtin.js +25 -0
  83. package/build/shared/scan-code/index.d.ts +2 -0
  84. package/build/shared/scan-code/index.js +10 -0
  85. package/build/shared/scan-code/parse.d.ts +46 -0
  86. package/build/shared/scan-code/parse.js +133 -0
  87. package/build/shared/workflow-state.d.ts +17 -0
  88. package/build/shared/workflow-state.js +29 -0
  89. package/build/system/mcp-servers/admin/escalations.js +8 -4
  90. package/build/system/mcp-servers/admin/scan-codes.js +10 -4
  91. package/build/system/mcp-servers/admin/schemas.d.ts +792 -23
  92. package/build/system/mcp-servers/admin/schemas.js +61 -4
  93. package/build/system/mcp-servers/admin/workflows.js +20 -31
  94. package/build/system/mcp-servers/human-queue-schemas.d.ts +6 -6
  95. package/build/system/seed/tool-manifests-admin.d.ts +94 -0
  96. package/build/system/seed/tool-manifests-admin.js +3 -3
  97. package/build/tsconfig.tsbuildinfo +1 -1
  98. package/build/types/escalation.d.ts +2 -0
  99. package/build/types/escalation.js +3 -1
  100. package/build/types/facets.d.ts +14 -0
  101. package/build/types/index.d.ts +3 -3
  102. package/build/types/index.js +8 -1
  103. package/build/types/scan-code/constants.d.ts +182 -0
  104. package/build/types/{scan-code.js → scan-code/constants.js} +62 -12
  105. package/build/types/scan-code/index.d.ts +3 -0
  106. package/build/types/scan-code/index.js +17 -0
  107. package/build/types/scan-code/response.d.ts +140 -0
  108. package/build/types/scan-code/response.js +2 -0
  109. package/build/types/scan-code/rule.d.ts +199 -0
  110. package/build/types/scan-code/rule.js +2 -0
  111. package/build/types/startup.d.ts +3 -1
  112. package/dashboard/dist/assets/{AdminDashboard-Covdam48.js → AdminDashboard-DBW12qQt.js} +2 -2
  113. package/dashboard/dist/assets/{AdminDashboard-Covdam48.js.map → AdminDashboard-DBW12qQt.js.map} +1 -1
  114. package/dashboard/dist/assets/{AgentConfigPage-CE1k6J5r.js → AgentConfigPage-CmHv8U9M.js} +2 -2
  115. package/dashboard/dist/assets/{AgentConfigPage-CE1k6J5r.js.map → AgentConfigPage-CmHv8U9M.js.map} +1 -1
  116. package/dashboard/dist/assets/{AgentDetailPage-CWJZIZP1.js → AgentDetailPage-D1scIbz-.js} +3 -3
  117. package/dashboard/dist/assets/{AgentDetailPage-CWJZIZP1.js.map → AgentDetailPage-D1scIbz-.js.map} +1 -1
  118. package/dashboard/dist/assets/{AgentsPage---Dg5ufF.js → AgentsPage-BA_ai9HJ.js} +2 -2
  119. package/dashboard/dist/assets/{AgentsPage---Dg5ufF.js.map → AgentsPage-BA_ai9HJ.js.map} +1 -1
  120. package/dashboard/dist/assets/AvailableEscalationsPage-C2_5aEFW.js +2 -0
  121. package/dashboard/dist/assets/AvailableEscalationsPage-C2_5aEFW.js.map +1 -0
  122. package/dashboard/dist/assets/{BotPicker-D3drO3-T.js → BotPicker-BZo4Kp4a.js} +2 -2
  123. package/dashboard/dist/assets/{BotPicker-D3drO3-T.js.map → BotPicker-BZo4Kp4a.js.map} +1 -1
  124. package/dashboard/dist/assets/{BulkAssignModal-BOAWsViq.js → BulkAssignModal-BFhyxY2T.js} +2 -2
  125. package/dashboard/dist/assets/{BulkAssignModal-BOAWsViq.js.map → BulkAssignModal-BFhyxY2T.js.map} +1 -1
  126. package/dashboard/dist/assets/CapabilitiesPage-CvOX6vAc.js +2 -0
  127. package/dashboard/dist/assets/{CapabilitiesPage-RGgD3YZO.js.map → CapabilitiesPage-CvOX6vAc.js.map} +1 -1
  128. package/dashboard/dist/assets/{CollapsibleSection-DNkZn87n.js → CollapsibleSection-GCJsV9Oq.js} +2 -2
  129. package/dashboard/dist/assets/{CollapsibleSection-DNkZn87n.js.map → CollapsibleSection-GCJsV9Oq.js.map} +1 -1
  130. package/dashboard/dist/assets/{ConfirmDeleteModal-BqzOwhPr.js → ConfirmDeleteModal-CAgYLcef.js} +2 -2
  131. package/dashboard/dist/assets/{ConfirmDeleteModal-BqzOwhPr.js.map → ConfirmDeleteModal-CAgYLcef.js.map} +1 -1
  132. package/dashboard/dist/assets/CountdownTimer-Dik2z0M_.js +2 -0
  133. package/dashboard/dist/assets/{CountdownTimer-BaexQMK6.js.map → CountdownTimer-Dik2z0M_.js.map} +1 -1
  134. package/dashboard/dist/assets/{CredentialsPage-D7abp0aS.js → CredentialsPage-twd2xCOW.js} +2 -2
  135. package/dashboard/dist/assets/{CredentialsPage-D7abp0aS.js.map → CredentialsPage-twd2xCOW.js.map} +1 -1
  136. package/dashboard/dist/assets/{CronLabel-DZiWmTwJ.js → CronLabel-DdnIuudX.js} +2 -2
  137. package/dashboard/dist/assets/{CronLabel-DZiWmTwJ.js.map → CronLabel-DdnIuudX.js.map} +1 -1
  138. package/dashboard/dist/assets/{DropZone-f1o-GLM8.js → DropZone-B1Tdfddc.js} +2 -2
  139. package/dashboard/dist/assets/{DropZone-f1o-GLM8.js.map → DropZone-B1Tdfddc.js.map} +1 -1
  140. package/dashboard/dist/assets/{ElapsedCell-BdGO_w4v.js → ElapsedCell-DCctVv5R.js} +2 -2
  141. package/dashboard/dist/assets/{ElapsedCell-BdGO_w4v.js.map → ElapsedCell-DCctVv5R.js.map} +1 -1
  142. package/dashboard/dist/assets/{EntityTimelinePanel-DIDcF5Yu.js → EntityTimelinePanel-CMnskyWv.js} +2 -2
  143. package/dashboard/dist/assets/{EntityTimelinePanel-DIDcF5Yu.js.map → EntityTimelinePanel-CMnskyWv.js.map} +1 -1
  144. package/dashboard/dist/assets/{EscalationListSchemaPage-C28rn9XC.js → EscalationListSchemaPage-VfCn6WDb.js} +3 -3
  145. package/dashboard/dist/assets/{EscalationListSchemaPage-C28rn9XC.js.map → EscalationListSchemaPage-VfCn6WDb.js.map} +1 -1
  146. package/dashboard/dist/assets/{EscalationListView-CkBnkpDJ.js → EscalationListView-CGQZxcC-.js} +2 -2
  147. package/dashboard/dist/assets/{EscalationListView-CkBnkpDJ.js.map → EscalationListView-CGQZxcC-.js.map} +1 -1
  148. package/dashboard/dist/assets/EscalationSchemaPage-BX0tx-PM.js +9 -0
  149. package/dashboard/dist/assets/EscalationSchemaPage-BX0tx-PM.js.map +1 -0
  150. package/dashboard/dist/assets/EscalationTimeline-DKoSM56J.js +2 -0
  151. package/dashboard/dist/assets/EscalationTimeline-DKoSM56J.js.map +1 -0
  152. package/dashboard/dist/assets/{EscalationTitleSelect-CzKfavri.js → EscalationTitleSelect-DWGLBOmS.js} +2 -2
  153. package/dashboard/dist/assets/{EscalationTitleSelect-CzKfavri.js.map → EscalationTitleSelect-DWGLBOmS.js.map} +1 -1
  154. package/dashboard/dist/assets/{EscalationsOverview-Tdu3Yx2c.js → EscalationsOverview-C2XoguaA.js} +2 -2
  155. package/dashboard/dist/assets/{EscalationsOverview-Tdu3Yx2c.js.map → EscalationsOverview-C2XoguaA.js.map} +1 -1
  156. package/dashboard/dist/assets/{EventTable-DiIxOJwO.js → EventTable-CBUWq7--.js} +2 -2
  157. package/dashboard/dist/assets/{EventTable-DiIxOJwO.js.map → EventTable-CBUWq7--.js.map} +1 -1
  158. package/dashboard/dist/assets/{FilterBar-CvMBCVIo.js → FilterBar-8IdbleZ9.js} +2 -2
  159. package/dashboard/dist/assets/{FilterBar-CvMBCVIo.js.map → FilterBar-8IdbleZ9.js.map} +1 -1
  160. package/dashboard/dist/assets/GrantScopeField-BzWGzBfA.js +2 -0
  161. package/dashboard/dist/assets/GrantScopeField-BzWGzBfA.js.map +1 -0
  162. package/dashboard/dist/assets/{GraphInvokePage-DO-yyhi6.js → GraphInvokePage-CUvoPzsW.js} +2 -2
  163. package/dashboard/dist/assets/{GraphInvokePage-DO-yyhi6.js.map → GraphInvokePage-CUvoPzsW.js.map} +1 -1
  164. package/dashboard/dist/assets/{HomePage-DSS3eHR2.js → HomePage-BP7v9GLJ.js} +2 -2
  165. package/dashboard/dist/assets/{HomePage-DSS3eHR2.js.map → HomePage-BP7v9GLJ.js.map} +1 -1
  166. package/dashboard/dist/assets/{ListToolbar-C3-Tqqub.js → ListToolbar-Cnacuwoy.js} +2 -2
  167. package/dashboard/dist/assets/{ListToolbar-C3-Tqqub.js.map → ListToolbar-Cnacuwoy.js.map} +1 -1
  168. package/dashboard/dist/assets/{McpOverview-DEJmsdVi.js → McpOverview-C2JoNoDA.js} +2 -2
  169. package/dashboard/dist/assets/{McpOverview-DEJmsdVi.js.map → McpOverview-C2JoNoDA.js.map} +1 -1
  170. package/dashboard/dist/assets/McpQueryDetailPage-C_nih0w-.js +5 -0
  171. package/dashboard/dist/assets/McpQueryDetailPage-C_nih0w-.js.map +1 -0
  172. package/dashboard/dist/assets/{McpQueryPage-BBcG_UuU.js → McpQueryPage-U_wNXow2.js} +2 -2
  173. package/dashboard/dist/assets/{McpQueryPage-BBcG_UuU.js.map → McpQueryPage-U_wNXow2.js.map} +1 -1
  174. package/dashboard/dist/assets/{McpRunDetailPage-C6xw0kBg.js → McpRunDetailPage-DtKoJq6J.js} +2 -2
  175. package/dashboard/dist/assets/{McpRunDetailPage-C6xw0kBg.js.map → McpRunDetailPage-DtKoJq6J.js.map} +1 -1
  176. package/dashboard/dist/assets/{McpRunsPage-CRQqrF4Q.js → McpRunsPage-CnYtfGhf.js} +2 -2
  177. package/dashboard/dist/assets/{McpRunsPage-CRQqrF4Q.js.map → McpRunsPage-CnYtfGhf.js.map} +1 -1
  178. package/dashboard/dist/assets/{NamespacePill-DADRJOUl.js → NamespacePill-DwM5pNA4.js} +2 -2
  179. package/dashboard/dist/assets/{NamespacePill-DADRJOUl.js.map → NamespacePill-DwM5pNA4.js.map} +1 -1
  180. package/dashboard/dist/assets/{OperationsPage-Dlfwzf-0.js → OperationsPage-C7hupIer.js} +2 -2
  181. package/dashboard/dist/assets/{OperationsPage-Dlfwzf-0.js.map → OperationsPage-C7hupIer.js.map} +1 -1
  182. package/dashboard/dist/assets/{OperatorDashboard-DoiDGZ9R.js → OperatorDashboard-fVuLn2D5.js} +2 -2
  183. package/dashboard/dist/assets/{OperatorDashboard-DoiDGZ9R.js.map → OperatorDashboard-fVuLn2D5.js.map} +1 -1
  184. package/dashboard/dist/assets/{PageHeader-Csq434-v.js → PageHeader-CMd3f4bz.js} +2 -2
  185. package/dashboard/dist/assets/{PageHeader-Csq434-v.js.map → PageHeader-CMd3f4bz.js.map} +1 -1
  186. package/dashboard/dist/assets/{PageHeaderWithStats-CSnk1p5A.js → PageHeaderWithStats-DHj8Mqox.js} +2 -2
  187. package/dashboard/dist/assets/{PageHeaderWithStats-CSnk1p5A.js.map → PageHeaderWithStats-DHj8Mqox.js.map} +1 -1
  188. package/dashboard/dist/assets/{PersonaDetailPage-BzbA4Prr.js → PersonaDetailPage-C-4o8lPw.js} +2 -2
  189. package/dashboard/dist/assets/{PersonaDetailPage-BzbA4Prr.js.map → PersonaDetailPage-C-4o8lPw.js.map} +1 -1
  190. package/dashboard/dist/assets/{PersonasPage-B36yn4hU.js → PersonasPage-BL1FwLmv.js} +2 -2
  191. package/dashboard/dist/assets/{PersonasPage-B36yn4hU.js.map → PersonasPage-BL1FwLmv.js.map} +1 -1
  192. package/dashboard/dist/assets/{PortalPage-BkD4YfDf.js → PortalPage-tJG5sgb1.js} +2 -2
  193. package/dashboard/dist/assets/{PortalPage-BkD4YfDf.js.map → PortalPage-tJG5sgb1.js.map} +1 -1
  194. package/dashboard/dist/assets/{ProcessDetailPage-BT0eiBWY.js → ProcessDetailPage-Dz_jY4Yt.js} +2 -2
  195. package/dashboard/dist/assets/{ProcessDetailPage-BT0eiBWY.js.map → ProcessDetailPage-Dz_jY4Yt.js.map} +1 -1
  196. package/dashboard/dist/assets/{ProcessesListPage-BEqeeNae.js → ProcessesListPage-Cbn9cter.js} +2 -2
  197. package/dashboard/dist/assets/{ProcessesListPage-BEqeeNae.js.map → ProcessesListPage-Cbn9cter.js.map} +1 -1
  198. package/dashboard/dist/assets/ResolverForm-Bk8iXQ6-.js +8 -0
  199. package/dashboard/dist/assets/ResolverForm-Bk8iXQ6-.js.map +1 -0
  200. package/dashboard/dist/assets/RoleDetailPage-owPi6gI9.js +8 -0
  201. package/dashboard/dist/assets/RoleDetailPage-owPi6gI9.js.map +1 -0
  202. package/dashboard/dist/assets/{RolePill-BafrASDX.js → RolePill-Di2CAHuD.js} +2 -2
  203. package/dashboard/dist/assets/{RolePill-BafrASDX.js.map → RolePill-Di2CAHuD.js.map} +1 -1
  204. package/dashboard/dist/assets/{RolesPage-80quJU5-.js → RolesPage-NwmMvZFa.js} +2 -2
  205. package/dashboard/dist/assets/{RolesPage-80quJU5-.js.map → RolesPage-NwmMvZFa.js.map} +1 -1
  206. package/dashboard/dist/assets/{RunAsSelector-BoePhWVD.js → RunAsSelector-tgEooTyU.js} +2 -2
  207. package/dashboard/dist/assets/{RunAsSelector-BoePhWVD.js.map → RunAsSelector-tgEooTyU.js.map} +1 -1
  208. package/dashboard/dist/assets/ScanCodesPage-CUv_8ic6.js +2 -0
  209. package/dashboard/dist/assets/ScanCodesPage-CUv_8ic6.js.map +1 -0
  210. package/dashboard/dist/assets/ScanSchemeDetailPage-YHqbu7oK.js +2 -0
  211. package/dashboard/dist/assets/ScanSchemeDetailPage-YHqbu7oK.js.map +1 -0
  212. package/dashboard/dist/assets/ScanStationPage-B275l6r_.js +2 -0
  213. package/dashboard/dist/assets/ScanStationPage-B275l6r_.js.map +1 -0
  214. package/dashboard/dist/assets/{ScopeBadge-b6MIBiYD.js → ScopeBadge-CSItPVOH.js} +2 -2
  215. package/dashboard/dist/assets/{ScopeBadge-b6MIBiYD.js.map → ScopeBadge-CSItPVOH.js.map} +1 -1
  216. package/dashboard/dist/assets/{StickyPagination-9ITrei_d.js → StickyPagination-CsTI_gvJ.js} +2 -2
  217. package/dashboard/dist/assets/{StickyPagination-9ITrei_d.js.map → StickyPagination-CsTI_gvJ.js.map} +1 -1
  218. package/dashboard/dist/assets/{StreamMessageDetail-BkYvEHFY.js → StreamMessageDetail-auRlvjTh.js} +2 -2
  219. package/dashboard/dist/assets/{StreamMessageDetail-BkYvEHFY.js.map → StreamMessageDetail-auRlvjTh.js.map} +1 -1
  220. package/dashboard/dist/assets/{SwimlaneTimeline-B1rotFix.js → SwimlaneTimeline-BLoVHYAd.js} +2 -2
  221. package/dashboard/dist/assets/{SwimlaneTimeline-B1rotFix.js.map → SwimlaneTimeline-BLoVHYAd.js.map} +1 -1
  222. package/dashboard/dist/assets/{TagInput-ZrIIrEUP.js → TagInput-CAgdLN_b.js} +2 -2
  223. package/dashboard/dist/assets/{TagInput-ZrIIrEUP.js.map → TagInput-CAgdLN_b.js.map} +1 -1
  224. package/dashboard/dist/assets/{TaskDetailPage-zhn_U_eC.js → TaskDetailPage-BPsZ1bK_.js} +2 -2
  225. package/dashboard/dist/assets/{TaskDetailPage-zhn_U_eC.js.map → TaskDetailPage-BPsZ1bK_.js.map} +1 -1
  226. package/dashboard/dist/assets/{TaskQueuePill-DkQ1uc6y.js → TaskQueuePill-h0oorVMe.js} +2 -2
  227. package/dashboard/dist/assets/{TaskQueuePill-DkQ1uc6y.js.map → TaskQueuePill-h0oorVMe.js.map} +1 -1
  228. package/dashboard/dist/assets/{TasksListPage-CNbNeagx.js → TasksListPage-BNGM74yT.js} +2 -2
  229. package/dashboard/dist/assets/{TasksListPage-CNbNeagx.js.map → TasksListPage-BNGM74yT.js.map} +1 -1
  230. package/dashboard/dist/assets/{TimeAgo-0YVMBwls.js → TimeAgo-BnAHXGK7.js} +2 -2
  231. package/dashboard/dist/assets/{TimeAgo-0YVMBwls.js.map → TimeAgo-BnAHXGK7.js.map} +1 -1
  232. package/dashboard/dist/assets/{TimestampCell-DB7r3np8.js → TimestampCell-J4yae6mc.js} +2 -2
  233. package/dashboard/dist/assets/{TimestampCell-DB7r3np8.js.map → TimestampCell-J4yae6mc.js.map} +1 -1
  234. package/dashboard/dist/assets/{ToolPill-Baxm02L6.js → ToolPill-CQCsVdzD.js} +2 -2
  235. package/dashboard/dist/assets/{ToolPill-Baxm02L6.js.map → ToolPill-CQCsVdzD.js.map} +1 -1
  236. package/dashboard/dist/assets/{ToolTestPanel-BLfA02wv.js → ToolTestPanel-BdzzgXDu.js} +2 -2
  237. package/dashboard/dist/assets/{ToolTestPanel-BLfA02wv.js.map → ToolTestPanel-BdzzgXDu.js.map} +1 -1
  238. package/dashboard/dist/assets/{TopicDetailPage-eAqPKShq.js → TopicDetailPage-DJKg8lb7.js} +4 -4
  239. package/dashboard/dist/assets/{TopicDetailPage-eAqPKShq.js.map → TopicDetailPage-DJKg8lb7.js.map} +1 -1
  240. package/dashboard/dist/assets/{TopicsPage-BNNWD-zl.js → TopicsPage-DQV0WxG6.js} +2 -2
  241. package/dashboard/dist/assets/{TopicsPage-BNNWD-zl.js.map → TopicsPage-DQV0WxG6.js.map} +1 -1
  242. package/dashboard/dist/assets/{UserName-Pw46tO_k.js → UserName-Ct09nGh5.js} +2 -2
  243. package/dashboard/dist/assets/{UserName-Pw46tO_k.js.map → UserName-Ct09nGh5.js.map} +1 -1
  244. package/dashboard/dist/assets/{WorkflowExecutionPage-DvA51lT3.js → WorkflowExecutionPage-B5WJOsee.js} +2 -2
  245. package/dashboard/dist/assets/{WorkflowExecutionPage-DvA51lT3.js.map → WorkflowExecutionPage-B5WJOsee.js.map} +1 -1
  246. package/dashboard/dist/assets/{WorkflowPill-ZepbO_ny.js → WorkflowPill-Dg7BDTyM.js} +2 -2
  247. package/dashboard/dist/assets/{WorkflowPill-ZepbO_ny.js.map → WorkflowPill-Dg7BDTyM.js.map} +1 -1
  248. package/dashboard/dist/assets/{WorkflowsDashboard-DFDTwnhn.js → WorkflowsDashboard-Hc87TRgD.js} +2 -2
  249. package/dashboard/dist/assets/{WorkflowsDashboard-DFDTwnhn.js.map → WorkflowsDashboard-Hc87TRgD.js.map} +1 -1
  250. package/dashboard/dist/assets/{WorkflowsOverview-5i2Tcy-p.js → WorkflowsOverview-CJQbyOj-.js} +2 -2
  251. package/dashboard/dist/assets/{WorkflowsOverview-5i2Tcy-p.js.map → WorkflowsOverview-CJQbyOj-.js.map} +1 -1
  252. package/dashboard/dist/assets/{YamlWorkflowDetailPage-p4VEYZS0.js → YamlWorkflowDetailPage-BMeED677.js} +8 -8
  253. package/dashboard/dist/assets/{YamlWorkflowDetailPage-p4VEYZS0.js.map → YamlWorkflowDetailPage-BMeED677.js.map} +1 -1
  254. package/dashboard/dist/assets/{YamlWorkflowsPage-Cq-hMVxl.js → YamlWorkflowsPage-BMMg0Id6.js} +2 -2
  255. package/dashboard/dist/assets/{YamlWorkflowsPage-Cq-hMVxl.js.map → YamlWorkflowsPage-BMMg0Id6.js.map} +1 -1
  256. package/dashboard/dist/assets/{agents-EyBPJMYa.js → agents-CdFkgFvg.js} +2 -2
  257. package/dashboard/dist/assets/{agents-EyBPJMYa.js.map → agents-CdFkgFvg.js.map} +1 -1
  258. package/dashboard/dist/assets/{bots-DX6jjqtF.js → bots-Mj3LHWWg.js} +2 -2
  259. package/dashboard/dist/assets/{bots-DX6jjqtF.js.map → bots-Mj3LHWWg.js.map} +1 -1
  260. package/dashboard/dist/assets/{capabilities-ZdLv9xBQ.js → capabilities-Dw1ObK2-.js} +2 -2
  261. package/dashboard/dist/assets/{capabilities-ZdLv9xBQ.js.map → capabilities-Dw1ObK2-.js.map} +1 -1
  262. package/dashboard/dist/assets/{controlplane-CpvZaJuw.js → controlplane-DcNE1APv.js} +2 -2
  263. package/dashboard/dist/assets/{controlplane-CpvZaJuw.js.map → controlplane-DcNE1APv.js.map} +1 -1
  264. package/dashboard/dist/assets/{escalation-columns-Mvsze5eV.js → escalation-columns-D364Trpy.js} +2 -2
  265. package/dashboard/dist/assets/{escalation-columns-Mvsze5eV.js.map → escalation-columns-D364Trpy.js.map} +1 -1
  266. package/dashboard/dist/assets/{index-Cn8uJsd7.js → index-B3veJ698.js} +2 -2
  267. package/dashboard/dist/assets/{index-Cn8uJsd7.js.map → index-B3veJ698.js.map} +1 -1
  268. package/dashboard/dist/assets/index-BQeHJHYN.js +67 -0
  269. package/dashboard/dist/assets/index-BQeHJHYN.js.map +1 -0
  270. package/dashboard/dist/assets/{index-D-Xs4rAW.js → index-BRGTmoYY.js} +2 -2
  271. package/dashboard/dist/assets/{index-D-Xs4rAW.js.map → index-BRGTmoYY.js.map} +1 -1
  272. package/dashboard/dist/assets/{index-DkrBFFSO.js → index-Bd6-KmBE.js} +3 -3
  273. package/dashboard/dist/assets/{index-DkrBFFSO.js.map → index-Bd6-KmBE.js.map} +1 -1
  274. package/dashboard/dist/assets/{index-Bhb89oHH.js → index-BiVce3n0.js} +2 -2
  275. package/dashboard/dist/assets/{index-Bhb89oHH.js.map → index-BiVce3n0.js.map} +1 -1
  276. package/dashboard/dist/assets/{index-z5Hpeidu.js → index-BmNAVd4s.js} +2 -2
  277. package/dashboard/dist/assets/{index-z5Hpeidu.js.map → index-BmNAVd4s.js.map} +1 -1
  278. package/dashboard/dist/assets/{index-BbCjGO3M.js → index-Bq5XNEzD.js} +2 -2
  279. package/dashboard/dist/assets/{index-BbCjGO3M.js.map → index-Bq5XNEzD.js.map} +1 -1
  280. package/dashboard/dist/assets/{index-DGmzBY9D.js → index-DPStdq4T.js} +2 -2
  281. package/dashboard/dist/assets/{index-DGmzBY9D.js.map → index-DPStdq4T.js.map} +1 -1
  282. package/dashboard/dist/assets/index-DcppjzP5.css +1 -0
  283. package/dashboard/dist/assets/{index-PfSRKerc.js → index-DkcI4V_H.js} +2 -2
  284. package/dashboard/dist/assets/{index-PfSRKerc.js.map → index-DkcI4V_H.js.map} +1 -1
  285. package/dashboard/dist/assets/{index-oFKUFGQL.js → index-Dyotfa_k.js} +2 -2
  286. package/dashboard/dist/assets/{index-oFKUFGQL.js.map → index-Dyotfa_k.js.map} +1 -1
  287. package/dashboard/dist/assets/{index-Eo-l3Lqo.js → index-MDD4JYtu.js} +2 -2
  288. package/dashboard/dist/assets/{index-Eo-l3Lqo.js.map → index-MDD4JYtu.js.map} +1 -1
  289. package/dashboard/dist/assets/index-WSm8bgE7.js +3 -0
  290. package/dashboard/dist/assets/index-WSm8bgE7.js.map +1 -0
  291. package/dashboard/dist/assets/{index-DZhtP2Ok.js → index-eDm6cz0F.js} +2 -2
  292. package/dashboard/dist/assets/{index-DZhtP2Ok.js.map → index-eDm6cz0F.js.map} +1 -1
  293. package/dashboard/dist/assets/{knowledge-CgloEkaf.js → knowledge-Bafewjxk.js} +2 -2
  294. package/dashboard/dist/assets/{knowledge-CgloEkaf.js.map → knowledge-Bafewjxk.js.map} +1 -1
  295. package/dashboard/dist/assets/{mcp-query-o-sGX2ST.js → mcp-query-BzTtIG90.js} +2 -2
  296. package/dashboard/dist/assets/{mcp-query-o-sGX2ST.js.map → mcp-query-BzTtIG90.js.map} +1 -1
  297. package/dashboard/dist/assets/{mcp-Bix7QYO7.js → mcp-vLIutbnc.js} +2 -2
  298. package/dashboard/dist/assets/{mcp-Bix7QYO7.js.map → mcp-vLIutbnc.js.map} +1 -1
  299. package/dashboard/dist/assets/{personas-30azkJ_s.js → personas-WD40EDS_.js} +2 -2
  300. package/dashboard/dist/assets/{personas-30azkJ_s.js.map → personas-WD40EDS_.js.map} +1 -1
  301. package/dashboard/dist/assets/{pipelines-Bfk2GFK7.js → pipelines-DFwULWs3.js} +2 -2
  302. package/dashboard/dist/assets/{pipelines-Bfk2GFK7.js.map → pipelines-DFwULWs3.js.map} +1 -1
  303. package/dashboard/dist/assets/{tasks-CpdopewW.js → tasks-La_-WAUn.js} +2 -2
  304. package/dashboard/dist/assets/{tasks-CpdopewW.js.map → tasks-La_-WAUn.js.map} +1 -1
  305. package/dashboard/dist/assets/{topics--bvCV9Yp.js → topics-CzYMlvqm.js} +2 -2
  306. package/dashboard/dist/assets/{topics--bvCV9Yp.js.map → topics-CzYMlvqm.js.map} +1 -1
  307. package/dashboard/dist/assets/{useDebouncedValue-Da0lPmj3.js → useDebouncedValue-C0FQyANW.js} +2 -2
  308. package/dashboard/dist/assets/{useDebouncedValue-Da0lPmj3.js.map → useDebouncedValue-C0FQyANW.js.map} +1 -1
  309. package/dashboard/dist/assets/{useNamespace-DD_Esl6n.js → useNamespace-WW_XjAb3.js} +2 -2
  310. package/dashboard/dist/assets/{useNamespace-DD_Esl6n.js.map → useNamespace-WW_XjAb3.js.map} +1 -1
  311. package/dashboard/dist/assets/{useYamlActivityEvents-AeAhZJJk.js → useYamlActivityEvents-B3YxPeFt.js} +2 -2
  312. package/dashboard/dist/assets/{useYamlActivityEvents-AeAhZJJk.js.map → useYamlActivityEvents-B3YxPeFt.js.map} +1 -1
  313. package/dashboard/dist/assets/{vendor-icons-B7OcUM6b.js → vendor-icons-CeVtUKyP.js} +2 -2
  314. package/dashboard/dist/assets/{vendor-icons-B7OcUM6b.js.map → vendor-icons-CeVtUKyP.js.map} +1 -1
  315. package/dashboard/dist/assets/{yaml-workflows-BHAOOGvn.js → yaml-workflows-COHOjdhF.js} +2 -2
  316. package/dashboard/dist/assets/{yaml-workflows-BHAOOGvn.js.map → yaml-workflows-COHOjdhF.js.map} +1 -1
  317. package/dashboard/dist/index.html +3 -3
  318. package/docs/accumulator.md +37 -1
  319. package/docs/api/mcp/admin.md +3 -2
  320. package/docs/api/sdk/escalations.md +6 -0
  321. package/docs/api/sdk/exports.md +1 -1
  322. package/docs/api/sdk/workflows.md +23 -4
  323. package/docs/cli.md +1 -1
  324. package/docs/dashboard.md +2 -2
  325. package/docs/faceted-routing.md +2 -0
  326. package/docs/hitl/x-lt-scan.md +51 -0
  327. package/docs/hitl/x-lt-widget.md +5 -0
  328. package/docs/hitl-guide.md +2 -0
  329. package/docs/scan-codes.md +252 -19
  330. package/package.json +1 -1
  331. package/build/types/scan-code.d.ts +0 -308
  332. package/dashboard/dist/assets/AvailableEscalationsPage-CpbC8oTN.js +0 -2
  333. package/dashboard/dist/assets/AvailableEscalationsPage-CpbC8oTN.js.map +0 -1
  334. package/dashboard/dist/assets/CapabilitiesPage-RGgD3YZO.js +0 -2
  335. package/dashboard/dist/assets/CountdownTimer-BaexQMK6.js +0 -2
  336. package/dashboard/dist/assets/EscalationSchemaPage-W5r0A1kj.js +0 -9
  337. package/dashboard/dist/assets/EscalationSchemaPage-W5r0A1kj.js.map +0 -1
  338. package/dashboard/dist/assets/EscalationTimeline-DKyTz6sM.js +0 -2
  339. package/dashboard/dist/assets/EscalationTimeline-DKyTz6sM.js.map +0 -1
  340. package/dashboard/dist/assets/McpQueryDetailPage-DYJr16l7.js +0 -5
  341. package/dashboard/dist/assets/McpQueryDetailPage-DYJr16l7.js.map +0 -1
  342. package/dashboard/dist/assets/ResolverForm-BwgjIX97.js +0 -7
  343. package/dashboard/dist/assets/ResolverForm-BwgjIX97.js.map +0 -1
  344. package/dashboard/dist/assets/RoleDetailPage-BFuLNJXa.js +0 -8
  345. package/dashboard/dist/assets/RoleDetailPage-BFuLNJXa.js.map +0 -1
  346. package/dashboard/dist/assets/ScanCodesPage-Cu1bKEix.js +0 -2
  347. package/dashboard/dist/assets/ScanCodesPage-Cu1bKEix.js.map +0 -1
  348. package/dashboard/dist/assets/ScanSchemeDetailPage-D9AbS6UY.js +0 -2
  349. package/dashboard/dist/assets/ScanSchemeDetailPage-D9AbS6UY.js.map +0 -1
  350. package/dashboard/dist/assets/ScanStationPage-gcZGefvT.js +0 -2
  351. package/dashboard/dist/assets/ScanStationPage-gcZGefvT.js.map +0 -1
  352. package/dashboard/dist/assets/index-B_GT23TE.js +0 -3
  353. package/dashboard/dist/assets/index-B_GT23TE.js.map +0 -1
  354. package/dashboard/dist/assets/index-CgUcYveM.js +0 -67
  355. package/dashboard/dist/assets/index-CgUcYveM.js.map +0 -1
  356. package/dashboard/dist/assets/index-Dh8MJl3L.css +0 -1
@@ -0,0 +1,68 @@
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.resolveSubject = resolveSubject;
37
+ exports.claimedByOther = claimedByOther;
38
+ const scanCodeService = __importStar(require("../../services/scan-code"));
39
+ const escalationService = __importStar(require("../../services/escalation"));
40
+ const userService = __importStar(require("../../services/user"));
41
+ const uuid_1 = require("../../lib/uuid");
42
+ const helpers_1 = require("../escalations/helpers");
43
+ const types_1 = require("../../types");
44
+ async function resolveSubject(ref, schemes, stationAuth) {
45
+ if (!ref)
46
+ return null;
47
+ if (typeof ref.code !== 'string' || !(0, uuid_1.isUuid)(ref.escalationId))
48
+ return { ok: false };
49
+ const parsed = scanCodeService.parseScanCode(ref.code, schemes);
50
+ if (!parsed.ok || parsed.scheme.kind !== types_1.SCAN_SCHEME_KINDS.ACTION)
51
+ return { ok: false };
52
+ const row = await escalationService.getEscalation(ref.escalationId);
53
+ if (!row || row.status !== 'pending')
54
+ return { ok: false };
55
+ if (await (0, helpers_1.assertReadAccess)(stationAuth.userId, row))
56
+ return { ok: false };
57
+ if (row.metadata?.[parsed.scheme.target_facet] !== parsed.parsed.target) {
58
+ return { ok: false };
59
+ }
60
+ return { ok: true, subject: { row, parsed: parsed.parsed, scheme: parsed.scheme, code: ref.code } };
61
+ }
62
+ /** Who holds a live claim on the row, when that is someone other than `actorId`. */
63
+ async function claimedByOther(row, actorId) {
64
+ if (!row.assigned_to || !(0, types_1.isEffectivelyClaimed)(row) || row.assigned_to === actorId)
65
+ return null;
66
+ const user = await userService.getUser(row.assigned_to);
67
+ return { id: row.assigned_to, displayName: user?.display_name || user?.external_id || 'another associate' };
68
+ }
@@ -0,0 +1,24 @@
1
+ import { type ScanExecuteResponse, type ScanStep } from '../../types';
2
+ import type { LTApiResult } from '../../types/sdk';
3
+ import { type StepContext } from './context';
4
+ /**
5
+ * Adds the scanned item to an accumulator. Two modes, one atomic write:
6
+ *
7
+ * - Item-locate (`params.accumulate.containerFacet`): the scan locates the
8
+ * item's own pending row through the scheme facet, reads the container
9
+ * facet value it carries, and adds the target to the container that shares
10
+ * it, writing the item row as the reciprocal in the same statement. An
11
+ * item with no row, or no container facet, falls through. An item whose
12
+ * container has closed and whose successor has not parked yet answers
13
+ * `no_open_container` with the item row, so the station can say "scan
14
+ * again" instead of showing the item with no hint.
15
+ * - Container-locate (no `containerFacet`): the scan locates the container
16
+ * by the scheme facet and adds `params.itemKey` (template).
17
+ *
18
+ * Templates may read `{claim.<facet>}` (the actor's live claim) and, in item
19
+ * mode, `{item.<facet>}` (the located row); an unresolvable token falls
20
+ * through. The write is the SDK's guarded statement; the locate only picks
21
+ * ids. A container already holding the item answers conflict, never a
22
+ * second add.
23
+ */
24
+ export declare function accumulateStep(step: ScanStep, ctx: StepContext): Promise<LTApiResult<ScanExecuteResponse> | null>;
@@ -0,0 +1,147 @@
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.accumulateStep = accumulateStep;
37
+ const scanCodeService = __importStar(require("../../services/scan-code"));
38
+ const accumulate_1 = require("../escalations/accumulate");
39
+ const types_1 = require("../../types");
40
+ const context_1 = require("./context");
41
+ const grant_1 = require("./grant");
42
+ const locate_1 = require("./locate");
43
+ const verbs_subject_1 = require("./verbs-subject");
44
+ /**
45
+ * Adds the scanned item to an accumulator. Two modes, one atomic write:
46
+ *
47
+ * - Item-locate (`params.accumulate.containerFacet`): the scan locates the
48
+ * item's own pending row through the scheme facet, reads the container
49
+ * facet value it carries, and adds the target to the container that shares
50
+ * it, writing the item row as the reciprocal in the same statement. An
51
+ * item with no row, or no container facet, falls through. An item whose
52
+ * container has closed and whose successor has not parked yet answers
53
+ * `no_open_container` with the item row, so the station can say "scan
54
+ * again" instead of showing the item with no hint.
55
+ * - Container-locate (no `containerFacet`): the scan locates the container
56
+ * by the scheme facet and adds `params.itemKey` (template).
57
+ *
58
+ * Templates may read `{claim.<facet>}` (the actor's live claim) and, in item
59
+ * mode, `{item.<facet>}` (the located row); an unresolvable token falls
60
+ * through. The write is the SDK's guarded statement; the locate only picks
61
+ * ids. A container already holding the item answers conflict, never a
62
+ * second add.
63
+ */
64
+ async function accumulateStep(step, ctx) {
65
+ const options = step.params?.accumulate;
66
+ if (options?.from === 'subject')
67
+ return (0, verbs_subject_1.accumulateFromSubject)(step, ctx);
68
+ if (options?.into === 'subject')
69
+ return (0, verbs_subject_1.accumulateIntoSubject)(step, ctx);
70
+ let item;
71
+ if (options?.containerFacet) {
72
+ const located = await (0, locate_1.locateForStep)(step, ctx, 1);
73
+ item = located?.escalations[0];
74
+ if (!item)
75
+ return null;
76
+ }
77
+ const rendered = await (0, context_1.templated)(step, ctx, (tpl) => ({
78
+ payload: step.params?.resolverPayload
79
+ ? scanCodeService.interpolateScanTemplate(step.params.resolverPayload, tpl)
80
+ : undefined,
81
+ metadata: { ...(0, context_1.interpolatedMetadata)(step, ctx, tpl), ...(0, context_1.provenance)(ctx) },
82
+ itemKey: options?.containerFacet
83
+ ? ctx.parsed.target
84
+ : scanCodeService.interpolateScanTemplate(step.params.itemKey, tpl),
85
+ }), item);
86
+ if (rendered === null)
87
+ return null;
88
+ let request;
89
+ let container;
90
+ if (options?.containerFacet && item) {
91
+ const containerValue = item.metadata?.[options.containerFacet];
92
+ if (containerValue === undefined || containerValue === null || containerValue === '')
93
+ return null;
94
+ container = { facet: options.containerFacet, value: String(containerValue) };
95
+ request = {
96
+ key: container.facet,
97
+ value: container.value,
98
+ itemKey: rendered.itemKey,
99
+ payload: rendered.payload,
100
+ metadata: rendered.metadata,
101
+ restrictRoles: options.container?.roles ?? options.containerRoles,
102
+ container: options.container
103
+ ? { types: options.container.types, subtypes: options.container.subtypes, facets: options.container.facets }
104
+ : undefined,
105
+ ...(options.reciprocal === false ? {} : { reciprocal: { id: item.id } }),
106
+ };
107
+ }
108
+ else {
109
+ request = {
110
+ key: ctx.scheme.target_facet,
111
+ value: ctx.parsed.target,
112
+ itemKey: rendered.itemKey,
113
+ payload: rendered.payload,
114
+ metadata: rendered.metadata,
115
+ restrictRoles: step.query?.roles,
116
+ };
117
+ }
118
+ const notPrimed = await (0, grant_1.spendGrant)(ctx);
119
+ if (notPrimed)
120
+ return notPrimed;
121
+ const result = await (0, accumulate_1.accumulateItemByMetadata)(request, ctx.auth);
122
+ if (result.status === 404) {
123
+ if (!container || !item)
124
+ return null;
125
+ return {
126
+ status: 200,
127
+ data: {
128
+ outcome: types_1.SCAN_OUTCOMES.NO_OPEN_CONTAINER,
129
+ verb: step.verb,
130
+ escalation: item,
131
+ container,
132
+ fallback: ctx.rule.fallback,
133
+ error: `No open container carries ${container.facet} = ${container.value}`,
134
+ },
135
+ };
136
+ }
137
+ if (result.status === 403)
138
+ return (0, context_1.forbidden)(result.error);
139
+ if (result.status === 409)
140
+ return (0, context_1.conflict)(result.error);
141
+ if (result.status === 400 || result.status === 422)
142
+ return (0, context_1.refused)(result.error ?? 'the item was not accepted');
143
+ if (result.status !== 200)
144
+ return result;
145
+ const escalation = result.data.escalationId ? { id: result.data.escalationId, ...result.data } : undefined;
146
+ return (0, context_1.executed)(escalation, step);
147
+ }
@@ -0,0 +1,6 @@
1
+ import { type ScanExecuteResponse, type ScanStep } from '../../types';
2
+ import type { LTApiResult } from '../../types/sdk';
3
+ import { type StepContext } from './context';
4
+ type ScanResult = LTApiResult<ScanExecuteResponse>;
5
+ export declare function fillStep(step: ScanStep, ctx: StepContext): Promise<ScanResult | null>;
6
+ export {};
@@ -0,0 +1,152 @@
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.fillStep = fillStep;
37
+ const scanCodeService = __importStar(require("../../services/scan-code"));
38
+ const escalationService = __importStar(require("../../services/escalation"));
39
+ const resolve_batch_1 = require("../escalations/resolve-batch");
40
+ const escalation_1 = require("../../types/escalation");
41
+ const types_1 = require("../../types");
42
+ const context_1 = require("./context");
43
+ const grant_1 = require("./grant");
44
+ const locate_1 = require("./locate");
45
+ const subject_1 = require("./subject");
46
+ const STOCK_UNEXPECTED = 'Not one of the items expected here.';
47
+ function readBatch(row) {
48
+ const meta = (row.metadata ?? {});
49
+ const pending = meta[escalation_1.ESCALATION_BATCH_KEYS.PENDING];
50
+ const keys = meta[escalation_1.ESCALATION_BATCH_KEYS.KEYS];
51
+ if (!Array.isArray(pending))
52
+ return null;
53
+ return { pending: pending.map(String), keys: Array.isArray(keys) ? keys.map(String) : pending.map(String) };
54
+ }
55
+ /** The code a batch key names, without its ordinal suffix. */
56
+ function codeOf(key, separator) {
57
+ const at = key.lastIndexOf(separator);
58
+ return at > 0 && /^[0-9]+$/.test(key.slice(at + 1)) ? key.slice(0, at) : key;
59
+ }
60
+ function keysFor(keys, target, separator) {
61
+ return keys.filter((k) => codeOf(k, separator) === target);
62
+ }
63
+ function progress(batch, filledNow) {
64
+ const remaining = Math.max(0, batch.pending.length - filledNow);
65
+ return { filled: batch.keys.length - remaining, total: batch.keys.length, remaining };
66
+ }
67
+ async function fillStep(step, ctx) {
68
+ const options = step.params.fill;
69
+ const separator = options.separator ?? types_1.SCAN_FILL_SEPARATOR_DEFAULT;
70
+ // 1. The batch row: the held subject, or the row the scan names
71
+ const row = options.into === 'subject'
72
+ ? ctx.subject.row
73
+ : (await (0, locate_1.locateForStep)(step, ctx, 1))?.escalations[0];
74
+ if (!row)
75
+ return null;
76
+ if (options.into === 'subject' && step.subject?.claimedByOther !== 'allow') {
77
+ const other = await (0, subject_1.claimedByOther)(row, ctx.auth.userId);
78
+ if (other)
79
+ return (0, context_1.refused)(`Claimed by **${other.displayName}**.`);
80
+ }
81
+ const batch = readBatch(row);
82
+ if (!batch)
83
+ return (0, context_1.conflict)('the held row is not a batch');
84
+ // 2. Which open slot this scan fills, or why none
85
+ const tpl = {
86
+ ...(0, context_1.templateContext)(ctx),
87
+ fill: {
88
+ pending: [...new Set(batch.pending.map((k) => codeOf(k, separator)))],
89
+ total: batch.keys.length,
90
+ filled: batch.keys.length - batch.pending.length,
91
+ },
92
+ };
93
+ const candidates = keysFor(batch.pending, ctx.parsed.target, separator);
94
+ if (candidates.length === 0) {
95
+ const declared = keysFor(batch.keys, ctx.parsed.target, separator);
96
+ const markdown = declared.length
97
+ ? `All ${declared.length} of these are already checked off.`
98
+ : scanCodeService.renderScanCopy(step.refuse?.markdown ?? STOCK_UNEXPECTED, tpl);
99
+ return (0, context_1.refused)(markdown, {
100
+ refusal: { markdown, expected: tpl.fill.pending },
101
+ progress: progress(batch, 0),
102
+ });
103
+ }
104
+ // 3. Spend the badge, then fill; a slot taken since the read moves to the next
105
+ let payload;
106
+ try {
107
+ payload = scanCodeService.interpolateScanTemplate(options.payload ?? { scannedCode: '{scan.code}' }, tpl);
108
+ }
109
+ catch (err) {
110
+ if (err instanceof scanCodeService.ScanTemplateError)
111
+ return null;
112
+ throw err;
113
+ }
114
+ const notPrimed = (await (0, grant_1.identityGate)(step, ctx)) ?? (await (0, grant_1.spendGrant)(ctx));
115
+ if (notPrimed)
116
+ return notPrimed;
117
+ for (const itemKey of candidates) {
118
+ const result = await (0, resolve_batch_1.resolveBatchItem)({
119
+ id: row.id, itemKey, resolverPayload: payload, metadata: (0, context_1.provenance)(ctx),
120
+ }, ctx.auth);
121
+ if (result.status === 200) {
122
+ const data = result.data;
123
+ const done = data.outcome === 'completed';
124
+ const filled = progress(batch, batch.pending.length - (done ? 0 : (data.remaining ?? 0)));
125
+ return (0, context_1.withDone)({
126
+ status: 200,
127
+ data: {
128
+ outcome: types_1.SCAN_OUTCOMES.EXECUTED,
129
+ verb: step.verb,
130
+ escalation: { id: row.id, ...data },
131
+ progress: filled,
132
+ ...(done ? { clearSubject: true } : {}),
133
+ },
134
+ }, step, { ...tpl, fill: { ...tpl.fill, ...filled } });
135
+ }
136
+ const outcome = result.data?.outcome;
137
+ if (outcome === 'duplicate-item')
138
+ continue;
139
+ if (result.status === 403)
140
+ return (0, context_1.forbidden)(result.error);
141
+ if (result.status === 404)
142
+ return null;
143
+ if (outcome?.startsWith('already-'))
144
+ return (0, context_1.refused)('This one is already complete.', { clearSubject: true });
145
+ return (0, context_1.refused)(result.error ?? STOCK_UNEXPECTED);
146
+ }
147
+ const fresh = await escalationService.getEscalation(row.id);
148
+ const after = fresh ? readBatch(fresh) : null;
149
+ return (0, context_1.refused)(`All ${keysFor(batch.keys, ctx.parsed.target, separator).length} of these are already checked off.`, {
150
+ ...(after ? { progress: progress(after, 0) } : {}),
151
+ });
152
+ }
@@ -0,0 +1,14 @@
1
+ import { type LTEscalationRecord, type ScanExecuteResponse, type ScanStep } from '../../types';
2
+ import type { LTApiResult } from '../../types/sdk';
3
+ import { type StepContext } from './context';
4
+ type ScanResult = LTApiResult<ScanExecuteResponse>;
5
+ /**
6
+ * The pre-write guard. Returns the refusal when the pairing is wrong, null
7
+ * when it holds (or the step declares no match).
8
+ */
9
+ export declare function matchGuard(step: ScanStep, ctx: StepContext, container?: LTEscalationRecord): ScanResult | null;
10
+ /** The subject joins the scanned container; the subject's row is the reciprocal. */
11
+ export declare function accumulateFromSubject(step: ScanStep, ctx: StepContext): Promise<ScanResult | null>;
12
+ /** The subject's own row collects the scanned code. */
13
+ export declare function accumulateIntoSubject(step: ScanStep, ctx: StepContext): Promise<ScanResult | null>;
14
+ export {};