@hotmeshio/long-tail 0.22.1 → 0.22.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/api/escalations/accumulate.js +38 -19
- package/build/api/escalations/resolve-batch.js +18 -11
- package/build/api/roles.js +4 -0
- package/build/api/scan-codes/badge-policy.d.ts +10 -0
- package/build/api/scan-codes/badge-policy.js +72 -0
- package/build/api/scan-codes/choice.js +16 -10
- package/build/api/scan-codes/context.d.ts +45 -1
- package/build/api/scan-codes/context.js +51 -3
- package/build/api/scan-codes/execute.js +73 -35
- package/build/api/scan-codes/grant.d.ts +27 -0
- package/build/api/scan-codes/grant.js +67 -0
- package/build/api/scan-codes/hold.d.ts +10 -0
- package/build/api/scan-codes/hold.js +98 -0
- package/build/api/scan-codes/identity.d.ts +5 -2
- package/build/api/scan-codes/identity.js +26 -8
- package/build/api/scan-codes/subject.d.ts +15 -0
- package/build/api/scan-codes/subject.js +68 -0
- package/build/api/scan-codes/verb-accumulate.d.ts +24 -0
- package/build/api/scan-codes/verb-accumulate.js +147 -0
- package/build/api/scan-codes/verb-fill.d.ts +6 -0
- package/build/api/scan-codes/verb-fill.js +152 -0
- package/build/api/scan-codes/verbs-subject.d.ts +14 -0
- package/build/api/scan-codes/verbs-subject.js +270 -0
- package/build/api/scan-codes/verbs.d.ts +1 -21
- package/build/api/scan-codes/verbs.js +26 -115
- package/build/index.d.ts +1 -0
- package/build/index.js +8 -2
- package/build/lib/db/schemas/037_scan_gtin_and_subject_grants.sql +27 -0
- package/build/routes/escalations/acting.d.ts +5 -0
- package/build/routes/escalations/acting.js +8 -1
- package/build/routes/scan-codes.js +3 -0
- package/build/services/iam/acting-identity.d.ts +29 -4
- package/build/services/iam/acting-identity.js +60 -17
- package/build/services/iam/ephemeral.d.ts +21 -0
- package/build/services/iam/ephemeral.js +32 -1
- package/build/services/iam/sql.d.ts +10 -0
- package/build/services/iam/sql.js +32 -3
- package/build/services/role/badge-grant.d.ts +5 -0
- package/build/services/role/badge-grant.js +36 -0
- package/build/services/role/seed.js +5 -0
- package/build/services/role/types.d.ts +14 -0
- package/build/services/role/types.js +5 -0
- package/build/services/scan-code/index.d.ts +3 -2
- package/build/services/scan-code/index.js +7 -1
- package/build/services/scan-code/parse.d.ts +23 -20
- package/build/services/scan-code/parse.js +45 -90
- package/build/services/scan-code/read.js +1 -0
- package/build/services/scan-code/sql.d.ts +3 -3
- package/build/services/scan-code/sql.js +11 -8
- package/build/services/scan-code/validate-subject.d.ts +7 -0
- package/build/services/scan-code/validate-subject.js +158 -0
- package/build/services/scan-code/validate.d.ts +7 -0
- package/build/services/scan-code/validate.js +94 -18
- package/build/services/scan-code/write.d.ts +1 -0
- package/build/services/scan-code/write.js +9 -3
- package/build/shared/form-validation/field-validator.js +4 -0
- package/build/shared/form-validation/index.d.ts +1 -0
- package/build/shared/form-validation/index.js +1 -0
- package/build/shared/form-validation/x-lt-scan.d.ts +52 -0
- package/build/shared/form-validation/x-lt-scan.js +166 -0
- package/build/shared/scan-code/gtin.d.ts +5 -0
- package/build/shared/scan-code/gtin.js +25 -0
- package/build/shared/scan-code/index.d.ts +2 -0
- package/build/shared/scan-code/index.js +10 -0
- package/build/shared/scan-code/parse.d.ts +46 -0
- package/build/shared/scan-code/parse.js +133 -0
- package/build/system/mcp-servers/admin/scan-codes.js +10 -4
- package/build/system/mcp-servers/admin/schemas.d.ts +754 -23
- package/build/system/mcp-servers/admin/schemas.js +57 -4
- package/build/system/mcp-servers/human-queue-schemas.d.ts +6 -6
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/escalation.d.ts +2 -0
- package/build/types/escalation.js +3 -1
- package/build/types/index.d.ts +2 -2
- package/build/types/index.js +8 -1
- package/build/types/scan-code/constants.d.ts +182 -0
- package/build/types/{scan-code.js → scan-code/constants.js} +72 -11
- package/build/types/scan-code/index.d.ts +3 -0
- package/build/types/scan-code/index.js +17 -0
- package/build/types/scan-code/response.d.ts +140 -0
- package/build/types/scan-code/response.js +2 -0
- package/build/types/scan-code/rule.d.ts +199 -0
- package/build/types/scan-code/rule.js +2 -0
- package/build/types/startup.d.ts +3 -1
- package/dashboard/dist/assets/{AdminDashboard-BbWve-Ax.js → AdminDashboard-DBW12qQt.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-BbWve-Ax.js.map → AdminDashboard-DBW12qQt.js.map} +1 -1
- package/dashboard/dist/assets/{AgentConfigPage-M-9eTKhP.js → AgentConfigPage-CmHv8U9M.js} +2 -2
- package/dashboard/dist/assets/{AgentConfigPage-M-9eTKhP.js.map → AgentConfigPage-CmHv8U9M.js.map} +1 -1
- package/dashboard/dist/assets/{AgentDetailPage-CsakSlx5.js → AgentDetailPage-D1scIbz-.js} +3 -3
- package/dashboard/dist/assets/{AgentDetailPage-CsakSlx5.js.map → AgentDetailPage-D1scIbz-.js.map} +1 -1
- package/dashboard/dist/assets/{AgentsPage-Cj_cRTT1.js → AgentsPage-BA_ai9HJ.js} +2 -2
- package/dashboard/dist/assets/{AgentsPage-Cj_cRTT1.js.map → AgentsPage-BA_ai9HJ.js.map} +1 -1
- package/dashboard/dist/assets/{AvailableEscalationsPage-BXJmMBM1.js → AvailableEscalationsPage-C2_5aEFW.js} +2 -2
- package/dashboard/dist/assets/{AvailableEscalationsPage-BXJmMBM1.js.map → AvailableEscalationsPage-C2_5aEFW.js.map} +1 -1
- package/dashboard/dist/assets/{BotPicker-CGB16rYU.js → BotPicker-BZo4Kp4a.js} +2 -2
- package/dashboard/dist/assets/{BotPicker-CGB16rYU.js.map → BotPicker-BZo4Kp4a.js.map} +1 -1
- package/dashboard/dist/assets/{BulkAssignModal-MjxcU7N1.js → BulkAssignModal-BFhyxY2T.js} +2 -2
- package/dashboard/dist/assets/{BulkAssignModal-MjxcU7N1.js.map → BulkAssignModal-BFhyxY2T.js.map} +1 -1
- package/dashboard/dist/assets/CapabilitiesPage-CvOX6vAc.js +2 -0
- package/dashboard/dist/assets/{CapabilitiesPage-BxadotXn.js.map → CapabilitiesPage-CvOX6vAc.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-BBNpP-6h.js → CollapsibleSection-GCJsV9Oq.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-BBNpP-6h.js.map → CollapsibleSection-GCJsV9Oq.js.map} +1 -1
- package/dashboard/dist/assets/{ConfirmDeleteModal-D_kAbT_D.js → ConfirmDeleteModal-CAgYLcef.js} +2 -2
- package/dashboard/dist/assets/{ConfirmDeleteModal-D_kAbT_D.js.map → ConfirmDeleteModal-CAgYLcef.js.map} +1 -1
- package/dashboard/dist/assets/CountdownTimer-Dik2z0M_.js +2 -0
- package/dashboard/dist/assets/{CountdownTimer-CI_JOAvk.js.map → CountdownTimer-Dik2z0M_.js.map} +1 -1
- package/dashboard/dist/assets/{CredentialsPage-C9OA1Q2J.js → CredentialsPage-twd2xCOW.js} +2 -2
- package/dashboard/dist/assets/{CredentialsPage-C9OA1Q2J.js.map → CredentialsPage-twd2xCOW.js.map} +1 -1
- package/dashboard/dist/assets/{CronLabel-sxLLBf2I.js → CronLabel-DdnIuudX.js} +2 -2
- package/dashboard/dist/assets/{CronLabel-sxLLBf2I.js.map → CronLabel-DdnIuudX.js.map} +1 -1
- package/dashboard/dist/assets/{ElapsedCell-jH9m8Dgl.js → ElapsedCell-DCctVv5R.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-jH9m8Dgl.js.map → ElapsedCell-DCctVv5R.js.map} +1 -1
- package/dashboard/dist/assets/{EntityTimelinePanel-Dl3Nr2kk.js → EntityTimelinePanel-CMnskyWv.js} +2 -2
- package/dashboard/dist/assets/{EntityTimelinePanel-Dl3Nr2kk.js.map → EntityTimelinePanel-CMnskyWv.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationListSchemaPage-DAK6It5J.js → EscalationListSchemaPage-VfCn6WDb.js} +3 -3
- package/dashboard/dist/assets/{EscalationListSchemaPage-DAK6It5J.js.map → EscalationListSchemaPage-VfCn6WDb.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationListView-CAHbdxKR.js → EscalationListView-CGQZxcC-.js} +2 -2
- package/dashboard/dist/assets/{EscalationListView-CAHbdxKR.js.map → EscalationListView-CGQZxcC-.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationSchemaPage-DotfAMCL.js → EscalationSchemaPage-BX0tx-PM.js} +3 -3
- package/dashboard/dist/assets/{EscalationSchemaPage-DotfAMCL.js.map → EscalationSchemaPage-BX0tx-PM.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationTimeline-DqmFydnU.js → EscalationTimeline-DKoSM56J.js} +2 -2
- package/dashboard/dist/assets/{EscalationTimeline-DqmFydnU.js.map → EscalationTimeline-DKoSM56J.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationTitleSelect-BpRquguO.js → EscalationTitleSelect-DWGLBOmS.js} +2 -2
- package/dashboard/dist/assets/{EscalationTitleSelect-BpRquguO.js.map → EscalationTitleSelect-DWGLBOmS.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-DtGOqnP4.js → EscalationsOverview-C2XoguaA.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-DtGOqnP4.js.map → EscalationsOverview-C2XoguaA.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-DSHqKyX2.js → EventTable-CBUWq7--.js} +2 -2
- package/dashboard/dist/assets/{EventTable-DSHqKyX2.js.map → EventTable-CBUWq7--.js.map} +1 -1
- package/dashboard/dist/assets/{FilterBar-Dxd0wNSW.js → FilterBar-8IdbleZ9.js} +2 -2
- package/dashboard/dist/assets/{FilterBar-Dxd0wNSW.js.map → FilterBar-8IdbleZ9.js.map} +1 -1
- package/dashboard/dist/assets/GrantScopeField-BzWGzBfA.js +2 -0
- package/dashboard/dist/assets/GrantScopeField-BzWGzBfA.js.map +1 -0
- package/dashboard/dist/assets/{GraphInvokePage-ChqqGkro.js → GraphInvokePage-CUvoPzsW.js} +2 -2
- package/dashboard/dist/assets/{GraphInvokePage-ChqqGkro.js.map → GraphInvokePage-CUvoPzsW.js.map} +1 -1
- package/dashboard/dist/assets/{HomePage-ByKesG8w.js → HomePage-BP7v9GLJ.js} +2 -2
- package/dashboard/dist/assets/{HomePage-ByKesG8w.js.map → HomePage-BP7v9GLJ.js.map} +1 -1
- package/dashboard/dist/assets/{ListToolbar-Ddz_S2av.js → ListToolbar-Cnacuwoy.js} +2 -2
- package/dashboard/dist/assets/{ListToolbar-Ddz_S2av.js.map → ListToolbar-Cnacuwoy.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-CVe13tEv.js → McpOverview-C2JoNoDA.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-CVe13tEv.js.map → McpOverview-C2JoNoDA.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryDetailPage-BQYF2Mjq.js → McpQueryDetailPage-C_nih0w-.js} +2 -2
- package/dashboard/dist/assets/{McpQueryDetailPage-BQYF2Mjq.js.map → McpQueryDetailPage-C_nih0w-.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryPage-DZi5lm7s.js → McpQueryPage-U_wNXow2.js} +2 -2
- package/dashboard/dist/assets/{McpQueryPage-DZi5lm7s.js.map → McpQueryPage-U_wNXow2.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunDetailPage-DreARTE1.js → McpRunDetailPage-DtKoJq6J.js} +2 -2
- package/dashboard/dist/assets/{McpRunDetailPage-DreARTE1.js.map → McpRunDetailPage-DtKoJq6J.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunsPage-DmO0YVhT.js → McpRunsPage-CnYtfGhf.js} +2 -2
- package/dashboard/dist/assets/{McpRunsPage-DmO0YVhT.js.map → McpRunsPage-CnYtfGhf.js.map} +1 -1
- package/dashboard/dist/assets/{OperationsPage-DpjCO85T.js → OperationsPage-C7hupIer.js} +2 -2
- package/dashboard/dist/assets/{OperationsPage-DpjCO85T.js.map → OperationsPage-C7hupIer.js.map} +1 -1
- package/dashboard/dist/assets/{OperatorDashboard-Vv_MEBkv.js → OperatorDashboard-fVuLn2D5.js} +2 -2
- package/dashboard/dist/assets/{OperatorDashboard-Vv_MEBkv.js.map → OperatorDashboard-fVuLn2D5.js.map} +1 -1
- package/dashboard/dist/assets/{PersonaDetailPage-CW-2uBHY.js → PersonaDetailPage-C-4o8lPw.js} +2 -2
- package/dashboard/dist/assets/{PersonaDetailPage-CW-2uBHY.js.map → PersonaDetailPage-C-4o8lPw.js.map} +1 -1
- package/dashboard/dist/assets/{PersonasPage-CO6yYQdm.js → PersonasPage-BL1FwLmv.js} +2 -2
- package/dashboard/dist/assets/{PersonasPage-CO6yYQdm.js.map → PersonasPage-BL1FwLmv.js.map} +1 -1
- package/dashboard/dist/assets/{PortalPage-DcNqhBlg.js → PortalPage-tJG5sgb1.js} +2 -2
- package/dashboard/dist/assets/{PortalPage-DcNqhBlg.js.map → PortalPage-tJG5sgb1.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessDetailPage-BuipGZcC.js → ProcessDetailPage-Dz_jY4Yt.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-BuipGZcC.js.map → ProcessDetailPage-Dz_jY4Yt.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-D9DYntvl.js → ProcessesListPage-Cbn9cter.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-D9DYntvl.js.map → ProcessesListPage-Cbn9cter.js.map} +1 -1
- package/dashboard/dist/assets/ResolverForm-Bk8iXQ6-.js +8 -0
- package/dashboard/dist/assets/ResolverForm-Bk8iXQ6-.js.map +1 -0
- package/dashboard/dist/assets/RoleDetailPage-owPi6gI9.js +8 -0
- package/dashboard/dist/assets/RoleDetailPage-owPi6gI9.js.map +1 -0
- package/dashboard/dist/assets/{RolesPage-0QJOBSzF.js → RolesPage-NwmMvZFa.js} +2 -2
- package/dashboard/dist/assets/{RolesPage-0QJOBSzF.js.map → RolesPage-NwmMvZFa.js.map} +1 -1
- package/dashboard/dist/assets/{RunAsSelector-Dh4lyyRo.js → RunAsSelector-tgEooTyU.js} +2 -2
- package/dashboard/dist/assets/{RunAsSelector-Dh4lyyRo.js.map → RunAsSelector-tgEooTyU.js.map} +1 -1
- package/dashboard/dist/assets/ScanCodesPage-CUv_8ic6.js +2 -0
- package/dashboard/dist/assets/ScanCodesPage-CUv_8ic6.js.map +1 -0
- package/dashboard/dist/assets/ScanSchemeDetailPage-YHqbu7oK.js +2 -0
- package/dashboard/dist/assets/ScanSchemeDetailPage-YHqbu7oK.js.map +1 -0
- package/dashboard/dist/assets/ScanStationPage-B275l6r_.js +2 -0
- package/dashboard/dist/assets/ScanStationPage-B275l6r_.js.map +1 -0
- package/dashboard/dist/assets/{StickyPagination-BSUyf5ja.js → StickyPagination-CsTI_gvJ.js} +2 -2
- package/dashboard/dist/assets/{StickyPagination-BSUyf5ja.js.map → StickyPagination-CsTI_gvJ.js.map} +1 -1
- package/dashboard/dist/assets/{StreamMessageDetail--tp7l2Sd.js → StreamMessageDetail-auRlvjTh.js} +2 -2
- package/dashboard/dist/assets/{StreamMessageDetail--tp7l2Sd.js.map → StreamMessageDetail-auRlvjTh.js.map} +1 -1
- package/dashboard/dist/assets/{SwimlaneTimeline-CxBZ2THh.js → SwimlaneTimeline-BLoVHYAd.js} +2 -2
- package/dashboard/dist/assets/{SwimlaneTimeline-CxBZ2THh.js.map → SwimlaneTimeline-BLoVHYAd.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-BJ1QrmPH.js → TaskDetailPage-BPsZ1bK_.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-BJ1QrmPH.js.map → TaskDetailPage-BPsZ1bK_.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-5BydGWmt.js → TasksListPage-BNGM74yT.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-5BydGWmt.js.map → TasksListPage-BNGM74yT.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-CCnz84Y4.js → TimeAgo-BnAHXGK7.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-CCnz84Y4.js.map → TimeAgo-BnAHXGK7.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-D0ru7Lya.js → TimestampCell-J4yae6mc.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-D0ru7Lya.js.map → TimestampCell-J4yae6mc.js.map} +1 -1
- package/dashboard/dist/assets/{ToolTestPanel-3Kpofmen.js → ToolTestPanel-BdzzgXDu.js} +2 -2
- package/dashboard/dist/assets/{ToolTestPanel-3Kpofmen.js.map → ToolTestPanel-BdzzgXDu.js.map} +1 -1
- package/dashboard/dist/assets/{TopicDetailPage-BaBXD_AK.js → TopicDetailPage-DJKg8lb7.js} +2 -2
- package/dashboard/dist/assets/{TopicDetailPage-BaBXD_AK.js.map → TopicDetailPage-DJKg8lb7.js.map} +1 -1
- package/dashboard/dist/assets/{TopicsPage-Cnm1AAjh.js → TopicsPage-DQV0WxG6.js} +2 -2
- package/dashboard/dist/assets/{TopicsPage-Cnm1AAjh.js.map → TopicsPage-DQV0WxG6.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-CXsdPiMZ.js → UserName-Ct09nGh5.js} +2 -2
- package/dashboard/dist/assets/{UserName-CXsdPiMZ.js.map → UserName-Ct09nGh5.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-zx3AUJFd.js → WorkflowExecutionPage-B5WJOsee.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-zx3AUJFd.js.map → WorkflowExecutionPage-B5WJOsee.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsDashboard-DfAGK1l7.js → WorkflowsDashboard-Hc87TRgD.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsDashboard-DfAGK1l7.js.map → WorkflowsDashboard-Hc87TRgD.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-QIYvoa13.js → WorkflowsOverview-CJQbyOj-.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-QIYvoa13.js.map → WorkflowsOverview-CJQbyOj-.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-DGgO3hyB.js → YamlWorkflowDetailPage-BMeED677.js} +8 -8
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-DGgO3hyB.js.map → YamlWorkflowDetailPage-BMeED677.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowsPage-CEsHm0B9.js → YamlWorkflowsPage-BMMg0Id6.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowsPage-CEsHm0B9.js.map → YamlWorkflowsPage-BMMg0Id6.js.map} +1 -1
- package/dashboard/dist/assets/{agents-v_HH3Rji.js → agents-CdFkgFvg.js} +2 -2
- package/dashboard/dist/assets/{agents-v_HH3Rji.js.map → agents-CdFkgFvg.js.map} +1 -1
- package/dashboard/dist/assets/{bots-bwvWYrXz.js → bots-Mj3LHWWg.js} +2 -2
- package/dashboard/dist/assets/{bots-bwvWYrXz.js.map → bots-Mj3LHWWg.js.map} +1 -1
- package/dashboard/dist/assets/{capabilities-D4vaw_nQ.js → capabilities-Dw1ObK2-.js} +2 -2
- package/dashboard/dist/assets/{capabilities-D4vaw_nQ.js.map → capabilities-Dw1ObK2-.js.map} +1 -1
- package/dashboard/dist/assets/{controlplane-CiiZ6LJF.js → controlplane-DcNE1APv.js} +2 -2
- package/dashboard/dist/assets/{controlplane-CiiZ6LJF.js.map → controlplane-DcNE1APv.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-columns-Dv-MB3eC.js → escalation-columns-D364Trpy.js} +2 -2
- package/dashboard/dist/assets/{escalation-columns-Dv-MB3eC.js.map → escalation-columns-D364Trpy.js.map} +1 -1
- package/dashboard/dist/assets/{index-IJmtbuLh.js → index-B3veJ698.js} +2 -2
- package/dashboard/dist/assets/{index-IJmtbuLh.js.map → index-B3veJ698.js.map} +1 -1
- package/dashboard/dist/assets/index-BQeHJHYN.js +67 -0
- package/dashboard/dist/assets/index-BQeHJHYN.js.map +1 -0
- package/dashboard/dist/assets/{index-D2VKBMng.js → index-BRGTmoYY.js} +2 -2
- package/dashboard/dist/assets/{index-D2VKBMng.js.map → index-BRGTmoYY.js.map} +1 -1
- package/dashboard/dist/assets/{index-C4Lce2ET.js → index-Bd6-KmBE.js} +3 -3
- package/dashboard/dist/assets/{index-C4Lce2ET.js.map → index-Bd6-KmBE.js.map} +1 -1
- package/dashboard/dist/assets/{index-CcuvGdvf.js → index-BiVce3n0.js} +2 -2
- package/dashboard/dist/assets/{index-CcuvGdvf.js.map → index-BiVce3n0.js.map} +1 -1
- package/dashboard/dist/assets/{index-D6pBLZFu.js → index-BmNAVd4s.js} +2 -2
- package/dashboard/dist/assets/{index-D6pBLZFu.js.map → index-BmNAVd4s.js.map} +1 -1
- package/dashboard/dist/assets/{index-CjenRVX_.js → index-Bq5XNEzD.js} +2 -2
- package/dashboard/dist/assets/{index-CjenRVX_.js.map → index-Bq5XNEzD.js.map} +1 -1
- package/dashboard/dist/assets/{index-CzjUgFt_.js → index-DPStdq4T.js} +2 -2
- package/dashboard/dist/assets/{index-CzjUgFt_.js.map → index-DPStdq4T.js.map} +1 -1
- package/dashboard/dist/assets/index-DcppjzP5.css +1 -0
- package/dashboard/dist/assets/{index-C3WutFpT.js → index-DkcI4V_H.js} +2 -2
- package/dashboard/dist/assets/{index-C3WutFpT.js.map → index-DkcI4V_H.js.map} +1 -1
- package/dashboard/dist/assets/{index-2tzsxFat.js → index-Dyotfa_k.js} +2 -2
- package/dashboard/dist/assets/{index-2tzsxFat.js.map → index-Dyotfa_k.js.map} +1 -1
- package/dashboard/dist/assets/{index-C_ISDOWJ.js → index-MDD4JYtu.js} +2 -2
- package/dashboard/dist/assets/{index-C_ISDOWJ.js.map → index-MDD4JYtu.js.map} +1 -1
- package/dashboard/dist/assets/index-WSm8bgE7.js +3 -0
- package/dashboard/dist/assets/index-WSm8bgE7.js.map +1 -0
- package/dashboard/dist/assets/{index-BLB77tc8.js → index-eDm6cz0F.js} +2 -2
- package/dashboard/dist/assets/{index-BLB77tc8.js.map → index-eDm6cz0F.js.map} +1 -1
- package/dashboard/dist/assets/{knowledge-D1YP2NzS.js → knowledge-Bafewjxk.js} +2 -2
- package/dashboard/dist/assets/{knowledge-D1YP2NzS.js.map → knowledge-Bafewjxk.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-D5jUdZwN.js → mcp-query-BzTtIG90.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-D5jUdZwN.js.map → mcp-query-BzTtIG90.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-Bb5psC61.js → mcp-vLIutbnc.js} +2 -2
- package/dashboard/dist/assets/{mcp-Bb5psC61.js.map → mcp-vLIutbnc.js.map} +1 -1
- package/dashboard/dist/assets/{personas-CDndbkp4.js → personas-WD40EDS_.js} +2 -2
- package/dashboard/dist/assets/{personas-CDndbkp4.js.map → personas-WD40EDS_.js.map} +1 -1
- package/dashboard/dist/assets/{pipelines-Dq3kNhKu.js → pipelines-DFwULWs3.js} +2 -2
- package/dashboard/dist/assets/{pipelines-Dq3kNhKu.js.map → pipelines-DFwULWs3.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-BlpDsWCy.js → tasks-La_-WAUn.js} +2 -2
- package/dashboard/dist/assets/{tasks-BlpDsWCy.js.map → tasks-La_-WAUn.js.map} +1 -1
- package/dashboard/dist/assets/{topics-C0YaR9fu.js → topics-CzYMlvqm.js} +2 -2
- package/dashboard/dist/assets/{topics-C0YaR9fu.js.map → topics-CzYMlvqm.js.map} +1 -1
- package/dashboard/dist/assets/{useDebouncedValue-B-KC5ba3.js → useDebouncedValue-C0FQyANW.js} +2 -2
- package/dashboard/dist/assets/{useDebouncedValue-B-KC5ba3.js.map → useDebouncedValue-C0FQyANW.js.map} +1 -1
- package/dashboard/dist/assets/{useNamespace-Dkr5g2Ac.js → useNamespace-WW_XjAb3.js} +2 -2
- package/dashboard/dist/assets/{useNamespace-Dkr5g2Ac.js.map → useNamespace-WW_XjAb3.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-BANBOshA.js → useYamlActivityEvents-B3YxPeFt.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-BANBOshA.js.map → useYamlActivityEvents-B3YxPeFt.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-BLYoJfmB.js → yaml-workflows-COHOjdhF.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-BLYoJfmB.js.map → yaml-workflows-COHOjdhF.js.map} +1 -1
- package/dashboard/dist/index.html +2 -2
- package/docs/dashboard.md +1 -1
- package/docs/hitl/x-lt-scan.md +51 -0
- package/docs/hitl-guide.md +2 -0
- package/docs/scan-codes.md +221 -21
- package/package.json +1 -1
- package/build/types/scan-code.d.ts +0 -317
- package/dashboard/dist/assets/CapabilitiesPage-BxadotXn.js +0 -2
- package/dashboard/dist/assets/CountdownTimer-CI_JOAvk.js +0 -2
- package/dashboard/dist/assets/ResolverForm-BVG8X0sS.js +0 -8
- package/dashboard/dist/assets/ResolverForm-BVG8X0sS.js.map +0 -1
- package/dashboard/dist/assets/RoleDetailPage-KCXDqoJz.js +0 -8
- package/dashboard/dist/assets/RoleDetailPage-KCXDqoJz.js.map +0 -1
- package/dashboard/dist/assets/ScanCodesPage-CUhCz-Yr.js +0 -2
- package/dashboard/dist/assets/ScanCodesPage-CUhCz-Yr.js.map +0 -1
- package/dashboard/dist/assets/ScanSchemeDetailPage-qzXKNqJK.js +0 -2
- package/dashboard/dist/assets/ScanSchemeDetailPage-qzXKNqJK.js.map +0 -1
- package/dashboard/dist/assets/ScanStationPage-D8e8cG3t.js +0 -2
- package/dashboard/dist/assets/ScanStationPage-D8e8cG3t.js.map +0 -1
- package/dashboard/dist/assets/index-CT-FN6CW.js +0 -3
- package/dashboard/dist/assets/index-CT-FN6CW.js.map +0 -1
- package/dashboard/dist/assets/index-Dh8MJl3L.css +0 -1
- package/dashboard/dist/assets/index-N71QQ3J5.js +0 -67
- package/dashboard/dist/assets/index-N71QQ3J5.js.map +0 -1
|
@@ -1,12 +1,34 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Scan-code constants: encodings, scheme kinds, verbs, outcomes, and the
|
|
4
|
+
* template vocabulary.
|
|
5
|
+
*
|
|
6
|
+
* A scan code is a plain string from any input source (barcode scanner,
|
|
7
|
+
* RFID reader, manual entry) encoding version:category:target. The scheme
|
|
8
|
+
* (selected by the leading TWO digits, 10-99) declares which escalation
|
|
9
|
+
* metadata facet the target resolves against and how the string parses.
|
|
10
|
+
* The rule (selected by the single-digit category, 0-9) is an ordered list
|
|
11
|
+
* of condition/action steps over the escalation surface plus a fallback.
|
|
12
|
+
* Both indices are assigned automatically; operators name entries, not numbers.
|
|
13
|
+
*/
|
|
2
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SCAN_TEMPLATE_BAGS = exports.SCAN_TEMPLATE_TOKENS = exports.ACTING_IDENTITY_LABEL = exports.SCAN_PROVENANCE_KEYS = exports.SCAN_CARDINALITY = exports.SCAN_AVAILABILITY = exports.SCAN_OUTCOMES = exports.SCAN_MUTATING_VERBS = exports.SCAN_VERBS = exports.SCAN_SCHEME_KINDS = exports.SCAN_ENCODINGS = void 0;
|
|
15
|
+
exports.SCAN_FILL_SEPARATOR_DEFAULT = exports.SCAN_HOLD_TTL_MAX_SECONDS = exports.SCAN_HOLD_TTL_MIN_SECONDS = exports.SCAN_HOLD_TTL_DEFAULT_SECONDS = exports.SCAN_TEMPLATE_BAGS = exports.SCAN_TEMPLATE_TOKENS = exports.ACTING_IDENTITY_LABEL = exports.SCAN_PROVENANCE_KEYS = exports.SCAN_CARDINALITY = exports.SCAN_AVAILABILITY = exports.SCAN_OUTCOMES = exports.SCAN_MUTATING_VERBS = exports.SCAN_VERBS = exports.SCAN_GRANT_SCOPES = exports.SCAN_SCHEME_KINDS = exports.GTIN_LENGTHS = exports.GTIN_CATEGORY = exports.SCAN_ENCODINGS = void 0;
|
|
4
16
|
exports.SCAN_ENCODINGS = {
|
|
5
17
|
/** Digits only, fixed widths — fits UPC-A/EAN/ITF labels. */
|
|
6
18
|
FIXED: 'fixed',
|
|
7
19
|
/** Delimiter-separated text — Code 128 / QR / DataMatrix labels. */
|
|
8
20
|
DELIMITED: 'delimited',
|
|
21
|
+
/**
|
|
22
|
+
* Manufacturer barcodes (UPC-A, EAN-13, EAN-8, GTIN-14). The code carries
|
|
23
|
+
* no scheme or category; a valid check digit identifies it, the target is
|
|
24
|
+
* the 14-digit GTIN, and the scheme's single rule is category '0'.
|
|
25
|
+
*/
|
|
26
|
+
GTIN: 'gtin',
|
|
9
27
|
};
|
|
28
|
+
/** The only rule category a GTIN scheme has: the code itself carries none. */
|
|
29
|
+
exports.GTIN_CATEGORY = '0';
|
|
30
|
+
/** Code lengths a GTIN scheme reads: EAN-8, UPC-A, EAN-13, GTIN-14. */
|
|
31
|
+
exports.GTIN_LENGTHS = [8, 12, 13, 14];
|
|
10
32
|
exports.SCAN_SCHEME_KINDS = {
|
|
11
33
|
/** The ECA model: the target resolves against escalations; the rule's steps run. */
|
|
12
34
|
ACTION: 'action',
|
|
@@ -17,6 +39,13 @@ exports.SCAN_SCHEME_KINDS = {
|
|
|
17
39
|
*/
|
|
18
40
|
IDENTITY: 'identity',
|
|
19
41
|
};
|
|
42
|
+
/** How an identity scheme's grant is spent. */
|
|
43
|
+
exports.SCAN_GRANT_SCOPES = {
|
|
44
|
+
/** Each mutating act spends one use. */
|
|
45
|
+
ACTION: 'action',
|
|
46
|
+
/** The first act binds the grant to the held subject; acts on it then spend nothing. */
|
|
47
|
+
SUBJECT: 'subject',
|
|
48
|
+
};
|
|
20
49
|
exports.SCAN_VERBS = {
|
|
21
50
|
SHOW_DETAIL: 'show-detail',
|
|
22
51
|
SHOW_LIST: 'show-list',
|
|
@@ -27,15 +56,23 @@ exports.SCAN_VERBS = {
|
|
|
27
56
|
ESCALATE: 'escalate',
|
|
28
57
|
CANCEL: 'cancel',
|
|
29
58
|
/**
|
|
30
|
-
* Add
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* and adds
|
|
59
|
+
* Add to an accumulator escalation. Item mode (`containerFacet`): the scan
|
|
60
|
+
* locates the item's own row and joins the container sharing that facet.
|
|
61
|
+
* Subject mode (`from: 'subject'`): the held subject joins the scanned
|
|
62
|
+
* container. Into-subject (`into: 'subject'`): the held subject collects
|
|
63
|
+
* the scanned code. Otherwise the scan locates the container and adds
|
|
64
|
+
* `params.itemKey`.
|
|
35
65
|
*/
|
|
36
66
|
ACCUMULATE: 'accumulate',
|
|
37
67
|
/** Locate the row, then PRESENT its reality + the step's labeled choices. */
|
|
38
68
|
PRESENT: 'present',
|
|
69
|
+
/**
|
|
70
|
+
* Locate the row and HOLD it as the station's subject: the next scans act
|
|
71
|
+
* on it. Writes nothing and spends no badge use.
|
|
72
|
+
*/
|
|
73
|
+
HOLD: 'hold',
|
|
74
|
+
/** Fill one open batch slot whose key is the scanned code. */
|
|
75
|
+
FILL: 'fill',
|
|
39
76
|
};
|
|
40
77
|
/** Verbs that change escalation state (may carry a confirm prompt). */
|
|
41
78
|
exports.SCAN_MUTATING_VERBS = [
|
|
@@ -46,6 +83,7 @@ exports.SCAN_MUTATING_VERBS = [
|
|
|
46
83
|
exports.SCAN_VERBS.ESCALATE,
|
|
47
84
|
exports.SCAN_VERBS.CANCEL,
|
|
48
85
|
exports.SCAN_VERBS.ACCUMULATE,
|
|
86
|
+
exports.SCAN_VERBS.FILL,
|
|
49
87
|
];
|
|
50
88
|
exports.SCAN_OUTCOMES = {
|
|
51
89
|
/** A step matched and its action ran (or the located item is returned for show verbs). */
|
|
@@ -84,6 +122,16 @@ exports.SCAN_OUTCOMES = {
|
|
|
84
122
|
* facet so the station can say "container closing, scan again".
|
|
85
123
|
*/
|
|
86
124
|
NO_OPEN_CONTAINER: 'no_open_container',
|
|
125
|
+
/** A HOLD step located its row; the response carries the subject to hold. */
|
|
126
|
+
HELD: 'held',
|
|
127
|
+
/**
|
|
128
|
+
* The scan was understood and deliberately not acted on: the wrong
|
|
129
|
+
* container, an item the record does not expect, a row someone else holds.
|
|
130
|
+
* Nothing was written; the response carries the words to show.
|
|
131
|
+
*/
|
|
132
|
+
REFUSED: 'refused',
|
|
133
|
+
/** The held subject moved on (resolved, re-parked, unreadable); scan the item again. */
|
|
134
|
+
SUBJECT_STALE: 'subject_stale',
|
|
87
135
|
};
|
|
88
136
|
exports.SCAN_AVAILABILITY = {
|
|
89
137
|
AVAILABLE: 'available',
|
|
@@ -108,18 +156,31 @@ exports.SCAN_PROVENANCE_KEYS = {
|
|
|
108
156
|
exports.ACTING_IDENTITY_LABEL = 'acting_identity';
|
|
109
157
|
/**
|
|
110
158
|
* Template tokens usable inside step params (item key, resolver payload,
|
|
111
|
-
* metadata).
|
|
112
|
-
* acting user's single live claim and `{item.<facet>}` reads the row an
|
|
113
|
-
* item-mode accumulate step located; a token that cannot resolve fails the
|
|
114
|
-
* step instead of writing the literal.
|
|
159
|
+
* metadata, refusal copy). `{scan.code}` is the raw code as scanned.
|
|
115
160
|
*/
|
|
116
161
|
exports.SCAN_TEMPLATE_TOKENS = {
|
|
117
162
|
TARGET: '{scan.target}',
|
|
118
163
|
CATEGORY: '{scan.category}',
|
|
119
164
|
SCANNED_AT: '{scan.scannedAt}',
|
|
165
|
+
CODE: '{scan.code}',
|
|
120
166
|
};
|
|
121
|
-
/**
|
|
167
|
+
/**
|
|
168
|
+
* Facet-bag token prefixes. `{claim.x}` reads the actor's single live claim,
|
|
169
|
+
* `{item.x}` the row the step located, `{subject.x}` the held subject row,
|
|
170
|
+
* `{container.x}` the container a subject step located, and `{fill.x}` the
|
|
171
|
+
* batch a fill step read. A token that cannot resolve fails the step instead
|
|
172
|
+
* of writing the literal.
|
|
173
|
+
*/
|
|
122
174
|
exports.SCAN_TEMPLATE_BAGS = {
|
|
123
175
|
CLAIM: 'claim',
|
|
124
176
|
ITEM: 'item',
|
|
177
|
+
SUBJECT: 'subject',
|
|
178
|
+
CONTAINER: 'container',
|
|
179
|
+
FILL: 'fill',
|
|
125
180
|
};
|
|
181
|
+
/** Default seconds a held subject lives on the station. */
|
|
182
|
+
exports.SCAN_HOLD_TTL_DEFAULT_SECONDS = 45;
|
|
183
|
+
exports.SCAN_HOLD_TTL_MIN_SECONDS = 5;
|
|
184
|
+
exports.SCAN_HOLD_TTL_MAX_SECONDS = 600;
|
|
185
|
+
/** Separator between a code and its ordinal in batch keys (`<gtin>#2`). */
|
|
186
|
+
exports.SCAN_FILL_SEPARATOR_DEFAULT = '#';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./constants"), exports);
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import type { ScanPresentedChoice } from '../scan-choice';
|
|
2
|
+
import type { ScanOutcome, ScanVerb } from './constants';
|
|
3
|
+
import type { ScanRuleFallback, ScanStepParams, ScanStepQuery } from './rule';
|
|
4
|
+
export interface ParsedScanCode {
|
|
5
|
+
version: number;
|
|
6
|
+
category: string;
|
|
7
|
+
target: string;
|
|
8
|
+
/** The code as scanned, when the target was normalized from it (GTIN). */
|
|
9
|
+
raw?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The station's pointer to the item it is holding. The client sends it
|
|
13
|
+
* back with each scan; the server re-derives everything from it and trusts
|
|
14
|
+
* nothing else about it.
|
|
15
|
+
*/
|
|
16
|
+
export interface ScanSubjectRef {
|
|
17
|
+
/** The raw code that established the subject (e.g. "11:0:K7Q2M9XA"). */
|
|
18
|
+
code: string;
|
|
19
|
+
/** The row the hold resolved to. */
|
|
20
|
+
escalationId: string;
|
|
21
|
+
}
|
|
22
|
+
/** A subject as the station shows it (HELD, and echoed while a fill continues). */
|
|
23
|
+
export interface ScanHeldSubject extends ScanSubjectRef {
|
|
24
|
+
/** What the station calls it. */
|
|
25
|
+
label: string;
|
|
26
|
+
/** Where it goes, shown largest. */
|
|
27
|
+
headline?: string;
|
|
28
|
+
/** The line under the headline. */
|
|
29
|
+
subline?: string;
|
|
30
|
+
/** When the station lets it lapse (display and client timer). */
|
|
31
|
+
expiresAt: string;
|
|
32
|
+
/** The scan the station expects next. `prompt` is rendered markdown. */
|
|
33
|
+
expect?: {
|
|
34
|
+
schemes: number[];
|
|
35
|
+
prompt?: string;
|
|
36
|
+
};
|
|
37
|
+
/** Someone else holds a live claim on the row. */
|
|
38
|
+
claimedBy?: {
|
|
39
|
+
id: string;
|
|
40
|
+
displayName: string;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export interface ScanExecuteRequest {
|
|
44
|
+
code: string;
|
|
45
|
+
/** An acting-identity grant (eph:v1:acting_identity:*) — verbs run as that user. */
|
|
46
|
+
actingToken?: string;
|
|
47
|
+
/** The grant being replaced by an identity scan — best-effort revoked on mint. */
|
|
48
|
+
previousActingToken?: string;
|
|
49
|
+
/** The subject the station is holding. */
|
|
50
|
+
subject?: ScanSubjectRef;
|
|
51
|
+
/** The role the device is locked to; picks the badge policy when it holds several. */
|
|
52
|
+
stationRole?: string;
|
|
53
|
+
}
|
|
54
|
+
/** Action awaiting client-side confirmation (CONFIRM_REQUIRED). */
|
|
55
|
+
export interface ScanPendingAction {
|
|
56
|
+
escalationId: string;
|
|
57
|
+
verb: ScanVerb;
|
|
58
|
+
prompt: string;
|
|
59
|
+
params?: ScanStepParams;
|
|
60
|
+
}
|
|
61
|
+
export interface ScanExecuteResponse {
|
|
62
|
+
outcome: ScanOutcome;
|
|
63
|
+
/** The parsed code, echoed for display/toasts. */
|
|
64
|
+
parsed?: ParsedScanCode;
|
|
65
|
+
/** Rule identity (name is the friendly label). */
|
|
66
|
+
rule?: {
|
|
67
|
+
schemeVersion: number;
|
|
68
|
+
category: string;
|
|
69
|
+
name: string;
|
|
70
|
+
};
|
|
71
|
+
/** Index of the step that matched. */
|
|
72
|
+
stepIndex?: number;
|
|
73
|
+
verb?: ScanVerb;
|
|
74
|
+
/** Single matched escalation (show-detail, claim, resolve, escalate, cancel outcomes). */
|
|
75
|
+
escalation?: Record<string, any>;
|
|
76
|
+
/** Multiple matches (show-list). */
|
|
77
|
+
escalations?: Record<string, any>[];
|
|
78
|
+
total?: number;
|
|
79
|
+
/** Query the client uses to build the list-page URL (show-list). */
|
|
80
|
+
listQuery?: ScanStepQuery & {
|
|
81
|
+
targetFacet: string;
|
|
82
|
+
target: string;
|
|
83
|
+
};
|
|
84
|
+
pendingAction?: ScanPendingAction;
|
|
85
|
+
fallback?: ScanRuleFallback;
|
|
86
|
+
/** The "scan your badge" screen (NOT_PRIMED, or beside withheld choices). */
|
|
87
|
+
notPrimed?: ScanRuleFallback;
|
|
88
|
+
/** The labeled choice set (CHOICES). */
|
|
89
|
+
choices?: ScanPresentedChoice[];
|
|
90
|
+
/** NO_OPEN_CONTAINER: the facet the located item names and no pending container carries. */
|
|
91
|
+
container?: {
|
|
92
|
+
facet: string;
|
|
93
|
+
value: string;
|
|
94
|
+
};
|
|
95
|
+
/** CHOICES: the step would auto-execute its single choice — only identity stopped it. */
|
|
96
|
+
autoSelect?: boolean;
|
|
97
|
+
/** The badged person (IDENTITY_PRIMED) — id lets the client recognize its own claims. */
|
|
98
|
+
actor?: {
|
|
99
|
+
id: string;
|
|
100
|
+
displayName: string;
|
|
101
|
+
};
|
|
102
|
+
/** The minted acting grant (IDENTITY_PRIMED) — eph:v1:acting_identity:<uuid>. */
|
|
103
|
+
actingToken?: string;
|
|
104
|
+
/** Display copy of the grant's expiry (the keystore enforces it). */
|
|
105
|
+
expiresAt?: string;
|
|
106
|
+
/** IDENTITY_PRIMED: the scheme's `grant_max_uses` (0 = TTL-bound). */
|
|
107
|
+
maxUses?: number;
|
|
108
|
+
/** IDENTITY_PRIMED: the scheme's grant scope. */
|
|
109
|
+
grantScope?: 'action' | 'subject';
|
|
110
|
+
/** What happened to the acting grant on this request. Present when one rode it. */
|
|
111
|
+
acting?: {
|
|
112
|
+
consumed: boolean;
|
|
113
|
+
remaining: number | null;
|
|
114
|
+
bound: boolean;
|
|
115
|
+
};
|
|
116
|
+
/** HELD, and a fill that continues: the subject the station holds now. */
|
|
117
|
+
subject?: ScanHeldSubject;
|
|
118
|
+
/** The station drops its held subject. */
|
|
119
|
+
clearSubject?: boolean;
|
|
120
|
+
/** REFUSED: what to say, and the target(s) the step expected. */
|
|
121
|
+
refusal?: {
|
|
122
|
+
markdown: string;
|
|
123
|
+
expected?: string[];
|
|
124
|
+
};
|
|
125
|
+
/** A fill: how far the batch has come. */
|
|
126
|
+
progress?: {
|
|
127
|
+
filled: number;
|
|
128
|
+
total: number;
|
|
129
|
+
remaining: number;
|
|
130
|
+
};
|
|
131
|
+
/** An executed add that found the item already in place. */
|
|
132
|
+
already?: boolean;
|
|
133
|
+
/** EXECUTED: the step's `done` copy, rendered. */
|
|
134
|
+
done?: {
|
|
135
|
+
markdown: string;
|
|
136
|
+
};
|
|
137
|
+
/** NOT_PRIMED that the client may replay once a badge primes. */
|
|
138
|
+
replayable?: boolean;
|
|
139
|
+
error?: string;
|
|
140
|
+
}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import type { ContainerSelector } from '../facets';
|
|
2
|
+
import type { ScanChoice } from '../scan-choice';
|
|
3
|
+
import type { ScanAvailability, ScanCardinality, ScanEncoding, ScanGrantScope, ScanSchemeKind, ScanVerb } from './constants';
|
|
4
|
+
export interface ScanScheme {
|
|
5
|
+
version: number;
|
|
6
|
+
name: string;
|
|
7
|
+
description: string | null;
|
|
8
|
+
/**
|
|
9
|
+
* The metadata key the scanned target resolves against: an escalation
|
|
10
|
+
* metadata key for action schemes, an lt_users.metadata key (e.g.
|
|
11
|
+
* badge_id) for identity schemes.
|
|
12
|
+
*/
|
|
13
|
+
target_facet: string;
|
|
14
|
+
encoding: ScanEncoding;
|
|
15
|
+
delimiter: string;
|
|
16
|
+
target_length: number | null;
|
|
17
|
+
kind: ScanSchemeKind;
|
|
18
|
+
/** Identity kind only: how long a minted acting grant lives (1–86400 s). */
|
|
19
|
+
grant_ttl_seconds: number | null;
|
|
20
|
+
/** Identity kind only: 0 = TTL-bound; n = the grant covers n acts. */
|
|
21
|
+
grant_max_uses: number;
|
|
22
|
+
/** Identity kind only: how the grant is spent (default 'action'). */
|
|
23
|
+
grant_scope: ScanGrantScope;
|
|
24
|
+
enabled: boolean;
|
|
25
|
+
created_at?: string;
|
|
26
|
+
updated_at?: string;
|
|
27
|
+
}
|
|
28
|
+
/** The Condition: a view over the escalation surface. */
|
|
29
|
+
export interface ScanStepQuery {
|
|
30
|
+
/** Expected queue(s). Empty/absent = any role visible to the caller. */
|
|
31
|
+
roles?: string[];
|
|
32
|
+
status?: 'pending' | 'resolved' | 'cancelled';
|
|
33
|
+
availability?: ScanAvailability;
|
|
34
|
+
/** Extra metadata guards beyond the scheme's target facet. */
|
|
35
|
+
facets?: Record<string, any>;
|
|
36
|
+
}
|
|
37
|
+
export interface ScanStepParams {
|
|
38
|
+
/** Canned resolver payload template (resolve, accumulate). Values may use template tokens. */
|
|
39
|
+
resolverPayload?: Record<string, any>;
|
|
40
|
+
/** Metadata to merge/stamp (claim, resolve, escalate). */
|
|
41
|
+
metadata?: Record<string, any>;
|
|
42
|
+
/** Target role for escalate (a new escalation is created there). */
|
|
43
|
+
targetRole?: string;
|
|
44
|
+
/** Escalation type for the created escalation (escalate). */
|
|
45
|
+
escalationType?: string;
|
|
46
|
+
/** Description for the created escalation (escalate). */
|
|
47
|
+
description?: string;
|
|
48
|
+
/** How to close the located escalation before an escalate creates the next one. */
|
|
49
|
+
closeCurrent?: 'resolve' | 'cancel';
|
|
50
|
+
/** Claim window (claim verbs). */
|
|
51
|
+
durationMinutes?: number;
|
|
52
|
+
/** Item key template (accumulate). Defaults to `{scan.target}` where one is implied. */
|
|
53
|
+
itemKey?: string;
|
|
54
|
+
/** Accumulate verb options. */
|
|
55
|
+
accumulate?: ScanAccumulateParams;
|
|
56
|
+
/** Hold verb options. */
|
|
57
|
+
hold?: ScanHoldParams;
|
|
58
|
+
/** Fill verb options. */
|
|
59
|
+
fill?: ScanFillParams;
|
|
60
|
+
}
|
|
61
|
+
export interface ScanAccumulateParams {
|
|
62
|
+
/**
|
|
63
|
+
* Item-locate mode: the scanned target is the item's own escalation (found
|
|
64
|
+
* by the scheme facet); the container is the pending accumulator whose
|
|
65
|
+
* metadata carries this facet with the same value the item row holds.
|
|
66
|
+
*/
|
|
67
|
+
containerFacet?: string;
|
|
68
|
+
/** Expected container queue(s); intersects with the actor's write scope. Alias of `container.roles`. */
|
|
69
|
+
containerRoles?: string[];
|
|
70
|
+
/**
|
|
71
|
+
* Which pending accumulator may be the container: types, subtypes and
|
|
72
|
+
* extra facet guards narrow the pick. Item mode and subject mode only.
|
|
73
|
+
*/
|
|
74
|
+
container?: ContainerSelector & {
|
|
75
|
+
roles?: string[];
|
|
76
|
+
};
|
|
77
|
+
/** Item-locate mode: also write the item's row as the reciprocal (default true). */
|
|
78
|
+
reciprocal?: boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Subject mode: the held subject is the item and the scanned code names
|
|
81
|
+
* the container. The subject's row is written as the reciprocal, so a
|
|
82
|
+
* one-slot subject completes in the same statement.
|
|
83
|
+
*/
|
|
84
|
+
from?: 'subject';
|
|
85
|
+
/** Into-subject mode: the held subject's row is the accumulator; the item is the scanned code. */
|
|
86
|
+
into?: 'subject';
|
|
87
|
+
}
|
|
88
|
+
export interface ScanHoldParams {
|
|
89
|
+
/** Seconds the station holds the subject (5..600, default 45). */
|
|
90
|
+
ttlSeconds?: number;
|
|
91
|
+
/** What the station calls the subject. Template; default `{scan.target}`. */
|
|
92
|
+
label?: string;
|
|
93
|
+
/**
|
|
94
|
+
* Where the item goes, shown largest on the station (e.g. `{item.containerCode}`).
|
|
95
|
+
* Template; absent, the label leads.
|
|
96
|
+
*/
|
|
97
|
+
headline?: string;
|
|
98
|
+
/** The line under the headline (e.g. `{item.locationName}`). Template. */
|
|
99
|
+
subline?: string;
|
|
100
|
+
/** The scan the station expects next, and the words that ask for it. */
|
|
101
|
+
expect?: {
|
|
102
|
+
schemes: number[];
|
|
103
|
+
prompt?: string;
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
export interface ScanFillParams {
|
|
107
|
+
/** Which row holds the batch: the held subject, or the row the scan names. */
|
|
108
|
+
into: 'subject' | 'scanned';
|
|
109
|
+
/** Batch keys are `<code><separator><n>`; a scan fills the first open key for its code. */
|
|
110
|
+
separator?: string;
|
|
111
|
+
/** Batch resolver payload (template). Default `{ scannedCode: '{scan.code}' }`. */
|
|
112
|
+
payload?: Record<string, any>;
|
|
113
|
+
}
|
|
114
|
+
/** A step that acts on the held subject runs only while one is held. */
|
|
115
|
+
export interface ScanSubjectGate {
|
|
116
|
+
/** Scheme versions the subject must have been scanned under. */
|
|
117
|
+
schemes: number[];
|
|
118
|
+
/** A live claim on the subject by someone other than the actor. Default 'refuse'. */
|
|
119
|
+
claimedByOther?: 'refuse' | 'allow';
|
|
120
|
+
/**
|
|
121
|
+
* The held row must carry these facet values, or the step is skipped (the
|
|
122
|
+
* scan falls through to the next step). Branches one rule by the held
|
|
123
|
+
* item's state, e.g. `{ placement: 'unassigned' }`.
|
|
124
|
+
*/
|
|
125
|
+
facets?: Record<string, string | number | boolean>;
|
|
126
|
+
}
|
|
127
|
+
/** The pre-write guard: a failed match refuses with nothing written. */
|
|
128
|
+
export interface ScanMatch {
|
|
129
|
+
/** The scanned target must equal one of these (templates). */
|
|
130
|
+
target?: string[];
|
|
131
|
+
/** The located container must share each of these facets with the subject. */
|
|
132
|
+
facets?: string[];
|
|
133
|
+
}
|
|
134
|
+
/** What the station says when a step refuses. Markdown templates. */
|
|
135
|
+
export interface ScanRefusal {
|
|
136
|
+
/** A failed match. */
|
|
137
|
+
markdown: string;
|
|
138
|
+
/** The atomic write lost a race (the container closed, the slot was taken). */
|
|
139
|
+
conflict?: string;
|
|
140
|
+
/**
|
|
141
|
+
* From-subject accumulate: the pairing held but no open container carries
|
|
142
|
+
* the scanned code. Without it the step falls through to the next one.
|
|
143
|
+
*/
|
|
144
|
+
missing?: string;
|
|
145
|
+
}
|
|
146
|
+
export interface ScanStep {
|
|
147
|
+
query: ScanStepQuery;
|
|
148
|
+
cardinality?: ScanCardinality;
|
|
149
|
+
verb: ScanVerb;
|
|
150
|
+
/** Present = two-phase: locate, then the client confirms before the per-id action runs. */
|
|
151
|
+
confirm?: {
|
|
152
|
+
prompt: string;
|
|
153
|
+
};
|
|
154
|
+
params?: ScanStepParams;
|
|
155
|
+
/** PRESENT only: the labeled choice set rendered under the located reality. */
|
|
156
|
+
choices?: ScanChoice[];
|
|
157
|
+
/**
|
|
158
|
+
* PRESENT only: when the step holds exactly ONE confirm-less choice, the
|
|
159
|
+
* scan executes it directly instead of presenting — one scan, one action.
|
|
160
|
+
* An unsatisfied identity requirement still stops over at the badge screen.
|
|
161
|
+
*/
|
|
162
|
+
autoSelectSingle?: boolean;
|
|
163
|
+
/** The step executes only under a real acting identity (badge or a write-capable login). */
|
|
164
|
+
requireActingIdentity?: boolean;
|
|
165
|
+
/** The step acts on the held subject and is skipped while none is held. */
|
|
166
|
+
subject?: ScanSubjectGate;
|
|
167
|
+
/** Checked before the write; a miss refuses. */
|
|
168
|
+
match?: ScanMatch;
|
|
169
|
+
/** Refusal copy for a failed match or a lost race. */
|
|
170
|
+
refuse?: ScanRefusal;
|
|
171
|
+
/**
|
|
172
|
+
* What the station says once the step's write lands: "Place it in
|
|
173
|
+
* **{container.containerCode}**." Markdown template; it may read the bags its
|
|
174
|
+
* refusal copy may read.
|
|
175
|
+
*/
|
|
176
|
+
done?: {
|
|
177
|
+
markdown: string;
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
export interface ScanRuleFallback {
|
|
181
|
+
/** Markdown rendered on the fallback screen when no step matches. */
|
|
182
|
+
markdown?: string;
|
|
183
|
+
/** Optional dashboard route to land on instead of the default list. */
|
|
184
|
+
route?: string;
|
|
185
|
+
}
|
|
186
|
+
export interface ScanRule {
|
|
187
|
+
scheme_version: number;
|
|
188
|
+
/** Single digit, '0'–'9' (auto-assigned). */
|
|
189
|
+
category: string;
|
|
190
|
+
/** Friendly label — this is what gets printed next to the physical code. */
|
|
191
|
+
name: string;
|
|
192
|
+
steps: ScanStep[];
|
|
193
|
+
fallback: ScanRuleFallback;
|
|
194
|
+
/** The "scan your badge" screen — rendered when an acting identity is required and absent. */
|
|
195
|
+
notPrimed: ScanRuleFallback;
|
|
196
|
+
enabled: boolean;
|
|
197
|
+
created_at?: string;
|
|
198
|
+
updated_at?: string;
|
|
199
|
+
}
|
package/build/types/startup.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { LoggerOptions } from 'pino';
|
|
|
2
2
|
import type { WorkflowIconName } from './workflow-icons';
|
|
3
3
|
import type { EscalationLookupRef } from './escalation';
|
|
4
4
|
import type { LTAuthAdapter, LTSSOConfig } from './auth';
|
|
5
|
-
import type { ScanEncoding, ScanSchemeKind, ScanStep, ScanRuleFallback } from './scan-code';
|
|
5
|
+
import type { ScanEncoding, ScanGrantScope, ScanSchemeKind, ScanStep, ScanRuleFallback } from './scan-code';
|
|
6
6
|
import type { LTOAuthStartConfig } from './oauth';
|
|
7
7
|
import type { LTTelemetryAdapter } from './telemetry';
|
|
8
8
|
import type { LTEventAdapter } from './events';
|
|
@@ -289,6 +289,8 @@ export interface LTScanSchemeConfig {
|
|
|
289
289
|
kind?: ScanSchemeKind;
|
|
290
290
|
grant_ttl_seconds?: number | null;
|
|
291
291
|
grant_max_uses?: number;
|
|
292
|
+
/** Identity kind: 'action' (default) spends a use per act; 'subject' binds to one held subject. */
|
|
293
|
+
grant_scope?: ScanGrantScope;
|
|
292
294
|
enabled?: boolean;
|
|
293
295
|
/** The scheme's rules, one per category. */
|
|
294
296
|
rules?: LTScanRuleConfig[];
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as o}from"./vendor-query-DvWWuNIB.js";import{c as n}from"./tasks-
|
|
2
|
-
//# sourceMappingURL=AdminDashboard-
|
|
1
|
+
import{j as o}from"./vendor-query-DvWWuNIB.js";import{c as n}from"./tasks-La_-WAUn.js";import{z as m,a9 as c}from"./index-BQeHJHYN.js";import{u}from"./mcp-vLIutbnc.js";import{P as d}from"./PageHeaderWithStats-DHj8Mqox.js";import"./vendor-react-_9U4mKFr.js";import"./vendor-icons-CeVtUKyP.js";function S(){var e;m();const{data:t}=n({limit:1}),{data:a}=c({status:"pending",limit:1}),{data:s}=u(),l=((e=s==null?void 0:s.servers)==null?void 0:e.filter(i=>i.status==="connected").length)??0,r=s?`${l}/${s.total}`:"—";return o.jsx("div",{children:o.jsx(d,{title:"Admin",stats:[{label:"Tasks",value:(t==null?void 0:t.total)??"—"},{label:"Pending Escalations",value:(a==null?void 0:a.total)??"—",dotClass:"bg-status-pending"},{label:"MCP Servers",value:r},{label:"System",value:"Healthy",dotClass:"bg-status-success"}]})})}export{S as AdminDashboard};
|
|
2
|
+
//# sourceMappingURL=AdminDashboard-DBW12qQt.js.map
|
package/dashboard/dist/assets/{AdminDashboard-BbWve-Ax.js.map → AdminDashboard-DBW12qQt.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminDashboard-
|
|
1
|
+
{"version":3,"file":"AdminDashboard-DBW12qQt.js","sources":["../../src/pages/admin/AdminDashboard.tsx"],"sourcesContent":["import { useTasks } from '../../api/tasks';\nimport { useEscalations } from '../../api/escalations';\nimport { useEscalationListEvents } from '../../hooks/useEventHooks';\nimport { useMcpServers } from '../../api/mcp';\nimport { PageHeaderWithStats } from '../../components/common/layout/PageHeaderWithStats';\n\nexport function AdminDashboard() {\n useEscalationListEvents();\n const { data: taskData } = useTasks({ limit: 1 });\n const { data: pendingEsc } = useEscalations({ status: 'pending', limit: 1 });\n const { data: mcpData } = useMcpServers();\n\n const connectedServers =\n mcpData?.servers?.filter((s) => s.status === 'connected').length ?? 0;\n const mcpLabel = mcpData ? `${connectedServers}/${mcpData.total}` : '—';\n\n return (\n <div>\n <PageHeaderWithStats\n title=\"Admin\"\n stats={[\n { label: 'Tasks', value: taskData?.total ?? '—' },\n { label: 'Pending Escalations', value: pendingEsc?.total ?? '—', dotClass: 'bg-status-pending' },\n { label: 'MCP Servers', value: mcpLabel },\n { label: 'System', value: 'Healthy', dotClass: 'bg-status-success' },\n ]}\n />\n </div>\n );\n}\n"],"names":["AdminDashboard","useEscalationListEvents","taskData","useTasks","pendingEsc","useEscalations","mcpData","useMcpServers","connectedServers","_a","s","mcpLabel","jsx","PageHeaderWithStats"],"mappings":"oSAMO,SAASA,GAAiB,OAC/BC,EAAA,EACA,KAAM,CAAE,KAAMC,CAAA,EAAaC,EAAS,CAAE,MAAO,EAAG,EAC1C,CAAE,KAAMC,CAAA,EAAeC,EAAe,CAAE,OAAQ,UAAW,MAAO,EAAG,EACrE,CAAE,KAAMC,CAAA,EAAYC,EAAA,EAEpBC,IACJC,EAAAH,GAAA,YAAAA,EAAS,UAAT,YAAAG,EAAkB,OAAQC,GAAMA,EAAE,SAAW,aAAa,SAAU,EAChEC,EAAWL,EAAU,GAAGE,CAAgB,IAAIF,EAAQ,KAAK,GAAK,IAEpE,aACG,MAAA,CACC,SAAAM,EAAAA,IAACC,EAAA,CACC,MAAM,QACN,MAAO,CACL,CAAE,MAAO,QAAS,OAAOX,GAAA,YAAAA,EAAU,QAAS,GAAA,EAC5C,CAAE,MAAO,sBAAuB,OAAOE,GAAA,YAAAA,EAAY,QAAS,IAAK,SAAU,mBAAA,EAC3E,CAAE,MAAO,cAAe,MAAOO,CAAA,EAC/B,CAAE,MAAO,SAAU,MAAO,UAAW,SAAU,mBAAA,CAAoB,CACrE,CAAA,EAEJ,CAEJ"}
|