@hotmeshio/long-tail 0.22.2 → 0.22.3

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 (255) hide show
  1. package/build/api/escalations/lookups.d.ts +9 -2
  2. package/build/api/escalations/lookups.js +15 -3
  3. package/build/api/escalations/metadata.d.ts +2 -0
  4. package/build/api/escalations/metadata.js +9 -0
  5. package/build/api/scan-codes/locate.js +4 -0
  6. package/build/api/scan-codes/present.d.ts +1 -1
  7. package/build/api/scan-codes/present.js +43 -0
  8. package/build/api/scan-codes/verb-accumulate.js +5 -1
  9. package/build/api/scan-codes/verb-fill.js +4 -1
  10. package/build/api/scan-codes/verb-into-subject.d.ts +12 -0
  11. package/build/api/scan-codes/verb-into-subject.js +157 -0
  12. package/build/api/scan-codes/verbs-subject.d.ts +23 -4
  13. package/build/api/scan-codes/verbs-subject.js +32 -55
  14. package/build/api/scan-codes/verbs.d.ts +10 -8
  15. package/build/api/scan-codes/verbs.js +25 -16
  16. package/build/index.d.ts +1 -1
  17. package/build/index.js +3 -2
  18. package/build/sdk/index.d.ts +1 -0
  19. package/build/services/escalation/claim-asserted.d.ts +10 -0
  20. package/build/services/escalation/claim-asserted.js +64 -0
  21. package/build/services/escalation/facets.d.ts +3 -1
  22. package/build/services/escalation/facets.js +7 -3
  23. package/build/services/escalation/index.d.ts +1 -0
  24. package/build/services/escalation/index.js +3 -1
  25. package/build/services/knowledge/lookup-cache.d.ts +16 -4
  26. package/build/services/knowledge/lookup-cache.js +53 -20
  27. package/build/services/knowledge/lookup-refs.d.ts +3 -2
  28. package/build/services/knowledge/lookup-refs.js +6 -4
  29. package/build/services/knowledge/sql.d.ts +2 -0
  30. package/build/services/knowledge/sql.js +9 -1
  31. package/build/services/mcp/server-tools.js +1 -1
  32. package/build/services/orchestrator/condition.d.ts +13 -10
  33. package/build/services/orchestrator/condition.js +8 -6
  34. package/build/services/scan-code/index.d.ts +1 -1
  35. package/build/services/scan-code/index.js +2 -1
  36. package/build/services/scan-code/validate-facts.d.ts +5 -0
  37. package/build/services/scan-code/validate-facts.js +24 -0
  38. package/build/services/scan-code/validate-query.d.ts +8 -0
  39. package/build/services/scan-code/validate-query.js +36 -0
  40. package/build/services/scan-code/validate-subject.js +29 -2
  41. package/build/services/scan-code/validate.js +17 -8
  42. package/build/shared/scan-code/gtin.d.ts +6 -0
  43. package/build/shared/scan-code/gtin.js +13 -0
  44. package/build/shared/scan-code/index.d.ts +1 -1
  45. package/build/shared/scan-code/index.js +2 -1
  46. package/build/system/mcp-servers/admin/schemas.d.ts +185 -5
  47. package/build/system/mcp-servers/admin/schemas.js +16 -3
  48. package/build/system/seed/tool-manifests-admin.d.ts +202 -1
  49. package/build/system/seed/tool-manifests-admin.js +2 -2
  50. package/build/tsconfig.tsbuildinfo +1 -1
  51. package/build/types/escalation.d.ts +14 -8
  52. package/build/types/escalation.js +16 -7
  53. package/build/types/index.d.ts +3 -3
  54. package/build/types/index.js +3 -1
  55. package/build/types/scan-code/response.d.ts +5 -0
  56. package/build/types/scan-code/rule.d.ts +32 -2
  57. package/dashboard/dist/assets/{AdminDashboard-DBW12qQt.js → AdminDashboard-hI5-kKpL.js} +2 -2
  58. package/dashboard/dist/assets/{AdminDashboard-DBW12qQt.js.map → AdminDashboard-hI5-kKpL.js.map} +1 -1
  59. package/dashboard/dist/assets/{AgentConfigPage-CmHv8U9M.js → AgentConfigPage-DetU4HZe.js} +2 -2
  60. package/dashboard/dist/assets/{AgentConfigPage-CmHv8U9M.js.map → AgentConfigPage-DetU4HZe.js.map} +1 -1
  61. package/dashboard/dist/assets/{AgentDetailPage-D1scIbz-.js → AgentDetailPage-DrGXo8KQ.js} +2 -2
  62. package/dashboard/dist/assets/{AgentDetailPage-D1scIbz-.js.map → AgentDetailPage-DrGXo8KQ.js.map} +1 -1
  63. package/dashboard/dist/assets/{AgentsPage-BA_ai9HJ.js → AgentsPage-D4md5BzM.js} +2 -2
  64. package/dashboard/dist/assets/{AgentsPage-BA_ai9HJ.js.map → AgentsPage-D4md5BzM.js.map} +1 -1
  65. package/dashboard/dist/assets/{AvailableEscalationsPage-C2_5aEFW.js → AvailableEscalationsPage-B2bS2ZJy.js} +2 -2
  66. package/dashboard/dist/assets/{AvailableEscalationsPage-C2_5aEFW.js.map → AvailableEscalationsPage-B2bS2ZJy.js.map} +1 -1
  67. package/dashboard/dist/assets/{BotPicker-BZo4Kp4a.js → BotPicker-BXtey255.js} +2 -2
  68. package/dashboard/dist/assets/{BotPicker-BZo4Kp4a.js.map → BotPicker-BXtey255.js.map} +1 -1
  69. package/dashboard/dist/assets/{BulkAssignModal-BFhyxY2T.js → BulkAssignModal-CSL_PeZv.js} +2 -2
  70. package/dashboard/dist/assets/{BulkAssignModal-BFhyxY2T.js.map → BulkAssignModal-CSL_PeZv.js.map} +1 -1
  71. package/dashboard/dist/assets/{CapabilitiesPage-CvOX6vAc.js → CapabilitiesPage-5scufTHW.js} +2 -2
  72. package/dashboard/dist/assets/{CapabilitiesPage-CvOX6vAc.js.map → CapabilitiesPage-5scufTHW.js.map} +1 -1
  73. package/dashboard/dist/assets/{CollapsibleSection-GCJsV9Oq.js → CollapsibleSection-DjjDGxP_.js} +2 -2
  74. package/dashboard/dist/assets/{CollapsibleSection-GCJsV9Oq.js.map → CollapsibleSection-DjjDGxP_.js.map} +1 -1
  75. package/dashboard/dist/assets/{ConfirmDeleteModal-CAgYLcef.js → ConfirmDeleteModal-DJSmsHQM.js} +2 -2
  76. package/dashboard/dist/assets/{ConfirmDeleteModal-CAgYLcef.js.map → ConfirmDeleteModal-DJSmsHQM.js.map} +1 -1
  77. package/dashboard/dist/assets/{CountdownTimer-Dik2z0M_.js → CountdownTimer-C5ZRYPfF.js} +2 -2
  78. package/dashboard/dist/assets/{CountdownTimer-Dik2z0M_.js.map → CountdownTimer-C5ZRYPfF.js.map} +1 -1
  79. package/dashboard/dist/assets/{CredentialsPage-twd2xCOW.js → CredentialsPage-CV6e60yC.js} +2 -2
  80. package/dashboard/dist/assets/{CredentialsPage-twd2xCOW.js.map → CredentialsPage-CV6e60yC.js.map} +1 -1
  81. package/dashboard/dist/assets/{CronLabel-DdnIuudX.js → CronLabel-CnqhqW0B.js} +2 -2
  82. package/dashboard/dist/assets/{CronLabel-DdnIuudX.js.map → CronLabel-CnqhqW0B.js.map} +1 -1
  83. package/dashboard/dist/assets/{ElapsedCell-DCctVv5R.js → ElapsedCell-C1IOn-tj.js} +2 -2
  84. package/dashboard/dist/assets/{ElapsedCell-DCctVv5R.js.map → ElapsedCell-C1IOn-tj.js.map} +1 -1
  85. package/dashboard/dist/assets/{EntityTimelinePanel-CMnskyWv.js → EntityTimelinePanel-Dz6Liig4.js} +2 -2
  86. package/dashboard/dist/assets/{EntityTimelinePanel-CMnskyWv.js.map → EntityTimelinePanel-Dz6Liig4.js.map} +1 -1
  87. package/dashboard/dist/assets/{EscalationListSchemaPage-VfCn6WDb.js → EscalationListSchemaPage-bgdmLmrh.js} +2 -2
  88. package/dashboard/dist/assets/{EscalationListSchemaPage-VfCn6WDb.js.map → EscalationListSchemaPage-bgdmLmrh.js.map} +1 -1
  89. package/dashboard/dist/assets/{EscalationListView-CGQZxcC-.js → EscalationListView-CrlD3ZGt.js} +2 -2
  90. package/dashboard/dist/assets/{EscalationListView-CGQZxcC-.js.map → EscalationListView-CrlD3ZGt.js.map} +1 -1
  91. package/dashboard/dist/assets/{EscalationSchemaPage-BX0tx-PM.js → EscalationSchemaPage-dxXO_T3t.js} +2 -2
  92. package/dashboard/dist/assets/{EscalationSchemaPage-BX0tx-PM.js.map → EscalationSchemaPage-dxXO_T3t.js.map} +1 -1
  93. package/dashboard/dist/assets/{EscalationTimeline-DKoSM56J.js → EscalationTimeline-C3WQZQuM.js} +2 -2
  94. package/dashboard/dist/assets/{EscalationTimeline-DKoSM56J.js.map → EscalationTimeline-C3WQZQuM.js.map} +1 -1
  95. package/dashboard/dist/assets/{EscalationTitleSelect-DWGLBOmS.js → EscalationTitleSelect-CTtcETUO.js} +2 -2
  96. package/dashboard/dist/assets/{EscalationTitleSelect-DWGLBOmS.js.map → EscalationTitleSelect-CTtcETUO.js.map} +1 -1
  97. package/dashboard/dist/assets/{EscalationsOverview-C2XoguaA.js → EscalationsOverview-DAjZ7JY2.js} +2 -2
  98. package/dashboard/dist/assets/{EscalationsOverview-C2XoguaA.js.map → EscalationsOverview-DAjZ7JY2.js.map} +1 -1
  99. package/dashboard/dist/assets/{EventTable-CBUWq7--.js → EventTable-B72DQP_v.js} +2 -2
  100. package/dashboard/dist/assets/{EventTable-CBUWq7--.js.map → EventTable-B72DQP_v.js.map} +1 -1
  101. package/dashboard/dist/assets/{FilterBar-8IdbleZ9.js → FilterBar-CCTaA_LH.js} +2 -2
  102. package/dashboard/dist/assets/{FilterBar-8IdbleZ9.js.map → FilterBar-CCTaA_LH.js.map} +1 -1
  103. package/dashboard/dist/assets/{GraphInvokePage-CUvoPzsW.js → GraphInvokePage-CAsCgFo3.js} +2 -2
  104. package/dashboard/dist/assets/{GraphInvokePage-CUvoPzsW.js.map → GraphInvokePage-CAsCgFo3.js.map} +1 -1
  105. package/dashboard/dist/assets/{HomePage-BP7v9GLJ.js → HomePage-DseE_iSr.js} +2 -2
  106. package/dashboard/dist/assets/{HomePage-BP7v9GLJ.js.map → HomePage-DseE_iSr.js.map} +1 -1
  107. package/dashboard/dist/assets/{ListToolbar-Cnacuwoy.js → ListToolbar-1zdqnjW6.js} +2 -2
  108. package/dashboard/dist/assets/{ListToolbar-Cnacuwoy.js.map → ListToolbar-1zdqnjW6.js.map} +1 -1
  109. package/dashboard/dist/assets/{McpOverview-C2JoNoDA.js → McpOverview-DS_JXDW5.js} +2 -2
  110. package/dashboard/dist/assets/{McpOverview-C2JoNoDA.js.map → McpOverview-DS_JXDW5.js.map} +1 -1
  111. package/dashboard/dist/assets/{McpQueryDetailPage-C_nih0w-.js → McpQueryDetailPage-BeMUGcv3.js} +2 -2
  112. package/dashboard/dist/assets/{McpQueryDetailPage-C_nih0w-.js.map → McpQueryDetailPage-BeMUGcv3.js.map} +1 -1
  113. package/dashboard/dist/assets/{McpQueryPage-U_wNXow2.js → McpQueryPage-CeiLO_LR.js} +2 -2
  114. package/dashboard/dist/assets/{McpQueryPage-U_wNXow2.js.map → McpQueryPage-CeiLO_LR.js.map} +1 -1
  115. package/dashboard/dist/assets/{McpRunDetailPage-DtKoJq6J.js → McpRunDetailPage-DYp1uZK2.js} +2 -2
  116. package/dashboard/dist/assets/{McpRunDetailPage-DtKoJq6J.js.map → McpRunDetailPage-DYp1uZK2.js.map} +1 -1
  117. package/dashboard/dist/assets/{McpRunsPage-CnYtfGhf.js → McpRunsPage-VeaDzcL4.js} +2 -2
  118. package/dashboard/dist/assets/{McpRunsPage-CnYtfGhf.js.map → McpRunsPage-VeaDzcL4.js.map} +1 -1
  119. package/dashboard/dist/assets/{OperationsPage-C7hupIer.js → OperationsPage-DK2mgaXf.js} +2 -2
  120. package/dashboard/dist/assets/{OperationsPage-C7hupIer.js.map → OperationsPage-DK2mgaXf.js.map} +1 -1
  121. package/dashboard/dist/assets/{OperatorDashboard-fVuLn2D5.js → OperatorDashboard-BNjLF0f7.js} +2 -2
  122. package/dashboard/dist/assets/{OperatorDashboard-fVuLn2D5.js.map → OperatorDashboard-BNjLF0f7.js.map} +1 -1
  123. package/dashboard/dist/assets/{PersonaDetailPage-C-4o8lPw.js → PersonaDetailPage-IQ2fZLa6.js} +2 -2
  124. package/dashboard/dist/assets/{PersonaDetailPage-C-4o8lPw.js.map → PersonaDetailPage-IQ2fZLa6.js.map} +1 -1
  125. package/dashboard/dist/assets/{PersonasPage-BL1FwLmv.js → PersonasPage-DpGFEcU-.js} +2 -2
  126. package/dashboard/dist/assets/{PersonasPage-BL1FwLmv.js.map → PersonasPage-DpGFEcU-.js.map} +1 -1
  127. package/dashboard/dist/assets/{PortalPage-tJG5sgb1.js → PortalPage-D07xyvG_.js} +2 -2
  128. package/dashboard/dist/assets/{PortalPage-tJG5sgb1.js.map → PortalPage-D07xyvG_.js.map} +1 -1
  129. package/dashboard/dist/assets/{ProcessDetailPage-Dz_jY4Yt.js → ProcessDetailPage-t8EEYSMk.js} +2 -2
  130. package/dashboard/dist/assets/{ProcessDetailPage-Dz_jY4Yt.js.map → ProcessDetailPage-t8EEYSMk.js.map} +1 -1
  131. package/dashboard/dist/assets/{ProcessesListPage-Cbn9cter.js → ProcessesListPage-BDUXLFdb.js} +2 -2
  132. package/dashboard/dist/assets/{ProcessesListPage-Cbn9cter.js.map → ProcessesListPage-BDUXLFdb.js.map} +1 -1
  133. package/dashboard/dist/assets/{ResolverForm-Bk8iXQ6-.js → ResolverForm-BwWOYv_Z.js} +6 -6
  134. package/dashboard/dist/assets/ResolverForm-BwWOYv_Z.js.map +1 -0
  135. package/dashboard/dist/assets/{RoleDetailPage-owPi6gI9.js → RoleDetailPage-zMF3x2xi.js} +2 -2
  136. package/dashboard/dist/assets/{RoleDetailPage-owPi6gI9.js.map → RoleDetailPage-zMF3x2xi.js.map} +1 -1
  137. package/dashboard/dist/assets/{RolesPage-NwmMvZFa.js → RolesPage-CEBp_PpL.js} +2 -2
  138. package/dashboard/dist/assets/{RolesPage-NwmMvZFa.js.map → RolesPage-CEBp_PpL.js.map} +1 -1
  139. package/dashboard/dist/assets/{RunAsSelector-tgEooTyU.js → RunAsSelector-CC_EHN3z.js} +2 -2
  140. package/dashboard/dist/assets/{RunAsSelector-tgEooTyU.js.map → RunAsSelector-CC_EHN3z.js.map} +1 -1
  141. package/dashboard/dist/assets/{ScanCodesPage-CUv_8ic6.js → ScanCodesPage-DD4uU-jY.js} +2 -2
  142. package/dashboard/dist/assets/{ScanCodesPage-CUv_8ic6.js.map → ScanCodesPage-DD4uU-jY.js.map} +1 -1
  143. package/dashboard/dist/assets/ScanSchemeDetailPage-CUW8gYFh.js +2 -0
  144. package/dashboard/dist/assets/ScanSchemeDetailPage-CUW8gYFh.js.map +1 -0
  145. package/dashboard/dist/assets/ScanStationPage-DpO_ESuf.js +2 -0
  146. package/dashboard/dist/assets/ScanStationPage-DpO_ESuf.js.map +1 -0
  147. package/dashboard/dist/assets/{StickyPagination-CsTI_gvJ.js → StickyPagination-cNqSDm5f.js} +2 -2
  148. package/dashboard/dist/assets/{StickyPagination-CsTI_gvJ.js.map → StickyPagination-cNqSDm5f.js.map} +1 -1
  149. package/dashboard/dist/assets/{StreamMessageDetail-auRlvjTh.js → StreamMessageDetail-C4oZqQdB.js} +2 -2
  150. package/dashboard/dist/assets/{StreamMessageDetail-auRlvjTh.js.map → StreamMessageDetail-C4oZqQdB.js.map} +1 -1
  151. package/dashboard/dist/assets/{SwimlaneTimeline-BLoVHYAd.js → SwimlaneTimeline-BjBiV7GT.js} +2 -2
  152. package/dashboard/dist/assets/{SwimlaneTimeline-BLoVHYAd.js.map → SwimlaneTimeline-BjBiV7GT.js.map} +1 -1
  153. package/dashboard/dist/assets/{TaskDetailPage-BPsZ1bK_.js → TaskDetailPage-pO_AnVS1.js} +2 -2
  154. package/dashboard/dist/assets/{TaskDetailPage-BPsZ1bK_.js.map → TaskDetailPage-pO_AnVS1.js.map} +1 -1
  155. package/dashboard/dist/assets/{TasksListPage-BNGM74yT.js → TasksListPage-DKDHlWP7.js} +2 -2
  156. package/dashboard/dist/assets/{TasksListPage-BNGM74yT.js.map → TasksListPage-DKDHlWP7.js.map} +1 -1
  157. package/dashboard/dist/assets/{TimeAgo-BnAHXGK7.js → TimeAgo-D2qchUuJ.js} +2 -2
  158. package/dashboard/dist/assets/{TimeAgo-BnAHXGK7.js.map → TimeAgo-D2qchUuJ.js.map} +1 -1
  159. package/dashboard/dist/assets/{TimestampCell-J4yae6mc.js → TimestampCell-DeswZGGo.js} +2 -2
  160. package/dashboard/dist/assets/{TimestampCell-J4yae6mc.js.map → TimestampCell-DeswZGGo.js.map} +1 -1
  161. package/dashboard/dist/assets/{ToolTestPanel-BdzzgXDu.js → ToolTestPanel-DJh7PIUa.js} +2 -2
  162. package/dashboard/dist/assets/{ToolTestPanel-BdzzgXDu.js.map → ToolTestPanel-DJh7PIUa.js.map} +1 -1
  163. package/dashboard/dist/assets/{TopicDetailPage-DJKg8lb7.js → TopicDetailPage-CsgDJ4Z4.js} +2 -2
  164. package/dashboard/dist/assets/{TopicDetailPage-DJKg8lb7.js.map → TopicDetailPage-CsgDJ4Z4.js.map} +1 -1
  165. package/dashboard/dist/assets/{TopicsPage-DQV0WxG6.js → TopicsPage-tBRZDVDN.js} +2 -2
  166. package/dashboard/dist/assets/{TopicsPage-DQV0WxG6.js.map → TopicsPage-tBRZDVDN.js.map} +1 -1
  167. package/dashboard/dist/assets/{UserName-Ct09nGh5.js → UserName-B-5JcDck.js} +2 -2
  168. package/dashboard/dist/assets/{UserName-Ct09nGh5.js.map → UserName-B-5JcDck.js.map} +1 -1
  169. package/dashboard/dist/assets/{WorkflowExecutionPage-B5WJOsee.js → WorkflowExecutionPage-BPHVnhp6.js} +2 -2
  170. package/dashboard/dist/assets/{WorkflowExecutionPage-B5WJOsee.js.map → WorkflowExecutionPage-BPHVnhp6.js.map} +1 -1
  171. package/dashboard/dist/assets/{WorkflowsDashboard-Hc87TRgD.js → WorkflowsDashboard-CxLlfZmY.js} +2 -2
  172. package/dashboard/dist/assets/{WorkflowsDashboard-Hc87TRgD.js.map → WorkflowsDashboard-CxLlfZmY.js.map} +1 -1
  173. package/dashboard/dist/assets/{WorkflowsOverview-CJQbyOj-.js → WorkflowsOverview-C4az5rwp.js} +2 -2
  174. package/dashboard/dist/assets/{WorkflowsOverview-CJQbyOj-.js.map → WorkflowsOverview-C4az5rwp.js.map} +1 -1
  175. package/dashboard/dist/assets/{YamlWorkflowDetailPage-BMeED677.js → YamlWorkflowDetailPage-BmhlAUFQ.js} +2 -2
  176. package/dashboard/dist/assets/{YamlWorkflowDetailPage-BMeED677.js.map → YamlWorkflowDetailPage-BmhlAUFQ.js.map} +1 -1
  177. package/dashboard/dist/assets/{YamlWorkflowsPage-BMMg0Id6.js → YamlWorkflowsPage-CSbG5o2V.js} +2 -2
  178. package/dashboard/dist/assets/{YamlWorkflowsPage-BMMg0Id6.js.map → YamlWorkflowsPage-CSbG5o2V.js.map} +1 -1
  179. package/dashboard/dist/assets/{agents-CdFkgFvg.js → agents-BohEn7vw.js} +2 -2
  180. package/dashboard/dist/assets/{agents-CdFkgFvg.js.map → agents-BohEn7vw.js.map} +1 -1
  181. package/dashboard/dist/assets/{bots-Mj3LHWWg.js → bots-BG2EO-Wi.js} +2 -2
  182. package/dashboard/dist/assets/{bots-Mj3LHWWg.js.map → bots-BG2EO-Wi.js.map} +1 -1
  183. package/dashboard/dist/assets/{capabilities-Dw1ObK2-.js → capabilities-CeFrBmYX.js} +2 -2
  184. package/dashboard/dist/assets/{capabilities-Dw1ObK2-.js.map → capabilities-CeFrBmYX.js.map} +1 -1
  185. package/dashboard/dist/assets/{controlplane-DcNE1APv.js → controlplane-Dhvt8l8F.js} +2 -2
  186. package/dashboard/dist/assets/{controlplane-DcNE1APv.js.map → controlplane-Dhvt8l8F.js.map} +1 -1
  187. package/dashboard/dist/assets/{escalation-columns-D364Trpy.js → escalation-columns-BWMNxImp.js} +2 -2
  188. package/dashboard/dist/assets/{escalation-columns-D364Trpy.js.map → escalation-columns-BWMNxImp.js.map} +1 -1
  189. package/dashboard/dist/assets/{index-DPStdq4T.js → index-Bd_dgyfJ.js} +2 -2
  190. package/dashboard/dist/assets/{index-DPStdq4T.js.map → index-Bd_dgyfJ.js.map} +1 -1
  191. package/dashboard/dist/assets/{index-B3veJ698.js → index-C8VlM2Oe.js} +2 -2
  192. package/dashboard/dist/assets/{index-B3veJ698.js.map → index-C8VlM2Oe.js.map} +1 -1
  193. package/dashboard/dist/assets/{index-BiVce3n0.js → index-CiqSVDga.js} +2 -2
  194. package/dashboard/dist/assets/{index-BiVce3n0.js.map → index-CiqSVDga.js.map} +1 -1
  195. package/dashboard/dist/assets/{index-DkcI4V_H.js → index-Cl_YXEdp.js} +2 -2
  196. package/dashboard/dist/assets/{index-DkcI4V_H.js.map → index-Cl_YXEdp.js.map} +1 -1
  197. package/dashboard/dist/assets/index-CtZWpy22.js +2 -0
  198. package/dashboard/dist/assets/index-CtZWpy22.js.map +1 -0
  199. package/dashboard/dist/assets/{index-Bq5XNEzD.js → index-D90D9y0J.js} +2 -2
  200. package/dashboard/dist/assets/{index-Bq5XNEzD.js.map → index-D90D9y0J.js.map} +1 -1
  201. package/dashboard/dist/assets/{index-eDm6cz0F.js → index-DABkM7s-.js} +2 -2
  202. package/dashboard/dist/assets/{index-eDm6cz0F.js.map → index-DABkM7s-.js.map} +1 -1
  203. package/dashboard/dist/assets/{index-WSm8bgE7.js → index-Dbwu51xm.js} +3 -3
  204. package/dashboard/dist/assets/{index-WSm8bgE7.js.map → index-Dbwu51xm.js.map} +1 -1
  205. package/dashboard/dist/assets/{index-Dyotfa_k.js → index-Dc3Om6G3.js} +2 -2
  206. package/dashboard/dist/assets/{index-Dyotfa_k.js.map → index-Dc3Om6G3.js.map} +1 -1
  207. package/dashboard/dist/assets/{index-BRGTmoYY.js → index-Dc_zWK23.js} +2 -2
  208. package/dashboard/dist/assets/{index-BRGTmoYY.js.map → index-Dc_zWK23.js.map} +1 -1
  209. package/dashboard/dist/assets/{index-MDD4JYtu.js → index-Y-bdW8vo.js} +2 -2
  210. package/dashboard/dist/assets/{index-MDD4JYtu.js.map → index-Y-bdW8vo.js.map} +1 -1
  211. package/dashboard/dist/assets/{index-Bd6-KmBE.js → index-dYKgd06u.js} +2 -2
  212. package/dashboard/dist/assets/{index-Bd6-KmBE.js.map → index-dYKgd06u.js.map} +1 -1
  213. package/dashboard/dist/assets/{index-BQeHJHYN.js → index-fUsx_gYx.js} +25 -25
  214. package/dashboard/dist/assets/index-fUsx_gYx.js.map +1 -0
  215. package/dashboard/dist/assets/{knowledge-Bafewjxk.js → knowledge-CCcTidNV.js} +2 -2
  216. package/dashboard/dist/assets/{knowledge-Bafewjxk.js.map → knowledge-CCcTidNV.js.map} +1 -1
  217. package/dashboard/dist/assets/{mcp-vLIutbnc.js → mcp-CLA1z7Pg.js} +2 -2
  218. package/dashboard/dist/assets/{mcp-vLIutbnc.js.map → mcp-CLA1z7Pg.js.map} +1 -1
  219. package/dashboard/dist/assets/{mcp-query-BzTtIG90.js → mcp-query-CWG0WMAs.js} +2 -2
  220. package/dashboard/dist/assets/{mcp-query-BzTtIG90.js.map → mcp-query-CWG0WMAs.js.map} +1 -1
  221. package/dashboard/dist/assets/metadata-display-B7X5hGxG.js +2 -0
  222. package/dashboard/dist/assets/metadata-display-B7X5hGxG.js.map +1 -0
  223. package/dashboard/dist/assets/{personas-WD40EDS_.js → personas-8jURIzx6.js} +2 -2
  224. package/dashboard/dist/assets/{personas-WD40EDS_.js.map → personas-8jURIzx6.js.map} +1 -1
  225. package/dashboard/dist/assets/{pipelines-DFwULWs3.js → pipelines-hVVRAXqG.js} +2 -2
  226. package/dashboard/dist/assets/{pipelines-DFwULWs3.js.map → pipelines-hVVRAXqG.js.map} +1 -1
  227. package/dashboard/dist/assets/{tasks-La_-WAUn.js → tasks-BE1O57Bf.js} +2 -2
  228. package/dashboard/dist/assets/{tasks-La_-WAUn.js.map → tasks-BE1O57Bf.js.map} +1 -1
  229. package/dashboard/dist/assets/{topics-CzYMlvqm.js → topics-Bg96Wp1r.js} +2 -2
  230. package/dashboard/dist/assets/{topics-CzYMlvqm.js.map → topics-Bg96Wp1r.js.map} +1 -1
  231. package/dashboard/dist/assets/{useDebouncedValue-C0FQyANW.js → useDebouncedValue-DmEveyEy.js} +2 -2
  232. package/dashboard/dist/assets/{useDebouncedValue-C0FQyANW.js.map → useDebouncedValue-DmEveyEy.js.map} +1 -1
  233. package/dashboard/dist/assets/{useNamespace-WW_XjAb3.js → useNamespace-DHgkzIuL.js} +2 -2
  234. package/dashboard/dist/assets/{useNamespace-WW_XjAb3.js.map → useNamespace-DHgkzIuL.js.map} +1 -1
  235. package/dashboard/dist/assets/{useYamlActivityEvents-B3YxPeFt.js → useYamlActivityEvents-RU0PvU8S.js} +2 -2
  236. package/dashboard/dist/assets/{useYamlActivityEvents-B3YxPeFt.js.map → useYamlActivityEvents-RU0PvU8S.js.map} +1 -1
  237. package/dashboard/dist/assets/{yaml-workflows-COHOjdhF.js → yaml-workflows-DQWE9ijc.js} +2 -2
  238. package/dashboard/dist/assets/{yaml-workflows-COHOjdhF.js.map → yaml-workflows-DQWE9ijc.js.map} +1 -1
  239. package/dashboard/dist/index.html +1 -1
  240. package/docs/hitl/lookups.md +27 -18
  241. package/docs/hitl/x-lt-validation.md +1 -1
  242. package/docs/hitl/x-lt-widget.md +1 -1
  243. package/docs/hitl-guide.md +1 -1
  244. package/docs/scan-codes.md +86 -16
  245. package/package.json +1 -1
  246. package/dashboard/dist/assets/ResolverForm-Bk8iXQ6-.js.map +0 -1
  247. package/dashboard/dist/assets/ScanSchemeDetailPage-YHqbu7oK.js +0 -2
  248. package/dashboard/dist/assets/ScanSchemeDetailPage-YHqbu7oK.js.map +0 -1
  249. package/dashboard/dist/assets/ScanStationPage-B275l6r_.js +0 -2
  250. package/dashboard/dist/assets/ScanStationPage-B275l6r_.js.map +0 -1
  251. package/dashboard/dist/assets/index-BQeHJHYN.js.map +0 -1
  252. package/dashboard/dist/assets/index-BmNAVd4s.js +0 -2
  253. package/dashboard/dist/assets/index-BmNAVd4s.js.map +0 -1
  254. package/dashboard/dist/assets/metadata-display-COo3mMCr.js +0 -2
  255. package/dashboard/dist/assets/metadata-display-COo3mMCr.js.map +0 -1
