@hotmeshio/long-tail 0.19.1 → 0.21.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/README.md +4 -4
- package/build/api/escalations/accumulate.d.ts +96 -0
- package/build/api/escalations/accumulate.js +516 -0
- package/build/api/escalations/index.d.ts +1 -0
- package/build/api/escalations/index.js +10 -1
- package/build/api/roles.d.ts +4 -5
- package/build/api/roles.js +53 -4
- package/build/api/scan-codes/execute.js +2 -0
- package/build/api/scan-codes/verbs.d.ts +15 -0
- package/build/api/scan-codes/verbs.js +65 -0
- package/build/api/workflows/config.d.ts +3 -0
- package/build/api/workflows/config.js +15 -0
- package/build/api/workflows/index.d.ts +1 -0
- package/build/api/workflows/index.js +3 -1
- package/build/api/workflows/input-lookups.d.ts +16 -0
- package/build/api/workflows/input-lookups.js +69 -0
- package/build/api/workflows/input-validation.d.ts +4 -3
- package/build/api/workflows/input-validation.js +7 -4
- package/build/api/workflows/invocable.js +1 -0
- package/build/api/workflows/invocation.js +1 -1
- package/build/index.js +60 -0
- package/build/lib/db/schemas/035_workflow_input_lookups.sql +9 -0
- package/build/lib/db/schemas/036_role_portals.sql +12 -0
- package/build/routes/escalations/accumulate.d.ts +7 -0
- package/build/routes/escalations/accumulate.js +150 -0
- package/build/routes/escalations/index.js +5 -0
- package/build/routes/workflows/config.js +10 -0
- package/build/sdk/index.d.ts +25 -0
- package/build/sdk/index.js +8 -0
- package/build/services/config/cache.js +1 -0
- package/build/services/config/read.js +2 -0
- package/build/services/config/sql.d.ts +2 -2
- package/build/services/config/sql.js +6 -5
- package/build/services/config/write.js +10 -1
- package/build/services/escalation/accumulate.d.ts +81 -0
- package/build/services/escalation/accumulate.js +154 -0
- package/build/services/escalation/index.d.ts +1 -0
- package/build/services/escalation/index.js +1 -0
- package/build/services/knowledge/index.d.ts +1 -0
- package/build/services/knowledge/index.js +1 -0
- package/build/services/knowledge/lookup-refs.d.ts +7 -0
- package/build/services/knowledge/lookup-refs.js +26 -0
- package/build/services/mcp/db-server/schemas.d.ts +2 -2
- package/build/services/mcp/playwright-server/schemas.d.ts +2 -2
- package/build/services/orchestrator/condition.d.ts +40 -3
- package/build/services/orchestrator/condition.js +42 -2
- package/build/services/role/index.js +1 -0
- package/build/services/role/seed.js +6 -1
- package/build/services/role/sql.d.ts +6 -3
- package/build/services/role/sql.js +7 -2
- package/build/services/role/types.d.ts +38 -10
- package/build/services/role/types.js +10 -1
- package/build/services/scan-code/validate.js +16 -0
- package/build/shared/form-validation/display-only-widgets.d.ts +16 -0
- package/build/shared/form-validation/display-only-widgets.js +25 -0
- package/build/shared/form-validation/field-validator.d.ts +1 -0
- package/build/shared/form-validation/field-validator.js +94 -6
- package/build/shared/form-validation/index.d.ts +2 -0
- package/build/shared/form-validation/index.js +2 -0
- package/build/shared/form-validation/invoke-context.d.ts +4 -3
- package/build/shared/form-validation/invoke-context.js +5 -4
- package/build/shared/form-validation/x-lt-bind.d.ts +2 -14
- package/build/shared/form-validation/x-lt-bind.js +12 -8
- package/build/shared/form-validation/x-lt-invoke.d.ts +38 -0
- package/build/shared/form-validation/x-lt-invoke.js +103 -0
- package/build/shared/form-validation/x-lt-options.d.ts +3 -3
- package/build/shared/form-validation/x-lt-options.js +19 -5
- package/build/shared/form-validation/x-lt-show-if.d.ts +5 -0
- package/build/shared/form-validation/x-lt-show-if.js +10 -0
- package/build/start/workers.js +10 -0
- package/build/system/mcp-servers/admin/escalations.js +39 -0
- package/build/system/mcp-servers/admin/schemas.d.ts +256 -33
- package/build/system/mcp-servers/admin/schemas.js +55 -3
- package/build/system/mcp-servers/admin/users.js +1 -0
- package/build/system/mcp-servers/admin/workflow-config.js +54 -9
- package/build/system/mcp-servers/admin/workflows.js +9 -7
- package/build/system/mcp-servers/db-query/schemas.d.ts +2 -2
- package/build/system/mcp-servers/docs.js +4 -0
- package/build/system/mcp-servers/human-queue-schemas.d.ts +85 -0
- package/build/system/mcp-servers/human-queue-schemas.js +19 -1
- package/build/system/mcp-servers/human-queue.d.ts +2 -0
- package/build/system/mcp-servers/human-queue.js +77 -0
- package/build/system/seed/tool-manifests-admin.d.ts +1509 -227
- package/build/system/seed/tool-manifests-admin.js +8 -4
- package/build/system/seed/tool-manifests-escalation.d.ts +174 -0
- package/build/system/seed/tool-manifests-escalation.js +56 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/config.d.ts +4 -0
- package/build/types/escalation.d.ts +52 -0
- package/build/types/escalation.js +29 -1
- package/build/types/index.d.ts +2 -2
- package/build/types/index.js +3 -1
- package/build/types/scan-code.d.ts +24 -0
- package/build/types/scan-code.js +9 -0
- package/build/types/startup.d.ts +26 -0
- package/dashboard/dist/assets/{AdminDashboard-Drs-9TRM.js → AdminDashboard-uarpHB88.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-Drs-9TRM.js.map → AdminDashboard-uarpHB88.js.map} +1 -1
- package/dashboard/dist/assets/{AgentConfigPage-BDPDZ7-v.js → AgentConfigPage-BcUaDD5E.js} +6 -6
- package/dashboard/dist/assets/{AgentConfigPage-BDPDZ7-v.js.map → AgentConfigPage-BcUaDD5E.js.map} +1 -1
- package/dashboard/dist/assets/{AgentDetailPage-CGBulM4_.js → AgentDetailPage-BaZBhK6i.js} +3 -3
- package/dashboard/dist/assets/{AgentDetailPage-CGBulM4_.js.map → AgentDetailPage-BaZBhK6i.js.map} +1 -1
- package/dashboard/dist/assets/AgentsPage-CuVFSDc4.js +2 -0
- package/dashboard/dist/assets/{AgentsPage-D77JeViQ.js.map → AgentsPage-CuVFSDc4.js.map} +1 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-iO5NyyIK.js +2 -0
- package/dashboard/dist/assets/AvailableEscalationsPage-iO5NyyIK.js.map +1 -0
- package/dashboard/dist/assets/{BotPicker-CC5vI_Sv.js → BotPicker-CClMby6B.js} +2 -2
- package/dashboard/dist/assets/{BotPicker-CC5vI_Sv.js.map → BotPicker-CClMby6B.js.map} +1 -1
- package/dashboard/dist/assets/BulkAssignModal-BL8FRgkN.js +2 -0
- package/dashboard/dist/assets/{BulkAssignModal-BXiJnlqt.js.map → BulkAssignModal-BL8FRgkN.js.map} +1 -1
- package/dashboard/dist/assets/CapabilitiesPage-D53ogPor.js +2 -0
- package/dashboard/dist/assets/{CapabilitiesPage-D9TC2iKy.js.map → CapabilitiesPage-D53ogPor.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-D10lGw_u.js → CollapsibleSection-ow8jpbtD.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-D10lGw_u.js.map → CollapsibleSection-ow8jpbtD.js.map} +1 -1
- package/dashboard/dist/assets/{ConfirmDeleteModal-BJdLN6No.js → ConfirmDeleteModal-CeEDt9iJ.js} +2 -2
- package/dashboard/dist/assets/{ConfirmDeleteModal-BJdLN6No.js.map → ConfirmDeleteModal-CeEDt9iJ.js.map} +1 -1
- package/dashboard/dist/assets/{CountdownTimer-D9B-BjQ7.js → CountdownTimer-CSqyZMCG.js} +2 -2
- package/dashboard/dist/assets/{CountdownTimer-D9B-BjQ7.js.map → CountdownTimer-CSqyZMCG.js.map} +1 -1
- package/dashboard/dist/assets/{CredentialsPage-hniUAFBK.js → CredentialsPage-Dx7SxA23.js} +2 -2
- package/dashboard/dist/assets/{CredentialsPage-hniUAFBK.js.map → CredentialsPage-Dx7SxA23.js.map} +1 -1
- package/dashboard/dist/assets/{CronLabel-v9DCD2FX.js → CronLabel-LYPxpvNN.js} +2 -2
- package/dashboard/dist/assets/{CronLabel-v9DCD2FX.js.map → CronLabel-LYPxpvNN.js.map} +1 -1
- package/dashboard/dist/assets/DataTable-spX1dFyb.js +2 -0
- package/dashboard/dist/assets/DataTable-spX1dFyb.js.map +1 -0
- package/dashboard/dist/assets/{DropZone-XlcY8hEH.js → DropZone-f1o-GLM8.js} +2 -2
- package/dashboard/dist/assets/{DropZone-XlcY8hEH.js.map → DropZone-f1o-GLM8.js.map} +1 -1
- package/dashboard/dist/assets/{ElapsedCell-_xvVTK8N.js → ElapsedCell-BZJTSm9N.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-_xvVTK8N.js.map → ElapsedCell-BZJTSm9N.js.map} +1 -1
- package/dashboard/dist/assets/EntityTimelinePanel-0wIIW2en.js +2 -0
- package/dashboard/dist/assets/{EntityTimelinePanel-1lT3jkCM.js.map → EntityTimelinePanel-0wIIW2en.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationListSchemaPage-BeQUTUEO.js → EscalationListSchemaPage-CoYvtMzj.js} +3 -3
- package/dashboard/dist/assets/{EscalationListSchemaPage-BeQUTUEO.js.map → EscalationListSchemaPage-CoYvtMzj.js.map} +1 -1
- package/dashboard/dist/assets/EscalationListView-DWFHPufv.js +2 -0
- package/dashboard/dist/assets/EscalationListView-DWFHPufv.js.map +1 -0
- package/dashboard/dist/assets/{EscalationSchemaPage-D4VlEwyS.js → EscalationSchemaPage-C9Xu_A25.js} +3 -3
- package/dashboard/dist/assets/{EscalationSchemaPage-D4VlEwyS.js.map → EscalationSchemaPage-C9Xu_A25.js.map} +1 -1
- package/dashboard/dist/assets/EscalationTimeline-D8W2LNNk.js +2 -0
- package/dashboard/dist/assets/EscalationTimeline-D8W2LNNk.js.map +1 -0
- package/dashboard/dist/assets/EscalationTitleSelect-DLK8NWMp.js +2 -0
- package/dashboard/dist/assets/EscalationTitleSelect-DLK8NWMp.js.map +1 -0
- package/dashboard/dist/assets/{EscalationsOverview-Bx6Zrzm-.js → EscalationsOverview-CW57FaP9.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-Bx6Zrzm-.js.map → EscalationsOverview-CW57FaP9.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-KEC3YWBf.js → EventTable-D1ctWhKf.js} +2 -2
- package/dashboard/dist/assets/{EventTable-KEC3YWBf.js.map → EventTable-D1ctWhKf.js.map} +1 -1
- package/dashboard/dist/assets/{FilterBar-xwN_b5fj.js → FilterBar-C-iur-Nj.js} +2 -2
- package/dashboard/dist/assets/{FilterBar-xwN_b5fj.js.map → FilterBar-C-iur-Nj.js.map} +1 -1
- package/dashboard/dist/assets/GraphInvokePage-CcA_44M4.js +2 -0
- package/dashboard/dist/assets/{GraphInvokePage-DV7Y0fe2.js.map → GraphInvokePage-CcA_44M4.js.map} +1 -1
- package/dashboard/dist/assets/HomePage-Dc085ghJ.js +2 -0
- package/dashboard/dist/assets/{HomePage-G785SWcW.js.map → HomePage-Dc085ghJ.js.map} +1 -1
- package/dashboard/dist/assets/ListToolbar-h_ziBt4O.js +2 -0
- package/dashboard/dist/assets/{ListToolbar-zPVYPg3W.js.map → ListToolbar-h_ziBt4O.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-CMGUq8hx.js → McpOverview-qXXhbNWV.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-CMGUq8hx.js.map → McpOverview-qXXhbNWV.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryDetailPage-CdhLhaKn.js → McpQueryDetailPage-SEzSbZrd.js} +2 -2
- package/dashboard/dist/assets/{McpQueryDetailPage-CdhLhaKn.js.map → McpQueryDetailPage-SEzSbZrd.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryPage-Cy0V0kv9.js +2 -0
- package/dashboard/dist/assets/{McpQueryPage-CNSNMagY.js.map → McpQueryPage-Cy0V0kv9.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunDetailPage-DBm8hUaW.js → McpRunDetailPage-DjJO5vSb.js} +2 -2
- package/dashboard/dist/assets/{McpRunDetailPage-DBm8hUaW.js.map → McpRunDetailPage-DjJO5vSb.js.map} +1 -1
- package/dashboard/dist/assets/McpRunsPage-BfjiJ8mM.js +2 -0
- package/dashboard/dist/assets/{McpRunsPage-B6rb5QBf.js.map → McpRunsPage-BfjiJ8mM.js.map} +1 -1
- package/dashboard/dist/assets/{NamespacePill-Bb3revqD.js → NamespacePill-DADRJOUl.js} +2 -2
- package/dashboard/dist/assets/{NamespacePill-Bb3revqD.js.map → NamespacePill-DADRJOUl.js.map} +1 -1
- package/dashboard/dist/assets/OperationsPage-dJcER0T_.js +3 -0
- package/dashboard/dist/assets/OperationsPage-dJcER0T_.js.map +1 -0
- package/dashboard/dist/assets/OperatorDashboard-zCkW4eqk.js +2 -0
- package/dashboard/dist/assets/{OperatorDashboard-DBOscDnf.js.map → OperatorDashboard-zCkW4eqk.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeader-Di5Sz3an.js → PageHeader-Csq434-v.js} +2 -2
- package/dashboard/dist/assets/{PageHeader-Di5Sz3an.js.map → PageHeader-Csq434-v.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeaderWithStats-DutKJ-h2.js → PageHeaderWithStats-CSnk1p5A.js} +2 -2
- package/dashboard/dist/assets/{PageHeaderWithStats-DutKJ-h2.js.map → PageHeaderWithStats-CSnk1p5A.js.map} +1 -1
- package/dashboard/dist/assets/{PersonaDetailPage-BGRdGpeR.js → PersonaDetailPage-Cx6L3Jvu.js} +2 -2
- package/dashboard/dist/assets/{PersonaDetailPage-BGRdGpeR.js.map → PersonaDetailPage-Cx6L3Jvu.js.map} +1 -1
- package/dashboard/dist/assets/{PersonasPage-DRzOZcVa.js → PersonasPage-DOgGUlJl.js} +2 -2
- package/dashboard/dist/assets/{PersonasPage-DRzOZcVa.js.map → PersonasPage-DOgGUlJl.js.map} +1 -1
- package/dashboard/dist/assets/PortalPage-BKuL1BeJ.js +2 -0
- package/dashboard/dist/assets/PortalPage-BKuL1BeJ.js.map +1 -0
- package/dashboard/dist/assets/{ProcessDetailPage-BLGjZXpM.js → ProcessDetailPage-BFcFSDUv.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-BLGjZXpM.js.map → ProcessDetailPage-BFcFSDUv.js.map} +1 -1
- package/dashboard/dist/assets/ProcessesListPage-BaHV2cXp.js +2 -0
- package/dashboard/dist/assets/{ProcessesListPage-5NnysKFC.js.map → ProcessesListPage-BaHV2cXp.js.map} +1 -1
- package/dashboard/dist/assets/ResolverForm-Bgc0Zrya.js +7 -0
- package/dashboard/dist/assets/ResolverForm-Bgc0Zrya.js.map +1 -0
- package/dashboard/dist/assets/RoleDetailPage-BPY6i3CU.js +8 -0
- package/dashboard/dist/assets/RoleDetailPage-BPY6i3CU.js.map +1 -0
- package/dashboard/dist/assets/{RolePill-DhnVPK4q.js → RolePill-BafrASDX.js} +2 -2
- package/dashboard/dist/assets/{RolePill-DhnVPK4q.js.map → RolePill-BafrASDX.js.map} +1 -1
- package/dashboard/dist/assets/{RolesPage-BmW1LzkU.js → RolesPage-DSqqKPbv.js} +2 -2
- package/dashboard/dist/assets/{RolesPage-BmW1LzkU.js.map → RolesPage-DSqqKPbv.js.map} +1 -1
- package/dashboard/dist/assets/RunAsSelector-B29iWwel.js +2 -0
- package/dashboard/dist/assets/{RunAsSelector-BwZTJ4Yj.js.map → RunAsSelector-B29iWwel.js.map} +1 -1
- package/dashboard/dist/assets/ScanCodesPage-S8aAJfnC.js +2 -0
- package/dashboard/dist/assets/{ScanCodesPage-FiYIYB-m.js.map → ScanCodesPage-S8aAJfnC.js.map} +1 -1
- package/dashboard/dist/assets/{ScanSchemeDetailPage-BiAqtD-a.js → ScanSchemeDetailPage-CUBRAtmJ.js} +2 -2
- package/dashboard/dist/assets/{ScanSchemeDetailPage-BiAqtD-a.js.map → ScanSchemeDetailPage-CUBRAtmJ.js.map} +1 -1
- package/dashboard/dist/assets/ScanStationPage-R9t1-CeQ.js +2 -0
- package/dashboard/dist/assets/{ScanStationPage-8CdOtbCD.js.map → ScanStationPage-R9t1-CeQ.js.map} +1 -1
- package/dashboard/dist/assets/{ScopeBadge-CXUg0FHo.js → ScopeBadge-b6MIBiYD.js} +2 -2
- package/dashboard/dist/assets/{ScopeBadge-CXUg0FHo.js.map → ScopeBadge-b6MIBiYD.js.map} +1 -1
- package/dashboard/dist/assets/{StickyPagination-DRuqKhZt.js → StickyPagination-CkW_A507.js} +2 -2
- package/dashboard/dist/assets/{StickyPagination-DRuqKhZt.js.map → StickyPagination-CkW_A507.js.map} +1 -1
- package/dashboard/dist/assets/{StreamMessageDetail-JwlbRiMn.js → StreamMessageDetail-yzWX0wac.js} +2 -2
- package/dashboard/dist/assets/{StreamMessageDetail-JwlbRiMn.js.map → StreamMessageDetail-yzWX0wac.js.map} +1 -1
- package/dashboard/dist/assets/{SwimlaneTimeline-hu3c4bCJ.js → SwimlaneTimeline-Cf4DXFxj.js} +2 -2
- package/dashboard/dist/assets/{SwimlaneTimeline-hu3c4bCJ.js.map → SwimlaneTimeline-Cf4DXFxj.js.map} +1 -1
- package/dashboard/dist/assets/{TagInput-BZ8vb2oW.js → TagInput-ZrIIrEUP.js} +2 -2
- package/dashboard/dist/assets/{TagInput-BZ8vb2oW.js.map → TagInput-ZrIIrEUP.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-NqVZF3jW.js → TaskDetailPage-DCDcEps9.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-NqVZF3jW.js.map → TaskDetailPage-DCDcEps9.js.map} +1 -1
- package/dashboard/dist/assets/{TaskQueuePill-Bxir8WRl.js → TaskQueuePill-DkQ1uc6y.js} +2 -2
- package/dashboard/dist/assets/{TaskQueuePill-Bxir8WRl.js.map → TaskQueuePill-DkQ1uc6y.js.map} +1 -1
- package/dashboard/dist/assets/TasksListPage-BBATgpf7.js +2 -0
- package/dashboard/dist/assets/{TasksListPage-BQNaSzCn.js.map → TasksListPage-BBATgpf7.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-Cv35DOiI.js → TimeAgo-CSNVEjch.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-Cv35DOiI.js.map → TimeAgo-CSNVEjch.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-DHUXey9s.js → TimestampCell-Du1nBrPn.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-DHUXey9s.js.map → TimestampCell-Du1nBrPn.js.map} +1 -1
- package/dashboard/dist/assets/{ToolPill-FkgTXIhq.js → ToolPill-Baxm02L6.js} +2 -2
- package/dashboard/dist/assets/{ToolPill-FkgTXIhq.js.map → ToolPill-Baxm02L6.js.map} +1 -1
- package/dashboard/dist/assets/ToolTestPanel-CF-h_5Rg.js +2 -0
- package/dashboard/dist/assets/{ToolTestPanel-DvuLFWqQ.js.map → ToolTestPanel-CF-h_5Rg.js.map} +1 -1
- package/dashboard/dist/assets/{TopicDetailPage-TXX3QNSo.js → TopicDetailPage-Dr1UmWcp.js} +3 -3
- package/dashboard/dist/assets/{TopicDetailPage-TXX3QNSo.js.map → TopicDetailPage-Dr1UmWcp.js.map} +1 -1
- package/dashboard/dist/assets/TopicsPage-CUUo-Ylf.js +2 -0
- package/dashboard/dist/assets/{TopicsPage-h-oyTeEJ.js.map → TopicsPage-CUUo-Ylf.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-BceRCeDF.js → UserName-kBh1dc39.js} +2 -2
- package/dashboard/dist/assets/{UserName-BceRCeDF.js.map → UserName-kBh1dc39.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-CmHGcaN9.js → WorkflowExecutionPage-CCRSbnDx.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-CmHGcaN9.js.map → WorkflowExecutionPage-CCRSbnDx.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowPill--AYMW7u_.js → WorkflowPill-ZepbO_ny.js} +2 -2
- package/dashboard/dist/assets/{WorkflowPill--AYMW7u_.js.map → WorkflowPill-ZepbO_ny.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowsDashboard-BNQVvyek.js +2 -0
- package/dashboard/dist/assets/{WorkflowsDashboard-B0r2lQXk.js.map → WorkflowsDashboard-BNQVvyek.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-BTMc2PJ_.js → WorkflowsOverview-DswubNJN.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-BTMc2PJ_.js.map → WorkflowsOverview-DswubNJN.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-DUiCVnZp.js → YamlWorkflowDetailPage-Cw9Dlmup.js} +11 -11
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-DUiCVnZp.js.map → YamlWorkflowDetailPage-Cw9Dlmup.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowsPage-BAuXfwi0.js → YamlWorkflowsPage-DB8xnIXy.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowsPage-BAuXfwi0.js.map → YamlWorkflowsPage-DB8xnIXy.js.map} +1 -1
- package/dashboard/dist/assets/{agents-BvmLCk4h.js → agents-BwEnf6N9.js} +2 -2
- package/dashboard/dist/assets/{agents-BvmLCk4h.js.map → agents-BwEnf6N9.js.map} +1 -1
- package/dashboard/dist/assets/{bots-f_tyhl4I.js → bots-CCmJTT2u.js} +2 -2
- package/dashboard/dist/assets/{bots-f_tyhl4I.js.map → bots-CCmJTT2u.js.map} +1 -1
- package/dashboard/dist/assets/{capabilities-DNo5bqLx.js → capabilities-BZHgp_nh.js} +2 -2
- package/dashboard/dist/assets/{capabilities-DNo5bqLx.js.map → capabilities-BZHgp_nh.js.map} +1 -1
- package/dashboard/dist/assets/{constants-BHkpVaqx.js → constants-CeBBTzf5.js} +2 -2
- package/dashboard/dist/assets/{constants-BHkpVaqx.js.map → constants-CeBBTzf5.js.map} +1 -1
- package/dashboard/dist/assets/{controlplane-Dyyj2Irb.js → controlplane-CyfwUlFA.js} +2 -2
- package/dashboard/dist/assets/{controlplane-Dyyj2Irb.js.map → controlplane-CyfwUlFA.js.map} +1 -1
- package/dashboard/dist/assets/escalation-columns-BJPTNmLW.js +2 -0
- package/dashboard/dist/assets/escalation-columns-BJPTNmLW.js.map +1 -0
- package/dashboard/dist/assets/index-3gbd5neL.js +67 -0
- package/dashboard/dist/assets/index-3gbd5neL.js.map +1 -0
- package/dashboard/dist/assets/index-BAAVTyZ-.js +2 -0
- package/dashboard/dist/assets/{index-DL83W7Gu.js.map → index-BAAVTyZ-.js.map} +1 -1
- package/dashboard/dist/assets/{index-CsKiRyhy.js → index-BC6Jenlo.js} +2 -2
- package/dashboard/dist/assets/{index-CsKiRyhy.js.map → index-BC6Jenlo.js.map} +1 -1
- package/dashboard/dist/assets/index-C7KHqOTQ.js +2 -0
- package/dashboard/dist/assets/{index-D7ESqn22.js.map → index-C7KHqOTQ.js.map} +1 -1
- package/dashboard/dist/assets/index-CDrqqbSR.js +3 -0
- package/dashboard/dist/assets/index-CDrqqbSR.js.map +1 -0
- package/dashboard/dist/assets/index-CVwzCZ43.js +2 -0
- package/dashboard/dist/assets/{index-DvxxrFBo.js.map → index-CVwzCZ43.js.map} +1 -1
- package/dashboard/dist/assets/index-CaGF6TCC.js +2 -0
- package/dashboard/dist/assets/index-CaGF6TCC.js.map +1 -0
- package/dashboard/dist/assets/index-ClVbfe4z.js +13 -0
- package/dashboard/dist/assets/index-ClVbfe4z.js.map +1 -0
- package/dashboard/dist/assets/{index-DWse7ERF.js → index-CuVkSmj5.js} +2 -2
- package/dashboard/dist/assets/{index-DWse7ERF.js.map → index-CuVkSmj5.js.map} +1 -1
- package/dashboard/dist/assets/{index-PcyGjmBm.js → index-DAuX_PlL.js} +2 -2
- package/dashboard/dist/assets/{index-PcyGjmBm.js.map → index-DAuX_PlL.js.map} +1 -1
- package/dashboard/dist/assets/{index-e2X-s0EQ.js → index-DBWS5QL8.js} +2 -2
- package/dashboard/dist/assets/{index-e2X-s0EQ.js.map → index-DBWS5QL8.js.map} +1 -1
- package/dashboard/dist/assets/index-DIWCI6HC.js +2 -0
- package/dashboard/dist/assets/{index-BNZknxFY.js.map → index-DIWCI6HC.js.map} +1 -1
- package/dashboard/dist/assets/{index-C-Xr2V3F.js → index-DZ8X_Gp4.js} +2 -2
- package/dashboard/dist/assets/{index-C-Xr2V3F.js.map → index-DZ8X_Gp4.js.map} +1 -1
- package/dashboard/dist/assets/index-Dh8MJl3L.css +1 -0
- package/dashboard/dist/assets/{knowledge-Coo6CKzo.js → knowledge-CqyLhUMg.js} +2 -2
- package/dashboard/dist/assets/{knowledge-Coo6CKzo.js.map → knowledge-CqyLhUMg.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-Cz5eFnP_.js → mcp-Cvu6bFYH.js} +2 -2
- package/dashboard/dist/assets/{mcp-Cz5eFnP_.js.map → mcp-Cvu6bFYH.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-BtnuO4LF.js → mcp-query-qC6A3e9l.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-BtnuO4LF.js.map → mcp-query-qC6A3e9l.js.map} +1 -1
- package/dashboard/dist/assets/metadata-display-COo3mMCr.js +2 -0
- package/dashboard/dist/assets/metadata-display-COo3mMCr.js.map +1 -0
- package/dashboard/dist/assets/{personas-C2-LgpHQ.js → personas-BKN_lJuV.js} +2 -2
- package/dashboard/dist/assets/{personas-C2-LgpHQ.js.map → personas-BKN_lJuV.js.map} +1 -1
- package/dashboard/dist/assets/{pipelines-TuXQvUA-.js → pipelines-BldIfv85.js} +2 -2
- package/dashboard/dist/assets/{pipelines-TuXQvUA-.js.map → pipelines-BldIfv85.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-OUzpu__z.js → tasks-B-Uay8uL.js} +2 -2
- package/dashboard/dist/assets/{tasks-OUzpu__z.js.map → tasks-B-Uay8uL.js.map} +1 -1
- package/dashboard/dist/assets/{topics-B8bdrBaW.js → topics-438EQogt.js} +2 -2
- package/dashboard/dist/assets/{topics-B8bdrBaW.js.map → topics-438EQogt.js.map} +1 -1
- package/dashboard/dist/assets/useContainerWidth-DSLp1gEm.js +2 -0
- package/dashboard/dist/assets/useContainerWidth-DSLp1gEm.js.map +1 -0
- package/dashboard/dist/assets/{useDebouncedValue-Cp5ZOtVE.js → useDebouncedValue-Cw8hYZ8y.js} +2 -2
- package/dashboard/dist/assets/{useDebouncedValue-Cp5ZOtVE.js.map → useDebouncedValue-Cw8hYZ8y.js.map} +1 -1
- package/dashboard/dist/assets/{useNamespace-DtQe3wZ5.js → useNamespace-D1218GQ8.js} +2 -2
- package/dashboard/dist/assets/{useNamespace-DtQe3wZ5.js.map → useNamespace-D1218GQ8.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-CS22c15X.js → useYamlActivityEvents-BAQf_y_U.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-CS22c15X.js.map → useYamlActivityEvents-BAQf_y_U.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-DeBdvyKJ.js → vendor-icons-B7OcUM6b.js} +2 -2
- package/dashboard/dist/assets/{vendor-icons-DeBdvyKJ.js.map → vendor-icons-B7OcUM6b.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-HQIki3hI.js → yaml-workflows-CN01gEB0.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-HQIki3hI.js.map → yaml-workflows-CN01gEB0.js.map} +1 -1
- package/dashboard/dist/index.html +3 -3
- package/docs/accumulator.md +113 -0
- package/docs/api/http/escalations.md +89 -0
- package/docs/api/http/roles.md +1 -0
- package/docs/api/http/workflows.md +28 -1
- package/docs/api/mcp/admin.md +40 -4
- package/docs/api/sdk/escalations.md +91 -0
- package/docs/api/sdk/roles.md +2 -0
- package/docs/architecture.md +1 -1
- package/docs/code-owned-configuration.md +3 -2
- package/docs/dashboard.md +11 -5
- package/docs/hitl/design.md +1 -1
- package/docs/hitl/escalation.md +37 -1
- package/docs/hitl/form.md +12 -7
- package/docs/hitl/invoke-form.md +10 -3
- package/docs/hitl/lookups.md +21 -0
- package/docs/hitl/pinned-views.md +4 -0
- package/docs/hitl/portal.md +97 -0
- package/docs/hitl/resolution.md +41 -0
- package/docs/hitl/x-lt-embed.md +1 -1
- package/docs/hitl/x-lt-invoke.md +95 -0
- package/docs/hitl/x-lt-list-schema.md +3 -1
- package/docs/hitl/x-lt-validation.md +50 -3
- package/docs/hitl/x-lt-widget.md +22 -0
- package/docs/hitl-guide.md +12 -2
- package/docs/scan-codes.md +15 -2
- package/docs/sdk.md +1 -1
- package/docs/workflows.md +2 -2
- package/package.json +4 -2
- package/dashboard/dist/assets/AgentsPage-D77JeViQ.js +0 -2
- package/dashboard/dist/assets/AvailableEscalationsPage-CqM_MOMy.js +0 -2
- package/dashboard/dist/assets/AvailableEscalationsPage-CqM_MOMy.js.map +0 -1
- package/dashboard/dist/assets/BulkAssignModal-BXiJnlqt.js +0 -2
- package/dashboard/dist/assets/CapabilitiesPage-D9TC2iKy.js +0 -2
- package/dashboard/dist/assets/DataTable-7C7riavf.js +0 -2
- package/dashboard/dist/assets/DataTable-7C7riavf.js.map +0 -1
- package/dashboard/dist/assets/EntityTimelinePanel-1lT3jkCM.js +0 -2
- package/dashboard/dist/assets/EscalationListView-uuZRMSLB.js +0 -2
- package/dashboard/dist/assets/EscalationListView-uuZRMSLB.js.map +0 -1
- package/dashboard/dist/assets/GraphInvokePage-DV7Y0fe2.js +0 -2
- package/dashboard/dist/assets/HomePage-G785SWcW.js +0 -2
- package/dashboard/dist/assets/ListToolbar-zPVYPg3W.js +0 -2
- package/dashboard/dist/assets/McpQueryPage-CNSNMagY.js +0 -2
- package/dashboard/dist/assets/McpRunsPage-B6rb5QBf.js +0 -2
- package/dashboard/dist/assets/OperationsPage-Dxk1fAMg.js +0 -3
- package/dashboard/dist/assets/OperationsPage-Dxk1fAMg.js.map +0 -1
- package/dashboard/dist/assets/OperatorDashboard-DBOscDnf.js +0 -2
- package/dashboard/dist/assets/ProcessesListPage-5NnysKFC.js +0 -2
- package/dashboard/dist/assets/ResolverForm-Dy0yirtP.js +0 -2
- package/dashboard/dist/assets/ResolverForm-Dy0yirtP.js.map +0 -1
- package/dashboard/dist/assets/RoleDetailPage-C_LIoe1j.js +0 -8
- package/dashboard/dist/assets/RoleDetailPage-C_LIoe1j.js.map +0 -1
- package/dashboard/dist/assets/RunAsSelector-BwZTJ4Yj.js +0 -2
- package/dashboard/dist/assets/ScanCodesPage-FiYIYB-m.js +0 -2
- package/dashboard/dist/assets/ScanStationPage-8CdOtbCD.js +0 -2
- package/dashboard/dist/assets/TasksListPage-BQNaSzCn.js +0 -2
- package/dashboard/dist/assets/ToolTestPanel-DvuLFWqQ.js +0 -2
- package/dashboard/dist/assets/TopicsPage-h-oyTeEJ.js +0 -2
- package/dashboard/dist/assets/WorkflowsDashboard-B0r2lQXk.js +0 -2
- package/dashboard/dist/assets/escalation-columns-DIigeTOK.js +0 -2
- package/dashboard/dist/assets/escalation-columns-DIigeTOK.js.map +0 -1
- package/dashboard/dist/assets/index-BMlQYOE1.js +0 -67
- package/dashboard/dist/assets/index-BMlQYOE1.js.map +0 -1
- package/dashboard/dist/assets/index-BNZknxFY.js +0 -2
- package/dashboard/dist/assets/index-Bpvfr4OW.css +0 -1
- package/dashboard/dist/assets/index-CegPUKpc.js +0 -3
- package/dashboard/dist/assets/index-CegPUKpc.js.map +0 -1
- package/dashboard/dist/assets/index-D7ESqn22.js +0 -2
- package/dashboard/dist/assets/index-DL83W7Gu.js +0 -2
- package/dashboard/dist/assets/index-DPLssnMW.js +0 -6
- package/dashboard/dist/assets/index-DPLssnMW.js.map +0 -1
- package/dashboard/dist/assets/index-DoETPlJP.js +0 -11
- package/dashboard/dist/assets/index-DoETPlJP.js.map +0 -1
- package/dashboard/dist/assets/index-DvxxrFBo.js +0 -2
- package/dashboard/dist/assets/metadata-display--TzK0REC.js +0 -2
- package/dashboard/dist/assets/metadata-display--TzK0REC.js.map +0 -1
- package/dashboard/dist/assets/resolver-payload-C1dXB3n6.js +0 -2
- package/dashboard/dist/assets/resolver-payload-C1dXB3n6.js.map +0 -1
- package/dashboard/dist/assets/seed-form-json-DvPsISxD.js +0 -2
- package/dashboard/dist/assets/seed-form-json-DvPsISxD.js.map +0 -1
- package/docs/compilation.md +0 -152
- package/docs/compiler.md +0 -311
- package/docs/contributing.md +0 -56
- package/docs/design-principles.md +0 -244
- package/docs/schema-exchange.md +0 -173
- package/docs/self-test.md +0 -106
- package/docs/story.md +0 -184
|
@@ -36,3 +36,5 @@ __exportStar(require("./ctx-path"), exports);
|
|
|
36
36
|
__exportStar(require("./field-validator"), exports);
|
|
37
37
|
__exportStar(require("./validate-resolver-payload"), exports);
|
|
38
38
|
__exportStar(require("./invoke-context"), exports);
|
|
39
|
+
__exportStar(require("./display-only-widgets"), exports);
|
|
40
|
+
__exportStar(require("./x-lt-invoke"), exports);
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { ResolverValidationContext } from './validate-resolver-payload';
|
|
2
2
|
/**
|
|
3
3
|
* The context an invoke form validates and renders against. The pass itself
|
|
4
|
-
* supplies the live values under `input` and `resolver`; the
|
|
5
|
-
* metadata
|
|
4
|
+
* supplies the live values under `input` and `resolver`; `metadata` is the
|
|
5
|
+
* envelope metadata and `lookup` holds resolved versioned knowledge editions
|
|
6
|
+
* keyed by `as ?? key`. The lookup domain is present only when supplied.
|
|
6
7
|
*/
|
|
7
|
-
export declare function buildInvokeFormContext(metadata: Record<string, unknown> | null | undefined): ResolverValidationContext;
|
|
8
|
+
export declare function buildInvokeFormContext(metadata: Record<string, unknown> | null | undefined, lookup?: Record<string, unknown> | null): ResolverValidationContext;
|
|
@@ -3,9 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.buildInvokeFormContext = buildInvokeFormContext;
|
|
4
4
|
/**
|
|
5
5
|
* The context an invoke form validates and renders against. The pass itself
|
|
6
|
-
* supplies the live values under `input` and `resolver`; the
|
|
7
|
-
* metadata
|
|
6
|
+
* supplies the live values under `input` and `resolver`; `metadata` is the
|
|
7
|
+
* envelope metadata and `lookup` holds resolved versioned knowledge editions
|
|
8
|
+
* keyed by `as ?? key`. The lookup domain is present only when supplied.
|
|
8
9
|
*/
|
|
9
|
-
function buildInvokeFormContext(metadata) {
|
|
10
|
-
return { metadata: metadata ?? {} };
|
|
10
|
+
function buildInvokeFormContext(metadata, lookup) {
|
|
11
|
+
return { metadata: metadata ?? {}, ...(lookup ? { lookup } : {}) };
|
|
11
12
|
}
|
|
@@ -1,16 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* x-lt-bind — maps the escalation FORM (flat field values the user edits) to and
|
|
3
|
-
* from the PAYLOAD (the nested JSON the workflow consumes). A form_schema property
|
|
4
|
-
* may declare `x-lt-bind: "a.b[0].c"`, the path its value occupies in the payload;
|
|
5
|
-
* a property with no bind sits at its own name at the root (1:1). This module is
|
|
6
|
-
* isomorphic — the dashboard renders forms with it, and the API layer inverts a
|
|
7
|
-
* submitted payload through it to validate against the form contract. One
|
|
8
|
-
* implementation, both sides.
|
|
9
|
-
*
|
|
10
|
-
* mapPayloadToForm — payload → flat form values, to PREFILL/display the form
|
|
11
|
-
* (server-side: to validate a submitted payload)
|
|
12
|
-
* mapFormToPayload — flat form values → payload, the shape submitted/stored
|
|
13
|
-
*/
|
|
14
1
|
type PathSeg = {
|
|
15
2
|
key: string;
|
|
16
3
|
} | {
|
|
@@ -27,7 +14,8 @@ export declare function bindPathFor(propName: string, propDef: Record<string, an
|
|
|
27
14
|
/**
|
|
28
15
|
* Assemble the payload from the form's flat values. A field absent from
|
|
29
16
|
* `formValues` is omitted (so clearing/deleting a field drops it from the
|
|
30
|
-
* payload). Unknown keys not declared in the schema are dropped
|
|
17
|
+
* payload). Unknown keys not declared in the schema are dropped, and so are
|
|
18
|
+
* display-only widget fields, which carry no answer. With no schema
|
|
31
19
|
* properties, values pass through unchanged.
|
|
32
20
|
*/
|
|
33
21
|
export declare function mapFormToPayload(formValues: Record<string, any>, formSchema: Record<string, any> | null | undefined): Record<string, any>;
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parsePath = parsePath;
|
|
4
|
+
exports.setDeep = setDeep;
|
|
5
|
+
exports.getDeep = getDeep;
|
|
6
|
+
exports.bindPathFor = bindPathFor;
|
|
7
|
+
exports.mapFormToPayload = mapFormToPayload;
|
|
8
|
+
exports.mapPayloadToForm = mapPayloadToForm;
|
|
2
9
|
/**
|
|
3
10
|
* x-lt-bind — maps the escalation FORM (flat field values the user edits) to and
|
|
4
11
|
* from the PAYLOAD (the nested JSON the workflow consumes). A form_schema property
|
|
@@ -12,13 +19,7 @@
|
|
|
12
19
|
* (server-side: to validate a submitted payload)
|
|
13
20
|
* mapFormToPayload — flat form values → payload, the shape submitted/stored
|
|
14
21
|
*/
|
|
15
|
-
|
|
16
|
-
exports.parsePath = parsePath;
|
|
17
|
-
exports.setDeep = setDeep;
|
|
18
|
-
exports.getDeep = getDeep;
|
|
19
|
-
exports.bindPathFor = bindPathFor;
|
|
20
|
-
exports.mapFormToPayload = mapFormToPayload;
|
|
21
|
-
exports.mapPayloadToForm = mapPayloadToForm;
|
|
22
|
+
const display_only_widgets_1 = require("./display-only-widgets");
|
|
22
23
|
const BLOCKED_KEYS = new Set(['__proto__', 'constructor', 'prototype']);
|
|
23
24
|
/** Parse a bind path — dot keys with optional `[n]` indices. Rejects pollution keys. */
|
|
24
25
|
function parsePath(path) {
|
|
@@ -75,7 +76,8 @@ function bindPathFor(propName, propDef) {
|
|
|
75
76
|
/**
|
|
76
77
|
* Assemble the payload from the form's flat values. A field absent from
|
|
77
78
|
* `formValues` is omitted (so clearing/deleting a field drops it from the
|
|
78
|
-
* payload). Unknown keys not declared in the schema are dropped
|
|
79
|
+
* payload). Unknown keys not declared in the schema are dropped, and so are
|
|
80
|
+
* display-only widget fields, which carry no answer. With no schema
|
|
79
81
|
* properties, values pass through unchanged.
|
|
80
82
|
*/
|
|
81
83
|
function mapFormToPayload(formValues, formSchema) {
|
|
@@ -86,6 +88,8 @@ function mapFormToPayload(formValues, formSchema) {
|
|
|
86
88
|
for (const [name, def] of Object.entries(props)) {
|
|
87
89
|
if (!(name in formValues))
|
|
88
90
|
continue;
|
|
91
|
+
if ((0, display_only_widgets_1.isDisplayOnlyField)(def))
|
|
92
|
+
continue;
|
|
89
93
|
setDeep(payload, bindPathFor(name, def), formValues[name]);
|
|
90
94
|
}
|
|
91
95
|
return payload;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export declare const X_LT_INVOKE = "x-lt-invoke";
|
|
2
|
+
export declare const INVOKE_WIDGET: "invoke";
|
|
3
|
+
export declare const INVOKE_VARIANTS: {
|
|
4
|
+
readonly LINK: "link";
|
|
5
|
+
readonly BUTTON: "button";
|
|
6
|
+
};
|
|
7
|
+
export type InvokeVariant = (typeof INVOKE_VARIANTS)[keyof typeof INVOKE_VARIANTS];
|
|
8
|
+
export interface InvokeConfig {
|
|
9
|
+
/** The workflow_type to start. */
|
|
10
|
+
workflow: string;
|
|
11
|
+
/** Nested invoke `data` template; leaves interpolate against the context. */
|
|
12
|
+
data: Record<string, unknown>;
|
|
13
|
+
/** Extra run metadata template, merged over the workflow's declared metadata. */
|
|
14
|
+
metadata: Record<string, unknown>;
|
|
15
|
+
/** Open the workflow's input form prefilled instead of posting directly. */
|
|
16
|
+
modal: boolean;
|
|
17
|
+
/** Direct mode only: a prompt to confirm before posting; tokens interpolate. */
|
|
18
|
+
confirm: string | null;
|
|
19
|
+
variant: InvokeVariant;
|
|
20
|
+
/** Lead the label with the workflow's registered icon. */
|
|
21
|
+
icon: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface InvokePayload {
|
|
24
|
+
data: Record<string, unknown>;
|
|
25
|
+
metadata: Record<string, unknown>;
|
|
26
|
+
}
|
|
27
|
+
type Ctx = Record<string, unknown> | null | undefined;
|
|
28
|
+
/** The field's invoke declaration, or null when it names no workflow. */
|
|
29
|
+
export declare function readInvokeConfig(fieldSchema: Record<string, unknown> | null | undefined): InvokeConfig | null;
|
|
30
|
+
/**
|
|
31
|
+
* Resolve one template value against the context, keeping the type of a
|
|
32
|
+
* whole-token leaf. Returns undefined for a token with no value so the
|
|
33
|
+
* caller omits the key.
|
|
34
|
+
*/
|
|
35
|
+
export declare function interpolateInvokeValue(value: unknown, ctx: Ctx): unknown;
|
|
36
|
+
/** The invoke payload for one context: `data` and `metadata` fully resolved. */
|
|
37
|
+
export declare function resolveInvokePayload(config: InvokeConfig, ctx: Ctx): InvokePayload;
|
|
38
|
+
export {};
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.INVOKE_VARIANTS = exports.INVOKE_WIDGET = exports.X_LT_INVOKE = void 0;
|
|
4
|
+
exports.readInvokeConfig = readInvokeConfig;
|
|
5
|
+
exports.interpolateInvokeValue = interpolateInvokeValue;
|
|
6
|
+
exports.resolveInvokePayload = resolveInvokePayload;
|
|
7
|
+
/**
|
|
8
|
+
* x-lt-invoke: start a workflow from inside a form. A display-only field
|
|
9
|
+
* declares the target workflow and how the form's context maps into the
|
|
10
|
+
* invoke payload:
|
|
11
|
+
*
|
|
12
|
+
* "x-lt-widget": "invoke",
|
|
13
|
+
* "x-lt-invoke": {
|
|
14
|
+
* "workflow": "printPamphlet",
|
|
15
|
+
* "data": { "order": { "id": "{{metadata.orderId}}" }, "copies": 1 },
|
|
16
|
+
* "metadata": { "escalationId": "{{escalation.id}}" },
|
|
17
|
+
* "modal": true,
|
|
18
|
+
* "confirm": "Print a pamphlet for {{metadata.orderId}}?",
|
|
19
|
+
* "variant": "link",
|
|
20
|
+
* "icon": true
|
|
21
|
+
* }
|
|
22
|
+
*
|
|
23
|
+
* `data` is the nested payload the invoke API receives. In direct mode it is
|
|
24
|
+
* posted as resolved; in modal mode it prefills the workflow's own input form
|
|
25
|
+
* through the x-lt-bind inversion. One declaration serves both.
|
|
26
|
+
*
|
|
27
|
+
* Interpolation keeps types: a leaf that is exactly one `{{domain.path}}`
|
|
28
|
+
* token becomes the raw context value (a number stays a number); a leaf that
|
|
29
|
+
* mixes text and tokens becomes a string; a token with no value drops its key
|
|
30
|
+
* so the target's own defaults apply. Objects and arrays recurse; every other
|
|
31
|
+
* leaf passes through unchanged.
|
|
32
|
+
*/
|
|
33
|
+
const display_only_widgets_1 = require("./display-only-widgets");
|
|
34
|
+
const ctx_path_1 = require("./ctx-path");
|
|
35
|
+
exports.X_LT_INVOKE = 'x-lt-invoke';
|
|
36
|
+
exports.INVOKE_WIDGET = display_only_widgets_1.DISPLAY_ONLY_WIDGET_NAMES.INVOKE;
|
|
37
|
+
exports.INVOKE_VARIANTS = {
|
|
38
|
+
LINK: 'link',
|
|
39
|
+
BUTTON: 'button',
|
|
40
|
+
};
|
|
41
|
+
const WHOLE_TOKEN_PATTERN = /^\{\{\s*([^{}]+?)\s*\}\}$/;
|
|
42
|
+
function isPlainObject(value) {
|
|
43
|
+
return !!value && typeof value === 'object' && !Array.isArray(value);
|
|
44
|
+
}
|
|
45
|
+
function isVariant(value) {
|
|
46
|
+
return value === exports.INVOKE_VARIANTS.LINK || value === exports.INVOKE_VARIANTS.BUTTON;
|
|
47
|
+
}
|
|
48
|
+
/** The field's invoke declaration, or null when it names no workflow. */
|
|
49
|
+
function readInvokeConfig(fieldSchema) {
|
|
50
|
+
const raw = fieldSchema?.[exports.X_LT_INVOKE];
|
|
51
|
+
if (!isPlainObject(raw))
|
|
52
|
+
return null;
|
|
53
|
+
const workflow = raw.workflow;
|
|
54
|
+
if (typeof workflow !== 'string' || workflow.trim().length === 0)
|
|
55
|
+
return null;
|
|
56
|
+
const confirm = raw.confirm;
|
|
57
|
+
return {
|
|
58
|
+
workflow: workflow.trim(),
|
|
59
|
+
data: isPlainObject(raw.data) ? raw.data : {},
|
|
60
|
+
metadata: isPlainObject(raw.metadata) ? raw.metadata : {},
|
|
61
|
+
modal: raw.modal === true,
|
|
62
|
+
confirm: typeof confirm === 'string' && confirm.trim().length > 0 ? confirm : null,
|
|
63
|
+
variant: isVariant(raw.variant) ? raw.variant : exports.INVOKE_VARIANTS.LINK,
|
|
64
|
+
icon: raw.icon !== false,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Resolve one template value against the context, keeping the type of a
|
|
69
|
+
* whole-token leaf. Returns undefined for a token with no value so the
|
|
70
|
+
* caller omits the key.
|
|
71
|
+
*/
|
|
72
|
+
function interpolateInvokeValue(value, ctx) {
|
|
73
|
+
if (typeof value === 'string') {
|
|
74
|
+
const whole = WHOLE_TOKEN_PATTERN.exec(value);
|
|
75
|
+
if (whole) {
|
|
76
|
+
const resolved = (0, ctx_path_1.resolveCtxPath)(whole[1], ctx ?? undefined);
|
|
77
|
+
return resolved === null ? undefined : resolved;
|
|
78
|
+
}
|
|
79
|
+
if ((0, ctx_path_1.hasInterpolation)(value))
|
|
80
|
+
return (0, ctx_path_1.interpolatePath)(value, ctx ?? undefined) ?? undefined;
|
|
81
|
+
return value;
|
|
82
|
+
}
|
|
83
|
+
if (Array.isArray(value)) {
|
|
84
|
+
return value.map((v) => interpolateInvokeValue(v, ctx)).filter((v) => v !== undefined);
|
|
85
|
+
}
|
|
86
|
+
if (isPlainObject(value)) {
|
|
87
|
+
const out = {};
|
|
88
|
+
for (const [key, v] of Object.entries(value)) {
|
|
89
|
+
const resolved = interpolateInvokeValue(v, ctx);
|
|
90
|
+
if (resolved !== undefined)
|
|
91
|
+
out[key] = resolved;
|
|
92
|
+
}
|
|
93
|
+
return out;
|
|
94
|
+
}
|
|
95
|
+
return value;
|
|
96
|
+
}
|
|
97
|
+
/** The invoke payload for one context: `data` and `metadata` fully resolved. */
|
|
98
|
+
function resolveInvokePayload(config, ctx) {
|
|
99
|
+
return {
|
|
100
|
+
data: interpolateInvokeValue(config.data, ctx),
|
|
101
|
+
metadata: interpolateInvokeValue(config.metadata, ctx),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
export declare const X_LT_OPTIONS = "x-lt-options";
|
|
2
|
-
export type OptionValue = string | number;
|
|
2
|
+
export type OptionValue = string | number | boolean;
|
|
3
3
|
/** One resolved option: the payload value and the rendered label. */
|
|
4
4
|
export interface ResolvedOption {
|
|
5
5
|
value: OptionValue;
|
|
6
6
|
label: string;
|
|
7
7
|
}
|
|
8
8
|
/**
|
|
9
|
-
* The field's effective option list: the static `enum` when present, else
|
|
10
|
-
* entries at the token's `"domain.path"`.
|
|
9
|
+
* The field's effective option list: the static `enum` when present, else an
|
|
10
|
+
* inline literal list, else the entries at the token's `"domain.path"`.
|
|
11
11
|
*/
|
|
12
12
|
export declare function resolveFieldOptions(fieldSchema: Record<string, unknown> | null | undefined, ctx: Record<string, unknown> | undefined): ResolvedOption[] | undefined;
|
|
@@ -10,7 +10,9 @@ exports.resolveFieldOptions = resolveFieldOptions;
|
|
|
10
10
|
* offer a different legal set per escalation (e.g. `[1..N]` where N rides the
|
|
11
11
|
* envelope, or a versioned knowledge lookup under the `lookup` domain).
|
|
12
12
|
*
|
|
13
|
-
* x-lt-options "domain.path"
|
|
13
|
+
* x-lt-options "domain.path", an ORDERED array of paths, or an inline
|
|
14
|
+
* literal list (an array with no string entries: `{ value,
|
|
15
|
+
* label }` objects, numbers, or booleans) — e.g.
|
|
14
16
|
* "envelope.left_quantity_options" or
|
|
15
17
|
* ["lookup.reasons.items", "envelope.reject_reason_items"].
|
|
16
18
|
* With an array, the first entry that resolves to options
|
|
@@ -42,7 +44,15 @@ exports.resolveFieldOptions = resolveFieldOptions;
|
|
|
42
44
|
const ctx_path_1 = require("./ctx-path");
|
|
43
45
|
exports.X_LT_OPTIONS = 'x-lt-options';
|
|
44
46
|
function isScalar(v) {
|
|
45
|
-
return typeof v === 'string' || (typeof v === 'number' && Number.isFinite(v));
|
|
47
|
+
return typeof v === 'string' || typeof v === 'boolean' || (typeof v === 'number' && Number.isFinite(v));
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* An array token with no string entries is the option list itself, written
|
|
51
|
+
* inline. A bare string is always a context path, so a literal string value
|
|
52
|
+
* is written as `{ value, label }`.
|
|
53
|
+
*/
|
|
54
|
+
function isLiteralList(token) {
|
|
55
|
+
return Array.isArray(token) && token.length > 0 && !token.some((e) => typeof e === 'string');
|
|
46
56
|
}
|
|
47
57
|
/** Normalize one array entry, mixed arrays resolving each entry independently. */
|
|
48
58
|
function toOption(entry) {
|
|
@@ -58,19 +68,23 @@ function toOption(entry) {
|
|
|
58
68
|
return null;
|
|
59
69
|
}
|
|
60
70
|
/**
|
|
61
|
-
* The field's effective option list: the static `enum` when present, else
|
|
62
|
-
* entries at the token's `"domain.path"`.
|
|
71
|
+
* The field's effective option list: the static `enum` when present, else an
|
|
72
|
+
* inline literal list, else the entries at the token's `"domain.path"`.
|
|
63
73
|
*/
|
|
64
74
|
function resolveFieldOptions(fieldSchema, ctx) {
|
|
65
75
|
if (!fieldSchema)
|
|
66
76
|
return undefined;
|
|
67
77
|
// Enum entries pass through verbatim as values (whatever their type), each
|
|
68
|
-
// labeled by its string form
|
|
78
|
+
// labeled by its string form.
|
|
69
79
|
const staticEnum = fieldSchema.enum;
|
|
70
80
|
if (Array.isArray(staticEnum) && staticEnum.length > 0) {
|
|
71
81
|
return staticEnum.map((v) => ({ value: v, label: String(v) }));
|
|
72
82
|
}
|
|
73
83
|
const token = fieldSchema[exports.X_LT_OPTIONS];
|
|
84
|
+
if (isLiteralList(token)) {
|
|
85
|
+
const options = token.map(toOption).filter((o) => o !== null);
|
|
86
|
+
return options.length > 0 ? options : undefined;
|
|
87
|
+
}
|
|
74
88
|
const paths = (typeof token === 'string' ? [token] : Array.isArray(token) ? token : [])
|
|
75
89
|
.filter((p) => typeof p === 'string' && p.length > 0);
|
|
76
90
|
if (paths.length === 0)
|
|
@@ -6,3 +6,8 @@ export type ShowIfContext = HelpTokenContext;
|
|
|
6
6
|
* An array of conditions shows the field only when every one holds.
|
|
7
7
|
*/
|
|
8
8
|
export declare function evaluateShowIf(condition: unknown, ctx: ShowIfContext | null | undefined): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* `x-lt-hide-if-empty`: the field is suppressed while its value is empty
|
|
11
|
+
* (null, undefined, '', false, or 0). Render and validation share this test.
|
|
12
|
+
*/
|
|
13
|
+
export declare function isHiddenIfEmpty(fieldSchema: Record<string, unknown> | undefined, value: unknown): boolean;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.evaluateShowIf = evaluateShowIf;
|
|
4
|
+
exports.isHiddenIfEmpty = isHiddenIfEmpty;
|
|
4
5
|
/**
|
|
5
6
|
* x-lt-showIf — conditional field visibility. A form_schema property may
|
|
6
7
|
* declare `x-lt-showIf: "domain.path"` to show the field only when the value
|
|
@@ -85,3 +86,12 @@ function evaluateShowIf(condition, ctx) {
|
|
|
85
86
|
return true;
|
|
86
87
|
return negate ? !isTruthy(value) : isTruthy(value);
|
|
87
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* `x-lt-hide-if-empty`: the field is suppressed while its value is empty
|
|
91
|
+
* (null, undefined, '', false, or 0). Render and validation share this test.
|
|
92
|
+
*/
|
|
93
|
+
function isHiddenIfEmpty(fieldSchema, value) {
|
|
94
|
+
if (fieldSchema?.['x-lt-hide-if-empty'] !== true)
|
|
95
|
+
return false;
|
|
96
|
+
return value === null || value === undefined || value === '' || value === false || value === 0;
|
|
97
|
+
}
|
package/build/start/workers.js
CHANGED
|
@@ -51,6 +51,8 @@ const mcp_1 = require("../services/mcp");
|
|
|
51
51
|
const yamlWorkflowWorkers = __importStar(require("../services/yaml-workflow/workers"));
|
|
52
52
|
const migrate_1 = require("../lib/db/migrate");
|
|
53
53
|
const apply_report_1 = require("./apply-report");
|
|
54
|
+
const escalation_2 = require("../types/escalation");
|
|
55
|
+
const lookup_refs_1 = require("../services/knowledge/lookup-refs");
|
|
54
56
|
/**
|
|
55
57
|
* Create a named no-op workflow function for readonly/observer workers.
|
|
56
58
|
* The function name is used by `registerWorker` for discovery.
|
|
@@ -221,6 +223,13 @@ async function startWorkers(startConfig, workers, builtinMcpServerFactories) {
|
|
|
221
223
|
for (const w of workersWithConfig) {
|
|
222
224
|
const workflowType = w.workflow.name;
|
|
223
225
|
const c = w.config;
|
|
226
|
+
if (c.inputLookups !== undefined) {
|
|
227
|
+
(0, escalation_2.assertLookupRefs)(c.inputLookups);
|
|
228
|
+
// Editions may be seeded after registration; a missing pin warns here and surfaces on the Invoke Tool page.
|
|
229
|
+
for (const problem of await (0, lookup_refs_1.describeMissingLookupRefs)(c.inputLookups)) {
|
|
230
|
+
logger_1.loggerRegistry.warn(`[long-tail] ${workflowType}: ${problem}`);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
224
233
|
const declaration = {
|
|
225
234
|
workflow_type: workflowType,
|
|
226
235
|
task_queue: w.taskQueue,
|
|
@@ -235,6 +244,7 @@ async function startWorkers(startConfig, workers, builtinMcpServerFactories) {
|
|
|
235
244
|
envelope_schema: c.envelopeSchema ?? null,
|
|
236
245
|
input_schema: c.inputSchema ?? null,
|
|
237
246
|
icon: c.icon ?? null,
|
|
247
|
+
input_lookups: c.inputLookups ?? null,
|
|
238
248
|
resolver_schema: c.resolverSchema ?? null,
|
|
239
249
|
cron_schedule: c.cronSchedule ?? null,
|
|
240
250
|
execute_as: c.executeAs ?? null,
|
|
@@ -218,6 +218,45 @@ function registerEscalationTools(server) {
|
|
|
218
218
|
}
|
|
219
219
|
return { content: [{ type: 'text', text: JSON.stringify(result.data) }] };
|
|
220
220
|
});
|
|
221
|
+
// mirrors POST /api/escalations/:id/accumulate
|
|
222
|
+
server.registerTool('accumulate_item', {
|
|
223
|
+
title: 'Accumulate Item',
|
|
224
|
+
description: 'Add ONE item to an open accumulator escalation. Interim adds answer outcome "accepted" with the ' +
|
|
225
|
+
'count held and remaining slots; the add that reaches max completes the row and wakes the waiting ' +
|
|
226
|
+
'workflow with the ordered collection. A reciprocal row is written in the same statement, both or neither.',
|
|
227
|
+
inputSchema: schemas_1.accumulateItemSchema,
|
|
228
|
+
}, async (args) => {
|
|
229
|
+
const result = await escalationApi.accumulateItem({ id: args.id, itemKey: args.itemKey, payload: args.payload, metadata: args.metadata, reciprocal: args.reciprocal }, await systemAuth());
|
|
230
|
+
if (result.error) {
|
|
231
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error, ...(result.data ?? {}) }) }], isError: true };
|
|
232
|
+
}
|
|
233
|
+
return { content: [{ type: 'text', text: JSON.stringify(result.data) }] };
|
|
234
|
+
});
|
|
235
|
+
// mirrors POST /api/escalations/:id/remove-item
|
|
236
|
+
server.registerTool('remove_item', {
|
|
237
|
+
title: 'Remove Item',
|
|
238
|
+
description: 'Remove ONE held item from a pending open accumulator escalation. The row stays pending and the ' +
|
|
239
|
+
'waiting workflow is never woken.',
|
|
240
|
+
inputSchema: schemas_1.removeItemSchema,
|
|
241
|
+
}, async (args) => {
|
|
242
|
+
const result = await escalationApi.removeItem({ id: args.id, itemKey: args.itemKey, reciprocal: args.reciprocal }, await systemAuth());
|
|
243
|
+
if (result.error) {
|
|
244
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error, ...(result.data ?? {}) }) }], isError: true };
|
|
245
|
+
}
|
|
246
|
+
return { content: [{ type: 'text', text: JSON.stringify(result.data) }] };
|
|
247
|
+
});
|
|
248
|
+
// mirrors GET /api/escalations/:id/items
|
|
249
|
+
server.registerTool('get_escalation_items', {
|
|
250
|
+
title: 'Get Escalation Items',
|
|
251
|
+
description: 'The held items of an accumulator or batch escalation in arrival order, with the count and max.',
|
|
252
|
+
inputSchema: schemas_1.getEscalationItemsSchema,
|
|
253
|
+
}, async (args) => {
|
|
254
|
+
const result = await escalationApi.getEscalationItems({ id: args.id }, await systemAuth());
|
|
255
|
+
if (result.error) {
|
|
256
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
|
|
257
|
+
}
|
|
258
|
+
return { content: [{ type: 'text', text: JSON.stringify(result.data) }] };
|
|
259
|
+
});
|
|
221
260
|
// mirrors POST /api/escalations/resolve-by-signal-key
|
|
222
261
|
server.registerTool('resolve_by_signal_key', {
|
|
223
262
|
title: 'Resolve by Signal Key',
|