@hotmeshio/long-tail 0.30.4 → 0.31.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 (413) hide show
  1. package/build/api/escalations/index.d.ts +1 -0
  2. package/build/api/escalations/index.js +5 -2
  3. package/build/api/escalations/roster-action.d.ts +11 -0
  4. package/build/api/escalations/roster-action.js +47 -30
  5. package/build/api/escalations/roster-scan.d.ts +26 -0
  6. package/build/api/escalations/roster-scan.js +114 -0
  7. package/build/api/labels/errors.d.ts +3 -0
  8. package/build/api/labels/errors.js +15 -0
  9. package/build/api/labels/index.d.ts +2 -0
  10. package/build/api/labels/index.js +17 -0
  11. package/build/api/labels/issue.d.ts +54 -0
  12. package/build/api/labels/issue.js +144 -0
  13. package/build/api/labels/templates.d.ts +29 -0
  14. package/build/api/labels/templates.js +98 -0
  15. package/build/api/scan-codes/context.d.ts +9 -1
  16. package/build/api/scan-codes/context.js +16 -1
  17. package/build/api/scan-codes/execute.js +6 -1
  18. package/build/api/scan-codes/fill-labels.d.ts +8 -0
  19. package/build/api/scan-codes/fill-labels.js +23 -2
  20. package/build/api/scan-codes/hold.js +2 -0
  21. package/build/api/scan-codes/located.d.ts +10 -0
  22. package/build/api/scan-codes/located.js +74 -0
  23. package/build/api/scan-codes/open.d.ts +9 -0
  24. package/build/api/scan-codes/open.js +99 -0
  25. package/build/api/scan-codes/present.js +1 -0
  26. package/build/api/scan-codes/verb-fill.js +1 -1
  27. package/build/api/users.d.ts +8 -4
  28. package/build/api/users.js +51 -13
  29. package/build/index.d.ts +1 -0
  30. package/build/index.js +4 -2
  31. package/build/lib/db/schemas/044_label_sheets.sql +65 -0
  32. package/build/lib/db/schemas/045_label_job_delivery.sql +14 -0
  33. package/build/lib/labels/transports.d.ts +23 -0
  34. package/build/lib/labels/transports.js +39 -0
  35. package/build/modules/auth.d.ts +2 -0
  36. package/build/modules/auth.js +3 -1
  37. package/build/modules/capabilities.d.ts +5 -1
  38. package/build/modules/capabilities.js +38 -8
  39. package/build/modules/config.d.ts +10 -0
  40. package/build/modules/config.js +10 -0
  41. package/build/routes/escalations/resolve.js +18 -0
  42. package/build/routes/index.js +2 -0
  43. package/build/routes/labels.d.ts +2 -0
  44. package/build/routes/labels.js +135 -0
  45. package/build/routes/users.js +1 -1
  46. package/build/services/labels/content.d.ts +13 -0
  47. package/build/services/labels/content.js +81 -0
  48. package/build/services/labels/errors.d.ts +5 -0
  49. package/build/services/labels/errors.js +12 -0
  50. package/build/services/labels/index.d.ts +11 -0
  51. package/build/services/labels/index.js +52 -0
  52. package/build/services/labels/issue.d.ts +38 -0
  53. package/build/services/labels/issue.js +181 -0
  54. package/build/services/labels/jobs.d.ts +37 -0
  55. package/build/services/labels/jobs.js +75 -0
  56. package/build/services/labels/media.d.ts +11 -0
  57. package/build/services/labels/media.js +44 -0
  58. package/build/services/labels/reissue.d.ts +13 -0
  59. package/build/services/labels/reissue.js +65 -0
  60. package/build/services/labels/render-pdf.d.ts +11 -0
  61. package/build/services/labels/render-pdf.js +138 -0
  62. package/build/services/labels/targets.d.ts +18 -0
  63. package/build/services/labels/targets.js +216 -0
  64. package/build/services/labels/templates/index.d.ts +3 -0
  65. package/build/services/labels/templates/index.js +18 -0
  66. package/build/services/labels/templates/read.d.ts +4 -0
  67. package/build/services/labels/templates/read.js +36 -0
  68. package/build/services/labels/templates/sql.d.ts +8 -0
  69. package/build/services/labels/templates/sql.js +50 -0
  70. package/build/services/labels/templates/validate.d.ts +19 -0
  71. package/build/services/labels/templates/validate.js +93 -0
  72. package/build/services/labels/templates/write.d.ts +16 -0
  73. package/build/services/labels/templates/write.js +75 -0
  74. package/build/services/labels/token.d.ts +9 -0
  75. package/build/services/labels/token.js +28 -0
  76. package/build/services/labels/verify.d.ts +4 -0
  77. package/build/services/labels/verify.js +38 -0
  78. package/build/services/role/index.d.ts +2 -0
  79. package/build/services/role/index.js +7 -0
  80. package/build/services/role/scan-done.js +4 -1
  81. package/build/services/role/sql.d.ts +1 -0
  82. package/build/services/role/sql.js +3 -1
  83. package/build/services/role/types.d.ts +2 -0
  84. package/build/services/scan-code/index.d.ts +1 -1
  85. package/build/services/scan-code/index.js +2 -1
  86. package/build/services/scan-code/parse.d.ts +5 -1
  87. package/build/services/scan-code/parse.js +8 -2
  88. package/build/services/scan-code/validate-station.d.ts +13 -0
  89. package/build/services/scan-code/validate-station.js +81 -0
  90. package/build/services/scan-code/validate-subject.js +33 -6
  91. package/build/services/scan-code/validate.d.ts +3 -0
  92. package/build/services/scan-code/validate.js +22 -18
  93. package/build/services/user/crud.d.ts +13 -1
  94. package/build/services/user/crud.js +42 -11
  95. package/build/services/user/index.d.ts +3 -2
  96. package/build/services/user/index.js +7 -1
  97. package/build/services/user/redact.d.ts +17 -0
  98. package/build/services/user/redact.js +32 -0
  99. package/build/services/user/sql.d.ts +8 -15
  100. package/build/services/user/sql.js +27 -3
  101. package/build/services/user/types.d.ts +21 -1
  102. package/build/shared/labels/compose.d.ts +12 -0
  103. package/build/shared/labels/compose.js +43 -0
  104. package/build/shared/labels/index.d.ts +9 -0
  105. package/build/shared/labels/index.js +54 -0
  106. package/build/shared/labels/label-content.d.ts +17 -0
  107. package/build/shared/labels/label-content.js +137 -0
  108. package/build/shared/labels/layout.d.ts +23 -0
  109. package/build/shared/labels/layout.js +81 -0
  110. package/build/shared/labels/media.d.ts +22 -0
  111. package/build/shared/labels/media.js +116 -0
  112. package/build/shared/labels/render-svg.d.ts +10 -0
  113. package/build/shared/labels/render-svg.js +58 -0
  114. package/build/shared/labels/render-zpl.d.ts +9 -0
  115. package/build/shared/labels/render-zpl.js +63 -0
  116. package/build/shared/labels/symbol.d.ts +18 -0
  117. package/build/shared/labels/symbol.js +74 -0
  118. package/build/shared/labels/tokens.d.ts +18 -0
  119. package/build/shared/labels/tokens.js +43 -0
  120. package/build/shared/labels/types.d.ts +105 -0
  121. package/build/shared/labels/types.js +11 -0
  122. package/build/start/adapters.js +16 -0
  123. package/build/start/workers.js +18 -2
  124. package/build/system/mcp-servers/admin/index.js +2 -0
  125. package/build/system/mcp-servers/admin/labels-schemas.d.ts +192 -0
  126. package/build/system/mcp-servers/admin/labels-schemas.js +46 -0
  127. package/build/system/mcp-servers/admin/labels.d.ts +9 -0
  128. package/build/system/mcp-servers/admin/labels.js +101 -0
  129. package/build/system/mcp-servers/admin/schemas.d.ts +491 -24
  130. package/build/system/mcp-servers/admin/schemas.js +32 -4
  131. package/build/system/mcp-servers/admin/users.js +1 -1
  132. package/build/system/seed/tool-manifests-admin.js +5 -0
  133. package/build/tsconfig.tsbuildinfo +1 -1
  134. package/build/types/capability.d.ts +2 -1
  135. package/build/types/index.d.ts +3 -2
  136. package/build/types/labels/index.d.ts +4 -0
  137. package/build/types/labels/index.js +2 -0
  138. package/build/types/labels/job.d.ts +51 -0
  139. package/build/types/labels/job.js +2 -0
  140. package/build/types/labels/source.d.ts +44 -0
  141. package/build/types/labels/source.js +2 -0
  142. package/build/types/labels/template.d.ts +46 -0
  143. package/build/types/labels/template.js +2 -0
  144. package/build/types/labels/transport.d.ts +24 -0
  145. package/build/types/labels/transport.js +2 -0
  146. package/build/types/scan-choice.d.ts +2 -4
  147. package/build/types/scan-code/constants.d.ts +1 -0
  148. package/build/types/scan-code/constants.js +1 -0
  149. package/build/types/scan-code/response.d.ts +22 -4
  150. package/build/types/scan-code/rule.d.ts +66 -3
  151. package/build/types/startup.d.ts +37 -0
  152. package/build/types/user.d.ts +2 -0
  153. package/dashboard/dist/assets/{AdminDashboard-VQ1fhhJP.js → AdminDashboard-BafKaq50.js} +2 -2
  154. package/dashboard/dist/assets/{AdminDashboard-VQ1fhhJP.js.map → AdminDashboard-BafKaq50.js.map} +1 -1
  155. package/dashboard/dist/assets/{AgentConfigPage-BOe_W2Ij.js → AgentConfigPage-CFHf31DT.js} +6 -6
  156. package/dashboard/dist/assets/{AgentConfigPage-BOe_W2Ij.js.map → AgentConfigPage-CFHf31DT.js.map} +1 -1
  157. package/dashboard/dist/assets/{AgentDetailPage-5ov5D9V2.js → AgentDetailPage-CEvz5rJr.js} +3 -3
  158. package/dashboard/dist/assets/{AgentDetailPage-5ov5D9V2.js.map → AgentDetailPage-CEvz5rJr.js.map} +1 -1
  159. package/dashboard/dist/assets/{AgentsPage-DDFMKHhI.js → AgentsPage-DjQaio0O.js} +2 -2
  160. package/dashboard/dist/assets/{AgentsPage-DDFMKHhI.js.map → AgentsPage-DjQaio0O.js.map} +1 -1
  161. package/dashboard/dist/assets/AvailableEscalationsPage-UB03VTJx.js +2 -0
  162. package/dashboard/dist/assets/AvailableEscalationsPage-UB03VTJx.js.map +1 -0
  163. package/dashboard/dist/assets/{BotPicker-Dqpo36dM.js → BotPicker-C7MNWOF7.js} +2 -2
  164. package/dashboard/dist/assets/{BotPicker-Dqpo36dM.js.map → BotPicker-C7MNWOF7.js.map} +1 -1
  165. package/dashboard/dist/assets/BulkAssignModal-h5fX-_cV.js +2 -0
  166. package/dashboard/dist/assets/{BulkAssignModal-CmLVxkz-.js.map → BulkAssignModal-h5fX-_cV.js.map} +1 -1
  167. package/dashboard/dist/assets/{CapabilitiesPage-Dfkip6_b.js → CapabilitiesPage-BIzDl-ZT.js} +2 -2
  168. package/dashboard/dist/assets/{CapabilitiesPage-Dfkip6_b.js.map → CapabilitiesPage-BIzDl-ZT.js.map} +1 -1
  169. package/dashboard/dist/assets/{CollapsibleSection-CYNYMYSa.js → CollapsibleSection-B5TivtEg.js} +2 -2
  170. package/dashboard/dist/assets/{CollapsibleSection-CYNYMYSa.js.map → CollapsibleSection-B5TivtEg.js.map} +1 -1
  171. package/dashboard/dist/assets/{ConfirmDeleteModal-CpJNP-8w.js → ConfirmDeleteModal-CB4nKePb.js} +2 -2
  172. package/dashboard/dist/assets/{ConfirmDeleteModal-CpJNP-8w.js.map → ConfirmDeleteModal-CB4nKePb.js.map} +1 -1
  173. package/dashboard/dist/assets/{ConnectedAppsPage-DXIp2Dpl.js → ConnectedAppsPage-B3S5gVWw.js} +2 -2
  174. package/dashboard/dist/assets/{ConnectedAppsPage-DXIp2Dpl.js.map → ConnectedAppsPage-B3S5gVWw.js.map} +1 -1
  175. package/dashboard/dist/assets/{CountdownTimer-CuPY7zkb.js → CountdownTimer-BHVIq3kA.js} +2 -2
  176. package/dashboard/dist/assets/{CountdownTimer-CuPY7zkb.js.map → CountdownTimer-BHVIq3kA.js.map} +1 -1
  177. package/dashboard/dist/assets/CredentialConfirmModal-w0AGmCIe.js +2 -0
  178. package/dashboard/dist/assets/CredentialConfirmModal-w0AGmCIe.js.map +1 -0
  179. package/dashboard/dist/assets/{CredentialsPage-CtrnkHcj.js → CredentialsPage-BtCGBJrT.js} +2 -2
  180. package/dashboard/dist/assets/{CredentialsPage-CtrnkHcj.js.map → CredentialsPage-BtCGBJrT.js.map} +1 -1
  181. package/dashboard/dist/assets/{CronLabel-DVjTw5Ri.js → CronLabel-BG1rZK-5.js} +2 -2
  182. package/dashboard/dist/assets/{CronLabel-DVjTw5Ri.js.map → CronLabel-BG1rZK-5.js.map} +1 -1
  183. package/dashboard/dist/assets/{DropZone-DefYTYQy.js → DropZone-D8ZVdEb5.js} +2 -2
  184. package/dashboard/dist/assets/{DropZone-DefYTYQy.js.map → DropZone-D8ZVdEb5.js.map} +1 -1
  185. package/dashboard/dist/assets/{ElapsedCell-gY_mGMTF.js → ElapsedCell-l4m8Yvfv.js} +2 -2
  186. package/dashboard/dist/assets/{ElapsedCell-gY_mGMTF.js.map → ElapsedCell-l4m8Yvfv.js.map} +1 -1
  187. package/dashboard/dist/assets/{EntityTimelinePanel-DJN_ZEQa.js → EntityTimelinePanel-BOHlIaxF.js} +2 -2
  188. package/dashboard/dist/assets/{EntityTimelinePanel-DJN_ZEQa.js.map → EntityTimelinePanel-BOHlIaxF.js.map} +1 -1
  189. package/dashboard/dist/assets/{EscalationListSchemaPage-A4KpTdJA.js → EscalationListSchemaPage-BotlwlX3.js} +3 -3
  190. package/dashboard/dist/assets/{EscalationListSchemaPage-A4KpTdJA.js.map → EscalationListSchemaPage-BotlwlX3.js.map} +1 -1
  191. package/dashboard/dist/assets/{EscalationSchemaPage-nfCn42hT.js → EscalationSchemaPage-CfZSVOSD.js} +3 -3
  192. package/dashboard/dist/assets/{EscalationSchemaPage-nfCn42hT.js.map → EscalationSchemaPage-CfZSVOSD.js.map} +1 -1
  193. package/dashboard/dist/assets/{EscalationTimeline-CLvSr1SD.js → EscalationTimeline-CCKpuRBU.js} +2 -2
  194. package/dashboard/dist/assets/{EscalationTimeline-CLvSr1SD.js.map → EscalationTimeline-CCKpuRBU.js.map} +1 -1
  195. package/dashboard/dist/assets/{EscalationTitleSelect-CT7mYHkb.js → EscalationTitleSelect-cpTzPHiW.js} +2 -2
  196. package/dashboard/dist/assets/{EscalationTitleSelect-CT7mYHkb.js.map → EscalationTitleSelect-cpTzPHiW.js.map} +1 -1
  197. package/dashboard/dist/assets/{EscalationsOverview-CKaGRh-E.js → EscalationsOverview-DS-nK0qV.js} +2 -2
  198. package/dashboard/dist/assets/{EscalationsOverview-CKaGRh-E.js.map → EscalationsOverview-DS-nK0qV.js.map} +1 -1
  199. package/dashboard/dist/assets/{EventTable-2ywJsOLy.js → EventTable-UfebhJf0.js} +2 -2
  200. package/dashboard/dist/assets/{EventTable-2ywJsOLy.js.map → EventTable-UfebhJf0.js.map} +1 -1
  201. package/dashboard/dist/assets/{FilterBar-Dy0b7wwf.js → FilterBar-newA5l-X.js} +2 -2
  202. package/dashboard/dist/assets/{FilterBar-Dy0b7wwf.js.map → FilterBar-newA5l-X.js.map} +1 -1
  203. package/dashboard/dist/assets/{GraphInvokePage-yOVpraAy.js → GraphInvokePage-6SCDyQcK.js} +2 -2
  204. package/dashboard/dist/assets/{GraphInvokePage-yOVpraAy.js.map → GraphInvokePage-6SCDyQcK.js.map} +1 -1
  205. package/dashboard/dist/assets/HomePage-BEc-XdKj.js +2 -0
  206. package/dashboard/dist/assets/{HomePage-67xXjKjN.js.map → HomePage-BEc-XdKj.js.map} +1 -1
  207. package/dashboard/dist/assets/LabelJobsPage-BO50zXT5.js +2 -0
  208. package/dashboard/dist/assets/LabelJobsPage-BO50zXT5.js.map +1 -0
  209. package/dashboard/dist/assets/{LinePage-CMsYtukW.js → LinePage-NYxJQ-ex.js} +3 -3
  210. package/dashboard/dist/assets/{LinePage-CMsYtukW.js.map → LinePage-NYxJQ-ex.js.map} +1 -1
  211. package/dashboard/dist/assets/{LinesPage-pwL46mOS.js → LinesPage-RbWTaQRh.js} +3 -3
  212. package/dashboard/dist/assets/{LinesPage-pwL46mOS.js.map → LinesPage-RbWTaQRh.js.map} +1 -1
  213. package/dashboard/dist/assets/{ListToolbar-CJmvGy2B.js → ListToolbar-B-E9-toh.js} +2 -2
  214. package/dashboard/dist/assets/{ListToolbar-CJmvGy2B.js.map → ListToolbar-B-E9-toh.js.map} +1 -1
  215. package/dashboard/dist/assets/{McpOverview-DA9LLvNG.js → McpOverview-Shcf9QhZ.js} +2 -2
  216. package/dashboard/dist/assets/{McpOverview-DA9LLvNG.js.map → McpOverview-Shcf9QhZ.js.map} +1 -1
  217. package/dashboard/dist/assets/{McpQueryDetailPage-N7qLmfE8.js → McpQueryDetailPage-D8kmjy2v.js} +3 -3
  218. package/dashboard/dist/assets/{McpQueryDetailPage-N7qLmfE8.js.map → McpQueryDetailPage-D8kmjy2v.js.map} +1 -1
  219. package/dashboard/dist/assets/{McpQueryPage-CpsP3w7x.js → McpQueryPage-ck-o5m8A.js} +2 -2
  220. package/dashboard/dist/assets/{McpQueryPage-CpsP3w7x.js.map → McpQueryPage-ck-o5m8A.js.map} +1 -1
  221. package/dashboard/dist/assets/McpRunDetailPage-BJKkM9-3.js +2 -0
  222. package/dashboard/dist/assets/{McpRunDetailPage-qHRQ1pEY.js.map → McpRunDetailPage-BJKkM9-3.js.map} +1 -1
  223. package/dashboard/dist/assets/{McpRunsPage-BRDDYpTM.js → McpRunsPage-DqhHfD5G.js} +2 -2
  224. package/dashboard/dist/assets/{McpRunsPage-BRDDYpTM.js.map → McpRunsPage-DqhHfD5G.js.map} +1 -1
  225. package/dashboard/dist/assets/{NamespacePill-CeSfHH-j.js → NamespacePill--uIaGtrN.js} +2 -2
  226. package/dashboard/dist/assets/{NamespacePill-CeSfHH-j.js.map → NamespacePill--uIaGtrN.js.map} +1 -1
  227. package/dashboard/dist/assets/{OperationsPage-zUaab-CL.js → OperationsPage-D6B9Vv__.js} +3 -3
  228. package/dashboard/dist/assets/{OperationsPage-zUaab-CL.js.map → OperationsPage-D6B9Vv__.js.map} +1 -1
  229. package/dashboard/dist/assets/OperatorDashboard-CIH1cxjQ.js +2 -0
  230. package/dashboard/dist/assets/{OperatorDashboard-el5BquXN.js.map → OperatorDashboard-CIH1cxjQ.js.map} +1 -1
  231. package/dashboard/dist/assets/{PageHeader-DiGWAQlR.js → PageHeader-DClJ33fV.js} +2 -2
  232. package/dashboard/dist/assets/{PageHeader-DiGWAQlR.js.map → PageHeader-DClJ33fV.js.map} +1 -1
  233. package/dashboard/dist/assets/{PageHeaderWithStats-DwnKQ06j.js → PageHeaderWithStats-C-TrbKQL.js} +2 -2
  234. package/dashboard/dist/assets/{PageHeaderWithStats-DwnKQ06j.js.map → PageHeaderWithStats-C-TrbKQL.js.map} +1 -1
  235. package/dashboard/dist/assets/PersonaDetailPage-DjvfyIph.js +2 -0
  236. package/dashboard/dist/assets/{PersonaDetailPage-B_tb8gfl.js.map → PersonaDetailPage-DjvfyIph.js.map} +1 -1
  237. package/dashboard/dist/assets/{PersonasPage-BPI7mqM8.js → PersonasPage-D7ryA8Vc.js} +2 -2
  238. package/dashboard/dist/assets/{PersonasPage-BPI7mqM8.js.map → PersonasPage-D7ryA8Vc.js.map} +1 -1
  239. package/dashboard/dist/assets/{PortalPage-e_rBb1do.js → PortalPage-D3ybr0mo.js} +2 -2
  240. package/dashboard/dist/assets/{PortalPage-e_rBb1do.js.map → PortalPage-D3ybr0mo.js.map} +1 -1
  241. package/dashboard/dist/assets/PrintLabelsPanel-D0HF5x8b.js +2 -0
  242. package/dashboard/dist/assets/PrintLabelsPanel-D0HF5x8b.js.map +1 -0
  243. package/dashboard/dist/assets/{ProcessDetailPage-D35RX1bB.js → ProcessDetailPage-0xS9EdHe.js} +2 -2
  244. package/dashboard/dist/assets/{ProcessDetailPage-D35RX1bB.js.map → ProcessDetailPage-0xS9EdHe.js.map} +1 -1
  245. package/dashboard/dist/assets/{ProcessesListPage-CT81miI5.js → ProcessesListPage-93SMj1Fd.js} +2 -2
  246. package/dashboard/dist/assets/{ProcessesListPage-CT81miI5.js.map → ProcessesListPage-93SMj1Fd.js.map} +1 -1
  247. package/dashboard/dist/assets/{ResolverForm-BxJkoKAO.js → ResolverForm-DfogHDzl.js} +5 -5
  248. package/dashboard/dist/assets/{ResolverForm-BxJkoKAO.js.map → ResolverForm-DfogHDzl.js.map} +1 -1
  249. package/dashboard/dist/assets/RoleDetailPage-DlUOJWSB.js +8 -0
  250. package/dashboard/dist/assets/{RoleDetailPage-DtU7vsJm.js.map → RoleDetailPage-DlUOJWSB.js.map} +1 -1
  251. package/dashboard/dist/assets/{RolePill-D3hkAdKf.js → RolePill-BjD1Qw5y.js} +2 -2
  252. package/dashboard/dist/assets/{RolePill-D3hkAdKf.js.map → RolePill-BjD1Qw5y.js.map} +1 -1
  253. package/dashboard/dist/assets/RolesPage-DqhHSvaw.js +2 -0
  254. package/dashboard/dist/assets/{RolesPage-BE7RWt9q.js.map → RolesPage-DqhHSvaw.js.map} +1 -1
  255. package/dashboard/dist/assets/{RosterWidget-BJMx0a8Z.js → RosterWidget-BrIq61HR.js} +2 -2
  256. package/dashboard/dist/assets/RosterWidget-BrIq61HR.js.map +1 -0
  257. package/dashboard/dist/assets/RunAsSelector-D6zQrCNr.js +2 -0
  258. package/dashboard/dist/assets/{RunAsSelector-Co6s9bqA.js.map → RunAsSelector-D6zQrCNr.js.map} +1 -1
  259. package/dashboard/dist/assets/ScanCodesPage-B2S9DR2f.js +2 -0
  260. package/dashboard/dist/assets/{ScanCodesPage-C2TETaj5.js.map → ScanCodesPage-B2S9DR2f.js.map} +1 -1
  261. package/dashboard/dist/assets/ScanSchemeDetailPage-gpxKN-pL.js +5 -0
  262. package/dashboard/dist/assets/ScanSchemeDetailPage-gpxKN-pL.js.map +1 -0
  263. package/dashboard/dist/assets/ScanStationPage-B-UTgXsG.js +2 -0
  264. package/dashboard/dist/assets/ScanStationPage-B-UTgXsG.js.map +1 -0
  265. package/dashboard/dist/assets/{SchemeMatchFields-9H7SmbED.js → SchemeMatchFields-BK24aa7K.js} +2 -2
  266. package/dashboard/dist/assets/{SchemeMatchFields-9H7SmbED.js.map → SchemeMatchFields-BK24aa7K.js.map} +1 -1
  267. package/dashboard/dist/assets/{ScopeBadge-DGz79rmG.js → ScopeBadge-ofLQ6HW-.js} +2 -2
  268. package/dashboard/dist/assets/{ScopeBadge-DGz79rmG.js.map → ScopeBadge-ofLQ6HW-.js.map} +1 -1
  269. package/dashboard/dist/assets/{StickyPagination-miUdVAKw.js → StickyPagination-CgVv7vc_.js} +2 -2
  270. package/dashboard/dist/assets/{StickyPagination-miUdVAKw.js.map → StickyPagination-CgVv7vc_.js.map} +1 -1
  271. package/dashboard/dist/assets/{StreamMessageDetail-D5Rk7pn7.js → StreamMessageDetail-B9sxDVw4.js} +2 -2
  272. package/dashboard/dist/assets/{StreamMessageDetail-D5Rk7pn7.js.map → StreamMessageDetail-B9sxDVw4.js.map} +1 -1
  273. package/dashboard/dist/assets/{SwimlaneTimeline-B1QY1ZzH.js → SwimlaneTimeline-DQc0CYSL.js} +2 -2
  274. package/dashboard/dist/assets/{SwimlaneTimeline-B1QY1ZzH.js.map → SwimlaneTimeline-DQc0CYSL.js.map} +1 -1
  275. package/dashboard/dist/assets/{TagInput-DaIdhv3h.js → TagInput-47qVYzke.js} +2 -2
  276. package/dashboard/dist/assets/{TagInput-DaIdhv3h.js.map → TagInput-47qVYzke.js.map} +1 -1
  277. package/dashboard/dist/assets/{TaskDetailPage-DKUM37o8.js → TaskDetailPage-D6VOsA1f.js} +2 -2
  278. package/dashboard/dist/assets/{TaskDetailPage-DKUM37o8.js.map → TaskDetailPage-D6VOsA1f.js.map} +1 -1
  279. package/dashboard/dist/assets/{TaskQueuePill-sUA1nZe-.js → TaskQueuePill-C5KmdXAl.js} +2 -2
  280. package/dashboard/dist/assets/{TaskQueuePill-sUA1nZe-.js.map → TaskQueuePill-C5KmdXAl.js.map} +1 -1
  281. package/dashboard/dist/assets/{TasksListPage-CUulwvm-.js → TasksListPage-DG8hvO8G.js} +2 -2
  282. package/dashboard/dist/assets/{TasksListPage-CUulwvm-.js.map → TasksListPage-DG8hvO8G.js.map} +1 -1
  283. package/dashboard/dist/assets/{TimeAgo-CHTelacB.js → TimeAgo-CL02EhFi.js} +2 -2
  284. package/dashboard/dist/assets/{TimeAgo-CHTelacB.js.map → TimeAgo-CL02EhFi.js.map} +1 -1
  285. package/dashboard/dist/assets/{TimestampCell-NanLWLKo.js → TimestampCell-BE7oKVJg.js} +2 -2
  286. package/dashboard/dist/assets/{TimestampCell-NanLWLKo.js.map → TimestampCell-BE7oKVJg.js.map} +1 -1
  287. package/dashboard/dist/assets/{ToolPill-CpBAFdEX.js → ToolPill-Cp9Drk1s.js} +2 -2
  288. package/dashboard/dist/assets/{ToolPill-CpBAFdEX.js.map → ToolPill-Cp9Drk1s.js.map} +1 -1
  289. package/dashboard/dist/assets/{ToolTestPanel-CF1CHzgz.js → ToolTestPanel-CRecLh6S.js} +2 -2
  290. package/dashboard/dist/assets/{ToolTestPanel-CF1CHzgz.js.map → ToolTestPanel-CRecLh6S.js.map} +1 -1
  291. package/dashboard/dist/assets/{TopicDetailPage-CGO8XV_a.js → TopicDetailPage-QzkinTfN.js} +3 -3
  292. package/dashboard/dist/assets/{TopicDetailPage-CGO8XV_a.js.map → TopicDetailPage-QzkinTfN.js.map} +1 -1
  293. package/dashboard/dist/assets/{TopicsPage-Bt8gOKYr.js → TopicsPage-D8dW6J65.js} +2 -2
  294. package/dashboard/dist/assets/{TopicsPage-Bt8gOKYr.js.map → TopicsPage-D8dW6J65.js.map} +1 -1
  295. package/dashboard/dist/assets/{UserName-DKXnK7DD.js → UserName-Dw3R_zrl.js} +2 -2
  296. package/dashboard/dist/assets/{UserName-DKXnK7DD.js.map → UserName-Dw3R_zrl.js.map} +1 -1
  297. package/dashboard/dist/assets/WorkflowExecutionPage-BTocv8or.js +2 -0
  298. package/dashboard/dist/assets/{WorkflowExecutionPage-Crf7AIFc.js.map → WorkflowExecutionPage-BTocv8or.js.map} +1 -1
  299. package/dashboard/dist/assets/{WorkflowPill-CKHip3hH.js → WorkflowPill-BiLYq__w.js} +2 -2
  300. package/dashboard/dist/assets/{WorkflowPill-CKHip3hH.js.map → WorkflowPill-BiLYq__w.js.map} +1 -1
  301. package/dashboard/dist/assets/WorkflowsDashboard-CIPEt3et.js +2 -0
  302. package/dashboard/dist/assets/{WorkflowsDashboard--isjt06C.js.map → WorkflowsDashboard-CIPEt3et.js.map} +1 -1
  303. package/dashboard/dist/assets/{WorkflowsOverview-D7Oqf4-V.js → WorkflowsOverview-Bj4MJIE-.js} +2 -2
  304. package/dashboard/dist/assets/{WorkflowsOverview-D7Oqf4-V.js.map → WorkflowsOverview-Bj4MJIE-.js.map} +1 -1
  305. package/dashboard/dist/assets/{YamlWorkflowDetailPage-B0wxgrGP.js → YamlWorkflowDetailPage-DMEk5k9-.js} +2 -2
  306. package/dashboard/dist/assets/{YamlWorkflowDetailPage-B0wxgrGP.js.map → YamlWorkflowDetailPage-DMEk5k9-.js.map} +1 -1
  307. package/dashboard/dist/assets/{YamlWorkflowsPage-BVdLnm6K.js → YamlWorkflowsPage-F2yyyoiB.js} +2 -2
  308. package/dashboard/dist/assets/{YamlWorkflowsPage-BVdLnm6K.js.map → YamlWorkflowsPage-F2yyyoiB.js.map} +1 -1
  309. package/dashboard/dist/assets/{agents-CHjbjHXA.js → agents-mSgxEPpI.js} +2 -2
  310. package/dashboard/dist/assets/{agents-CHjbjHXA.js.map → agents-mSgxEPpI.js.map} +1 -1
  311. package/dashboard/dist/assets/{bots-WrUhEPWs.js → bots-p4Hp0CV6.js} +2 -2
  312. package/dashboard/dist/assets/{bots-WrUhEPWs.js.map → bots-p4Hp0CV6.js.map} +1 -1
  313. package/dashboard/dist/assets/{capabilities-CunMmkj8.js → capabilities-D_-I_SXR.js} +2 -2
  314. package/dashboard/dist/assets/{capabilities-CunMmkj8.js.map → capabilities-D_-I_SXR.js.map} +1 -1
  315. package/dashboard/dist/assets/{controlplane-D6IZIZoh.js → controlplane-DjdoQnRU.js} +2 -2
  316. package/dashboard/dist/assets/{controlplane-D6IZIZoh.js.map → controlplane-DjdoQnRU.js.map} +1 -1
  317. package/dashboard/dist/assets/{escalation-columns-Bvo6JI4Z.js → escalation-columns-R_IEVQjQ.js} +2 -2
  318. package/dashboard/dist/assets/{escalation-columns-Bvo6JI4Z.js.map → escalation-columns-R_IEVQjQ.js.map} +1 -1
  319. package/dashboard/dist/assets/{escalation-items-DFGRwo49.js → escalation-items-BGZlJMpk.js} +2 -2
  320. package/dashboard/dist/assets/{escalation-items-DFGRwo49.js.map → escalation-items-BGZlJMpk.js.map} +1 -1
  321. package/dashboard/dist/assets/{index-OuKQ_0eB.js → index-BEMdD58x.js} +2 -2
  322. package/dashboard/dist/assets/{index-OuKQ_0eB.js.map → index-BEMdD58x.js.map} +1 -1
  323. package/dashboard/dist/assets/index-BUmz0NMg.css +1 -0
  324. package/dashboard/dist/assets/{index-C7EIu1mG.js → index-BuCEhhnl.js} +2 -2
  325. package/dashboard/dist/assets/{index-C7EIu1mG.js.map → index-BuCEhhnl.js.map} +1 -1
  326. package/dashboard/dist/assets/{index-Bo8QU31k.js → index-BxbQmeqh.js} +2 -2
  327. package/dashboard/dist/assets/{index-Bo8QU31k.js.map → index-BxbQmeqh.js.map} +1 -1
  328. package/dashboard/dist/assets/index-C5osluV3.js +2 -0
  329. package/dashboard/dist/assets/{index-DRK7M1_9.js.map → index-C5osluV3.js.map} +1 -1
  330. package/dashboard/dist/assets/{index-ygxyAKcc.js → index-C_dAJUzh.js} +27 -27
  331. package/dashboard/dist/assets/index-C_dAJUzh.js.map +1 -0
  332. package/dashboard/dist/assets/{index-DRw0FXdX.js → index-D-FYj9jT.js} +2 -2
  333. package/dashboard/dist/assets/{index-DRw0FXdX.js.map → index-D-FYj9jT.js.map} +1 -1
  334. package/dashboard/dist/assets/{index-B8qrHwp9.js → index-D6K_IgCz.js} +2 -2
  335. package/dashboard/dist/assets/{index-B8qrHwp9.js.map → index-D6K_IgCz.js.map} +1 -1
  336. package/dashboard/dist/assets/index-D7L_VoBD.js +2 -0
  337. package/dashboard/dist/assets/index-D7L_VoBD.js.map +1 -0
  338. package/dashboard/dist/assets/{index-BZFSXEkr.js → index-D9RAN9sA.js} +2 -2
  339. package/dashboard/dist/assets/{index-BZFSXEkr.js.map → index-D9RAN9sA.js.map} +1 -1
  340. package/dashboard/dist/assets/{index-DCJ483vt.js → index-DUYAGxwc.js} +2 -2
  341. package/dashboard/dist/assets/{index-DCJ483vt.js.map → index-DUYAGxwc.js.map} +1 -1
  342. package/dashboard/dist/assets/{index-boT612Jo.js → index-Dk2KKo0z.js} +2 -2
  343. package/dashboard/dist/assets/{index-boT612Jo.js.map → index-Dk2KKo0z.js.map} +1 -1
  344. package/dashboard/dist/assets/{index-CpCchhQv.js → index-DlJkZ12b.js} +2 -2
  345. package/dashboard/dist/assets/{index-CpCchhQv.js.map → index-DlJkZ12b.js.map} +1 -1
  346. package/dashboard/dist/assets/index-FiNThtNU.js +3 -0
  347. package/dashboard/dist/assets/index-FiNThtNU.js.map +1 -0
  348. package/dashboard/dist/assets/{knowledge-BubJBTwg.js → knowledge-DSsPTqkK.js} +2 -2
  349. package/dashboard/dist/assets/{knowledge-BubJBTwg.js.map → knowledge-DSsPTqkK.js.map} +1 -1
  350. package/dashboard/dist/assets/{machines-DSm5NFgs.js → machines-DSgGtqqr.js} +2 -2
  351. package/dashboard/dist/assets/{machines-DSm5NFgs.js.map → machines-DSgGtqqr.js.map} +1 -1
  352. package/dashboard/dist/assets/{mcp-D6MckqOV.js → mcp-Cg-_uLw8.js} +2 -2
  353. package/dashboard/dist/assets/{mcp-D6MckqOV.js.map → mcp-Cg-_uLw8.js.map} +1 -1
  354. package/dashboard/dist/assets/{mcp-query-VyCdOag6.js → mcp-query-DQombEK_.js} +2 -2
  355. package/dashboard/dist/assets/{mcp-query-VyCdOag6.js.map → mcp-query-DQombEK_.js.map} +1 -1
  356. package/dashboard/dist/assets/{personas-CyJc10xe.js → personas-DYrcoVBu.js} +2 -2
  357. package/dashboard/dist/assets/{personas-CyJc10xe.js.map → personas-DYrcoVBu.js.map} +1 -1
  358. package/dashboard/dist/assets/{pipelines-B2inDtx3.js → pipelines-wdb4xsey.js} +2 -2
  359. package/dashboard/dist/assets/{pipelines-B2inDtx3.js.map → pipelines-wdb4xsey.js.map} +1 -1
  360. package/dashboard/dist/assets/{tasks-DOP4d3M6.js → tasks-Bil7gvm9.js} +2 -2
  361. package/dashboard/dist/assets/{tasks-DOP4d3M6.js.map → tasks-Bil7gvm9.js.map} +1 -1
  362. package/dashboard/dist/assets/{topics-CNOjSWpX.js → topics-wBqaVhRR.js} +2 -2
  363. package/dashboard/dist/assets/{topics-CNOjSWpX.js.map → topics-wBqaVhRR.js.map} +1 -1
  364. package/dashboard/dist/assets/{useDebouncedValue-CgO0TGMd.js → useDebouncedValue-CwrY8TpV.js} +2 -2
  365. package/dashboard/dist/assets/{useDebouncedValue-CgO0TGMd.js.map → useDebouncedValue-CwrY8TpV.js.map} +1 -1
  366. package/dashboard/dist/assets/{useNamespace-BWHvUKtK.js → useNamespace-Sod_xApz.js} +2 -2
  367. package/dashboard/dist/assets/{useNamespace-BWHvUKtK.js.map → useNamespace-Sod_xApz.js.map} +1 -1
  368. package/dashboard/dist/assets/{useYamlActivityEvents-BZQ__ZGD.js → useYamlActivityEvents-CKLInV3C.js} +2 -2
  369. package/dashboard/dist/assets/{useYamlActivityEvents-BZQ__ZGD.js.map → useYamlActivityEvents-CKLInV3C.js.map} +1 -1
  370. package/dashboard/dist/assets/{validate-CAin6WM_.js → validate-CYhW1xMJ.js} +2 -2
  371. package/dashboard/dist/assets/{validate-CAin6WM_.js.map → validate-CYhW1xMJ.js.map} +1 -1
  372. package/dashboard/dist/assets/{vendor-icons-en0_uSRD.js → vendor-icons-ed7mYQw4.js} +2 -2
  373. package/dashboard/dist/assets/{vendor-icons-en0_uSRD.js.map → vendor-icons-ed7mYQw4.js.map} +1 -1
  374. package/dashboard/dist/assets/{yaml-workflows-Dyln3od-.js → yaml-workflows-C20qHo3L.js} +2 -2
  375. package/dashboard/dist/assets/{yaml-workflows-Dyln3od-.js.map → yaml-workflows-C20qHo3L.js.map} +1 -1
  376. package/dashboard/dist/index.html +3 -3
  377. package/docs/api/http/escalations.md +15 -0
  378. package/docs/api/http/labels.md +115 -0
  379. package/docs/api/http/users.md +2 -0
  380. package/docs/api/mcp/admin.md +76 -1
  381. package/docs/code-owned-configuration.md +1 -1
  382. package/docs/dashboard.md +2 -2
  383. package/docs/hitl/x-lt-roster.md +2 -0
  384. package/docs/hitl/x-lt-scan.md +12 -0
  385. package/docs/iam.md +12 -0
  386. package/docs/label-sheets.md +267 -0
  387. package/docs/scan-codes.md +93 -9
  388. package/package.json +4 -1
  389. package/dashboard/dist/assets/AvailableEscalationsPage-GFn8Sgg1.js +0 -2
  390. package/dashboard/dist/assets/AvailableEscalationsPage-GFn8Sgg1.js.map +0 -1
  391. package/dashboard/dist/assets/BulkAssignModal-CmLVxkz-.js +0 -2
  392. package/dashboard/dist/assets/HomePage-67xXjKjN.js +0 -2
  393. package/dashboard/dist/assets/McpRunDetailPage-qHRQ1pEY.js +0 -2
  394. package/dashboard/dist/assets/OperatorDashboard-el5BquXN.js +0 -2
  395. package/dashboard/dist/assets/PersonaDetailPage-B_tb8gfl.js +0 -2
  396. package/dashboard/dist/assets/RoleDetailPage-DtU7vsJm.js +0 -8
  397. package/dashboard/dist/assets/RolesPage-BE7RWt9q.js +0 -2
  398. package/dashboard/dist/assets/RosterWidget-BJMx0a8Z.js.map +0 -1
  399. package/dashboard/dist/assets/RunAsSelector-Co6s9bqA.js +0 -2
  400. package/dashboard/dist/assets/ScanCodesPage-C2TETaj5.js +0 -2
  401. package/dashboard/dist/assets/ScanSchemeDetailPage-C2UgU8l-.js +0 -5
  402. package/dashboard/dist/assets/ScanSchemeDetailPage-C2UgU8l-.js.map +0 -1
  403. package/dashboard/dist/assets/ScanStationPage-nWYz-OD3.js +0 -2
  404. package/dashboard/dist/assets/ScanStationPage-nWYz-OD3.js.map +0 -1
  405. package/dashboard/dist/assets/WorkflowExecutionPage-Crf7AIFc.js +0 -2
  406. package/dashboard/dist/assets/WorkflowsDashboard--isjt06C.js +0 -2
  407. package/dashboard/dist/assets/index-B95LbYhW.js +0 -2
  408. package/dashboard/dist/assets/index-B95LbYhW.js.map +0 -1
  409. package/dashboard/dist/assets/index-BmzscsXK.css +0 -1
  410. package/dashboard/dist/assets/index-DRK7M1_9.js +0 -2
  411. package/dashboard/dist/assets/index-P-DlgAWj.js +0 -3
  412. package/dashboard/dist/assets/index-P-DlgAWj.js.map +0 -1
  413. package/dashboard/dist/assets/index-ygxyAKcc.js.map +0 -1
