@hotmeshio/long-tail 0.30.5 → 0.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (373) hide show
  1. package/build/api/labels/errors.d.ts +3 -0
  2. package/build/api/labels/errors.js +15 -0
  3. package/build/api/labels/index.d.ts +2 -0
  4. package/build/api/labels/index.js +17 -0
  5. package/build/api/labels/issue.d.ts +54 -0
  6. package/build/api/labels/issue.js +144 -0
  7. package/build/api/labels/templates.d.ts +29 -0
  8. package/build/api/labels/templates.js +98 -0
  9. package/build/api/users.d.ts +8 -4
  10. package/build/api/users.js +51 -13
  11. package/build/index.d.ts +1 -0
  12. package/build/index.js +4 -2
  13. package/build/lib/db/schemas/044_label_sheets.sql +65 -0
  14. package/build/lib/db/schemas/045_label_job_delivery.sql +14 -0
  15. package/build/lib/labels/transports.d.ts +23 -0
  16. package/build/lib/labels/transports.js +39 -0
  17. package/build/modules/auth.d.ts +2 -0
  18. package/build/modules/auth.js +3 -1
  19. package/build/modules/capabilities.d.ts +5 -1
  20. package/build/modules/capabilities.js +38 -8
  21. package/build/modules/config.d.ts +10 -0
  22. package/build/modules/config.js +10 -0
  23. package/build/routes/index.js +2 -0
  24. package/build/routes/labels.d.ts +2 -0
  25. package/build/routes/labels.js +135 -0
  26. package/build/routes/users.js +1 -1
  27. package/build/scripts/bambu-boat.d.ts +4 -2
  28. package/build/scripts/bambu-boat.js +4 -2
  29. package/build/scripts/bambu-print.d.ts +2 -1
  30. package/build/scripts/bambu-print.js +7 -3
  31. package/build/scripts/machine-line.js +2 -1
  32. package/build/services/labels/content.d.ts +13 -0
  33. package/build/services/labels/content.js +81 -0
  34. package/build/services/labels/errors.d.ts +5 -0
  35. package/build/services/labels/errors.js +12 -0
  36. package/build/services/labels/index.d.ts +11 -0
  37. package/build/services/labels/index.js +52 -0
  38. package/build/services/labels/issue.d.ts +38 -0
  39. package/build/services/labels/issue.js +181 -0
  40. package/build/services/labels/jobs.d.ts +37 -0
  41. package/build/services/labels/jobs.js +75 -0
  42. package/build/services/labels/media.d.ts +11 -0
  43. package/build/services/labels/media.js +44 -0
  44. package/build/services/labels/reissue.d.ts +13 -0
  45. package/build/services/labels/reissue.js +65 -0
  46. package/build/services/labels/render-pdf.d.ts +11 -0
  47. package/build/services/labels/render-pdf.js +138 -0
  48. package/build/services/labels/targets.d.ts +18 -0
  49. package/build/services/labels/targets.js +216 -0
  50. package/build/services/labels/templates/index.d.ts +3 -0
  51. package/build/services/labels/templates/index.js +18 -0
  52. package/build/services/labels/templates/read.d.ts +4 -0
  53. package/build/services/labels/templates/read.js +36 -0
  54. package/build/services/labels/templates/sql.d.ts +8 -0
  55. package/build/services/labels/templates/sql.js +50 -0
  56. package/build/services/labels/templates/validate.d.ts +19 -0
  57. package/build/services/labels/templates/validate.js +93 -0
  58. package/build/services/labels/templates/write.d.ts +16 -0
  59. package/build/services/labels/templates/write.js +75 -0
  60. package/build/services/labels/token.d.ts +9 -0
  61. package/build/services/labels/token.js +28 -0
  62. package/build/services/labels/verify.d.ts +4 -0
  63. package/build/services/labels/verify.js +38 -0
  64. package/build/services/scan-code/validate.d.ts +3 -0
  65. package/build/services/scan-code/validate.js +10 -0
  66. package/build/services/user/crud.d.ts +13 -1
  67. package/build/services/user/crud.js +42 -11
  68. package/build/services/user/index.d.ts +3 -2
  69. package/build/services/user/index.js +7 -1
  70. package/build/services/user/redact.d.ts +17 -0
  71. package/build/services/user/redact.js +32 -0
  72. package/build/services/user/sql.d.ts +8 -15
  73. package/build/services/user/sql.js +27 -3
  74. package/build/services/user/types.d.ts +21 -1
  75. package/build/shared/labels/compose.d.ts +12 -0
  76. package/build/shared/labels/compose.js +43 -0
  77. package/build/shared/labels/index.d.ts +9 -0
  78. package/build/shared/labels/index.js +54 -0
  79. package/build/shared/labels/label-content.d.ts +17 -0
  80. package/build/shared/labels/label-content.js +137 -0
  81. package/build/shared/labels/layout.d.ts +23 -0
  82. package/build/shared/labels/layout.js +81 -0
  83. package/build/shared/labels/media.d.ts +22 -0
  84. package/build/shared/labels/media.js +116 -0
  85. package/build/shared/labels/render-svg.d.ts +10 -0
  86. package/build/shared/labels/render-svg.js +58 -0
  87. package/build/shared/labels/render-zpl.d.ts +9 -0
  88. package/build/shared/labels/render-zpl.js +63 -0
  89. package/build/shared/labels/symbol.d.ts +18 -0
  90. package/build/shared/labels/symbol.js +74 -0
  91. package/build/shared/labels/tokens.d.ts +18 -0
  92. package/build/shared/labels/tokens.js +43 -0
  93. package/build/shared/labels/types.d.ts +105 -0
  94. package/build/shared/labels/types.js +11 -0
  95. package/build/start/adapters.js +16 -0
  96. package/build/start/workers.js +18 -2
  97. package/build/system/mcp-servers/admin/index.js +2 -0
  98. package/build/system/mcp-servers/admin/labels-schemas.d.ts +192 -0
  99. package/build/system/mcp-servers/admin/labels-schemas.js +46 -0
  100. package/build/system/mcp-servers/admin/labels.d.ts +9 -0
  101. package/build/system/mcp-servers/admin/labels.js +101 -0
  102. package/build/system/mcp-servers/admin/schemas.d.ts +30 -30
  103. package/build/system/mcp-servers/admin/users.js +1 -1
  104. package/build/system/seed/tool-manifests-admin.js +5 -0
  105. package/build/tsconfig.tsbuildinfo +1 -1
  106. package/build/types/capability.d.ts +2 -1
  107. package/build/types/index.d.ts +2 -1
  108. package/build/types/labels/index.d.ts +4 -0
  109. package/build/types/labels/index.js +2 -0
  110. package/build/types/labels/job.d.ts +51 -0
  111. package/build/types/labels/job.js +2 -0
  112. package/build/types/labels/source.d.ts +44 -0
  113. package/build/types/labels/source.js +2 -0
  114. package/build/types/labels/template.d.ts +46 -0
  115. package/build/types/labels/template.js +2 -0
  116. package/build/types/labels/transport.d.ts +24 -0
  117. package/build/types/labels/transport.js +2 -0
  118. package/build/types/scan-code/rule.d.ts +5 -0
  119. package/build/types/startup.d.ts +37 -0
  120. package/build/types/user.d.ts +2 -0
  121. package/dashboard/dist/assets/{AdminDashboard-D12QiMM5.js → AdminDashboard-BafKaq50.js} +2 -2
  122. package/dashboard/dist/assets/{AdminDashboard-D12QiMM5.js.map → AdminDashboard-BafKaq50.js.map} +1 -1
  123. package/dashboard/dist/assets/{AgentConfigPage-BKQd9b8m.js → AgentConfigPage-CFHf31DT.js} +6 -6
  124. package/dashboard/dist/assets/{AgentConfigPage-BKQd9b8m.js.map → AgentConfigPage-CFHf31DT.js.map} +1 -1
  125. package/dashboard/dist/assets/{AgentDetailPage-ie-DxsIj.js → AgentDetailPage-CEvz5rJr.js} +3 -3
  126. package/dashboard/dist/assets/{AgentDetailPage-ie-DxsIj.js.map → AgentDetailPage-CEvz5rJr.js.map} +1 -1
  127. package/dashboard/dist/assets/{AgentsPage-Nqm2DxCP.js → AgentsPage-DjQaio0O.js} +2 -2
  128. package/dashboard/dist/assets/{AgentsPage-Nqm2DxCP.js.map → AgentsPage-DjQaio0O.js.map} +1 -1
  129. package/dashboard/dist/assets/AvailableEscalationsPage-UB03VTJx.js +2 -0
  130. package/dashboard/dist/assets/AvailableEscalationsPage-UB03VTJx.js.map +1 -0
  131. package/dashboard/dist/assets/{BotPicker-BizdmeJp.js → BotPicker-C7MNWOF7.js} +2 -2
  132. package/dashboard/dist/assets/{BotPicker-BizdmeJp.js.map → BotPicker-C7MNWOF7.js.map} +1 -1
  133. package/dashboard/dist/assets/BulkAssignModal-h5fX-_cV.js +2 -0
  134. package/dashboard/dist/assets/{BulkAssignModal-BWfzPrRk.js.map → BulkAssignModal-h5fX-_cV.js.map} +1 -1
  135. package/dashboard/dist/assets/{CapabilitiesPage-DT8q7Zlh.js → CapabilitiesPage-BIzDl-ZT.js} +2 -2
  136. package/dashboard/dist/assets/{CapabilitiesPage-DT8q7Zlh.js.map → CapabilitiesPage-BIzDl-ZT.js.map} +1 -1
  137. package/dashboard/dist/assets/{CollapsibleSection-al5mqR4O.js → CollapsibleSection-B5TivtEg.js} +2 -2
  138. package/dashboard/dist/assets/{CollapsibleSection-al5mqR4O.js.map → CollapsibleSection-B5TivtEg.js.map} +1 -1
  139. package/dashboard/dist/assets/{ConfirmDeleteModal-BrlVktv2.js → ConfirmDeleteModal-CB4nKePb.js} +2 -2
  140. package/dashboard/dist/assets/{ConfirmDeleteModal-BrlVktv2.js.map → ConfirmDeleteModal-CB4nKePb.js.map} +1 -1
  141. package/dashboard/dist/assets/{ConnectedAppsPage-CLAsJ2yQ.js → ConnectedAppsPage-B3S5gVWw.js} +2 -2
  142. package/dashboard/dist/assets/{ConnectedAppsPage-CLAsJ2yQ.js.map → ConnectedAppsPage-B3S5gVWw.js.map} +1 -1
  143. package/dashboard/dist/assets/{CountdownTimer-D2D68exl.js → CountdownTimer-BHVIq3kA.js} +2 -2
  144. package/dashboard/dist/assets/{CountdownTimer-D2D68exl.js.map → CountdownTimer-BHVIq3kA.js.map} +1 -1
  145. package/dashboard/dist/assets/CredentialConfirmModal-w0AGmCIe.js +2 -0
  146. package/dashboard/dist/assets/CredentialConfirmModal-w0AGmCIe.js.map +1 -0
  147. package/dashboard/dist/assets/{CredentialsPage-DWrZbEI0.js → CredentialsPage-BtCGBJrT.js} +2 -2
  148. package/dashboard/dist/assets/{CredentialsPage-DWrZbEI0.js.map → CredentialsPage-BtCGBJrT.js.map} +1 -1
  149. package/dashboard/dist/assets/{CronLabel-DuXR8iWq.js → CronLabel-BG1rZK-5.js} +2 -2
  150. package/dashboard/dist/assets/{CronLabel-DuXR8iWq.js.map → CronLabel-BG1rZK-5.js.map} +1 -1
  151. package/dashboard/dist/assets/{DropZone-DefYTYQy.js → DropZone-D8ZVdEb5.js} +2 -2
  152. package/dashboard/dist/assets/{DropZone-DefYTYQy.js.map → DropZone-D8ZVdEb5.js.map} +1 -1
  153. package/dashboard/dist/assets/{ElapsedCell-ronqG5-E.js → ElapsedCell-l4m8Yvfv.js} +2 -2
  154. package/dashboard/dist/assets/{ElapsedCell-ronqG5-E.js.map → ElapsedCell-l4m8Yvfv.js.map} +1 -1
  155. package/dashboard/dist/assets/{EntityTimelinePanel-CKsktd84.js → EntityTimelinePanel-BOHlIaxF.js} +2 -2
  156. package/dashboard/dist/assets/{EntityTimelinePanel-CKsktd84.js.map → EntityTimelinePanel-BOHlIaxF.js.map} +1 -1
  157. package/dashboard/dist/assets/{EscalationListSchemaPage-C954ngy3.js → EscalationListSchemaPage-BotlwlX3.js} +3 -3
  158. package/dashboard/dist/assets/{EscalationListSchemaPage-C954ngy3.js.map → EscalationListSchemaPage-BotlwlX3.js.map} +1 -1
  159. package/dashboard/dist/assets/{EscalationSchemaPage-Dij9K0ON.js → EscalationSchemaPage-CfZSVOSD.js} +3 -3
  160. package/dashboard/dist/assets/{EscalationSchemaPage-Dij9K0ON.js.map → EscalationSchemaPage-CfZSVOSD.js.map} +1 -1
  161. package/dashboard/dist/assets/{EscalationTimeline-DT2Owdl0.js → EscalationTimeline-CCKpuRBU.js} +2 -2
  162. package/dashboard/dist/assets/{EscalationTimeline-DT2Owdl0.js.map → EscalationTimeline-CCKpuRBU.js.map} +1 -1
  163. package/dashboard/dist/assets/{EscalationTitleSelect-BdbfMA98.js → EscalationTitleSelect-cpTzPHiW.js} +2 -2
  164. package/dashboard/dist/assets/{EscalationTitleSelect-BdbfMA98.js.map → EscalationTitleSelect-cpTzPHiW.js.map} +1 -1
  165. package/dashboard/dist/assets/{EscalationsOverview-niahs84P.js → EscalationsOverview-DS-nK0qV.js} +2 -2
  166. package/dashboard/dist/assets/{EscalationsOverview-niahs84P.js.map → EscalationsOverview-DS-nK0qV.js.map} +1 -1
  167. package/dashboard/dist/assets/{EventTable-DuLMBrSx.js → EventTable-UfebhJf0.js} +2 -2
  168. package/dashboard/dist/assets/{EventTable-DuLMBrSx.js.map → EventTable-UfebhJf0.js.map} +1 -1
  169. package/dashboard/dist/assets/{FilterBar-jtY6KNpL.js → FilterBar-newA5l-X.js} +2 -2
  170. package/dashboard/dist/assets/{FilterBar-jtY6KNpL.js.map → FilterBar-newA5l-X.js.map} +1 -1
  171. package/dashboard/dist/assets/{GraphInvokePage-DSRAI0Zt.js → GraphInvokePage-6SCDyQcK.js} +2 -2
  172. package/dashboard/dist/assets/{GraphInvokePage-DSRAI0Zt.js.map → GraphInvokePage-6SCDyQcK.js.map} +1 -1
  173. package/dashboard/dist/assets/HomePage-BEc-XdKj.js +2 -0
  174. package/dashboard/dist/assets/{HomePage-BUlSnCg8.js.map → HomePage-BEc-XdKj.js.map} +1 -1
  175. package/dashboard/dist/assets/LabelJobsPage-BO50zXT5.js +2 -0
  176. package/dashboard/dist/assets/LabelJobsPage-BO50zXT5.js.map +1 -0
  177. package/dashboard/dist/assets/{LinePage-BJKhVM9Y.js → LinePage-NYxJQ-ex.js} +3 -3
  178. package/dashboard/dist/assets/{LinePage-BJKhVM9Y.js.map → LinePage-NYxJQ-ex.js.map} +1 -1
  179. package/dashboard/dist/assets/{LinesPage-CrpJua3_.js → LinesPage-RbWTaQRh.js} +3 -3
  180. package/dashboard/dist/assets/{LinesPage-CrpJua3_.js.map → LinesPage-RbWTaQRh.js.map} +1 -1
  181. package/dashboard/dist/assets/{ListToolbar-BN0UPt0L.js → ListToolbar-B-E9-toh.js} +2 -2
  182. package/dashboard/dist/assets/{ListToolbar-BN0UPt0L.js.map → ListToolbar-B-E9-toh.js.map} +1 -1
  183. package/dashboard/dist/assets/{McpOverview-BgbJXYPh.js → McpOverview-Shcf9QhZ.js} +2 -2
  184. package/dashboard/dist/assets/{McpOverview-BgbJXYPh.js.map → McpOverview-Shcf9QhZ.js.map} +1 -1
  185. package/dashboard/dist/assets/{McpQueryDetailPage-BNjm2nrc.js → McpQueryDetailPage-D8kmjy2v.js} +3 -3
  186. package/dashboard/dist/assets/{McpQueryDetailPage-BNjm2nrc.js.map → McpQueryDetailPage-D8kmjy2v.js.map} +1 -1
  187. package/dashboard/dist/assets/{McpQueryPage-DplR8wP9.js → McpQueryPage-ck-o5m8A.js} +2 -2
  188. package/dashboard/dist/assets/{McpQueryPage-DplR8wP9.js.map → McpQueryPage-ck-o5m8A.js.map} +1 -1
  189. package/dashboard/dist/assets/McpRunDetailPage-BJKkM9-3.js +2 -0
  190. package/dashboard/dist/assets/{McpRunDetailPage-BHVEcKV5.js.map → McpRunDetailPage-BJKkM9-3.js.map} +1 -1
  191. package/dashboard/dist/assets/{McpRunsPage-CtlLagcs.js → McpRunsPage-DqhHfD5G.js} +2 -2
  192. package/dashboard/dist/assets/{McpRunsPage-CtlLagcs.js.map → McpRunsPage-DqhHfD5G.js.map} +1 -1
  193. package/dashboard/dist/assets/{NamespacePill-CeSfHH-j.js → NamespacePill--uIaGtrN.js} +2 -2
  194. package/dashboard/dist/assets/{NamespacePill-CeSfHH-j.js.map → NamespacePill--uIaGtrN.js.map} +1 -1
  195. package/dashboard/dist/assets/{OperationsPage-DH67bcW9.js → OperationsPage-D6B9Vv__.js} +3 -3
  196. package/dashboard/dist/assets/{OperationsPage-DH67bcW9.js.map → OperationsPage-D6B9Vv__.js.map} +1 -1
  197. package/dashboard/dist/assets/OperatorDashboard-CIH1cxjQ.js +2 -0
  198. package/dashboard/dist/assets/{OperatorDashboard-CMkgMewd.js.map → OperatorDashboard-CIH1cxjQ.js.map} +1 -1
  199. package/dashboard/dist/assets/{PageHeader-DiGWAQlR.js → PageHeader-DClJ33fV.js} +2 -2
  200. package/dashboard/dist/assets/{PageHeader-DiGWAQlR.js.map → PageHeader-DClJ33fV.js.map} +1 -1
  201. package/dashboard/dist/assets/{PageHeaderWithStats-DwnKQ06j.js → PageHeaderWithStats-C-TrbKQL.js} +2 -2
  202. package/dashboard/dist/assets/{PageHeaderWithStats-DwnKQ06j.js.map → PageHeaderWithStats-C-TrbKQL.js.map} +1 -1
  203. package/dashboard/dist/assets/PersonaDetailPage-DjvfyIph.js +2 -0
  204. package/dashboard/dist/assets/{PersonaDetailPage-Cs1FFdNq.js.map → PersonaDetailPage-DjvfyIph.js.map} +1 -1
  205. package/dashboard/dist/assets/{PersonasPage-CHTRdneF.js → PersonasPage-D7ryA8Vc.js} +2 -2
  206. package/dashboard/dist/assets/{PersonasPage-CHTRdneF.js.map → PersonasPage-D7ryA8Vc.js.map} +1 -1
  207. package/dashboard/dist/assets/{PortalPage-ChB5pBTZ.js → PortalPage-D3ybr0mo.js} +2 -2
  208. package/dashboard/dist/assets/{PortalPage-ChB5pBTZ.js.map → PortalPage-D3ybr0mo.js.map} +1 -1
  209. package/dashboard/dist/assets/PrintLabelsPanel-D0HF5x8b.js +2 -0
  210. package/dashboard/dist/assets/PrintLabelsPanel-D0HF5x8b.js.map +1 -0
  211. package/dashboard/dist/assets/{ProcessDetailPage-CzyqSfal.js → ProcessDetailPage-0xS9EdHe.js} +2 -2
  212. package/dashboard/dist/assets/{ProcessDetailPage-CzyqSfal.js.map → ProcessDetailPage-0xS9EdHe.js.map} +1 -1
  213. package/dashboard/dist/assets/{ProcessesListPage-rOwNkaU9.js → ProcessesListPage-93SMj1Fd.js} +2 -2
  214. package/dashboard/dist/assets/{ProcessesListPage-rOwNkaU9.js.map → ProcessesListPage-93SMj1Fd.js.map} +1 -1
  215. package/dashboard/dist/assets/{ResolverForm-DibnlZ-A.js → ResolverForm-DfogHDzl.js} +5 -5
  216. package/dashboard/dist/assets/{ResolverForm-DibnlZ-A.js.map → ResolverForm-DfogHDzl.js.map} +1 -1
  217. package/dashboard/dist/assets/{RoleDetailPage-Bv9R7iQC.js → RoleDetailPage-DlUOJWSB.js} +3 -3
  218. package/dashboard/dist/assets/{RoleDetailPage-Bv9R7iQC.js.map → RoleDetailPage-DlUOJWSB.js.map} +1 -1
  219. package/dashboard/dist/assets/{RolePill-D3hkAdKf.js → RolePill-BjD1Qw5y.js} +2 -2
  220. package/dashboard/dist/assets/{RolePill-D3hkAdKf.js.map → RolePill-BjD1Qw5y.js.map} +1 -1
  221. package/dashboard/dist/assets/RolesPage-DqhHSvaw.js +2 -0
  222. package/dashboard/dist/assets/{RolesPage-CUP7EH5U.js.map → RolesPage-DqhHSvaw.js.map} +1 -1
  223. package/dashboard/dist/assets/{RosterWidget-DZtmQcjU.js → RosterWidget-BrIq61HR.js} +2 -2
  224. package/dashboard/dist/assets/{RosterWidget-DZtmQcjU.js.map → RosterWidget-BrIq61HR.js.map} +1 -1
  225. package/dashboard/dist/assets/RunAsSelector-D6zQrCNr.js +2 -0
  226. package/dashboard/dist/assets/{RunAsSelector-B9-1vgZr.js.map → RunAsSelector-D6zQrCNr.js.map} +1 -1
  227. package/dashboard/dist/assets/ScanCodesPage-B2S9DR2f.js +2 -0
  228. package/dashboard/dist/assets/{ScanCodesPage-KN_e2rJl.js.map → ScanCodesPage-B2S9DR2f.js.map} +1 -1
  229. package/dashboard/dist/assets/ScanSchemeDetailPage-gpxKN-pL.js +5 -0
  230. package/dashboard/dist/assets/ScanSchemeDetailPage-gpxKN-pL.js.map +1 -0
  231. package/dashboard/dist/assets/ScanStationPage-B-UTgXsG.js +2 -0
  232. package/dashboard/dist/assets/{ScanStationPage-B0qbUOwc.js.map → ScanStationPage-B-UTgXsG.js.map} +1 -1
  233. package/dashboard/dist/assets/{SchemeMatchFields-CL7TKnw3.js → SchemeMatchFields-BK24aa7K.js} +2 -2
  234. package/dashboard/dist/assets/{SchemeMatchFields-CL7TKnw3.js.map → SchemeMatchFields-BK24aa7K.js.map} +1 -1
  235. package/dashboard/dist/assets/{ScopeBadge-DGz79rmG.js → ScopeBadge-ofLQ6HW-.js} +2 -2
  236. package/dashboard/dist/assets/{ScopeBadge-DGz79rmG.js.map → ScopeBadge-ofLQ6HW-.js.map} +1 -1
  237. package/dashboard/dist/assets/{StickyPagination-CUwxfBQH.js → StickyPagination-CgVv7vc_.js} +2 -2
  238. package/dashboard/dist/assets/{StickyPagination-CUwxfBQH.js.map → StickyPagination-CgVv7vc_.js.map} +1 -1
  239. package/dashboard/dist/assets/{StreamMessageDetail-DOjcO7d2.js → StreamMessageDetail-B9sxDVw4.js} +2 -2
  240. package/dashboard/dist/assets/{StreamMessageDetail-DOjcO7d2.js.map → StreamMessageDetail-B9sxDVw4.js.map} +1 -1
  241. package/dashboard/dist/assets/{SwimlaneTimeline-SPMpoLHP.js → SwimlaneTimeline-DQc0CYSL.js} +2 -2
  242. package/dashboard/dist/assets/{SwimlaneTimeline-SPMpoLHP.js.map → SwimlaneTimeline-DQc0CYSL.js.map} +1 -1
  243. package/dashboard/dist/assets/{TagInput-DaIdhv3h.js → TagInput-47qVYzke.js} +2 -2
  244. package/dashboard/dist/assets/{TagInput-DaIdhv3h.js.map → TagInput-47qVYzke.js.map} +1 -1
  245. package/dashboard/dist/assets/{TaskDetailPage-DvfzR2IQ.js → TaskDetailPage-D6VOsA1f.js} +2 -2
  246. package/dashboard/dist/assets/{TaskDetailPage-DvfzR2IQ.js.map → TaskDetailPage-D6VOsA1f.js.map} +1 -1
  247. package/dashboard/dist/assets/{TaskQueuePill-sUA1nZe-.js → TaskQueuePill-C5KmdXAl.js} +2 -2
  248. package/dashboard/dist/assets/{TaskQueuePill-sUA1nZe-.js.map → TaskQueuePill-C5KmdXAl.js.map} +1 -1
  249. package/dashboard/dist/assets/{TasksListPage-Jp6wmL7t.js → TasksListPage-DG8hvO8G.js} +2 -2
  250. package/dashboard/dist/assets/{TasksListPage-Jp6wmL7t.js.map → TasksListPage-DG8hvO8G.js.map} +1 -1
  251. package/dashboard/dist/assets/{TimeAgo-BCQA0Gb_.js → TimeAgo-CL02EhFi.js} +2 -2
  252. package/dashboard/dist/assets/{TimeAgo-BCQA0Gb_.js.map → TimeAgo-CL02EhFi.js.map} +1 -1
  253. package/dashboard/dist/assets/{TimestampCell-xhdMHDQt.js → TimestampCell-BE7oKVJg.js} +2 -2
  254. package/dashboard/dist/assets/{TimestampCell-xhdMHDQt.js.map → TimestampCell-BE7oKVJg.js.map} +1 -1
  255. package/dashboard/dist/assets/{ToolPill-CpBAFdEX.js → ToolPill-Cp9Drk1s.js} +2 -2
  256. package/dashboard/dist/assets/{ToolPill-CpBAFdEX.js.map → ToolPill-Cp9Drk1s.js.map} +1 -1
  257. package/dashboard/dist/assets/{ToolTestPanel-D8M3ITrJ.js → ToolTestPanel-CRecLh6S.js} +2 -2
  258. package/dashboard/dist/assets/{ToolTestPanel-D8M3ITrJ.js.map → ToolTestPanel-CRecLh6S.js.map} +1 -1
  259. package/dashboard/dist/assets/{TopicDetailPage-DdBJQp31.js → TopicDetailPage-QzkinTfN.js} +3 -3
  260. package/dashboard/dist/assets/{TopicDetailPage-DdBJQp31.js.map → TopicDetailPage-QzkinTfN.js.map} +1 -1
  261. package/dashboard/dist/assets/{TopicsPage-vpvsynD9.js → TopicsPage-D8dW6J65.js} +2 -2
  262. package/dashboard/dist/assets/{TopicsPage-vpvsynD9.js.map → TopicsPage-D8dW6J65.js.map} +1 -1
  263. package/dashboard/dist/assets/{UserName-BK6Lzsdw.js → UserName-Dw3R_zrl.js} +2 -2
  264. package/dashboard/dist/assets/{UserName-BK6Lzsdw.js.map → UserName-Dw3R_zrl.js.map} +1 -1
  265. package/dashboard/dist/assets/WorkflowExecutionPage-BTocv8or.js +2 -0
  266. package/dashboard/dist/assets/{WorkflowExecutionPage-DkM1TS4I.js.map → WorkflowExecutionPage-BTocv8or.js.map} +1 -1
  267. package/dashboard/dist/assets/{WorkflowPill-CKHip3hH.js → WorkflowPill-BiLYq__w.js} +2 -2
  268. package/dashboard/dist/assets/{WorkflowPill-CKHip3hH.js.map → WorkflowPill-BiLYq__w.js.map} +1 -1
  269. package/dashboard/dist/assets/WorkflowsDashboard-CIPEt3et.js +2 -0
  270. package/dashboard/dist/assets/{WorkflowsDashboard-g_N4y3QS.js.map → WorkflowsDashboard-CIPEt3et.js.map} +1 -1
  271. package/dashboard/dist/assets/{WorkflowsOverview-Drjo-Lu-.js → WorkflowsOverview-Bj4MJIE-.js} +2 -2
  272. package/dashboard/dist/assets/{WorkflowsOverview-Drjo-Lu-.js.map → WorkflowsOverview-Bj4MJIE-.js.map} +1 -1
  273. package/dashboard/dist/assets/{YamlWorkflowDetailPage-CLltNHjZ.js → YamlWorkflowDetailPage-DMEk5k9-.js} +2 -2
  274. package/dashboard/dist/assets/{YamlWorkflowDetailPage-CLltNHjZ.js.map → YamlWorkflowDetailPage-DMEk5k9-.js.map} +1 -1
  275. package/dashboard/dist/assets/{YamlWorkflowsPage-CxQCB-Zi.js → YamlWorkflowsPage-F2yyyoiB.js} +2 -2
  276. package/dashboard/dist/assets/{YamlWorkflowsPage-CxQCB-Zi.js.map → YamlWorkflowsPage-F2yyyoiB.js.map} +1 -1
  277. package/dashboard/dist/assets/{agents-Dk25jjhj.js → agents-mSgxEPpI.js} +2 -2
  278. package/dashboard/dist/assets/{agents-Dk25jjhj.js.map → agents-mSgxEPpI.js.map} +1 -1
  279. package/dashboard/dist/assets/{bots-bRkCqhlq.js → bots-p4Hp0CV6.js} +2 -2
  280. package/dashboard/dist/assets/{bots-bRkCqhlq.js.map → bots-p4Hp0CV6.js.map} +1 -1
  281. package/dashboard/dist/assets/{capabilities-DARawLry.js → capabilities-D_-I_SXR.js} +2 -2
  282. package/dashboard/dist/assets/{capabilities-DARawLry.js.map → capabilities-D_-I_SXR.js.map} +1 -1
  283. package/dashboard/dist/assets/{controlplane-DKccxxs6.js → controlplane-DjdoQnRU.js} +2 -2
  284. package/dashboard/dist/assets/{controlplane-DKccxxs6.js.map → controlplane-DjdoQnRU.js.map} +1 -1
  285. package/dashboard/dist/assets/{escalation-columns-BaYuzMYf.js → escalation-columns-R_IEVQjQ.js} +2 -2
  286. package/dashboard/dist/assets/{escalation-columns-BaYuzMYf.js.map → escalation-columns-R_IEVQjQ.js.map} +1 -1
  287. package/dashboard/dist/assets/{escalation-items-CwbNFnsH.js → escalation-items-BGZlJMpk.js} +2 -2
  288. package/dashboard/dist/assets/{escalation-items-CwbNFnsH.js.map → escalation-items-BGZlJMpk.js.map} +1 -1
  289. package/dashboard/dist/assets/{index-Cf6qCgTf.js → index-BEMdD58x.js} +2 -2
  290. package/dashboard/dist/assets/{index-Cf6qCgTf.js.map → index-BEMdD58x.js.map} +1 -1
  291. package/dashboard/dist/assets/index-BUmz0NMg.css +1 -0
  292. package/dashboard/dist/assets/{index-hKOlahpE.js → index-BuCEhhnl.js} +2 -2
  293. package/dashboard/dist/assets/{index-hKOlahpE.js.map → index-BuCEhhnl.js.map} +1 -1
  294. package/dashboard/dist/assets/{index-D1uliPqS.js → index-BxbQmeqh.js} +2 -2
  295. package/dashboard/dist/assets/{index-D1uliPqS.js.map → index-BxbQmeqh.js.map} +1 -1
  296. package/dashboard/dist/assets/index-C5osluV3.js +2 -0
  297. package/dashboard/dist/assets/{index-CtrSYqmL.js.map → index-C5osluV3.js.map} +1 -1
  298. package/dashboard/dist/assets/{index-CU2UW2y6.js → index-C_dAJUzh.js} +25 -25
  299. package/dashboard/dist/assets/index-C_dAJUzh.js.map +1 -0
  300. package/dashboard/dist/assets/{index-Bx9HVzuT.js → index-D-FYj9jT.js} +2 -2
  301. package/dashboard/dist/assets/{index-Bx9HVzuT.js.map → index-D-FYj9jT.js.map} +1 -1
  302. package/dashboard/dist/assets/{index-BZgtzkkG.js → index-D6K_IgCz.js} +2 -2
  303. package/dashboard/dist/assets/{index-BZgtzkkG.js.map → index-D6K_IgCz.js.map} +1 -1
  304. package/dashboard/dist/assets/index-D7L_VoBD.js +2 -0
  305. package/dashboard/dist/assets/index-D7L_VoBD.js.map +1 -0
  306. package/dashboard/dist/assets/{index-DgpL_Lgc.js → index-D9RAN9sA.js} +2 -2
  307. package/dashboard/dist/assets/{index-DgpL_Lgc.js.map → index-D9RAN9sA.js.map} +1 -1
  308. package/dashboard/dist/assets/{index-dShcvdg3.js → index-DUYAGxwc.js} +2 -2
  309. package/dashboard/dist/assets/{index-dShcvdg3.js.map → index-DUYAGxwc.js.map} +1 -1
  310. package/dashboard/dist/assets/{index-E_hJ7vtX.js → index-Dk2KKo0z.js} +2 -2
  311. package/dashboard/dist/assets/{index-E_hJ7vtX.js.map → index-Dk2KKo0z.js.map} +1 -1
  312. package/dashboard/dist/assets/{index-DU2QCbgH.js → index-DlJkZ12b.js} +2 -2
  313. package/dashboard/dist/assets/{index-DU2QCbgH.js.map → index-DlJkZ12b.js.map} +1 -1
  314. package/dashboard/dist/assets/{index-kzifJWbM.js → index-FiNThtNU.js} +3 -3
  315. package/dashboard/dist/assets/{index-kzifJWbM.js.map → index-FiNThtNU.js.map} +1 -1
  316. package/dashboard/dist/assets/{knowledge-DOe5ks-E.js → knowledge-DSsPTqkK.js} +2 -2
  317. package/dashboard/dist/assets/{knowledge-DOe5ks-E.js.map → knowledge-DSsPTqkK.js.map} +1 -1
  318. package/dashboard/dist/assets/{machines-Zq_00v7k.js → machines-DSgGtqqr.js} +2 -2
  319. package/dashboard/dist/assets/{machines-Zq_00v7k.js.map → machines-DSgGtqqr.js.map} +1 -1
  320. package/dashboard/dist/assets/{mcp-BL8kD0oh.js → mcp-Cg-_uLw8.js} +2 -2
  321. package/dashboard/dist/assets/{mcp-BL8kD0oh.js.map → mcp-Cg-_uLw8.js.map} +1 -1
  322. package/dashboard/dist/assets/{mcp-query-BpokmJWi.js → mcp-query-DQombEK_.js} +2 -2
  323. package/dashboard/dist/assets/{mcp-query-BpokmJWi.js.map → mcp-query-DQombEK_.js.map} +1 -1
  324. package/dashboard/dist/assets/{personas-BubCnQZ8.js → personas-DYrcoVBu.js} +2 -2
  325. package/dashboard/dist/assets/{personas-BubCnQZ8.js.map → personas-DYrcoVBu.js.map} +1 -1
  326. package/dashboard/dist/assets/{pipelines--DUoMx7K.js → pipelines-wdb4xsey.js} +2 -2
  327. package/dashboard/dist/assets/{pipelines--DUoMx7K.js.map → pipelines-wdb4xsey.js.map} +1 -1
  328. package/dashboard/dist/assets/{tasks-CJXN4OB4.js → tasks-Bil7gvm9.js} +2 -2
  329. package/dashboard/dist/assets/{tasks-CJXN4OB4.js.map → tasks-Bil7gvm9.js.map} +1 -1
  330. package/dashboard/dist/assets/{topics-CAG08Ruo.js → topics-wBqaVhRR.js} +2 -2
  331. package/dashboard/dist/assets/{topics-CAG08Ruo.js.map → topics-wBqaVhRR.js.map} +1 -1
  332. package/dashboard/dist/assets/{useDebouncedValue-DQ2D8cm2.js → useDebouncedValue-CwrY8TpV.js} +2 -2
  333. package/dashboard/dist/assets/{useDebouncedValue-DQ2D8cm2.js.map → useDebouncedValue-CwrY8TpV.js.map} +1 -1
  334. package/dashboard/dist/assets/{useNamespace-DjEVAlJQ.js → useNamespace-Sod_xApz.js} +2 -2
  335. package/dashboard/dist/assets/{useNamespace-DjEVAlJQ.js.map → useNamespace-Sod_xApz.js.map} +1 -1
  336. package/dashboard/dist/assets/{useYamlActivityEvents-etcpfIwo.js → useYamlActivityEvents-CKLInV3C.js} +2 -2
  337. package/dashboard/dist/assets/{useYamlActivityEvents-etcpfIwo.js.map → useYamlActivityEvents-CKLInV3C.js.map} +1 -1
  338. package/dashboard/dist/assets/{validate-YJK_6a7m.js → validate-CYhW1xMJ.js} +2 -2
  339. package/dashboard/dist/assets/{validate-YJK_6a7m.js.map → validate-CYhW1xMJ.js.map} +1 -1
  340. package/dashboard/dist/assets/{vendor-icons-en0_uSRD.js → vendor-icons-ed7mYQw4.js} +2 -2
  341. package/dashboard/dist/assets/{vendor-icons-en0_uSRD.js.map → vendor-icons-ed7mYQw4.js.map} +1 -1
  342. package/dashboard/dist/assets/{yaml-workflows-D97Bz6li.js → yaml-workflows-C20qHo3L.js} +2 -2
  343. package/dashboard/dist/assets/{yaml-workflows-D97Bz6li.js.map → yaml-workflows-C20qHo3L.js.map} +1 -1
  344. package/dashboard/dist/index.html +3 -3
  345. package/docs/api/http/labels.md +115 -0
  346. package/docs/api/http/users.md +2 -0
  347. package/docs/api/mcp/admin.md +76 -1
  348. package/docs/code-owned-configuration.md +1 -1
  349. package/docs/iam.md +12 -0
  350. package/docs/label-sheets.md +267 -0
  351. package/docs/machines.md +2 -2
  352. package/docs/scan-codes.md +11 -5
  353. package/package.json +4 -1
  354. package/dashboard/dist/assets/AvailableEscalationsPage-BRKyG5qZ.js +0 -2
  355. package/dashboard/dist/assets/AvailableEscalationsPage-BRKyG5qZ.js.map +0 -1
  356. package/dashboard/dist/assets/BulkAssignModal-BWfzPrRk.js +0 -2
  357. package/dashboard/dist/assets/HomePage-BUlSnCg8.js +0 -2
  358. package/dashboard/dist/assets/McpRunDetailPage-BHVEcKV5.js +0 -2
  359. package/dashboard/dist/assets/OperatorDashboard-CMkgMewd.js +0 -2
  360. package/dashboard/dist/assets/PersonaDetailPage-Cs1FFdNq.js +0 -2
  361. package/dashboard/dist/assets/RolesPage-CUP7EH5U.js +0 -2
  362. package/dashboard/dist/assets/RunAsSelector-B9-1vgZr.js +0 -2
  363. package/dashboard/dist/assets/ScanCodesPage-KN_e2rJl.js +0 -2
  364. package/dashboard/dist/assets/ScanSchemeDetailPage-CqItQ67Y.js +0 -5
  365. package/dashboard/dist/assets/ScanSchemeDetailPage-CqItQ67Y.js.map +0 -1
  366. package/dashboard/dist/assets/ScanStationPage-B0qbUOwc.js +0 -2
  367. package/dashboard/dist/assets/WorkflowExecutionPage-DkM1TS4I.js +0 -2
  368. package/dashboard/dist/assets/WorkflowsDashboard-g_N4y3QS.js +0 -2
  369. package/dashboard/dist/assets/index-BmzscsXK.css +0 -1
  370. package/dashboard/dist/assets/index-CU2UW2y6.js.map +0 -1
  371. package/dashboard/dist/assets/index-CtrSYqmL.js +0 -2
  372. package/dashboard/dist/assets/index-DU-1gMks.js +0 -2
  373. package/dashboard/dist/assets/index-DU-1gMks.js.map +0 -1
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ // Barcode encoding: the one module that knows bwip-js. Renderers draw the
3
+ // dark modules this returns; ZPL uses the printer's own encoder instead.
4
+ var __importDefault = (this && this.__importDefault) || function (mod) {
5
+ return (mod && mod.__esModule) ? mod : { "default": mod };
6
+ };
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.SymbolEncodeError = void 0;
9
+ exports.quietZoneModules = quietZoneModules;
10
+ exports.encodeSymbol = encodeSymbol;
11
+ const bwip_js_1 = __importDefault(require("bwip-js"));
12
+ /** Data the symbology cannot carry. The message never repeats the data. */
13
+ class SymbolEncodeError extends Error {
14
+ constructor(message) {
15
+ super(message);
16
+ this.name = 'SymbolEncodeError';
17
+ }
18
+ }
19
+ exports.SymbolEncodeError = SymbolEncodeError;
20
+ const BCID = { code128: 'code128', qrcode: 'qrcode', datamatrix: 'datamatrix' };
21
+ const QUIET_ZONE = { code128: 10, qrcode: 4, datamatrix: 1 };
22
+ const PRINTABLE_ASCII = /^[\x20-\x7e]+$/;
23
+ /** The blank margin, in modules, a scanner needs around the symbol. */
24
+ function quietZoneModules(symbology) {
25
+ return QUIET_ZONE[symbology];
26
+ }
27
+ function linearPath(sbs) {
28
+ let x = 0;
29
+ const bars = [];
30
+ sbs.forEach((run, i) => {
31
+ if (i % 2 === 0)
32
+ bars.push(`M${x} 0h${run}v1h-${run}z`);
33
+ x += run;
34
+ });
35
+ return { path: bars.join(''), width: x };
36
+ }
37
+ function matrixPath(raw) {
38
+ const rows = [];
39
+ for (let y = 0; y < raw.pixy; y++) {
40
+ let x = 0;
41
+ while (x < raw.pixx) {
42
+ if (!raw.pixs[y * raw.pixx + x]) {
43
+ x++;
44
+ continue;
45
+ }
46
+ const start = x;
47
+ while (x < raw.pixx && raw.pixs[y * raw.pixx + x])
48
+ x++;
49
+ rows.push(`M${start} ${y}h${x - start}v1h-${x - start}z`);
50
+ }
51
+ }
52
+ return rows.join('');
53
+ }
54
+ /** Encode `data` in `symbology`; throws SymbolEncodeError when it cannot be carried. */
55
+ function encodeSymbol(symbology, data) {
56
+ if (!data)
57
+ throw new SymbolEncodeError('a code is empty');
58
+ if (symbology === 'code128' && !PRINTABLE_ASCII.test(data)) {
59
+ throw new SymbolEncodeError('Code 128 carries printable ASCII only');
60
+ }
61
+ let raw;
62
+ try {
63
+ raw = bwip_js_1.default.raw(BCID[symbology], data, {});
64
+ }
65
+ catch {
66
+ throw new SymbolEncodeError(`a code cannot be encoded as ${symbology}`);
67
+ }
68
+ const first = raw[0];
69
+ if ('sbs' in first) {
70
+ const { path, width } = linearPath(first.sbs);
71
+ return { path, widthModules: width, heightModules: 1 };
72
+ }
73
+ return { path: matrixPath(first), widthModules: first.pixx, heightModules: first.pixy };
74
+ }
@@ -0,0 +1,18 @@
1
+ export interface LabelTokenContext {
2
+ target: string;
3
+ /** The row's metadata (action schemes) or a pasted list's columns. */
4
+ item?: Record<string, unknown>;
5
+ /** The identity scheme's user: name, display_name, email, roles, and metadata keys. */
6
+ user?: Record<string, unknown>;
7
+ scheme?: {
8
+ name: string;
9
+ };
10
+ }
11
+ /** Render one line of label text. */
12
+ export declare function renderLabelText(template: string, ctx: LabelTokenContext): string;
13
+ /** Every token a line uses, valid or not, without braces. */
14
+ export declare function listLabelTokens(template: string): string[];
15
+ /** Tokens in a line that renderLabelText does not know. */
16
+ export declare function unknownLabelTokens(template: string): string[];
17
+ /** `user.<key>` tokens a line uses, as keys. */
18
+ export declare function userTokenKeys(template: string): string[];
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ // Label text tokens: {target}, {item.<facet>}, {user.<key>}, {scheme.name}.
3
+ // A missing value renders empty; template validation names unknown tokens.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.renderLabelText = renderLabelText;
6
+ exports.listLabelTokens = listLabelTokens;
7
+ exports.unknownLabelTokens = unknownLabelTokens;
8
+ exports.userTokenKeys = userTokenKeys;
9
+ const TOKEN = /\{(target|scheme\.name|(?:item|user)\.[a-zA-Z0-9_]+)\}/g;
10
+ const ANY_TOKEN = /\{([^{}]*)\}/g;
11
+ function display(value) {
12
+ if (value === null || value === undefined)
13
+ return '';
14
+ if (Array.isArray(value))
15
+ return value.map(display).filter(Boolean).join(', ');
16
+ if (typeof value === 'object')
17
+ return '';
18
+ return String(value);
19
+ }
20
+ function resolve(token, ctx) {
21
+ if (token === 'target')
22
+ return ctx.target;
23
+ if (token === 'scheme.name')
24
+ return ctx.scheme?.name;
25
+ const [bag, key] = token.split('.', 2);
26
+ return (bag === 'item' ? ctx.item : ctx.user)?.[key];
27
+ }
28
+ /** Render one line of label text. */
29
+ function renderLabelText(template, ctx) {
30
+ return template.replace(TOKEN, (_m, token) => display(resolve(token, ctx))).trim();
31
+ }
32
+ /** Every token a line uses, valid or not, without braces. */
33
+ function listLabelTokens(template) {
34
+ return [...template.matchAll(ANY_TOKEN)].map((m) => m[1]);
35
+ }
36
+ /** Tokens in a line that renderLabelText does not know. */
37
+ function unknownLabelTokens(template) {
38
+ return listLabelTokens(template).filter((t) => !new RegExp(`^${TOKEN.source}$`).test(`{${t}}`));
39
+ }
40
+ /** `user.<key>` tokens a line uses, as keys. */
41
+ function userTokenKeys(template) {
42
+ return listLabelTokens(template).filter((t) => t.startsWith('user.')).map((t) => t.slice(5));
43
+ }
@@ -0,0 +1,105 @@
1
+ export declare const LABEL_SYMBOLOGIES: readonly ["code128", "qrcode", "datamatrix"];
2
+ export type LabelSymbology = (typeof LABEL_SYMBOLOGIES)[number];
3
+ /** How a code's caption band prints on black-only stock: filled, outlined, or bare text. */
4
+ export declare const LABEL_TONES: readonly ["solid", "outline", "plain"];
5
+ export type LabelTone = (typeof LABEL_TONES)[number];
6
+ /** A sheet of labels (office printer) or a thermal roll (one label per page). */
7
+ export interface LabelMedia {
8
+ id: string;
9
+ name: string;
10
+ family: 'sheet' | 'thermal';
11
+ pageWidthMm: number;
12
+ pageHeightMm: number;
13
+ columns: number;
14
+ rows: number;
15
+ labelWidthMm: number;
16
+ labelHeightMm: number;
17
+ marginTopMm: number;
18
+ marginLeftMm: number;
19
+ gutterXMm: number;
20
+ gutterYMm: number;
21
+ cornerRadiusMm: number;
22
+ /** Thermal print resolution in dots per inch. */
23
+ dpi?: number;
24
+ /** The narrowest bar or module a scanner reads reliably from this stock. */
25
+ minModuleMm: number;
26
+ }
27
+ /** One code on a label: the payload, the act it names, and its band tone. */
28
+ export interface LabelCode {
29
+ code: string;
30
+ caption: string;
31
+ tone: LabelTone;
32
+ }
33
+ /** What one label says, before layout. A masked label draws placeholders instead of codes. */
34
+ export interface LabelContent {
35
+ title?: string;
36
+ lines: string[];
37
+ codes: LabelCode[];
38
+ masked?: boolean;
39
+ }
40
+ export interface LabelTextElement {
41
+ kind: 'text';
42
+ x: number;
43
+ y: number;
44
+ w: number;
45
+ /** Font size in millimetres (the em box). */
46
+ size: number;
47
+ text: string;
48
+ weight: 'regular' | 'bold';
49
+ align: 'left' | 'center';
50
+ /** White text, printed over a solid band. */
51
+ inverse?: boolean;
52
+ }
53
+ export interface LabelRectElement {
54
+ kind: 'rect';
55
+ x: number;
56
+ y: number;
57
+ w: number;
58
+ h: number;
59
+ /** Filled black when true; outlined with `stroke` mm otherwise. */
60
+ fill: boolean;
61
+ stroke?: number;
62
+ }
63
+ export interface LabelSymbolElement {
64
+ kind: 'symbol';
65
+ x: number;
66
+ y: number;
67
+ w: number;
68
+ h: number;
69
+ symbology: LabelSymbology;
70
+ /** The encoded payload; empty when masked. */
71
+ data: string;
72
+ moduleMm: number;
73
+ /** Dark modules as an SVG path in module units; empty when masked. */
74
+ path: string;
75
+ masked?: boolean;
76
+ }
77
+ export type LabelElement = LabelTextElement | LabelRectElement | LabelSymbolElement;
78
+ export interface PlacedLabel {
79
+ /** Position on the page, counted from 0, left to right then top to bottom. */
80
+ slot: number;
81
+ /** Index of the label in the job's input. */
82
+ index: number;
83
+ x: number;
84
+ y: number;
85
+ w: number;
86
+ h: number;
87
+ elements: LabelElement[];
88
+ }
89
+ export interface LabelPage {
90
+ labels: PlacedLabel[];
91
+ }
92
+ export declare const LABEL_WARNING_KINDS: readonly ["scale", "quiet_zone", "unencodable", "unparseable", "rule_disabled", "unresolved", "overflow", "missing_token"];
93
+ export type LabelWarningKind = (typeof LABEL_WARNING_KINDS)[number];
94
+ export interface LabelWarning {
95
+ /** Index of the label in the job's input. */
96
+ index: number;
97
+ kind: LabelWarningKind;
98
+ detail: string;
99
+ }
100
+ export interface LabelSheet {
101
+ media: LabelMedia;
102
+ pages: LabelPage[];
103
+ cutMarks: boolean;
104
+ warnings: LabelWarning[];
105
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ // Label sheet model. Pure data in millimetres: the dashboard preview, browser
3
+ // print, PDF and ZPL all render the same LabelSheet.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.LABEL_WARNING_KINDS = exports.LABEL_TONES = exports.LABEL_SYMBOLOGIES = void 0;
6
+ exports.LABEL_SYMBOLOGIES = ['code128', 'qrcode', 'datamatrix'];
7
+ /** How a code's caption band prints on black-only stock: filled, outlined, or bare text. */
8
+ exports.LABEL_TONES = ['solid', 'outline', 'plain'];
9
+ exports.LABEL_WARNING_KINDS = [
10
+ 'scale', 'quiet_zone', 'unencodable', 'unparseable', 'rule_disabled', 'unresolved', 'overflow', 'missing_token',
11
+ ];
@@ -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;