@@ -104,17 +104,19 @@ function toEngineConfig(escalation) {
104
104
  * });
105
105
  * ```
106
106
  *
107
- * **Pin versioned knowledge lookups — option lists the form reads.** Each ref
108
- * names an immutable knowledge edition; the resolve UI fetches them once and
109
- * the form addresses the content as the `lookup.*` context domain
110
- * (`x-lt-options: "lookup.materials.items"`). Evolve the list by writing the
111
- * entry (a new version mints automatically) and repinning the literal here.
107
+ * **Knowledge lookups — option lists the form reads.** Each ref names a
108
+ * knowledge entry; the resolve UI fetches it and the form addresses the
109
+ * content as the `lookup.*` context domain (`x-lt-options:
110
+ * "lookup.materials.items"`). Leave `version` out (or set `'current'`) and
111
+ * the form reads the newest edition, so a long-open row sees today's list
112
+ * and a closed row the list current when it closed. Pin a `version` when the
113
+ * form must read one exact edition.
112
114
  *
113
115
  * ```typescript
114
116
  * const decision = await conditional<PickerResolverV1>(signalId, {
115
117
  * role: 'catalog-picker',
116
118
  * description: instructions,
117
- * lookups: [{ domain: 'catalog', key: 'materials', version: 2 }],
119
+ * lookups: [{ domain: 'catalog', key: 'materials' }],
118
120
  * });
