@hotmeshio/long-tail 0.31.1 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/api/escalations/create.js +17 -6
- package/build/api/escalations/files.d.ts +18 -0
- package/build/api/escalations/files.js +73 -0
- package/build/api/escalations/index.d.ts +1 -0
- package/build/api/escalations/index.js +4 -2
- package/build/api/escalations/metadata.js +5 -4
- package/build/api/escalations/resolve.js +6 -4
- package/build/bin/ltc.js +4 -2
- package/build/index.d.ts +2 -0
- package/build/index.js +13 -2
- package/build/lib/cli/commands/escalations.d.ts +2 -0
- package/build/lib/cli/commands/escalations.js +12 -4
- package/build/lib/storage/s3.js +1 -0
- package/build/modules/config.d.ts +9 -0
- package/build/modules/config.js +9 -0
- package/build/routes/escalations/single.js +11 -0
- package/build/sdk/index.d.ts +4 -0
- package/build/sdk/index.js +2 -0
- package/build/services/escalation/aggregate-resolved-sql.d.ts +19 -0
- package/build/services/escalation/aggregate-resolved-sql.js +57 -0
- package/build/services/escalation/aggregate-sql.d.ts +6 -1
- package/build/services/escalation/aggregate-sql.js +33 -12
- package/build/services/escalation/aggregate-validate.d.ts +5 -2
- package/build/services/escalation/aggregate-validate.js +7 -4
- package/build/services/escalation/aggregates.js +5 -3
- package/build/services/escalation/crud.js +3 -0
- package/build/services/escalation/file-links.d.ts +39 -0
- package/build/services/escalation/file-links.js +118 -0
- package/build/services/escalation/resolver-validation.d.ts +33 -0
- package/build/services/escalation/resolver-validation.js +22 -6
- package/build/services/orchestrator/condition.d.ts +20 -4
- package/build/services/orchestrator/condition.js +27 -8
- package/build/shared/form-validation/display-only-widgets.d.ts +3 -2
- package/build/shared/form-validation/display-only-widgets.js +3 -2
- package/build/shared/form-validation/index.d.ts +2 -0
- package/build/shared/form-validation/index.js +2 -0
- package/build/shared/form-validation/x-lt-confidence-facets.d.ts +27 -0
- package/build/shared/form-validation/x-lt-confidence-facets.js +60 -0
- package/build/shared/form-validation/x-lt-confidence.d.ts +57 -0
- package/build/shared/form-validation/x-lt-confidence.js +177 -0
- package/build/shared/form-validation/x-lt-help.d.ts +1 -1
- package/build/shared/form-validation/x-lt-help.js +1 -1
- package/build/system/mcp-servers/admin/escalations.js +4 -2
- package/build/system/mcp-servers/admin/labels-schemas.d.ts +4 -4
- package/build/system/mcp-servers/admin/schemas.d.ts +111 -70
- package/build/system/mcp-servers/admin/schemas.js +8 -3
- package/build/system/mcp-servers/human-queue-files.d.ts +8 -0
- package/build/system/mcp-servers/human-queue-files.js +32 -0
- package/build/system/mcp-servers/human-queue-schemas.d.ts +7 -0
- package/build/system/mcp-servers/human-queue-schemas.js +4 -1
- package/build/system/mcp-servers/human-queue.d.ts +1 -0
- package/build/system/mcp-servers/human-queue.js +23 -16
- package/build/system/seed/tool-manifests-admin.js +1 -1
- package/build/system/seed/tool-manifests-escalation.js +13 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/analytics.d.ts +14 -3
- package/build/types/analytics.js +3 -1
- package/build/types/escalation.d.ts +34 -0
- package/build/types/escalation.js +72 -1
- package/build/types/index.d.ts +4 -4
- package/build/types/index.js +5 -1
- package/dashboard/dist/assets/{AdminDashboard-BafKaq50.js → AdminDashboard-C25co77C.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-BafKaq50.js.map → AdminDashboard-C25co77C.js.map} +1 -1
- package/dashboard/dist/assets/{AgentConfigPage-CFHf31DT.js → AgentConfigPage-CsCpI15j.js} +5 -5
- package/dashboard/dist/assets/{AgentConfigPage-CFHf31DT.js.map → AgentConfigPage-CsCpI15j.js.map} +1 -1
- package/dashboard/dist/assets/{AgentDetailPage-CEvz5rJr.js → AgentDetailPage-ByaepsB5.js} +3 -3
- package/dashboard/dist/assets/{AgentDetailPage-CEvz5rJr.js.map → AgentDetailPage-ByaepsB5.js.map} +1 -1
- package/dashboard/dist/assets/{AgentsPage-DjQaio0O.js → AgentsPage-ByHU42SO.js} +2 -2
- package/dashboard/dist/assets/{AgentsPage-DjQaio0O.js.map → AgentsPage-ByHU42SO.js.map} +1 -1
- package/dashboard/dist/assets/{AvailableEscalationsPage-UB03VTJx.js → AvailableEscalationsPage--o6qcz7-.js} +2 -2
- package/dashboard/dist/assets/{AvailableEscalationsPage-UB03VTJx.js.map → AvailableEscalationsPage--o6qcz7-.js.map} +1 -1
- package/dashboard/dist/assets/{BotPicker-C7MNWOF7.js → BotPicker-B3y3H3fs.js} +2 -2
- package/dashboard/dist/assets/{BotPicker-C7MNWOF7.js.map → BotPicker-B3y3H3fs.js.map} +1 -1
- package/dashboard/dist/assets/{BulkAssignModal-h5fX-_cV.js → BulkAssignModal-DMNIkIn6.js} +2 -2
- package/dashboard/dist/assets/{BulkAssignModal-h5fX-_cV.js.map → BulkAssignModal-DMNIkIn6.js.map} +1 -1
- package/dashboard/dist/assets/{CapabilitiesPage-BIzDl-ZT.js → CapabilitiesPage-BekfKHlk.js} +2 -2
- package/dashboard/dist/assets/{CapabilitiesPage-BIzDl-ZT.js.map → CapabilitiesPage-BekfKHlk.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-B5TivtEg.js → CollapsibleSection-BAteHgBG.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-B5TivtEg.js.map → CollapsibleSection-BAteHgBG.js.map} +1 -1
- package/dashboard/dist/assets/{ConfirmDeleteModal-CB4nKePb.js → ConfirmDeleteModal-BNY287W9.js} +2 -2
- package/dashboard/dist/assets/{ConfirmDeleteModal-CB4nKePb.js.map → ConfirmDeleteModal-BNY287W9.js.map} +1 -1
- package/dashboard/dist/assets/{ConnectedAppsPage-B3S5gVWw.js → ConnectedAppsPage-LLiiH3da.js} +2 -2
- package/dashboard/dist/assets/{ConnectedAppsPage-B3S5gVWw.js.map → ConnectedAppsPage-LLiiH3da.js.map} +1 -1
- package/dashboard/dist/assets/{CountdownTimer-BHVIq3kA.js → CountdownTimer-DBLURjxh.js} +2 -2
- package/dashboard/dist/assets/{CountdownTimer-BHVIq3kA.js.map → CountdownTimer-DBLURjxh.js.map} +1 -1
- package/dashboard/dist/assets/{CredentialConfirmModal-w0AGmCIe.js → CredentialConfirmModal-BqpY3yen.js} +2 -2
- package/dashboard/dist/assets/{CredentialConfirmModal-w0AGmCIe.js.map → CredentialConfirmModal-BqpY3yen.js.map} +1 -1
- package/dashboard/dist/assets/{CredentialsPage-BtCGBJrT.js → CredentialsPage-CW3_dbm2.js} +2 -2
- package/dashboard/dist/assets/{CredentialsPage-BtCGBJrT.js.map → CredentialsPage-CW3_dbm2.js.map} +1 -1
- package/dashboard/dist/assets/{CronLabel-BG1rZK-5.js → CronLabel-CR6DiZZr.js} +2 -2
- package/dashboard/dist/assets/{CronLabel-BG1rZK-5.js.map → CronLabel-CR6DiZZr.js.map} +1 -1
- package/dashboard/dist/assets/{DataTable-FjFhx0SE.js → DataTable-C-IlbLhY.js} +2 -2
- package/dashboard/dist/assets/{DataTable-FjFhx0SE.js.map → DataTable-C-IlbLhY.js.map} +1 -1
- package/dashboard/dist/assets/{DropZone-D8ZVdEb5.js → DropZone-CHmz59w4.js} +2 -2
- package/dashboard/dist/assets/{DropZone-D8ZVdEb5.js.map → DropZone-CHmz59w4.js.map} +1 -1
- package/dashboard/dist/assets/{ElapsedCell-l4m8Yvfv.js → ElapsedCell-CEapQvgU.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-l4m8Yvfv.js.map → ElapsedCell-CEapQvgU.js.map} +1 -1
- package/dashboard/dist/assets/{EntityTimelinePanel-BOHlIaxF.js → EntityTimelinePanel-DqD_BpJM.js} +2 -2
- package/dashboard/dist/assets/{EntityTimelinePanel-BOHlIaxF.js.map → EntityTimelinePanel-DqD_BpJM.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationListSchemaPage-BotlwlX3.js → EscalationListSchemaPage-DDKcrVbb.js} +3 -3
- package/dashboard/dist/assets/{EscalationListSchemaPage-BotlwlX3.js.map → EscalationListSchemaPage-DDKcrVbb.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationSchemaPage-CfZSVOSD.js → EscalationSchemaPage-BZHZfJiQ.js} +3 -3
- package/dashboard/dist/assets/{EscalationSchemaPage-CfZSVOSD.js.map → EscalationSchemaPage-BZHZfJiQ.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationTimeline-CCKpuRBU.js → EscalationTimeline-Dv0XUgQX.js} +2 -2
- package/dashboard/dist/assets/{EscalationTimeline-CCKpuRBU.js.map → EscalationTimeline-Dv0XUgQX.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationTitleSelect-cpTzPHiW.js → EscalationTitleSelect-BN7D52wT.js} +2 -2
- package/dashboard/dist/assets/{EscalationTitleSelect-cpTzPHiW.js.map → EscalationTitleSelect-BN7D52wT.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-DS-nK0qV.js → EscalationsOverview-DE6EPkhT.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-DS-nK0qV.js.map → EscalationsOverview-DE6EPkhT.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-UfebhJf0.js → EventTable-CiV62txY.js} +2 -2
- package/dashboard/dist/assets/{EventTable-UfebhJf0.js.map → EventTable-CiV62txY.js.map} +1 -1
- package/dashboard/dist/assets/{FilterBar-newA5l-X.js → FilterBar-WyNQPyQ1.js} +2 -2
- package/dashboard/dist/assets/{FilterBar-newA5l-X.js.map → FilterBar-WyNQPyQ1.js.map} +1 -1
- package/dashboard/dist/assets/{GraphInvokePage-6SCDyQcK.js → GraphInvokePage--gn48yUD.js} +2 -2
- package/dashboard/dist/assets/{GraphInvokePage-6SCDyQcK.js.map → GraphInvokePage--gn48yUD.js.map} +1 -1
- package/dashboard/dist/assets/{HomePage-BEc-XdKj.js → HomePage-IR_jgBE8.js} +2 -2
- package/dashboard/dist/assets/{HomePage-BEc-XdKj.js.map → HomePage-IR_jgBE8.js.map} +1 -1
- package/dashboard/dist/assets/{LabelJobsPage-BO50zXT5.js → LabelJobsPage-C8LSts4O.js} +2 -2
- package/dashboard/dist/assets/{LabelJobsPage-BO50zXT5.js.map → LabelJobsPage-C8LSts4O.js.map} +1 -1
- package/dashboard/dist/assets/{LinePage-NYxJQ-ex.js → LinePage-CS7uUv00.js} +2 -2
- package/dashboard/dist/assets/{LinePage-NYxJQ-ex.js.map → LinePage-CS7uUv00.js.map} +1 -1
- package/dashboard/dist/assets/{LinesPage-RbWTaQRh.js → LinesPage-CJprjG39.js} +3 -3
- package/dashboard/dist/assets/{LinesPage-RbWTaQRh.js.map → LinesPage-CJprjG39.js.map} +1 -1
- package/dashboard/dist/assets/{ListToolbar-B-E9-toh.js → ListToolbar-YP3uwvXC.js} +2 -2
- package/dashboard/dist/assets/{ListToolbar-B-E9-toh.js.map → ListToolbar-YP3uwvXC.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-Shcf9QhZ.js → McpOverview-Ce-m2JON.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-Shcf9QhZ.js.map → McpOverview-Ce-m2JON.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryDetailPage-D8kmjy2v.js → McpQueryDetailPage-CtnUqO1v.js} +2 -2
- package/dashboard/dist/assets/{McpQueryDetailPage-D8kmjy2v.js.map → McpQueryDetailPage-CtnUqO1v.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryPage-ck-o5m8A.js → McpQueryPage-C-lqUPlg.js} +2 -2
- package/dashboard/dist/assets/{McpQueryPage-ck-o5m8A.js.map → McpQueryPage-C-lqUPlg.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunDetailPage-BJKkM9-3.js → McpRunDetailPage-MnIe0hwz.js} +2 -2
- package/dashboard/dist/assets/{McpRunDetailPage-BJKkM9-3.js.map → McpRunDetailPage-MnIe0hwz.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunsPage-DqhHfD5G.js → McpRunsPage-CpYLXVPF.js} +2 -2
- package/dashboard/dist/assets/{McpRunsPage-DqhHfD5G.js.map → McpRunsPage-CpYLXVPF.js.map} +1 -1
- package/dashboard/dist/assets/{NamespacePill--uIaGtrN.js → NamespacePill-DilSgLyE.js} +2 -2
- package/dashboard/dist/assets/{NamespacePill--uIaGtrN.js.map → NamespacePill-DilSgLyE.js.map} +1 -1
- package/dashboard/dist/assets/{OperationsPage-D6B9Vv__.js → OperationsPage-xe6bAwaq.js} +2 -2
- package/dashboard/dist/assets/{OperationsPage-D6B9Vv__.js.map → OperationsPage-xe6bAwaq.js.map} +1 -1
- package/dashboard/dist/assets/{OperatorDashboard-CIH1cxjQ.js → OperatorDashboard-Cm9_C0EP.js} +2 -2
- package/dashboard/dist/assets/{OperatorDashboard-CIH1cxjQ.js.map → OperatorDashboard-Cm9_C0EP.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeader-DClJ33fV.js → PageHeader-B7SOvLT8.js} +2 -2
- package/dashboard/dist/assets/{PageHeader-DClJ33fV.js.map → PageHeader-B7SOvLT8.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeaderWithStats-C-TrbKQL.js → PageHeaderWithStats-DWKap7gs.js} +2 -2
- package/dashboard/dist/assets/{PageHeaderWithStats-C-TrbKQL.js.map → PageHeaderWithStats-DWKap7gs.js.map} +1 -1
- package/dashboard/dist/assets/{PersonaDetailPage-DjvfyIph.js → PersonaDetailPage-CvstNkh3.js} +2 -2
- package/dashboard/dist/assets/{PersonaDetailPage-DjvfyIph.js.map → PersonaDetailPage-CvstNkh3.js.map} +1 -1
- package/dashboard/dist/assets/{PersonasPage-D7ryA8Vc.js → PersonasPage-ba1KeInW.js} +2 -2
- package/dashboard/dist/assets/{PersonasPage-D7ryA8Vc.js.map → PersonasPage-ba1KeInW.js.map} +1 -1
- package/dashboard/dist/assets/{PortalPage-D3ybr0mo.js → PortalPage-GDgG88TM.js} +2 -2
- package/dashboard/dist/assets/{PortalPage-D3ybr0mo.js.map → PortalPage-GDgG88TM.js.map} +1 -1
- package/dashboard/dist/assets/{PrintLabelsPanel-D0HF5x8b.js → PrintLabelsPanel-BkUN00Qd.js} +2 -2
- package/dashboard/dist/assets/{PrintLabelsPanel-D0HF5x8b.js.map → PrintLabelsPanel-BkUN00Qd.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessDetailPage-0xS9EdHe.js → ProcessDetailPage-BKu9_wWv.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-0xS9EdHe.js.map → ProcessDetailPage-BKu9_wWv.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-93SMj1Fd.js → ProcessesListPage-BfJYTU_v.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-93SMj1Fd.js.map → ProcessesListPage-BfJYTU_v.js.map} +1 -1
- package/dashboard/dist/assets/ResolverForm-DZmY6wJV.js +8 -0
- package/dashboard/dist/assets/ResolverForm-DZmY6wJV.js.map +1 -0
- package/dashboard/dist/assets/{RoleDetailPage-DlUOJWSB.js → RoleDetailPage-vGeth3ve.js} +3 -3
- package/dashboard/dist/assets/{RoleDetailPage-DlUOJWSB.js.map → RoleDetailPage-vGeth3ve.js.map} +1 -1
- package/dashboard/dist/assets/{RolePill-BjD1Qw5y.js → RolePill-KhT-Yehm.js} +2 -2
- package/dashboard/dist/assets/{RolePill-BjD1Qw5y.js.map → RolePill-KhT-Yehm.js.map} +1 -1
- package/dashboard/dist/assets/{RolesPage-DqhHSvaw.js → RolesPage-CwxHOkqF.js} +2 -2
- package/dashboard/dist/assets/{RolesPage-DqhHSvaw.js.map → RolesPage-CwxHOkqF.js.map} +1 -1
- package/dashboard/dist/assets/{RosterWidget-BrIq61HR.js → RosterWidget-DRVj9xyk.js} +2 -2
- package/dashboard/dist/assets/{RosterWidget-BrIq61HR.js.map → RosterWidget-DRVj9xyk.js.map} +1 -1
- package/dashboard/dist/assets/{RunAsSelector-D6zQrCNr.js → RunAsSelector-DvPX3XmA.js} +2 -2
- package/dashboard/dist/assets/{RunAsSelector-D6zQrCNr.js.map → RunAsSelector-DvPX3XmA.js.map} +1 -1
- package/dashboard/dist/assets/{ScanCodesPage-B2S9DR2f.js → ScanCodesPage-Cptbe7h8.js} +2 -2
- package/dashboard/dist/assets/{ScanCodesPage-B2S9DR2f.js.map → ScanCodesPage-Cptbe7h8.js.map} +1 -1
- package/dashboard/dist/assets/{ScanSchemeDetailPage-gpxKN-pL.js → ScanSchemeDetailPage-DquNJ7Or.js} +4 -4
- package/dashboard/dist/assets/{ScanSchemeDetailPage-gpxKN-pL.js.map → ScanSchemeDetailPage-DquNJ7Or.js.map} +1 -1
- package/dashboard/dist/assets/{ScanStationPage-B-UTgXsG.js → ScanStationPage-DaRfGGa8.js} +2 -2
- package/dashboard/dist/assets/{ScanStationPage-B-UTgXsG.js.map → ScanStationPage-DaRfGGa8.js.map} +1 -1
- package/dashboard/dist/assets/{SchemeMatchFields-BK24aa7K.js → SchemeMatchFields-w-pffi98.js} +2 -2
- package/dashboard/dist/assets/{SchemeMatchFields-BK24aa7K.js.map → SchemeMatchFields-w-pffi98.js.map} +1 -1
- package/dashboard/dist/assets/{ScopeBadge-ofLQ6HW-.js → ScopeBadge-HeuiMJhW.js} +2 -2
- package/dashboard/dist/assets/{ScopeBadge-ofLQ6HW-.js.map → ScopeBadge-HeuiMJhW.js.map} +1 -1
- package/dashboard/dist/assets/{StickyPagination-CgVv7vc_.js → StickyPagination-D6fDHCcJ.js} +2 -2
- package/dashboard/dist/assets/{StickyPagination-CgVv7vc_.js.map → StickyPagination-D6fDHCcJ.js.map} +1 -1
- package/dashboard/dist/assets/{StreamMessageDetail-B9sxDVw4.js → StreamMessageDetail-BmYVQrzl.js} +2 -2
- package/dashboard/dist/assets/{StreamMessageDetail-B9sxDVw4.js.map → StreamMessageDetail-BmYVQrzl.js.map} +1 -1
- package/dashboard/dist/assets/{SwimlaneTimeline-DQc0CYSL.js → SwimlaneTimeline-KCqA-PeL.js} +2 -2
- package/dashboard/dist/assets/{SwimlaneTimeline-DQc0CYSL.js.map → SwimlaneTimeline-KCqA-PeL.js.map} +1 -1
- package/dashboard/dist/assets/{TagInput-47qVYzke.js → TagInput-CZBAu1Hy.js} +2 -2
- package/dashboard/dist/assets/{TagInput-47qVYzke.js.map → TagInput-CZBAu1Hy.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-D6VOsA1f.js → TaskDetailPage-WtVv2z7T.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-D6VOsA1f.js.map → TaskDetailPage-WtVv2z7T.js.map} +1 -1
- package/dashboard/dist/assets/{TaskQueuePill-C5KmdXAl.js → TaskQueuePill-DWGn3CWx.js} +2 -2
- package/dashboard/dist/assets/{TaskQueuePill-C5KmdXAl.js.map → TaskQueuePill-DWGn3CWx.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-DG8hvO8G.js → TasksListPage-DMYQNDIw.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-DG8hvO8G.js.map → TasksListPage-DMYQNDIw.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-CL02EhFi.js → TimeAgo-BkY4lahi.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-CL02EhFi.js.map → TimeAgo-BkY4lahi.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-BE7oKVJg.js → TimestampCell-BBPb9TI2.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-BE7oKVJg.js.map → TimestampCell-BBPb9TI2.js.map} +1 -1
- package/dashboard/dist/assets/{ToolPill-Cp9Drk1s.js → ToolPill-B2aRk0o1.js} +2 -2
- package/dashboard/dist/assets/{ToolPill-Cp9Drk1s.js.map → ToolPill-B2aRk0o1.js.map} +1 -1
- package/dashboard/dist/assets/{ToolTestPanel-CRecLh6S.js → ToolTestPanel-CNMbmymK.js} +2 -2
- package/dashboard/dist/assets/{ToolTestPanel-CRecLh6S.js.map → ToolTestPanel-CNMbmymK.js.map} +1 -1
- package/dashboard/dist/assets/{TopicDetailPage-QzkinTfN.js → TopicDetailPage-CodBRylU.js} +2 -2
- package/dashboard/dist/assets/{TopicDetailPage-QzkinTfN.js.map → TopicDetailPage-CodBRylU.js.map} +1 -1
- package/dashboard/dist/assets/TopicsPage-BtD8jTU7.js +2 -0
- package/dashboard/dist/assets/{TopicsPage-D8dW6J65.js.map → TopicsPage-BtD8jTU7.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-Dw3R_zrl.js → UserName-D6y9AnuY.js} +2 -2
- package/dashboard/dist/assets/{UserName-Dw3R_zrl.js.map → UserName-D6y9AnuY.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-BTocv8or.js → WorkflowExecutionPage-BeffqV13.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-BTocv8or.js.map → WorkflowExecutionPage-BeffqV13.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowPill-BiLYq__w.js → WorkflowPill-BNm3R4pP.js} +2 -2
- package/dashboard/dist/assets/{WorkflowPill-BiLYq__w.js.map → WorkflowPill-BNm3R4pP.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsDashboard-CIPEt3et.js → WorkflowsDashboard-m4Co5diK.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsDashboard-CIPEt3et.js.map → WorkflowsDashboard-m4Co5diK.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-Bj4MJIE-.js → WorkflowsOverview-DNoI9qY8.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-Bj4MJIE-.js.map → WorkflowsOverview-DNoI9qY8.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-DMEk5k9-.js → YamlWorkflowDetailPage-8Vpc4Oxy.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-DMEk5k9-.js.map → YamlWorkflowDetailPage-8Vpc4Oxy.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowsPage-F2yyyoiB.js → YamlWorkflowsPage-D1JNwDSg.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowsPage-F2yyyoiB.js.map → YamlWorkflowsPage-D1JNwDSg.js.map} +1 -1
- package/dashboard/dist/assets/{agents-mSgxEPpI.js → agents-LTHUsfv3.js} +2 -2
- package/dashboard/dist/assets/{agents-mSgxEPpI.js.map → agents-LTHUsfv3.js.map} +1 -1
- package/dashboard/dist/assets/{bots-p4Hp0CV6.js → bots-CQxehfBo.js} +2 -2
- package/dashboard/dist/assets/{bots-p4Hp0CV6.js.map → bots-CQxehfBo.js.map} +1 -1
- package/dashboard/dist/assets/{capabilities-D_-I_SXR.js → capabilities-DECTnJrK.js} +2 -2
- package/dashboard/dist/assets/{capabilities-D_-I_SXR.js.map → capabilities-DECTnJrK.js.map} +1 -1
- package/dashboard/dist/assets/{controlplane-DjdoQnRU.js → controlplane-Dx20db5g.js} +2 -2
- package/dashboard/dist/assets/{controlplane-DjdoQnRU.js.map → controlplane-Dx20db5g.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-columns-R_IEVQjQ.js → escalation-columns-CVFGUB79.js} +2 -2
- package/dashboard/dist/assets/{escalation-columns-R_IEVQjQ.js.map → escalation-columns-CVFGUB79.js.map} +1 -1
- package/dashboard/dist/assets/escalation-items-Bj7bkwWy.js +2 -0
- package/dashboard/dist/assets/escalation-items-Bj7bkwWy.js.map +1 -0
- package/dashboard/dist/assets/index-BD4O-ISx.js +13 -0
- package/dashboard/dist/assets/{index-Dk2KKo0z.js.map → index-BD4O-ISx.js.map} +1 -1
- package/dashboard/dist/assets/{index-D9RAN9sA.js → index-BL8XOMHT.js} +2 -2
- package/dashboard/dist/assets/{index-D9RAN9sA.js.map → index-BL8XOMHT.js.map} +1 -1
- package/dashboard/dist/assets/index-C2vRDf96.js +2 -0
- package/dashboard/dist/assets/{index-C5osluV3.js.map → index-C2vRDf96.js.map} +1 -1
- package/dashboard/dist/assets/{index-DUYAGxwc.js → index-CNgyKRQ8.js} +2 -2
- package/dashboard/dist/assets/{index-DUYAGxwc.js.map → index-CNgyKRQ8.js.map} +1 -1
- package/dashboard/dist/assets/{index-DlJkZ12b.js → index-CdXPbBgs.js} +2 -2
- package/dashboard/dist/assets/{index-DlJkZ12b.js.map → index-CdXPbBgs.js.map} +1 -1
- package/dashboard/dist/assets/{index-BuCEhhnl.js → index-CnBUFCV7.js} +2 -2
- package/dashboard/dist/assets/{index-BuCEhhnl.js.map → index-CnBUFCV7.js.map} +1 -1
- package/dashboard/dist/assets/index-CoLciFzq.css +1 -0
- package/dashboard/dist/assets/{index-D-FYj9jT.js → index-D_TSx-k_.js} +2 -2
- package/dashboard/dist/assets/{index-D-FYj9jT.js.map → index-D_TSx-k_.js.map} +1 -1
- package/dashboard/dist/assets/{index-C_dAJUzh.js → index-Do9Y6Fgt.js} +16 -16
- package/dashboard/dist/assets/index-Do9Y6Fgt.js.map +1 -0
- package/dashboard/dist/assets/{index-D6K_IgCz.js → index-Dq1zjilj.js} +2 -2
- package/dashboard/dist/assets/{index-D6K_IgCz.js.map → index-Dq1zjilj.js.map} +1 -1
- package/dashboard/dist/assets/{index-BEMdD58x.js → index-Dz4LSzA2.js} +2 -2
- package/dashboard/dist/assets/{index-BEMdD58x.js.map → index-Dz4LSzA2.js.map} +1 -1
- package/dashboard/dist/assets/{index-D7L_VoBD.js → index-g1MmARVR.js} +2 -2
- package/dashboard/dist/assets/{index-D7L_VoBD.js.map → index-g1MmARVR.js.map} +1 -1
- package/dashboard/dist/assets/{index-BxbQmeqh.js → index-qEd4FVmN.js} +2 -2
- package/dashboard/dist/assets/{index-BxbQmeqh.js.map → index-qEd4FVmN.js.map} +1 -1
- package/dashboard/dist/assets/index-v4rQ8ctJ.js +3 -0
- package/dashboard/dist/assets/index-v4rQ8ctJ.js.map +1 -0
- package/dashboard/dist/assets/{knowledge-DSsPTqkK.js → knowledge-CT1I1t1S.js} +2 -2
- package/dashboard/dist/assets/{knowledge-DSsPTqkK.js.map → knowledge-CT1I1t1S.js.map} +1 -1
- package/dashboard/dist/assets/{machines-DSgGtqqr.js → machines-Dsuw-l1y.js} +2 -2
- package/dashboard/dist/assets/{machines-DSgGtqqr.js.map → machines-Dsuw-l1y.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-Cg-_uLw8.js → mcp-C3o5wzO8.js} +2 -2
- package/dashboard/dist/assets/{mcp-Cg-_uLw8.js.map → mcp-C3o5wzO8.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-DQombEK_.js → mcp-query-IvkIG7gH.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-DQombEK_.js.map → mcp-query-IvkIG7gH.js.map} +1 -1
- package/dashboard/dist/assets/pdf-CcZYcL52.js +13 -0
- package/dashboard/dist/assets/pdf-CcZYcL52.js.map +1 -0
- package/dashboard/dist/assets/pdf.worker.min-DgRcL-GR.js +2 -0
- package/dashboard/dist/assets/pdf.worker.min-DgRcL-GR.js.map +1 -0
- package/dashboard/dist/assets/pdf.worker.min-yatZIOMy.mjs +21 -0
- package/dashboard/dist/assets/{personas-DYrcoVBu.js → personas-zWlWjj6j.js} +2 -2
- package/dashboard/dist/assets/{personas-DYrcoVBu.js.map → personas-zWlWjj6j.js.map} +1 -1
- package/dashboard/dist/assets/{pipelines-wdb4xsey.js → pipelines-BKNvBMdf.js} +2 -2
- package/dashboard/dist/assets/{pipelines-wdb4xsey.js.map → pipelines-BKNvBMdf.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-Bil7gvm9.js → tasks-BQSO3Sjv.js} +2 -2
- package/dashboard/dist/assets/{tasks-Bil7gvm9.js.map → tasks-BQSO3Sjv.js.map} +1 -1
- package/dashboard/dist/assets/{topics-wBqaVhRR.js → topics-Dr_1TtUM.js} +2 -2
- package/dashboard/dist/assets/{topics-wBqaVhRR.js.map → topics-Dr_1TtUM.js.map} +1 -1
- package/dashboard/dist/assets/{useContainerWidth-DSLp1gEm.js → useContainerWidth-D38m8eub.js} +2 -2
- package/dashboard/dist/assets/{useContainerWidth-DSLp1gEm.js.map → useContainerWidth-D38m8eub.js.map} +1 -1
- package/dashboard/dist/assets/{useDebouncedValue-CwrY8TpV.js → useDebouncedValue-C5ESASfo.js} +2 -2
- package/dashboard/dist/assets/{useDebouncedValue-CwrY8TpV.js.map → useDebouncedValue-C5ESASfo.js.map} +1 -1
- package/dashboard/dist/assets/{useNamespace-Sod_xApz.js → useNamespace-DLLOJRYY.js} +2 -2
- package/dashboard/dist/assets/{useNamespace-Sod_xApz.js.map → useNamespace-DLLOJRYY.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-CKLInV3C.js → useYamlActivityEvents-D0XNXli1.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-CKLInV3C.js.map → useYamlActivityEvents-D0XNXli1.js.map} +1 -1
- package/dashboard/dist/assets/{validate-CYhW1xMJ.js → validate-Be4GWnJ1.js} +2 -2
- package/dashboard/dist/assets/{validate-CYhW1xMJ.js.map → validate-Be4GWnJ1.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-ed7mYQw4.js → vendor-icons-D48ijXZU.js} +209 -189
- package/dashboard/dist/assets/vendor-icons-D48ijXZU.js.map +1 -0
- package/dashboard/dist/assets/{yaml-workflows-C20qHo3L.js → yaml-workflows-BQpO-G-I.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-C20qHo3L.js.map → yaml-workflows-BQpO-G-I.js.map} +1 -1
- package/dashboard/dist/index.html +3 -3
- package/docs/api/http/escalations.md +54 -7
- package/docs/api/mcp/admin.md +7 -5
- package/docs/api/mcp/human-queue.md +17 -1
- package/docs/api/sdk/escalations.md +30 -4
- package/docs/api/sdk/files.md +19 -0
- package/docs/cli.md +4 -1
- package/docs/escalation-analytics.md +17 -0
- package/docs/hitl/files.md +104 -0
- package/docs/hitl/x-lt-confidence.md +139 -0
- package/docs/hitl/x-lt-layout.md +19 -0
- package/docs/hitl/x-lt-widget.md +20 -0
- package/docs/hitl-guide.md +6 -0
- package/docs/mcp.md +2 -1
- package/package.json +1 -1
- package/dashboard/dist/assets/ResolverForm-DfogHDzl.js +0 -8
- package/dashboard/dist/assets/ResolverForm-DfogHDzl.js.map +0 -1
- package/dashboard/dist/assets/TopicsPage-D8dW6J65.js +0 -2
- package/dashboard/dist/assets/escalation-items-BGZlJMpk.js +0 -2
- package/dashboard/dist/assets/escalation-items-BGZlJMpk.js.map +0 -1
- package/dashboard/dist/assets/index-BUmz0NMg.css +0 -1
- package/dashboard/dist/assets/index-C5osluV3.js +0 -2
- package/dashboard/dist/assets/index-C_dAJUzh.js.map +0 -1
- package/dashboard/dist/assets/index-Dk2KKo0z.js +0 -13
- package/dashboard/dist/assets/index-FiNThtNU.js +0 -3
- package/dashboard/dist/assets/index-FiNThtNU.js.map +0 -1
- package/dashboard/dist/assets/vendor-icons-ed7mYQw4.js.map +0 -1
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Review facets: a few low-cardinality metadata keys summarizing how a
|
|
3
|
+
* reviewer treated a model's proposals, stamped onto the row in the same
|
|
4
|
+
* guarded UPDATE that resolves it. Opt in on the schema root with
|
|
5
|
+
* `"x-lt-confidence": { "facets": true }`. Counts cover the fields the form
|
|
6
|
+
* shows for the submitted answer, the same set the legend counts. Values are
|
|
7
|
+
* strings so `metadata @>` filters and analytics projections match exactly.
|
|
8
|
+
*/
|
|
9
|
+
import { type ShowIfContext } from './x-lt-show-if';
|
|
10
|
+
export declare const REVIEW_FACET_KEYS: {
|
|
11
|
+
readonly OUTCOME: "review_outcome";
|
|
12
|
+
readonly CHANGED: "review_changed";
|
|
13
|
+
readonly WORST: "review_worst";
|
|
14
|
+
};
|
|
15
|
+
export declare const REVIEW_OUTCOMES: {
|
|
16
|
+
readonly ACCEPTED: "accepted";
|
|
17
|
+
readonly CORRECTED: "corrected";
|
|
18
|
+
};
|
|
19
|
+
export type ReviewFacets = Partial<Record<(typeof REVIEW_FACET_KEYS)[keyof typeof REVIEW_FACET_KEYS], string>>;
|
|
20
|
+
/** The fields the form shows for these values: x-lt-hidden, x-lt-showIf and x-lt-hide-if-empty applied. */
|
|
21
|
+
export declare function visibleFieldKeys(formSchema: Record<string, unknown>, formValues: Record<string, unknown>, ctx: ShowIfContext): string[];
|
|
22
|
+
/**
|
|
23
|
+
* The review facets for a submitted answer, or null when the schema does not
|
|
24
|
+
* opt in or no shown field carries a proposal or score. `review_worst` is the
|
|
25
|
+
* lowest tranche any shown field fell into, absent when every score cleared.
|
|
26
|
+
*/
|
|
27
|
+
export declare function buildReviewFacets(formSchema: Record<string, unknown> | null | undefined, ctx: ShowIfContext | null | undefined, formValues: Record<string, unknown>): ReviewFacets | null;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.REVIEW_OUTCOMES = exports.REVIEW_FACET_KEYS = void 0;
|
|
4
|
+
exports.visibleFieldKeys = visibleFieldKeys;
|
|
5
|
+
exports.buildReviewFacets = buildReviewFacets;
|
|
6
|
+
/**
|
|
7
|
+
* Review facets: a few low-cardinality metadata keys summarizing how a
|
|
8
|
+
* reviewer treated a model's proposals, stamped onto the row in the same
|
|
9
|
+
* guarded UPDATE that resolves it. Opt in on the schema root with
|
|
10
|
+
* `"x-lt-confidence": { "facets": true }`. Counts cover the fields the form
|
|
11
|
+
* shows for the submitted answer, the same set the legend counts. Values are
|
|
12
|
+
* strings so `metadata @>` filters and analytics projections match exactly.
|
|
13
|
+
*/
|
|
14
|
+
const x_lt_show_if_1 = require("./x-lt-show-if");
|
|
15
|
+
const x_lt_confidence_1 = require("./x-lt-confidence");
|
|
16
|
+
exports.REVIEW_FACET_KEYS = {
|
|
17
|
+
OUTCOME: 'review_outcome',
|
|
18
|
+
CHANGED: 'review_changed',
|
|
19
|
+
WORST: 'review_worst',
|
|
20
|
+
};
|
|
21
|
+
exports.REVIEW_OUTCOMES = {
|
|
22
|
+
ACCEPTED: 'accepted',
|
|
23
|
+
CORRECTED: 'corrected',
|
|
24
|
+
};
|
|
25
|
+
/** The fields the form shows for these values: x-lt-hidden, x-lt-showIf and x-lt-hide-if-empty applied. */
|
|
26
|
+
function visibleFieldKeys(formSchema, formValues, ctx) {
|
|
27
|
+
const props = (formSchema.properties ?? {});
|
|
28
|
+
return Object.keys(props).filter((key) => {
|
|
29
|
+
const def = props[key];
|
|
30
|
+
if ((0, x_lt_show_if_1.isHiddenField)(def))
|
|
31
|
+
return false;
|
|
32
|
+
if (!(0, x_lt_show_if_1.evaluateShowIf)(def?.['x-lt-showIf'], ctx))
|
|
33
|
+
return false;
|
|
34
|
+
return !(0, x_lt_show_if_1.isHiddenIfEmpty)(def, formValues[key]);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The review facets for a submitted answer, or null when the schema does not
|
|
39
|
+
* opt in or no shown field carries a proposal or score. `review_worst` is the
|
|
40
|
+
* lowest tranche any shown field fell into, absent when every score cleared.
|
|
41
|
+
*/
|
|
42
|
+
function buildReviewFacets(formSchema, ctx, formValues) {
|
|
43
|
+
if (!formSchema)
|
|
44
|
+
return null;
|
|
45
|
+
const spec = (0, x_lt_confidence_1.readConfidenceSpec)(formSchema);
|
|
46
|
+
if (!spec?.facets)
|
|
47
|
+
return null;
|
|
48
|
+
const liveCtx = { ...(ctx ?? {}), resolver: formValues, input: formValues };
|
|
49
|
+
const review = (0, x_lt_confidence_1.buildFormReview)(spec, formSchema, liveCtx, formValues);
|
|
50
|
+
const shown = visibleFieldKeys(formSchema, formValues, liveCtx).filter((key) => review[key]);
|
|
51
|
+
if (shown.length === 0)
|
|
52
|
+
return null;
|
|
53
|
+
const summary = (0, x_lt_confidence_1.summarizeReview)(spec, review, shown);
|
|
54
|
+
const worst = summary.tranches.find((t) => t.fields.length > 0)?.tranche;
|
|
55
|
+
return {
|
|
56
|
+
[exports.REVIEW_FACET_KEYS.OUTCOME]: summary.changed.length > 0 ? exports.REVIEW_OUTCOMES.CORRECTED : exports.REVIEW_OUTCOMES.ACCEPTED,
|
|
57
|
+
[exports.REVIEW_FACET_KEYS.CHANGED]: String(summary.changed.length),
|
|
58
|
+
...(worst ? { [exports.REVIEW_FACET_KEYS.WORST]: worst.label } : {}),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export declare const CONFIDENCE_TONES: {
|
|
2
|
+
readonly ERROR: "error";
|
|
3
|
+
readonly WARNING: "warning";
|
|
4
|
+
readonly INFO: "info";
|
|
5
|
+
};
|
|
6
|
+
export type ConfidenceTone = (typeof CONFIDENCE_TONES)[keyof typeof CONFIDENCE_TONES];
|
|
7
|
+
export interface ConfidenceTranche {
|
|
8
|
+
below: number;
|
|
9
|
+
label: string;
|
|
10
|
+
tone: ConfidenceTone;
|
|
11
|
+
}
|
|
12
|
+
export interface ConfidenceSpec {
|
|
13
|
+
scores: string;
|
|
14
|
+
proposed: string;
|
|
15
|
+
tranches: ConfidenceTranche[];
|
|
16
|
+
/** Stamp the review summary onto the row's metadata at resolve. */
|
|
17
|
+
facets: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare const CONFIDENCE_SCORES_PATH = "envelope.confidence";
|
|
20
|
+
export declare const CONFIDENCE_PROPOSED_PATH = "envelope.formDefaults";
|
|
21
|
+
export declare const DEFAULT_CONFIDENCE_TRANCHES: readonly ConfidenceTranche[];
|
|
22
|
+
/** The schema's confidence declaration, or null when the form declares none. */
|
|
23
|
+
export declare function readConfidenceSpec(schema: Record<string, unknown> | null | undefined): ConfidenceSpec | null;
|
|
24
|
+
/** The tranche a score falls into, or null when the score clears every threshold. */
|
|
25
|
+
export declare function trancheFor(tranches: readonly ConfidenceTranche[], score: number): ConfidenceTranche | null;
|
|
26
|
+
/** Whether an answer differs from what was proposed for it. */
|
|
27
|
+
export declare function differsFromProposal(proposed: unknown, current: unknown): boolean;
|
|
28
|
+
export interface FieldReview {
|
|
29
|
+
/** The field's score in [0, 1], when the workflow scored it. */
|
|
30
|
+
score?: number;
|
|
31
|
+
/** The tranche the score falls into; absent when confident or unscored. */
|
|
32
|
+
tranche?: ConfidenceTranche;
|
|
33
|
+
/** Whether the workflow proposed a value for the field. */
|
|
34
|
+
hasProposal: boolean;
|
|
35
|
+
/** The proposed value, in form shape. */
|
|
36
|
+
proposed?: unknown;
|
|
37
|
+
/** Whether the current answer differs from the proposal. */
|
|
38
|
+
changed: boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The review state of every field the spec covers: its score and tranche,
|
|
42
|
+
* its proposal, and whether `values` (the live form, or a submitted payload
|
|
43
|
+
* mapped back to form shape) differs from it. Proposals and scores are read
|
|
44
|
+
* in payload shape and mapped through x-lt-bind, like formDefaults.
|
|
45
|
+
*/
|
|
46
|
+
export declare function buildFormReview(spec: ConfidenceSpec, formSchema: Record<string, unknown>, ctx: Record<string, unknown> | undefined, values: Record<string, unknown>): Record<string, FieldReview>;
|
|
47
|
+
export interface ReviewSummary {
|
|
48
|
+
/** Field keys per tranche label, in tranche order. */
|
|
49
|
+
tranches: Array<{
|
|
50
|
+
tranche: ConfidenceTranche;
|
|
51
|
+
fields: string[];
|
|
52
|
+
}>;
|
|
53
|
+
/** Field keys whose answer differs from the proposal. */
|
|
54
|
+
changed: string[];
|
|
55
|
+
}
|
|
56
|
+
/** Counts for the form's legend, over the fields actually shown, in their order. */
|
|
57
|
+
export declare function summarizeReview(spec: ConfidenceSpec, review: Record<string, FieldReview>, shownKeys: readonly string[]): ReviewSummary;
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_CONFIDENCE_TRANCHES = exports.CONFIDENCE_PROPOSED_PATH = exports.CONFIDENCE_SCORES_PATH = exports.CONFIDENCE_TONES = void 0;
|
|
4
|
+
exports.readConfidenceSpec = readConfidenceSpec;
|
|
5
|
+
exports.trancheFor = trancheFor;
|
|
6
|
+
exports.differsFromProposal = differsFromProposal;
|
|
7
|
+
exports.buildFormReview = buildFormReview;
|
|
8
|
+
exports.summarizeReview = summarizeReview;
|
|
9
|
+
/**
|
|
10
|
+
* x-lt-confidence: review state for a form a model filled in. The workflow
|
|
11
|
+
* proposes values (`envelope.formDefaults`) and scores them
|
|
12
|
+
* (`envelope.confidence`, the same shape, numbers in [0, 1]); the schema root
|
|
13
|
+
* declares the tranches a score falls into:
|
|
14
|
+
*
|
|
15
|
+
* "x-lt-confidence": {
|
|
16
|
+
* "tranches": [
|
|
17
|
+
* { "below": 0.6, "label": "Low", "tone": "error" },
|
|
18
|
+
* { "below": 0.9, "label": "Check", "tone": "warning" }
|
|
19
|
+
* ]
|
|
20
|
+
* }
|
|
21
|
+
*
|
|
22
|
+
* A score falls into the first tranche whose `below` it is under; a score at
|
|
23
|
+
* or above every threshold is confident and carries no tranche. Every field
|
|
24
|
+
* with a proposal also reports whether the answer differs from it, so the
|
|
25
|
+
* form shows what a value was and what it became, before and after submit.
|
|
26
|
+
* `scores` and `proposed` name other context paths when the workflow keeps
|
|
27
|
+
* them elsewhere. `"facets": true` stamps a review summary onto the row's
|
|
28
|
+
* metadata when it resolves (see x-lt-confidence-facets). A field opts out
|
|
29
|
+
* with `"x-lt-confidence": false`. Pure: the dashboard renders with it, and
|
|
30
|
+
* workflows and agents can diff with it.
|
|
31
|
+
*/
|
|
32
|
+
const ctx_path_1 = require("./ctx-path");
|
|
33
|
+
const display_only_widgets_1 = require("./display-only-widgets");
|
|
34
|
+
const x_lt_bind_1 = require("./x-lt-bind");
|
|
35
|
+
exports.CONFIDENCE_TONES = {
|
|
36
|
+
ERROR: 'error',
|
|
37
|
+
WARNING: 'warning',
|
|
38
|
+
INFO: 'info',
|
|
39
|
+
};
|
|
40
|
+
exports.CONFIDENCE_SCORES_PATH = 'envelope.confidence';
|
|
41
|
+
exports.CONFIDENCE_PROPOSED_PATH = 'envelope.formDefaults';
|
|
42
|
+
exports.DEFAULT_CONFIDENCE_TRANCHES = [
|
|
43
|
+
{ below: 0.6, label: 'Low', tone: exports.CONFIDENCE_TONES.ERROR },
|
|
44
|
+
{ below: 0.85, label: 'Check', tone: exports.CONFIDENCE_TONES.WARNING },
|
|
45
|
+
];
|
|
46
|
+
const TONES = new Set(Object.values(exports.CONFIDENCE_TONES));
|
|
47
|
+
function readTranches(raw) {
|
|
48
|
+
if (!Array.isArray(raw))
|
|
49
|
+
return [...exports.DEFAULT_CONFIDENCE_TRANCHES];
|
|
50
|
+
const byThreshold = new Map();
|
|
51
|
+
for (const entry of raw) {
|
|
52
|
+
const t = (entry ?? {});
|
|
53
|
+
if (typeof t.below !== 'number' || !Number.isFinite(t.below) || t.below <= 0 || t.below > 1)
|
|
54
|
+
continue;
|
|
55
|
+
if (typeof t.label !== 'string' || t.label.trim().length === 0)
|
|
56
|
+
continue;
|
|
57
|
+
const tone = typeof t.tone === 'string' && TONES.has(t.tone) ? t.tone : exports.CONFIDENCE_TONES.WARNING;
|
|
58
|
+
if (!byThreshold.has(t.below))
|
|
59
|
+
byThreshold.set(t.below, { below: t.below, label: t.label.trim(), tone });
|
|
60
|
+
}
|
|
61
|
+
return [...byThreshold.values()].sort((a, b) => a.below - b.below);
|
|
62
|
+
}
|
|
63
|
+
/** The schema's confidence declaration, or null when the form declares none. */
|
|
64
|
+
function readConfidenceSpec(schema) {
|
|
65
|
+
const raw = schema?.['x-lt-confidence'];
|
|
66
|
+
if (raw === true) {
|
|
67
|
+
return {
|
|
68
|
+
scores: exports.CONFIDENCE_SCORES_PATH,
|
|
69
|
+
proposed: exports.CONFIDENCE_PROPOSED_PATH,
|
|
70
|
+
tranches: [...exports.DEFAULT_CONFIDENCE_TRANCHES],
|
|
71
|
+
facets: false,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw))
|
|
75
|
+
return null;
|
|
76
|
+
const spec = raw;
|
|
77
|
+
return {
|
|
78
|
+
scores: typeof spec.scores === 'string' && spec.scores ? spec.scores : exports.CONFIDENCE_SCORES_PATH,
|
|
79
|
+
proposed: typeof spec.proposed === 'string' && spec.proposed ? spec.proposed : exports.CONFIDENCE_PROPOSED_PATH,
|
|
80
|
+
tranches: readTranches(spec.tranches),
|
|
81
|
+
facets: spec.facets === true,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/** The tranche a score falls into, or null when the score clears every threshold. */
|
|
85
|
+
function trancheFor(tranches, score) {
|
|
86
|
+
for (const tranche of tranches) {
|
|
87
|
+
if (score < tranche.below)
|
|
88
|
+
return tranche;
|
|
89
|
+
}
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
/** Text compared by its words: surrounding and repeated whitespace is not a change. */
|
|
93
|
+
function normalizeText(value) {
|
|
94
|
+
return value.trim().replace(/\s+/g, ' ');
|
|
95
|
+
}
|
|
96
|
+
function stableJson(value) {
|
|
97
|
+
if (typeof value === 'string')
|
|
98
|
+
return JSON.stringify(normalizeText(value));
|
|
99
|
+
if (Array.isArray(value))
|
|
100
|
+
return `[${value.map(stableJson).join(',')}]`;
|
|
101
|
+
if (value && typeof value === 'object') {
|
|
102
|
+
const entries = Object.keys(value).sort()
|
|
103
|
+
.map((k) => `${JSON.stringify(k)}:${stableJson(value[k])}`);
|
|
104
|
+
return `{${entries.join(',')}}`;
|
|
105
|
+
}
|
|
106
|
+
return JSON.stringify(value);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* A value's comparable form: empty answers compare equal, "42" equals 42,
|
|
110
|
+
* whitespace-only edits are not changes, and key order is ignored.
|
|
111
|
+
*/
|
|
112
|
+
function comparable(value) {
|
|
113
|
+
if (value === null || value === undefined)
|
|
114
|
+
return '';
|
|
115
|
+
if (typeof value === 'object')
|
|
116
|
+
return stableJson(value);
|
|
117
|
+
return normalizeText(String(value));
|
|
118
|
+
}
|
|
119
|
+
/** Whether an answer differs from what was proposed for it. */
|
|
120
|
+
function differsFromProposal(proposed, current) {
|
|
121
|
+
return comparable(proposed) !== comparable(current);
|
|
122
|
+
}
|
|
123
|
+
function asFormMap(source, formSchema) {
|
|
124
|
+
if (!source || typeof source !== 'object' || Array.isArray(source))
|
|
125
|
+
return {};
|
|
126
|
+
try {
|
|
127
|
+
return (0, x_lt_bind_1.mapPayloadToForm)(source, formSchema);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return {};
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* The review state of every field the spec covers: its score and tranche,
|
|
135
|
+
* its proposal, and whether `values` (the live form, or a submitted payload
|
|
136
|
+
* mapped back to form shape) differs from it. Proposals and scores are read
|
|
137
|
+
* in payload shape and mapped through x-lt-bind, like formDefaults.
|
|
138
|
+
*/
|
|
139
|
+
function buildFormReview(spec, formSchema, ctx, values) {
|
|
140
|
+
const props = (formSchema.properties ?? {});
|
|
141
|
+
const scores = asFormMap((0, ctx_path_1.resolveCtxPath)(spec.scores, ctx), formSchema);
|
|
142
|
+
const proposals = asFormMap((0, ctx_path_1.resolveCtxPath)(spec.proposed, ctx), formSchema);
|
|
143
|
+
const review = {};
|
|
144
|
+
for (const [key, def] of Object.entries(props)) {
|
|
145
|
+
if (def?.['x-lt-confidence'] === false || (0, display_only_widgets_1.isDisplayOnlyField)(def))
|
|
146
|
+
continue;
|
|
147
|
+
const raw = scores[key];
|
|
148
|
+
const score = typeof raw === 'number' && Number.isFinite(raw) ? Math.min(Math.max(raw, 0), 1) : undefined;
|
|
149
|
+
const hasProposal = key in proposals;
|
|
150
|
+
if (score === undefined && !hasProposal)
|
|
151
|
+
continue;
|
|
152
|
+
const tranche = score === undefined ? null : trancheFor(spec.tranches, score);
|
|
153
|
+
review[key] = {
|
|
154
|
+
...(score !== undefined ? { score } : {}),
|
|
155
|
+
...(tranche ? { tranche } : {}),
|
|
156
|
+
hasProposal,
|
|
157
|
+
...(hasProposal ? { proposed: proposals[key] } : {}),
|
|
158
|
+
changed: hasProposal && differsFromProposal(proposals[key], values[key]),
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
return review;
|
|
162
|
+
}
|
|
163
|
+
/** Counts for the form's legend, over the fields actually shown, in their order. */
|
|
164
|
+
function summarizeReview(spec, review, shownKeys) {
|
|
165
|
+
const tranches = spec.tranches.map((tranche) => ({ tranche, fields: [] }));
|
|
166
|
+
const changed = [];
|
|
167
|
+
for (const key of shownKeys) {
|
|
168
|
+
const field = review[key];
|
|
169
|
+
if (!field)
|
|
170
|
+
continue;
|
|
171
|
+
if (field.tranche)
|
|
172
|
+
tranches.find((t) => t.tranche.below === field.tranche.below)?.fields.push(key);
|
|
173
|
+
if (field.changed)
|
|
174
|
+
changed.push(key);
|
|
175
|
+
}
|
|
176
|
+
return { tranches, changed };
|
|
177
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** The token domains a help template may reference. `input` is the invoke-form name for the live values `resolver` also carries. */
|
|
2
|
-
export declare const HELP_DOMAINS: readonly ["escalation", "metadata", "envelope", "payload", "resolver", "lookup", "input", "roster"];
|
|
2
|
+
export declare const HELP_DOMAINS: readonly ["escalation", "metadata", "envelope", "payload", "resolver", "lookup", "input", "roster", "file"];
|
|
3
3
|
export type HelpDomain = (typeof HELP_DOMAINS)[number];
|
|
4
4
|
export type HelpTokenContext = Partial<Record<HelpDomain, Record<string, unknown> | null>>;
|
|
5
5
|
/** Replace every `{{domain.path}}` token with its value from the context. */
|
|
@@ -25,7 +25,7 @@ exports.defaultHelpMarkdown = defaultHelpMarkdown;
|
|
|
25
25
|
*/
|
|
26
26
|
const x_lt_bind_1 = require("./x-lt-bind");
|
|
27
27
|
/** The token domains a help template may reference. `input` is the invoke-form name for the live values `resolver` also carries. */
|
|
28
|
-
exports.HELP_DOMAINS = ['escalation', 'metadata', 'envelope', 'payload', 'resolver', 'lookup', 'input', 'roster'];
|
|
28
|
+
exports.HELP_DOMAINS = ['escalation', 'metadata', 'envelope', 'payload', 'resolver', 'lookup', 'input', 'roster', 'file'];
|
|
29
29
|
const TOKEN_PATTERN = /\{\{\s*([^{}]+?)\s*\}\}/g;
|
|
30
30
|
const MISSING_VALUE = '—';
|
|
31
31
|
function formatTokenValue(value) {
|
|
@@ -308,9 +308,11 @@ function registerEscalationTools(server) {
|
|
|
308
308
|
server.registerTool('aggregate_by_facets', {
|
|
309
309
|
title: 'Aggregate by Facets',
|
|
310
310
|
description: 'Grouped analytics over the escalation intervals. Every escalation is one open ' +
|
|
311
|
-
'interval [created_at, ended_at); this tool reads it
|
|
311
|
+
'interval [created_at, ended_at); this tool reads it three ways: membership (rows or, ' +
|
|
312
312
|
'with distinctBy, distinct entities open at an instant — a past asOf reconstructs the ' +
|
|
313
|
-
'live set then)
|
|
313
|
+
'live set then), dwell (open-seconds per group within a half-open [from,to) window), and ' +
|
|
314
|
+
'resolved (rows resolved within a window, optionally per day/week/month bucket: trends ' +
|
|
315
|
+
'such as weekly review outcomes by extractor; needs a role scope). ' +
|
|
314
316
|
'Group by role/subtype/status columns plus metadata facet keys; optional states[] label ' +
|
|
315
317
|
'each group. One call replaces N per-filter count round-trips. The filter takes the WHAT ' +
|
|
316
318
|
'fields only — status/available/jeopardy are rejected (liveness derives from the measure).',
|
|
@@ -16,12 +16,12 @@ export declare const upsertLabelTemplateSchema: z.ZodObject<{
|
|
|
16
16
|
caption: z.ZodOptional<z.ZodString>;
|
|
17
17
|
tone: z.ZodEnum<["solid", "outline", "plain"]>;
|
|
18
18
|
}, "strip", z.ZodTypeAny, {
|
|
19
|
-
category: string;
|
|
20
19
|
tone: "solid" | "outline" | "plain";
|
|
20
|
+
category: string;
|
|
21
21
|
caption?: string | undefined;
|
|
22
22
|
}, {
|
|
23
|
-
category: string;
|
|
24
23
|
tone: "solid" | "outline" | "plain";
|
|
24
|
+
category: string;
|
|
25
25
|
caption?: string | undefined;
|
|
26
26
|
}>, "many">;
|
|
27
27
|
text: z.ZodOptional<z.ZodObject<{
|
|
@@ -45,8 +45,8 @@ export declare const upsertLabelTemplateSchema: z.ZodObject<{
|
|
|
45
45
|
scheme_version: number;
|
|
46
46
|
title: string;
|
|
47
47
|
codes: {
|
|
48
|
-
category: string;
|
|
49
48
|
tone: "solid" | "outline" | "plain";
|
|
49
|
+
category: string;
|
|
50
50
|
caption?: string | undefined;
|
|
51
51
|
}[];
|
|
52
52
|
enabled?: boolean | undefined;
|
|
@@ -65,8 +65,8 @@ export declare const upsertLabelTemplateSchema: z.ZodObject<{
|
|
|
65
65
|
scheme_version: number;
|
|
66
66
|
title: string;
|
|
67
67
|
codes: {
|
|
68
|
-
category: string;
|
|
69
68
|
tone: "solid" | "outline" | "plain";
|
|
69
|
+
category: string;
|
|
70
70
|
caption?: string | undefined;
|
|
71
71
|
}[];
|
|
72
72
|
enabled?: boolean | undefined;
|