@hotmeshio/long-tail 0.9.2 → 0.9.4
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/dashboard/dist/assets/{AdminDashboard-JobmypiO.js → AdminDashboard-DmQG0fUK.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-JobmypiO.js.map → AdminDashboard-DmQG0fUK.js.map} +1 -1
- package/dashboard/dist/assets/{AgentConfigPage-D_HuaRN9.js → AgentConfigPage-BZ8g7Ml8.js} +5 -5
- package/dashboard/dist/assets/{AgentConfigPage-D_HuaRN9.js.map → AgentConfigPage-BZ8g7Ml8.js.map} +1 -1
- package/dashboard/dist/assets/{AgentDetailPage-Cj22NZLI.js → AgentDetailPage-Cdinl7bx.js} +3 -3
- package/dashboard/dist/assets/{AgentDetailPage-Cj22NZLI.js.map → AgentDetailPage-Cdinl7bx.js.map} +1 -1
- package/dashboard/dist/assets/{AgentsPage-DTKto-gL.js → AgentsPage-GEYMgmez.js} +2 -2
- package/dashboard/dist/assets/{AgentsPage-DTKto-gL.js.map → AgentsPage-GEYMgmez.js.map} +1 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-qRf3tBYi.js +2 -0
- package/dashboard/dist/assets/AvailableEscalationsPage-qRf3tBYi.js.map +1 -0
- package/dashboard/dist/assets/{BotPicker-AwKouk26.js → BotPicker-Bpglj7RE.js} +2 -2
- package/dashboard/dist/assets/{BotPicker-AwKouk26.js.map → BotPicker-Bpglj7RE.js.map} +1 -1
- package/dashboard/dist/assets/{CapabilitiesPage-1ZMO_0UU.js → CapabilitiesPage-ARIQzRiq.js} +2 -2
- package/dashboard/dist/assets/{CapabilitiesPage-1ZMO_0UU.js.map → CapabilitiesPage-ARIQzRiq.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-D6kUTrq4.js → CollapsibleSection-BuZl37uS.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-D6kUTrq4.js.map → CollapsibleSection-BuZl37uS.js.map} +1 -1
- package/dashboard/dist/assets/{CountdownTimer-Bj9YbInO.js → CountdownTimer-CRK-E2UF.js} +2 -2
- package/dashboard/dist/assets/{CountdownTimer-Bj9YbInO.js.map → CountdownTimer-CRK-E2UF.js.map} +1 -1
- package/dashboard/dist/assets/{CredentialsPage-D5H_kyRL.js → CredentialsPage-CjBiPahB.js} +2 -2
- package/dashboard/dist/assets/{CredentialsPage-D5H_kyRL.js.map → CredentialsPage-CjBiPahB.js.map} +1 -1
- package/dashboard/dist/assets/{CronLabel-DvmJ0EFz.js → CronLabel-DTXl2Rgj.js} +2 -2
- package/dashboard/dist/assets/{CronLabel-DvmJ0EFz.js.map → CronLabel-DTXl2Rgj.js.map} +1 -1
- package/dashboard/dist/assets/{CustomDurationPicker-DT_g8Hr4.js → CustomDurationPicker-qhb23E3p.js} +2 -2
- package/dashboard/dist/assets/{CustomDurationPicker-DT_g8Hr4.js.map → CustomDurationPicker-qhb23E3p.js.map} +1 -1
- package/dashboard/dist/assets/{DropZone-wJqP4zA4.js → DropZone-C1TpkVQG.js} +2 -2
- package/dashboard/dist/assets/{DropZone-wJqP4zA4.js.map → DropZone-C1TpkVQG.js.map} +1 -1
- package/dashboard/dist/assets/{ElapsedCell-7_8YpC3D.js → ElapsedCell-BMhamzj3.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-7_8YpC3D.js.map → ElapsedCell-BMhamzj3.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationListSchemaPage-ClFRLeKV.js → EscalationListSchemaPage-BEi89A7y.js} +3 -3
- package/dashboard/dist/assets/{EscalationListSchemaPage-ClFRLeKV.js.map → EscalationListSchemaPage-BEi89A7y.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationSchemaPage-BcYcj-b8.js → EscalationSchemaPage-9NY4Q4ku.js} +3 -3
- package/dashboard/dist/assets/{EscalationSchemaPage-BcYcj-b8.js.map → EscalationSchemaPage-9NY4Q4ku.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-uHb8ni_5.js → EscalationsOverview-2VRjFxPV.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-uHb8ni_5.js.map → EscalationsOverview-2VRjFxPV.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-CkdWqmEL.js → EventTable-hHPNI3Yq.js} +2 -2
- package/dashboard/dist/assets/{EventTable-CkdWqmEL.js.map → EventTable-hHPNI3Yq.js.map} +1 -1
- package/dashboard/dist/assets/{GraphInvokePage-C6sfPjSc.js → GraphInvokePage-B6qAC8zt.js} +2 -2
- package/dashboard/dist/assets/{GraphInvokePage-C6sfPjSc.js.map → GraphInvokePage-B6qAC8zt.js.map} +1 -1
- package/dashboard/dist/assets/{HomePage-CUHZxihq.js → HomePage-DDyQOu57.js} +2 -2
- package/dashboard/dist/assets/{HomePage-CUHZxihq.js.map → HomePage-DDyQOu57.js.map} +1 -1
- package/dashboard/dist/assets/{ListToolbar-nWxpujpH.js → ListToolbar-BUgEY8Oc.js} +2 -2
- package/dashboard/dist/assets/{ListToolbar-nWxpujpH.js.map → ListToolbar-BUgEY8Oc.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-DXrkDkU-.js → McpOverview-DIenRt0e.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-DXrkDkU-.js.map → McpOverview-DIenRt0e.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryDetailPage-CnLYE26v.js → McpQueryDetailPage-CxAR4Bpw.js} +2 -2
- package/dashboard/dist/assets/{McpQueryDetailPage-CnLYE26v.js.map → McpQueryDetailPage-CxAR4Bpw.js.map} +1 -1
- package/dashboard/dist/assets/{McpQueryPage-oE9eWAus.js → McpQueryPage-CkT4A2c5.js} +2 -2
- package/dashboard/dist/assets/{McpQueryPage-oE9eWAus.js.map → McpQueryPage-CkT4A2c5.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunDetailPage-B7e6AVl1.js → McpRunDetailPage-DDiOtG5r.js} +2 -2
- package/dashboard/dist/assets/{McpRunDetailPage-B7e6AVl1.js.map → McpRunDetailPage-DDiOtG5r.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunsPage-Bx5DiGk7.js → McpRunsPage-BWe6WVzw.js} +2 -2
- package/dashboard/dist/assets/{McpRunsPage-Bx5DiGk7.js.map → McpRunsPage-BWe6WVzw.js.map} +1 -1
- package/dashboard/dist/assets/{NamespacePill-BlhSWa5S.js → NamespacePill--ikKtMvx.js} +2 -2
- package/dashboard/dist/assets/{NamespacePill-BlhSWa5S.js.map → NamespacePill--ikKtMvx.js.map} +1 -1
- package/dashboard/dist/assets/{OperationsPage-BmG3qzdR.js → OperationsPage-CzJx-zxj.js} +2 -2
- package/dashboard/dist/assets/{OperationsPage-BmG3qzdR.js.map → OperationsPage-CzJx-zxj.js.map} +1 -1
- package/dashboard/dist/assets/{OperatorDashboard-r6hQ57eO.js → OperatorDashboard-CVq7V7hE.js} +2 -2
- package/dashboard/dist/assets/{OperatorDashboard-r6hQ57eO.js.map → OperatorDashboard-CVq7V7hE.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeader-Ji1AtA4f.js → PageHeader-CiFhzGc0.js} +2 -2
- package/dashboard/dist/assets/{PageHeader-Ji1AtA4f.js.map → PageHeader-CiFhzGc0.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeaderWithStats-B2qrFAaG.js → PageHeaderWithStats-_zOnWAhq.js} +2 -2
- package/dashboard/dist/assets/{PageHeaderWithStats-B2qrFAaG.js.map → PageHeaderWithStats-_zOnWAhq.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessDetailPage-C3gE4OHq.js → ProcessDetailPage-BWVFB-nL.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-C3gE4OHq.js.map → ProcessDetailPage-BWVFB-nL.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-DSsIGmBB.js → ProcessesListPage-kyRO3E9d.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-DSsIGmBB.js.map → ProcessesListPage-kyRO3E9d.js.map} +1 -1
- package/dashboard/dist/assets/{RoleDetailPage-DiFISbnq.js → RoleDetailPage-DrSlAQUQ.js} +3 -3
- package/dashboard/dist/assets/{RoleDetailPage-DiFISbnq.js.map → RoleDetailPage-DrSlAQUQ.js.map} +1 -1
- package/dashboard/dist/assets/{RolePill-ColM_ynA.js → RolePill-CUIJSgRq.js} +2 -2
- package/dashboard/dist/assets/{RolePill-ColM_ynA.js.map → RolePill-CUIJSgRq.js.map} +1 -1
- package/dashboard/dist/assets/{RolesPage-CE5fui18.js → RolesPage-tT21PIEb.js} +2 -2
- package/dashboard/dist/assets/{RolesPage-CE5fui18.js.map → RolesPage-tT21PIEb.js.map} +1 -1
- package/dashboard/dist/assets/{RunAsSelector-Ct8NNadu.js → RunAsSelector-BqhOzi2p.js} +2 -2
- package/dashboard/dist/assets/{RunAsSelector-Ct8NNadu.js.map → RunAsSelector-BqhOzi2p.js.map} +1 -1
- package/dashboard/dist/assets/{SlidePanel-BzeKveus.js → SlidePanel-BcWKelpn.js} +2 -2
- package/dashboard/dist/assets/{SlidePanel-BzeKveus.js.map → SlidePanel-BcWKelpn.js.map} +1 -1
- package/dashboard/dist/assets/{StickyPagination-BfgBtP_B.js → StickyPagination-BTDj99Vb.js} +2 -2
- package/dashboard/dist/assets/{StickyPagination-BfgBtP_B.js.map → StickyPagination-BTDj99Vb.js.map} +1 -1
- package/dashboard/dist/assets/StreamMessageDetail-DjjnJ31Q.js +2 -0
- package/dashboard/dist/assets/{StreamMessageDetail-2rwp7Ynx.js.map → StreamMessageDetail-DjjnJ31Q.js.map} +1 -1
- package/dashboard/dist/assets/{SwimlaneTimeline-BwWyYBCo.js → SwimlaneTimeline-Db7ATobq.js} +2 -2
- package/dashboard/dist/assets/{SwimlaneTimeline-BwWyYBCo.js.map → SwimlaneTimeline-Db7ATobq.js.map} +1 -1
- package/dashboard/dist/assets/{TagInput-By0E_Jym.js → TagInput-BaFJCq9A.js} +2 -2
- package/dashboard/dist/assets/{TagInput-By0E_Jym.js.map → TagInput-BaFJCq9A.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-BUKHu2oD.js → TaskDetailPage-BVlCa-PR.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-BUKHu2oD.js.map → TaskDetailPage-BVlCa-PR.js.map} +1 -1
- package/dashboard/dist/assets/{TaskQueuePill-CY1ZSwWu.js → TaskQueuePill-D9e16qkU.js} +2 -2
- package/dashboard/dist/assets/{TaskQueuePill-CY1ZSwWu.js.map → TaskQueuePill-D9e16qkU.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-C_PwExQC.js → TasksListPage-PKscNTJs.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-C_PwExQC.js.map → TasksListPage-PKscNTJs.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-Bagm-L2o.js → TimeAgo-CGx_Ffwq.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-Bagm-L2o.js.map → TimeAgo-CGx_Ffwq.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-BwDo7knq.js → TimestampCell-CdD5hp9o.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-BwDo7knq.js.map → TimestampCell-CdD5hp9o.js.map} +1 -1
- package/dashboard/dist/assets/{ToolPill-D0IzqLEe.js → ToolPill-Enc3nyic.js} +2 -2
- package/dashboard/dist/assets/{ToolPill-D0IzqLEe.js.map → ToolPill-Enc3nyic.js.map} +1 -1
- package/dashboard/dist/assets/{ToolTestPanel-CVZ2M1yv.js → ToolTestPanel-DWs0DNGB.js} +2 -2
- package/dashboard/dist/assets/{ToolTestPanel-CVZ2M1yv.js.map → ToolTestPanel-DWs0DNGB.js.map} +1 -1
- package/dashboard/dist/assets/{TopicDetailPage-DKAvbkxD.js → TopicDetailPage-BaL3m3yb.js} +3 -3
- package/dashboard/dist/assets/{TopicDetailPage-DKAvbkxD.js.map → TopicDetailPage-BaL3m3yb.js.map} +1 -1
- package/dashboard/dist/assets/{TopicsPage-BZknsApe.js → TopicsPage-bFjJUYmO.js} +2 -2
- package/dashboard/dist/assets/{TopicsPage-BZknsApe.js.map → TopicsPage-bFjJUYmO.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-ByDxLHPZ.js → UserName-IdFyeFle.js} +2 -2
- package/dashboard/dist/assets/{UserName-ByDxLHPZ.js.map → UserName-IdFyeFle.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-DrwKB2x8.js → WorkflowExecutionPage-DtC-71vO.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-DrwKB2x8.js.map → WorkflowExecutionPage-DtC-71vO.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowPill-BXmmLR0t.js → WorkflowPill-S6VV2Eax.js} +2 -2
- package/dashboard/dist/assets/{WorkflowPill-BXmmLR0t.js.map → WorkflowPill-S6VV2Eax.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsDashboard-DEq9fkhl.js → WorkflowsDashboard-DGtMG5vL.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsDashboard-DEq9fkhl.js.map → WorkflowsDashboard-DGtMG5vL.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-l-0KYP7Y.js → WorkflowsOverview-BFs-ZSTn.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-l-0KYP7Y.js.map → WorkflowsOverview-BFs-ZSTn.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-BgimL3VT.js → YamlWorkflowDetailPage-6FTLoVfO.js} +25 -25
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-BgimL3VT.js.map → YamlWorkflowDetailPage-6FTLoVfO.js.map} +1 -1
- package/dashboard/dist/assets/{YamlWorkflowsPage-CabXXA9r.js → YamlWorkflowsPage-0Moxrj_c.js} +2 -2
- package/dashboard/dist/assets/{YamlWorkflowsPage-CabXXA9r.js.map → YamlWorkflowsPage-0Moxrj_c.js.map} +1 -1
- package/dashboard/dist/assets/{agents-D_L6lV0f.js → agents-Dpg829fG.js} +2 -2
- package/dashboard/dist/assets/{agents-D_L6lV0f.js.map → agents-Dpg829fG.js.map} +1 -1
- package/dashboard/dist/assets/{bots-wdZz1nJw.js → bots-BiS_mYcH.js} +2 -2
- package/dashboard/dist/assets/{bots-wdZz1nJw.js.map → bots-BiS_mYcH.js.map} +1 -1
- package/dashboard/dist/assets/{capabilities-C35_V8eu.js → capabilities-Cpe3amV5.js} +2 -2
- package/dashboard/dist/assets/{capabilities-C35_V8eu.js.map → capabilities-Cpe3amV5.js.map} +1 -1
- package/dashboard/dist/assets/{controlplane-kR2P6zYv.js → controlplane-CjK2cXaD.js} +2 -2
- package/dashboard/dist/assets/{controlplane-kR2P6zYv.js.map → controlplane-CjK2cXaD.js.map} +1 -1
- package/dashboard/dist/assets/escalation-columns-_KrFogWG.js +2 -0
- package/dashboard/dist/assets/escalation-columns-_KrFogWG.js.map +1 -0
- package/dashboard/dist/assets/{index-xBNf5aFb.js → index-3ewF-RsR.js} +2 -2
- package/dashboard/dist/assets/{index-xBNf5aFb.js.map → index-3ewF-RsR.js.map} +1 -1
- package/dashboard/dist/assets/{index-BMQopgAx.js → index-BFh7zbQF.js} +2 -2
- package/dashboard/dist/assets/{index-BMQopgAx.js.map → index-BFh7zbQF.js.map} +1 -1
- package/dashboard/dist/assets/{index-BmbO85oT.js → index-BYpOpKoM.js} +2 -2
- package/dashboard/dist/assets/{index-BmbO85oT.js.map → index-BYpOpKoM.js.map} +1 -1
- package/dashboard/dist/assets/{index-wZzl3bcK.js → index-Be9bw5cd.js} +2 -2
- package/dashboard/dist/assets/{index-wZzl3bcK.js.map → index-Be9bw5cd.js.map} +1 -1
- package/dashboard/dist/assets/{index-QOTnrFd1.js → index-C42kzl9D.js} +2 -2
- package/dashboard/dist/assets/{index-QOTnrFd1.js.map → index-C42kzl9D.js.map} +1 -1
- package/dashboard/dist/assets/{index-BfDn7j4K.js → index-CTTxpoEl.js} +2 -2
- package/dashboard/dist/assets/{index-BfDn7j4K.js.map → index-CTTxpoEl.js.map} +1 -1
- package/dashboard/dist/assets/index-DWXhbO4b.js +5 -0
- package/dashboard/dist/assets/index-DWXhbO4b.js.map +1 -0
- package/dashboard/dist/assets/index-DYcP4jyl.js +63 -0
- package/dashboard/dist/assets/index-DYcP4jyl.js.map +1 -0
- package/dashboard/dist/assets/{index-C75E0-Wd.js → index-Dq5RU7sm.js} +2 -2
- package/dashboard/dist/assets/{index-C75E0-Wd.js.map → index-Dq5RU7sm.js.map} +1 -1
- package/dashboard/dist/assets/{index-BZfX_ziz.js → index-Fc1qNrqI.js} +2 -2
- package/dashboard/dist/assets/{index-BZfX_ziz.js.map → index-Fc1qNrqI.js.map} +1 -1
- package/dashboard/dist/assets/{index-B4zWCfQr.js → index-IHOuIqlt.js} +2 -2
- package/dashboard/dist/assets/{index-B4zWCfQr.js.map → index-IHOuIqlt.js.map} +1 -1
- package/dashboard/dist/assets/{index-1WCiN-pF.js → index-JQCy1mnu.js} +2 -2
- package/dashboard/dist/assets/{index-1WCiN-pF.js.map → index-JQCy1mnu.js.map} +1 -1
- package/dashboard/dist/assets/{index-CJFA7aLp.js → index-p85Oqfqc.js} +2 -2
- package/dashboard/dist/assets/{index-CJFA7aLp.js.map → index-p85Oqfqc.js.map} +1 -1
- package/dashboard/dist/assets/index-waKF7bKZ.css +1 -0
- package/dashboard/dist/assets/{knowledge-DDt599ea.js → knowledge-Bed_1toa.js} +2 -2
- package/dashboard/dist/assets/{knowledge-DDt599ea.js.map → knowledge-Bed_1toa.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-BPXRXEje.js → mcp-LRVvEX8W.js} +2 -2
- package/dashboard/dist/assets/{mcp-BPXRXEje.js.map → mcp-LRVvEX8W.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-HUZuboi-.js → mcp-query-k2J65UbP.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-HUZuboi-.js.map → mcp-query-k2J65UbP.js.map} +1 -1
- package/dashboard/dist/assets/{pipelines-CH8q3ok_.js → pipelines-C9fpHxJR.js} +2 -2
- package/dashboard/dist/assets/{pipelines-CH8q3ok_.js.map → pipelines-C9fpHxJR.js.map} +1 -1
- package/dashboard/dist/assets/{roles-B7rzw8wD.js → roles-BO-4Ieun.js} +2 -2
- package/dashboard/dist/assets/{roles-B7rzw8wD.js.map → roles-BO-4Ieun.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-j-mVt2EA.js → tasks-BiyBXdk7.js} +2 -2
- package/dashboard/dist/assets/{tasks-j-mVt2EA.js.map → tasks-BiyBXdk7.js.map} +1 -1
- package/dashboard/dist/assets/{topics-DATyaYWW.js → topics-m_BXjCFf.js} +2 -2
- package/dashboard/dist/assets/{topics-DATyaYWW.js.map → topics-m_BXjCFf.js.map} +1 -1
- package/dashboard/dist/assets/{useEventHooks-CwIAhqJk.js → useEventHooks-CtkD_tnd.js} +2 -2
- package/dashboard/dist/assets/{useEventHooks-CwIAhqJk.js.map → useEventHooks-CtkD_tnd.js.map} +1 -1
- package/dashboard/dist/assets/{useNamespace-hV7rcAfa.js → useNamespace-Dt2COnsG.js} +2 -2
- package/dashboard/dist/assets/{useNamespace-hV7rcAfa.js.map → useNamespace-Dt2COnsG.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-Dwuuu3F0.js → useYamlActivityEvents--i7p1Ta9.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-Dwuuu3F0.js.map → useYamlActivityEvents--i7p1Ta9.js.map} +1 -1
- package/dashboard/dist/assets/{users-DS9yeHe4.js → users-BsRZkm9v.js} +2 -2
- package/dashboard/dist/assets/{users-DS9yeHe4.js.map → users-BsRZkm9v.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-BX2Vih4L.js → vendor-icons-DPmIjhZB.js} +129 -124
- package/dashboard/dist/assets/vendor-icons-DPmIjhZB.js.map +1 -0
- package/dashboard/dist/assets/{workflows-FF8WUHaC.js → workflows-B0djSSvg.js} +2 -2
- package/dashboard/dist/assets/{workflows-FF8WUHaC.js.map → workflows-B0djSSvg.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-y-eo6Rwj.js → yaml-workflows-CupO7vvi.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-y-eo6Rwj.js.map → yaml-workflows-CupO7vvi.js.map} +1 -1
- package/dashboard/dist/index.html +3 -3
- package/docs/hitl-guide.md +125 -1
- package/package.json +1 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-CUvrKkgS.js +0 -2
- package/dashboard/dist/assets/AvailableEscalationsPage-CUvrKkgS.js.map +0 -1
- package/dashboard/dist/assets/StreamMessageDetail-2rwp7Ynx.js +0 -2
- package/dashboard/dist/assets/escalation-columns-BVj16HuR.js +0 -2
- package/dashboard/dist/assets/escalation-columns-BVj16HuR.js.map +0 -1
- package/dashboard/dist/assets/index-CsMAT5cs.css +0 -1
- package/dashboard/dist/assets/index-DIrYjyRG.js +0 -5
- package/dashboard/dist/assets/index-DIrYjyRG.js.map +0 -1
- package/dashboard/dist/assets/index-so192yXP.js +0 -63
- package/dashboard/dist/assets/index-so192yXP.js.map +0 -1
- package/dashboard/dist/assets/vendor-icons-BX2Vih4L.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as i,c as s}from"./vendor-query-B2UbickB.js";import{d as u}from"./index-
|
|
2
|
-
//# sourceMappingURL=pipelines-
|
|
1
|
+
import{u as i,c as s}from"./vendor-query-B2UbickB.js";import{d as u}from"./index-DYcP4jyl.js";function p(e={},n){const t=new URLSearchParams;return e.limit&&t.set("limit",String(e.limit)),e.offset!==void 0&&t.set("offset",String(e.offset)),e.entity&&t.set("entity",e.entity),e.search&&t.set("search",e.search),e.status&&t.set("status",e.status),e.sort_by&&t.set("sort_by",e.sort_by),e.order&&t.set("order",e.order),t.set("app_id",e.app_id||""),i({queryKey:["mcpRuns",e],queryFn:()=>u(`/pipelines?${t}`),enabled:(n==null?void 0:n.enabled)??!0})}function c(e=""){return i({queryKey:["mcpEntities",e],queryFn:()=>u(`/pipelines/entities?app_id=${e}`)})}function o(e,n=""){return i({queryKey:["mcpRunExecution",e,n],queryFn:()=>u(`/pipelines/${e}/execution?app_id=${n}`),enabled:!!e})}function y(){return s({mutationFn:e=>u(`/pipelines/${e.jobId}/interrupt`,{method:"POST",body:JSON.stringify({topic:e.topic,app_id:e.appId})})})}export{c as a,o as b,y as c,p as u};
|
|
2
|
+
//# sourceMappingURL=pipelines-C9fpHxJR.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipelines-
|
|
1
|
+
{"version":3,"file":"pipelines-C9fpHxJR.js","sources":["../../src/api/pipelines.ts"],"sourcesContent":["import { useQuery, useMutation } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { LTJob, WorkflowExecution } from './types';\n\ninterface McpRunFilters {\n limit?: number;\n offset?: number;\n entity?: string;\n search?: string;\n status?: string;\n app_id?: string;\n sort_by?: string;\n order?: string;\n}\n\nexport function useMcpRuns(filters: McpRunFilters = {}, options?: { enabled?: boolean }) {\n const params = new URLSearchParams();\n if (filters.limit) params.set('limit', String(filters.limit));\n if (filters.offset !== undefined) params.set('offset', String(filters.offset));\n if (filters.entity) params.set('entity', filters.entity);\n if (filters.search) params.set('search', filters.search);\n if (filters.status) params.set('status', filters.status);\n if (filters.sort_by) params.set('sort_by', filters.sort_by);\n if (filters.order) params.set('order', filters.order);\n params.set('app_id', filters.app_id || '');\n\n return useQuery<{ jobs: LTJob[]; total: number }>({\n queryKey: ['mcpRuns', filters],\n queryFn: () => apiFetch(`/pipelines?${params}`),\n enabled: options?.enabled ?? true,\n });\n}\n\nexport function useMcpEntities(appId = '') {\n return useQuery<{ entities: string[] }>({\n queryKey: ['mcpEntities', appId],\n queryFn: () => apiFetch(`/pipelines/entities?app_id=${appId}`),\n });\n}\n\nexport function useMcpRunExecution(jobId: string, appId = '') {\n return useQuery<WorkflowExecution>({\n queryKey: ['mcpRunExecution', jobId, appId],\n queryFn: () => apiFetch(`/pipelines/${jobId}/execution?app_id=${appId}`),\n enabled: !!jobId,\n });\n}\n\nexport function useInterruptJob() {\n return useMutation({\n mutationFn: (input: { jobId: string; topic: string; appId: string }) =>\n apiFetch(`/pipelines/${input.jobId}/interrupt`, {\n method: 'POST',\n body: JSON.stringify({ topic: input.topic, app_id: input.appId }),\n }),\n });\n}\n"],"names":["useMcpRuns","filters","options","params","useQuery","apiFetch","useMcpEntities","appId","useMcpRunExecution","jobId","useInterruptJob","useMutation","input"],"mappings":"8FAeO,SAASA,EAAWC,EAAyB,CAAA,EAAIC,EAAiC,CACvF,MAAMC,EAAS,IAAI,gBACnB,OAAIF,EAAQ,OAAOE,EAAO,IAAI,QAAS,OAAOF,EAAQ,KAAK,CAAC,EACxDA,EAAQ,SAAW,QAAWE,EAAO,IAAI,SAAU,OAAOF,EAAQ,MAAM,CAAC,EACzEA,EAAQ,QAAQE,EAAO,IAAI,SAAUF,EAAQ,MAAM,EACnDA,EAAQ,QAAQE,EAAO,IAAI,SAAUF,EAAQ,MAAM,EACnDA,EAAQ,QAAQE,EAAO,IAAI,SAAUF,EAAQ,MAAM,EACnDA,EAAQ,SAASE,EAAO,IAAI,UAAWF,EAAQ,OAAO,EACtDA,EAAQ,OAAOE,EAAO,IAAI,QAASF,EAAQ,KAAK,EACpDE,EAAO,IAAI,SAAUF,EAAQ,QAAU,EAAE,EAElCG,EAA2C,CAChD,SAAU,CAAC,UAAWH,CAAO,EAC7B,QAAS,IAAMI,EAAS,cAAcF,CAAM,EAAE,EAC9C,SAASD,GAAA,YAAAA,EAAS,UAAW,EAAA,CAC9B,CACH,CAEO,SAASI,EAAeC,EAAQ,GAAI,CACzC,OAAOH,EAAiC,CACtC,SAAU,CAAC,cAAeG,CAAK,EAC/B,QAAS,IAAMF,EAAS,8BAA8BE,CAAK,EAAE,CAAA,CAC9D,CACH,CAEO,SAASC,EAAmBC,EAAeF,EAAQ,GAAI,CAC5D,OAAOH,EAA4B,CACjC,SAAU,CAAC,kBAAmBK,EAAOF,CAAK,EAC1C,QAAS,IAAMF,EAAS,cAAcI,CAAK,qBAAqBF,CAAK,EAAE,EACvE,QAAS,CAAC,CAACE,CAAA,CACZ,CACH,CAEO,SAASC,GAAkB,CAChC,OAAOC,EAAY,CACjB,WAAaC,GACXP,EAAS,cAAcO,EAAM,KAAK,aAAc,CAC9C,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,MAAOA,EAAM,MAAO,OAAQA,EAAM,KAAA,CAAO,CAAA,CACjE,CAAA,CACJ,CACH"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as t,b as a,c as u}from"./vendor-query-B2UbickB.js";import{d as n}from"./index-
|
|
2
|
-
//# sourceMappingURL=roles-
|
|
1
|
+
import{u as t,b as a,c as u}from"./vendor-query-B2UbickB.js";import{d as n}from"./index-DYcP4jyl.js";function y(){return t({queryKey:["roles"],queryFn:()=>n("/roles")})}function d(){return t({queryKey:["roles","escalation-chains"],queryFn:()=>n("/roles/escalation-chains")})}function m(e){return t({queryKey:["roles",e,"escalation-targets"],queryFn:()=>n(`/roles/${encodeURIComponent(e)}/escalation-targets`),enabled:!!e})}function q(){const e=a();return u({mutationFn:s=>n("/roles/escalation-chains",{method:"POST",body:JSON.stringify(s)}),onSuccess:()=>{e.invalidateQueries({queryKey:["roles"]})}})}function h(){const e=a();return u({mutationFn:s=>n("/roles/escalation-chains",{method:"DELETE",body:JSON.stringify(s)}),onSuccess:()=>{e.invalidateQueries({queryKey:["roles"]})}})}function f(e){return t({queryKey:["roles","details"],queryFn:()=>n("/roles/details"),enabled:(e==null?void 0:e.enabled)??!0})}function C(e,s,r=!0){return t({queryKey:["roles",e,"schema",s??"latest"],queryFn:()=>n(`/roles/${encodeURIComponent(e)}/schema${s!=null?`?version=${s}`:""}`),enabled:r&&!!e})}function R(e){return t({queryKey:["roles",e,"schema-versions"],queryFn:()=>n(`/roles/${encodeURIComponent(e)}/schema/versions`),enabled:!!e})}function S(e,s,r=!0){return t({queryKey:["roles",e,"list-schema",s??"latest"],queryFn:()=>n(`/roles/${encodeURIComponent(e)}/list-schema${s!=null?`?version=${s}`:""}`),enabled:r&&!!e})}function F(e){return t({queryKey:["roles",e,"list-schema-versions"],queryFn:()=>n(`/roles/${encodeURIComponent(e)}/list-schema/versions`),enabled:!!e})}function K(){const e=a();return u({mutationFn:s=>n("/roles",{method:"POST",body:JSON.stringify({role:s})}),onSuccess:()=>{e.invalidateQueries({queryKey:["roles"]})}})}function b(){const e=a();return u({mutationFn:({role:s,...r})=>n(`/roles/${encodeURIComponent(s)}`,{method:"PATCH",body:JSON.stringify(r)}),onMutate:async({role:s,...r})=>{await e.cancelQueries({queryKey:["roles","details"]});const o=e.getQueryData(["roles","details"]);return o&&e.setQueryData(["roles","details"],{roles:o.roles.map(i=>i.role===s?{...i,...r}:i)}),{previous:o}},onError:(s,r,o)=>{o!=null&&o.previous&&e.setQueryData(["roles","details"],o.previous)},onSuccess:()=>{e.invalidateQueries({queryKey:["roles"]})}})}function p(){const e=a();return u({mutationFn:s=>n(`/roles/${encodeURIComponent(s)}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["roles"]})}})}export{S as a,m as b,K as c,f as d,d as e,b as f,p as g,q as h,h as i,R as j,C as k,F as l,y as u};
|
|
2
|
+
//# sourceMappingURL=roles-BO-4Ieun.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roles-B7rzw8wD.js","sources":["../../src/api/roles.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\n\nexport interface EscalationChain {\n source_role: string;\n target_role: string;\n}\n\nexport interface RoleDetail {\n role: string;\n title: string | null;\n description: string | null;\n form_schema: Record<string, unknown> | null;\n metadata_schema: Record<string, unknown> | null;\n properties: Record<string, unknown>;\n ops_visible: boolean;\n parent_role: string | null;\n sla_minutes: number | null;\n target_per_hour: number | null;\n worker_count: number | null;\n /** Max age (minutes) before a pending unclaimed item counts as priority on the Pace Board. Falls back to sla_minutes. */\n priority_threshold_minutes: number | null;\n /** Escalation metadata key holding the age origin (ISO 8601 UTC timestamp). Falls back to created_at. */\n priority_facet: string | null;\n /** Version of the live schema pair; each schema edit advances it. Null until the role first carries a schema. */\n current_schema_version: number | null;\n /** Rich formatting for this role's escalation list page (x-lt-* markup). Opt-in; versioned independently. */\n list_schema: Record<string, unknown> | null;\n /** Version of the live list_schema; advances only on list-schema edits. Null until the role first carries one. */\n current_list_schema_version: number | null;\n /**\n * Roles this station draws input from that live in other sequences.\n * parent_role is the single prior step placing the role in one sequence;\n * these are the remaining graph edges, shown as a merge affordance on the\n * Operations chart.\n */\n upstream_roles: string[];\n user_count: number;\n chain_count: number;\n workflow_count: number;\n}\n\n/** One immutable snapshot of a role's schema pair. */\nexport interface RoleSchemaVersion {\n role: string;\n version: number | null;\n form_schema: Record<string, unknown> | null;\n metadata_schema: Record<string, unknown> | null;\n change_summary: string | null;\n created_at: string | null;\n latest_version: number | null;\n}\n\n/** Version-history row (schemas elided; presence flags only). */\nexport interface RoleSchemaVersionSummary {\n version: number;\n has_form_schema: boolean;\n has_metadata_schema: boolean;\n change_summary: string | null;\n created_at: string;\n is_current: boolean;\n}\n\n/** One immutable snapshot of a role's list schema (independent version lineage). */\nexport interface RoleListSchemaVersion {\n role: string;\n version: number | null;\n list_schema: Record<string, unknown> | null;\n change_summary: string | null;\n created_at: string | null;\n latest_version: number | null;\n}\n\n/** List-schema version-history row (schema elided). */\nexport interface RoleListSchemaVersionSummary {\n version: number;\n has_list_schema: boolean;\n change_summary: string | null;\n created_at: string;\n is_current: boolean;\n}\n\nexport interface UpdateRoleInput {\n title?: string | null;\n description?: string | null;\n form_schema?: Record<string, unknown> | null;\n metadata_schema?: Record<string, unknown> | null;\n list_schema?: Record<string, unknown> | null;\n properties?: Record<string, unknown> | null;\n ops_visible?: boolean;\n parent_role?: string | null;\n sla_minutes?: number | null;\n target_per_hour?: number | null;\n worker_count?: number | null;\n priority_threshold_minutes?: number | null;\n priority_facet?: string | null;\n /** Replace the upstream-input set (omitted = preserve; [] = clear). */\n upstream_roles?: string[];\n /** Recorded on the schema version snapshot when the update changes a schema field. */\n change_summary?: string;\n}\n\nexport function useRoles() {\n return useQuery<{ roles: string[] }>({\n queryKey: ['roles'],\n queryFn: () => apiFetch('/roles'),\n });\n}\n\nexport function useEscalationChains() {\n return useQuery<{ chains: EscalationChain[] }>({\n queryKey: ['roles', 'escalation-chains'],\n queryFn: () => apiFetch('/roles/escalation-chains'),\n });\n}\n\nexport function useEscalationTargets(role: string) {\n return useQuery<{ targets: string[] }>({\n queryKey: ['roles', role, 'escalation-targets'],\n queryFn: () => apiFetch(`/roles/${encodeURIComponent(role)}/escalation-targets`),\n enabled: !!role,\n });\n}\n\nexport function useUpdateEscalationTargets() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ role, targets }: { role: string; targets: string[] }) =>\n apiFetch(`/roles/${encodeURIComponent(role)}/escalation-targets`, {\n method: 'PUT',\n body: JSON.stringify({ targets }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['roles'] });\n },\n });\n}\n\nexport function useAddEscalationChain() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (chain: EscalationChain) =>\n apiFetch('/roles/escalation-chains', {\n method: 'POST',\n body: JSON.stringify(chain),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['roles'] });\n },\n });\n}\n\nexport function useRemoveEscalationChain() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (chain: EscalationChain) =>\n apiFetch('/roles/escalation-chains', {\n method: 'DELETE',\n body: JSON.stringify(chain),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['roles'] });\n },\n });\n}\n\nexport function useRoleDetails(opts?: { enabled?: boolean }) {\n return useQuery<{ roles: RoleDetail[] }>({\n queryKey: ['roles', 'details'],\n queryFn: () => apiFetch('/roles/details'),\n enabled: opts?.enabled ?? true,\n });\n}\n\n/**\n * Fetch a role's schema pair. A version pins the immutable snapshot an\n * escalation was created against (metadata.schema_version); omitted, the live\n * (latest) schema is returned with its current version number.\n */\nexport function useRoleSchema(role: string, version?: number, enabled = true) {\n return useQuery<RoleSchemaVersion>({\n queryKey: ['roles', role, 'schema', version ?? 'latest'],\n queryFn: () =>\n apiFetch(`/roles/${encodeURIComponent(role)}/schema${version != null ? `?version=${version}` : ''}`),\n enabled: enabled && !!role,\n });\n}\n\nexport function useRoleSchemaVersions(role: string) {\n return useQuery<{ versions: RoleSchemaVersionSummary[] }>({\n queryKey: ['roles', role, 'schema-versions'],\n queryFn: () => apiFetch(`/roles/${encodeURIComponent(role)}/schema/versions`),\n enabled: !!role,\n });\n}\n\n/**\n * Fetch a role's LIST schema (rich list-page formatting). A version pins the\n * immutable snapshot; omitted, the live (latest) list schema is returned.\n * Versions independently of the resolve form schema.\n */\nexport function useRoleListSchema(role: string, version?: number, enabled = true) {\n return useQuery<RoleListSchemaVersion>({\n queryKey: ['roles', role, 'list-schema', version ?? 'latest'],\n queryFn: () =>\n apiFetch(`/roles/${encodeURIComponent(role)}/list-schema${version != null ? `?version=${version}` : ''}`),\n enabled: enabled && !!role,\n });\n}\n\nexport function useRoleListSchemaVersions(role: string) {\n return useQuery<{ versions: RoleListSchemaVersionSummary[] }>({\n queryKey: ['roles', role, 'list-schema-versions'],\n queryFn: () => apiFetch(`/roles/${encodeURIComponent(role)}/list-schema/versions`),\n enabled: !!role,\n });\n}\n\nexport function useCreateRole() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (role: string) =>\n apiFetch('/roles', {\n method: 'POST',\n body: JSON.stringify({ role }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['roles'] });\n },\n });\n}\n\nexport function useUpdateRole() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ role, ...input }: { role: string } & UpdateRoleInput) =>\n apiFetch(`/roles/${encodeURIComponent(role)}`, {\n method: 'PATCH',\n body: JSON.stringify(input),\n }),\n onMutate: async ({ role, ...input }) => {\n await queryClient.cancelQueries({ queryKey: ['roles', 'details'] });\n const previous = queryClient.getQueryData<{ roles: RoleDetail[] }>(['roles', 'details']);\n if (previous) {\n queryClient.setQueryData<{ roles: RoleDetail[] }>(['roles', 'details'], {\n roles: previous.roles.map((r) =>\n r.role === role ? { ...r, ...(input as Partial<RoleDetail>) } : r,\n ),\n });\n }\n return { previous };\n },\n onError: (_err, _vars, context) => {\n if (context?.previous) {\n queryClient.setQueryData(['roles', 'details'], context.previous);\n }\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['roles'] });\n },\n });\n}\n\nexport function useDeleteRole() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (role: string) =>\n apiFetch(`/roles/${encodeURIComponent(role)}`, {\n method: 'DELETE',\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['roles'] });\n },\n });\n}\n"],"names":["useRoles","useQuery","apiFetch","useEscalationChains","useEscalationTargets","role","useAddEscalationChain","queryClient","useQueryClient","useMutation","chain","useRemoveEscalationChain","useRoleDetails","opts","useRoleSchema","version","enabled","useRoleSchemaVersions","useRoleListSchema","useRoleListSchemaVersions","useCreateRole","useUpdateRole","input","previous","r","_err","_vars","context","useDeleteRole"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"roles-BO-4Ieun.js","sources":["../../src/api/roles.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\n\nexport interface EscalationChain {\n source_role: string;\n target_role: string;\n}\n\nexport interface RoleDetail {\n role: string;\n title: string | null;\n description: string | null;\n form_schema: Record<string, unknown> | null;\n metadata_schema: Record<string, unknown> | null;\n properties: Record<string, unknown>;\n ops_visible: boolean;\n parent_role: string | null;\n sla_minutes: number | null;\n target_per_hour: number | null;\n worker_count: number | null;\n /** Max age (minutes) before a pending unclaimed item counts as priority on the Pace Board. Falls back to sla_minutes. */\n priority_threshold_minutes: number | null;\n /** Escalation metadata key holding the age origin (ISO 8601 UTC timestamp). Falls back to created_at. */\n priority_facet: string | null;\n /** Version of the live schema pair; each schema edit advances it. Null until the role first carries a schema. */\n current_schema_version: number | null;\n /** Rich formatting for this role's escalation list page (x-lt-* markup). Opt-in; versioned independently. */\n list_schema: Record<string, unknown> | null;\n /** Version of the live list_schema; advances only on list-schema edits. Null until the role first carries one. */\n current_list_schema_version: number | null;\n /**\n * Roles this station draws input from that live in other sequences.\n * parent_role is the single prior step placing the role in one sequence;\n * these are the remaining graph edges, shown as a merge affordance on the\n * Operations chart.\n */\n upstream_roles: string[];\n user_count: number;\n chain_count: number;\n workflow_count: number;\n}\n\n/** One immutable snapshot of a role's schema pair. */\nexport interface RoleSchemaVersion {\n role: string;\n version: number | null;\n form_schema: Record<string, unknown> | null;\n metadata_schema: Record<string, unknown> | null;\n change_summary: string | null;\n created_at: string | null;\n latest_version: number | null;\n}\n\n/** Version-history row (schemas elided; presence flags only). */\nexport interface RoleSchemaVersionSummary {\n version: number;\n has_form_schema: boolean;\n has_metadata_schema: boolean;\n change_summary: string | null;\n created_at: string;\n is_current: boolean;\n}\n\n/** One immutable snapshot of a role's list schema (independent version lineage). */\nexport interface RoleListSchemaVersion {\n role: string;\n version: number | null;\n list_schema: Record<string, unknown> | null;\n change_summary: string | null;\n created_at: string | null;\n latest_version: number | null;\n}\n\n/** List-schema version-history row (schema elided). */\nexport interface RoleListSchemaVersionSummary {\n version: number;\n has_list_schema: boolean;\n change_summary: string | null;\n created_at: string;\n is_current: boolean;\n}\n\nexport interface UpdateRoleInput {\n title?: string | null;\n description?: string | null;\n form_schema?: Record<string, unknown> | null;\n metadata_schema?: Record<string, unknown> | null;\n list_schema?: Record<string, unknown> | null;\n properties?: Record<string, unknown> | null;\n ops_visible?: boolean;\n parent_role?: string | null;\n sla_minutes?: number | null;\n target_per_hour?: number | null;\n worker_count?: number | null;\n priority_threshold_minutes?: number | null;\n priority_facet?: string | null;\n /** Replace the upstream-input set (omitted = preserve; [] = clear). */\n upstream_roles?: string[];\n /** Recorded on the schema version snapshot when the update changes a schema field. */\n change_summary?: string;\n}\n\nexport function useRoles() {\n return useQuery<{ roles: string[] }>({\n queryKey: ['roles'],\n queryFn: () => apiFetch('/roles'),\n });\n}\n\nexport function useEscalationChains() {\n return useQuery<{ chains: EscalationChain[] }>({\n queryKey: ['roles', 'escalation-chains'],\n queryFn: () => apiFetch('/roles/escalation-chains'),\n });\n}\n\nexport function useEscalationTargets(role: string) {\n return useQuery<{ targets: string[] }>({\n queryKey: ['roles', role, 'escalation-targets'],\n queryFn: () => apiFetch(`/roles/${encodeURIComponent(role)}/escalation-targets`),\n enabled: !!role,\n });\n}\n\nexport function useUpdateEscalationTargets() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ role, targets }: { role: string; targets: string[] }) =>\n apiFetch(`/roles/${encodeURIComponent(role)}/escalation-targets`, {\n method: 'PUT',\n body: JSON.stringify({ targets }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['roles'] });\n },\n });\n}\n\nexport function useAddEscalationChain() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (chain: EscalationChain) =>\n apiFetch('/roles/escalation-chains', {\n method: 'POST',\n body: JSON.stringify(chain),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['roles'] });\n },\n });\n}\n\nexport function useRemoveEscalationChain() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (chain: EscalationChain) =>\n apiFetch('/roles/escalation-chains', {\n method: 'DELETE',\n body: JSON.stringify(chain),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['roles'] });\n },\n });\n}\n\nexport function useRoleDetails(opts?: { enabled?: boolean }) {\n return useQuery<{ roles: RoleDetail[] }>({\n queryKey: ['roles', 'details'],\n queryFn: () => apiFetch('/roles/details'),\n enabled: opts?.enabled ?? true,\n });\n}\n\n/**\n * Fetch a role's schema pair. A version pins the immutable snapshot an\n * escalation was created against (metadata.schema_version); omitted, the live\n * (latest) schema is returned with its current version number.\n */\nexport function useRoleSchema(role: string, version?: number, enabled = true) {\n return useQuery<RoleSchemaVersion>({\n queryKey: ['roles', role, 'schema', version ?? 'latest'],\n queryFn: () =>\n apiFetch(`/roles/${encodeURIComponent(role)}/schema${version != null ? `?version=${version}` : ''}`),\n enabled: enabled && !!role,\n });\n}\n\nexport function useRoleSchemaVersions(role: string) {\n return useQuery<{ versions: RoleSchemaVersionSummary[] }>({\n queryKey: ['roles', role, 'schema-versions'],\n queryFn: () => apiFetch(`/roles/${encodeURIComponent(role)}/schema/versions`),\n enabled: !!role,\n });\n}\n\n/**\n * Fetch a role's LIST schema (rich list-page formatting). A version pins the\n * immutable snapshot; omitted, the live (latest) list schema is returned.\n * Versions independently of the resolve form schema.\n */\nexport function useRoleListSchema(role: string, version?: number, enabled = true) {\n return useQuery<RoleListSchemaVersion>({\n queryKey: ['roles', role, 'list-schema', version ?? 'latest'],\n queryFn: () =>\n apiFetch(`/roles/${encodeURIComponent(role)}/list-schema${version != null ? `?version=${version}` : ''}`),\n enabled: enabled && !!role,\n });\n}\n\nexport function useRoleListSchemaVersions(role: string) {\n return useQuery<{ versions: RoleListSchemaVersionSummary[] }>({\n queryKey: ['roles', role, 'list-schema-versions'],\n queryFn: () => apiFetch(`/roles/${encodeURIComponent(role)}/list-schema/versions`),\n enabled: !!role,\n });\n}\n\nexport function useCreateRole() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (role: string) =>\n apiFetch('/roles', {\n method: 'POST',\n body: JSON.stringify({ role }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['roles'] });\n },\n });\n}\n\nexport function useUpdateRole() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ role, ...input }: { role: string } & UpdateRoleInput) =>\n apiFetch(`/roles/${encodeURIComponent(role)}`, {\n method: 'PATCH',\n body: JSON.stringify(input),\n }),\n onMutate: async ({ role, ...input }) => {\n await queryClient.cancelQueries({ queryKey: ['roles', 'details'] });\n const previous = queryClient.getQueryData<{ roles: RoleDetail[] }>(['roles', 'details']);\n if (previous) {\n queryClient.setQueryData<{ roles: RoleDetail[] }>(['roles', 'details'], {\n roles: previous.roles.map((r) =>\n r.role === role ? { ...r, ...(input as Partial<RoleDetail>) } : r,\n ),\n });\n }\n return { previous };\n },\n onError: (_err, _vars, context) => {\n if (context?.previous) {\n queryClient.setQueryData(['roles', 'details'], context.previous);\n }\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['roles'] });\n },\n });\n}\n\nexport function useDeleteRole() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (role: string) =>\n apiFetch(`/roles/${encodeURIComponent(role)}`, {\n method: 'DELETE',\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['roles'] });\n },\n });\n}\n"],"names":["useRoles","useQuery","apiFetch","useEscalationChains","useEscalationTargets","role","useAddEscalationChain","queryClient","useQueryClient","useMutation","chain","useRemoveEscalationChain","useRoleDetails","opts","useRoleSchema","version","enabled","useRoleSchemaVersions","useRoleListSchema","useRoleListSchemaVersions","useCreateRole","useUpdateRole","input","previous","r","_err","_vars","context","useDeleteRole"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as n}from"./vendor-query-B2UbickB.js";import{d as a}from"./index-
|
|
2
|
-
//# sourceMappingURL=tasks-
|
|
1
|
+
import{u as n}from"./vendor-query-B2UbickB.js";import{d as a}from"./index-DYcP4jyl.js";function y(e){const s=new URLSearchParams;return e.status&&s.set("status",e.status),e.lt_type&&s.set("lt_type",e.lt_type),e.workflow_type&&s.set("workflow_type",e.workflow_type),e.origin_id&&s.set("origin_id",e.origin_id),e.limit&&s.set("limit",String(e.limit)),e.offset!==void 0&&s.set("offset",String(e.offset)),n({queryKey:["tasks",e],queryFn:()=>a(`/tasks?${s}`)})}function c(e){return n({queryKey:["tasks",e],queryFn:()=>a(`/tasks/${e}`),enabled:!!e})}function r(e){return n({queryKey:["tasks","children",e],queryFn:()=>a(`/tasks?parent_workflow_id=${encodeURIComponent(e)}&limit=50`),enabled:!!e})}function k(e){return n({queryKey:["tasks","byWorkflow",e],queryFn:async()=>{const s=await a(`/tasks?workflow_id=${encodeURIComponent(e)}&limit=1`);return s.tasks.length>0?s.tasks[0]:(await a(`/tasks?parent_workflow_id=${encodeURIComponent(e)}&limit=1`)).tasks[0]??null},enabled:!!e})}function p(e,s){const t=new URLSearchParams;return e!=null&&e.limit&&t.set("limit",String(e.limit)),(e==null?void 0:e.offset)!==void 0&&t.set("offset",String(e.offset)),e!=null&&e.workflow_type&&t.set("workflow_type",e.workflow_type),e!=null&&e.status&&t.set("status",e.status),e!=null&&e.search&&t.set("search",e.search),n({queryKey:["processes",e],queryFn:()=>a(`/tasks/processes?${t}`),enabled:!0})}function m(e){return n({queryKey:["processes",e],queryFn:()=>a(`/tasks/processes/${encodeURIComponent(e)}`),enabled:!!e,retry:3,retryDelay:1e3})}export{m as a,k as b,y as c,c as d,r as e,p as u};
|
|
2
|
+
//# sourceMappingURL=tasks-BiyBXdk7.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks-
|
|
1
|
+
{"version":3,"file":"tasks-BiyBXdk7.js","sources":["../../src/api/tasks.ts"],"sourcesContent":["import { useQuery } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { LTTaskRecord, LTEscalationRecord } from './types';\n\ninterface TaskListResponse {\n tasks: LTTaskRecord[];\n total: number;\n}\n\ninterface TaskFilters {\n status?: string;\n lt_type?: string;\n workflow_type?: string;\n origin_id?: string;\n limit?: number;\n offset?: number;\n}\n\n// ── Process types ─────────────────────────────────────────────────\n\nexport interface ProcessSummary {\n origin_id: string;\n task_count: number;\n completed: number;\n escalated: number;\n workflow_types: string[];\n started_at: string;\n last_activity: string;\n}\n\ninterface ProcessListResponse {\n processes: ProcessSummary[];\n total: number;\n}\n\nexport interface ProcessDetail {\n origin_id: string;\n tasks: LTTaskRecord[];\n escalations: LTEscalationRecord[];\n}\n\nexport function useTasks(filters: TaskFilters) {\n const params = new URLSearchParams();\n if (filters.status) params.set('status', filters.status);\n if (filters.lt_type) params.set('lt_type', filters.lt_type);\n if (filters.workflow_type) params.set('workflow_type', filters.workflow_type);\n if (filters.origin_id) params.set('origin_id', filters.origin_id);\n if (filters.limit) params.set('limit', String(filters.limit));\n if (filters.offset !== undefined) params.set('offset', String(filters.offset));\n\n return useQuery<TaskListResponse>({\n queryKey: ['tasks', filters],\n queryFn: () => apiFetch(`/tasks?${params}`),\n });\n}\n\nexport function useTask(id: string) {\n return useQuery<LTTaskRecord>({\n queryKey: ['tasks', id],\n queryFn: () => apiFetch(`/tasks/${id}`),\n enabled: !!id,\n });\n}\n\n/**\n * Find the task record for a workflow.\n * Tries workflow_id first (leaf workflows), then falls back to\n * parent_workflow_id (orchestrators whose child task carries the envelope).\n */\nexport function useChildTasks(parentWorkflowId: string) {\n return useQuery<TaskListResponse>({\n queryKey: ['tasks', 'children', parentWorkflowId],\n queryFn: () =>\n apiFetch<TaskListResponse>(\n `/tasks?parent_workflow_id=${encodeURIComponent(parentWorkflowId)}&limit=50`,\n ),\n enabled: !!parentWorkflowId,\n });\n}\n\nexport function useTaskByWorkflowId(workflowId: string) {\n return useQuery<LTTaskRecord | null>({\n queryKey: ['tasks', 'byWorkflow', workflowId],\n queryFn: async () => {\n // 1. Direct match — leaf workflows have their own task record\n const direct = await apiFetch<TaskListResponse>(\n `/tasks?workflow_id=${encodeURIComponent(workflowId)}&limit=1`,\n );\n if (direct.tasks.length > 0) return direct.tasks[0];\n\n // 2. Orchestrator fallback — child task has parent_workflow_id = this workflow\n const child = await apiFetch<TaskListResponse>(\n `/tasks?parent_workflow_id=${encodeURIComponent(workflowId)}&limit=1`,\n );\n return child.tasks[0] ?? null;\n },\n enabled: !!workflowId,\n });\n}\n\n// ── Process stats ────────────────────────────────────────────────\n\nexport interface ProcessStats {\n total: number;\n active: number;\n completed: number;\n escalated: number;\n by_workflow_type: {\n workflow_type: string;\n total: number;\n active: number;\n completed: number;\n escalated: number;\n }[];\n}\n\nexport function useProcessStats(period?: string) {\n const params = period ? `?period=${period}` : '';\n return useQuery<ProcessStats>({\n queryKey: ['processStats', period],\n queryFn: () => apiFetch(`/tasks/processes/stats${params}`),\n });\n}\n\n// ── Process hooks ─────────────────────────────────────────────────\n\nexport function useProcesses(filters?: {\n limit?: number;\n offset?: number;\n workflow_type?: string;\n status?: string;\n search?: string;\n}, options?: { enabled?: boolean }) {\n const params = new URLSearchParams();\n if (filters?.limit) params.set('limit', String(filters.limit));\n if (filters?.offset !== undefined) params.set('offset', String(filters.offset));\n if (filters?.workflow_type) params.set('workflow_type', filters.workflow_type);\n if (filters?.status) params.set('status', filters.status);\n if (filters?.search) params.set('search', filters.search);\n\n return useQuery<ProcessListResponse>({\n queryKey: ['processes', filters],\n queryFn: () => apiFetch(`/tasks/processes?${params}`),\n enabled: options?.enabled ?? true,\n });\n}\n\nexport function useProcessDetail(originId: string) {\n return useQuery<ProcessDetail>({\n queryKey: ['processes', originId],\n queryFn: () => apiFetch(`/tasks/processes/${encodeURIComponent(originId)}`),\n enabled: !!originId,\n retry: 3,\n retryDelay: 1000,\n });\n}\n"],"names":["useTasks","filters","params","useQuery","apiFetch","useTask","id","useChildTasks","parentWorkflowId","useTaskByWorkflowId","workflowId","direct","useProcesses","options","useProcessDetail","originId"],"mappings":"uFAyCO,SAASA,EAASC,EAAsB,CAC7C,MAAMC,EAAS,IAAI,gBACnB,OAAID,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,SAASC,EAAO,IAAI,UAAWD,EAAQ,OAAO,EACtDA,EAAQ,eAAeC,EAAO,IAAI,gBAAiBD,EAAQ,aAAa,EACxEA,EAAQ,WAAWC,EAAO,IAAI,YAAaD,EAAQ,SAAS,EAC5DA,EAAQ,OAAOC,EAAO,IAAI,QAAS,OAAOD,EAAQ,KAAK,CAAC,EACxDA,EAAQ,SAAW,QAAWC,EAAO,IAAI,SAAU,OAAOD,EAAQ,MAAM,CAAC,EAEtEE,EAA2B,CAChC,SAAU,CAAC,QAASF,CAAO,EAC3B,QAAS,IAAMG,EAAS,UAAUF,CAAM,EAAE,CAAA,CAC3C,CACH,CAEO,SAASG,EAAQC,EAAY,CAClC,OAAOH,EAAuB,CAC5B,SAAU,CAAC,QAASG,CAAE,EACtB,QAAS,IAAMF,EAAS,UAAUE,CAAE,EAAE,EACtC,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAOO,SAASC,EAAcC,EAA0B,CACtD,OAAOL,EAA2B,CAChC,SAAU,CAAC,QAAS,WAAYK,CAAgB,EAChD,QAAS,IACPJ,EACE,6BAA6B,mBAAmBI,CAAgB,CAAC,WAAA,EAErE,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAEO,SAASC,EAAoBC,EAAoB,CACtD,OAAOP,EAA8B,CACnC,SAAU,CAAC,QAAS,aAAcO,CAAU,EAC5C,QAAS,SAAY,CAEnB,MAAMC,EAAS,MAAMP,EACnB,sBAAsB,mBAAmBM,CAAU,CAAC,UAAA,EAEtD,OAAIC,EAAO,MAAM,OAAS,EAAUA,EAAO,MAAM,CAAC,GAGpC,MAAMP,EAClB,6BAA6B,mBAAmBM,CAAU,CAAC,UAAA,GAEhD,MAAM,CAAC,GAAK,IAC3B,EACA,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CA4BO,SAASE,EAAaX,EAM1BY,EAAiC,CAClC,MAAMX,EAAS,IAAI,gBACnB,OAAID,GAAA,MAAAA,EAAS,OAAOC,EAAO,IAAI,QAAS,OAAOD,EAAQ,KAAK,CAAC,GACzDA,GAAA,YAAAA,EAAS,UAAW,QAAWC,EAAO,IAAI,SAAU,OAAOD,EAAQ,MAAM,CAAC,EAC1EA,GAAA,MAAAA,EAAS,eAAeC,EAAO,IAAI,gBAAiBD,EAAQ,aAAa,EACzEA,GAAA,MAAAA,EAAS,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACpDA,GAAA,MAAAA,EAAS,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EAEjDE,EAA8B,CACnC,SAAU,CAAC,YAAaF,CAAO,EAC/B,QAAS,IAAMG,EAAS,oBAAoBF,CAAM,EAAE,EACpD,QAA6B,EAAA,CAC9B,CACH,CAEO,SAASY,EAAiBC,EAAkB,CACjD,OAAOZ,EAAwB,CAC7B,SAAU,CAAC,YAAaY,CAAQ,EAChC,QAAS,IAAMX,EAAS,oBAAoB,mBAAmBW,CAAQ,CAAC,EAAE,EAC1E,QAAS,CAAC,CAACA,EACX,MAAO,EACP,WAAY,GAAA,CACb,CACH"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as i,b as u,c as s}from"./vendor-query-B2UbickB.js";import{d as t}from"./index-
|
|
2
|
-
//# sourceMappingURL=topics-
|
|
1
|
+
import{u as i,b as u,c as s}from"./vendor-query-B2UbickB.js";import{d as t}from"./index-DYcP4jyl.js";function r(e={}){const n=new URLSearchParams;e.category&&n.set("category",e.category),e.search&&n.set("search",e.search),e.limit!=null&&n.set("limit",String(e.limit)),e.offset!=null&&n.set("offset",String(e.offset));const o=n.toString();return i({queryKey:["topics",e],queryFn:()=>t(`/topics${o?`?${o}`:""}`)})}function y(e){return i({queryKey:["topics","detail",e],queryFn:()=>t(`/topics/by-name/${encodeURIComponent(e)}`),enabled:!!e})}function m(){const e=u();return s({mutationFn:({topic:n,...o})=>t(`/topics/by-name/${encodeURIComponent(n)}`,{method:"PUT",body:JSON.stringify(o)}),onSuccess:()=>{e.invalidateQueries({queryKey:["topics"]})}})}function p(){const e=u();return s({mutationFn:n=>t(`/topics/by-name/${encodeURIComponent(n)}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["topics"]})}})}function d(){return s({mutationFn:({topic:e,event:n})=>t(`/topics/by-name/${encodeURIComponent(e)}/publish`,{method:"POST",body:JSON.stringify(n)})})}export{y as a,m as b,p as c,d,r as u};
|
|
2
|
+
//# sourceMappingURL=topics-m_BXjCFf.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"topics-
|
|
1
|
+
{"version":3,"file":"topics-m_BXjCFf.js","sources":["../../src/api/topics.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\n\nexport interface TopicCatalogEntry {\n topic: string;\n description?: string;\n category: string;\n payload_schema?: Record<string, any>;\n example_payload?: Record<string, any>;\n source: string;\n tags: string[];\n managed: boolean;\n subscriber_count?: number;\n last_seen_at?: string;\n created_at: string;\n updated_at: string;\n}\n\nexport interface TopicSubscriber {\n id: string;\n agent_id: string;\n agent_name: string;\n topic: string;\n reaction_type: string;\n}\n\nexport interface TopicDetail extends TopicCatalogEntry {\n subscribers: TopicSubscriber[];\n}\n\ninterface TopicListResponse {\n topics: TopicCatalogEntry[];\n total: number;\n}\n\ninterface TopicFilters {\n category?: string;\n search?: string;\n limit?: number;\n offset?: number;\n}\n\nexport function useTopics(filters: TopicFilters = {}) {\n const params = new URLSearchParams();\n if (filters.category) params.set('category', filters.category);\n if (filters.search) params.set('search', filters.search);\n if (filters.limit != null) params.set('limit', String(filters.limit));\n if (filters.offset != null) params.set('offset', String(filters.offset));\n const qs = params.toString();\n\n return useQuery<TopicListResponse>({\n queryKey: ['topics', filters],\n queryFn: () => apiFetch(`/topics${qs ? `?${qs}` : ''}`),\n });\n}\n\nexport function useTopic(topic: string | null) {\n return useQuery<TopicDetail>({\n queryKey: ['topics', 'detail', topic],\n queryFn: () => apiFetch(`/topics/by-name/${encodeURIComponent(topic!)}`),\n enabled: !!topic,\n });\n}\n\nexport function useCreateTopic() {\n const queryClient = useQueryClient();\n return useMutation<TopicCatalogEntry, Error, Partial<TopicCatalogEntry> & { topic: string; category: string }>({\n mutationFn: (body) =>\n apiFetch('/topics', {\n method: 'POST',\n body: JSON.stringify(body),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['topics'] });\n },\n });\n}\n\nexport function useUpdateTopic() {\n const queryClient = useQueryClient();\n return useMutation<TopicCatalogEntry, Error, { topic: string } & Partial<TopicCatalogEntry>>({\n mutationFn: ({ topic, ...body }) =>\n apiFetch(`/topics/by-name/${encodeURIComponent(topic)}`, {\n method: 'PUT',\n body: JSON.stringify(body),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['topics'] });\n },\n });\n}\n\nexport function useDeleteTopic() {\n const queryClient = useQueryClient();\n return useMutation<{ deleted: boolean }, Error, string>({\n mutationFn: (topic) =>\n apiFetch(`/topics/by-name/${encodeURIComponent(topic)}`, { method: 'DELETE' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['topics'] });\n },\n });\n}\n\nexport function usePublishTopic() {\n // The request body IS the event envelope (Partial<LTEvent> + optional subject).\n // The server derives `type` from the subject/topic and mints id/timestamp.\n return useMutation<{ published: boolean; topic: string; timestamp: string }, Error, { topic: string; event: Record<string, any> }>({\n mutationFn: ({ topic, event }) =>\n apiFetch(`/topics/by-name/${encodeURIComponent(topic)}/publish`, {\n method: 'POST',\n body: JSON.stringify(event),\n }),\n });\n}\n"],"names":["useTopics","filters","params","qs","useQuery","apiFetch","useTopic","topic","useUpdateTopic","queryClient","useQueryClient","useMutation","body","useDeleteTopic","usePublishTopic","event"],"mappings":"qGA0CO,SAASA,EAAUC,EAAwB,GAAI,CACpD,MAAMC,EAAS,IAAI,gBACfD,EAAQ,UAAUC,EAAO,IAAI,WAAYD,EAAQ,QAAQ,EACzDA,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,OAAS,MAAMC,EAAO,IAAI,QAAS,OAAOD,EAAQ,KAAK,CAAC,EAChEA,EAAQ,QAAU,MAAMC,EAAO,IAAI,SAAU,OAAOD,EAAQ,MAAM,CAAC,EACvE,MAAME,EAAKD,EAAO,SAAA,EAElB,OAAOE,EAA4B,CACjC,SAAU,CAAC,SAAUH,CAAO,EAC5B,QAAS,IAAMI,EAAS,UAAUF,EAAK,IAAIA,CAAE,GAAK,EAAE,EAAE,CAAA,CACvD,CACH,CAEO,SAASG,EAASC,EAAsB,CAC7C,OAAOH,EAAsB,CAC3B,SAAU,CAAC,SAAU,SAAUG,CAAK,EACpC,QAAS,IAAMF,EAAS,mBAAmB,mBAAmBE,CAAM,CAAC,EAAE,EACvE,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAgBO,SAASC,GAAiB,CAC/B,MAAMC,EAAcC,EAAA,EACpB,OAAOC,EAAsF,CAC3F,WAAY,CAAC,CAAE,MAAAJ,EAAO,GAAGK,CAAA,IACvBP,EAAS,mBAAmB,mBAAmBE,CAAK,CAAC,GAAI,CACvD,OAAQ,MACR,KAAM,KAAK,UAAUK,CAAI,CAAA,CAC1B,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAU,CAAC,QAAQ,EAAG,CACxD,CAAA,CACD,CACH,CAEO,SAASI,GAAiB,CAC/B,MAAMJ,EAAcC,EAAA,EACpB,OAAOC,EAAiD,CACtD,WAAaJ,GACXF,EAAS,mBAAmB,mBAAmBE,CAAK,CAAC,GAAI,CAAE,OAAQ,QAAA,CAAU,EAC/E,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,QAAQ,EAAG,CACxD,CAAA,CACD,CACH,CAEO,SAASK,GAAkB,CAGhC,OAAOH,EAA4H,CACjI,WAAY,CAAC,CAAE,MAAAJ,EAAO,MAAAQ,KACpBV,EAAS,mBAAmB,mBAAmBE,CAAK,CAAC,WAAY,CAC/D,OAAQ,OACR,KAAM,KAAK,UAAUQ,CAAK,CAAA,CAC3B,CAAA,CACJ,CACH"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as f,b as p}from"./vendor-query-B2UbickB.js";import{c as e,N as a}from"./index-
|
|
2
|
-
//# sourceMappingURL=useEventHooks-
|
|
1
|
+
import{a as f,b as p}from"./vendor-query-B2UbickB.js";import{c as e,N as a}from"./index-DYcP4jyl.js";function w(s){const t=[],o=s.type.split(".");switch(o[0]==="system"?o[1]:o[0]){case"task":t.push(["tasks"]),t.push(["jobs"]),t.push(["processes"]),s.workflowId&&(t.push(["workflowExecution",s.workflowId]),t.push(["workflowState",s.workflowId]),t.push(["mcpQueryExecution",s.workflowId])),s.originId&&t.push(["processes",s.originId]);break;case"escalation":t.push(["escalations"]),t.push(["escalationStats"]),t.push(["stationMetrics"]),s.workflowId&&t.push(["workflowExecution",s.workflowId]);break;case"workflow":t.push(["jobs"]),t.push(["tasks"]),t.push(["processes"]),s.workflowId&&(t.push(["workflowExecution",s.workflowId]),t.push(["workflowState",s.workflowId]),t.push(["mcpQueryExecution",s.workflowId]),t.push(["mcpQueryResult",s.workflowId]),t.push(["builderResult",s.workflowId]));break;case"activity":s.workflowId&&t.push(["mcpRunExecution",s.workflowId]),t.push(["mcpRuns"]);break;case"milestone":s.workflowId&&(t.push(["workflowExecution",s.workflowId]),t.push(["mcpQueryExecution",s.workflowId])),t.push(["tasks"]);break;case"knowledge":t.push(["knowledge"]);break;case"file":t.push(["files"]);break;case"agent":t.push(["agents"]);break;default:t.push(["jobs"]),t.push(["tasks"]);break}return t}function c(s=500){const t=p(),o=f.useRef(new Set),n=f.useRef(null);return f.useCallback(i=>{for(const r of i)o.current.add(JSON.stringify(r));n.current&&clearTimeout(n.current),n.current=setTimeout(()=>{for(const r of o.current)t.invalidateQueries({queryKey:JSON.parse(r)});o.current.clear(),n.current=null},s)},[t,s])}function y(){const s=c(300);e(`${a}.system.task.>`,()=>{s([["jobs"]])}),e(`${a}.system.workflow.>`,()=>{s([["jobs"]])})}function h(s){const t=c(400);e(`${a}.>`,o=>{var l;if(!s||!(o.workflowId===s||((l=o.workflowId)==null?void 0:l.includes(s))))return;const i=o.type.split("."),r=i[0]==="system"?i[1]:i[0],u=w(o);r==="escalation"&&u.push(["escalations","by-workflow",s]),t(u)})}function m(s){const t=c(400);e(`${a}.>`,o=>{var l;if(!s||!(o.workflowId===s||((l=o.workflowId)==null?void 0:l.includes(s))))return;const i=o.type.split("."),r=i[0]==="system"?i[1]:i[0],u=w(o);r==="escalation"&&u.push(["escalations","by-workflow",s]),t(u)})}function E(s){const t=c(400);e(`${a}.>`,o=>{var r;if(!s||!(o.workflowId===s||((r=o.workflowId)==null?void 0:r.includes(s))))return;const i=w(o);i.push(["workflowSets"]),i.push(["yamlWorkflows"]),t(i)})}function b(s){const t=c(300),o=f.useCallback(n=>{s&&(n.originId!==s&&n.workflowId!==s||t([["processes",s]]))},[s,t]);e(`${a}.system.task.>`,o),e(`${a}.system.workflow.>`,o),e(`${a}.system.escalation.>`,o)}function I(){const s=c(300);e(`${a}.system.escalation.>`,()=>{s([["escalationStats"]])})}function $(){const s=c(600);e(`${a}.system.escalation.>`,()=>{s([["stationMetrics"]])})}function g(){const s=c(300);e(`${a}.system.escalation.>`,()=>{s([["escalations"]])})}function S(s){const t=c(300);e(`${a}.system.escalation.>`,o=>{s&&o.escalationId===s&&t([["escalations",s],["escalations"],["escalationStats"]])})}function R(){const s=c(300);e(`${a}.system.agent.>`,()=>{s([["agents"]])})}function x(){const s=c(300);e(`${a}.system.task.>`,()=>{s([["processes"]])}),e(`${a}.system.workflow.>`,()=>{s([["processes"]])})}export{b as a,y as b,m as c,E as d,I as e,g as f,S as g,h,$ as i,R as j,x as u};
|
|
2
|
+
//# sourceMappingURL=useEventHooks-CtkD_tnd.js.map
|
package/dashboard/dist/assets/{useEventHooks-CwIAhqJk.js.map → useEventHooks-CtkD_tnd.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEventHooks-CwIAhqJk.js","sources":["../../src/lib/events/invalidation.ts","../../src/hooks/useEventHooks.ts"],"sourcesContent":["import type { NatsLTEvent } from '../nats/types';\n\n/**\n * Map an event to the React Query keys that should be invalidated.\n *\n * Returns an array of query key prefixes. React Query's `invalidateQueries`\n * will match all queries whose key starts with any returned prefix.\n *\n * This is pure logic with no React or transport dependency — easily testable.\n * Works identically regardless of event transport (Socket.IO, NATS, etc.).\n */\nexport function getInvalidationKeys(event: NatsLTEvent): string[][] {\n const keys: string[][] = [];\n const parts = event.type.split('.');\n const category = parts[0] === 'system' ? parts[1] : parts[0];\n\n switch (category) {\n case 'task':\n keys.push(['tasks']);\n keys.push(['jobs']);\n keys.push(['processes']);\n if (event.workflowId) {\n keys.push(['workflowExecution', event.workflowId]);\n keys.push(['workflowState', event.workflowId]);\n keys.push(['mcpQueryExecution', event.workflowId]);\n }\n if (event.originId) {\n keys.push(['processes', event.originId]);\n }\n break;\n\n case 'escalation':\n keys.push(['escalations']);\n keys.push(['escalationStats']);\n keys.push(['stationMetrics']);\n if (event.workflowId) {\n keys.push(['workflowExecution', event.workflowId]);\n }\n break;\n\n case 'workflow':\n keys.push(['jobs']);\n keys.push(['tasks']);\n keys.push(['processes']);\n if (event.workflowId) {\n keys.push(['workflowExecution', event.workflowId]);\n keys.push(['workflowState', event.workflowId]);\n keys.push(['mcpQueryExecution', event.workflowId]);\n keys.push(['mcpQueryResult', event.workflowId]);\n keys.push(['builderResult', event.workflowId]);\n }\n break;\n\n case 'activity':\n if (event.workflowId) {\n keys.push(['mcpRunExecution', event.workflowId]);\n }\n keys.push(['mcpRuns']);\n break;\n\n case 'milestone':\n if (event.workflowId) {\n keys.push(['workflowExecution', event.workflowId]);\n keys.push(['mcpQueryExecution', event.workflowId]);\n }\n keys.push(['tasks']);\n break;\n\n case 'knowledge':\n keys.push(['knowledge']);\n break;\n\n case 'file':\n keys.push(['files']);\n break;\n\n case 'agent':\n keys.push(['agents']);\n break;\n\n default:\n keys.push(['jobs']);\n keys.push(['tasks']);\n break;\n }\n\n return keys;\n}\n","import { useRef, useCallback } from 'react';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { useEventSubscription } from './useEventContext';\nimport { getInvalidationKeys } from '../lib/events/invalidation';\nimport { NATS_SUBJECT_PREFIX } from '../lib/nats/config';\n\n/**\n * Debounced query invalidation. Collects query keys over a window\n * and fires a single batch invalidation, preventing rapid re-renders\n * when multiple events arrive in quick succession.\n */\nfunction useDebouncedInvalidation(delayMs = 500) {\n const qc = useQueryClient();\n const pendingKeys = useRef<Set<string>>(new Set());\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n return useCallback((keys: string[][]) => {\n for (const key of keys) {\n pendingKeys.current.add(JSON.stringify(key));\n }\n\n if (timer.current) clearTimeout(timer.current);\n timer.current = setTimeout(() => {\n for (const raw of pendingKeys.current) {\n qc.invalidateQueries({ queryKey: JSON.parse(raw) });\n }\n pendingKeys.current.clear();\n timer.current = null;\n }, delayMs);\n }, [qc, delayMs]);\n}\n\n/**\n * Invalidate workflow list queries (WorkflowsDashboard) on task/workflow events.\n */\nexport function useWorkflowListEvents(): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.system.task.>`, () => {\n invalidate([['jobs']]);\n });\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.system.workflow.>`, () => {\n invalidate([['jobs']]);\n });\n}\n\n/**\n * Invalidate queries for a specific workflow execution page (durable workflows).\n *\n * Uses the centralized `getInvalidationKeys` mapping plus escalation-specific\n * keys for the detail view. Events are debounced to prevent flurries of re-renders.\n */\nexport function useWorkflowDetailEvents(workflowId: string | undefined): void {\n const invalidate = useDebouncedInvalidation(400);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.>`, (event) => {\n if (!workflowId) return;\n\n const isRelated = event.workflowId === workflowId\n || event.workflowId?.includes(workflowId);\n if (!isRelated) return;\n\n const parts = event.type.split('.');\n const category = parts[0] === 'system' ? parts[1] : parts[0];\n const keys = getInvalidationKeys(event);\n\n if (category === 'escalation') {\n keys.push(['escalations', 'by-workflow', workflowId]);\n }\n\n invalidate(keys);\n });\n}\n\n/**\n * Invalidate queries for mcpQuery/builder detail pages.\n *\n * Covers: mcpQueryExecution, mcpQueryResult, builderResult, workflowExecution,\n * workflowState, and escalation keys. Replaces polling on these pages.\n */\nexport function useMcpQueryDetailEvents(workflowId: string | undefined): void {\n const invalidate = useDebouncedInvalidation(400);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.>`, (event) => {\n if (!workflowId) return;\n\n const isRelated = event.workflowId === workflowId\n || event.workflowId?.includes(workflowId);\n if (!isRelated) return;\n\n const parts = event.type.split('.');\n const category = parts[0] === 'system' ? parts[1] : parts[0];\n const keys = getInvalidationKeys(event);\n\n if (category === 'escalation') {\n keys.push(['escalations', 'by-workflow', workflowId]);\n }\n\n invalidate(keys);\n });\n}\n\n/**\n * Invalidate workflow set and YAML workflow queries when plan-related events fire.\n * Covers the planner workflow and all child builder workflows.\n */\nexport function usePlanDetailEvents(plannerWorkflowId: string | undefined): void {\n const invalidate = useDebouncedInvalidation(400);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.>`, (event) => {\n if (!plannerWorkflowId) return;\n\n const isRelated = event.workflowId === plannerWorkflowId\n || event.workflowId?.includes(plannerWorkflowId);\n if (!isRelated) return;\n\n const keys = getInvalidationKeys(event);\n keys.push(['workflowSets']);\n keys.push(['yamlWorkflows']);\n invalidate(keys);\n });\n}\n\n/**\n * Invalidate process detail queries on task/workflow events for a specific origin.\n */\nexport function useProcessDetailEvents(originId: string | undefined): void {\n const invalidate = useDebouncedInvalidation(300);\n\n const handler = useCallback((event: any) => {\n if (!originId) return;\n if (event.originId !== originId && event.workflowId !== originId) return;\n invalidate([['processes', originId]]);\n }, [originId, invalidate]);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.system.task.>`, handler);\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.system.workflow.>`, handler);\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.system.escalation.>`, handler);\n}\n\n/**\n * Invalidate escalation stats (EscalationsOverview) on escalation events.\n */\nexport function useEscalationStatsEvents(): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.system.escalation.>`, () => {\n invalidate([['escalationStats']]);\n });\n}\n\n/**\n * Invalidate station metrics (Operations page + station detail) on escalation\n * events. Push-driven only: escalation resolves/claims/creates are the sole\n * things that move the numbers, so the socket event is the complete refresh\n * signal. The 600ms debounce collapses a resolve burst into one refetch.\n */\nexport function useStationMetricsEvents(): void {\n const invalidate = useDebouncedInvalidation(600);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.system.escalation.>`, () => {\n invalidate([['stationMetrics']]);\n });\n}\n\n/**\n * Invalidate escalation list queries on escalation events.\n */\nexport function useEscalationListEvents(): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.system.escalation.>`, () => {\n invalidate([['escalations']]);\n });\n}\n\n/**\n * Invalidate a single escalation detail on escalation events for that ID.\n */\nexport function useEscalationDetailEvents(escalationId: string | undefined): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.system.escalation.>`, (event) => {\n if (!escalationId) return;\n if (event.escalationId === escalationId) {\n invalidate([['escalations', escalationId], ['escalations'], ['escalationStats']]);\n }\n });\n}\n\n/**\n * Invalidate agent queries on agent lifecycle events.\n */\nexport function useAgentEvents(): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.system.agent.>`, () => {\n invalidate([['agents']]);\n });\n}\n\n/**\n * Invalidate knowledge queries on knowledge events.\n */\nexport function useKnowledgeEvents(): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.system.knowledge.>`, () => {\n invalidate([['knowledge']]);\n });\n}\n\n/**\n * Invalidate process list (ProcessesListPage) on task/workflow events.\n */\nexport function useProcessListEvents(): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.system.task.>`, () => {\n invalidate([['processes']]);\n });\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.system.workflow.>`, () => {\n invalidate([['processes']]);\n });\n}\n"],"names":["getInvalidationKeys","event","keys","parts","useDebouncedInvalidation","delayMs","qc","useQueryClient","pendingKeys","useRef","timer","useCallback","key","raw","useWorkflowListEvents","invalidate","useEventSubscription","NATS_SUBJECT_PREFIX","useWorkflowDetailEvents","workflowId","_a","category","useMcpQueryDetailEvents","usePlanDetailEvents","plannerWorkflowId","useProcessDetailEvents","originId","handler","useEscalationStatsEvents","useStationMetricsEvents","useEscalationListEvents","useEscalationDetailEvents","escalationId","useAgentEvents","useProcessListEvents"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useEventHooks-CtkD_tnd.js","sources":["../../src/lib/events/invalidation.ts","../../src/hooks/useEventHooks.ts"],"sourcesContent":["import type { NatsLTEvent } from '../nats/types';\n\n/**\n * Map an event to the React Query keys that should be invalidated.\n *\n * Returns an array of query key prefixes. React Query's `invalidateQueries`\n * will match all queries whose key starts with any returned prefix.\n *\n * This is pure logic with no React or transport dependency — easily testable.\n * Works identically regardless of event transport (Socket.IO, NATS, etc.).\n */\nexport function getInvalidationKeys(event: NatsLTEvent): string[][] {\n const keys: string[][] = [];\n const parts = event.type.split('.');\n const category = parts[0] === 'system' ? parts[1] : parts[0];\n\n switch (category) {\n case 'task':\n keys.push(['tasks']);\n keys.push(['jobs']);\n keys.push(['processes']);\n if (event.workflowId) {\n keys.push(['workflowExecution', event.workflowId]);\n keys.push(['workflowState', event.workflowId]);\n keys.push(['mcpQueryExecution', event.workflowId]);\n }\n if (event.originId) {\n keys.push(['processes', event.originId]);\n }\n break;\n\n case 'escalation':\n keys.push(['escalations']);\n keys.push(['escalationStats']);\n keys.push(['stationMetrics']);\n if (event.workflowId) {\n keys.push(['workflowExecution', event.workflowId]);\n }\n break;\n\n case 'workflow':\n keys.push(['jobs']);\n keys.push(['tasks']);\n keys.push(['processes']);\n if (event.workflowId) {\n keys.push(['workflowExecution', event.workflowId]);\n keys.push(['workflowState', event.workflowId]);\n keys.push(['mcpQueryExecution', event.workflowId]);\n keys.push(['mcpQueryResult', event.workflowId]);\n keys.push(['builderResult', event.workflowId]);\n }\n break;\n\n case 'activity':\n if (event.workflowId) {\n keys.push(['mcpRunExecution', event.workflowId]);\n }\n keys.push(['mcpRuns']);\n break;\n\n case 'milestone':\n if (event.workflowId) {\n keys.push(['workflowExecution', event.workflowId]);\n keys.push(['mcpQueryExecution', event.workflowId]);\n }\n keys.push(['tasks']);\n break;\n\n case 'knowledge':\n keys.push(['knowledge']);\n break;\n\n case 'file':\n keys.push(['files']);\n break;\n\n case 'agent':\n keys.push(['agents']);\n break;\n\n default:\n keys.push(['jobs']);\n keys.push(['tasks']);\n break;\n }\n\n return keys;\n}\n","import { useRef, useCallback } from 'react';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { useEventSubscription } from './useEventContext';\nimport { getInvalidationKeys } from '../lib/events/invalidation';\nimport { NATS_SUBJECT_PREFIX } from '../lib/nats/config';\n\n/**\n * Debounced query invalidation. Collects query keys over a window\n * and fires a single batch invalidation, preventing rapid re-renders\n * when multiple events arrive in quick succession.\n */\nfunction useDebouncedInvalidation(delayMs = 500) {\n const qc = useQueryClient();\n const pendingKeys = useRef<Set<string>>(new Set());\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n return useCallback((keys: string[][]) => {\n for (const key of keys) {\n pendingKeys.current.add(JSON.stringify(key));\n }\n\n if (timer.current) clearTimeout(timer.current);\n timer.current = setTimeout(() => {\n for (const raw of pendingKeys.current) {\n qc.invalidateQueries({ queryKey: JSON.parse(raw) });\n }\n pendingKeys.current.clear();\n timer.current = null;\n }, delayMs);\n }, [qc, delayMs]);\n}\n\n/**\n * Invalidate workflow list queries (WorkflowsDashboard) on task/workflow events.\n */\nexport function useWorkflowListEvents(): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.system.task.>`, () => {\n invalidate([['jobs']]);\n });\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.system.workflow.>`, () => {\n invalidate([['jobs']]);\n });\n}\n\n/**\n * Invalidate queries for a specific workflow execution page (durable workflows).\n *\n * Uses the centralized `getInvalidationKeys` mapping plus escalation-specific\n * keys for the detail view. Events are debounced to prevent flurries of re-renders.\n */\nexport function useWorkflowDetailEvents(workflowId: string | undefined): void {\n const invalidate = useDebouncedInvalidation(400);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.>`, (event) => {\n if (!workflowId) return;\n\n const isRelated = event.workflowId === workflowId\n || event.workflowId?.includes(workflowId);\n if (!isRelated) return;\n\n const parts = event.type.split('.');\n const category = parts[0] === 'system' ? parts[1] : parts[0];\n const keys = getInvalidationKeys(event);\n\n if (category === 'escalation') {\n keys.push(['escalations', 'by-workflow', workflowId]);\n }\n\n invalidate(keys);\n });\n}\n\n/**\n * Invalidate queries for mcpQuery/builder detail pages.\n *\n * Covers: mcpQueryExecution, mcpQueryResult, builderResult, workflowExecution,\n * workflowState, and escalation keys. Replaces polling on these pages.\n */\nexport function useMcpQueryDetailEvents(workflowId: string | undefined): void {\n const invalidate = useDebouncedInvalidation(400);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.>`, (event) => {\n if (!workflowId) return;\n\n const isRelated = event.workflowId === workflowId\n || event.workflowId?.includes(workflowId);\n if (!isRelated) return;\n\n const parts = event.type.split('.');\n const category = parts[0] === 'system' ? parts[1] : parts[0];\n const keys = getInvalidationKeys(event);\n\n if (category === 'escalation') {\n keys.push(['escalations', 'by-workflow', workflowId]);\n }\n\n invalidate(keys);\n });\n}\n\n/**\n * Invalidate workflow set and YAML workflow queries when plan-related events fire.\n * Covers the planner workflow and all child builder workflows.\n */\nexport function usePlanDetailEvents(plannerWorkflowId: string | undefined): void {\n const invalidate = useDebouncedInvalidation(400);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.>`, (event) => {\n if (!plannerWorkflowId) return;\n\n const isRelated = event.workflowId === plannerWorkflowId\n || event.workflowId?.includes(plannerWorkflowId);\n if (!isRelated) return;\n\n const keys = getInvalidationKeys(event);\n keys.push(['workflowSets']);\n keys.push(['yamlWorkflows']);\n invalidate(keys);\n });\n}\n\n/**\n * Invalidate process detail queries on task/workflow events for a specific origin.\n */\nexport function useProcessDetailEvents(originId: string | undefined): void {\n const invalidate = useDebouncedInvalidation(300);\n\n const handler = useCallback((event: any) => {\n if (!originId) return;\n if (event.originId !== originId && event.workflowId !== originId) return;\n invalidate([['processes', originId]]);\n }, [originId, invalidate]);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.system.task.>`, handler);\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.system.workflow.>`, handler);\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.system.escalation.>`, handler);\n}\n\n/**\n * Invalidate escalation stats (EscalationsOverview) on escalation events.\n */\nexport function useEscalationStatsEvents(): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.system.escalation.>`, () => {\n invalidate([['escalationStats']]);\n });\n}\n\n/**\n * Invalidate station metrics (Operations page + station detail) on escalation\n * events. Push-driven only: escalation resolves/claims/creates are the sole\n * things that move the numbers, so the socket event is the complete refresh\n * signal. The 600ms debounce collapses a resolve burst into one refetch.\n */\nexport function useStationMetricsEvents(): void {\n const invalidate = useDebouncedInvalidation(600);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.system.escalation.>`, () => {\n invalidate([['stationMetrics']]);\n });\n}\n\n/**\n * Invalidate escalation list queries on escalation events.\n */\nexport function useEscalationListEvents(): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.system.escalation.>`, () => {\n invalidate([['escalations']]);\n });\n}\n\n/**\n * Invalidate a single escalation detail on escalation events for that ID.\n */\nexport function useEscalationDetailEvents(escalationId: string | undefined): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.system.escalation.>`, (event) => {\n if (!escalationId) return;\n if (event.escalationId === escalationId) {\n invalidate([['escalations', escalationId], ['escalations'], ['escalationStats']]);\n }\n });\n}\n\n/**\n * Invalidate agent queries on agent lifecycle events.\n */\nexport function useAgentEvents(): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.system.agent.>`, () => {\n invalidate([['agents']]);\n });\n}\n\n/**\n * Invalidate knowledge queries on knowledge events.\n */\nexport function useKnowledgeEvents(): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.system.knowledge.>`, () => {\n invalidate([['knowledge']]);\n });\n}\n\n/**\n * Invalidate process list (ProcessesListPage) on task/workflow events.\n */\nexport function useProcessListEvents(): void {\n const invalidate = useDebouncedInvalidation(300);\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.system.task.>`, () => {\n invalidate([['processes']]);\n });\n\n useEventSubscription(`${NATS_SUBJECT_PREFIX}.system.workflow.>`, () => {\n invalidate([['processes']]);\n });\n}\n"],"names":["getInvalidationKeys","event","keys","parts","useDebouncedInvalidation","delayMs","qc","useQueryClient","pendingKeys","useRef","timer","useCallback","key","raw","useWorkflowListEvents","invalidate","useEventSubscription","NATS_SUBJECT_PREFIX","useWorkflowDetailEvents","workflowId","_a","category","useMcpQueryDetailEvents","usePlanDetailEvents","plannerWorkflowId","useProcessDetailEvents","originId","handler","useEscalationStatsEvents","useStationMetricsEvents","useEscalationListEvents","useEscalationDetailEvents","escalationId","useAgentEvents","useProcessListEvents"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as f}from"./vendor-query-B2UbickB.js";import{u as i}from"./controlplane-
|
|
2
|
-
//# sourceMappingURL=useNamespace-
|
|
1
|
+
import{a as f}from"./vendor-query-B2UbickB.js";import{u as i}from"./controlplane-CjK2cXaD.js";import{f as l}from"./vendor-react-CXumBFUA.js";function g(a="namespace"){const[m,c]=l(),{data:r,isLoading:n}=i(),o=m.get(a)||"",e=((r==null?void 0:r.apps)??[]).map(s=>s.appId).sort();f.useEffect(()=>{!o&&e.length>0&&!n&&c(s=>{const t=new URLSearchParams(s);return t.set(a,e[0]),t},{replace:!0})},[o,e.length,n]);const u=s=>{c(t=>{const p=new URLSearchParams(t);return p.set(a,s),p})};return{namespace:o||e[0]||"",available:e,isLoading:n,setNamespace:u}}export{g as u};
|
|
2
|
+
//# sourceMappingURL=useNamespace-Dt2COnsG.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useNamespace-
|
|
1
|
+
{"version":3,"file":"useNamespace-Dt2COnsG.js","sources":["../../src/hooks/useNamespace.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { useControlPlaneApps } from '../api/controlplane';\n\n/**\n * Namespace-first hook. Queries available HotMesh namespaces,\n * auto-selects the first one if no URL param, and keeps the URL\n * in sync. Uses replaceState (not pushState) to avoid history spam.\n */\nexport function useNamespace(paramName = 'namespace') {\n const [params, setParams] = useSearchParams();\n const { data: apps, isLoading } = useControlPlaneApps();\n\n const selected = params.get(paramName) || '';\n const available = (apps?.apps ?? []).map((a) => a.appId).sort();\n\n useEffect(() => {\n if (!selected && available.length > 0 && !isLoading) {\n setParams((prev) => {\n const next = new URLSearchParams(prev);\n next.set(paramName, available[0]);\n return next;\n }, { replace: true });\n }\n }, [selected, available.length, isLoading]);\n\n const setNamespace = (ns: string) => {\n setParams((prev) => {\n const next = new URLSearchParams(prev);\n next.set(paramName, ns);\n return next;\n });\n };\n\n return { namespace: selected || available[0] || '', available, isLoading, setNamespace };\n}\n"],"names":["useNamespace","paramName","params","setParams","useSearchParams","apps","isLoading","useControlPlaneApps","selected","available","a","useEffect","prev","next","setNamespace","ns"],"mappings":"6IASO,SAASA,EAAaC,EAAY,YAAa,CACpD,KAAM,CAACC,EAAQC,CAAS,EAAIC,EAAA,EACtB,CAAE,KAAMC,EAAM,UAAAC,CAAA,EAAcC,EAAA,EAE5BC,EAAWN,EAAO,IAAID,CAAS,GAAK,GACpCQ,IAAaJ,GAAA,YAAAA,EAAM,OAAQ,CAAA,GAAI,IAAKK,GAAMA,EAAE,KAAK,EAAE,KAAA,EAEzDC,EAAAA,UAAU,IAAM,CACV,CAACH,GAAYC,EAAU,OAAS,GAAK,CAACH,GACxCH,EAAWS,GAAS,CAClB,MAAMC,EAAO,IAAI,gBAAgBD,CAAI,EACrC,OAAAC,EAAK,IAAIZ,EAAWQ,EAAU,CAAC,CAAC,EACzBI,CACT,EAAG,CAAE,QAAS,GAAM,CAExB,EAAG,CAACL,EAAUC,EAAU,OAAQH,CAAS,CAAC,EAE1C,MAAMQ,EAAgBC,GAAe,CACnCZ,EAAWS,GAAS,CAClB,MAAMC,EAAO,IAAI,gBAAgBD,CAAI,EACrC,OAAAC,EAAK,IAAIZ,EAAWc,CAAE,EACfF,CACT,CAAC,CACH,EAEA,MAAO,CAAE,UAAWL,GAAYC,EAAU,CAAC,GAAK,GAAI,UAAAA,EAAW,UAAAH,EAAW,aAAAQ,CAAA,CAC5E"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as r}from"./vendor-query-B2UbickB.js";import{c as y,N as d}from"./index-
|
|
2
|
-
//# sourceMappingURL=useYamlActivityEvents
|
|
1
|
+
import{a as r}from"./vendor-query-B2UbickB.js";import{c as y,N as d}from"./index-DYcP4jyl.js";function F(o){const[n,S]=r.useState([]),[p,f]=r.useState("idle"),w=r.useCallback(i=>{var m;if(!o||i.workflowId!==o)return;const c=((m=i.type)==null?void 0:m.split("."))??[];if(c[1]!=="activity")return;const s=i.activityName,t=i.data,a=`activity.${c[c.length-1]}`;S(l=>{const u=l.find(e=>e.activityId===s);return a==="activity.started"?u?l.map(e=>e.activityId===s?{...e,status:"running"}:e):[...l,{activityId:s,title:(t==null?void 0:t.title)||s,toolName:t==null?void 0:t.toolName,toolSource:t==null?void 0:t.toolSource,stepIndex:(t==null?void 0:t.stepIndex)??l.length,totalSteps:(t==null?void 0:t.totalSteps)??0,status:"running"}]:a==="activity.completed"&&u?l.map(e=>e.activityId===s?{...e,status:"completed"}:e):a==="activity.failed"&&u?l.map(e=>e.activityId===s?{...e,status:"failed",error:t==null?void 0:t.error}:e):l})},[o]),k=r.useCallback(i=>{var s;if(!o||i.workflowId!==o)return;const c=(s=i.type)==null?void 0:s.split(".").pop();c==="completed"&&f("completed"),c==="failed"&&f("failed")},[o]);y(o?`${d}.system.activity.>`:"",w),y(o?`${d}.system.workflow.>`:"",k);const v=n.length>0&&n.every(i=>i.status==="completed"||i.status==="failed"),g=n.some(i=>i.status==="failed");return{steps:n,isComplete:v||p==="completed",isFailed:g||p==="failed"}}export{F as u};
|
|
2
|
+
//# sourceMappingURL=useYamlActivityEvents--i7p1Ta9.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useYamlActivityEvents
|
|
1
|
+
{"version":3,"file":"useYamlActivityEvents--i7p1Ta9.js","sources":["../../src/hooks/useYamlActivityEvents.ts"],"sourcesContent":["import { useState, useCallback } from 'react';\nimport { useEventSubscription } from './useEventContext';\nimport { NATS_SUBJECT_PREFIX } from '../lib/nats/config';\n\nexport interface ActivityStep {\n activityId: string;\n title: string;\n toolName?: string;\n toolSource?: string;\n stepIndex: number;\n totalSteps: number;\n status: 'pending' | 'running' | 'completed' | 'failed';\n error?: string;\n}\n\n/**\n * Subscribe to activity and workflow lifecycle events for a specific graph job.\n * Returns live step progress and overall workflow status.\n *\n * Hook-only flows (no worker activities) produce no activity events, so\n * isComplete/isFailed is derived from workflow.completed/failed events instead.\n */\nexport function useYamlActivityEvents(jobId: string | null): {\n steps: ActivityStep[];\n isComplete: boolean;\n isFailed: boolean;\n} {\n const [steps, setSteps] = useState<ActivityStep[]>([]);\n const [workflowStatus, setWorkflowStatus] = useState<'idle' | 'completed' | 'failed'>('idle');\n\n const activityHandler = useCallback((event: any) => {\n if (!jobId || event.workflowId !== jobId) return;\n // event.type is the full topic: 'system.activity.{wfId}.{name}.{action}'\n const parts = (event.type as string | undefined)?.split('.') ?? [];\n if (parts[1] !== 'activity') return;\n\n const activityId = event.activityName as string;\n const data = event.data as Record<string, any> | undefined;\n // Normalise to short form for comparisons below (e.g. 'activity.started')\n const eventType = `activity.${parts[parts.length - 1]}`;\n\n setSteps((prev) => {\n const existing = prev.find((s) => s.activityId === activityId);\n\n if (eventType === 'activity.started') {\n if (existing) {\n return prev.map((s) => s.activityId === activityId ? { ...s, status: 'running' as const } : s);\n }\n return [...prev, {\n activityId,\n title: data?.title || activityId,\n toolName: data?.toolName,\n toolSource: data?.toolSource,\n stepIndex: data?.stepIndex ?? prev.length,\n totalSteps: data?.totalSteps ?? 0,\n status: 'running' as const,\n }];\n }\n\n if (eventType === 'activity.completed' && existing) {\n return prev.map((s) => s.activityId === activityId ? { ...s, status: 'completed' as const } : s);\n }\n\n if (eventType === 'activity.failed' && existing) {\n return prev.map((s) => s.activityId === activityId ? { ...s, status: 'failed' as const, error: data?.error } : s);\n }\n\n return prev;\n });\n }, [jobId]);\n\n const workflowHandler = useCallback((event: any) => {\n if (!jobId || event.workflowId !== jobId) return;\n // event.type is the full topic: 'system.workflow.{wfId}.{action}'\n const action = (event.type as string | undefined)?.split('.').pop();\n if (action === 'completed') setWorkflowStatus('completed');\n if (action === 'failed') setWorkflowStatus('failed');\n }, [jobId]);\n\n useEventSubscription(\n jobId ? `${NATS_SUBJECT_PREFIX}.system.activity.>` : '',\n activityHandler,\n );\n useEventSubscription(\n jobId ? `${NATS_SUBJECT_PREFIX}.system.workflow.>` : '',\n workflowHandler,\n );\n\n const stepsComplete = steps.length > 0 && steps.every((s) => s.status === 'completed' || s.status === 'failed');\n const stepsFailed = steps.some((s) => s.status === 'failed');\n\n const isComplete = stepsComplete || workflowStatus === 'completed';\n const isFailed = stepsFailed || workflowStatus === 'failed';\n\n return { steps, isComplete, isFailed };\n}\n"],"names":["useYamlActivityEvents","jobId","steps","setSteps","useState","workflowStatus","setWorkflowStatus","activityHandler","useCallback","event","parts","_a","activityId","data","eventType","prev","existing","s","workflowHandler","action","useEventSubscription","NATS_SUBJECT_PREFIX","stepsComplete","stepsFailed"],"mappings":"8FAsBO,SAASA,EAAsBC,EAIpC,CACA,KAAM,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SAAyB,CAAA,CAAE,EAC/C,CAACC,EAAgBC,CAAiB,EAAIF,EAAAA,SAA0C,MAAM,EAEtFG,EAAkBC,cAAaC,GAAe,OAClD,GAAI,CAACR,GAASQ,EAAM,aAAeR,EAAO,OAE1C,MAAMS,IAASC,EAAAF,EAAM,OAAN,YAAAE,EAAmC,MAAM,OAAQ,CAAA,EAChE,GAAID,EAAM,CAAC,IAAM,WAAY,OAE7B,MAAME,EAAaH,EAAM,aACnBI,EAAOJ,EAAM,KAEbK,EAAY,YAAYJ,EAAMA,EAAM,OAAS,CAAC,CAAC,GAErDP,EAAUY,GAAS,CACjB,MAAMC,EAAWD,EAAK,KAAME,GAAMA,EAAE,aAAeL,CAAU,EAE7D,OAAIE,IAAc,mBACZE,EACKD,EAAK,IAAKE,GAAMA,EAAE,aAAeL,EAAa,CAAE,GAAGK,EAAG,OAAQ,SAAA,EAAuBA,CAAC,EAExF,CAAC,GAAGF,EAAM,CACf,WAAAH,EACA,OAAOC,GAAA,YAAAA,EAAM,QAASD,EACtB,SAAUC,GAAA,YAAAA,EAAM,SAChB,WAAYA,GAAA,YAAAA,EAAM,WAClB,WAAWA,GAAA,YAAAA,EAAM,YAAaE,EAAK,OACnC,YAAYF,GAAA,YAAAA,EAAM,aAAc,EAChC,OAAQ,SAAA,CACT,EAGCC,IAAc,sBAAwBE,EACjCD,EAAK,IAAKE,GAAMA,EAAE,aAAeL,EAAa,CAAE,GAAGK,EAAG,OAAQ,WAAA,EAAyBA,CAAC,EAG7FH,IAAc,mBAAqBE,EAC9BD,EAAK,IAAKE,GAAMA,EAAE,aAAeL,EAAa,CAAE,GAAGK,EAAG,OAAQ,SAAmB,MAAOJ,GAAA,YAAAA,EAAM,KAAA,EAAUI,CAAC,EAG3GF,CACT,CAAC,CACH,EAAG,CAACd,CAAK,CAAC,EAEJiB,EAAkBV,cAAaC,GAAe,OAClD,GAAI,CAACR,GAASQ,EAAM,aAAeR,EAAO,OAE1C,MAAMkB,GAAUR,EAAAF,EAAM,OAAN,YAAAE,EAAmC,MAAM,KAAK,MAC1DQ,IAAW,aAAab,EAAkB,WAAW,EACrDa,IAAW,UAAUb,EAAkB,QAAQ,CACrD,EAAG,CAACL,CAAK,CAAC,EAEVmB,EACEnB,EAAQ,GAAGoB,CAAmB,qBAAuB,GACrDd,CAAA,EAEFa,EACEnB,EAAQ,GAAGoB,CAAmB,qBAAuB,GACrDH,CAAA,EAGF,MAAMI,EAAgBpB,EAAM,OAAS,GAAKA,EAAM,MAAOe,GAAMA,EAAE,SAAW,aAAeA,EAAE,SAAW,QAAQ,EACxGM,EAAcrB,EAAM,KAAMe,GAAMA,EAAE,SAAW,QAAQ,EAK3D,MAAO,CAAE,MAAAf,EAAO,WAHGoB,GAAiBjB,IAAmB,YAG3B,SAFXkB,GAAelB,IAAmB,QAEvB,CAC9B"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as o,b as t,c as n}from"./vendor-query-B2UbickB.js";import{d as u}from"./index-
|
|
2
|
-
//# sourceMappingURL=users-
|
|
1
|
+
import{u as o,b as t,c as n}from"./vendor-query-B2UbickB.js";import{d as u}from"./index-DYcP4jyl.js";function d(e={}){const s=new URLSearchParams;return e.role&&s.set("role",e.role),e.roleType&&s.set("roleType",e.roleType),e.status&&s.set("status",e.status),e.search&&s.set("search",e.search),e.limit&&s.set("limit",String(e.limit)),e.offset!==void 0&&s.set("offset",String(e.offset)),o({queryKey:["users",e],queryFn:()=>u(`/users?${s}`)})}function l(e){return o({queryKey:["users",e],queryFn:()=>u(`/users/${e}`),enabled:!!e})}function q(){const e=t();return n({mutationFn:s=>u("/users",{method:"POST",body:JSON.stringify(s)}),onSuccess:()=>{e.invalidateQueries({queryKey:["users"]})}})}function f(){const e=t();return n({mutationFn:({id:s,...r})=>u(`/users/${s}`,{method:"PUT",body:JSON.stringify(r)}),onSuccess:()=>{e.invalidateQueries({queryKey:["users"]})}})}function S(){const e=t();return n({mutationFn:s=>u(`/users/${s}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["users"]})}})}function U(){const e=t();return n({mutationFn:({userId:s,role:r,type:i,read_scope:a,write_scope:y})=>u(`/users/${s}/roles`,{method:"POST",body:JSON.stringify({role:r,type:i,read_scope:a,write_scope:y})}),onSuccess:()=>{e.invalidateQueries({queryKey:["users"]})}})}function h(){const e=t();return n({mutationFn:({userId:s,role:r})=>u(`/users/${s}/roles/${encodeURIComponent(r)}`,{method:"DELETE"}),onSuccess:()=>{e.invalidateQueries({queryKey:["users"]})}})}export{l as a,q as b,f as c,U as d,h as e,S as f,d as u};
|
|
2
|
+
//# sourceMappingURL=users-BsRZkm9v.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users-
|
|
1
|
+
{"version":3,"file":"users-BsRZkm9v.js","sources":["../../src/api/users.ts"],"sourcesContent":["import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { apiFetch } from './client';\nimport type { LTUserRecord, LTRoleType, LTReadScope, LTWriteScope } from './types';\n\ninterface UserListResponse {\n users: LTUserRecord[];\n total: number;\n}\n\ninterface UserFilters {\n role?: string;\n roleType?: string;\n status?: string;\n search?: string;\n limit?: number;\n offset?: number;\n}\n\nexport function useUsers(filters: UserFilters = {}) {\n const params = new URLSearchParams();\n if (filters.role) params.set('role', filters.role);\n if (filters.roleType) params.set('roleType', filters.roleType);\n if (filters.status) params.set('status', filters.status);\n if (filters.search) params.set('search', filters.search);\n if (filters.limit) params.set('limit', String(filters.limit));\n if (filters.offset !== undefined) params.set('offset', String(filters.offset));\n\n return useQuery<UserListResponse>({\n queryKey: ['users', filters],\n queryFn: () => apiFetch(`/users?${params}`),\n });\n}\n\nexport function useUser(id: string) {\n return useQuery<LTUserRecord>({\n queryKey: ['users', id],\n queryFn: () => apiFetch(`/users/${id}`),\n enabled: !!id,\n });\n}\n\nexport function useCreateUser() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (data: {\n external_id: string;\n email?: string;\n display_name?: string;\n password?: string;\n roles?: { role: string; type: LTRoleType }[];\n }) =>\n apiFetch('/users', {\n method: 'POST',\n body: JSON.stringify(data),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['users'] });\n },\n });\n}\n\nexport function useUpdateUser() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({\n id,\n ...data\n }: {\n id: string;\n email?: string;\n display_name?: string;\n status?: string;\n }) =>\n apiFetch(`/users/${id}`, {\n method: 'PUT',\n body: JSON.stringify(data),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['users'] });\n },\n });\n}\n\nexport function useDeleteUser() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (id: string) =>\n apiFetch(`/users/${id}`, { method: 'DELETE' }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['users'] });\n },\n });\n}\n\nexport function useAddUserRole() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({\n userId,\n role,\n type,\n read_scope,\n write_scope,\n }: {\n userId: string;\n role: string;\n type: LTRoleType;\n read_scope?: LTReadScope;\n write_scope?: LTWriteScope;\n }) =>\n apiFetch(`/users/${userId}/roles`, {\n method: 'POST',\n body: JSON.stringify({ role, type, read_scope, write_scope }),\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['users'] });\n },\n });\n}\n\nexport function useRemoveUserRole() {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: ({ userId, role }: { userId: string; role: string }) =>\n apiFetch(`/users/${userId}/roles/${encodeURIComponent(role)}`, {\n method: 'DELETE',\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: ['users'] });\n },\n });\n}\n"],"names":["useUsers","filters","params","useQuery","apiFetch","useUser","id","useCreateUser","queryClient","useQueryClient","useMutation","data","useUpdateUser","useDeleteUser","useAddUserRole","userId","role","type","read_scope","write_scope","useRemoveUserRole"],"mappings":"qGAkBO,SAASA,EAASC,EAAuB,GAAI,CAClD,MAAMC,EAAS,IAAI,gBACnB,OAAID,EAAQ,MAAMC,EAAO,IAAI,OAAQD,EAAQ,IAAI,EAC7CA,EAAQ,UAAUC,EAAO,IAAI,WAAYD,EAAQ,QAAQ,EACzDA,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,QAAQC,EAAO,IAAI,SAAUD,EAAQ,MAAM,EACnDA,EAAQ,OAAOC,EAAO,IAAI,QAAS,OAAOD,EAAQ,KAAK,CAAC,EACxDA,EAAQ,SAAW,QAAWC,EAAO,IAAI,SAAU,OAAOD,EAAQ,MAAM,CAAC,EAEtEE,EAA2B,CAChC,SAAU,CAAC,QAASF,CAAO,EAC3B,QAAS,IAAMG,EAAS,UAAUF,CAAM,EAAE,CAAA,CAC3C,CACH,CAEO,SAASG,EAAQC,EAAY,CAClC,OAAOH,EAAuB,CAC5B,SAAU,CAAC,QAASG,CAAE,EACtB,QAAS,IAAMF,EAAS,UAAUE,CAAE,EAAE,EACtC,QAAS,CAAC,CAACA,CAAA,CACZ,CACH,CAEO,SAASC,GAAgB,CAC9B,MAAMC,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaC,GAOXP,EAAS,SAAU,CACjB,OAAQ,OACR,KAAM,KAAK,UAAUO,CAAI,CAAA,CAC1B,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAU,CAAC,OAAO,EAAG,CACvD,CAAA,CACD,CACH,CAEO,SAASI,GAAgB,CAC9B,MAAMJ,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAY,CAAC,CACX,GAAAJ,EACA,GAAGK,CAAA,IAOHP,EAAS,UAAUE,CAAE,GAAI,CACvB,OAAQ,MACR,KAAM,KAAK,UAAUK,CAAI,CAAA,CAC1B,EACH,UAAW,IAAM,CACfH,EAAY,kBAAkB,CAAE,SAAU,CAAC,OAAO,EAAG,CACvD,CAAA,CACD,CACH,CAEO,SAASK,GAAgB,CAC9B,MAAML,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAaJ,GACXF,EAAS,UAAUE,CAAE,GAAI,CAAE,OAAQ,SAAU,EAC/C,UAAW,IAAM,CACfE,EAAY,kBAAkB,CAAE,SAAU,CAAC,OAAO,EAAG,CACvD,CAAA,CACD,CACH,CAEO,SAASM,GAAiB,CAC/B,MAAMN,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAY,CAAC,CACX,OAAAK,EACA,KAAAC,EACA,KAAAC,EACA,WAAAC,EACA,YAAAC,CAAA,IAQAf,EAAS,UAAUW,CAAM,SAAU,CACjC,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,KAAAC,EAAM,KAAAC,EAAM,WAAAC,EAAY,YAAAC,EAAa,CAAA,CAC7D,EACH,UAAW,IAAM,CACfX,EAAY,kBAAkB,CAAE,SAAU,CAAC,OAAO,EAAG,CACvD,CAAA,CACD,CACH,CAEO,SAASY,GAAoB,CAClC,MAAMZ,EAAcC,EAAA,EACpB,OAAOC,EAAY,CACjB,WAAY,CAAC,CAAE,OAAAK,EAAQ,KAAAC,CAAA,IACrBZ,EAAS,UAAUW,CAAM,UAAU,mBAAmBC,CAAI,CAAC,GAAI,CAC7D,OAAQ,QAAA,CACT,EACH,UAAW,IAAM,CACfR,EAAY,kBAAkB,CAAE,SAAU,CAAC,OAAO,EAAG,CACvD,CAAA,CACD,CACH"}
|