@@ -21,6 +21,10 @@ const features_1 = require("../modules/features");
21
21
  const search_1 = require("../modules/search");
22
22
  const branding_1 = require("../modules/branding");
23
23
  const display_1 = require("../modules/display");
24
+ const transports_1 = require("../lib/labels/transports");
25
+ const media_1 = require("../services/labels/media");
26
+ const render_pdf_1 = require("../services/labels/render-pdf");
27
+ const redact_1 = require("../services/user/redact");
24
28
  const socket_auth_1 = require("./socket-auth");
25
29
  /**
26
30
  * Register all adapters (logging, telemetry, events, maintenance,
@@ -32,6 +36,18 @@ function registerAdapters(startConfig) {
32
36
  (0, search_1.configureSearch)(startConfig.search);
33
37
  (0, branding_1.configureBranding)(startConfig.branding);
34
38
  (0, display_1.configureDisplay)(startConfig.display);
39
+ // Label sheets: host media first, so the default may name one.
40
+ if (startConfig.labels?.media)
41
+ (0, media_1.registerLabelMedia)(startConfig.labels.media);
42
+ if (startConfig.labels?.defaultMedia)
43
+ (0, media_1.setDefaultLabelMedia)(startConfig.labels.defaultMedia);
44
+ if (startConfig.labels?.font)
45
+ (0, render_pdf_1.registerLabelFonts)(startConfig.labels.font);
46
+ if (startConfig.labels?.protectIdentityKeys !== undefined)
47
+ (0, redact_1.setIdentityKeyProtection)(startConfig.labels.protectIdentityKeys);
48
+ for (const [name, transport] of Object.entries(startConfig.labels?.transports ?? {})) {
49
+ transports_1.labelTransportRegistry.register(name, transport);
50
+ }
35
51
  // Logging (register first so subsequent log calls use it)
36
52
  if (startConfig.logging?.adapter) {
37
53
  logger_1.loggerRegistry.register(startConfig.logging.adapter);
@@ -102,8 +102,11 @@ async function collectWorkers(startConfig) {
102
102
  ];
103
103
  logger_1.loggerRegistry.info('[long-tail] system workflows loaded');
104
104
  if (startConfig.examples) {
105
- const { exampleWorkers } = await Promise.resolve().then(() => __importStar(require('../examples')));
105
+ const { exampleWorkers, storageDropTransport, STORAGE_DROP_TRANSPORT } = await Promise.resolve().then(() => __importStar(require('../examples')));
106
106
  workers.push(...exampleWorkers);
107
+ const { labelTransportRegistry } = await Promise.resolve().then(() => __importStar(require('../lib/labels/transports')));
108
+ if (!labelTransportRegistry.has(STORAGE_DROP_TRANSPORT))
109
+ labelTransportRegistry.register(STORAGE_DROP_TRANSPORT, storageDropTransport);
107
110
  logger_1.loggerRegistry.info('[long-tail] example workflows loaded');
108
111
  }
109
112
  return { workers, builtinMcpServerFactories };
@@ -499,10 +502,11 @@ async function startWorkers(startConfig, workers, builtinMcpServerFactories) {
499
502
  // applies first — rule validation reads its kind.
500
503
  if (startConfig.scanSchemes?.length) {
501
504
  const { seedScanScheme, seedScanRule, applyScanScheme, applyScanRule, listScanSchemes, listScanRules, } = await Promise.resolve().then(() => __importStar(require('../services/scan-code')));
505
+ const { applyLabelTemplate, seedLabelTemplate, listLabelTemplates } = await Promise.resolve().then(() => __importStar(require('../services/labels/templates')));
502
506
  const scanReport = (0, apply_report_1.newSurfaceReport)();
503
507
  for (const scheme of startConfig.scanSchemes) {
504
508
  const codeOwned = (0, apply_report_1.ownedByCode)(scheme.reset, configSource);
505
- const { rules, reset: _reset, ...schemeInput } = scheme;
509
+ const { rules, labels, reset: _reset, ...schemeInput } = scheme;
506
510
  try {
507
511
  if (codeOwned) {
508
512
  let outcome = await applyScanScheme(schemeInput);
@@ -511,6 +515,11 @@ async function startWorkers(startConfig, workers, builtinMcpServerFactories) {
511
515
  if (ruleOutcome === 'applied')
512
516
  outcome = 'applied';
513
517
  }
518
+ for (const label of labels ?? []) {
519
+ const labelOutcome = await applyLabelTemplate({ scheme_version: scheme.version, ...label });
520
+ if (labelOutcome === 'applied')
521
+ outcome = 'applied';
522
+ }
514
523
  (0, apply_report_1.recordOutcome)(scanReport, `scheme ${scheme.version}`, outcome);
515
524
  if (outcome === 'applied')
516
525
  logger_1.loggerRegistry.info(`[long-tail] scan scheme applied: ${scheme.version}`);
@@ -519,12 +528,19 @@ async function startWorkers(startConfig, workers, builtinMcpServerFactories) {
519
528
  scanReport.orphans.push(...existingRules
520
529
  .filter((r) => !declaredCategories.has(r.category))
521
530
  .map((r) => `${scheme.version}/${r.category}`));
531
+ const declaredLabels = new Set((labels ?? []).map((l) => l.name));
532
+ scanReport.orphans.push(...(await listLabelTemplates(scheme.version))
533
+ .filter((t) => !declaredLabels.has(t.name))
534
+ .map((t) => `${scheme.version}/label:${t.name}`));
522
535
  }
523
536
  else {
524
537
  const inserted = await seedScanScheme(schemeInput);
525
538
  for (const rule of rules ?? []) {
526
539
  await seedScanRule({ scheme_version: scheme.version, ...rule });
527
540
  }
541
+ for (const label of labels ?? []) {
542
+ await seedLabelTemplate({ scheme_version: scheme.version, ...label });
543
+ }
528
544
  (0, apply_report_1.recordOutcome)(scanReport, `scheme ${scheme.version}`, 'db-owned');
529
545
  if (inserted)
530
546
  logger_1.loggerRegistry.info(`[long-tail] scan scheme seeded: ${scheme.version}`);
@@ -60,6 +60,7 @@ const exports_1 = require("./exports");
60
60
  const overview_1 = require("./overview");
61
61
  const diagnostics_1 = require("./diagnostics");
62
62
  const scan_codes_1 = require("./scan-codes");
63
+ const labels_1 = require("./labels");
63
64
  const domain_context_1 = require("./domain-context");
64
65
  const announcements_1 = require("./announcements");
65
66
  let server = null;
@@ -91,6 +92,7 @@ async function createAdminServer(options) {
91
92
  (0, overview_1.registerOverviewTools)(instance);
92
93
  (0, diagnostics_1.registerDiagnosticsTools)(instance);
93
94
  (0, scan_codes_1.registerScanCodeTools)(instance);
95
+ (0, labels_1.registerLabelTools)(instance);
94
96
  (0, domain_context_1.registerDomainContextTools)(instance);
95
97
  (0, announcements_1.registerAnnouncementTools)(instance);
96
98
  logger_1.loggerRegistry.info(`[lt-mcp:admin] ${name} ready (${(0, registered_tools_1.registeredToolCount)(instance)} tools registered)`);
@@ -0,0 +1,192 @@
1
+ import { z } from 'zod';
2
+ export declare const listLabelTemplatesSchema: z.ZodObject<{
3
+ scheme: z.ZodOptional<z.ZodNumber>;
4
+ }, "strip", z.ZodTypeAny, {
5
+ scheme?: number | undefined;
6
+ }, {
7
+ scheme?: number | undefined;
8
+ }>;
9
+ export declare const upsertLabelTemplateSchema: z.ZodObject<{
10
+ name: z.ZodString;
11
+ scheme_version: z.ZodNumber;
12
+ title: z.ZodString;
13
+ description: z.ZodOptional<z.ZodString>;
14
+ codes: z.ZodArray<z.ZodObject<{
15
+ category: z.ZodString;
16
+ caption: z.ZodOptional<z.ZodString>;
17
+ tone: z.ZodEnum<["solid", "outline", "plain"]>;
18
+ }, "strip", z.ZodTypeAny, {
19
+ category: string;
20
+ tone: "solid" | "outline" | "plain";
21
+ caption?: string | undefined;
22
+ }, {
23
+ category: string;
24
+ tone: "solid" | "outline" | "plain";
25
+ caption?: string | undefined;
26
+ }>, "many">;
27
+ text: z.ZodOptional<z.ZodObject<{
28
+ title: z.ZodOptional<z.ZodString>;
29
+ lines: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
30
+ }, "strip", z.ZodTypeAny, {
31
+ title?: string | undefined;
32
+ lines?: string[] | undefined;
33
+ }, {
34
+ title?: string | undefined;
35
+ lines?: string[] | undefined;
36
+ }>>;
37
+ symbology: z.ZodOptional<z.ZodEnum<["code128", "qrcode", "datamatrix"]>>;
38
+ human_readable: z.ZodOptional<z.ZodBoolean>;
39
+ media: z.ZodOptional<z.ZodString>;
40
+ sensitive: z.ZodOptional<z.ZodBoolean>;
41
+ enabled: z.ZodOptional<z.ZodBoolean>;
42
+ expected_revision: z.ZodOptional<z.ZodNumber>;
43
+ }, "strip", z.ZodTypeAny, {
44
+ name: string;
45
+ scheme_version: number;
46
+ title: string;
47
+ codes: {
48
+ category: string;
49
+ tone: "solid" | "outline" | "plain";
50
+ caption?: string | undefined;
51
+ }[];
52
+ enabled?: boolean | undefined;
53
+ text?: {
54
+ title?: string | undefined;
55
+ lines?: string[] | undefined;
56
+ } | undefined;
57
+ description?: string | undefined;
58
+ symbology?: "code128" | "qrcode" | "datamatrix" | undefined;
59
+ human_readable?: boolean | undefined;
60
+ media?: string | undefined;
61
+ sensitive?: boolean | undefined;
62
+ expected_revision?: number | undefined;
63
+ }, {
64
+ name: string;
65
+ scheme_version: number;
66
+ title: string;
67
+ codes: {
68
+ category: string;
69
+ tone: "solid" | "outline" | "plain";
70
+ caption?: string | undefined;
71
+ }[];
72
+ enabled?: boolean | undefined;
73
+ text?: {
74
+ title?: string | undefined;
75
+ lines?: string[] | undefined;
76
+ } | undefined;
77
+ description?: string | undefined;
78
+ symbology?: "code128" | "qrcode" | "datamatrix" | undefined;
79
+ human_readable?: boolean | undefined;
80
+ media?: string | undefined;
81
+ sensitive?: boolean | undefined;
82
+ expected_revision?: number | undefined;
83
+ }>;
84
+ export declare const deleteLabelTemplateSchema: z.ZodObject<{
85
+ name: z.ZodString;
86
+ }, "strip", z.ZodTypeAny, {
87
+ name: string;
88
+ }, {
89
+ name: string;
90
+ }>;
91
+ export declare const renderLabelSheetSchema: z.ZodObject<{
92
+ template: z.ZodString;
93
+ source: z.ZodUnion<[z.ZodObject<{
94
+ kind: z.ZodLiteral<"list">;
95
+ text: z.ZodString;
96
+ }, "strip", z.ZodTypeAny, {
97
+ kind: "list";
98
+ text: string;
99
+ }, {
100
+ kind: "list";
101
+ text: string;
102
+ }>, z.ZodObject<{
103
+ kind: z.ZodLiteral<"range">;
104
+ prefix: z.ZodOptional<z.ZodString>;
105
+ from: z.ZodNumber;
106
+ to: z.ZodNumber;
107
+ pad: z.ZodOptional<z.ZodNumber>;
108
+ suffix: z.ZodOptional<z.ZodString>;
109
+ }, "strip", z.ZodTypeAny, {
110
+ kind: "range";
111
+ from: number;
112
+ to: number;
113
+ prefix?: string | undefined;
114
+ suffix?: string | undefined;
115
+ pad?: number | undefined;
116
+ }, {
117
+ kind: "range";
118
+ from: number;
119
+ to: number;
120
+ prefix?: string | undefined;
121
+ suffix?: string | undefined;
122
+ pad?: number | undefined;
123
+ }>, z.ZodObject<{
124
+ kind: z.ZodLiteral<"escalations">;
125
+ ids: z.ZodArray<z.ZodString, "many">;
126
+ }, "strip", z.ZodTypeAny, {
127
+ kind: "escalations";
128
+ ids: string[];
129
+ }, {
130
+ kind: "escalations";
131
+ ids: string[];
132
+ }>, z.ZodObject<{
133
+ kind: z.ZodLiteral<"facets">;
134
+ query: z.ZodRecord<z.ZodString, z.ZodAny>;
135
+ }, "strip", z.ZodTypeAny, {
136
+ kind: "facets";
137
+ query: Record<string, any>;
138
+ }, {
139
+ kind: "facets";
140
+ query: Record<string, any>;
141
+ }>]>;
142
+ media: z.ZodOptional<z.ZodString>;
143
+ startPosition: z.ZodOptional<z.ZodNumber>;
144
+ copies: z.ZodOptional<z.ZodNumber>;
145
+ format: z.ZodEnum<["pdf", "zpl"]>;
146
+ }, "strip", z.ZodTypeAny, {
147
+ source: {
148
+ kind: "list";
149
+ text: string;
150
+ } | {
151
+ kind: "range";
152
+ from: number;
153
+ to: number;
154
+ prefix?: string | undefined;
155
+ suffix?: string | undefined;
156
+ pad?: number | undefined;
157
+ } | {
158
+ kind: "escalations";
159
+ ids: string[];
160
+ } | {
161
+ kind: "facets";
162
+ query: Record<string, any>;
163
+ };
164
+ format: "pdf" | "zpl";
165
+ template: string;
166
+ media?: string | undefined;
167
+ startPosition?: number | undefined;
168
+ copies?: number | undefined;
169
+ }, {
170
+ source: {
171
+ kind: "list";
172
+ text: string;
173
+ } | {
174
+ kind: "range";
175
+ from: number;
176
+ to: number;
177
+ prefix?: string | undefined;
178
+ suffix?: string | undefined;
179
+ pad?: number | undefined;
180
+ } | {
181
+ kind: "escalations";
182
+ ids: string[];
183
+ } | {
184
+ kind: "facets";
185
+ query: Record<string, any>;
186
+ };
187
+ format: "pdf" | "zpl";
188
+ template: string;
189
+ media?: string | undefined;
190
+ startPosition?: number | undefined;
191
+ copies?: number | undefined;
192
+ }>;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderLabelSheetSchema = exports.deleteLabelTemplateSchema = exports.upsertLabelTemplateSchema = exports.listLabelTemplatesSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const tone = zod_1.z.enum(['solid', 'outline', 'plain']);
6
+ const symbology = zod_1.z.enum(['code128', 'qrcode', 'datamatrix']);
7
+ exports.listLabelTemplatesSchema = zod_1.z.object({
8
+ scheme: zod_1.z.number().int().optional().describe('Only templates for this scan scheme version'),
9
+ });
10
+ exports.upsertLabelTemplateSchema = zod_1.z.object({
11
+ name: zod_1.z.string().describe('Template id: lowercase letters, digits and dashes'),
12
+ scheme_version: zod_1.z.number().int().describe('The scan scheme whose codes the label prints'),
13
+ title: zod_1.z.string().describe('Display name in pickers'),
14
+ description: zod_1.z.string().optional(),
15
+ codes: zod_1.z.array(zod_1.z.object({
16
+ category: zod_1.z.string().describe('A rule category of the scheme, 0-9'),
17
+ caption: zod_1.z.string().optional().describe('The act printed beside the code; defaults to the rule name'),
18
+ tone: tone.describe('Caption band: solid (filled), outline, or plain'),
19
+ })).min(1).max(4),
20
+ text: zod_1.z.object({
21
+ title: zod_1.z.string().optional().describe('Largest line, in label tokens: {target}, {item.<facet>}, {user.<key>}, {scheme.name}'),
22
+ lines: zod_1.z.array(zod_1.z.string()).max(2).optional(),
23
+ }).optional(),
24
+ symbology: symbology.optional(),
25
+ human_readable: zod_1.z.boolean().optional().describe('Print the code as text under the symbol'),
26
+ media: zod_1.z.string().optional().describe('Default media preset id, e.g. a4-l7160'),
27
+ sensitive: zod_1.z.boolean().optional().describe('Ask for confirmation and record subjects when printing'),
28
+ enabled: zod_1.z.boolean().optional(),
29
+ expected_revision: zod_1.z.number().int().optional().describe('Write only if the stored revision matches'),
30
+ });
31
+ exports.deleteLabelTemplateSchema = zod_1.z.object({
32
+ name: zod_1.z.string(),
33
+ });
34
+ exports.renderLabelSheetSchema = zod_1.z.object({
35
+ template: zod_1.z.string().describe('Label template name'),
36
+ source: zod_1.z.union([
37
+ zod_1.z.object({ kind: zod_1.z.literal('list'), text: zod_1.z.string().describe('One target per line; a header row starting with "target" names {item.<column>} tokens') }),
38
+ zod_1.z.object({ kind: zod_1.z.literal('range'), prefix: zod_1.z.string().optional(), from: zod_1.z.number().int(), to: zod_1.z.number().int(), pad: zod_1.z.number().int().optional(), suffix: zod_1.z.string().optional() }),
39
+ zod_1.z.object({ kind: zod_1.z.literal('escalations'), ids: zod_1.z.array(zod_1.z.string()) }),
40
+ zod_1.z.object({ kind: zod_1.z.literal('facets'), query: zod_1.z.record(zod_1.z.string(), zod_1.z.any()).describe('A FacetQuery: role, facets, …') }),
41
+ ]),
42
+ media: zod_1.z.string().optional().describe('Media preset id; defaults to the template media'),
43
+ startPosition: zod_1.z.number().int().optional(),
44
+ copies: zod_1.z.number().int().optional(),
45
+ format: zod_1.z.enum(['pdf', 'zpl']).describe('pdf for sheet stock, zpl for thermal media'),
46
+ });
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Label template and label sheet tools — mirrors routes/labels.ts
3
+ *
4
+ * render_label_sheet issues a sheet as the caller and stores it as a file
5
+ * with a short-lived link. It prints item labels only: identity templates
6
+ * (badges) are printed by people, with a confirmation, never by an agent.
7
+ */
8
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
9
+ export declare function registerLabelTools(server: McpServer): void;
@@ -0,0 +1,101 @@
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.registerLabelTools = registerLabelTools;
37
+ const labelsApi = __importStar(require("../../../api/labels"));
38
+ const labels_1 = require("../../../services/labels");
39
+ const scan_code_1 = require("../../../services/scan-code");
40
+ const storage_1 = require("../../../lib/storage");
41
+ const types_1 = require("../../../types");
42
+ const caller_auth_1 = require("../caller-auth");
43
+ const labels_schemas_1 = require("./labels-schemas");
44
+ const SIGNED_URL_SECONDS = 600;
45
+ function asText(payload, isError = false) {
46
+ return { ...(isError ? { isError: true } : {}), content: [{ type: 'text', text: JSON.stringify(payload) }] };
47
+ }
48
+ function registerLabelTools(server) {
49
+ // mirrors GET /api/labels/templates
50
+ server.registerTool('list_label_templates', {
51
+ title: 'List Label Templates',
52
+ description: 'List label templates: which scan scheme each prints, its codes with captions, text, symbology and default media.',
53
+ inputSchema: labels_schemas_1.listLabelTemplatesSchema,
54
+ }, async (args) => {
55
+ const result = await labelsApi.listLabelTemplates({ scheme: args.scheme });
56
+ return asText(result.data ?? { error: result.error }, !!result.error);
57
+ });
58
+ // mirrors PUT /api/labels/templates/:name
59
+ server.registerTool('upsert_label_template', {
60
+ title: 'Upsert Label Template',
61
+ description: 'Create or replace a label template for a scan scheme: 1-4 of the scheme\'s rules printed as codes, ' +
62
+ 'each beside its caption in a solid, outline or plain band; a title and up to two lines in label tokens.',
63
+ inputSchema: labels_schemas_1.upsertLabelTemplateSchema,
64
+ }, async (args) => {
65
+ const result = await labelsApi.upsertLabelTemplate(args);
66
+ return asText(result.data ?? { error: result.error }, !!result.error);
67
+ });
68
+ // mirrors DELETE /api/labels/templates/:name
69
+ server.registerTool('delete_label_template', { title: 'Delete Label Template', description: 'Delete one label template by name.', inputSchema: labels_schemas_1.deleteLabelTemplateSchema }, async (args) => {
70
+ const result = await labelsApi.deleteLabelTemplate(args);
71
+ return asText(result.data ?? { error: result.error }, !!result.error);
72
+ });
73
+ // mirrors POST /api/labels/issue (item templates only)
74
+ server.registerTool('render_label_sheet', {
75
+ title: 'Render Label Sheet',
76
+ description: 'Issue a sheet of item labels as the caller and store it as a PDF (sheet stock) or ZPL (thermal) file. ' +
77
+ 'Returns the job id, the file ref, a link valid for 10 minutes, and warnings for codes that would fail on the floor. ' +
78
+ 'Badge (identity) templates are refused: people print badges.',
79
+ inputSchema: labels_schemas_1.renderLabelSheetSchema,
80
+ }, async (args, extra) => {
81
+ const template = await (0, labels_1.getLabelTemplate)(args.template);
82
+ const scheme = template ? await (0, scan_code_1.getScanScheme)(template.scheme_version) : null;
83
+ if (template && (template.sensitive || scheme?.kind === types_1.SCAN_SCHEME_KINDS.IDENTITY)) {
84
+ return asText({ error: `"${args.template}" prints credentials or sensitive labels; a person prints it from the dashboard` }, true);
85
+ }
86
+ const result = await labelsApi.issueLabels({
87
+ template: args.template,
88
+ source: args.source,
89
+ layout: { media: args.media, startPosition: args.startPosition, copies: args.copies },
90
+ output: args.format,
91
+ }, await (0, caller_auth_1.callerAuth)(extra));
92
+ if (result.error)
93
+ return asText({ error: result.error }, true);
94
+ const { job, warnings, pdf, zpl } = result.data;
95
+ const key = `labels/${job.id}.${args.format}`;
96
+ const storage = (0, storage_1.getStorageBackend)();
97
+ const { ref } = await storage.write(key, Buffer.from(args.format === 'pdf' ? pdf : zpl));
98
+ const url = await storage.getSignedUrl(key, SIGNED_URL_SECONDS);
99
+ return asText({ jobId: job.id, labelCount: job.label_count, ref, url, warnings });
100
+ });
101
+ }