@hotmeshio/long-tail 0.10.10 → 0.10.13
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/list.d.ts +1 -0
- package/build/api/escalations/list.js +12 -4
- package/build/api/escalations/metadata.d.ts +11 -0
- package/build/api/escalations/metadata.js +27 -7
- package/build/api/roles.d.ts +2 -0
- package/build/api/roles.js +4 -0
- package/build/api/scan-codes/config.d.ts +22 -0
- package/build/api/scan-codes/config.js +136 -0
- package/build/api/scan-codes/execute.d.ts +9 -0
- package/build/api/scan-codes/execute.js +372 -0
- package/build/api/scan-codes/index.d.ts +2 -0
- package/build/api/scan-codes/index.js +14 -0
- package/build/lib/db/schemas/025_ops_home_default.sql +11 -0
- package/build/lib/db/schemas/026_scan_codes.sql +51 -0
- package/build/lib/db/schemas/027_scan_codes_reindex.sql +23 -0
- package/build/lib/events/system-events.js +4 -0
- package/build/modules/features.d.ts +17 -0
- package/build/modules/features.js +2 -0
- package/build/routes/escalations/list.js +1 -0
- package/build/routes/index.js +2 -0
- package/build/routes/scan-codes.d.ts +2 -0
- package/build/routes/scan-codes.js +138 -0
- package/build/sdk/index.d.ts +4 -0
- package/build/services/escalation/crud.d.ts +1 -1
- package/build/services/escalation/crud.js +4 -2
- package/build/services/escalation/queries.d.ts +1 -0
- package/build/services/escalation/queries.js +2 -0
- package/build/services/escalation/sql.d.ts +11 -6
- package/build/services/escalation/sql.js +20 -20
- package/build/services/role/index.js +1 -0
- package/build/services/role/sql.d.ts +6 -2
- package/build/services/role/sql.js +11 -2
- package/build/services/role/types.d.ts +9 -0
- package/build/services/scan-code/index.d.ts +4 -0
- package/build/services/scan-code/index.js +21 -0
- package/build/services/scan-code/parse.d.ts +35 -0
- package/build/services/scan-code/parse.js +108 -0
- package/build/services/scan-code/read.d.ts +5 -0
- package/build/services/scan-code/read.js +50 -0
- package/build/services/scan-code/sql.d.ts +10 -0
- package/build/services/scan-code/sql.js +57 -0
- package/build/services/scan-code/validate.d.ts +12 -0
- package/build/services/scan-code/validate.js +78 -0
- package/build/services/scan-code/write.d.ts +26 -0
- package/build/services/scan-code/write.js +71 -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-transition.d.ts +47 -0
- package/build/shared/form-validation/x-lt-transition.js +65 -0
- package/build/system/mcp-servers/admin/index.d.ts +1 -0
- package/build/system/mcp-servers/admin/index.js +5 -2
- package/build/system/mcp-servers/admin/scan-codes.d.ts +10 -0
- package/build/system/mcp-servers/admin/scan-codes.js +111 -0
- package/build/system/mcp-servers/admin/schemas.d.ts +235 -14
- package/build/system/mcp-servers/admin/schemas.js +51 -0
- package/build/system/mcp-servers/admin/users.js +1 -0
- package/build/system/seed/tool-manifests-admin.d.ts +1462 -0
- package/build/system/seed/tool-manifests-admin.js +7 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/events.d.ts +9 -0
- package/build/types/index.d.ts +2 -0
- package/build/types/index.js +10 -1
- package/build/types/scan-code.d.ts +183 -0
- package/build/types/scan-code.js +80 -0
- package/build/types/startup.d.ts +14 -0
- package/dashboard/dist/assets/{AdminDashboard-cGYuppUP.js → AdminDashboard-Bv3pHBzn.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-cGYuppUP.js.map → AdminDashboard-Bv3pHBzn.js.map} +1 -1
- package/dashboard/dist/assets/{AgentConfigPage-DwaUyoCy.js → AgentConfigPage-Dk2zlvDb.js} +6 -6
- package/dashboard/dist/assets/{AgentConfigPage-DwaUyoCy.js.map → AgentConfigPage-Dk2zlvDb.js.map} +1 -1
- package/dashboard/dist/assets/{AgentDetailPage-DxpFaltM.js → AgentDetailPage-DUno6EGs.js} +2 -2
- package/dashboard/dist/assets/{AgentDetailPage-DxpFaltM.js.map → AgentDetailPage-DUno6EGs.js.map} +1 -1
- package/dashboard/dist/assets/{AgentsPage-ByOoA8oT.js → AgentsPage-CToVu1qj.js} +2 -2
- package/dashboard/dist/assets/{AgentsPage-ByOoA8oT.js.map → AgentsPage-CToVu1qj.js.map} +1 -1
- package/dashboard/dist/assets/{AutoGrowTextarea-y-oNY51_.js → AutoGrowTextarea-DgEQeRQw.js} +2 -2
- package/dashboard/dist/assets/{AutoGrowTextarea-y-oNY51_.js.map → AutoGrowTextarea-DgEQeRQw.js.map} +1 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-DldboL4W.js +2 -0
- package/dashboard/dist/assets/AvailableEscalationsPage-DldboL4W.js.map +1 -0
- package/dashboard/dist/assets/BotPicker-DQOpVB4M.js +2 -0
- package/dashboard/dist/assets/{BotPicker-Dohv8dhR.js.map → BotPicker-DQOpVB4M.js.map} +1 -1
- package/dashboard/dist/assets/{CapabilitiesPage-DeijFG3J.js → CapabilitiesPage-Dmf46PUJ.js} +2 -2
- package/dashboard/dist/assets/{CapabilitiesPage-DeijFG3J.js.map → CapabilitiesPage-Dmf46PUJ.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-BPNwS4eO.js → CollapsibleSection-CDADefUY.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-BPNwS4eO.js.map → CollapsibleSection-CDADefUY.js.map} +1 -1
- package/dashboard/dist/assets/{ConfirmDeleteModal-DD7SEMeX.js → ConfirmDeleteModal-CQsJUzEa.js} +2 -2
- package/dashboard/dist/assets/{ConfirmDeleteModal-DD7SEMeX.js.map → ConfirmDeleteModal-CQsJUzEa.js.map} +1 -1
- package/dashboard/dist/assets/{CopyableId-BpB-NvDh.js → CopyableId-4Lqlc5cU.js} +2 -2
- package/dashboard/dist/assets/{CopyableId-BpB-NvDh.js.map → CopyableId-4Lqlc5cU.js.map} +1 -1
- package/dashboard/dist/assets/CountdownTimer-DPjIkerB.js +2 -0
- package/dashboard/dist/assets/{CountdownTimer-BF71ldGF.js.map → CountdownTimer-DPjIkerB.js.map} +1 -1
- package/dashboard/dist/assets/{CredentialsPage-oeNmMzTM.js → CredentialsPage-8LIEvomi.js} +2 -2
- package/dashboard/dist/assets/{CredentialsPage-oeNmMzTM.js.map → CredentialsPage-8LIEvomi.js.map} +1 -1
- package/dashboard/dist/assets/{CronLabel-CebR1m2k.js → CronLabel-CK3WSsM5.js} +2 -2
- package/dashboard/dist/assets/{CronLabel-CebR1m2k.js.map → CronLabel-CK3WSsM5.js.map} +1 -1
- package/dashboard/dist/assets/{CustomDurationPicker-Bh9QdBVw.js → CustomDurationPicker-FPmlA6cE.js} +2 -2
- package/dashboard/dist/assets/{CustomDurationPicker-Bh9QdBVw.js.map → CustomDurationPicker-FPmlA6cE.js.map} +1 -1
- package/dashboard/dist/assets/{DataTable-BTu2AaEl.js → DataTable-Bir0Xs1p.js} +2 -2
- package/dashboard/dist/assets/{DataTable-BTu2AaEl.js.map → DataTable-Bir0Xs1p.js.map} +1 -1
- package/dashboard/dist/assets/{DropZone-Bavzt2QR.js → DropZone-CL9gA7pu.js} +2 -2
- package/dashboard/dist/assets/{DropZone-Bavzt2QR.js.map → DropZone-CL9gA7pu.js.map} +1 -1
- package/dashboard/dist/assets/{ElapsedCell-Caa6CU_y.js → ElapsedCell-BZVkVxE0.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-Caa6CU_y.js.map → ElapsedCell-BZVkVxE0.js.map} +1 -1
- package/dashboard/dist/assets/{EmptyState-BcsfPq9T.js → EmptyState-lpUFYfun.js} +2 -2
- package/dashboard/dist/assets/{EmptyState-BcsfPq9T.js.map → EmptyState-lpUFYfun.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationListSchemaPage-CAGfq0eK.js → EscalationListSchemaPage-kYLdUtZX.js} +3 -3
- package/dashboard/dist/assets/{EscalationListSchemaPage-CAGfq0eK.js.map → EscalationListSchemaPage-kYLdUtZX.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationSchemaPage-qDD4ur6P.js → EscalationSchemaPage-kUmCDivo.js} +3 -3
- package/dashboard/dist/assets/{EscalationSchemaPage-qDD4ur6P.js.map → EscalationSchemaPage-kUmCDivo.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-CC1wRTzy.js → EscalationsOverview-D17auO-m.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-CC1wRTzy.js.map → EscalationsOverview-D17auO-m.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-4JeTcXr_.js → EventTable-CwPWl163.js} +2 -2
- package/dashboard/dist/assets/{EventTable-4JeTcXr_.js.map → EventTable-CwPWl163.js.map} +1 -1
- package/dashboard/dist/assets/{FilterBar-BOV8DWIO.js → FilterBar-D7GghUsU.js} +2 -2
- package/dashboard/dist/assets/{FilterBar-BOV8DWIO.js.map → FilterBar-D7GghUsU.js.map} +1 -1
- package/dashboard/dist/assets/{GraphInvokePage-C0i1speW.js → GraphInvokePage-D11uOnZi.js} +2 -2
- package/dashboard/dist/assets/{GraphInvokePage-C0i1speW.js.map → GraphInvokePage-D11uOnZi.js.map} +1 -1
- package/dashboard/dist/assets/HomePage-Bcq10Bxx.js +2 -0
- package/dashboard/dist/assets/HomePage-Bcq10Bxx.js.map +1 -0
- package/dashboard/dist/assets/ListToolbar-IPXsTb3Q.js +2 -0
- package/dashboard/dist/assets/ListToolbar-IPXsTb3Q.js.map +1 -0
- package/dashboard/dist/assets/{McpOverview-Chn2zIXr.js → McpOverview-Dx2j0KkF.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-Chn2zIXr.js.map → McpOverview-Dx2j0KkF.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryDetailPage-Cv1FKrvw.js → McpQueryDetailPage-CzF_bna8.js} +3 -3
- package/dashboard/dist/assets/{McpQueryDetailPage-Cv1FKrvw.js.map → McpQueryDetailPage-CzF_bna8.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryPage-Dzn8JE4E.js → McpQueryPage-CNsuiw_q.js} +2 -2
- package/dashboard/dist/assets/{McpQueryPage-Dzn8JE4E.js.map → McpQueryPage-CNsuiw_q.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunDetailPage-CuNtR4Ed.js → McpRunDetailPage-BJguEMS0.js} +2 -2
- package/dashboard/dist/assets/{McpRunDetailPage-CuNtR4Ed.js.map → McpRunDetailPage-BJguEMS0.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunsPage-C8iifeKN.js → McpRunsPage-CK96s3Nt.js} +2 -2
- package/dashboard/dist/assets/{McpRunsPage-C8iifeKN.js.map → McpRunsPage-CK96s3Nt.js.map} +1 -1
- package/dashboard/dist/assets/{Modal-CA2Iv02H.js → Modal-BU7No9NH.js} +2 -2
- package/dashboard/dist/assets/{Modal-CA2Iv02H.js.map → Modal-BU7No9NH.js.map} +1 -1
- package/dashboard/dist/assets/{NamespacePill-ep9Zmokr.js → NamespacePill-B9Vc_Pz2.js} +2 -2
- package/dashboard/dist/assets/{NamespacePill-ep9Zmokr.js.map → NamespacePill-B9Vc_Pz2.js.map} +1 -1
- package/dashboard/dist/assets/OperationsPage-DvWrLuH6.js +2 -0
- package/dashboard/dist/assets/OperationsPage-DvWrLuH6.js.map +1 -0
- package/dashboard/dist/assets/OperatorDashboard-C-jE0IRA.js +2 -0
- package/dashboard/dist/assets/OperatorDashboard-C-jE0IRA.js.map +1 -0
- package/dashboard/dist/assets/{PageHeader-Bw8RNkqR.js → PageHeader-Ce4GcIYo.js} +2 -2
- package/dashboard/dist/assets/{PageHeader-Bw8RNkqR.js.map → PageHeader-Ce4GcIYo.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeaderWithStats-NR_4idn6.js → PageHeaderWithStats-Ck0KZvXD.js} +2 -2
- package/dashboard/dist/assets/{PageHeaderWithStats-NR_4idn6.js.map → PageHeaderWithStats-Ck0KZvXD.js.map} +1 -1
- package/dashboard/dist/assets/{PersonaDetailPage-DKILoUqL.js → PersonaDetailPage-CJ6jqo7h.js} +2 -2
- package/dashboard/dist/assets/{PersonaDetailPage-DKILoUqL.js.map → PersonaDetailPage-CJ6jqo7h.js.map} +1 -1
- package/dashboard/dist/assets/{PersonasPage-qvzHTrFw.js → PersonasPage-D8hL3kL5.js} +2 -2
- package/dashboard/dist/assets/{PersonasPage-qvzHTrFw.js.map → PersonasPage-D8hL3kL5.js.map} +1 -1
- package/dashboard/dist/assets/{PriorityBadge-CCERr9vQ.js → PriorityBadge-BETdj4M-.js} +2 -2
- package/dashboard/dist/assets/{PriorityBadge-CCERr9vQ.js.map → PriorityBadge-BETdj4M-.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessDetailPage-C3LfeKvi.js → ProcessDetailPage-Vnx8Z5_y.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-C3LfeKvi.js.map → ProcessDetailPage-Vnx8Z5_y.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-OoZ_u4ty.js → ProcessesListPage-DRYtvS3N.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-OoZ_u4ty.js.map → ProcessesListPage-DRYtvS3N.js.map} +1 -1
- package/dashboard/dist/assets/RoleDetailPage-BKkUvTO-.js +8 -0
- package/dashboard/dist/assets/RoleDetailPage-BKkUvTO-.js.map +1 -0
- package/dashboard/dist/assets/{RolePill-TySZq7dB.js → RolePill-CnuBPhPw.js} +2 -2
- package/dashboard/dist/assets/{RolePill-TySZq7dB.js.map → RolePill-CnuBPhPw.js.map} +1 -1
- package/dashboard/dist/assets/RolesPage-BHzWK9n6.js +2 -0
- package/dashboard/dist/assets/{RolesPage-CNueMVuJ.js.map → RolesPage-BHzWK9n6.js.map} +1 -1
- package/dashboard/dist/assets/{RowActions-BA9L9djf.js → RowActions-eYrzgQSj.js} +2 -2
- package/dashboard/dist/assets/{RowActions-BA9L9djf.js.map → RowActions-eYrzgQSj.js.map} +1 -1
- package/dashboard/dist/assets/{RunAsSelector-CwWEpiSF.js → RunAsSelector-CS3KQ-BF.js} +2 -2
- package/dashboard/dist/assets/{RunAsSelector-CwWEpiSF.js.map → RunAsSelector-CS3KQ-BF.js.map} +1 -1
- package/dashboard/dist/assets/ScanCodesPage-BW4P4zWf.js +2 -0
- package/dashboard/dist/assets/ScanCodesPage-BW4P4zWf.js.map +1 -0
- package/dashboard/dist/assets/ScanSchemeDetailPage-BLykA4j-.js +2 -0
- package/dashboard/dist/assets/ScanSchemeDetailPage-BLykA4j-.js.map +1 -0
- package/dashboard/dist/assets/{ScopeBadge-C7Uixtmk.js → ScopeBadge-BUpYpS3x.js} +2 -2
- package/dashboard/dist/assets/{ScopeBadge-C7Uixtmk.js.map → ScopeBadge-BUpYpS3x.js.map} +1 -1
- package/dashboard/dist/assets/{StatCard-Ca-ngCaD.js → StatCard-BXQ8dD9Y.js} +2 -2
- package/dashboard/dist/assets/{StatCard-Ca-ngCaD.js.map → StatCard-BXQ8dD9Y.js.map} +1 -1
- package/dashboard/dist/assets/{StatusBadge-BwUvykDo.js → StatusBadge-DkgllZHv.js} +2 -2
- package/dashboard/dist/assets/{StatusBadge-BwUvykDo.js.map → StatusBadge-DkgllZHv.js.map} +1 -1
- package/dashboard/dist/assets/{StickyPagination-DvIF3kQK.js → StickyPagination-hMrnLXde.js} +2 -2
- package/dashboard/dist/assets/{StickyPagination-DvIF3kQK.js.map → StickyPagination-hMrnLXde.js.map} +1 -1
- package/dashboard/dist/assets/{StreamMessageDetail-DkFK_XGD.js → StreamMessageDetail-DyJyZwBl.js} +2 -2
- package/dashboard/dist/assets/{StreamMessageDetail-DkFK_XGD.js.map → StreamMessageDetail-DyJyZwBl.js.map} +1 -1
- package/dashboard/dist/assets/{SwimlaneTimeline-CMw-Et6h.js → SwimlaneTimeline-BlzV74V5.js} +2 -2
- package/dashboard/dist/assets/{SwimlaneTimeline-CMw-Et6h.js.map → SwimlaneTimeline-BlzV74V5.js.map} +1 -1
- package/dashboard/dist/assets/{TagInput-D8gSp48D.js → TagInput-BbZ25nNe.js} +2 -2
- package/dashboard/dist/assets/{TagInput-D8gSp48D.js.map → TagInput-BbZ25nNe.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-BhXuChOf.js → TaskDetailPage-B0p_Z4J_.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-BhXuChOf.js.map → TaskDetailPage-B0p_Z4J_.js.map} +1 -1
- package/dashboard/dist/assets/{TaskQueuePill-CHqolBmU.js → TaskQueuePill-D0QKBrN3.js} +2 -2
- package/dashboard/dist/assets/{TaskQueuePill-CHqolBmU.js.map → TaskQueuePill-D0QKBrN3.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-6JHQQ5QZ.js → TasksListPage-CiGR2QiQ.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-6JHQQ5QZ.js.map → TasksListPage-CiGR2QiQ.js.map} +1 -1
- package/dashboard/dist/assets/TimeAgo-D_DA9ucC.js +2 -0
- package/dashboard/dist/assets/{TimeAgo-CInx-vzY.js.map → TimeAgo-D_DA9ucC.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-Fq17Zrsu.js → TimestampCell-C7rkC9nh.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-Fq17Zrsu.js.map → TimestampCell-C7rkC9nh.js.map} +1 -1
- package/dashboard/dist/assets/{ToolPill-BbgMDhaE.js → ToolPill-8xY9rkoc.js} +2 -2
- package/dashboard/dist/assets/{ToolPill-BbgMDhaE.js.map → ToolPill-8xY9rkoc.js.map} +1 -1
- package/dashboard/dist/assets/{ToolTestPanel-DhjEe59s.js → ToolTestPanel-E8efYGYs.js} +2 -2
- package/dashboard/dist/assets/{ToolTestPanel-DhjEe59s.js.map → ToolTestPanel-E8efYGYs.js.map} +1 -1
- package/dashboard/dist/assets/{TopicDetailPage-DbIdmQpQ.js → TopicDetailPage-B455XrRc.js} +3 -3
- package/dashboard/dist/assets/{TopicDetailPage-DbIdmQpQ.js.map → TopicDetailPage-B455XrRc.js.map} +1 -1
- package/dashboard/dist/assets/{TopicsPage-CAP-GUbr.js → TopicsPage-1VAc29Qw.js} +2 -2
- package/dashboard/dist/assets/{TopicsPage-CAP-GUbr.js.map → TopicsPage-1VAc29Qw.js.map} +1 -1
- package/dashboard/dist/assets/UserName-DikzjQHJ.js +2 -0
- package/dashboard/dist/assets/{UserName-DggcLkSc.js.map → UserName-DikzjQHJ.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-Bmra5fVt.js → WorkflowExecutionPage-C15GSAoe.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-Bmra5fVt.js.map → WorkflowExecutionPage-C15GSAoe.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowPill-CcUUVugA.js → WorkflowPill-Da406nEj.js} +2 -2
- package/dashboard/dist/assets/{WorkflowPill-CcUUVugA.js.map → WorkflowPill-Da406nEj.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsDashboard-BQsZAGYU.js → WorkflowsDashboard-BMQd_0tW.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsDashboard-BQsZAGYU.js.map → WorkflowsDashboard-BMQd_0tW.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-CeliraHZ.js → WorkflowsOverview-CdxjVifp.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-CeliraHZ.js.map → WorkflowsOverview-CdxjVifp.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-DGxlonrV.js → YamlWorkflowDetailPage-DNVffIXa.js} +13 -13
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-DGxlonrV.js.map → YamlWorkflowDetailPage-DNVffIXa.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowsPage-DnT8UiyQ.js → YamlWorkflowsPage-BGP8wuos.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowsPage-DnT8UiyQ.js.map → YamlWorkflowsPage-BGP8wuos.js.map} +1 -1
- package/dashboard/dist/assets/{agents-mRV7m4sh.js → agents-BZJLIJ4h.js} +2 -2
- package/dashboard/dist/assets/{agents-mRV7m4sh.js.map → agents-BZJLIJ4h.js.map} +1 -1
- package/dashboard/dist/assets/{bots-SONCZlCM.js → bots-ClLcDGJb.js} +2 -2
- package/dashboard/dist/assets/{bots-SONCZlCM.js.map → bots-ClLcDGJb.js.map} +1 -1
- package/dashboard/dist/assets/capabilities-IaCcS7ge.js +2 -0
- package/dashboard/dist/assets/{capabilities-DZjCMN32.js.map → capabilities-IaCcS7ge.js.map} +1 -1
- package/dashboard/dist/assets/{controlplane-RQNXjna2.js → controlplane-Zi4m_MSx.js} +2 -2
- package/dashboard/dist/assets/{controlplane-RQNXjna2.js.map → controlplane-Zi4m_MSx.js.map} +1 -1
- package/dashboard/dist/assets/escalation-columns-BY2mg9DY.js +2 -0
- package/dashboard/dist/assets/escalation-columns-BY2mg9DY.js.map +1 -0
- package/dashboard/dist/assets/{index-ymm58cTW.js → index-BqGnhkh0.js} +2 -2
- package/dashboard/dist/assets/{index-ymm58cTW.js.map → index-BqGnhkh0.js.map} +1 -1
- package/dashboard/dist/assets/index-BzkE48xJ.js +6 -0
- package/dashboard/dist/assets/index-BzkE48xJ.js.map +1 -0
- package/dashboard/dist/assets/{index-CkeSxuZ0.js → index-C3o4OisO.js} +2 -2
- package/dashboard/dist/assets/{index-CkeSxuZ0.js.map → index-C3o4OisO.js.map} +1 -1
- package/dashboard/dist/assets/{index-DY_hlZCQ.js → index-CJu2PBNx.js} +2 -2
- package/dashboard/dist/assets/{index-DY_hlZCQ.js.map → index-CJu2PBNx.js.map} +1 -1
- package/dashboard/dist/assets/{index-DYKRtstT.js → index-CLmZaNTK.js} +2 -2
- package/dashboard/dist/assets/{index-DYKRtstT.js.map → index-CLmZaNTK.js.map} +1 -1
- package/dashboard/dist/assets/index-CfAi1OsI.js +65 -0
- package/dashboard/dist/assets/index-CfAi1OsI.js.map +1 -0
- package/dashboard/dist/assets/{index-CK-6m8e_.js → index-CmnNqpWg.js} +2 -2
- package/dashboard/dist/assets/{index-CK-6m8e_.js.map → index-CmnNqpWg.js.map} +1 -1
- package/dashboard/dist/assets/{index-DFJF8aWz.js → index-CvNBdkB1.js} +3 -3
- package/dashboard/dist/assets/{index-DFJF8aWz.js.map → index-CvNBdkB1.js.map} +1 -1
- package/dashboard/dist/assets/{index-DbZpL10z.js → index-D0zFReGL.js} +2 -2
- package/dashboard/dist/assets/{index-DbZpL10z.js.map → index-D0zFReGL.js.map} +1 -1
- package/dashboard/dist/assets/{index-C6GsrvX1.js → index-Dldi3Q3M.js} +2 -2
- package/dashboard/dist/assets/{index-C6GsrvX1.js.map → index-Dldi3Q3M.js.map} +1 -1
- package/dashboard/dist/assets/{index-DqsLfO-0.js → index-kiKZresb.js} +2 -2
- package/dashboard/dist/assets/{index-DqsLfO-0.js.map → index-kiKZresb.js.map} +1 -1
- package/dashboard/dist/assets/index-mKcQGi2B.js +3 -0
- package/dashboard/dist/assets/index-mKcQGi2B.js.map +1 -0
- package/dashboard/dist/assets/{index-CxVGlkK6.js → index-yGNt29V9.js} +2 -2
- package/dashboard/dist/assets/{index-CxVGlkK6.js.map → index-yGNt29V9.js.map} +1 -1
- package/dashboard/dist/assets/index-zQiUPfxA.css +1 -0
- package/dashboard/dist/assets/{knowledge-Bawo8u7l.js → knowledge-DWLxGTib.js} +2 -2
- package/dashboard/dist/assets/{knowledge-Bawo8u7l.js.map → knowledge-DWLxGTib.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-CKIpbpRZ.js → mcp-B6AARZ2I.js} +2 -2
- package/dashboard/dist/assets/{mcp-CKIpbpRZ.js.map → mcp-B6AARZ2I.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-vld4hYxQ.js → mcp-query-DrkvBU3a.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-vld4hYxQ.js.map → mcp-query-DrkvBU3a.js.map} +1 -1
- package/dashboard/dist/assets/{personas-BsARc3df.js → personas-Cmz2SAEU.js} +2 -2
- package/dashboard/dist/assets/{personas-BsARc3df.js.map → personas-Cmz2SAEU.js.map} +1 -1
- package/dashboard/dist/assets/{pipelines-BTSL-5ko.js → pipelines-CSgfVCMy.js} +2 -2
- package/dashboard/dist/assets/{pipelines-BTSL-5ko.js.map → pipelines-CSgfVCMy.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-DggQdNbj.js → tasks-UOtUkDk-.js} +2 -2
- package/dashboard/dist/assets/{tasks-DggQdNbj.js.map → tasks-UOtUkDk-.js.map} +1 -1
- package/dashboard/dist/assets/{topics-DzAKa34X.js → topics-Df5hGh6o.js} +2 -2
- package/dashboard/dist/assets/{topics-DzAKa34X.js.map → topics-Df5hGh6o.js.map} +1 -1
- package/dashboard/dist/assets/{useDebouncedValue-BA5S7V54.js → useDebouncedValue-C4P2jQuh.js} +2 -2
- package/dashboard/dist/assets/{useDebouncedValue-BA5S7V54.js.map → useDebouncedValue-C4P2jQuh.js.map} +1 -1
- package/dashboard/dist/assets/{useEventHooks-5uI9oI5W.js → useEventHooks-PDbuSJ12.js} +2 -2
- package/dashboard/dist/assets/{useEventHooks-5uI9oI5W.js.map → useEventHooks-PDbuSJ12.js.map} +1 -1
- package/dashboard/dist/assets/{useFilterParams-CvRyYHJN.js → useFilterParams-crmlBw_l.js} +2 -2
- package/dashboard/dist/assets/{useFilterParams-CvRyYHJN.js.map → useFilterParams-crmlBw_l.js.map} +1 -1
- package/dashboard/dist/assets/{useNamespace-CEKzFIqe.js → useNamespace-tZSOlge3.js} +2 -2
- package/dashboard/dist/assets/{useNamespace-CEKzFIqe.js.map → useNamespace-tZSOlge3.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-hHgX1Z50.js → useYamlActivityEvents-CINLzE32.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-hHgX1Z50.js.map → useYamlActivityEvents-CINLzE32.js.map} +1 -1
- package/dashboard/dist/assets/{users-AO8lUyNr.js → users-G8qwyZKS.js} +2 -2
- package/dashboard/dist/assets/{users-AO8lUyNr.js.map → users-G8qwyZKS.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-DN9yGSuM.js → vendor-icons-BpZiWH2f.js} +40 -40
- package/dashboard/dist/assets/vendor-icons-BpZiWH2f.js.map +1 -0
- package/dashboard/dist/assets/{vendor-query-B2UbickB.js → vendor-query-RUZdMvN6.js} +2 -2
- package/dashboard/dist/assets/{vendor-query-B2UbickB.js.map → vendor-query-RUZdMvN6.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-react-BpdAFEQc.js → vendor-react-CdqEC2zv.js} +3 -3
- package/dashboard/dist/assets/{vendor-react-BpdAFEQc.js.map → vendor-react-CdqEC2zv.js.map} +1 -1
- package/dashboard/dist/assets/{workflows-PtnlRK09.js → workflows-DbPqi1TW.js} +2 -2
- package/dashboard/dist/assets/{workflows-PtnlRK09.js.map → workflows-DbPqi1TW.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-DPu3Y8vG.js → yaml-workflows-DozD8hpR.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-DPu3Y8vG.js.map → yaml-workflows-DozD8hpR.js.map} +1 -1
- package/dashboard/dist/index.html +5 -5
- package/docs/dashboard.md +9 -2
- package/docs/design-principles.md +4 -0
- package/docs/hitl/pinned-views.md +3 -3
- package/docs/hitl/x-lt-transition.md +105 -0
- package/docs/operations.md +1 -1
- package/docs/scan-codes.md +243 -0
- package/package.json +2 -2
- package/dashboard/dist/assets/AvailableEscalationsPage-C1vtTvqP.js +0 -2
- package/dashboard/dist/assets/AvailableEscalationsPage-C1vtTvqP.js.map +0 -1
- package/dashboard/dist/assets/BotPicker-Dohv8dhR.js +0 -2
- package/dashboard/dist/assets/CountdownTimer-BF71ldGF.js +0 -2
- package/dashboard/dist/assets/HomePage-HPCd8SjF.js +0 -2
- package/dashboard/dist/assets/HomePage-HPCd8SjF.js.map +0 -1
- package/dashboard/dist/assets/ListToolbar-BFHVOba6.js +0 -2
- package/dashboard/dist/assets/ListToolbar-BFHVOba6.js.map +0 -1
- package/dashboard/dist/assets/OperationsPage-flrZ-EJ9.js +0 -2
- package/dashboard/dist/assets/OperationsPage-flrZ-EJ9.js.map +0 -1
- package/dashboard/dist/assets/OperatorDashboard-Dhs2eo8p.js +0 -2
- package/dashboard/dist/assets/OperatorDashboard-Dhs2eo8p.js.map +0 -1
- package/dashboard/dist/assets/RoleDetailPage-D70jTLZm.js +0 -8
- package/dashboard/dist/assets/RoleDetailPage-D70jTLZm.js.map +0 -1
- package/dashboard/dist/assets/RolesPage-CNueMVuJ.js +0 -2
- package/dashboard/dist/assets/TimeAgo-CInx-vzY.js +0 -2
- package/dashboard/dist/assets/UserName-DggcLkSc.js +0 -2
- package/dashboard/dist/assets/capabilities-DZjCMN32.js +0 -2
- package/dashboard/dist/assets/escalation-columns-XLEcZRCg.js +0 -2
- package/dashboard/dist/assets/escalation-columns-XLEcZRCg.js.map +0 -1
- package/dashboard/dist/assets/index-2BwHxjCw.css +0 -1
- package/dashboard/dist/assets/index-D2CfSx_x.js +0 -5
- package/dashboard/dist/assets/index-D2CfSx_x.js.map +0 -1
- package/dashboard/dist/assets/index-Dh3CVChT.js +0 -63
- package/dashboard/dist/assets/index-Dh3CVChT.js.map +0 -1
- package/dashboard/dist/assets/index-iHV3d7o3.js +0 -6
- package/dashboard/dist/assets/index-iHV3d7o3.js.map +0 -1
- package/dashboard/dist/assets/role-display-Dvo2lDpU.js +0 -2
- package/dashboard/dist/assets/role-display-Dvo2lDpU.js.map +0 -1
- package/dashboard/dist/assets/vendor-icons-DN9yGSuM.js.map +0 -1
|
@@ -40,6 +40,7 @@ exports.listDistinctTypes = listDistinctTypes;
|
|
|
40
40
|
exports.getEscalationStats = getEscalationStats;
|
|
41
41
|
exports.getStationMetrics = getStationMetrics;
|
|
42
42
|
const escalationService = __importStar(require("../../services/escalation"));
|
|
43
|
+
const features_1 = require("../../modules/features");
|
|
43
44
|
const helpers_1 = require("./helpers");
|
|
44
45
|
/** True when the caller asked for anything the plain list path can't express. */
|
|
45
46
|
function hasFacetQuery(i) {
|
|
@@ -114,6 +115,7 @@ async function listEscalations(input, auth) {
|
|
|
114
115
|
type: input.type,
|
|
115
116
|
subtype: input.subtype,
|
|
116
117
|
assigned_to: input.assigned_to,
|
|
118
|
+
parent_id: input.parent_id,
|
|
117
119
|
claimed: input.claimed,
|
|
118
120
|
priority: input.priority,
|
|
119
121
|
limit: input.limit,
|
|
@@ -278,10 +280,16 @@ async function getStationMetrics(input, auth) {
|
|
|
278
280
|
try {
|
|
279
281
|
// Station metrics are aggregate queue-SHAPE counts (pending/claimed/resolved
|
|
280
282
|
// + jeopardy) per role — the depth of a lane, not the disclosure of any one
|
|
281
|
-
// item.
|
|
282
|
-
//
|
|
283
|
-
//
|
|
284
|
-
//
|
|
283
|
+
// item. With publicPaceBoard (the default) every authenticated caller sees
|
|
284
|
+
// every station: the board is trends, and per-item lists stay behind their
|
|
285
|
+
// own RBAC. With the flag off, the view narrows to role membership,
|
|
286
|
+
// including read_scope='self' roles (whose per-item lists stay narrowed
|
|
287
|
+
// elsewhere) — without the selfRoles union, a self-scoped operator would
|
|
288
|
+
// see an empty board on their own lanes.
|
|
289
|
+
if ((0, features_1.getFeatureFlags)().publicPaceBoard) {
|
|
290
|
+
const stations = await escalationService.getStationMetrics(undefined, input.period);
|
|
291
|
+
return { status: 200, data: { stations } };
|
|
292
|
+
}
|
|
285
293
|
const scope = await (0, helpers_1.getEscalationReadScope)(auth.userId);
|
|
286
294
|
const memberRoles = [...scope.allRoles, ...scope.selfRoles];
|
|
287
295
|
if (!scope.global && memberRoles.length === 0) {
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { type ProvisionIfAbsent } from './helpers';
|
|
2
2
|
import type { LTApiAuth, LTApiResult } from '../../types/sdk';
|
|
3
|
+
/**
|
|
4
|
+
* Intersect the caller's scope roles with an optional caller-supplied
|
|
5
|
+
* restriction (e.g. a scan step's expected queues). Global scope with no
|
|
6
|
+
* restriction stays unfiltered (null); a restriction always applies. An
|
|
7
|
+
* empty intersection returns [] — which matches nothing in the SQL filter,
|
|
8
|
+
* the correct fail-closed outcome.
|
|
9
|
+
*/
|
|
10
|
+
export declare function restrictScopeRoles(scopeRoles: string[], global: boolean, restrictRoles?: string[]): string[] | null;
|
|
3
11
|
/**
|
|
4
12
|
* Find escalations by a metadata key-value pair.
|
|
5
13
|
*
|
|
@@ -27,6 +35,7 @@ export declare function claimByMetadata(input: {
|
|
|
27
35
|
assignee?: string;
|
|
28
36
|
metadata?: Record<string, any>;
|
|
29
37
|
provisionIfAbsent?: ProvisionIfAbsent;
|
|
38
|
+
restrictRoles?: string[];
|
|
30
39
|
}, auth: LTApiAuth): Promise<LTApiResult>;
|
|
31
40
|
/**
|
|
32
41
|
* Resolve an escalation by metadata key-value pair.
|
|
@@ -46,4 +55,6 @@ export declare function resolveByMetadata(input: {
|
|
|
46
55
|
resolverPayload: Record<string, any>;
|
|
47
56
|
assignee?: string;
|
|
48
57
|
metadata?: Record<string, any>;
|
|
58
|
+
restrictRoles?: string[];
|
|
59
|
+
extraFacets?: Record<string, any>;
|
|
49
60
|
}, auth: LTApiAuth): Promise<LTApiResult>;
|
|
@@ -33,6 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.restrictScopeRoles = restrictScopeRoles;
|
|
36
37
|
exports.findByMetadata = findByMetadata;
|
|
37
38
|
exports.claimByMetadata = claimByMetadata;
|
|
38
39
|
exports.resolveByMetadata = resolveByMetadata;
|
|
@@ -41,6 +42,20 @@ const helpers_1 = require("./helpers");
|
|
|
41
42
|
const resolver_validation_1 = require("../../services/escalation/resolver-validation");
|
|
42
43
|
const enforcement_cache_1 = require("../../services/role/enforcement-cache");
|
|
43
44
|
const resolve_1 = require("./resolve");
|
|
45
|
+
/**
|
|
46
|
+
* Intersect the caller's scope roles with an optional caller-supplied
|
|
47
|
+
* restriction (e.g. a scan step's expected queues). Global scope with no
|
|
48
|
+
* restriction stays unfiltered (null); a restriction always applies. An
|
|
49
|
+
* empty intersection returns [] — which matches nothing in the SQL filter,
|
|
50
|
+
* the correct fail-closed outcome.
|
|
51
|
+
*/
|
|
52
|
+
function restrictScopeRoles(scopeRoles, global, restrictRoles) {
|
|
53
|
+
if (!restrictRoles || restrictRoles.length === 0)
|
|
54
|
+
return global ? null : scopeRoles;
|
|
55
|
+
if (global)
|
|
56
|
+
return restrictRoles;
|
|
57
|
+
return scopeRoles.filter((r) => restrictRoles.includes(r));
|
|
58
|
+
}
|
|
44
59
|
/**
|
|
45
60
|
* Find escalations by a metadata key-value pair.
|
|
46
61
|
*
|
|
@@ -85,9 +100,10 @@ async function claimByMetadata(input, auth) {
|
|
|
85
100
|
// Write-scope: global → no filter; otherwise restrict to write_all roles. The
|
|
86
101
|
// SDK claim-by-metadata uses a flat role filter and cannot enforce write_self
|
|
87
102
|
// ownership, so self-scope members are excluded from this path (their items
|
|
88
|
-
// are pre-claimed and acted on by id).
|
|
103
|
+
// are pre-claimed and acted on by id). An optional caller restriction
|
|
104
|
+
// (expected queues) intersects with the scope inside the same SQL filter.
|
|
89
105
|
const writeScope = await (0, helpers_1.getEscalationWriteScope)(auth.userId);
|
|
90
|
-
const allowedRoles = writeScope.
|
|
106
|
+
const allowedRoles = restrictScopeRoles(writeScope.allRoles, writeScope.global, input.restrictRoles);
|
|
91
107
|
const result = await escalationService.claimByMetadata(input.key, input.value, claimUserId, input.durationMinutes, input.metadata, allowedRoles);
|
|
92
108
|
if (!result) {
|
|
93
109
|
// No rows matched. Check if candidates existed (role mismatch vs no match).
|
|
@@ -129,22 +145,26 @@ async function resolveByMetadata(input, auth) {
|
|
|
129
145
|
// Write-scope folds into the atomic resolve SQL: global → no filter; otherwise
|
|
130
146
|
// write_all roles match any item, write_self roles match only items assigned
|
|
131
147
|
// to the resolver. A non-global caller cannot pass a foreign assignee, so the
|
|
132
|
-
// self-branch (assigned_to = resolveUserId) is the caller's own items.
|
|
148
|
+
// self-branch (assigned_to = resolveUserId) is the caller's own items. An
|
|
149
|
+
// optional caller restriction (expected queues) intersects with both arrays
|
|
150
|
+
// inside the same SQL filter.
|
|
133
151
|
const writeScope = await (0, helpers_1.getEscalationWriteScope)(auth.userId);
|
|
134
|
-
const writeAllRoles = writeScope.
|
|
135
|
-
const writeSelfRoles = writeScope.global
|
|
152
|
+
const writeAllRoles = restrictScopeRoles(writeScope.allRoles, writeScope.global, input.restrictRoles);
|
|
153
|
+
const writeSelfRoles = writeScope.global
|
|
154
|
+
? (input.restrictRoles?.length ? [] : null)
|
|
155
|
+
: restrictScopeRoles(writeScope.selfRoles, false, input.restrictRoles);
|
|
136
156
|
// Schema enforcement rides the atomic statement: with the cached enforcing
|
|
137
157
|
// set empty (the common case) the single-call behavior is unchanged. When
|
|
138
158
|
// the picked row's role enforces, the statement returns the row WITHOUT
|
|
139
159
|
// writing; the payload validates here, then a second asserted pass claims
|
|
140
160
|
// + resolves the same row with pending re-checked inside the statement.
|
|
141
161
|
const enforcing = await (0, enforcement_cache_1.getEnforcingRoles)();
|
|
142
|
-
let result = await escalationService.resolveByMetadataAtomic(input.key, input.value, resolveUserId, input.resolverPayload, input.metadata, writeAllRoles, writeSelfRoles, enforcing.size > 0 ? [...enforcing] : null);
|
|
162
|
+
let result = await escalationService.resolveByMetadataAtomic(input.key, input.value, resolveUserId, input.resolverPayload, input.metadata, writeAllRoles, writeSelfRoles, enforcing.size > 0 ? [...enforcing] : null, null, input.extraFacets);
|
|
143
163
|
if (result.outcome === 'validation_required' && result.row) {
|
|
144
164
|
const report = await (0, resolver_validation_1.checkResolverPayload)(result.row, input.resolverPayload);
|
|
145
165
|
if (report)
|
|
146
166
|
return (0, resolve_1.validationFailure)(report);
|
|
147
|
-
result = await escalationService.resolveByMetadataAtomic(input.key, input.value, resolveUserId, input.resolverPayload, input.metadata, writeAllRoles, writeSelfRoles, null, result.row.id);
|
|
167
|
+
result = await escalationService.resolveByMetadataAtomic(input.key, input.value, resolveUserId, input.resolverPayload, input.metadata, writeAllRoles, writeSelfRoles, null, result.row.id, input.extraFacets);
|
|
148
168
|
// The asserted row left pending between the two passes — a concurrent
|
|
149
169
|
// resolution won the row; surface it as the conflict it is.
|
|
150
170
|
if (result.outcome === 'not_found') {
|
package/build/api/roles.d.ts
CHANGED
|
@@ -96,6 +96,8 @@ export declare function updateRole(input: {
|
|
|
96
96
|
}[] | null;
|
|
97
97
|
properties?: Record<string, any> | null;
|
|
98
98
|
ops_visible?: boolean;
|
|
99
|
+
/** Make this role's sequence the home Pace Board's default segment (single-holder: setting it clears the previous holder). */
|
|
100
|
+
ops_home_default?: boolean;
|
|
99
101
|
parent_role?: string | null;
|
|
100
102
|
sla_minutes?: number | null;
|
|
101
103
|
target_per_hour?: number | null;
|
package/build/api/roles.js
CHANGED
|
@@ -225,6 +225,9 @@ async function updateRole(input) {
|
|
|
225
225
|
if (input.ops_visible !== undefined && typeof input.ops_visible !== 'boolean') {
|
|
226
226
|
return { status: 400, error: 'ops_visible must be a boolean' };
|
|
227
227
|
}
|
|
228
|
+
if (input.ops_home_default !== undefined && typeof input.ops_home_default !== 'boolean') {
|
|
229
|
+
return { status: 400, error: 'ops_home_default must be a boolean' };
|
|
230
|
+
}
|
|
228
231
|
if (input.enforce_schema !== undefined && typeof input.enforce_schema !== 'boolean') {
|
|
229
232
|
return { status: 400, error: 'enforce_schema must be a boolean' };
|
|
230
233
|
}
|
|
@@ -262,6 +265,7 @@ async function updateRole(input) {
|
|
|
262
265
|
default_pins: input.default_pins,
|
|
263
266
|
properties: input.properties,
|
|
264
267
|
ops_visible: input.ops_visible,
|
|
268
|
+
ops_home_default: input.ops_home_default,
|
|
265
269
|
parent_role: input.parent_role,
|
|
266
270
|
sla_minutes: input.sla_minutes,
|
|
267
271
|
target_per_hour: input.target_per_hour,
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as scanCodeService from '../../services/scan-code';
|
|
2
|
+
import type { LTApiResult } from '../../types/sdk';
|
|
3
|
+
export declare function listScanSchemes(): Promise<LTApiResult>;
|
|
4
|
+
export declare function getScanScheme(input: {
|
|
5
|
+
version: number;
|
|
6
|
+
}): Promise<LTApiResult>;
|
|
7
|
+
export declare function upsertScanScheme(input: scanCodeService.ScanSchemeInput): Promise<LTApiResult>;
|
|
8
|
+
export declare function deleteScanScheme(input: {
|
|
9
|
+
version: number;
|
|
10
|
+
}): Promise<LTApiResult>;
|
|
11
|
+
export declare function listScanRules(input: {
|
|
12
|
+
version: number;
|
|
13
|
+
}): Promise<LTApiResult>;
|
|
14
|
+
export declare function getScanRule(input: {
|
|
15
|
+
version: number;
|
|
16
|
+
category: string;
|
|
17
|
+
}): Promise<LTApiResult>;
|
|
18
|
+
export declare function upsertScanRule(input: scanCodeService.ScanRuleInput): Promise<LTApiResult>;
|
|
19
|
+
export declare function deleteScanRule(input: {
|
|
20
|
+
version: number;
|
|
21
|
+
category: string;
|
|
22
|
+
}): Promise<LTApiResult>;
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.listScanSchemes = listScanSchemes;
|
|
37
|
+
exports.getScanScheme = getScanScheme;
|
|
38
|
+
exports.upsertScanScheme = upsertScanScheme;
|
|
39
|
+
exports.deleteScanScheme = deleteScanScheme;
|
|
40
|
+
exports.listScanRules = listScanRules;
|
|
41
|
+
exports.getScanRule = getScanRule;
|
|
42
|
+
exports.upsertScanRule = upsertScanRule;
|
|
43
|
+
exports.deleteScanRule = deleteScanRule;
|
|
44
|
+
const scanCodeService = __importStar(require("../../services/scan-code"));
|
|
45
|
+
// ── Scheme CRUD ────────────────────────────────────────────────────────────
|
|
46
|
+
// Admin gating happens at the transport layer (requireAdmin on routes, admin
|
|
47
|
+
// MCP registration) — same convention as workflow config.
|
|
48
|
+
async function listScanSchemes() {
|
|
49
|
+
try {
|
|
50
|
+
const schemes = await scanCodeService.listScanSchemes();
|
|
51
|
+
return { status: 200, data: { schemes } };
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
return { status: 500, error: err.message };
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async function getScanScheme(input) {
|
|
58
|
+
try {
|
|
59
|
+
const scheme = await scanCodeService.getScanScheme(input.version);
|
|
60
|
+
if (!scheme)
|
|
61
|
+
return { status: 404, error: `No scan scheme for version ${input.version}` };
|
|
62
|
+
const rules = await scanCodeService.listScanRules(input.version);
|
|
63
|
+
return { status: 200, data: { scheme, rules } };
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
return { status: 500, error: err.message };
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async function upsertScanScheme(input) {
|
|
70
|
+
try {
|
|
71
|
+
const scheme = await scanCodeService.upsertScanScheme(input);
|
|
72
|
+
return { status: 200, data: { scheme } };
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
// Write-time invariant violations are caller errors, not server faults.
|
|
76
|
+
return { status: 400, error: err.message };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
async function deleteScanScheme(input) {
|
|
80
|
+
try {
|
|
81
|
+
const deleted = await scanCodeService.deleteScanScheme(input.version);
|
|
82
|
+
if (!deleted)
|
|
83
|
+
return { status: 404, error: `No scan scheme for version ${input.version}` };
|
|
84
|
+
return { status: 200, data: { deleted: true } };
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
return { status: 500, error: err.message };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// ── Rule CRUD ──────────────────────────────────────────────────────────────
|
|
91
|
+
async function listScanRules(input) {
|
|
92
|
+
try {
|
|
93
|
+
const rules = await scanCodeService.listScanRules(input.version);
|
|
94
|
+
return { status: 200, data: { rules } };
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
return { status: 500, error: err.message };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async function getScanRule(input) {
|
|
101
|
+
try {
|
|
102
|
+
const rule = await scanCodeService.getScanRule(input.version, input.category);
|
|
103
|
+
if (!rule) {
|
|
104
|
+
return { status: 404, error: `No scan rule for ${input.version}:${input.category}` };
|
|
105
|
+
}
|
|
106
|
+
return { status: 200, data: { rule } };
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
return { status: 500, error: err.message };
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
async function upsertScanRule(input) {
|
|
113
|
+
try {
|
|
114
|
+
const scheme = await scanCodeService.getScanScheme(input.scheme_version);
|
|
115
|
+
if (!scheme) {
|
|
116
|
+
return { status: 404, error: `No scan scheme for version ${input.scheme_version} — create the scheme first` };
|
|
117
|
+
}
|
|
118
|
+
const rule = await scanCodeService.upsertScanRule(input);
|
|
119
|
+
return { status: 200, data: { rule } };
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
return { status: 400, error: err.message };
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
async function deleteScanRule(input) {
|
|
126
|
+
try {
|
|
127
|
+
const deleted = await scanCodeService.deleteScanRule(input.version, input.category);
|
|
128
|
+
if (!deleted) {
|
|
129
|
+
return { status: 404, error: `No scan rule for ${input.version}:${input.category}` };
|
|
130
|
+
}
|
|
131
|
+
return { status: 200, data: { deleted: true } };
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
return { status: 500, error: err.message };
|
|
135
|
+
}
|
|
136
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type ScanExecuteRequest, type ScanExecuteResponse } from '../../types';
|
|
2
|
+
import type { LTApiAuth, LTApiResult } from '../../types/sdk';
|
|
3
|
+
/**
|
|
4
|
+
* Execute a raw scan code: parse → load the rule → walk its steps in order.
|
|
5
|
+
* The first step whose condition matches performs its verb and answers; a
|
|
6
|
+
* step that matches nothing falls through to the next. Every terminal state
|
|
7
|
+
* is a structured 200 outcome — the scan surface reports, it doesn't throw.
|
|
8
|
+
*/
|
|
9
|
+
export declare function executeScanCode(input: ScanExecuteRequest, auth: LTApiAuth): Promise<LTApiResult<ScanExecuteResponse>>;
|