@hotmeshio/long-tail 0.16.2 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/api/exports.d.ts +15 -0
- package/build/api/exports.js +35 -0
- package/build/api/users.d.ts +31 -1
- package/build/api/users.js +54 -1
- package/build/bin/ltc.js +11 -0
- package/build/lib/cli/commands/users.d.ts +11 -0
- package/build/lib/cli/commands/users.js +59 -0
- package/build/lib/cli/commands/workflows.d.ts +3 -0
- package/build/lib/cli/commands/workflows.js +22 -0
- package/build/routes/exports.js +11 -0
- package/build/routes/users.js +26 -0
- package/build/sdk/index.d.ts +3 -0
- package/build/sdk/index.js +3 -0
- package/build/services/export/index.d.ts +19 -0
- package/build/services/export/index.js +53 -33
- package/build/services/user/crud.d.ts +32 -1
- package/build/services/user/crud.js +108 -0
- package/build/services/user/index.d.ts +2 -2
- package/build/services/user/index.js +5 -1
- package/build/services/user/sql.d.ts +16 -0
- package/build/services/user/sql.js +33 -1
- package/build/services/user/types.d.ts +11 -0
- package/build/shared/form-validation/field-validator.d.ts +8 -6
- package/build/shared/form-validation/field-validator.js +23 -15
- package/build/shared/form-validation/x-lt-options.js +35 -21
- package/build/system/mcp-servers/admin/exports.js +15 -0
- package/build/system/mcp-servers/admin/schemas.d.ts +37 -14
- package/build/system/mcp-servers/admin/schemas.js +12 -3
- package/build/system/mcp-servers/admin/users.js +26 -0
- package/build/system/seed/tool-manifests-admin.d.ts +445 -0
- package/build/system/seed/tool-manifests-admin.js +2 -0
- package/dashboard/dist/assets/{AdminDashboard-BrOvvDHF.js → AdminDashboard-Bx5G6Qb_.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-BrOvvDHF.js.map → AdminDashboard-Bx5G6Qb_.js.map} +1 -1
- package/dashboard/dist/assets/{AgentConfigPage-CtVq8J0L.js → AgentConfigPage-S-YfPwCG.js} +2 -2
- package/dashboard/dist/assets/{AgentConfigPage-CtVq8J0L.js.map → AgentConfigPage-S-YfPwCG.js.map} +1 -1
- package/dashboard/dist/assets/{AgentDetailPage-DTfTQDug.js → AgentDetailPage-pFVqLY4c.js} +2 -2
- package/dashboard/dist/assets/{AgentDetailPage-DTfTQDug.js.map → AgentDetailPage-pFVqLY4c.js.map} +1 -1
- package/dashboard/dist/assets/{AgentsPage-vCTc3Qvj.js → AgentsPage-DjAluFkM.js} +2 -2
- package/dashboard/dist/assets/{AgentsPage-vCTc3Qvj.js.map → AgentsPage-DjAluFkM.js.map} +1 -1
- package/dashboard/dist/assets/{AvailableEscalationsPage-DJODShd7.js → AvailableEscalationsPage-BHsRZk4v.js} +2 -2
- package/dashboard/dist/assets/{AvailableEscalationsPage-DJODShd7.js.map → AvailableEscalationsPage-BHsRZk4v.js.map} +1 -1
- package/dashboard/dist/assets/{BotPicker-GU44inXA.js → BotPicker-h2YrxQS2.js} +2 -2
- package/dashboard/dist/assets/{BotPicker-GU44inXA.js.map → BotPicker-h2YrxQS2.js.map} +1 -1
- package/dashboard/dist/assets/{BulkAssignModal-ChqzG6FY.js → BulkAssignModal-CNKZBgK5.js} +2 -2
- package/dashboard/dist/assets/{BulkAssignModal-ChqzG6FY.js.map → BulkAssignModal-CNKZBgK5.js.map} +1 -1
- package/dashboard/dist/assets/{CapabilitiesPage-Y2hycdPY.js → CapabilitiesPage-DGsnIiJi.js} +2 -2
- package/dashboard/dist/assets/{CapabilitiesPage-Y2hycdPY.js.map → CapabilitiesPage-DGsnIiJi.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-CmCwt_Rs.js → CollapsibleSection-ptEsXSl6.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-CmCwt_Rs.js.map → CollapsibleSection-ptEsXSl6.js.map} +1 -1
- package/dashboard/dist/assets/{CountdownTimer-Bx2XXJOd.js → CountdownTimer-Cvif0QtN.js} +2 -2
- package/dashboard/dist/assets/{CountdownTimer-Bx2XXJOd.js.map → CountdownTimer-Cvif0QtN.js.map} +1 -1
- package/dashboard/dist/assets/{CredentialsPage-CoX_PNBe.js → CredentialsPage-CwKUAtAR.js} +2 -2
- package/dashboard/dist/assets/{CredentialsPage-CoX_PNBe.js.map → CredentialsPage-CwKUAtAR.js.map} +1 -1
- package/dashboard/dist/assets/{CronLabel-CVYKRipP.js → CronLabel-B9RbqMR-.js} +2 -2
- package/dashboard/dist/assets/{CronLabel-CVYKRipP.js.map → CronLabel-B9RbqMR-.js.map} +1 -1
- package/dashboard/dist/assets/{ElapsedCell-jRURiCRW.js → ElapsedCell-BirS3yZq.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-jRURiCRW.js.map → ElapsedCell-BirS3yZq.js.map} +1 -1
- package/dashboard/dist/assets/{EntityTimelinePanel-G6nzvgpl.js → EntityTimelinePanel-D3QNqDiL.js} +2 -2
- package/dashboard/dist/assets/{EntityTimelinePanel-G6nzvgpl.js.map → EntityTimelinePanel-D3QNqDiL.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationListSchemaPage-D-rVTQ1m.js → EscalationListSchemaPage-Bke-30FY.js} +2 -2
- package/dashboard/dist/assets/{EscalationListSchemaPage-D-rVTQ1m.js.map → EscalationListSchemaPage-Bke-30FY.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationSchemaPage-CV0R_xY9.js → EscalationSchemaPage-CTFE9vko.js} +2 -2
- package/dashboard/dist/assets/{EscalationSchemaPage-CV0R_xY9.js.map → EscalationSchemaPage-CTFE9vko.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-DMdx15CQ.js → EscalationsOverview-C2FaSmXk.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-DMdx15CQ.js.map → EscalationsOverview-C2FaSmXk.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-CIvsdt-q.js → EventTable-zFqzbEdC.js} +2 -2
- package/dashboard/dist/assets/{EventTable-CIvsdt-q.js.map → EventTable-zFqzbEdC.js.map} +1 -1
- package/dashboard/dist/assets/{FilterBar-DWYGkVRH.js → FilterBar-fwUqeM-5.js} +2 -2
- package/dashboard/dist/assets/{FilterBar-DWYGkVRH.js.map → FilterBar-fwUqeM-5.js.map} +1 -1
- package/dashboard/dist/assets/{GraphInvokePage-BGHlXh4r.js → GraphInvokePage-CA_XYI2W.js} +2 -2
- package/dashboard/dist/assets/{GraphInvokePage-BGHlXh4r.js.map → GraphInvokePage-CA_XYI2W.js.map} +1 -1
- package/dashboard/dist/assets/{HomePage-BHOnp8SK.js → HomePage-C2HnqdFX.js} +2 -2
- package/dashboard/dist/assets/{HomePage-BHOnp8SK.js.map → HomePage-C2HnqdFX.js.map} +1 -1
- package/dashboard/dist/assets/{ListToolbar-iOgn_db5.js → ListToolbar-BEogxu1f.js} +2 -2
- package/dashboard/dist/assets/{ListToolbar-iOgn_db5.js.map → ListToolbar-BEogxu1f.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-Be9sMKCA.js → McpOverview-CdMR-5qh.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-Be9sMKCA.js.map → McpOverview-CdMR-5qh.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryDetailPage-BIgpmGJN.js → McpQueryDetailPage-BXo4UjJF.js} +2 -2
- package/dashboard/dist/assets/{McpQueryDetailPage-BIgpmGJN.js.map → McpQueryDetailPage-BXo4UjJF.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryPage-Okcxw_Um.js → McpQueryPage-BvvM0Ya1.js} +2 -2
- package/dashboard/dist/assets/{McpQueryPage-Okcxw_Um.js.map → McpQueryPage-BvvM0Ya1.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunDetailPage-DT8kOfih.js → McpRunDetailPage-5eaJeupC.js} +2 -2
- package/dashboard/dist/assets/{McpRunDetailPage-DT8kOfih.js.map → McpRunDetailPage-5eaJeupC.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunsPage-BXhoP77D.js → McpRunsPage-B5_-3NUF.js} +2 -2
- package/dashboard/dist/assets/{McpRunsPage-BXhoP77D.js.map → McpRunsPage-B5_-3NUF.js.map} +1 -1
- package/dashboard/dist/assets/{OperationsPage-rVhC8JPv.js → OperationsPage-CJXTw02Z.js} +2 -2
- package/dashboard/dist/assets/{OperationsPage-rVhC8JPv.js.map → OperationsPage-CJXTw02Z.js.map} +1 -1
- package/dashboard/dist/assets/{OperatorDashboard-CIt061hu.js → OperatorDashboard-Dx7639os.js} +2 -2
- package/dashboard/dist/assets/{OperatorDashboard-CIt061hu.js.map → OperatorDashboard-Dx7639os.js.map} +1 -1
- package/dashboard/dist/assets/{PersonaDetailPage-r46uNF4E.js → PersonaDetailPage-BHQ44UIu.js} +2 -2
- package/dashboard/dist/assets/{PersonaDetailPage-r46uNF4E.js.map → PersonaDetailPage-BHQ44UIu.js.map} +1 -1
- package/dashboard/dist/assets/{PersonasPage-CayYv9-j.js → PersonasPage-Cnmb4uox.js} +2 -2
- package/dashboard/dist/assets/{PersonasPage-CayYv9-j.js.map → PersonasPage-Cnmb4uox.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessDetailPage-dn7lkM4c.js → ProcessDetailPage-CZ09xiWf.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-dn7lkM4c.js.map → ProcessDetailPage-CZ09xiWf.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-DOp5J6Be.js → ProcessesListPage-BT76_7bW.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-DOp5J6Be.js.map → ProcessesListPage-BT76_7bW.js.map} +1 -1
- package/dashboard/dist/assets/{RoleDetailPage-DOlNoiAK.js → RoleDetailPage-CDsJKPvV.js} +2 -2
- package/dashboard/dist/assets/{RoleDetailPage-DOlNoiAK.js.map → RoleDetailPage-CDsJKPvV.js.map} +1 -1
- package/dashboard/dist/assets/{RolesPage-DPppT6Zl.js → RolesPage-D2cV92bL.js} +2 -2
- package/dashboard/dist/assets/{RolesPage-DPppT6Zl.js.map → RolesPage-D2cV92bL.js.map} +1 -1
- package/dashboard/dist/assets/{RunAsSelector-BgntKfSA.js → RunAsSelector-Cvi8x8xx.js} +2 -2
- package/dashboard/dist/assets/{RunAsSelector-BgntKfSA.js.map → RunAsSelector-Cvi8x8xx.js.map} +1 -1
- package/dashboard/dist/assets/{ScanCodesPage-DPm1lG79.js → ScanCodesPage-BWt_iRCu.js} +2 -2
- package/dashboard/dist/assets/{ScanCodesPage-DPm1lG79.js.map → ScanCodesPage-BWt_iRCu.js.map} +1 -1
- package/dashboard/dist/assets/{ScanSchemeDetailPage-CuoG89q1.js → ScanSchemeDetailPage-C6mRYkxL.js} +2 -2
- package/dashboard/dist/assets/{ScanSchemeDetailPage-CuoG89q1.js.map → ScanSchemeDetailPage-C6mRYkxL.js.map} +1 -1
- package/dashboard/dist/assets/{ScanStationPage-2SLXqqs0.js → ScanStationPage-YQiijAKy.js} +2 -2
- package/dashboard/dist/assets/{ScanStationPage-2SLXqqs0.js.map → ScanStationPage-YQiijAKy.js.map} +1 -1
- package/dashboard/dist/assets/{StickyPagination-Bc_Mzu_R.js → StickyPagination-BsbSade1.js} +2 -2
- package/dashboard/dist/assets/{StickyPagination-Bc_Mzu_R.js.map → StickyPagination-BsbSade1.js.map} +1 -1
- package/dashboard/dist/assets/{StreamMessageDetail-S1cnLGkf.js → StreamMessageDetail-jczXwuBw.js} +2 -2
- package/dashboard/dist/assets/{StreamMessageDetail-S1cnLGkf.js.map → StreamMessageDetail-jczXwuBw.js.map} +1 -1
- package/dashboard/dist/assets/{SwimlaneTimeline-BUu2sPmY.js → SwimlaneTimeline-DSO6QXmX.js} +2 -2
- package/dashboard/dist/assets/{SwimlaneTimeline-BUu2sPmY.js.map → SwimlaneTimeline-DSO6QXmX.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-BMfNNtbN.js → TaskDetailPage-DWLfcAF4.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-BMfNNtbN.js.map → TaskDetailPage-DWLfcAF4.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-BmNnopOU.js → TasksListPage-B0at3vJ3.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-BmNnopOU.js.map → TasksListPage-B0at3vJ3.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-Dip7gQQx.js → TimeAgo-poxwErGl.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-Dip7gQQx.js.map → TimeAgo-poxwErGl.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-DRAYnIrx.js → TimestampCell-Be6tvFQd.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-DRAYnIrx.js.map → TimestampCell-Be6tvFQd.js.map} +1 -1
- package/dashboard/dist/assets/{ToolTestPanel-CQVYC3Ba.js → ToolTestPanel-CYOqnqMz.js} +2 -2
- package/dashboard/dist/assets/{ToolTestPanel-CQVYC3Ba.js.map → ToolTestPanel-CYOqnqMz.js.map} +1 -1
- package/dashboard/dist/assets/{TopicDetailPage-Bmtwuksg.js → TopicDetailPage-C82WIKaU.js} +2 -2
- package/dashboard/dist/assets/{TopicDetailPage-Bmtwuksg.js.map → TopicDetailPage-C82WIKaU.js.map} +1 -1
- package/dashboard/dist/assets/{TopicsPage-DIgF7-mJ.js → TopicsPage-COH547ZD.js} +2 -2
- package/dashboard/dist/assets/{TopicsPage-DIgF7-mJ.js.map → TopicsPage-COH547ZD.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-DNKFz7X9.js → UserName-D2SoVbe9.js} +2 -2
- package/dashboard/dist/assets/{UserName-DNKFz7X9.js.map → UserName-D2SoVbe9.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-DraIBNpl.js → WorkflowExecutionPage-C82Q-TYC.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-DraIBNpl.js.map → WorkflowExecutionPage-C82Q-TYC.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsDashboard-BH7kmFjM.js → WorkflowsDashboard-DDWwCT-v.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsDashboard-BH7kmFjM.js.map → WorkflowsDashboard-DDWwCT-v.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-C98pCjQX.js → WorkflowsOverview-DdKRtWdK.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-C98pCjQX.js.map → WorkflowsOverview-DdKRtWdK.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-BWQjXenZ.js → YamlWorkflowDetailPage-D3qvyy_4.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-BWQjXenZ.js.map → YamlWorkflowDetailPage-D3qvyy_4.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowsPage-BGTI_sdP.js → YamlWorkflowsPage-BJsxZOBC.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowsPage-BGTI_sdP.js.map → YamlWorkflowsPage-BJsxZOBC.js.map} +1 -1
- package/dashboard/dist/assets/{agents-DfMrlw54.js → agents-OQHCkIfJ.js} +2 -2
- package/dashboard/dist/assets/{agents-DfMrlw54.js.map → agents-OQHCkIfJ.js.map} +1 -1
- package/dashboard/dist/assets/{bots-B9zS0z7D.js → bots-e8jsNOf4.js} +2 -2
- package/dashboard/dist/assets/{bots-B9zS0z7D.js.map → bots-e8jsNOf4.js.map} +1 -1
- package/dashboard/dist/assets/{capabilities-DkLM1xgH.js → capabilities-CEo0AB79.js} +2 -2
- package/dashboard/dist/assets/{capabilities-DkLM1xgH.js.map → capabilities-CEo0AB79.js.map} +1 -1
- package/dashboard/dist/assets/{controlplane-SJK1yvbm.js → controlplane-CD6ti-QB.js} +2 -2
- package/dashboard/dist/assets/{controlplane-SJK1yvbm.js.map → controlplane-CD6ti-QB.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-columns-BvAylNM1.js → escalation-columns-CUtDSbxl.js} +2 -2
- package/dashboard/dist/assets/{escalation-columns-BvAylNM1.js.map → escalation-columns-CUtDSbxl.js.map} +1 -1
- package/dashboard/dist/assets/{index-DSfY8oDp.js → index-B0C6wSrQ.js} +2 -2
- package/dashboard/dist/assets/{index-DSfY8oDp.js.map → index-B0C6wSrQ.js.map} +1 -1
- package/dashboard/dist/assets/index-B2aiEKtM.js +2 -0
- package/dashboard/dist/assets/index-B2aiEKtM.js.map +1 -0
- package/dashboard/dist/assets/{index-DKXOIcO3.js → index-B76fjEom.js} +2 -2
- package/dashboard/dist/assets/{index-DKXOIcO3.js.map → index-B76fjEom.js.map} +1 -1
- package/dashboard/dist/assets/{index-DvmyIGeZ.js → index-BYIN0l5M.js} +2 -2
- package/dashboard/dist/assets/{index-DvmyIGeZ.js.map → index-BYIN0l5M.js.map} +1 -1
- package/dashboard/dist/assets/{index-CXe2d5kg.js → index-Bf4IPu7I.js} +2 -2
- package/dashboard/dist/assets/{index-CXe2d5kg.js.map → index-Bf4IPu7I.js.map} +1 -1
- package/dashboard/dist/assets/index-BpwkKV5f.js +3 -0
- package/dashboard/dist/assets/index-BpwkKV5f.js.map +1 -0
- package/dashboard/dist/assets/{index-Cw-V0VhS.js → index-BsP7vujM.js} +2 -2
- package/dashboard/dist/assets/{index-Cw-V0VhS.js.map → index-BsP7vujM.js.map} +1 -1
- package/dashboard/dist/assets/{index-PjiXOVdw.js → index-C8VhbKFU.js} +2 -2
- package/dashboard/dist/assets/{index-PjiXOVdw.js.map → index-C8VhbKFU.js.map} +1 -1
- package/dashboard/dist/assets/{index-D2IRxjSf.js → index-COUj4v_W.js} +2 -2
- package/dashboard/dist/assets/{index-D2IRxjSf.js.map → index-COUj4v_W.js.map} +1 -1
- package/dashboard/dist/assets/{index-ClVNU3G3.js → index-CTZEzzN3.js} +2 -2
- package/dashboard/dist/assets/{index-ClVNU3G3.js.map → index-CTZEzzN3.js.map} +1 -1
- package/dashboard/dist/assets/{index-DazfFRUx.js → index-DIHr2CvI.js} +2 -2
- package/dashboard/dist/assets/{index-DazfFRUx.js.map → index-DIHr2CvI.js.map} +1 -1
- package/dashboard/dist/assets/{index-zrTQcPjB.js → index-DSdqso-_.js} +3 -3
- package/dashboard/dist/assets/{index-zrTQcPjB.js.map → index-DSdqso-_.js.map} +1 -1
- package/dashboard/dist/assets/{index-CLxuBb17.js → index-VsZyCFz8.js} +2 -2
- package/dashboard/dist/assets/{index-CLxuBb17.js.map → index-VsZyCFz8.js.map} +1 -1
- package/dashboard/dist/assets/{index-CJV2pWNH.css → index-fUqvRHOe.css} +1 -1
- package/dashboard/dist/assets/{knowledge-BNp6MH-4.js → knowledge-C89zT4Qe.js} +2 -2
- package/dashboard/dist/assets/{knowledge-BNp6MH-4.js.map → knowledge-C89zT4Qe.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-Bb1k5rv-.js → mcp-BLKHykZS.js} +2 -2
- package/dashboard/dist/assets/{mcp-Bb1k5rv-.js.map → mcp-BLKHykZS.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-QVakMQnS.js → mcp-query-CfiqUNDV.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-QVakMQnS.js.map → mcp-query-CfiqUNDV.js.map} +1 -1
- package/dashboard/dist/assets/{personas-DV2JUjVj.js → personas-B1HzC94M.js} +2 -2
- package/dashboard/dist/assets/{personas-DV2JUjVj.js.map → personas-B1HzC94M.js.map} +1 -1
- package/dashboard/dist/assets/{pipelines-BkVB7Q0p.js → pipelines-C73X50ES.js} +2 -2
- package/dashboard/dist/assets/{pipelines-BkVB7Q0p.js.map → pipelines-C73X50ES.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-DvYWcASM.js → tasks-DHbFpQk4.js} +2 -2
- package/dashboard/dist/assets/{tasks-DvYWcASM.js.map → tasks-DHbFpQk4.js.map} +1 -1
- package/dashboard/dist/assets/{topics-B9zXFuVG.js → topics-Fu8qCUOd.js} +2 -2
- package/dashboard/dist/assets/{topics-B9zXFuVG.js.map → topics-Fu8qCUOd.js.map} +1 -1
- package/dashboard/dist/assets/{useEventHooks-JDpifqGZ.js → useEventHooks-DL3Vhz4g.js} +2 -2
- package/dashboard/dist/assets/{useEventHooks-JDpifqGZ.js.map → useEventHooks-DL3Vhz4g.js.map} +1 -1
- package/dashboard/dist/assets/{useNamespace-Bqr-LdWx.js → useNamespace-CpO5Hogb.js} +2 -2
- package/dashboard/dist/assets/{useNamespace-Bqr-LdWx.js.map → useNamespace-CpO5Hogb.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-n3naCEbw.js → useYamlActivityEvents-BwIl6_d2.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-n3naCEbw.js.map → useYamlActivityEvents-BwIl6_d2.js.map} +1 -1
- package/dashboard/dist/assets/users-C0ke1Z-8.js +2 -0
- package/dashboard/dist/assets/users-C0ke1Z-8.js.map +1 -0
- package/dashboard/dist/assets/{workflows-D8uMBPvQ.js → workflows-DR9OQcuq.js} +2 -2
- package/dashboard/dist/assets/{workflows-D8uMBPvQ.js.map → workflows-DR9OQcuq.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-DVDOQM3Y.js → yaml-workflows-DjEHh9Wy.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-DVDOQM3Y.js.map → yaml-workflows-DjEHh9Wy.js.map} +1 -1
- package/dashboard/dist/index.html +2 -2
- package/docs/api/http/users.md +53 -1
- package/docs/api/http/workflows.md +35 -0
- package/docs/api/mcp/admin.md +31 -0
- package/docs/api/sdk/users.md +24 -0
- package/docs/api/sdk/workflows.md +21 -0
- package/docs/dashboard.md +1 -1
- package/docs/hitl/lookups.md +10 -0
- package/docs/hitl/x-lt-validation.md +2 -1
- package/docs/hitl/x-lt-widget.md +1 -1
- package/docs/hitl-guide.md +2 -2
- package/package.json +2 -2
- package/dashboard/dist/assets/index-DTZxHZJO.js +0 -3
- package/dashboard/dist/assets/index-DTZxHZJO.js.map +0 -1
- package/dashboard/dist/assets/index-DamcWcqG.js +0 -2
- package/dashboard/dist/assets/index-DamcWcqG.js.map +0 -1
- package/dashboard/dist/assets/users-BNXLRVTS.js +0 -2
- package/dashboard/dist/assets/users-BNXLRVTS.js.map +0 -1
|
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.UserPropertyValidationError = exports.UserPropertyConflictError = void 0;
|
|
6
7
|
exports.attachRoles = attachRoles;
|
|
7
8
|
exports.createUser = createUser;
|
|
8
9
|
exports.getUser = getUser;
|
|
@@ -10,11 +11,15 @@ exports.getUserByExternalId = getUserByExternalId;
|
|
|
10
11
|
exports.getUserByEmail = getUserByEmail;
|
|
11
12
|
exports.getUserByMetadataValue = getUserByMetadataValue;
|
|
12
13
|
exports.updateUser = updateUser;
|
|
14
|
+
exports.getIdentityPropertyKeys = getIdentityPropertyKeys;
|
|
15
|
+
exports.patchUserProperties = patchUserProperties;
|
|
13
16
|
exports.deleteUser = deleteUser;
|
|
14
17
|
exports.listUsers = listUsers;
|
|
15
18
|
const bcryptjs_1 = __importDefault(require("bcryptjs"));
|
|
16
19
|
const db_1 = require("../../lib/db");
|
|
17
20
|
const sql_1 = require("./sql");
|
|
21
|
+
const scan_code_1 = require("../scan-code");
|
|
22
|
+
const scan_code_2 = require("../../types/scan-code");
|
|
18
23
|
const scope_1 = require("./scope");
|
|
19
24
|
// ─── Private helpers (exported for internal use by auth.ts) ──────────────────
|
|
20
25
|
async function attachRoles(user) {
|
|
@@ -143,6 +148,109 @@ async function updateUser(id, input) {
|
|
|
143
148
|
return null;
|
|
144
149
|
return attachRoles(rows[0]);
|
|
145
150
|
}
|
|
151
|
+
/** A property write that would create an ambiguous identity binding. */
|
|
152
|
+
class UserPropertyConflictError extends Error {
|
|
153
|
+
constructor(key) {
|
|
154
|
+
super(`"${key}" value is already bound to another active user`);
|
|
155
|
+
this.status = 409;
|
|
156
|
+
this.name = 'UserPropertyConflictError';
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
exports.UserPropertyConflictError = UserPropertyConflictError;
|
|
160
|
+
/** A malformed property patch — rejected before any write. */
|
|
161
|
+
class UserPropertyValidationError extends Error {
|
|
162
|
+
constructor(message) {
|
|
163
|
+
super(message);
|
|
164
|
+
this.status = 400;
|
|
165
|
+
this.name = 'UserPropertyValidationError';
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
exports.UserPropertyValidationError = UserPropertyValidationError;
|
|
169
|
+
/**
|
|
170
|
+
* The lt_users.metadata keys the platform itself resolves identities against:
|
|
171
|
+
* every enabled identity scan scheme's target_facet (e.g. badge_id). Writes
|
|
172
|
+
* to these keys carry a uniqueness guard; the dashboard marks them as system
|
|
173
|
+
* properties.
|
|
174
|
+
*/
|
|
175
|
+
async function getIdentityPropertyKeys() {
|
|
176
|
+
const schemes = await (0, scan_code_1.listScanSchemes)();
|
|
177
|
+
return [...new Set(schemes
|
|
178
|
+
.filter((s) => s.enabled && s.kind === scan_code_2.SCAN_SCHEME_KINDS.IDENTITY)
|
|
179
|
+
.map((s) => s.target_facet))];
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Atomic per-key patch of the user's properties dictionary (lt_users.metadata).
|
|
183
|
+
* One statement — never read-merge-write: concurrent patches of different
|
|
184
|
+
* keys both land, a rename never opens a key-absent window, and deleting is
|
|
185
|
+
* explicit (`remove`) — an absent key means keep. Precedence on collision:
|
|
186
|
+
* set > rename > existing. Values are raw JSON, so numbers/booleans/objects
|
|
187
|
+
* round-trip typed.
|
|
188
|
+
*
|
|
189
|
+
* Identity-binding keys (getIdentityPropertyKeys) additionally assert, in the
|
|
190
|
+
* same statement, that no OTHER active user carries the value — the
|
|
191
|
+
* write-side counterpart of getUserByMetadataValue's ambiguity throw.
|
|
192
|
+
* A tripped guard raises UserPropertyConflictError (409).
|
|
193
|
+
*/
|
|
194
|
+
async function patchUserProperties(id, ops) {
|
|
195
|
+
const set = ops.set ?? {};
|
|
196
|
+
const remove = ops.remove ?? [];
|
|
197
|
+
const rename = ops.rename ?? {};
|
|
198
|
+
const setKeys = Object.keys(set);
|
|
199
|
+
const renameEntries = Object.entries(rename);
|
|
200
|
+
if (setKeys.length === 0 && remove.length === 0 && renameEntries.length === 0) {
|
|
201
|
+
throw new UserPropertyValidationError('A property patch requires at least one set, remove, or rename');
|
|
202
|
+
}
|
|
203
|
+
for (const key of [...setKeys, ...remove, ...renameEntries.flat()]) {
|
|
204
|
+
if (typeof key !== 'string' || key.trim().length === 0) {
|
|
205
|
+
throw new UserPropertyValidationError('Property keys must be non-empty strings');
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
for (const key of setKeys) {
|
|
209
|
+
if (remove.includes(key)) {
|
|
210
|
+
throw new UserPropertyValidationError(`"${key}" cannot be both set and removed in one patch`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
for (const [prev, next] of renameEntries) {
|
|
214
|
+
if (prev === next) {
|
|
215
|
+
throw new UserPropertyValidationError(`Renaming "${prev}" to itself is not a change`);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
const renameTargets = renameEntries.map(([, next]) => next);
|
|
219
|
+
if (new Set(renameTargets).size !== renameTargets.length) {
|
|
220
|
+
throw new UserPropertyValidationError('Two properties cannot be renamed to the same key');
|
|
221
|
+
}
|
|
222
|
+
// Identity bindings resolve people — their values must be scalar and, for
|
|
223
|
+
// ACTIVE users, unique. The guard rides the same statement.
|
|
224
|
+
const identityKeys = await getIdentityPropertyKeys();
|
|
225
|
+
const guard = {};
|
|
226
|
+
for (const key of identityKeys) {
|
|
227
|
+
if (key in set) {
|
|
228
|
+
const value = set[key];
|
|
229
|
+
if (typeof value !== 'string' && typeof value !== 'number') {
|
|
230
|
+
throw new UserPropertyValidationError(`"${key}" is an identity binding — its value must be a string or number`);
|
|
231
|
+
}
|
|
232
|
+
guard[key] = String(value);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
const removeAll = [...new Set([...remove, ...renameEntries.map(([prev]) => prev)])];
|
|
236
|
+
const renamePairs = renameEntries.map(([prev, next]) => ({ prev, next }));
|
|
237
|
+
const pool = (0, db_1.getPool)();
|
|
238
|
+
const { rows } = await pool.query(sql_1.PATCH_USER_PROPERTIES, [
|
|
239
|
+
id,
|
|
240
|
+
removeAll,
|
|
241
|
+
JSON.stringify(renamePairs),
|
|
242
|
+
JSON.stringify(set),
|
|
243
|
+
JSON.stringify(guard),
|
|
244
|
+
]);
|
|
245
|
+
if (rows[0])
|
|
246
|
+
return attachRoles(rows[0]);
|
|
247
|
+
const exists = await pool.query(sql_1.VERIFY_USER_BY_ID, [id]);
|
|
248
|
+
if (!exists.rows[0])
|
|
249
|
+
return null;
|
|
250
|
+
// The user exists, so the identity guard is what blocked the write. Name
|
|
251
|
+
// the first guarded key for the caller; the row was not touched.
|
|
252
|
+
throw new UserPropertyConflictError(Object.keys(guard)[0] ?? 'identity binding');
|
|
253
|
+
}
|
|
146
254
|
async function deleteUser(id) {
|
|
147
255
|
const pool = (0, db_1.getPool)();
|
|
148
256
|
const { rowCount } = await pool.query(sql_1.DELETE_USER_BY_ID, [id]);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { CreateUserInput, UpdateUserInput, VALID_ROLE_TYPES } from './types';
|
|
2
|
-
export { createUser, getUser, getUserByExternalId, getUserByEmail, getUserByMetadataValue, updateUser, deleteUser, listUsers, } from './crud';
|
|
1
|
+
export { CreateUserInput, UpdateUserInput, UserPropertyOps, VALID_ROLE_TYPES } from './types';
|
|
2
|
+
export { createUser, getUser, getUserByExternalId, getUserByEmail, getUserByMetadataValue, updateUser, patchUserProperties, getIdentityPropertyKeys, UserPropertyConflictError, UserPropertyValidationError, deleteUser, listUsers, } from './crud';
|
|
3
3
|
export { isValidRoleType, addUserRole, grantRoleIfAbsent, removeUserRole, getUserRoles, hasRole, hasRoleType, } from './roles';
|
|
4
4
|
export { isSuperAdmin, isGroupAdmin, canManageRole, hasGlobalEscalationAccess, hasRolesAsAdmin, getRoleScope, getRoleWriteScope } from './rbac';
|
|
5
5
|
export { READ_SCOPES, WRITE_SCOPES, DEFAULT_READ_SCOPE, DEFAULT_WRITE_SCOPE, isValidReadScope, isValidWriteScope, isValidScopePair, effectiveScope, } from './scope';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PREFERENCES_MAX_BYTES = exports.patchPreferences = exports.getPreferences = exports.seedAdmin = exports.verifyPassword = exports.effectiveScope = exports.isValidScopePair = exports.isValidWriteScope = exports.isValidReadScope = exports.DEFAULT_WRITE_SCOPE = exports.DEFAULT_READ_SCOPE = exports.WRITE_SCOPES = exports.READ_SCOPES = exports.getRoleWriteScope = exports.getRoleScope = exports.hasRolesAsAdmin = exports.hasGlobalEscalationAccess = exports.canManageRole = exports.isGroupAdmin = exports.isSuperAdmin = exports.hasRoleType = exports.hasRole = exports.getUserRoles = exports.removeUserRole = exports.grantRoleIfAbsent = exports.addUserRole = exports.isValidRoleType = exports.listUsers = exports.deleteUser = exports.updateUser = exports.getUserByMetadataValue = exports.getUserByEmail = exports.getUserByExternalId = exports.getUser = exports.createUser = exports.VALID_ROLE_TYPES = void 0;
|
|
3
|
+
exports.PREFERENCES_MAX_BYTES = exports.patchPreferences = exports.getPreferences = exports.seedAdmin = exports.verifyPassword = exports.effectiveScope = exports.isValidScopePair = exports.isValidWriteScope = exports.isValidReadScope = exports.DEFAULT_WRITE_SCOPE = exports.DEFAULT_READ_SCOPE = exports.WRITE_SCOPES = exports.READ_SCOPES = exports.getRoleWriteScope = exports.getRoleScope = exports.hasRolesAsAdmin = exports.hasGlobalEscalationAccess = exports.canManageRole = exports.isGroupAdmin = exports.isSuperAdmin = exports.hasRoleType = exports.hasRole = exports.getUserRoles = exports.removeUserRole = exports.grantRoleIfAbsent = exports.addUserRole = exports.isValidRoleType = exports.listUsers = exports.deleteUser = exports.UserPropertyValidationError = exports.UserPropertyConflictError = exports.getIdentityPropertyKeys = exports.patchUserProperties = exports.updateUser = exports.getUserByMetadataValue = exports.getUserByEmail = exports.getUserByExternalId = exports.getUser = exports.createUser = exports.VALID_ROLE_TYPES = void 0;
|
|
4
4
|
var types_1 = require("./types");
|
|
5
5
|
Object.defineProperty(exports, "VALID_ROLE_TYPES", { enumerable: true, get: function () { return types_1.VALID_ROLE_TYPES; } });
|
|
6
6
|
var crud_1 = require("./crud");
|
|
@@ -10,6 +10,10 @@ Object.defineProperty(exports, "getUserByExternalId", { enumerable: true, get: f
|
|
|
10
10
|
Object.defineProperty(exports, "getUserByEmail", { enumerable: true, get: function () { return crud_1.getUserByEmail; } });
|
|
11
11
|
Object.defineProperty(exports, "getUserByMetadataValue", { enumerable: true, get: function () { return crud_1.getUserByMetadataValue; } });
|
|
12
12
|
Object.defineProperty(exports, "updateUser", { enumerable: true, get: function () { return crud_1.updateUser; } });
|
|
13
|
+
Object.defineProperty(exports, "patchUserProperties", { enumerable: true, get: function () { return crud_1.patchUserProperties; } });
|
|
14
|
+
Object.defineProperty(exports, "getIdentityPropertyKeys", { enumerable: true, get: function () { return crud_1.getIdentityPropertyKeys; } });
|
|
15
|
+
Object.defineProperty(exports, "UserPropertyConflictError", { enumerable: true, get: function () { return crud_1.UserPropertyConflictError; } });
|
|
16
|
+
Object.defineProperty(exports, "UserPropertyValidationError", { enumerable: true, get: function () { return crud_1.UserPropertyValidationError; } });
|
|
13
17
|
Object.defineProperty(exports, "deleteUser", { enumerable: true, get: function () { return crud_1.deleteUser; } });
|
|
14
18
|
Object.defineProperty(exports, "listUsers", { enumerable: true, get: function () { return crud_1.listUsers; } });
|
|
15
19
|
var roles_1 = require("./roles");
|
|
@@ -28,6 +28,22 @@ export declare const GET_USER_BY_ID = "SELECT * FROM lt_users WHERE id = $1";
|
|
|
28
28
|
export declare const GET_USERS_BY_METADATA_VALUE = "SELECT * FROM lt_users WHERE metadata->>$1 = $2 AND status = 'active' LIMIT 2";
|
|
29
29
|
/** Check if a user exists by id. Lightweight — returns only the id column. */
|
|
30
30
|
export declare const VERIFY_USER_BY_ID = "SELECT id FROM lt_users WHERE id = $1 LIMIT 1";
|
|
31
|
+
/**
|
|
32
|
+
* Atomic per-key patch of the user's properties dictionary — ONE statement,
|
|
33
|
+
* never read-merge-write. Composition (later wins on key collision):
|
|
34
|
+
*
|
|
35
|
+
* base minus ($2: removed keys ∪ rename old-names)
|
|
36
|
+
* || renames ($3: [{prev,next}] — each carries the OLD value, skipped when
|
|
37
|
+
* the source key is absent)
|
|
38
|
+
* || sets ($4: typed JSON values)
|
|
39
|
+
*
|
|
40
|
+
* $5 is the identity-binding guard: {key: value} pairs that must not already
|
|
41
|
+
* belong to ANOTHER active user (the write-side counterpart of the
|
|
42
|
+
* resolver's ambiguity throw in GET_USERS_BY_METADATA_VALUE). Zero rows
|
|
43
|
+
* back means the user is missing OR the guard tripped — the caller
|
|
44
|
+
* distinguishes with VERIFY_USER_BY_ID.
|
|
45
|
+
*/
|
|
46
|
+
export declare const PATCH_USER_PROPERTIES = "\n UPDATE lt_users SET metadata = (\n (COALESCE(metadata, '{}'::jsonb) - $2::text[])\n || COALESCE((\n SELECT jsonb_object_agg(r.next, COALESCE(lt_users.metadata, '{}'::jsonb) -> r.prev)\n FROM jsonb_to_recordset($3::jsonb) AS r(prev text, next text)\n WHERE COALESCE(lt_users.metadata, '{}'::jsonb) ? r.prev\n ), '{}'::jsonb)\n || $4::jsonb\n )\n WHERE id = $1\n AND NOT EXISTS (\n SELECT 1\n FROM lt_users u2, jsonb_each_text($5::jsonb) AS g(k, v)\n WHERE u2.id <> $1 AND u2.status = 'active' AND u2.metadata ->> g.k = g.v\n )\n RETURNING *";
|
|
31
47
|
/** Fetch user + roles in a single query. Returns one row per role (or one row with nulls if no roles). */
|
|
32
48
|
export declare const GET_USER_WITH_ROLES = "SELECT u.id, u.external_id, u.display_name, u.status, u.metadata,\n r.role, r.type AS role_type, r.read_scope, r.write_scope\n FROM lt_users u\n LEFT JOIN lt_user_roles r ON r.user_id = u.id\n WHERE u.external_id = $1\n ORDER BY r.created_at";
|
|
33
49
|
export declare const DELETE_USER_BY_ID = "DELETE FROM lt_users WHERE id = $1";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// ─── Shared queries (used by multiple modules) ──────────────────────────────
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.IS_GROUP_ADMIN = exports.GET_ROLE_SCOPE = exports.HAS_ROLE_TYPE = exports.HAS_ROLE = exports.DELETE_USER_ROLE = exports.INSERT_USER_ROLE_IF_ABSENT = exports.UPSERT_USER_ROLE = exports.GET_ROLES_BY_USER_IDS = exports.DELETE_USER_BY_ID = exports.GET_USER_WITH_ROLES = exports.VERIFY_USER_BY_ID = exports.GET_USERS_BY_METADATA_VALUE = exports.GET_USER_BY_ID = exports.GET_USER_BY_EMAIL = exports.CREATE_USER_WITH_ROLES = exports.GET_USER_BY_EXTERNAL_ID = exports.GET_ROLES_BY_USER_ID = exports.ENSURE_ROLE_EXISTS = void 0;
|
|
4
|
+
exports.IS_GROUP_ADMIN = exports.GET_ROLE_SCOPE = exports.HAS_ROLE_TYPE = exports.HAS_ROLE = exports.DELETE_USER_ROLE = exports.INSERT_USER_ROLE_IF_ABSENT = exports.UPSERT_USER_ROLE = exports.GET_ROLES_BY_USER_IDS = exports.DELETE_USER_BY_ID = exports.GET_USER_WITH_ROLES = exports.PATCH_USER_PROPERTIES = exports.VERIFY_USER_BY_ID = exports.GET_USERS_BY_METADATA_VALUE = exports.GET_USER_BY_ID = exports.GET_USER_BY_EMAIL = exports.CREATE_USER_WITH_ROLES = exports.GET_USER_BY_EXTERNAL_ID = exports.GET_ROLES_BY_USER_ID = exports.ENSURE_ROLE_EXISTS = void 0;
|
|
5
5
|
/** Ensure a role name exists in the lt_roles lookup table (FK target). */
|
|
6
6
|
exports.ENSURE_ROLE_EXISTS = 'INSERT INTO lt_roles (role) VALUES ($1) ON CONFLICT DO NOTHING';
|
|
7
7
|
/** Fetch roles for a single user, ordered by creation time. granted_by_persona
|
|
@@ -50,6 +50,38 @@ exports.GET_USER_BY_ID = 'SELECT * FROM lt_users WHERE id = $1';
|
|
|
50
50
|
exports.GET_USERS_BY_METADATA_VALUE = `SELECT * FROM lt_users WHERE metadata->>$1 = $2 AND status = 'active' LIMIT 2`;
|
|
51
51
|
/** Check if a user exists by id. Lightweight — returns only the id column. */
|
|
52
52
|
exports.VERIFY_USER_BY_ID = 'SELECT id FROM lt_users WHERE id = $1 LIMIT 1';
|
|
53
|
+
/**
|
|
54
|
+
* Atomic per-key patch of the user's properties dictionary — ONE statement,
|
|
55
|
+
* never read-merge-write. Composition (later wins on key collision):
|
|
56
|
+
*
|
|
57
|
+
* base minus ($2: removed keys ∪ rename old-names)
|
|
58
|
+
* || renames ($3: [{prev,next}] — each carries the OLD value, skipped when
|
|
59
|
+
* the source key is absent)
|
|
60
|
+
* || sets ($4: typed JSON values)
|
|
61
|
+
*
|
|
62
|
+
* $5 is the identity-binding guard: {key: value} pairs that must not already
|
|
63
|
+
* belong to ANOTHER active user (the write-side counterpart of the
|
|
64
|
+
* resolver's ambiguity throw in GET_USERS_BY_METADATA_VALUE). Zero rows
|
|
65
|
+
* back means the user is missing OR the guard tripped — the caller
|
|
66
|
+
* distinguishes with VERIFY_USER_BY_ID.
|
|
67
|
+
*/
|
|
68
|
+
exports.PATCH_USER_PROPERTIES = `
|
|
69
|
+
UPDATE lt_users SET metadata = (
|
|
70
|
+
(COALESCE(metadata, '{}'::jsonb) - $2::text[])
|
|
71
|
+
|| COALESCE((
|
|
72
|
+
SELECT jsonb_object_agg(r.next, COALESCE(lt_users.metadata, '{}'::jsonb) -> r.prev)
|
|
73
|
+
FROM jsonb_to_recordset($3::jsonb) AS r(prev text, next text)
|
|
74
|
+
WHERE COALESCE(lt_users.metadata, '{}'::jsonb) ? r.prev
|
|
75
|
+
), '{}'::jsonb)
|
|
76
|
+
|| $4::jsonb
|
|
77
|
+
)
|
|
78
|
+
WHERE id = $1
|
|
79
|
+
AND NOT EXISTS (
|
|
80
|
+
SELECT 1
|
|
81
|
+
FROM lt_users u2, jsonb_each_text($5::jsonb) AS g(k, v)
|
|
82
|
+
WHERE u2.id <> $1 AND u2.status = 'active' AND u2.metadata ->> g.k = g.v
|
|
83
|
+
)
|
|
84
|
+
RETURNING *`;
|
|
53
85
|
/** Fetch user + roles in a single query. Returns one row per role (or one row with nulls if no roles). */
|
|
54
86
|
exports.GET_USER_WITH_ROLES = `SELECT u.id, u.external_id, u.display_name, u.status, u.metadata,
|
|
55
87
|
r.role, r.type AS role_type, r.read_scope, r.write_scope
|
|
@@ -24,5 +24,16 @@ export interface UpdateUserInput {
|
|
|
24
24
|
display_name?: string;
|
|
25
25
|
password?: string;
|
|
26
26
|
status?: LTUserStatus;
|
|
27
|
+
/** Wholesale REPLACE of the properties dictionary — for per-key edits use patchUserProperties. */
|
|
27
28
|
metadata?: Record<string, any>;
|
|
28
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* One atomic patch of the user's properties dictionary. Deleting is explicit
|
|
32
|
+
* (`remove`) — a key absent from the patch is kept. `rename` preserves the
|
|
33
|
+
* value. Precedence on collision: set > rename > existing.
|
|
34
|
+
*/
|
|
35
|
+
export interface UserPropertyOps {
|
|
36
|
+
set?: Record<string, unknown>;
|
|
37
|
+
remove?: string[];
|
|
38
|
+
rename?: Record<string, string>;
|
|
39
|
+
}
|
|
@@ -8,13 +8,15 @@ interface ChecklistItem {
|
|
|
8
8
|
required?: boolean;
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
|
-
* Resolve a checklist widget's item definitions from its `x-lt-source`
|
|
12
|
-
* "domain.path"
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
11
|
+
* Resolve a checklist widget's item definitions from its `x-lt-source` —
|
|
12
|
+
* a "domain.path" or an ORDERED array of paths — against the escalation
|
|
13
|
+
* context. With an array, the first entry that resolves to a non-empty item
|
|
14
|
+
* list wins, so lookup-backed and envelope-embedded rows render the same
|
|
15
|
+
* shared schema interchangeably. Paths may embed `{{domain.path}}`
|
|
16
|
+
* interpolation segments (cascading sources); an entry that cannot resolve
|
|
17
|
+
* falls through to the next. Nothing resolvable yields an empty list.
|
|
16
18
|
*/
|
|
17
|
-
export declare function resolveChecklistItems(
|
|
19
|
+
export declare function resolveChecklistItems(source: unknown, ctx: Record<string, unknown> | undefined): ChecklistItem[];
|
|
18
20
|
export declare const X_LT_DEFAULT_CHECKED = "x-lt-default-checked";
|
|
19
21
|
/**
|
|
20
22
|
* The checklist's first-load default (`x-lt-default-checked`): every resolved
|
|
@@ -10,24 +10,32 @@ exports.validateField = validateField;
|
|
|
10
10
|
const x_lt_options_1 = require("./x-lt-options");
|
|
11
11
|
const ctx_path_1 = require("./ctx-path");
|
|
12
12
|
/**
|
|
13
|
-
* Resolve a checklist widget's item definitions from its `x-lt-source`
|
|
14
|
-
* "domain.path"
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
13
|
+
* Resolve a checklist widget's item definitions from its `x-lt-source` —
|
|
14
|
+
* a "domain.path" or an ORDERED array of paths — against the escalation
|
|
15
|
+
* context. With an array, the first entry that resolves to a non-empty item
|
|
16
|
+
* list wins, so lookup-backed and envelope-embedded rows render the same
|
|
17
|
+
* shared schema interchangeably. Paths may embed `{{domain.path}}`
|
|
18
|
+
* interpolation segments (cascading sources); an entry that cannot resolve
|
|
19
|
+
* falls through to the next. Nothing resolvable yields an empty list.
|
|
18
20
|
*/
|
|
19
|
-
function resolveChecklistItems(
|
|
20
|
-
|
|
21
|
+
function resolveChecklistItems(source, ctx) {
|
|
22
|
+
const paths = (typeof source === 'string' ? [source] : Array.isArray(source) ? source : [])
|
|
23
|
+
.filter((p) => typeof p === 'string' && p.length > 0);
|
|
24
|
+
if (paths.length === 0 || !ctx)
|
|
21
25
|
return [];
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
for (const sourcePath of paths) {
|
|
27
|
+
let concrete = sourcePath;
|
|
28
|
+
if ((0, ctx_path_1.hasInterpolation)(sourcePath)) {
|
|
29
|
+
const resolved = (0, ctx_path_1.interpolatePath)(sourcePath, ctx);
|
|
30
|
+
if (resolved === null)
|
|
31
|
+
continue;
|
|
32
|
+
concrete = resolved;
|
|
33
|
+
}
|
|
34
|
+
const cur = (0, ctx_path_1.resolveCtxPath)(concrete, ctx);
|
|
35
|
+
if (Array.isArray(cur) && cur.length > 0)
|
|
36
|
+
return cur;
|
|
28
37
|
}
|
|
29
|
-
|
|
30
|
-
return Array.isArray(cur) ? cur : [];
|
|
38
|
+
return [];
|
|
31
39
|
}
|
|
32
40
|
exports.X_LT_DEFAULT_CHECKED = 'x-lt-default-checked';
|
|
33
41
|
/**
|
|
@@ -10,10 +10,18 @@ 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" — e.g.
|
|
14
|
-
*
|
|
13
|
+
* x-lt-options "domain.path" or an ORDERED array of paths — e.g.
|
|
14
|
+
* "envelope.left_quantity_options" or
|
|
15
|
+
* ["lookup.reasons.items", "envelope.reject_reason_items"].
|
|
16
|
+
* With an array, the first entry that resolves to options
|
|
17
|
+
* wins, so lookup-backed and envelope-embedded rows render
|
|
18
|
+
* the same shared schema interchangeably (a parked row
|
|
19
|
+
* falls through to the envelope it already carries).
|
|
20
|
+
* Paths may embed {{domain.path}} interpolation segments —
|
|
15
21
|
* e.g. "lookup.geo.regions.{{resolver.country}}" — making
|
|
16
|
-
* the option list follow another answer (cascading selects)
|
|
22
|
+
* the option list follow another answer (cascading selects);
|
|
23
|
+
* an entry whose interpolation cannot resolve falls through
|
|
24
|
+
* to the next entry.
|
|
17
25
|
*
|
|
18
26
|
* Object entries separate what the submitter SEES from what the payload
|
|
19
27
|
* STORES: the select renders the label and emits the value (a DB-backed pick
|
|
@@ -62,24 +70,30 @@ function resolveFieldOptions(fieldSchema, ctx) {
|
|
|
62
70
|
if (Array.isArray(staticEnum) && staticEnum.length > 0) {
|
|
63
71
|
return staticEnum.map((v) => ({ value: v, label: String(v) }));
|
|
64
72
|
}
|
|
65
|
-
const
|
|
66
|
-
|
|
73
|
+
const token = fieldSchema[exports.X_LT_OPTIONS];
|
|
74
|
+
const paths = (typeof token === 'string' ? [token] : Array.isArray(token) ? token : [])
|
|
75
|
+
.filter((p) => typeof p === 'string' && p.length > 0);
|
|
76
|
+
if (paths.length === 0)
|
|
67
77
|
return undefined;
|
|
68
|
-
// Interpolated
|
|
69
|
-
// stays a (disabled) select and fails closed
|
|
70
|
-
// undefined-on-miss
|
|
71
|
-
|
|
72
|
-
const miss =
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
78
|
+
// Interpolated entries are a standing contract: when nothing resolves, the
|
|
79
|
+
// field stays a (disabled) select and fails closed — a cascade child never
|
|
80
|
+
// becomes free text. All-plain-path tokens keep the legacy undefined-on-miss
|
|
81
|
+
// reading (the field falls back to its typed plain input).
|
|
82
|
+
const miss = paths.some(ctx_path_1.hasInterpolation) ? [] : undefined;
|
|
83
|
+
for (const sourcePath of paths) {
|
|
84
|
+
let concrete = sourcePath;
|
|
85
|
+
if ((0, ctx_path_1.hasInterpolation)(sourcePath)) {
|
|
86
|
+
const resolved = (0, ctx_path_1.interpolatePath)(sourcePath, ctx);
|
|
87
|
+
if (resolved === null)
|
|
88
|
+
continue;
|
|
89
|
+
concrete = resolved;
|
|
90
|
+
}
|
|
91
|
+
const cur = (0, ctx_path_1.resolveCtxPath)(concrete, ctx);
|
|
92
|
+
if (!Array.isArray(cur))
|
|
93
|
+
continue;
|
|
94
|
+
const options = cur.map(toOption).filter((o) => o !== null);
|
|
95
|
+
if (options.length > 0)
|
|
96
|
+
return options;
|
|
79
97
|
}
|
|
80
|
-
|
|
81
|
-
if (!Array.isArray(cur))
|
|
82
|
-
return miss;
|
|
83
|
-
const options = cur.map(toOption).filter((o) => o !== null);
|
|
84
|
-
return options.length > 0 ? options : miss;
|
|
98
|
+
return miss;
|
|
85
99
|
}
|
|
@@ -89,6 +89,21 @@ function registerExportTools(server) {
|
|
|
89
89
|
}
|
|
90
90
|
return { content: [{ type: 'text', text: JSON.stringify((0, pick_1.pickPaths)(result.data, args.select)) }] };
|
|
91
91
|
});
|
|
92
|
+
// mirrors GET /api/workflow-states/:workflowId/envelopes
|
|
93
|
+
server.registerTool('get_workflow_envelopes', {
|
|
94
|
+
title: 'Get Workflow Envelopes',
|
|
95
|
+
description: 'The workflow\'s input and output envelopes — two narrow lookups, no event ' +
|
|
96
|
+
'stream. Output is null with status running until the workflow completes; a ' +
|
|
97
|
+
'failed run carries its error message. The token-cheap read when you only ' +
|
|
98
|
+
'need what went in and what came out.',
|
|
99
|
+
inputSchema: schemas_1.getWorkflowEnvelopesSchema,
|
|
100
|
+
}, async (args) => {
|
|
101
|
+
const result = await api.getWorkflowEnvelopes({ workflowId: args.workflow_id });
|
|
102
|
+
if (result.error) {
|
|
103
|
+
return { content: [{ type: 'text', text: JSON.stringify({ error: result.error }) }], isError: true };
|
|
104
|
+
}
|
|
105
|
+
return { content: [{ type: 'text', text: JSON.stringify(result.data) }] };
|
|
106
|
+
});
|
|
92
107
|
// mirrors GET /api/workflow-states/:workflowId/status
|
|
93
108
|
server.registerTool('get_export_status', {
|
|
94
109
|
title: 'Get Workflow Status',
|
|
@@ -555,6 +555,22 @@ export declare const removeUserRoleSchema: z.ZodObject<{
|
|
|
555
555
|
role: string;
|
|
556
556
|
user_id: string;
|
|
557
557
|
}>;
|
|
558
|
+
export declare const patchUserPropertiesSchema: z.ZodObject<{
|
|
559
|
+
user_id: z.ZodString;
|
|
560
|
+
set: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
561
|
+
remove: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
562
|
+
rename: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
563
|
+
}, "strip", z.ZodTypeAny, {
|
|
564
|
+
user_id: string;
|
|
565
|
+
set?: Record<string, any> | undefined;
|
|
566
|
+
remove?: string[] | undefined;
|
|
567
|
+
rename?: Record<string, string> | undefined;
|
|
568
|
+
}, {
|
|
569
|
+
user_id: string;
|
|
570
|
+
set?: Record<string, any> | undefined;
|
|
571
|
+
remove?: string[] | undefined;
|
|
572
|
+
rename?: Record<string, string> | undefined;
|
|
573
|
+
}>;
|
|
558
574
|
export declare const listRolesSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
559
575
|
export declare const createRoleSchema: z.ZodObject<{
|
|
560
576
|
role: z.ZodString;
|
|
@@ -1420,6 +1436,13 @@ export declare const getExportStatusSchema: z.ZodObject<{
|
|
|
1420
1436
|
}, {
|
|
1421
1437
|
workflow_id: string;
|
|
1422
1438
|
}>;
|
|
1439
|
+
export declare const getWorkflowEnvelopesSchema: z.ZodObject<{
|
|
1440
|
+
workflow_id: z.ZodString;
|
|
1441
|
+
}, "strip", z.ZodTypeAny, {
|
|
1442
|
+
workflow_id: string;
|
|
1443
|
+
}, {
|
|
1444
|
+
workflow_id: string;
|
|
1445
|
+
}>;
|
|
1423
1446
|
export declare const diagnoseJobSchema: z.ZodObject<{
|
|
1424
1447
|
workflow_id: z.ZodString;
|
|
1425
1448
|
app_id: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
@@ -1803,17 +1826,17 @@ export declare const aggregateByFacetsSchema: z.ZodObject<{
|
|
|
1803
1826
|
to: string;
|
|
1804
1827
|
}>;
|
|
1805
1828
|
}, "strip", z.ZodTypeAny, {
|
|
1829
|
+
kind: "dwell";
|
|
1806
1830
|
window: {
|
|
1807
1831
|
from: string;
|
|
1808
1832
|
to: string;
|
|
1809
1833
|
};
|
|
1810
|
-
kind: "dwell";
|
|
1811
1834
|
}, {
|
|
1835
|
+
kind: "dwell";
|
|
1812
1836
|
window: {
|
|
1813
1837
|
from: string;
|
|
1814
1838
|
to: string;
|
|
1815
1839
|
};
|
|
1816
|
-
kind: "dwell";
|
|
1817
1840
|
}>]>;
|
|
1818
1841
|
distinctBy: z.ZodOptional<z.ZodString>;
|
|
1819
1842
|
states: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
@@ -1894,11 +1917,11 @@ export declare const aggregateByFacetsSchema: z.ZodObject<{
|
|
|
1894
1917
|
kind: "membership";
|
|
1895
1918
|
asOf?: string | undefined;
|
|
1896
1919
|
} | {
|
|
1920
|
+
kind: "dwell";
|
|
1897
1921
|
window: {
|
|
1898
1922
|
from: string;
|
|
1899
1923
|
to: string;
|
|
1900
1924
|
};
|
|
1901
|
-
kind: "dwell";
|
|
1902
1925
|
};
|
|
1903
1926
|
limit?: number | undefined;
|
|
1904
1927
|
offset?: number | undefined;
|
|
@@ -1943,11 +1966,11 @@ export declare const aggregateByFacetsSchema: z.ZodObject<{
|
|
|
1943
1966
|
kind: "membership";
|
|
1944
1967
|
asOf?: string | undefined;
|
|
1945
1968
|
} | {
|
|
1969
|
+
kind: "dwell";
|
|
1946
1970
|
window: {
|
|
1947
1971
|
from: string;
|
|
1948
1972
|
to: string;
|
|
1949
1973
|
};
|
|
1950
|
-
kind: "dwell";
|
|
1951
1974
|
};
|
|
1952
1975
|
limit?: number | undefined;
|
|
1953
1976
|
offset?: number | undefined;
|
|
@@ -2174,9 +2197,9 @@ export declare const upsertScanSchemeSchema: z.ZodObject<{
|
|
|
2174
2197
|
description?: string | undefined;
|
|
2175
2198
|
enabled?: boolean | undefined;
|
|
2176
2199
|
encoding?: "fixed" | "delimited" | undefined;
|
|
2177
|
-
kind?: "action" | "identity" | undefined;
|
|
2178
2200
|
delimiter?: string | undefined;
|
|
2179
2201
|
target_length?: number | undefined;
|
|
2202
|
+
kind?: "action" | "identity" | undefined;
|
|
2180
2203
|
grant_ttl_seconds?: number | undefined;
|
|
2181
2204
|
grant_max_uses?: number | undefined;
|
|
2182
2205
|
}, {
|
|
@@ -2186,9 +2209,9 @@ export declare const upsertScanSchemeSchema: z.ZodObject<{
|
|
|
2186
2209
|
description?: string | undefined;
|
|
2187
2210
|
enabled?: boolean | undefined;
|
|
2188
2211
|
encoding?: "fixed" | "delimited" | undefined;
|
|
2189
|
-
kind?: "action" | "identity" | undefined;
|
|
2190
2212
|
delimiter?: string | undefined;
|
|
2191
2213
|
target_length?: number | undefined;
|
|
2214
|
+
kind?: "action" | "identity" | undefined;
|
|
2192
2215
|
grant_ttl_seconds?: number | undefined;
|
|
2193
2216
|
grant_max_uses?: number | undefined;
|
|
2194
2217
|
}>;
|
|
@@ -2408,21 +2431,21 @@ export declare const upsertScanRuleSchema: z.ZodObject<{
|
|
|
2408
2431
|
markdown: z.ZodOptional<z.ZodString>;
|
|
2409
2432
|
route: z.ZodOptional<z.ZodString>;
|
|
2410
2433
|
}, "strip", z.ZodTypeAny, {
|
|
2411
|
-
route?: string | undefined;
|
|
2412
2434
|
markdown?: string | undefined;
|
|
2413
|
-
}, {
|
|
2414
2435
|
route?: string | undefined;
|
|
2436
|
+
}, {
|
|
2415
2437
|
markdown?: string | undefined;
|
|
2438
|
+
route?: string | undefined;
|
|
2416
2439
|
}>>;
|
|
2417
2440
|
notPrimed: z.ZodOptional<z.ZodObject<{
|
|
2418
2441
|
markdown: z.ZodOptional<z.ZodString>;
|
|
2419
2442
|
route: z.ZodOptional<z.ZodString>;
|
|
2420
2443
|
}, "strip", z.ZodTypeAny, {
|
|
2421
|
-
route?: string | undefined;
|
|
2422
2444
|
markdown?: string | undefined;
|
|
2423
|
-
}, {
|
|
2424
2445
|
route?: string | undefined;
|
|
2446
|
+
}, {
|
|
2425
2447
|
markdown?: string | undefined;
|
|
2448
|
+
route?: string | undefined;
|
|
2426
2449
|
}>>;
|
|
2427
2450
|
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
2428
2451
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -2473,12 +2496,12 @@ export declare const upsertScanRuleSchema: z.ZodObject<{
|
|
|
2473
2496
|
}[];
|
|
2474
2497
|
enabled?: boolean | undefined;
|
|
2475
2498
|
fallback?: {
|
|
2476
|
-
route?: string | undefined;
|
|
2477
2499
|
markdown?: string | undefined;
|
|
2500
|
+
route?: string | undefined;
|
|
2478
2501
|
} | undefined;
|
|
2479
2502
|
notPrimed?: {
|
|
2480
|
-
route?: string | undefined;
|
|
2481
2503
|
markdown?: string | undefined;
|
|
2504
|
+
route?: string | undefined;
|
|
2482
2505
|
} | undefined;
|
|
2483
2506
|
}, {
|
|
2484
2507
|
name: string;
|
|
@@ -2528,12 +2551,12 @@ export declare const upsertScanRuleSchema: z.ZodObject<{
|
|
|
2528
2551
|
}[];
|
|
2529
2552
|
enabled?: boolean | undefined;
|
|
2530
2553
|
fallback?: {
|
|
2531
|
-
route?: string | undefined;
|
|
2532
2554
|
markdown?: string | undefined;
|
|
2555
|
+
route?: string | undefined;
|
|
2533
2556
|
} | undefined;
|
|
2534
2557
|
notPrimed?: {
|
|
2535
|
-
route?: string | undefined;
|
|
2536
2558
|
markdown?: string | undefined;
|
|
2559
|
+
route?: string | undefined;
|
|
2537
2560
|
} | undefined;
|
|
2538
2561
|
}>;
|
|
2539
2562
|
export declare const deleteScanRuleSchema: z.ZodObject<{
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.
|
|
5
|
-
exports.deleteScanRuleSchema = exports.upsertScanRuleSchema = exports.upsertScanSchemeSchema = exports.listScanSchemesSchema = exports.executeScanChoiceSchema = exports.executeScanCodeSchema = exports.timelineByFacetSchema = exports.aggregateByFacetsSchema = exports.claimByFacetsSchema = exports.claimGroupsSchema = exports.searchByFacetsSchema = void 0;
|
|
3
|
+
exports.unlinkPersonaRoleSchema = exports.linkPersonaRoleSchema = exports.deletePersonaSchema = exports.updatePersonaSchema = exports.createPersonaSchema = exports.getPersonaSchema = exports.listPersonasSchema = exports.listRoleSchemaVersionsSchema = exports.getRoleSchemaSchema = exports.updateRoleSchema = exports.addEscalationChainSchema = exports.createRoleSchema = exports.listRolesSchema = exports.patchUserPropertiesSchema = 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.getDomainContextSchema = exports.terminateWorkflowSchema = 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.findOrphanedSignalsSchema = exports.findStalledJobsSchema = exports.diagnoseJobSchema = exports.getWorkflowEnvelopesSchema = exports.getExportStatusSchema = exports.exportWorkflowExecutionSchema = exports.exportWorkflowStateSchema = exports.listExportJobsSchema = exports.getSettingsSchema = exports.updatePrioritySchema = exports.bulkEscalateSchema = exports.bulkUnassignSchema = 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 = exports.listBotsSchema = exports.deleteAgentSubscriptionSchema = exports.createAgentSubscriptionSchema = exports.listAgentSubscriptionsSchema = exports.deleteAgentSchema = exports.updateAgentSchema = exports.createAgentSchema = exports.getAgentSchema = exports.listAgentsSchema = exports.pruneSchema = exports.getUserPersonasSchema = exports.unassignPersonaSchema = exports.assignPersonaSchema = void 0;
|
|
5
|
+
exports.deleteScanRuleSchema = exports.upsertScanRuleSchema = exports.upsertScanSchemeSchema = exports.listScanSchemesSchema = exports.executeScanChoiceSchema = exports.executeScanCodeSchema = exports.timelineByFacetSchema = exports.aggregateByFacetsSchema = exports.claimByFacetsSchema = exports.claimGroupsSchema = exports.searchByFacetsSchema = exports.resolveByIdsSchema = exports.facetQuerySchema = void 0;
|
|
6
6
|
/**
|
|
7
7
|
* Zod schemas for the admin MCP server tools.
|
|
8
8
|
*
|
|
@@ -240,6 +240,12 @@ exports.removeUserRoleSchema = zod_1.z.object({
|
|
|
240
240
|
user_id: zod_1.z.string().describe('User UUID'),
|
|
241
241
|
role: zod_1.z.string().describe('Role to remove'),
|
|
242
242
|
});
|
|
243
|
+
exports.patchUserPropertiesSchema = zod_1.z.object({
|
|
244
|
+
user_id: zod_1.z.string().describe('User UUID'),
|
|
245
|
+
set: zod_1.z.record(zod_1.z.any()).optional().describe('Properties to set — typed JSON values'),
|
|
246
|
+
remove: zod_1.z.array(zod_1.z.string()).optional().describe('Property keys to delete'),
|
|
247
|
+
rename: zod_1.z.record(zod_1.z.string()).optional().describe('{ oldKey: newKey } renames — values preserved'),
|
|
248
|
+
});
|
|
243
249
|
// ── roles (routes/roles.ts) ─────────────────────────────────────────────────
|
|
244
250
|
exports.listRolesSchema = zod_1.z.object({});
|
|
245
251
|
exports.createRoleSchema = zod_1.z.object({
|
|
@@ -579,6 +585,9 @@ exports.exportWorkflowExecutionSchema = zod_1.z.object({
|
|
|
579
585
|
exports.getExportStatusSchema = zod_1.z.object({
|
|
580
586
|
workflow_id: zod_1.z.string().describe('Workflow ID to check export status'),
|
|
581
587
|
});
|
|
588
|
+
exports.getWorkflowEnvelopesSchema = zod_1.z.object({
|
|
589
|
+
workflow_id: zod_1.z.string().describe('Workflow ID whose input/output envelopes to fetch'),
|
|
590
|
+
});
|
|
582
591
|
// ── Diagnostics ───────────────────────────────────────────────────────────────
|
|
583
592
|
exports.diagnoseJobSchema = zod_1.z.object({
|
|
584
593
|
workflow_id: zod_1.z.string().describe('Workflow ID to diagnose'),
|