@hotmeshio/long-tail 0.7.1 → 0.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/api/escalations/create.js +30 -9
- package/build/api/roles.d.ts +32 -0
- package/build/api/roles.js +73 -0
- package/build/bin/ltc.js +23 -0
- package/build/lib/cli/commands/roles.d.ts +17 -0
- package/build/lib/cli/commands/roles.js +102 -0
- package/build/lib/db/schemas/017_role_schema_versions.sql +40 -0
- package/build/lib/db/schemas/018_role_upstreams.sql +21 -0
- package/build/routes/roles.js +20 -0
- package/build/scripts/ortho-populate.d.ts +80 -8
- package/build/scripts/ortho-populate.js +204 -52
- package/build/sdk/index.d.ts +2 -0
- package/build/sdk/index.js +2 -0
- package/build/services/orchestrator/condition.d.ts +25 -1
- package/build/services/orchestrator/condition.js +29 -1
- package/build/services/role/index.d.ts +15 -1
- package/build/services/role/index.js +45 -1
- package/build/services/role/sql.d.ts +23 -2
- package/build/services/role/sql.js +93 -16
- package/build/services/role/types.d.ts +41 -0
- package/build/system/mcp-servers/admin/index.js +3 -3
- package/build/system/mcp-servers/admin/schemas.d.ts +25 -2
- package/build/system/mcp-servers/admin/schemas.js +11 -2
- package/build/system/mcp-servers/admin/users.js +42 -0
- package/build/system/mcp-servers/human-queue-schemas.d.ts +6 -0
- package/build/system/mcp-servers/human-queue-schemas.js +4 -0
- package/build/system/mcp-servers/human-queue.js +10 -2
- package/build/system/seed/tool-manifests-admin.d.ts +371 -0
- package/build/system/seed/tool-manifests-admin.js +3 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/escalation.d.ts +16 -0
- package/build/types/escalation.js +17 -0
- package/dashboard/dist/assets/{AdminDashboard-Bg1HgukI.js → AdminDashboard-C9eE1VEp.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-Bg1HgukI.js.map → AdminDashboard-C9eE1VEp.js.map} +1 -1
- package/dashboard/dist/assets/{AgentConfigPage-HBe_YDU_.js → AgentConfigPage-Ba8QfXM2.js} +2 -2
- package/dashboard/dist/assets/{AgentConfigPage-HBe_YDU_.js.map → AgentConfigPage-Ba8QfXM2.js.map} +1 -1
- package/dashboard/dist/assets/{AgentDetailPage-BsaiYbwL.js → AgentDetailPage-DVmec0CP.js} +2 -2
- package/dashboard/dist/assets/{AgentDetailPage-BsaiYbwL.js.map → AgentDetailPage-DVmec0CP.js.map} +1 -1
- package/dashboard/dist/assets/{AgentsPage-DhN2lIBh.js → AgentsPage-DNiCYMh3.js} +2 -2
- package/dashboard/dist/assets/{AgentsPage-DhN2lIBh.js.map → AgentsPage-DNiCYMh3.js.map} +1 -1
- package/dashboard/dist/assets/{AvailableEscalationsPage-_xcWvlIz.js → AvailableEscalationsPage-gDIF8ocC.js} +2 -2
- package/dashboard/dist/assets/{AvailableEscalationsPage-_xcWvlIz.js.map → AvailableEscalationsPage-gDIF8ocC.js.map} +1 -1
- package/dashboard/dist/assets/{BotPicker-DY6iUVC9.js → BotPicker-3wBcBavT.js} +2 -2
- package/dashboard/dist/assets/{BotPicker-DY6iUVC9.js.map → BotPicker-3wBcBavT.js.map} +1 -1
- package/dashboard/dist/assets/{CapabilitiesPage-w1owqsmN.js → CapabilitiesPage-WoPkND2y.js} +2 -2
- package/dashboard/dist/assets/{CapabilitiesPage-w1owqsmN.js.map → CapabilitiesPage-WoPkND2y.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-DIMGjlJ-.js → CollapsibleSection-Cx99mqNN.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-DIMGjlJ-.js.map → CollapsibleSection-Cx99mqNN.js.map} +1 -1
- package/dashboard/dist/assets/{CredentialsPage-D1OmMHux.js → CredentialsPage-DbNaoPbF.js} +2 -2
- package/dashboard/dist/assets/{CredentialsPage-D1OmMHux.js.map → CredentialsPage-DbNaoPbF.js.map} +1 -1
- package/dashboard/dist/assets/{CronLabel-CQy3DrUQ.js → CronLabel-DLW4_Zg4.js} +2 -2
- package/dashboard/dist/assets/{CronLabel-CQy3DrUQ.js.map → CronLabel-DLW4_Zg4.js.map} +1 -1
- package/dashboard/dist/assets/{CustomDurationPicker-BoBkl9tw.js → CustomDurationPicker-BRUFjkiu.js} +2 -2
- package/dashboard/dist/assets/{CustomDurationPicker-BoBkl9tw.js.map → CustomDurationPicker-BRUFjkiu.js.map} +1 -1
- package/dashboard/dist/assets/{DropZone-QXbiuU0b.js → DropZone-DEX0BBqt.js} +2 -2
- package/dashboard/dist/assets/{DropZone-QXbiuU0b.js.map → DropZone-DEX0BBqt.js.map} +1 -1
- package/dashboard/dist/assets/{ElapsedCell-Donjm9gT.js → ElapsedCell-BtmDQaym.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-Donjm9gT.js.map → ElapsedCell-BtmDQaym.js.map} +1 -1
- package/dashboard/dist/assets/EscalationSchemaPage-Bm4yBEGN.js +9 -0
- package/dashboard/dist/assets/EscalationSchemaPage-Bm4yBEGN.js.map +1 -0
- package/dashboard/dist/assets/{EscalationsOverview-CvHIJ_GG.js → EscalationsOverview-B3xZwTQA.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-CvHIJ_GG.js.map → EscalationsOverview-B3xZwTQA.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-DpAXMmT3.js → EventTable-Bh9FKXLI.js} +2 -2
- package/dashboard/dist/assets/{EventTable-DpAXMmT3.js.map → EventTable-Bh9FKXLI.js.map} +1 -1
- package/dashboard/dist/assets/{GraphInvokePage-De1XVx5d.js → GraphInvokePage-ov_ANlaE.js} +2 -2
- package/dashboard/dist/assets/{GraphInvokePage-De1XVx5d.js.map → GraphInvokePage-ov_ANlaE.js.map} +1 -1
- package/dashboard/dist/assets/{HomePage-BYR5VXXw.js → HomePage-D0DV6izb.js} +2 -2
- package/dashboard/dist/assets/{HomePage-BYR5VXXw.js.map → HomePage-D0DV6izb.js.map} +1 -1
- package/dashboard/dist/assets/{ListToolbar-Bx7jGzPA.js → ListToolbar-FpcvqNkN.js} +2 -2
- package/dashboard/dist/assets/{ListToolbar-Bx7jGzPA.js.map → ListToolbar-FpcvqNkN.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-DXRKcJN0.js → McpOverview-DcuRiAff.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-DXRKcJN0.js.map → McpOverview-DcuRiAff.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryDetailPage-CmW15w5e.js → McpQueryDetailPage-BcYl67KP.js} +2 -2
- package/dashboard/dist/assets/{McpQueryDetailPage-CmW15w5e.js.map → McpQueryDetailPage-BcYl67KP.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryPage-BE6I011z.js → McpQueryPage-C3GDzqZM.js} +2 -2
- package/dashboard/dist/assets/{McpQueryPage-BE6I011z.js.map → McpQueryPage-C3GDzqZM.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunDetailPage-Dsa3G3XQ.js → McpRunDetailPage-SzOyhDBW.js} +2 -2
- package/dashboard/dist/assets/{McpRunDetailPage-Dsa3G3XQ.js.map → McpRunDetailPage-SzOyhDBW.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunsPage-uTbym66Y.js → McpRunsPage-BwgB6mRV.js} +2 -2
- package/dashboard/dist/assets/{McpRunsPage-uTbym66Y.js.map → McpRunsPage-BwgB6mRV.js.map} +1 -1
- package/dashboard/dist/assets/{NamespacePill-BGf0jHwE.js → NamespacePill-CwKdoyRM.js} +2 -2
- package/dashboard/dist/assets/{NamespacePill-BGf0jHwE.js.map → NamespacePill-CwKdoyRM.js.map} +1 -1
- package/dashboard/dist/assets/OperationsPage-BCr21p8I.js +2 -0
- package/dashboard/dist/assets/OperationsPage-BCr21p8I.js.map +1 -0
- package/dashboard/dist/assets/{OperatorDashboard-i8cxaDlk.js → OperatorDashboard-DSXh-yYw.js} +2 -2
- package/dashboard/dist/assets/{OperatorDashboard-i8cxaDlk.js.map → OperatorDashboard-DSXh-yYw.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeader-BZJsEVOC.js → PageHeader-BhaWTWcM.js} +2 -2
- package/dashboard/dist/assets/{PageHeader-BZJsEVOC.js.map → PageHeader-BhaWTWcM.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeaderWithStats-BWuD7s9c.js → PageHeaderWithStats-yex5WmHB.js} +2 -2
- package/dashboard/dist/assets/{PageHeaderWithStats-BWuD7s9c.js.map → PageHeaderWithStats-yex5WmHB.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessDetailPage-CP7GZhgs.js → ProcessDetailPage-iIB1rwEt.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-CP7GZhgs.js.map → ProcessDetailPage-iIB1rwEt.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-btsU6hBR.js → ProcessesListPage-BrqWR2zr.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-btsU6hBR.js.map → ProcessesListPage-BrqWR2zr.js.map} +1 -1
- package/dashboard/dist/assets/RoleDetailPage-DS37tJhq.js +11 -0
- package/dashboard/dist/assets/RoleDetailPage-DS37tJhq.js.map +1 -0
- package/dashboard/dist/assets/{RolePill-Pb9TKSQN.js → RolePill-Cl71eDUA.js} +2 -2
- package/dashboard/dist/assets/{RolePill-Pb9TKSQN.js.map → RolePill-Cl71eDUA.js.map} +1 -1
- package/dashboard/dist/assets/{RolesPage-1DBoEMsb.js → RolesPage-Bzp9FhAl.js} +2 -2
- package/dashboard/dist/assets/{RolesPage-1DBoEMsb.js.map → RolesPage-Bzp9FhAl.js.map} +1 -1
- package/dashboard/dist/assets/{RunAsSelector-Cp6j3FEY.js → RunAsSelector-DXbHRxQs.js} +2 -2
- package/dashboard/dist/assets/{RunAsSelector-Cp6j3FEY.js.map → RunAsSelector-DXbHRxQs.js.map} +1 -1
- package/dashboard/dist/assets/{StickyPagination-Pr8kawv8.js → StickyPagination-D8XuMSWD.js} +2 -2
- package/dashboard/dist/assets/{StickyPagination-Pr8kawv8.js.map → StickyPagination-D8XuMSWD.js.map} +1 -1
- package/dashboard/dist/assets/{StreamMessageDetail-BqmQ-N3y.js → StreamMessageDetail-D5v95pmz.js} +2 -2
- package/dashboard/dist/assets/{StreamMessageDetail-BqmQ-N3y.js.map → StreamMessageDetail-D5v95pmz.js.map} +1 -1
- package/dashboard/dist/assets/{SwimlaneTimeline-y1YmXrsj.js → SwimlaneTimeline-CUEf2R5R.js} +2 -2
- package/dashboard/dist/assets/{SwimlaneTimeline-y1YmXrsj.js.map → SwimlaneTimeline-CUEf2R5R.js.map} +1 -1
- package/dashboard/dist/assets/{TagInput-Df4myuYF.js → TagInput-B_WQiuer.js} +2 -2
- package/dashboard/dist/assets/{TagInput-Df4myuYF.js.map → TagInput-B_WQiuer.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-CT5rXHK5.js → TaskDetailPage-BJvKNwEe.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-CT5rXHK5.js.map → TaskDetailPage-BJvKNwEe.js.map} +1 -1
- package/dashboard/dist/assets/{TaskQueuePill-YalYdCNo.js → TaskQueuePill-Lgn2obNU.js} +2 -2
- package/dashboard/dist/assets/{TaskQueuePill-YalYdCNo.js.map → TaskQueuePill-Lgn2obNU.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-DOy6JlKS.js → TasksListPage-CM7BWh_h.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-DOy6JlKS.js.map → TasksListPage-CM7BWh_h.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-BAQwZSpq.js → TimeAgo-D1K7xKq5.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-BAQwZSpq.js.map → TimeAgo-D1K7xKq5.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-BK_jufns.js → TimestampCell-7G0echgP.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-BK_jufns.js.map → TimestampCell-7G0echgP.js.map} +1 -1
- package/dashboard/dist/assets/{ToolPill-VGpT6Quy.js → ToolPill-uVqcbHPE.js} +2 -2
- package/dashboard/dist/assets/{ToolPill-VGpT6Quy.js.map → ToolPill-uVqcbHPE.js.map} +1 -1
- package/dashboard/dist/assets/{ToolTestPanel-5PMQyUCe.js → ToolTestPanel-LxuJvURK.js} +2 -2
- package/dashboard/dist/assets/{ToolTestPanel-5PMQyUCe.js.map → ToolTestPanel-LxuJvURK.js.map} +1 -1
- package/dashboard/dist/assets/{TopicDetailPage-Cn1ShfR8.js → TopicDetailPage-JvAX6rrR.js} +2 -2
- package/dashboard/dist/assets/{TopicDetailPage-Cn1ShfR8.js.map → TopicDetailPage-JvAX6rrR.js.map} +1 -1
- package/dashboard/dist/assets/{TopicsPage-D67tjS8L.js → TopicsPage-tFT2AcTz.js} +2 -2
- package/dashboard/dist/assets/{TopicsPage-D67tjS8L.js.map → TopicsPage-tFT2AcTz.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-Dsu1Jk4N.js → UserName-Djz0nmaZ.js} +2 -2
- package/dashboard/dist/assets/{UserName-Dsu1Jk4N.js.map → UserName-Djz0nmaZ.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-BwQoOmUE.js → WorkflowExecutionPage-f53hilbI.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-BwQoOmUE.js.map → WorkflowExecutionPage-f53hilbI.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowPill-pPUqmx6Q.js → WorkflowPill-IDjTRfQ8.js} +2 -2
- package/dashboard/dist/assets/{WorkflowPill-pPUqmx6Q.js.map → WorkflowPill-IDjTRfQ8.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsDashboard-D3z7COgH.js → WorkflowsDashboard-DM9Xe665.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsDashboard-D3z7COgH.js.map → WorkflowsDashboard-DM9Xe665.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-C15JcxyY.js → WorkflowsOverview-CUGSrx9N.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-C15JcxyY.js.map → WorkflowsOverview-CUGSrx9N.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-BYq3t7E-.js → YamlWorkflowDetailPage-B1_yqxAw.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-BYq3t7E-.js.map → YamlWorkflowDetailPage-B1_yqxAw.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowsPage-B44WgwE_.js → YamlWorkflowsPage-NtGvqiu7.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowsPage-B44WgwE_.js.map → YamlWorkflowsPage-NtGvqiu7.js.map} +1 -1
- package/dashboard/dist/assets/{agents-BRmmK6Y9.js → agents-tML6AjDj.js} +2 -2
- package/dashboard/dist/assets/{agents-BRmmK6Y9.js.map → agents-tML6AjDj.js.map} +1 -1
- package/dashboard/dist/assets/{bots-BD75mzGG.js → bots-Cb0WTwhY.js} +2 -2
- package/dashboard/dist/assets/{bots-BD75mzGG.js.map → bots-Cb0WTwhY.js.map} +1 -1
- package/dashboard/dist/assets/{capabilities-DDgC_Kds.js → capabilities-BGZogsi_.js} +2 -2
- package/dashboard/dist/assets/{capabilities-DDgC_Kds.js.map → capabilities-BGZogsi_.js.map} +1 -1
- package/dashboard/dist/assets/{controlplane-BJh12lMv.js → controlplane-B7VJTlZD.js} +2 -2
- package/dashboard/dist/assets/{controlplane-BJh12lMv.js.map → controlplane-B7VJTlZD.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-DIJt2sgn.js → escalation-Bl-SQV_u.js} +2 -2
- package/dashboard/dist/assets/{escalation-DIJt2sgn.js.map → escalation-Bl-SQV_u.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-columns-zl6E94Up.js → escalation-columns-BlJOswRx.js} +2 -2
- package/dashboard/dist/assets/{escalation-columns-zl6E94Up.js.map → escalation-columns-BlJOswRx.js.map} +1 -1
- package/dashboard/dist/assets/{index-BhznDv-4.js → index--WeZDfeN.js} +2 -2
- package/dashboard/dist/assets/{index-BhznDv-4.js.map → index--WeZDfeN.js.map} +1 -1
- package/dashboard/dist/assets/{index-DU7YumVJ.js → index-0o71lRuY.js} +2 -2
- package/dashboard/dist/assets/{index-DU7YumVJ.js.map → index-0o71lRuY.js.map} +1 -1
- package/dashboard/dist/assets/{index-CV4lEd4I.js → index-3A_5CL81.js} +2 -2
- package/dashboard/dist/assets/{index-CV4lEd4I.js.map → index-3A_5CL81.js.map} +1 -1
- package/dashboard/dist/assets/{index-DVVIeBBk.js → index-BorpZbZA.js} +2 -2
- package/dashboard/dist/assets/{index-DVVIeBBk.js.map → index-BorpZbZA.js.map} +1 -1
- package/dashboard/dist/assets/{index-CknKy4RA.js → index-CBv3UxF2.js} +2 -2
- package/dashboard/dist/assets/{index-CknKy4RA.js.map → index-CBv3UxF2.js.map} +1 -1
- package/dashboard/dist/assets/{index-BUbzfEA9.js → index-D0-8byNu.js} +2 -2
- package/dashboard/dist/assets/{index-BUbzfEA9.js.map → index-D0-8byNu.js.map} +1 -1
- package/dashboard/dist/assets/{index-j-C7g_Ej.js → index-DcbEIXit.js} +2 -2
- package/dashboard/dist/assets/{index-j-C7g_Ej.js.map → index-DcbEIXit.js.map} +1 -1
- package/dashboard/dist/assets/{index-DrUkTcn-.js → index-DfDfJivY.js} +2 -2
- package/dashboard/dist/assets/{index-DrUkTcn-.js.map → index-DfDfJivY.js.map} +1 -1
- package/dashboard/dist/assets/{index-CtDf8vvQ.js → index-Dgw1KKpq.js} +9 -9
- package/dashboard/dist/assets/index-Dgw1KKpq.js.map +1 -0
- package/dashboard/dist/assets/index-Il_g7kw5.js +6 -0
- package/dashboard/dist/assets/{index-DccCwyZl.js.map → index-Il_g7kw5.js.map} +1 -1
- package/dashboard/dist/assets/{index-B0kmiSmt.js → index-SCrD3l-K.js} +2 -2
- package/dashboard/dist/assets/{index-B0kmiSmt.js.map → index-SCrD3l-K.js.map} +1 -1
- package/dashboard/dist/assets/{index-CDPBXB4e.js → index-TiKh2Ctj.js} +2 -2
- package/dashboard/dist/assets/{index-CDPBXB4e.js.map → index-TiKh2Ctj.js.map} +1 -1
- package/dashboard/dist/assets/index-Wny0bRgq.css +1 -0
- package/dashboard/dist/assets/{index-CpgV4Kkp.js → index-e97M6GoI.js} +2 -2
- package/dashboard/dist/assets/{index-CpgV4Kkp.js.map → index-e97M6GoI.js.map} +1 -1
- package/dashboard/dist/assets/{knowledge-pNDWACXB.js → knowledge-CDzw4E6q.js} +2 -2
- package/dashboard/dist/assets/{knowledge-pNDWACXB.js.map → knowledge-CDzw4E6q.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-xddLBwUW.js → mcp-D_-NQtnG.js} +2 -2
- package/dashboard/dist/assets/{mcp-xddLBwUW.js.map → mcp-D_-NQtnG.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-CmNjvxTG.js → mcp-query-BqZXdf9A.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-CmNjvxTG.js.map → mcp-query-BqZXdf9A.js.map} +1 -1
- package/dashboard/dist/assets/{pipelines-B05sd2nB.js → pipelines-CNLhgj8b.js} +2 -2
- package/dashboard/dist/assets/{pipelines-B05sd2nB.js.map → pipelines-CNLhgj8b.js.map} +1 -1
- package/dashboard/dist/assets/roles-CFD2eYap.js +2 -0
- package/dashboard/dist/assets/roles-CFD2eYap.js.map +1 -0
- package/dashboard/dist/assets/{tasks-Bm1OKrJA.js → tasks-DcSvF636.js} +2 -2
- package/dashboard/dist/assets/{tasks-Bm1OKrJA.js.map → tasks-DcSvF636.js.map} +1 -1
- package/dashboard/dist/assets/{topics-BVIqtmd4.js → topics-DI8TFSZv.js} +2 -2
- package/dashboard/dist/assets/{topics-BVIqtmd4.js.map → topics-DI8TFSZv.js.map} +1 -1
- package/dashboard/dist/assets/{useEventHooks-_qCzU74s.js → useEventHooks-DcIgMDh3.js} +2 -2
- package/dashboard/dist/assets/{useEventHooks-_qCzU74s.js.map → useEventHooks-DcIgMDh3.js.map} +1 -1
- package/dashboard/dist/assets/{useNamespace-CDnCSFpG.js → useNamespace-C88ZxGoX.js} +2 -2
- package/dashboard/dist/assets/{useNamespace-CDnCSFpG.js.map → useNamespace-C88ZxGoX.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-zrHMhaFM.js → useYamlActivityEvents-D2-yVjJ7.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-zrHMhaFM.js.map → useYamlActivityEvents-D2-yVjJ7.js.map} +1 -1
- package/dashboard/dist/assets/{users-BPBMZg27.js → users-C0WV36X8.js} +2 -2
- package/dashboard/dist/assets/{users-BPBMZg27.js.map → users-C0WV36X8.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-C1zVP_dv.js → vendor-icons-CEWCGPeJ.js} +76 -76
- package/dashboard/dist/assets/vendor-icons-CEWCGPeJ.js.map +1 -0
- package/dashboard/dist/assets/{workflows-CT6nTL1I.js → workflows-CkPv7xk-.js} +2 -2
- package/dashboard/dist/assets/{workflows-CT6nTL1I.js.map → workflows-CkPv7xk-.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-CdfjkOKU.js → yaml-workflows-BjrMQLTK.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-CdfjkOKU.js.map → yaml-workflows-BjrMQLTK.js.map} +1 -1
- package/dashboard/dist/index.html +3 -3
- package/docs/api/http/roles.md +62 -0
- package/docs/api/mcp/admin.md +32 -1
- package/docs/api/mcp/human-queue.md +2 -0
- package/docs/api/sdk/roles.md +39 -0
- package/docs/cli.md +13 -0
- package/docs/dashboard.md +66 -17
- package/docs/data.md +34 -0
- package/docs/hitl-guide.md +25 -3
- package/package.json +2 -2
- package/dashboard/dist/assets/OperationsPage-CAmiFHI6.js +0 -2
- package/dashboard/dist/assets/OperationsPage-CAmiFHI6.js.map +0 -1
- package/dashboard/dist/assets/RoleDetailPage-BB_e330f.js +0 -16
- package/dashboard/dist/assets/RoleDetailPage-BB_e330f.js.map +0 -1
- package/dashboard/dist/assets/index-BRtKQtQZ.css +0 -1
- package/dashboard/dist/assets/index-CtDf8vvQ.js.map +0 -1
- package/dashboard/dist/assets/index-DccCwyZl.js +0 -6
- package/dashboard/dist/assets/roles-bRgaMcdy.js +0 -2
- package/dashboard/dist/assets/roles-bRgaMcdy.js.map +0 -1
- package/dashboard/dist/assets/vendor-icons-C1zVP_dv.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// ─── Escalation chain queries ───────────────────────────────────────────────
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.COUNT_ACTIVE_ESCALATION_REFS = exports.COUNT_WORKFLOW_REFS = exports.COUNT_CHAIN_REFS = exports.COUNT_USER_ROLE_REFS = exports.LIST_ROLES_WITH_DETAILS = exports.GET_ROLE_METADATA_SCHEMA = exports.GET_ROLE_FORM_SCHEMA = exports.UPDATE_ROLE_METADATA = exports.DELETE_ROLE = exports.LIST_ROLES = exports.ENSURE_ROLE_EXISTS = exports.CHECK_ESCALATION_CHAIN_EXISTS = exports.DELETE_ESCALATION_CHAINS_BY_SOURCE = exports.DELETE_ESCALATION_CHAIN = exports.ADD_ESCALATION_CHAIN = exports.INSERT_ESCALATION_CHAIN = exports.GET_ALL_ESCALATION_CHAINS = exports.GET_ESCALATION_TARGETS = void 0;
|
|
4
|
+
exports.COUNT_ACTIVE_ESCALATION_REFS = exports.COUNT_WORKFLOW_REFS = exports.COUNT_CHAIN_REFS = exports.COUNT_USER_ROLE_REFS = exports.LIST_ROLES_WITH_DETAILS = exports.GET_ROLE_SCHEMA_CURRENT = exports.GET_ROLE_SCHEMA_VERSION = exports.LIST_ROLE_SCHEMA_VERSIONS = exports.GET_ROLE_UPSTREAMS = exports.GET_ROLE_METADATA_SCHEMA = exports.GET_ROLE_FORM_SCHEMA = exports.UPDATE_ROLE_METADATA = exports.DELETE_ROLE = exports.LIST_ROLES = exports.ENSURE_ROLE_EXISTS = exports.CHECK_ESCALATION_CHAIN_EXISTS = exports.DELETE_ESCALATION_CHAINS_BY_SOURCE = exports.DELETE_ESCALATION_CHAIN = exports.ADD_ESCALATION_CHAIN = exports.INSERT_ESCALATION_CHAIN = exports.GET_ALL_ESCALATION_CHAINS = exports.GET_ESCALATION_TARGETS = void 0;
|
|
5
5
|
exports.GET_ESCALATION_TARGETS = `
|
|
6
6
|
SELECT target_role
|
|
7
7
|
FROM lt_config_role_escalations
|
|
@@ -55,27 +55,96 @@ exports.DELETE_ROLE = `
|
|
|
55
55
|
* true the paired value is written (null clears; properties resets to '{}').
|
|
56
56
|
* This is what lets the dashboard's per-tab saves and single-field MCP calls
|
|
57
57
|
* coexist on the same row without read-modify-write.
|
|
58
|
+
*
|
|
59
|
+
* Schema versioning rides in the same statement: when a provided form_schema
|
|
60
|
+
* or metadata_schema actually differs from the stored value (IS DISTINCT FROM,
|
|
61
|
+
* evaluated against the pre-update row), current_schema_version advances and
|
|
62
|
+
* the post-update schema pair is snapshotted into lt_role_schemas. A no-change
|
|
63
|
+
* save leaves the version alone and the snapshot INSERT conflicts away.
|
|
64
|
+
* $22 = optional change summary recorded on the snapshot.
|
|
65
|
+
*
|
|
66
|
+
* Upstream inputs ($23 = provided sentinel, $24 = replacement set) sync in the
|
|
67
|
+
* same statement with replace semantics. The two CTEs deliberately avoid
|
|
68
|
+
* touching the same row: the DELETE only removes rows leaving the set, and the
|
|
69
|
+
* INSERT's ON CONFLICT DO NOTHING skips rows that stay (delete+insert of the
|
|
70
|
+
* SAME key in one statement would silently drop it — CTEs share a snapshot).
|
|
58
71
|
*/
|
|
59
72
|
exports.UPDATE_ROLE_METADATA = `
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
WITH updated AS (
|
|
74
|
+
UPDATE lt_roles SET
|
|
75
|
+
title = CASE WHEN $2::boolean THEN $3 ELSE title END,
|
|
76
|
+
description = CASE WHEN $4::boolean THEN $5 ELSE description END,
|
|
77
|
+
form_schema = CASE WHEN $6::boolean THEN $7::jsonb ELSE form_schema END,
|
|
78
|
+
metadata_schema = CASE WHEN $8::boolean THEN $9::jsonb ELSE metadata_schema END,
|
|
79
|
+
properties = CASE WHEN $10::boolean THEN COALESCE($11::jsonb, '{}'::jsonb) ELSE properties END,
|
|
80
|
+
ops_visible = CASE WHEN $12::boolean THEN $13::boolean ELSE ops_visible END,
|
|
81
|
+
parent_role = CASE WHEN $14::boolean THEN $15 ELSE parent_role END,
|
|
82
|
+
sla_minutes = CASE WHEN $16::boolean THEN $17::numeric ELSE sla_minutes END,
|
|
83
|
+
target_per_hour = CASE WHEN $18::boolean THEN $19::numeric ELSE target_per_hour END,
|
|
84
|
+
worker_count = CASE WHEN $20::boolean THEN $21::int ELSE worker_count END,
|
|
85
|
+
current_schema_version = CASE
|
|
86
|
+
WHEN ($6::boolean AND $7::jsonb IS DISTINCT FROM form_schema)
|
|
87
|
+
OR ($8::boolean AND $9::jsonb IS DISTINCT FROM metadata_schema)
|
|
88
|
+
THEN COALESCE(current_schema_version, 0) + 1
|
|
89
|
+
ELSE current_schema_version END
|
|
90
|
+
WHERE role = $1
|
|
91
|
+
RETURNING
|
|
92
|
+
role, title, description, form_schema, metadata_schema, properties,
|
|
93
|
+
ops_visible, parent_role, sla_minutes, target_per_hour, worker_count,
|
|
94
|
+
current_schema_version
|
|
95
|
+
), snapshot AS (
|
|
96
|
+
INSERT INTO lt_role_schemas (role, version, form_schema, metadata_schema, change_summary)
|
|
97
|
+
SELECT role, current_schema_version, form_schema, metadata_schema, $22
|
|
98
|
+
FROM updated
|
|
99
|
+
WHERE ($6::boolean OR $8::boolean) AND current_schema_version IS NOT NULL
|
|
100
|
+
ON CONFLICT (role, version) DO NOTHING
|
|
101
|
+
), upstream_prune AS (
|
|
102
|
+
DELETE FROM lt_role_upstreams
|
|
103
|
+
WHERE $23::boolean AND role = $1 AND upstream_role <> ALL($24::text[])
|
|
104
|
+
), upstream_add AS (
|
|
105
|
+
INSERT INTO lt_role_upstreams (role, upstream_role)
|
|
106
|
+
SELECT $1, u FROM unnest($24::text[]) AS u
|
|
107
|
+
WHERE $23::boolean
|
|
108
|
+
ON CONFLICT DO NOTHING
|
|
109
|
+
)
|
|
110
|
+
SELECT * FROM updated`;
|
|
75
111
|
exports.GET_ROLE_FORM_SCHEMA = `
|
|
76
112
|
SELECT form_schema FROM lt_roles WHERE role = $1`;
|
|
77
113
|
exports.GET_ROLE_METADATA_SCHEMA = `
|
|
78
114
|
SELECT metadata_schema FROM lt_roles WHERE role = $1`;
|
|
115
|
+
exports.GET_ROLE_UPSTREAMS = `
|
|
116
|
+
SELECT upstream_role FROM lt_role_upstreams WHERE role = $1 ORDER BY upstream_role`;
|
|
117
|
+
// ─── Versioned role schemas ─────────────────────────────────────────────────
|
|
118
|
+
exports.LIST_ROLE_SCHEMA_VERSIONS = `
|
|
119
|
+
SELECT
|
|
120
|
+
s.version,
|
|
121
|
+
s.form_schema IS NOT NULL AS has_form_schema,
|
|
122
|
+
s.metadata_schema IS NOT NULL AS has_metadata_schema,
|
|
123
|
+
s.change_summary,
|
|
124
|
+
s.created_at,
|
|
125
|
+
s.version = r.current_schema_version AS is_current
|
|
126
|
+
FROM lt_role_schemas s
|
|
127
|
+
JOIN lt_roles r ON r.role = s.role
|
|
128
|
+
WHERE s.role = $1
|
|
129
|
+
ORDER BY s.version DESC`;
|
|
130
|
+
exports.GET_ROLE_SCHEMA_VERSION = `
|
|
131
|
+
SELECT s.role, s.version, s.form_schema, s.metadata_schema, s.change_summary,
|
|
132
|
+
s.created_at, r.current_schema_version AS latest_version
|
|
133
|
+
FROM lt_role_schemas s
|
|
134
|
+
JOIN lt_roles r ON r.role = s.role
|
|
135
|
+
WHERE s.role = $1 AND s.version = $2`;
|
|
136
|
+
/**
|
|
137
|
+
* Latest schema resolves from the live lt_roles columns (a role that has never
|
|
138
|
+
* versioned its schema still answers, with version NULL).
|
|
139
|
+
*/
|
|
140
|
+
exports.GET_ROLE_SCHEMA_CURRENT = `
|
|
141
|
+
SELECT r.role, r.current_schema_version AS version, r.form_schema,
|
|
142
|
+
r.metadata_schema, s.change_summary, s.created_at,
|
|
143
|
+
r.current_schema_version AS latest_version
|
|
144
|
+
FROM lt_roles r
|
|
145
|
+
LEFT JOIN lt_role_schemas s
|
|
146
|
+
ON s.role = r.role AND s.version = r.current_schema_version
|
|
147
|
+
WHERE r.role = $1`;
|
|
79
148
|
// ─── Role detail aggregation ────────────────────────────────────────────────
|
|
80
149
|
exports.LIST_ROLES_WITH_DETAILS = `
|
|
81
150
|
WITH
|
|
@@ -97,6 +166,11 @@ exports.LIST_ROLES_WITH_DETAILS = `
|
|
|
97
166
|
SELECT role, COUNT(*)::int AS cnt
|
|
98
167
|
FROM lt_config_roles
|
|
99
168
|
GROUP BY role
|
|
169
|
+
),
|
|
170
|
+
upstreams AS (
|
|
171
|
+
SELECT role, array_agg(upstream_role ORDER BY upstream_role) AS ups
|
|
172
|
+
FROM lt_role_upstreams
|
|
173
|
+
GROUP BY role
|
|
100
174
|
)
|
|
101
175
|
SELECT
|
|
102
176
|
r.role,
|
|
@@ -110,6 +184,8 @@ exports.LIST_ROLES_WITH_DETAILS = `
|
|
|
110
184
|
r.sla_minutes,
|
|
111
185
|
r.target_per_hour,
|
|
112
186
|
r.worker_count,
|
|
187
|
+
r.current_schema_version,
|
|
188
|
+
COALESCE(up.ups, '{}') AS upstream_roles,
|
|
113
189
|
COALESCE(uc.cnt, 0) AS user_count,
|
|
114
190
|
COALESCE(cc.cnt, 0) AS chain_count,
|
|
115
191
|
COALESCE(wc.cnt, 0) AS workflow_count
|
|
@@ -117,6 +193,7 @@ exports.LIST_ROLES_WITH_DETAILS = `
|
|
|
117
193
|
LEFT JOIN user_counts uc ON uc.role = r.role
|
|
118
194
|
LEFT JOIN chain_counts cc ON cc.role = r.role
|
|
119
195
|
LEFT JOIN workflow_counts wc ON wc.role = r.role
|
|
196
|
+
LEFT JOIN upstreams up ON up.role = r.role
|
|
120
197
|
ORDER BY r.role`;
|
|
121
198
|
// ─── Reference checks (used before role deletion) ──────────────────────────
|
|
122
199
|
exports.COUNT_USER_ROLE_REFS = `
|
|
@@ -25,10 +25,44 @@ export interface RoleDetail {
|
|
|
25
25
|
target_per_hour: number | null;
|
|
26
26
|
/** Capacity at this station (people or machines). Part of the ops triangle. */
|
|
27
27
|
worker_count: number | null;
|
|
28
|
+
/**
|
|
29
|
+
* Version of the live form_schema/metadata_schema pair. Advances whenever a
|
|
30
|
+
* schema field changes; each version is snapshotted in lt_role_schemas so
|
|
31
|
+
* escalations can pin the exact schema they were created against. Null until
|
|
32
|
+
* the role first carries a schema.
|
|
33
|
+
*/
|
|
34
|
+
current_schema_version: number | null;
|
|
35
|
+
/**
|
|
36
|
+
* Roles this station draws input from that live in OTHER sequences.
|
|
37
|
+
* parent_role is the single "prior step" placing the role in one sequence;
|
|
38
|
+
* upstream inputs are the remaining graph edges (mixin-like, many allowed),
|
|
39
|
+
* rendered on the Operations chart as a merge affordance.
|
|
40
|
+
*/
|
|
41
|
+
upstream_roles: string[];
|
|
28
42
|
user_count: number;
|
|
29
43
|
chain_count: number;
|
|
30
44
|
workflow_count: number;
|
|
31
45
|
}
|
|
46
|
+
/** One immutable snapshot of a role's schema pair. */
|
|
47
|
+
export interface RoleSchemaVersion {
|
|
48
|
+
role: string;
|
|
49
|
+
version: number | null;
|
|
50
|
+
form_schema: Record<string, any> | null;
|
|
51
|
+
metadata_schema: Record<string, any> | null;
|
|
52
|
+
change_summary: string | null;
|
|
53
|
+
created_at: string | null;
|
|
54
|
+
/** The role's current version, so callers can tell a pinned read from the latest. */
|
|
55
|
+
latest_version: number | null;
|
|
56
|
+
}
|
|
57
|
+
/** Listing row for the version history (schemas elided; presence flags only). */
|
|
58
|
+
export interface RoleSchemaVersionSummary {
|
|
59
|
+
version: number;
|
|
60
|
+
has_form_schema: boolean;
|
|
61
|
+
has_metadata_schema: boolean;
|
|
62
|
+
change_summary: string | null;
|
|
63
|
+
created_at: string;
|
|
64
|
+
is_current: boolean;
|
|
65
|
+
}
|
|
32
66
|
export interface UpdateRoleInput {
|
|
33
67
|
title?: string | null;
|
|
34
68
|
description?: string | null;
|
|
@@ -40,4 +74,11 @@ export interface UpdateRoleInput {
|
|
|
40
74
|
sla_minutes?: number | null;
|
|
41
75
|
target_per_hour?: number | null;
|
|
42
76
|
worker_count?: number | null;
|
|
77
|
+
/**
|
|
78
|
+
* Replace the upstream-input set (omitted = preserve; null or [] = clear).
|
|
79
|
+
* Every entry must name an existing role other than this one.
|
|
80
|
+
*/
|
|
81
|
+
upstream_roles?: string[] | null;
|
|
82
|
+
/** Recorded on the schema snapshot when this update changes a schema field. */
|
|
83
|
+
change_summary?: string;
|
|
43
84
|
}
|
|
@@ -56,7 +56,7 @@ const exports_1 = require("./exports");
|
|
|
56
56
|
const overview_1 = require("./overview");
|
|
57
57
|
const diagnostics_1 = require("./diagnostics");
|
|
58
58
|
const ortho_1 = require("./ortho");
|
|
59
|
-
const TOOL_COUNT =
|
|
59
|
+
const TOOL_COUNT = 90;
|
|
60
60
|
let server = null;
|
|
61
61
|
async function createAdminServer(options) {
|
|
62
62
|
if (server && !options?.fresh)
|
|
@@ -72,7 +72,7 @@ async function createAdminServer(options) {
|
|
|
72
72
|
(0, workflows_1.registerWorkflowTools)(instance); // 3 tools
|
|
73
73
|
(0, mcp_servers_1.registerMcpServerTools)(instance); // 4 tools
|
|
74
74
|
(0, yaml_workflows_1.registerYamlWorkflowTools)(instance); // 5 tools
|
|
75
|
-
(0, users_1.registerUserTools)(instance); //
|
|
75
|
+
(0, users_1.registerUserTools)(instance); // 10 tools (users + roles + role schemas)
|
|
76
76
|
(0, maintenance_1.registerMaintenanceTools)(instance); // 1 tool
|
|
77
77
|
(0, agents_1.registerAgentTools)(instance); // 5 tools
|
|
78
78
|
(0, agent_subscriptions_1.registerAgentSubscriptionTools)(instance); // 3 tools
|
|
@@ -85,7 +85,7 @@ async function createAdminServer(options) {
|
|
|
85
85
|
(0, overview_1.registerOverviewTools)(instance); // 1 tool
|
|
86
86
|
(0, diagnostics_1.registerDiagnosticsTools)(instance); // 3 tools
|
|
87
87
|
(0, ortho_1.registerOrthoTools)(instance); // 4 tools
|
|
88
|
-
// Total:
|
|
88
|
+
// Total: 90
|
|
89
89
|
logger_1.loggerRegistry.info(`[lt-mcp:admin] ${name} ready (${TOOL_COUNT} tools registered)`);
|
|
90
90
|
return instance;
|
|
91
91
|
}
|
|
@@ -562,11 +562,13 @@ export declare const updateRoleSchema: z.ZodObject<{
|
|
|
562
562
|
sla_minutes: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
563
563
|
target_per_hour: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
564
564
|
worker_count: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
565
|
+
upstream_roles: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString, "many">>>;
|
|
566
|
+
change_summary: z.ZodOptional<z.ZodString>;
|
|
565
567
|
}, "strip", z.ZodTypeAny, {
|
|
566
568
|
role: string;
|
|
569
|
+
form_schema?: Record<string, any> | null | undefined;
|
|
567
570
|
description?: string | null | undefined;
|
|
568
571
|
title?: string | null | undefined;
|
|
569
|
-
form_schema?: Record<string, any> | null | undefined;
|
|
570
572
|
properties?: Record<string, any> | null | undefined;
|
|
571
573
|
metadata_schema?: Record<string, any> | null | undefined;
|
|
572
574
|
ops_visible?: boolean | undefined;
|
|
@@ -574,11 +576,13 @@ export declare const updateRoleSchema: z.ZodObject<{
|
|
|
574
576
|
sla_minutes?: number | null | undefined;
|
|
575
577
|
target_per_hour?: number | null | undefined;
|
|
576
578
|
worker_count?: number | null | undefined;
|
|
579
|
+
upstream_roles?: string[] | null | undefined;
|
|
580
|
+
change_summary?: string | undefined;
|
|
577
581
|
}, {
|
|
578
582
|
role: string;
|
|
583
|
+
form_schema?: Record<string, any> | null | undefined;
|
|
579
584
|
description?: string | null | undefined;
|
|
580
585
|
title?: string | null | undefined;
|
|
581
|
-
form_schema?: Record<string, any> | null | undefined;
|
|
582
586
|
properties?: Record<string, any> | null | undefined;
|
|
583
587
|
metadata_schema?: Record<string, any> | null | undefined;
|
|
584
588
|
ops_visible?: boolean | undefined;
|
|
@@ -586,6 +590,25 @@ export declare const updateRoleSchema: z.ZodObject<{
|
|
|
586
590
|
sla_minutes?: number | null | undefined;
|
|
587
591
|
target_per_hour?: number | null | undefined;
|
|
588
592
|
worker_count?: number | null | undefined;
|
|
593
|
+
upstream_roles?: string[] | null | undefined;
|
|
594
|
+
change_summary?: string | undefined;
|
|
595
|
+
}>;
|
|
596
|
+
export declare const getRoleSchemaSchema: z.ZodObject<{
|
|
597
|
+
role: z.ZodString;
|
|
598
|
+
version: z.ZodOptional<z.ZodNumber>;
|
|
599
|
+
}, "strip", z.ZodTypeAny, {
|
|
600
|
+
role: string;
|
|
601
|
+
version?: number | undefined;
|
|
602
|
+
}, {
|
|
603
|
+
role: string;
|
|
604
|
+
version?: number | undefined;
|
|
605
|
+
}>;
|
|
606
|
+
export declare const listRoleSchemaVersionsSchema: z.ZodObject<{
|
|
607
|
+
role: z.ZodString;
|
|
608
|
+
}, "strip", z.ZodTypeAny, {
|
|
609
|
+
role: string;
|
|
610
|
+
}, {
|
|
611
|
+
role: string;
|
|
589
612
|
}>;
|
|
590
613
|
export declare const pruneSchema: z.ZodObject<{
|
|
591
614
|
app_id: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.claimByFacetsSchema = exports.claimGroupsSchema = exports.searchByFacetsSchema = exports.resolveByIdsSchema = exports.facetQuerySchema = exports.findOrphanedSignalsSchema = exports.findStalledJobsSchema = exports.diagnoseJobSchema = exports.getExportStatusSchema = exports.exportWorkflowExecutionSchema = exports.exportWorkflowStateSchema = exports.listExportJobsSchema = exports.getSettingsSchema = exports.updatePrioritySchema = exports.bulkEscalateSchema = exports.bulkAssignSchema = exports.bulkClaimSchema = exports.resolveByMetadataSchema = exports.claimByMetadataSchema = exports.findByMetadataSchema = exports.deleteTopicSchema = exports.updateTopicSchema = exports.createTopicSchema = exports.getTopicSchema = exports.listTopicsSchema = exports.interruptJobSchema = exports.getJobExecutionSchema = exports.listPipelineJobsSchema = exports.listPipelineEntitiesSchema = exports.listStreamMessagesSchema = exports.getStreamStatsSchema = exports.applyThrottleSchema = exports.rollCallSchema = exports.listAppsSchema = exports.revokeBotKeySchema = exports.createBotApiKeySchema = exports.deleteBotSchema = exports.updateBotSchema = void 0;
|
|
3
|
+
exports.listBotsSchema = exports.deleteAgentSubscriptionSchema = exports.createAgentSubscriptionSchema = exports.listAgentSubscriptionsSchema = exports.deleteAgentSchema = exports.updateAgentSchema = exports.createAgentSchema = exports.getAgentSchema = exports.listAgentsSchema = exports.pruneSchema = exports.listRoleSchemaVersionsSchema = exports.getRoleSchemaSchema = exports.updateRoleSchema = exports.addEscalationChainSchema = exports.createRoleSchema = exports.listRolesSchema = exports.removeUserRoleSchema = exports.addUserRoleSchema = exports.createUserSchema = exports.listUsersSchema = exports.invokeYamlWorkflowSchema = exports.deployYamlWorkflowSchema = exports.createYamlWorkflowSchema = exports.getYamlWorkflowSchema = exports.listYamlWorkflowsSchema = exports.disconnectMcpServerSchema = exports.connectMcpServerSchema = exports.updateMcpServerSchema = exports.listMcpServersSchema = exports.getWorkflowStatusSchema = exports.invokeWorkflowSchema = exports.listDiscoveredWorkflowsSchema = exports.deleteWorkflowConfigSchema = exports.upsertWorkflowConfigSchema = exports.listWorkflowConfigsSchema = exports.bulkTriageSchema = exports.releaseExpiredClaimsSchema = exports.bulkCancelSchema = exports.cancelEscalationSchema = exports.escalateEscalationSchema = exports.resolveBySignalKeySchema = exports.resolveEscalationSchema = exports.releaseEscalationSchema = exports.claimEscalationSchema = exports.getEscalationStatsSchema = exports.getEscalationsByWorkflowSchema = exports.getEscalationSchema = exports.findEscalationsSchema = exports.getProcessDetailSchema = exports.findTasksSchema = void 0;
|
|
4
|
+
exports.claimByFacetsSchema = exports.claimGroupsSchema = exports.searchByFacetsSchema = exports.resolveByIdsSchema = exports.facetQuerySchema = exports.findOrphanedSignalsSchema = exports.findStalledJobsSchema = exports.diagnoseJobSchema = exports.getExportStatusSchema = exports.exportWorkflowExecutionSchema = exports.exportWorkflowStateSchema = exports.listExportJobsSchema = exports.getSettingsSchema = exports.updatePrioritySchema = exports.bulkEscalateSchema = exports.bulkAssignSchema = exports.bulkClaimSchema = exports.resolveByMetadataSchema = exports.claimByMetadataSchema = exports.findByMetadataSchema = exports.deleteTopicSchema = exports.updateTopicSchema = exports.createTopicSchema = exports.getTopicSchema = exports.listTopicsSchema = exports.interruptJobSchema = exports.getJobExecutionSchema = exports.listPipelineJobsSchema = exports.listPipelineEntitiesSchema = exports.listStreamMessagesSchema = exports.getStreamStatsSchema = exports.applyThrottleSchema = exports.rollCallSchema = exports.listAppsSchema = exports.revokeBotKeySchema = exports.createBotApiKeySchema = exports.deleteBotSchema = exports.updateBotSchema = exports.createBotSchema = exports.getBotSchema = void 0;
|
|
5
5
|
/**
|
|
6
6
|
* Zod schemas for the admin MCP server tools.
|
|
7
7
|
*
|
|
@@ -242,6 +242,15 @@ exports.updateRoleSchema = zod_1.z.object({
|
|
|
242
242
|
sla_minutes: zod_1.z.number().nullable().optional().describe('Target resolution time in minutes. One of the capacity settings: target_per_hour = worker_count / (sla_minutes / 60)'),
|
|
243
243
|
target_per_hour: zod_1.z.number().nullable().optional().describe('Intended throughput (items resolved per hour). Drives the station pace baseline on the Operations view.'),
|
|
244
244
|
worker_count: zod_1.z.number().nullable().optional().describe('Capacity at this station (staff or machine count). One of the capacity settings.'),
|
|
245
|
+
upstream_roles: zod_1.z.array(zod_1.z.string()).nullable().optional().describe('Replace the set of roles this station draws input from across other sequences (parent_role stays the single prior step in its own sequence). Omitted = preserve; null or [] = clear.'),
|
|
246
|
+
change_summary: zod_1.z.string().optional().describe('Recorded on the schema version snapshot when this update changes form_schema or metadata_schema'),
|
|
247
|
+
});
|
|
248
|
+
exports.getRoleSchemaSchema = zod_1.z.object({
|
|
249
|
+
role: zod_1.z.string().describe('Role whose schema to fetch'),
|
|
250
|
+
version: zod_1.z.number().int().min(1).optional().describe('Version pin — returns that immutable snapshot. Omit for the live (latest) schema.'),
|
|
251
|
+
});
|
|
252
|
+
exports.listRoleSchemaVersionsSchema = zod_1.z.object({
|
|
253
|
+
role: zod_1.z.string().describe('Role whose schema version history to list'),
|
|
245
254
|
});
|
|
246
255
|
// ── maintenance (routes/dba.ts) ─────────────────────────────────────────────
|
|
247
256
|
exports.pruneSchema = zod_1.z.object({
|
|
@@ -210,6 +210,8 @@ function registerUserTools(server) {
|
|
|
210
210
|
sla_minutes: args.sla_minutes,
|
|
211
211
|
target_per_hour: args.target_per_hour,
|
|
212
212
|
worker_count: args.worker_count,
|
|
213
|
+
upstream_roles: args.upstream_roles,
|
|
214
|
+
change_summary: args.change_summary,
|
|
213
215
|
});
|
|
214
216
|
if (!updated) {
|
|
215
217
|
return {
|
|
@@ -221,4 +223,44 @@ function registerUserTools(server) {
|
|
|
221
223
|
content: [{ type: 'text', text: JSON.stringify(updated) }],
|
|
222
224
|
};
|
|
223
225
|
});
|
|
226
|
+
// mirrors GET /api/roles/:role/schema
|
|
227
|
+
server.registerTool('get_role_schema', {
|
|
228
|
+
title: 'Get Role Schema',
|
|
229
|
+
description: 'Fetch a role\'s form_schema + metadata_schema pair. Pass version to ' +
|
|
230
|
+
'read that immutable snapshot from the version history (the version an ' +
|
|
231
|
+
'escalation pinned via metadata.schema_version); omit it for the live ' +
|
|
232
|
+
'(latest) schema and its current version number.',
|
|
233
|
+
inputSchema: schemas_1.getRoleSchemaSchema,
|
|
234
|
+
}, async (args) => {
|
|
235
|
+
const schema = await roleService.getRoleSchema(args.role, args.version);
|
|
236
|
+
if (!schema) {
|
|
237
|
+
return {
|
|
238
|
+
content: [{
|
|
239
|
+
type: 'text',
|
|
240
|
+
text: JSON.stringify({
|
|
241
|
+
error: args.version !== undefined
|
|
242
|
+
? `Schema version ${args.version} not found for role '${args.role}'`
|
|
243
|
+
: `Role '${args.role}' not found`,
|
|
244
|
+
}),
|
|
245
|
+
}],
|
|
246
|
+
isError: true,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
return {
|
|
250
|
+
content: [{ type: 'text', text: JSON.stringify(schema) }],
|
|
251
|
+
};
|
|
252
|
+
});
|
|
253
|
+
// mirrors GET /api/roles/:role/schema/versions
|
|
254
|
+
server.registerTool('list_role_schema_versions', {
|
|
255
|
+
title: 'List Role Schema Versions',
|
|
256
|
+
description: 'List a role\'s schema version history, newest first. Each schema edit ' +
|
|
257
|
+
'creates a new version; escalations may pin one via metadata.schema_version. ' +
|
|
258
|
+
'Use get_role_schema with a version for the full snapshot.',
|
|
259
|
+
inputSchema: schemas_1.listRoleSchemaVersionsSchema,
|
|
260
|
+
}, async (args) => {
|
|
261
|
+
const versions = await roleService.listRoleSchemaVersions(args.role);
|
|
262
|
+
return {
|
|
263
|
+
content: [{ type: 'text', text: JSON.stringify({ versions }) }],
|
|
264
|
+
};
|
|
265
|
+
});
|
|
224
266
|
}
|
|
@@ -6,16 +6,19 @@ export declare const escalateSchema: z.ZodObject<{
|
|
|
6
6
|
type: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
7
7
|
subtype: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
8
8
|
priority: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
9
|
+
schema_version: z.ZodOptional<z.ZodNumber>;
|
|
9
10
|
}, "strip", z.ZodTypeAny, {
|
|
10
11
|
role: string;
|
|
11
12
|
type: string;
|
|
12
13
|
message: string;
|
|
13
14
|
priority: number;
|
|
14
15
|
subtype: string;
|
|
16
|
+
schema_version?: number | undefined;
|
|
15
17
|
data?: Record<string, any> | undefined;
|
|
16
18
|
}, {
|
|
17
19
|
role: string;
|
|
18
20
|
message: string;
|
|
21
|
+
schema_version?: number | undefined;
|
|
19
22
|
data?: Record<string, any> | undefined;
|
|
20
23
|
type?: string | undefined;
|
|
21
24
|
priority?: number | undefined;
|
|
@@ -70,6 +73,7 @@ export declare const escalateAndWaitSchema: z.ZodObject<{
|
|
|
70
73
|
type: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
71
74
|
subtype: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
72
75
|
priority: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
76
|
+
schema_version: z.ZodOptional<z.ZodNumber>;
|
|
73
77
|
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
74
78
|
role: z.ZodString;
|
|
75
79
|
message: z.ZodString;
|
|
@@ -79,6 +83,7 @@ export declare const escalateAndWaitSchema: z.ZodObject<{
|
|
|
79
83
|
type: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
80
84
|
subtype: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
81
85
|
priority: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
86
|
+
schema_version: z.ZodOptional<z.ZodNumber>;
|
|
82
87
|
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
83
88
|
role: z.ZodString;
|
|
84
89
|
message: z.ZodString;
|
|
@@ -88,4 +93,5 @@ export declare const escalateAndWaitSchema: z.ZodObject<{
|
|
|
88
93
|
type: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
89
94
|
subtype: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
90
95
|
priority: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
96
|
+
schema_version: z.ZodOptional<z.ZodNumber>;
|
|
91
97
|
}, z.ZodTypeAny, "passthrough">>;
|
|
@@ -11,6 +11,8 @@ exports.escalateSchema = zod_1.z.object({
|
|
|
11
11
|
subtype: zod_1.z.string().optional().default('tool_call').describe('Escalation subtype'),
|
|
12
12
|
priority: zod_1.z.number().min(1).max(4).optional().default(2)
|
|
13
13
|
.describe('Priority: 1 (highest) to 4 (lowest)'),
|
|
14
|
+
schema_version: zod_1.z.number().int().min(1).optional()
|
|
15
|
+
.describe('Pin the role schema version the resolver form renders (defaults to latest)'),
|
|
14
16
|
});
|
|
15
17
|
exports.checkResolutionSchema = zod_1.z.object({
|
|
16
18
|
escalation_id: zod_1.z.string().describe('The escalation ID to check'),
|
|
@@ -39,4 +41,6 @@ exports.escalateAndWaitSchema = zod_1.z.object({
|
|
|
39
41
|
subtype: zod_1.z.string().optional().default('wait_for_human').describe('Escalation subtype'),
|
|
40
42
|
priority: zod_1.z.number().min(1).max(4).optional().default(1)
|
|
41
43
|
.describe('Priority: 1 (highest) to 4 (lowest)'),
|
|
44
|
+
schema_version: zod_1.z.number().int().min(1).optional()
|
|
45
|
+
.describe('Pin the role schema version the resolver form renders (defaults to latest; ignored when form_schema is embedded)'),
|
|
42
46
|
}).passthrough();
|
|
@@ -40,6 +40,7 @@ const crypto = __importStar(require("crypto"));
|
|
|
40
40
|
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
41
41
|
const logger_1 = require("../../lib/logger");
|
|
42
42
|
const escalationService = __importStar(require("../../services/escalation"));
|
|
43
|
+
const escalation_1 = require("../../types/escalation");
|
|
43
44
|
const human_queue_schemas_1 = require("./human-queue-schemas");
|
|
44
45
|
let server = null;
|
|
45
46
|
/**
|
|
@@ -67,6 +68,10 @@ async function createHumanQueueServer(options) {
|
|
|
67
68
|
description: 'Create a new escalation for human review. Returns the escalation ID.',
|
|
68
69
|
inputSchema: human_queue_schemas_1.escalateSchema,
|
|
69
70
|
}, async (args) => {
|
|
71
|
+
const metadata = { source: 'mcp_server' };
|
|
72
|
+
if (args.schema_version != null) {
|
|
73
|
+
metadata[escalation_1.ESCALATION_METADATA_KEYS.SCHEMA_VERSION] = args.schema_version;
|
|
74
|
+
}
|
|
70
75
|
const escalation = await escalationService.createEscalation({
|
|
71
76
|
type: args.type || 'mcp',
|
|
72
77
|
subtype: args.subtype || 'tool_call',
|
|
@@ -74,7 +79,7 @@ async function createHumanQueueServer(options) {
|
|
|
74
79
|
priority: args.priority,
|
|
75
80
|
role: args.role,
|
|
76
81
|
envelope: JSON.stringify(args.data || {}),
|
|
77
|
-
metadata
|
|
82
|
+
metadata,
|
|
78
83
|
});
|
|
79
84
|
return {
|
|
80
85
|
content: [{
|
|
@@ -230,7 +235,10 @@ async function createHumanQueueServer(options) {
|
|
|
230
235
|
signal_routing: signalRouting,
|
|
231
236
|
};
|
|
232
237
|
if (args.form_schema) {
|
|
233
|
-
metadata.
|
|
238
|
+
metadata[escalation_1.ESCALATION_METADATA_KEYS.FORM_SCHEMA] = args.form_schema;
|
|
239
|
+
}
|
|
240
|
+
if (args.schema_version != null) {
|
|
241
|
+
metadata[escalation_1.ESCALATION_METADATA_KEYS.SCHEMA_VERSION] = args.schema_version;
|
|
234
242
|
}
|
|
235
243
|
const escalation = await escalationService.createEscalation({
|
|
236
244
|
type: args.type || 'mcp',
|