119
121
  * ```
120
122
  *
@@ -2,4 +2,4 @@ export { listScanSchemes, getScanScheme, listScanRules, getScanRule, } from './r
2
2
  export { upsertScanScheme, deleteScanScheme, upsertScanRule, deleteScanRule, seedScanScheme, seedScanRule, applyScanScheme, applyScanRule, type ScanSchemeInput, type ScanRuleInput, } from './write';
3
3
  export { parseScanCode, interpolateScanTemplate, mentionsClaimToken, renderScanCopy, ScanTemplateError, type ScanParseResult, type ScanParseFailure, type ScanTemplateContext, } from './parse';
4
4
  export { assertValidScheme, assertValidSteps, assertValidIdentityRule, assertSchemesCoexist, } from './validate';
5
- export { isValidGtin, normalizeGtin } from '../../shared/scan-code';
5
+ export { isValidGtin, normalizeGtin, displayGtin } from '../../shared/scan-code';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.normalizeGtin = exports.isValidGtin = exports.assertSchemesCoexist = exports.assertValidIdentityRule = exports.assertValidSteps = exports.assertValidScheme = exports.ScanTemplateError = exports.renderScanCopy = exports.mentionsClaimToken = exports.interpolateScanTemplate = exports.parseScanCode = exports.applyScanRule = exports.applyScanScheme = exports.seedScanRule = exports.seedScanScheme = exports.deleteScanRule = exports.upsertScanRule = exports.deleteScanScheme = exports.upsertScanScheme = exports.getScanRule = exports.listScanRules = exports.getScanScheme = exports.listScanSchemes = void 0;
3
+ exports.displayGtin = exports.normalizeGtin = exports.isValidGtin = exports.assertSchemesCoexist = exports.assertValidIdentityRule = exports.assertValidSteps = exports.assertValidScheme = exports.ScanTemplateError = exports.renderScanCopy = exports.mentionsClaimToken = exports.interpolateScanTemplate = exports.parseScanCode = exports.applyScanRule = exports.applyScanScheme = exports.seedScanRule = exports.seedScanScheme = exports.deleteScanRule = exports.upsertScanRule = exports.deleteScanScheme = exports.upsertScanScheme = exports.getScanRule = exports.listScanRules = exports.getScanScheme = exports.listScanSchemes = void 0;
4
4
  var read_1 = require("./read");
5
5
  Object.defineProperty(exports, "listScanSchemes", { enumerable: true, get: function () { return read_1.listScanSchemes; } });
6
6
  Object.defineProperty(exports, "getScanScheme", { enumerable: true, get: function () { return read_1.getScanScheme; } });
@@ -29,3 +29,4 @@ Object.defineProperty(exports, "assertSchemesCoexist", { enumerable: true, get:
29
29
  var scan_code_1 = require("../../shared/scan-code");
30
30
  Object.defineProperty(exports, "isValidGtin", { enumerable: true, get: function () { return scan_code_1.isValidGtin; } });
31
31
  Object.defineProperty(exports, "normalizeGtin", { enumerable: true, get: function () { return scan_code_1.normalizeGtin; } });
32
+ Object.defineProperty(exports, "displayGtin", { enumerable: true, get: function () { return scan_code_1.displayGtin; } });
@@ -0,0 +1,5 @@
1
+ import { type ScanStep } from '../../types';
2
+ /** The most facts a station screen states before it reads as a data dump. */
3
+ export declare const SCAN_FACTS_MAX = 12;
4
+ /** `facts` on a present step: labeled template values the station states. */
5
+ export declare function assertValidFacts(step: ScanStep, at: string): void;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SCAN_FACTS_MAX = void 0;
4
+ exports.assertValidFacts = assertValidFacts;
5
+ const types_1 = require("../../types");
6
+ /** The most facts a station screen states before it reads as a data dump. */
7
+ exports.SCAN_FACTS_MAX = 12;
8
+ /** `facts` on a present step: labeled template values the station states. */
9
+ function assertValidFacts(step, at) {
10
+ if (step.facts === undefined)
11
+ return;
12
+ if (step.verb !== types_1.SCAN_VERBS.PRESENT)
13
+ throw new Error(`${at}: facts apply only to present steps`);
14
+ if (!Array.isArray(step.facts) || step.facts.length === 0 || step.facts.length > exports.SCAN_FACTS_MAX) {
15
+ throw new Error(`${at}: facts must be an array of 1-${exports.SCAN_FACTS_MAX} { label, value } entries`);
16
+ }
17
+ step.facts.forEach((fact, i) => {
18
+ if (!fact || typeof fact !== 'object' || typeof fact.label !== 'string' || !fact.label.trim()) {
19
+ throw new Error(`${at}: facts[${i}].label must be non-empty text`);
20
+ }
21
+ if (typeof fact.value !== 'string')
22
+ throw new Error(`${at}: facts[${i}].value must be a template string`);
23
+ });
24
+ }
@@ -0,0 +1,8 @@
1
+ import { type ScanStep } from '../../types';
2
+ /**
3
+ * query.types / query.subtypes narrow a locate that is followed by a write
4
+ * by id. Every present choice writes the row it showed, so a present step
5
+ * takes them with any choice; claim, cancel, release, resolve and escalate
6
+ * steps do not.
7
+ */
8
+ export declare function assertValidQueryKinds(step: ScanStep, at: string): void;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.assertValidQueryKinds = assertValidQueryKinds;
4
+ const types_1 = require("../../types");
5
+ // Verbs whose atomic statement locates by the target facet alone when they
6
+ // run as a step; a type/subtype guard on the step would never reach it.
7
+ const RELOCATING_VERBS = [
8
+ types_1.SCAN_VERBS.CLAIM, types_1.SCAN_VERBS.CLAIM_SHOW_DETAIL, types_1.SCAN_VERBS.CANCEL,
9
+ types_1.SCAN_VERBS.RELEASE, types_1.SCAN_VERBS.ESCALATE, types_1.SCAN_VERBS.RESOLVE,
10
+ ];
11
+ /**
12
+ * query.types / query.subtypes narrow a locate that is followed by a write
13
+ * by id. Every present choice writes the row it showed, so a present step
14
+ * takes them with any choice; claim, cancel, release, resolve and escalate
15
+ * steps do not.
16
+ */
17
+ function assertValidQueryKinds(step, at) {
18
+ const { types, subtypes } = step.query ?? {};
19
+ if (types === undefined && subtypes === undefined)
20
+ return;
21
+ for (const [name, list] of [['types', types], ['subtypes', subtypes]]) {
22
+ if (list !== undefined && (!Array.isArray(list) || list.length === 0
23
+ || !list.every((v) => typeof v === 'string' && v))) {
24
+ throw new Error(`${at}: query.${name} must be a non-empty array of strings`);
25
+ }
26
+ }
27
+ if (RELOCATING_VERBS.includes(step.verb)) {
28
+ throw new Error(`${at}: query.types/subtypes are not supported on ${step.verb} steps (the write re-locates by the target facet)`);
29
+ }
30
+ if (step.subject) {
31
+ throw new Error(`${at}: a subject step narrows with params.accumulate.container or item, not query.types/subtypes`);
32
+ }
33
+ if (step.query?.availability === types_1.SCAN_AVAILABILITY.MINE && ((types?.length ?? 0) > 1 || (subtypes?.length ?? 0) > 1)) {
34
+ throw new Error(`${at}: with availability 'mine', query.types and query.subtypes take at most one entry each`);
35
+ }
36
+ }
@@ -67,6 +67,8 @@ function assertValidSubjectStep(step, at) {
67
67
  if ((accumulate?.from || accumulate?.into) && accumulate.containerFacet) {
68
68
  throw new Error(`${at}: params.accumulate.containerFacet is item mode; drop it for from/into 'subject'`);
69
69
  }
70
+ if (accumulate?.item !== undefined)
71
+ assertValidItemSelector(accumulate, at);
70
72
  if (accumulate?.from && !step.params?.itemKey) {
71
73
  throw new Error(`${at}: from-subject accumulate requires params.itemKey (e.g. '{subject.<facet>}')`);
72
74
  }
@@ -101,8 +103,8 @@ function assertValidSubjectStep(step, at) {
101
103
  if (typeof step.refuse.missing !== 'string' || !step.refuse.missing) {
102
104
  throw new Error(`${at}: refuse.missing must be markdown`);
103
105
  }
104
- if (accumulate?.from !== 'subject') {
105
- throw new Error(`${at}: refuse.missing applies only to a from-subject accumulate`);
106
+ if (accumulate?.from !== 'subject' && !(accumulate?.into === 'subject' && accumulate.item)) {
107
+ throw new Error(`${at}: refuse.missing applies only to a from-subject accumulate, or an into-subject accumulate with item`);
106
108
  }
107
109
  }
108
110
  }
@@ -115,6 +117,31 @@ function assertValidSubjectStep(step, at) {
115
117
  else if (step.params?.fill !== undefined)
116
118
  throw new Error(`${at}: params.fill applies only to fill steps`);
117
119
  }
120
+ function assertValidItemSelector(accumulate, at) {
121
+ const item = accumulate.item;
122
+ if (accumulate.into !== 'subject') {
123
+ throw new Error(`${at}: params.accumulate.item applies only to an into-subject accumulate`);
124
+ }
125
+ if (!isPlainObject(item))
126
+ throw new Error(`${at}: params.accumulate.item must be an object`);
127
+ if (item.roles !== undefined && !isStringList(item.roles)) {
128
+ throw new Error(`${at}: params.accumulate.item.roles must be a non-empty array of roles`);
129
+ }
130
+ if (item.types !== undefined && !isStringList(item.types)) {
131
+ throw new Error(`${at}: params.accumulate.item.types must be a non-empty array of strings`);
132
+ }
133
+ if (item.subtypes !== undefined && !isStringList(item.subtypes)) {
134
+ throw new Error(`${at}: params.accumulate.item.subtypes must be a non-empty array of strings`);
135
+ }
136
+ if (item.facets !== undefined) {
137
+ if (!isPlainObject(item.facets))
138
+ throw new Error(`${at}: params.accumulate.item.facets must be an object`);
139
+ for (const key of Object.keys(item.facets)) {
140
+ if (!facet_sql_1.FACET_KEY.test(key))
141
+ throw new Error(`${at}: params.accumulate.item.facets key "${key}" must be a facet key`);
142
+ }
143
+ }
144
+ }
118
145
  function assertValidHold(step, at) {
119
146
  if (step.cardinality === 'many')
120
147
  throw new Error(`${at}: hold locates a single row (cardinality first)`);
@@ -8,6 +8,8 @@ const types_1 = require("../../types");
8
8
  const scan_code_1 = require("../../shared/scan-code");
9
9
  const facet_sql_1 = require("../escalation/facet-sql");
10
10
  const validate_subject_1 = require("./validate-subject");
11
+ const validate_query_1 = require("./validate-query");
12
+ const validate_facts_1 = require("./validate-facts");
11
13
  const VALID_VERBS = new Set(Object.values(types_1.SCAN_VERBS));
12
14
  /** Double-scan selection tokens — short, label-printable, never scheme-shaped. */
13
15
  const CHOICE_CODE = /^[A-Za-z0-9_-]{1,32}$/;
@@ -242,6 +244,8 @@ function assertValidSteps(steps) {
242
244
  if (step.query && step.query.roles && !Array.isArray(step.query.roles)) {
243
245
  throw new Error(`${at}: query.roles must be an array`);
244
246
  }
247
+ (0, validate_query_1.assertValidQueryKinds)(step, at);
248
+ (0, validate_facts_1.assertValidFacts)(step, at);
245
249
  // Claim and cancel lock via claim-by-metadata, whose SQL filter is the
246
250
  // target facet + roles only — extra facet guards would be silently
247
251
  // ignored there, so reject them at write time. (Locate, resolve, and
@@ -259,28 +263,32 @@ function assertValidSteps(steps) {
259
263
  const BAG_TOKEN = /\{(claim|item|subject|container|fill)\.([^}]*)\}/g;
260
264
  /**
261
265
  * Bag tokens name facet keys and may only read what the step has:
262
- * `{item.…}` the row an item-mode accumulate or a hold located,
266
+ * `{item.…}` the row an item-mode accumulate, an into-subject accumulate
267
+ * with `item`, or a hold located (and, in a present step's facts, the row it
268
+ * presents),
263
269
  * `{subject.…}` the held subject (steps with a subject gate), and
264
270
  * `{container.…}` / `{fill.…}` only inside refusal and done copy, where a
265
- * subject accumulate or a fill has read them.
271
+ * subject accumulate or a fill has read them (into-subject: the held row).
266
272
  */
267
273
  function assertValidTemplateTokens(step, at) {
268
- const itemRow = (step.verb === types_1.SCAN_VERBS.ACCUMULATE && !!step.params?.accumulate?.containerFacet)
274
+ const accumulate = step.verb === types_1.SCAN_VERBS.ACCUMULATE ? step.params?.accumulate : undefined;
275
+ const itemRow = !!accumulate?.containerFacet || (accumulate?.into === 'subject' && !!accumulate.item)
269
276
  || step.verb === types_1.SCAN_VERBS.HOLD;
270
- const check = (value, inRefusal) => {
277
+ const containerCopy = accumulate?.from === 'subject' || accumulate?.into === 'subject';
278
+ const check = (value, inRefusal, inFacts = false) => {
271
279
  for (const match of JSON.stringify(value ?? {}).matchAll(BAG_TOKEN)) {
272
280
  const [token, bag, facet] = match;
273
281
  if (!facet_sql_1.FACET_KEY.test(facet)) {
274
282
  throw new Error(`${at}: template token ${token} must name a facet key`);
275
283
  }
276
- if (bag === 'item' && !itemRow) {
277
- throw new Error(`${at}: ${token} reads the located item row, which only an item-mode accumulate or a hold step has`);
284
+ if (bag === 'item' && !itemRow && !inFacts) {
285
+ throw new Error(`${at}: ${token} reads the located item row, which only an item-mode accumulate, an into-subject accumulate with item, or a hold step has`);
278
286
  }
279
287
  if (bag === 'subject' && !step.subject) {
280
288
  throw new Error(`${at}: ${token} reads the held subject, which only a step with a subject gate has`);
281
289
  }
282
- if (bag === 'container' && !(inRefusal && step.params?.accumulate?.from === 'subject')) {
283
- throw new Error(`${at}: ${token} is readable only in the refusal or done copy of a from-subject accumulate step`);
290
+ if (bag === 'container' && !(inRefusal && containerCopy)) {
291
+ throw new Error(`${at}: ${token} is readable only in the refusal or done copy of a subject accumulate step`);
284
292
  }
285
293
  if (bag === 'fill' && !(inRefusal && step.verb === types_1.SCAN_VERBS.FILL)) {
286
294
  throw new Error(`${at}: ${token} is readable only in the refusal or done copy of a fill step`);
@@ -291,4 +299,5 @@ function assertValidTemplateTokens(step, at) {
291
299
  check(step.match, false);
292
300
  check(step.refuse, true);
293
301
  check(step.done, true);
302
+ check(step.facts, false, true);
294
303
  }
@@ -3,3 +3,9 @@ export declare const GTIN_CODE_LENGTHS: readonly number[];
3
3
  export declare function isValidGtin(code: string): boolean;
4
4
  /** The 14-digit form of a valid GTIN: UPC-A, EAN-13 and EAN-8 left-padded with zeros. */
5
5
  export declare function normalizeGtin(code: string): string;
6
+ /**
7
+ * A stored 14-digit GTIN as the package prints it: EAN-8 when it was padded
8
+ * from eight digits, otherwise EAN-13 (a UPC-A reads as its EAN-13 with a
9
+ * leading zero). Anything else comes back unchanged.
10
+ */
11
+ export declare function displayGtin(code: string): string;
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.GTIN_CODE_LENGTHS = void 0;
6
6
  exports.isValidGtin = isValidGtin;
7
7
  exports.normalizeGtin = normalizeGtin;
8
+ exports.displayGtin = displayGtin;
8
9
  exports.GTIN_CODE_LENGTHS = [8, 12, 13, 14];
9
10
  /** True when `code` is all digits, a GTIN length, and its mod-10 check digit holds. */
10
11
  function isValidGtin(code) {
@@ -23,3 +24,15 @@ function isValidGtin(code) {
23
24
  function normalizeGtin(code) {
24
25
  return code.padStart(14, '0');
25
26
  }
27
+ /**
28
+ * A stored 14-digit GTIN as the package prints it: EAN-8 when it was padded
29
+ * from eight digits, otherwise EAN-13 (a UPC-A reads as its EAN-13 with a
30
+ * leading zero). Anything else comes back unchanged.
31
+ */
32
+ function displayGtin(code) {
33
+ if (code.length !== 14 || !isValidGtin(code))
34
+ return code;
35
+ if (code.startsWith('000000') && isValidGtin(code.slice(6)))
36
+ return code.slice(6);
37
+ return code.startsWith('0') ? code.slice(1) : code;
38
+ }
@@ -1,2 +1,2 @@
1
1
  export { parseScanCode, fixedCodeLengths, type ParseableScheme, type ParsedCode, type ScanParseFailure, type ScanParseResult, } from './parse';
2
- export { isValidGtin, normalizeGtin, GTIN_CODE_LENGTHS } from './gtin';
2
+ export { isValidGtin, normalizeGtin, displayGtin, GTIN_CODE_LENGTHS } from './gtin';
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GTIN_CODE_LENGTHS = exports.normalizeGtin = exports.isValidGtin = exports.fixedCodeLengths = exports.parseScanCode = void 0;
3
+ exports.GTIN_CODE_LENGTHS = exports.displayGtin = exports.normalizeGtin = exports.isValidGtin = exports.fixedCodeLengths = exports.parseScanCode = void 0;
4
4
  var parse_1 = require("./parse");
5
5
  Object.defineProperty(exports, "parseScanCode", { enumerable: true, get: function () { return parse_1.parseScanCode; } });
6
6
  Object.defineProperty(exports, "fixedCodeLengths", { enumerable: true, get: function () { return parse_1.fixedCodeLengths; } });
7
7
  var gtin_1 = require("./gtin");
8
8
  Object.defineProperty(exports, "isValidGtin", { enumerable: true, get: function () { return gtin_1.isValidGtin; } });
9
9
  Object.defineProperty(exports, "normalizeGtin", { enumerable: true, get: function () { return gtin_1.normalizeGtin; } });
10
+ Object.defineProperty(exports, "displayGtin", { enumerable: true, get: function () { return gtin_1.displayGtin; } });
10
11
  Object.defineProperty(exports, "GTIN_CODE_LENGTHS", { enumerable: true, get: function () { return gtin_1.GTIN_CODE_LENGTHS; } });